@font-face{font-family:"Fraunces";src:url("fonts/fraunces.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap}

:root{
  /* Shelfstack colour tokens, from the app's UI.md 1.2 and 1.3. The page is light; the scroll story ends at night. */
  --bg:#F5F1E8; --surface:#FFFDF8; --text:#1F2420; --text2:#5B5F58; --border:#E4DED1; --strong:#7F837B;
  --accent:#2E5E4E; --onAccent:#FFFFFF; --warn:#7F5300; --warnSoft:#F6EACF; --danger:#B3261E;
  --night:#1D232B;
  --display:"Fraunces", Georgia, "Times New Roman", serif;
  --body:-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  --nav:64px;
  --ink:var(--text); --ink2:var(--text2); --eye:var(--accent);
  color-scheme:light;
}
html.night{--ink:#F3F4F6;--ink2:#A5ADBA;--eye:#8CC4AE}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font-family:var(--body);-webkit-font-smoothing:antialiased}
button,input{font:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.eyebrow{font-size:12.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--eye)}

/* nav */
.site-nav{position:fixed;z-index:20;top:0;left:0;right:0;height:calc(var(--nav) + env(safe-area-inset-top));padding:env(safe-area-inset-top) clamp(16px,4vw,48px) 0;display:flex;align-items:center;justify-content:space-between;gap:12px;background:rgba(245,241,232,.72);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid rgba(228,222,209,.8);transition:background .4s,border-color .4s}
html.night .site-nav{background:rgba(15,17,21,.5);border-color:rgba(255,255,255,.08)}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink);font-family:var(--display);font-weight:500;font-size:21px;letter-spacing:-.01em}

/* waitlist forms and buttons */
.wl{display:flex;flex-wrap:wrap;gap:8px;width:min(460px,100%)}
.wl input{flex:1 1 200px;min-width:0;height:46px;border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:0 14px;color:var(--text);font-size:16px}
.wl input:focus{outline:2px solid var(--accent);outline-offset:1px}
.btn{display:inline-flex;align-items:center;height:46px;border:0;border-radius:12px;padding:0 18px;font-weight:700;font-size:15px;cursor:pointer;white-space:nowrap;text-decoration:none}
.btn.primary{background:var(--accent);color:var(--onAccent)}
.btn.primary:hover{filter:brightness(1.1)}
.btn.small{height:36px;border-radius:10px;padding:0 14px;font-size:14px}
.btn:disabled{opacity:.4;cursor:default;filter:none}
/* .cap p would win over a bare class, so these two carry an extra class */
.cap .wl-done,.wl-done{margin:0;font-size:15px;font-weight:600;color:var(--eye)}
.wl .wl-err{flex-basis:100%;margin:0;font-size:13.5px;color:var(--danger)}
html.night .wl input{background:#1A1D23;border-color:#2A2E36;color:#F3F4F6}
html.night .btn.primary{background:#8CC4AE;color:#0F1115}
html.night .wl .wl-err{color:#F2B8B5}
.wl.nav-wl{width:auto;flex-wrap:nowrap;position:relative}
.nav-wl input{flex:0 1 230px;height:40px;font-size:14px;border-radius:10px}
.nav-wl .btn{height:40px;font-size:14px;padding:0 14px;border-radius:10px}
.wl.nav-wl .wl-err{position:absolute;top:calc(100% + 6px);right:0;white-space:nowrap}
.site-nav .wl-done{font-size:14px}
@media (max-width:640px){
  .nav-wl input{display:none}
  .site-nav.open .nav-wl input{display:block;position:absolute;top:calc(100% + 10px);right:0;width:calc(100vw - 32px);height:46px;box-shadow:0 8px 24px rgba(31,36,32,.18)}
}

/* the scroll story */
.scrolly{height:640vh;position:relative}
.sticky{position:sticky;top:0;height:100dvh;overflow:hidden;background:var(--bg)}
.sticky canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.cap{position:absolute;z-index:3;left:clamp(16px,5vw,72px);top:50%;transform:translateY(-50%);margin-top:calc(var(--nav) / 2);width:min(420px,31vw);display:grid;gap:12px;justify-items:start;color:var(--ink)}
.cap .eyebrow{min-height:1.2em;font-variant-numeric:tabular-nums}
.cap h1,.cap h2{font-family:var(--display);font-weight:500;font-size:clamp(30px,3.5vw,48px);line-height:1.05;letter-spacing:-.01em;margin:0;text-wrap:balance}
.cap .w{transition:opacity .25s linear}
.cap p{margin:0;color:var(--ink2);font-size:16px;line-height:1.5}
.cap.swap{animation:capin .45s ease-out}
@keyframes capin{from{opacity:0;translate:0 10px}to{opacity:1;translate:0 0}}
.slot{position:absolute;z-index:3;right:clamp(16px,4vw,56px);top:calc(var(--nav) + clamp(16px,4vh,36px));width:min(330px,calc(100% - 32px));display:grid}
.slot > *{grid-area:1/1}
.morn{display:grid;gap:10px;align-content:start;opacity:0}
.notif{display:flex;gap:10px;padding:12px 14px;border-radius:18px;background:rgba(255,253,248,.9);border:1px solid var(--border);box-shadow:0 10px 30px rgba(31,36,32,.12);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.ni{flex:none;width:38px;height:38px;border-radius:9px;background:var(--accent);position:relative}
.ni::before,.ni::after{content:"";position:absolute;left:8px;right:8px;height:3px;border-radius:2px;background:#fff}
.ni::before{top:13px}.ni::after{top:23px}
.nx{min-width:0;display:grid;gap:2px}
.nh{display:flex;justify-content:space-between;font-size:11.5px;color:var(--text2);letter-spacing:.04em}
.nh b{font-weight:700}
.nt{font-weight:700;font-size:14.5px;color:var(--text)}
.nb{font-size:14px;color:var(--text);line-height:1.35}
.checklist{background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:4px 14px}
.cl{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-size:15px;color:var(--text)}
.cl:last-child{border:0}
.cl .amt{margin-left:auto;color:var(--text2);font-size:13px}
.cc{width:24px;height:24px;border-radius:50%;border:2px solid var(--strong);flex:none;display:grid;place-items:center;transition:background .2s,border-color .2s}
.on .cc{background:var(--accent);border-color:var(--accent)}
.on .cc::after{content:"";width:10px;height:5px;border-left:2.5px solid #fff;border-bottom:2.5px solid #fff;transform:translateY(-1px) rotate(-45deg)}
.receipt{align-self:start;background:#FFFEFA;border-radius:6px;padding:16px 18px 18px;box-shadow:0 10px 30px rgba(31,36,32,.14);font-size:14px;color:var(--text);font-variant-numeric:tabular-nums;opacity:0}
.rc-h{font:700 11.5px/1 var(--body);letter-spacing:.08em;text-transform:uppercase;color:var(--text2);margin-bottom:10px}
.rc-row{display:flex;gap:8px;align-items:baseline;padding:4px 0}
.rc-row i{flex:1;border-bottom:1px dotted var(--strong);transform:translateY(-3px)}
.rc-tot{display:flex;justify-content:space-between;align-items:baseline;border-top:1px dashed var(--strong);margin-top:8px;padding-top:10px}
.rc-tot b{font-family:var(--display);font-weight:500;font-size:30px}
.rc-sub{display:flex;justify-content:space-between;color:var(--text2);font-size:13px}
.tag{position:absolute;z-index:3;transform:translate(-50%,-100%);padding:6px 11px;border-radius:999px;background:var(--surface);border:1px solid var(--border);font-size:13px;font-weight:700;white-space:nowrap;color:var(--text);pointer-events:none;font-variant-numeric:tabular-nums;opacity:0}
.tag.warn{background:var(--warnSoft);color:var(--warn);border-color:#E8D3A4}
.rail{position:absolute;z-index:3;right:12px;top:30%;height:40%;width:3px;border-radius:2px;background:rgba(127,131,123,.3)}
.rail i{display:block;width:100%;height:0;border-radius:2px;background:var(--eye)}
.cue{position:absolute;z-index:3;left:50%;bottom:calc(18px + env(safe-area-inset-bottom));transform:translateX(-50%);font-size:13px;font-weight:600;color:var(--text2);transition:opacity .3s;pointer-events:none}
.hint{position:absolute;z-index:3;transform:translate(-50%,-50%);background:var(--text);color:var(--bg);font-size:13px;font-weight:600;padding:7px 12px;border-radius:999px;pointer-events:none;transition:opacity .3s;white-space:nowrap}
.hint.gone{opacity:0}
.tick{position:absolute;z-index:4;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:var(--accent);display:grid;place-items:center;pointer-events:none;animation:tick .85s ease-out forwards}
@keyframes tick{0%{transform:scale(.3);opacity:0}25%{transform:scale(1.12);opacity:1}60%{transform:translateY(-14px) scale(1);opacity:1}100%{transform:translateY(-30px);opacity:0}}

/* product card (hover or tap a product) */
.pcard{position:absolute;left:0;top:0;z-index:5;width:262px;background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:14px 16px;box-shadow:0 14px 34px rgba(31,36,32,.16);transform:translate(-50%,calc(-100% - 14px));display:grid;gap:6px;color:var(--text)}
.pcard[hidden]{display:none}
.pcard.low{background:var(--warnSoft);border-color:#EAD9B4}
.pc-top{display:flex;justify-content:space-between;align-items:center}
.pc-cat{font-size:11.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text2)}
.pc-x{border:0;background:none;font-size:22px;line-height:1;color:var(--text2);cursor:pointer;padding:0 2px}
.pc-name{font-family:var(--display);font-weight:500;font-size:24px;line-height:1.1}
.pc-meta,.pc-cost{font-size:13px;color:var(--text2)}
.pc-days{font-size:14px;font-variant-numeric:tabular-nums}
.pc-days b{font-family:var(--display);font-weight:500;font-size:28px;margin-right:2px}
.low .pc-days b{color:var(--warn)}
.pc-bar{height:6px;border-radius:3px;background:var(--border);overflow:hidden}
.pc-bar i{display:block;height:100%;background:var(--accent);border-radius:3px;transition:width .3s}
.low .pc-bar{background:rgba(127,83,0,.15)}
.low .pc-bar i{background:var(--warn)}
.pc-state{font-size:13px;font-weight:600;color:var(--warn)}
.pc-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:4px}
.pcard .btn.primary{background:var(--accent);color:var(--onAccent)}

@media (max-width:899px){
  .cap{top:calc(var(--nav) + 16px);transform:none;margin-top:0;width:auto;right:16px}
  .cap h1,.cap h2{font-size:28px}
  .slot{top:auto;bottom:38%;left:16px;right:16px;width:auto;max-width:360px;margin:0 auto}
}

/* without WebGL the first screen stays as plain text and the form */
html.no-3d .scrolly{height:auto}
html.no-3d .sticky{position:relative;height:auto;min-height:100dvh}
html.no-3d .slot,html.no-3d .tag,html.no-3d .rail,html.no-3d .cue,html.no-3d .hint{display:none}

/* footer */
.foot{background:var(--night);color:#A5ADBA;padding:28px clamp(16px,5vw,48px) calc(28px + env(safe-area-inset-bottom));display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;font-size:14px}
.foot .logo{color:#F3F4F6;font-size:18px}
.foot nav{display:flex;gap:18px;flex-wrap:wrap}
.foot a{color:#F3F4F6}
.foot small{margin-left:auto;font-size:13px}

/* privacy and support pages */
.doc{max-width:680px;margin:0 auto;padding:calc(var(--nav) + 56px) clamp(16px,5vw,32px) 88px}
.doc h1{font-family:var(--display);font-weight:500;font-size:clamp(36px,6vw,48px);line-height:1.05;letter-spacing:-.01em;margin:0 0 8px}
.doc h2{font-family:var(--display);font-weight:500;font-size:26px;line-height:1.15;margin:40px 0 10px}
.doc p,.doc li{font-size:17px;line-height:1.6;color:var(--text)}
.doc ul{padding-left:22px}
.doc a{color:var(--accent);font-weight:600}
.doc .updated{color:var(--text2);font-size:15px;margin:0 0 28px}

@media (prefers-reduced-motion:reduce){.tick,.cap.swap{animation-duration:.01s}.cap .w{transition:none}}
