:root{--bg:#1e2118;--panel:#2a2e22;--panel-hi:#343829;--line:#5c614a;--line-hi:#8a9068;--ink:#e8e3d3;--muted:#9a9683;--paper:#d9d2bd;--paper-ink:#22241b;--enemy:#a8453c;--enemy-dim:#4a2420;--ally:#6d8a4f;--ally-dim:#2c3a22;--gold:#c8a54a;--slot-bg:var(--panel)}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{overscroll-behavior:none;height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:-apple-system,Helvetica Neue,PingFang TC,Noto Sans TC,sans-serif;font-size:14px;line-height:1.4}#app{max-width:480px;min-height:100%;padding:env(safe-area-inset-top) 8px env(safe-area-inset-bottom);flex-direction:column;gap:6px;margin:0 auto;display:flex}.topbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;padding:6px 2px;display:flex}.topbar .title{font-weight:700}.topbar .build{color:var(--muted);font-variant-numeric:tabular-nums;font-size:10px}.hq{border:1px solid var(--line);background:var(--slot-bg);justify-content:space-between;align-items:center;padding:4px 8px;display:flex}.hq.enemy{border-color:var(--enemy);color:var(--enemy)}.hq.ally{border-color:var(--ally);color:var(--ally)}.hq b{font-variant-numeric:tabular-nums}.board{flex-direction:column;gap:4px;display:flex}.rowlabel{color:var(--muted);letter-spacing:1px;font-size:10px}.row{grid-template-columns:repeat(3,1fr);gap:4px;display:grid}.slot{border:1px dashed var(--line);background:var(--slot-bg);min-height:62px;color:var(--muted);justify-content:center;align-items:center;font-size:11px;display:flex}.frontline{border-top:2px solid var(--line);margin:4px 0}.status{border:1px solid var(--line);background:var(--slot-bg);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:10px;padding:6px 8px;display:flex}.hand{gap:4px;min-height:90px;padding-bottom:4px;display:flex;overflow-x:auto}.card{border:1px solid var(--line);background:var(--slot-bg);flex:0 0 76px;padding:4px;font-size:11px}.note{color:var(--muted);padding:4px 2px 12px;font-size:11px}.slot.filled{border-style:solid;padding:0}.slot.drop{border:2px solid var(--ally);color:var(--ally);font-weight:700}.unit{text-align:left;width:100%;height:100%;color:var(--ink);flex-direction:column;gap:1px;padding:3px 4px;font-size:11px;display:flex}.unit.ally{background:#f1f7f2}.unit.selected{outline:2px solid var(--ink);outline-offset:-2px}.u-name{font-size:11px;font-weight:700;line-height:1.2}.u-stats{font-variant-numeric:tabular-nums;gap:5px;display:flex}.u-kw{color:var(--muted);font-size:9px}.u-badges{flex-wrap:wrap;gap:2px;display:flex}.u-badges i{border:1px solid var(--line);background:#fff;padding:0 2px;font-size:9px;font-style:normal}:root{--card-w:88px}.hand{min-height:calc(var(--card-w) * 1.4 + 10px);scroll-snap-type:x proximity;gap:5px;padding:2px 0 6px;display:flex;overflow-x:auto}.card{flex:0 0 var(--card-w);width:var(--card-w);aspect-ratio:5/7;scroll-snap-align:start;border:1px solid var(--line);background:var(--slot-bg);flex-direction:column;gap:2px;padding:4px;display:flex;overflow:hidden}.card.selected{outline:2px solid var(--ink);outline-offset:-2px}.c-head{align-items:flex-start;gap:3px;display:flex}.c-cost{text-align:center;border:1px solid var(--line);flex:none;min-width:15px;font-size:11px;line-height:14px}.c-name{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:11px;font-weight:700;line-height:1.15;display:-webkit-box;overflow:hidden}.c-stats{font-variant-numeric:tabular-nums;border-top:1px solid #ddd;padding-top:2px;font-size:10px}.c-kw{color:var(--muted);font-size:9px}.c-text{color:var(--muted);flex:1;font-size:9px;line-height:1.25;overflow:hidden}.actions{gap:6px;display:flex}button{font:inherit;border:1px solid var(--line);background:var(--ink);color:#fff;flex:1;padding:10px;font-weight:700}button.ghost{color:var(--ink);background:#fff;flex:0 0 92px;font-weight:400}.msg{border:1px solid var(--enemy);color:var(--enemy);background:#fff;padding:5px 8px;font-size:12px}.result{border:2px solid var(--line);background:#fff;justify-content:space-between;align-items:center;gap:8px;padding:10px;font-weight:700;display:flex}.result.win{border-color:var(--ally);color:var(--ally)}.result.lose{border-color:var(--enemy);color:var(--enemy)}.result button{flex:0 0 96px}.log{border:1px solid var(--line);background:#fff;max-height:150px;margin-bottom:12px;padding:5px 8px;font-size:11px;overflow-y:auto}.log div{border-bottom:1px dotted #eee;padding:1px 0}.slot,.hq{position:relative}.unit.acting{outline:3px solid var(--ink);outline-offset:-3px;background:#fffbe6}.caption{border:1px solid var(--line);color:var(--muted);background:#fff;min-height:26px;padding:5px 8px;font-size:12px}.caption.live{color:var(--ink);border-color:var(--ink);background:#fffbe6;font-weight:700}.topbar select{font:inherit;border:1px solid var(--line);background:#fff;max-width:62%;padding:3px 4px;font-weight:700}#fxlayer{pointer-events:none;z-index:100;position:fixed;inset:0;overflow:hidden}#fxlayer>*{position:fixed}.fx-shot{border-radius:1px;top:0;left:0}.fx-burst{line-height:0}.fx-number{font-variant-numeric:tabular-nums;white-space:nowrap;background:#fff;border:2px solid;padding:1px 6px;font-size:17px;font-weight:700}.fx-number.status{font-size:13px}.fx-stamp{letter-spacing:2px;color:#fff;background:var(--ink);border:2px solid var(--ink);white-space:nowrap;padding:3px 10px;font-size:14px;font-weight:700}.fx-banner{letter-spacing:3px;color:#fff;background:var(--ink);border:2px solid var(--ink);white-space:nowrap;padding:9px 26px;font-size:19px;font-weight:700;top:32%;left:50%;transform:translate(-50%,-50%)}.unit.gone{opacity:.45}.topbar{gap:6px}button.mini{color:var(--ink);border:1px solid var(--line);background:#fff;flex:none;margin-left:auto;padding:2px 7px;font-size:15px}.screen{padding:10px 2px 24px}.screen h2{margin:4px 0;font-size:20px}.screen h3{margin:14px 0 6px;font-size:14px}.screen .sub{color:var(--muted);font-size:12px}.offer{justify-content:space-between;gap:8px;margin:8px 0 12px;display:flex}.offer .card.big{flex:1 1 0;width:auto;min-width:0;padding:6px}.offer .card.big .c-name{font-size:12px}.offer .card.big .c-stats{font-size:11px}.offer .card.big .c-text{font-size:10px}.records{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;margin:8px 0;font-size:11px}.records th,.records td{border:1px solid var(--line);text-align:center;background:#fff;padding:3px 4px}.records th{background:#ebe8e3}.decklist,.deckpanel{border:1px solid var(--line);background:#fff;flex-wrap:wrap;gap:4px 8px;margin-bottom:10px;padding:6px 8px;font-size:11px;display:flex}.deckpanel b{flex:0 0 100%}.slot.infiltrate{border:2px solid var(--enemy);color:var(--enemy);background:#fff4f4;font-weight:700}.picks{grid-template-columns:repeat(2,1fr);gap:5px;margin-bottom:10px;display:grid}.pick{border:1px solid var(--line);background:var(--slot-bg);min-height:46px;padding:4px 5px;font-size:11px;position:relative}.pick.has{border-color:var(--ink);background:#fffbe6;border-width:2px}.p-top{font-weight:700}.p-top b{text-align:center;border:1px solid var(--line);min-width:14px;margin-right:4px;font-size:10px;display:inline-block}.p-mid{color:var(--muted);font-size:9px}.p-count{background:var(--ink);color:#fff;border:none;flex:none;padding:1px 6px;font-size:11px;font-weight:700;position:absolute;bottom:3px;right:3px}.u-bar{background:#ddd8d2;border:1px solid #bbb4ac;height:5px;position:relative;overflow:visible}.u-fill{height:100%;display:block}.u-fill.ok{background:var(--ally)}.u-fill.warn{background:#b8860b}.u-fill.low{background:var(--enemy)}.u-morale{background:var(--ink);width:2px;height:9px;position:absolute;top:-2px}.fx-muzzle{line-height:0}.sub-actions button{padding:7px 4px;font-size:12px;font-weight:400}.sub-actions button.ghost{flex:1 1 0}.fx-number.skip{background:#f4f2ee;border-width:1px;font-size:11px;font-weight:400}.card.poor{opacity:.55}.card.poor .c-cost{color:var(--enemy);border-color:var(--enemy);border-width:2px}.c-warn{color:var(--enemy);border-bottom:1px solid var(--enemy);margin-bottom:2px;font-size:9px;font-weight:700}.unit{position:relative}.u-mark{color:#6a4a9a;opacity:.85;position:absolute;top:2px;right:2px}.c-cost{align-items:baseline;gap:1px;padding:0 2px;display:inline-flex}.c-cost i{opacity:.7;font-size:8px;font-style:normal}.supply .pip{letter-spacing:-1px;font-style:normal}.supply .pip.on{color:var(--ink)}.supply .pip.spend{color:var(--enemy)}.supply .pip.off{color:#c4bdb3}.rules h3{border-bottom:1px solid var(--line);margin:16px 0 4px;padding-bottom:3px;font-size:14px}.rules p{margin:5px 0;font-size:13px;line-height:1.6}.rules ul{margin:5px 0;padding-left:20px;font-size:13px;line-height:1.7}.rules li{margin-bottom:2px}.supplybar{border:2px solid var(--ink);font-variant-numeric:tabular-nums;background:#fff;align-items:center;gap:8px;padding:5px 9px;display:flex}.s-label{font-weight:700}.s-pips{letter-spacing:1px;font-size:17px}.s-num{margin-left:auto;font-size:13px}.s-num b{font-size:16px}.s-num b.after{color:var(--enemy)}.s-used{color:var(--muted);font-size:11px}body{background:var(--bg);color:var(--ink)}#app{gap:7px}.topbar{border-bottom:1px solid var(--line);padding:7px 2px}.topbar select{background:var(--panel-hi);color:var(--ink);border:1px solid var(--line-hi)}.topbar .title{color:var(--ink)}.topbar .build{color:var(--muted)}button.mini{background:var(--panel-hi);color:var(--ink);border-color:var(--line-hi)}.hq{border:1px solid var(--line-hi);padding:7px 10px;font-size:15px;font-weight:700;position:relative}.hq:before{content:"★";margin-right:6px;font-size:13px}.hq.enemy{background:linear-gradient(180deg, #5a2822, var(--enemy-dim));border-color:var(--enemy);color:#f0d5d0}.hq.ally{background:linear-gradient(180deg, #3a4a2a, var(--ally-dim));border-color:var(--ally);color:#dfe8ce}.hq b{font-size:17px}.caption{background:var(--panel);border-color:var(--line);color:var(--muted)}.caption.live{border-color:var(--gold);color:var(--gold);background:#3d3a1f}.rowlabel{color:var(--muted);font-size:11px}.slot{border:1px dashed var(--line);color:var(--muted);background:0 0;flex-direction:column;gap:2px;min-height:74px}.slot.filled{border-style:solid;border-color:var(--line-hi);background:var(--panel)}.slot.drop{border:2px dashed var(--ally);color:var(--ally);background:#26301c}.slot.infiltrate{border:2px dashed var(--enemy);color:var(--enemy);background:#33201d}.slot .plus{opacity:.6;font-size:17px;line-height:1}.frontline{border-top:2px solid var(--line-hi)}.unit{color:var(--paper-ink);background:linear-gradient(#ded7c2,#c9c1a8);padding:3px 4px}.unit.enemy{background:linear-gradient(#d8cdc2,#c3b6a8)}.unit.acting{outline:3px solid var(--gold);background:#efe6c4}.u-name{font-size:11px}.u-kw{color:#6b6450}.u-badges i{background:#fff9;border-color:#8a8266}.u-bar{background:#a9a08a;border-color:#7d7660}.supplybar{background:linear-gradient(180deg, var(--panel-hi), var(--panel));border:1px solid var(--line-hi);color:var(--ink)}.supply .pip.on,.s-pips .pip.on,.s-pips{color:var(--gold)}.s-num b{color:var(--ink)}.status{background:var(--panel);border:1px solid var(--line);color:var(--ink);font-size:12px}button{color:var(--ink);border:1px solid var(--line-hi);letter-spacing:1px;background:linear-gradient(#4a5038,#333a26)}button.ghost{background:var(--panel);color:var(--ink);border-color:var(--line)}.sub-actions button.ghost{font-size:11px}.msg{background:var(--panel);border-color:var(--enemy);color:#e8b0a8}.msg.hint{border-color:var(--gold);color:var(--gold);background:#3d3a1f}.card{color:var(--paper-ink);background:linear-gradient(#ded7c2,#cdc5ac);border:1px solid #7d7660}.card.selected{outline:2px solid var(--gold)}.c-cost{color:var(--gold);border-color:var(--gold);background:#33381f}.card.poor .c-cost{color:#e8b0a8;border-color:var(--enemy);background:#4a2420}.c-stats{border-top-color:#a9a08a}.c-kw,.c-text{color:#6b6450}.c-warn{color:#8a3a30;border-bottom-color:#8a3a30}.log{background:var(--panel);border-color:var(--line);color:var(--ink)}.log div{border-bottom-color:#3c4030}.screen h2{color:var(--ink)}.screen h2.win{color:var(--ally)}.screen h2.lose{color:var(--enemy)}.screen .sub{color:var(--muted)}.rules h3{border-bottom-color:var(--line)}.records th{background:var(--panel-hi);color:var(--ink)}.records td{background:var(--panel);color:var(--ink)}.records th,.records td{border-color:var(--line)}.decklist,.deckpanel,.pick{background:var(--panel);border-color:var(--line);color:var(--ink)}.pick.has{border-color:var(--gold);background:#3d3a1f}.p-top b{border-color:var(--line-hi)}.p-mid{color:var(--muted)}.p-count{background:var(--gold);color:#22241b}.u-stats{align-items:stretch;gap:3px}.u-stats .stat{background:#ffffff80;border:1px solid #8a8266;align-items:baseline;gap:2px;padding:0 3px;font-size:11px;font-weight:700;line-height:15px;display:inline-flex}.u-stats .stat i{opacity:.65;font-size:8px;font-style:normal;font-weight:400}.u-stats .hp{margin-left:auto}.u-stats .atk{border-color:#8a5a3a}.u-stats .arm{border-color:#5a6a8a}.field{margin:8px 0;display:block}.field span{color:var(--muted);margin-bottom:3px;font-size:12px;display:block}.field input{width:100%;font:inherit;background:var(--paper);color:var(--paper-ink);border:1px solid var(--line-hi);padding:9px 8px;font-size:14px}.field input::placeholder{color:#8a8266;font-size:12px}textarea#csv{background:var(--panel);width:100%;color:var(--muted);border:1px solid var(--line);margin-bottom:6px;padding:6px;font-family:ui-monospace,Menlo,monospace;font-size:10px}button.danger{color:#e8b0a8;border-color:var(--enemy)}.sub-actions{flex-wrap:wrap}.sub-actions button.ghost{flex:30%;min-width:88px}.records tr.bot td{opacity:.5;font-style:italic}
