:root{
  --ground:#101319; --raised:#191D26; --sunk:#0B0D11; --line:#2A313D; --line-soft:#20262F;
  --text:#E7E1D4; --text-mid:#BDB7AC; --muted:#8E887D;
  --lamp:#D6A03F; --lamp-dim:#8C6B2C; --cinnabar:#D4584B; --jade:#6FA894; --blue:#7DA3CC;
  --ok:#6FA894; --bad:#D4584B;
  --r:3px;
  --safe-b: env(safe-area-inset-bottom, 0px);
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
html,body{margin:0; padding:0}
body{
  background:var(--ground); color:var(--text);
  font-family:"Noto Serif SC",Songti SC,serif; font-size:16px; line-height:1.7;
  -webkit-font-smoothing:antialiased;
  overscroll-behavior-y:none;
}
button,input,select{font:inherit; color:inherit}
h1,h2,h3{margin:0; font-weight:400}
.mono,.num{font-family:"JetBrains Mono",monospace; font-variant-numeric:tabular-nums}
.muted{color:var(--muted)} .sm{font-size:.8rem} .warn{color:var(--cinnabar)}
.row{display:flex; align-items:center}
.row.gap{gap:8px; flex-wrap:wrap}
.row.big>*{flex:1}

/* ---------- boot ---------- */
.boot{min-height:100dvh; display:grid; place-content:center; text-align:center; gap:18px}
.boot-mark{font-family:"ZCOOL XiaoWei",serif; font-size:4rem; letter-spacing:.18em; color:var(--lamp)}
.boot p{color:var(--muted); margin:0; font-size:.9rem}

/* ---------- topbar ---------- */
.topbar{
  position:sticky; top:0; z-index:20; display:flex; justify-content:space-between; align-items:center;
  padding:12px 16px; background:rgba(16,19,25,.94); backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line-soft);
}
.tb-name{font-family:"ZCOOL XiaoWei",serif; font-size:1.35rem; letter-spacing:.06em}
.tb-room{
  font-family:"JetBrains Mono",monospace; font-size:.78rem; margin-left:10px;
  border:1px solid var(--lamp); color:var(--lamp); padding:1px 6px; border-radius:2px;
}
.tag{
  font-family:"Noto Sans SC",sans-serif; font-size:.7rem; letter-spacing:.1em;
  color:var(--muted); border:1px solid var(--line); padding:3px 8px; border-radius:2px;
}
.tag-dead{color:var(--cinnabar); border-color:var(--cinnabar)}

/* ---------- layout ---------- */
main{padding:14px 14px calc(84px + var(--safe-b)); max-width:640px; margin:0 auto}
.card{
  background:var(--raised); border:1px solid var(--line-soft); border-radius:var(--r);
  padding:15px 16px; margin:0 0 12px;
}
.card>h2{
  font-family:"Noto Sans SC",sans-serif; font-weight:500; font-size:.82rem; letter-spacing:.14em;
  color:var(--muted); margin:0 0 10px; display:flex; gap:8px; align-items:baseline;
}
.card>h2.warn{color:var(--cinnabar)}

.ch-head h1{font-family:"ZCOOL XiaoWei",serif; font-size:2.1rem; letter-spacing:.08em; line-height:1.2}
.ch-head p{margin:2px 0 0; color:var(--muted); font-size:.9rem}
.ch-tag{margin:10px 0 0; color:var(--lamp); font-size:.95rem; font-family:"ZCOOL XiaoWei",serif}
.kv{margin:14px 0 0; display:grid; grid-template-columns:auto 1fr; gap:4px 14px; font-size:.9rem}
.kv dt{color:var(--muted); font-family:"Noto Sans SC",sans-serif; font-size:.75rem; letter-spacing:.1em; white-space:nowrap}
.kv dd{margin:0}
.tasks{margin:0; padding-left:1.4em; font-size:.94rem}
.tasks li{margin:0 0 8px}
.tasks li::marker{color:var(--lamp)}
.score{width:100%; border-collapse:collapse; font-size:.88rem}
.score td{padding:6px 0; border-bottom:1px solid var(--line-soft)}
.score td:last-child{text-align:right; font-family:"JetBrains Mono",monospace; color:var(--lamp)}
.score tr:last-child td{border-bottom:0}
.map{width:100%; height:auto; border-radius:2px; display:block; border:1px solid var(--line)}

/* ---------- wallet ---------- */
.wallet .w-top{display:flex; justify-content:space-between; align-items:flex-start; gap:12px}
.w-total{font-family:"JetBrains Mono",monospace; font-size:2.6rem; line-height:1.1; color:var(--lamp); font-weight:600}
.w-total i{font-style:normal; font-size:.9rem; color:var(--muted); margin-left:4px; font-family:"Noto Serif SC",serif}
.w-meta{text-align:right; font-size:.78rem; color:var(--muted); font-family:"JetBrains Mono",monospace; line-height:1.8}
.w-meta .avail{color:var(--text-mid)}

/* ---------- buttons ---------- */
.btn{
  appearance:none; border:1px solid var(--line); background:var(--sunk); color:var(--text);
  padding:12px 14px; border-radius:2px; cursor:pointer; font-family:"Noto Sans SC",sans-serif;
  font-size:.9rem; letter-spacing:.06em; transition:border-color .15s,background .15s;
}
.btn:active{background:#000}
.btn.primary{border-color:var(--lamp); color:var(--lamp); font-size:1.05rem; padding:16px}
.btn.danger{border-color:var(--cinnabar); color:var(--cinnabar)}
.btn.ok{border-color:var(--jade); color:var(--jade)}
.btn.ghost{background:transparent; font-size:.78rem; padding:8px 10px; color:var(--muted)}
.btn.sm{font-size:.78rem; padding:8px 10px}
.btn:disabled{opacity:.4; cursor:not-allowed}
.btn.block{width:100%}

/* ---------- items / ledger ---------- */
.items{display:flex; flex-direction:column; gap:8px}
.item{
  border:1px solid var(--line); border-left:3px solid var(--lamp); border-radius:0 2px 2px 0;
  padding:10px 12px; background:var(--sunk);
}
.item.arms{border-left-color:var(--blue)}
.item.ring{border-left-color:var(--jade)}
.item b{display:block; font-size:.98rem}
.item span{display:block; font-size:.76rem; color:var(--muted); margin-top:3px; line-height:1.6}
.empty{color:var(--muted); font-size:.85rem; padding:6px 0}

.ledger{display:flex; flex-direction:column; gap:0}
.lg{display:flex; gap:10px; padding:8px 0; border-bottom:1px solid var(--line-soft); font-size:.82rem}
.ledger .lg:last-child{border-bottom:0}
.lg time{font-family:"JetBrains Mono",monospace; color:var(--muted); font-size:.72rem; flex:none; width:44px}
.lg .lg-b{flex:1}
.lg .amt{font-family:"JetBrains Mono",monospace; flex:none}
.lg .in{color:var(--jade)} .lg .out{color:var(--cinnabar)}
.lg.undone{opacity:.4; text-decoration:line-through}

/* ---------- notice ---------- */
.notice{
  border:1px solid var(--line); border-left:3px solid var(--lamp); background:var(--raised);
  padding:12px 14px; font-size:.85rem; line-height:1.75; margin:0 0 12px; border-radius:0 2px 2px 0;
}
.notice b{color:var(--cinnabar)}

/* ---------- clue ---------- */
.clue{
  position:relative; border:1px solid var(--line); border-radius:2px; margin:0 0 10px;
  background:var(--raised); overflow:hidden;
}
.clue-h{display:flex; justify-content:space-between; align-items:center; padding:11px 14px; gap:10px}
.clue-h b{font-family:"Noto Sans SC",sans-serif; font-weight:500; font-size:.9rem}
.clue-h em{font-style:normal; font-size:.68rem; color:var(--muted); font-family:"JetBrains Mono",monospace}
.clue-g{
  font-family:"Noto Sans SC",sans-serif; font-size:.64rem; letter-spacing:.12em; padding:2px 6px;
  border-radius:2px; border:1px solid var(--line); color:var(--muted); flex:none;
}
.clue-g.morse{border-color:var(--lamp-dim); color:var(--lamp)}
.clue-g.room{border-color:var(--blue); color:var(--blue)}
.clue-g.mo{border-color:var(--jade); color:var(--jade)}
.clue-g.scene{border-color:var(--cinnabar); color:var(--cinnabar)}
.clue-g.fuben{border-color:var(--text-mid); color:var(--text-mid)}
.hold{
  display:block; width:100%; text-align:center; border:0; border-top:1px solid var(--line-soft);
  background:var(--sunk); color:var(--muted); padding:14px; font-family:"Noto Sans SC",sans-serif;
  font-size:.82rem; letter-spacing:.14em; cursor:pointer; user-select:none; -webkit-user-select:none;
}
.hold:active{color:var(--lamp)}
.clue-body{
  display:none; padding:16px 18px 20px; border-top:1px solid var(--line-soft);
  background:#15181F;
  font-size:1.06rem; line-height:2.05; letter-spacing:.02em;
}
.clue.open .clue-body{display:block}
.clue.open .hold{display:none}
.clue-body .letter{
  margin-top:14px; padding:14px 16px; background:var(--sunk); border:1px dashed var(--line);
  white-space:pre-wrap; font-size:.95rem; line-height:1.9;
}
.clue-body .shared{margin-top:12px; font-size:.75rem; color:var(--muted); font-family:"Noto Sans SC",sans-serif}

/* ---------- auction ---------- */
.lot{
  display:flex; align-items:center; gap:12px; border:1px solid var(--line); border-radius:2px;
  padding:11px 13px; margin:0 0 8px; background:var(--raised);
}
.lot .no{
  font-family:"JetBrains Mono",monospace; font-size:1.05rem; color:var(--lamp); flex:none; width:34px;
}
.lot .nm{flex:1; font-size:.96rem}
.lot .nm span{display:block; font-size:.72rem; color:var(--muted)}
.lot .bidv{font-family:"JetBrains Mono",monospace; font-size:.9rem; color:var(--jade); flex:none}
.lot.bidded{border-color:var(--jade)}
.lot.ring{border-color:var(--jade); background:#15201C}

/* ---------- sheet ---------- */
.sheet{position:fixed; inset:0; z-index:60; display:flex; align-items:flex-end}
.sheet-bg{position:absolute; inset:0; background:rgba(0,0,0,.72)}
.sheet-body{
  position:relative; width:100%; max-width:640px; margin:0 auto; background:var(--raised);
  border-top:1px solid var(--lamp); border-radius:6px 6px 0 0;
  padding:22px 18px calc(26px + var(--safe-b)); max-height:88dvh; overflow-y:auto;
}
.sheet-x{
  position:absolute; top:8px; right:12px; background:none; border:0; color:var(--muted);
  font-size:1.9rem; line-height:1; padding:4px 8px; cursor:pointer;
}
.sheet h2{font-family:"ZCOOL XiaoWei",serif; font-size:1.5rem; letter-spacing:.06em; margin:0 0 4px}
.sheet .sub{color:var(--muted); font-size:.84rem; margin:0 0 18px}

.bigcode{
  font-family:"JetBrains Mono",monospace; font-size:3.2rem; letter-spacing:.22em; text-align:center;
  color:var(--lamp); background:var(--sunk); border:1px solid var(--lamp-dim); border-radius:3px;
  padding:20px 10px 18px; margin:0 0 10px; font-weight:600;
}
.codehint{text-align:center; color:var(--muted); font-size:.8rem; margin:0 0 18px}
.codehint b{color:var(--text-mid); font-family:"JetBrains Mono",monospace}

.field{margin:0 0 16px}
.field label{display:block; font-family:"Noto Sans SC",sans-serif; font-size:.74rem; letter-spacing:.12em; color:var(--muted); margin-bottom:7px}
.field input{
  width:100%; background:var(--sunk); border:1px solid var(--line); border-radius:2px;
  padding:14px; font-family:"JetBrains Mono",monospace; font-size:1.3rem; text-align:center; letter-spacing:.18em;
}
.field input:focus{outline:0; border-color:var(--lamp)}
.picklist{display:flex; flex-direction:column; gap:8px; margin:0 0 16px}
.pick{
  display:flex; align-items:center; gap:11px; border:1px solid var(--line); border-radius:2px;
  padding:11px 13px; background:var(--sunk); cursor:pointer;
}
.pick.on{border-color:var(--lamp); background:#1D1B14}
.pick .bx{width:18px; height:18px; border:1px solid var(--muted); border-radius:2px; flex:none; position:relative}
.pick.on .bx{border-color:var(--lamp); background:var(--lamp)}
.pick.on .bx::after{content:"✓"; position:absolute; inset:0; color:#12151C; font-size:.8rem; text-align:center; line-height:16px}
.pick .tx{flex:1; font-size:.92rem}
.pick .tx span{display:block; font-size:.72rem; color:var(--muted)}
.sum{
  display:flex; justify-content:space-between; align-items:baseline; padding:14px 0; margin:4px 0 16px;
  border-top:1px solid var(--line); border-bottom:1px solid var(--line);
}
.sum b{font-family:"JetBrains Mono",monospace; font-size:1.6rem; color:var(--lamp)}

.pend{border:1px solid var(--cinnabar); border-radius:2px; padding:13px 14px; margin:0 0 10px; background:#1C1614}
.pend .who{font-size:1.02rem; margin-bottom:4px}
.pend .what{font-family:"JetBrains Mono",monospace; color:var(--lamp); font-size:1.15rem; margin-bottom:3px}
.pend .it{font-size:.82rem; color:var(--text-mid)}
.pend .ttl{font-size:.72rem; color:var(--muted); font-family:"JetBrains Mono",monospace; margin-top:6px}
.pend .row{margin-top:11px; gap:8px}
.pend .row .btn{flex:1}

/* ---------- tabs ---------- */
.tabs{
  position:fixed; bottom:0; left:0; right:0; z-index:30; display:grid; grid-template-columns:repeat(4,1fr);
  background:rgba(11,13,17,.96); backdrop-filter:blur(10px); border-top:1px solid var(--line);
  padding-bottom:var(--safe-b);
}
.tabs button{
  background:none; border:0; padding:13px 4px 12px; cursor:pointer; color:var(--muted);
  font-family:"Noto Sans SC",sans-serif; position:relative;
}
.tabs button b{font-weight:400; font-size:.84rem; letter-spacing:.1em}
.tabs button.on{color:var(--lamp)}
.tabs button.on::before{content:""; position:absolute; top:0; left:22%; right:22%; height:2px; background:var(--lamp)}
.badge{
  position:absolute; top:8px; right:calc(50% - 26px); min-width:16px; height:16px; line-height:16px;
  background:var(--cinnabar); color:#fff; border-radius:8px; font-size:.64rem; font-style:normal;
  font-family:"JetBrains Mono",monospace; padding:0 4px;
}
.badge.dot{min-width:8px; width:8px; height:8px; padding:0; border-radius:50%}

/* ---------- toast ---------- */
.toast{
  position:fixed; left:50%; bottom:calc(96px + var(--safe-b)); transform:translateX(-50%);
  background:#000; border:1px solid var(--lamp); color:var(--text); padding:11px 18px; border-radius:3px;
  font-size:.88rem; z-index:80; max-width:86vw; text-align:center;
}
.toast.bad{border-color:var(--cinnabar); color:var(--cinnabar)}

@media(prefers-reduced-motion:reduce){*{transition:none!important; animation:none!important}}
