:root{color-scheme:light;--bg:#f6f7f4;--panel:#ffffff;--ink:#1d2520;--muted:#6c756f;--line:#dde3dc;--accent:#246b52;--accent-strong:#164b38;--danger:#a33a34}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,Avenir Next,PingFang SC,Microsoft YaHei,system-ui,sans-serif}button,input,select,textarea{font:inherit}a{color:inherit}.page-shell{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr)}.topbar{min-height:64px;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:0 24px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.9)}.brand,.topbar{display:flex;align-items:center}.brand{gap:10px;font-weight:800}.brand-mark{width:28px;height:28px;border-radius:7px;display:grid;place-items:center;background:var(--accent);color:#fff;font-size:14px}.topnav{display:flex;gap:6px;margin-left:auto;margin-right:18px}.topnav,.topnav a{align-items:center}.topnav a{min-height:34px;display:inline-flex;border-radius:6px;padding:0 12px;color:var(--muted);font-weight:800;text-decoration:none}.topnav a.active{background:#eef3ee;color:var(--ink)}.auth-wrap{min-height:calc(100vh - 64px);display:grid;align-items:center;padding:32px 16px}.auth-card{width:min(420px,100%);margin:0 auto;padding:28px;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 18px 50px rgba(29,37,32,.08)}.stack{display:grid;grid-gap:16px;gap:16px}.field{display:grid;grid-gap:8px;gap:8px}.field label{color:var(--muted);font-size:13px;font-weight:700}.field input,.field select,.field textarea{width:100%;border:1px solid var(--line);border-radius:6px;padding:10px 12px;color:var(--ink);background:#fff}.field input,.field select{min-height:44px}.field textarea{resize:vertical;min-height:140px;line-height:1.6}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid rgba(36,107,82,.22);border-color:var(--accent)}.button{min-height:44px;border:0;border-radius:6px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;font-weight:800}.button.primary{background:var(--accent);color:#fff}.button.primary:hover{background:var(--accent-strong)}.button.secondary{background:#eef3ee;color:var(--ink)}.button:disabled{cursor:not-allowed;opacity:.56}.notice{background:#eef6f1;color:#244f3f}.error,.notice{padding:10px 12px;border-radius:6px;font-size:13px}.error{background:#fff0ee;color:var(--danger)}.muted{color:var(--muted)}.dashboard{width:min(1040px,calc(100% - 32px));margin:32px auto;display:grid;grid-gap:18px;gap:18px}.dashboard-grid{width:min(1180px,calc(100% - 32px))}.dashboard-columns{display:grid;grid-template-columns:320px minmax(0,1fr);grid-gap:18px;gap:18px;align-items:start}.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:20px}.metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:12px;gap:12px}.metric{border:1px solid var(--line);border-radius:8px;padding:16px;background:#fbfcfa}.metric strong{display:block;margin-top:6px;font-size:18px}.segmented{min-height:40px;display:grid;grid-template-columns:1fr 1fr;grid-gap:4px;gap:4px;padding:4px;border:1px solid var(--line);border-radius:7px;background:#f5f7f4}.segmented button{border:0;border-radius:5px;background:transparent;color:var(--muted);cursor:pointer;font-weight:800}.segmented button.active{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(29,37,32,.08)}.class-list,.student-list,.timeline-list{display:grid;grid-gap:8px;gap:8px}.class-row,.student-row,.timeline-row{width:100%;min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink)}.class-row{cursor:pointer;text-align:left}.class-row.active{border-color:var(--accent);background:#eef6f1}.class-row small{display:block;margin-top:3px;color:var(--muted)}.pill{display:inline-flex;min-height:24px;align-items:center;border-radius:999px;padding:3px 9px;background:#eef3ee;color:#355246;font-size:12px;font-weight:800;white-space:nowrap}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.section-head-start{align-items:start}.section-head h2{margin:0;font-size:20px}.inline-form{display:grid;grid-template-columns:minmax(0,1fr) 110px;grid-gap:10px;gap:10px;align-items:end}.panel-copy{max-width:72ch;line-height:1.7}.primary-flow-actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.inline-link-action{display:inline-flex;align-items:center;gap:6px;color:var(--accent-strong);font-weight:800;text-decoration:none}.inline-link-action:hover{text-decoration:underline}.report-filters{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;grid-gap:12px;gap:12px;align-items:end}.filter-actions{display:flex;flex-wrap:wrap;gap:10px}.student-row strong,.timeline-row strong{display:block}.report-table-wrap{overflow-x:auto}.report-table{width:100%;min-width:820px;border-collapse:collapse}.report-table td,.report-table th{padding:13px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}.report-table th{color:var(--muted);font-size:13px}.report-table tbody tr:last-child td{border-bottom:0}.back-link,.report-title-link{color:var(--accent-strong);font-weight:800;text-decoration:none}.back-link:hover,.report-title-link:hover{text-decoration:underline}.table-subtext{display:block;margin-top:3px;font-size:12px}.status-pill{display:inline-flex;min-height:24px;align-items:center;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:800;white-space:nowrap}.status-generating{background:#edf2ff;color:#304a8a}.status-pending_teacher_confirmation{background:#fff6df;color:#755114}.status-completed{background:#eaf6ed;color:#24543a}.status-failed{background:#fff0ee;color:var(--danger)}.detail-grid{display:grid;grid-template-columns:360px minmax(0,1fr);grid-gap:18px;gap:18px;align-items:start}.detail-grid-m6{grid-template-columns:320px minmax(0,1fr)}.detail-list{display:grid;grid-gap:10px;gap:10px;margin:0}.detail-list div{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding-bottom:10px;border-bottom:1px solid var(--line)}.detail-list div:last-child{border-bottom:0;padding-bottom:0}.detail-list dt{color:var(--muted);font-size:13px;font-weight:800}.detail-list dd{margin:0;font-weight:800}.detail-list-readonly div{align-items:center}.report-summary{margin:0;line-height:1.75}.inline-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px}.save-state-pill{display:inline-flex;min-height:32px;align-items:center;border-radius:999px;padding:0 12px;font-size:12px;font-weight:800;white-space:nowrap}.save-state-pill.saved{background:#eef3ee;color:#355246}.save-state-pill.dirty{background:#fff6df;color:#755114}.editable-section-list,.review-list{display:grid;grid-gap:10px;gap:10px}.confirmation-card,.editable-report-item,.review-row{border:1px solid var(--line);border-radius:7px;background:#fbfcfa}.review-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px}.editable-report-item{display:grid;grid-gap:12px;gap:12px;padding:14px}.confirmation-card{display:grid;grid-gap:12px;gap:12px;padding:12px}.confirmation-actions{display:flex;flex-wrap:wrap;gap:8px}.confirmation-result{display:grid;grid-gap:4px;gap:4px}.share-link-box,.share-meta{display:flex;align-items:center;gap:10px}.share-link-box input{flex:1 1 auto;min-width:0;min-height:44px;border:1px solid var(--line);border-radius:6px;padding:10px 12px;background:#fff}.share-page{min-height:100vh;padding:24px 16px 48px;background:linear-gradient(180deg,#f6f7f4,#eef4ef)}.share-sheet{width:min(860px,100%);margin:0 auto;padding:28px;border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:0 20px 60px rgba(29,37,32,.08)}.share-hero{display:grid;grid-gap:10px;gap:10px;padding-bottom:20px;border-bottom:1px solid var(--line)}.share-card strong,.share-hero h1,.share-practice-card strong,.share-section h2,.share-sheet p{text-wrap:balance}.share-kicker{margin:0;color:var(--accent-strong);font-size:13px;font-weight:800}.share-hero h1{margin:0;font-size:clamp(28px,4vw,42px)}.share-meta-line{margin:0;color:var(--muted)}.share-section{display:grid;grid-gap:14px;gap:14px;padding-top:22px}.share-section h2{margin:0;font-size:22px}.share-card-grid,.share-practice-list{display:grid;grid-gap:14px;gap:14px}.share-card,.share-practice-card{display:grid;grid-gap:8px;gap:8px;padding:18px;border:1px solid var(--line);border-radius:10px;background:#fbfcfa}.share-card p,.share-practice-card p{margin:0;line-height:1.75}.share-practice-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.share-practice-note{margin:-4px 0 4px;font-size:14px;color:var(--muted)}.share-practice-head .pill-time{background:#17684d;color:#fff;font-weight:700;font-size:15px}.practice-scale-tag{justify-self:start;margin-top:2px;padding:3px 12px;border-radius:999px;background:#e2f0e7;color:#17684d;font-size:13px;font-weight:600}.snapshot-mode{padding:0;background:#f6f7f4}.snapshot-mode .share-sheet{width:1080px;max-width:1080px;min-height:100vh;border-radius:0;box-shadow:none}.empty-state{min-height:180px;display:grid;place-items:center;align-content:center;grid-gap:12px;gap:12px}@media (max-width:720px){.topbar{padding:12px 16px}.topnav{order:3;width:100%;margin-right:10px}.auth-card{padding:22px}.dashboard-columns,.detail-grid,.inline-form,.metrics,.report-filters{grid-template-columns:1fr}.filter-actions,.share-link-box,.share-meta,.share-practice-head{flex-direction:column;align-items:stretch}}.inline-item{display:flex;flex-direction:column;gap:4px;padding:8px 0}.inline-block-title{margin:10px 0 2px;font-weight:700;color:#2f6b4f;font-size:14px}.inline-title{font-weight:700;font-size:15px;color:#1a1a1a;width:-moz-fit-content;width:fit-content;max-width:100%}.inline-text,.inline-title{background:none;border:none;margin:0;padding:4px 8px;text-align:left;cursor:text;border-radius:6px;font-family:inherit}.inline-text{font-size:14px;line-height:1.75;color:#333;white-space:pre-wrap;width:100%}.inline-text:hover,.inline-title:hover{background:#eef4f0}.inline-reminder{color:#6b7280;font-size:13px}.inline-reminder-label{display:inline-block;font-size:11px;color:#9a7400;background:#fdf6e3;border-radius:4px;padding:0 6px;margin-right:6px}.inline-empty{color:#b3b9c0}.inline-edit-input,.inline-edit-textarea{width:100%;border:1px solid #bfe0cc;border-radius:8px;padding:8px 10px;font-size:14px;font-family:inherit;line-height:1.75;box-sizing:border-box;outline:none}.inline-edit-input:focus,.inline-edit-textarea:focus{border-color:#2f6b4f}.inline-edit-textarea{resize:vertical}