:root{color-scheme:dark;--bg:#0d1f1c;--glass:rgba(18,42,38,.72);--glass2:rgba(26,58,50,.82);--line:rgba(220,240,200,.16);--ink:#eaf2dc;--dim:#9db8a4;--leaf:#a8d672;--sun:#f1cf6b;--sky:#7fd0d8;--rose:#ee8f86;--violet:#b9a2ee;
--font:Manrope,"Avenir Next","SF Pro Rounded",ui-rounded,system-ui,-apple-system,"Segoe UI",sans-serif;--r:14px;--gap:12px}
*{box-sizing:border-box}
html,body{height:100%;margin:0;background:var(--bg);color:var(--ink);font:13px/1.45 var(--font);overflow:hidden}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
[hidden]{display:none!important}
:focus-visible{outline:2px solid var(--sun);outline-offset:2px}
#app{position:fixed;inset:0}
#world{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;image-rendering:pixelated;background:radial-gradient(120% 90% at 50% 30%,#1c4a3e,#0a1816)}
.glass{background:var(--glass);backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);border:1px solid var(--line);border-radius:var(--r);box-shadow:0 10px 36px rgba(0,0,0,.35)}
/* HUD */
[aria-pressed="true"]{background:rgba(168,214,114,.2);color:var(--leaf)}
/* banner */
/* power bar */
/* receipt chips */
@keyframes pop{from{transform:translateY(8px) scale(.96);opacity:0}}
/* drawer */
.pane-body{display:flex;flex-direction:column;gap:10px}
.hint{color:var(--dim);margin:0;font-size:12px}.empty,.dim{color:var(--dim)}.err{color:var(--rose)}
h4{margin:8px 0 2px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}
.row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.btn,.chip-btn,.mini{background:rgba(255,255,255,.07);border:1px solid var(--line);border-radius:10px;padding:7px 12px;min-height:34px}
.mini{padding:2px 9px;min-height:26px;font-size:11px;border-radius:99px}
.btn:hover,.chip-btn:hover,.mini:hover{background:rgba(255,255,255,.15)}
.btn.ghost{background:transparent}.warn{border-color:var(--rose);color:#ffd3ce}.good{border-color:var(--leaf);color:var(--leaf)}
.btn.big{padding:12px 34px;font-size:17px;font-weight:700;border-radius:99px;background:var(--leaf);color:#12301f;border:0}
.btn.big:hover{background:#c0e48f}
.link{background:none;border:0;padding:0;text-decoration:underline;text-underline-offset:3px}
select,textarea,input[type=text]{background:rgba(0,0,0,.28);border:1px solid var(--line);border-radius:8px;padding:6px 8px;max-width:100%}
textarea.sql{width:100%;font-family:ui-monospace,Menlo,monospace;font-size:12px;resize:vertical}
.tbl{width:100%;border-collapse:collapse;font-size:11.5px}
.tbl th{text-align:left;color:var(--dim);font-weight:600;padding:4px 6px;border-bottom:1px solid var(--line)}
.tbl td{padding:4px 6px;border-bottom:1px solid rgba(255,255,255,.05);overflow-wrap:anywhere;vertical-align:top}
.result{overflow-x:auto}
.badge{font-size:10px;padding:1px 7px;border-radius:99px;border:1px solid;text-transform:uppercase;letter-spacing:.06em;margin-left:6px}
.b-real{color:var(--leaf);border-color:var(--leaf)}.b-service{color:var(--sun);border-color:var(--sun)}.b-unavailable{color:var(--dim);border-color:var(--dim)}
.layer{display:grid;grid-template-columns:auto 22px 1fr auto;gap:8px;align-items:center;padding:6px 4px;border-bottom:1px solid rgba(255,255,255,.05)}
.layer small{grid-column:2/-1;font-size:11px}.layer.off{opacity:.6}.layer .n{color:var(--dim);font-size:11px}
.layer input{width:18px;height:18px;accent-color:var(--leaf)}
/* petitions */
.cards{display:flex;flex-direction:column;gap:10px}
.card{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:rgba(255,255,255,.04)}
.card header{display:flex;gap:8px;align-items:baseline}.card header b{text-transform:uppercase;font-size:10px;letter-spacing:.1em;color:var(--sun)}
.card .status{margin-left:auto;font-size:10px;text-transform:uppercase}.s-open{color:var(--leaf)}.s-expired,.s-denied{color:var(--rose)}
.alien{font-size:18px;letter-spacing:.08em;color:#f6f0c9;margin:6px 0 2px;font-weight:700}
.translation{margin:2px 0 6px;color:var(--ink)}
.conf{display:flex;align-items:center;gap:8px;font-size:11px}.conf i{flex:1;height:4px;border-radius:3px;background:linear-gradient(90deg,var(--sun) var(--w),rgba(255,255,255,.1) var(--w))}
.answers{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.card.closed{opacity:.6}.card.final{border-color:var(--violet);box-shadow:0 0 22px rgba(185,162,238,.3)}.final-note{color:var(--violet);margin:6px 0 0}
/* branches, crystals */
.branch{display:flex;gap:8px;align-items:center;padding:6px 0 6px calc(var(--d)*22px);flex-wrap:wrap}
.branch.current .link{color:var(--leaf);font-weight:700}
.node-dot{width:9px;height:9px;border-radius:50%;background:var(--violet)}.branch:first-child .node-dot{background:var(--leaf)}
.strip{display:flex;gap:10px;flex-wrap:wrap}
.crystal{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px;border:1px solid var(--line);border-radius:12px;min-width:84px}
.crystal.current{border-color:var(--sky)}.gem{font-size:26px;background:none;border:0;color:var(--sky);text-shadow:0 0 14px var(--sky)}
.verdict{padding:10px;border-radius:12px;border:1px solid}.verdict.ok{border-color:var(--leaf)}.verdict.bad{border-color:var(--rose)}.verdict p{margin:4px 0 0}
.sparks{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.spk{display:grid;grid-template-columns:1fr auto;gap:0 8px;padding:8px;border:1px solid var(--line);border-radius:10px}
.spk .spark{grid-column:1/-1;width:100%;height:30px}
.subtabs{display:flex;flex-wrap:wrap;gap:2px}
.chron{padding-left:18px;margin:0}.chron li{margin-bottom:5px}
/* onboarding + notice */
#onboard{position:absolute;inset:0;display:grid;place-items:center;background:radial-gradient(90% 70% at 50% 40%,rgba(20,58,48,.92),rgba(6,16,14,.98));z-index:5;padding:20px}
.ob-card{text-align:center;display:flex;flex-direction:column;gap:14px;align-items:center;max-width:460px}
.ob-card h1{font-size:clamp(34px,7vw,60px);font-weight:300;letter-spacing:.04em;margin:0;color:#f5f3d2}
/* mobile: panels as bottom sheets */
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
body.reduced *{animation:none!important;transition:none!important}

/* plea: petitions to God come to the front */

/* ================= LAYOUT SYSTEM (SPEC 8.4) =================
   Zones, all inside #app, none may overlap:
   TOP    #hud                      full width bar
   CENTRE #stack (banner, plea, notice) one column under the HUD, between left edge and the drawer
   BOTTOM #dock  (chips above powerbar) in normal flow, so they can never intersect
   RIGHT  #drawer                   side panel (>900px) or bottom sheet (<=900px; hides #dock)
   ui/layout.mjs measures them and sets --zt (top), --zr (right) and --zb (bottom) in px. */
:root{--zt:76px;--zr:12px;--zb:96px;--pad:12px;--sat:env(safe-area-inset-top,0px);--sab:env(safe-area-inset-bottom,0px);--sal:env(safe-area-inset-left,0px);--sar:env(safe-area-inset-right,0px)}
#hud{position:absolute;top:calc(var(--pad) + var(--sat));left:calc(var(--pad) + var(--sal));right:calc(var(--pad) + var(--sar));display:flex;gap:6px 14px;align-items:center;justify-content:space-between;padding:8px 14px;
 background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line);border-radius:var(--r);z-index:3}
.brand{font-weight:800;letter-spacing:.28em;text-transform:uppercase;font-size:15px;color:#f4f6d9;white-space:nowrap}
.brand small{display:block;font-size:10px;letter-spacing:.14em;font-weight:500;color:var(--dim);text-transform:none}
.stats{display:flex;gap:6px 16px;flex-wrap:wrap;align-items:center;color:var(--dim);min-width:0}
.stats>span{white-space:nowrap}.stats b{color:var(--ink);font-weight:700}
.ctrls{display:flex;gap:8px;align-items:center}
.seg{display:flex;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.spd,.btn-ico{background:transparent;border:0;padding:4px 10px;min-width:36px;min-height:36px}
.btn-ico{border:1px solid var(--line);border-radius:10px;font-size:16px}
.spd+.spd{border-left:1px solid var(--line)}
.spd:hover,.btn-ico:hover{background:rgba(255,255,255,.08)}
.trust{display:inline-block;position:relative;width:72px;height:8px;border-radius:5px;background:rgba(255,255,255,.1);vertical-align:middle;margin:0 6px;overflow:hidden}
.trust::after{content:"";position:absolute;left:50%;top:0;bottom:0;width:1px;background:var(--dim)}
.trust i{position:absolute;top:0;bottom:0;transition:width .4s,left .4s}
/* centre-top stack */
#stack{position:absolute;z-index:4;top:var(--zt);left:calc(var(--pad) + var(--sal));right:var(--zr);max-height:calc(100% - var(--zt) - var(--zb));overflow:auto;display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none;scrollbar-width:none}
#stack>*{pointer-events:auto;flex:none;max-width:100%}
#banner{padding:4px 6px 4px 14px;border-radius:99px;background:var(--glass2);border:1px solid var(--line);display:flex;gap:8px;align-items:center;min-height:40px}
#banner[data-kind="dream"]{border-color:var(--violet);color:#e3d9ff}
#banner[data-kind="crystal"]{border-color:var(--sky);color:#d2f4f7}
#notice{padding:8px 16px;border-radius:18px;background:var(--glass2);border:1px solid var(--line);text-align:center}
#notice[data-kind="warn"]{border-color:var(--rose)}
.plea{position:static;width:min(560px,100%);padding:14px 18px 12px;border-radius:18px;background:var(--glass2);border:1px solid var(--line);box-shadow:0 18px 50px -20px rgba(0,0,0,.6);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);animation:plea-in .45s cubic-bezier(.2,.7,.2,1)}
.plea[data-kind="power"]{border-color:#e8b54d}
.plea[data-kind="final"]{border-color:#c9a0ff;box-shadow:0 0 0 1px #c9a0ff55,0 18px 60px -12px #c9a0ff66}
.plea-head{display:flex;justify-content:space-between;gap:4px 12px;flex-wrap:wrap;font-size:12px;letter-spacing:.06em;text-transform:uppercase}
.plea-kind{color:#e8d48a}
.plea-alien{font-size:28px;letter-spacing:.14em;margin:6px 0 2px;font-weight:600;color:#fff6d8;text-shadow:0 0 18px rgba(255,220,140,.35);overflow-wrap:anywhere}
.plea-tr{margin:0 0 10px;font-size:15px;overflow-wrap:anywhere}
.plea .answers{display:flex;flex-wrap:wrap;gap:8px}
@keyframes plea-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
/* bottom dock */
#dock{position:absolute;z-index:3;left:calc(var(--pad) + var(--sal));right:var(--zr);bottom:calc(var(--pad) + var(--sab));display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}
#dock>*{pointer-events:auto}
#chips{align-self:flex-start;display:flex;flex-direction:column;gap:6px;max-width:min(320px,100%);pointer-events:none}
.rchip{display:grid;gap:1px;padding:6px 11px;border-radius:12px;background:var(--glass2);border:1px solid var(--line);font-size:11px;animation:pop .35s;pointer-events:auto}
.rchip b{font-size:12px}.rchip.ok{border-left:3px solid var(--leaf)}.rchip.replay{border-left:3px solid var(--sky)}.rchip.err{border-left:3px solid var(--rose)}
.rchip code{color:var(--dim);font-size:10px}.rchip span{overflow-wrap:anywhere}
@keyframes pop{from{transform:translateY(8px) scale(.96);opacity:0}}
#powerbar{display:flex;flex-direction:column;align-items:center;gap:8px;max-width:100%}
.pw-row{display:flex;gap:4px;padding:6px;flex-wrap:wrap;justify-content:center;background:var(--glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line);border-radius:var(--r);box-shadow:0 10px 36px rgba(0,0,0,.35);max-width:100%}
.power{display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;min-height:40px;min-width:40px;border:1px solid transparent;border-radius:10px;background:transparent;font-weight:600}
.power:hover:not(:disabled){background:rgba(255,255,255,.08)}
.power:disabled{opacity:.4;cursor:not-allowed}
.power[data-power="smite"]:hover{color:var(--rose)}
.power .k{font-size:10px;opacity:.55;border:1px solid var(--line);border-radius:4px;padding:0 4px}
.pw-row input{background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:8px;padding:6px 8px;width:120px;min-height:40px}
.pw-hint{font-size:11px;color:var(--dim);background:rgba(10,24,22,.6);padding:3px 10px;border-radius:12px;text-align:center;max-width:100%}
.confirm{padding:10px 14px;border-radius:var(--r);background:var(--glass2);border:1px solid var(--rose);display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:center;max-width:100%}
.confirm p{margin:0}
/* drawer: side panel */
#drawer{position:absolute;z-index:4;top:var(--zt);right:calc(var(--pad) + var(--sar));bottom:calc(var(--pad) + var(--sab));width:min(430px,calc(100% - 24px));display:flex;flex-direction:column;overflow:hidden;background:var(--glass);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid var(--line);border-radius:var(--r);box-shadow:0 14px 44px rgba(0,0,0,.45)}
.tabs{display:flex;gap:2px;padding:6px;border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:thin;flex:none}
.tabs button,.sub{background:transparent;border:0;border-radius:8px;padding:6px 10px;min-height:34px;white-space:nowrap;color:var(--dim)}
.tabs button[aria-selected="true"],.sub[aria-selected="true"]{background:rgba(168,214,114,.18);color:var(--ink)}
.tabs button:hover,.sub:hover{background:rgba(255,255,255,.08)}
.tabs .close{margin-left:auto;font-size:18px;min-width:36px}
.panes{flex:1;overflow:auto;padding:12px;min-height:0}
.mini{min-height:32px}.link{min-height:32px;padding:4px 2px}
select{min-height:32px}.layer{min-height:36px}
.ns{position:absolute;inset:40% 0 auto;text-align:center}
/* <=900px: drawer becomes a bottom sheet and hides the dock */
@media (max-width:900px){
 #drawer{top:auto;left:0;right:0;bottom:0;width:100%;height:min(62dvh,calc(100dvh - var(--zt) - 8px));border-radius:18px 18px 0 0;padding-bottom:var(--sab)}
 body.drawer-open #dock{display:none}
 body.drawer-open #stack{max-height:calc(100% - var(--zt) - var(--zb))}
}
/* phones */
@media (max-width:640px){
 :root{--pad:8px}
 #hud{display:grid;grid-template-columns:minmax(0,1fr) auto;padding:6px 10px;gap:4px 8px}
 .brand{font-size:13px;letter-spacing:.14em}.brand small{display:none}
 .stats{grid-column:1/-1;grid-row:2;flex-wrap:nowrap;overflow:hidden;gap:10px;font-size:11px;mask-image:linear-gradient(90deg,#000 88%,transparent);-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent)}
 .stats .opt{display:none}
 .ctrls{gap:4px;grid-column:2;grid-row:1;justify-self:end}
 .spd{padding:4px 2px}.btn-ico{min-width:34px;padding:2px 4px}.spd{min-width:32px;padding:4px 6px;min-height:34px}.btn-ico{min-width:36px;min-height:36px;padding:2px 6px}
 .trust{width:44px;margin:0 4px}
 .pw-row{display:grid;grid-template-columns:repeat(4,1fr);width:100%;gap:3px;padding:4px}
 .power{padding:4px;font-size:12px;min-height:40px}.power .k{display:none}
 .pw-row input{grid-column:1/-1;width:100%}
 .pw-hint{display:none}
 #powerbar{width:100%}
 #chips .rchip:nth-child(n+2){display:none}
 .plea{padding:10px 12px}.plea-alien{font-size:22px;margin:2px 0 0}.plea-tr{font-size:14px;margin-bottom:6px}
 #banner{font-size:12px}
 .sparks{grid-template-columns:1fr}
}
@media (max-height:640px){.plea-alien{font-size:20px}.plea-head .dim{display:none}.pw-hint{display:none}}
@media (max-width:420px){.brand{display:none}#hud .ctrls{grid-column:1/-1}}

/* Keep engine key spelling and the refusal glitch palette. */
h4.merge-status{text-transform:none;overflow-wrap:anywhere;color:var(--rose)}

/* Desktop menus share the HUD and drawer layout zones. */
#hud:has(.desktop-menu){flex-wrap:wrap}
.desktop-menu{display:flex;flex:0 0 100%;flex-wrap:wrap;gap:6px;min-width:0}
.desktop-menu button{min-width:32px;min-height:32px}
.desktop-pane,.desktop-pane>*{min-width:0;max-width:100%;overflow-wrap:anywhere}
.desktop-pane label{display:flex;flex-direction:column;gap:4px;min-width:0}
.desktop-pane input,.desktop-pane select,.desktop-pane textarea{width:100%;min-width:32px;min-height:32px;background:rgba(0,0,0,.28);border:1px solid var(--line);border-radius:8px;padding:6px 8px}
.desktop-pane pre{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;max-width:100%;margin:6px 0}
.desktop-pane .row>*{max-width:100%}
body:has(.desktop-menu) #drawer .tabs{flex-wrap:wrap;overflow-x:hidden}
body:has(.desktop-menu) #hud .ctrls{flex-wrap:wrap;min-width:0;max-width:100%}
@media(max-width:640px){#hud:has(.desktop-menu) .desktop-menu{grid-column:1/-1;grid-row:3}}
.desktop-nodes { overflow-x: auto; }
.desktop-nodes .tbl { white-space: nowrap; }
