:root{--ink: #150921;--parchment: #f6f0e2;--gold: #b8862e;--red: #9e1b32;--sage: #2f6f62;--ink-text: #3a342b;--card-border: #e4dac4;--display-font: "Iowan Old Style", "Palatino Linotype", Georgia, serif;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--mono-font: "Courier New", monospace}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;background:var(--parchment)}body{font-family:var(--body-font);color:var(--ink-text);-webkit-tap-highlight-color:transparent}.app-shell{width:100%;max-width:480px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column;background:var(--parchment)}.brand-strip{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:var(--ink)}.brand-strip .brand{color:var(--gold);font-family:var(--mono-font);font-size:12px;letter-spacing:.15em}.brand-strip .sub{color:var(--parchment);opacity:.6;font-family:var(--mono-font);font-size:12px}.tab-panel{flex:1;overflow-y:auto;padding:0 16px 24px}.tag{display:inline-block;padding:2px 10px;border-radius:999px;font-size:11px;font-family:var(--mono-font);letter-spacing:.05em;background:var(--ink);color:var(--parchment)}.tag.gold{background:var(--gold)}.tag.red{background:var(--red)}.page-title{margin:10px 0 2px;font-family:var(--display-font);font-size:24px;line-height:1.2;color:var(--ink)}.page-sub{font-size:13px;color:var(--ink-text);opacity:.7;margin:0}.hint{font-size:12px;font-style:italic;color:var(--red);margin-top:8px}.card{background:#fff;border:1px solid var(--card-border);border-radius:16px;padding:16px;margin-bottom:14px}.card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.badge-num{width:24px;height:24px;flex-shrink:0;border-radius:999px;background:var(--gold);color:#fff;font-family:var(--mono-font);font-size:12px;display:flex;align-items:center;justify-content:center}.card-heading{font-family:var(--display-font);font-size:16px;font-weight:600;color:var(--ink);margin:0}.group-card .card-heading{font-size:17px}.sub-item{border-top:1px solid var(--card-border);padding-top:12px;margin-top:12px}.sub-item:first-of-type{border-top:none;padding-top:4px;margin-top:4px}.sub-item-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.badge-num.small{width:20px;height:20px;font-size:11px;background:var(--red)}.sub-item-title{font-family:var(--display-font);font-size:14.5px;font-weight:600;color:var(--ink);margin:0}.sentence{font-size:14px;line-height:1.55;padding:6px 8px;margin:0 -8px;border-radius:8px;cursor:pointer;transition:background-color .15s ease}.sentence.open{background:#f1e7ce}.stamp{margin:4px 8px;padding:8px 12px;border-radius:8px;background:var(--parchment);border:1.5px dashed var(--red);transform:rotate(-.4deg);display:flex;align-items:flex-start;gap:8px}.stamp p{font-size:12px;line-height:1.4;color:var(--red);margin:0}.stamp svg{color:var(--red);margin-top:2px;flex-shrink:0}.ladder{display:flex;gap:6px;margin-bottom:20px}.rung{flex:1;height:8px;border-radius:999px;background:var(--card-border)}.rung.filled{background:var(--red)}.quiz-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.quiz-best{font-size:12px;color:var(--ink-text);opacity:.6;font-family:var(--mono-font)}.question-ms{font-family:var(--display-font);font-size:16px;line-height:1.4;color:var(--ink);cursor:pointer;padding:6px 8px;margin:0 -8px 14px;border-radius:8px}.question-ms.open{background:#f1e7ce}.options{display:flex;flex-direction:column;gap:8px}.option-row{display:flex;align-items:stretch;gap:8px;border-radius:12px}.option-letter{flex-shrink:0;width:34px;border:1px solid var(--card-border);border-radius:10px;background:var(--parchment);color:var(--ink);font-family:var(--mono-font);font-size:13px;font-weight:600;cursor:pointer}.option-letter:disabled{cursor:default}.option-text{flex:1;padding:10px 12px;border-radius:12px;border:1px solid var(--card-border);background:#fff;font-size:14px;font-family:var(--body-font);color:var(--ink-text);cursor:pointer}.option-text.open{background:#f1e7ce}.option-row.correct .option-letter,.option-row.correct .option-text{background:#eaf3ef;border-color:var(--sage);color:var(--sage)}.option-row.wrong .option-letter,.option-row.wrong .option-text{background:#f7e9ea;border-color:var(--red);color:var(--red)}.stamp.small{margin:4px 8px 0;padding:6px 10px}.stamp.small p{font-size:11px}.check-card{border-color:var(--gold);border-width:1.5px;background:#fffdf6}.check-head{margin-bottom:8px}.check-badge{font-size:10.5px;font-family:var(--mono-font);letter-spacing:.04em;color:var(--gold)}.check-feedback{margin:10px 0 0;font-size:12.5px;font-family:var(--body-font)}.check-feedback.good{color:var(--sage)}.check-feedback.bad{color:var(--red)}.locked-card{text-align:center;padding:32px 20px;color:var(--ink-text)}.locked-card svg{color:var(--gold);margin-bottom:8px}.locked-card h2{font-family:var(--display-font);color:var(--ink);font-size:17px;margin:0 0 8px}.locked-card p{font-size:13px;opacity:.75;margin:0 0 16px;line-height:1.5}.auth-shell{width:100%;max-width:480px;margin:0 auto;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 16px;background:var(--parchment)}.auth-card{width:100%;background:#fff;border:1px solid var(--card-border);border-radius:16px;padding:24px 20px;text-align:center}.auth-card h2{font-family:var(--display-font);color:var(--ink);font-size:19px;margin:10px 0 18px}.auth-card svg{color:var(--gold)}.auth-card p{font-size:13px;color:var(--ink-text);opacity:.75;line-height:1.5;margin:0 0 16px}.auth-label{display:block;text-align:left;font-size:12px;font-family:var(--mono-font);color:var(--ink-text);opacity:.7;margin:10px 0 4px}.auth-input{width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--card-border);font-size:14px;font-family:var(--body-font);color:var(--ink-text);margin-bottom:4px;box-sizing:border-box}.auth-error{color:var(--red);font-size:12.5px;margin:10px 0 0;text-align:left}.auth-switch{display:block;width:100%;margin-top:14px;border:none;background:none;color:var(--gold);font-size:12.5px;text-decoration:underline;cursor:pointer}.auth-switch.admin-link{color:var(--ink-text);opacity:.5;text-decoration:none;margin-top:20px;font-family:var(--mono-font);font-size:11px}.student-chip{font-size:11px;font-family:var(--mono-font);color:var(--parchment);opacity:.75;cursor:pointer}.admin-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:4px}.back-link{border:none;background:none;color:var(--gold);font-size:12.5px;cursor:pointer;padding:0;margin-bottom:10px;display:block}.student-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-top:1px solid var(--card-border)}.student-row:first-of-type{border-top:none}.student-name{font-size:13.5px;color:var(--ink);cursor:pointer;text-decoration:underline dotted var(--gold)}.student-meta{font-size:11px;font-family:var(--mono-font);color:var(--ink-text);opacity:.6}.student-actions{display:flex;gap:6px}.mini-btn{border:none;border-radius:8px;padding:5px 10px;font-size:11px;font-family:var(--mono-font);cursor:pointer;color:#fff}.mini-btn.approve{background:var(--sage)}.mini-btn.reject{background:var(--red)}.progress-line{font-size:13px;color:var(--ink-text);margin:0 0 8px}.progress-line.muted{opacity:.55;font-style:italic}.attempt-history{display:flex;flex-direction:column;gap:4px;margin-top:4px}.attempt-row{display:flex;align-items:center;gap:10px;font-size:12px;font-family:var(--mono-font);color:var(--ink-text);padding:4px 0;border-top:1px dashed var(--card-border)}.attempt-row:first-of-type{border-top:none}.attempt-breakdown-mini{flex:1;opacity:.7;font-size:11px}.attempt-date{opacity:.5;font-size:11px}.attempt-label{font-size:11px;font-family:var(--mono-font);color:var(--gold);margin:4px 0}.attempt-history-title{font-size:11px;font-family:var(--mono-font);color:var(--ink-text);opacity:.6;margin:16px 0 6px;text-align:left}.next-btn{margin-top:16px;width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:10px;border-radius:12px;border:none;background:var(--ink);color:var(--parchment);font-size:14px;cursor:pointer}.done-card{text-align:center;padding:28px 16px}.done-card .trophy{font-size:32px;margin-bottom:6px}.done-card h2{font-family:var(--display-font);color:var(--ink);margin:0 0 4px}.done-card p{font-size:13px;color:var(--ink-text);opacity:.75;margin:0 0 16px}.restart-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border-radius:999px;border:none;background:var(--ink);color:var(--parchment);font-size:13px;cursor:pointer}.chapter-progress{padding:10px 16px 12px;background:#fff;border-bottom:1px solid var(--card-border)}.chapter-progress-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.chapter-progress-label{font-size:11px;font-family:var(--mono-font);color:var(--ink);letter-spacing:.03em}.chapter-progress-frac{font-size:11px;font-family:var(--mono-font);color:var(--ink-text);opacity:.55}.pill-row{display:flex;gap:6px;margin-bottom:8px}.pill{flex:1;display:flex;align-items:center;justify-content:center;gap:3px;font-size:11px;font-family:var(--mono-font);padding:5px 0;border-radius:8px;border:none;background:var(--parchment);color:var(--ink-text);opacity:.6;cursor:pointer}.pill-active{opacity:1;background:#f1e7ce;color:var(--ink);font-weight:600;border:1px solid var(--gold)}.pill-done{background:var(--sage);color:#fff;opacity:1}.pill-active.pill-done{background:var(--sage);color:#fff;border:1px solid var(--ink)}.rung-track{height:5px;border-radius:999px;background:var(--card-border);overflow:hidden}.rung-fill{height:100%;background:var(--gold);border-radius:999px;transition:width .3s ease}.read-progress-track{margin-top:10px;height:6px;border-radius:999px;background:var(--card-border);overflow:hidden}.read-progress-fill{height:100%;background:var(--sage);border-radius:999px;transition:width .15s ease}.read-progress-label{font-size:11px;font-family:var(--mono-font);color:var(--ink-text);opacity:.55;margin:4px 0 12px}.q-progress-track{height:6px;border-radius:999px;background:var(--card-border);overflow:hidden}.q-progress-fill{height:100%;background:var(--red);border-radius:999px;transition:width .25s ease}.q-progress-label{font-size:11px;font-family:var(--mono-font);color:var(--ink-text);opacity:.55;margin:4px 0 14px}.note-figure{margin:4px 0 10px;text-align:center}.note-figure img{max-width:100%;border-radius:10px;border:1px solid var(--card-border)}.note-figure figcaption{font-size:11px;color:var(--ink-text);opacity:.6;margin-top:4px;font-style:italic}.motivation-banner{display:flex;align-items:center;gap:8px;background:#f1e7ce;border:1px solid var(--gold);color:var(--ink);font-size:12.5px;padding:10px 12px;border-radius:12px;margin-top:4px}.motivation-banner.floating{position:sticky;top:4px;z-index:5;animation:fadeSlide .3s ease}@keyframes fadeSlide{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.diff-tag{font-size:11px;font-family:var(--mono-font);padding:3px 10px;border-radius:999px;color:#fff}.diff-easy{background:var(--sage)}.diff-medium{background:var(--gold)}.diff-hard{background:var(--red)}.breakdown{text-align:left;margin-top:6px;margin-bottom:18px;display:flex;flex-direction:column;gap:10px}.breakdown-row{display:flex;align-items:center;gap:8px}.breakdown-tag{font-size:10px;font-family:var(--mono-font);width:68px;flex-shrink:0;color:var(--ink-text);opacity:.7}.breakdown-track{flex:1;height:6px;border-radius:999px;background:var(--card-border);overflow:hidden}.breakdown-fill{height:100%;border-radius:999px}.diff-easy .breakdown-fill,.breakdown-row.diff-easy .breakdown-fill{background:var(--sage)}.diff-medium .breakdown-fill,.breakdown-row.diff-medium .breakdown-fill{background:var(--gold)}.diff-hard .breakdown-fill,.breakdown-row.diff-hard .breakdown-fill{background:var(--red)}.breakdown-score{font-size:11px;font-family:var(--mono-font);width:32px;text-align:right;color:var(--ink-text);opacity:.7}.tab-bar{display:flex;border-top:1px solid var(--card-border);background:#fff}.tab-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 0;border:none;background:none;cursor:pointer;color:var(--ink-text);opacity:.45}.tab-btn.active{color:var(--red);opacity:1}.tab-btn span{font-size:12px;font-family:var(--body-font)}.tap-text{cursor:pointer;border-bottom:1px dotted var(--gold)}.tap-text.open{border-bottom:none}.tap-text-en{font-style:italic;opacity:.75}.app-credit{text-align:center;font-size:11px;font-family:var(--mono-font);color:var(--ink-text);opacity:.45;padding:8px 0;margin:0;background:#fff}
