feat: login rewritten — split-screen auth (white form column + living aurora pane, tagline), 2026 convention
This commit is contained in:
+13
-5
@@ -2,16 +2,24 @@
|
|||||||
import Base from '../layouts/Base.astro';
|
import Base from '../layouts/Base.astro';
|
||||||
---
|
---
|
||||||
<Base title="CTAO Science Portal — Sign in" description="Sign in via CTAO AAI (mock)">
|
<Base title="CTAO Science Portal — Sign in" description="Sign in via CTAO AAI (mock)">
|
||||||
<section class="auth-band">
|
{/* Split-screen auth (2026 convention: Linear/Stripe/Vercel) — clean white
|
||||||
<div class="band-bg" aria-hidden="true"></div>
|
form column + living brand aurora pane. Auth pages are scanned, not read:
|
||||||
<div class="auth-card">
|
one line of copy, one action. */}
|
||||||
|
<section class="auth">
|
||||||
|
<div class="auth-pane">
|
||||||
<img class="auth-logo" src="/brand/CTAO_Logo_positive.svg" alt="CTAO" />
|
<img class="auth-logo" src="/brand/CTAO_Logo_positive.svg" alt="CTAO" />
|
||||||
<span class="badge-mock">Mock — AAI integration pending</span>
|
|
||||||
<h1>Sign in</h1>
|
<h1>Sign in</h1>
|
||||||
{/* Auth pages are scanned, not read — one line, no reassurance prose */}
|
|
||||||
<p class="muted">Use your CTAO account — single sign-on via CTAO AAI.</p>
|
<p class="muted">Use your CTAO account — single sign-on via CTAO AAI.</p>
|
||||||
<button class="btn btn-wide" type="button">Continue with your CTAO account</button>
|
<button class="btn btn-wide" type="button">Continue with your CTAO account</button>
|
||||||
<p class="notice">No account? <a>Register via CTAO AAI</a></p>
|
<p class="notice">No account? <a>Register via CTAO AAI</a></p>
|
||||||
|
<p class="auth-foot">
|
||||||
|
<span class="badge-mock">Mock — AAI integration pending</span>
|
||||||
|
<a class="back" href="/">← Back to the portal</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="auth-visual auth-band" aria-hidden="true">
|
||||||
|
<div class="band-bg"></div>
|
||||||
|
<p class="auth-tagline">Exploring the Universe<br />at the Highest Energies</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</Base>
|
</Base>
|
||||||
|
|||||||
+31
-17
@@ -642,26 +642,40 @@ mark { background: var(--tint-cherenkov); color: inherit; border-radius: calc(va
|
|||||||
.pill--review { color: var(--text); background: #fff; }
|
.pill--review { color: var(--text); background: #fff; }
|
||||||
.pill--draft { color: var(--muted); background: #fff; }
|
.pill--draft { color: var(--muted); background: #fff; }
|
||||||
|
|
||||||
/* Auth (login mock) — nebula backdrop + floating card; the ONLY navy band
|
/* Auth (login mock) — split-screen (2026 auth convention): white form column,
|
||||||
besides the home hero */
|
living aurora pane. The aurora pane reuses .auth-band (the ONLY navy band
|
||||||
.auth-band {
|
besides the home hero) so the static/animated nebula rules apply unchanged. */
|
||||||
min-height: calc(100dvh - 56px); position: relative;
|
.auth {
|
||||||
display: grid; place-items: center; padding: var(--space-band) var(--gutter);
|
display: grid; grid-template-columns: minmax(400px, 40%) 1fr;
|
||||||
background: var(--nebula), var(--galaxy);
|
min-height: calc(100dvh - 56px);
|
||||||
}
|
}
|
||||||
.auth-card {
|
.auth-pane {
|
||||||
position: relative; background: #fff; border-radius: calc(var(--radius) + 8px);
|
display: flex; flex-direction: column; justify-content: center;
|
||||||
padding: var(--space-l); max-width: 440px; width: 100%;
|
gap: var(--space-s); padding: var(--space-band) clamp(28px, 6vw, 88px);
|
||||||
box-shadow: var(--shadow-lifted);
|
max-width: 560px;
|
||||||
}
|
}
|
||||||
.auth-logo { height: 24px; width: auto; margin-bottom: var(--space-m); }
|
.auth-logo { height: 26px; width: auto; margin-bottom: var(--space-l); align-self: flex-start; }
|
||||||
/* Whisper badge sits top-right, off the reading flow (back in flow ≤480px
|
.auth-pane h1 { color: var(--galaxy); margin: 0; font-size: var(--fs-h2); }
|
||||||
where it would collide with the logo) */
|
.auth-pane .muted { color: var(--muted); font-size: var(--fs-s); margin: 0 0 var(--space-s); }
|
||||||
.auth-card .badge-mock { position: absolute; top: var(--space-l); right: var(--space-l); margin: 0; }
|
|
||||||
@media (max-width: 480px) { .auth-card .badge-mock { position: static; margin-bottom: 14px; } }
|
|
||||||
.auth-card h1 { color: var(--galaxy); margin: 6px 0 10px; font-size: var(--fs-xl); }
|
|
||||||
.auth-card .muted { color: var(--muted); font-size: var(--fs-s); }
|
|
||||||
.btn-wide { width: 100%; margin-top: var(--space-s); }
|
.btn-wide { width: 100%; margin-top: var(--space-s); }
|
||||||
|
.auth-foot {
|
||||||
|
display: flex; align-items: center; justify-content: space-between; gap: var(--space-s);
|
||||||
|
margin-top: var(--space-xl); flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.auth-foot .badge-mock { margin: 0; }
|
||||||
|
.auth-foot .back { font-size: var(--fs-s); }
|
||||||
|
.auth-visual { position: relative; background: var(--nebula), var(--galaxy); }
|
||||||
|
.auth-tagline {
|
||||||
|
position: absolute; left: clamp(28px, 5vw, 64px); bottom: clamp(28px, 6vh, 64px);
|
||||||
|
margin: 0; color: #fff; font-family: var(--font-display); font-weight: 500;
|
||||||
|
font-size: var(--fs-xl); letter-spacing: -0.015em; line-height: 1.25;
|
||||||
|
}
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
.auth { grid-template-columns: 1fr; min-height: 0; }
|
||||||
|
.auth-visual { order: -1; min-height: 180px; }
|
||||||
|
.auth-tagline { display: none; }
|
||||||
|
.auth-pane { padding: var(--space-l) var(--gutter) var(--space-xl); max-width: none; }
|
||||||
|
}
|
||||||
|
|
||||||
/* Footer — brand band: logo + descriptor / spec links (§3.3.1) / demo note + flash.
|
/* Footer — brand band: logo + descriptor / spec links (§3.3.1) / demo note + flash.
|
||||||
No top margin: Moon/Galaxy bands meet it flush; white pages pad via .page/.article. */
|
No top margin: Moon/Galaxy bands meet it flush; white pages pad via .page/.article. */
|
||||||
|
|||||||
Reference in New Issue
Block a user