/* ===== 游戏通用 ===== */
.game-hd{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px;
  padding:12px 16px;border-radius:20px;background:linear-gradient(120deg,#7c5cff,#b07bff);color:#fff;
}
.game-hd .gh-t{font-size:17px;font-weight:800;flex:1}
.gh-chip{background:rgba(255,255,255,.22);border-radius:14px;padding:5px 12px;font-size:13px;font-weight:800}

.level-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:10px}
.lv{
  aspect-ratio:1;border-radius:18px;background:#fff;border:3px solid var(--line);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;transition:.16s;
}
.lv:hover{transform:translateY(-4px);border-color:var(--purple)}
.lv b{font-size:21px;font-weight:800;color:var(--ink-2)}
.lv .st{font-size:10px;letter-spacing:-1px}
.lv.pass{background:linear-gradient(150deg,#fff6d8,#fff);border-color:var(--yellow)}
.lv.pass b{color:#b07c00}
.lv.lock{opacity:.45;background:#f4f2f8}

/* 对对碰 */
.mm-board{display:grid;gap:9px;justify-content:center}
.mm-card{
  aspect-ratio:.82;border-radius:16px;position:relative;transform-style:preserve-3d;transition:transform .42s;cursor:pointer;
}
.mm-card.flip{transform:rotateY(180deg)}
.mm-face{
  position:absolute;inset:0;border-radius:16px;display:grid;place-items:center;backface-visibility:hidden;
  font-weight:800;box-shadow:0 4px 10px rgba(0,0,0,.09);padding:4px;text-align:center;
}
.mm-back{background:linear-gradient(140deg,#7c5cff,#b07bff);color:#fff;font-size:26px}
.mm-front{background:#fff;border:3px solid var(--line);transform:rotateY(180deg);color:var(--ink)}
.mm-front.py{color:var(--purple);font-size:clamp(12px,3.4vw,17px);letter-spacing:.5px}
.mm-front.hz{font-size:clamp(22px,6vw,34px);font-family:"Kaiti SC","KaiTi",serif}
.mm-card.ok .mm-front{background:#e7f9ee;border-color:var(--green);animation:pulse .45s}
@keyframes pulse{0%,100%{transform:rotateY(180deg) scale(1)}50%{transform:rotateY(180deg) scale(1.12)}}
.mm-card.gone{opacity:0;pointer-events:none;transition:opacity .35s .1s}

/* 专注力 · 舒尔特方格 */
.f-board{display:grid;gap:9px;justify-content:center;margin:0 auto}
.f-cell{
  aspect-ratio:1;border-radius:16px;border:3px solid var(--line);background:#fff;
  font-size:clamp(20px,5vw,30px);font-weight:800;color:var(--ink-2);cursor:pointer;
  display:grid;place-items:center;transition:.14s;box-shadow:0 3px 8px rgba(0,0,0,.07);
}
.f-cell:hover:not(:disabled){transform:translateY(-3px);border-color:var(--purple)}
.f-cell.hit{background:linear-gradient(150deg,#e7f9ee,#d6f3e3);border-color:var(--green);color:var(--green);cursor:default;animation:fpulse .4s}
.f-cell.err{background:linear-gradient(150deg,#ffe7e7,#ffd9d9);border-color:#ff8a8a;color:#e23;animation:fshake .35s}
@keyframes fpulse{0%,100%{transform:scale(1)}50%{transform:scale(1.1)}}
@keyframes fshake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}

/* 抓大鹅 */
.goose-stage{
  position:relative;width:100%;height:min(52vh,420px);border-radius:22px;overflow:hidden;
  background:linear-gradient(170deg,#e9fbf3,#f6f1ff);border:3px solid #d9f0e5;
}
.g-tile{
  position:absolute;width:60px;height:60px;border-radius:15px;background:#fff;
  border:3px solid #e6e0f5;display:grid;place-items:center;box-shadow:0 3px 7px rgba(0,0,0,.1);
  transition:transform .18s, box-shadow .18s, opacity .2s;cursor:pointer;overflow:hidden;
}
.g-tile .gt-emo{font-size:31px;line-height:1}
.g-tile .gt-word{font-size:11.5px;font-weight:800;color:#1b4a75;padding:0 2px;text-align:center;word-break:break-all;line-height:1.15}
.g-tile.cover{filter:brightness(.62) saturate(.5);cursor:not-allowed}
.g-tile.free:hover{transform:scale(1.09);box-shadow:0 6px 14px rgba(0,0,0,.18);z-index:99!important}
.g-slots{
  margin-top:12px;display:flex;gap:6px;justify-content:center;padding:9px;
  border-radius:20px;background:linear-gradient(120deg,#fff3d8,#ffe9f2);border:3px solid #ffd9a8;
}
.g-slot{
  width:clamp(38px,9.6vw,54px);height:clamp(38px,9.6vw,54px);border-radius:13px;background:rgba(255,255,255,.6);
  border:2px dashed #e0b98a;display:grid;place-items:center;overflow:hidden;
}
.g-slot .g-tile{position:static;width:100%;height:100%;box-shadow:none;border-width:2px}
.g-slot .g-tile .gt-emo{font-size:clamp(20px,5.4vw,28px)}
.g-slot .g-tile .gt-word{font-size:clamp(8px,2.2vw,10.5px)}
.g-tools{display:flex;gap:9px;justify-content:center;margin-top:12px;flex-wrap:wrap}

/* ===== 打卡 ===== */
.task-item{
  display:flex;align-items:center;gap:12px;padding:13px 15px;border-radius:18px;
  background:#fff;border:2px solid var(--line);margin-bottom:10px;transition:.16s;
}
.task-item:hover{border-color:#d9cdff}
.task-item.done{background:linear-gradient(120deg,#f1fbf4,#fff);border-color:#bfeacf}
.tk-check{
  width:30px;height:30px;border-radius:11px;border:3px solid #ded6f5;background:#fff;flex:0 0 auto;
  display:grid;place-items:center;font-size:16px;color:#fff;transition:.18s;
}
.task-item.done .tk-check{background:linear-gradient(140deg,var(--green),#84e0a3);border-color:transparent;animation:pop .35s}
.tk-emo{font-size:23px;width:30px;text-align:center}
.tk-body{flex:1;min-width:0}
.tk-name{font-size:15px;font-weight:700}
.task-item.done .tk-name{text-decoration:line-through;color:var(--ink-3)}
.tk-tag{font-size:11px;color:var(--ink-3);margin-top:2px}
.tk-del{width:28px;height:28px;border-radius:9px;background:#fff0f0;color:var(--red);font-size:14px;display:grid;place-items:center;opacity:.75}
.tk-del:hover{opacity:1;transform:scale(1.1)}

.tk-pts{
  margin-left:auto;flex:0 0 auto;font-weight:800;font-size:13px;color:#ff8a3d;
  background:#fff3e8;padding:3px 9px;border-radius:11px;white-space:nowrap;
}
.task-item.done .tk-pts{background:#e9fbef;color:var(--green)}

.rules{padding-bottom:14px}
.rule-row{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;padding:4px 2px;color:var(--ink-2)}
.rule-row b{margin-left:auto;color:#ff8a3d;font-size:15px}
.rule-tip{margin-top:8px;font-size:12px;color:var(--ink-3);line-height:1.6}

.reward{
  display:flex;align-items:center;gap:13px;padding:14px 16px;border-radius:20px;margin-bottom:11px;
  background:linear-gradient(120deg,#fff8e6,#fff);border:3px solid #ffe1a8;position:relative;overflow:hidden;
}
.reward.ready{background:linear-gradient(120deg,#e9fbef,#fff);border-color:#9fe3b8;animation:glow 1.6s ease-in-out infinite}
@keyframes glow{0%,100%{box-shadow:0 0 0 rgba(87,204,125,0)}50%{box-shadow:0 0 18px rgba(87,204,125,.4)}}
.reward.got{opacity:.62;filter:grayscale(.4)}
.rw-emo{font-size:32px;width:44px;text-align:center}
.rw-body{flex:1;min-width:0}
.rw-name{font-size:15.5px;font-weight:800}
.rw-need{font-size:12px;color:var(--ink-3);margin-top:3px}
.rw-bar{margin-top:7px}

.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;max-width:340px}
.cal .cd{
  aspect-ratio:1;border-radius:9px;background:#f3f0fa;display:grid;place-items:center;
  font-size:11px;color:var(--ink-3);font-weight:700;
}
.cal .cd.on{background:linear-gradient(140deg,var(--green),#84e0a3);color:#fff}
.cal .cd.half{background:linear-gradient(140deg,#ffd88a,#ffe9b8);color:#8a5c00}
.cal .cd.today{outline:3px solid var(--purple);outline-offset:1px}
.cal-head{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;max-width:340px;margin-bottom:5px}
.cal-head span{text-align:center;font-size:11px;color:var(--ink-3);font-weight:700}

.log-item{display:flex;align-items:center;gap:10px;padding:9px 13px;border-radius:13px;background:#faf8ff;margin-bottom:7px;font-size:13px}
.log-item .lg-p{font-weight:800;color:var(--green)}
.log-item .lg-p.minus{color:var(--red)}

/* ===== 响应式 ===== */
@media (max-width:1080px){
  :root{--sidebar-w:196px}
  .views{padding:16px 16px 34px}
}
@media (max-width:820px){
  .only-mobile{display:grid!important}
  .sidebar{
    position:fixed;left:0;top:0;bottom:0;transform:translateX(-104%);transition:transform .28s cubic-bezier(.3,1,.4,1);
    box-shadow:0 0 34px rgba(58,51,87,.22);width:250px;flex-basis:250px;
  }
  .sidebar.open{transform:none}
  .scrim{display:block;position:fixed;inset:0;background:rgba(58,51,87,.4);z-index:55;opacity:0;pointer-events:none;transition:.25s}
  .scrim.on{opacity:1;pointer-events:auto}
  .topbar{padding:11px 14px}
  .topbar-title h1{font-size:18px}
  .views{padding:14px 13px 96px}
  .tabbar{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:70;
    background:rgba(255,255,255,.94);backdrop-filter:blur(12px);border-top:2px solid var(--line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));
  }
  .tab-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:5px 0;border-radius:13px;color:var(--ink-3)}
  .tab-item span{font-size:20px;line-height:1}
  .tab-item i{font-size:10.5px;font-style:normal;font-weight:700}
  .tab-item.active{color:var(--purple);background:#f4efff}
  .tab-item.active span{animation:pop .35s}
  .card{padding:15px 16px;border-radius:22px}
  .g2,.g3,.g4{grid-template-columns:1fr}
  .hero{padding:18px}
  .hero h2{font-size:20px}
  .poem-line{font-size:18px;letter-spacing:2px}
  .quiz-q{font-size:24px;padding:16px}
  .timer-big{font-size:44px}
  .goose-stage{height:min(46vh,360px)}
}
@media (max-width:420px){
  .hz-grid{grid-template-columns:repeat(3,1fr)}
  .word-grid{grid-template-columns:repeat(2,1fr)}
  .mod-grid{grid-template-columns:repeat(2,1fr)}
  .mod-card{min-height:104px;padding:13px}
  .mod-card .mc-name{font-size:14.5px}
}
@media print{.sidebar,.tabbar,.topbar{display:none}}
