:root{
  --bg1:#ffe9f3; --bg2:#e6f7ff; --bg3:#fff9e6;
  --ink:#2f3b52; --muted:#7a869a;
  --card:#ffffff; --line:#e8edf5;
  --primary:#4f8cff; --primary-d:#3a6fd8;
  --good:#2ecc71; --bad:#ff6b6b;
  --shadow:0 10px 30px rgba(80,110,180,.15);
  --r:22px;
  /* 手指颜色 */
  --LP:#e74c3c; --LR:#e67e22; --LM:#f4c025; --LI:#2ecc71;
  --RI:#1abc9c; --RM:#3498db; --RR:#9b59b6; --RP:#e84393; --THUMB:#95a5a6;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  font-family:"Baloo 2","Comic Sans MS","Chalkboard SE","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  color:var(--ink);
  background:linear-gradient(135deg,var(--bg1),var(--bg2) 45%,var(--bg3));
  background-attachment:fixed;
  -webkit-font-smoothing:antialiased;
}
#app{max-width:1100px;margin:0 auto;padding:18px 16px 40px}
.hidden{display:none !important}

/* 屏幕切换 */
.screen{display:none;animation:fade .25s ease}
.screen.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* 顶栏 */
.topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.brand{display:flex;align-items:center;gap:12px}
.logo{font-size:44px;filter:drop-shadow(0 4px 6px rgba(0,0,0,.1))}
.brand h1{margin:0;font-size:30px;letter-spacing:1px}
.subtitle{margin:2px 0 0;color:var(--muted);font-size:14px}
.topbar-right{display:flex;gap:8px;flex-wrap:wrap}

/* 按钮 */
.btn{
  border:0;cursor:pointer;font-family:inherit;font-size:16px;font-weight:700;
  padding:11px 18px;border-radius:16px;color:#fff;background:#a9b6cc;
  box-shadow:0 5px 0 rgba(0,0,0,.12);transition:transform .06s,filter .15s;
}
.btn:active{transform:translateY(3px);box-shadow:0 2px 0 rgba(0,0,0,.12)}
.btn-primary{background:var(--primary)}
.btn-ghost{background:#fff;color:var(--ink);box-shadow:0 5px 0 var(--line);border:2px solid var(--line)}
.btn:hover{filter:brightness(1.05)}

/* 面板 */
.panel{background:var(--card);border-radius:var(--r);padding:16px 18px;box-shadow:var(--shadow);margin-bottom:16px}
.panel h2{margin:0 0 12px;font-size:19px}
.hint{color:var(--muted);font-size:13px;margin:6px 0 0}

/* 字母掌握网格 */
.letter-grid{display:grid;grid-template-columns:repeat(13,1fr);gap:6px}
.letter-grid .lc{
  aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:16px;border-radius:10px;background:#eef2f8;color:#b6c0d0;
  text-transform:uppercase;transition:.2s;
}
.letter-grid .lc.learned{background:linear-gradient(135deg,#7ee081,#2ecc71);color:#fff;box-shadow:0 3px 8px rgba(46,204,113,.35)}
@media(max-width:760px){.letter-grid{grid-template-columns:repeat(9,1fr)}}

/* 关卡 */
.stages{display:flex;flex-direction:column;gap:14px}
.stage{background:var(--card);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden}
.stage-head{display:flex;align-items:center;gap:12px;padding:14px 18px;background:linear-gradient(90deg,#f3f7ff,#fff)}
.stage-ico{font-size:32px}
.stage-head h3{margin:0;font-size:19px}
.stage-head p{margin:2px 0 0;color:var(--muted);font-size:13px}
.stage-progress{margin-left:auto;font-weight:800;color:var(--primary);font-size:14px;white-space:nowrap}
.lessons{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px;padding:14px 18px 18px}
.lesson-card{
  position:relative;text-align:left;border:2px solid var(--line);background:#fbfcff;
  border-radius:16px;padding:12px 14px;cursor:pointer;font-family:inherit;transition:.15s;
}
.lesson-card:hover{border-color:var(--primary);transform:translateY(-2px)}
.lesson-card .lc-title{font-weight:800;font-size:15px;margin-bottom:4px}
.lesson-card .lc-keys{font-size:12px;color:var(--muted);letter-spacing:1px}
.lesson-card .lc-badge{position:absolute;top:8px;right:10px;font-size:13px}
.lesson-card.locked{opacity:.55;cursor:not-allowed;background:#f2f4f8}
.lesson-card.locked:hover{transform:none;border-color:var(--line)}

/* 设置开关 */
.settings{display:flex;flex-wrap:wrap;gap:8px 26px}
.settings h2{width:100%}
.switch{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:15px;font-weight:600}
.switch input{width:20px;height:20px;accent-color:var(--primary)}

.foot{color:var(--muted);font-size:13px;text-align:center;margin-top:8px;line-height:1.7}

/* ===== 练习页 ===== */
.lesson-head{display:flex;align-items:center;gap:14px;margin-bottom:12px;flex-wrap:wrap}
.lesson-title h2{margin:0;font-size:22px}
.lesson-caps{margin-left:auto}
.caps-warn{background:#fff3cd;color:#8a6d00;padding:8px 12px;border-radius:12px;font-weight:700;font-size:13px}

.stats{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.stat{background:#fff;border-radius:14px;padding:8px 14px;box-shadow:var(--shadow);min-width:88px;text-align:center}
.stat-label{display:block;font-size:12px;color:var(--muted)}
.stat-value{display:block;font-size:20px;font-weight:800}

.progress-bar{height:12px;background:#e7edf6;border-radius:99px;overflow:hidden;margin-bottom:16px}
.progress-fill{height:100%;width:0;background:linear-gradient(90deg,#7ee081,#2ecc71);transition:width .15s}

.target{
  background:#fff;border-radius:var(--r);box-shadow:var(--shadow);padding:26px 24px;
  font-size:34px;line-height:1.9;letter-spacing:3px;min-height:120px;
  word-break:break-word;font-weight:700;user-select:none;outline:none;
}
.target .ch{position:relative;padding:0 1px;border-radius:6px;color:#b9c3d4}
.target .ch.space{padding:0 6px}
.target .ch.done{color:var(--ink)}
.target .ch.wrong{color:#fff;background:var(--bad)}
.target .ch.cur{color:var(--primary);background:#eaf1ff;box-shadow:0 0 0 3px #cfe0ff inset}
.target .ch.cur::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:3px;background:var(--primary);border-radius:3px;animation:blink 1s infinite}
@keyframes blink{50%{opacity:.2}}
.target.shake{animation:shake .3s}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px)}75%{transform:translateX(7px)}}

.finger-banner{
  margin:14px 0;text-align:center;font-size:20px;font-weight:800;
  background:#fff;border-radius:16px;padding:12px;box-shadow:var(--shadow);
}
.finger-banner .dot{display:inline-block;width:16px;height:16px;border-radius:50%;margin-right:8px;vertical-align:-2px}

/* 小手 */
.hands{display:flex;justify-content:center;gap:40px;margin:8px 0 14px;flex-wrap:wrap}
.hand{display:flex;align-items:flex-end;gap:6px}
.finger{
  width:26px;border-radius:14px 14px 8px 8px;background:#dfe6f0;position:relative;
  display:flex;align-items:flex-end;justify-content:center;padding-bottom:6px;
  font-size:11px;font-weight:800;color:#fff;transition:.12s;height:60px;
}
.finger.thumb{width:60px;height:34px;border-radius:16px}
.finger .fn{writing-mode:vertical-rl;font-size:10px;opacity:.9}
.finger.active{transform:translateY(-10px) scale(1.08);box-shadow:0 0 0 4px #fff,0 8px 18px rgba(0,0,0,.2)}
.hand-label{text-align:center;font-size:12px;color:var(--muted);margin-top:6px;font-weight:700}

/* 键盘 */
.keyboard{background:#fff;border-radius:var(--r);box-shadow:var(--shadow);padding:16px;display:flex;flex-direction:column;gap:8px;align-items:center}
.kb-row{display:flex;gap:8px}
.key{
  min-width:52px;height:52px;border-radius:12px;background:#f1f4fa;border:2px solid #e3e9f3;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  font-weight:800;font-size:19px;color:var(--ink);position:relative;text-transform:uppercase;
}
.key .fd{position:absolute;bottom:5px;width:8px;height:8px;border-radius:50%}
.key.wide{min-width:96px;font-size:14px}
.key.space{min-width:340px}
.key.next{animation:pulse .8s infinite;border-color:var(--primary);background:#eaf1ff;transform:scale(1.08);z-index:2}
@keyframes pulse{50%{box-shadow:0 0 0 8px rgba(79,140,255,.18)}}
.key.hit{background:var(--good)!important;color:#fff;border-color:var(--good)}
.key.miss{background:var(--bad)!important;color:#fff;border-color:var(--bad)}
.key.fcolored{color:#fff}
@media(max-width:820px){
  .target{font-size:26px;padding:18px}
  .key{min-width:38px;height:44px;font-size:15px}
  .key.space{min-width:200px}
  .letter-grid{grid-template-columns:repeat(9,1fr)}
}

/* ===== 结果页 ===== */
.result-card{max-width:560px;margin:40px auto;background:#fff;border-radius:28px;box-shadow:var(--shadow);padding:34px 28px;text-align:center}
.result-emoji{font-size:74px;animation:pop .5s ease}
@keyframes pop{0%{transform:scale(.3)}70%{transform:scale(1.15)}100%{transform:scale(1)}}
.result-card h2{margin:6px 0 10px;font-size:28px}
.stars{font-size:44px;letter-spacing:6px;margin-bottom:8px}
.stars .off{opacity:.22;filter:grayscale(1)}
.result-msg{color:var(--muted);font-size:16px;line-height:1.7;margin:0 0 18px}
.result-stats{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-bottom:22px}
.result-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}
