:root{--ink:#17140f;--paper:#f3ead8;--gold:#d9b26a;--muted:#a99a80;--line:#d9b26a38;--red:#b3261e;--w:min(88vw, 360px);--cell:calc(var(--w) / 4);color:var(--paper);background:var(--ink);-webkit-font-smoothing:antialiased;font-family:Noto Serif SC,Source Han Serif SC,Songti SC,STSong,SimSun,serif}*{box-sizing:border-box}body{background:radial-gradient(1200px 600px at 20% -10%, #b3261e2e, transparent 60%), radial-gradient(900px 500px at 110% 10%, #d9b26a1a, transparent 60%), var(--ink);min-height:100vh;margin:0}#app{max-width:1080px;margin:0 auto;padding:40px 20px 32px}.hidden{display:none!important}.masthead{text-align:center;margin-bottom:32px}.eyebrow{letter-spacing:.5em;color:var(--gold);margin:0;font-size:13px}h1{letter-spacing:.08em;margin:10px 0 12px;font-size:clamp(28px,5vw,42px)}.lede{max-width:560px;color:var(--muted);margin:0 auto;font-size:15px;line-height:1.8}.layout{grid-template-columns:auto minmax(0,1fr);align-items:start;gap:36px;display:grid}@media (width<=820px){.layout{grid-template-columns:1fr;justify-items:center}.panel{width:100%;max-width:520px}}.board-wrap{flex-direction:column;align-items:center;display:flex;position:relative}.frame{background:linear-gradient(145deg,#7a4e2a,#4a2d16);border-radius:14px;padding:12px;position:relative;box-shadow:0 30px 60px #0000008c,inset 0 1px #ffffff26,inset 0 -2px #0000004d}.exit-gap{bottom:0;left:calc(12px + var(--cell));width:calc(var(--cell) * 2);background:var(--ink);border-radius:0 0 4px 4px;height:12px;position:absolute;box-shadow:inset 0 3px 4px #0009}.exit-label{color:var(--gold);letter-spacing:.6em;margin:10px 0 0;font-size:13px}.grid{width:var(--w);height:calc(var(--w) * 1.25);background:repeating-linear-gradient(0deg, transparent 0 calc(var(--cell) - 1px), #0000002e calc(var(--cell) - 1px) var(--cell)), repeating-linear-gradient(90deg, transparent 0 calc(var(--cell) - 1px), #0000002e calc(var(--cell) - 1px) var(--cell)), linear-gradient(160deg, #2a2119, #1d1712);touch-action:none;-webkit-user-select:none;user-select:none;border-radius:6px;position:relative;box-shadow:inset 0 4px 12px #0009}.grid.editing{cursor:crosshair;outline:2px dashed var(--gold);outline-offset:4px}.piece{cursor:grab;padding:3px;transition:left .18s,top .18s,transform .6s,opacity .6s;position:absolute}.piece:active{cursor:grabbing}.face{background:linear-gradient(150deg, var(--c1), var(--c2));width:100%;height:100%;color:var(--fg,var(--paper));border-radius:8px;place-items:center;display:grid;position:relative;box-shadow:inset 0 1px #ffffff59,inset 0 -3px #00000040,0 4px 8px #00000073}.label{font-weight:700;font-size:calc(var(--cell) * .3);letter-spacing:.1em;text-shadow:0 1px 1px #00000059}.type-v .label{writing-mode:vertical-rl}.type-cao .label{font-size:calc(var(--cell) * .46)}.type-s .label{font-size:calc(var(--cell) * .34)}.type-cao .face,.tool-shape.type-cao{--c1:#d23a2e;--c2:#861a14}.type-h .face,.tool-shape.type-h{--c1:#3f8a4c;--c2:#1f4d29}.type-v .face,.tool-shape.type-v{--c1:#3c4a74;--c2:#222a45}.type-s .face,.tool-shape.type-s{--c1:#e9dbbb;--c2:#c3ab7d;--fg:#3b2a17}.piece[data-name=赵云] .face{--c1:#e9ecef;--c2:#9aa3ad;--fg:#1f2733}.piece[data-name=马超] .face{--c1:#a66a33;--c2:#6a3f1a}.piece[data-name=黄忠] .face{--c1:#d1a43b;--c2:#8a6516;--fg:#2a1d05}.piece[data-name=张飞] .face{--c1:#4a4f5c;--c2:#23262e}.piece.next .face{outline:3px solid var(--gold);outline-offset:-1px;animation:1.2s ease-in-out infinite pulse}@keyframes pulse{50%{box-shadow:0 0 0 6px #d9b26a4d,0 4px 8px #00000073}}.badge{color:var(--gold);text-shadow:0 1px 2px #000;font-size:13px;font-weight:700;position:absolute;top:4px;right:6px}.piece.escaped{transform:translateY(calc(var(--cell) * 2.2));opacity:0;transition-delay:.2s}.piece.nudge{animation:.3s nudge}@keyframes nudge{25%{transform:scale(.96)}60%{transform:scale(1.03)}}.win{border:1px solid var(--gold);background:#17140feb;border-radius:14px;flex-direction:column;align-items:center;gap:10px;padding:22px;animation:.4s .5s both pop;display:flex;position:absolute;inset:30% 8% auto;box-shadow:0 20px 40px #00000080}.win strong{color:var(--gold);font-size:22px}.win span{color:var(--muted)}@keyframes pop{0%{opacity:0;transform:translateY(10px)scale(.96)}}.panel{flex-direction:column;gap:16px;display:flex}.card{border:1px solid var(--line);background:#ffffff08;border-radius:14px;padding:18px}.card h2{letter-spacing:.2em;color:var(--gold);margin:0 0 12px;font-size:15px}.levels{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px;display:grid}.chip{text-align:left;font:inherit;color:var(--paper);border:1px solid var(--line);cursor:pointer;background:#ffffff0a;border-radius:10px;flex-direction:column;gap:2px;padding:10px 12px;transition:border-color .15s,background .15s;display:flex}.chip small{color:var(--muted);font-size:12px}.chip:hover:not(:disabled){border-color:var(--gold)}.chip.active{border-color:var(--red);background:#b3261e40}.chip:disabled{opacity:.45;cursor:not-allowed}.stats{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px;display:grid}.stats>div{background:#00000040;border-radius:10px;flex-direction:column;padding:10px 12px;display:flex}.stats>div.highlight{background:#b3261e38;outline:1px solid #c9342a99}.stats>div.highlight .stat-value{color:var(--gold)}.totals{background:#00000040;border-radius:10px;flex-wrap:wrap;align-items:baseline;gap:6px;margin:0 0 12px;padding:10px 12px;font-size:14px;display:flex}.totals span{color:var(--muted);margin-right:6px;font-size:12px}.totals strong{font-variant-numeric:tabular-nums;font-size:20px}.totals strong.accent{color:var(--gold);font-size:24px}.moves .len{color:var(--gold);background:#d9b26a26;border-radius:4px;margin-left:auto;padding:0 5px;font-size:11px}.win b{color:var(--gold)}.stat-label{color:var(--muted);font-size:12px}.stat-value{font-variant-numeric:tabular-nums;font-size:28px;font-weight:700}.row{flex-wrap:wrap;gap:8px;display:flex}.btn,.select{font:inherit;border:1px solid var(--line);color:var(--paper);cursor:pointer;background:#ffffff0f;border-radius:9px;padding:9px 14px;font-size:14px;transition:background .15s,border-color .15s,opacity .15s}.btn:hover:not(:disabled){border-color:var(--gold)}.btn.primary{background:linear-gradient(150deg,#c9342a,#8c1d16);border-color:#c9342a}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:focus-visible,.chip:focus-visible,.tool:focus-visible,.select:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.select option{color:#111}.status{color:var(--muted);margin:0 0 12px;font-size:14px;line-height:1.7}.spinner{border:2px solid var(--gold);vertical-align:-1px;border-right-color:#0000;border-radius:50%;width:12px;height:12px;margin-right:8px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.moves{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px;max-height:260px;margin:12px 0 0;padding:0;list-style:none;display:grid;overflow-y:auto}.moves:empty{display:none}.moves li{cursor:pointer;background:#00000038;border-radius:8px;align-items:center;gap:6px;padding:6px 8px;font-size:13px;display:flex}.moves li:hover{background:#d9b26a1f}.moves .num{min-width:22px;color:var(--muted);font-variant-numeric:tabular-nums;font-size:11px}.moves li.done{opacity:.4}.moves li.current{outline:1px solid var(--red);background:#b3261e59}.tools{grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px;display:grid}.tool{font:inherit;color:var(--paper);border:1px solid var(--line);cursor:pointer;background:#ffffff0a;border-radius:10px;align-items:center;gap:10px;padding:10px;font-size:14px;display:flex}.tool.active{border-color:var(--gold);background:#d9b26a1f}.tool-shape{background:linear-gradient(150deg, var(--c1), var(--c2));border-radius:3px;flex:none}.tool-shape.type-cao{width:22px;height:22px}.tool-shape.type-h{width:22px;height:11px}.tool-shape.type-v{width:11px;height:22px}.tool-shape.type-s{width:11px;height:11px}.error{color:#ff8a80;min-height:1.4em;margin:0 0 8px;font-size:13px}.foot{text-align:center;color:var(--muted);margin-top:36px;font-size:12px}
