:root{
  --bg:#f5eee6; --panel:#fffbf6; --panel2:#faf3ea; --ink:#2b1d12; --muted:#7a6553;
  --line:#e3d3c2; --line2:#d4c0aa; --accent:#c57535; --accent-text:#9a531d; --accent-ink:#fff; --accent-soft:#f6e1cf;
  --bad:#9b3232; --bad-bg:#f6dada; --ok:#2f6b2a; --ok-bg:#dcefd9; --warn:#8a5a00; --warn-bg:#fbeccb;
  --var:#5b3f9a; --var-bg:#ece4f7; --var-line:#b9a4e6; --slot:#1f5a9c; --slot-bg:#dde9f7;
  --test:#1d6f6b; --test-bg:#d6eeeb; --blk:#a3336b; --blk-bg:#f8e2ee; --blk-line:#dfa3c3; --add-bg:rgba(60,140,60,.16); --del-bg:rgba(180,50,50,.14);
  --shadow:0 18px 50px rgba(60,35,10,.28); --radius:12px; color-scheme:light;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#120b06; --panel:#1c130c; --panel2:#241910; --ink:#f0e6da; --muted:#b3a08e;
    --line:#3b2e23; --line2:#54433a; --accent:#e08f50; --accent-text:#e08f50; --accent-ink:#1f1108; --accent-soft:#3a2616;
    --bad:#e69a9a; --bad-bg:#3c1f1f; --ok:#8fd18a; --ok-bg:#1f3320; --warn:#f0c46a; --warn-bg:#3b2e12;
    --var:#c4b0f0; --var-bg:#2c2340; --var-line:#6d56a8; --slot:#8fbdf0; --slot-bg:#1d2f45;
    --test:#7fd0c9; --test-bg:#17302e; --blk:#f0a6cc; --blk-bg:#3b1f2e; --blk-line:#8b4a6c; --add-bg:rgba(110,190,110,.18); --del-bg:rgba(220,100,100,.18);
    --shadow:0 18px 50px rgba(0,0,0,.6); color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --bg:#120b06; --panel:#1c130c; --panel2:#241910; --ink:#f0e6da; --muted:#b3a08e;
  --line:#3b2e23; --line2:#54433a; --accent:#e08f50; --accent-text:#e08f50; --accent-ink:#1f1108; --accent-soft:#3a2616;
  --bad:#e69a9a; --bad-bg:#3c1f1f; --ok:#8fd18a; --ok-bg:#1f3320; --warn:#f0c46a; --warn-bg:#3b2e12;
  --var:#c4b0f0; --var-bg:#2c2340; --var-line:#6d56a8; --slot:#8fbdf0; --slot-bg:#1d2f45;
  --test:#7fd0c9; --test-bg:#17302e; --blk:#f0a6cc; --blk-bg:#3b1f2e; --blk-line:#8b4a6c; --add-bg:rgba(110,190,110,.18); --del-bg:rgba(220,100,100,.18);
  --shadow:0 18px 50px rgba(0,0,0,.6); color-scheme:dark;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:14.5px/1.5 "Source Sans 3","Noto Sans SC",-apple-system,"Segoe UI","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}
html[lang="zh"] body{font-family:"Noto Sans SC","Source Sans 3",-apple-system,"Segoe UI","Microsoft YaHei",sans-serif}
button{font:inherit;color:inherit;cursor:pointer}
code,.mono,.ttl,textarea.json,.pv-pre,.diff,.liveinfo,.ed .bd,.ed textarea,.chip,.num{font-family:"JetBrains Mono",ui-monospace,"Cascadia Mono",Consolas,"Microsoft YaHei",monospace}
code{font-size:.92em;background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:0 5px}
h1,h2,h3{margin:0}
.ic{width:15px;height:15px;flex:none;vertical-align:-2px}
.sp{flex:1}
.mut{color:var(--muted)}
.sm{font-size:12.5px}
[hidden]{display:none!important}

/* ---------- top bar ---------- */
.topbar{height:48px;display:flex;align-items:center;gap:12px;padding:0 18px;border-bottom:1px solid var(--line);background:var(--panel);position:sticky;top:0;z-index:30}
.brand{font:500 11.5px "JetBrains Mono",monospace;color:var(--muted);letter-spacing:.05em;text-transform:uppercase}
.ptitle{font:600 18px "Fraunces",Georgia,"Noto Serif SC",serif;letter-spacing:-.01em}
.tag-proto{font:500 11px "JetBrains Mono",monospace;color:var(--warn);background:var(--warn-bg);border-radius:6px;padding:2px 8px}
.auth-pill{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:20px;background:var(--panel);color:var(--muted);font:500 11px "JetBrains Mono",monospace;padding:5px 13px}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:20px;overflow:hidden;background:var(--bg);flex:none}
.seg button{border:0;background:transparent;color:var(--muted);padding:4px 11px;font-size:12.5px;font-weight:600}
.seg button.on{background:var(--accent);color:var(--accent-ink)}
.seg button:disabled{opacity:.4;cursor:not-allowed}
.seg.sm button{padding:2px 9px;font-size:12px}

/* ---------- layout ---------- */
.app{display:grid;grid-template-columns:288px minmax(0,1fr) 440px;height:calc(100vh - 48px)}
.rail,.main,.side{overflow:auto;min-height:0}
.rail{border-right:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column}
.side{border-left:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column}
.main{padding:16px 22px 90px}
.railbtn{display:none}
#scrim{display:none}

/* ---------- controls ---------- */
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);background:var(--panel);color:var(--ink);border-radius:8px;padding:6px 12px;font-weight:600;font-size:13px;white-space:nowrap}
.btn:hover{border-color:var(--accent)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn.primary:hover{filter:brightness(1.06)}
.btn.sm{padding:4px 10px;font-size:12.5px}
.btn.xs{padding:2px 8px;font-size:12px;border-radius:6px}
.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.ib{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;background:transparent;color:var(--muted);border-radius:6px;padding:0;flex:none}
.ib:hover{background:var(--panel2);color:var(--ink)}
.ib.danger:hover{color:var(--bad)}
.ib.arm{width:auto;padding:0 6px;background:var(--bad-bg);color:var(--bad)}
.armt{font-size:12px;font-weight:600}
.inp,.sel,.name-inp{border:1px solid var(--line2);background:var(--panel);color:var(--ink);border-radius:8px;padding:6px 10px;font:inherit;font-size:13.5px;min-width:0}
.inp:focus,.sel:focus,.name-inp:focus,textarea:focus,.num:focus{outline:2px solid var(--accent);outline-offset:-1px}
.sel.sm{padding:3px 8px;font-size:12.5px}
.sel.xs{padding:1px 6px;font-size:12px;border-radius:6px}
.searchbox{position:relative}
.searchbox .ic{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--muted)}
.searchbox .inp{width:100%;padding-left:32px}
.pill{display:inline-block;min-width:18px;padding:0 6px;border-radius:99px;background:var(--accent-ink);color:var(--accent-text);font-size:11.5px;font-weight:700;text-align:center;line-height:18px}
.btn.primary .pill{background:rgba(255,255,255,.28);color:var(--accent-ink)}
.stab .pill{background:var(--panel2);color:var(--muted);border:1px solid var(--line)}
.stab .pill.warn{background:var(--warn-bg);color:var(--warn);border-color:transparent}
.stab .pill.bad{background:var(--bad-bg);color:var(--bad);border-color:transparent}
.badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;line-height:1.5;padding:0 7px;border-radius:6px;background:var(--panel2);color:var(--muted);border:1px solid var(--line);white-space:nowrap}
.badge.prod{background:var(--accent-soft);color:var(--accent-text);border-color:transparent}
.badge.test{background:var(--test-bg);color:var(--test);border-color:transparent}
.badge.warn{background:var(--warn-bg);color:var(--warn);border-color:transparent}
.badge.bad{background:var(--bad-bg);color:var(--bad);border-color:transparent}
.badge.ok{background:var(--ok-bg);color:var(--ok);border-color:transparent}
.badge.shared{background:var(--var-bg);color:var(--var);border-color:transparent}
.badge.lit{background:transparent;color:var(--muted);border-style:dashed}
.badge.gen{background:var(--var-bg);color:var(--var);border-color:transparent}
.okt{color:var(--ok);font-weight:600}
.badt{color:var(--bad);font-weight:600}
.badt2{color:var(--warn);font-weight:600}
.addt{color:var(--accent-text);font-weight:600}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--muted);margin-right:6px;flex:none}
.dot.ok{background:#4c9a45}
.dot.dirty,.dot.warn{background:#d49a1c}
.dot.drift{background:#cc4a4a}
.dot.new{background:#9a8a7a}
.count{font-size:11.5px;font-weight:600;color:var(--muted);background:var(--panel2);border:1px solid var(--line);border-radius:99px;padding:0 7px;margin-left:4px}
.empty-s{color:var(--muted);padding:12px 4px;font-size:13px}
.empty{color:var(--muted);padding:40px;text-align:center}

/* ---------- rail ---------- */
.rail-top{padding:14px 14px 10px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:10px;flex:none}
.rail-hd{display:flex;align-items:center}
.rail-hd h2{font:600 17px "Fraunces",Georgia,"Noto Serif SC",serif}
.rail-f{display:flex;flex-direction:column;gap:8px}
.chiprow{display:flex;flex-wrap:wrap;gap:6px}
.chiprow.tight{gap:5px;margin-top:6px}
.fchip{border:1px solid var(--line2);background:var(--panel);border-radius:99px;padding:1px 10px;font-size:12px;font-weight:600;color:var(--muted)}
.fchip.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.frow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fl{font-size:11.5px;color:var(--muted);font-weight:600}
.rail-list{flex:1;overflow:auto;padding:6px 10px 14px}
.rgh{font:600 11.5px "JetBrains Mono",monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:12px 6px 4px}
.ritem{display:block;width:100%;text-align:left;background:transparent;border:1px solid transparent;border-radius:10px;padding:8px 10px;margin:2px 0}
.ritem:hover{background:var(--panel2)}
.ritem.on{background:var(--accent-soft);border-color:var(--line2)}
.ritem.nested{margin-left:12px;width:calc(100% - 12px);border-left:2px solid var(--line2);border-radius:4px 10px 10px 4px}
.r1{display:flex;justify-content:space-between;gap:8px}
.rname{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rcode{font:500 11.5px "JetBrains Mono",monospace;color:var(--muted)}
.r2{display:flex;flex-wrap:wrap;gap:4px;margin:4px 0}
.r3{font-size:12px;color:var(--muted);display:flex;align-items:center;flex-wrap:wrap}
.rail-ft{flex:none;border-top:1px solid var(--line);padding:10px 14px;display:flex;gap:8px;justify-content:space-between;flex-wrap:wrap}

/* ---------- editor header ---------- */
.mhead{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
.mh1{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.name-inp{font:600 22px "Fraunces",Georgia,"Noto Serif SC",serif;border-color:transparent;background:transparent;padding:2px 8px;margin-left:-8px;min-width:180px;width:min(360px,100%)}
.name-inp:hover{border-color:var(--line)}
.mcode{font:500 12px "JetBrains Mono",monospace;color:var(--muted)}
.stchip{display:inline-flex;align-items:center;border:1px solid var(--line);border-radius:99px;padding:2px 12px 2px 10px;font-size:12.5px;font-weight:600;background:var(--panel)}
.mh2{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:space-between}
.facets{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.fc{display:inline-flex;gap:7px;align-items:center;border:1px solid var(--line2);border-radius:99px;padding:3px 12px;font-size:13px;background:var(--panel);color:var(--ink)}
.fc b{font-size:11.5px;color:var(--muted);font-weight:600}
.fc code{background:transparent;border:0;padding:0}
.fcb{cursor:pointer}
.fcb:hover{border-color:var(--accent)}
.acts{display:flex;gap:8px;flex-wrap:wrap}
.demo-note{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:var(--muted);background:var(--panel2);border:1px dashed var(--line2);border-radius:10px;padding:7px 12px}
.demo-note.warn{background:var(--warn-bg);color:var(--warn);border-style:solid;border-color:transparent}
.hint{display:flex;gap:10px;align-items:flex-start;background:var(--accent-soft);border:1px solid var(--line2);border-radius:12px;padding:10px 12px 10px 14px;margin-bottom:12px;font-size:13.5px}
.hint>div{flex:1;line-height:1.9}
.hbtn{border:1px solid var(--line2);background:var(--panel);border-radius:99px;padding:1px 11px;margin:0 4px 0 2px;font-size:12.5px;font-weight:600;color:var(--accent-text)}
.hbtn:hover{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}

.tabs{display:flex;align-items:flex-end;gap:2px;border-bottom:1px solid var(--line);margin-bottom:12px}
.tab{border:0;background:transparent;padding:8px 16px;font-weight:700;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-1px}
.tab small{font:500 10.5px "JetBrains Mono",monospace;margin-left:4px;opacity:.8}
.tab.on{color:var(--ink);border-bottom-color:var(--accent)}
.tabnote{margin-left:12px;padding-bottom:9px;font-size:12.5px;color:var(--muted)}

/* ---------- sections ---------- */
.sec{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);margin-bottom:12px}
.sec.flash,.cell.flash{animation:flash 1.5s ease-out}
@keyframes flash{0%{box-shadow:0 0 0 3px var(--accent)}100%{box-shadow:0 0 0 3px transparent}}
.sec-h{display:flex;align-items:center;gap:8px;padding:10px 14px;cursor:pointer;user-select:none}
.sec-h h3{font-size:14.5px;font-weight:700}
.sec-h h3 small{font-weight:400}
.sec-h .meta{font-size:12.5px;color:var(--muted)}
.caret{display:inline-flex;transition:transform .12s;color:var(--muted)}
.caret.down{transform:rotate(90deg)}
.sec-b{padding:2px 14px 14px}

/* ---------- cells ---------- */
.cell{border:1px solid var(--line);border-radius:10px;background:var(--panel);margin:8px 0;position:relative}
.cell.open{border-color:var(--line2)}
.cell.off>.cell-h,.cell.off .cell-pv{opacity:.55}
.cell.dragging{opacity:.4}
.cell.drop-before::before,.cell.drop-after::after{content:"";position:absolute;left:0;right:0;height:3px;background:var(--accent);border-radius:3px}
.cell.drop-before::before{top:-6px}
.cell.drop-after::after{bottom:-6px}
.cell-h{display:flex;align-items:center;gap:4px;padding:6px 8px 6px 4px;flex-wrap:nowrap;min-width:0}
.cell-h>*{flex:none}
.grip{display:inline-flex;align-items:center;justify-content:center;width:22px;height:26px;color:var(--muted);cursor:grab;flex:none}
.grip:active{cursor:grabbing}
.hash{font:600 13px "JetBrains Mono",monospace;color:var(--muted)}
.ttl{font-size:13px;font-weight:600;border:1px solid transparent;background:transparent;color:var(--ink);border-radius:6px;padding:2px 6px;min-width:60px;width:auto;max-width:360px;flex:1 1 150px!important;text-overflow:ellipsis}
.ttl:hover{border-color:var(--line)}
.ttl:focus{outline:2px solid var(--accent);outline-offset:-1px;background:var(--bg)}
.cnt{font:500 11.5px "JetBrains Mono",monospace;color:var(--muted);margin:0 6px;white-space:nowrap}
.tog{position:relative;display:inline-block;width:30px;height:17px;flex:none;margin:0 4px}
.tog input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer;z-index:1}
.tog i{position:absolute;inset:0;border-radius:99px;background:var(--line2);transition:background .15s}
.tog i::after{content:"";position:absolute;left:2px;top:2px;width:13px;height:13px;border-radius:50%;background:#fff;transition:transform .15s}
.tog input:checked+i{background:var(--accent)}
.tog input:checked+i::after{transform:translateX(13px)}
.cell-pv{padding:0 14px 10px 34px;color:var(--muted);font-size:12.5px;line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;cursor:pointer;word-break:break-word}
.ed{position:relative;border-top:1px solid var(--line);background:var(--bg);border-radius:0}
.ed .bd,.ed textarea{margin:0;padding:12px 14px;border:0;font-size:12.5px;line-height:1.65;letter-spacing:0;white-space:pre-wrap;overflow-wrap:break-word;word-break:normal;tab-size:4;width:100%;font-variant-ligatures:none}
.ed .bd{position:absolute;inset:0;overflow:hidden;color:var(--ink);pointer-events:none}
.ed textarea{position:relative;display:block;resize:none;overflow:hidden;background:transparent;color:transparent;caret-color:var(--ink);min-height:84px}
.ed textarea:focus{outline:2px solid var(--accent);outline-offset:-2px}
.ed textarea::selection{background:rgba(197,117,53,.35);color:transparent}
mark{background:transparent;color:inherit;border-radius:3px}
mark.tk-v{background:var(--var-bg);box-shadow:0 0 0 1px var(--var-line)}
mark.tk-w{background:var(--warn-bg);box-shadow:0 0 0 1px var(--warn)}
mark.tk-s{background:var(--slot-bg)}
mark.tk-l{border-bottom:1px dotted var(--muted);border-radius:0}
.ed-f{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:7px 10px;border-top:1px solid var(--line)}
.hintline{font-size:12px;color:var(--muted);margin-left:auto}
.shared-banner{display:flex;gap:10px;align-items:center;background:var(--var-bg);color:var(--var);border-top:1px solid var(--line);padding:8px 12px;font-size:12.5px;border-radius:0 0 10px 10px}
.shared-banner>div{flex:1}
.addbar{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.chip{display:inline-block;padding:0 6px;border-radius:5px;font-size:11.5px;line-height:1.55;font-weight:500;vertical-align:baseline}
.chip.v{background:var(--var-bg);color:var(--var)}
.chip.w{background:var(--warn-bg);color:var(--warn)}
.chip.s{background:var(--slot-bg);color:var(--slot)}
.lit{border-bottom:1px dotted var(--muted);cursor:help}
.rv{background:var(--var-bg);border-bottom:2px solid var(--var-line);border-radius:3px;padding:0 1px;cursor:help}

.slotp{margin-top:12px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);padding:8px 12px}
.slotp-h{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:var(--muted);margin-bottom:4px}
.srow{display:flex;gap:10px;align-items:baseline;font-size:13px;padding:2px 0;flex-wrap:wrap}

.wl-row{display:flex;gap:12px;padding:8px 0;border-top:1px solid var(--line);align-items:flex-start}
.wl-row:first-child{border-top:0}
.wl-l{width:150px;flex:none;font-weight:700;font-size:13px}
.wl-l small{color:var(--muted);font-weight:400}
.wl-c{display:flex;gap:6px;flex-wrap:wrap;align-items:center;flex:1}
.wl{display:inline-flex;align-items:center;gap:0;border:1px solid var(--line2);border-radius:99px;padding:1px 4px 1px 9px;font:500 12px "JetBrains Mono",monospace;background:var(--panel)}
.wl.unused{border-style:dashed;background:var(--warn-bg);border-color:transparent;color:var(--warn)}
.wl .x{border:0;background:transparent;padding:0 3px;color:var(--muted);display:inline-flex;align-items:center}
.wl .x:hover{color:var(--bad)}
.legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-top:6px;flex-wrap:wrap}
.legend span{display:inline-flex;align-items:center}

.outline{border:1px solid var(--line);border-radius:10px;background:var(--bg);padding:8px 10px;margin:6px 0 8px;max-height:260px;overflow:auto}
.orow{display:flex;gap:8px;align-items:baseline;font-size:12.5px;padding:1px 0;flex-wrap:wrap}
.orow .on{background:transparent;border:0;padding:0;font-weight:600}
.ot{color:var(--slot);font:500 11.5px "JetBrains Mono",monospace}
.onote{color:var(--muted);font-size:12px}
.errline{display:flex;gap:6px;align-items:flex-start;color:var(--bad);font-size:12.5px;margin:6px 0;padding:6px 10px;border-radius:8px;background:var(--bad-bg)}
.errline.warn{color:var(--warn);background:var(--warn-bg)}
.gen-note{display:flex;gap:6px;align-items:center;font-size:12.5px;color:var(--var);background:var(--var-bg);padding:6px 10px;border-radius:8px;margin:6px 0}
textarea.json{display:block;width:100%;margin-top:8px;border:1px solid var(--line2);background:var(--bg);color:var(--ink);border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.6;resize:none;overflow:hidden;min-height:72px;white-space:pre;tab-size:2}
textarea.json[readonly]{background:var(--panel2);color:var(--muted)}

.lt{width:100%;border-collapse:collapse;font-size:13px;margin:6px 0}
.lt th{text-align:left;font-size:11.5px;color:var(--muted);font-weight:700;padding:5px 8px;border-bottom:1px solid var(--line2);white-space:nowrap}
.lt td{padding:5px 8px;border-bottom:1px solid var(--line);vertical-align:middle}
.lt tr.fh td{background:var(--panel2);font-size:12.5px;padding:4px 8px}
.lt tr.mm td{background:var(--warn-bg)}
.lt tr.mm td:not(:first-child){font-weight:600}
.lt .ign{color:var(--bad);text-decoration:line-through;text-decoration-color:var(--bad)}
.lt .ign small{text-decoration:none;display:inline-block;font-weight:600}
.lt.imp td,.lt.imp th{font-size:12.5px}
.lim-sum{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:4px 0 6px}
.linked-bar{display:flex;gap:10px;align-items:center;background:var(--ok-bg);color:var(--ok);border-radius:10px;padding:8px 12px;font-size:13px}
.linked-bar>div{flex:1}
.num{width:68px;border:1px solid var(--line2);background:var(--bg);color:var(--ink);border-radius:6px;padding:3px 6px;font-size:12.5px}
.chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}
.chk.sm{font-size:12.5px;color:var(--muted)}
.chk input{accent-color:var(--accent)}
.row2{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:6px}
.fld{display:flex;flex-direction:column;gap:4px;font-size:12.5px;font-weight:600;color:var(--muted)}
.fld>span{font-size:12px}
.fld .sel,.fld .inp,.fld textarea{font-weight:400;color:var(--ink)}

/* ---------- right panel ---------- */
.stabs{display:flex;gap:2px;padding:8px 10px 0;border-bottom:1px solid var(--line);flex:none}
.stab{border:0;background:transparent;padding:8px 14px;font-weight:700;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-1px;display:inline-flex;gap:6px;align-items:center}
.stab.on{color:var(--ink);border-bottom-color:var(--accent)}
.side-body{flex:1;overflow:auto;padding:12px 14px 40px}
.pv-top{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.pv-note{font-size:12.5px;color:var(--muted);margin:2px 0 10px}
.pv-msg{margin-bottom:12px}
.pv-label{display:flex;justify-content:space-between;gap:10px;font:600 11px "JetBrains Mono",monospace;letter-spacing:.05em;color:var(--accent-text);margin:4px 2px}
.pv-label span{color:var(--muted);font-weight:400;letter-spacing:0;text-align:right}
.pv-pre{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.6;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px;margin:0}
.pv-pre.plain{color:var(--muted);max-height:260px;overflow:auto}
.pseg{border-radius:3px;cursor:pointer}
.pseg:hover{background:rgba(197,117,53,.12)}
.pv-pre.bounds .pseg{display:block;border-left:3px solid var(--accent);padding-left:10px;margin:4px 0}
.pv-pre.bounds .pseg::before{content:attr(data-label);display:block;font:700 10.5px "Source Sans 3",sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-text);margin-bottom:2px}

.ck-sum{display:flex;gap:6px;align-items:center;margin-bottom:10px;flex-wrap:wrap}
.lint{display:flex;gap:10px;border:1px solid var(--line);border-radius:10px;padding:9px 12px;margin-bottom:8px;background:var(--panel)}
.lint-i{flex:none;margin-top:1px}
.lint.error{border-color:var(--bad);background:var(--bad-bg)}
.lint.error .lint-i{color:var(--bad)}
.lint.warn{background:var(--warn-bg);border-color:transparent}
.lint.warn .lint-i{color:var(--warn)}
.lint.info .lint-i{color:var(--slot)}
.lint.compact{padding:5px 10px;margin:4px 0}
.lint-b{flex:1;min-width:0}
.lint-t{font-weight:700;font-size:13.5px;word-break:break-word}
.lint-d{font-size:12.5px;color:var(--muted);margin-top:2px}
.lint.warn .lint-d,.lint.error .lint-d{color:var(--ink);opacity:.8}
.lint-a{display:flex;gap:6px;margin-top:6px}
.ck-ok{margin-top:14px;font-size:12.5px;color:var(--muted);border-top:1px dashed var(--line2);padding-top:10px}
.ck-ok>div{padding:1px 0 1px 20px}
.ck-ok-h{display:flex;align-items:center;gap:6px;color:var(--ok);font-weight:700;padding:0!important;margin-bottom:2px}

.dblock{border:1px solid var(--line);border-radius:10px;margin-bottom:12px;overflow:hidden}
.dh{display:flex;gap:10px;align-items:center;padding:7px 12px;background:var(--panel2);font-size:12.5px;border-bottom:1px solid var(--line)}
.dh .add,.dh .del{font:600 12px "JetBrains Mono",monospace}
.dh .add{color:var(--ok)}
.dh .del{color:var(--bad)}
.diff{font-size:12px;line-height:1.55;overflow:auto;max-height:420px;background:var(--bg)}
.dl{display:flex;white-space:pre-wrap;word-break:break-word;min-width:0}
.dl.add{background:var(--add-bg)}
.dl.del{background:var(--del-bg)}
.dl.skip{color:var(--muted);font-style:italic;padding:1px 28px;background:var(--panel2)}
.gut{width:22px;flex:none;text-align:center;color:var(--muted);user-select:none}
.dtx{flex:1;min-width:0;padding-right:8px}
.drift{border:1px solid var(--bad);background:var(--bad-bg);border-radius:12px;padding:10px 12px;margin-bottom:14px}
.drift-h{display:flex;gap:8px;align-items:center;font-weight:700;color:var(--bad);margin-bottom:4px}
.drift-a{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.newrow{display:flex;gap:5px;flex-wrap:wrap}

/* ---------- modal / toast ---------- */
.mback{position:fixed;inset:0;background:rgba(30,18,8,.48);display:flex;align-items:flex-start;justify-content:center;padding:6vh 16px 4vh;z-index:100;overflow:auto}
.modal{background:var(--panel);border:1px solid var(--line2);border-radius:16px;width:min(580px,100%);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:88vh}
.modal.wide{width:min(840px,100%)}
.mh{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);flex:none}
.mh h2{font:600 18px "Fraunces",Georgia,"Noto Serif SC",serif}
.mb{padding:14px 18px;overflow:auto;flex:1}
.mf{display:flex;align-items:center;gap:8px;justify-content:flex-end;flex-wrap:wrap;padding:12px 18px;border-top:1px solid var(--line);flex:none}
.mnote{font-size:13.5px;color:var(--muted);margin-bottom:12px;line-height:1.6}
.sel-sum{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:10px 0;font-size:13px}
.slist{border:1px solid var(--line);border-radius:10px;max-height:340px;overflow:auto;background:var(--bg)}
.sgh{position:sticky;top:0;background:var(--panel2);font:600 11.5px "JetBrains Mono",monospace;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:6px 12px;border-bottom:1px solid var(--line)}
.sopt{display:flex;align-items:center;gap:10px;padding:6px 12px;border-bottom:1px solid var(--line);cursor:pointer;font-size:13.5px}
.sopt:hover{background:var(--panel2)}
.sopt.on{background:var(--accent-soft)}
.sopt input{accent-color:var(--accent)}
.sn{flex:1;min-width:0}
.sc{font-size:12px;color:var(--muted);white-space:nowrap}
.fmsg{font-size:13px;margin:8px 0;font-weight:600}
.fmsg.ok{color:var(--ok)}
.fmsg.bad{color:var(--bad)}
.mpname{display:flex;align-items:center}
.mpname .pre{border:1px solid var(--line2);border-right:0;border-radius:8px 0 0 8px;background:var(--panel2);padding:6px 8px;font:500 13px "JetBrains Mono",monospace;color:var(--muted);white-space:nowrap}
.mpname .inp{border-radius:0 8px 8px 0;flex:1}
.willdo{display:flex;flex-direction:column;gap:6px;margin:10px 0}
.wd{display:flex;gap:10px;align-items:flex-start;font-size:13.5px}
.wd>span:first-child{flex:none;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--panel2)}
.wd .ok{background:var(--ok-bg);color:var(--ok)}
.wd .add{background:var(--accent-soft);color:var(--accent-text)}
.wd .del{background:var(--bad-bg);color:var(--bad)}
.wd .warn{background:var(--warn-bg);color:var(--warn)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;margin-bottom:6px}
.grid2 .span2{grid-column:1/-1}
.plist{display:flex;flex-direction:column;gap:10px}
.pitem{border:1px solid var(--line);border-radius:10px;overflow:hidden}
.pitem.on{border-color:var(--line2)}
.ph{display:flex;gap:10px;align-items:center;padding:8px 12px;background:var(--panel2);cursor:pointer;flex-wrap:wrap}
.ph input{accent-color:var(--accent)}
.pw{font-size:12px;color:var(--muted)}
.pitem details summary{padding:6px 12px;font-size:12.5px;color:var(--muted);cursor:pointer}
.pitem .diff{max-height:260px}
.done-box{display:flex;gap:12px;align-items:flex-start;background:var(--ok-bg);color:var(--ok);border-radius:12px;padding:12px 14px;margin-bottom:14px}
.done-box .ic{width:20px;height:20px;margin-top:2px}
.done-box b{color:var(--ink)}
.pblock{border:1px solid var(--line);border-radius:12px;padding:10px 14px;margin-bottom:10px}
.pblock.warnb{background:var(--warn-bg);border-color:transparent}
.pb-h{display:flex;align-items:center;gap:8px;font-weight:700;margin-bottom:6px}
.orow2{display:flex;justify-content:space-between;font-size:13.5px;padding:3px 0;border-top:1px solid var(--line)}
.orow2:first-of-type{border-top:0}
.confirm{display:flex;gap:10px;align-items:center;margin-top:8px;font-size:13px;flex-wrap:wrap}
.sim{font-size:12px;color:var(--warn);background:var(--warn-bg);border-radius:6px;padding:2px 8px}
.steps{display:flex;flex-direction:column;gap:2px;margin:6px 0 14px}
.step{display:flex;gap:12px;align-items:flex-start;padding:7px 4px}
.si{width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--panel2);flex:none;color:var(--muted)}
.step.ok .si{background:var(--ok-bg);color:var(--ok)}
.step.run .si{background:var(--accent-soft);color:var(--accent-text)}
.sd{width:7px;height:7px;border-radius:50%;background:var(--line2)}
.sl{font-weight:600}
.step.todo .sl{color:var(--muted);font-weight:400}
.sn2{font-size:12.5px;color:var(--muted)}
.spin{animation:spin .9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.liveinfo{white-space:pre-wrap;background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:12px;margin:4px 0 0}
.cf{border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin-bottom:8px}
.cft{font-size:13px;margin-bottom:6px}
.cfo{display:flex;gap:10px;flex-wrap:wrap}
.radio{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line2);border-radius:99px;padding:2px 12px 2px 8px;font-size:13px;cursor:pointer}
.radio.on{background:var(--accent-soft);border-color:var(--accent)}
.radio input{accent-color:var(--accent)}
.vdiff summary{cursor:pointer;color:var(--accent-text);font-size:13px;margin:6px 0}
.vdiff .diff{border:1px solid var(--line);border-radius:10px;margin-top:6px}

.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%,20px);background:var(--ink);color:var(--bg);padding:9px 18px;border-radius:99px;font-size:13.5px;font-weight:600;opacity:0;pointer-events:none;transition:.2s;z-index:200;max-width:min(560px,92vw);text-align:center}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- responsive ---------- */
@media (max-width:1280px){
  .app{grid-template-columns:minmax(0,1fr) 400px}
  .rail{position:fixed;left:0;top:48px;bottom:0;width:300px;transform:translateX(-102%);transition:transform .2s;z-index:50;box-shadow:var(--shadow)}
  .rail.open{transform:none}
  #scrim.show{display:block;position:fixed;inset:48px 0 0 0;background:rgba(30,18,8,.35);z-index:40}
  .railbtn{display:inline-flex}
}
@media (max-width:900px){
  body{height:auto}
  .app{display:block;height:auto}
  .rail,.main,.side{overflow:visible}
  .main{padding:14px 14px 30px}
  .side{border-left:0;border-top:1px solid var(--line)}
  .side-body{overflow:visible}
  .topbar{padding:0 12px;gap:8px}
  .tag-proto,.auth-pill{display:none}
  .grid2{grid-template-columns:1fr}
  .wl-row{flex-direction:column;gap:4px}
  .cell-h{flex-wrap:wrap}
  .ttl{flex:1 1 100%!important;order:5}
}

.lt.linked td:not(:first-child){white-space:nowrap}
.fld .seg{align-self:flex-start}
.cell-h .sp{flex:0 0 0;min-width:0}

.legend3{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;color:var(--muted);margin:0 0 10px;padding:7px 10px;border:1px dashed var(--line2);border-radius:10px;background:var(--panel2)}
.legend3>span{display:inline-flex;align-items:center;gap:6px}
@media (max-width:1100px){ .cell-h .cnt{display:none} }
@media (max-width:900px){ .brand{display:none} .ptitle{font-size:16px} }

/* ---------- v2: variables, fields table, copy-from-template, link, new-template ---------- */
.badge.fld{background:var(--slot-bg);color:var(--slot);border-color:transparent;font-family:"JetBrains Mono",ui-monospace,Consolas,monospace;font-weight:500}
.jk{color:var(--slot)}
.jn{color:var(--accent-text)}
.ed.json{border:1px solid var(--line2);border-radius:10px;margin-top:8px;overflow:hidden}
.ed.json .bd,.ed.json textarea{font-size:12px}
.jtools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.varsline{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 10px 8px;border-top:1px dashed var(--line);font-size:12px}
.fbind{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.ed-f{align-items:center}

.ct-intro{font-size:13px;color:var(--muted);margin:2px 0 6px;line-height:1.55}
.ct-h{font-weight:700;margin:14px 0 6px}
.ct-h small{font-weight:400;color:var(--muted);margin-left:6px}
.ct-bar{display:flex;gap:10px;align-items:center;margin:8px 0 2px;flex-wrap:wrap}
.ftable{border:1px solid var(--line);border-radius:10px;overflow:auto;background:var(--panel)}
.ftable .frow{display:grid;grid-template-columns:minmax(130px,1.3fr) 92px 44px minmax(170px,2fr) 44px 64px;gap:8px;align-items:center;padding:5px 10px;border-top:1px solid var(--line);min-width:600px;font-size:13px}
.ftable .frow.head{border-top:0;background:var(--panel2);font-size:11.5px;color:var(--muted);font-weight:700}
.ftable .fname code{background:transparent;border:0;padding:0;font-weight:600}
.ftype{color:var(--slot);font-size:12px}
.freq input{accent-color:var(--accent)}
.fcell{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.fact{display:flex;justify-content:flex-end}
.lnk{border:0;background:transparent;color:var(--accent-text);font:inherit;font-size:12.5px;font-weight:600;padding:0;text-decoration:underline;cursor:pointer}
.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:10px}
.tablewrap .lt{margin:0;min-width:640px}
.lt td{vertical-align:top}
.lt .stline{margin-top:3px;font-size:11.5px}
.lt .nw{white-space:nowrap}
.lt .cf{color:var(--warn);font-weight:600}
.lt td .num{width:64px}

.copytop{display:flex;gap:14px;align-items:center;margin-bottom:10px;flex-wrap:wrap}
.copytop .searchbox{flex:1;min-width:200px}
.copylist{border:1px solid var(--line);border-radius:10px;max-height:380px;overflow:auto;background:var(--bg)}
.cgh{display:flex;gap:10px;align-items:center;padding:7px 12px;background:var(--panel2);position:sticky;top:0;z-index:1;border-top:1px solid var(--line)}
.cg:first-child .cgh{border-top:0}
.copyi{display:flex;gap:10px;padding:8px 12px;border-top:1px solid var(--line);cursor:pointer;align-items:flex-start}
.copyi:hover{background:var(--panel2)}
.copyi.on{background:var(--accent-soft)}
.copyi input{margin-top:3px;accent-color:var(--accent)}
.ci-b{flex:1;min-width:0}
.ci-t{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ci-p{color:var(--muted);font-size:12.5px;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word}
.copyfoot{display:flex;gap:14px;align-items:center;flex-wrap:wrap;font-size:13px;min-width:0}
.dupchoice{display:inline-flex;gap:8px;align-items:center}

.lgs{display:flex;flex-direction:column;gap:8px;margin:6px 0 14px}
.lg{display:block;border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:var(--panel)}
.lg.on{border-color:var(--line2);background:var(--panel2)}
.lgh{display:flex;gap:10px;align-items:center;flex-wrap:wrap;cursor:pointer}
.lgh input{accent-color:var(--accent)}
.lgv{display:inline-flex;gap:6px;flex-wrap:wrap}
.lpre{margin:6px 0 0;font:12px/1.5 "JetBrains Mono",ui-monospace,Consolas,monospace;background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:6px 10px;white-space:pre-wrap;color:var(--muted)}

.scards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px;margin:8px 0 14px;max-height:240px;overflow:auto;padding:2px}
.scard{display:block;position:relative;border:1px solid var(--line);border-radius:10px;padding:8px 11px;cursor:pointer;background:var(--panel)}
.scard:hover{border-color:var(--line2)}
.scard input{position:absolute;opacity:0;pointer-events:none}
.scard.on{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent);background:var(--accent-soft)}
.scard.blank{border-style:dashed}
.sc-t{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.sc-b{display:flex;gap:4px;flex-wrap:wrap;margin:4px 0}
.sc-s{font-size:12px;color:var(--muted)}

.ments{border:1px solid var(--line);border-radius:10px;max-height:240px;overflow:auto;background:var(--bg)}
.ment{display:grid;grid-template-columns:auto auto 1fr;gap:4px 10px;padding:7px 12px;border-top:1px solid var(--line);cursor:pointer;align-items:center}
.ment:first-child{border-top:0}
.ment.on{background:var(--accent-soft)}
.ment input{accent-color:var(--accent)}
.ment .mtx{grid-column:2/4;font:12px/1.5 "JetBrains Mono",ui-monospace,Consolas,monospace;color:var(--ink);word-break:break-word}
.rng{display:flex;gap:8px;align-items:center}
.rng .num{width:90px}
.checks{display:flex;flex-direction:column;gap:6px;margin:10px 0}
.plain-ta{width:100%;border:1px solid var(--line2);background:var(--bg);color:var(--ink);border-radius:10px;padding:10px 12px;font:12px/1.6 "JetBrains Mono",ui-monospace,Consolas,monospace;resize:vertical}
.btn.primary.danger{background:var(--bad);border-color:var(--bad);color:#fff}
.legend3 .rv{font-size:11.5px}

.lt .mcol{min-width:150px}
.lt .mcol code{white-space:nowrap}
.lt .mlab{font-weight:600;margin-top:2px}
.ftable .frow{grid-template-columns:minmax(120px,1.2fr) 80px 40px minmax(160px,2fr) 40px 56px;min-width:520px}
.ftable{max-height:400px}
.ftable .frow{grid-template-columns:minmax(170px,1.4fr) 84px 40px minmax(170px,2fr) 40px 56px;min-width:560px}
.ftable .fname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ftable .frow.head{position:sticky;top:0;z-index:1}


/* ============ v3: shared blocks, field sync, Call 1 -> Call 2 ============ */
mark.tk-b{background:var(--blk-bg);box-shadow:0 0 0 1px var(--blk-line)}
.chip.b{background:var(--blk-bg);color:var(--blk)}
.rv.blk{background:var(--blk-bg);border-radius:4px;box-shadow:0 0 0 1px var(--blk-line)}
.badge.blk{background:var(--blk-bg);color:var(--blk);border-color:transparent}
.btn.blk,.sel.blk{border-color:var(--blk-line);color:var(--blk)}
.btn.blk:hover{border-color:var(--blk)}
.btn.danger{border-color:var(--bad);color:var(--bad)}
.btn.danger.arm{background:var(--bad);color:#fff}
.cell.isblk{border-color:var(--blk-line);box-shadow:inset 3px 0 0 var(--blk)}
.blk-banner{display:flex;gap:10px;align-items:flex-start;background:var(--blk-bg);color:var(--blk);border-top:1px solid var(--blk-line);padding:9px 12px;font-size:12.5px}
.blk-banner>div:first-of-type{flex:1;min-width:0}
.blk-banner code{background:transparent;border:0;padding:0;color:inherit;font-weight:700;word-break:break-all}
.blk-banner .bb-a{display:flex;gap:6px;flex:none;flex-wrap:wrap;justify-content:flex-end}
.blk-banner .bprob{margin-top:4px;color:var(--warn)}
.ed.blk{background:color-mix(in srgb,var(--blk-bg) 38%,var(--bg))}
.varsline .chip.b{word-break:break-all}
.bprob .errline{margin:4px 0}
/* notices about fields typed in a prompt */
.cprop{display:flex;flex-direction:column;gap:5px;padding:6px 10px 8px;border-top:1px dashed var(--line)}
.cprop[hidden]{display:none}
.cprop.open{padding:0;border:0;margin:6px 0}
.cp{display:flex;align-items:center;gap:8px;font-size:12.5px;border-radius:8px;padding:5px 9px;background:var(--panel2);border:1px solid var(--line)}
.cp>div{flex:1;min-width:0}
.cp.add{background:var(--ok-bg);border-color:transparent;color:var(--ok)}
.cp.fill{background:var(--slot-bg);border-color:transparent;color:var(--slot)}
.cp.warn{background:var(--warn-bg);border-color:transparent;color:var(--warn)}
.cp .btn{flex:none}
.cp code{background:transparent;border:0;padding:0;font-weight:700}
.syncp{border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--panel);margin-bottom:8px}
.syncp .cprop.open{margin:6px 0 0}
/* Call 1 output -> Call 2 */
.ftable.xc .frow{grid-template-columns:minmax(150px,1.3fr) 84px 40px minmax(150px,1.6fr) minmax(150px,1.5fr) 56px;min-width:660px}
.xtable{border:1px solid var(--line);border-radius:10px;background:var(--panel);max-height:360px;overflow:auto}
.xrow{display:grid;grid-template-columns:minmax(170px,1.2fr) minmax(200px,2fr) 130px;gap:8px;align-items:center;padding:5px 10px;border-top:1px solid var(--line);font-size:13px}
.xrow:first-child{border-top:0}
.xrow.unused{background:var(--warn-bg)}
.xn code{background:transparent;border:0;padding:0;font-weight:600}
.xa{text-align:right}
.xpick{display:flex;flex-direction:column;gap:6px;margin:6px 0}
.xp{display:flex;align-items:center;gap:10px;justify-content:space-between;border:1px solid var(--line);border-radius:8px;padding:6px 10px;background:var(--panel)}
.xp.on{border-color:var(--line2);background:var(--panel2)}
.xp .chk{flex-wrap:wrap}
.xref{border:1px dashed var(--line2);border-radius:10px;padding:8px 10px;margin:10px 0;display:flex;flex-direction:column;gap:6px}
/* share modal */
.membs{display:flex;flex-direction:column;gap:6px;margin:6px 0 10px;max-height:300px;overflow:auto}
.memb-w{border:1px solid var(--line);border-radius:8px;background:var(--panel)}
.memb{display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:pointer;flex-wrap:wrap}
.memb.on{background:var(--panel2)}
.memb input{accent-color:var(--accent)}
.memb-d{padding:0 10px 8px}
.memb-d summary{cursor:pointer;font-size:12px;color:var(--muted)}
.memb-d .diff{margin-top:4px;border:1px solid var(--line);border-radius:8px;max-height:220px}
/* library */
.modal.xl{width:min(1080px,100%)}
.libtabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:0 0 12px}
.lib{display:grid;grid-template-columns:minmax(240px,300px) minmax(0,1fr);gap:16px;align-items:start}
.lib-l{display:flex;flex-direction:column;gap:6px;max-height:62vh;overflow:auto;padding-right:4px}
.lib-h{font:600 11.5px "JetBrains Mono",monospace;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:8px 2px 2px}
.lib-i{text-align:left;border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:8px 10px;display:flex;flex-direction:column;gap:2px}
.lib-i.on{border-color:var(--blk);background:var(--blk-bg)}
.lib-i code{background:transparent;border:0;padding:0;font-size:12px;word-break:break-all;font-weight:600}
.lib-r{min-width:0;display:flex;flex-direction:column;gap:8px}
.lib-dh .fld{display:flex;flex-direction:column;gap:4px}
.lib-acts{display:flex;gap:8px;align-items:center;margin-top:6px;flex-wrap:wrap}
.grp,.sug{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:8px 0;background:var(--panel)}
.grp-h,.sug-h{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:6px}
.grp-a{display:flex;gap:8px;align-items:center;margin-top:8px;flex-wrap:wrap}
.grp.new .inp{max-width:260px}
.sug .ci-p{margin-top:4px;font-size:12.5px;color:var(--muted)}
.rail-lib{flex:none;padding:8px 12px 0;border-top:1px solid var(--line)}
.libbtn{display:flex;gap:10px;align-items:center;width:100%;text-align:left;border:1px solid var(--blk-line);background:var(--blk-bg);color:var(--blk);border-radius:10px;padding:8px 10px}
.libbtn span{display:flex;flex-direction:column;min-width:0}
.libbtn small{color:var(--muted);font-size:11.5px;line-height:1.35}
.libbtn:hover{border-color:var(--blk)}
.toast.act{pointer-events:auto}
.tbtn{border:0;border-radius:99px;background:var(--bg);color:var(--ink);font:inherit;font-weight:700;padding:1px 10px;margin-left:8px}
@media (max-width:900px){
  .lib{grid-template-columns:1fr}
  .lib-l{max-height:200px}
  .xrow{grid-template-columns:1fr;gap:2px}
  .xa{text-align:left}
  .blk-banner{flex-direction:column}
}
.xrow{grid-template-columns:minmax(230px,1.3fr) minmax(200px,2fr) 140px}
.xn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.xst{min-width:0}

/* ============ v4: Supabase storage, delete a prompt ============ */
.sbchip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:99px;padding:2px 12px 2px 9px;font-size:12.5px;font-weight:600;background:var(--panel);color:var(--ink)}
.sbchip .ic{color:var(--muted);width:14px;height:14px}
.sbchip .dot{margin-right:0}
.sbchip:hover{border-color:var(--accent)}
.sbchip.bad{background:var(--bad-bg);color:var(--bad);border-color:transparent}
.sbchip.info{background:var(--slot-bg);color:var(--slot);border-color:transparent}
.sbchip.dirty,.sbchip.run{background:var(--warn-bg);color:var(--warn);border-color:transparent}
.badge.info{background:var(--slot-bg);color:var(--slot);border-color:transparent}
.btn.dangert{color:var(--bad)}
.btn.dangert:hover{border-color:var(--bad);background:var(--bad-bg)}
.pblock.dis{opacity:.55}
.chk.off{opacity:.5;cursor:not-allowed}
.flow3{display:grid;grid-template-columns:1fr auto 1fr auto 1fr;gap:8px;align-items:stretch;margin:6px 0 12px}
.flow3 .fb{border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:8px 10px;display:flex;flex-direction:column;gap:3px;font-size:12.5px}
.flow3 .fb b{font-size:13px}
.flow3 .fb span{color:var(--muted)}
.flow3 .fb em{font-style:normal;color:var(--accent-text);font-weight:600;margin-top:auto}
.flow3 .fa{align-self:center;color:var(--muted);font-size:18px}
.storebar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0}
.sbt{max-height:340px;margin:6px 0 8px}
.sbt .lt{min-width:760px}
.sbk{max-width:280px;word-break:break-all;font-size:12px}
.sbd{margin:8px 0}
.sbd summary{cursor:pointer;font-weight:600;font-size:13px}
.sbd .pv-pre{margin:6px 0}
@media (max-width:760px){.flow3{grid-template-columns:1fr}.flow3 .fa{transform:rotate(90deg);justify-self:center}}

/* ============ formal page ============ */
a.brand{text-decoration:none;color:inherit}
a.brand:hover{color:var(--accent-text)}
.empty.err{display:flex;gap:12px;align-items:center;justify-content:center;color:var(--bad);flex-wrap:wrap}
.empty .ic.spin{margin-right:4px}
#at-stamp{margin-left:auto}
.rail-ft{align-items:center}

/* ============ admin only, tour, guide link ============ */
/* signed in but not an admin: one centred notice, no list and no panels */
#robar{padding:7px 16px;font-size:13px;background:var(--warn-bg, #f6e7c9);color:var(--warn, #6b4a10);border-bottom:1px solid var(--line, #d8c9b3)}
body.ro .main textarea,body.ro .main input[type=text]{cursor:default}
.app.denied{grid-template-columns:minmax(0,1fr)}
.app.denied .rail,.app.denied .side{display:none}
.empty.denied{display:flex;gap:14px;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--ink);text-align:left;padding:90px 24px}
.empty.denied .ic{width:26px;height:26px;color:var(--muted)}
/* the topbar has a 导览 button, so the tour's own floating button (bottom right, over the side panel) stays away */
body .tour-fab{display:none}
@media (max-width:600px){ .themeseg{display:none} }   /* the topbar has to fit 导览 + 使用说明 + 退出 on a phone; the theme follows the system there */
/* while the tour runs, the template drawer (narrow screens) must be in place the moment the step asks for it, or the spotlight lands where it is sliding from */
body.touring .rail{transition:none}

/* ---- the values of an enum field ---- */
.enumed{margin:10px 0 4px}
.enrow{display:flex;gap:12px;align-items:flex-start;padding:7px 0;border-top:1px solid var(--line)}
.enrow>code{flex:none;min-width:170px;max-width:240px;word-break:break-all}
.enrow .chiprow{flex:1}
.enrow .wl .x{margin-left:4px}
.enum-new{width:150px}

/* ---- field manager ---- */
.rail-lib{display:flex;flex-direction:column;gap:8px;padding-bottom:8px}
.libbtn.fm{border-color:var(--line2);background:var(--panel2);color:var(--ink)}
.libbtn.fm:hover{border-color:var(--accent)}
.libbtn.fm .ic{color:var(--muted);flex:none}
.fmt{max-height:56vh;margin:8px 0}
.fmt .lt{min-width:760px}
.fm-n code{white-space:nowrap}

/* ---- 中 / EN slide switch (top right) ---- */
.langsw{--p:0;position:relative;flex:none;display:grid;grid-template-columns:1fr 1fr;align-items:center;width:68px;height:28px;padding:2px;border:1px solid var(--line2);border-radius:20px;background:var(--bg);color:var(--muted);font:700 12px "Source Sans 3","Noto Sans SC",sans-serif;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
.langsw[aria-checked="true"]{--p:1}
.langsw span{position:relative;z-index:1;text-align:center;line-height:22px;transition:color .18s}
.langsw .knob{position:absolute;top:2px;left:2px;width:calc(50% - 2px);height:22px;border-radius:20px;background:var(--accent);box-shadow:0 1px 3px rgba(0,0,0,.25);transform:translateX(calc(var(--p) * 100%));transition:transform .18s ease}
.langsw.dragging{cursor:grabbing}
.langsw.dragging .knob{transition:none}
.langsw:not([aria-checked="true"]) .lz,.langsw[aria-checked="true"] .le{color:var(--accent-ink)}
.langsw:hover{border-color:var(--accent)}
.langsw:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* a phone: the topbar has to fit the title, Tour, Guide, the 中 / EN switch and Sign out in 375px, in either language */
@media (max-width:600px){
  .topbar{gap:6px;padding:0 10px}
  .topbar .btn.sm{padding:3px 6px;font-size:12px}
  .ptitle{font-size:14.5px;white-space:nowrap}
  .langsw{width:58px;height:26px}
  .langsw span{line-height:20px;font-size:11.5px}
  .langsw .knob{height:20px}
}

/* the fixed words of index.html are in Chinese until 01-i18n.js has put them in the right language: do not show them in the wrong one meanwhile */
body:not(.i18n-ready) .topbar .btn,body:not(.i18n-ready) .topbar .seg button,body:not(.i18n-ready) .topbar .langsw{visibility:hidden}
