/* ILOU · CLOUD CINEMATIC WAITLIST
   Actual DOM typography + controls, supplied artwork + live media.
   Reference: design/reference/desktop-reference.png (1672 × 941).
   Mobile is a real narrow viewport—not a phone drawing inside a square canvas. */
:root{
  color-scheme:light;--ink:#352766;--body:#5b4a86;--muted:#695791;
  --lavender:#a48be9;--lavender-deep:#7457bd;--focus:#53339a;
  --line:rgba(255,255,255,.84);--page-max:2060px;
  --font:"Outfit","Avenir Next","Inter",system-ui,-apple-system,sans-serif;
  font-family:var(--font);font-synthesis:none;color:var(--ink);background:#e6e1f5;
}
*,*::before,*::after{box-sizing:border-box}
body{margin:0;min-width:280px;min-height:100svh;-webkit-font-smoothing:antialiased}
button,input,a{-webkit-tap-highlight-color:transparent}
button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:wait}
a{color:inherit}button{color:inherit}button,input{touch-action:manipulation}
button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid var(--focus);outline-offset:5px}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.icon{display:inline-block;width:24px;height:24px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round}
/* Skip link: clipped to 1 px in flow until focused, never parked above the viewport by a transform. iOS slides fixed layers down with
   the rubber-band bounce, and iOS 26 Safari composites the strip above the viewport behind its translucent status bar while the page
   is scrolled, so a hidden white box there surfaces as a white rounded block beside the clock. */
.skip-link{position:absolute;top:0;left:0;z-index:1000;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;background:transparent}
.skip-link:focus{position:fixed;top:12px;left:16px;width:auto;height:auto;padding:12px 18px;margin:0;overflow:visible;clip-path:none;border-radius:12px;background:#fff}
.cloud-world{position:fixed;z-index:-2;inset:0;background:#e6e1f5 url('/assets/backgrounds/clouds-desktop.webp') center center/cover no-repeat;pointer-events:none}
.cloud-world::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(249,242,255,.13),rgba(255,248,252,.05) 65%,rgba(237,228,250,.1))}
.page-shell{width:100%;max-width:var(--page-max);margin:0 auto;padding:0 clamp(24px,3.88vw,80px);min-height:100svh;display:flex;flex-direction:column}
.site-header{height:clamp(90px,6.85vw,138px);position:relative;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(18px,4.2vw,78px);flex-shrink:0}
.desktop-nav{display:flex;align-items:center;gap:clamp(24px,3.1vw,54px)}
.text-link{font-size:clamp(13px,.96vw,18px);font-weight:450;letter-spacing:.01em;border:0;background:transparent;padding:10px 0;transition:color .18s ease}
.text-link:hover{color:var(--lavender-deep)}
.brand{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;line-height:0}
.brand img{width:clamp(104px,7.5vw,151px);height:auto;display:block}
.header-note{display:flex;gap:9px;align-items:center;padding:13px 20px;border:1px solid rgba(255,255,255,.65);border-radius:50px;font-size:clamp(11px,.86vw,16px);color:#634b8e;background:rgba(245,242,255,.15)}
.header-note .icon{width:18px;height:18px}

.hero{position:relative;isolation:isolate;display:grid;grid-template-columns:58% 42%;grid-template-rows:minmax(0,1fr) auto;min-height:clamp(590px,43.15vw,865px);border:1px solid var(--line);border-radius:clamp(34px,3.3vw,68px);background:linear-gradient(110deg,rgba(255,252,255,.65) 0%,rgba(255,249,254,.53) 44%,rgba(247,241,255,.12) 70%);box-shadow:inset 0 0 60px rgba(255,255,255,.12)}
.hero::before{content:"";position:absolute;inset:0;border-radius:inherit;z-index:-1;background:radial-gradient(ellipse at 30% 40%,rgba(255,248,253,.36),transparent 62%);pointer-events:none}
.hero-copy{grid-column:1;grid-row:1;align-self:center;position:relative;z-index:3;padding-left:clamp(36px,5.65vw,116px);padding-top:clamp(50px,6vw,113px);padding-bottom:30px;min-width:0}
.eyebrow{margin:0 0 clamp(23px,1.9vw,36px);font-size:clamp(11px,.87vw,17px);font-weight:500;text-transform:uppercase;letter-spacing:.26em;line-height:1.6;color:#7153b5}
h1{font-size:clamp(52px,4.82vw,97px);font-weight:400;letter-spacing:-.053em;line-height:.99;margin:0 0 clamp(20px,1.3vw,28px);width:max-content;max-width:114%;position:relative}
h1 span{display:block}
.hero-description{margin:0 0 clamp(32px,2.6vw,52px);font-size:clamp(20px,1.78vw,34px);font-weight:350;letter-spacing:-.025em;line-height:1.38;color:var(--body);white-space:nowrap}
.waitlist-form{max-width:100%;width:clamp(520px,41.1vw,822px);position:relative}
.waitlist-pill{display:flex;align-items:center;padding:6px;border:1.5px solid rgba(255,255,255,.95);border-radius:100px;background:rgba(255,255,255,.22);min-height:clamp(66px,4.92vw,98px);box-shadow:inset 0 1px 16px rgba(255,255,255,.1);transition:border-color .2s,box-shadow .2s}
.waitlist-pill:focus-within{border-color:#a38acc;box-shadow:0 0 0 4px rgba(128,96,187,.12)}
.email-field{display:flex;align-items:center;flex:1;min-width:0;gap:clamp(14px,1.4vw,26px);padding:0 clamp(12px,1.75vw,33px);color:#8c70c7}
.email-field .icon{width:25px;height:25px}
.email-field input{width:100%;min-width:0;color:var(--ink);font-size:clamp(16px,1.17vw,22px);background:transparent;border:0;outline:none;padding:14px 0;border-radius:4px}
.email-field input::placeholder{color:#7b699d;opacity:1}
.email-field input:focus-visible{outline:none}
.join-button{border:0;background:linear-gradient(145deg,#8663c8,#7e59be 64%,#8663c8);color:#fff;display:inline-flex;align-items:center;justify-content:center;gap:clamp(14px,1.25vw,25px);white-space:nowrap;font-size:clamp(16px,1.17vw,22px);font-weight:500;letter-spacing:.003em;min-height:clamp(54px,4.05vw,82px);padding:0 clamp(28px,3vw,58px);border-radius:100px;box-shadow:inset 0 0 10px rgba(255,255,255,.30),0 3px 12px rgba(121,86,169,.06);transition:background .2s,box-shadow .2s,transform .2s}
.join-button:hover:not(:disabled){background:linear-gradient(145deg,#7c5abd,#6f4dac);box-shadow:0 7px 22px rgba(109,77,159,.15),inset 0 0 12px rgba(255,255,255,.20);transform:translateY(-1px)}
.join-button:active:not(:disabled){transform:translateY(0)}
.join-button:disabled{opacity:.76}
.join-button .icon{width:24px;height:24px}
.spinner{display:none;width:19px;height:19px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}
.waitlist-form[aria-busy="true"] .spinner{display:block}.waitlist-form[aria-busy="true"] .button-arrow{display:none}
.helper{font-size:clamp(13px,.97vw,18px);color:#68528f;margin:16px 12px 0;line-height:1.5;letter-spacing:.005em}
.form-status{font-size:14px;line-height:1.55;color:#4c3a78;margin:12px 12px 0;max-width:600px}
.form-status:empty{margin:0;height:0}
.form-status[data-state="error"]{color:#882f62}.form-status[data-state="success"]{color:#3b5c50}
.honeypot{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.turnstile-container{margin-top:14px;min-height:65px}
/* Success panel: takes the pill's place once the server confirmed the saved signup (same width and glass language as the pill). The
   check is a real SVG drawn in under half a second; the panel fades in; both are static under prefers-reduced-motion. Apricot (the
   idea star) is the single accent: the halo around the check and the rule beside the email guidance. */
.waitlist-success{width:clamp(520px,41.1vw,822px);max-width:100%;padding:clamp(20px,1.6vw,30px) clamp(22px,1.9vw,34px) clamp(16px,1.3vw,24px);border:1.5px solid rgba(255,255,255,.95);border-radius:clamp(26px,2vw,36px);background:rgba(255,255,255,.30);box-shadow:inset 0 1px 16px rgba(255,255,255,.12);color:var(--ink);outline:none}
.waitlist-success.is-shown{animation:success-in .42s cubic-bezier(.2,.7,.2,1) both}
@keyframes success-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.success-head{display:flex;align-items:center;gap:clamp(14px,1.2vw,22px)}
.success-check{width:clamp(46px,3.4vw,62px);height:clamp(46px,3.4vw,62px);flex:0 0 auto}
.success-check .check-halo{fill:none;stroke:#f6caa7;stroke-width:1.6}
.success-check .check-disc{fill:#8663c8}
.success-check .check-mark{fill:none;stroke:#fff;stroke-width:3.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:27;stroke-dashoffset:27;animation:check-draw .36s .1s cubic-bezier(.3,.6,.2,1) forwards}
@keyframes check-draw{to{stroke-dashoffset:0}}
.success-words{min-width:0}
.success-title{margin:0;font-size:clamp(28px,2.25vw,42px);font-weight:400;letter-spacing:-.04em;line-height:1.08}
.success-sub{margin:5px 0 0;font-size:clamp(17px,1.25vw,23px);font-weight:350;letter-spacing:-.02em;line-height:1.35;color:var(--body)}
.success-body{margin:clamp(14px,1.1vw,20px) 0 0;font-size:clamp(15px,1.05vw,19px);line-height:1.55;color:var(--body)}
.success-email{margin:12px 0 0;padding:10px 14px;font-size:clamp(14px,1vw,18px);line-height:1.5;color:#4c3a78;background:rgba(255,255,255,.34);border-left:3px solid #f6caa7;border-radius:0 14px 14px 0}
.success-email:empty{display:none}
.success-email[data-state="failed"]{color:#882f62;border-left-color:#c66b96}
.success-help{margin:12px 0 0;font-size:clamp(13px,.95vw,17px)}
.help-link{border:0;background:transparent;padding:6px 0;color:#5f4d8a;font-size:inherit;text-decoration:underline;text-underline-offset:3px;transition:color .18s ease}
.help-link:hover{color:var(--lavender-deep)}
.hero-media{position:absolute;z-index:1;top:clamp(0px,.8vw,18px);right:clamp(-5px,.3vw,6px);width:50%;height:91%;pointer-events:none}
.media-blend{position:absolute;inset:0;overflow:hidden;mask-image:linear-gradient(90deg,transparent,black 15%,black 90%,transparent),linear-gradient(180deg,transparent,black 14%,black 72%,transparent);mask-composite:intersect;-webkit-mask-image:linear-gradient(90deg,transparent,black 15%,black 90%,transparent),linear-gradient(180deg,transparent,black 14%,black 72%,transparent);-webkit-mask-composite:source-in}
.media-poster,.media-poster img,.media-blend video{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:cover;object-position:40% 50%}
.media-blend video{opacity:0;transition:opacity .3s ease}.media-blend video[data-playing="true"]{opacity:1}
.handwritten{position:absolute;right:4.5%;top:18%;font-family:"Caveat","Segoe Print","Bradley Hand",cursive;font-size:clamp(23px,1.87vw,35px);font-weight:400;line-height:.99;letter-spacing:.035em;text-align:center;transform:rotate(-9deg);color:#9979cc}
.handwritten .icon{display:block;margin:9px auto 0;width:29px;height:31px;stroke-width:1.4}
.motion-toggle{pointer-events:auto;position:absolute;right:7%;bottom:8%;z-index:4;display:grid;place-items:center;width:38px;height:38px;border:1px solid rgba(255,255,255,.7);border-radius:50%;color:#67538e;background:rgba(251,247,255,.50);backdrop-filter:blur(10px);transition:background .2s}
.motion-toggle:hover{background:rgba(255,255,255,.88)}.motion-toggle .icon{width:16px;height:16px}
.features{z-index:3;grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:0;margin:clamp(24px,2vw,38px) auto clamp(46px,3.1vw,68px);color:#705199;max-width:100%;width:68%}
.feature{flex:1;display:flex;align-items:center;justify-content:center;gap:20px;min-width:0;padding:0 22px;font-size:clamp(13px,.99vw,19px);font-weight:400;line-height:1.25}
.feature+.feature{border-left:1px solid rgba(153,114,207,.55)}.feature .icon{width:31px;height:31px;stroke-width:1.6}
.site-footer{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:clamp(23px,1.9vw,42px) 20px 18px;gap:13px}
.footer-tagline{display:flex;align-items:center;justify-content:center;gap:24px;margin:0;color:#6e509f;font-size:clamp(11px,.88vw,17px);font-weight:400;letter-spacing:.24em;text-align:center;line-height:1.5}
.footer-tagline span{display:block;width:76px;height:1px;background:rgba(140,104,196,.42)}
.consent-note{font-size:11px;line-height:1.5;color:#675585;text-align:center;margin:0;letter-spacing:.025em}
.consent-note a{text-underline-offset:3px;margin-left:5px}
.site-dialog{width:calc(100% - 40px);max-width:520px;padding:32px;border:1px solid rgba(255,255,255,.94);border-radius:30px;color:var(--ink);background:rgba(252,248,255,.97);box-shadow:0 30px 100px rgba(63,37,97,.16);max-height:calc(100svh - 48px)}
.site-dialog::backdrop{background:rgba(37,24,66,.20);backdrop-filter:blur(8px)}
.dialog-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.dialog-top img{width:92px;height:auto}
.close-button{width:44px;height:44px;border:1px solid #daceed;background:#fff8;border-radius:50%;display:grid;place-items:center}
.dialog-top .icon{width:20px;height:20px}
.site-dialog h2{font-weight:450;font-size:34px;line-height:1.15;letter-spacing:-.03em;margin:0 0 20px}
.site-dialog p{font-size:17px;line-height:1.65;color:var(--body);margin:0 0 18px}
.site-dialog .dialog-cta{display:inline-flex;min-height:48px;align-items:center;justify-content:center;border:0;background:#8466c8;color:white;padding:0 24px;border-radius:26px;font-size:16px;text-decoration:none;margin-top:12px}
/* Contact dialog: the same glass, rounded, lavender language as the hero, kept simple. */
body.has-dialog{position:fixed;left:0;right:0;width:100%;overflow:hidden}
.site-dialog{overflow:auto;overscroll-behavior:contain}
.site-dialog .dialog-title{font-weight:450;font-size:34px;line-height:1.15;letter-spacing:-.03em;margin:0 0 12px;color:var(--ink)}
.site-dialog .dialog-intro{font-size:17px;line-height:1.6;color:var(--body);margin:0 0 22px}
.contact-form .field{display:flex;flex-direction:column;gap:7px;margin-bottom:14px}
.contact-form label{font-size:13px;font-weight:500;letter-spacing:.02em;color:#5f4d8a}
.contact-form input,.contact-form textarea{width:100%;min-width:0;font:inherit;font-size:16px;color:var(--ink);background:rgba(255,255,255,.78);border:1.4px solid #ddd3f0;border-radius:16px;padding:13px 16px;outline:none;transition:border-color .2s,box-shadow .2s}
.contact-form textarea{min-height:132px;resize:vertical;border-radius:18px;line-height:1.5}
.contact-form input::placeholder,.contact-form textarea::placeholder{color:#8a7aa8;opacity:1}
.contact-form input:focus-visible,.contact-form textarea:focus-visible{border-color:#a38acc;box-shadow:0 0 0 4px rgba(128,96,187,.12);outline:none}
.contact-form input[aria-invalid="true"],.contact-form textarea[aria-invalid="true"]{border-color:#c66b96;box-shadow:0 0 0 4px rgba(198,107,150,.12)}
.contact-form input:read-only,.contact-form textarea:read-only{opacity:.7}
.contact-form .form-status{margin:4px 0 0}.contact-form .form-status:not(:empty){margin-bottom:12px}
.contact-send{width:100%;gap:12px;margin-top:6px;cursor:pointer}.contact-send:disabled{opacity:.7;cursor:wait}
.contact-form[aria-busy="true"] .spinner{display:block}
.dialog-note{font-size:12px;line-height:1.55;color:#6e5d8f;margin:14px 0 0}.dialog-note a{text-underline-offset:3px}.nowrap{white-space:nowrap}
.contact-sent .dialog-cta{margin-top:4px;cursor:pointer}
@media(max-width:480px){.site-dialog{width:calc(100% - 20px);padding:22px 18px;border-radius:24px;max-height:calc(100svh - 24px);max-height:calc(100dvh - 24px)}.site-dialog .dialog-title{font-size:27px}.site-dialog .dialog-intro{font-size:15.5px;margin-bottom:16px}.contact-form textarea{min-height:112px}.dialog-top{margin-bottom:20px}}
@keyframes spin{to{transform:rotate(360deg)}}
/* 901–1180: maintain the side-by-side reference with genuinely fluid sizes (portrait tablets stack instead). */
@media(min-width:901px) and (max-width:1180px){
 .header-note{font-size:10px;padding:11px 12px}.header-note .icon{display:none}.desktop-nav{gap:25px}.site-header{padding:0 14px}
 .hero{min-height:580px;grid-template-columns:62% 38%}.hero-copy{padding-left:34px;padding-top:50px}.hero-media{right:-8px;width:47%;height:66%;top:40px}.media-poster img,.media-blend video{object-position:42% 50%}
 .media-blend{mask-image:linear-gradient(90deg,transparent,black 15%,black 93%,transparent),linear-gradient(180deg,transparent,black 14%,black 72%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,black 15%,black 93%,transparent),linear-gradient(180deg,transparent,black 14%,black 72%,transparent)}
 h1{font-size:clamp(42px,4.6vw,57px);letter-spacing:-.05em;max-width:116%}.hero-description{font-size:clamp(17px,1.8vw,21px);white-space:normal}.eyebrow{font-size:10px;letter-spacing:.2em}
 .waitlist-form{width:100%}.waitlist-pill{padding:4px;min-height:62px}.email-field{padding:0 13px;gap:9px}.email-field .icon{width:20px}.email-field input{font-size:15px}.join-button{padding:0 22px;gap:8px;font-size:14px;min-height:52px}.join-button .icon{width:18px}
 .handwritten{font-size:22px;right:2%;top:17%}.features{width:85%;margin-bottom:42px}.feature{font-size:12px;gap:12px;padding:0 16px}.feature .icon{width:27px;height:27px}.helper{font-size:12px}
}
/* 1181–1365: a little less media height keeps the floating star inside the window at compact desktop widths. */
@media(min-width:1181px) and (max-width:1365px){.hero-media{height:84%;top:clamp(14px,1.4vw,20px)}.media-poster img,.media-blend video{object-position:42% 50%}}
/* 901–1000: a slightly smaller character so the whole star float fits beside the copy. */
@media(min-width:901px) and (max-width:1000px){.hero-media{height:60%;top:48px}.media-poster img,.media-blend video{object-position:44% 50%}}
/* Stacked composition (phones and portrait tablets): preserve the square video, reflow the controls, remove presentation-board margins. */
@media(max-width:900px){
 /* Background canvas on phones/tablets: a fixed layer as tall as the LARGE viewport (constant while Safari's toolbars collapse or expand,
    so the artwork never re-scales or uncovers a strip) and 10% taller than it, so the layer's edge sits beyond any region Safari can
    reveal under its minimised bar, the home indicator or a keyboard pan; the square cloud art is sized to cover both axes with the
    same top-anchored composition as the approved captures (110% of the large viewport height), and the canvas colour is taken from
    the artwork for any native overscroll exposure. */
 :root{background:#e3d4f6}
 /* Status-bar region (iPhone, viewport-fit=cover). Two fixed, non-interactive cloud covers above the scrolling content, painted with
    the same art, scale, anchor and tint as the layer below so they are seamless with it:
    - body::before sits ABOVE the viewport (top:-50lvh, 50lvh tall) as a vertical mirror of the artwork's top, so the strip Safari can
      show there is always clouds: iOS 26 composites the content scrolled past the top behind its translucent status bar even while
      env(safe-area-inset-top) is 0, and every iOS version slides fixed layers down with the rubber-band bounce, which would otherwise
      expose the flat canvas colour there. It is clipped and invisible everywhere else.
    - body::after covers the inset itself (0 px unless Safari reports one: chrome minimised on iOS 15-18, landscape), so the shell's
      white corner and the logo pass under a frosted status bar as clouds. */
 body::before,body::after{content:"";position:fixed;left:0;width:100%;z-index:20;pointer-events:none;background-color:#e3d4f6;background-image:linear-gradient(180deg,rgba(249,242,255,.13),rgba(255,248,252,.05) 65%,rgba(237,228,250,.1)),url('/assets/backgrounds/clouds-mobile.webp');background-repeat:no-repeat;background-position:center top,center top;background-size:100% 110vh,max(100vw,110vh);background-size:100% 110lvh,max(100vw,110lvh)}
 body::before{top:-50vh;top:-50lvh;height:50vh;height:50lvh;transform:scaleY(-1)}
 body::after{top:0;height:env(safe-area-inset-top,0px)}
 .cloud-world{inset:auto;top:0;left:0;width:100%;height:110vh;height:110lvh;background-color:#e3d4f6;background-image:url('/assets/backgrounds/clouds-mobile.webp');background-position:center top;background-size:max(100vw,110vh);background-size:max(100vw,110lvh)}
 .page-shell{width:calc(100% - 26px);margin:13px auto 18px;padding:0 0 8px;min-height:calc(100svh - 31px);max-width:620px;border:1.4px solid rgba(255,255,255,.92);border-radius:40px;background:rgba(255,253,255,.19);box-shadow:inset 0 0 0 12px rgba(249,245,255,.14)}
 .site-header{height:84px;padding:18px 28px;z-index:5}.brand{position:static;transform:none}.brand img{width:96px}.header-note{display:none}.desktop-nav{order:1}.desktop-nav .text-link{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;margin-right:-12px;font-size:14px}
 .hero{display:flex;flex-direction:column;min-height:0;border:0;border-radius:0;background:transparent;box-shadow:none}.hero::before{display:none}
 .hero-media{position:relative;right:auto;top:auto;flex:0 0 auto;width:100%;height:auto;aspect-ratio:1.16;margin-top:-24px;margin-bottom:-14px;z-index:1}
 .media-blend{mask-image:linear-gradient(90deg,transparent,black 13%,black 87%,transparent),linear-gradient(180deg,transparent,black 9%,black 76%,transparent);mask-composite:intersect;-webkit-mask-image:linear-gradient(90deg,transparent,black 13%,black 87%,transparent),linear-gradient(180deg,transparent,black 9%,black 76%,transparent);-webkit-mask-composite:source-in}
 .media-poster img,.media-blend video{object-fit:cover;object-position:center 52%}.handwritten{top:11%;right:3.2%;font-size:clamp(18px,4.9vw,26px);line-height:1.02}.handwritten .icon{width:20px;height:23px;margin-top:6px}
 .motion-toggle{width:34px;height:34px;bottom:11%;right:8%;background:rgba(250,246,255,.55)}
 .hero-copy{width:calc(100% - 22px);margin:0 11px;align-self:stretch;padding:22px 18px 18px;text-align:center;border:1.2px solid rgba(255,255,255,.93);border-bottom:0;border-radius:26px 26px 0 0;background:linear-gradient(145deg,rgba(249,244,255,.88),rgba(255,251,255,.79));box-shadow:0 -4px 35px rgba(255,255,255,.17)}
 .eyebrow{font-size:9px;letter-spacing:.21em;line-height:1.8;margin:0 0 16px;white-space:nowrap}
 h1{font-size:clamp(26px,7.65vw,43px);letter-spacing:-.055em;line-height:1.045;margin:0 auto 11px;max-width:100%;width:100%;font-weight:400}h1 span:last-child{white-space:nowrap}
 .hero-description{font-size:clamp(15px,3.9vw,21px);font-weight:350;line-height:1.42;letter-spacing:-.025em;white-space:normal;margin:0 auto 20px;max-width:420px}
 .waitlist-form{width:100%;max-width:430px;margin:0 auto}.waitlist-pill{display:flex;flex-direction:column;border:0;border-radius:0;background:none;padding:0;gap:10px;box-shadow:none}.waitlist-pill:focus-within{box-shadow:none}
 .email-field{width:100%;min-height:51px;padding:0 19px;gap:16px;border:1.4px solid rgba(255,255,255,.98);border-radius:50px;background:rgba(255,255,255,.27)}.email-field:focus-within{outline:2px solid #9e83cb;outline-offset:2px}.email-field .icon{width:21px;height:21px}.email-field input{font-size:16px;padding:12px 0}
 .join-button{width:100%;min-height:51px;padding:0 26px;font-size:17px;gap:22px;border:1.2px solid rgba(255,255,255,.67);box-shadow:0 3px 0 rgba(171,138,225,.11),inset 0 0 12px rgba(255,255,255,.45)}.join-button .icon{width:22px;height:22px}
 .helper{font-size:11px;line-height:1.5;margin:20px 0 0}.form-status{font-size:12px;text-align:left;margin-left:1px;margin-right:1px}.turnstile-container{display:flex;justify-content:center;max-width:100%;overflow:visible}
 /* Security-check slot between the button and the helper: Cloudflare's widget (appearance interaction-only) is laid out only when a
    visitor has to click it; it takes no space otherwise. The slot therefore reserves nothing here (the shared rule's 14px + 65px showed
    as a blank band on phones once production keys unhid the slot) and gets its 14px breathing room only while the widget occupies
    height (app.js toggles is-interactive from the slot's own size). line-height:0 removes the inline-iframe baseline gap when shown. */
 .waitlist-form .turnstile-container{margin-top:0;min-height:0}.waitlist-form .turnstile-container.is-interactive{margin-top:14px}.waitlist-form .turnstile-container>div{line-height:0}
 .waitlist-success{width:100%;max-width:430px;margin:0 auto;text-align:left;padding:18px 18px 14px;border-radius:24px;border:1.4px solid rgba(255,255,255,.98)}
 .success-head{gap:13px}.success-check{width:44px;height:44px}.success-title{font-size:25px}.success-sub{font-size:15px;margin-top:3px}
 .success-body{font-size:14px;margin-top:12px}.success-email{font-size:13.5px;margin-top:10px;padding:8px 12px}.success-help{font-size:13px;margin-top:9px}
 .features{width:calc(100% - 22px);padding:18px 13px 28px;margin:0 11px;display:flex;justify-content:center;border-left:1.2px solid rgba(255,255,255,.93);border-right:1.2px solid rgba(255,255,255,.93);background:rgba(251,247,255,.82)}
 .feature{padding:0 9px;gap:9px;justify-content:center;font-size:10px;line-height:1.26;text-align:left;min-height:29px}.feature .icon{width:22px;height:22px;stroke-width:1.5}.feature span{max-width:68px}
 .site-footer{width:calc(100% - 22px);margin:0 11px 5px;flex:0 0 auto;gap:12px;padding:0 18px 24px;border:1.2px solid rgba(255,255,255,.93);border-top:0;border-radius:0 0 26px 26px;background:rgba(251,247,255,.82)}
 .footer-tagline{font-size:8px;letter-spacing:.20em;gap:12px;white-space:nowrap}.footer-tagline span{width:34px}.consent-note{font-size:8.5px;letter-spacing:0;line-height:1.6}
 .site-dialog{padding:25px;border-radius:24px}.site-dialog h2{font-size:29px}.site-dialog p{font-size:16px}
}
@media(max-width:360px){.waitlist-success{padding:16px 14px 12px}.success-title{font-size:22px}.success-sub{font-size:14px}.page-shell{width:calc(100% - 18px);margin-top:9px;border-radius:32px}.site-header{padding:15px 23px;height:76px}.brand img{width:82px}.hero-copy{padding:20px 11px 17px}.eyebrow{font-size:8px;letter-spacing:.13em}h1{font-size:7.65vw}.hero-description{font-size:14px}.features{padding-inline:8px}.feature{font-size:9px;padding:0 7px;gap:6px}.feature .icon{width:20px}.footer-tagline{font-size:7px;gap:7px}.footer-tagline span{width:22px}.consent-note{font-size:8px}.site-footer{padding-inline:8px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.waitlist-success.is-shown{animation:none}.success-check .check-mark{animation:none;stroke-dashoffset:0}}
@media(prefers-contrast:more){:root{--body:#392451;--muted:#392451}.helper,.feature,.eyebrow,.consent-note,.footer-tagline,.text-link,.help-link{color:#392451}.email-field,.waitlist-success{background:#fffd}.join-button{background:#6742a2}.hero{background:#fff9}}
/* Confirmation, unsubscribe, and local privacy pages share the same brand, not a generic browser screen. */
.action-page{padding:40px 18px;display:grid;grid-template-columns:minmax(0,1fr);place-items:center;min-height:100svh}.action-card{max-width:540px;width:100%;min-width:0;padding:42px 34px;border:1.5px solid #fff;border-radius:32px;background:rgba(253,249,255,.94);box-shadow:0 18px 65px rgba(87,54,128,.12)}.action-logo{display:block;width:112px;height:auto;margin-bottom:38px}.action-card h1{font-size:38px;line-height:1.14;max-width:100%;width:auto;letter-spacing:-.04em;margin-bottom:20px}.action-card p{font-size:17px;color:var(--body);line-height:1.65}.action-card .join-button{font-size:17px;min-height:52px;margin:12px 0 22px}.action-card .form-status{margin:0 0 20px}.back-link{font-size:14px;text-underline-offset:4px}.action-card h2{font-size:22px;font-weight:500;letter-spacing:-.02em}.action-card .eyebrow{font-size:12px;letter-spacing:.22em;line-height:1.6;white-space:normal;margin:0 0 18px}@media(max-width:420px){.action-card{padding:34px 22px}.action-card h1{font-size:31px}}
/* Website & Waitlist Privacy Policy (/privacy): the action-card language widened for long-form reading. Homepage rules untouched. */
.policy-page{align-content:start;padding-top:30px;padding-bottom:50px}.policy-card{max-width:780px;padding:46px 50px 42px}.policy-card .action-logo{margin-bottom:28px}.policy-card h1{font-size:42px;margin-bottom:12px}.policy-meta{display:flex;flex-wrap:wrap;gap:6px 22px;font-size:14px;color:var(--muted);line-height:1.6;margin:0 0 24px}.policy-meta strong{font-weight:500;color:var(--ink)}.policy-contents{margin:6px 0 30px;padding:18px 22px 16px;border:1px solid rgba(164,139,233,.28);border-radius:18px;background:rgba(236,229,250,.5)}.policy-contents p{margin:0 0 8px;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}.policy-contents ol{margin:0;padding-left:22px;columns:2;column-gap:30px;font-size:15px;line-height:1.75;color:var(--body)}.policy-contents li{break-inside:avoid}.policy-card h2{font-size:23px;line-height:1.3;margin:36px 0 10px;color:var(--ink)}.policy-card h3{font-size:17px;font-weight:600;line-height:1.4;margin:22px 0 6px;color:var(--ink)}.policy-card p,.policy-card address{font-size:16px;line-height:1.7;margin:0 0 14px;color:var(--body)}.policy-card address{font-style:normal}.policy-card a{color:var(--lavender-deep);text-underline-offset:3px}.policy-card a:hover{color:var(--ink)}.policy-card a:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:4px}.policy-actions{margin:34px 0 0}.link-sep{color:var(--muted);margin:0 10px}
@media(max-width:640px){.policy-page{padding-top:16px}.policy-card{padding:34px 22px 32px}.policy-card h1{font-size:33px}.policy-card h2{font-size:20px;margin-top:30px}.policy-contents ol{columns:1}}
/* Contact form errors stay in view while the card scrolls under a phone keyboard: the status sticks to the bottom of the visible card area. */
.site-dialog .contact-form .form-status[data-state="error"]{position:sticky;bottom:0;z-index:1;background:rgba(252,248,255,.97);padding:8px 0 10px}
