:root{color:#172033;font-synthesis:none;text-rendering:optimizelegibility;--navy:#1b365d;--navy-2:#274b78;--blue-50:#e8eef5;--blue-25:#f4f7fb;--ink:#172033;--muted:#667085;--line:#dbe3ed;--white:#fff;--green:#18794e;--green-bg:#eaf7f0;--amber:#9a6700;--amber-bg:#fff5d9;--red:#b42318;--red-bg:#fef0ee;--shadow:0 14px 34px #1b365d14;background:#f3f6fa;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{background:#f3f6fa;min-width:320px;min-height:100vh;margin:0}button,input,textarea,select{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:var(--navy-2)}h1,h2,h3,p{margin-top:0}code{font-family:SFMono-Regular,Consolas,monospace;font-size:.9em}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.screen-only{display:initial}.app-frame{min-height:100vh}.topbar{background:var(--white);border-bottom:1px solid var(--line);z-index:30;align-items:center;gap:42px;height:72px;padding:0 clamp(24px,4vw,64px);display:flex;position:sticky;top:0}.brand{color:var(--ink);align-items:center;gap:10px;text-decoration:none;display:inline-flex}.brand-mark{flex:0 0 38px;width:38px;height:38px;display:block}.brand>span:last-child{flex-direction:column;line-height:1.05;display:flex}.brand small{color:var(--muted);letter-spacing:.05em;text-transform:uppercase;margin-top:4px;font-size:11px}.brand.large .brand-mark{flex-basis:48px;width:48px;height:48px}.topbar nav{align-self:stretch;margin-left:auto;display:flex}.topbar nav a{color:var(--muted);border-bottom:2px solid #0000;align-items:center;padding:0 8px;text-decoration:none;display:flex}.topbar nav a.active{color:var(--navy);border-color:var(--navy);font-weight:650}.app-content{min-height:calc(100vh - 72px)}.button{cursor:pointer;border:1px solid #0000;border-radius:9px;justify-content:center;align-items:center;gap:8px;min-height:42px;padding:9px 16px;font-weight:650;text-decoration:none;transition:all .15s;display:inline-flex}.button:hover:not(:disabled){transform:translateY(-1px)}.button:disabled{opacity:.48;cursor:not-allowed}.button.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.button.secondary{color:var(--navy);background:#fff;border-color:#b8c6d8}.button.dark{color:#fff;background:#172033}.button.danger{color:var(--red);background:#fff;border-color:#e1a7a1}.button.small{border-radius:7px;min-height:34px;padding:6px 11px;font-size:13px}.button.full{width:100%;margin-top:10px}.text-button{color:var(--navy-2);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:4px;text-decoration:underline}.text-button.centered{align-self:center}.page-shell{width:min(1440px,100% - 48px);margin:0 auto;padding:42px 0 72px}.page-heading{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:30px;display:flex}.page-heading h1{letter-spacing:-.035em;color:var(--navy);margin-bottom:8px;font-size:clamp(30px,3vw,42px)}.page-heading p{color:var(--muted);margin-bottom:0}.eyebrow{color:var(--navy-2);text-transform:uppercase;letter-spacing:.12em;margin-bottom:8px;font-size:12px;font-weight:750}.muted{color:var(--muted)}.cycle-status{background:var(--blue-50);color:var(--navy);text-transform:capitalize;border-radius:999px;padding:8px 12px;font-size:13px;font-weight:700}.cycle-status.open{background:var(--green-bg);color:var(--green)}.cycle-status.closed{color:#586174;background:#edf0f4}.filter-bar{border:1px solid var(--line);background:#fff;border-radius:12px;gap:16px;margin-bottom:20px;padding:16px;display:flex}.filter-bar label{color:var(--muted);align-items:center;gap:8px;font-size:13px;font-weight:650;display:flex}select,input,textarea{color:var(--ink);background:#fff;border:1px solid #bcc8d8;border-radius:8px}select,input{min-height:42px;padding:8px 11px}textarea{resize:vertical;width:100%;padding:12px;line-height:1.55}input:focus,textarea:focus,select:focus{border-color:var(--navy-2);outline:3px solid #274b7826}input:disabled,textarea:disabled,select:disabled{color:#586174;background:#f1f3f6}.summary-grid{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:38px;display:grid}.summary-card{background:var(--navy);color:#fff;min-height:116px;box-shadow:var(--shadow);border-radius:14px;flex-direction:column;justify-content:space-between;padding:21px;display:flex}.summary-card span{opacity:.8;font-size:13px}.summary-card strong{font-size:34px;line-height:1}.summary-card.muted{color:var(--ink);background:#fff}.summary-card.amber{background:var(--amber-bg);color:#704b00}.summary-card.green{background:var(--green-bg);color:var(--green)}.section-heading{justify-content:space-between;align-items:flex-end;margin-bottom:16px;display:flex}.section-heading h2{color:var(--navy);margin:0}.class-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;display:grid}.class-card{border:1px solid var(--line);background:#fff;border-radius:15px;padding:22px;box-shadow:0 4px 16px #1b365d0a}.class-card-top{color:var(--muted);justify-content:space-between;align-items:center;font-size:13px;display:flex}.level-chip{background:var(--blue-50);color:var(--navy);border-radius:999px;padding:5px 9px;font-weight:700}.class-card h3{min-height:52px;margin:18px 0;font-size:19px;line-height:1.35}.progress-label{color:var(--muted);justify-content:space-between;font-size:13px;display:flex}.progress-label strong{color:var(--navy)}.progress-track{background:#e5eaf0;border-radius:999px;height:8px;overflow:hidden}.progress-track>span{background:var(--navy-2);border-radius:inherit;height:100%;display:block}.class-card .progress-track{margin:8px 0 12px}.status-tally{color:var(--muted);gap:14px;font-size:12px;display:flex}.card-actions{gap:8px;margin-top:22px;display:flex}.card-actions .button{flex:1}.breadcrumb{color:var(--muted);align-items:center;gap:8px;font-size:13px;display:flex}.breadcrumb a{color:var(--navy-2)}.page-shell>.breadcrumb{margin-bottom:20px}.progress-banner{color:#fff;background:var(--navy);border-radius:13px;grid-template-columns:auto 1fr;align-items:center;gap:20px;margin-bottom:20px;padding:18px 22px;display:grid}.progress-banner>div:first-child{align-items:baseline;gap:6px;display:flex}.progress-banner strong{font-size:26px}.progress-banner span{opacity:.8;font-size:13px}.progress-banner .progress-track{background:#fff3}.progress-banner .progress-track span{background:#fff}.table-card{border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;border-radius:14px;overflow:hidden}.table-toolbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-end;gap:20px;min-height:82px;padding:16px 20px;display:flex}.table-toolbar>span{color:var(--muted);font-size:13px}.search-field{width:min(440px,100%);color:var(--muted);flex-direction:column;gap:6px;font-size:12px;font-weight:700;display:flex}.responsive-table{overflow-x:auto}table{border-collapse:collapse;width:100%}.responsive-table th,.responsive-table td{text-align:left;white-space:nowrap;border-bottom:1px solid #e7ebf0;padding:14px 16px}.responsive-table thead th{background:var(--blue-25);color:#586174;letter-spacing:.06em;text-transform:uppercase;font-size:11px}.responsive-table tbody tr:hover{background:#fbfcfe}.secondary-name{color:var(--muted);margin-top:3px;font-size:12px;display:block}.row-actions{justify-content:flex-end;gap:6px;display:flex}.status-badge{color:#596274;text-transform:capitalize;white-space:nowrap;background:#edf0f4;border-radius:999px;padding:5px 9px;font-size:11px;font-weight:750;display:inline-flex}.status-badge.draft{background:var(--amber-bg);color:var(--amber)}.status-badge.completed{background:var(--green-bg);color:var(--green)}.status-badge.locked{background:var(--blue-50);color:var(--navy)}.status-badge.large{padding:8px 12px;font-size:13px}.auth-page{background:linear-gradient(135deg,#102b4f 0 48%,#eef3f8 48%);grid-template-columns:1fr minmax(340px,460px);align-items:center;gap:10vw;min-height:100vh;padding:7vh clamp(24px,8vw,120px);display:grid}.auth-page.single{background:#eef3f8;grid-template-columns:minmax(320px,480px);justify-content:center;display:grid}.auth-intro{color:#fff;max-width:600px}.auth-intro .brand{color:#fff;margin-bottom:70px}.auth-intro .brand-mark{color:var(--navy);background:#fff}.auth-intro .brand small,.auth-intro .eyebrow{color:#bfd0e6}.auth-intro h1{letter-spacing:-.05em;max-width:540px;margin-bottom:20px;font-size:clamp(42px,5vw,72px);line-height:1.03}.auth-intro>p:last-child{color:#d9e3ef;max-width:520px;font-size:18px;line-height:1.6}.auth-card{border:1px solid var(--line);background:#fff;border-radius:18px;width:100%;padding:clamp(28px,4vw,48px);box-shadow:0 28px 70px #0518302e}.auth-card h1,.auth-card h2{color:var(--navy);letter-spacing:-.03em;font-size:32px}.stack-form{flex-direction:column;gap:16px;margin-top:26px;display:flex}.stack-form label{color:#344054;flex-direction:column;gap:7px;font-size:13px;font-weight:700;display:flex}.centered-state,.page-state,.empty-state{text-align:center;align-content:center;place-items:center;min-height:50vh;padding:40px;display:grid}.state-card{border:1px solid var(--line);max-width:620px;box-shadow:var(--shadow);background:#fff;border-radius:16px;padding:36px}.page-state{color:var(--muted)}.spinner{border:3px solid var(--line);border-top-color:var(--navy);border-radius:50%;width:28px;height:28px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.error-banner,.success-banner,.notice-banner{border-radius:8px;padding:11px 14px;line-height:1.45}.error-banner{background:var(--red-bg);color:var(--red);border:1px solid #f5c7c2}.success-banner{background:var(--green-bg);color:var(--green);border:1px solid #c5e7d5}.notice-banner{background:var(--blue-50);color:var(--navy);border:1px solid #cad6e5}.editor-page{width:min(1540px,100% - 48px);margin:0 auto;padding:22px 0 60px}.editor-toolbar{justify-content:space-between;align-items:center;gap:20px;min-height:42px;margin-bottom:18px;display:flex}.save-indicator{color:var(--muted);align-items:center;gap:8px;font-size:13px;display:flex}.save-indicator>span{background:var(--green);border-radius:50%;width:8px;height:8px}.save-indicator.dirty>span{background:var(--amber)}.save-indicator.saving>span{background:var(--navy-2);animation:1s infinite pulse}.save-indicator.failed{color:var(--red)}.save-indicator.failed>span{background:var(--red)}@keyframes pulse{50%{opacity:.3}}.recovery-banner{background:var(--amber-bg);border:1px solid #ead395;border-radius:10px;align-items:center;gap:8px;margin-bottom:16px;padding:13px 16px;display:flex}.recovery-banner>div{flex-direction:column;margin-right:auto;display:flex}.recovery-banner span{color:#704b00;margin-top:2px;font-size:13px}.editor-identity{border:1px solid var(--line);background:#fff;border-radius:13px;justify-content:space-between;align-items:center;gap:20px;margin-bottom:16px;padding:24px 28px;display:flex}.editor-identity h1{color:var(--navy);margin-bottom:6px;font-size:30px}.editor-identity h1 span{color:var(--muted);margin-left:8px;font-size:.65em;font-weight:500}.editor-identity p{color:var(--muted);margin-bottom:0}.editor-layout{grid-template-columns:minmax(0,1fr) 280px;align-items:start;gap:18px;margin-top:16px;display:grid}.editor-main{flex-direction:column;gap:16px;display:flex}.editor-section{border:1px solid var(--line);background:#fff;border-radius:13px;overflow:hidden}.editor-section>h2{background:var(--navy);color:#fff;text-transform:uppercase;letter-spacing:.045em;align-items:center;gap:10px;margin:0;padding:13px 18px;font-size:15px;display:flex}.editor-section>h2 span{width:24px;height:24px;color:var(--navy);background:#fff;border-radius:50%;place-items:center;font-size:12px;display:grid}.editor-section>:not(h2){margin-left:18px;margin-right:18px}.info-grid,.scope-grid{border:1px solid var(--line);border-radius:8px;grid-template-columns:repeat(3,1fr);margin-top:18px;margin-bottom:18px;display:grid;overflow:hidden}.info-grid div,.scope-grid div{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-width:0;padding:11px 13px}.info-grid div:nth-child(3n),.scope-grid div:nth-child(3n){border-right:0}.info-grid div:nth-last-child(-n+3),.scope-grid div{border-bottom:0}dt{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:700}dd{margin:4px 0 0;font-weight:600}.question-format{background:var(--blue-25);color:#42516a;border-radius:8px;margin-top:0;margin-bottom:18px;padding:11px 13px}fieldset{min-width:0}.prompt-options{border:0;margin-top:18px;margin-bottom:18px;padding:0}.prompt-options legend{color:var(--navy);margin-bottom:10px;font-weight:750}.prompt-card{border:1px solid var(--line);cursor:pointer;border-radius:9px;align-items:flex-start;gap:10px;margin-bottom:8px;padding:13px;display:flex}.prompt-card:has(input:checked){border-color:var(--navy-2);background:var(--blue-25);box-shadow:0 0 0 2px #274b781a}.prompt-card input{min-height:auto;margin-top:3px}.prompt-card span{flex-direction:column;gap:4px;line-height:1.45;display:flex}.rubric-editor{margin-top:18px;margin-bottom:18px}.rubric-item{border:1px solid var(--line);border-radius:10px;margin-bottom:13px;padding:15px}.rubric-item legend{width:100%;color:var(--navy);justify-content:space-between;padding:0 4px;font-weight:750;display:flex}.rubric-item legend small{color:var(--muted);font-weight:500}.rubric-item>p{color:#526076;font-size:13px;line-height:1.45}.score-options{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;display:grid}.score-options label{cursor:pointer}.score-options input{opacity:0;pointer-events:none;position:absolute}.score-options label>span{background:#fff;border:1px solid #c8d2df;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;min-height:62px;display:flex}.score-options label>span strong{color:var(--navy);font-size:18px}.score-options label>span small{color:var(--muted);font-size:11px}.score-options input:checked+span{background:var(--navy);border-color:var(--navy);color:#fff;box-shadow:0 0 0 3px #274b7821}.score-options input:checked+span strong,.score-options input:checked+span small{color:#fff}.score-options input:focus-visible+span{outline:3px solid #274b7833}.comment-guide{background:var(--blue-25);border-radius:8px;margin-top:18px;margin-bottom:14px;padding:12px 14px;display:block;overflow:hidden}.comment-guide summary{color:var(--navy);cursor:pointer;align-items:center;gap:8px;font-weight:700;list-style:none;display:flex}.comment-guide summary::-webkit-details-marker{display:none}.comment-guide summary:before{content:"›";font-size:20px;line-height:1;transition:transform .15s;display:inline-block;transform:rotate(0)}.comment-guide[open] summary:before{transform:rotate(90deg)}.comment-guide p{white-space:pre-line;color:#526076;font-size:13px;line-height:1.55}.comment-field{border-top:1px solid var(--line);grid-template-columns:minmax(220px,.35fr) 1fr;gap:16px;padding:16px 0;display:grid;position:relative}.comment-field textarea{min-width:0}.comment-field>span{flex-direction:column;gap:6px;display:flex}.comment-field>span strong{color:var(--navy)}.comment-field>span small{color:var(--muted);line-height:1.45}.comment-field>span em{color:#6d7890;font-size:12px;line-height:1.4}.character-count{color:var(--muted);background:#fff;padding:2px 4px;position:absolute;bottom:20px;right:8px}.score-sidebar{border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;border-radius:13px;padding:21px;position:sticky;top:92px}.score-total{color:var(--navy);align-items:baseline;gap:6px;display:flex}.score-total strong{letter-spacing:-.05em;font-size:52px;line-height:1}.score-total span{color:var(--muted)}.achievement{border-top:1px solid var(--line);border-bottom:1px solid var(--line);justify-content:space-between;margin:14px 0 8px;padding:12px 0;font-size:13px;display:flex}.score-sidebar>p:not(.eyebrow){color:var(--muted);font-size:12px}.validation-list{background:var(--red-bg);color:var(--red);border-radius:8px;padding:10px 10px 10px 28px;font-size:12px;line-height:1.5}.student-navigation{justify-content:space-between;align-items:center;gap:18px;max-width:680px;margin:22px auto 0;display:flex}.student-navigation>span{color:var(--muted);font-size:13px}.print-view{background:#dfe5ec;min-height:100vh;padding:28px}.print-controls{width:min(1100px,100%);box-shadow:var(--shadow);background:#fff;border-radius:12px;justify-content:space-between;align-items:center;gap:20px;margin:0 auto 24px;padding:16px 20px;display:flex}.print-controls h1{color:var(--navy);margin:5px 0 2px;font-size:22px}.print-controls p{color:var(--muted);margin:0;font-size:13px}.print-stage{flex-direction:column;align-items:center;gap:24px;display:flex}.preflight{background:#fff;border-radius:12px;grid-template-columns:repeat(4,1fr) 2fr;gap:12px;width:min(1100px,100%);margin:0 auto 24px;padding:16px;display:grid}.preflight>div{border-right:1px solid var(--line);flex-direction:column;padding:8px 12px;display:flex}.preflight strong{color:var(--navy);font-size:24px}.preflight span{color:var(--muted);font-size:12px}.draft-toggle{align-items:center;gap:8px;font-size:13px;display:flex}.draft-toggle input{min-height:auto}@media (width<=1100px){.class-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.editor-layout{grid-template-columns:1fr}.score-sidebar{position:static}.comment-field{grid-template-columns:1fr}.info-grid{grid-template-columns:repeat(2,1fr)}.info-grid div:nth-child(3n){border-right:1px solid var(--line)}.info-grid div:nth-child(2n){border-right:0}.preflight{grid-template-columns:repeat(4,1fr)}.draft-toggle{grid-column:1/-1}}@media (width<=760px){.topbar{gap:16px;padding:0 16px}.topbar nav{display:none}.page-shell,.editor-page{width:min(100% - 24px,100%);padding-top:24px}.summary-grid{grid-template-columns:repeat(2,1fr)}.class-grid{grid-template-columns:1fr}.page-heading,.editor-identity{flex-direction:column;align-items:flex-start}.filter-bar{flex-direction:column;align-items:stretch}.filter-bar label{justify-content:space-between}.auth-page{background:#eef3f8;padding:28px 18px;display:block}.auth-intro{display:none}.auth-card{max-width:480px;margin:5vh auto}.info-grid,.scope-grid{grid-template-columns:1fr}.info-grid div,.scope-grid div{border-right:0;border-bottom:1px solid var(--line)}.info-grid div:last-child,.scope-grid div:last-child{border-bottom:0}.score-options{grid-template-columns:repeat(3,1fr)}.student-navigation .button{padding:8px;font-size:12px}.preflight{grid-template-columns:repeat(2,1fr)}.print-view{padding:12px}}.print-report{--report-navy:#1b365d;--report-blue:#e8eef5;--report-ink:#2f231d;width:210mm;min-height:297mm;color:var(--report-ink);background:#fff;padding:14mm 14mm 12mm;font-family:Arial,Noto Sans KR,sans-serif;font-size:9.4pt;line-height:1.28;position:relative;overflow:hidden;box-shadow:0 12px 34px #0f1d302e}.report-header{text-align:center;padding-bottom:4mm}.report-header h1{color:var(--report-navy);letter-spacing:.01em;margin:0;font-size:17pt}.report-header p{color:#695547;margin:1.5mm 0 0;font-size:10.5pt}.report-section{break-inside:avoid;margin-bottom:3.4mm}.report-section>h2{background:var(--report-navy);color:#fff;letter-spacing:.025em;margin:0;padding:2.2mm 3mm;font-size:9.5pt}.print-report table{table-layout:fixed}.print-report th,.print-report td{text-align:left;vertical-align:middle;overflow-wrap:anywhere;border:.3mm solid #9eacbb;padding:2mm 2.2mm}.print-report th{background:var(--report-blue);color:var(--report-navy);font-weight:700}.report-info-table th{width:16%}.report-info-table td{width:34%}.report-scope-table th:first-child{width:17%}.report-scope-table th:nth-child(2){width:33%}.report-format{border:.3mm solid #9eacbb;border-top:0;margin:0;padding:2mm 2.4mm}.selected-prompt{border:.3mm solid #9eacbb;border-top:0;grid-template-columns:20mm 1fr;gap:2mm;padding:2.2mm 2.5mm;display:grid}.selected-prompt strong{color:var(--report-navy)}.report-rubric-table thead th:first-child{width:26%}.report-rubric-table thead th:nth-child(2){text-align:center;width:9%}.report-rubric-table thead th:nth-child(3){text-align:center;width:10%}.report-rubric-table td:nth-child(2),.report-rubric-table .student-score{text-align:center}.report-rubric-table td:last-child{font-size:8.4pt}.report-rubric-table td small{color:#695547;margin-top:1mm;font-size:7.7pt;display:block}.report-rubric-table tfoot th,.report-rubric-table tfoot td{background:var(--report-blue);color:var(--report-navy);font-weight:700}.report-rubric-table.hepta th,.report-rubric-table.hepta td{padding-top:1.1mm;padding-bottom:1.1mm}.report-rubric-table.hepta td:last-child{font-size:7.4pt}.report-comments{border:.3mm solid #9eacbb;border-top:0}.report-comments>section{break-inside:avoid;border-bottom:.3mm solid #c2cad3;min-height:15mm;padding:2.2mm 2.6mm}.report-comments>section:last-child{border-bottom:0}.report-comments h3{color:var(--report-navy);margin:0 0 1mm;font-size:9pt}.report-comments p{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;line-height:1.35}.report-signature{color:#695547;justify-content:flex-end;align-items:baseline;gap:4mm;margin-top:3mm;display:flex}.report-signature strong{min-width:52mm;color:var(--report-navy);text-align:center;border-bottom:.3mm solid #695547;padding-bottom:1.5mm}.draft-watermark{z-index:2;color:#a01f161a;letter-spacing:.08em;pointer-events:none;font-size:74pt;font-weight:800;position:absolute;inset:42% auto auto 50%;transform:translate(-50%,-50%)rotate(-28deg)}@media print{@page{size:A4 portrait;margin:0}html,body,#root{background:#fff;width:210mm;margin:0;padding:0}.screen-only,.topbar,.print-controls,.preflight{display:none!important}.app-content,.print-view,.print-stage,.batch-stage{background:#fff;min-height:0;margin:0;padding:0;display:block}.print-report{width:210mm;height:297mm;min-height:297mm;box-shadow:none;break-after:page;page-break-after:always;-webkit-print-color-adjust:exact;print-color-adjust:exact;margin:0}.print-report:last-child{break-after:auto;page-break-after:auto}.print-report tr,.print-report h2,.report-comments>section{break-inside:avoid;page-break-inside:avoid}}
