@font-face{font-family:Bricolage Grotesque;src:url(/fonts/BricolageGrotesque-SemiBold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Bricolage Grotesque;src:url(/fonts/BricolageGrotesque-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/fonts/PlusJakartaSans-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/fonts/PlusJakartaSans-Medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/fonts/PlusJakartaSans-SemiBold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}:root{color-scheme:light dark;--ground: #fbf8ef;--surface: #ffffff;--surface-alt: #f3efe3;--sand: #ece5d2;--hairline: #e4dfd0;--outline: #e4e4ea;--ink: #0f1511;--ink-soft: #3a3a42;--muted: #6b6878;--leaf: #b9b9ff;--lime-hi: #d3d3ff;--on-accent: #0a0a0a;--accent-ink: #4338ca;--focus: #4338ca;--signal: #8c2b22;--band: #1b1b2b;--on-band: #f1f0fb;--on-band-soft: #d3d3ff;--sky-top: #d3d3ff;--sky-low: #f1f0fb;--mint: #e9e8fb;--mint-ink: #4338ca;--mint-tag: #4338ca;--sage: #e9e8fb;--sage-ink: #4338ca;--sage-tag: #4338ca;--lime: #f1f0fb;--lime-ink: #4338ca;--lime-tag: #4338ca;--cream: #f5efdf;--cream-ink: #1b1b2b;--cream-tag: #1b1b2b;--shadow-sm: 0 1px 2px rgb(43 42 69 / .08), 0 4px 12px -4px rgb(43 42 69 / .14);--shadow: 0 2px 4px rgb(43 42 69 / .05), 0 18px 40px -16px rgb(43 42 69 / .28);--r-xl: 40px;--r-lg: 28px;--r-md: 18px;--space-xs: 4px;--space-sm: 8px;--space-md: 12px;--space-lg: 16px;--space-xl: 24px;--space-xxl: 32px;--font-display: "Bricolage Grotesque", "Segoe UI", system-ui, sans-serif;--font-body: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--ease: cubic-bezier(.22, 1, .36, 1);--measure: 68ch;--shell: 1240px;--nav-h: 84px}@media not all{:root:not([data-theme=light]){--ground: #0b0b0f;--surface: #15151b;--surface-alt: #15151b;--sand: #22222c;--hairline: #22222c;--outline: #3a3a42;--ink: #f1f0fb;--ink-soft: #e4e4ea;--muted: #cbcbd8;--accent-ink: #b9b9ff;--focus: #b9b9ff;--signal: #e0a092;--band: #1b1b2b;--sky-top: #15151f;--sky-low: #282a41;--mint: #15151f;--mint-ink: #b9b9ff;--sage: #15151f;--sage-ink: #b9b9ff;--lime: #1b1b2b;--lime-ink: #d3d3ff;--cream: #15151b;--cream-ink: #d3d3ff;--shadow-sm: 0 1px 2px rgb(0 0 0 / .4), 0 4px 12px -4px rgb(0 0 0 / .5);--shadow: 0 2px 4px rgb(0 0 0 / .3), 0 18px 40px -16px rgb(0 0 0 / .7)}}:root[data-theme=dark-off]{--ground: #0b0b0f;--surface: #15151b;--surface-alt: #15151b;--sand: #22222c;--hairline: #22222c;--outline: #3a3a42;--ink: #f1f0fb;--ink-soft: #e4e4ea;--muted: #cbcbd8;--accent-ink: #b9b9ff;--focus: #b9b9ff;--signal: #e0a092;--band: #1b1b2b;--sky-top: #15151f;--sky-low: #282a41;--mint: #15151f;--mint-ink: #b9b9ff;--sage: #15151f;--sage-ink: #b9b9ff;--lime: #1b1b2b;--lime-ink: #d3d3ff;--cream: #15151b;--cream-ink: #d3d3ff;--shadow-sm: 0 1px 2px rgb(0 0 0 / .4), 0 4px 12px -4px rgb(0 0 0 / .5);--shadow: 0 2px 4px rgb(0 0 0 / .3), 0 18px 40px -16px rgb(0 0 0 / .7)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 12px);-webkit-text-size-adjust:100%}body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--font-body);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}h1,h2,h3,h4{font-family:var(--font-display);font-weight:600;margin:0;text-wrap:balance}h1{font-size:clamp(42px,7vw,88px);line-height:.98;letter-spacing:-.04em}h2{font-size:clamp(34px,5.4vw,68px);line-height:1.02;letter-spacing:-.035em}h3{font-size:22px;line-height:1.25;letter-spacing:-.015em}h4{font-size:13px;line-height:18px;letter-spacing:.14em;text-transform:uppercase}p{margin:0 0 var(--space-lg);max-width:var(--measure)}h1+p,h2+p{margin-top:var(--space-lg)}a{color:inherit;text-decoration-color:var(--leaf);text-decoration-thickness:2px;text-underline-offset:3px}a:hover{text-decoration-thickness:3px}code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:.86em;background:var(--surface-alt);border:1px solid var(--hairline);border-radius:6px;padding:1px 5px;overflow-wrap:anywhere}:focus-visible{outline:3px solid var(--focus);outline-offset:3px;border-radius:6px}.skip{position:absolute;left:-9999px;top:var(--space-sm);z-index:30;padding:var(--space-md) var(--space-lg);background:var(--leaf);color:var(--on-accent);border-radius:999px;font-weight:600}.skip:focus{left:var(--space-lg)}.shell{width:100%;max-width:var(--shell);margin:0 auto;padding:0 clamp(16px,4vw,40px)}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.surface{position:relative;background:var(--surface);border:1px solid var(--hairline);border-radius:var(--r-lg);box-shadow:var(--shadow-sm)}.surface--alt{background:var(--surface-alt)}.surface--mint{background:var(--mint);border-color:transparent}.pad{padding:clamp(20px,3vw,32px)}.card h3{margin-bottom:var(--space-sm)}.card p:last-child{margin-bottom:0}.grid{display:grid;gap:var(--space-xl);grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr))}.grid--3{grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr))}.grid--4{grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr))}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-sm);min-height:48px;padding:12px 22px;border:0;border-radius:999px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm);font-family:var(--font-body);font-size:16px;font-weight:600;line-height:1.2;text-decoration:none;cursor:pointer}.btn--accent{background:var(--leaf);color:var(--on-accent)}.btn--light{background:#fff;color:#0f1511}.btn--xl{min-height:56px;padding:14px clamp(22px,3vw,30px);font-size:17px}.btn[disabled]{opacity:.6;cursor:default;transform:none}.press{transition:transform .16s var(--ease),box-shadow .16s var(--ease),background-color .16s var(--ease)}.press:hover{transform:translateY(-2px);box-shadow:var(--shadow)}.press:active{transform:scale(.97);transition-duration:90ms}.eyebrow,.kicker{font-family:var(--font-body);font-size:12px;line-height:18px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink);margin:0 0 var(--space-md)}.lede{font-size:clamp(18px,2vw,21px);line-height:1.5;color:var(--ink-soft);max-width:52ch}.caption{font-size:14px;line-height:20px;color:var(--muted)}.display{font-size:clamp(40px,6.4vw,84px);line-height:.98;letter-spacing:-.045em}.display--xl{font-size:clamp(44px,7.6vw,104px)}.center-head{text-align:center;margin:0 auto clamp(32px,5vw,56px);max-width:920px}.center-head .lede{margin-inline:auto}.tag{position:relative;isolation:isolate;display:inline-flex;align-items:center;margin:0 0 var(--space-xl) 26px;padding:6px 14px;border-radius:999px;background:var(--tag, var(--accent-ink));color:#fff;font-size:12px;font-weight:600;line-height:16px;letter-spacing:.18em;text-transform:uppercase}.tag__rings{position:absolute;z-index:-1;top:0;bottom:0;left:-26px;width:60px;border-radius:999px;background:color-mix(in srgb,var(--tag, var(--accent-ink)) 28%,transparent);box-shadow:-2px 0 0 4px color-mix(in srgb,var(--tag, var(--accent-ink)) 14%,transparent)}.tag--center{margin-inline:auto}.nav{position:sticky;top:0;z-index:20;padding:12px clamp(8px,2vw,24px) 0}.nav__inner{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-md);max-width:1360px;min-height:64px;margin:0 auto;padding:8px 10px 8px 14px;background:color-mix(in srgb,var(--surface) 94%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--hairline);border-radius:22px;box-shadow:var(--shadow-sm)}.nav__home{display:inline-flex;align-items:center;gap:10px;margin-right:auto;text-decoration:none}.nav__word{font-family:var(--font-display);font-size:24px;font-weight:700;letter-spacing:-.03em}.nav__links{display:flex;align-items:center;gap:4px;font-size:15px;font-weight:500}.nav__links a{padding:10px 14px;border-radius:999px;color:var(--ink-soft);text-decoration:none}.nav__links a:hover,.nav__links a[aria-current=page]{color:var(--ink);background:var(--surface-alt)}.nav__cta{min-height:44px;padding:10px 18px;font-size:15px}.nav__menu{display:none}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;flex:none;border:0;border-radius:999px;background:var(--surface-alt);color:var(--ink);cursor:pointer}.theme-toggle--ghost{background:none;pointer-events:none}@media(max-width:759px){.nav__inner{gap:var(--space-sm)}.nav__menu{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border:0;border-radius:999px;background:var(--surface-alt);color:var(--ink);font-family:var(--font-body);font-size:15px;font-weight:600;cursor:pointer}.nav__links{display:none;order:1;flex:1 0 100%;flex-direction:column;align-items:stretch;gap:2px;padding:4px 0 6px;font-size:17px}.nav[data-open=true] .nav__links{display:flex}.nav__links a{display:flex;align-items:center;min-height:48px;border-radius:14px}}@media(max-width:519px){.nav__cta{display:none}}.hero{position:relative;margin-top:calc(-1 * var(--nav-h))}.scene{display:block;width:100%;height:clamp(430px,46vw,660px)}.hero__band{background:var(--band);color:var(--on-band);padding:clamp(8px,2vw,24px) 0 clamp(128px,14vw,200px);--focus: #d3d3ff}.hero__inner{display:grid;gap:clamp(20px,3vw,40px);align-items:end}@media(min-width:960px){.hero__inner{grid-template-columns:1.25fr 1fr}}.hero__kicker{font-family:var(--font-body-strong, inherit);font-size:clamp(13px,1.5vw,16px);letter-spacing:.16em;text-transform:uppercase;color:var(--on-band-soft);margin:0 0 .6em}.hero__h1{font-size:clamp(50px,8.2vw,124px);line-height:.92;letter-spacing:-.05em;color:var(--on-band);max-width:10.5ch}.hero__lede{font-size:clamp(18px,1.9vw,22px);line-height:1.45;color:var(--on-band-soft);max-width:34ch;margin:0}.hero__cta{display:flex;flex-wrap:wrap;gap:var(--space-md);margin:var(--space-xl) 0 var(--space-md)}.hero__note{margin:0;font-size:14px;color:var(--on-band-soft)}.venue-map{position:relative}.venue-map__ground{fill:var(--sky-low)}.venue-map__grid line{stroke:var(--on-band-soft);stroke-width:1}.venue-map__pin{animation:pin-drop .5s var(--ease) backwards}@keyframes pin-drop{0%{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:translateY(0)}}.venue-map__pin-shadow{fill:#15151f;opacity:.22}.venue-map__pin-body{fill:var(--leaf);stroke:var(--on-band);stroke-width:2}.venue-map__pin-core{fill:var(--on-band)}.venue-map__pin-label,.venue-map__pin-area{font-family:var(--font-body);fill:var(--on-band);text-shadow:0 1px 3px rgb(0 0 0 / .35)}.venue-map__pin-label{font-weight:600;font-size:19px}.venue-map__pin-area{font-size:14px;fill:var(--on-band-soft)}.venue-map__caption{position:absolute;left:50%;bottom:clamp(14px,2vw,28px);transform:translate(-50%);margin:0;padding:10px 20px;border-radius:999px;background:color-mix(in srgb,var(--band) 82%,transparent);border:1px solid color-mix(in srgb,var(--on-band) 20%,transparent);color:var(--on-band);font-size:14px;font-weight:500;white-space:nowrap}@media(max-width:640px){.venue-map__caption{font-size:12px;padding:8px 14px;white-space:normal;text-align:center;max-width:88vw}}@media(prefers-reduced-motion:reduce){.venue-map__pin{animation:none}}.overlap{position:relative;z-index:2;margin-top:calc(-1*clamp(96px,11vw,160px))}.overlap__card{background:var(--surface-alt);border-radius:var(--r-xl);padding:clamp(28px,4vw,52px) 0 clamp(24px,3vw,40px);box-shadow:var(--shadow);overflow:hidden;text-align:center}.overlap__lede{font-size:clamp(17px,1.8vw,21px);line-height:1.45;max-width:44ch;margin:0 auto clamp(20px,3vw,32px);padding:0 var(--space-xl)}.overlap__lede strong{font-weight:600;color:var(--accent-ink)}.deck__row{display:flex;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);padding:6px 0 10px}.deck__track{display:flex;flex:none;gap:var(--space-md);padding-right:var(--space-md);animation:deck-slide 52s linear infinite}.deck__track--back{animation-direction:reverse;animation-duration:64s}.overlap:hover .deck__track{animation-play-state:paused}@keyframes deck-slide{to{transform:translate3d(-50%,0,0)}}.deck__card{display:inline-flex;align-items:center;gap:10px;flex:none;padding:10px 18px 10px 10px;border-radius:20px;background:var(--surface);box-shadow:var(--shadow-sm);white-space:nowrap}.deck__glyph{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:14px;background:var(--mint);color:var(--accent-ink)}.deck__label{font-family:var(--font-display);font-weight:600;font-size:18px}.deck__needs{font-size:13px;color:var(--muted)}.section{padding:clamp(64px,10vw,140px) 0}.section--tight{padding-top:clamp(40px,6vw,80px)}.section__head{margin-bottom:clamp(28px,4vw,48px)}.section__head h2{max-width:16ch}.tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-sm)}.tab{display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:8px 20px 8px 8px;border:0;border-radius:999px;background:var(--surface-alt);color:var(--ink-soft);font-family:var(--font-body);font-size:16px;font-weight:600;cursor:pointer}.tab__n{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;background:var(--surface);font-size:14px}.tab[aria-selected=true]{background:var(--lime-hi);color:#0a0a0a}.tab[aria-selected=true] .tab__n{background:#1b1b2b;color:var(--lime-hi)}.stage{display:grid;gap:clamp(24px,4vw,48px);align-items:center;margin-top:clamp(20px,3vw,32px);padding:clamp(24px,4vw,56px);border-radius:var(--r-xl);background:var(--lime);animation:stage-in .42s var(--ease) both}@media(min-width:860px){.stage{grid-template-columns:1fr 1fr}}@keyframes stage-in{0%{opacity:0;transform:translate3d(0,12px,0)}}.stage__title{font-size:clamp(30px,3.6vw,48px);line-height:1.02;letter-spacing:-.035em;margin-bottom:var(--space-lg)}.stage__say p{font-size:clamp(17px,1.6vw,19px);color:var(--ink-soft)}.stage__meta{padding-top:var(--space-lg);border-top:1px solid color-mix(in srgb,var(--lime-ink) 30%,transparent);margin-bottom:0}.stage__art{position:relative;display:grid;place-items:center;min-height:420px;padding:clamp(24px,4vw,40px);border-radius:var(--r-lg);background:var(--sand);overflow:hidden}.stage__blob-a{left:10%;bottom:12%;width:64px}.stage__blob-b{right:12%;top:14%;width:40px}.clay__text{font-family:var(--font-display);font-weight:600;fill:#0f1511}.clay__text--soft{font-family:var(--font-body);font-weight:500;fill:#6b6878}.clay__text--on{fill:#d3d3ff}.scene__float{transform-box:fill-box;animation:bob 6s ease-in-out infinite alternate}.scene__float--b{animation-duration:7.5s;animation-delay:-2s}.scene__float--c{animation-duration:5.5s;animation-delay:-4s}@keyframes bob{0%{transform:translate3d(0,6px,0)}to{transform:translate3d(0,-8px,0)}}.scene__steam{animation:steam 3.2s ease-in-out infinite}.scene__steam--late{animation-delay:-1.6s}@keyframes steam{0%,to{opacity:.25}50%{opacity:.9}}.blobs{position:absolute;inset:0;pointer-events:none}.blob{position:absolute;aspect-ratio:1;border-radius:50%;box-shadow:0 14px 20px -10px #15151f73}.blob--leaf{background:radial-gradient(circle at 32% 28%,#b9b9ff,#818cf8 45%,#6366f1)}.blob--lime{background:radial-gradient(circle at 32% 28%,#e9e8fb,#d3d3ff 45%,#818cf8)}.blob--cream{background:radial-gradient(circle at 32% 28%,#fff,#f4efe0 45%,#d3c8aa)}.blobs .blob--leaf{width:58px;left:8%;bottom:10%}.blobs .blob--lime{width:38px;right:10%;top:12%}.blobs .blob--cream{width:28px;right:18%;bottom:16%}.phone{position:relative;width:clamp(200px,22vw,250px);padding:8px;border-radius:38px;background:#0f1511;box-shadow:inset 0 0 0 2px #22222c,0 30px 50px -24px #15151f99;transform:rotate(-3deg)}.phone__screen{display:flex;flex-direction:column;gap:var(--space-sm);aspect-ratio:9 / 17;padding:14px 12px;border-radius:30px;background:var(--ground);overflow:clip}.phone__screen>:last-child{margin-top:auto}.phone__bar{display:flex;justify-content:space-between;font-size:10px;font-weight:600;color:var(--muted)}.phone__tile{padding:10px;border:1px solid var(--hairline);border-radius:14px;background:var(--surface);font-size:11px;line-height:15px}.phone__tile--accent{border-color:transparent;background:var(--leaf);color:var(--on-accent);font-weight:700;text-align:center}.phone__tile--soft{border-color:transparent;background:var(--mint);color:var(--accent-ink);font-weight:600}.phone__photo{flex:1;min-height:84px;display:flex;align-items:flex-end;padding:var(--space-sm);border-radius:14px;background:radial-gradient(circle at 76% 26%,#f5db7a 0 9%,transparent 10%),linear-gradient(170deg,transparent 55%,#4338ca 56%),linear-gradient(190deg,#d3d3ff 0 50%,#6366f1 51%);font-size:10px;font-weight:600;color:#fff}.phone__strong{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-display);font-size:13px;font-weight:600}.phone__chips{display:flex;gap:4px}.phone__chips span{flex:1;padding:6px 0;border-radius:999px;background:var(--surface-alt);font-size:10px;text-align:center}.phone__chips .on{background:#1b1b2b;color:#d3d3ff;font-weight:600}.phone__card{display:grid;gap:6px;padding:10px;border:1px solid var(--hairline);border-radius:14px;background:var(--surface)}.phone__card--soft{border-style:dashed;background:transparent}.mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.mini-card{display:grid;justify-items:center;gap:2px;padding:8px 4px;border-radius:12px;background:var(--surface);border:1px solid var(--hairline);color:var(--accent-ink);text-align:center}.mini-card b{font-size:10px;font-weight:600;line-height:13px;color:var(--ink)}.mini-card i{font-size:9px;font-style:normal;color:var(--muted)}.mini-meta{font-size:10px;line-height:14px;color:var(--muted)}.mini-seats{display:flex;gap:4px}.mini-seats span{flex:1;height:9px;border-radius:999px;background:var(--surface-alt)}.mini-seats .on{background:var(--leaf)}.mini-row{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:2px 6px;padding:7px 9px;border:1px solid var(--hairline);border-radius:12px;background:var(--surface);font-size:10px}.mini-row b{font-weight:600}.mini-row i{grid-column:2;grid-row:2;font-style:normal;color:var(--muted)}.mini-row em{grid-column:3;grid-row:1 / span 2;font-style:normal;color:var(--muted)}.mini-dot{grid-row:1 / span 2;width:20px;height:20px;border-radius:999px;background:radial-gradient(circle at 32% 28%,#b9b9ff,#818cf8 50%,#6366f1)}.mini-qr{flex:1;min-height:74px;border-radius:12px;background:repeating-linear-gradient(90deg,var(--ink) 0 4px,transparent 4px 9px),repeating-linear-gradient(0deg,var(--ink) 0 4px,transparent 4px 9px),var(--surface);opacity:.85}.mini-album{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;align-content:start;gap:5px}.mini-album span{border-radius:9px;aspect-ratio:1}.mini-album span:nth-child(1){background:linear-gradient(140deg,#818cf8,#e9e8fb)}.mini-album span:nth-child(2){background:linear-gradient(200deg,#1b1b2b,#d3d3ff)}.mini-album span:nth-child(3){background:linear-gradient(120deg,#d3d3ff,#6366f1)}.mini-album span:nth-child(4){background:linear-gradient(160deg,#e9e8fb,#818cf8)}.mini-album span:nth-child(5){background:linear-gradient(220deg,#4338ca,#f5efdf)}.mini-album span:nth-child(6){background:linear-gradient(100deg,#818cf8,#f1f0fb)}.stack{display:grid}.feature{--hue: var(--mint);--hue-ink: var(--mint-ink);--tag: var(--mint-tag);position:relative;display:grid;gap:clamp(24px,4vw,48px);padding:clamp(24px,4vw,48px);border-radius:var(--r-xl);background:var(--hue)}.feature+.feature{margin-top:calc(-1 * var(--r-xl));padding-top:calc(clamp(24px,4vw,48px) + var(--r-xl) / 2)}.feature--sage{--hue: var(--sage);--hue-ink: var(--sage-ink);--tag: var(--sage-tag)}.feature--lime{--hue: var(--lime);--hue-ink: var(--lime-ink);--tag: var(--lime-tag)}.feature--cream{--hue: var(--cream);--hue-ink: var(--cream-ink);--tag: var(--cream-tag)}@media(min-width:900px){.feature{grid-template-columns:1fr 1.05fr}}.feature__say{display:flex;flex-direction:column;align-items:flex-start;padding-top:var(--space-md)}.feature__h2{font-size:clamp(34px,4.4vw,60px);line-height:1;letter-spacing:-.04em;margin-bottom:var(--space-xl)}.feature__accent{color:var(--hue-ink, var(--accent-ink))}.feature__h2 .feature__accent{display:block}.feature__body{font-size:clamp(17px,1.5vw,19px);color:var(--ink-soft);max-width:46ch}.feature__proof{margin-top:auto;padding-top:var(--space-xl);font-size:15px;color:var(--ink-soft);max-width:40ch}.feature__cta{display:flex;flex-wrap:wrap;gap:var(--space-md);margin-top:var(--space-sm)}.feature__list{display:grid;gap:var(--space-md);margin:var(--space-sm) 0 0;padding:0;list-style:none;font-size:15px;line-height:1.5;color:var(--ink-soft)}.feature__list li{padding:14px 16px;border-radius:var(--r-md);background:color-mix(in srgb,var(--surface) 70%,transparent)}.feature__list strong{color:var(--ink);font-weight:600}.feature__tile{position:relative;display:grid;place-items:center;align-content:center;min-height:clamp(300px,36vw,520px);padding:clamp(24px,4vw,48px);border-radius:var(--r-lg);background:linear-gradient(180deg,color-mix(in srgb,var(--sand) 55%,var(--surface)) 0 42%,var(--sand) 42%);overflow:hidden}.tile__art{width:100%;max-width:480px;height:auto}.lock{position:relative;width:min(100%,360px)}.lock__card{padding:var(--space-xl);border-radius:var(--r-lg);background:#fff;color:#0f1511;box-shadow:0 30px 50px -24px #15151f80;transform:rotate(-3deg)}.lock__head{display:flex;align-items:center;gap:var(--space-md)}.lock__glyph{display:inline-flex;padding:8px;border-radius:16px;background:#e9e8fb;color:#4338ca}.lock__title{display:block;font-family:var(--font-display);font-size:24px;font-weight:600}.lock__when{display:block;font-size:14px;color:#6b6878}.lock__seats{display:flex;gap:var(--space-sm);margin:var(--space-xl) 0}.lock__seat{flex:1;height:16px;border-radius:999px;background:#ece5d2;animation:seat-fill 5.6s linear infinite}@keyframes seat-fill{0%,8%{background:#ece5d2}12%,88%{background:var(--leaf)}94%,to{background:#ece5d2}}.lock__foot{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}.lock__count{font-size:14px;color:#6b6878}.lock__stamp{padding:6px 16px;border-radius:999px;background:#1b1b2b;color:#d3d3ff;font-family:var(--font-display);font-weight:600;font-size:16px;opacity:0;transform:scale(1.6) rotate(-8deg);animation:stamp-in 5.6s var(--ease) infinite}.lock__stamp:first-letter{text-transform:uppercase}@keyframes stamp-in{0%,50%{opacity:0;transform:scale(1.6) rotate(-8deg)}58%,88%{opacity:1;transform:scale(1) rotate(-4deg)}94%,to{opacity:0;transform:scale(1.6) rotate(-8deg)}}.panel{padding:clamp(24px,4vw,48px);border-radius:var(--r-xl);background:var(--surface-alt);overflow:hidden}.panel__head{display:grid;gap:var(--space-lg);align-items:end;margin-bottom:clamp(8px,2vw,16px)}@media(min-width:860px){.panel__head{grid-template-columns:1.4fr 1fr}}.panel__h2{font-size:clamp(34px,4.4vw,60px);line-height:1;letter-spacing:-.04em}.panel__h2 .feature__accent{display:block;color:var(--accent-ink)}.panel__lede{margin:0;font-size:18px;color:var(--ink-soft)}.reel{display:grid;grid-auto-flow:column;grid-auto-columns:min(80%,640px);gap:var(--space-lg);margin-inline:calc(-1*clamp(24px,4vw,48px));padding:var(--space-lg) clamp(24px,4vw,48px) var(--space-sm);scroll-padding-inline:clamp(24px,4vw,48px);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none}.reel::-webkit-scrollbar{display:none}.reel:focus-visible{outline-offset:-3px}.reel__panel{position:relative;display:grid;align-content:start;gap:var(--space-lg);padding:clamp(20px,3vw,32px);border-radius:var(--r-lg);background:var(--surface);scroll-snap-align:start;overflow:hidden}@media(min-width:760px){.reel__panel{grid-template-columns:1fr auto;align-items:center}}.reel__n{position:absolute;top:12px;right:20px;font-family:var(--font-display);font-size:15px;font-weight:600;color:var(--muted)}.reel__say{max-width:24ch}.reel__tag{display:inline-block;margin:0 0 var(--space-md);padding:4px 12px;border-radius:999px;background:var(--mint);color:var(--accent-ink);font-size:13px;font-weight:600}.reel__tag:first-letter{text-transform:uppercase}.reel__title{margin:0 0 var(--space-md);font-size:clamp(26px,3vw,38px);line-height:1.04;letter-spacing:-.03em}.reel__body{margin:0;font-size:16px;line-height:1.5;color:var(--ink-soft)}.phone--still{width:100%;max-width:210px;justify-self:center;transform:rotate(2deg);transition:transform .22s var(--ease)}.reel__panel:nth-child(odd) .phone--still{transform:rotate(-2deg)}.reel__panel:hover .phone--still{transform:rotate(0) translateY(-6px)}.guide{display:grid;gap:var(--space-lg);margin-top:var(--space-xl);max-width:860px;margin-inline:auto}.guide .reel__say{max-width:38ch}.bento{display:grid;gap:var(--space-lg);grid-template-columns:1fr}@media(min-width:640px){.bento{grid-template-columns:repeat(2,1fr)}.bento__card--tall,.bento__card--wide{grid-column:1 / -1}}@media(min-width:1000px){.bento{grid-template-columns:repeat(4,1fr)}.bento__card--tall{grid-column:span 2;grid-row:span 2}}.bento__card{padding:clamp(22px,3vw,32px);border-radius:var(--r-lg);background:var(--surface-alt)}.bento__card h3{margin-bottom:var(--space-sm);font-size:20px}.bento__card p{color:var(--ink-soft);font-size:15px}.bento__card--sand{background:var(--surface-alt)}.bento__card--mint{background:var(--mint)}.bento__card--lime{background:var(--lime)}.bento__card--forest{display:flex;flex-direction:column;justify-content:flex-end;min-height:360px;padding-top:150px;background:radial-gradient(circle at calc(100% - 84px) 76px,#818cf8 0 46px,transparent 47px),radial-gradient(circle at calc(100% - 150px) 118px,#d3d3ff 0 22px,transparent 23px),var(--band);color:var(--on-band);--focus: #d3d3ff}.bento__card--forest p{color:var(--on-band-soft);font-size:16px}.bento__card--forest .kicker{color:#d3d3ff}.bento__h3{font-size:clamp(32px,3.6vw,48px)!important;line-height:1;letter-spacing:-.04em;margin-bottom:var(--space-lg)!important}.bento__n{display:block;margin-bottom:var(--space-md);font-family:var(--font-display);font-size:60px;font-weight:700;line-height:1;letter-spacing:-.04em;color:var(--accent-ink)}.nots{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin:0;padding:0;list-style:none}.nots li{padding:10px 18px;border-radius:999px;background:var(--surface);font-family:var(--font-display);font-weight:600;font-size:17px}.prices{display:grid;gap:var(--space-lg);grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));max-width:980px;margin:0 auto}.price{padding:clamp(24px,3vw,36px);border:1px solid var(--hairline);border-radius:var(--r-lg);background:var(--surface);text-align:center}.price p{margin-inline:auto}.price__soon{display:inline-block;margin-bottom:var(--space-lg)!important;padding:4px 12px;border-radius:999px;background:var(--surface-alt);font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.price__n{margin-bottom:var(--space-sm);font-family:var(--font-display);font-size:clamp(44px,5vw,60px);font-weight:600;line-height:1;letter-spacing:-.04em}.price__n span{margin-left:4px;font-family:var(--font-body);font-size:17px;font-weight:500;letter-spacing:0;color:var(--muted)}.price__note{margin-bottom:0;font-size:15px;color:var(--ink-soft)}.price--pick{border-color:transparent;background:var(--band);color:var(--on-band)}.price--pick .price__n span,.price--pick .price__note{color:var(--on-band-soft)}.price--pick .price__soon{background:#d3d3ff;color:#0a0a0a}.closing{padding:clamp(72px,10vw,140px) 0 var(--space-xl)}.closing__cta{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-md);margin-top:var(--space-xl)}.closing__waitlist{max-width:680px;margin:clamp(32px,5vw,56px) auto 0;padding:clamp(22px,3vw,36px);border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--hairline);box-shadow:var(--shadow-sm)}.closing__waitlist h3{margin-bottom:var(--space-sm)}.closing__waitlist>p{color:var(--ink-soft)}.get{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-lg)}.getbar{position:fixed;left:50%;bottom:max(12px,env(safe-area-inset-bottom));z-index:15;display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);width:min(560px,calc(100% - 24px));padding:8px 8px 8px 22px;border-radius:999px;background:var(--band);color:var(--on-band);box-shadow:var(--shadow);transform:translate3d(-50%,160%,0);transition:transform .26s var(--ease);--focus: #d3d3ff}.getbar[data-show=true]{transform:translate3d(-50%,0,0)}.getbar__what{font-family:var(--font-display);font-weight:700;font-size:16px;line-height:1.2;min-width:0}.getbar__sub{display:block;font-family:var(--font-body);font-weight:400;font-size:13px;color:var(--on-band-soft)}.getbar .btn{white-space:nowrap}.footer{--hills-h: clamp(170px, 22vw, 320px);position:relative;margin-top:clamp(24px,4vw,48px)}.footer:before{content:"";position:absolute;inset:var(--hills-h) 0 0;background:radial-gradient(circle at 35% 35%,#e9e8fb 0 3px,#d3d3ff 9px,#818cf8 16px,transparent 17px) 0 0 / 46px 40px,radial-gradient(circle at 35% 35%,#b9b9ff 0 3px,#818cf8 9px,#6366f1 16px,transparent 17px) 23px 20px / 46px 40px,#4338ca}.hills{position:relative;display:block;width:100%;height:var(--hills-h)}.footer__card{position:relative;width:calc(100% - (2*clamp(12px,4vw,64px)));max-width:1280px;margin:calc(-.55 * var(--hills-h)) auto 0;padding:clamp(28px,4vw,56px);border-radius:var(--r-xl) var(--r-xl) 0 0;background:var(--surface-alt)}.footer__grid{display:grid;gap:var(--space-xl);grid-template-columns:1.4fr repeat(3,1fr)}.footer__pitch{font-family:var(--font-display);font-size:20px;line-height:1.3;font-weight:600;max-width:28ch}.footer h4{margin-bottom:var(--space-md)}.footer ul{display:grid;gap:var(--space-sm);margin:0;padding:0;list-style:none;font-size:15px}.footer a{color:var(--ink-soft);text-decoration:none}.footer a:hover{color:var(--ink);text-decoration:underline}.footer__base{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-lg);margin-top:clamp(32px,5vw,56px);padding-top:var(--space-xl);border-top:1px solid var(--hairline)}body:has(.getbar) .footer__card{padding-bottom:calc(clamp(28px,4vw,56px) + 72px)}@media(max-width:899px){.footer__grid{grid-template-columns:1fr 1fr}.footer__grid>:first-child{grid-column:1 / -1}}@media(max-width:759px),(pointer:coarse){.footer ul{gap:0}.footer ul a{display:inline-flex;align-items:center;min-height:44px}}.socials{display:flex;flex-wrap:wrap;gap:var(--space-sm);margin:var(--space-lg) 0 0;padding:0;list-style:none}.socials a{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:6px 14px;border-radius:999px;background:var(--surface);color:var(--ink);font-size:14px;font-weight:500;text-decoration:none}.doc{padding-top:clamp(40px,6vw,80px)}.doc__head{margin-bottom:var(--space-xxl)}.doc__head h1,.prose h1{font-size:clamp(40px,6vw,72px);line-height:1;letter-spacing:-.04em;margin-bottom:var(--space-lg)}.prose{max-width:var(--measure)}.prose h2{margin:var(--space-xxl) 0 var(--space-md);padding-top:var(--space-xl);border-top:1px solid var(--hairline);font-size:30px;line-height:1.15;letter-spacing:-.025em}.prose h3{margin:var(--space-xl) 0 var(--space-sm)}.prose ul,.prose ol{padding-left:1.3em;margin:0 0 var(--space-lg)}.prose li{margin-bottom:var(--space-sm)}.prose hr{border:0;border-top:1px solid var(--hairline);margin:var(--space-xxl) 0}.prose blockquote{margin:0 0 var(--space-lg);padding:var(--space-lg) var(--space-xl);border-radius:var(--r-md);background:var(--mint)}.prose blockquote p:last-child{margin-bottom:0}.prose strong{font-weight:600}.table-wrap{overflow-x:auto;margin:0 0 var(--space-lg);border:1px solid var(--hairline);border-radius:var(--r-md);background:var(--surface)}.prose table{width:100%;min-width:460px;border-collapse:collapse;font-size:15px;line-height:21px}.prose th,.prose td{padding:var(--space-md);border-bottom:1px solid var(--hairline);text-align:left;vertical-align:top}.prose th{font-family:var(--font-display);font-weight:600;background:var(--surface-alt)}.prose tr:last-child td{border-bottom:0}.note{max-width:var(--measure);margin:0 0 var(--space-xl);padding:var(--space-lg);border-left:6px solid var(--leaf);border-radius:var(--r-md);background:var(--surface)}.note p:last-child{margin-bottom:0}.faq{display:grid;gap:var(--space-md);max-width:var(--measure)}.faq details{padding:var(--space-lg) var(--space-xl);border:1px solid var(--hairline);border-radius:var(--r-md);background:var(--surface)}.faq summary{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md);min-height:36px;font-family:var(--font-display);font-size:19px;font-weight:600;list-style:none;cursor:pointer}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;background:var(--mint);color:var(--accent-ink);font-size:22px;line-height:1;transition:transform .18s var(--ease)}.faq details[open] summary:after{transform:rotate(45deg)}.faq details>*:not(summary){margin-top:var(--space-md)}.steps-num{display:grid;gap:var(--space-md);max-width:var(--measure);margin:0 0 var(--space-xl);padding:0;list-style:none;counter-reset:step}.steps-num li{position:relative;min-height:36px;padding-left:52px;counter-increment:step}.steps-num li:before{content:counter(step);position:absolute;top:0;left:0;display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:999px;background:var(--leaf);color:var(--on-accent);font-family:var(--font-display);font-weight:700;font-size:16px}.kv{display:grid;gap:var(--space-md);max-width:var(--measure);margin:0 0 var(--space-xl)}.kv div{display:grid;gap:2px;padding-bottom:var(--space-md);border-bottom:1px solid var(--hairline)}.kv dt{font-weight:600;font-size:15px}.kv dd{margin:0;color:var(--ink-soft)}.form{display:grid;gap:var(--space-xl)}.form .btn{justify-self:start}.field{display:grid;gap:var(--space-sm)}.field label{font-family:var(--font-display);font-size:16px;font-weight:600}.field .caption{margin:0}.field input,.field select,.field textarea,.waitlist input{width:100%;min-height:52px;padding:var(--space-md) 18px;border:1.5px solid var(--outline);border-radius:16px;background:var(--surface);color:var(--ink);font-family:var(--font-body);font-size:17px;line-height:1.5}.field textarea{resize:vertical}.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible,.waitlist input:focus-visible{outline:3px solid var(--focus);outline-offset:1px;border-color:var(--focus)}.field__pw{position:relative}.field__pw input{padding-right:84px}.field__toggle{position:absolute;top:50%;right:8px;transform:translateY(-50%);min-height:40px;padding:0 14px;border:0;border-radius:999px;background:var(--mint);color:var(--mint-ink);font-family:var(--font-body);font-size:15px;font-weight:600;cursor:pointer}.field__toggle:focus-visible{outline:3px solid var(--focus);outline-offset:1px}.form__error{margin:0;color:var(--signal);font-weight:500}.form__done{margin:0;max-width:var(--measure)}.waitlist{display:grid;gap:var(--space-md)}.waitlist__row{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.waitlist__row input{flex:1 1 15rem;border-radius:999px;padding-inline:22px}.waitlist__row .btn{flex:0 0 auto;min-height:52px}.waitlist__use{margin:0}p.hero__cta{margin:var(--space-lg) 0 var(--space-md)}.shows__shell{max-width:560px}.shows__who{display:flex;align-items:center;gap:var(--space-lg);margin-bottom:var(--space-xl)}.shows__face{flex:none;width:72px;height:72px;border-radius:999px;object-fit:cover;background:var(--surface-alt);border:1px solid var(--hairline)}.shows__face--letter{display:grid;place-items:center;background:var(--mint);border-color:transparent;color:var(--mint-ink);font-family:var(--font-display);font-size:32px;font-weight:600;line-height:1}.shows__name{margin:2px 0 0;font-size:clamp(26px,5.6vw,38px);line-height:1.08;letter-spacing:-.03em;overflow-wrap:anywhere}.shows__lede{margin-bottom:var(--space-xxl)}.shows__record-h{margin:0 0 var(--space-md);font-size:19px;line-height:1.3;overflow-wrap:anywhere}.shows__foot{margin:var(--space-md) 0 0}.shows__none-line{margin:0;font-family:var(--font-display);font-size:clamp(22px,5.2vw,28px);font-weight:600;line-height:1.2;letter-spacing:-.02em}.shows__head{padding:clamp(28px,6vw,40px) clamp(20px,5vw,36px);border-radius:var(--r-xl);background:var(--band);color:var(--on-band);text-align:center;border:1px solid rgb(211 211 255 / .28);box-shadow:var(--shadow)}.shows__head-n{margin:0;font-family:var(--font-display);font-size:clamp(72px,24vw,128px);font-weight:700;line-height:.86;letter-spacing:-.05em;font-variant-numeric:tabular-nums;color:var(--lime-hi)}.shows__head-label{margin:var(--space-md) 0 0;font-size:clamp(17px,4.4vw,21px);font-weight:600;line-height:1.3}.shows__figs{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-md);margin-top:var(--space-md)}.shows__figs--one{grid-template-columns:1fr}.shows__fig{padding:var(--space-xl) var(--space-lg);border-radius:var(--r-lg);background:var(--surface-alt);text-align:center}.shows__fig-n{margin:0;font-family:var(--font-display);font-size:clamp(30px,8vw,40px);font-weight:600;line-height:1;letter-spacing:-.04em;font-variant-numeric:tabular-nums}.shows__fig-label{margin:var(--space-sm) 0 0;font-size:14px;line-height:19px;color:var(--muted)}.shows__ask{margin-top:var(--space-xxl)}.shows__q{margin:0 0 var(--space-xl);font-size:clamp(26px,6.4vw,34px);line-height:1.1;letter-spacing:-.03em}.shows__consent,.shows__err{margin:var(--space-md) 0 0}.shows__choice{display:flex;flex-direction:column;gap:var(--space-md);margin-top:var(--space-xl)}.shows__choice .btn{flex:1}@media(min-width:420px){.shows__choice{flex-direction:row}.shows__choice .btn:last-child{flex:0 0 auto;padding-inline:clamp(24px,6vw,36px)}}.shows__done{margin:0 0 var(--space-md);font-size:clamp(30px,7vw,44px);line-height:1.05;letter-spacing:-.035em}[data-reveal]{opacity:0;transform:translate3d(0,18px,0);transition:opacity .52s ease-out,transform .52s var(--ease);transition-delay:var(--reveal-delay, 0ms)}[data-reveal=shown]{opacity:1;transform:none}.progress{display:none}@supports (animation-timeline: scroll()){.progress{display:block;position:fixed;inset:0 0 auto;z-index:30;height:3px;background:var(--leaf);transform-origin:0 50%;animation:fill linear both;animation-timeline:scroll()}@keyframes fill{0%{transform:scaleX(0)}to{transform:scaleX(1)}}}.hero__inner>*{animation:hero-in .7s var(--ease) both}.hero__inner>:nth-child(2){animation-delay:.14s}@keyframes hero-in{0%{opacity:0;transform:translate3d(0,24px,0)}}@media(max-width:519px){.hero__cta .btn,.closing__cta .btn{flex:1 1 100%}.stage__art{min-height:0}.phone{width:200px}.getbar{padding-left:18px}.getbar .btn{padding-inline:16px;font-size:15px}.getbar__sub{font-size:12px}.reel{grid-auto-columns:86%}.reel .phone--still{max-width:170px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.scene__float,.scene__steam,.deck__track,.stage,.hero__inner>*{animation:none!important}.press:hover,.press:active{transform:none}[data-reveal]{opacity:1;transform:none}.lock__seat{animation:none;background:var(--leaf)}.lock__stamp{animation:none;opacity:1;transform:rotate(-4deg)}.progress{display:none!important}}:root,html,body{color-scheme:light dark;background-color:var(--ground);color:var(--ink)}input,textarea,select,button{color-scheme:light dark}@font-face{font-family:Schibsted Grotesk;src:url(/fonts/SchibstedGrotesk-latin.woff2) format("woff2");font-weight:400 900;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/IBMPlexMono-latin.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}:root{--font-display: "Schibsted Grotesk", "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;--font-body: "Schibsted Grotesk", "Plus Jakarta Sans", ui-sans-serif, system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--ease-out: cubic-bezier(.32, .72, 0, 1)}:root:not([data-theme=dark]){--ground: #fffcf6;--surface: #ffffff;--surface-alt: #f6f0e4;--sand: #f9f5eb;--hairline: #ebe2d2;--outline: #d9cfbd;--ink: #141210;--ink-soft: #605649;--muted: #786c5e;--shadow-sm: 0 1px 2px rgba(40, 30, 16, .04), 0 10px 30px -12px rgba(40, 30, 16, .12);--shadow: 0 30px 60px -30px rgba(40, 30, 16, .35)}@media not all{:root:not([data-theme=light]){--ground: #0f0e0c;--surface: #1a1815;--surface-alt: #211e1a;--sand: #181613;--hairline: #2c2822;--outline: #423c33;--ink: #f6f1e7;--ink-soft: #cfc6b8;--muted: #a3988a}}:root[data-theme=dark-off]{--ground: #0f0e0c;--surface: #1a1815;--surface-alt: #211e1a;--sand: #181613;--hairline: #2c2822;--outline: #423c33;--ink: #f6f1e7;--ink-soft: #cfc6b8;--muted: #a3988a}body{font-size:16.5px;line-height:1.65}h1,h2,h3{font-weight:800;letter-spacing:-.045em}h1{line-height:.95}h3{font-weight:700;letter-spacing:-.02em}h4,.footer__label{font-family:var(--font-mono);font-weight:500;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}.btn{border-radius:999px;font-weight:700;transition:transform .5s var(--ease-out),background-color .3s}.btn:active{transform:scale(.97)}.btn--ink{background:var(--ink);color:var(--ground)}.nav{padding:14px 12px 0;pointer-events:none}.nav__inner{pointer-events:auto;width:max-content;max-width:100%;min-height:0;gap:4px;padding:6px;border-radius:999px;border:1px solid var(--hairline);background:color-mix(in srgb,var(--ground) 82%,transparent);backdrop-filter:blur(16px) saturate(1.4);-webkit-backdrop-filter:blur(16px) saturate(1.4);box-shadow:var(--shadow-sm);transition:box-shadow .7s var(--ease-out)}.nav__home{margin-right:6px;padding:4px 14px 4px 6px;border-radius:999px}.nav__word{position:relative;font-family:var(--font-display);font-size:19px;font-weight:900;letter-spacing:-.04em}.nav__word:after{content:"";position:absolute;left:0;bottom:-3px;width:22px;height:3px;border-radius:999px;background:var(--leaf)}.nav__links{gap:0;font-size:14px;font-weight:600}.nav__links a{padding:8px 14px;color:var(--ink-soft);transition:background-color .3s,color .3s}.nav__links a:hover,.nav__links a[aria-current=page]{color:var(--ink);background:color-mix(in srgb,var(--ink) 6%,transparent)}.nav .theme-toggle{width:40px;height:40px;background:transparent}.nav .theme-toggle:hover{background:color-mix(in srgb,var(--ink) 6%,transparent)}.nav__cta{display:inline-flex;align-items:center;gap:10px;min-height:40px;padding:6px 6px 6px 18px;font-size:14px}.nav__arrow{display:grid;place-items:center;width:28px;height:28px;border-radius:999px;background:color-mix(in srgb,var(--ground) 16%,transparent);transition:transform .5s var(--ease-out)}.nav__cta:hover .nav__arrow{transform:rotate(45deg)}@media(max-width:759px){.nav__inner{width:100%;border-radius:26px;padding:6px 6px 6px 8px}.nav__home{margin-right:auto}.nav__menu{min-height:40px;background:transparent;font-size:14px;font-weight:700}.nav__links a{font-size:16px}}.footer{margin-top:0;padding:clamp(56px,8vw,112px) 0 36px;background:var(--ground);border-top:1px solid var(--hairline)}.footer:before,.footer .hills{display:none}.footer__card{width:100%;max-width:var(--shell);margin:0 auto;padding:0 clamp(20px,4vw,32px);border-radius:0;background:none}.footer__grid{grid-template-columns:1.5fr repeat(3,minmax(0,1fr));gap:48px 40px}.footer__pitch{margin-top:20px;max-width:30ch;font-family:var(--font-body);font-size:14.5px;font-weight:400;line-height:1.65;color:var(--ink-soft)}.footer__brand{font-family:var(--font-display);font-size:22px;font-weight:900;letter-spacing:-.04em;color:var(--ink)}.footer h4{margin-bottom:18px}.footer ul{gap:10px;font-size:14.5px;font-weight:500}.footer a{transition:color .3s}.footer a:hover{text-decoration:none;color:var(--ink)}.footer__base{margin-top:clamp(48px,7vw,88px);padding-top:24px;border-top:1px solid var(--hairline)}.footer__base .caption{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.socials a{border:1px solid var(--hairline);background:var(--surface);color:var(--ink-soft);box-shadow:0 1px 2px #281e100a;transition:transform .5s var(--ease-out),border-color .3s,color .3s}.socials a:hover{transform:translateY(-2px);border-color:var(--leaf);color:var(--ink)}@media(max-width:899px){.footer__grid{grid-template-columns:1fr 1fr;gap:36px 24px}}.doc{padding-top:clamp(56px,8vw,120px)}.doc__head h1,.prose h1{font-size:clamp(44px,7vw,84px);line-height:.95;letter-spacing:-.05em;font-weight:900}.prose{font-size:16.5px;color:var(--ink-soft)}.prose strong,.prose b{color:var(--ink)}.prose h2{margin-top:clamp(40px,5vw,64px);padding-top:28px;border-top:1px solid var(--hairline);font-size:clamp(24px,3vw,32px);font-weight:800;letter-spacing:-.035em;color:var(--ink)}.prose h3{color:var(--ink)}.prose a{color:var(--ink);text-decoration-color:var(--leaf);text-decoration-thickness:2px;text-underline-offset:3px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.nav__cta-icon,.nav__cta-short{display:none}@media(max-width:759px){.nav{padding:10px 10px 0}.nav__inner{flex-wrap:wrap}.nav__menu{order:3;justify-content:center;width:40px;min-width:40px;height:40px;padding:0;border:1px solid var(--hairline);border-radius:999px;background:var(--surface)}.nav .theme-toggle{display:none}.nav[data-open=true] .theme-toggle{display:inline-flex;order:4}.nav__cta{order:2;padding:0 14px;gap:6px;background:transparent;color:var(--ink);min-height:40px}.nav__cta .nav__arrow,.nav__cta-long{display:none}.nav__cta-icon,.nav__cta-short{display:inline}.nav__links{order:5}.nav__word{font-size:18px}}.footer{padding-bottom:28px;overflow:hidden}.footer__grid--5{grid-template-columns:1.5fr repeat(4,minmax(0,1fr))}.footer__lead .caption{margin-top:10px}.footer__mark{margin:clamp(48px,7vw,96px) 0 0;max-width:none;text-align:center;font-family:var(--font-display);font-weight:900;font-size:clamp(120px,28vw,420px);line-height:.8;letter-spacing:-.06em;color:transparent;background:radial-gradient(circle,var(--leaf) 0 2.6px,transparent 3.2px) 0 0 / 9px 9px;-webkit-background-clip:text;background-clip:text;-webkit-user-select:none;user-select:none}.footer__mark-dot{color:transparent}.footer__base{margin-top:28px}.footer__fonts a{color:inherit;text-decoration:underline;text-underline-offset:2px}@media(max-width:899px){.footer__grid--5{grid-template-columns:1fr 1fr}.footer__grid--5>:first-child{grid-column:1 / -1}}.nav{padding-top:24px}.nav__links a{padding:8px 16px}.nav__home{padding:8px 16px 8px 8px}.footer ul{font-size:14px;font-weight:400}.footer h4{font-weight:400}.footer__pitch{max-width:230px}@media(max-width:759px){.nav{padding-top:10px}}:root{--wv-lime: #d3d3ff;--wv-ink: #141210;--wv-deep: #1b1b2b}a.lp-btn.lp-btn--fill,button.lp-btn.lp-btn--fill{background:var(--wv-lime);color:var(--wv-ink);box-shadow:0 14px 30px -14px #14121059}a.lp-btn.lp-btn--fill:hover,button.lp-btn.lp-btn--fill:hover{background:#d3d3ff;color:var(--wv-ink)}a:focus-visible,button:focus-visible,.lp-btn:focus-visible,summary:focus-visible{outline:3px solid var(--wv-deep);outline-offset:3px;border-radius:8px}:root[data-theme=dark-off] a:focus-visible,:root[data-theme=dark-off] button:focus-visible{outline-color:var(--wv-lime)}.nav__word,.footer__brand{display:inline-flex;align-items:center;color:inherit}.nav__word svg{display:block}.footer__mark svg{width:100%;height:auto;max-width:1100px}.footer a:hover,.doc a:hover{text-decoration:underline;text-underline-offset:3px}.feat-hero{display:grid;grid-template-columns:1.3fr 1fr;gap:48px;align-items:center;padding-top:140px;padding-bottom:48px}.feat-hero h1{font-size:clamp(44px,7vw,96px);line-height:.95;letter-spacing:-.045em;margin:8px 0 20px}.feat-hero .lede{max-width:560px}.feat-hero__cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:28px}.feat-hero__mochi{width:100%;max-width:380px;height:auto;justify-self:center;filter:drop-shadow(0 24px 30px rgba(20,18,16,.18))}.feat-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;padding-bottom:64px}.feat-card{position:relative;overflow:hidden;background:#fff;border:1px solid rgba(20,18,16,.08);border-radius:28px;padding:32px}:root[data-theme=dark-off] .feat-card{background:#1b1915;border-color:#f6f1e714}.feat-card--mochi{background:var(--wv-lime);color:var(--wv-ink);padding-right:200px}.feat-card__tag{font-family:IBM Plex Mono,monospace;font-size:13px;letter-spacing:.04em;text-transform:uppercase;margin:0 0 12px;opacity:.8}.feat-card h2{font-size:clamp(26px,3vw,36px);line-height:1.05;letter-spacing:-.03em;margin:0 0 12px}.feat-card p{margin:0 0 16px;line-height:1.55}.feat-card ul{margin:0;padding-left:20px;line-height:1.7}.feat-card__mochi{position:absolute;right:16px;bottom:12px;width:170px;height:auto}.feat-more{padding-bottom:96px;max-width:760px}.feat-more h2{font-size:36px;letter-spacing:-.03em}.feat-more a{color:var(--wv-deep);text-decoration:underline;text-underline-offset:3px}:root[data-theme=dark-off] .feat-more a{color:var(--wv-lime)}@media(max-width:768px){.feat-hero{grid-template-columns:1fr;padding-top:112px;gap:24px}.feat-hero__mochi{max-width:240px;order:-1}.feat-grid{grid-template-columns:1fr}}@media(max-width:420px){.feat-card{padding:24px;border-radius:22px}.feat-card--mochi{padding-right:24px;padding-bottom:170px}.feat-card__mochi{width:140px}.feat-hero__cta .lp-btn{width:100%;justify-content:center}}.feat-btn{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:0 28px;border-radius:999px;font-weight:700;font-size:16px;text-decoration:none;border:1px solid rgba(20,18,16,.14);color:var(--wv-ink);background:#fff;transition:transform .2s,background-color .2s}.feat-btn:hover{transform:translateY(-1px);background:#f1ece2}.feat-btn--fill{background:var(--wv-lime);border-color:transparent}.feat-btn--fill:hover{background:#d3d3ff}:root[data-theme=dark-off] .feat-btn{color:#f6f1e7;background:#1b1915;border-color:#f6f1e724}:root[data-theme=dark-off] .feat-btn--fill{color:var(--wv-ink);background:var(--wv-lime)}@media(max-width:420px){.feat-hero__cta .feat-btn{width:100%}}@media(max-width:380px){.nav__word svg{height:21px;width:auto}.nav__cta .nav__cta-short{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.nav__cta{padding-left:14px;padding-right:14px}}.lp{--paper: #fffcf6;--sheet: #f9f5eb;--warm: #f6f0e4;--card: #ffffff;--rule: #ebe2d2;--ink: #141210;--ink-soft: #605649;--ink-muted: #786c5e;--accent: #818cf8;--accent-deep: #6366f1;--accent-ink: #4338ca;--accent-wash: #f1f0fb;--land: #d3d3ff;--shell: 1180px;--gutter: 20px;--ease-out: cubic-bezier(.32, .72, 0, 1);--shadow-card: 0 1px 2px rgba(40, 30, 16, .04), 0 10px 30px -12px rgba(40, 30, 16, .12);--shadow-lift: 0 30px 60px -30px rgba(40, 30, 16, .35);background:var(--paper);color:var(--ink);overflow-x:clip}:root[data-theme=dark-off] .lp{--paper: #0f0e0c;--sheet: #151310;--warm: #1a1714;--card: #1f1c18;--rule: #2c2822;--ink: #f6f1e7;--ink-soft: #cfc6b8;--ink-muted: #a3988a;--accent-ink: #b9b9ff;--accent-wash: #15151f;--land: #1b1b2b}@media not all{:root:not([data-theme=light]) .lp{--paper: #0f0e0c;--sheet: #151310;--warm: #1a1714;--card: #1f1c18;--rule: #2c2822;--ink: #f6f1e7;--ink-soft: #cfc6b8;--ink-muted: #a3988a;--accent-ink: #b9b9ff;--accent-wash: #15151f;--land: #1b1b2b}}.lp-shell{width:100%;max-width:var(--shell);margin-inline:auto;padding-inline:var(--gutter)}.lp-section{position:relative;padding-block:clamp(4.5rem,9vw,8rem)}.lp-section--sheet{background:var(--sheet)}.lp-section--warm{background:var(--warm)}.lp-section--paper{background:var(--paper)}.lp-dot{color:var(--accent)}.lp-h1{margin:clamp(1.25rem,2.5vw,1.75rem) 0 0;font-family:var(--font-display);font-weight:900;font-size:clamp(3.4rem,9vw,7rem);line-height:.9;letter-spacing:-.055em;color:var(--ink);text-wrap:balance}.lp-h2{margin:0;font-weight:900;font-size:clamp(2.15rem,4.6vw,3.6rem);line-height:.98;letter-spacing:-.05em;color:var(--ink);text-wrap:balance}.lp-lede{max-width:34ch;margin:clamp(1.25rem,2vw,1.6rem) auto 0;font-size:clamp(1.05rem,1.35vw,1.2rem);line-height:1.55;color:var(--ink-soft)}.lp-head{max-width:760px;margin:0 auto clamp(2.5rem,5vw,4rem);text-align:center}.lp-sub{max-width:46ch;margin:1rem auto 0;font-size:1.02rem;line-height:1.6;color:var(--ink-soft)}.lp-kicker{margin:0 0 1.1rem;font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink-muted)}.lp-cta{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:clamp(1.75rem,3vw,2.25rem)}.lp-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:48px;padding:0 24px;border-radius:999px;font-size:15px;font-weight:700;text-decoration:none;white-space:nowrap;transition:transform .5s var(--ease-out),background-color .3s,box-shadow .3s}.lp-btn:active{transform:scale(.97)}.lp-btn--fill{background:var(--accent);color:#fff;box-shadow:0 10px 24px -10px color-mix(in srgb,var(--accent) 70%,transparent)}.lp-btn--fill:hover{background:var(--accent-deep)}.lp-btn--ghost{background:var(--card);color:var(--ink);border:1px solid var(--rule);box-shadow:var(--shadow-card)}.lp-btn--paper{background:var(--card);color:var(--ink);border:1px solid var(--rule);box-shadow:var(--shadow-card);padding:0 6px 0 22px}.lp-arrow{display:grid;place-items:center;width:32px;height:32px;border-radius:999px;background:var(--accent-wash);color:var(--accent-ink);transition:transform .5s var(--ease-out)}a:hover>.lp-arrow{transform:rotate(45deg)}.lp-q--link:hover>.lp-arrow{transform:translate(3px)}.lp-hero{--hp: .5;position:relative;isolation:isolate;display:grid;place-items:center;min-height:min(100svh,920px);margin-top:calc(-1 * var(--nav-h));padding:calc(var(--nav-h) + clamp(3rem,7vw,5rem)) 0 clamp(4rem,8vw,6rem);text-align:center;overflow:hidden}.lp-hero__inner{position:relative;z-index:2;transform:translateY(calc((var(--hp) - .5) * 120px)) scale(calc(1 - (var(--hp) - .5) * .12));opacity:calc(1 - (max(0,var(--hp) - .5)*1.6));will-change:transform,opacity}.lp-ground{position:absolute;inset:0;z-index:-1;width:100%;height:100%;color:var(--ink);-webkit-mask-image:radial-gradient(ellipse 75% 70% at 50% 45%,#000 30%,transparent 85%);mask-image:radial-gradient(ellipse 75% 70% at 50% 45%,#000 30%,transparent 85%)}.lp-land path{fill:var(--land);opacity:.75}.lp-hero .lp-ground{transform:translateY(calc((var(--hp) - .5) * 80px))}.lp-count{display:inline-flex;align-items:center;gap:10px;margin:0;padding:7px 16px;border-radius:999px;background:color-mix(in srgb,var(--card) 80%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-size:13.5px;color:var(--ink-soft)}.lp-count strong{color:var(--ink);font-weight:700;font-variant-numeric:tabular-nums}.lp-count__dot{width:8px;height:8px;border-radius:999px;background:var(--accent);box-shadow:0 0 color-mix(in srgb,var(--accent) 50%,transparent);animation:lp-pulse 2.4s var(--ease-out) infinite}@keyframes lp-pulse{70%{box-shadow:0 0 0 8px transparent}to{box-shadow:0 0 0 0 transparent}}.lp-float{position:absolute;inset:0;z-index:1;pointer-events:none}.lp-card{position:absolute;margin:0;padding:10px 10px 34px;width:clamp(130px,13vw,190px);background:#fff;border-radius:6px;box-shadow:var(--shadow-lift),0 2px 6px #281e101a;animation:lp-bob 7s ease-in-out infinite}.lp-card__img{display:grid;place-items:center;aspect-ratio:4 / 5;border-radius:3px;font-size:clamp(44px,5vw,72px)}.lp-card figcaption{position:absolute;left:12px;bottom:9px;font-family:var(--font-mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:#605649}.lp-card--a{left:6%;top:24%;rotate:-8deg;translate:0 calc((var(--hp) - .5) * -260px)}.lp-card--b{right:7%;top:34%;rotate:7deg;translate:0 calc((var(--hp) - .5) * -380px);animation-delay:-3s}.lp-av{position:absolute;display:grid;place-items:center;width:54px;height:54px;border-radius:999px;background:#fff;border:3px solid #fff;font-size:26px;box-shadow:0 0 0 2px var(--accent),var(--shadow-card);animation:lp-bob 6s ease-in-out infinite}.lp-av--a{right:17%;top:18%;translate:0 calc((var(--hp) - .5) * -200px)}.lp-av--b{left:13%;bottom:14%;translate:0 calc((var(--hp) - .5) * -320px);animation-delay:-2s}.lp-av--c{right:22%;bottom:12%;translate:0 calc((var(--hp) - .5) * -150px);animation-delay:-4s;width:42px;height:42px;font-size:20px}.lp-spark{position:absolute;width:8px;height:8px;border-radius:999px;background:var(--accent);box-shadow:0 0 0 5px var(--accent-wash)}.lp-spark--a{left:30%;top:22%}.lp-spark--b{right:33%;top:70%}.lp-spark--c{left:22%;top:60%}@keyframes lp-bob{50%{transform:translateY(-10px)}}@media(max-width:759px){.lp-hero{min-height:0;padding-bottom:260px}.lp-card{width:128px}.lp-card--a{left:10%;top:auto;bottom:34px}.lp-card--b{right:10%;top:auto;bottom:52px}.lp-av--a{right:6%;top:15%;width:42px;height:42px;font-size:20px}.lp-av--b,.lp-av--c,.lp-spark--c{display:none}.lp-hero .lp-cta{flex-direction:column;align-items:stretch;max-width:360px;margin-inline:auto}}.lp-stepsec{--sp: .3}.lp-phones{position:relative;display:flex;justify-content:center;align-items:flex-end;height:clamp(420px,42vw,560px);margin:0 auto clamp(2.5rem,5vw,4rem)}.ph{--w: clamp(190px, 19vw, 260px);position:absolute;bottom:0;width:var(--w);aspect-ratio:9 / 19;padding:9px;border-radius:calc(var(--w) * .17);background:#141210;box-shadow:var(--shadow-lift),inset 0 0 0 2px #2c2822;transition:transform .2s linear}.ph__screen{position:relative;height:calc(100% - 24px);border-radius:calc(var(--w) * .13);overflow:hidden;background:#f3f6ef}.ph__notch{position:absolute;top:15px;left:50%;width:30%;height:18px;margin-left:-15%;border-radius:99px;background:#141210;z-index:3}.ph__status{display:flex;justify-content:space-between;height:24px;padding:4px 18px 0;font-size:10px;font-weight:700;color:#fff}.ph__bars{width:22px;height:8px;margin-top:4px;border-radius:3px;background:#fff;opacity:.8}.ph--c{z-index:2;transform:translateY(calc((1 - min(1,var(--sp) * 2.2))*40px))}.ph--l{z-index:1;transform:translate(calc(min(1,var(--sp) * 2.2)*-92%)) rotate(calc(min(1,var(--sp) * 2.2)*-6deg)) translateY(-14px)}.ph--r{z-index:1;transform:translate(calc(min(1,var(--sp) * 2.2)*92%)) rotate(calc(min(1,var(--sp) * 2.2)*6deg)) translateY(-14px)}@media(prefers-reduced-motion:reduce){.lp-stepsec{--sp: 1}.lp-hero{--hp: .5}}.ph-map{position:absolute;inset:0;background:linear-gradient(115deg,transparent 47%,#fff 47% 49%,transparent 49%),linear-gradient(25deg,transparent 60%,#fff 60% 61.5%,transparent 61.5%),radial-gradient(circle at 70% 30%,#d3d3ff 0 18%,transparent 19%),radial-gradient(circle at 25% 75%,#d3d3ff 0 14%,transparent 15%),linear-gradient(#e9e8fb,#e9e8fb)}.ph-map--dim:after{content:"";position:absolute;inset:0;background:#14121040}.ph-map__top{position:absolute;top:10px;left:10px;right:10px;display:flex;justify-content:space-between}.ph-chip{display:inline-flex;align-items:center;gap:4px;height:26px;min-width:26px;justify-content:center;padding:0 8px;border-radius:99px;background:#fff;color:#141210;font-size:9px;font-weight:700;box-shadow:var(--shadow-card)}.ph-pin{position:absolute;display:grid;place-items:center;width:34px;height:34px;margin:-17px;border-radius:99px;font-size:16px;box-shadow:0 0 0 2px #141210,0 6px 12px -4px #0006}.ph-fab{position:absolute;right:12px;bottom:50px;display:grid;place-items:center;width:40px;height:40px;border-radius:99px;background:var(--accent);color:#fff;box-shadow:var(--shadow-card)}.ph-loc{position:absolute;right:16px;bottom:14px;display:grid;place-items:center;width:30px;height:30px;border-radius:99px;background:#141210;color:#fff}.ph-sheet{position:absolute;z-index:2;left:8px;right:8px;bottom:8px;padding:14px;border-radius:18px;background:#fff;color:#141210;text-align:center}.ph-sheet__emoji{display:grid;place-items:center;width:40px;height:40px;margin:-34px auto 6px;border-radius:99px;background:#6366f1;font-size:20px;box-shadow:0 0 0 3px #fff}.ph-sheet__h{margin:0;font-size:13px;font-weight:800;letter-spacing:-.02em}.ph-sheet__m{margin:4px 0 0;font-size:10px;color:#786c5e}.ph-meter{height:6px;margin:10px 0 0;border-radius:99px;background:#eee6d8;overflow:hidden}.ph-meter span{display:block;height:100%;background:var(--accent);border-radius:inherit}.ph-join{display:block;margin-top:10px;padding:8px;border-radius:99px;background:#141210;color:#fff;font-size:11px;font-weight:800}.ph-chat{position:absolute;inset:0;display:flex;flex-direction:column;gap:6px;padding:10px;background:#fffcf6;color:#141210;font-size:10.5px}.ph-chat__head{display:flex;gap:8px;align-items:center;padding-bottom:8px;margin-bottom:4px;border-bottom:1px solid #ebe2d2}.ph-chat__av{display:grid;place-items:center;width:30px;height:30px;border-radius:99px;background:#6366f1;font-size:15px}.ph-chat__h{margin:0;font-weight:800;font-size:12px}.ph-chat__m{display:flex;align-items:center;gap:3px;margin:0;font-size:9px;color:#4338ca;font-weight:700}.ph-bub{align-self:flex-start;max-width:78%;margin:0;padding:7px 10px;border-radius:14px 14px 14px 4px;background:#f1ebde;line-height:1.35}.ph-bub--me{align-self:flex-end;border-radius:14px 14px 4px;background:var(--accent);color:#fff}.ph-input{display:flex;justify-content:space-between;align-items:center;margin-top:auto;padding:8px 12px;border-radius:99px;border:1px solid #ebe2d2;background:#fff;color:#786c5e}@media(max-width:759px){.lp-phones{height:440px;overflow:visible}.ph{--w: 200px}.ph--l{transform:translate(calc(min(1,var(--sp) * 2.2)*-62%)) rotate(calc(min(1,var(--sp) * 2.2)*-6deg)) translateY(-10px) scale(.86)}.ph--r{transform:translate(calc(min(1,var(--sp) * 2.2)*62%)) rotate(calc(min(1,var(--sp) * 2.2)*6deg)) translateY(-10px) scale(.86)}}.lp-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(1.5rem,4vw,3rem);max-width:900px;margin:0 auto;text-align:center}.lp-step__n{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;color:var(--ink-muted)}.lp-step__h{margin:10px 0 6px;font-size:1.15rem;font-weight:800;letter-spacing:-.03em}.lp-step__p{max-width:26ch;margin:0 auto;font-size:.95rem;line-height:1.55;color:var(--ink-soft)}@media(max-width:759px){.lp-steps{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;text-align:left;margin-inline:calc(-1 * var(--gutter));padding-inline:var(--gutter);scrollbar-width:none}.lp-step{flex:0 0 72%;scroll-snap-align:start}.lp-step__p{margin:0}}.lp-tl{display:grid;grid-template-columns:1fr auto 1fr;max-width:980px;margin:0 auto;column-gap:clamp(1rem,3vw,2.5rem)}.lp-tl__label{margin:0 0 14px;font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-muted);text-align:right;display:flex;align-items:center;justify-content:flex-end;gap:8px}.lp-tl__label--ours{justify-content:flex-start;color:var(--accent-ink)}.lp-tl__ring{width:7px;height:7px;border-radius:99px;border:1.5px solid currentColor}.lp-tl__live{width:7px;height:7px;border-radius:99px;background:var(--accent)}.lp-tl__row{display:contents}.lp-tl__row>*{margin:0;padding:18px 0;border-top:1px solid var(--rule)}.lp-tl__them{text-align:right;font-size:.95rem;color:var(--ink-muted)}.lp-tl__times{display:flex;gap:14px;font-family:var(--font-mono);font-size:11.5px;color:var(--ink-muted);white-space:nowrap}.lp-tl__t2{color:var(--accent-ink)}.lp-tl__us{font-weight:700;font-size:1.02rem;letter-spacing:-.015em;color:var(--ink)}.lp-tl__who{display:flex;align-items:center;justify-content:flex-end;gap:10px;font-size:.85rem;color:var(--ink-muted)}.lp-tl__who--ours{justify-content:flex-start;color:var(--ink);font-weight:600}.lp-faces{display:inline-flex}.lp-faces i{display:grid;place-items:center;width:28px;height:28px;margin-left:-8px;border-radius:99px;border:2px solid var(--paper);background:var(--accent-wash);font-style:normal;font-size:13px}.lp-faces--empty i{background:var(--rule)}.lp-verdict{margin:clamp(2.5rem,5vw,3.5rem) auto 0;max-width:24ch;text-align:center;font-size:clamp(1.3rem,2.2vw,1.65rem);font-weight:800;letter-spacing:-.035em;line-height:1.2}@media(max-width:759px){.lp-tl{grid-template-columns:auto 1fr;column-gap:14px}.lp-tl>span:nth-child(2),.lp-tl__row--end>span{display:none}.lp-tl__label{text-align:left;justify-content:flex-start}.lp-tl__label:first-child{grid-column:1 / -1;margin-bottom:4px}.lp-tl__label--ours{grid-column:1 / -1}.lp-tl__them{grid-column:1 / -1;text-align:left;padding-bottom:0}.lp-tl__times{flex-direction:column;gap:2px;border-top:0}.lp-tl__us{border-top:0}.lp-tl__who{grid-column:1 / -1;justify-content:flex-start}}.lp-emojis{display:flex;justify-content:center;gap:12px;margin-top:2rem}.lp-emojis span{display:grid;place-items:center;width:56px;height:56px;border-radius:99px;background:var(--card);box-shadow:var(--shadow-card);font-size:26px;transition:transform .5s var(--ease-out)}.lp-emojis span:nth-child(odd){rotate:-6deg}.lp-emojis span:nth-child(2n){rotate:6deg}.lp-emojis span:hover{transform:translateY(-4px) scale(1.06)}.lp-perks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(1.5rem,3vw,2.5rem);max-width:980px;margin:0 auto}.lp-perks>div{padding-top:22px;border-top:1px solid var(--rule)}.lp-perk__h{margin:0 0 8px;font-size:1.05rem;font-weight:800;letter-spacing:-.025em}.lp-perk__p{margin:0;font-size:.93rem;line-height:1.55;color:var(--ink-soft)}.lp-cta--center{margin-top:clamp(2.5rem,5vw,3.5rem)}.lp-ask{margin:14px auto 0;text-align:center;font-size:.9rem;color:var(--ink-muted)}.lp-ask a{color:var(--accent-ink);font-weight:700;text-decoration:none}@media(max-width:759px){.lp-perks{grid-template-columns:1fr}}.lp-faq{max-width:720px;margin:0 auto;border-top:1px solid var(--rule)}.lp-q{display:block;border-bottom:1px solid var(--rule)}.lp-q summary,.lp-q--link{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px;padding:14px 0;list-style:none;cursor:pointer;font-size:1.02rem;font-weight:700;letter-spacing:-.015em;color:var(--ink);text-decoration:none}.lp-q summary::-webkit-details-marker{display:none}.lp-q__mark{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:99px;border:1px solid var(--rule);color:var(--ink-muted);transition:transform .5s var(--ease-out),background-color .3s}.lp-q[open] .lp-q__mark{transform:rotate(45deg);background:var(--ink);color:var(--paper);border-color:var(--ink)}.lp-q__a{max-width:60ch;margin:0;padding:0 44px 22px 0;color:var(--ink-soft);line-height:1.65;animation:lp-open .5s var(--ease-out)}@keyframes lp-open{0%{opacity:0;transform:translateY(-6px)}}.lp-q--quiet{color:var(--ink-muted)!important;font-weight:600!important}.lp-q--link .lp-arrow{background:var(--ink);color:var(--paper)}.lp-q--quiet .lp-arrow{background:transparent;color:var(--ink-muted);border:1px solid var(--rule)}.lp-close{--cp: .5;position:relative;isolation:isolate;overflow:hidden;padding-block:clamp(6rem,12vw,10rem);text-align:center;background:var(--paper)}.lp-close .lp-ground{transform:scale(calc(1 + (1 - var(--cp)) * .15))}.lp-close__inner{position:relative}.lp-close__logo{display:inline-block;margin-bottom:4px;rotate:-6deg}.lp-get{display:flex;flex-direction:column;align-items:center;gap:12px;margin-top:2rem}.lp-get .lp-btn{min-width:280px;min-height:54px;font-size:16px}.lp-get__note{margin:0;font-size:.85rem;color:var(--ink-muted)}.lp{--accent: #6366f1;--accent-deep: #6366f1}.lp-section{padding-block:clamp(4.5rem,calc(3.4rem + 3.5vw),7.2rem)}.lp-hero{padding:calc(var(--nav-h) + clamp(3rem,5vw,3.2rem)) 0 clamp(4rem,7.8vw,7rem)}.lp-h1{margin-top:clamp(16px,calc(14.5px + .38vw),20px);font-weight:800;font-size:clamp(54px,calc(30px + 6.25vw),120px);line-height:.95;letter-spacing:-.045em}.lp-lede{max-width:416px;margin-top:clamp(24px,calc(21px + .76vw),32px);font-size:clamp(17px,calc(15.9px + .286vw),20px);line-height:1.5}.lp-count{font-size:13.5px;font-weight:600}.lp-h2{max-width:740px;margin-inline:auto;font-weight:800;font-size:clamp(32.8px,calc(23.6px + 2.362vw),57.6px);line-height:1.02;letter-spacing:-.035em}.lp-head{max-width:740px}.lp-sub{max-width:585px;margin-top:clamp(16px,calc(14.5px + .38vw),20px);font-size:clamp(15.5px,calc(15.1px + .095vw),16.5px);line-height:1.6}.lp-btn{min-height:50px;font-size:15px}.lp-btn--fill{min-height:56px;padding:0 32px;font-size:17px;box-shadow:0 14px 30px -14px color-mix(in srgb,var(--accent) 80%,transparent);transition:transform .2s cubic-bezier(.4,0,.2,1),background-color .2s cubic-bezier(.4,0,.2,1)}.lp-btn--fill:hover{transform:translateY(-1px)}.lp-btn--ghost{min-height:56px;padding:0 28px;font-size:17px}.lp-btn--paper{min-height:50px;font-size:15px}.lp-step__h{margin:12px 0 0;font-size:18px;font-weight:700;letter-spacing:-.01em}.lp-step__p{margin-top:10px;font-size:14.5px;line-height:1.55;color:var(--ink-muted)}.lp-tl__them{font-size:15px;line-height:1.375}.lp-tl__us{font-size:16.5px;font-weight:600;line-height:1.375;letter-spacing:0}.lp-tl__who{font-size:16px}.lp-verdict{margin-top:clamp(44px,calc(36.6px + 1.9vw),64px);max-width:424px;font-size:clamp(18px,calc(17.3px + .19vw),20px);font-weight:600;letter-spacing:0;line-height:1.375}.lp-emojis span{width:clamp(52px,calc(49.8px + .57vw),58px);height:clamp(52px,calc(49.8px + .57vw),58px);font-size:clamp(27px,calc(25.5px + .38vw),31px)}.lp-perk__h{font-size:16.5px;font-weight:700;letter-spacing:-.015em}.lp-perk__p{font-size:14.5px;line-height:1.625}.lp-faq-sec{background:var(--sheet)}.lp-faq{max-width:680px}.lp-q summary{min-height:0;padding:20px 0;font-size:16.5px;letter-spacing:-.01em}.lp-q__a{font-size:15.5px;line-height:1.65}.lp-q--link{min-height:44px;padding:14px 0;font-size:15px}.lp-close{padding-block:clamp(6rem,calc(4.5rem + 4vw),9rem)}.lp-close .lp-h1{font-size:clamp(52px,calc(32.7px + 4.95vw),104px)}.lp-close .lp-lede{max-width:418px;margin-top:clamp(20px,calc(18.5px + .38vw),24px);font-size:clamp(16.5px,calc(15.6px + .24vw),19px);line-height:1.625}.lp-get .lp-btn{min-width:0;padding:0 40px;min-height:56px;font-size:17px}.lp-get__note{font-size:14px;color:var(--ink-soft)}@media(max-width:759px){.lp-hero .lp-cta{max-width:340px}.lp-get .lp-btn{width:100%;max-width:340px}}.lp-hero__note{display:none}@media(max-width:759px){.lp-hero{padding-bottom:250px}.lp-hero__second{display:none}.lp-hero__note{display:block;margin-top:14px}.lp-hero__note a{color:var(--ink-soft);font-weight:600;text-decoration:underline;text-underline-offset:2px}.lp-card{width:132px}.lp-card--a{left:calc(50% - 140px);bottom:40px}.lp-card--b{right:calc(50% - 140px);bottom:56px}.lp-spark--b{top:auto;bottom:230px}}.ph-shot{display:block;width:100%;height:100%;object-fit:cover;object-position:top center}.lp-osm{opacity:.9}.lp-osm-credit{position:absolute;right:14px;bottom:10px;z-index:2;margin:0;font-family:var(--font-mono);font-size:10px;color:var(--ink-muted);opacity:.8}.lp-osm-credit a{color:inherit}.lp-tl2{position:relative;display:grid;grid-template-columns:1fr 28px 1fr;column-gap:clamp(14px,3vw,36px);max-width:960px;margin:0 auto}.lp-tl2__axis{grid-column:2;grid-row:1 / span 6;justify-self:center;width:2px;background:linear-gradient(var(--rule),var(--rule));border-radius:2px}.lp-tl2__label{grid-row:1;margin:0 0 18px;font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase}.lp-tl2__label--them{grid-column:1;text-align:right;color:var(--ink-muted)}.lp-tl2__label--us{grid-column:3;color:var(--ink);font-weight:700}.lp-tl2__row{display:contents}.lp-tl2__them,.lp-tl2__us{display:flex;align-items:baseline;gap:14px;padding:18px 0}.lp-tl2__them{grid-column:1;justify-content:flex-end;text-align:right;color:var(--ink-muted)}.lp-tl2__us{grid-column:3;color:var(--ink)}.lp-tl2__them p,.lp-tl2__us p{margin:0;line-height:1.4}.lp-tl2__them p{font-size:15px}.lp-tl2__us p{font-size:16.5px;font-weight:700;letter-spacing:-.01em}.lp-tl2 time{flex:none;font-family:var(--font-mono);font-size:11.5px;color:var(--ink-muted);white-space:nowrap}.lp-tl2__us time{color:var(--accent-ink)}.lp-tl2__node{grid-column:2;position:relative;display:grid;place-items:center;z-index:1}.lp-tl2__dot{width:12px;height:12px;border-radius:99px;background:var(--accent);box-shadow:0 0 0 4px var(--paper),0 0 0 6px color-mix(in srgb,var(--accent) 45%,transparent);font-style:normal}.lp-tl2__dot--them{display:none}.lp-tl2__dot--end{background:var(--ink);box-shadow:0 0 0 4px var(--paper)}.lp-tl2__who{display:flex;align-items:center;gap:10px;font-size:15px!important}.lp-tl2__who--us{font-weight:700}.lp-faces--real i{color:#1c1b17;font-weight:700;font-size:12px}@media(max-width:640px){.lp-tl2{grid-template-columns:1fr 18px 1fr;column-gap:10px}.lp-tl2__them,.lp-tl2__us{flex-direction:column;gap:4px;padding:14px 0}.lp-tl2__them{align-items:flex-end}.lp-tl2__them p{font-size:13px}.lp-tl2__us p{font-size:14px}.lp-tl2__label{font-size:9.5px;letter-spacing:.12em}.lp-tl2__them time{order:-1}.lp-tl2__us time{order:-1}.lp-tl2__dot{width:10px;height:10px}.lp-faces i{width:24px;height:24px;margin-left:-7px}.lp-tl2__who{flex-direction:column;align-items:inherit;font-size:12.5px!important}}.lp-tl2__row>*{grid-row:var(--r)}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --ground:#0b0b0f; --surface:#15151b; --surface-alt:#1b1b23; --sand:#22222c;
    --hairline:#2a2a30; --outline:#3a3a42; --ink:#f2f2f5; --ink-soft:#c7c6d2;
    --muted:#8e8e96; --leaf:#818cf8; --lime-hi:#b9b9ff; --on-accent:#0b0b0f;
    --accent-ink:#818cf8; --focus:#818cf8; --signal:#e0a092;
    --band:#1b1b2b; --on-band:#f4f3fb; --on-band-soft:#cfcde6;
    --sky-top:#15151f; --sky-low:#282a41;
    --mint:#1b1b2b; --mint-ink:#818cf8; --mint-tag:#818cf8;
    --sage:#1e1e2a; --sage-ink:#a5b4fc; --sage-tag:#a5b4fc;
    --lime:#202033; --lime-ink:#b9b9ff; --lime-tag:#b9b9ff;
    --cream:#17171f; --cream-ink:#c7d2fe; --cream-tag:#c7d2fe;
    --shadow-sm: 0 1px 2px rgb(0 0 0 / .4), 0 4px 12px -4px rgb(0 0 0 / .5);
    --shadow: 0 2px 4px rgb(0 0 0 / .4), 0 18px 40px -16px rgb(0 0 0 / .6);
  }
}

/* ============================================================
   THE WayVibe LOCKUP -- ONE BLOCK FOR EVERY PLACE IT RENDERS.
   The real answer is a component with an `iconOnly` flag, and that now
   exists at apps/web/src/components/Logo.tsx. This bundle is compiled
   output whose source was lost, so until the port lands the same idea is
   expressed here: one rule, every site listed once, size the only variable.

   THE TEXT GOES ON THE PARENT ANCHOR, NOT THE SPAN. `.nav__word` computes
   to `display:block; width:0` under a rule this file cannot outrank, so
   generated content inside it had no box and spilled straight across the
   nav links. The parent is a flex container, so an ::after there becomes a
   real flex item that takes its own width.
   ============================================================ */
.nav__home .nav__word,
.footer__brand > svg,
.footer__mark > svg { display: none !important; }

.nav__home::after, .footer__brand::after, .footer__mark::after {
  content: "wayvibe";
  font-family: Slackey, var(--font-display);
  color: var(--ink);
  line-height: 1.1;
  white-space: nowrap;
  /* INHERITED TRACKING IS THE TRAP. `.footer__mark` is a <p> set at
     font-size:420px with letter-spacing:-25.2px -- about -6%, which is
     right for the giant drawn wordmark it used to hold. Generated text
     inherits the ABSOLUTE -25.2px, so at 108px the letters overlapped each
     other and the word came out as a smear. Tracking is set per size here
     instead of inherited. */
  letter-spacing: normal;
}

/* The <p> kept the metrics of the artwork it no longer contains: a 336px
   line-height left a screen of dead space under the footer links. Collapsed
   to the text that is actually in it now. */
.footer__mark {
  font-size: 0 !important;
  line-height: 0 !important;
  height: auto !important;
  margin-block: 8px !important;
}
.footer__mark::after { line-height: 1 !important; letter-spacing: -.03em; }
.footer__brand::after { letter-spacing: -.01em; }
.nav__home::after   { font-size: 22px; }
.footer__brand::after { font-size: 34px; }
.footer__mark::after  { font-size: 108px; }
.nav__home { display: inline-flex; align-items: center; gap: 8px; }

/* THE W, AND NOTHING ELSE. The mark's svg is <rect> (the tile), <g><path>
   (the W itself), then two loose <path> siblings -- the sparkle and the row
   of dots. The owner: "remove the spakles and dot's from the logo only W
   with lavender color". So the tile and the two stray paths go, the W keeps
   the group, and the stroke takes the brand lavender -- which is exactly
   what Wordmark.tsx already draws in the app, so the two now match. */
.nav__home > svg > rect,
.lp-close__logo svg > rect,
.nav__home > svg > path,
.lp-close__logo svg > path { display: none !important; }
.nav__home > svg g path,
.lp-close__logo svg g path { stroke: var(--wv-mark, #b9b9ff) !important; }

@font-face{font-family:Slackey;src:url(/fonts/Slackey-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}

/* The font and icon credits line. Removed on the owner's instruction --
   it is a colophon, not something a visitor needs, and it was the longest
   line in the footer. The OFL and Apache licence files still ship beside
   the fonts in /fonts/, which is what those licences actually require;
   a visible credit is not a condition of either. */
.footer__fonts { display: none !important; }

/* ============================================================
   DARK MODE: THE HARDCODED WHITE SURFACES.
   Adding a dark palette moved --ink to near-white, but ten rules paint
   their own background as a literal #fff rather than var(--surface). On a
   dark page that is white text on a white card -- the features grid was
   unreadable, and it was my regression, not the refresh's.
   These are those ten, given the dark surface so the inherited ink reads
   against them. Listed explicitly because a blanket rule would also repaint
   the places where white is deliberate (the Google button, the phone
   mockup's screen).
   ============================================================ */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .feat-card,
  :root:not([data-theme="light"]) .lock__card,
  :root:not([data-theme="light"]) .lp-card,
  :root:not([data-theme="light"]) .ph-sheet {
    background: var(--surface) !important;
    border-color: var(--hairline) !important;
  }
  :root:not([data-theme="light"]) .feat-btn,
  :root:not([data-theme="light"]) .ph-chip,
  :root:not([data-theme="light"]) .ph-input,
  :root:not([data-theme="light"]) .ph__bars {
    background: var(--surface-alt) !important;
    color: var(--ink) !important;
  }
  /* The mochi cards set their own lavender fill and near-black ink, which
     is correct in both schemes -- left alone on purpose. */
}

/* The W, sized to sit with the wordmark rather than under it. The mark's
   svg box is 36px against 22px type; matching their optical weight means a
   slightly larger glyph and a baseline nudge, since the W's drawn box has
   headroom the letters do not. */
.nav__home > svg { width: 30px !important; height: 30px !important; }
.nav__home { gap: 10px !important; align-items: center !important; }
.nav__home::after { position: relative; top: 1px; }

/* ============================================================
   17 Oct, batch of fixes from the owner's screenshots.
   ============================================================ */

/* 1. The OSM credit sat over the hero as a stray line of grey text. The map
      is decorative here and the attribution belongs with the asset, not
      stamped across the landing page. */
.lp-hero__credit, .hero__credit, [class*="__credit"] { display: none !important; }

/* 2. The hero map stops short of the fold, leaving a band of bare ground
      under it. Full viewport height so the map is the page. */
.lp-hero, .hero { min-height: 100svh !important; }
.lp-hero__map, .hero__map, .lp-map { height: 100% !important; min-height: 100svh !important; }

/* 3. The W, larger and optically aligned with the wordmark. */
.nav__home > svg { width: 34px !important; height: 34px !important; }
.nav__home { gap: 9px !important; align-items: center !important; }
.nav__home::after { position: relative; top: 2px; font-size: 24px !important; }

/* 4. MOBILE. The footer lockup overflowed its column and the big mark ran
      off the side -- the sizes were fixed pixels tuned for desktop. */
@media (max-width: 760px) {
  .footer__mark::after  { font-size: 54px !important; }
  .footer__brand::after { font-size: 26px !important; }
  .nav__home::after     { font-size: 20px !important; }
  .nav__home > svg      { width: 28px !important; height: 28px !important; }
  .footer__mark, .footer__brand { max-width: 100% !important; overflow: hidden !important; }
}
@media (max-width: 420px) {
  .footer__mark::after { font-size: 40px !important; }
}

/* 5. Hover: a deeper lavender rather than the old wash, so the feedback
      reads as the theme rather than as a leftover. */
.btn--primary:hover, .lp-cta__primary:hover, .feat-btn:hover, .wv-theme:hover {
  background: #8b86f0 !important;
  border-color: #8b86f0 !important;
}
a:hover { text-decoration-color: var(--accent-ink); }

/* 6. The theme toggle button itself. */
.wv-theme {
  margin-left: 8px; padding: 6px 12px; border-radius: 999px;
  border: 1px solid var(--outline); background: transparent;
  color: var(--ink); font: inherit; font-size: 13px; cursor: pointer;
}

/* The OSM credit: `.lp-osm-credit`, not the `__credit` pattern I guessed.
   The attribution stays with the SVG asset itself (its own comment carries
   the ODbL notice), which is what the licence requires -- a line stamped
   across the hero is not. */
.lp-osm-credit { display: none !important; }

/* ============================================================
   TYPOGRAPHY PASS, 17 Oct.
   The refresh's scale is sound and mostly left alone: h1 at -.04em/.98,
   h2 -.035em/1.02, body 1.6, eyebrows +.16em. Three things were wrong.
   ============================================================ */

/* 1. SLACKEY MUST NOT INHERIT INTER'S TRACKING. The wordmark rules carry
      -.03em, which is right for a tight grotesque and wrong for a round
      display face: negative tracking closes Slackey's counters and the
      letters start to touch. Set to zero and let the face space itself.
      `.nav__word` keeps its own -.03em for the SVG it no longer shows, so
      this has to be stated on the generated text rather than inherited. */
.nav__home::after, .footer__brand::after, .footer__mark::after {
  letter-spacing: 0 !important;
  word-spacing: .02em;
}

/* 2. FIXED-PIXEL LEADING DOES NOT SCALE. `.caption` (20px), `.eyebrow`/
      `.kicker` (18px), `h4` (18px) and `.tag` (16px) all set line-height in
      px, so a reader who turns their system font up gets the larger glyphs
      in the old line box and the text collides. Unitless, same ratio. */
.caption        { line-height: 1.45 !important; }
.eyebrow, .kicker { line-height: 1.4 !important; }
h4              { line-height: 1.4 !important; }
.tag            { line-height: 1.35 !important; }

/* 3. THE MIDDLE OF THE SCALE WAS UNTRACKED. Everything from 18px up carries
      negative tracking except the ledes and buttons, which sit right in that
      range -- so the hero's headline is tight and the sentence under it is
      not, and the two read as different typefaces. A light negative keeps
      them in the same voice without touching the body copy, which wants its
      default spacing at 17px. */
.lede, .hero__lede { letter-spacing: -.01em; }
.btn, .btn--xl     { letter-spacing: -.005em; line-height: 1.25; }

/* Card copy: 1.6 is right for a full-measure paragraph and loose inside a
   narrow card, where the line is half as long and the eye returns sooner. */
.feat-card p, .lp-card p { line-height: 1.5; }
.feat-card li, .lp-card li { line-height: 1.45; }

/* ============================================================
   THE MARK, CROPPED TO THE W
   The tile, the sparkle and the dots are hidden above, so all that is
   left on screen is the W stroke -- and that stroke only occupies the
   middle 42% of the 512 tile it was drawn in. At a 34px box the visible
   letter came out about 14px tall, against a 24px wordmark: the mark read
   as an afterthought beside its own name.
   The viewBox is now cropped to the stroke's own bounds in the bundle
   ("142 113 236 236"), so the glyph fills ~91% of the box. The box shrinks
   to match, which leaves the W and the word the same height.
   ============================================================ */
.nav__home > svg { width: 26px !important; height: 26px !important; }
.lp-close__logo svg { width: 46px !important; height: 46px !important; }
@media (max-width: 760px) {
  .nav__home > svg { width: 22px !important; height: 22px !important; }
}

/* ============================================================
   THEME TOGGLE
   It shipped as the bare word "Dark" with no styling at all, which read as
   a nav link that had lost its underline. Three states need three glyphs:
   sun, moon, and a monitor for "whatever the machine is set to".
   Colour is inherited rather than set, so the button is legible whichever
   way the nav pill is painted.
   ============================================================ */
.wv-theme {
  display: inline-grid;
  place-items: center;
  width: 38px;
  height: 38px;
  padding: 0;
  margin-left: 2px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
  color: inherit;
  cursor: pointer;
  transition: background-color .2s var(--ease-out), border-color .2s var(--ease-out);
}
.wv-theme svg { width: 18px; height: 18px; display: block; }
.wv-theme:hover,
.wv-theme:focus-visible {
  background: color-mix(in srgb, currentColor 12%, transparent);
  border-color: color-mix(in srgb, currentColor 22%, transparent);
}
.wv-theme:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
@media (max-width: 760px) {
  .wv-theme { width: 34px; height: 34px; }
  .wv-theme svg { width: 17px; height: 17px; }
}

/* ============================================================
   THE NINE CITIES, NAMED
   "455 real places across 9 cities" asked a question it did not answer.
   Ahmedabad is the one you can actually use today; the other eight have
   curated places in them but no launch yet, and saying so is better than
   letting somebody in Pune download the app and find nobody there.
   ============================================================ */
.lp-cities {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 6px;
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
}
.lp-city {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 11px 5px 9px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  background: color-mix(in srgb, var(--surface) 70%, transparent);
  font-size: 13px;
  line-height: 1;
  color: var(--muted);
  white-space: nowrap;
}
.lp-city__dot {
  width: 6px;
  height: 6px;
  border-radius: 999px;
  background: currentColor;
  opacity: .45;
}
.lp-city__tag {
  font-family: var(--font-mono);
  font-size: 10px;
  letter-spacing: .04em;
  text-transform: uppercase;
  opacity: .7;
}
.lp-city--live {
  border-color: var(--leaf);
  background: var(--mint);
  color: var(--accent-ink);
  font-weight: 600;
}
.lp-city--live .lp-city__dot {
  background: var(--accent-ink);
  opacity: 1;
  /* A live dot that does not pulse is just a bullet. */
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent-ink) 18%, transparent);
}
.lp-city--live .lp-city__tag { opacity: 1; }
@media (max-width: 760px) {
  .lp-city { font-size: 12px; padding: 4px 9px 4px 8px; }
  /* Eight "soon" chips on a phone is a wall. The live one earns its row;
     the rest stay readable but stop competing with the headline. */
  .lp-cities { gap: 5px; }
}

/* The street map was dense enough to read as texture at .9. A country
   outline is one big flat shape sitting directly behind the headline, so
   the same opacity turns it into a competing object. */
.lp-osm { opacity: .42 !important; }

/* The strip is an aside to the count line above it, not a band across the
   hero -- unconstrained it ran out under the floating cards. */
.lp-cities { max-width: 720px; margin-inline: auto; }

/* The cards held an emoji centred on a gradient -- a placeholder that had
   been asked about enough times. They hold photographs now, so the span's
   grid centring and font-size give way to an image box. aspect-ratio stays:
   it reserves the 4:5 before the file lands and keeps the hero from
   reflowing under the reader. */
.lp-card__img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
  background: var(--sand);
  font-size: 0;
}

/* ============================================================
   DARK MODE REACHES THE LANDING PAGE
   The landing page carries its own palette inside `.lp` -- paper, sheet,
   card, rule, ink -- and its dark variant was shipped behind
   `:root[data-theme=dark-off] .lp`, an attribute value nothing ever sets.
   So the root dark block repainted the nav and the chips while the hero
   underneath stayed cream: dark chrome on a light page.
   Same declarations, under the guards the rest of dark mode uses.
   ============================================================ */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .lp {
    --paper: #0f0e0c; --sheet: #151310; --warm: #1a1714; --card: #1f1c18;
    --rule: #2c2822; --ink: #f6f1e7; --ink-soft: #cfc6b8; --ink-muted: #a3988a;
    --accent-ink: #b9b9ff; --accent-wash: #15151f; --land: #1b1b2b;
  }
}
:root[data-theme="dark"] .lp {
  --paper: #0f0e0c; --sheet: #151310; --warm: #1a1714; --card: #1f1c18;
  --rule: #2c2822; --ink: #f6f1e7; --ink-soft: #cfc6b8; --ink-muted: #a3988a;
  --accent-ink: #b9b9ff; --accent-wash: #15151f; --land: #1b1b2b;
}

/* The city chips live inside `.lp`, so they take the landing palette rather
   than the root one -- otherwise they flip on a different schedule from the
   hero they sit on. */
.lp-city {
  border-color: var(--rule);
  background: color-mix(in srgb, var(--card) 72%, transparent);
  color: var(--ink-muted);
}
.lp-city--live {
  border-color: var(--accent-ink);
  background: var(--accent-wash);
  color: var(--accent-ink);
}
.lp-card__img { background: var(--warm); }

/* The map is drawn light-on-nothing, so the opacity that makes it a
   whisper on cream makes it a grey continent on black. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .lp-osm { opacity: .13 !important; }
}
:root[data-theme="dark"] .lp-osm { opacity: .13 !important; }

@media (max-width: 480px) {
  /* The nav pill has no room to spare: at 390px the toggle was enough to
     push the hamburger onto a second row. */
  .wv-theme { width: 30px; height: 30px; margin-left: 0; }
  .wv-theme svg { width: 16px; height: 16px; }
  /* Nine chips want to be three rows here, not four. */
  .lp-city { font-size: 11.5px; padding: 3px 8px 3px 7px; gap: 5px; }
  .lp-city__tag { font-size: 9px; }
  .lp-city__dot { width: 5px; height: 5px; }
  .lp-cities { gap: 4px; }
}

/* At 390px the pill needs 379px of content in 355px of room, so the
   hamburger dropped to a second row the moment the toggle joined it.
   Trimmed out of the padding and the gaps rather than off the toggle,
   which is already at its minimum tap size. */
@media (max-width: 480px) {
  .nav__inner { gap: 3px !important; padding: 5px 5px 5px 6px !important; }
  .nav__home  { padding: 4px 8px 4px 4px !important; gap: 6px !important; }
  .wv-theme   { width: 28px; height: 28px; }
}

/* The pieces now add up to less than the pill's width, but the row still
   broke: `.nav__links` is a zero-width flex item that the wrap algorithm
   is free to push onto a line of its own, taking the hamburger with it.
   The links live in the dropdown at this size, so nothing needs to wrap. */
@media (max-width: 480px) {
  .nav__inner { flex-wrap: nowrap !important; }
  .nav__home  { min-width: 0; }
}

/* nowrap on the row means the CTA is the thing that gives, so it has to be
   told not to break its own label into two lines. */
@media (max-width: 480px) {
  .nav__cta { white-space: nowrap; flex: 0 0 auto; }
  .nav__cta-icon { display: none; }
}

/* ============================================================
   THE FOOTER BRAND GETS THE MARK TOO
   The nav lockup is W + word; the footer was the word on its own, because
   the footer's own <svg> is hidden along with the nav's and there is no
   second element to hang a mark on. A ::before carries it, from the same
   cropped path and the same lavender, so the two lockups match.
   ============================================================ */
.footer__brand { gap: 9px; }
.footer__brand::before {
  content: "";
  flex: 0 0 auto;
  width: 28px;
  height: 28px;
  background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="142 113 236 236"><path d="M168 146 C160 213 170 283 196 316 C222 283 238 233 256 214 C262 258 272 300 292 316 C322 278 342 213 352 148" fill="none" stroke="%23b9b9ff" stroke-width="44" stroke-linecap="round" stroke-linejoin="round"/></svg>') center / contain no-repeat;
}
@media (max-width: 760px) {
  .footer__brand::before { width: 24px; height: 24px; }
}

/* ============================================================
   THE AVATAR REPLACES THE MOCHI MASCOT
   The 3D mochi render never belonged beside this brand; the owner supplied
   a 2D cartoon instead. It is shown as a card rather than a floating
   cut-out on purpose: the character wears a black t-shirt against a dark
   corridor -- rgb(24,30,37) against rgb(22,24,34) -- so there is nothing to
   key on and any automatic removal takes the torso with the background.
   A drop-shadow is for a cut-out; a frame needs a box-shadow and a radius.
   ============================================================ */
.feat-hero__avatar {
  width: 100%;
  max-width: 340px;
  height: auto;
  aspect-ratio: 4 / 5;
  object-fit: cover;
  justify-self: center;
  border-radius: 22px;
  box-shadow: var(--shadow);
}
@media (max-width: 760px) {
  .feat-hero__avatar { max-width: 220px; order: -1; border-radius: 18px; }
}

/* The three feature cards that carried a mochi pose now carry a framing of
   the owner's artwork. Same placement and same lavender card as before, but
   a radius instead of a bare cut-out, for the reason given above. */
.feat-card--avatar {
  background: var(--wv-lime);
  color: var(--wv-ink);
  padding-right: 200px;
}
.feat-card__avatar {
  position: absolute;
  right: 16px;
  bottom: 12px;
  width: 170px;
  height: auto;
  aspect-ratio: 400 / 440;
  object-fit: cover;
  border-radius: 14px;
  box-shadow: 0 10px 24px -12px rgba(20, 18, 16, .55);
}
@media (max-width: 760px) {
  .feat-card--avatar { padding-right: 24px; padding-bottom: 170px; }
  .feat-card__avatar { width: 140px; }
}

/* ============================================================
   THE MARK IS THE W, HERE TOO
   The lockup was a W followed by the whole word, which put the letter on
   screen twice. The owner, 17 Oct: "there is no point to show the extra W
   before the WayVibe Text, W can start the word ... remove the first
   initial from the TEXT LOGO and then replace that with the Icon of W".
   So the generated text loses its leading "w" and the drawn mark stands in
   for it, in the nav, in the footer brand and in the giant footer wordmark.
   The gap goes to nothing: a space between a letter and the rest of its
   word is a word break, not spacing.
   ============================================================ */
.nav__home::after,
.footer__brand::after,
.footer__mark::after {
  content: "ayvibe";
  /* Tighter, at his word: "the gap need to be reduce from every Character".
     Slackey is drawn loose — it fits a sentence, not a logotype. -2% groups
     the letters without the round counters starting to close on each other,
     which is what happens past about -5% on a face this circular. */
  letter-spacing: -.02em !important;
}
.nav__home { gap: 1px !important; }
.footer__brand { gap: 1px !important; }

/* The giant wordmark at the foot of the page had no mark at all. Same two
   shapes as the nav, scaled to its cap height. */
.footer__mark { display: flex; align-items: center; justify-content: center; }
.footer__mark::before {
  content: "";
  flex: 0 0 auto;
  width: .78em;
  height: .78em;
  margin-right: 1px;
  background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="142 113 236 236"><path d="M168 146 C160 213 170 283 196 316 C222 283 238 233 256 214 C262 258 272 300 292 316 C322 278 342 213 352 148" fill="none" stroke="%23b9b9ff" stroke-width="44" stroke-linecap="round" stroke-linejoin="round"/></svg>') center / contain no-repeat;
}
/* `.footer__mark` is set to font-size:0 with the size on its ::after, so the
   em the ::before is sized in has to come from the same place. */
.footer__mark::before { font-size: 108px; }
@media (max-width: 980px) { .footer__mark::before { font-size: 54px; } }
@media (max-width: 760px) { .footer__mark::before { font-size: 40px; } }

/* The text was nudged down 2px to sit against a mark that was a separate
   object beside it. It is the same word as that mark now, so the nudge put
   the first letter 2px above the rest of its own name. */
.nav__home::after { top: 0 !important; }

/* ============================================================
   ONE PALETTE: THE WEBSITE USES THE APP'S COLOURS (W-541)
   His words: "in the website you've not used the same colors as app".
   The site had grown three dark palettes and two light ones, none of them the
   app's: a warm brown-black (#0f0e0c / #1a1815) from the cream refresh, a
   blue-black (#0b0b0f) from the lavender patch, and the app's real values
   nowhere. Visible result: warm-grey cards on a cool-grey page.

   This block is the single source and is deliberately LAST. The dark values
   are apps/mobile/src/theme (the app is dark-only; preference.ts returns
   'dark' unconditionally), copied exactly:
     ground #121214  surface #1D1C21  surfaceAlt #252429
     hairline #2A2A30  outline #3A3A42
     ink #FAFAFA  inkSoft #C7C7CC  muted #8E8E96
     primary #818CF8  primarySoft #282A41  onPrimary #1C1B22
   --leaf / --wv-lime are the FILL colour (buttons, chips, the avatar cards),
   so in dark they are the app's primary and their ink is onPrimary -- not the
   old pale #d3d3ff, which was a light-mode lavender.

   Order matters and is the only subtle part: the light block is guarded
   :not([data-theme=dark]) and so ALSO matches an OS-dark visitor with no
   saved choice; the dark blocks come after it at equal specificity and win.
   Do not reorder them.

   LIGHT MODE: the neutrals were cream (#fffcf6 / #f6f0e4) -- a yellow-brown
   that fights a lavender accent. Same lightness steps, tinted toward the
   accent hue instead, and the accent text/fill pair is the app's primary
   (#818CF8 fill, onPrimary ink) with #4338ca for text on light, because
   #818CF8 itself is only 2.98:1 on white and may not carry words.
   ============================================================ */
:root:not([data-theme="dark"]) {
  --ground: #fafafd; --surface: #ffffff; --surface-alt: #f1f1f8; --sand: #f4f4fa;
  --hairline: #e4e4ee; --outline: #cfcfdc;
  --ink: #121214; --ink-soft: #46464e; --muted: #67677a;
  --leaf: #818cf8; --lime-hi: #c7cbfb; --on-accent: #1c1b22;
  --accent-ink: #4338ca; --focus: #4338ca;
  --wv-lime: #818cf8; --wv-ink: #1c1b22;
  --shadow-sm: 0 1px 2px rgba(28, 27, 60, .05), 0 10px 30px -12px rgba(28, 27, 60, .14);
  --shadow: 0 30px 60px -30px rgba(28, 27, 60, .35);
}
.lp {
  --paper: #fafafd; --sheet: #f4f4fa; --warm: #f1f1f8; --card: #ffffff;
  --rule: #e4e4ee; --ink: #121214; --ink-soft: #46464e; --ink-muted: #67677a;
  --accent: #818cf8; --accent-deep: #6366f1; --accent-ink: #4338ca;
  --accent-wash: #eef0fe; --land: #e4e6fd;
  --shadow-card: 0 1px 2px rgba(28, 27, 60, .05), 0 10px 30px -12px rgba(28, 27, 60, .14);
  --shadow-lift: 0 30px 60px -30px rgba(28, 27, 60, .35);
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --ground: #121214; --surface: #1d1c21; --surface-alt: #252429; --sand: #252429;
    --hairline: #2a2a30; --outline: #3a3a42;
    --ink: #fafafa; --ink-soft: #c7c7cc; --muted: #8e8e96;
    --leaf: #818cf8; --lime-hi: #818cf8; --on-accent: #1c1b22;
    --accent-ink: #818cf8; --focus: #818cf8; --signal: #e0a092;
    --band: #1d1c21; --on-band: #fafafa; --on-band-soft: #c7c7cc;
    --sky-top: #121214; --sky-low: #282a41;
    --mint: #282a41; --mint-ink: #818cf8; --mint-tag: #818cf8;
    --sage: #282a41; --sage-ink: #818cf8; --sage-tag: #818cf8;
    --lime: #282a41; --lime-ink: #818cf8; --lime-tag: #818cf8;
    --cream: #1d1c21; --cream-ink: #fafafa; --cream-tag: #818cf8;
    --wv-lime: #818cf8; --wv-ink: #1c1b22;
    --shadow-sm: 0 1px 2px rgb(0 0 0 / .4), 0 4px 12px -4px rgb(0 0 0 / .5);
    --shadow: 0 2px 4px rgb(0 0 0 / .4), 0 18px 40px -16px rgb(0 0 0 / .6);
  }
  :root:not([data-theme="light"]) .lp {
    --paper: #121214; --sheet: #1d1c21; --warm: #1d1c21; --card: #1d1c21;
    --rule: #2a2a30; --ink: #fafafa; --ink-soft: #c7c7cc; --ink-muted: #8e8e96;
    --accent: #818cf8; --accent-ink: #818cf8; --accent-wash: #282a41; --land: #1d1c21;
  }
}
:root[data-theme="dark"] {
  --ground: #121214; --surface: #1d1c21; --surface-alt: #252429; --sand: #252429;
  --hairline: #2a2a30; --outline: #3a3a42;
  --ink: #fafafa; --ink-soft: #c7c7cc; --muted: #8e8e96;
  --leaf: #818cf8; --lime-hi: #818cf8; --on-accent: #1c1b22;
  --accent-ink: #818cf8; --focus: #818cf8; --signal: #e0a092;
  --band: #1d1c21; --on-band: #fafafa; --on-band-soft: #c7c7cc;
  --sky-top: #121214; --sky-low: #282a41;
  --mint: #282a41; --mint-ink: #818cf8; --mint-tag: #818cf8;
  --sage: #282a41; --sage-ink: #818cf8; --sage-tag: #818cf8;
  --lime: #282a41; --lime-ink: #818cf8; --lime-tag: #818cf8;
  --cream: #1d1c21; --cream-ink: #fafafa; --cream-tag: #818cf8;
  --wv-lime: #818cf8; --wv-ink: #1c1b22;
  --shadow-sm: 0 1px 2px rgb(0 0 0 / .4), 0 4px 12px -4px rgb(0 0 0 / .5);
  --shadow: 0 2px 4px rgb(0 0 0 / .4), 0 18px 40px -16px rgb(0 0 0 / .6);
}
:root[data-theme="dark"] .lp {
  --paper: #121214; --sheet: #1d1c21; --warm: #1d1c21; --card: #1d1c21;
  --rule: #2a2a30; --ink: #fafafa; --ink-soft: #c7c7cc; --ink-muted: #8e8e96;
  --accent: #818cf8; --accent-ink: #818cf8; --accent-wash: #282a41; --land: #1d1c21;
}

/* ============================================================
   FOUR MORE ACTIVITY BADGES: café, chai, pickleball, box cricket (W-542)
   His words: the hero should show more of what people actually plan. The
   existing three (music, noodles, board game) read as "a night out"; these
   four are the Ahmedabad evening -- the actual first plans on the map.
   Same `.lp-av` disc, so the bob, the ring and the scroll-parallax come
   free; only the anchor points are new. Offsets sit in the gutters either
   side of the headline (which owns the middle 40%) and clear of the two
   photo cards. Sizes step down so they read as a scatter, not a grid.
   On a phone there is no gutter -- the headline is the width of the
   screen -- so only the café stays, beside the first existing badge.
   ============================================================ */
.lp-av--d { left: 22%; top: 66%;    width: 46px; height: 46px; font-size: 22px; translate: 0 calc((var(--hp) - .5) * -240px); animation-delay: -1s; }
.lp-av--e { right: 4%; top: 20%;    width: 44px; height: 44px; font-size: 21px; translate: 0 calc((var(--hp) - .5) * -180px); animation-delay: -3s; }
.lp-av--f { left: 24%; bottom: 7%;  width: 40px; height: 40px; font-size: 19px; translate: 0 calc((var(--hp) - .5) * -120px); animation-delay: -5s; }
.lp-av--g { right: 10%; bottom: 26%; width: 48px; height: 48px; font-size: 23px; translate: 0 calc((var(--hp) - .5) * -280px); animation-delay: -2.5s; }
@media (max-width: 759px) {
  .lp-av--d { left: 6%; top: 15%; width: 42px; height: 42px; font-size: 20px; }
  .lp-av--e, .lp-av--f, .lp-av--g { display: none; }
}

/* ============================================================
   POLICY PAGES: THE TITLE IS INK, AND THE RULE IS DRAWN ONCE (W-543)
   Two defects the audit found by looking, not by reading the CSS.
   (1) The page title was the SOFT grey. `.prose` sets its body colour to
   --ink-soft and `h1` inherits it, while h2/h3 re-assert --ink -- so the
   one line that should be loudest on a legal page was the quietest.
   (2) Every section break was drawn twice: the copy carries an <hr> before
   each numbered heading, and `.prose h2` also has its own border-top. Two
   hairlines with ~100px of dead air between them read as a rendering bug.
   The h2 border is the one that stays, because it travels with the heading
   if a section is ever reordered; the <hr>s are inert markup.
   ============================================================ */
.prose h1 { color: var(--ink); }
.prose hr { display: none; }

/* The "Questions?" links on /features/ were --wv-deep (#1b1b2b) on every
   theme. On cream that was fine; on the dark ground it is near-black on
   near-black, 1.1:1 -- the three links the page ends on were invisible, and
   had been since dark mode shipped. The old dark fix keyed on
   `[data-theme=dark-off]`, a value nothing sets. --accent-ink is already the
   readable lavender in both schemes: 7.6:1 on the light ground, 6.3:1 on dark. */
.feat-more a { color: var(--accent-ink); }

/* Same cause, worse consequence: the keyboard focus ring was --wv-deep too,
   so on the dark ground a tabbing user got no visible ring at all. --focus
   is already defined per scheme (#4338ca light, #818cf8 dark -- 3:1 or
   better against its ground, the WCAG 2.2 minimum for a focus indicator). */
a:focus-visible, button:focus-visible, .lp-btn:focus-visible, summary:focus-visible { outline-color: var(--focus); }

/* The three avatar cards on /features/ carry --wv-ink (near-black) because in
   light they sit on a lavender fill. In dark the earlier "cards get the dark
   surface" block repaints their background (!important, above) but never
   touched their ink, so the headline and body were near-black on #1d1c21,
   invisible. In dark the card IS a surface, so its text is the page ink,
   exactly like its sibling cards: 16.2:1 on #1d1c21. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .feat-card--avatar { color: var(--ink); }
}
:root[data-theme="dark"] .feat-card--avatar { color: var(--ink); }

/* The W colour is now one variable, --wv-mark, defined in the last block of this file (row 573). */


/* ============================================================
   ROW 573 (open-items.md; its own sequence, not a W-number): ONE FINAL BLOCK
   FOR THE PHONE BREAKAGE, THE LOCKUP AND THE LIGHT W.
   LAST IN THE FILE ON PURPOSE. This bundle is compiled output with no
   working source, patched as an append-only stack, and nothing below has an
   equivalent in apps/web/src.

   ROOT CAUSES, so the next person does not patch the symptoms again:
   (a) Absolute positioning in fixed px, then moved by scroll. The hero
       reserved 250px under the copy for two absolutely-placed polaroids,
       then the scroll-linked `translate` (--hp) lifted them by up to 190px,
       straight over the button and the line under it. Parallax is off on a
       phone and the reserve is computed from the card, not guessed.
   (b) `flex-wrap: nowrap !important` on the nav pill at <=480. It was added
       so the closed pill would stay on one row, and it also forced the OPEN
       dropdown (a 100%-basis flex item) into the same row: the links, the
       wordmark and the X all fought for 350px and the W was squeezed to 0.
   (c) Fixed px phone mockups (200px, +-62% offsets) and a swipe row for the
       steps, with `body{overflow-x:hidden}` hiding the result from
       scrollWidth. scrollWidth was never evidence here; the audit lifts that
       clip and checks the boxes.
   ============================================================ */

/* ---- the W colour: one variable, dark untouched (#b9b9ff as before) ---- */
:root { --wv-mark: #b9b9ff; }
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) { --wv-mark: #4f46e5; }
}
:root[data-theme="light"] { --wv-mark: #4f46e5; }

/* ---- THE LOCKUP: W + "ayvibe", the same thing everywhere ----
   Size is the only variable (font-size on the container). The W box is
   .95em, sitting on the text baseline; its stroke leaves ~4.6% of the box
   empty underneath, so the letter ends .04em above the baseline (the
   "slightly raised" he asked for) and stands ~.12em above the b. */
.nav__home, .footer__brand, .footer__mark {
  display: inline-flex !important;
  align-items: baseline !important;
  gap: .03em !important;
  line-height: 1 !important;
}
.nav__home { font-size: 24px; }
.footer__brand { font-size: 34px; }
.footer__mark { font-size: clamp(40px, 16.5vw, 108px) !important; justify-content: center; }
@media (max-width: 760px) {
  .nav__home { font-size: 20px; }
  .footer__brand { font-size: 26px; }
}
.nav__home::after, .footer__brand::after, .footer__mark::after {
  font-size: 1em !important;
  line-height: 1 !important;
  letter-spacing: -.02em !important;
  position: static !important;
  top: auto !important;
}
.nav__home > svg { width: .95em !important; height: .95em !important; flex: 0 0 auto; }
.footer__brand::before, .footer__mark::before {
  content: "";
  flex: 0 0 auto;
  width: .95em;
  height: .95em;
  margin: 0;
  font-size: inherit !important;
  background: var(--wv-mark);
  -webkit-mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="142 113 236 236"><path d="M168 146 C160 213 170 283 196 316 C222 283 238 233 256 214 C262 258 272 300 292 316 C322 278 342 213 352 148" fill="none" stroke="black" stroke-width="44" stroke-linecap="round" stroke-linejoin="round"/></svg>') center / contain no-repeat;
  mask: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="142 113 236 236"><path d="M168 146 C160 213 170 283 196 316 C222 283 238 233 256 214 C262 258 272 300 292 316 C322 278 342 213 352 148" fill="none" stroke="black" stroke-width="44" stroke-linecap="round" stroke-linejoin="round"/></svg>') center / contain no-repeat;
}
.footer__mark, .footer__brand { max-width: 100%; }

/* ---- NAV ---- */
.nav__inner { background: color-mix(in srgb, var(--ground) 96%, transparent); }
@media (max-width: 759px) {
  .nav__inner { flex-wrap: wrap !important; }
  .nav__links { flex: 1 0 100% !important; order: 5; }
}
@media (max-width: 380px) {
  /* The label was clipped to 1px and the icon hidden: an empty pill. */
  .nav__cta .nav__cta-short { position: static; width: auto; height: auto; overflow: visible; clip: auto; }
  .nav__cta { padding-left: 10px; padding-right: 10px; font-size: 13px; }
}

/* ---- HERO, PHONE: nothing is positioned by guess or moved by scroll ---- */
@media (max-width: 759px) {
  .lp-hero { --cw: clamp(116px, 34vw, 150px); }
  .lp-card { translate: none !important; }
  /* The emoji badges sit at a % of a hero whose height depends on the phone and
     on the user's font size; on 360px or any enlarged text they landed on the
     "452 real places" pill. Decorative (aria-hidden), so they go on a phone. */
  .lp-av { display: none !important; }
  .lp-hero__inner { transform: none !important; opacity: 1 !important; }
  .lp-hero .lp-ground { transform: none !important; }
  .lp-card { width: var(--cw) !important; }
  .lp-card--a { left: calc(50% - var(--cw) - 6px) !important; bottom: 28px !important; }
  .lp-card--b { right: calc(50% - var(--cw) - 6px) !important; bottom: 46px !important; }
  /* card = photo (4:5) + its padding, plus the lower card's offset, the bob
     and the tilt, plus air above it */
  .lp-hero { padding-bottom: calc(var(--cw) * 1.25 + 44px + 46px + 10px + 24px) !important; }
}

/* ---- STEPS, PHONE: stacked, and the three phones inside the viewport ---- */
@media (max-width: 759px) {
  .lp-phones { --pw: min(190px, 50vw); height: calc(var(--pw) * 19 / 9 + 36px) !important; }
  .lp-phones .ph { --w: var(--pw) !important; }
  .lp-phones .ph--l { transform: translate(calc(min(1, var(--sp) * 2.2) * -49%)) rotate(calc(min(1, var(--sp) * 2.2) * -6deg)) translateY(-8px) scale(.8) !important; }
  .lp-phones .ph--r { transform: translate(calc(min(1, var(--sp) * 2.2) * 49%)) rotate(calc(min(1, var(--sp) * 2.2) * 6deg)) translateY(-8px) scale(.8) !important; }
  .lp-steps { display: grid !important; grid-template-columns: minmax(0, 1fr); gap: 28px; overflow: visible !important; margin-inline: 0 !important; padding-inline: 0 !important; text-align: left; }
  .lp-step { flex: none; }
}

/* ---- TABLES, PHONE: wrap the text, do not scroll it ----
   `.prose table` had min-width:460px inside an overflow-x:auto wrapper, so on
   a phone the second column ("Kept for") started off-screen and ran past the
   edge: the retention table on /privacy/ was half cut. */
@media (max-width: 560px) {
  .prose table { min-width: 0; }
  .prose th, .prose td { overflow-wrap: anywhere; }
}

/* ============================================================
   THE HERO MAP (row 573): THE WHOLE COUNTRY, IN BOTH THEMES
   Two faults, both measured.
   (1) CROP. The map was an <image> inside an <svg viewBox="0 0 1440 800"
       preserveAspectRatio="slice"> filling the hero. On a 390x820 phone
       `slice` scales by height and keeps only the middle 380 of 1440 units:
       Gujarat and Rajasthan (the west) were cut off, and on any screen the
       image box (y -30..830) overran the 800-unit viewport by 30 units, with
       Kanyakumari 12 units from the edge. A CSS mask also faded the south
       to ~16% opacity.
   (2) COLOUR. The file's fill/stroke (#e9e8fb / #d3d3ff) are fixed inside
       the image and page CSS cannot reach them, so "theming" was a blanket
       opacity: .42 on cream (about 1.1:1, invisible) and .13 on black.
   Fix: the old <image> is hidden and the map is drawn as a CSS background
   on the hero, `contain` inside a box that clears the nav, so the full
   shape is always in frame at any size. Two recoloured copies of the same
   Natural Earth data (map/india-light.svg, map/india-dark.svg) are switched
   by the same theme guards as everything else; a drop-shadow follows the
   outer alpha edge, which draws the coastline (Gujarat's Kathiawar and
   Kutch, the Konkan and Malabar coast, the southern tip) without outlining
   every internal border. Projection is unchanged: equirectangular with a
   cos(mid-latitude) correction, from scripts/make-india-map.py. */
:root {
  --wv-map: url('/map/india-light.svg');
  --wv-coast: rgb(79 70 229 / .55);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --wv-map: url('/map/india-dark.svg'); --wv-coast: rgb(129 140 248 / .5); }
}
:root[data-theme="dark"] { --wv-map: url('/map/india-dark.svg'); --wv-coast: rgb(129 140 248 / .5); }
.lp-hero .lp-osm { display: none !important; }
.lp-hero::before {
  content: "";
  position: absolute;
  z-index: -1;
  inset: calc(var(--nav-h) - 8px) clamp(8px, 2vw, 24px) 16px;
  pointer-events: none;
  background: var(--wv-map) 50% 46% / contain no-repeat;
  filter: drop-shadow(0 0 1.5px var(--wv-coast));
}

/* ============================================================
   LIGHT THEME, MEASURED (row 573). Dark is not touched.
   Contrast was computed from the rendered colours at 390px on every
   public page, text against its actual background and component edges
   against what they sit on. Text was already fine (lowest body/muted text
   4.4:1 over the map land, 5.05:1 elsewhere); four things were not:
   - the full stop after the hero headline, --accent #818cf8 on near-white:
     2.65-2.86:1, under the 3:1 a large glyph needs. It takes the mark's
     indigo (6:1).
   - form fields, the menu button and the ghost button drew their edge in
     #cfcfdc / #e4e4ee: 1.54 and 1.21:1, so on a white card the Send form
     had no visible boxes. They take #8a8a9e (3.4:1), the WCAG 1.4.11 floor.
   Card and pill hairlines (1.2:1) are decoration, not a component boundary,
   and were left. Same guard pattern as the rest of the file. */
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) .lp-dot { color: var(--wv-mark); }
  :root:not([data-theme="dark"]) input,
  :root:not([data-theme="dark"]) select,
  :root:not([data-theme="dark"]) textarea,
  :root:not([data-theme="dark"]) .nav__menu,
  :root:not([data-theme="dark"]) .lp-btn--ghost { border-color: #8a8a9e; }
}
:root[data-theme="light"] .lp-dot { color: var(--wv-mark); }
:root[data-theme="light"] input,
:root[data-theme="light"] select,
:root[data-theme="light"] textarea,
:root[data-theme="light"] .nav__menu,
:root[data-theme="light"] .lp-btn--ghost { border-color: #8a8a9e; }
