/* ============ Power Up 1 · 单词乐园 ============ */
:root{
  /* 本页是「奶油底色 + 彩色卡通」的浅色设计，声明只支持浅色，
     阻止安卓/华为浏览器的「强制深色网页」把天空、草地、角色反色成脏兮兮的深棕 */
  color-scheme: only light;
  --cream:#fff8ee;
  --paper:#ffffff;
  --ink:#2f2417;
  --ink-soft:#7a6a55;
  --sun:#ffc93c;
  --sun-d:#e0a400;
  --pink:#ff8fab;
  --pink-d:#e0648a;
  --sky:#6fc9f7;
  --sky-d:#3aa4d8;
  --mint:#7ee0a1;
  --mint-d:#4cbf78;
  --grape:#b79cff;
  --grape-d:#8f6ee8;
  --coral:#ff9a76;
  --shadow:0 6px 0 rgba(47,36,23,.12), 0 12px 26px rgba(47,36,23,.10);
  --radius:26px;
  --font: "Baloo 2","Nunito","Segoe UI Variable Display","Segoe UI","Microsoft YaHei","PingFang SC",system-ui,-apple-system,sans-serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%}
body{
  font-family:var(--font);
  color:var(--ink);
  background:
    radial-gradient(1200px 600px at 15% -10%, #fff3d6 0%, transparent 60%),
    radial-gradient(900px 500px at 90% 0%, #e7f6ff 0%, transparent 55%),
    var(--cream);
  min-height:100vh;
  overflow-x:hidden;
}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
img{display:block;max-width:100%}

/* ---------- 通用 ---------- */
.wrap{max-width:1040px;margin:0 auto;padding:18px 18px 60px}
.topbar{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.spacer{flex:1}
.brand{display:flex;align-items:baseline;gap:10px}
.brand h1{font-size:26px;margin:0;letter-spacing:.4px}
.brand h1 i{font-style:normal}
.brand h1{white-space:nowrap}
.brand span{font-size:14px;color:var(--ink-soft);font-weight:600}

.iconbtn{
  width:46px;height:46px;border-radius:16px;background:#fff;
  box-shadow:0 4px 0 rgba(47,36,23,.10),0 6px 14px rgba(47,36,23,.08);
  display:grid;place-items:center;font-size:20px;transition:transform .12s, box-shadow .12s;
}
.iconbtn:active{transform:translateY(3px);box-shadow:0 1px 0 rgba(47,36,23,.10)}

.pill{
  display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:999px;
  background:#fff;font-weight:800;font-size:15px;
  box-shadow:0 4px 0 rgba(47,36,23,.08),0 8px 18px rgba(47,36,23,.07);
}
.pill.stars{background:linear-gradient(180deg,#fff7db,#ffe9a8)}

/* ---------- 首页 ---------- */
.hero{
  background:linear-gradient(140deg,#ffffff 0%,#fff6e2 100%);
  border-radius:34px;padding:22px 24px;margin-bottom:22px;position:relative;overflow:hidden;
  box-shadow:var(--shadow);
}
.hero h2{margin:0 0 6px;font-size:30px;line-height:1.2}
.hero p{margin:0;color:var(--ink-soft);font-weight:600;font-size:15px}
.hero .deco{position:absolute;right:-30px;bottom:-40px;font-size:150px;opacity:.10;transform:rotate(-12deg)}
.hero .row{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;align-items:center}

.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:16px}
.ucard{
  background:#fff;border-radius:26px;padding:0;overflow:hidden;text-align:left;
  box-shadow:var(--shadow);transition:transform .16s ease, box-shadow .16s ease;position:relative;
}
.ucard:hover{transform:translateY(-4px)}
.ucard:active{transform:translateY(2px) scale(.995)}
.ucard .photo{
  height:132px;background:#f2ece2 center/cover no-repeat;position:relative;
}
.ucard .photo::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0) 45%,rgba(0,0,0,.34) 100%)}
.ucard .no{
  position:absolute;left:12px;top:12px;width:40px;height:40px;border-radius:14px;
  display:grid;place-items:center;font-weight:900;font-size:20px;color:#fff;
  box-shadow:0 3px 10px rgba(0,0,0,.25);backdrop-filter:saturate(1.2);
}
.ucard .body{padding:12px 15px 15px}
.ucard h3{margin:0;font-size:19px;letter-spacing:.2px}
.ucard .cn{font-size:13px;color:var(--ink-soft);font-weight:700;margin-top:2px}
.ucard .meta{display:flex;align-items:center;gap:6px;margin-top:10px;font-size:13px;font-weight:800;color:#a08c6e}
.bar{height:8px;border-radius:99px;background:#f0e9dc;overflow:hidden;flex:1}
.bar > i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--mint),var(--mint-d));transition:width .5s}

/* ---------- 单元页 ---------- */
.uhead{
  border-radius:30px;padding:20px 22px;color:#fff;position:relative;overflow:hidden;margin-bottom:20px;
  box-shadow:0 8px 0 rgba(0,0,0,.10),0 14px 30px rgba(47,36,23,.16);
}
.uhead h2{margin:0;font-size:28px}
.uhead .cn{opacity:.92;font-weight:700;margin-top:4px}
.uhead .mission{display:inline-block;margin-top:12px;background:rgba(255,255,255,.22);padding:7px 14px;border-radius:99px;font-size:13px;font-weight:800}
.uhead .big{position:absolute;right:14px;top:50%;transform:translateY(-50%);font-size:82px;opacity:.28}

.acts{display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));gap:14px}
.act{
  background:#fff;border-radius:24px;padding:16px;display:flex;gap:14px;align-items:center;text-align:left;
  box-shadow:var(--shadow);transition:transform .14s;
}
.act:active{transform:translateY(3px)}
.act .ic{width:56px;height:56px;border-radius:18px;display:grid;place-items:center;font-size:27px;flex:0 0 auto}
.act b{display:block;font-size:17px}
.act small{display:block;color:var(--ink-soft);font-weight:700;font-size:12.5px;margin-top:3px;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ---------- 游戏通用 ---------- */
.stage{min-height:76vh;display:flex;flex-direction:column}
.sbody{flex:1;display:flex;flex-direction:column;justify-content:center;padding:6px 0 4vh}
.qhead{display:flex;align-items:center;gap:14px;margin-bottom:18px}
.steps{display:flex;gap:6px;flex:1}
.steps i{height:10px;flex:1;border-radius:99px;background:#eee3d2;transition:background .3s}
.steps i.on{background:linear-gradient(90deg,var(--sun),var(--sun-d))}
.steps i.bad{background:#ffb3b3}

.prompt{font-size:22px;font-weight:900;margin:0 0 14px;letter-spacing:.3px}
.prompt small{font-weight:700;color:var(--ink-soft);font-size:14px;display:block;margin-top:4px}

.speaker{
  width:104px;height:104px;border-radius:34px;margin:6px auto 20px;display:grid;place-items:center;font-size:44px;
  background:linear-gradient(180deg,#8fd8ff,#5cc0f0);color:#fff;
  box-shadow:0 8px 0 #3aa4d8, 0 14px 26px rgba(58,164,216,.4);
  transition:transform .1s;
}
.speaker:active{transform:translateY(5px);box-shadow:0 3px 0 #3aa4d8}
.speaker.playing{animation:pulse .7s infinite}
@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}

.opts{display:grid;grid-template-columns:1fr 1fr;gap:14px;width:100%;max-width:740px;margin:0 auto}
.opt{
  background:#fff;border-radius:24px;overflow:hidden;box-shadow:var(--shadow);min-width:0;
  transition:transform .12s, box-shadow .12s, outline .1s;position:relative;outline:4px solid transparent;
}
.opt:active{transform:translateY(3px)}
.opt .ph{width:100%;height:auto;aspect-ratio:1.45;max-height:210px;background:#f2ece2 center/cover no-repeat}
.opt .txt{padding:14px;font-size:21px;font-weight:900;text-align:center;letter-spacing:.3px}
.opt.right{outline-color:#7ee0a1;animation:pop .35s}
.opt.wrong{outline-color:#ff8b8b;animation:shake .4s}
@keyframes pop{0%{transform:scale(1)}45%{transform:scale(1.05)}100%{transform:scale(1)}}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}

/* 闪卡 */
.fcard{
  background:#fff;border-radius:32px;box-shadow:var(--shadow);overflow:hidden;
  max-width:520px;margin:0 auto;width:100%;
}
.fcard .ph{height:min(46vh,360px);background:#f2ece2 center/cover no-repeat}
.fcard .info{padding:20px 22px 24px;text-align:center}
.fcard .en{font-size:40px;font-weight:900;letter-spacing:.5px;line-height:1.1}
.fcard .zh{font-size:18px;color:var(--ink-soft);font-weight:800;margin-top:6px}
.fcard .tools{display:flex;gap:9px;justify-content:center;margin-top:16px;flex-wrap:wrap}
.fcard .tools .mini{padding:10px 14px;font-size:14px}
/* 单词卡：批内进度点 + 批间休息卡 */
.fprog{display:flex;gap:6px;justify-content:center;margin-top:16px;flex-wrap:wrap}
.fprog i{width:10px;height:10px;border-radius:99px;background:#eee3d2;transition:background .25s,transform .25s}
.fprog i.on{background:linear-gradient(180deg,#ffe07a,#ffc93c);transform:scale(1.12)}
.fbreak{
  background:#fff;border-radius:32px;box-shadow:var(--shadow);
  max-width:520px;margin:7vh auto 0;width:100%;padding:34px 24px 28px;text-align:center;
}
.fbreak .big{font-size:62px;line-height:1;animation:pop .5s}
.fbreak h2{margin:12px 0 8px;font-size:24px;letter-spacing:.3px}
.fbreak p{margin:0;color:var(--ink-soft);font-weight:800;font-size:15px;line-height:1.7}
.fbreak .dots{display:flex;gap:9px;justify-content:center;margin:20px 0 24px}
.fbreak .dots i{width:15px;height:15px;border-radius:99px;background:#eee3d2;transition:background .3s}
.fbreak .dots i.on{background:linear-gradient(180deg,#a9f0c1,#7ee0a1)}
.fbreak .btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.fbreak .btns .mini{padding:14px 20px}
.fbreak .hint{margin-top:16px;font-size:12.5px;font-weight:800;color:#b8a68d;line-height:1.5}
.mini{padding:11px 18px;border-radius:16px;background:#f6efe3;font-weight:900;font-size:15px;box-shadow:0 4px 0 rgba(47,36,23,.08)}
.mini:active{transform:translateY(3px);box-shadow:none}
.mini.primary{background:linear-gradient(180deg,#ffe07a,#ffc93c);box-shadow:0 4px 0 var(--sun-d)}
.mini.done{background:linear-gradient(180deg,#a9f0c1,#7ee0a1);box-shadow:0 4px 0 var(--mint-d)}
.numcard{display:grid;place-items:center;height:min(46vh,360px);background:linear-gradient(160deg,#fff4d6,#ffe6f0)}
.numcard b{font-size:150px;line-height:1;color:#e08a3c;text-shadow:0 8px 0 #ffd9a8}
.numcard.sm{height:auto;aspect-ratio:1.45;max-height:210px;min-height:0;background:linear-gradient(160deg,#fff4d6,#ffe6f0)}
.numcard.sm b{font-size:64px;text-shadow:0 5px 0 #ffd9a8}
.numcard.sq{height:190px;min-height:0}
.numcard.sq b{font-size:90px}

/* 拼词 */
.spellbox{background:#fff;border-radius:28px;padding:18px;box-shadow:var(--shadow);width:100%;max-width:560px;margin:0 auto}
.slots{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:8px 0 18px}
.slot{
  width:46px;height:56px;border-radius:14px;background:#f7f1e6;display:grid;place-items:center;
  font-size:26px;font-weight:900;border-bottom:5px solid #e6dbc8;
}
.slot.filled{background:#fff;border-bottom-color:var(--sun-d);box-shadow:0 3px 10px rgba(47,36,23,.08)}
.letters{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
.tile{
  width:54px;height:54px;border-radius:16px;background:#fff;font-size:24px;font-weight:900;
  box-shadow:0 5px 0 rgba(47,36,23,.14),0 7px 14px rgba(47,36,23,.10);display:grid;place-items:center;
  transition:transform .1s;
}
.tile:active{transform:translateY(4px);box-shadow:0 1px 0 rgba(47,36,23,.14)}
.tile.used{opacity:.25;pointer-events:none}

/* 记忆配对 */
.memgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;width:100%;max-width:620px;margin:0 auto}
.mcard{
  min-width:0;aspect-ratio:1/1.1;min-height:130px;border-radius:20px;position:relative;box-shadow:var(--shadow);overflow:hidden;
  background:linear-gradient(160deg,#8fd8ff,#5cc0f0);
}
.mcard .face{
  position:absolute;inset:0;display:grid;place-items:center;backface-visibility:hidden;
  transition:transform .35s;padding:8px;text-align:center;font-weight:900;
}
.mcard .back{background:linear-gradient(160deg,#9be0ff,#4fb6ec);color:#fff;font-size:44px;font-weight:900}
.mcard .front{background:#fff center/cover no-repeat;font-size:19px;color:var(--ink);transform:rotateY(180deg)}
.mcard .front.word{background:#fff;display:grid;place-items:center}
.mcard.flip .back{transform:rotateY(180deg)}
.mcard.flip .front{transform:rotateY(0)}
.mcard.matched{animation:pop .4s;box-shadow:0 0 0 4px #7ee0a1, var(--shadow)}

/* 句子 / 语法 / 故事 */
.card{background:#fff;border-radius:26px;padding:20px;box-shadow:var(--shadow);margin-bottom:14px}
.srow{display:flex;align-items:center;gap:14px;padding:14px 6px;border-bottom:1px dashed #eee0cc}
.srow:last-child{border-bottom:none}
.srow .en{font-size:20px;font-weight:900;line-height:1.35}
.srow .zh{font-size:13.5px;color:var(--ink-soft);font-weight:700;margin-top:3px}
.srow .spk{margin-left:auto;width:48px;height:48px;border-radius:16px;background:#eaf7ff;color:#2b8fc4;display:grid;place-items:center;font-size:20px;flex:0 0 auto;box-shadow:0 3px 0 #cdeafb}
.srow .spk:active{transform:translateY(3px);box-shadow:none}

.gram li{margin:10px 0;line-height:1.65;font-size:15.5px;font-weight:600}
.gram li b{color:#c2410c}
.gram ul{padding-left:20px;margin:8px 0}

.panel{border-radius:22px;overflow:hidden;box-shadow:var(--shadow);margin:0 auto 16px;background:#fff;width:100%;max-width:660px}
.panel .pic{aspect-ratio:1.44;background:#f2ece2 center/cover no-repeat;position:relative}
.panel .no{position:absolute;left:10px;top:10px;width:34px;height:34px;border-radius:12px;background:rgba(0,0,0,.55);color:#fff;display:grid;place-items:center;font-weight:900}
.panel .lines{padding:14px 16px}
.line{display:flex;gap:10px;align-items:flex-start;padding:7px 0}
.line .who{font-size:11.5px;font-weight:900;color:#9a7b4f;background:#fdf2dd;border-radius:8px;padding:3px 7px;white-space:nowrap;margin-top:2px}
.line .txt{font-size:16px;font-weight:800;line-height:1.45}
.line .txt small{display:block;font-size:12.5px;color:var(--ink-soft);font-weight:700;margin-top:2px}

/* 结算 */
.result{text-align:center;padding:24px 10px}
.result .big{font-size:64px;margin-bottom:6px}
.result h2{font-size:30px;margin:6px 0}
.result p{color:var(--ink-soft);font-weight:700;margin:0 0 20px}
.starrow{display:flex;gap:10px;justify-content:center;font-size:44px;margin:8px 0 18px}
.starrow span{opacity:.22;transform:scale(.85);transition:all .3s}
.starrow span.on{opacity:1;transform:scale(1)}

/* 彩带 */
.confetti{position:fixed;inset:0;pointer-events:none;z-index:99}

/* 弹出提示 */
#toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,20px);opacity:0;pointer-events:none;
  background:#2f2417;color:#fff;padding:13px 22px;border-radius:99px;font-weight:900;font-size:16px;
  transition:.25s;z-index:100;box-shadow:0 10px 24px rgba(0,0,0,.25)
}
#toast.show{opacity:1;transform:translate(-50%,0)}

.footnote{text-align:center;color:#b8a68d;font-size:12.5px;font-weight:700;margin-top:28px;line-height:1.7}

/* ---------- 中文提示开关：关掉后只留英文 ---------- */
body.no-zh .zh,
body.no-zh .line .txt small,
body.no-zh .fcard .zh,
body.no-zh .srow .zh{display:none}
body.no-zh .no-zh-keep{display:block}

/* ---------- 错词本入口 ---------- */
.wrongbar{
  display:flex;align-items:center;gap:14px;width:100%;text-align:left;
  background:linear-gradient(140deg,#fff5f8,#ffe6ef);border-radius:24px;padding:14px 16px;margin-bottom:18px;
  box-shadow:0 6px 0 rgba(224,100,138,.14),0 12px 24px rgba(224,100,138,.14);
  transition:transform .14s;
}
.wrongbar:active{transform:translateY(3px)}
.wrongbar .ic{width:50px;height:50px;border-radius:16px;background:#ffd9e6;display:grid;place-items:center;font-size:26px;flex:0 0 auto}
.wrongbar b{display:block;font-size:16px;color:#a8446a}
.wrongbar small{display:block;color:#b98598;font-weight:700;font-size:12.5px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wrongbar .go{font-weight:900;color:#e0648a;font-size:14px;white-space:nowrap}
.wcount{font-weight:900;color:#e0648a;font-size:14px;background:#ffe6ef;border-radius:10px;padding:4px 9px}

/* ---------- 今日复习（记忆曲线） ---------- */
.todaybar{
  display:flex;align-items:center;gap:14px;width:100%;text-align:left;
  background:linear-gradient(140deg,#f1fbf0,#e6f6e8);border-radius:24px;padding:14px 16px;margin-bottom:14px;
  box-shadow:0 6px 0 rgba(122,172,116,.14),0 12px 24px rgba(122,172,116,.14);
  transition:transform .14s;
}
.todaybar:active{transform:translateY(3px)}
.todaybar .ic{width:50px;height:50px;border-radius:16px;background:#d8efd3;display:grid;place-items:center;font-size:26px;flex:0 0 auto}
.todaybar b{display:block;font-size:16px;color:#47773f}
.todaybar small{display:block;color:#7fa079;font-weight:700;font-size:12.5px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.todaybar .go{font-weight:900;color:#5c9455;font-size:14px;white-space:nowrap}

.fstat{display:flex;gap:10px;justify-content:center;margin:16px 0 4px}
.fstat > div{flex:1;max-width:112px;background:#f8f4ec;border-radius:16px;padding:10px 6px;text-align:center}
.fstat b{display:block;font-size:22px;color:#5a4632;line-height:1.2}
.fstat span{display:block;font-size:11.5px;color:#a4906f;font-weight:700;margin-top:2px}

/* ---------- 朗读打分 ---------- */
.micbtn{
  width:112px;height:112px;border-radius:50%;margin:18px auto 0;display:grid;place-items:center;
  background:linear-gradient(180deg,#ff9fc4,#ff6ba6);color:#fff;font-size:48px;
  box-shadow:0 9px 0 #d94b86,0 16px 30px rgba(217,75,134,.35);
  transition:transform .12s,box-shadow .12s;
}
.micbtn:active{transform:translateY(5px);box-shadow:0 3px 0 #d94b86}
.micbtn.on{animation:micpulse 1s infinite}
@keyframes micpulse{
  0%,100%{transform:scale(1);box-shadow:0 9px 0 #d94b86,0 0 0 0 rgba(255,107,166,.5)}
  50%{transform:scale(1.06);box-shadow:0 9px 0 #d94b86,0 0 0 22px rgba(255,107,166,0)}
}
.michint{text-align:center;font-weight:800;color:#a08c6e;font-size:14px;margin-top:16px;min-height:20px}
.scorebox{text-align:center;margin-top:18px;padding:16px;border-radius:22px;background:linear-gradient(160deg,#fff, #fff6f9);box-shadow:var(--shadow)}
.scorebox .num{font-size:56px;font-weight:900;line-height:1}
.scorebox .st{font-size:24px;letter-spacing:4px;margin-top:4px}
.scorebox .heard{font-size:13.5px;color:var(--ink-soft);font-weight:800;margin-top:8px}
.scorebox .msg{font-size:15px;font-weight:900;margin-top:6px}

/* ---------- 语法小测 ---------- */
.qcard{
  background:#fff;border-radius:26px;padding:22px 20px;box-shadow:var(--shadow);
  max-width:640px;margin:0 auto 16px;text-align:center;
}
.qcard .qtxt{font-size:25px;font-weight:900;line-height:1.5;letter-spacing:.2px}
.qcard .qtxt em{color:#c2410c;font-style:normal}
.tips{
  margin:14px auto 0;max-width:600px;background:linear-gradient(160deg,#fff9ec,#fff1d6);
  border-radius:18px;padding:13px 16px;font-weight:800;font-size:14px;color:#8a7355;line-height:1.6;
  animation:pop .3s;
}

@media (max-width:640px){
  .wrap{padding:14px 13px 50px}
  .brand h1{font-size:22px}
  .brand h1 i{display:none}
  .brand span{display:none}
  .hero h2{font-size:23px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}
  .ucard .photo{height:108px}
  .ucard h3{font-size:16px}
  .uhead h2{font-size:22px}
  .opts{gap:10px}
  .opt .ph{height:112px}
  .opt .txt{font-size:17px;padding:11px}
  .prompt{font-size:19px}
  .fcard .en{font-size:32px}
  .srow .en{font-size:17px}
  .memgrid{grid-template-columns:repeat(3,1fr);gap:9px}
  .mcard .front{font-size:15px}
  .slot{width:38px;height:48px;font-size:21px}
  .tile{width:46px;height:46px;font-size:20px}
  .micbtn{width:96px;height:96px;font-size:40px}
  .qcard{padding:16px 14px}
  .qcard .qtxt{font-size:20px}
  .scorebox .num{font-size:44px}
  .wrongbar{padding:12px 13px;gap:10px}
  .wrongbar b{font-size:14.5px}
}

/* ================= 语法动画（原创卡通小剧场） ================= */
.gm{width:100%;max-width:920px;margin:0 auto}

/* 单元页顶部的大按钮：一眼就能看到"看语法动画" */
.gm-cta{
  display:flex;align-items:center;gap:12px;width:100%;max-width:920px;margin:0 auto 14px;
  padding:13px 16px;border:0;border-radius:22px;cursor:pointer;font-family:inherit;
  background:linear-gradient(135deg,#d3c4ff,#a78bfa);
  box-shadow:0 10px 24px rgba(140,110,240,.32);
}
.gm-cta:active{transform:scale(.985)}
.gm-cta.locked{background:linear-gradient(135deg,#e3dbd1,#cbbfb0);box-shadow:0 6px 16px rgba(120,100,80,.18)}
.gm-cta.locked .play{color:#8d8073}
.gm-cta.locked b{color:#5b4f42}
.act.locked{opacity:.72}
.gm-cta .play{
  width:44px;height:44px;flex:none;border-radius:50%;background:#fff;color:#7c5cff;
  display:grid;place-items:center;font-size:16px;box-shadow:0 4px 10px rgba(60,40,110,.18)
}
.gm-cta b{display:block;font-size:17px;font-weight:900;color:#2b2320;line-height:1.2}
.gm-cta small{display:block;font-size:12px;font-weight:700;color:#584a7d;margin-top:2px}
.gm-cta .arrow{font-weight:900;color:#584a7d;font-size:18px}
.gm-fail{
  width:100%;background:#fff4e5;border:2px dashed #ffb4a2;border-radius:22px;
  padding:18px;text-align:center;font-weight:800;color:#7a5a33
}
.gm-fail b{font-size:17px;display:block;margin-bottom:6px}

/* 佩奇剧场入口（本地专属） */
.pp-cta{
  display:flex;align-items:center;gap:12px;width:100%;max-width:920px;margin:0 auto 14px;
  padding:13px 16px;border:0;border-radius:22px;cursor:pointer;font-family:inherit;
  background:linear-gradient(135deg,#ffd9e6,#ff9dc2);
  box-shadow:0 10px 24px rgba(240,130,170,.30);
}
.pp-cta:active{transform:scale(.985)}
.pp-cta .pig{
  width:44px;height:44px;flex:none;border-radius:50%;background:#fff;
  display:grid;place-items:center;font-size:22px;box-shadow:0 4px 10px rgba(180,80,120,.18)
}
.pp-cta b{display:block;font-size:17px;font-weight:900;color:#5d2237;line-height:1.2}
.pp-cta small{display:block;font-size:12px;font-weight:800;color:#9c4f6c;margin-top:3px;line-height:1.45}
.pp-cta .arrow{font-weight:900;color:#9c4f6c;font-size:18px}
.pp-cta.off{background:linear-gradient(135deg,#efe6e0,#d8c9bd);box-shadow:0 6px 16px rgba(120,100,80,.16)}
.pp-cta.off b{color:#5b4f42}
.pp-cta.off small{color:#8a7768}
.pp-cta.off .arrow{color:#8a7768}
.gm-fail p{font-size:13px;margin:0 0 12px;line-height:1.6}

.gm-stage{
  position:relative;width:100%;aspect-ratio:16/9.6;border-radius:26px;overflow:hidden;
  box-shadow:0 20px 44px rgba(80,60,40,.20), 0 0 0 5px #fff inset;background:#e8f7ff;
}
/* 老浏览器（不支持 aspect-ratio）也要有高度，否则动画区塌成一条线 */
@supports not (aspect-ratio: 16 / 9.6) {
  .gm-stage{height:0;padding-top:60%}
}
.gm-bg{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:block}
.gm-layer{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}

/* 缓慢推镜 + 暗角，画面更有镜头感 */
.gm-scene{position:absolute;top:0;left:0;right:0;bottom:0;transform-origin:52% 62%;animation:gm-push 26s ease-out both}
@keyframes gm-push{0%{transform:scale(1)}100%{transform:scale(1.055)}}
.gm-vignette{
  position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;border-radius:26px;
  box-shadow:inset 0 0 80px rgba(70,45,20,.16), inset 0 -34px 60px rgba(70,45,20,.10)
}
.gm-cloud{animation:gm-drift 46s ease-in-out infinite}
.gm-cloud-slow{animation-duration:70s;animation-delay:-12s}
@keyframes gm-drift{0%{transform:translateX(-70px)}50%{transform:translateX(70px)}100%{transform:translateX(-70px)}}
/* 农场风车慢慢转，画面就活了一点 */
.gm-mill{animation:gm-mill 16s linear infinite}
@keyframes gm-mill{to{transform:rotate(360deg)}}
/* 眨眼：眼睛那一组整体压一下 */
.gm-char .eyes{transform-box:fill-box;transform-origin:center;animation:gm-blink 5.6s infinite}
@keyframes gm-blink{0%,93%,100%{transform:scaleY(1)}96%{transform:scaleY(.08)}}
/* 角色身上补一层高光，别太平 */
.gm-actor::after{
  content:"";position:absolute;left:10%;top:3%;width:54%;height:42%;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle at 34% 34%, rgba(255,255,255,.34), rgba(255,255,255,0) 70%)
}

/* 看完就答 */
.gm-quiz{
  position:absolute;top:0;left:0;right:0;bottom:0;display:none;place-items:center;padding:12px;
  background:rgba(38,26,14,.40);border-radius:26px;z-index:6
}
.gm-quiz.in{display:grid;animation:gm-fade .24s ease}
@keyframes gm-fade{from{opacity:0}to{opacity:1}}
.gm-qcard{
  width:100%;max-width:520px;max-height:100%;overflow:auto;background:#fffdf7;border-radius:20px;
  padding:15px 15px 13px;box-shadow:0 18px 40px rgba(0,0,0,.28);border:3px solid #ffe0a3
}
.gm-qtag{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:900;font-size:12.5px;color:#b8842a;letter-spacing:.4px;margin-bottom:5px}
.gm-qtag em{display:inline-flex;gap:5px;font-style:normal}
.gm-qtag em i{width:7px;height:7px;border-radius:99px;background:#f0dcc0;display:block}
.gm-qtag em i.now{background:#ffc93c;transform:scale(1.25)}
.gm-qtag em i.ok{background:#59c07e}
.gm-qcard.gm-shrink{opacity:0;transform:scale(.94);transition:opacity .16s ease,transform .18s ease}
.gm-qcard{transition:opacity .16s ease,transform .18s ease}
.gm-qtext{font-weight:900;font-size:clamp(13.5px,2.1vw,18px);color:#2b2320;line-height:1.35;margin-bottom:10px}
.gm-qopts{display:grid;gap:8px}
.gm-qopt{
  font-family:inherit;text-align:left;font-weight:800;font-size:clamp(12.5px,1.9vw,16px);cursor:pointer;
  padding:10px 12px;border-radius:14px;border:2px solid #eddcc0;background:#fff;color:#3a2f2a
}
.gm-qopt:active{transform:scale(.99)}
.gm-qopt.right{background:#dcf7e4;border-color:#59c07e;color:#1f6b3c}
.gm-qopt.wrong{background:#ffe6e6;border-color:#ff9a9a;color:#a13a3a;opacity:.9}
.gm-qwhy{margin-top:10px;font-size:12.8px;font-weight:800;color:#2f7a4d;line-height:1.5}
.gm-qwhy span{display:block;color:#7a6a52;font-weight:700;margin-top:3px}
.gm-stage.quizzing{aspect-ratio:auto;min-height:min(72vh,430px)}
.gm-qcard.solved .gm-qopt:not(.right){display:none}
.gm-qcard.solved .gm-qtext{font-size:12.5px;margin-bottom:2px}
.gm-qnext{
  margin-top:10px;width:100%;font-family:inherit;font-weight:900;font-size:14px;padding:11px;border:0;
  border-radius:14px;background:linear-gradient(180deg,#ffe07a,#ffc93c);color:#5b4a33;cursor:pointer
}

.gm-actor{
  position:absolute;bottom:10%;width:24%;min-width:104px;max-width:186px;
  transform:translateX(-50%);opacity:0;
  transition:left .62s cubic-bezier(.3,1.22,.5,1), opacity .45s ease;
  will-change:left;
}
.gm-char{width:100%;height:auto;display:block;transform-origin:50% 92%}
.gm-actor.walk .gm-char{animation:gm-walk .3s ease-in-out infinite}
@keyframes gm-walk{0%,100%{transform:translateY(0) rotate(-1.5deg)}50%{transform:translateY(-7px) rotate(1.5deg)}}
.gm-actor.act-hop .gm-char{animation:gm-hop .72s cubic-bezier(.3,1.6,.45,1)}
@keyframes gm-hop{0%{transform:translateY(0)}30%{transform:translateY(-34px) scale(1.04)}60%{transform:translateY(0) scale(.97,1.03)}100%{transform:translateY(0)}}
.gm-actor.act-nod .gm-char{animation:gm-nod .8s ease-in-out}
@keyframes gm-nod{0%,100%{transform:rotate(0)}25%{transform:rotate(7deg)}55%{transform:rotate(-4deg)}80%{transform:rotate(5deg)}}
.gm-actor.act-wave .gm-char{animation:gm-wave .85s ease-in-out}
@keyframes gm-wave{0%,100%{transform:rotate(0)}20%{transform:rotate(-7deg) translateY(-4px)}50%{transform:rotate(6deg) translateY(-6px)}80%{transform:rotate(-4deg)}}
.gm-actor.act-shake .gm-char{animation:gm-shake .7s ease-in-out}
@keyframes gm-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-8px) rotate(-3deg)}75%{transform:translateX(8px) rotate(3deg)}}
.gm-actor.talking .mouth{animation:gm-talk .26s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes gm-talk{0%,100%{transform:scaleY(1) translateY(0)}50%{transform:scaleY(.45) translateY(1.5px)}}

.gm-bubble{
  position:absolute;bottom:65%;max-width:46%;background:#fff;border:4px solid #3a2f2a;
  border-radius:22px;padding:11px 16px 12px;box-shadow:0 7px 0 rgba(58,47,42,.13);
  opacity:0;transform:translate(-50%,12px) scale(.9);
  transition:opacity .26s ease, transform .3s cubic-bezier(.3,1.5,.5,1);
}
.gm-bubble.in{opacity:1;transform:translate(-50%,0) scale(1)}
.gm-bubble.left{left:24%}
.gm-bubble.mid{left:50%}
.gm-bubble.right{left:73%}
.gm-bubble::after{
  content:"";position:absolute;left:50%;bottom:-12px;width:16px;height:16px;margin-left:-9px;
  background:#fff;border-right:4px solid #3a2f2a;border-bottom:4px solid #3a2f2a;transform:rotate(45deg);
}
.gm-en{font-weight:900;font-size:clamp(14px,2.5vw,23px);color:#2b2320;line-height:1.24;letter-spacing:.1px}
.gm-zh{font-weight:800;font-size:clamp(10px,1.5vw,14px);color:#9b8258;margin-top:3px}

.gm-prop{
  position:absolute;width:15%;min-width:70px;max-width:128px;
  transform:translate(-50%,0) scale(.55);opacity:0;
  transition:opacity .3s ease, transform .42s cubic-bezier(.3,1.6,.5,1);
}
.gm-prop.in{opacity:1;transform:translate(-50%,0) scale(1)}
.gm-prop.flying{transition:left 1s cubic-bezier(.4,.1,.3,1), bottom 1s cubic-bezier(.4,.1,.3,1), opacity .3s, transform .3s}
.gm-prop img{
  width:100%;aspect-ratio:1/1;object-fit:cover;display:block;border-radius:16px;
  border:4px solid #fff;box-shadow:0 10px 20px rgba(0,0,0,.20);
}
.gm-plabel{display:block;text-align:center;font-weight:900;font-size:12px;color:#fff;
  background:#3a2f2a;border-radius:9px;padding:1px 6px;margin-top:4px}

.gm-card{
  position:absolute;left:6%;top:12%;max-width:44%;background:#fff8d6;
  border:4px solid #3a2f2a;border-radius:16px;padding:9px 15px 10px;
  transform:rotate(-4deg) scale(.7);opacity:0;
  transition:opacity .3s ease, transform .35s cubic-bezier(.3,1.5,.5,1);
  box-shadow:0 7px 0 rgba(58,47,42,.12);
}
.gm-card.in{opacity:1;transform:rotate(-1.6deg) scale(1)}
.gm-card.right{left:auto;right:8%}
.gm-card i{display:block;font-style:normal;font-weight:800;font-size:clamp(9px,1.3vw,12.5px);color:#ab8b46;margin-bottom:2px}
.gm-card b{display:block;font-weight:900;font-size:clamp(13px,1.9vw,20px);color:#2b2320;line-height:1.2}

.gm-desk{
  position:absolute;left:50%;bottom:6%;width:33%;max-width:280px;
  transform:translateX(-50%) translateY(26px);opacity:0;transition:.45s ease;pointer-events:none;
}
.gm-desk.in{opacity:1;transform:translateX(-50%) translateY(0)}
.gm-desk svg{width:100%;height:auto;display:block}

.gm-under{margin-top:14px}
.gm-rule{
  display:flex;gap:9px;align-items:flex-start;background:#fff;border-radius:18px;
  padding:13px 16px;box-shadow:0 10px 24px rgba(90,70,50,.10);
  opacity:0;transform:translateY(8px);transition:opacity .3s ease, transform .3s ease;
}
.gm-rule.show{opacity:1;transform:none}
.gm-rule.pop{animation:gm-pop .45s ease}
@keyframes gm-pop{0%{transform:scale(.97)}60%{transform:scale(1.015)}100%{transform:scale(1)}}
.gm-rule b{font-weight:900;font-size:clamp(12.5px,1.7vw,15.5px);color:#3d3128;line-height:1.65}

.gm-ctrl{display:flex;align-items:center;gap:10px;margin-top:11px;flex-wrap:wrap}
.gm-btn{
  border:0;background:#fff;border-radius:14px;padding:10px 16px;font-weight:900;
  font-size:14px;color:#3d3128;box-shadow:0 6px 0 #ece2d4, 0 8px 16px rgba(90,70,50,.10);
  cursor:pointer;font-family:inherit;transition:.15s;
}
.gm-btn:active{transform:translateY(4px);box-shadow:0 2px 0 #ece2d4}
.gm-dots{display:flex;gap:6px;align-items:center;margin-left:auto}
.gm-dots i{width:8px;height:8px;border-radius:50%;background:#e6dccd;transition:.3s}
.gm-dots i.on{background:#ffb03a;transform:scale(1.3)}

.gm-peppa{
  margin-top:14px;background:#fff6f8;border:3px dashed #ffc3d0;border-radius:18px;
  padding:13px 16px;font-weight:800;font-size:13.5px;color:#8a6b72;line-height:1.6;
}
.gm-peppa b{color:#e0557a}

@media (max-width:640px){
  .gm-stage{aspect-ratio:16/11.4;border-radius:20px}
  .gm-actor{width:23%;min-width:70px}
  .gm-prop{width:21%;min-width:62px}
  .gm-bubble{max-width:64%;padding:9px 12px 10px;border-width:3px;bottom:67%}
  .gm-bubble.left{left:32%} .gm-bubble.right{left:68%}
  .gm-card{max-width:66%;padding:7px 11px}
  .gm-desk{width:38%;bottom:6%}
  .gm-btn{padding:9px 13px;font-size:13px}
}

/* ============ 自然拼读 ============ */
.ph-hero{
  background:linear-gradient(160deg,#eaf6ff,#d9edff);border-radius:var(--radius);
  padding:18px 20px 16px;box-shadow:var(--shadow);margin-bottom:14px;
}
.ph-label{
  display:inline-block;font-size:11.5px;font-weight:900;letter-spacing:1.6px;
  text-transform:uppercase;color:#4b93bd;background:#fff;border-radius:999px;padding:4px 11px;
}
.ph-focus{font-size:34px;font-weight:900;letter-spacing:2px;color:#20536e;margin:9px 0 6px}
.ph-hero p{margin:0;font-size:14.5px;line-height:1.75;font-weight:700;color:#456a80}
.ph-sets{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;margin-bottom:14px}
.ph-set{background:#fff;border-radius:22px;padding:16px 16px 14px;box-shadow:var(--shadow);min-width:0}
.ph-g{font-size:30px;font-weight:900;color:#2f2417;letter-spacing:1px;display:flex;align-items:baseline;gap:7px}
.ph-g i{font-style:normal;font-size:15px;color:#8aa7b8;font-weight:800;letter-spacing:.5px}
.ph-hint{font-size:12.5px;font-weight:800;color:#9a8b74;margin:5px 0 11px;line-height:1.5}
.ph-chips{display:flex;flex-wrap:wrap;gap:8px}
.ph-chip{
  display:inline-flex;align-items:center;gap:6px;padding:9px 14px;border-radius:14px;
  background:#f3f8fc;font-weight:900;font-size:16px;color:#2f4a5a;
  box-shadow:0 3px 0 #dde9f2;transition:transform .1s, background .15s;
}
.ph-chip span{font-size:12px;opacity:.5}
.ph-chip:active{transform:translateY(2px);box-shadow:none}
.ph-chip.on{background:#cdeeff;box-shadow:0 3px 0 #9fd6f2}
.ph-tip{
  background:#fffdf2;border:3px dashed #ffe08a;border-radius:18px;padding:13px 16px;
  font-size:13.5px;font-weight:800;color:#8a6b2f;line-height:1.7;margin-bottom:14px;
}
.ph-tip b{display:block;color:#d99b00;margin-bottom:3px}
.ph-opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px;width:100%;max-width:560px;margin:0 auto}
.ph-opts.words{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
.ph-opt{
  background:#fff;border-radius:22px;padding:18px 10px;box-shadow:var(--shadow);
  display:flex;flex-direction:column;align-items:center;gap:4px;transition:transform .1s;
}
.ph-opt b{font-size:30px;font-weight:900;letter-spacing:1px}
.ph-opt i{font-style:normal;font-size:12.5px;color:#8aa7b8;font-weight:800}
.ph-opts.words .ph-opt b{font-size:22px}
.ph-opt:active{transform:translateY(3px)}
.ph-opt.right{outline:4px solid #7ee0a1;animation:pop .35s}
.ph-opt.wrong{outline:4px solid #ff8b8b;animation:shake .4s}
.ph-model{
  display:block;margin:0 auto 18px;background:linear-gradient(180deg,#fff3d6,#ffe6a8);
  border-radius:22px;padding:16px 30px;font-size:34px;font-weight:900;letter-spacing:2px;
  color:#7a4d00;box-shadow:0 6px 0 #e8c46a;transition:transform .1s;
}
.ph-model span{font-size:16px;margin-left:10px;opacity:.55}
.ph-model:active{transform:translateY(4px);box-shadow:0 2px 0 #e8c46a}

/* ============ 高频阅读词 ============ */
.sw-hero{
  background:linear-gradient(160deg,#fff4e6,#ffe7cd);border-radius:var(--radius);
  padding:18px 20px 16px;box-shadow:var(--shadow);margin-bottom:14px;
}
.sw-hero .ph-label{color:#c07a2a}
.sw-hero b{display:block;font-size:19px;margin:9px 0 5px;color:#5b3c14}
.sw-hero p{margin:0;font-size:13.5px;font-weight:700;color:#8a6b45;line-height:1.7}
.sw-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:11px;margin-bottom:16px}
.sw-chip{
  background:#fff;border-radius:18px;padding:12px 12px 11px;box-shadow:var(--shadow);
  min-width:0;transition:transform .1s, background .15s;
}
.sw-chip.on{background:#fff6e4}
.sw-en{display:block;width:100%;text-align:left;font-size:21px;font-weight:900;color:#2f2417;letter-spacing:.3px;line-height:1.25}
.sw-zh{display:block;font-size:12.5px;font-weight:800;color:#9a8b74;margin-top:4px}
.sw-btns{display:flex;gap:12px;flex-wrap:wrap}
.sw-big{
  display:block;margin:0 auto 20px;background:#fff;border-radius:26px;padding:22px 40px;
  font-size:42px;font-weight:900;letter-spacing:1.5px;color:#2f2417;box-shadow:var(--shadow);
}
.sw-big span{font-size:18px;margin-left:10px;opacity:.45}
.sw-flash{
  position:fixed;inset:0;z-index:80;background:#1d2833;
  display:grid;place-items:center;animation:fadeIn .18s;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.sw-flash-inner{text-align:center;padding:24px}
.sw-flash-word{
  font-size:clamp(54px,16vw,110px);font-weight:900;color:#fff;letter-spacing:2px;
  line-height:1.1;text-shadow:0 8px 30px rgba(0,0,0,.35);
}
.sw-flash-tip{color:#8fa6b8;font-weight:800;font-size:14px;margin-top:14px}
.sw-flash-bar{width:min(300px,60vw);height:8px;border-radius:99px;background:#33414f;margin:18px auto 0;overflow:hidden}
.sw-flash-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,#ffc93c,#ff9a76);border-radius:99px}

@media (max-width:640px){
  .ph-focus{font-size:28px}
  .ph-hero,.sw-hero{padding:15px 16px 14px}
  .ph-g{font-size:26px}
  .ph-chip{font-size:15px;padding:8px 12px}
  .sw-grid{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:9px}
  .sw-en{font-size:18px}
  .ph-model{font-size:28px;padding:14px 22px}
  .sw-big{font-size:34px;padding:18px 28px}
}

/* ============ 听音打地鼠 ============ */
.wk-head{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.wk-play{
  flex:0 0 auto;width:56px;height:56px;border:0;border-radius:18px;font-size:24px;font-family:inherit;
  background:linear-gradient(180deg,#fff3d6,#ffe6a8);box-shadow:0 4px 0 #e8c46a;cursor:pointer;
}
.wk-play:active{transform:translateY(3px);box-shadow:0 1px 0 #e8c46a}
.wk-info{flex:1;min-width:0;font-weight:900;font-size:14px;color:#5b4a33;line-height:1.3}
.wk-info small{display:block;font-size:12px;color:#9a8b74;font-weight:800;margin-top:3px}
.wk-score{flex:0 0 auto;font-weight:900;font-size:15px;color:#e07a2b;white-space:nowrap}
.wk-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:12px;width:100%;max-width:460px;margin:0 auto;
  padding:14px;border-radius:28px;background:#f7fbff;
  box-shadow:inset 0 0 0 3px #e8f3fb, 0 12px 26px rgba(120,150,175,.12)
}
.wk-bub{
  height:74px;border:0;border-radius:999px;padding:0 12px;font-family:inherit;cursor:pointer;
  display:grid;place-items:center;line-height:1.12;word-break:break-word;
  font-weight:900;font-size:16px;color:#25506a;
  background:radial-gradient(circle at 30% 26%,#ffffff,#eaf6ff 58%,#cfe8fb);
  box-shadow:0 5px 0 #b9d8ef, inset 0 0 0 2px rgba(255,255,255,.9);
  animation:wkFloat 3.2s ease-in-out infinite;
  transition:box-shadow .1s;
}
@keyframes wkFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
.wk-bub:active{box-shadow:0 2px 0 #b9d8ef}
.wk-bub.hit{animation:wkPop .42s forwards}
@keyframes wkPop{
  0%{transform:scale(1)}
  45%{transform:scale(1.22);background:radial-gradient(circle at 30% 26%,#ffffff,#d8f7e3 55%,#a7ebc0)}
  100%{transform:scale(.86);opacity:0}
}
.wk-bub.shake{animation:shake .4s}

/* ============ 限时快答 ============ */
.spd-head{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.spd-count{font-weight:900;font-size:15px;color:#9a8b74;min-width:44px}
.spd-bar{flex:1;height:12px;border-radius:99px;background:#efe6d8;overflow:hidden}
.spd-bar i{display:block;height:100%;width:100%;border-radius:99px;background:linear-gradient(90deg,#7ee0a1,#ffc93c 55%,#ff8fab)}
.spd-streak{font-weight:900;font-size:15px;color:#e07a2b;min-width:48px;text-align:right}

@media (max-width:640px){
  .wk-bub{height:66px;font-size:15px}
  .wk-play{width:50px;height:50px;font-size:22px}
  .wk-head{gap:8px;margin-bottom:11px}
  .spd-head{margin-bottom:11px}
}


/* ============ 单词卡 · 拼读条（只展示，不可点） ============ */
.pw-bar{display:flex;flex-wrap:wrap;gap:9px 14px;justify-content:center;margin:13px 0 2px}
.pw{
  display:flex;flex-direction:column;align-items:center;gap:2px;min-width:40px;
  padding:7px 10px 6px;border:0;border-radius:13px;font-family:inherit;
  font-weight:900;font-size:20px;line-height:1;color:#2f4a5a;
  background:#f1f8ff;box-shadow:0 3px 0 #d9e8f4;
  user-select:none;-webkit-user-select:none;
}
.pw i{font-style:normal;font-size:10.5px;font-weight:800;color:#7f97a8;line-height:1;letter-spacing:0}
.pw.mute{background:#f5f1ea;box-shadow:0 3px 0 #e6dfd4;color:#b9ab97}
.pw-word{display:flex;flex-wrap:wrap;gap:7px;justify-content:center}
.pw-word + .pw-word{margin-left:12px}

@media (max-width:640px){
  .pw{font-size:17px;min-width:34px;padding:6px 8px 5px;border-radius:11px}
  .pw i{font-size:9.5px}
  .pw-word::after,.pw-word::before{content:none}
  .pw-word + .pw-word{margin-left:8px}
  .pw-bar{gap:7px 10px}
}

/* ============================================================
   一屏布局：手机 / 小屏上一屏放得下，尽量不用上下滑动去选
   （首页、单元页用 flex + grid-auto-rows:1fr 把内容撑满视口）
   ============================================================ */
@media (max-width:900px){
  .wrap{padding:10px 11px 14px}
  .topbar{margin-bottom:9px;gap:9px}
  .iconbtn{width:40px;height:40px;border-radius:13px;font-size:18px}
  .pill{padding:7px 12px;font-size:13.5px;gap:6px}
  .only-wide{display:none!important}

  /* ---------- 首页：标题 + 单元格子，一屏到底 ---------- */
  .wrap-home{
    height:100vh;height:100dvh;display:flex;flex-direction:column;
    overflow:hidden;
  }
  .wrap-home .hero{padding:13px 15px;border-radius:22px;margin-bottom:9px;flex:0 0 auto}
  .wrap-home .hero h2{font-size:20px;margin:0 0 3px}
  .wrap-home .hero p{font-size:12px;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .wrap-home .hero .row{margin-top:9px;gap:7px;flex-wrap:wrap}
  .wrap-home .hero .row > *{flex:0 0 auto}
  .wrap-home .hero .stat-star{display:none}
  .wrap-home .hero .deco{display:none}
  .wrap-home .grid{
    flex:1 1 auto;min-height:0;
    grid-template-columns:repeat(auto-fill,minmax(170px,1fr));
    grid-auto-rows:1fr;gap:9px;
  }
  .wrap-home .ucard{display:flex;flex-direction:column;min-height:0;border-radius:18px}
  .wrap-home .ucard .photo{height:auto;flex:1 1 auto;min-height:32px}
  .wrap-home .ucard .body{padding:7px 10px 8px}
  .wrap-home .ucard h3{font-size:15px}
  .wrap-home .ucard .cn{font-size:11px;margin-top:1px}
  .wrap-home .ucard .meta{margin-top:5px;font-size:10.5px;gap:5px}
  .wrap-home .ucard .no{width:26px;height:26px;border-radius:9px;font-size:14px;left:7px;top:7px}
  .wrap-home .bar{height:5px}
  .wrap-home .wrongbar{padding:9px 12px;gap:9px;margin-bottom:9px;border-radius:18px;flex:0 0 auto}
  .wrap-home .wrongbar .ic{width:36px;height:36px;border-radius:12px;font-size:19px}
  .wrap-home .wrongbar b{font-size:13.5px}
  .wrap-home .wrongbar small{display:none}
  .wrap-home .todaybar{padding:6px 11px;gap:8px;margin-bottom:8px;border-radius:16px;flex:0 0 auto}
  .wrap-home .todaybar .ic{width:30px;height:30px;border-radius:10px;font-size:16px}
  .wrap-home .todaybar b{font-size:13px}
  .wrap-home .todaybar small{display:none}
  .wrap-home .todaybar .go{font-size:12.5px}
  .wrap-home .hero p{display:none}
  .wrap-home .footnote{display:none}

  /* ---------- 单元页：头 + 两个入口 + 活动格子，一屏到底 ---------- */
  .wrap-unit{
    height:100vh;height:100dvh;display:flex;flex-direction:column;overflow:hidden;
  }
  .wrap-unit .uhead{padding:12px 15px;border-radius:22px;margin-bottom:9px;flex:0 0 auto}
  .wrap-unit .uhead h2{font-size:21px}
  .wrap-unit .uhead .cn{font-size:12px;margin-top:2px}
  .wrap-unit .uhead .mission{margin-top:8px;padding:4px 11px;font-size:11px}
  .wrap-unit .uhead .big{font-size:56px;right:10px;opacity:.22}
  .cta-row{display:flex;gap:9px;margin-bottom:9px;flex:0 0 auto}
  .cta-row .gm-cta,.cta-row .pp-cta{
    flex:1 1 0;width:auto;max-width:none;margin:0;padding:9px 12px;gap:9px;border-radius:18px;min-width:0;
  }
  .cta-row .gm-cta b,.cta-row .pp-cta b{font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .cta-row .gm-cta small,.cta-row .pp-cta small{
    font-size:10.5px;line-height:1.35;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  }
  .cta-row .gm-cta .play,.cta-row .pp-cta .pig{width:34px;height:34px;font-size:17px}
  .cta-row .gm-cta .arrow,.cta-row .pp-cta .arrow{font-size:15px}
  .wrap-unit .acts{
    flex:1 1 auto;min-height:0;
    grid-template-columns:repeat(auto-fill,minmax(168px,1fr));
    grid-auto-rows:1fr;gap:8px;
  }
  .wrap-unit .act{padding:10px 11px;border-radius:18px;gap:10px;min-height:0;overflow:hidden}
  .wrap-unit .act .ic{width:42px;height:42px;border-radius:13px;font-size:21px}
  .wrap-unit .act b{font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .wrap-unit .act small{font-size:11px;line-height:1.35}
  .wrap-unit .act > div:last-child{font-size:11px!important;letter-spacing:-1px}

  /* ---------- 单词卡：图和按钮一屏看全，不用往下够 ---------- */
  .fcard .ph{height:min(40vh,320px)}
  .fcard .info{padding:13px 16px 15px}
  .fcard .en{font-size:30px}
  .fcard .zh{font-size:15px;margin-top:3px}
  .fcard .tools{margin-top:10px;gap:8px}
  .fcard .tools .mini{padding:9px 14px;font-size:14px}
  .fprog{margin-top:10px}
  .pw-bar{margin:8px 0 0}
  .pw{padding:5px 8px 4px;min-width:32px;font-size:16px}
  .pw i{font-size:9.5px}
  .sbody{padding:4px 0 2vh}

  /* ---------- 自然拼读：卡片压缩 ---------- */
  .ph-hero{padding:12px 15px 11px;border-radius:20px;margin-bottom:9px}
  .ph-focus{font-size:26px;margin:5px 0 3px}
  .ph-hero p{font-size:12.5px;line-height:1.55}
  .ph-sets{gap:9px;margin-bottom:9px}
  .ph-set{padding:11px 13px 10px;border-radius:18px}
  .ph-g{font-size:23px}
  .ph-g i{font-size:13px}
  .ph-hint{font-size:11.5px;margin:3px 0 8px}
  .ph-chip{padding:7px 11px;font-size:14.5px;border-radius:12px}
  .ph-tip{font-size:12.5px;margin-top:9px}
}

/* 窄屏手机：单元格子改成「图标在上」的九宫格，10 个单元 3 列排得下 */
@media (max-width:520px){
  .wrap-home .grid{gap:9px;grid-template-columns:repeat(2,minmax(0,1fr))}
  .wrap-home .ucard h3{font-size:15px}
  .wrap-home .ucard .cn{font-size:10.5px}
  .wrap-unit .acts{grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
  .wrap-unit .act{
    flex-direction:column;justify-content:center;gap:3px;padding:9px 4px;text-align:center;
  }
  .wrap-unit .act .ic{width:42px;height:42px;border-radius:13px;font-size:22px}
  .wrap-unit .act > div:nth-child(2){flex:0 0 auto!important;width:100%;min-width:0}
  .wrap-unit .act b{font-size:12.5px;line-height:1.2}
  .wrap-unit .act small{display:none}
  .wrap-unit .act > div:last-child{font-size:9.5px!important;height:11px;overflow:hidden}

  .cta-row{gap:7px}
  .cta-row .gm-cta,.cta-row .pp-cta{padding:8px 10px;gap:7px;border-radius:16px}
  .cta-row .gm-cta b,.cta-row .pp-cta b{font-size:13.5px}
  .cta-row .gm-cta small,.cta-row .pp-cta small{display:none}
  .cta-row .gm-cta .play,.cta-row .pp-cta .pig{width:30px;height:30px;font-size:15px}
}

/* 特别矮的屏幕（横屏 / 小屏机）再压一档 */
@media (max-width:900px) and (max-height:680px){
  .wrap-home .hero{padding:10px 13px;margin-bottom:7px}
  .wrap-home .hero h2{font-size:17px}
  .wrap-home .hero p{display:none}
  .wrap-home .hero .row{margin-top:7px}
  .wrap-home .ucard h3{font-size:12.5px}
  .wrap-home .ucard .cn{display:none}
  .wrap-unit .uhead{padding:9px 13px;margin-bottom:7px}
  .wrap-unit .uhead h2{font-size:18px}
  .wrap-unit .uhead .mission{display:none}
  .wrap-unit .act .ic{width:32px;height:32px;font-size:17px}
  .wrap-unit .act b{font-size:11.5px}
  .cta-row .gm-cta small,.cta-row .pp-cta small{display:none}
  .fcard .ph{height:min(28vh,220px)}
  .fcard .info{padding:10px 14px 12px}
  .fcard .en{font-size:26px}
  .fcard .pw-bar{display:none}
}

/* 矮屏（如 375×667）：拼读页把留白压掉，别让小窍门被挤出屏幕 */
@media (max-width:900px) and (max-height:700px){
  .ph-hero{padding:10px 13px}
  .ph-focus{font-size:22px;margin:3px 0 2px}
  .ph-hero p{font-size:11.5px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .ph-set{padding:9px 12px}
  .ph-g{font-size:20px}
  .ph-hint{margin:2px 0 6px}
  .ph-chip{padding:6px 9px;font-size:13.5px}
  .ph-tip{padding:9px 12px;font-size:11.5px;margin-top:7px}
}

/* 背句子：8 行一屏排得下，「开始背诵闯关」不用往下找 */
@media (max-width:900px){
  .srow{padding:9px 4px;gap:11px}
  .srow .en{font-size:17px}
  .srow .zh{font-size:12px;margin-top:2px}
  .srow .spk{width:40px;height:40px;border-radius:13px;font-size:18px}
  .card{padding:14px;border-radius:20px;margin-bottom:10px}
}

/* 老浏览器不认识 dvh 时退回「正常滚动」，不要出现被裁掉又滑不到的死角 */
@supports not (height: 100dvh){
  .wrap-home,.wrap-unit,.pt-cover{height:auto;overflow:visible;display:block}
  .wrap-home .grid,.wrap-unit .acts,.pt-cover .pt-grid{grid-auto-rows:auto}
  .wrap-home .ucard .photo{height:96px;flex:0 0 auto}
  .wrap-unit .act{min-height:84px}
}
