: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:#3f8a4c;--c2:#1f4d29;--fg:var(--paper)}.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{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,color .15s,opacity .15s}.speed{flex:none;position:relative}.speed.is-open{z-index:30}.speed-trigger{justify-content:space-between;align-items:center;gap:10px;min-width:76px;display:inline-flex}.speed-caret{opacity:.8;border-top:5px solid;border-left:4px solid #0000;border-right:4px solid #0000;width:0;height:0}.speed-menu{z-index:40;background:#2a2723;border:1px solid #ffffff29;border-radius:8px;flex-direction:column;gap:2px;margin:0;padding:4px;display:flex;position:fixed;box-shadow:0 12px 28px #0000008c}.speed-menu[hidden]{display:none!important}.speed-option{width:100%;color:var(--paper);font:inherit;text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:5px;align-items:center;gap:6px;margin:0;padding:6px 12px 6px 8px;font-size:14px;line-height:1.4;display:flex}.speed-option:hover{background:#ffffff14}.speed-option[aria-selected=true]{color:#fff;background:#2f6fde}.speed-check{text-align:center;flex:0 0 1em;width:1em}.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,.speed-option:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.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}.file-btn{position:relative}.file-btn input{clip:rect(0, 0, 0, 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}#photo-note:empty{display:none}.foot{text-align:center;color:var(--muted);margin-top:36px;font-size:12px;line-height:1.7}.shelf-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px 20px;margin-bottom:14px;display:flex}.tabs{flex-wrap:nowrap;gap:8px;max-width:100%;display:flex}.tab{font:inherit;letter-spacing:.14em;color:var(--paper);border:1px solid var(--line);cursor:pointer;white-space:nowrap;background:#ffffff08;border-radius:999px;padding:8px 16px;font-size:15px}.tab:hover{border-color:var(--gold)}.tab.active{color:var(--gold);border-color:var(--gold);background:#b3261e38}.tab:focus-visible,.puzzle-card:focus-visible,.jump input:focus-visible{outline:2px solid var(--gold);outline-offset:2px}.jump{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.jump label{color:var(--muted);font-size:14px}.jump input{font:inherit;border:1px solid var(--line);width:7em;color:var(--paper);background:#00000047;border-radius:9px;padding:8px 10px}.notice,.tier-note{color:var(--muted);margin:0 0 14px;font-size:14px;line-height:1.7}.notice:empty,.tier-note:empty{display:none}.catalog-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;display:grid}.puzzle-card{text-align:left;font:inherit;color:var(--paper);border:1px solid var(--line);cursor:pointer;background:#ffffff08;border-radius:14px;flex-direction:column;gap:8px;padding:10px;display:flex}.puzzle-card:hover{border-color:var(--gold)}.card-name{letter-spacing:.08em;font-size:17px}.card-steps{color:var(--muted);font-size:13px}.empty-shelf{border:1px dashed var(--line);color:var(--muted);text-align:center;border-radius:14px;padding:28px 18px;line-height:1.8}.thumb{pointer-events:none;width:100%}.thumb .frame{border-radius:10px;padding:6px;box-shadow:0 10px 18px #00000059}.thumb .grid{--cell:22px;aspect-ratio:4/5;touch-action:auto;width:100%;height:auto}.thumb .piece{cursor:default;padding:1px;transition:none;overflow:hidden}.thumb .face{overflow:hidden}.thumb .label,.thumb .type-s .label,.thumb .type-v .label,.thumb .type-cao .label{letter-spacing:0;font-size:12px;line-height:1.05}.thumb .type-cao .label{font-size:18px}.back-row{margin:0 0 16px}.kicker{color:var(--gold);letter-spacing:.28em;margin:0 0 6px;font-size:12px}.meta-card h2{letter-spacing:.12em;color:var(--paper);margin-bottom:8px;font-size:22px}.nearby{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.nearby .chip{padding:6px 10px}.gate-cover{text-align:center;color:var(--gold);letter-spacing:.16em;background:repeating-linear-gradient(-45deg,#d9b26a14 0 8px,#00000047 8px 16px);border:1px dashed #d9b26a73;border-radius:10px;margin:8px 0 12px;padding:22px 14px}.paywall{min-height:1.5em;color:var(--gold);margin:10px 0 0;font-size:14px;line-height:1.7}.paywall:empty{display:none}@media (width>=821px){#app{max-width:1320px}.layout{max-width:1040px;margin-inline:auto}.catalog-grid.classic-shelf{grid-template-columns:repeat(3,minmax(0,1fr));gap:28px 36px}.catalog-grid.classic-shelf .puzzle-card{gap:12px;padding:16px 16px 18px}.catalog-grid.classic-shelf .card-name{font-size:22px}.catalog-grid.classic-shelf .card-steps{font-size:15px}.thumb .grid{container-type:inline-size}.thumb .label,.thumb .type-s .label,.thumb .type-h .label,.thumb .type-v .label,.thumb .type-cao .label{letter-spacing:.06em;font-size:clamp(16px,8.6cqw,36px)}.thumb .type-cao .label{font-size:clamp(24px,13cqw,54px)}}@media (width<=820px){.tabs{gap:6px;width:100%}.tab{letter-spacing:.04em;text-align:center;flex:auto;padding:8px 6px;font-size:13px}.catalog-grid{grid-template-columns:1fr 1fr;gap:10px}.puzzle-card{padding:8px}.card-name{font-size:15px}}@media (width<=390px){.tab{letter-spacing:0;padding:7px 2px;font-size:12px}}
