/* TRIAG — public drop page (mockup). Fonts: IBM Plex Mono + Inter, both SIL OFL, self-hosted. */
@font-face{font-family:"Plex Mono";src:url(/assets/fonts/ibm-plex-mono-400.woff2) format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(/assets/fonts/ibm-plex-mono-500.woff2) format("woff2");font-weight:500;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(/assets/fonts/ibm-plex-mono-600.woff2) format("woff2");font-weight:600;font-display:swap}
@font-face{font-family:"Plex Mono";src:url(/assets/fonts/ibm-plex-mono-700.woff2) format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"Inter";src:url(/assets/fonts/inter-var.woff2) format("woff2");font-weight:100 900;font-display:swap}

:root{
  /* Glass dashboard tokens (praxis-web-landing/src/styles.css, TRIAG RESKIN P1 + alpha-rain paper). One cream theme, every view. */
  --paper:#f4f1e8;            /* alpha-rain paper / --cable-white */
  --paper2:#f8f7f3;           /* paper-slip fields + chips */
  --surface:#efeee9;          /* --color-surface (glass card fill) */
  --surface2:#e4e3dd;         /* --color-surface-2 */
  --cream:#f3e9c6;            /* --brand-cream (text on navy) */
  --ink:#1b2230;              /* --color-fg */
  --muted:#3f4652;            /* --color-muted */
  --subtle:#555b66;           /* --color-subtle */
  --navy:#1f2a3a;             /* --brand-navy */
  --line:color-mix(in oklab,#1b2230 24%,transparent);   /* --color-border */
  --stroke:color-mix(in oklab,#1b2230 32%,transparent); /* --glass-stroke-soft */
  --burnt:#a8440f;            /* --color-accent */
  --burnt2:#8c380c;           /* --color-accent-dim */
  --ink-acc:#8f3a0c;          /* .fxr-ink: small accent labels, AA on paper */
  --accent-fg:#fff7ec;        /* --color-accent-fg */
  --orange:#e8772e;           /* --brand-orange (non-text accents) */
  --red:#b3261e;              /* --color-danger */
  --ok:#23703a;               /* --color-ok (text) */
  --blue:#2f72c4; --green:#2f9a4c; --brown:#7d5034; /* --cable-bl / --cable-gr / --cable-br */
  --shadow:0 1px 0 rgba(27,34,48,.06),3px 3px 0 rgba(27,34,48,.07); /* --shadow-glass */
  --mono:"Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --bg:var(--paper); --fg:var(--ink); --fg2:var(--muted);
  --ease:cubic-bezier(.2,.8,.2,1);
}
*{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
html,body{height:100%}
body{background:var(--bg);color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased;
  overflow-x:hidden;min-height:100dvh}
/* paper grain + faint grid */
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;opacity:.55;
  background-image:radial-gradient(rgba(27,34,48,.07) 1px,transparent 1.3px);background-size:6px 6px}
/* Glass .triag-backdrop: soft vignette + static scanline on the paper */
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(ellipse 90% 80% at 50% 45%,transparent 55%,rgba(27,34,48,.07) 100%),
  repeating-linear-gradient(180deg,rgba(27,34,48,.035) 0,rgba(27,34,48,.035) 1px,transparent 1px,transparent 3px)}
canvas#traces,canvas#sparks{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}
canvas#traces{z-index:0} canvas#sparks{z-index:50}
.skip{position:absolute;left:-999px;top:8px;z-index:99;background:var(--navy);color:var(--paper);padding:8px 12px;font-family:var(--mono)}
.skip:focus{left:8px}
:focus-visible{outline:2px solid var(--burnt);outline-offset:3px}
a{color:inherit}
.red{color:var(--red)}

/* HUD */
.hud{position:absolute;left:0;right:0;top:0;height:60px;pointer-events:none;z-index:5}
.hud-tag{position:absolute;font:500 11px/1 var(--mono);letter-spacing:.16em;color:var(--fg2);
  padding:7px 10px;border:1px solid var(--stroke);background:color-mix(in oklab,var(--paper2) 88%,transparent);
  backdrop-filter:blur(2px);text-transform:uppercase;white-space:nowrap}
.hud-tl{top:18px;left:18px} .hud-tr{top:18px;right:18px}
.dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 6px rgba(47,154,76,.7);margin-right:6px;vertical-align:1px;animation:blink 2.4s steps(2) infinite}
@keyframes blink{50%{opacity:.35}}

main{position:relative;z-index:2;min-height:100dvh;display:grid}
.view{grid-area:1/1;display:none;min-height:100dvh;place-items:center;padding:84px 20px 72px}
.view.is-active{display:grid;animation:in .55s var(--ease) both}
@keyframes in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- HERO ---------- */
.drop{display:flex;flex-direction:column;align-items:center;text-align:center;gap:0}
.ttree{width:clamp(120px,14vw,168px);height:auto;margin-bottom:-6px;filter:saturate(1.05);animation:float 6s ease-in-out infinite}
/* owner-approved hero unlock (10/29): T-tree 1.3x. `scale` (not width) so nothing else in the hero moves; grows up from its base */
.ttree{scale:1.3;transform-origin:50% 100%}
/* short phones (320x568): the scaled tree would reach the corner HUD tags, so reserve its extra 0.3x height there only */
@media (max-width:640px) and (max-height:620px){.ttree{margin-top:52px}}
@keyframes float{50%{transform:translateY(-4px)}}
.wordmark img{display:block;width:clamp(220px,26vw,340px);height:auto}
.tagline{margin-top:22px;font:500 clamp(14px,1.25vw,16px)/1.4 var(--mono);letter-spacing:.04em;color:var(--ink);text-wrap:balance}
.deploy{position:relative;margin-top:40px;border:0;cursor:pointer;background:var(--navy);color:var(--cream);
  font:700 15px/1 var(--mono);letter-spacing:.42em;padding:20px 40px 20px 46px;border-radius:2px;
  box-shadow:0 0 0 1px var(--navy),0 0 0 4px var(--paper),0 0 0 5px rgba(168,68,15,.55),0 10px 40px -8px rgba(232,119,46,.6);
  transition:transform .15s var(--ease),box-shadow .3s}
.deploy::before{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;
  background:linear-gradient(90deg,var(--orange),var(--blue) 25%,var(--green) 50%,var(--brown) 75%,var(--orange));background-size:200% 100%;animation:wire 3s linear infinite}
@keyframes wire{to{background-position:200% 0}}
.deploy-ring{position:absolute;inset:-5px;border:1px solid var(--orange);border-radius:3px;opacity:0;animation:ring 2.6s var(--ease) infinite}
@keyframes ring{0%{opacity:.7;transform:scale(1)}100%{opacity:0;transform:scale(1.22,1.6)}}
.deploy:hover{transform:translateY(-1px);box-shadow:0 0 0 1px var(--navy),0 0 0 4px var(--paper),0 0 0 5px var(--orange),0 14px 50px -6px rgba(232,119,46,.8)}
.deploy:active{transform:translateY(1px) scale(.98)}
.deploy.fired{animation:fire .5s var(--ease)}
@keyframes fire{30%{transform:scale(1.06);box-shadow:0 0 0 1px var(--navy),0 0 0 6px var(--paper),0 0 0 7px var(--orange),0 0 80px 10px rgba(232,119,46,.85)}}
.hint{margin-top:18px;font:500 11px/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--subtle)}
kbd{font:600 10px/1 var(--mono);border:1px solid var(--stroke);padding:3px 6px;margin-left:6px;background:var(--paper2);color:var(--ink);letter-spacing:.1em}

/* ---------- TRANSITION: ASCII rain behind, TRIAG decodes on top, then everything fades into the form ---------- */
#rain{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none;opacity:0;transition:opacity .28s linear}
#v-boot.is-active #rain{opacity:.9}
#v-boot.is-out #rain{opacity:0}
.boot{position:relative;z-index:1;display:grid;justify-items:center;gap:18px;text-align:center;transition:opacity .28s var(--ease),transform .28s var(--ease)}
#v-boot.is-out .boot{opacity:0;transform:scale(.98)}
/* crossfade into the form: the leaving reveal keeps painting above the incoming view, ignores input, and fades out */
#v-boot.is-leaving{display:grid;position:relative;z-index:3;pointer-events:none;align-self:start;height:100dvh;min-height:0}
#v-boot.is-leaving #rain,#v-boot.is-leaving .boot{transition-duration:.32s}
#v-boot.is-leaving~#v-apply.is-active{animation-duration:.34s}
/* reveal letters: 0.8 x 0.71 x the original clamp(28px,4.6vw,58px) -> 16px on a 390px phone, 33px on desktop.
   15 fixed-width slots (1ch + spacing) so the scramble stays centred; the extras collapse to width 0 */
.boot-glyph{position:relative;font:700 clamp(16px,2.62vw,33px)/1 var(--mono);letter-spacing:0;color:var(--ink);white-space:nowrap;
  padding:.4em .5em;background:color-mix(in oklab,var(--paper) 94%,transparent);
  box-shadow:inset 0 1px 0 color-mix(in oklab,var(--burnt) 55%,transparent),inset 0 -1px 0 color-mix(in oklab,var(--burnt) 55%,transparent),0 0 0 10px color-mix(in oklab,var(--paper) 55%,transparent),0 0 40px 18px color-mix(in oklab,var(--paper) 80%,transparent);
  text-shadow:0 0 18px rgba(232,119,46,.4);opacity:0;transform:scale(.96);transition:opacity .18s var(--ease),transform .3s var(--ease)}
#v-boot.is-decode .boot-glyph{opacity:1;transform:none}
#v-boot.is-set .boot-glyph{animation:glyph-set .45s var(--ease)}
@keyframes glyph-set{30%{text-shadow:0 0 30px rgba(232,119,46,.85),-1.5px 0 rgba(226,65,47,.5),1.5px 0 rgba(26,167,201,.5)}}
.boot-glyph span{display:inline-block;width:calc(1ch + .32em);text-align:center;vertical-align:top;overflow:hidden;
  transition:width .3s var(--ease),opacity .22s ease,transform .3s var(--ease)}
.boot-glyph span.x{width:0;opacity:0;transform:translateY(.45em) scale(.55)}
.boot-glyph .g{color:var(--burnt)}
.boot-sub{font:500 12px/1 var(--mono);letter-spacing:.4em;margin-right:-.4em;color:var(--ink);min-height:12px;text-transform:uppercase;
  padding:6px 4px 6px 10px;background:color-mix(in oklab,var(--paper) 90%,transparent)}
.boot-sub:empty{background:none}
.boot-bar{width:min(320px,70vw);height:2px;background:rgba(27,34,48,.18);overflow:hidden}
.boot-bar span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--burnt),var(--orange));box-shadow:0 0 10px rgba(232,119,46,.7)}
#v-boot.is-active .boot-bar span{animation:fill var(--boot-ms,1.5s) var(--ease) forwards}
@keyframes fill{to{width:100%}}

/* ---------- INVITE ---------- */
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.invite{margin-top:34px;display:grid;justify-items:center;gap:10px;width:min(440px,92vw)}
.link{background:none;border:0;cursor:pointer;font:500 11px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-acc);
  padding:8px 4px;text-decoration:underline;text-decoration-color:rgba(168,68,15,.35);text-underline-offset:5px}
.link:hover{color:var(--navy)}
.link.sub{color:var(--subtle);font-size:10.5px}
.inv-form{display:grid;grid-template-columns:1fr auto;width:min(300px,100%);animation:in .3s var(--ease)}
.inv-form input{min-height:44px;padding:0 12px;border:1px solid color-mix(in oklab,var(--ink) 58%,transparent);border-right:0;background:var(--paper2);color:var(--ink);
  font:600 15px/1 var(--mono);letter-spacing:.24em;text-transform:uppercase;border-radius:2px 0 0 2px}
.inv-form input::placeholder{color:#5f646e}
.inv-form input:focus{outline:none;border-color:var(--burnt);box-shadow:0 0 0 3px rgba(232,119,46,.22)}
.inv-go{min-width:46px;border:0;background:var(--navy);color:var(--cream);font:600 16px/1 var(--mono);cursor:pointer;border-radius:0 2px 2px 0}
.inv-go:hover{background:var(--burnt)}
.inv-msg{grid-column:1/-1;min-height:16px;margin-top:8px;font:500 11px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--red)}
.inv-form.shake{animation:shake .35s}
@keyframes shake{25%{transform:translateX(-6px)}50%{transform:translateX(5px)}75%{transform:translateX(-3px)}}
.ia-panel{width:100%;text-align:left;background:color-mix(in oklab,var(--surface) 97%,transparent);color:var(--ink);border:1px solid var(--stroke);border-radius:6px;padding:18px 18px 16px;position:relative;overflow:hidden;
  box-shadow:var(--shadow);animation:drop .35s var(--ease) both;transform-origin:top}
.ia-panel::before,.card::after,.inv-ok::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;pointer-events:none;background:color-mix(in oklab,var(--orange) 80%,transparent);opacity:.85}
.ia-panel::after{content:"";position:absolute;left:0;right:0;top:0;height:2px;background:linear-gradient(90deg,var(--orange),var(--blue),var(--green),var(--brown))}
@keyframes drop{from{opacity:0;transform:translateY(-8px) scaleY(.96)}to{opacity:1;transform:none}}
.ia-title{color:var(--ink-acc)!important;margin-bottom:12px}
.ia-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.f{display:grid;gap:5px}.f.wide{grid-column:1/-1}
.f>span{font:500 10px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--subtle)}
.f em{font-style:normal;text-transform:lowercase;letter-spacing:.06em}
.f input,.f select{width:100%;min-height:40px;padding:8px 10px;background:var(--paper2);border:1px solid color-mix(in oklab,var(--ink) 58%,transparent);color:var(--ink);font:500 14px/1.2 var(--sans);border-radius:2px;appearance:none}
.f select{background-image:linear-gradient(45deg,transparent 50%,#3f4652 50%),linear-gradient(135deg,#3f4652 50%,transparent 50%);background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}
.f input:focus,.f select:focus{border-color:var(--burnt);outline:none;box-shadow:0 0 0 3px rgba(232,119,46,.22)}
[aria-invalid="true"]{border-color:var(--red)!important;box-shadow:0 0 0 1px var(--red)}
.ia-phi{margin-top:12px;font:600 11px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.ia-go{margin-top:12px;width:100%;min-height:44px;border:0;background:var(--burnt);color:var(--accent-fg);font:700 12px/1 var(--mono);letter-spacing:.22em;text-transform:uppercase;cursor:pointer;border-radius:2px}
.ia-go:hover{background:var(--burnt2)}
.ia-done{padding:6px 2px 4px;outline:none}
.ia-done-t{margin-top:8px;font:500 17px/1.45 var(--sans);color:var(--ink)}
.err.sm{font-size:12px;margin-top:10px}

/* ---------- PANELS ---------- */
.panel{width:min(620px,100%)}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px}
.mono-label{font:500 11px/1.3 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.mono-label.dim{color:var(--subtle)}
.count{color:var(--ink-acc);font-weight:600;font-size:13px;letter-spacing:.12em}
.card{position:relative;overflow:hidden;background:color-mix(in oklab,var(--surface) 93%,transparent);border:1px solid var(--stroke);border-radius:6px;padding:28px 26px 26px;
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);box-shadow:var(--shadow)}
.card::before{content:"";position:absolute;left:0;top:0;right:0;height:2px;background:linear-gradient(90deg,var(--orange),var(--blue),var(--green),var(--brown));opacity:.8}
.kicker{color:var(--ink-acc)}
.q-title{margin-top:10px;font:600 clamp(22px,2.6vw,28px)/1.2 var(--sans);letter-spacing:-.01em;color:var(--ink);text-wrap:balance;outline:none}
.q-title.big{font-size:clamp(28px,3.6vw,38px)}
.q-note{margin-top:8px;color:var(--muted);font-size:15px;line-height:1.5;text-wrap:pretty}
.opts{margin-top:22px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.opt{display:flex;align-items:center;gap:12px;text-align:left;cursor:pointer;min-height:54px;padding:12px 14px;
  background:var(--paper2);border:1px solid color-mix(in oklab,var(--ink) 52%,transparent);color:var(--ink);font:500 15px/1.25 var(--sans);border-radius:2px;
  transition:border-color .15s,background .15s,transform .1s}
.opt:hover{border-color:var(--orange);background:color-mix(in oklab,var(--orange) 8%,var(--paper2))}
.opt:active{transform:scale(.985)}
.opt[aria-pressed="true"]{border-color:var(--burnt);background:color-mix(in oklab,var(--orange) 14%,var(--paper2));box-shadow:0 0 0 1px var(--burnt) inset,0 0 18px -8px var(--orange)}
.ghost{background:none;border:0;color:var(--muted);font:500 12px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;padding:10px 8px;min-height:44px;min-width:44px}
.ghost:hover{color:var(--ink-acc)}
.ghost[disabled]{opacity:.45;cursor:default}
.row{display:flex;align-items:center;gap:16px;margin-top:24px;flex-wrap:wrap}
.cta{border:0;cursor:pointer;background:var(--burnt);color:var(--accent-fg);font:700 13px/1 var(--mono);letter-spacing:.22em;text-transform:uppercase;padding:17px 26px;border-radius:2px;
  box-shadow:0 0 0 1px var(--burnt2),0 10px 26px -12px rgba(232,119,46,.8);transition:transform .12s,background .2s}
.cta:hover{background:var(--burnt2)} .cta:active{transform:scale(.98)}

/* form */
.phi{margin-top:12px;padding:10px 12px;border-left:3px solid var(--orange);background:color-mix(in oklab,var(--orange) 9%,var(--paper2));color:var(--ink);font-size:14px;line-height:1.45}
.grid{margin-top:20px;display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field{display:grid;gap:6px}
.field>span{font:500 12px/1 var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--subtle)}
.field em{font-style:normal;letter-spacing:.08em;text-transform:lowercase}
.field input,.field select{width:100%;min-height:46px;padding:10px 12px;background:var(--paper2);border:1px solid color-mix(in oklab,var(--ink) 58%,transparent);color:var(--ink);font:500 15px/1.2 var(--sans);border-radius:2px;appearance:none}
.field select{background-image:linear-gradient(45deg,transparent 50%,#3f4652 50%),linear-gradient(135deg,#3f4652 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:32px}
.field input:focus,.field select:focus{border-color:var(--burnt);outline:none;box-shadow:0 0 0 3px rgba(232,119,46,.22)}
.field input[aria-invalid="true"],.field select[aria-invalid="true"]{border-color:var(--red)}
.err{margin-top:14px;color:var(--red);font:500 13px/1.4 var(--mono)}

/* footer */
.foot{position:relative;margin-top:-52px;z-index:4;display:flex;justify-content:center;flex-wrap:wrap;gap:10px;padding:14px 16px calc(14px + env(safe-area-inset-bottom));
  font:500 11px/1.2 var(--mono);letter-spacing:.12em;color:var(--muted);text-transform:uppercase}
.foot a{text-transform:none;letter-spacing:.06em;text-decoration-color:rgba(168,68,15,.6);text-underline-offset:3px}
.noscript{position:fixed;bottom:60px;left:0;right:0;text-align:center;font-family:var(--mono);z-index:9}

@media (max-width:640px){
  .hud-tag{font-size:9.5px;letter-spacing:.12em;padding:6px 8px}
  .hud-tl{top:12px;left:12px} .hud-tr{top:12px;right:12px}
  .ia-grid{grid-template-columns:1fr}
  .view{padding:68px 14px 64px;align-items:start}
  #v-hero,#v-boot{align-items:center}
  .opts{grid-template-columns:1fr}
  .grid{grid-template-columns:1fr}
  .card{padding:22px 18px 20px}
  .deploy{padding:19px 34px 19px 40px}
}
@media (max-height:640px) and (min-width:641px){.view{align-items:start}}
/* no reduced-motion opt-out (owner's call, 2026-10-29): FX in fx.css run for everyone */

/* question free-text */
.qtext{margin-top:20px}
.qtext textarea{width:100%;min-height:96px;resize:vertical;padding:12px;background:var(--paper2);border:1px solid color-mix(in oklab,var(--ink) 58%,transparent);color:var(--ink);font:500 15px/1.5 var(--sans);border-radius:2px}
.qtext textarea:focus{outline:none;border-color:var(--burnt);box-shadow:0 0 0 3px rgba(232,119,46,.22)}
.qtext-row{display:flex;justify-content:space-between;align-items:center;margin-top:8px;gap:10px}
.phi-inline{font:600 11px/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.field.wide{grid-column:1/-1}
.phi{margin-top:16px}
.seal{margin-top:26px;letter-spacing:.3em}
.verdict.no .kicker{color:var(--subtle)}
.verdict .q-title.big{font-size:clamp(30px,4vw,44px)}
.hud .sep{opacity:.6;margin:0 4px}
.foot-mark{font-weight:700;letter-spacing:.3em}
.phi-inline{text-transform:none;letter-spacing:.02em;font-weight:500;font-size:12px}
.ia-phi{text-transform:none;letter-spacing:.02em;font-weight:500;font-size:11.5px}

/* honeypot: off-screen, out of tab order, hidden from assistive tech */
.hpf{position:absolute!important;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
/* verification widget slot: collapses when no interaction is needed */
.ts{grid-column:1/-1;margin-top:10px}
.ts:empty{display:none}
.inv-ok{display:grid;gap:6px;justify-items:center;padding:14px 18px 16px;position:relative;overflow:hidden;border:1px solid var(--stroke);border-radius:6px;background:color-mix(in oklab,var(--surface) 97%,transparent);color:var(--ink);box-shadow:var(--shadow);animation:in .4s var(--ease);outline:none;min-width:min(300px,100%)}
.inv-ok .kicker{color:var(--ok)}
.inv-ok-t{font:500 16px/1.4 var(--sans)}
.is-busy{opacity:.7;cursor:progress}
.cta.is-busy::after,.ia-go.is-busy::after{content:"";display:inline-block;width:10px;height:10px;margin-left:10px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite;vertical-align:-1px}
@keyframes spin{to{transform:rotate(360deg)}}

/* placeholders on cream (AA) */
.field input::placeholder,.f input::placeholder,.qtext textarea::placeholder{color:#5f646e}

/* ---------- one-page application: one column, two columns of question cards from 900px ---------- */
.panel-wide{width:min(1040px,100%)}
.aform{margin-top:12px;display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-items:stretch}
@media (min-width:860px){   /* 2 columns: desktop, iPad landscape, unfolded iPhone Duo in landscape (890 CSS px) */
  .aform{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
  .aform>.span2{grid-column:1/-1}
}
/* every question is its own info card (base .card look + the fx.css card hover / click reactions) */
.aform>.card{margin:0;min-width:0}
.qintro.card{padding:22px 24px 20px}
.qintro .q-title{margin-top:0}
.qb.card{padding:20px 22px 22px;display:flex;flex-direction:column}
/* the choice fieldset sits INSIDE the card with no border of its own, so its legend lays out as a normal block */
.qf{border:0;margin:0;padding:0;min-width:0}
.qf>legend{padding:0;width:100%}
.qb-l{display:block;margin:0}
.qb-l>.kicker{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.qb-l>.qb-q{display:block;font:600 clamp(17px,1.7vw,19px)/1.3 var(--sans);letter-spacing:-.005em;color:var(--ink);text-wrap:balance}
.qb-n{margin-top:6px;color:var(--muted);font-size:14px;line-height:1.45}
.qb .opts,.qb .qb-body{margin-top:14px}
.qb .phi{margin-top:12px}
.qb .field input{font-size:16px}
.qb .qtext textarea{font-size:16px;min-height:92px}
.chips{gap:8px}
.chips .opt{min-height:46px;padding:10px 14px;justify-content:flex-start}
.chips.c3{grid-template-columns:repeat(3,minmax(0,1fr))}
.chips.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
/* invalid: red-tinted card edge + red kicker with a small tag (class set by app.js, so no :has() needed) */
.qb.is-invalid{border-color:color-mix(in oklab,var(--red) 55%,transparent)}
.qf[aria-invalid="true"]{border-color:transparent!important;box-shadow:none}
.qb.is-invalid .opt{border-color:color-mix(in oklab,var(--red) 75%,transparent)}
.qb.is-invalid .kicker{color:var(--red)}
.qb.is-invalid .kicker::after{content:"required";font-size:12px;letter-spacing:.12em;padding:2px 6px;border:1px solid color-mix(in oklab,var(--red) 55%,transparent)}
.aform>.row{margin-top:6px}
.aform>.err,.aform>.ts{margin-top:0}
@media (max-width:640px){
  .qb.card,.qintro.card{padding:16px 16px 18px}
  .chips.c2,.chips.c4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .chips.c3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .chips.long{grid-template-columns:1fr}
  .chips .opt{padding:10px 12px;font-size:14.5px}
}
@media (max-width:340px){.chips.c2,.chips.c4{grid-template-columns:1fr}}

/* ---------- screen-size pass (non-hero views only; the hero is locked) ---------- */
/* form / verdict labels never below 12px */
:is(#v-apply,#v-done) .mono-label{font-size:12px}
/* notch / Dynamic Island / hinge-side insets in landscape and on foldables (viewport-fit=cover is already set) */
:is(#v-boot,#v-apply,#v-done).view{padding-left:max(20px,env(safe-area-inset-left));padding-right:max(20px,env(safe-area-inset-right));
  padding-bottom:max(72px,calc(env(safe-area-inset-bottom) + 56px))}
@media (max-width:640px){:is(#v-boot,#v-apply,#v-done).view{padding-left:max(14px,env(safe-area-inset-left));padding-right:max(14px,env(safe-area-inset-right))}}
