:root{
  --ground:#100F17; --panel:#1A1824; --seam:#2B2939; --teal:#43E2D1; --mist:#A3F0E6; --ink:#ECEAF3; --dim:#8C88A1;
  --disp:'Jost',system-ui,sans-serif; --mono:'IBM Plex Mono',ui-monospace,monospace;
}
*{box-sizing:border-box}
html{background:var(--ground)}
body{margin:0;background:var(--ground);color:var(--ink);font:400 14px/1.55 var(--mono);-webkit-font-smoothing:antialiased}
[hidden]{display:none !important}
a{color:var(--mist)}
code{font-family:var(--mono)}

/* the CA keyline — sticky, top */
.keyline{position:sticky;top:0;z-index:20;display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:9px 14px;
  background:rgba(16,15,23,.94);backdrop-filter:blur(8px);border-bottom:1px solid var(--seam)}
.keyline-id{display:flex;align-items:center;gap:8px;font:600 15px/1 var(--disp);letter-spacing:.02em}
.keyline-id img{border-radius:6px}
.keyline-slot{order:3;flex:1 1 100%;display:flex;align-items:center;gap:8px;min-width:0;padding:6px 8px;border:1px solid var(--seam);border-radius:10px;background:var(--panel)}
.keyline-k{font:700 11px/1 var(--disp);letter-spacing:.14em;color:var(--teal)}
.keyline-addr{flex:1;min-width:0;font-size:11.5px;word-break:break-all;user-select:all;color:var(--ink)}
.keyline-addr.is-pending{color:var(--dim);user-select:none}
.keyline-copy{flex:none;font:600 12px/1 var(--disp);letter-spacing:.06em;padding:8px 12px;border-radius:8px;border:0;background:var(--teal);color:var(--ground);cursor:pointer}
.keyline-copy:disabled{background:var(--seam);color:var(--dim);cursor:default}
.keyline-copy.is-done{background:var(--mist)}
.keyline-gm{margin-left:auto;font-size:11px;color:var(--dim)}

/* the hall */
.hall{max-width:1160px;margin:0 auto;padding:14px 14px 40px}
.tagword{font:600 11px/1 var(--disp);letter-spacing:.2em;text-transform:uppercase;color:var(--teal)}
.split{display:grid;grid-template-columns:1fr;gap:10px}

.doorway{background:var(--panel);border:1px solid var(--seam);border-radius:18px;padding:14px}
.doorway-top,.slip-top,.doorlog-hd{display:flex;justify-content:space-between;align-items:center}
.doorway-no{font-size:11px;color:var(--dim)}
.frame-door{margin:12px auto 12px;max-width:300px;aspect-ratio:5/4;border:3px solid var(--teal);border-bottom:0;border-radius:120px 120px 0 0;
  display:grid;place-items:center;background:radial-gradient(ellipse at 50% 85%,rgba(67,226,209,.18),transparent 65%)}
.occupant{display:grid;justify-items:center;gap:6px;text-align:center;padding:10px}
.occupant-ring{width:58px;height:58px;border-radius:50%;background:linear-gradient(135deg,var(--mist) 50%,var(--teal) 50%);box-shadow:0 0 0 6px rgba(67,226,209,.12)}
.occupant-who{font:700 22px/1.1 var(--disp)}
.occupant-at{font-size:12px;color:var(--dim)}
.occupant.is-empty .occupant-ring{background:transparent;border:2px dashed var(--teal);box-shadow:none;animation:knock 1.6s ease-in-out infinite}
.occupant.is-swap{animation:swap .7s ease}
@keyframes knock{50%{transform:scale(1.08)}}
@keyframes swap{0%{opacity:.2;transform:translateX(30px)}100%{opacity:1;transform:none}}
.doorway-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;border-top:1px solid var(--seam);padding-top:10px}
.fact-k{display:block;font-size:10.5px;color:var(--dim)}
.fact-v{display:block;font:600 14px/1.3 var(--disp)}

.chute{position:relative;display:grid;justify-items:center;gap:2px;padding:12px;border-radius:14px;border:1px dashed var(--teal);background:rgba(67,226,209,.06);overflow:hidden}
.chute-k{font:600 10.5px/1 var(--disp);letter-spacing:.18em;text-transform:uppercase;color:var(--dim)}
.chute-amt{font:800 26px/1.15 var(--disp);color:var(--mist)}
.chute-sub{font-size:11.5px;color:var(--dim);text-align:center}
.chute-drops{position:absolute;inset:0;pointer-events:none}
.chute-drops i{position:absolute;top:-10px;width:8px;height:8px;border-radius:50%;background:var(--teal);opacity:0}
.chute-drops i:nth-child(1){left:20%}.chute-drops i:nth-child(2){left:50%}.chute-drops i:nth-child(3){left:80%}
.chute.is-paying .chute-drops i{animation:drip 1.1s ease-in infinite}
.chute.is-paying .chute-drops i:nth-child(2){animation-delay:.3s}.chute.is-paying .chute-drops i:nth-child(3){animation-delay:.6s}
@keyframes drip{0%{opacity:0;transform:translateY(0)}20%{opacity:1}100%{opacity:0;transform:translateY(110px)}}

.slip{background:var(--panel);border:1px solid var(--seam);border-radius:18px;padding:14px;display:grid;gap:10px}
.slip-bal{font-size:11px;color:var(--dim)}
.slip-field{display:grid;gap:6px}
.slip-lbl{font-size:12px;color:var(--dim)}
.slip-row{display:flex;align-items:center;border:2px solid var(--teal);border-radius:12px;padding:4px 12px;background:var(--ground)}
.slip-row input{flex:1;min-width:0;border:0;background:transparent;color:var(--ink);font:700 26px/1.4 var(--disp);outline:none}
.slip-unit{font-size:11px;color:var(--dim)}
.slip-quote{display:grid;gap:4px}
.slip-quote div{display:flex;justify-content:space-between;gap:10px;font-size:12px;color:var(--dim)}
.slip-quote b{font:600 14px/1.3 var(--disp);color:var(--ink)}
.slip-go{font:700 17px/1 var(--disp);letter-spacing:.04em;padding:15px;border-radius:12px;border:0;background:var(--teal);color:var(--ground);cursor:pointer}
.slip-go:disabled{opacity:.45;cursor:default}
.slip-note{margin:0;font-size:12px;color:var(--dim)}
.slip-owed{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px;border-radius:10px;background:rgba(163,240,230,.1);font-size:12px}
.slip-owed button{font:600 12px/1 var(--disp);padding:8px 12px;border-radius:8px;border:0;background:var(--mist);color:var(--ground);cursor:pointer}
.is-first{outline:2px solid var(--mist);outline-offset:3px}

.liveline{margin:14px 2px;font:500 16px/1.5 var(--disp);color:var(--ink)}
.liveline code{color:var(--mist);font-size:.9em}
.liveline b{color:var(--teal)}

.lower{display:grid;grid-template-columns:1fr;gap:12px}
.doorlog,.howto{background:var(--panel);border:1px solid var(--seam);border-radius:16px;padding:14px}
.doorlog-st{font-size:11px;color:var(--dim)}
.doorlog-list{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:2px;max-height:380px;overflow:auto}
.doorlog-list li{display:grid;grid-template-columns:44px 1fr;gap:8px;padding:7px 4px;border-bottom:1px solid var(--seam);font-size:12px}
.doorlog-list time{color:var(--dim)}
.doorlog-list li.is-bump span{color:var(--mist)}
.doorlog-list li.is-shut span{color:var(--teal)}
.doorlog-list li.is-print{animation:print .6s steps(6)}
.doorlog-list li.is-quiet{display:block;color:var(--dim)}
@keyframes print{0%{clip-path:inset(0 100% 0 0)}100%{clip-path:inset(0 0 0 0)}}
.howto-steps{margin:10px 0;padding-left:18px;display:grid;gap:6px;font-size:13px}
.howto-steps b{font-family:var(--disp);color:var(--mist)}
.worked{border-top:1px dashed var(--seam);padding-top:8px}
.worked-hd{font:600 11px/1 var(--disp);letter-spacing:.16em;text-transform:uppercase;color:var(--dim);margin-bottom:6px}
.worked p{margin:4px 0;font-size:12.5px}
.worked b{color:var(--teal)}

.colophon{margin-top:18px;padding-top:12px;border-top:1px solid var(--seam);font-size:11.5px;color:var(--dim);display:grid;gap:4px;word-break:break-all}
.colophon nav{display:flex;flex-wrap:wrap;gap:12px;margin-top:4px}

.vestibule{position:fixed;inset:0;z-index:40;background:rgba(8,8,12,.7);display:grid;place-items:center;padding:16px}
.vestibule-card{width:min(520px,100%);max-height:80vh;overflow:auto;background:var(--panel);border:1px solid var(--seam);border-radius:16px;padding:14px}
.vestibule-hd{display:flex;justify-content:space-between;align-items:center;font:600 15px/1 var(--disp);margin-bottom:10px}
.vestibule-hd button,.wallet-pick button{font:500 12px/1 var(--mono);background:var(--seam);color:var(--ink);border:0;border-radius:8px;padding:8px 10px;cursor:pointer}
.wallet-pick{display:grid;gap:6px}
.wallet-pick button{display:flex;align-items:center;gap:8px;padding:10px}
.wallet-pick img{width:20px;height:20px}
.past{padding-left:18px;font-size:12px;display:grid;gap:4px}
.toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:50;background:var(--mist);color:var(--ground);font:600 13px/1 var(--disp);padding:10px 14px;border-radius:10px}

@media (min-width:720px){
  .hall{padding:20px 24px 48px}
  .keyline-slot{order:0;flex:1 1 auto;max-width:560px}
  .keyline-addr{font-size:12.5px}
  .split{grid-template-columns:1fr 150px 1fr;align-items:stretch}
  .chute{align-content:center}
  .chute-amt{font-size:22px}
  .liveline{font-size:19px}
  .frame-door{max-width:260px}
}
@media (min-width:1000px){
  .hall{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:0 22px}
  .split{grid-column:1;grid-row:1}
  .liveline{grid-column:1;grid-row:2}
  .lower{grid-column:2;grid-row:1 / span 3;align-self:start}
  .colophon{grid-column:1 / -1}
  .split{grid-template-columns:1fr 130px 1fr}
  .frame-door{max-width:300px}
  .occupant-who{font-size:26px}
  .slip-row input{font-size:30px}
  .liveline{font-size:21px}
}

/* fit fixes: grid children may shrink; the input never sets the column width */
.split>*,.lower>*,.hall>*{min-width:0}
.slip-row input{width:100%}
.doorway-facts>div{min-width:0}
.fact-v{overflow-wrap:anywhere}
.occupant{max-width:100%}
.occupant-at{max-width:220px}
.occupant.is-empty .occupant-at{color:var(--ground);background:var(--mist);border-radius:999px;padding:5px 10px;font-weight:600}
