/* Thawli · "Midnight ember": plum-black ground, one ember accent, chunky matte task blocks that thaw */

/* Metric-matched fallbacks: no layout shift when the web fonts land */
@font-face{font-family:"Bricolage Fallback";src:local("Arial Bold"), local("Arial-BoldMT"), local("Arial");font-weight:700 800;size-adjust:99%;ascent-override:94%;descent-override:27%}
@font-face{font-family:"Instrument Fallback";src:local("Arial"), local("ArialMT");font-weight:400;size-adjust:101.6%;ascent-override:95.5%;descent-override:24.6%}
@font-face{font-family:"Instrument Fallback";src:local("Arial Bold"), local("Arial-BoldMT");font-weight:600;size-adjust:96.9%;ascent-override:100%;descent-override:25.8%}

/* --line: 3:1 boundary of anything you can tap or type in. --hair: decoration only */
:root{
  --bg:#15101C;--ground:var(--bg);--surface:#241A2E;--well:#0D0912;--line:#8A7A97;--hair:#45364F;--edge:#07040A;
  --ink:#FFF1E2;--soft:#E3D6E2;--muted:#B9ABC5;
  --frost:#D5D9F7;--frost-mid:#A9B0EE;--slate:#4A4F78;--slate-deep:#2B2E52;
  --ember:#FF7A2F;--hot:#FFBE4D;--ember-deep:#A3330C;--hot-deep:#9A5B0A;--on-ember:#1F0D04;--err:#FFA596;
  --heat:.4;
  --lift:inset 0 1.5px 0 #FFFFFF10, 0 4px 0 var(--edge);
  --display:"Bricolage Grotesque", "Bricolage Fallback", system-ui, sans-serif;
  --body:"Instrument Sans", "Instrument Fallback", system-ui, sans-serif;
  --pop:cubic-bezier(.3, 1.7, .5, 1);
  --out:cubic-bezier(.2, .8, .2, 1)}

*{box-sizing:border-box}
[hidden]{display:none !important}
html{background:var(--bg);-webkit-text-size-adjust:100%;scroll-padding-bottom:130px}
body{margin:0;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;color:var(--ink);font:400 17px/1.5 var(--body);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}

/* Atmosphere: grain, a cold light above, an ember light below. --heat cross-fades them (opacity only) */
html::before, body::before, body::after{content:"";position:fixed;inset:0;z-index:0;pointer-events:none;transition:opacity .7s}
html::before{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 .11 0 0 0 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
body::before{background:radial-gradient(80% 32% at 92% -8%, #626CCD42, transparent 70%);opacity:calc(1 - var(--heat) * .85)}
body::after{background:radial-gradient(110% 36% at 50% 110%, #FF682042, transparent 72%);opacity:var(--heat)}

.defs{position:absolute}
.backdrop{display:none}
.melt{transform:translateY(var(--melt, 74px))}

.shell{position:relative;z-index:1;flex:1;display:flex;flex-direction:column;width:100%;max-width:460px;margin:0 auto;padding:0 20px}
.top{padding-top:18px}
#app{flex:1;padding:26px 0 28px}
.logo{display:inline-flex;align-items:center;font:800 22px/1 var(--display);letter-spacing:-.03em;color:var(--ink);text-decoration:none}
.logo span{color:var(--ember)}
.logo i{width:20px;height:20px;margin-right:9px;border-radius:6.5px;background:linear-gradient(var(--slate) 46%, var(--ember) 46%);box-shadow:0 3px 0 var(--ember-deep);transform:rotate(-9deg)}
a.logo{min-height:44px;margin:-11px 0}

.screen{display:none}
.screen.active{display:block;animation:rise .45s var(--out) both}
.center{text-align:center;padding-top:clamp(8px, 7vh, 72px)}
@keyframes rise{from{opacity:0;transform:translateY(14px)}}
@keyframes in{from{opacity:0;transform:translateY(6px)}}

/* Type */
h1, h2, h3, p, ul, ol, dl, dd, figure{margin:0}
ul, ol{list-style:none;padding:0}
h1, h2{font-family:var(--display);font-weight:800;text-wrap:balance}
h1{font-size:clamp(34px, 10.2vw, 46px);line-height:1;letter-spacing:-.035em;margin-bottom:16px}
h2, [data-screen="early"] h1{font-size:clamp(27px, 7.8vw, 33px);line-height:1.08;letter-spacing:-.03em;margin-bottom:14px}
h3, .eyebrow, .tag{font:600 13px/1.35 var(--body);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:12px;text-wrap:balance}
.eyebrow{color:var(--hot)}
#headline span{display:block}
.cold{color:var(--frost)}
.hot{color:var(--ember)}
.lead{font-size:18px;line-height:1.45;color:var(--soft);margin-bottom:24px;text-wrap:pretty}
.lead strong{color:var(--hot)}
.fine{font-size:13px;color:var(--muted);margin-top:18px;text-align:center;text-wrap:balance}
a{color:inherit;text-underline-offset:3px}
.fine a, .doc p a{display:inline-block;padding:13px 4px;margin:-13px -4px;color:var(--ink)}
:focus-visible{outline:3px solid var(--hot);outline-offset:3px}
[tabindex="-1"]:focus-visible{outline:none}
svg{fill:none;stroke-linecap:round;stroke-linejoin:round}
.c{stroke:var(--frost-mid)}
.h{stroke:var(--ember)}

/* Shared material: dark tiles on a hard lower edge, ember chips, display-face labels */
.option, .plan, .back, .sealed, .features svg, .status{background:var(--surface);border:1.5px solid var(--hair);color:var(--ink)}
.option, .plan, .back{border-color:var(--line)}
.option, .plan, .sealed{box-shadow:var(--lift)}
.back, .features svg{box-shadow:0 3px 0 var(--edge)}
.btn, .option, .plan, .back{cursor:pointer;transition:transform .09s ease-out}
.btn, .name, .price, .badge, .redact, .count b, .steps b, .steps li::before, .error::before, .total dd{font-family:var(--display);font-weight:800}
.steps li::before, .trust li::before, .ticks li::before, .doc h2::before{background:var(--ember);color:var(--on-ember);box-shadow:0 3px 0 var(--ember-deep)}
.badge{position:absolute;top:-12px;padding:5px 10px;border-radius:9px;background:var(--hot);color:var(--on-ember);box-shadow:0 3px 0 var(--hot-deep);font-size:12px;line-height:1;letter-spacing:.03em;text-transform:uppercase}

/* Primary button: the one ember slab per screen. Pressing pushes it down onto its edge */
.btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:60px;padding:14px 20px;border:0;border-radius:20px;background:var(--ember);color:var(--on-ember);font-size:19px;line-height:1.1;letter-spacing:-.015em;box-shadow:inset 0 2px 0 #FFFFFF59, 0 5px 0 var(--ember-deep), 0 16px 28px -16px #FF6E28}
.btn:active{transform:translateY(4px);box-shadow:inset 0 2px 0 #FFFFFF59, 0 1px 0 var(--ember-deep)}
.btn svg, .back svg{width:22px;height:22px;flex:none;stroke:currentColor;stroke-width:2.8}

/* Tick lists */
.trust, .ticks{display:grid;gap:11px}
.trust li, .ticks li{position:relative;padding-left:34px}
.trust li::before, .ticks li::before{content:"";position:absolute;left:0;top:1px;width:22px;height:22px;border-radius:7px;box-shadow:0 2px 0 var(--ember-deep)}
.trust li::after, .ticks li::after, .picked::after{content:"";position:absolute;left:8px;top:5px;width:6px;height:11px;border:solid var(--on-ember);border-width:0 2.5px 2.5px 0;transform:rotate(42deg)}

/* Numbered steps: landing (chips warm up) and thanks */
.steps{counter-reset:s;display:grid;gap:16px}
.steps li{counter-increment:s;position:relative;display:flex;align-items:center;gap:14px;font-weight:600}
.steps li::before, .error::before{flex:none;display:grid;place-items:center;line-height:1}
.steps li::before{content:counter(s);width:36px;height:36px;border-radius:11px;font-size:17px}
.steps li:not(:last-child)::after{content:"";position:absolute;left:17px;top:43px;bottom:-12px;width:2px;border-radius:1px;background:var(--hair)}
.steps div{font-size:15px;font-weight:400;line-height:1.4;color:var(--soft)}
.steps b{display:block;margin-bottom:2px;font-size:18px;line-height:1.2;letter-spacing:-.02em;color:var(--ink)}
.warmup li{align-items:flex-start}
.warmup li:not(:last-child)::before{background:var(--slate);color:var(--ink);box-shadow:0 3px 0 var(--slate-deep)}
.warmup li:nth-child(2)::before{box-shadow:0 3px 0 var(--ember)}

/* Landing */
.hero{display:grid;grid-template-columns:minmax(0, 1fr) auto;align-items:end;gap:6px;margin:-62px 0 14px}
.hero .eyebrow{margin:0 0 4px;max-width:150px}
.hero-art{width:clamp(136px, 42vw, 176px);margin-right:calc(var(--bleed, 0px) * -1)}
.hero-art svg{display:block;width:100%;height:auto;overflow:visible}
@supports (overflow:clip){.shell{overflow-x:clip;--bleed:38px}}
.trust{margin-top:22px;font-size:15px;color:var(--soft)}
.rule{display:flex;align-items:center;gap:12px;margin:52px 0 22px}
.rule::after{content:"";flex:1;height:1.5px;background:var(--hair)}
.warmup{margin-bottom:30px}

/* Quiz progress: answered blocks ignite, the current one is frozen, the rest are empty slots */
.quiz-head{display:flex;align-items:center;gap:12px;margin-bottom:24px}
.back{flex:none;width:44px;height:44px;display:grid;place-items:center;padding:0;border-radius:14px}
.back:active{transform:translateY(2px);box-shadow:0 1px 0 var(--edge)}
.back[disabled]{opacity:.35;box-shadow:none;transform:translateY(3px);cursor:default}
.progress{flex:1;display:grid;grid-template-columns:repeat(11, minmax(0, 1fr));gap:4px;height:14px}
.progress i{position:relative;border-radius:4.5px;border:1.5px solid var(--line)}
.progress i::after{content:"";position:absolute;inset:-1.5px;border-radius:inherit;background:linear-gradient(var(--hot), var(--ember) 70%);box-shadow:0 0 10px #FF7A2F99;opacity:0;transform:scale(.3, 1.9);transition:opacity .25s, transform .5s var(--pop)}
.progress .lit::after{opacity:1;transform:none}
.progress .now{background:var(--slate);border-color:var(--frost-mid);animation:wait 1.6s ease-in-out 3}
@keyframes wait{50%{opacity:.5}}
.count{flex:none;min-width:42px;text-align:right;font-size:13px;color:var(--muted)}
.count b{font-size:19px;color:var(--ink)}

#q-text{margin-bottom:22px}
#q-text span{display:block}
#q-text span, .option{animation:in .15s ease-out both}
.options{display:grid;gap:12px}
.option{position:relative;display:flex;align-items:center;width:100%;min-height:60px;padding:12px 44px 12px 18px;border-radius:19px;text-align:left;font:600 16px/1.3 var(--body)}
.option:active{transform:translateY(3px);box-shadow:0 1px 0 var(--edge)}
.option.picked{background:var(--ember);border-color:var(--hot);color:var(--on-ember);transform:translateY(2px);box-shadow:inset 0 2px 0 #FFFFFF4D, 0 2px 0 var(--ember-deep)}
.picked::after{left:auto;right:21px;top:calc(50% - 9px);width:7px;height:13px;border-width:0 3px 3px 0}
@media (hover:hover){
  .option:hover, .plan:hover, .back:hover{border-color:var(--ember)}
  .btn:hover{background:#FF8A45}
}

/* Loading, the one loud moment: the block thaws bottom-up while heat rings leave it */
.thaw{position:relative;width:216px;height:216px;margin:6px auto 18px}
.thaw svg{position:relative;display:block;width:100%;height:100%;animation:unstick 2.7s var(--out) both}
.glow{position:absolute;inset:-18%;border-radius:50%;background:radial-gradient(closest-side, #FF6E2880, #FF6E2826 55%, transparent);animation:warm 2.7s ease-out both}
.rise{animation:melt 2.5s cubic-bezier(.5, 0, .3, 1) .15s both}
.thaw .hatch{animation:fade 2.2s ease-in .3s both}
.ring{position:absolute;inset:14% 17% 20%;border-radius:30%;border:2.5px solid var(--ember);opacity:0;animation:ring 1.8s ease-out .6s 2}
.ring:nth-child(2){animation-delay:1.05s}
.ring:nth-child(3){animation-delay:1.5s}
@keyframes melt{from{transform:translate(-22px, 166px)} to{transform:translate(22px, 0)}}
@keyframes warm{from{opacity:.08;transform:scale(.5)} to{opacity:1;transform:scale(1.1)}}
@keyframes fade{to{opacity:0}}
@keyframes ring{from{opacity:.7;transform:scale(.9)} to{opacity:0;transform:scale(1.75)}}
@keyframes unstick{0%, 9%, 18%{transform:rotate(0)} 4.5%{transform:rotate(-2.5deg)} 13.5%{transform:rotate(2.5deg)} 88%{transform:scale(1)} 94%{transform:scale(1.07) rotate(-3deg)} 100%{transform:rotate(-3deg)}}
.status{display:inline-flex;align-items:center;gap:10px;min-height:40px;padding:8px 16px 8px 14px;border-radius:99px;font-weight:600;font-size:15px;color:var(--soft)}
.status i{width:9px;height:9px;border-radius:3px;background:var(--ember);animation:wait 1s ease-in-out infinite}
#loading-line{animation:line .9s var(--out) 3}
@keyframes line{from{opacity:0;transform:translateY(7px)} 25%{opacity:1;transform:none}}

/* Forms */
label{display:block;font-weight:600;margin-bottom:10px}
input, textarea{display:block;width:100%;margin-bottom:14px;padding:16px;font:inherit;color:var(--ink);background:var(--well);border:1.5px solid var(--line);border-radius:17px;box-shadow:inset 0 3px 0 #0009}
textarea{resize:none}
::placeholder{color:#9C8EA9;opacity:1}
input:focus, textarea:focus{outline:none;border-color:var(--ember);box-shadow:inset 0 3px 0 #0009, 0 0 0 4px #FF7A2F4D}
/* Autofill keeps the dark well instead of the browser's pale fill */
input:-webkit-autofill{-webkit-text-fill-color:var(--ink);caret-color:var(--ink);box-shadow:inset 0 3px 0 #0009, inset 0 0 0 99px var(--well)}
input:-webkit-autofill:focus{box-shadow:inset 0 3px 0 #0009, inset 0 0 0 99px var(--well), 0 0 0 4px #FF7A2F4D}
.error{display:flex;align-items:center;gap:8px;margin:-4px 0 14px;font-size:14px;font-weight:600;color:var(--err)}
.error::before{content:"!";width:20px;height:20px;border-radius:6px;background:var(--err);color:var(--on-ember);font-size:13px}

/* Email: the type name is still frozen over */
.sealed{position:relative;display:flex;align-items:center;gap:14px;margin:6px 0 26px;padding:16px 16px 14px 14px;border-radius:22px;transform:rotate(-1.2deg)}
.sealed svg{flex:none;width:50px;height:56px}
.sealed div{flex:1;min-width:0}
.sealed .badge{right:16px;transform:rotate(2.5deg)}
.tag{display:block;font-size:12px;line-height:1;margin-bottom:9px}
.redact{display:flex;align-items:center;gap:7px;font-size:22px;line-height:1;letter-spacing:-.02em}
.redact i{flex:0 1 92px;height:20px;border-radius:6.5px;background:repeating-linear-gradient(135deg, var(--slate) 0 5px, #3D4168 5px 10px)}
.redact i + i{flex-basis:58px;margin-right:-5px}

/* Result: the type drawn in blocks, a cold card for the freeze, a warm card for the thaw */
#r-name{font-size:clamp(32px, 10.4vw, 50px);line-height:.96;margin-bottom:14px}
.fig{margin-bottom:18px;padding:20px 18px 15px;border-radius:24px;background:var(--well);border:1.5px solid var(--hair);box-shadow:inset 0 3px 0 #0009}
.fig svg{display:block;width:100%;max-width:330px;margin:0 auto}
.fig .c{fill:#565B8C;stroke:none}
.fig .h{fill:var(--ember);stroke:none}
.fig .o{stroke:#6B71A6;stroke-width:2.5;stroke-dasharray:5 6}
.fig .t{stroke:var(--on-ember);stroke-width:7}
figcaption{margin-top:14px;padding-top:12px;border-top:1.5px dashed var(--hair);font-size:14px;line-height:1.4;color:var(--muted);text-wrap:balance}
.card{padding:20px 18px 22px;border-radius:24px;border:1.5px solid var(--slate);margin-bottom:18px;background:#1E1D36;box-shadow:0 5px 0 #0C0B18}
.card p, .card li{font-size:16px;color:var(--soft)}
.cold h3{color:var(--frost-mid)}
.card.warm{margin-bottom:0;background:#2B1712;border-color:var(--ember);box-shadow:0 5px 0 var(--ember-deep)}
.warm h3{color:var(--hot)}
.card.warm li{color:var(--ink)}

/* Sticky button on a solid band of ground. app.js adds .rest while it sits in its natural place */
.dock{position:sticky;bottom:0;z-index:3;margin:0 -20px;padding:30px 20px calc(16px + env(safe-area-inset-bottom))}
.dock::before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top, var(--ground) 84%, transparent);transition:opacity .25s}
.dock.rest::before{opacity:0}
.dock-end{display:block;height:1px}

/* Paywall */
.features{display:grid;gap:12px;margin:16px 0 24px}
.features li{display:flex;gap:14px;font-size:16px;line-height:1.4;color:var(--soft)}
/* The type line under the paywall heading reuses the plan sub line (.sub); the name is ink because ember is for large text only */
.features strong, #p-type{color:var(--ink)}
.features svg{flex:none;width:44px;height:44px;padding:8.5px;border-radius:14px;stroke-width:2.3}
.plans{display:grid;gap:12px}
.plan{position:relative;display:flex;align-items:center;gap:13px;width:100%;min-height:76px;padding:13px 16px;border-width:2px;border-radius:21px;font:inherit;text-align:left}
.plan:active{transform:translateY(3px)}
.tagged{margin-top:7px;padding-top:21px}
.plan .badge{left:51px;transform:rotate(-2deg)}
.radio{flex:none;width:24px;height:24px;border-radius:50%;border:2px solid var(--line);background:var(--well)}
.what{flex:1;min-width:0}
.name, .sub, .per{display:block}
.name{font-size:19px;line-height:1.15;letter-spacing:-.02em}
.sub{margin-top:3px;font-size:14px;line-height:1.3;color:var(--muted)}
.price{flex:none;text-align:right;font-size:21px;line-height:1.1;letter-spacing:-.02em;white-space:nowrap}
.per{margin-top:4px;font:400 13px/1.2 var(--body);letter-spacing:0;color:var(--muted)}
.plan.selected{background:#2F1913;border-color:var(--ember);box-shadow:inset 0 1.5px 0 #FFBE4D40, 0 4px 0 var(--ember-deep)}
.selected .radio{border-color:var(--ember);background:radial-gradient(circle, var(--ember) 0 42%, var(--on-ember) 46%)}
.selected .price{color:var(--hot)}
[data-screen="paywall"] .fine{margin-top:4px}

/* Early access: a paper receipt that says zero */
.receipt{--zig:conic-gradient(from -45deg at bottom, #0000, #000 1deg 89deg, #0000 90deg) 50% / 18px 100%;margin:0 6px 24px;padding:10px 20px 22px;background:var(--ink);color:#2A1B2E;border-radius:14px 14px 0 0;transform:rotate(-1.6deg);font-size:15px;-webkit-mask:var(--zig);mask:var(--zig)}
.receipt div{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:4px 0}
dd{font-weight:600}
.receipt .total{margin-top:6px;padding-top:10px;border-top:2px dashed;font-weight:600}
.total dd{font-size:34px;line-height:1;letter-spacing:-.03em}

/* Thanks */
.thaw.done{width:132px;height:132px;margin:-6px 0 14px -12px}
.done svg{animation:none;transform:rotate(-6deg)}
.done .glow{animation:none}
.sign{margin-top:34px;padding-top:22px;border-top:1.5px solid var(--hair);color:var(--muted)}
.sign .logo{display:flex;margin-top:8px}

.foot{display:flex;justify-content:space-between;align-items:center;padding-bottom:calc(10px + env(safe-area-inset-bottom));font-size:13px;color:var(--muted)}
.foot a{padding:13px 12px 13px 0}

/* Privacy */
.doc h2{display:flex;align-items:center;gap:11px;font-size:22px;letter-spacing:-.02em;margin:34px 0 10px}
.doc h2::before{content:"";flex:none;width:13px;height:13px;border-radius:4.5px;box-shadow:0 2.5px 0 var(--ember-deep);transform:rotate(-9deg)}
.doc p:not([class]), .doc li{font-size:16px;line-height:1.6;color:var(--soft)}
.doc ul{display:grid;gap:8px}
.doc li{position:relative;padding-left:22px}
.doc li::before{content:"";position:absolute;left:2px;top:.62em;width:8px;height:8px;border-radius:3px;background:var(--slate)}
.doc p a{color:var(--hot);font-weight:600}
.doc .option{margin-top:34px;text-decoration:none}

/* Small or short phones: button and plans first. .short = viewport 640px or less at load, set once in <head> so it cannot flip mid-scroll */
@media (max-width:360px){
  .more{display:none}
  .features{gap:9px;margin:16px 0 22px}
  .features li{align-items:center;font-size:15px}
  .features svg{width:34px;height:34px;padding:6px;border-radius:11px}
}
.short .more{display:none}
.short .features{gap:9px;margin:16px 0 22px}
.short .features li{align-items:center;font-size:15px}
.short .features svg{width:34px;height:34px;padding:6px;border-radius:11px}
@media (max-width:819px){
  .short #app{padding-top:14px}
  .short .hero{margin-top:-50px}
  .short .hero-art{width:120px}
  .short .lead{margin-bottom:18px}
  .short .quiz-head, .short #q-text{margin-bottom:14px}
  .short .options{gap:9px}
  .short .option{min-height:52px;padding:9px 44px 9px 16px}
}

/* Desktop: one tall slab between frozen tasks (left) and thawed ones (right) */
@media (min-width:820px){
  body{padding:36px 0 50px}
  body::before{background:radial-gradient(40% 56% at 6% 10%, #626CCD3D, transparent 70%);opacity:1}
  body::after{background:radial-gradient(42% 60% at 96% 92%, #FF682052, transparent 70%);opacity:calc(.55 + var(--heat) * .45)}
  .backdrop{display:block;position:fixed;inset:0;width:100%;height:100%;z-index:0}
  .shell{--ground:#19131F;--bleed:6px;max-width:452px;padding:6px 30px 4px;background:var(--ground);border:1.5px solid var(--hair);border-radius:44px;box-shadow:inset 0 2px 0 #FFFFFF12, 0 12px 0 var(--edge), 0 60px 120px -20px #000C}
  .dock{margin:0 -30px;padding-left:30px;padding-right:30px}
}

@media (prefers-reduced-motion:reduce){
  *, *::before, *::after{animation-duration:.01ms !important;animation-delay:0s !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
}
