/* ===== 数学闯关 · 全站共享样式 ===== */
:root {
  --bg: #0f1226;
  --bg-soft: #171a35;
  --card: #1e2247;
  --card-2: #262a55;
  --line: #34386b;
  --ink: #eef0ff;
  --ink-soft: #b6bbe6;
  --muted: #8a8fc4;
  --primary: #7c6cff;
  --primary-soft: #a99cff;
  --accent: #2ee6c5;
  --accent-2: #ffb347;
  --danger: #ff6b8b;
  --ok: #4be08a;
  --shadow: 0 12px 40px rgba(0,0,0,.45);
  --radius: 18px;
  --maxw: 1080px;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  color: var(--ink);
  background:
    radial-gradient(900px 500px at 12% -8%, #2a2160 0%, transparent 60%),
    radial-gradient(800px 500px at 100% 0%, #133a4d 0%, transparent 55%),
    var(--bg);
  background-attachment: fixed;
  line-height: 1.7;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--primary-soft); text-decoration: none; }
a:hover { color: var(--accent); }

.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 22px; }

/* ---- Top bar ---- */
.topbar {
  position: sticky; top: 0; z-index: 50;
  backdrop-filter: blur(12px);
  background: rgba(15,18,38,.72);
  border-bottom: 1px solid var(--line);
}
.topbar .wrap { display: flex; align-items: center; gap: 14px; height: 62px; }
.brand { font-weight: 800; letter-spacing: .5px; font-size: 1.05rem; color: var(--ink); display:flex; align-items:center; gap:10px;}
.brand .logo {
  width: 30px; height: 30px; border-radius: 9px;
  background: linear-gradient(135deg, var(--primary), var(--accent));
  display: grid; place-items: center; font-size: 17px; color:#0b0e22; font-weight:900;
}
.topbar nav { margin-left: auto; display: flex; gap: 18px; font-size: .92rem; }
.topbar nav a { color: var(--ink-soft); }

/* ---- Hero ---- */
.hero { padding: 64px 0 32px; }
.eyebrow {
  display: inline-block; font-size: .8rem; letter-spacing: 2px; text-transform: uppercase;
  color: var(--accent); background: rgba(46,230,197,.1); border:1px solid rgba(46,230,197,.3);
  padding: 5px 12px; border-radius: 999px; margin-bottom: 18px;
}
.hero h1 { font-size: clamp(2rem, 5vw, 3.2rem); line-height: 1.15; margin: 0 0 16px; font-weight: 850; }
.hero h1 .grad {
  background: linear-gradient(120deg, var(--primary-soft), var(--accent));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.hero p.lead { font-size: 1.12rem; color: var(--ink-soft); max-width: 620px; }

/* ---- Chapter grid ---- */
.section-title { font-size: 1.5rem; margin: 40px 0 6px; font-weight: 800; }
.section-sub { color: var(--muted); margin: 0 0 22px; }

.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px,1fr)); gap: 18px; }
.chap-card {
  position: relative; display: block; padding: 22px; border-radius: var(--radius);
  background: linear-gradient(180deg, var(--card), var(--card-2));
  border: 1px solid var(--line); box-shadow: var(--shadow);
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
  overflow: hidden;
}
.chap-card .num {
  font-size: 2.4rem; font-weight: 900; color: rgba(255,255,255,.08);
  position: absolute; top: 8px; right: 16px;
}
.chap-card h3 { margin: 0 0 8px; font-size: 1.22rem; }
.chap-card p { margin: 0; color: var(--ink-soft); font-size: .92rem; min-height: 42px; }
.chap-card .tags { margin-top: 14px; display: flex; flex-wrap: wrap; gap: 7px; }
.tag {
  font-size: .74rem; padding: 3px 9px; border-radius: 999px;
  background: rgba(124,108,255,.16); color: var(--primary-soft); border:1px solid rgba(124,108,255,.3);
}
.chap-card.active:hover { transform: translateY(-4px); border-color: var(--primary); box-shadow: 0 18px 50px rgba(124,108,255,.25); }
.chap-card.active::after {
  content: "开始闯关 →"; position: absolute; bottom: 18px; right: 20px;
  font-size: .85rem; font-weight: 700; color: var(--accent);
}
.chap-card.locked { opacity: .62; }
.chap-card.locked .badge {
  position: absolute; bottom: 18px; right: 18px; font-size: .78rem; color: var(--muted);
  border: 1px dashed var(--line); padding: 3px 10px; border-radius: 999px;
}

/* ---- Chapter page layout ---- */
.chap-hero { padding: 50px 0 10px; }
.crumbs { font-size: .9rem; color: var(--muted); margin-bottom: 14px; }
.crumbs a { color: var(--ink-soft); }
.chap-hero h1 { font-size: clamp(1.8rem,4vw,2.6rem); margin: 0 0 10px; }

.toc {
  display: flex; flex-wrap: wrap; gap: 10px; margin: 22px 0 8px;
}
.toc a {
  padding: 8px 15px; border-radius: 999px; background: var(--card);
  border: 1px solid var(--line); color: var(--ink-soft); font-size: .9rem;
}
.toc a:hover { border-color: var(--primary); color: var(--ink); }

.lesson {
  background: linear-gradient(180deg, var(--card), var(--card-2));
  border: 1px solid var(--line); border-radius: var(--radius);
  padding: 28px; margin: 26px 0; box-shadow: var(--shadow);
}
.lesson h2 { margin: 0 0 4px; font-size: 1.5rem; }
.lesson .kicker { color: var(--accent); font-size: .82rem; letter-spacing: 1.5px; text-transform: uppercase; }
.lesson h3 { margin: 26px 0 8px; font-size: 1.15rem; color: var(--primary-soft); }
.lesson p { color: var(--ink-soft); }
.lesson .formula {
  font-family: "Cambria Math", "Times New Roman", serif; font-size: 1.15rem;
  background: var(--bg-soft); border:1px solid var(--line); border-left: 3px solid var(--accent);
  padding: 12px 16px; border-radius: 10px; margin: 12px 0; color: var(--ink); overflow-x:auto;
}
.callout {
  background: rgba(255,179,71,.08); border:1px solid rgba(255,179,71,.3);
  border-radius: 12px; padding: 14px 16px; margin: 16px 0; color: var(--ink-soft);
}
.callout b { color: var(--accent-2); }
.sym { font-family:"Cambria Math","Times New Roman",serif; color: var(--accent); font-weight:700; }

/* interactive panels */
.viz {
  background: var(--bg-soft); border:1px solid var(--line); border-radius: 14px;
  padding: 18px; margin: 18px 0;
}
.viz .controls { display:flex; flex-wrap:wrap; gap:10px; margin-bottom:14px; align-items:center; }
.btn {
  cursor:pointer; border:none; border-radius: 10px; padding: 9px 16px; font-size:.9rem;
  font-weight:700; color:#0b0e22; background: linear-gradient(135deg,var(--primary-soft),var(--accent));
  transition: transform .12s ease, filter .12s ease;
}
.btn:hover { transform: translateY(-1px); filter: brightness(1.06); }
.btn.ghost { background: transparent; color: var(--ink-soft); border:1px solid var(--line); }
.btn.ghost.on { border-color: var(--accent); color: var(--accent); }
.btn:disabled { opacity:.45; cursor:not-allowed; transform:none; }

.readout { font-size:.95rem; color: var(--ink-soft); }
.readout b { color: var(--ink); }

/* game */
.game {
  background: linear-gradient(180deg, #1a1d3e, #20254f);
  border: 1px solid var(--line); border-radius: var(--radius);
  padding: 26px; margin: 26px 0; box-shadow: var(--shadow);
}
.levels { display:flex; gap:10px; flex-wrap:wrap; margin: 16px 0; }
.level-pill {
  display:flex; align-items:center; gap:8px; padding:8px 14px; border-radius:999px;
  border:1px solid var(--line); background: var(--card); font-size:.88rem; color: var(--muted);
  cursor:pointer; user-select:none;
}
.level-pill.cur { border-color: var(--primary); color: var(--ink); background: var(--card-2); }
.level-pill.done { color: var(--ok); border-color: rgba(75,224,138,.5); }
.level-pill.lock { opacity:.5; cursor:not-allowed; }

.stage { margin-top: 8px; }
.q { font-size: 1.12rem; margin: 10px 0 16px; }
.opts { display:grid; grid-template-columns: repeat(auto-fit, minmax(140px,1fr)); gap: 12px; }
.opt {
  cursor:pointer; padding: 14px; border-radius: 12px; background: var(--card);
  border: 2px solid var(--line); text-align:center; font-size: 1.05rem; transition: all .12s;
}
.opt:hover { border-color: var(--primary-soft); }
.opt.right { border-color: var(--ok); background: rgba(75,224,138,.14); }
.opt.wrong { border-color: var(--danger); background: rgba(255,107,139,.14); }

.feedback { margin-top:16px; padding:14px 16px; border-radius:12px; font-size:.95rem; min-height: 20px; }
.feedback.ok { background: rgba(75,224,138,.12); border:1px solid rgba(75,224,138,.4); color: var(--ok); }
.feedback.no { background: rgba(255,107,139,.12); border:1px solid rgba(255,107,139,.4); color: var(--danger); }

.hud { display:flex; gap:18px; align-items:center; flex-wrap:wrap; color: var(--ink-soft); }
.hud .score { font-weight:800; color: var(--accent); font-size:1.05rem; }
.stars { letter-spacing:3px; color: var(--accent-2); font-size:1.1rem; }

/* drag bins */
.bins { display:grid; grid-template-columns: 1fr 1fr; gap:16px; margin-top:14px; }
.bin {
  min-height: 120px; border:2px dashed var(--line); border-radius:14px; padding:12px;
  background: var(--card); transition: border-color .15s, background .15s;
}
.bin.over { border-color: var(--accent); background: rgba(46,230,197,.08); }
.bin h4 { margin:0 0 10px; font-size:1rem; color: var(--primary-soft); }
.chips { display:flex; flex-wrap:wrap; gap:10px; min-height:40px; }
.chip {
  cursor:grab; padding:8px 14px; border-radius:10px; font-size:1.05rem; font-weight:700;
  background: linear-gradient(135deg, var(--card-2), var(--card)); border:1px solid var(--line);
  font-family:"Cambria Math","Times New Roman",serif;
}
.chip.dragging { opacity:.4; }
.pool { margin-top:14px; }

footer.site { color: var(--muted); font-size:.85rem; padding: 50px 0 60px; text-align:center; }

.confetti-done {
  text-align:center; padding: 26px; border-radius:16px; margin-top:18px;
  background: linear-gradient(135deg, rgba(124,108,255,.18), rgba(46,230,197,.18));
  border:1px solid var(--primary);
}
.confetti-done h3 { margin:0 0 6px; font-size:1.4rem; color: var(--ink); }

@media (max-width:560px){ .bins{grid-template-columns:1fr;} }
