/* AGENTVISION — field instrument
   Design law: an instrument focuses, it does not annotate everything.
   One lock, one readout, everything else stays quiet. */

:root{
  --void:#05060A;
  --ink:#EDE8E0;
  --ink-2:rgba(237,232,224,.55);
  --ink-3:rgba(237,232,224,.30);
  --hair:rgba(237,232,224,.14);
  --lock:#6FE3FF;          /* focused / living */
  --warm:#FFC46B;          /* novel */
  --bad:#FF6B6B;
  --ok:#8BE58B;

  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace;
  --ui:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;

  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-io:cubic-bezier(.65,0,.35,1);

  --safe-t:env(safe-area-inset-top,0px);
  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-l:env(safe-area-inset-left,0px);
  --safe-r:env(safe-area-inset-right,0px);
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;margin:0;overflow:hidden;overscroll-behavior:none}
body{
  background:var(--void);color:var(--ink);
  font-family:var(--ui);
  -webkit-font-smoothing:antialiased;
  -webkit-user-select:none;user-select:none;
  touch-action:manipulation;
}
button,input{font:inherit;color:inherit}
button{background:none;border:0;padding:0;cursor:pointer}
svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
[hidden]{display:none!important}

/* ── camera plane ─────────────────────────────────────────────── */
#cam{
  position:fixed;inset:0;width:100%;height:100%;
  object-fit:cover;background:#000;
  transform:translateZ(0);
}
#cam.mirror{transform:scaleX(-1) translateZ(0)}
#hud{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:2}

/* filmic overlays — these are what stop it reading as "a web page" */
#vig{
  position:fixed;inset:0;pointer-events:none;z-index:3;
  background:
    radial-gradient(130% 90% at 50% 42%,transparent 42%,rgba(5,6,10,.34) 78%,rgba(5,6,10,.72) 100%);
  mix-blend-mode:multiply;
}
#grain{
  position:fixed;inset:-50%;pointer-events:none;z-index:4;opacity:.055;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/></filter><rect width='140' height='140' filter='url(%23n)'/></svg>");
  animation:grain 1.1s steps(4) infinite;
  will-change:transform;
}
@keyframes grain{
  0%{transform:translate(0,0)}25%{transform:translate(-3%,2%)}
  50%{transform:translate(2%,-3%)}75%{transform:translate(-2%,-2%)}100%{transform:translate(0,0)}
}

/* ── gate ─────────────────────────────────────────────────────── */
#orb{
  position:relative;width:min(58vw,236px);aspect-ratio:1;border-radius:50%;
  display:grid;place-items:center;margin-bottom:38px;
  transition:transform .55s var(--ease),filter .55s var(--ease);
  filter:drop-shadow(0 14px 46px rgba(0,0,0,.75)) drop-shadow(0 0 34px rgba(111,227,255,.18));
}
#orb:active{transform:scale(.97)}
#orb.busy{filter:drop-shadow(0 0 40px rgba(111,227,255,.45))}
#eye{width:100%;height:100%;display:block;border-radius:50%}
.orb-halo{
  position:absolute;inset:-9%;border-radius:50%;pointer-events:none;
  border:1px solid rgba(111,227,255,.14);
  animation:halo 5.2s var(--ease-io) infinite;
}
@keyframes halo{0%,100%{transform:scale(1);opacity:.5}50%{transform:scale(1.06);opacity:.12}}

/* wordmark: drawn geometry, tracked wide, thin. no font file, no CDN. */
#wordmark{
  width:min(62vw,262px);height:auto;color:var(--ink);
  opacity:.92;
}

#gate{
  position:fixed;inset:0;z-index:20;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:0;background:var(--void);
  padding:calc(var(--safe-t) + 24px) 24px calc(var(--safe-b) + 24px);
  transition:opacity .7s var(--ease),transform .7s var(--ease);
}
#gate.out{opacity:0;transform:scale(1.06);pointer-events:none}

.gate-field{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.gx{
  position:absolute;left:50%;top:44%;translate:-50% -50%;
  border:1px solid var(--hair);border-radius:50%;
  animation:breathe 7s var(--ease-io) infinite;
}
.gx1{width:58vmin;height:58vmin;animation-delay:0s;opacity:.5}
.gx2{width:82vmin;height:82vmin;animation-delay:-2.3s;opacity:.3}
.gx3{width:108vmin;height:108vmin;animation-delay:-4.6s;opacity:.16}
@keyframes breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.045)}}





/* ── live chrome ──────────────────────────────────────────────── */
#live{position:fixed;inset:0;z-index:10;pointer-events:none}
#live>*{pointer-events:auto}

#rail{
  position:absolute;top:0;left:0;right:0;
  padding:calc(var(--safe-t) + 12px) calc(var(--safe-r) + 14px) 12px calc(var(--safe-l) + 16px);
  display:flex;align-items:center;justify-content:space-between;
  font-family:var(--mono);font-size:10px;letter-spacing:.18em;text-transform:uppercase;
  background:linear-gradient(180deg,rgba(5,6,10,.62),transparent);
  pointer-events:none;
}
#rail>*{display:flex;align-items:center;gap:10px;pointer-events:auto}
.mark{color:var(--ink)}
.sep{color:var(--ink-3)}
#mode{color:var(--lock)}
.metric{color:var(--ink-3);font-variant-numeric:tabular-nums;min-width:5ch;text-align:right}
.dot{width:6px;height:6px;border-radius:50%;background:var(--ink-3);transition:background .4s var(--ease),box-shadow .4s var(--ease)}
.dot.on{background:var(--ok);box-shadow:0 0 10px rgba(139,229,139,.5)}
.dot.cloud{background:var(--lock);box-shadow:0 0 10px rgba(111,227,255,.5)}
.icon{width:30px;height:30px;padding:6px;color:var(--ink-2);transition:color .3s}
.icon:active{color:var(--ink)}

/* ── the plain answer line ────────────────────────────────────────
   Sits directly beneath the canvas system readout and above everything
   else. It is the only surface in the instrument written to be read at a
   glance, so it gets real size and real contrast; the lattice, compass and
   topology stay exactly as they were and become its detail layer. Colour is
   carried by the token palette already in use, never a new hue. */
#topstack{
  position:absolute;z-index:14;top:calc(var(--safe-t) + 56px);left:0;right:0;
  display:flex;flex-direction:column;align-items:center;gap:7px;
  pointer-events:none;
}
#readline{
  width:max-content;max-width:min(92vw,560px);
  padding:5px 13px;
  display:flex;align-items:baseline;justify-content:center;flex-wrap:wrap;gap:0 5px;
  font:600 12.5px/1.35 var(--mono);letter-spacing:.055em;
  text-align:center;
  color:var(--ink-2);
  background:linear-gradient(180deg,rgba(5,6,10,.50),rgba(5,6,10,.24));
  border:1px solid rgba(124,236,255,.10);
  border-radius:3px;
  backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);
  pointer-events:none;
  animation:readline-in .5s var(--ease) both;
}
#readline[data-tone="uncertain"]{border-color:rgba(255,196,107,.20)}
#readline i{font-style:normal;color:var(--ink-3);opacity:.55}
#readline .r-subject{color:var(--ink);letter-spacing:.10em;text-transform:uppercase}
#readline .r-number{color:var(--lock);font-variant-numeric:tabular-nums}
#readline .r-uncertain{color:var(--warm);letter-spacing:.08em;text-transform:uppercase}
#readline .r-action{color:var(--lock);font-weight:500;text-transform:none;letter-spacing:.02em}
#readline .r-signal{color:#c3a9ff}
#readline .r-count,
#readline .r-quiet{color:var(--ink-3);font-weight:500;font-size:11px}
#readline .r-busy{color:var(--warm);font-weight:500;font-size:11px}
#readline .r-muted{color:var(--warm);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.10em}
@keyframes readline-in{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}
@media (max-width:620px){
  #topstack{top:calc(var(--safe-t) + 52px);gap:6px}
  #readline{font-size:11.5px;padding:5px 10px;max-width:94vw}
  #readline .r-count,#readline .r-quiet,#readline .r-busy,#readline .r-muted{font-size:10px}
}
@media (prefers-reduced-motion:reduce){#readline{animation:none}}

/* ── focus readout ────────────────────────────────────────────── */
#focus{
  position:absolute;max-width:min(46vw,220px);
  transform:translate3d(0,0,0);
  transition:opacity .35s var(--ease);
  will-change:transform;
}
#focus.hide{opacity:0}
#focus.collapsed .f-kicker,
#focus.collapsed .f-evidence,
#focus.collapsed .f-stack,
#focus.collapsed .f-attr,
#focus.collapsed .f-brief,
#focus.collapsed .f-alts,
#focus.collapsed .f-actions button:not(#btnDetail){display:none}
#focus.collapsed .f-actions{margin-top:5px;padding-top:4px;border-top-color:rgba(124,236,255,.08)}
#focus.collapsed{max-width:min(42vw,176px)}
#focus.collapsed .f-name{font-size:11px;letter-spacing:.13em}
.cue-dynamics{color:rgba(183,255,207,.65)}
.f-name{
  font-family:var(--mono);font-size:13px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink);line-height:1.1;
  text-shadow:0 1px 12px rgba(5,6,10,.9);
}
.f-attr{
  margin-top:3px;font-size:12px;line-height:1.3;color:var(--lock);
  text-shadow:0 1px 10px rgba(5,6,10,.95);
}
.f-attr:empty{display:none}
.f-meta{
  display:flex;gap:10px;margin-top:5px;
  font-family:var(--mono);font-size:10px;letter-spacing:.1em;
  color:var(--lock);font-variant-numeric:tabular-nums;
  text-shadow:0 1px 10px rgba(5,6,10,.9);
}
.f-where{color:var(--ink-3);text-transform:uppercase}
.f-brief{
  margin-top:5px;font-size:11.5px;line-height:1.3;color:var(--ink-2);
  text-shadow:0 1px 10px rgba(5,6,10,1);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}

/* ── human dossier ────────────────────────────────────────────── */
/* EDGE RAIL, not a card. The dossier used to be a 268px panel sitting in the
   middle-left of the frame, which is exactly where you are trying to look. It
   is now a hairline column pinned to the edge: no fill, no border, no box. The
   text carries a shadow instead of a background, so the camera shows through
   everywhere between the glyphs. */
#dossier{
  position:absolute;left:calc(var(--safe-l) + 12px);
  top:50%;translate:0 -50%;
  width:min(44vw,186px);
  padding:0 0 0 9px;
  border-left:1px solid rgba(111,227,255,.30);
  background:none;backdrop-filter:none;-webkit-backdrop-filter:none;
  animation:dossierIn .45s var(--ease);
  pointer-events:none;
}
@keyframes dossierIn{from{opacity:0;transform:translateY(10px) scale(.98)}}
.d-head{
  display:flex;align-items:center;gap:7px;
  padding-bottom:5px;margin-bottom:6px;
}
.d-tag{
  font-family:var(--mono);font-size:8.5px;letter-spacing:.34em;
  color:var(--lock);text-transform:uppercase;
}
.d-conf{
  font-family:var(--mono);font-size:8.5px;letter-spacing:.14em;
  color:var(--ink-3);font-variant-numeric:tabular-nums;
}
.d-rows{display:flex;flex-direction:column;gap:3px}
/* label above value, not beside: a 62px label column wasted a third of the
   width and forced the value to wrap. Stacked, each row is one tight line. */
.d-row{
  display:block;
  opacity:0;transform:translateX(-6px);
  animation:rowIn .32s var(--ease) forwards;
}
@keyframes rowIn{to{opacity:1;transform:none}}
.d-row:nth-child(1){animation-delay:.02s}
.d-row:nth-child(2){animation-delay:.05s}
.d-row:nth-child(3){animation-delay:.08s}
.d-row:nth-child(4){animation-delay:.11s}
.d-row:nth-child(5){animation-delay:.14s}
.d-row:nth-child(6){animation-delay:.17s}
.d-k{
  display:block;font-family:var(--mono);font-size:7.5px;letter-spacing:.22em;
  text-transform:uppercase;color:rgba(111,227,255,.55);line-height:1.5;
  text-shadow:0 1px 6px rgba(5,6,10,.95);
}
.d-v{
  display:block;font-size:11.5px;line-height:1.28;color:var(--ink);
  text-shadow:0 1px 8px rgba(5,6,10,1),0 0 18px rgba(5,6,10,.85);
}
.d-row.alert .d-v{color:var(--warm)}
.d-row.key .d-v{color:var(--lock)}
.d-foot{
  margin-top:7px;font-family:var(--mono);font-size:7px;letter-spacing:.18em;
  text-transform:uppercase;color:rgba(237,232,224,.22);
  text-shadow:0 1px 6px rgba(5,6,10,.95);
}
/* the dossier owns the lower-left, so the register moves out of its way */
#dossier:not([hidden]) ~ #register{top:38%}

/* ── register ─────────────────────────────────────────────────── */
#register{
  position:absolute;right:calc(var(--safe-r) + 14px);top:50%;translate:0 -50%;
  display:flex;flex-direction:column;align-items:flex-end;gap:1px;
  pointer-events:none;max-height:56vh;
}
.reg{
  display:flex;align-items:center;gap:8px;
  padding:4px 0;font-family:var(--mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ink-3);
  opacity:0;transform:translateX(10px);
  animation:regIn .5s var(--ease) forwards;
  text-shadow:0 1px 8px rgba(5,6,10,.9);
}
@keyframes regIn{to{opacity:1;transform:none}}
.reg.out{animation:regOut .4s var(--ease) forwards}
@keyframes regOut{to{opacity:0;transform:translateX(10px)}}
.reg .n{font-variant-numeric:tabular-nums;color:var(--ink-2)}
.reg .t{color:var(--ink-3)}
.reg.live .t{color:var(--ink)}
.reg .b{width:14px;height:1px;background:currentColor;opacity:.5}
.reg.focus .t{color:var(--lock)}
.reg.focus .b{background:var(--lock);width:22px;opacity:1}

/* ── answer ───────────────────────────────────────────────────── */
/* answers sit on the bottom edge as a strip, with a gradient scrim instead of
   a card, so nothing rectangular ever lands in the middle of the frame */
#answer{
  position:absolute;left:0;right:0;
  bottom:calc(var(--safe-b) + 68px);
  padding:18px calc(var(--safe-r) + 42px) 10px calc(var(--safe-l) + 16px);
  background:linear-gradient(180deg,transparent,rgba(5,6,10,.80) 42%,rgba(5,6,10,.88));
  border:0;border-radius:0;
  animation:ansIn .38s var(--ease);
}
@keyframes ansIn{from{opacity:0;transform:translateY(12px)}}
.a-body{
  font-size:14.5px;line-height:1.42;color:var(--ink);
  text-shadow:0 1px 10px rgba(5,6,10,1);
  max-height:4.3em;overflow:hidden;
}
.a-body .src{
  display:block;margin-top:8px;font-family:var(--mono);font-size:9.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);
}
.a-x{position:absolute;top:14px;right:12px;width:26px;height:26px;font-size:19px;color:var(--ink-3);line-height:1}

/* ── ask ──────────────────────────────────────────────────────── */
#ask{
  position:absolute;left:calc(var(--safe-l) + 14px);right:calc(var(--safe-r) + 14px);
  bottom:calc(var(--safe-b) + 14px);
  display:flex;align-items:center;gap:6px;padding:5px;
  border-radius:26px;border:1px solid var(--hair);
  background:rgba(8,10,16,.66);
  -webkit-backdrop-filter:blur(8px) saturate(1.12);backdrop-filter:blur(8px) saturate(1.12);
  transition:border-color .35s var(--ease);
}
#ask:focus-within{border-color:rgba(111,227,255,.42)}
#q{
  flex:1;min-width:0;background:none;border:0;outline:none;
  padding:11px 4px;font-size:15px;color:var(--ink);
}
#q::placeholder{color:var(--ink-3)}
.voice,.send{
  width:38px;height:38px;flex:none;border-radius:50%;padding:10px;
  color:var(--ink-2);transition:color .3s,background .3s,transform .3s var(--ease);
}
.voice:active,.send:active{transform:scale(.9)}
.voice.on{color:var(--lock);background:rgba(111,227,255,.13)}
.voice.on::after{
  content:"";position:absolute;width:38px;height:38px;border-radius:50%;
  border:1px solid var(--lock);animation:mic 1.3s var(--ease-io) infinite;
}
@keyframes mic{to{transform:scale(1.75);opacity:0}}
.send{color:var(--lock)}

#toast{
  position:absolute;left:50%;translate:-50% 0;bottom:calc(var(--safe-b) + 78px);
  padding:9px 15px;border-radius:20px;
  background:rgba(8,10,16,.86);border:1px solid var(--hair);
  font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-2);white-space:nowrap;
  animation:ansIn .4s var(--ease);
}

/* ── sheet ────────────────────────────────────────────────────── */
#sheet{
  position:fixed;inset:0;z-index:40;display:flex;align-items:flex-end;
  background:rgba(3,4,7,.62);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
  animation:fade .3s var(--ease);
}
@keyframes fade{from{opacity:0}}
.sheet-card{
  width:100%;max-height:88vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  background:#0A0C12;border-top:1px solid var(--hair);
  border-radius:22px 22px 0 0;
  padding:6px 20px calc(var(--safe-b) + 26px);
  animation:up .45s var(--ease);
}
@keyframes up{from{transform:translateY(100%)}}
.sheet-card header{
  position:sticky;top:0;z-index:1;background:#0A0C12;
  display:flex;align-items:center;justify-content:space-between;
  padding:16px 0 12px;margin-bottom:4px;
}
.sheet-card h2{
  margin:0;font-family:var(--mono);font-size:11px;font-weight:500;
  letter-spacing:.3em;text-transform:uppercase;color:var(--ink-2);
}
.grp{padding:16px 0;border-top:1px solid var(--hair)}
.grp-h{
  font-family:var(--mono);font-size:9.5px;letter-spacing:.26em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:12px;
}
.fld{display:block;margin-bottom:12px}
.fld>span{
  display:block;font-family:var(--mono);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-3);margin-bottom:6px;
}
.fld>span b{color:var(--lock);font-weight:400;font-variant-numeric:tabular-nums}
.fld input[type=url],.fld input[type=password]{
  width:100%;padding:11px 13px;border-radius:11px;
  background:rgba(237,232,224,.045);border:1px solid var(--hair);
  outline:none;font-size:14px;font-family:var(--mono);
}
.fld input:focus{border-color:rgba(111,227,255,.4)}
input[type=range]{width:100%;accent-color:#6FE3FF;background:none}
.tog{display:flex;align-items:center;gap:12px;padding:10px 0;font-size:14px}
.tog input{width:19px;height:19px;flex:none;accent-color:#6FE3FF}
.tog em{display:block;font-style:normal;font-size:11.5px;color:var(--ink-3);margin-top:2px}
.wide{
  width:100%;padding:13px;border-radius:12px;margin-top:6px;
  border:1px solid var(--hair);background:rgba(237,232,224,.045);
  font-family:var(--mono);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-2);
}
.wide:active{background:rgba(237,232,224,.09)}
#brainList{margin-bottom:14px;display:flex;flex-direction:column;gap:7px}
.brow{
  display:flex;align-items:center;gap:10px;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--ink-3);
}
.brow .s{width:6px;height:6px;border-radius:50%;background:var(--ink-3);flex:none}
.brow.up{color:var(--ink-2)}
.brow.up .s{background:var(--ok);box-shadow:0 0 8px rgba(139,229,139,.5)}
.brow.sel{color:var(--lock)}
.brow.sel .s{background:var(--lock);box-shadow:0 0 8px rgba(111,227,255,.6)}
.brow .lat{margin-left:auto;font-variant-numeric:tabular-nums;opacity:.7}
#diag{
  margin:0;padding:13px;border-radius:11px;max-height:34vh;overflow:auto;
  background:rgba(0,0,0,.42);border:1px solid var(--hair);
  font-family:var(--mono);font-size:10.5px;line-height:1.65;color:var(--ink-2);
  white-space:pre-wrap;word-break:break-word;-webkit-overflow-scrolling:touch;
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001s!important;transition-duration:.12s!important}
  #grain{display:none}
}

/* AGENTVISION: a dense optic instrument with explicit truth and privacy state. */
:root{
  --panel:rgba(7,12,18,.78);
  --panel-solid:#080d13;
  --cyan:#7cecff;
  --acid:#b7ffcf;
}

.gate-brand{
  margin-top:-2px;font:650 clamp(20px,5vw,30px)/1 var(--mono);
  letter-spacing:.48em;text-indent:.48em;color:#f5fbff;
  text-shadow:0 0 24px rgba(111,227,255,.38);
}
.gate-copy,.gate-sub{
  margin-top:14px;font:9px/1.4 var(--mono);letter-spacing:.22em;text-transform:uppercase;
  color:var(--ink-3);text-align:center;
}
.gate-copy span{color:var(--lock);padding:0 5px}
.gate-sub{margin-top:8px;color:rgba(124,236,255,.62)}
#wordmark{display:none}

.privacy-state{
  border:1px solid rgba(124,236,255,.28);border-radius:999px;padding:3px 7px;
  font-size:8px;letter-spacing:.16em;color:var(--lock);background:rgba(5,12,18,.55);
}
.privacy-state.outbound{color:var(--warm);border-color:rgba(255,196,107,.48);box-shadow:0 0 15px rgba(255,196,107,.18)}

#focus{
  max-width:min(72vw,300px);min-width:214px;padding:12px 13px 11px;
  border:1px solid rgba(124,236,255,.20);border-radius:3px;
  background:linear-gradient(135deg,rgba(7,14,20,.88),rgba(5,8,13,.62));
  box-shadow:0 18px 48px rgba(0,0,0,.34),inset 0 0 28px rgba(111,227,255,.025);
  -webkit-backdrop-filter:blur(4px) saturate(1.08);backdrop-filter:blur(4px) saturate(1.08);
  clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,14px 100%,0 calc(100% - 14px));
}
.f-kicker{display:flex;justify-content:space-between;gap:12px;margin-bottom:7px;font:8px/1 var(--mono);letter-spacing:.18em;color:var(--lock)}
.f-certainty{color:var(--ink-3)}
.f-name{font-size:14px;letter-spacing:.12em}
.f-evidence{
  margin-top:7px;padding-top:7px;border-top:1px solid rgba(124,236,255,.14);
  font:8px/1.25 var(--mono);letter-spacing:.13em;color:rgba(124,236,255,.68);
  text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.f-stack{display:grid;gap:4px;margin-top:8px;padding:7px 0;border-top:1px solid rgba(124,236,255,.10);border-bottom:1px solid rgba(124,236,255,.08)}
.f-stack>span{display:grid;grid-template-columns:24px 1fr 22px;align-items:center;gap:6px;font:6px/1 var(--mono);letter-spacing:.14em;color:var(--ink-3)}
.f-stack b{font-weight:500;color:rgba(124,236,255,.58)}
.f-stack i{display:block;height:2px;background:rgba(237,232,224,.08);overflow:hidden}
.f-stack u{display:block;width:0;height:100%;background:var(--cyan);box-shadow:0 0 7px rgba(124,236,255,.28);text-decoration:none;transition:width .22s linear}
.f-stack em{font-style:normal;text-align:right;font-variant-numeric:tabular-nums}
.f-stack .verified u{background:var(--acid);box-shadow:0 0 7px rgba(183,255,207,.24)}
.f-stack .uncertain u{background:var(--warm);box-shadow:none}
.f-alts{margin-top:8px;font:9px/1.45 var(--mono);letter-spacing:.04em;color:var(--ink-3)}
.f-alts:empty{display:none}
.f-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px;padding-top:8px;border-top:1px solid var(--hair)}
.f-actions button{padding:6px 8px;border:1px solid var(--hair);border-radius:2px;background:rgba(255,255,255,.035);font:8px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.f-actions button:active{color:var(--lock);border-color:rgba(124,236,255,.45)}

#dossier{
  left:calc(var(--safe-l) + 12px);top:50%;width:min(58vw,286px);padding:12px;
  border:1px solid rgba(124,236,255,.2);background:linear-gradient(160deg,rgba(6,13,19,.9),rgba(5,8,12,.62));
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);
  clip-path:polygon(0 0,calc(100% - 14px) 0,100% 14px,100% 100%,0 100%);
}
.cue-telemetry{display:grid;grid-template-columns:1fr 1fr;gap:4px 8px;padding:7px 8px;border:1px solid rgba(124,236,255,.12);background:rgba(111,227,255,.025)}
.cue-telemetry span{font:7.5px/1.2 var(--mono);letter-spacing:.12em;color:var(--ink-3);font-variant-numeric:tabular-nums}
.cue-vector{color:var(--lock)!important}
#cueDynamics{grid-column:1 / -1}
.signal-compass{position:relative;margin:0 0 8px;padding:10px;border:1px solid rgba(183,255,207,.2);background:linear-gradient(135deg,rgba(183,255,207,.055),rgba(124,236,255,.02));overflow:hidden}
.signal-compass::after{content:"";position:absolute;right:-28px;top:-38px;width:92px;height:92px;border:1px solid rgba(183,255,207,.13);border-radius:50%;box-shadow:0 0 38px rgba(124,236,255,.08)}
.compass-kicker{display:block;font:6.5px/1 var(--mono);letter-spacing:.22em;color:var(--acid)}
.compass-action{display:block;max-width:90%;margin-top:6px;font:500 12px/1.25 var(--mono);color:#effff4}
.compass-meter{display:grid;grid-template-columns:1fr auto;align-items:center;gap:7px;margin-top:8px}
.compass-meter i{display:block;height:2px;background:rgba(237,232,224,.09);overflow:hidden}
.compass-meter u{display:block;width:0;height:100%;background:var(--acid);box-shadow:0 0 9px rgba(183,255,207,.42);text-decoration:none;transition:width .3s ease}
.compass-meter b{font:6px/1 var(--mono);letter-spacing:.1em;color:var(--warm)}
.compass-why{display:block;margin-top:5px;font:6px/1.35 var(--mono);color:rgba(237,232,224,.42)}
.compass-feedback{display:flex;gap:5px;margin-top:7px}
.compass-feedback button{padding:5px 7px;border:1px solid rgba(183,255,207,.16);font:6px/1 var(--mono);letter-spacing:.1em;color:rgba(183,255,207,.62);text-transform:uppercase;background:transparent}
.cue-block{margin-top:10px;padding-top:8px;border-top:1px solid var(--hair)}
.cue-block b{display:block;font:8px/1 var(--mono);letter-spacing:.22em;color:var(--lock)}
.cue-block p{margin:5px 0 0;font-size:12px;line-height:1.38;color:var(--ink);text-shadow:0 1px 8px #000}
.cue-block.dim p{color:var(--ink-2)}
.cue-block.possible b{color:var(--warm)}
.cue-block.possible p{color:#fff1d7}
.cue-block.check{display:none}

#ask{bottom:calc(var(--safe-b) + 59px);left:calc(var(--safe-l) + 10px);right:calc(var(--safe-r) + 10px)}
#answer{bottom:calc(var(--safe-b) + 116px)}
#toast{bottom:calc(var(--safe-b) + 120px)}
#modebar{
  position:absolute;left:50%;bottom:calc(var(--safe-b) + 10px);translate:-50% 0;
  display:flex;align-items:center;gap:3px;padding:4px;border:1px solid var(--hair);border-radius:999px;
  background:rgba(6,10,15,.82);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
}
#modebar button{padding:8px 12px;border-radius:999px;font:8px/1 var(--mono);letter-spacing:.16em;color:var(--ink-3)}
#modebar button.active{color:var(--void);background:var(--lock);box-shadow:0 0 16px rgba(111,227,255,.28)}

.status-card{padding:11px 12px;margin:7px 0;border:1px solid var(--hair);border-radius:9px;background:rgba(255,255,255,.025);font:10px/1.55 var(--mono);color:var(--ink-2);white-space:pre-line}
.pack-notice{margin:2px 0 9px;font:9px/1.45 var(--mono);color:var(--ink-3)}
.pack-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.pack-grid button{display:grid;grid-template-columns:1fr auto;gap:4px 7px;padding:10px;text-align:left;border:1px solid var(--hair);background:rgba(255,255,255,.02);clip-path:polygon(0 0,calc(100% - 8px) 0,100% 8px,100% 100%,0 100%)}
.pack-grid button b{font:7px/1 var(--mono);letter-spacing:.14em;color:var(--lock)}
.pack-grid button span{grid-column:1 / -1;font:8px/1.35 var(--mono);color:var(--ink-3)}
.pack-grid button em{font:6px/1 var(--mono);font-style:normal;color:var(--ink-3)}
.pack-grid button.ready{border-color:rgba(183,255,207,.36);background:rgba(183,255,207,.04)}
.pack-grid button.ready b,.pack-grid button.ready em{color:var(--acid)}
.pack-grid button.busy{animation:packPulse 1s ease-in-out infinite alternate}
@keyframes packPulse{to{border-color:rgba(124,236,255,.55);box-shadow:inset 0 0 22px rgba(124,236,255,.06)}}
.wide.danger{color:rgba(255,139,139,.74);border-color:rgba(255,107,107,.18)}

.modal{
  position:fixed;inset:0;z-index:70;display:grid;place-items:center;padding:24px;
  background:rgba(1,3,5,.78);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
}
.modal-card{
  width:min(100%,430px);padding:22px;border:1px solid rgba(124,236,255,.22);border-radius:4px;
  background:linear-gradient(145deg,#0b1219,#06090e);box-shadow:0 28px 90px rgba(0,0,0,.65);
  clip-path:polygon(0 0,calc(100% - 18px) 0,100% 18px,100% 100%,0 100%);
}
.modal-kicker{font:8px/1 var(--mono);letter-spacing:.25em;color:var(--lock)}
.modal-kicker.warn{color:var(--warm)}
.modal-card h2{margin:12px 0 8px;font:500 18px/1.2 var(--mono);letter-spacing:.04em}
.modal-card p{margin:0;color:var(--ink-2);font-size:13px;line-height:1.5}
.modal-card input{width:100%;margin-top:16px;padding:13px;border:1px solid var(--hair);border-radius:3px;background:rgba(255,255,255,.04);outline:none;font-family:var(--mono)}
.modal-card input:focus{border-color:rgba(124,236,255,.5)}
.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.modal-actions button{padding:10px 12px;border:1px solid var(--hair);border-radius:3px;font:9px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2)}
.modal-actions button:last-child{color:var(--void);background:var(--lock);border-color:var(--lock)}

@media (max-width:540px){
  #rail{padding-top:calc(var(--safe-t) + 8px)}
  .privacy-state{display:none}
  #focus{min-width:190px;max-width:66vw;padding:10px}
  .f-actions button{min-height:28px;font-size:7px;padding:7px}
  #modebar button{min-height:30px}
  #dossier{top:45%;width:min(67vw,250px)}
  #focus.with-dossier{display:none!important}
  #register{top:35%;max-width:36vw}
}

@media (min-width:820px){
  .sheet-card{max-width:520px;margin-left:auto;border-left:1px solid var(--hair);border-radius:14px 0 0}
  #focus{max-width:320px}
  #dossier{width:280px}
}

/* v18 evidence instrument. Cyan is observed evidence, amber is ambiguity,
   violet is a hypothesis, and red remains reserved for failures/privacy. */
/* Positioning now comes from #topstack, so the beacon can sit under a read line
   of any height instead of overlapping it. Everything visual about it is
   unchanged. */
#humanBeacon{
  position:relative;min-width:244px;
  padding:8px 12px 7px;pointer-events:none;text-align:center;
  border:1px solid rgba(183,151,255,.22);border-top-color:rgba(124,236,255,.42);
  background:linear-gradient(135deg,rgba(5,11,17,.78),rgba(10,7,19,.64));
  -webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);
  clip-path:polygon(7px 0,calc(100% - 7px) 0,100% 7px,100% 100%,0 100%,0 7px);
}
#humanBeacon span{display:block;font:6px/1 var(--mono);letter-spacing:.28em;color:#b797ff}
#humanBeacon strong{display:block;margin-top:5px;font:600 8px/1.1 var(--mono);letter-spacing:.09em;color:var(--ink)}
#humanBeacon small{display:block;margin-top:4px;font:5.5px/1 var(--mono);letter-spacing:.08em;color:var(--ink-3)}
#humanBeacon::before,#humanBeacon::after{content:"";position:absolute;top:50%;width:34px;height:1px;background:linear-gradient(90deg,transparent,rgba(124,236,255,.38))}
#humanBeacon::before{right:100%}#humanBeacon::after{left:100%;rotate:180deg}
#humanBeacon.live{border-top-color:rgba(183,255,207,.62);box-shadow:inset 0 0 22px rgba(124,236,255,.035)}
#humanBeacon.recovering{border-top-color:rgba(255,196,107,.68)}

#dossier{
  left:calc(var(--safe-l) + 14px);top:74px;width:min(32vw,340px);max-height:calc(100vh - 210px);
  translate:0 0;
  padding:13px 14px 12px;overflow:hidden;border-color:rgba(124,236,255,.24);
  background:linear-gradient(150deg,rgba(5,12,18,.93),rgba(6,8,14,.75));
  box-shadow:0 22px 70px rgba(0,0,0,.38),inset 0 0 44px rgba(124,236,255,.025);
}
.d-head{justify-content:space-between;margin-bottom:7px}
.d-tag{font-size:8px;letter-spacing:.28em}
.d-conf{font-size:7px;color:rgba(183,151,255,.72)}
.cue-block{margin-top:8px;padding-top:7px}
.cue-block p{font-size:10.5px;line-height:1.32}
.cue-block.patterns b{color:#b797ff}
.cue-patterns{display:grid;gap:6px;margin-top:7px}
.pattern{display:grid;grid-template-columns:1fr auto;gap:3px 8px;font-family:var(--mono);text-transform:uppercase}
.pattern-name{font-size:7.5px;letter-spacing:.12em;color:var(--ink-2)}
.pattern-score{font-size:8px;color:var(--ink);font-variant-numeric:tabular-nums}
.pattern-score i{font-style:normal;color:var(--ink-3);font-size:6.5px}
.pattern-bar{grid-column:1 / -1;display:block;height:2px;background:rgba(237,232,224,.08);overflow:hidden}
.pattern-bar u{display:block;height:100%;background:#b797ff;box-shadow:0 0 8px rgba(183,151,255,.42);text-decoration:none}
.pattern small{grid-column:1 / -1;font-size:6px;line-height:1.2;letter-spacing:.06em;color:rgba(237,232,224,.32);text-transform:none}
.pattern:not(.primary) small{display:none}
.pattern:nth-child(n+4){display:none}
.pattern.cyan .pattern-bar u{background:var(--cyan);box-shadow:0 0 8px rgba(124,236,255,.42)}
.pattern.amber .pattern-bar u{background:var(--warm);box-shadow:0 0 8px rgba(255,196,107,.32)}
.pattern.neutral .pattern-bar u{background:rgba(194,203,211,.68);box-shadow:none}
.pattern.primary .pattern-name,.pattern.primary .pattern-score{color:#fff}
.cue-trace-wrap,.cue-quality{margin-top:9px;padding-top:7px;border-top:1px solid var(--hair)}
.cue-trace-wrap>div,.quality-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cue-trace-wrap b,.quality-head b{font:7px/1 var(--mono);letter-spacing:.2em;color:var(--lock)}
.cue-trace-label,.quality-total{font:6.5px/1 var(--mono);letter-spacing:.08em;color:#b797ff;font-variant-numeric:tabular-nums;white-space:nowrap}
#cueTrace{display:block;width:100%;height:28px;margin-top:5px}
.quality-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px 9px;margin-top:7px}
.quality-grid>span{display:grid;grid-template-columns:34px 1fr;align-items:center;gap:5px;font:6px/1 var(--mono);letter-spacing:.12em;color:var(--ink-3)}
.quality-grid i{display:block;height:2px;background:rgba(237,232,224,.08);overflow:hidden}
.quality-grid u{display:block;height:100%;background:var(--cyan);box-shadow:0 0 7px rgba(124,236,255,.35);text-decoration:none}
.cue-boundary{margin:9px -14px -12px;padding:8px 14px 9px;border-top:1px solid rgba(255,196,107,.22);background:rgba(255,196,107,.035)}
.cue-boundary{transform:translateY(-5px)}
.cue-boundary strong{display:block;font:7px/1 var(--mono);letter-spacing:.18em;color:var(--warm)}
.cue-boundary p{margin:4px 0 0;font:6.5px/1.3 var(--mono);color:rgba(237,232,224,.38)}

#sceneField{
  position:absolute;right:calc(var(--safe-r) + 14px);bottom:calc(var(--safe-b) + 126px);
  width:min(26vw,286px);height:122px;padding:9px 10px 7px;pointer-events:none;
  border:1px solid rgba(124,236,255,.14);background:linear-gradient(155deg,rgba(5,12,18,.72),rgba(5,8,12,.4));
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  clip-path:polygon(0 0,calc(100% - 10px) 0,100% 10px,100% 100%,0 100%);
}
.scene-head{display:flex;justify-content:space-between;gap:8px;font:6.5px/1 var(--mono);letter-spacing:.16em;color:var(--lock)}
.scene-head output{color:var(--ink-3);letter-spacing:.05em;text-align:right}
#sceneMap{display:block;width:100%;height:92px;margin-top:4px}

#sceneMind{
  position:absolute;left:calc(var(--safe-l) + 14px);bottom:calc(var(--safe-b) + 126px);
  width:min(34vw,380px);padding:9px 11px 8px;pointer-events:none;
  border-left:1px solid rgba(124,236,255,.36);
  background:linear-gradient(90deg,rgba(4,10,15,.74),rgba(4,10,15,.18) 84%,transparent);
  text-shadow:0 1px 8px rgba(5,6,10,1);
}
.mind-kicker{display:block;font:6.5px/1 var(--mono);letter-spacing:.24em;color:var(--lock)}
.mind-read{display:block;margin-top:6px;font:600 10px/1.2 var(--mono);letter-spacing:.09em;color:var(--ink)}
.mind-action{display:block;margin-top:4px;font:7px/1.25 var(--mono);letter-spacing:.04em;color:var(--ink-2)}
.mind-telemetry{display:block;margin-top:7px;font:6px/1 var(--mono);letter-spacing:.12em;color:rgba(124,236,255,.46)}

@media (max-width:600px){
  #humanBeacon{top:55px;min-width:0;width:min(72vw,280px);padding:7px 9px 6px}
  #humanBeacon strong{font-size:7px}#humanBeacon small{font-size:5px}
  #dossier{
    left:calc(var(--safe-l) + 8px);right:calc(var(--safe-r) + 8px);top:auto;
    bottom:calc(var(--safe-b) + 111px);width:auto;max-height:32vh;padding:9px 10px 8px;translate:0 0;
  }
  .cue-telemetry{grid-template-columns:1fr 1fr;gap:5px;padding:5px 6px}
  .cue-telemetry span{font-size:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cue-block{margin-top:6px;padding-top:5px}
  .cue-block:not(.patterns),.cue-block.check{display:none}
  .signal-compass{margin-bottom:6px;padding:8px}
  .compass-action{font-size:10px}
  .cue-patterns{grid-template-columns:1fr 1fr;gap:5px 9px}
  .pattern:nth-child(n+3),.pattern small{display:none}
  .cue-trace-wrap,.cue-quality{margin-top:6px;padding-top:5px}
  #cueTrace{height:24px}
  .cue-boundary{margin:6px -10px -8px;padding:6px 10px}
  .cue-boundary p{display:none}
  #sceneField{right:calc(var(--safe-r) + 8px);bottom:calc(var(--safe-b) + 116px);width:168px;height:82px;padding:7px}
  #sceneMap{height:58px}
  #sceneMind{left:calc(var(--safe-l) + 8px);bottom:calc(var(--safe-b) + 116px);width:min(43vw,172px);padding:7px 8px}
  .mind-read{font-size:7.5px}.mind-action{font-size:6px}.mind-telemetry{display:none}
  #dossier:not([hidden]) + #sceneField{display:none}
  #dossier:not([hidden]) ~ #sceneMind{display:none}
}

@media (max-width:420px){.pack-grid{grid-template-columns:1fr}}

@media (max-width:600px){
  #focus:not(.expanded){min-width:0;width:min(55vw,214px);padding:8px 9px 7px;background:linear-gradient(135deg,rgba(7,14,20,.76),rgba(5,8,13,.36))}
  #focus:not(.expanded) .f-evidence,
  #focus:not(.expanded) .f-stack,
  #focus:not(.expanded) .f-attr,
  #focus:not(.expanded) .f-alts,
  #focus:not(.expanded) .f-actions button:not(#btnDetail):not(#btnRead):not(#btnWorld){display:none}
  #focus:not(.expanded) .f-kicker{margin-bottom:5px;font-size:6.5px}
  #focus:not(.expanded) .f-name{font-size:11px}
  #focus:not(.expanded) .f-meta{font-size:7px;margin-top:4px}
  #focus:not(.expanded) .f-brief{font-size:7px;-webkit-line-clamp:1;margin-top:4px}
  #focus:not(.expanded) .f-actions{gap:4px;margin-top:6px;padding-top:5px}
  #focus:not(.expanded) .f-actions button{min-height:22px;padding:5px 6px;font-size:5.5px}
}

@media (max-height:500px) and (orientation:landscape){
  #dossier{left:calc(var(--safe-l) + 8px);right:auto;bottom:calc(var(--safe-b) + 8px);width:min(42vw,330px);max-height:78vh;background:rgba(4,9,14,.96);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:none!important;opacity:1!important}
  #focus.with-dossier{display:none!important}
  #ask{left:46%;bottom:calc(var(--safe-b) + 44px)}
  #modebar{left:73%;bottom:calc(var(--safe-b) + 7px)}
  #sceneField{display:none}
  #sceneMind{display:none}
}

body.demo::before{
  content:"";position:fixed;inset:0;z-index:0;
  background:
    radial-gradient(circle at 50% 42%,rgba(60,88,103,.38),transparent 22%),
    linear-gradient(115deg,#101820 0 24%,#253039 24% 26%,#0a1016 26% 62%,#1c2930 62% 64%,#070b0f 64%);
}
body.demo::after{
  content:"DETERMINISTIC QA FIELD · NO CAMERA";position:fixed;left:50%;top:12%;translate:-50% 0;z-index:1;
  font:8px/1 var(--mono);letter-spacing:.26em;color:rgba(124,236,255,.28);white-space:nowrap;
}
body.demo #cam{display:none}
