/* ============================================================
   拆弹喵 · 纸上拆弹工坊
   纸墨涂鸦风：米纸底 + 墨线 + 硬阴影
   四套主题：ink 纸墨工坊 / mint 薄荷苏打 / midnight 午夜电台 / candy 糖果派对
   ============================================================ */

:root{
  --r-sm:8px; --r-md:14px; --r-lg:20px;
  --inkw:2.5px;
  --cell:36px; --gap:4px;
  --safe-area:env(safe-area-inset-bottom,0px);
}

/* ---------- 主题变量 ---------- */
html[data-theme="ink"]{
  --bg:#f4ecd8; --bg2:#efe3c6;
  --paper:#fffdf6; --paper2:#fbf3df;
  --ink:#2b2b2b; --ink-soft:rgba(43,43,43,.55);
  --accent:#ff8a3d; --accent-deep:#e8621d;
  --accent2:#3ec6a8;
  --danger:#e85d5d; --gold:#f2b33d;
  --shadow:rgba(43,43,43,.9);
  --shadow-soft:rgba(43,43,43,.28);
  --n1:#3f6fe0; --n2:#1f9d55; --n3:#e0393e; --n4:#7c3aed;
  --n5:#b1345f; --n6:#0d9fb5; --n7:#39424e; --n8:#7a8190;
  --tape:rgba(224,196,120,.55);
}
html[data-theme="mint"]{
  --bg:#e3f2ea; --bg2:#d2ead9;
  --paper:#f8fdf9; --paper2:#ecf7f0;
  --ink:#1e3b33; --ink-soft:rgba(30,59,51,.55);
  --accent:#35c08d; --accent-deep:#1f9d6c;
  --accent2:#5bc8ff;
  --danger:#ef6b6b; --gold:#f0b429;
  --shadow:rgba(25,80,60,.55);
  --shadow-soft:rgba(25,80,60,.22);
  --n1:#2f6fe0; --n2:#16895a; --n3:#d94848; --n4:#7c50d6;
  --n5:#b03070; --n6:#0d93a8; --n7:#35505c; --n8:#74848c;
  --tape:rgba(120,200,160,.5);
}
html[data-theme="midnight"]{
  --bg:#1b2130; --bg2:#141a28;
  --paper:#272f47; --paper2:#2f3a57;
  --ink:#eef2fb; --ink-soft:rgba(238,242,251,.6);
  --accent:#ffb648; --accent-deep:#e09020;
  --accent2:#59c2ff;
  --danger:#ff6b6b; --gold:#ffd76a;
  --shadow:rgba(0,0,0,.6);
  --shadow-soft:rgba(0,0,0,.35);
  --n1:#7ea6ff; --n2:#62d9a0; --n3:#ff8e8e; --n4:#c29cff;
  --n5:#ff9ec9; --n6:#6fd4e8; --n7:#d7dde8; --n8:#aab3c2;
  --tape:rgba(120,140,200,.4);
}
html[data-theme="candy"]{
  --bg:#ffeaf4; --bg2:#ffd9ea;
  --paper:#fffafd; --paper2:#fff0f7;
  --ink:#4a2b45; --ink-soft:rgba(74,43,69,.55);
  --accent:#ff7ab6; --accent-deep:#e05b97;
  --accent2:#7bd7ff;
  --danger:#ff5f6e; --gold:#ffc93c;
  --shadow:rgba(160,70,130,.38);
  --shadow-soft:rgba(160,70,130,.2);
  --n1:#4b78e8; --n2:#1fa974; --n3:#e8435f; --n4:#9a5de0;
  --n5:#d23f8a; --n6:#0fa8c0; --n7:#6b4a75; --n8:#99879c;
  --tape:rgba(255,170,205,.55);
}

/* ---------- 基础 ---------- */
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html{height:100%;}
body{
  min-height:100%;
  font-family:"Comic Sans MS","Segoe Print","PingFang SC","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;
  background:var(--bg);
  background-image:radial-gradient(circle at 18% 28%,rgba(0,0,0,.05) 0 1.2px,transparent 1.2px),
                   radial-gradient(circle at 72% 62%,rgba(0,0,0,.04) 0 1.2px,transparent 1.2px),
                   radial-gradient(circle at 88% 12%,rgba(0,0,0,.035) 0 1.2px,transparent 1.2px),
                   linear-gradient(160deg,var(--bg) 0%,var(--bg2) 100%);
  background-size:26px 26px,34px 34px,19px 19px,100% 100%;
  color:var(--ink);
  padding:14px 14px calc(14px + var(--safe-area));
  user-select:none;-webkit-user-select:none;
  touch-action:manipulation;
  transition:background .35s,color .35s;
}
button{font-family:inherit;color:inherit;background:none;border:none;cursor:pointer;}
[hidden]{display:none !important;}

/* 背景大色块 */
body::before,body::after{
  content:'';position:fixed;border-radius:50%;z-index:0;pointer-events:none;
  filter:blur(26px);opacity:.4;transition:background .35s;
}
body::before{width:340px;height:340px;top:-110px;right:-110px;background:var(--accent);}
body::after{width:300px;height:300px;bottom:-100px;left:-100px;background:var(--accent2);}

#app{max-width:1180px;margin:0 auto;position:relative;z-index:1;}

/* ---------- 顶栏 ---------- */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px;}
.brand{display:flex;align-items:center;gap:10px;}
#mascot{width:76px;height:76px;flex:none;animation:bob 3.4s ease-in-out infinite;transform-origin:50% 100%;}
#mascot .m-eye-happy,#mascot .m-eye-x,#mascot .m-mouth-open,#mascot .m-mouth-sweat,#mascot .m-sweat{display:none;}
#mascot.m-happy .m-eye-happy{display:block;}
#mascot.m-happy .m-mouth-open{display:block;}
#mascot.m-happy .m-mouth-idle{display:none;}
#mascot.m-lose .m-eye-x{display:block;}
#mascot.m-lose .m-mouth-open{display:block;}
#mascot.m-lose .m-mouth-idle{display:none;}
#mascot.m-sweat .m-sweat{display:block;}
#mascot.m-blink .m-eye-normal{animation:blinkA 4.6s infinite;}
@keyframes blinkA{0%,92%,100%{transform:scaleY(1)} 95%{transform:scaleY(.08)}}
@keyframes bob{0%,100%{transform:translateY(0) rotate(-1.2deg)}50%{transform:translateY(5px) rotate(1.2deg)}}
#mascot.m-shake{animation:shakeX .5s;}
@keyframes shakeX{0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(3px)}}

.title h1{font-size:clamp(22px,4.5vw,34px);letter-spacing:1px;line-height:1.05;}
.title p{font-size:12.5px;opacity:.62;margin-top:3px;min-height:1.2em;}

.topmenu{display:flex;gap:8px;flex-wrap:wrap;}
.tbtn{
  background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  padding:7px 12px;font-size:13px;font-weight:700;
  box-shadow:3px 3px 0 var(--shadow);transition:transform .1s,box-shadow .1s;
}
.tbtn:hover{transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--shadow);}
.tbtn:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--shadow);}
.tbtn-accent{background:var(--accent);}

/* ---------- HUD ---------- */
.hud{
  display:flex;align-items:stretch;gap:8px;margin-bottom:12px;flex-wrap:wrap;
}
.hud-cell,.hud-stat{
  background:var(--paper);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  box-shadow:3px 3px 0 var(--shadow);display:flex;align-items:center;gap:6px;
  padding:6px 12px;font-size:15px;min-width:0;
}
.face-btn{font-size:22px;line-height:1;padding:0 2px;transition:transform .12s;}
.face-btn:hover{transform:scale(1.15) rotate(-8deg);}
.flag-mode-btn{
  background:var(--paper);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  box-shadow:3px 3px 0 var(--shadow);padding:8px 11px;font-size:13px;font-weight:800;
  transition:transform .1s,box-shadow .1s,background .15s;display:flex;align-items:center;gap:5px;
}
.flag-mode-btn:hover{transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--shadow);}
.flag-mode-btn.on{background:var(--accent);transform:translate(2px,2px);box-shadow:1px 1px 0 var(--shadow);}
.hud-stat{flex-direction:column;min-width:64px;padding:4px 10px;}
.hud-stat b{font-size:16px;font-variant-numeric:tabular-nums;}
.hud-stat .lbl{font-size:12px;opacity:.7;line-height:1;}
.hud-stat.time b{color:var(--accent-deep);}
.hud-stat.time b.urgent{color:var(--danger);animation:urgentPulse .6s ease-in-out infinite;}
@keyframes urgentPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.22);color:#fff;background:var(--danger);border-radius:4px;padding:0 4px;}}
.hud-stat.mine b{min-width:20px;text-align:center;}
.hud-stat.coins b{min-width:22px;text-align:center;}
.combo{position:relative;overflow:hidden;flex:1;max-width:170px;}
.combo b{font-size:18px;}
#comboBar{display:block;width:100%;height:6px;background:var(--ink-soft);border-radius:4px;overflow:hidden;margin-top:2px;}
#comboBarFill{display:block;height:100%;width:0%;background:linear-gradient(90deg,var(--gold),var(--accent));border-radius:4px;transition:width .25s;}
#hudCombo.hot{animation:comboPulse .3s;}
@keyframes comboPulse{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}
#hudScore{font-weight:800;color:var(--accent-deep);font-size:18px;}

/* ---------- 主体布局 ---------- */
.stage{display:flex;gap:16px;align-items:flex-start;justify-content:center;}
.board-wrap{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:10px;}
.side{width:330px;flex:none;display:flex;flex-direction:column;gap:12px;}

/* ---------- 棋盘 ---------- */
#boardFrame{
  position:relative;background:var(--paper2);border:var(--inkw) solid var(--ink);
  border-radius:var(--r-lg);padding:14px;
  box-shadow:6px 6px 0 var(--shadow);
  overflow:hidden;
}
#boardFrame::before,#boardFrame::after{
  content:'';position:absolute;width:74px;height:20px;background:var(--tape);
  border:1px dashed var(--ink-soft);border-radius:2px;opacity:.85;pointer-events:none;z-index:5;
}
#boardFrame::before{top:-9px;left:30%;transform:rotate(-2deg);}
#boardFrame::after{bottom:-9px;right:26%;transform:rotate(3deg);}
#board{display:grid;position:relative;z-index:2;transition:filter .2s;}
#board.shake{animation:boardShake .55s;}
@keyframes boardShake{0%,100%{transform:translate(0,0)}15%{transform:translate(-8px,3px)}30%{transform:translate(7px,-4px)}45%{transform:translate(-6px,2px)}60%{transform:translate(5px,-2px)}80%{transform:translate(-3px,1px)}}
#board.freeze-zoom{transition:none;}

/* 格子 */
.cell{
  --sh:2.5px;
  position:relative;width:var(--cell);height:var(--cell);
  border:var(--inkw) solid var(--ink);border-radius:6px;
  background:var(--paper2);
  box-shadow:var(--sh) var(--sh) 0 var(--shadow);
  display:flex;align-items:center;justify-content:center;
  font-size:calc(var(--cell)*.46);font-weight:900;
  transition:transform .09s,box-shadow .09s,background .12s;
  overflow:hidden;line-height:1;
}
.board-touch .cell{cursor:pointer;}
.cell:not(.open):not(.flag):hover{transform:translate(-1px,-1px);box-shadow:calc(var(--sh)+1.5px) calc(var(--sh)+1.5px) 0 var(--shadow);}
.cell:not(.open):not(.flag):active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--shadow);}
.cell.open{background:var(--paper);box-shadow:none;border-color:var(--ink-soft);color:var(--ink);}
.cell.dead-end{background:var(--paper);box-shadow:none;border-style:dashed;border-color:var(--ink-soft);}
.cell.open-pop{animation:cellPop .22s cubic-bezier(.34,1.56,.64,1) backwards;}
@keyframes cellPop{0%{transform:scale(.4) rotate(-6deg);opacity:0;}100%{transform:scale(1) rotate(0);opacity:1;}}
.cell .n1{color:var(--n1);} .cell .n2{color:var(--n2);} .cell .n3{color:var(--n3);} .cell .n4{color:var(--n4);}
.cell .n5{color:var(--n5);} .cell .n6{color:var(--n6);} .cell .n7{color:var(--n7);} .cell .n8{color:var(--n8);}
.cell .num{text-shadow:1px 1px 0 var(--paper);font-size:calc(var(--cell)*.46);}
.cell.open .num{animation:numIn .18s both;}
@keyframes numIn{0%{transform:scale(1.6);opacity:0}100%{transform:scale(1);opacity:1}}

/* 旗 / 雷 / 数字0的点子 */
.cell .glow{font-size:calc(var(--cell)*.56);}
.cell.flag{animation:flagPop .22s cubic-bezier(.34,1.56,.64,1);background:var(--paper2);}
@keyframes flagPop{0%{transform:scale(.3) rotate(-20deg)}100%{transform:scale(1)}}
.cell.mine,.cell.treasure,.cell.mine-dead{background:var(--paper);box-shadow:none;}
.cell.mine-hit{background:var(--danger);animation:boomFlash .5s;}
@keyframes boomFlash{0%{background:#fff}40%{background:var(--danger)}100%{background:var(--danger)}}
.cell.wrong-flag{background:var(--paper);box-shadow:none;}
.cell.wrong-flag .x-slash{position:absolute;inset:0;background:linear-gradient(45deg,transparent 44%,var(--danger) 44% 56%,transparent 56%);}
.cell.defused{background:var(--paper);box-shadow:none;border-style:dashed;}
.cell.defused b{font-size:calc(var(--cell)*.34);color:var(--accent2);border:2px solid var(--accent2);border-radius:50%;width:calc(var(--cell)*.6);height:calc(var(--cell)*.6);display:flex;align-items:center;justify-content:center;}
.cell.digged{background:var(--paper);box-shadow:none;}
/* 失效数字 */
.cell.open.stale{opacity:.52;}
.cell.open.stale .num{text-decoration:line-through;}
.cell.open.stale .tilde{position:absolute;top:-4px;right:-3px;font-size:calc(var(--cell)*.3);color:var(--danger);animation:tildeWig .6s ease-in-out infinite;}
@keyframes tildeWig{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-2px) rotate(12deg)}}
/* 雷达标记 */
.cell.radar-on::after{
  content:'';position:absolute;inset:0;border-radius:4px;pointer-events:none;
  background:radial-gradient(circle,rgba(255,92,60,.9) 0%,rgba(255,92,60,.1) 72%);
  animation:radarPulse .5s ease-in-out infinite alternate;
  z-index:3;
}
@keyframes radarPulse{from{opacity:.55}to{opacity:1}}
/* 搬家预警 */
#staleBanner{
  position:absolute;left:50%;top:12px;transform:translateX(-50%);z-index:8;
  background:var(--gold);color:var(--ink);border:var(--inkw) solid var(--ink);
  border-radius:var(--r-md);padding:6px 14px;font-size:13px;font-weight:800;
  box-shadow:3px 3px 0 var(--shadow);white-space:nowrap;
  animation:bannerIn .3s cubic-bezier(.34,1.56,.64,1);
}
@keyframes bannerIn{0%{transform:translateX(-50%) translateY(-24px) scale(.6);opacity:0}100%{transform:translateX(-50%) translateY(0) scale(1);opacity:1}}

.board-tip{font-size:12px;opacity:.6;text-align:center;line-height:1.6;}

/* ---------- 侧栏 ---------- */
.panel{background:var(--paper);border:var(--inkw) solid var(--ink);border-radius:var(--r-lg);padding:14px;box-shadow:4px 4px 0 var(--shadow);}
.panel h3{font-size:15px;margin-bottom:10px;display:flex;align-items:baseline;gap:8px;}
.panel h3 small{font-size:11px;opacity:.55;font-weight:400;}
.panel-note{font-size:11.5px;opacity:.6;margin-top:8px;line-height:1.5;}
.g-row{display:flex;gap:8px;}
.g-btn{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;
  background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  padding:10px 4px 8px;font-size:12px;font-weight:700;text-align:center;
  box-shadow:3px 3px 0 var(--shadow);transition:transform .1s,box-shadow .1s,opacity .15s;
}
.g-btn:hover{transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--shadow);}
.g-btn:active,.g-btn.on{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--shadow);}
.g-btn.on{background:var(--accent);}
.g-btn i{font-size:22px;font-style:normal;}
.g-btn b{font-size:11.5px;line-height:1.25;}
.g-btn .g-count{
  position:absolute;top:-8px;right:-6px;min-width:22px;height:22px;padding:0 5px;
  background:var(--gold);border:2px solid var(--ink);border-radius:12px;
  font-size:12px;display:flex;align-items:center;justify-content:center;font-weight:900;
}
.g-btn.g-disabled{opacity:.45;filter:grayscale(.7);}
.g-btn.g-disabled .g-count{background:var(--ink-soft);}

#challengeList{list-style:none;display:flex;flex-direction:column;gap:8px;}
#challengeList li{
  font-size:12.5px;padding:7px 10px;border:1.6px dashed var(--ink-soft);border-radius:var(--r-sm);
  display:flex;align-items:center;gap:8px;background:var(--paper2);line-height:1.35;
}
#challengeList li b{margin-left:auto;flex:none;font-size:13px;}
#challengeList li.ch-done{border-style:solid;border-color:var(--accent2);background:color-mix(in srgb,var(--accent2) 14%,var(--paper2));}
#challengeList li.ch-done b{color:var(--accent-deep);}

.cfg-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.chip{
  background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:999px;
  padding:7px 14px;font-size:13px;font-weight:700;
  box-shadow:2.5px 2.5px 0 var(--shadow);transition:transform .1s,box-shadow .1s,background .15s;
  line-height:1.25;
}
.chip:hover{transform:translate(-1px,-1px);box-shadow:3.5px 3.5px 0 var(--shadow);}
.chip.on{background:var(--accent);}
.chip.chip-switch.on{background:var(--danger);color:#fff;}
.chip.chip-switch i{font-style:normal;font-size:11px;opacity:.85;margin-left:4px;background:rgba(0,0,0,.14);padding:1px 7px;border-radius:9px;}
.chip.big{padding:12px 16px;font-size:14px;}
.chip.big small{display:block;font-size:11px;font-weight:400;opacity:.75;margin-top:3px;}

/* ---------- 顶部提示条标签 ---------- */
.best-tag{font-size:11px;opacity:.7;font-weight:400;}

/* ---------- 弹层 ---------- */
.overlay{
  position:fixed;inset:0;z-index:60;background:rgba(20,16,10,.5);
  display:flex;align-items:center;justify-content:center;padding:18px;
  backdrop-filter:blur(3px);
}
.overlay[hidden]{display:none;}
.sheet{
  background:var(--paper);border:var(--inkw) solid var(--ink);border-radius:var(--r-lg);
  box-shadow:7px 7px 0 var(--shadow);padding:22px;max-width:560px;width:100%;
  max-height:88vh;overflow-y:auto;
  animation:sheetIn .26s cubic-bezier(.34,1.56,.64,1);
}
@keyframes sheetIn{0%{transform:scale(.82) translateY(24px);opacity:0}100%{transform:scale(1) translateY(0);opacity:1}}
.sheet h2{font-size:21px;margin-bottom:14px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.menu-sheet h2{font-size:26px;text-align:center;}
.menu-lbl{font-size:12.5px;font-weight:800;letter-spacing:2px;opacity:.7;margin:14px 0 8px;}
.menu-block{margin-bottom:6px;}
.btn-primary{
  display:block;width:100%;margin-top:18px;padding:14px;
  font-size:19px;font-weight:900;letter-spacing:1px;
  background:var(--accent);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  box-shadow:4px 4px 0 var(--shadow);transition:transform .1s,box-shadow .1s;
}
.btn-primary:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--shadow);}
.btn-primary:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--shadow);}
.btn-plain{
  display:block;width:100%;margin-top:10px;padding:11px;font-size:14px;font-weight:700;
  background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  box-shadow:3px 3px 0 var(--shadow);transition:transform .1s;
}
.btn-plain:hover{transform:translate(-1px,-1px);}
.btn-plain:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--shadow);}
.switch-row{display:flex;align-items:center;gap:10px;margin-top:8px;}
.switch-desc{font-size:12px;opacity:.7;line-height:1.5;}
.menu-links{display:flex;gap:8px;margin-top:12px;}
.menu-links .btn-plain{margin-top:0;padding:9px;font-size:12.5px;}
.menu-tip-board{margin-top:14px;font-size:12.5px;text-align:center;opacity:.75;background:var(--paper2);border:1.6px dashed var(--ink-soft);border-radius:var(--r-md);padding:8px;}

/* 结算 */
.end-sheet{max-width:420px;text-align:center;}
#endHead{font-size:24px;font-weight:900;margin:4px 0 6px;}
#endStars{font-size:34px;letter-spacing:6px;margin:6px 0;}
.star-empty{filter:grayscale(1);opacity:.35;}
#endStats{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:10px 0 4px;}
#endStats .es{background:var(--paper2);border:1.6px dashed var(--ink-soft);border-radius:var(--r-sm);padding:8px;font-size:12px;}
#endStats .es b{display:block;font-size:17px;margin-top:2px;color:var(--accent-deep);}
.end-new{font-size:13px;color:#fff;background:var(--accent2);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);padding:7px;margin:8px 0;font-weight:700;}
.end-btns{display:flex;gap:10px;margin-top:8px;}
.end-btns .btn-plain{width:40%;}

/* 商店 */
.coin-pill{background:var(--gold);border:2px solid var(--ink);border-radius:999px;padding:3px 12px;font-size:14px;margin-left:auto;}
.shop-item{display:flex;align-items:center;gap:12px;background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);padding:10px 12px;margin-bottom:10px;box-shadow:3px 3px 0 var(--shadow);}
.shop-item .swatch{width:52px;height:52px;border-radius:10px;border:2px solid var(--ink);flex:none;}
.shop-item h4{font-size:15px;}
.shop-item p{font-size:11.5px;opacity:.7;margin-top:2px;}
.shop-item .buy{margin-left:auto;flex:none;background:var(--accent);border:var(--inkw) solid var(--ink);border-radius:99px;padding:7px 13px;font-weight:800;box-shadow:2.5px 2.5px 0 var(--shadow);font-size:12.5px;}
.shop-item.owned .buy{background:var(--paper);opacity:.75;cursor:default;}
.shop-item.locked .buy{background:var(--ink-soft);color:var(--ink);box-shadow:none;}

/* 成就 */
.ach-item{display:flex;align-items:center;gap:12px;background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);padding:10px 12px;margin-bottom:9px;box-shadow:3px 3px 0 var(--shadow);}
.ach-item.locked{filter:grayscale(1);opacity:.55;box-shadow:none;}
.ach-item .ic{font-size:26px;flex:none;}
.ach-item h4{font-size:14px;}
.ach-item p{font-size:11.5px;opacity:.7;margin-top:2px;}
.ach-item .tick{margin-left:auto;font-size:16px;}

/* 玩法说明 */
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;}
.tab{background:var(--paper2);border:var(--inkw) solid var(--ink);border-radius:99px;padding:6px 13px;font-size:12.5px;font-weight:700;box-shadow:2px 2px 0 var(--shadow);}
.tab.active{background:var(--accent);}
.how-list{list-style:none;display:flex;flex-direction:column;gap:10px;margin-bottom:8px;}
.how-list li{font-size:13.5px;line-height:1.7;padding-left:4px;}
.how-list b{background:var(--paper2);border:1.5px solid var(--ink-soft);border-radius:6px;padding:0 6px;}
.stale-demo{opacity:.55;text-decoration:line-through;}
.practice-box{margin-top:12px;background:var(--paper2);border:1.6px dashed var(--ink-soft);border-radius:var(--r-md);padding:12px;}
#practiceBoard{display:grid;grid-template-columns:repeat(6,34px);gap:3px;width:max-content;margin:8px auto 4px;}
#practiceBoard .cell{--cell:34px;--sh:2px;box-shadow:2px 2px 0 var(--shadow);}

/* ---------- 特效 ---------- */
#fx{position:fixed;inset:0;z-index:80;pointer-events:none;}
#flash{position:fixed;inset:0;z-index:70;background:#fff;pointer-events:none;opacity:0;}
#toasts{position:fixed;bottom:calc(18px + var(--safe-area));left:50%;transform:translateX(-50%);z-index:90;display:flex;flex-direction:column;gap:8px;align-items:center;width:min(94vw,480px);pointer-events:none;}
.toast{
  background:var(--paper);border:var(--inkw) solid var(--ink);border-radius:var(--r-md);
  padding:9px 16px;font-size:13.5px;font-weight:700;
  box-shadow:4px 4px 0 var(--shadow);
  animation:toastIn .3s cubic-bezier(.34,1.56,.64,1),toastOut .35s ease-in 2.2s forwards;
  max-width:100%;text-align:center;line-height:1.4;
}
@keyframes toastIn{0%{transform:translateY(18px) scale(.7);opacity:0}100%{transform:translateY(0) scale(1);opacity:1}}
@keyframes toastOut{to{transform:translateY(12px) scale(.85);opacity:0}}

/* 分数飘字 */
.pop-num{
  position:fixed;z-index:85;pointer-events:none;font-weight:900;font-size:17px;
  color:var(--gold);text-shadow:1.5px 1.5px 0 var(--ink);
  animation:popFloat .8s ease-out forwards;
}
@keyframes popFloat{0%{transform:translateY(0) scale(.6);opacity:1}100%{transform:translateY(-46px) scale(1.2);opacity:0}}

/* ---------- 响应式 ---------- */
@media (max-width:1020px){
  .stage{flex-direction:column;align-items:center;}
  .side{width:100%;max-width:680px;flex-direction:row;flex-wrap:wrap;}
  .side .panel{flex:1;min-width:240px;}
}
@media (max-width:640px){
  body{padding:10px 10px calc(10px + var(--safe-area));}
  #mascot{width:58px;height:58px;}
  /* 专家级宽棋盘：允许横向滚动，格子不被压扁 */
  .board-wrap{max-width:100%;overflow-x:auto;padding-bottom:4px;}
  #boardFrame{width:max-content;max-width:none;margin:0 auto;}
  .topmenu .tbtn{padding:6px 9px;font-size:12px;}
  .hud{gap:6px;}
  .hud-stat{min-width:56px;padding:4px 8px;font-size:13px;}
  .hud-stat b{font-size:15px;}
  .hud-stat .lbl{font-size:11px;}
  .hud-cell{padding:5px 9px;}
  #hudCombo{max-width:120px;}
  .side .panel{flex-basis:100%;}
  .g-row{flex-wrap:nowrap;}
  .sheet{padding:16px;}
  .chip.big{font-size:13px;}
}
@media (max-height:640px) and (min-width:641px){
  #mascot{width:56px;height:56px;}
  .hud{margin-bottom:8px;}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;}
}

::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:var(--ink-soft);border-radius:8px;border:2px solid var(--bg);}