/* Still waitlist: one calm, centred screen. */
:root{--ink:#1f2433;--body:#646b7b;--muted:#9097a6;--accent:#4d61d5;--accent-deep:#3e51bf;--line:#e3e7f0;--bg:#f6f7fb;--ok:#3f8a64;--err:#b65147;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;color:var(--ink);-webkit-font-smoothing:antialiased}
*{box-sizing:border-box}html,body{height:100%}
body{margin:0;background:var(--bg)}
h1,p{margin:0}
.page{min-height:100vh;min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;justify-items:center;padding:32px 24px 24px}
.brand{display:inline-flex;align-items:center;gap:9px;font-size:22px;font-weight:700;letter-spacing:-1px;color:var(--ink);text-decoration:none;opacity:.9}.dot{color:var(--accent)}
.mark{width:26px;height:26px;color:var(--accent);display:inline-grid}.mark svg{width:100%;height:100%}
.content{align-self:center;width:100%;max-width:540px;text-align:center;padding:40px 0}
.eyebrow{display:inline-block;font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}
h1{font-size:clamp(38px,6.2vw,60px);line-height:1.04;letter-spacing:-.04em;font-weight:700;margin:18px 0 20px;text-wrap:balance}
.lede{font-size:17px;line-height:1.7;color:var(--body);max-width:470px;margin:0 auto;text-wrap:pretty}
.join{display:flex;gap:8px;max-width:440px;margin:36px auto 0;padding:6px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px rgba(31,36,51,.06)}
.join:focus-within{border-color:#c4cdf3;box-shadow:0 0 0 4px rgba(77,97,213,.10),0 10px 30px rgba(31,36,51,.06)}
.join input{flex:1;min-width:0;font:inherit;font-size:16px;color:var(--ink);background:transparent;border:0;outline:0;padding:0 12px;min-height:46px}
.join input::placeholder{color:#a8aebb}
.join button{font:inherit;font-size:15px;font-weight:600;color:#fff;background:var(--accent);border:0;border-radius:10px;padding:0 18px;min-height:46px;cursor:pointer;white-space:nowrap;transition:background .15s}
.join button:hover{background:var(--accent-deep)}.join button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.join button:disabled{opacity:.6;cursor:default}
.join .trap{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.join.invalid{border-color:#e8b9b2}
.note{margin-top:16px;font-size:13px;line-height:1.6;color:var(--muted);min-height:21px}.note.err{color:var(--err)}
.done{max-width:440px;margin:36px auto 0;padding:18px 20px;border-radius:14px;background:#fff;border:1px solid #d5eadf;color:var(--ok);font-size:15px;font-weight:600;line-height:1.6;display:flex;align-items:center;justify-content:center;gap:10px;animation:rise .35s ease}
.done svg{flex-shrink:0}
@keyframes rise{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.legal{font-size:12px;color:var(--muted)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
@media(max-width:520px){.page{padding:24px 20px 20px}.content{padding:28px 0}h1{margin:14px 0 16px}.lede{font-size:16px}
.join{flex-direction:column;padding:0;background:none;border:0;box-shadow:none;gap:10px;margin-top:30px}.join:focus-within{box-shadow:none}
.join input{background:#fff;border:1px solid var(--line);border-radius:12px;padding:0 14px;min-height:50px}.join input:focus{border-color:#c4cdf3;box-shadow:0 0 0 4px rgba(77,97,213,.10)}
.join button{min-height:50px;border-radius:12px}.join.invalid input{border-color:#e8b9b2}}
@media(prefers-reduced-motion:reduce){.done{animation:none}.join button{transition:none}}
/* Short screens (small phones, landscape): tighten so it still fits without scrolling. */
@media(max-height:640px){.page{padding-top:18px;padding-bottom:14px}.content{padding:14px 0}h1{font-size:clamp(32px,5.4vw,52px);margin:10px 0 12px}.lede{font-size:15px;line-height:1.6}.join{margin-top:22px}.note{margin-top:10px}.brand{font-size:20px}.mark{width:24px;height:24px}}
.done{display:block;text-align:center;text-wrap:balance}.done svg{display:inline-block;vertical-align:-3px;margin-right:8px}

/* Motion (tokens mirror src/motionTokens.ts). The entrance is animated by join.js with Motion;
   .reveal starts hidden only when motion is allowed, and shows anyway if the script never runs. */
:root{--dur-fast:150ms;--dur-base:200ms;--ease:cubic-bezier(.22,1,.36,1)}
@media(prefers-reduced-motion:no-preference){.reveal{opacity:0;animation:still-reveal-fallback 0s 1.6s forwards}}
@keyframes still-reveal-fallback{to{opacity:1;transform:none}}
.join button{transition:background-color var(--dur-base) var(--ease),box-shadow var(--dur-base) var(--ease),transform var(--dur-fast) var(--ease)}
.join button:not(:disabled):hover{box-shadow:0 6px 16px rgba(77,97,213,.28)}
.join button:not(:disabled):active{transform:scale(.97);box-shadow:0 2px 6px rgba(77,97,213,.22)}
.join{transition:border-color var(--dur-base) var(--ease),box-shadow var(--dur-base) var(--ease)}
.join input{transition:border-color var(--dur-base) var(--ease),box-shadow var(--dur-base) var(--ease)}
@media(prefers-reduced-motion:reduce){.join,.join input,.join button{transition:none}.join button:active{transform:none}}
.done:focus{outline:none}

/* Status pill: a softly pulsing "live" dot, sentence case (replaces the uppercase eyebrow). */
.status{display:inline-flex;align-items:center;gap:9px;font-size:13px;font-weight:500;color:#4f5668;background:rgba(255,255,255,.75);border:1px solid var(--line);border-radius:999px;padding:6px 14px 6px 12px;box-shadow:0 1px 2px rgba(31,36,51,.04)}
.live{position:relative;width:8px;height:8px;border-radius:50%;background:#2fb36b;flex-shrink:0}
.live::after{content:'';position:absolute;inset:0;border-radius:50%;background:#2fb36b;animation:still-live 2.4s cubic-bezier(.22,1,.36,1) infinite}
@keyframes still-live{0%{transform:scale(1);opacity:.55}70%,100%{transform:scale(2.6);opacity:0}}
@media(prefers-reduced-motion:reduce){.live::after{animation:none;opacity:0}}

/* Optical centring: sit the block a little above the true middle so the eye lands on the headline. */
.content{padding:40px 0 calc(40px + 15vh)}
h1{margin-top:22px}
@media(max-width:520px){.content{padding:28px 0 calc(28px + 6vh)}h1{margin-top:18px}}
@media(max-height:640px){.content{padding:12px 0 calc(12px + 4vh)}h1{margin-top:12px}}

/* Backdrop: a slow fluid gradient (soft colour fields drifting past each other) and four floating
   icons. Purely decorative, sits behind the page, and holds still when motion is reduced. */
.page{position:relative;z-index:1}
.scene{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;animation:scene-in 1.4s ease both}
@keyframes scene-in{from{opacity:0}to{opacity:1}}
.fluid{position:absolute;inset:0}
.blob{position:absolute;display:block;width:70vmax;height:70vmax;border-radius:50%;will-change:transform}
.b1{left:-26vmax;top:-30vmax;background:radial-gradient(closest-side,rgba(150,166,255,.62),rgba(150,166,255,0));animation:drift-1 26s ease-in-out infinite alternate}
.b2{right:-28vmax;top:-22vmax;background:radial-gradient(closest-side,rgba(196,170,255,.50),rgba(196,170,255,0));animation:drift-2 31s ease-in-out infinite alternate}
.b3{left:-18vmax;bottom:-36vmax;background:radial-gradient(closest-side,rgba(140,214,255,.48),rgba(140,214,255,0));animation:drift-3 29s ease-in-out infinite alternate}
.b4{right:-22vmax;bottom:-34vmax;background:radial-gradient(closest-side,rgba(255,196,170,.42),rgba(255,196,170,0));animation:drift-4 34s ease-in-out infinite alternate}
@keyframes drift-1{to{transform:translate3d(22vmax,14vmax,0) scale(1.18)}}
@keyframes drift-2{to{transform:translate3d(-20vmax,18vmax,0) scale(.86)}}
@keyframes drift-3{to{transform:translate3d(26vmax,-14vmax,0) scale(.9)}}
@keyframes drift-4{to{transform:translate3d(-24vmax,-16vmax,0) scale(1.2)}}
/* Keeps the words on a calm, light field whatever drifts behind them. */
.fluid::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 46% 44% at 50% 44%,rgba(246,247,251,.94) 0%,rgba(246,247,251,.7) 55%,rgba(246,247,251,0) 100%)}
.float{position:absolute;display:block;height:auto;filter:drop-shadow(0 18px 22px rgba(52,64,140,.22));transform:rotate(var(--tilt));animation:bob var(--pace) ease-in-out infinite alternate;animation-delay:var(--wait);will-change:transform}
@keyframes bob{from{transform:translate3d(0,7px,0) rotate(var(--tilt))}to{transform:translate3d(0,-9px,0) rotate(calc(var(--tilt) + 4deg))}}
.f-coin{--tilt:-14deg;--pace:6.5s;--wait:-2s;width:92px;left:max(4%,calc(50% - 520px));top:24%}
.f-calendar{--tilt:10deg;--pace:8s;--wait:-5s;width:104px;right:max(4%,calc(50% - 540px));top:19%}
.f-card{--tilt:-9deg;--pace:9s;--wait:-1s;width:128px;left:max(6%,calc(50% - 480px));bottom:18%}
.f-check{--tilt:12deg;--pace:7s;--wait:-4s;width:76px;right:max(7%,calc(50% - 470px));bottom:23%}
/* Narrower screens: the icons shrink and move to the corners, clear of the words. */
@media(max-width:980px){.f-coin{width:68px;left:3%;top:13%}.f-calendar{width:76px;right:3%;top:11%}.f-card{width:92px;left:3%;bottom:8%}.f-check{width:58px;right:4%;bottom:10%}}
@media(max-width:520px){.f-coin{width:52px;left:-8px;top:74px}.f-calendar{width:58px;right:-10px;top:66px}.f-card{width:76px;left:-14px;bottom:44px}.f-check{width:48px;right:-6px;bottom:52px}.float{opacity:.9}
.fluid::after{background:radial-gradient(ellipse 90% 40% at 50% 46%,rgba(246,247,251,.94) 0%,rgba(246,247,251,.7) 60%,rgba(246,247,251,0) 100%)}}
@media(max-height:640px){.f-card,.f-check{display:none}}
@media(prefers-reduced-motion:reduce){.scene,.blob,.float{animation:none}}
