/* reelieve – website. A product page: black, one big object per chapter, the soap film as the only colour. */
@font-face{font-family:"Familjen Grotesk";font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/familjen-grotesk-latin-wght-normal.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Familjen Grotesk";font-style:normal;font-weight:400 700;font-display:swap;src:url(../fonts/familjen-grotesk-latin-ext-wght-normal.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}

:root{
  --bg:#000;--panel:#101012;--panel-2:#18181b;
  --ink:#f5f5f7;--ink-2:#a1a1a6;--ink-3:#86868b;
  --line:rgba(255,255,255,.08);
  --green:#7fd99a;--red:#f2657d;
  /* the sizes of the page */
  --mega:clamp(88px,15vw,240px);--h2:clamp(44px,6.4vw,96px);--h3:clamp(22px,1.8vw,28px);--lead:clamp(19px,1.6vw,24px);--small:15px;
  --ease:cubic-bezier(.22,.8,.24,1);
  color-scheme:dark;
}
*,*::before,*::after{box-sizing:border-box;margin:0}
html{overflow-x:clip;-webkit-text-size-adjust:100%;background:var(--bg);scroll-behavior:smooth;scroll-padding-top:70px}
body{background:var(--bg);color:var(--ink);font:400 18px/1.55 "Familjen Grotesk",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip}
img,canvas,svg{display:block;max-width:100%}
a{color:inherit}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--ink);outline-offset:4px;border-radius:6px}
::selection{background:rgba(255,255,255,.22)}
h1,h2,h3{font-weight:600;letter-spacing:-.04em;line-height:1;text-wrap:balance}
p{text-wrap:pretty}
.skip{position:absolute;left:-9999px}.skip:focus{left:16px;top:12px;z-index:50;background:var(--ink);color:#000;padding:8px 14px;border-radius:8px}

/* ---------- The bar: thin, dark, the mark on the left ---------- */
.bar{position:fixed;inset:0 0 auto;z-index:40;background:rgba(0,0,0,.72);-webkit-backdrop-filter:saturate(1.6) blur(20px);backdrop-filter:saturate(1.6) blur(20px);border-bottom:1px solid var(--line)}
.bar-in{display:flex;align-items:center;gap:28px;height:56px;width:min(1120px,100% - 40px);margin:0 auto;font-size:14px}
.mark{display:inline-flex;align-items:center;gap:10px;font-size:19px;font-weight:600;letter-spacing:-.02em;text-decoration:none}
.mark img{width:30px;height:30px;border-radius:8px}
.links{display:flex;gap:26px;margin-left:auto}
.links a,.lang{color:var(--ink-2);text-decoration:none;transition:color .3s}
.links a:hover,.lang:hover{color:var(--ink)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:16px 28px;border-radius:999px;background:var(--ink);color:#000;font-size:17px;font-weight:600;letter-spacing:-.01em;text-decoration:none;transition:transform .5s var(--ease),background .3s}
.btn svg{width:19px;height:19px;fill:currentColor;margin-top:-3px}
a.btn:hover{background:#fff;transform:scale(1.03)}
a.btn:active{transform:scale(.98)}
.btn.pill{padding:7px 14px;font-size:13px;gap:6px}
.btn.pill svg{width:13px;height:13px;margin-top:-2px}
.legal .bar .links{display:none}.legal .bar .lang{margin-left:auto}

/* ---------- The titanium iPhone ---------- */
.iphone{--w:320px;--band:calc(var(--w) * .0125);--bez:calc(var(--w) * .0215);position:relative;width:var(--w);aspect-ratio:70.6/146.6;border-radius:calc(var(--w) * .168);padding:var(--band);flex:none;
  background:linear-gradient(140deg,#d8d5cf 0%,#8a8782 18%,#c9c6c0 32%,#5d5b57 50%,#b9b6b0 70%,#77746f 86%,#d2cfc9 100%)}
.iphone::before{content:"";position:absolute;z-index:3;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 calc(var(--w) * .002) calc(var(--w) * .003) rgba(255,255,255,.75),inset 0 calc(var(--w) * -.002) calc(var(--w) * .004) rgba(0,0,0,.55),inset 0 0 0 calc(var(--w) * .0035) rgba(0,0,0,.25)}
.iphone .bezel{position:relative;height:100%;border-radius:calc(var(--w) * .156);background:#030304;padding:var(--bez);box-shadow:inset 0 0 0 calc(var(--w) * .0025) #1a1a1c}
.iphone .screen{position:relative;height:100%;overflow:hidden;border-radius:calc(var(--w) * .133);background:#000;isolation:isolate}
.iphone .screen img{display:block;width:100%;height:100%;object-fit:cover;object-position:top}
.iphone .screen::after{content:"";position:absolute;z-index:5;inset:0;pointer-events:none;background:linear-gradient(118deg,rgba(255,255,255,.09) 0%,rgba(255,255,255,.025) 26%,transparent 40%)}
.iphone .island{position:absolute;z-index:4;left:50%;top:calc(var(--band) + var(--bez) + var(--w) * .026);width:calc(var(--w) * .295);height:calc(var(--w) * .087);transform:translateX(-50%);border-radius:999px;background:#000}
.iphone .key{position:absolute;z-index:-1;width:calc(var(--w) * .011);border-radius:calc(var(--w) * .006);background:linear-gradient(90deg,#4b4946,#c9c6c0 45%,#7c7a76)}
.iphone .key.l{left:calc(var(--w) * -.0085)}
.iphone .key.r{right:calc(var(--w) * -.0085);background:linear-gradient(270deg,#4b4946,#c9c6c0 45%,#7c7a76)}
.iphone .k1{top:17%;height:5%}.iphone .k2{top:25.5%;height:9.5%}.iphone .k3{top:37%;height:9.5%}.iphone .k4{top:30%;height:14%}
.tilt3d{transform-style:preserve-3d;transform:rotateX(14deg) rotateY(-24deg) rotateZ(4deg);animation:hover3d 9s ease-in-out infinite}
@keyframes hover3d{0%,100%{transform:translateY(0) rotateX(14deg) rotateY(-24deg) rotateZ(4deg)}50%{transform:translateY(-14px) rotateX(11deg) rotateY(-19deg) rotateZ(3deg)}}

/* ---------- Chapter heads ---------- */
.sec-head{width:min(1000px,100% - 40px);margin:0 auto;text-align:center}
.sec-head h2{font-size:var(--h2)}
.sec-head p{margin:24px auto 0;max-width:34em;font-size:var(--lead);color:var(--ink-2)}

.phone3d{position:relative;display:grid;place-items:center;perspective:1700px;height:min(860px,max(560px,92vh));margin-top:8px}
.phone3d canvas.gl{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity 1.4s var(--ease)}
.phone3d.is-3d canvas.gl{opacity:1}
.phone3d .tilt3d{transition:opacity .8s}
.phone3d.is-3d .tilt3d{opacity:0}
.phone3d canvas.reels{display:block;width:100%;height:100%}
.phone3d .iphone{--w:clamp(270px,25vw,350px)}


/* ---------- What the feed costs: a life of 80 years, a dot each – asleep, at work, scrolling ---------- */
.cost,.how,.nets,.zero,.faq{padding-top:clamp(140px,16vw,220px)}
.cost{position:relative;display:flex;flex-direction:column;align-items:center;width:min(1120px,100% - 40px);margin:0 auto;text-align:center;isolation:isolate}
.cost::before{content:"";position:absolute;z-index:-1;inset:6% 0 -10%;background:radial-gradient(34% 42% at 32% 38%,rgba(120,100,255,.16),transparent 70%),radial-gradient(34% 42% at 70% 42%,rgba(255,110,200,.13),transparent 70%);pointer-events:none}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.cost-q{font-size:var(--h3);font-weight:500;letter-spacing:-.02em;line-height:1.3;color:var(--ink-2)}
/* the part being told: its count in its colour, and what it is */
.wk-head{display:grid;place-items:center;width:100%;height:clamp(120px,12vw,156px);margin-top:20px}
.wk-intro,.wk-phase{grid-area:1/1}
.wk-intro{font-size:clamp(22px,2.2vw,30px);font-weight:600;letter-spacing:-.025em;color:var(--ink-2)}
.wk-phase{visibility:hidden}
.cost.told .wk-intro{visibility:hidden}
.cost.told .wk-phase{visibility:visible}
.wk-count{display:flex;align-items:flex-end;justify-content:center;gap:.22em;font-weight:700;letter-spacing:-.04em;line-height:1}
.wk-n{font-size:clamp(52px,6vw,88px);font-variant-numeric:tabular-nums}
.wk-u{margin-bottom:.16em;font-size:clamp(24px,2.6vw,38px)}
.wk-line{margin-top:12px;font-size:clamp(16px,1.4vw,19px);color:var(--ink-2)}
.cost.focus .wk-line,.cost.back .wk-line{font-weight:600;color:var(--ink)}
.wk-count.iri .wk-n,.wk-count.iri .wk-u{background:linear-gradient(100deg,#ff9be0,#a58cff 55%,#8ef6ff);-webkit-background-clip:text;background-clip:text;color:transparent}
.wk-phase.in{animation:wkIn .42s var(--ease)}
@keyframes wkIn{from{opacity:0;transform:translateY(-14px)}}
/* the life: 80 rows of 52 weeks, drawn on a canvas */
.wk-box{position:relative;width:min(680px,100%);height:min(62svh,700px);margin-top:16px;display:grid;justify-items:center;align-items:start}
.wk-box canvas{display:block}
.wk-axis{position:absolute;inset:0;opacity:0;transition:opacity .6s .5s}
.cost.told .wk-axis,.cost.focus .wk-axis{opacity:1}
.wk-axis span{position:absolute;width:23px;text-align:right;font-size:11px;line-height:14px;font-weight:600;color:rgba(235,235,245,.32);font-variant-numeric:tabular-nums}
.wk-key{display:flex;justify-content:center;gap:18px;margin-top:14px;padding:0;list-style:none;font-size:12px;font-weight:700;line-height:15px}
.wk-key li{display:flex;align-items:center;gap:6px;opacity:0;transition:opacity .45s .25s}
.wk-key li::before{content:"";width:10px;height:10px;border-radius:3px;background:currentColor}
.wk-key .sleep{color:#4a6cf7}.wk-key .work{color:rgba(235,235,245,.62)}.wk-key .work::before{background:rgba(255,255,255,.88)}.wk-key .social{color:#ff453a}
.wk-key li.on{opacity:1}
.cost.focus .wk-key li.on:not(.social){opacity:.35}
.cost.back .wk-key .social{color:#c4a6ff}
.cost.back .wk-key .social::before{background:linear-gradient(135deg,#ff9be0,#a58cff,#8ef6ff)}
html:not(.js) .wk-box,html:not(.js) .wk-head,html:not(.js) .wk-key{display:none}
.cost-note{margin-top:26px;max-width:36em;font-size:15px;line-height:1.5;color:var(--ink-3)}

/* ---------- Set up once: the iPhone straight on, the app's redirect film, today, the review ---------- */
.how{display:flex;flex-direction:column;align-items:center;width:min(1120px,100% - 40px);margin:0 auto;text-align:center}
.how h2{font-size:clamp(40px,4.6vw,72px)}
/* the phone: a render of the model with its screen cut out, the screen itself in the page underneath */
.dev{position:relative;height:min(68svh,660px);aspect-ratio:900/1862;margin-top:clamp(44px,5vw,72px);isolation:isolate}
.dev::before{content:"";position:absolute;z-index:-1;top:6%;bottom:6%;left:50%;width:min(100vw - 16px,1000px);translate:-50% 0;background:radial-gradient(closest-side,rgba(140,120,255,.18),rgba(255,140,210,.05) 60%,transparent);pointer-events:none}
.dev-frame{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.dev-screen{position:absolute;left:3.64%;top:1.43%;width:92.64%;height:97.14%;overflow:hidden;border-radius:12%/5.6%;background:#000;container-type:inline-size;text-align:left}
.sc{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .5s var(--ease)}
img.sc{object-fit:cover;object-position:top}
.sc.on{opacity:1}
/* the redirect film, as in the app (RedirectStory): habit taps Instagram, the shield, the notification, the Space without its feed */
.rs-home,.rs-shield,.rs-space{position:absolute;inset:0}
.rs-home{background:linear-gradient(135deg,#b9b4f2,#e9c9e4 55%,#f6e3c8)}
.rs-tiles{display:grid;grid-template-columns:repeat(4,17cqw);gap:7.4cqw 6.4cqw;padding:24cqw 6.4cqw 0}
.rs-tile{width:17cqw;aspect-ratio:1;border-radius:22.37%;background:rgba(255,255,255,.42)}
.rs-ig{background:none}
.rs-ig svg{display:block;width:100%;height:100%}
.rs-dock{position:absolute;left:3.4cqw;right:3.4cqw;bottom:3.4cqw;height:26cqw;border-radius:12cqw;background:rgba(255,255,255,.32)}
.rs-shield{display:flex;flex-direction:column;align-items:center;padding:40cqw 8cqw 8cqw;background:#0a0a0c;text-align:center;opacity:0}
.rs-icon{width:22cqw;aspect-ratio:1;border-radius:22.37%}
.rs-title{margin-top:5cqw;font-size:5.6cqw;font-weight:700;line-height:1.2;color:#fff}
.rs-sub{margin-top:1.6cqw;font-size:3.7cqw;line-height:1.35;color:rgba(255,255,255,.72)}
.rs-btn{display:grid;place-items:center;align-self:stretch;height:14cqw;margin-top:auto;border-radius:99px;background:#fff;color:#141417;font-size:4.3cqw;font-weight:600}
.rs-close{margin-top:3.4cqw;font-size:3.7cqw;color:rgba(255,255,255,.72)}
.rs-space{width:100%;height:100%;object-fit:cover;object-position:top;opacity:0}
.rs-tap{position:absolute;width:18cqw;height:18cqw;margin:-9cqw 0 0 -9cqw;border-radius:50%;background:rgba(255,255,255,.9);border:2px solid rgba(120,80,220,.6);opacity:0}
.rs-t1{left:38.3cqw;top:56.9cqw}
.rs-t2{left:50cqw;top:auto;bottom:22cqw;margin:0 0 -9cqw -9cqw}
/* since iOS 26.5 the shield's button opens reelieve itself: shield, one tap, the Space */
.sc0 :is(.rs-ig,.rs-shield,.rs-btn,.rs-space,.rs-tap){animation:6s linear infinite paused}
.how.run .sc0.play :is(.rs-ig,.rs-shield,.rs-btn,.rs-space,.rs-tap),html:not(.js) .sc0 *{animation-play-state:running}
.sc0.play .rs-ig{animation-name:rsPress}
.sc0.play .rs-t1{animation-name:rsTap1}
.sc0.play .rs-shield{animation-name:rsShield}
.sc0.play .rs-btn{animation-name:rsButton}
.sc0.play .rs-t2{animation-name:rsTap2}
.sc0.play .rs-space{animation-name:rsSpace}
@keyframes rsPress{0%,6%{transform:none}7.5%,10%{transform:scale(.88)}11.5%,100%{transform:none}}
@keyframes rsTap1{0%,5.9%{opacity:0;transform:scale(.6)}6%{opacity:.7;transform:scale(.6)}13%{opacity:.15;transform:scale(1.4)}13.1%,100%{opacity:0}}
@keyframes rsShield{0%,12%{opacity:0;transform:scale(.96)}16%,51%{opacity:1;transform:none}51.1%,100%{opacity:0;transform:none}}
@keyframes rsButton{0%,38.5%{transform:none}39.5%,42%{transform:scale(.95)}43%,100%{transform:none}}
@keyframes rsTap2{0%,36.9%{opacity:0;transform:scale(.6)}37%{opacity:.7;transform:scale(.6)}44%{opacity:.15;transform:scale(1.4)}44.1%,100%{opacity:0}}
@keyframes rsSpace{0%,45%{opacity:0;transform:scale(.92)}51%,95%{opacity:1;transform:none}98%,100%{opacity:0;transform:none}}
/* With reduced motion the shield simply stands there, as in the app. */
@media (prefers-reduced-motion:reduce){.sc0 *{animation:none!important}.sc0 .rs-shield{opacity:1}}
/* the three steps: they move on by themselves, the bar under each fills while it is shown */
/* the steps as a tab bar, like the networks' – an icon and a name each, the open one lit, a line filling while it is shown */
.how .tabbar{margin-top:clamp(28px,3vw,40px)}
.how .tab{min-width:clamp(88px,7.4vw,96px);padding:10px 10px 9px;border:0;background:none;font:inherit;cursor:pointer}
.how .tab span{font-size:clamp(12px,.95vw,13px)}
.how .tab:hover{color:#fff}
.how .tab[aria-pressed=true]{background:rgba(255,255,255,.14);color:#fff}
.how .tab span{display:block}
.how .tab::after{content:"";position:absolute;left:24%;right:24%;bottom:5px;height:2px;border-radius:2px;background:rgba(255,255,255,.6);transform:scaleX(var(--p,0));transform-origin:left;opacity:0}
.how .tab[aria-pressed=true]::after{opacity:1}
.tab-txt{display:grid;width:min(34em,100%);margin-top:26px}
.tab-txt>div{grid-area:1/1;opacity:0;visibility:hidden;transition:opacity .4s var(--ease),visibility .4s}
.tab-txt>div.on{opacity:1;visibility:visible}
.tab-txt h3{font-size:var(--h3);letter-spacing:-.025em;line-height:1.2}
.tab-txt p{margin-top:10px;font-size:var(--lead);line-height:1.45;color:var(--ink-2)}

/* ---------- Nine networks ---------- */
.names{display:flex;flex-wrap:wrap;justify-content:center;gap:26px clamp(10px,1.8vw,28px);width:min(1120px,100% - 40px);margin:64px auto 0}
.names button{display:flex;flex-direction:column;align-items:center;gap:12px;border:0;background:none;cursor:pointer;font-size:14px;color:var(--ink-3);transition:color .3s}
.names svg{width:clamp(58px,5.4vw,78px);height:clamp(58px,5.4vw,78px);filter:grayscale(1) brightness(.7);opacity:.6;transition:filter .4s,opacity .4s,transform .7s var(--ease)}
.names button:hover svg{filter:none;opacity:.9;transform:translateY(-3px)}
.names button[aria-pressed=true]{color:var(--ink)}
.names button[aria-pressed=true] svg{filter:none;opacity:1;transform:translateY(-6px) scale(1.1)}
/* the chosen one's turn: a thin line under its name fills while it is shown */
.names button span{position:relative;padding-bottom:6px}
.names button span::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;border-radius:2px;background:rgba(255,255,255,.6);transform:scaleX(var(--p,0));transform-origin:left;opacity:0}
.names button[aria-pressed=true] span::after{opacity:1}
html:not(.js) .names button span::after{display:none}
/* the network as its own tab bar: the pulling tabs mark themselves red and crumble to dust, the bar closes up into the Space's bar */
.feat{display:flex;flex-direction:column;align-items:center;width:min(820px,100% - 40px);margin:56px auto 0}
.tabbar{display:flex;gap:2px;min-height:76px;padding:7px;border-radius:999px;background:linear-gradient(180deg,rgba(255,255,255,.11),rgba(255,255,255,.05));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2),inset 0 0 0 1px rgba(255,255,255,.1),0 24px 60px rgba(0,0,0,.55);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px)}
.tabbar:empty{visibility:hidden}
.tab{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-width:clamp(64px,7.4vw,92px);padding:10px 10px 9px;border-radius:999px;color:rgba(235,235,245,.78);
  animation:pillIn .5s var(--ease) calc(var(--k) * 45ms) both;transition:background .35s,color .35s}
@keyframes pillIn{from{opacity:0;transform:translateY(10px)}}
.tab svg{width:clamp(24px,2.3vw,30px);height:clamp(24px,2.3vw,30px);fill:currentColor;transition:fill .35s}
.tab span{font-size:clamp(11px,.95vw,13px);font-weight:600;line-height:1.1;white-space:nowrap;transition:color .35s,text-decoration-color .35s}
.tabbar.mark .tab.g{background:rgba(255,69,58,.14);color:#ff7a70}
.tabbar.mark .tab.g span{text-decoration:line-through;text-decoration-color:rgba(255,69,58,.9)}
.tabbar.crumble .tab.g{animation:tabOut .65s var(--ease) calc(var(--j) * 90ms) forwards}
@keyframes tabOut{to{background:transparent;color:transparent}}
.tabbar.crumble .tab.g span{text-decoration-color:transparent}
/* in reelieve: the first place is the one that is open, as in the app */
.tabbar.kept .tab.first{background:rgba(255,255,255,.14);color:#fff}
.tab i{position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);border-radius:50%;background:#ff453a;opacity:0;pointer-events:none}
.tabbar.crumble .tab.g i{animation:speck .95s cubic-bezier(.16,1,.3,1) calc(var(--j) * 90ms + var(--d)) forwards}
@keyframes speck{0%{opacity:1;transform:none}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.4)}}
@media (max-width:560px){
  /* on a phone the bar holds icons alone until it has closed up */
  .tab{min-width:42px;padding:9px 6px}
  .tab span{display:none}
  .tabbar.kept .tab span{display:block}
  .tabbar.kept .tab{min-width:72px}
}
.feat-line{max-width:34em;margin-top:28px;min-height:2.9em;font-size:var(--lead);line-height:1.45;color:var(--ink-2);text-wrap:balance}
.feat-line b{font-weight:600;color:var(--ink)}
.feat-line.in{animation:wkIn .45s var(--ease)}
/* with the pills there, the lists are for screen readers and for pages without scripts */
html.js .desk{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);margin:0}
.desk{display:grid;width:min(760px,100% - 40px);margin:48px auto 0;border-radius:32px;background:var(--panel)}
.sheet{grid-area:1/1;display:grid;grid-template-columns:1fr 1fr;gap:32px;padding:clamp(32px,4vw,52px);opacity:0;visibility:hidden;transform:translateY(12px);transition:opacity .4s var(--ease),transform .6s var(--ease),visibility .4s}
.sheet.on{opacity:1;visibility:visible;transform:none}
html:not(.js) .sheet{grid-area:auto;opacity:1;visibility:visible;transform:none}
.sheet h3{font-size:14px;font-weight:500;letter-spacing:0;color:var(--ink-3)}
.sheet ul{list-style:none;padding:0;margin-top:14px}
.sheet li{padding:7px 0;font-size:18px}
.sheet .stays li::before{content:"";display:inline-block;width:8px;height:8px;margin:0 12px 2px 0;border-radius:50%;background:var(--green)}
.sheet .gone li{color:var(--ink-3);text-decoration:line-through;text-decoration-color:rgba(242,101,125,.75);text-decoration-thickness:1.5px}

/* ---------- Privacy: what you do drifts inside the bubble; what wants it bounces off ---------- */
.zero{display:flex;flex-direction:column;align-items:center;overflow-x:clip;text-align:center}
.zero h2{font-size:var(--h2)}
.vault{--v:min(540px,84vw);--rim:calc(var(--v) * .45);--far:calc(var(--v) * .86);position:relative;width:var(--v);aspect-ratio:1;margin-top:clamp(36px,5vw,64px)}
.vault::before{content:"";position:absolute;inset:-10%;border-radius:50%;background:radial-gradient(closest-side,rgba(140,120,255,.16),rgba(255,140,210,.05) 60%,transparent);pointer-events:none}
.vb{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.chips{position:absolute;inset:0}
.chip{position:absolute;padding:9px 16px;border-radius:99px;background:rgba(255,255,255,.08);box-shadow:inset 0 1px 0 rgba(255,255,255,.16),inset 0 0 0 1px rgba(255,255,255,.1);
  font-size:clamp(12px,1.25vw,16px);font-weight:600;white-space:nowrap;color:var(--ink);translate:-50% -50%;animation:drift calc(7s + var(--k) * 1.3s) ease-in-out calc(var(--k) * -1.7s) infinite alternate}
@keyframes drift{from{transform:translate(-9px,6px) rotate(-1.5deg)}to{transform:translate(9px,-7px) rotate(1.5deg)}}
/* each probe: a red point with a tail and its name, from far out to the film – where it breaks into specks with a flash,
   and the bubble gives a little; one every 1.5 s, each on a 9 s round */
.bub{position:absolute;inset:0}
.probe{position:absolute;left:50%;top:50%;width:0;height:0;transform:rotate(var(--a))}
.pr{position:absolute;left:0;top:0;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:#ff453a;box-shadow:0 0 16px rgba(255,69,58,.8);opacity:0;animation:probe 9s cubic-bezier(.45,0,.75,.4) var(--d) infinite}
.pr::before{content:"";position:absolute;left:50%;top:50%;width:52px;height:3px;margin-top:-1.5px;border-radius:2px;background:linear-gradient(90deg,rgba(255,69,58,.85),transparent)}
.pr b{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(calc(var(--a) * -1)) translateY(-24px);padding:3px 9px;border-radius:99px;background:rgba(255,69,58,.14);box-shadow:inset 0 0 0 1px rgba(255,69,58,.4);
  font-size:12px;font-weight:600;white-space:nowrap;color:#ff8a80}
@keyframes probe{0%{opacity:0;transform:translateX(var(--far))}8%{opacity:1}40%{opacity:1;transform:translateX(var(--rim))}40.5%,100%{opacity:0;transform:translateX(var(--rim))}}
.hit{position:absolute;left:0;top:0;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;background:radial-gradient(closest-side,rgba(255,255,255,.95),rgba(190,170,255,.55) 45%,transparent);transform:translateX(var(--rim)) scale(.3);opacity:0;animation:hit 9s ease-out var(--d) infinite}
@keyframes hit{0%,39.5%{opacity:0;transform:translateX(var(--rim)) scale(.3)}40.5%{opacity:1;transform:translateX(var(--rim)) scale(1)}54%,100%{opacity:0;transform:translateX(var(--rim)) scale(1.9)}}
.sp{position:absolute;left:0;top:0;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;background:#ff453a;opacity:0;transform:translateX(var(--rim));animation:speck2 9s cubic-bezier(.16,1,.3,1) var(--d) infinite}
@keyframes speck2{0%,40%{opacity:0;transform:translateX(var(--rim))}40.5%{opacity:1;transform:translateX(var(--rim))}62%,100%{opacity:0;transform:translate(calc(var(--rim) + var(--sx)),var(--sy)) scale(.4)}}
/* the bubble gives with each hit and springs back – the first hit comes 3.6 s in, then one every 1.5 s */
.bub{animation:absorb 1.5s ease-out 3.6s infinite}
@keyframes absorb{0%,100%{transform:none}5%{transform:scale(.982)}18%{transform:scale(1.006)}32%{transform:none}}
.vault :is(.chip,.pr,.hit,.sp,.bub){animation-play-state:paused}
.zero.run .vault :is(.chip,.pr,.hit,.sp,.bub),html:not(.js) .vault :is(.chip,.pr,.hit,.sp,.bub){animation-play-state:running}
@media (prefers-reduced-motion:reduce){.vault :is(.chip,.pr,.hit,.sp,.bub){animation:none}}
.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(20px,3vw,48px);width:min(1000px,100% - 40px);margin-top:clamp(40px,5vw,64px)}
.facts h3{font-size:var(--h3);letter-spacing:-.025em}
.facts p{margin-top:10px;font-size:17px;line-height:1.5;color:var(--ink-2)}
.facts-note{max-width:40em;margin-top:36px;padding:0 20px;font-size:14px;line-height:1.5;color:var(--ink-3)}
.facts-note a{color:var(--ink-2)}

/* ---------- Questions ---------- */
.faq{width:min(860px,100% - 40px);margin:0 auto}
.faq h2{font-size:var(--h2);text-align:center}
.qa{margin-top:56px;border-top:1px solid var(--line)}
.qa details{border-bottom:1px solid var(--line)}
.qa summary{list-style:none;display:flex;justify-content:space-between;align-items:center;gap:24px;padding:26px 4px;font-size:var(--h3);font-weight:600;letter-spacing:-.02em;cursor:pointer}
.qa summary::-webkit-details-marker{display:none}
.qa summary::after{content:"";flex:none;width:12px;height:12px;border-right:2px solid var(--ink-2);border-bottom:2px solid var(--ink-2);transform:rotate(45deg) translateY(-4px);transition:transform .4s var(--ease)}
.qa details[open] summary::after{transform:rotate(-135deg) translateY(-2px)}
.qa details p{padding:0 4px 28px;max-width:44em;color:var(--ink-2);font-size:var(--lead);line-height:1.5}

/* ---------- The end: the app as it sits on the home screen ---------- */
.outro{display:flex;flex-direction:column;align-items:center;gap:40px;padding:clamp(140px,16vw,220px) 20px 0;text-align:center}
.outro-icon{width:clamp(120px,11vw,156px);height:auto;border-radius:22.37%;box-shadow:0 24px 70px rgba(150,130,255,.22),0 8px 24px rgba(0,0,0,.5)}
.outro h2{font-size:var(--h2)}
.outro-note{margin-top:-16px;font-size:15px;color:var(--ink-3)}

/* ---------- Footer ---------- */
.foot{margin-top:clamp(100px,9vw,130px);border-top:1px solid var(--line)}
.foot-in{display:flex;flex-wrap:wrap;align-items:center;gap:16px 32px;width:min(1120px,100% - 40px);margin:0 auto;padding:36px 0 48px;font-size:14px;color:var(--ink-3)}
.foot nav{display:flex;flex-wrap:wrap;gap:8px 24px;margin-left:auto}
.foot nav a{color:var(--ink-2);text-decoration:none}
.foot nav a:hover{color:var(--ink)}
.foot p{width:100%}

/* ---------- Legal pages ---------- */
.doc{width:min(720px,100% - 40px);margin:140px auto 0}
.doc h1{font-size:clamp(40px,5vw,64px)}
.doc h2{margin-top:52px;font-size:var(--h3);letter-spacing:-.02em}
.doc p{margin-top:14px;color:var(--ink-2)}
.doc .updated,.doc .note{color:var(--ink-3)}
.doc .note{margin-top:56px}
.doc a{color:var(--ink)}
.doc details{border-bottom:1px solid var(--line);padding:18px 0}
.doc summary{cursor:pointer;font-weight:600}

@keyframes up{from{opacity:0;transform:translateY(36px)}}

/* ---------- Phones and narrow windows ---------- */
@media (max-width:860px){
  .links{display:none}
  .bar .lang{margin-left:auto}
  .wk-box{height:min(56svh,560px)}
  .wk-head{height:118px}
  .how h2{font-size:clamp(34px,9vw,48px)}
  .dev{height:min(60svh,560px)}
  .tab-txt p{font-size:17px}
  .facts{grid-template-columns:1fr;gap:28px}
  .facts p{max-width:24em;margin:8px auto 0}
  .pr b{font-size:11px}
  .sheet{grid-template-columns:1fr;gap:20px}
  .phone3d{height:min(640px,118vw)}
  .phone3d .iphone{--w:min(260px,62vw)}
  .foot nav{margin-left:0}
}
@media (max-width:560px){
  .bar-in{gap:16px}
  .outro{gap:28px;padding-top:112px}
  .outro-icon{width:104px}
  .foot{margin-top:44px}
  .foot-in{flex-direction:column;gap:18px;padding:32px 0 calc(28px + env(safe-area-inset-bottom));text-align:center}
  .foot nav{justify-content:center;gap:10px 22px;max-width:300px}
  .hero{padding-top:110px}
  .hero-name{font-size:24vw}
  .qa summary{padding:22px 2px}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-delay:0ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-delay:0ms!important}
}

/* ---------- The scene: the feed plays, the count runs away, the bubble closes, the phone turns calm ---------- */
.scene{position:relative}
html.js .scene{height:480svh}
.scene-pin{position:sticky;top:0;height:100svh;overflow:hidden;display:grid;place-items:center}
html:not(.js) .scene-pin{position:static;height:auto;min-height:100svh;padding:120px 0 80px}
.glow{position:absolute;inset:-10%;pointer-events:none}
.glow::before,.glow::after{content:"";position:absolute;inset:0;will-change:opacity}
.glow::before{background:radial-gradient(55% 50% at 50% 52%,rgba(190,24,48,.36),transparent 72%);opacity:var(--heat,0)}
.glow::after{background:radial-gradient(38% 36% at 50% 50%,rgba(140,120,255,.26),rgba(255,140,210,.07) 55%,transparent 75%);opacity:var(--calm,0)}
.giant{position:absolute;left:50%;top:46%;transform:translate(-50%,-50%);font-size:clamp(110px,25vw,420px);font-weight:600;letter-spacing:-.065em;line-height:.8;white-space:nowrap;opacity:var(--go,1);pointer-events:none}
.stage{position:relative;width:min(620px,92vw);height:min(74svh,820px);display:grid;place-items:center;transform:translateY(var(--sy,0)) scale(var(--ss,1))}
.stage>.phone3d,.stage>.turn-phone{position:absolute;inset:0;height:auto;margin:0}
/* the phone floats in the bubble: pressed in, the skin pushes it aside a little */
.hero-phone{opacity:var(--ro,1);transform:translate(var(--px,0px),var(--py,0px)) scale(var(--ps,1))}
.stage>.turn-phone{opacity:var(--to,0)}
.stage .phone3d .iphone,.stage .turn-phone .iphone{--w:min(330px,31svh,64vw)}
.turn-phone canvas.gl{position:absolute;inset:-4% -16%;width:132%;height:108%;max-width:none;opacity:0;transition:opacity 1s var(--ease)}
.turn-phone.is-3d canvas.gl{opacity:1}
.turn-phone{display:grid;place-items:center}
.turn-phone .tilt3d{animation:none;transform:none;transition:opacity .8s}
.turn-phone.is-3d .tilt3d{opacity:0}
.turn-phone .screen img{position:absolute;inset:0;transition:opacity .6s}
.turn-phone .screen img.b{opacity:0}
.scene.after .turn-phone .screen img.b{opacity:1}
.beat{position:absolute;z-index:3;opacity:0;visibility:hidden;translate:0 var(--by,0px);will-change:opacity,translate}
html:not(.js) .beat{position:relative;opacity:1;visibility:visible;transform:none;margin-top:32px}
.b1{bottom:7svh;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:20px;text-align:center}
.b1 .lead{font-size:clamp(26px,3vw,44px);font-weight:600;letter-spacing:-.035em;line-height:1.08}
.b2{left:max(24px,6vw);top:50%;transform:translateY(-50%);text-align:left}
.b2 .pre{display:block;font-size:var(--h3);color:var(--ink-2);letter-spacing:-.02em}
.b2 .num{display:flex;align-items:baseline;gap:0 .16em;margin-top:4px;font-size:clamp(84px,11vw,190px);font-weight:600;letter-spacing:-.06em;line-height:.9}
.b2 .num b{font-weight:600;font-variant-numeric:tabular-nums}
.b2 .num span{font-size:.32em;letter-spacing:-.03em}
.b2 .clock{margin-top:16px;font-size:var(--lead);color:var(--ink-3);font-variant-numeric:tabular-nums}
.b3,.b4{bottom:8svh;left:0;right:0;text-align:center;padding:0 20px}
.b3 .big,.b4 h2{font-size:clamp(40px,5.4vw,84px);font-weight:600;letter-spacing:-.045em;line-height:1}
.b4 p{margin-top:16px;font-size:var(--lead);color:var(--ink-2)}
@media (max-width:860px){
  .giant{font-size:27vw;top:40%}
  .stage{height:52svh}
  .stage .phone3d .iphone,.stage .turn-phone .iphone{--w:min(250px,24svh,56vw)}
  .b2{left:0;right:0;top:12svh;transform:none;text-align:center}
  .b2 .num{justify-content:center;font-size:24vw}
  .b1{bottom:5svh}
}
/* the name in front of the phone, coming toward you */
.giant.giant-front{z-index:2;opacity:var(--fo,0);transform:translate(-50%,-50%) scale(var(--fs,1));will-change:opacity}
html:not(.js) .giant.giant-front{display:none}
.stage::after{content:"";position:absolute;inset:-4%;background:radial-gradient(closest-side,#000 60%,transparent);opacity:var(--dim,0);pointer-events:none;will-change:opacity}
/* the bubble: the same soap bubble as in the app; its skin gives when pressed (site.js) */
svg.bubble{position:absolute;left:50%;top:50%;width:calc(min(92svh,104vw) * 1.4);max-width:none;height:auto;aspect-ratio:1;overflow:visible;transform:translate(-50%,-50%) scale(var(--bs,1));opacity:var(--bo,0);pointer-events:none;will-change:transform,opacity}
.hero-phone .screen canvas.reels{position:absolute;inset:0;opacity:0}
.hero-phone .screen img{position:absolute;inset:0;transition:opacity .6s}
.hero-phone .screen img.b{opacity:0}
.scene.after .hero-phone .screen img.b{opacity:1}
.stage>.phone3d{z-index:1}
svg.bubble.front{z-index:2}
@media (max-width:860px){svg.bubble{width:calc(min(92svh,100vw) * 1.4)}}
