:root{--bg:#070b14;--surface:#0d1422;--surface2:#111a2b;--surface3:#172238;--line:#24324b;--text:#edf4ff;--muted:#92a3bd;--blue:#72a7ff;--blue2:#477bea;--green:#55d6a3;--amber:#ffc66d;--red:#ff7587;--shadow:0 18px 50px rgba(0,0,0,.28)}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:Inter,"Noto Sans Thai",system-ui,-apple-system,sans-serif}button,select{font:inherit}.topbar{height:64px;display:flex;align-items:center;gap:18px;padding:0 18px;border-bottom:1px solid var(--line);background:rgba(10,15,27,.96);position:sticky;top:0;z-index:10}.brand{display:flex;align-items:center;gap:9px;font-weight:800}.brand-icon{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:linear-gradient(135deg,#3678dc 50%,#f0c44d 50%);color:#07101d;font-size:11px}.version{font-size:11px;color:var(--muted);font-weight:700}.spacer{flex:1}.top-status{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px}.status-dot{width:8px;height:8px;background:var(--amber);border-radius:50%;box-shadow:0 0 12px currentColor}.status-dot.ready{background:var(--green)}.status-dot.error{background:var(--red)}.select,.mode-control select{background:var(--surface3);color:var(--text);border:1px solid var(--line);border-radius:9px;padding:8px 10px}.mode-control{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px}.layout{display:grid;grid-template-columns:245px minmax(480px,1fr) 315px;min-height:calc(100vh - 64px)}.sidebar{padding:20px 16px;background:var(--surface);min-width:0}.lesson-panel{border-right:1px solid var(--line)}.tutor-panel{border-left:1px solid var(--line)}h1,h2,p{margin-top:0}h1{font-size:21px;margin-bottom:7px}h2{font-size:16px;margin-bottom:7px}.eyebrow{font-size:10px;letter-spacing:.12em;color:var(--blue);font-weight:800;text-transform:uppercase}.small{font-size:12px}.muted{color:var(--muted)}.progress-track{height:7px;border-radius:10px;background:#1d2a40;overflow:hidden;margin-top:16px}.progress-bar{height:100%;width:17%;background:linear-gradient(90deg,var(--blue2),#7cb5ff);transition:width .3s}.progress-label{font-size:11px;color:var(--muted);margin:7px 0 14px}.steps{display:grid;gap:5px}.step{padding:8px 10px;border-radius:8px;color:var(--muted);font-size:12px;border:1px solid transparent}.step.active{background:#172640;border-color:#2b4774;color:#fff}.step.done{color:var(--green)}.divider{height:1px;background:var(--line);margin:20px 0}.concepts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.concept{font:11px ui-monospace,monospace;padding:5px 7px;border-radius:6px;background:#18243a;color:#b8cae8}.notice{margin-top:18px;background:#302719;border:1px solid #5b4825;color:#f2d59a;padding:10px;border-radius:9px;font-size:11px;line-height:1.55}.hidden{display:none!important}.workspace{min-width:0;display:flex;flex-direction:column;background:#0a101c}.task-card{padding:16px 20px;border-bottom:1px solid var(--line);background:linear-gradient(135deg,#0e1728,#101a2c)}.task-card p{color:#afbdd1;font-size:13px;margin-bottom:0;line-height:1.6}.task-meta{display:flex;align-items:center;gap:9px;margin-bottom:9px}.chip{background:#173059;color:#9fc0ff;padding:4px 8px;border-radius:99px;font-size:10px;font-weight:800}.objective{font-size:11px;color:var(--muted)}.editor-shell{margin:14px 16px 0;border:1px solid var(--line);border-radius:11px;overflow:hidden;background:#080d16;box-shadow:var(--shadow);min-height:390px;display:flex;flex-direction:column}.filebar{height:39px;display:flex;align-items:center;background:#101827;border-bottom:1px solid var(--line)}.filetab{height:100%;padding:10px 14px;background:#080d16;border-right:1px solid var(--line);font:12px ui-monospace,monospace}.python-mark{color:#62a5ff}.unsaved{color:var(--muted);font-size:8px;margin-left:5px}.file-help{margin-left:auto;padding-right:12px;color:var(--muted);font-size:10px}kbd{border:1px solid #3a4962;border-radius:4px;padding:1px 4px;background:#151f31}.editor-shell #editor{height:390px;min-height:300px}.actions{display:flex;gap:8px;flex-wrap:wrap;padding:12px 16px}.button{border:1px solid var(--line);background:#172239;color:var(--text);border-radius:8px;padding:9px 12px;cursor:pointer;font-weight:650;font-size:12px}.button:hover:not(:disabled){filter:brightness(1.12);transform:translateY(-1px)}.button:disabled{opacity:.55;cursor:wait}.button.primary{background:var(--blue2);border-color:#5d8cee}.button.success{background:#15392f;color:#a4efd2;border-color:#27604e}.button.ghost{background:transparent;color:var(--muted)}.console-card{margin:0 16px 16px;border:1px solid var(--line);border-radius:10px;background:#050912;overflow:hidden}.section-head{height:36px;display:flex;align-items:center;padding:0 12px;background:#0e1625;color:#aec0db;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.section-head .text-button{margin-left:auto}#console{margin:0;min-height:100px;max-height:220px;overflow:auto;padding:13px;color:#c9d7ec;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap}.text-button{border:0;background:none;color:var(--blue);cursor:pointer;font-size:11px;padding:3px}.tutor-heading{display:flex;gap:10px;align-items:center;margin-bottom:15px}.avatar{width:38px;height:38px;display:grid;place-items:center;border-radius:11px;background:linear-gradient(135deg,#294b86,#553f8e);font-size:11px;font-weight:800}.tutor-heading h2{margin:2px 0 0}.policy-card,.feedback,.hint-card{padding:11px;border-radius:9px;font-size:12px;line-height:1.6}.policy-card{background:#121d30;color:#aabbd3;border:1px solid var(--line);margin-bottom:10px}.feedback{background:#152541;border-left:3px solid var(--blue);margin-bottom:10px}.feedback.ok{background:#113126;border-left-color:var(--green)}.feedback.error{background:#321823;border-left-color:var(--red)}.hint-card{background:#2b2418;border-left:3px solid var(--amber);margin-bottom:10px}.activity{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.activity summary{display:flex;align-items:center;cursor:pointer;font-size:12px;font-weight:800}.count{margin-left:auto;background:#20304d;padding:2px 7px;border-radius:99px;color:#b9cae8}.activity-tools{display:flex;justify-content:space-between;margin:8px 0}.log-retention-note{margin:0 0 8px;font-size:10px;line-height:1.4}.log-list{display:grid;gap:6px;max-height:340px;overflow:auto}.log-item{background:#0a111f;border:1px solid #1d2b43;border-radius:7px;padding:7px}.log-top{display:flex;align-items:center;gap:6px}.log-time{color:#70839f;font:9px ui-monospace,monospace}.log-type{color:#a9c4f4;font:10px ui-monospace,monospace;font-weight:700}.log-note{font-size:10px;color:#8294af;margin-top:4px;overflow-wrap:anywhere}.log-item.flag{border-color:#725427;background:#2b2216}.log-item.flag .log-type{color:var(--amber)}.toast{position:fixed;bottom:18px;left:50%;transform:translate(-50%,20px);padding:9px 14px;border-radius:8px;background:#26344b;color:white;font-size:12px;opacity:0;pointer-events:none;transition:.2s;z-index:30;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:1050px){.layout{grid-template-columns:210px minmax(420px,1fr)}.tutor-panel{grid-column:1/-1;border-left:0;border-top:1px solid var(--line)}.log-list{max-height:180px}}@media(max-width:760px){.topbar{height:auto;min-height:62px;flex-wrap:wrap;padding:10px 12px;gap:8px}.top-status{display:none}.mode-control span{display:none}.layout{display:block}.lesson-panel{border-right:0;border-bottom:1px solid var(--line)}.steps{grid-template-columns:repeat(2,1fr)}.editor-shell{min-height:350px;margin:10px 8px 0}.editor-shell #editor{height:350px}.actions,.task-card{padding-left:10px;padding-right:10px}.console-card{margin:0 8px 10px}.file-help{display:none}.tutor-panel{border-top:1px solid var(--line)}}

/* Human-readable activity timeline */
.log-list{gap:7px}.log-item{border-radius:8px;padding:9px 10px}.log-top{margin-bottom:4px}.log-icon{width:17px;height:17px;display:grid;place-items:center;border-radius:50%;background:#1d3151;color:#aecdff;font-size:9px;font-weight:800}.log-title{color:#dce8fa;font-size:11px;font-weight:750;line-height:1.35}.log-note{font-size:10px;line-height:1.45;color:#8294af;margin-top:3px}.log-item.flag .log-icon{background:#6a4b1c;color:#ffe0a1}.log-item.flag .log-title{color:var(--amber)}
.integrity-note{margin:8px 0 3px;padding:7px 8px;border:1px solid #4d412a;border-radius:7px;background:#261f15;color:#b9a985;font-size:9px;line-height:1.45}.integrity-note span{color:var(--amber);font-weight:800}.monaco-editor .python-error-line{background:rgba(255,73,94,.18);border-top:1px solid rgba(255,103,122,.45);border-bottom:1px solid rgba(255,103,122,.45)}.monaco-editor .python-error-glyph{background:#ff526b;border-radius:50%;width:8px!important;height:8px!important;margin-left:5px;margin-top:7px;box-shadow:0 0 0 3px rgba(255,82,107,.18)}

/* Authentication, classroom and server state */
.button.compact{padding:7px 9px;font-size:11px}.pill{display:inline-flex;align-items:center;max-width:220px;padding:6px 9px;border:1px solid var(--line);border-radius:999px;color:#b9c9df;font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gate{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:22px;background:rgba(3,7,14,.88);backdrop-filter:blur(12px)}.gate-card{width:min(100%,440px);max-height:calc(100vh - 44px);overflow:auto;border:1px solid #2b3b58;border-radius:18px;background:#0d1626;padding:24px;box-shadow:0 30px 90px rgba(0,0,0,.55)}.gate-brand{margin-bottom:20px}.gate-card h1{font-size:22px}.auth-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;margin:18px 0 14px;padding:4px;border-radius:10px;background:#080e19}.auth-tab{border:0;border-radius:7px;padding:9px;background:transparent;color:var(--muted);cursor:pointer}.auth-tab.active{background:#1a2a45;color:white}.form-stack{display:grid;gap:12px}.form-stack label{display:grid;gap:6px;color:#aebed5;font-size:11px}.form-stack input,.form-stack select{width:100%;border:1px solid #2a3a57;border-radius:8px;background:#080e19;color:white;padding:10px;outline:none}.form-stack input:focus,.form-stack select:focus{border-color:var(--blue)}.form-error{margin-top:12px;padding:9px;border:1px solid #6e2f3c;border-radius:8px;background:#321720;color:#ffabb6;font-size:11px}.email-code-actions{display:grid;gap:8px}.portal-card{width:min(100%,820px)}.portal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;border-bottom:1px solid var(--line);margin-bottom:18px;padding-bottom:14px}.portal-head h1{margin:3px 0}.portal-head p{margin-bottom:0}.portal-grid{display:grid;grid-template-columns:280px 1fr;gap:16px}.portal-section{border:1px solid var(--line);border-radius:11px;background:#0a111f;padding:14px}.portal-section h2{margin-bottom:12px}.course-list{display:grid;gap:10px}.course-card{border:1px solid #243653;border-radius:9px;padding:12px;background:#101b2d}.course-title{display:flex;justify-content:space-between;gap:8px;font-weight:750;font-size:13px}.course-title>span:first-child{min-width:0}.course-title>span:first-child>small{display:block;margin-top:3px;color:var(--muted);font-size:10px;font-weight:600;line-height:1.4}.join-code{font:11px ui-monospace,monospace;color:var(--amber)}.assignment-list{display:grid;gap:7px;margin-top:9px}.assignment-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:7px;border-top:1px solid #1f2d44;font-size:11px}.empty-state{padding:20px;text-align:center;color:var(--muted);font-size:12px}.portal-footer{display:flex;justify-content:flex-end;border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.text-button.danger{color:var(--red)}.integrity-note.verified{border-color:#245d4b;background:#102c24;color:#8bcfb6}.integrity-note.verified span{color:var(--green)}.integrity-note.pending{border-color:#3c5275;background:#132039;color:#95abd0}.integrity-note.error{border-color:#6e2f3c;background:#321720;color:#ffabb6}
@media(max-width:760px){.portal-grid{grid-template-columns:1fr}.gate{padding:10px}.gate-card{max-height:calc(100vh - 20px);padding:17px}.topbar .pill{display:none}}
.roster{margin-top:10px;border-top:1px solid #1f2d44;padding-top:8px}.roster summary{cursor:pointer;color:#9fb2cc;font-size:11px}.roster-list{display:grid;gap:8px;margin-top:7px}.roster-list>div{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:10px}.roster-list code{color:var(--amber)}.reset-password-result{flex-basis:100%;display:flex;align-items:center;flex-wrap:wrap;gap:8px;border:1px solid #8b6a27;border-radius:8px;background:#211b0e;padding:9px}.reset-password-result>span{flex:1 1 240px}.reset-password-result .reset-password-value{font-size:13px;user-select:all}
.session-list{margin-top:10px;border-top:1px solid #1f2d44;padding-top:8px}.session-list summary{cursor:pointer;color:#9fb2cc;font-size:11px}.session-rows,.server-log-list{display:grid;gap:8px;margin-top:8px}.session-row{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #23344f;border-radius:7px;padding:8px;font-size:10px}.session-row code{color:var(--amber)}.log-review-head{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--muted);font-size:11px}.server-log-item{border:1px solid #263955;border-radius:9px;background:#0a1322;padding:11px}.server-log-item.flag{border-color:#6a5121;background:#241d10}.server-log-item>div{display:flex;justify-content:space-between;gap:10px}.server-log-item time{color:var(--muted);font-size:9px}.server-log-item p{margin:6px 0;color:#afbed3;font-size:10px}.receipt-state{color:#6fcfa7;font-size:9px}
.server-log-item.invalid{border-color:#7d3542;background:#2b151b}.server-log-item.invalid .receipt-state{color:#ff9fad}
.temporary-password-warning{display:grid;grid-template-columns:minmax(220px,1fr) minmax(260px,1fr);gap:14px;margin-bottom:16px;border:1px solid #8b5d19;border-radius:11px;background:#2d210d;padding:14px;color:#f5d597}.temporary-password-warning strong{color:#ffd06d}.temporary-password-warning p{margin:5px 0 0;font-size:10px;line-height:1.5}.password-change-form{display:grid;grid-template-columns:1fr 1fr;gap:8px}.password-change-form input{min-width:0;border:1px solid #6d5124;border-radius:8px;background:#151006;color:white;padding:9px}.password-change-form .button{grid-column:1/-1}.button.warning{border-color:#a8721f;background:#805313;color:#fff1cc}@media(max-width:760px){.temporary-password-warning{grid-template-columns:1fr}.password-change-form{grid-template-columns:1fr}}
.mode-control select:disabled{opacity:1;cursor:not-allowed;border-color:#355078;background:#14233a}.assignment-row>span:first-child{display:grid;gap:3px}.assignment-row small{display:block;color:var(--muted);font-size:9px;line-height:1.35}.policy-badge{flex:0 0 auto;border:1px solid #355078;border-radius:999px;background:#14233a;color:#a9c6f2;padding:3px 7px;font-size:9px;font-weight:800}.policy-badge.exam{border-color:#765a27;background:#302719;color:#f2d59a}.assignment-policy-help{margin:-4px 0 2px;line-height:1.45}
.assignment-policy-card{border-top:1px solid #1f2d44;padding-top:7px}.assignment-policy-card .assignment-row{border-top:0;padding-top:0}.assignment-policy-editor{margin-top:6px}.assignment-policy-editor summary{cursor:pointer;color:#86a9dc;font-size:9px}.assignment-policy-form{margin-top:8px;padding:9px;border:1px solid #243653;border-radius:8px;background:#0b1423}.assignment-policy-form .button{justify-self:start}

/* v3.5 — Teacher-readable process evidence and coding replay */
.portal-card{width:min(100%,1040px)}.evidence-warning{display:block;margin-top:4px;color:var(--amber);font-size:9px;font-style:normal;font-weight:750}.session-evidence-title{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:16px 0 10px;padding:14px;border:1px solid #2a3e5e;border-radius:11px;background:linear-gradient(135deg,#101d31,#0b1423)}.session-evidence-title h2{margin:3px 0 4px;font-size:18px}.session-evidence-title p{margin:0;color:var(--muted);font-size:11px}.review-badge{flex:0 0 auto;border:1px solid #765a27;border-radius:999px;background:#302719;color:#f2d59a;padding:6px 10px;font-size:10px;font-weight:800}.review-badge.clear{border-color:#245d4b;background:#102c24;color:#8fe0be}.evidence-summary{display:grid;grid-template-columns:repeat(6,minmax(90px,1fr));gap:8px;margin-bottom:14px}.evidence-summary>div{display:grid;gap:3px;border:1px solid #263955;border-radius:9px;background:#0a1322;padding:10px}.evidence-summary strong{color:#dce9ff;font-size:17px}.evidence-summary span{color:var(--muted);font-size:9px}.coding-replay,.activity-review{border:1px solid #263955;border-radius:11px;background:#09111f;padding:14px}.activity-review{margin-top:14px}.evidence-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.evidence-section-head h2{margin:3px 0 10px}.replay-actions{display:flex;gap:6px}.replay-range{width:100%;accent-color:var(--blue2);margin:5px 0 12px}.replay-frame-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:8px}.replay-frame-head>div{display:grid;gap:3px}.replay-frame-head strong{font-size:12px}.replay-frame-head span{color:var(--muted);font-size:9px}.replay-frame-head>span{flex:0 0 auto;border-radius:999px;background:#162740;color:#a9c9f7;padding:4px 8px}.replay-code{max-height:390px;overflow:auto;margin:0;border:1px solid #1f304b;border-radius:9px;background:#050912;padding:10px 0;color:#dce8fa;font:11px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre}.replay-code-line{display:grid;grid-template-columns:44px minmax(max-content,1fr);min-height:18px}.replay-code-line b{padding:0 10px;color:#526985;text-align:right;font-weight:500;user-select:none}.replay-code-line code{padding-right:12px;color:inherit;font:inherit}.replay-warning{margin-bottom:8px;border:1px solid #765a27;border-radius:7px;background:#302719;color:#f2d59a;padding:8px;font-size:10px}.activity-review .server-log-list{max-height:520px;overflow:auto;padding-right:4px}
@media(max-width:900px){.evidence-summary{grid-template-columns:repeat(3,1fr)}}@media(max-width:620px){.session-evidence-title,.evidence-section-head,.replay-frame-head{display:grid}.evidence-summary{grid-template-columns:repeat(2,1fr)}.review-badge{justify-self:start}.replay-actions{order:2}}

.teacher-week-release{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:9px 0;padding:9px;border:1px solid #263955;border-radius:8px;background:#0a1322}
@media(max-width:560px){.teacher-week-release{align-items:flex-start;flex-direction:column}}

/* v3.7 — Safe Jupyter Notebook exercise importer */
.form-stack textarea{width:100%;border:1px solid #2a3a57;border-radius:8px;background:#080e19;color:white;padding:10px;outline:none;resize:vertical;font:11px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace}.form-stack textarea:focus{border-color:var(--blue)}
.exercise-import-section,.exercise-library-section{grid-column:1/-1}.exercise-import-section{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(360px,1.3fr);gap:16px;align-items:start}.exercise-import-form{grid-template-columns:1fr 1fr 150px auto;align-items:end}.exercise-import-form label{min-width:0}.exercise-import-form input[type="file"]{padding:7px;font-size:10px}.notebook-file-field{display:grid;gap:4px}.notebook-help{margin:0;line-height:1.35}.import-safety-note{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:6px 14px;border:1px solid #245d4b;border-radius:8px;background:#102c24;color:#8bcfb6;padding:10px;font-size:10px}.import-safety-note strong{color:#b6f5d9}.exercise-library-head,.exercise-card-head,.exercise-source,.exercise-actions{display:flex;align-items:center;justify-content:space-between;gap:10px}.exercise-library-head>span{color:var(--muted);font-size:10px}.exercise-library{display:grid;gap:10px}.exercise-card{border:1px solid #263955;border-radius:10px;background:#0d1727;padding:12px}.exercise-card-head>div{display:grid;gap:3px}.exercise-card-head strong{font-size:13px}.exercise-card-head span,.exercise-source{color:var(--muted);font-size:9px}.exercise-status{flex:0 0 auto;border:1px solid #765a27;border-radius:999px;background:#302719!important;color:#f2d59a!important;padding:4px 8px;font-weight:800}.exercise-status.published{border-color:#245d4b;background:#102c24!important;color:#8fe0be!important}.exercise-source{justify-content:flex-start;flex-wrap:wrap;margin-top:7px}.exercise-analysis{margin:7px 0 0}.exercise-preview{margin-top:10px;border-top:1px solid #21324c;padding-top:8px}.exercise-preview summary{cursor:pointer;color:#9fc0ee;font-size:10px;font-weight:700}.exercise-preview form,.published-exercise{margin-top:10px}.exercise-field-row{display:grid;grid-template-columns:1fr 160px;gap:10px}.exercise-actions{justify-content:flex-start}.published-exercise h3{margin:10px 0 5px;font-size:11px}.published-exercise pre{max-height:260px;overflow:auto;border:1px solid #1f304b;border-radius:8px;background:#050912;padding:10px;color:#cbd9ec;font:10px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap}.published-exercise li{margin:5px 0;color:#b9c8dd;font-size:10px}
@media(max-width:900px){.exercise-import-section{grid-template-columns:1fr}.exercise-import-form{grid-template-columns:1fr 1fr}.exercise-import-form .button{align-self:end}}@media(max-width:620px){.exercise-import-form,.exercise-field-row{grid-template-columns:1fr}.exercise-card-head,.exercise-source{align-items:flex-start}.exercise-card-head{display:grid}.exercise-status{justify-self:start}}

/* Published exercises, server checks, and teacher review */
.exercise-version{margin:10px 0 0!important;color:#bad0ec!important;font-size:14px!important;line-height:1.5!important}
.check-status{margin:0 16px 12px;padding:11px 13px;border:1px solid #355078;border-radius:9px;background:#14233a;color:#d3e4fb;font-size:14px;line-height:1.5}
.check-status.pending{border-color:#765a27;background:#302719;color:#ffe1a1}.check-status.passed{border-color:#245d4b;background:#102c24;color:#b6f5d9}.check-status.failed{border-color:#6e2f3c;background:#321720;color:#ffd0d6}.check-status.stale{border-color:#8b5d19;background:#2d210d;color:#ffe0a0}
#checkError{margin:0 16px 12px;font-size:14px;line-height:1.5}
.understanding-panel{margin:0 16px 14px;padding:16px;border:1px solid #2c4668;border-radius:10px;background:#101c2e;order:0}.understanding-panel h2{font-size:17px}.understanding-panel p{font-size:14px;line-height:1.6}.understanding-panel label{font-size:14px}.understanding-panel textarea{font-size:14px;line-height:1.5}.understanding-panel button{min-height:44px;justify-self:start}.understanding-panel #understandingSaved{white-space:pre-wrap;font-size:14px;line-height:1.6;color:#b6f5d9}.understanding-panel #understandingError{font-size:14px;line-height:1.5}
.portal-message:not(:empty){margin:0 0 14px;padding:10px;border:1px solid #245d4b;border-radius:8px;background:#102c24;color:#b6f5d9;font-size:14px;line-height:1.5}.portal-message.error{border-color:#6e2f3c;background:#321720;color:#ffd0d6}
.exercise-assignment-panel{margin-bottom:16px}.exercise-assignment-panel form{grid-template-columns:repeat(2,minmax(0,1fr))}.exercise-assignment-panel .assignment-preview,.exercise-assignment-panel .exercise-actions{grid-column:1/-1}.exercise-assignment-panel .button{min-height:44px}
.authoring-fields{display:grid;gap:12px}.test-case-editor{border:1px solid #2a3a57;border-radius:8px;padding:12px}.test-case-editor h3{margin:0 0 6px}.test-case-rows{display:grid;gap:12px}.test-case-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;border:1px solid #263955;border-radius:8px;padding:10px;margin:10px 0}.test-case-row label{min-width:0}.test-case-row label:has(textarea){grid-column:span 3}.test-case-row .remove-test-case{justify-self:start}.exercise-actions .button{min-height:44px}
.teacher-evidence{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:0 0 14px}.teacher-evidence>div,.teacher-evidence>form{border:1px solid #263955;border-radius:9px;background:#0a1322;padding:14px}.teacher-evidence h2{font-size:15px}.teacher-evidence p,.teacher-evidence blockquote{font-size:14px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.teacher-evidence blockquote{margin:8px 0;padding-left:12px;border-left:3px solid var(--blue)}.teacher-evidence time{font-size:12px;color:var(--muted)}.teacher-review-form{grid-column:1/-1}.teacher-review-form label{font-size:14px}.teacher-review-form button{justify-self:start;min-height:44px}
:is(button,a,summary,select,textarea,input):focus-visible{outline:3px solid #ffd36f;outline-offset:3px}
@media(max-width:900px){.teacher-evidence{grid-template-columns:1fr}.teacher-review-form{grid-column:auto}.test-case-row{grid-template-columns:1fr 1fr}.test-case-row label:has(textarea){grid-column:span 2}}
@media(max-width:620px){.exercise-assignment-panel form,.test-case-row{grid-template-columns:1fr}.test-case-row label:has(textarea){grid-column:auto}.exercise-actions{flex-wrap:wrap}.understanding-panel button,.actions #check,.actions #run{width:100%;min-height:44px}}
.teacher-material-tools{margin-top:10px;border:1px solid #304667;border-radius:9px;background:#0a1424;padding:9px}.teacher-material-tools>summary{cursor:pointer;color:#a9c8fa;font-size:11px;font-weight:800}.teacher-material-note{margin:8px 0 7px;line-height:1.45}.teacher-material-actions{display:flex;flex-wrap:wrap;gap:7px}.teacher-material-actions .button{min-height:34px}.teacher-material-result{margin-top:10px;border-top:1px solid #243a5c;padding-top:10px}.teacher-material-result-head{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#d5e4fb;font-size:12px}.teacher-material-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:8px}.teacher-material-grid section{min-width:0}.teacher-material-grid h4{margin:0 0 5px;color:#9db5d9;font-size:10px}.teacher-material-grid pre{margin:0;max-height:260px;overflow:auto;border:1px solid #1f304b;border-radius:7px;background:#050912;padding:10px;color:#d5e2f4;font:10px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.teacher-material-result>.small{margin:8px 0 0;line-height:1.45}@media(max-width:760px){.teacher-material-grid{grid-template-columns:1fr}}

.input-dialog{position:fixed;inset:0;z-index:70;display:grid;place-items:center;padding:18px;background:rgba(3,7,14,.82);backdrop-filter:blur(8px)}.input-dialog-card{width:min(100%,420px);border:1px solid #355078;border-radius:14px;background:#0d1626;padding:20px;box-shadow:0 30px 90px rgba(0,0,0,.55)}.input-dialog-card h2{font-size:18px;margin-bottom:6px}.input-dialog-card p{font-size:13px;line-height:1.55;margin-bottom:16px}.input-dialog-actions{display:flex;justify-content:flex-end;gap:8px}.input-dialog-actions .button{min-height:42px}

/* WO-015 — read-only teacher curriculum preview */
.curriculum-preview-section{grid-column:1/-1}.curriculum-preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.curriculum-preview-head h2{margin:3px 0 5px}.curriculum-preview-head p{margin:0;line-height:1.5}.curriculum-preview-head .button{flex:0 0 auto}.curriculum-preview-note{margin:12px 0 0;padding:9px 10px;border:1px solid #355078;border-radius:8px;background:#111f34;color:#a9c4e9;font-size:10px;line-height:1.5}.curriculum-preview-note strong{color:#d8e8ff}.curriculum-preview-panel{margin-top:12px;border-top:1px solid #243653;padding-top:12px}.curriculum-preview-summary{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:9px;color:#dce8fa;font-size:12px}.curriculum-preview-summary span{color:var(--muted);font-size:10px}.curriculum-week-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.curriculum-week-card{border:1px solid #263955;border-radius:9px;background:#0d1727;padding:10px}.curriculum-week-head{display:flex;align-items:flex-start;gap:7px}.curriculum-week-head h3{margin:0;color:#dce8fa;font-size:12px;line-height:1.4}.curriculum-week-number{flex:0 0 auto;border-radius:999px;background:#162b4a;color:#a9c6f2;padding:3px 6px;font-size:9px;white-space:nowrap}.curriculum-week-overview{margin:7px 0;color:#a9b9cf;font-size:10px;line-height:1.45}.curriculum-objectives,.curriculum-activities{border-top:1px solid #20314b;margin-top:7px;padding-top:7px;color:#b9c9df;font-size:10px}.curriculum-objectives strong,.curriculum-activities>strong{display:block;color:#8faed8;font-size:9px;margin-bottom:4px}.curriculum-objectives ul{margin:0;padding-left:17px}.curriculum-objectives li{margin:2px 0;line-height:1.35}.curriculum-activity-row{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;margin:4px 0;padding:4px 0;border-bottom:1px dashed #1e304a;line-height:1.35}.curriculum-activity-row:last-child{border-bottom:0}.curriculum-activity-row>span:first-child{min-width:0}.curriculum-mode-badge{flex:0 0 auto;border:1px solid #355078;border-radius:999px;padding:2px 5px;color:#abc8f3;font-size:8px;white-space:nowrap}.curriculum-mode-badge.mode-assignment{border-color:#725b2a;background:#2b2417;color:#f1d69a}.curriculum-mode-badge.mode-exam{border-color:#7d3f4a;background:#311b21;color:#ffb5bf}.curriculum-mode-badge.mode-practice{border-color:#2e6c5a;background:#102c24;color:#9fe0c2}.curriculum-mode-badge.mode-lesson{border-color:#4c4f8d;background:#20213d;color:#c4c8ff}.curriculum-preview-error{margin:0;padding:9px;border:1px solid #6e2f3c;border-radius:8px;background:#321720;color:#ffd0d6;font-size:11px}
@media(max-width:900px){.curriculum-week-list{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.curriculum-preview-head{display:grid}.curriculum-preview-head .button{justify-self:start}.curriculum-week-list{grid-template-columns:1fr}}
.inline-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.inline-form select{max-width:100%;background:var(--surface3);color:var(--text);border:1px solid var(--line);border-radius:9px;padding:8px 10px}.course-track-form{margin:10px 0;padding:10px;border:1px solid #5b4825;border-radius:9px;background:#211d14}.course-track-form p{margin:0;line-height:1.45}
.student-guide{margin-top:16px;padding:18px;border:1px solid #35557d;border-radius:12px;background:#0a1728;color:#c5d6ee;box-shadow:inset 3px 0 #4d8dff}.student-guide-heading{display:flex;align-items:center;gap:8px;margin-bottom:14px;font-size:13px}.student-guide h2{margin:0 0 7px;color:#e1ecfb;font-size:14px;line-height:1.35}.guide-goal{padding:12px 13px;border-radius:9px;background:#102441}.guide-goal p{margin:0;color:#edf5ff;font-size:15px;line-height:1.65}.guide-section{margin-top:16px}.guide-section ul,.guide-section ol{margin:0;padding-left:21px;color:#c3d4eb;font-size:14px;line-height:1.65}.guide-section li+li{margin-top:5px}.guide-requirements li::marker{color:#78b6ff}.guide-constraints{padding:12px 13px;border:1px solid #5f4e28;border-radius:9px;background:#241d12}.guide-constraints h2{color:#ffd77b}.guide-checklist{padding:12px 13px;border:1px solid #276554;border-radius:9px;background:#102a24}.guide-checklist h2{color:#82e1b6}.student-example{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px;padding:13px;border-radius:9px;background:#07111e;border:1px solid #253c5c;font-size:13px}.student-example>h2,.student-example>small{grid-column:1/-1}.student-example>h2{margin-bottom:0;color:#9ec6ff}.student-example div{display:grid;gap:5px;min-width:0}.student-example span{color:#a9c6ee;font-size:11px;font-weight:800}.student-example pre{margin:0;min-height:48px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;padding:9px 10px;border-radius:7px;background:#040914;color:#e1edfd;font:12px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace}.student-example small{color:#aabbd1;line-height:1.5}.full-problem{margin-top:16px;border-top:1px solid #29415f;padding-top:12px}.full-problem summary{min-height:42px;display:flex;align-items:center;cursor:pointer;color:#a8caff;font-weight:800;list-style-position:inside}.full-problem summary:hover{color:#dceaff}.full-problem p{margin:10px 0 0;padding:14px;border:1px solid #263d5d;border-radius:9px;background:#081221;color:#c8d7eb;white-space:pre-line;overflow-wrap:anywhere;font-size:14px;line-height:1.7}@media(max-width:620px){.student-guide{padding:14px}.guide-goal p,.guide-section ul,.guide-section ol,.full-problem p{font-size:13px}.student-example{grid-template-columns:1fr}.student-example>h2,.student-example>small{grid-column:auto}}
.portal-message:not(:empty){white-space:pre-line}
.weekly-curriculum-week .week-time{display:block;margin:3px 0 8px;color:#9db6d7;font-size:10px}.lesson-reader{display:grid;gap:14px;color:#dbe8f8}.lesson-reader-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;border-bottom:1px solid #29415f;padding-bottom:13px}.lesson-reader-head h2{margin:5px 0 0;font-size:23px}.lesson-reader-section{border:1px solid #29415f;border-radius:11px;background:#0a1423;padding:16px}.lesson-reader-section h3{margin:0 0 9px;color:#b8d3f7;font-size:16px}.lesson-reader-section h4{margin:14px 0 7px;color:#b8d3f7;font-size:12px}.lesson-reader-section p,.lesson-reader-section li{font-size:13px;line-height:1.7}.lesson-reader-section p{margin:6px 0;overflow-wrap:anywhere}.lesson-reader-section ol{margin:0;padding-left:23px}.lesson-reader-section pre{margin:9px 0;overflow:auto;border:1px solid #263d5d;border-radius:8px;background:#050b15;padding:13px;color:#e2efff;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace}.lesson-prose{white-space:pre-line}.lesson-goal{border-color:#276554;background:#102a24}.lesson-next{border:1px solid #355078;border-radius:11px;background:#111f34;padding:16px}.lesson-next p{margin:0 0 12px;font-size:13px}.lesson-next .button{width:auto}@media(max-width:620px){.lesson-reader-head{display:grid}.lesson-reader-section{padding:13px}.lesson-reader-head h2{font-size:20px}.lesson-next .button{width:100%}}
.activity-lock{max-width:220px;color:#e2c987}.activity-done{flex:0 0 auto;color:#8fe0be;font-size:11px;font-weight:750}.lesson-next .activity-done{margin-bottom:8px}
.classroom-management{margin:12px 0;padding:0 12px 12px;border:1px solid #355078;border-radius:10px;background:#0b1627}.classroom-management>summary{cursor:pointer;padding:12px 0 8px;color:#c9ddfa;font-weight:800}.classroom-management .form-stack{margin:10px 0}.classroom-management .button{justify-self:start}.management-action{margin-top:10px;padding-top:10px;border-top:1px solid #223652}.management-action strong{display:block;color:#dce9fb;font-size:11px}.management-action p{margin:5px 0 8px;line-height:1.45}.danger-zone strong{color:#ffb9c3}.management-blocked{margin:6px 0 0!important;border:1px solid #765a27;border-radius:7px;background:#302719;color:#f2d59a;padding:8px;font-size:10px;line-height:1.45}
.teacher-curriculum-editor{grid-column:1/-1;margin-top:12px;border-top:1px solid #263955;padding-top:12px}.teacher-curriculum-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}.teacher-curriculum-head h3{margin:3px 0 4px}.teacher-curriculum-head p{margin:0}.teacher-curriculum-week{border:1px solid #263955;border-radius:8px;background:#0b1422;margin:6px 0}.teacher-curriculum-week summary{cursor:pointer;padding:8px 10px;color:#dce8fa;font-size:11px;font-weight:700}.teacher-curriculum-week summary span{float:right;color:var(--muted);font-size:9px;font-weight:400}.teacher-curriculum-activities{padding:0 8px 8px}.curriculum-activity-form{border-top:1px solid #1f304b;padding:9px 0}.curriculum-activity-form-head{display:flex;justify-content:space-between;gap:8px;align-items:center}.curriculum-status{border-radius:999px;padding:3px 7px;font-size:8px}.curriculum-status.published{background:#102c24;color:#8fe0be}.curriculum-status.draft{background:#302719;color:#f2d59a}.curriculum-activity-fields{display:grid;grid-template-columns:1.4fr .8fr .5fr 1.5fr;gap:8px;margin-top:7px}.curriculum-activity-fields label{font-size:9px}.curriculum-activity-fields input,.curriculum-activity-fields select{width:100%;margin-top:3px}.curriculum-lesson-note{align-self:end;margin:0}.curriculum-activity-actions{display:flex;gap:7px;margin-top:8px}.curriculum-activity-actions .danger{border-color:#713543;color:#ffb5bf}@media(max-width:900px){.curriculum-activity-fields{grid-template-columns:1fr 1fr}}@media(max-width:620px){.teacher-curriculum-head{display:grid}.curriculum-activity-fields{grid-template-columns:1fr}}
.exam-schedule-fields{margin:10px 0 0;border:1px solid #6d5124;border-radius:8px;background:#191713;padding:9px}.exam-schedule-fields legend{padding:0 5px;color:#ffd88a;font-size:10px;font-weight:800}.exam-schedule-fields p{margin:0 0 8px;line-height:1.45}.exam-schedule-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.exam-schedule-grid label{font-size:9px}.exam-schedule-grid input{width:100%;margin-top:3px}@media(max-width:620px){.exam-schedule-grid{grid-template-columns:1fr}}
.student-course-context{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:8px 0 14px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#0a1220}
.lesson-example-label{display:grid;gap:7px;margin:12px 0 8px;color:#b6c9e4;font-size:12px;font-weight:700}.lesson-example-code{width:100%;min-height:180px;resize:vertical;border:1px solid #2b4263;border-radius:9px;background:#070d17;color:#e8f1ff;padding:13px;font:12px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;tab-size:4;white-space:pre;overflow:auto}.lesson-example-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:9px 0}.lesson-example-actions .small{margin-left:auto}.lesson-example-output{min-height:65px;max-height:230px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere}.lesson-example-expected summary{cursor:pointer;color:#a9bfdc;font-size:11px}.lesson-example-expected pre{margin-top:8px}
.teacher-preview-banner{padding:11px 14px;border:1px solid #8a6729;border-left:4px solid #f0c44d;border-radius:9px;background:#2b2418;color:#f5d68c;font-size:12px;font-weight:700;line-height:1.6}

/* Teacher assignment gradebook */
.course-title-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:8px}
.gradebook-jump{white-space:nowrap}
.teacher-gradebook{margin:14px 0;padding:14px;border:1px solid #2d4262;border-radius:12px;background:#0b1422;scroll-margin-top:16px}
.teacher-gradebook-head{display:flex;align-items:end;justify-content:space-between;gap:14px;margin-bottom:10px}
.teacher-gradebook-head h3{margin:3px 0}.gradebook-empty{margin:0;border:1px dashed #355078;border-radius:9px;background:#101d31;padding:12px;color:#a9bdd8}
.gradebook-week,.gradebook-activity{margin:8px 0;border:1px solid #2b3f5e;border-radius:9px;background:#0e1a2b}
.gradebook-week>summary,.gradebook-activity>summary{display:flex;justify-content:space-between;gap:10px;padding:10px;cursor:pointer;font-weight:700}
.gradebook-week>summary span,.gradebook-activity>summary span{color:#9dafc9;font-size:11px;font-weight:500}
.gradebook-activity{margin:0 8px 8px}.gradebook-activity>summary{background:#101d31}
.gradebook-filter{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;color:#9dafc9;font-size:11px}
.gradebook-table-wrap{overflow:auto}.gradebook-table{width:100%;border-collapse:collapse;font-size:12px}
.gradebook-table th,.gradebook-table td{padding:8px 10px;border-top:1px solid #20314b;text-align:left;white-space:nowrap}
.gradebook-table th{color:#91a9ca;font-size:11px}.gradebook-table td:first-child{white-space:normal;min-width:140px}
.gradebook-table td:first-child strong,.gradebook-table td:first-child code{display:block}.gradebook-table td:first-child code{color:#efbf5a;font-size:10px}
.grade-status{display:inline-block;border-radius:999px;padding:4px 7px;background:#18243a;color:#b7c7df;font-size:10px}
.grade-status.awaiting_review{background:#302719;color:#f2d59a}.grade-status.graded{background:#102c24;color:#8fe0be}.grade-status.in_progress{background:#172640;color:#a9c6f2}
.teacher-grade-form{display:grid;grid-template-columns:1fr 1fr;gap:10px;border:1px solid #355078;border-radius:10px;background:#101d31;padding:14px}
.teacher-grade-form h2,.teacher-grade-form>p,.teacher-grade-form>.teacher-grade-total,.teacher-grade-form>button,.teacher-grade-form>small{grid-column:1/-1}
.teacher-grade-form h2{margin:0}.teacher-grade-form label{display:grid;gap:5px;font-size:12px}.teacher-grade-form label span{color:#9dafc9;font-size:11px}
.teacher-grade-form input{width:100%}.teacher-grade-total{border-top:1px solid #263955;padding-top:8px;color:#b9c9df}
.teacher-grade-total strong{color:#8fe0be;font-size:18px}.teacher-grade-form>button{justify-self:start;min-height:40px}
@media(max-width:760px){.teacher-gradebook-head{align-items:stretch;flex-direction:column}.gradebook-search{width:100%}.gradebook-table th,.gradebook-table td{padding:7px 6px}.teacher-grade-form{grid-template-columns:1fr}}
