120 lines
2.7 KiB
SCSS
120 lines
2.7 KiB
SCSS
@use 'mixins' as *;
|
|
|
|
// ---------- Sign in ----------
|
|
// Anyone may read Mathew; writing it takes an account. The gate is what a
|
|
// signed-out visitor of the editor finds in the form's place (AuthGate.vue), and
|
|
// the popup is the way in from anywhere (AuthModal.vue). The popup sits above the
|
|
// fullscreen editor (1000) and its own popups (1100, 1150): a save that comes
|
|
// back refusing an expired session has to be answered where the editor already
|
|
// fills the screen.
|
|
.auth-overlay { @include overlay(1160); }
|
|
|
|
.auth-modal {
|
|
@include sheet(420px);
|
|
|
|
&:focus, &:focus-visible { outline: none; }
|
|
}
|
|
|
|
.auth-modal-head { @include sheet-head; }
|
|
|
|
.auth-title { @include sheet-title; }
|
|
|
|
.auth-modal-body { padding: 18px; }
|
|
|
|
// the two ways in, side by side
|
|
.auth-tabs { @include segmented; margin-bottom: 18px; }
|
|
|
|
.auth-tab { @include segmented-tab(7px 14px, 0.84rem); }
|
|
|
|
// why the popup turned up on its own — a session that expired mid-draft
|
|
.auth-notice {
|
|
margin: -6px 0 16px;
|
|
padding: 10px 12px;
|
|
border: 1px solid color-mix(in srgb, var(--danger) 30%, var(--border));
|
|
border-radius: 10px;
|
|
background: color-mix(in srgb, var(--danger) 7%, var(--surface));
|
|
color: var(--muted);
|
|
font-size: 0.84rem;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.auth-modal .field input {
|
|
width: 100%;
|
|
padding: 12px 14px;
|
|
border-radius: 11px;
|
|
border: 1px solid var(--border);
|
|
background: var(--bg-elev);
|
|
}
|
|
|
|
.auth-submit { width: 100%; margin-top: 2px; }
|
|
|
|
.auth-switch {
|
|
margin: 16px 0 0;
|
|
text-align: center;
|
|
font-size: 0.84rem;
|
|
color: var(--muted);
|
|
|
|
button {
|
|
color: var(--accent);
|
|
font-weight: 650;
|
|
|
|
&:hover { text-decoration: underline; }
|
|
}
|
|
}
|
|
|
|
@include popup-anim(
|
|
'auth-popup',
|
|
'.auth-modal',
|
|
0.16s,
|
|
transform 0.2s cubic-bezier(0.22, 0.61, 0.36, 1),
|
|
-10px
|
|
);
|
|
|
|
// the editor's stand-in until there is a session
|
|
.auth-gate {
|
|
max-width: 480px;
|
|
margin: clamp(36px, 8vh, 92px) auto;
|
|
padding: 34px 30px 30px;
|
|
border: 1px solid var(--border);
|
|
border-radius: 18px;
|
|
background: var(--bg-elev);
|
|
box-shadow: var(--shadow-lg);
|
|
text-align: center;
|
|
}
|
|
|
|
.auth-gate-mark {
|
|
display: grid;
|
|
place-items: center;
|
|
width: 46px;
|
|
height: 46px;
|
|
margin: 0 auto 16px;
|
|
border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--border));
|
|
border-radius: 50%;
|
|
background: color-mix(in srgb, var(--accent) 10%, transparent);
|
|
color: var(--accent);
|
|
}
|
|
|
|
.auth-gate-title {
|
|
margin: 0 0 8px;
|
|
font-size: 1.3rem;
|
|
letter-spacing: -0.01em;
|
|
color: var(--text);
|
|
}
|
|
|
|
.auth-gate-text {
|
|
max-width: 38ch;
|
|
margin: 0 auto 22px;
|
|
color: var(--muted);
|
|
font-size: 0.93rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.auth-gate-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
gap: 10px;
|
|
}
|
|
|
|
.auth-gate-fine { margin: 18px 0 0; font-size: 0.8rem; color: var(--faint); }
|