:root{--bg: #1f2430;--bg2: #272d3b;--panel: #2d3446;--panel-2: #353d52;--text: #e8ecf4;--text-dim: #9aa3b8;--accent: #6c9cff;--accent-2: #4cd4b0;--cao: #e85a6c;--cao-2: #c43f54;--guan: #f0a04b;--guan-2: #d4823a;--soldier: #7e8aa3;--soldier-2: #5f6a82;--grid-line: rgba(255, 255, 255, .06);--shadow: 0 8px 24px rgba(0, 0, 0, .35);--cell: 60px;--pad: 6px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0;height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background:linear-gradient(160deg,var(--bg) 0%,var(--bg2) 100%);color:var(--text);min-height:100dvh;overscroll-behavior:none}#app{min-height:100dvh;display:flex;flex-direction:column;align-items:center;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}.wrapper{width:100%;max-width:480px;padding:12px 12px 24px;display:flex;flex-direction:column;gap:12px}.header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.header h1{margin:0;font-size:1.5rem;font-weight:700;letter-spacing:.05em;background:linear-gradient(135deg,var(--accent),var(--accent-2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.stats{display:flex;gap:14px}.stat{display:flex;flex-direction:column;align-items:center;min-width:56px}.stat-label{font-size:.7rem;color:var(--text-dim)}.stat-val{font-size:1.05rem;font-weight:600;font-variant-numeric:tabular-nums}.level-bar{display:flex;gap:8px;flex-wrap:wrap}.level-bar select{background:var(--panel);color:var(--text);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:10px 32px 10px 12px;font-size:.95rem;outline:none;-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239aa3b8' d='M6 8L2 4h8z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}#level-select{flex:1 1 170px;min-width:0}#difficulty-select{flex:0 0 86px}#editor-btn,#generate-btn{background:var(--panel);color:var(--text);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:0 14px;font-size:.9rem;cursor:pointer;min-height:40px;white-space:nowrap}#generate-btn{background:linear-gradient(135deg,var(--accent),#4a7fd8);border:none;color:#fff;font-weight:600}#generate-btn:disabled{opacity:.55;cursor:wait}.board-area{display:flex;justify-content:center;align-items:center;flex:1}.board{position:relative;width:calc(var(--cell) * 4 + var(--pad) * 2);height:calc(var(--cell) * 5 + var(--pad) * 2);padding:var(--pad);background:var(--panel);border-radius:16px;box-shadow:var(--shadow);touch-action:none;user-select:none}.grid-bg{position:absolute;inset:var(--pad);background-image:linear-gradient(var(--grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--grid-line) 1px,transparent 1px);background-size:var(--cell) var(--cell);border-radius:8px}.exit{position:absolute;bottom:0;height:6px;background:linear-gradient(90deg,transparent,var(--accent-2),transparent);border-radius:0 0 12px 12px;box-shadow:0 0 12px var(--accent-2);pointer-events:none;left:calc(var(--cell) * 1 + var(--pad));width:calc(var(--cell) * 2)}.pieces{position:absolute;inset:var(--pad)}.piece{position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center;border-radius:10px;font-weight:700;font-size:clamp(.9rem,4.5vw,1.2rem);color:#fff;cursor:grab;transition:transform .18s cubic-bezier(.34,1.2,.64,1),box-shadow .15s ease,filter .15s ease;box-shadow:0 3px 8px #0000004d,inset 0 1px #ffffff2e;will-change:transform;text-shadow:0 1px 2px rgba(0,0,0,.3)}.piece:active{cursor:grabbing}.piece.cao{background:linear-gradient(135deg,var(--cao),var(--cao-2));font-size:clamp(1.1rem,5.5vw,1.5rem)}.piece.guan{background:linear-gradient(135deg,var(--guan),var(--guan-2))}.piece.vert{background:linear-gradient(135deg,var(--accent),#4a7fd8)}.piece.vert.v2{background:linear-gradient(135deg,#6cd4b0,#3aa888)}.piece.vert.v3{background:linear-gradient(135deg,#b48cf0,#7d5dc8)}.piece.vert.v4{background:linear-gradient(135deg,#f0b04b,#c8883a)}.piece.soldier{background:linear-gradient(135deg,var(--soldier),var(--soldier-2));font-size:clamp(.8rem,4vw,1rem)}.piece.selected{box-shadow:0 0 0 3px var(--accent-2),0 6px 14px #0006;filter:brightness(1.1);z-index:2}.piece.hint{animation:hintPulse .9s ease-in-out infinite alternate}@keyframes hintPulse{0%{box-shadow:0 0 0 2px var(--accent),0 3px 8px #0000004d}to{box-shadow:0 0 0 5px var(--accent),0 3px 14px #6c9cff80}}.piece.winning{z-index:5;transition:transform .7s cubic-bezier(.5,0,.75,0)}.controls{display:flex;gap:8px}.controls button{flex:1;background:var(--panel);color:var(--text);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:12px 8px;font-size:.95rem;cursor:pointer;transition:background .15s ease,transform .1s ease}.controls button:active{transform:scale(.97)}.controls button:disabled{opacity:.4;cursor:not-allowed}.controls button:not(:disabled):hover{background:var(--panel-2)}.help{margin:0;font-size:.78rem;color:var(--text-dim);text-align:center;line-height:1.5}.overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100;padding:16px;backdrop-filter:blur(4px)}.overlay.hidden{display:none}.modal{background:var(--panel);border-radius:18px;padding:28px 24px;max-width:360px;width:100%;text-align:center;box-shadow:var(--shadow);animation:pop .25s ease}@keyframes pop{0%{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}.modal h2{margin:0 0 8px;font-size:1.5rem}.modal p{margin:6px 0;color:var(--text-dim)}.modal .record{color:var(--accent-2);font-weight:600;font-size:1.05rem}.modal .best-info{font-size:.85rem}.modal-actions{display:flex;gap:8px;margin-top:18px}.modal-actions button{flex:1;background:linear-gradient(135deg,var(--accent),#4a7fd8);color:#fff;border:none;border-radius:12px;padding:12px;font-size:.95rem;font-weight:600;cursor:pointer}.editor-panel{background:var(--panel);border-radius:18px;padding:20px 16px;max-width:420px;width:100%;max-height:90dvh;overflow-y:auto;box-shadow:var(--shadow)}.editor h2{margin:0 0 4px;text-align:center}.editor-hint{margin:0 0 12px;font-size:.78rem;color:var(--text-dim);text-align:center;line-height:1.5}.palette{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-bottom:14px}.palette-btn{background:var(--panel-2);color:var(--text);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:8px 12px;font-size:.85rem;cursor:pointer}.palette-btn.active{background:var(--accent);border-color:var(--accent)}.editor-board{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;aspect-ratio:4 / 5;background:var(--bg2);padding:6px;border-radius:10px;margin:0 auto;max-width:320px}.editor-cell{background:#ffffff0a;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:600;color:#fff;cursor:pointer;transition:background .1s}.editor-cell:hover{background:#ffffff14}.editor-cell.x22{background:linear-gradient(135deg,var(--cao),var(--cao-2))}.editor-cell.x21{background:linear-gradient(135deg,var(--guan),var(--guan-2))}.editor-cell.x12{background:linear-gradient(135deg,var(--accent),#4a7fd8)}.editor-cell.x11{background:linear-gradient(135deg,var(--soldier),var(--soldier-2))}.editor-actions{display:flex;align-items:center;gap:8px;margin-top:14px;flex-wrap:wrap}.editor-actions button{background:var(--panel-2);color:var(--text);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 14px;font-size:.85rem;cursor:pointer}.editor-actions button.primary{background:linear-gradient(135deg,var(--accent),#4a7fd8);border:none;color:#fff;font-weight:600}.editor-status{flex:1;min-width:100px;font-size:.82rem;color:var(--accent-2);text-align:center}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%) translateY(20px);background:var(--panel-2);color:var(--text);padding:10px 18px;border-radius:10px;font-size:.9rem;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;z-index:200;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}@media (max-width: 380px){.wrapper{padding:8px 8px 16px;gap:8px}.header h1{font-size:1.25rem}.stat{min-width:48px}.stat-val{font-size:.95rem}.help{font-size:.72rem}}@media (orientation: landscape) and (max-height: 500px){.wrapper{max-width:100%}.board-area{flex:1}}
