:root{
  --sky:#c0eafb;--sky-deep:#8fd4ee;--ink:#183d64;--ink-soft:#4a6f8e;
  --cream:#fffaf0;--card:#fffdf8;--line:#eadfce;--line-cool:#d5e9f4;
  --coral:#f77761;--coral-edge:#ffe5c4;--mint:#e6f5ed;--mint-ink:#31614f;
  --amber:#fff0d9;--amber-ink:#84613b;--blue:#e4f4ff;--blue-ink:#2b608f;
  --danger:#b33e35;--shadow:0 10px 26px #4e99bf24;
  font-family:system-ui,-apple-system,"Microsoft YaHei","PingFang SC",sans-serif;
  color:var(--ink);background:var(--sky);font-size:16px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--sky);color:var(--ink);min-height:100dvh}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
button:disabled{cursor:not-allowed}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible{
  outline:4px solid #174a80;outline-offset:3px;box-shadow:0 0 0 7px #fff;
}
h1,h2,h3,h4{line-height:1.25}
h3{margin:34px 0 14px;font-size:20px;color:var(--ink)}
h4{margin:0 0 10px;font-size:17px}
p{line-height:1.75}
.hidden{display:none}
.small{font-size:14px}
.muted{color:var(--ink-soft);line-height:1.75}
.prewrap{white-space:pre-wrap}
.loading{display:grid;place-items:center;min-height:100dvh;color:var(--ink-soft);font-size:18px}

/* ---------- login ---------- */
.login-wrap{min-height:100dvh;display:grid;place-items:center;padding:28px}
.login{max-width:480px;width:100%}
.login-mark{font-size:34px;color:var(--coral)}
.login h1{font-size:34px;margin:10px 0 6px;letter-spacing:1px}
.login .primary{width:100%;margin-top:6px}
.primary.big{min-height:58px;font-size:19px}
.error{color:var(--danger);font-weight:700;min-height:1.4em;margin:10px 0 0}

/* ---------- shell ---------- */
.layout{display:block;min-height:100dvh;background:var(--sky)}
.side{
  display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;gap:10px;
  max-width:1487px;margin:0 auto;padding:16px 24px;color:var(--ink);
}
.brand{font-size:25px;font-weight:800;margin:0 auto 0 0;white-space:nowrap;color:var(--ink)}
.nav{
  background:#e3f4ff;color:var(--blue-ink);border:2px solid #f6fcff;border-radius:32px;
  font-size:16px;font-weight:700;padding:11px 18px;min-height:48px;text-align:center;
  box-shadow:0 5px 13px #619fc52b;white-space:nowrap;
}
.nav.active{background:var(--coral);border-color:var(--coral-edge);color:#fff;box-shadow:0 5px 12px #c9876b4a}
.main{padding:10px 28px 40px;max-width:1340px;margin:0 auto}
.top{display:flex;justify-content:space-between;align-items:center;gap:16px;color:var(--ink-soft);margin:4px 0 18px;flex-wrap:wrap}
.status{background:var(--mint);border-radius:28px;padding:9px 17px;color:var(--mint-ink);font-weight:700;min-height:44px;display:inline-flex;align-items:center}
.status.warn{background:var(--amber);color:var(--amber-ink)}

/* ---------- cards & type ---------- */
.panel{
  background:var(--cream);border:4px solid #fff;border-radius:30px;padding:28px;
  box-shadow:var(--shadow);margin-bottom:20px;
}
.panel h2{font-size:28px;color:var(--ink);letter-spacing:.5px;margin:0 0 8px}
.grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(250px,1fr);gap:24px}
.notice{background:var(--amber);color:var(--amber-ink);border:1px solid #f3dbb6;border-radius:18px;padding:15px 18px;line-height:1.7}
.empty{background:#fff;border:2px dashed var(--line-cool);border-radius:22px;padding:26px;text-align:center;color:var(--ink-soft)}
.empty strong{display:block;color:var(--ink);font-size:18px;margin-bottom:6px}
.empty p{margin:0 0 14px}
.empty.small{padding:18px;text-align:left}

/* ---------- buttons ---------- */
.primary,.subtle{
  border-radius:28px;font-weight:800;font-size:17px;min-height:52px;padding:12px 24px;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
}
.primary{background:var(--coral);color:#fff;border:3px solid var(--coral-edge);box-shadow:0 5px 12px #c17d5540}
.subtle{background:var(--blue);color:var(--blue-ink);border:2px solid #7bc0ee;box-shadow:0 3px 8px #6aa9ce22}
.primary:active,.subtle:active,.nav:active,.task-row button:active{transform:translateY(1px);filter:brightness(.96)}
.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:18px}

/* ---------- plan ---------- */
.plan-panel{position:relative}
.plan-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.plan-head h2{margin:0}
.plan-meta{display:flex;gap:8px;flex-wrap:wrap}
.chip{background:var(--blue);color:var(--blue-ink);border-radius:999px;padding:9px 16px;font-weight:800;white-space:nowrap}
.chip.light{background:var(--mint);color:var(--mint-ink)}
.progress-track{height:14px;border-radius:999px;background:#e7eef2;overflow:hidden;margin:18px 0 8px}
.progress-track>span{display:block;height:100%;background:linear-gradient(90deg,#7fd6c1,#f7a48e);border-radius:999px;transition:width .35s ease}
.task-list{display:grid;gap:10px;margin-top:14px}
.task-row{
  display:flex;align-items:center;gap:12px;background:#fff;border:2px solid var(--line);
  border-radius:20px;padding:12px 14px;min-height:66px;
}
.task-row.done{background:#f3fbf6;border-color:#cfe8d8}
.task-row.done .task-main strong{color:#6d8b7f;text-decoration:line-through}
.task-kind{
  flex:none;min-width:58px;text-align:center;border-radius:14px;padding:8px 10px;
  background:var(--blue);color:var(--blue-ink);font-size:14px;font-weight:800;
}
.task-kind.review{background:#ffe7df;color:#a24e3d}
.task-kind.carry{background:var(--amber);color:var(--amber-ink)}
.task-kind.reflect,.task-kind.warmup{background:var(--mint);color:var(--mint-ink)}
.task-main{flex:1;min-width:0;display:grid;gap:3px}
.task-main strong{font-size:16px;color:var(--ink)}
.task-main span{font-size:14px;color:var(--ink-soft)}
.task-row button{
  flex:none;background:var(--blue);color:var(--blue-ink);border:2px solid #add4ed;
  border-radius:22px;min-height:48px;padding:10px 20px;font-weight:800;
}
.task-row button.primary{background:var(--coral);color:#fff;border-color:var(--coral-edge)}
.task-finished{flex:none;color:var(--mint-ink);font-weight:800;padding:8px 12px;background:var(--mint);border-radius:16px}

/* ---------- practice ---------- */
.textbook-line{display:flex;gap:8px;flex-wrap:wrap;align-items:center;color:var(--ink-soft);font-size:14px;margin:6px 0 12px}
.source-badge{background:var(--amber);color:var(--amber-ink);border-radius:12px;padding:5px 10px;font-weight:800;white-space:nowrap}
.diff-chip{border-radius:12px;padding:5px 10px;font-weight:800;white-space:nowrap;background:#eef4f7;color:var(--ink-soft)}
.diff-chip.d1{background:var(--mint);color:var(--mint-ink)}
.diff-chip.d2{background:var(--blue);color:var(--blue-ink)}
.diff-chip.d3{background:#ffe7df;color:#a24e3d}
.textbook-line.confirmed .source-badge{background:var(--mint);color:var(--mint-ink)}
.tabs{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0}
.tabs button{
  background:#e3f4ff;border:2px solid #fff;border-radius:26px;color:#315d85;
  font-weight:800;padding:10px 22px;min-height:48px;
}
.tabs button.selected{background:var(--coral);color:#fff;border-color:var(--coral-edge)}
.mode-banner{
  display:flex;gap:10px;flex-wrap:wrap;align-items:center;border-radius:18px;
  padding:13px 18px;margin:14px 0;background:var(--blue);color:var(--blue-ink);
  border:2px solid #cbe9fa;
}
.mode-banner strong{font-size:17px}
.mode-banner span{font-size:14px;color:var(--ink-soft)}
.mode-banner.correction{background:#ffe9e1;border-color:#f8c9b8;color:#9c4534}
.mode-banner.independent{background:var(--mint);border-color:#c6e6d4;color:var(--mint-ink)}
.mode-banner.early{background:var(--amber);border-color:#f0ddb8;color:var(--amber-ink)}
.record-note{
  background:#fff;border:2px solid var(--line);border-radius:14px;padding:9px 14px;
  font-size:14px;color:var(--ink-soft);margin:10px 0;
}
.question{font-size:27px;color:#1b3f62;line-height:1.7;margin:22px 0;font-weight:700}
.audio-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.options{display:grid;gap:12px;margin:8px 0 4px}
.options button{
  text-align:left;background:#fffdf8;border:2px solid #e3d9c7;border-radius:20px;
  color:#254b70;padding:18px 20px;font-size:20px;min-height:60px;
}
.options button:active{background:#e6f4ff;border-color:#80bce6}
.options button:disabled{opacity:.82;cursor:default}
.hint-box{background:var(--blue);border:2px solid #cbe9fa;border-radius:18px;padding:15px 18px;color:var(--blue-ink);margin:14px 0;line-height:1.7}
.hint-box.explain{background:var(--amber);border-color:#f0ddb8;color:var(--amber-ink)}
.hint-box p{margin:6px 0 8px;color:inherit}
.hint-box span{font-size:13px}
.feedback{background:var(--mint);border:2px solid #cee4d3;border-radius:20px;color:#345d4d;padding:18px;line-height:1.85;margin:16px 0}
.feedback.wrong{background:#ffece8;border-color:#f6cfc5;color:#8d4132}
.feedback p{margin:8px 0}
.mastery{display:inline-block;margin-top:8px;background:#fff;border-radius:14px;padding:7px 12px;color:var(--mint-ink);font-weight:800}

/* ---------- review ---------- */
.legend{display:flex;gap:10px;flex-wrap:wrap;margin:10px 0}
.status-chip{display:inline-flex;align-items:center;border-radius:999px;padding:7px 14px;font-weight:800;font-size:14px;background:#eef4f7;color:var(--ink-soft);white-space:nowrap}
.status-chip.pending_correction{background:#ffe7df;color:#a24e3d}
.status-chip.pending_review{background:var(--amber);color:var(--amber-ink)}
.status-chip.mastered{background:var(--mint);color:var(--mint-ink)}
.review-group{margin-top:26px}
.mistake-card{background:#fff;border:2px solid var(--line);border-radius:22px;padding:18px;margin-bottom:14px}
.mistake-head{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.mistake-head .row-content{flex:1;min-width:160px}
.badge{
  flex:none;width:48px;height:48px;border-radius:14px;background:var(--amber);color:#af6749;
  display:grid;place-items:center;font-weight:800;
}
.snapshot-question{font-weight:700;font-size:18px;margin:14px 0 8px;line-height:1.6}
.snapshot-options{display:grid;gap:6px;color:var(--ink-soft);font-size:15px}
.snapshot-options span{padding:6px 10px;border-radius:12px;background:#f7fafb}
.snapshot-options .child-choice{background:#ffe7df;color:#a24e3d;font-weight:800}
.mistake-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.mistake-meta span{background:#f2f7fa;border-radius:12px;padding:5px 10px;font-size:13px;color:var(--ink-soft)}

/* ---------- progress / parent ---------- */
.metric-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin:16px 0}
.metric{background:#fff;border:2px solid var(--line-cool);border-radius:20px;padding:16px;display:grid;gap:4px}
.metric strong{font-size:28px;color:var(--ink);line-height:1.1}
.metric span{font-size:14px;color:var(--ink-soft)}
.timeline{display:grid;gap:10px;margin-top:8px}
.timeline-row{display:flex;gap:12px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px}
.timeline-row>div{flex:1}
details.row{background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px 16px;margin-bottom:10px}
details.row summary{cursor:pointer;font-weight:700;min-height:40px;display:flex;align-items:center}
.weak-list{display:grid;gap:12px}
.weak-card{background:#fff;border:2px solid #f2d7cd;border-radius:20px;padding:16px}
.weak-card p{margin:8px 0;font-size:15px}
.suggestion{background:var(--mint);border-radius:14px;padding:9px 12px;color:var(--mint-ink)}
.subject-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.subject-card{background:#fff;border:2px solid var(--line-cool);border-radius:18px;padding:15px;display:grid;gap:5px}
.subject-card strong{font-size:18px}
.three-col{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px}
.three-col>div{background:#fff;border:2px solid var(--line);border-radius:18px;padding:14px}
.list-link{
  display:grid;gap:2px;width:100%;text-align:left;background:#f7fafb;border:1px solid var(--line-cool);
  border-radius:14px;padding:10px 12px;margin-bottom:8px;min-height:52px;
}
.list-link span{font-weight:700;color:var(--ink);font-size:15px}
.list-link small{color:var(--ink-soft);font-size:13px}
.cause-row{display:grid;grid-template-columns:minmax(180px,1fr) 160px minmax(160px,1fr) auto;gap:10px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px;margin-bottom:10px}
.cause-row select,.cause-row input{background:#fffefa;border:2px solid var(--line);border-radius:12px;padding:10px;min-height:44px;width:100%}
.textbook-form{display:grid;gap:10px;margin-top:12px}
.textbook-row{display:grid;grid-template-columns:minmax(200px,1fr) minmax(200px,1.1fr);gap:10px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px}
.textbook-row .check{grid-column:2}
.textbook-row input{background:#fffefa;border:2px solid var(--line);border-radius:12px;padding:10px 12px;min-height:46px;width:100%}
.settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px}
.field{display:grid;gap:8px;margin:14px 0;color:#345674;font-weight:700}
.field input,.field select,.field textarea{
  background:#fffefa;border:2px solid var(--line);border-radius:16px;color:#284a68;font-weight:400;
  padding:13px 14px;width:100%;min-height:48px;
}
.field textarea{min-height:330px;line-height:1.9;font-size:18px;resize:vertical}
.check{display:flex;align-items:center;gap:9px;font-weight:700;color:#345674;min-height:48px;cursor:pointer}
.check input{width:24px;height:24px;accent-color:var(--coral)}
.light-check{background:#fff;border:1px solid var(--line);border-radius:14px;padding:10px 12px}

/* ---------- modal & toast ---------- */
.modal-backdrop{
  position:fixed;inset:0;background:#183d64cc;display:grid;place-items:center;
  padding:20px;z-index:50;
}
.modal-card{background:var(--cream);border:4px solid #fff;border-radius:26px;padding:24px;max-width:560px;width:100%;box-shadow:0 20px 50px #0f2e4d55}
.modal-card h2{margin:0 0 8px;font-size:24px}
.modal-card p{margin:8px 0}
.toast{
  position:fixed;left:50%;bottom:26px;transform:translateX(-50%);z-index:60;
  background:#183d64;color:#fff;border-radius:999px;padding:13px 22px;font-weight:700;
  box-shadow:0 10px 30px #0f2e4d66;max-width:min(92vw,640px);text-align:center;
}
.toast.ok{background:#256c56}
.toast.warn{background:#9a4b37}
.toast[hidden]{display:none}

/* ---------- parent gate & welcome ---------- */
.parent-gate{max-width:460px;margin:6vh auto;text-align:left}
.welcome-backdrop{
  position:fixed;inset:0;z-index:80;display:grid;place-items:center;overflow:hidden;
  background:linear-gradient(180deg,#7ec8ef 0%,#b8e6fb 46%,#fdeec9 100%);
  animation:welcomeIn .5s ease both;
}
.welcome-backdrop.bye{animation:welcomeOut .45s ease both}
.welcome-sky{position:absolute;inset:0;pointer-events:none}
.star{
  position:absolute;width:14px;height:14px;background:#fff6c9;border-radius:50%;
  box-shadow:0 0 14px 4px #fff3a8aa;
  animation:twinkle 2.2s ease-in-out infinite;
}
.star.s1{width:9px;height:9px;background:#ffffff;box-shadow:0 0 10px 3px #ffffff88}
.star.s2{width:18px;height:18px;background:#ffe28a}
.star.s3{width:11px;height:11px;background:#ffd1dc;box-shadow:0 0 12px 4px #ffd1dccc}
.star.s4{width:7px;height:7px;background:#fff}
.welcome-card{
  position:relative;text-align:center;background:#fffaf0;border:5px solid #fff;
  border-radius:36px;padding:44px 40px 36px;max-width:480px;width:min(92vw,480px);
  box-shadow:0 24px 60px #2b6a9c44;
  animation:popIn .7s cubic-bezier(.34,1.56,.64,1) .25s both;
}
.welcome-badge{
  width:76px;height:76px;margin:-86px auto 10px;display:grid;place-items:center;
  background:var(--coral);color:#fff;font-size:38px;border-radius:50%;
  border:5px solid #ffe5c4;box-shadow:0 8px 20px #c17d5555;
  animation:badgeSpin 1.1s cubic-bezier(.34,1.56,.64,1) .5s both;
}
.welcome-card h2{font-size:30px;color:var(--ink);margin:6px 0 10px;letter-spacing:1px}
.welcome-card p{color:var(--ink-soft);font-size:17px;line-height:1.9;margin:0 0 22px}
.welcome-card .primary.big{width:100%;font-size:20px;min-height:62px;border-radius:999px}
@keyframes twinkle{0%,100%{transform:scale(.6);opacity:.45}50%{transform:scale(1.15);opacity:1}}
@keyframes popIn{0%{transform:scale(.55) translateY(40px);opacity:0}100%{transform:scale(1) translateY(0);opacity:1}}
@keyframes badgeSpin{0%{transform:scale(0) rotate(-160deg)}100%{transform:scale(1) rotate(0)}}
@keyframes welcomeIn{from{opacity:0}to{opacity:1}}
@keyframes welcomeOut{to{opacity:0;transform:scale(1.06)}}
@media(prefers-reduced-motion:reduce){
  .star,.welcome-card,.welcome-badge,.welcome-backdrop,.welcome-backdrop.bye{animation:none!important}
}

/* ---------- responsive ---------- */
@media(max-width:1100px){
  .side{gap:8px;padding:14px 18px}
  .brand{font-size:22px}
  .nav{font-size:15px;padding:10px 15px}
  .main{padding:8px 20px 34px}
  .panel{padding:22px}
  .panel h2{font-size:24px}
  .cause-row{grid-template-columns:1fr 1fr}
  .cause-row .subtle{grid-column:1/-1;min-height:48px}
}
@media(max-width:760px){
  .side{flex-wrap:nowrap;overflow-x:auto;padding:10px 12px;-webkit-overflow-scrolling:touch}
  .brand{font-size:19px}
  .grid{grid-template-columns:1fr}
  .main{padding:6px 12px 30px}
  .panel{padding:18px;border-radius:24px;border-width:3px}
  .panel h2{font-size:22px}
  .question{font-size:22px}
  .task-row{flex-wrap:wrap}
  .task-row .task-main{flex:1 1 60%}
  .textbook-row{grid-template-columns:1fr}
  .textbook-row .check{grid-column:auto}
  .cause-row{grid-template-columns:1fr}
  .top{font-size:14px}
}
@media(pointer:coarse){
  .primary,.subtle,.nav,.tabs button,.options button,.task-row button,.list-link{min-height:56px}
  .options button{font-size:21px}
  .normal .options button{padding:20px}
}
@media(prefers-reduced-motion:reduce){
  *{transition:none!important;animation:none!important}
}
