:root{color-scheme:light;--bg: #f5f6fa;--surface: #ffffff;--surface-muted: #eef1f6;--ink: #172033;--muted: #667085;--line: #d9dee7;--purple: #6544b8;--purple-dark: #4f3590;--green: #17895b;--blue: #2563eb;--orange: #c46a13;--red: #b42318;--shadow: 0 18px 50px rgba(23, 32, 51, .09);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:16px;line-height:1.5;font-weight:400;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}.app-layout{display:grid;grid-template-columns:260px minmax(0,1fr);min-height:100vh}.sidebar{background:#fff;border-right:1px solid var(--line);padding:24px 18px}.brand-block{display:flex;align-items:center;gap:12px;min-height:48px;margin-bottom:28px}.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:8px;background:var(--purple);color:#fff;font-weight:800}.brand-block strong,.brand-block span{display:block}.brand-block span{color:var(--muted);font-size:.9rem}nav{display:grid;gap:8px}.nav-button{display:flex;align-items:center;gap:10px;width:100%;border:0;border-radius:8px;padding:11px 12px;color:var(--muted);background:transparent;text-align:left}.nav-button:hover,.nav-button.active{color:var(--purple-dark);background:#f0ecfb}.content-area{min-width:0}.page-shell{width:min(1240px,100%);margin:0 auto;padding:32px}.top-band{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.eyebrow{margin:0 0 4px;color:var(--purple-dark);font-size:.82rem;font-weight:700;text-transform:uppercase}h1,h2,p{margin-top:0}h1{margin-bottom:0;font-size:2rem;line-height:1.15}h2{margin-bottom:8px;font-size:1.2rem}.status-pill{display:inline-flex;align-items:center;min-height:34px;padding:6px 12px;border-radius:999px;background:#fff6e8;color:var(--orange);font-weight:700}.metrics-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:24px}.metric{display:grid;grid-template-columns:42px minmax(0,1fr);gap:12px;align-items:center;min-height:104px;padding:18px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.metric-icon{display:grid;place-items:center;width:42px;height:42px;border-radius:8px;color:#fff}.metric-purple .metric-icon{background:var(--purple)}.metric-green .metric-icon{background:var(--green)}.metric-blue .metric-icon{background:var(--blue)}.metric-orange .metric-icon{background:var(--orange)}.metric p{margin-bottom:2px;color:var(--muted);font-size:.9rem}.metric strong{font-size:1.55rem}.work-band{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(280px,.6fr);gap:22px;align-items:start;padding:24px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.status-list{display:grid;gap:10px;margin:14px 0 0}.status-list div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;padding-bottom:10px;border-bottom:1px solid var(--line)}.status-list dt{color:var(--muted)}.status-list dd{margin:0;font-weight:700}.action-grid{display:grid;gap:10px}.primary-button,.secondary-button,.ghost-button,.icon-button{min-height:40px;border-radius:8px;border:1px solid transparent;font-weight:700}.primary-button{padding:0 16px;background:var(--purple);color:#fff}.primary-button:hover:not(:disabled){background:var(--purple-dark)}.secondary-button,.ghost-button{padding:0 14px;background:#fff;color:var(--ink);border-color:var(--line)}.secondary-button:hover:not(:disabled),.ghost-button:hover:not(:disabled),.icon-button:hover:not(:disabled){background:var(--surface-muted)}.icon-button{display:inline-grid;place-items:center;width:40px;padding:0;background:#fff;color:var(--ink);border-color:var(--line)}.icon-button.danger{color:var(--red)}.danger-button{color:var(--red);border-color:#f1b5ae}.danger-button:hover:not(:disabled){background:#fff4f2}.icon-text-button{display:inline-flex;align-items:center;justify-content:center;gap:8px}.toolbar{display:flex;align-items:center;gap:10px}.alert{padding:12px 14px;margin-bottom:16px;border-radius:8px;border:1px solid var(--line);background:#fff;font-weight:700}.alert.error{color:var(--red);border-color:#f1b5ae;background:#fff4f2}.alert.success{display:flex;align-items:center;gap:8px;color:var(--green);border-color:#b8dec9;background:#f0fbf5}.period-stack{display:grid;gap:24px}.period-section{display:grid;gap:12px}.period-title-row{display:flex;align-items:end;justify-content:space-between;gap:16px}.period-title-row h2{margin-bottom:0}.period-title-row p{margin-bottom:0;color:var(--muted)}.table-frame{overflow-x:auto;border:1px solid var(--line);border-radius:8px;background:var(--surface)}table{width:100%;min-width:760px;border-collapse:collapse}th,td{padding:12px 14px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}th{color:var(--muted);font-size:.82rem;font-weight:800;text-transform:uppercase}tbody tr:last-child td{border-bottom:0}.inactive-row{color:var(--muted);background:#fafafa}.number-input{width:96px;min-height:38px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:#fff}.switch-label{display:inline-flex;align-items:center;gap:8px;min-height:38px;color:var(--muted);font-weight:700}.switch-label input{width:18px;height:18px;accent-color:var(--purple)}.row-actions{display:flex;justify-content:flex-end;gap:8px;min-width:92px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;display:grid;place-items:center;padding:20px;background:#17203359}.modal{width:min(560px,100%);border-radius:8px;background:#fff;box-shadow:var(--shadow)}.modal-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 20px;border-bottom:1px solid var(--line)}.modal-header h2{margin-bottom:0}.form-grid{display:grid;gap:16px;padding:20px}.form-grid label{display:grid;gap:6px;color:var(--muted);font-weight:700}.form-grid input,.form-grid select{min-height:42px;width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:#fff}.modal-actions{display:flex;justify-content:flex-end;gap:10px;padding-top:6px}.import-band{margin-bottom:24px}.file-drop{display:grid;place-items:center;gap:10px;min-height:156px;border:1px dashed #aeb7c7;border-radius:8px;background:#fafbfe;color:var(--muted);font-weight:700}.file-drop input{max-width:260px}.compact-select,.profile-input{min-height:40px;border:1px solid var(--line);border-radius:8px;padding:7px 10px;background:#fff}.profile-input{width:min(280px,100%)}.mapping-grid{display:grid;grid-template-columns:repeat(4,minmax(180px,1fr));gap:12px;padding:18px;border:1px solid var(--line);border-radius:8px;background:#fff}.mapping-grid label,.simulation-grid label,.filter-bar label{display:grid;gap:6px;color:var(--muted);font-weight:700}.mapping-grid select,.simulation-grid select,.simulation-grid input,.filter-bar select{min-height:40px;border:1px solid var(--line);border-radius:8px;padding:7px 10px;background:#fff;color:var(--ink)}.simple-stat{min-height:92px;padding:16px;border:1px solid var(--line);border-radius:8px;background:#fff}.simple-stat span{display:block;color:var(--muted);font-weight:700}.simple-stat strong{display:block;margin-top:4px;font-size:1.7rem}.issue-chip,.badge,.result-badge{display:inline-flex;align-items:center;min-height:26px;margin:2px 4px 2px 0;padding:3px 8px;border-radius:999px;font-size:.82rem;font-weight:800}.issue-chip.error,.badge-error{color:var(--red);background:#ffe9e6}.issue-chip.warning,.badge-warning{color:var(--orange);background:#fff0d8}.badge-good{color:var(--green);background:#dff3e8}.badge-muted{color:var(--muted);background:#edf0f5}.demand-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.demand-card{padding:16px;border:1px solid var(--line);border-radius:8px;background:#fff}.demand-card-header{display:flex;align-items:start;justify-content:space-between;gap:12px}.demand-card h3{margin:0;font-size:1rem}.demand-card p{margin:8px 0 12px;color:var(--muted)}.demand-card dl,.fairness-grid{display:grid;gap:8px;margin:0}.demand-card dl div{display:flex;justify-content:space-between;gap:12px}.demand-card dt{color:var(--muted)}.demand-card dd{margin:0;font-weight:800}.loading-line{margin:16px 0 0;color:var(--purple-dark);font-weight:800}.simulation-grid{display:grid;grid-template-columns:minmax(240px,1fr) 140px;gap:12px}.summary-band{display:grid;gap:16px;margin:24px 0;padding:20px;border:1px solid var(--line);border-radius:8px;background:#fff}.summary-header{display:flex;align-items:center;justify-content:space-between;gap:16px}.summary-header h2{margin-bottom:0}.result-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.result-metric{min-height:104px;padding:14px;border-radius:8px;border:1px solid var(--line);background:#fff}.result-metric span,.result-metric small{display:block;color:var(--muted);font-weight:700}.result-metric strong{display:block;font-size:1.7rem}.result-good{border-color:#b8dec9}.result-info{border-color:#bfd0ff}.result-warning{border-color:#f1cc9d}.result-error{border-color:#f1b5ae}.fairness-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.fairness-grid span{padding:10px 12px;border-radius:8px;background:#f7f8fb;color:var(--muted);font-weight:700}.segmented-control{display:inline-grid;grid-template-columns:repeat(2,minmax(140px,1fr));gap:4px;margin-bottom:18px;padding:4px;border:1px solid var(--line);border-radius:8px;background:#fff}.segmented-control button{min-height:36px;border:0;border-radius:6px;background:transparent;color:var(--muted);font-weight:800}.segmented-control button.active{background:#f0ecfb;color:var(--purple-dark)}.results-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,380px);gap:18px;align-items:start}.clickable-row{cursor:pointer}.clickable-row:hover{background:#f7f8fb}.result-badge.good{color:var(--green);background:#dff3e8}.result-badge.info{color:var(--blue);background:#e1ecff}.result-badge.warning,.result-badge.manual{color:var(--orange);background:#fff0d8}.detail-panel{position:sticky;top:24px;padding:18px;border:1px solid var(--line);border-radius:8px;background:#fff}.detail-period{padding:14px 0;border-top:1px solid var(--line)}.detail-period h3{margin:0 0 8px;font-size:1rem}.detail-period p{margin-bottom:8px}.preference-ranking{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 18px;margin:10px 0 14px;padding-left:24px;color:var(--muted);font-size:.9rem}.preference-ranking .excluded-rank{color:var(--red);font-weight:700}.assignment-edit-row{display:grid;grid-template-columns:minmax(0,1fr) 40px 40px;gap:8px}.assignment-edit-row select{min-width:0;border:1px solid var(--line);border-radius:8px;padding:7px 10px;background:#fff}.filter-bar{display:grid;grid-template-columns:repeat(3,minmax(180px,1fr));gap:12px;margin-bottom:18px;padding:16px;border:1px solid var(--line);border-radius:8px;background:#fff}.attention-list{display:grid;gap:12px}.attention-item{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:16px;padding:16px;border:1px solid var(--line);border-radius:8px;background:#fff}.attention-item h2{margin-bottom:4px;font-size:1.05rem}.attention-item p{margin-bottom:6px}.empty-state{padding:24px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--muted);font-weight:700}.registration-page{width:min(1080px,100%)}.registration-schedule{display:grid;grid-template-columns:minmax(210px,.7fr) minmax(360px,1.3fr) auto;align-items:end;gap:18px;margin-bottom:18px;padding:18px 20px;border:1px solid var(--line);border-radius:8px;background:#fff}.registration-schedule-title{display:flex;align-items:center;gap:12px}.registration-schedule-title h2{margin:0 0 5px;font-size:1.05rem}.schedule-status{font-size:.84rem;font-weight:800}.schedule-open{color:var(--green)}.schedule-upcoming{color:var(--blue)}.schedule-closed{color:var(--red)}.registration-schedule-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.registration-schedule-fields label{display:grid;gap:6px;color:var(--muted);font-weight:700}.registration-schedule-fields input{min-width:0;min-height:40px;padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}.registration-schedule-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px}.saved-indicator{color:var(--green);font-size:.88rem;font-weight:800}.registration-deadline,.registration-closed{display:flex;align-items:center;gap:12px;margin-bottom:18px;padding:15px 18px;border:1px solid #bfd0ff;border-radius:8px;background:#f1f5ff;color:var(--blue);font-weight:700}.registration-closed{align-items:flex-start;border-color:var(--line);background:#fff;color:var(--muted)}.registration-closed h2,.registration-closed p{margin:0}.registration-closed h2{margin-bottom:5px;color:var(--ink);font-size:1.12rem}.registration-form{overflow:hidden;border:1px solid var(--line);border-radius:8px;background:#fff}.registration-identity{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;padding:22px;background:#f7f8fb;border-bottom:1px solid var(--line)}.registration-identity label,.choice-label{display:grid;gap:6px;color:var(--muted);font-weight:700}.registration-identity input,.choice-label select{width:100%;min-height:44px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:#fff}.registration-periods{padding:0 22px}.registration-period{display:grid;grid-template-columns:190px minmax(0,1fr);gap:24px;padding:22px 0;border-bottom:1px solid var(--line)}.registration-period-heading{display:flex;align-items:center;gap:12px}.registration-period-heading>span{display:grid;place-items:center;width:42px;height:42px;flex:0 0 42px;border-radius:8px;background:var(--purple);color:#fff;font-size:1.15rem;font-weight:800}.registration-period-heading h2,.registration-period-heading p{margin:0}.registration-period-heading p{color:var(--muted);font-size:.9rem}.registration-ranking-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.choice-label-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.choice-label-row small{color:var(--muted);font-weight:700}.choice-label.excluded>span{color:var(--red)}.registration-actions{display:flex;justify-content:flex-end;padding:20px 22px}.registration-success{display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:16px;padding:24px;border:1px solid #b8dec9;border-radius:8px;background:#f0fbf5;color:var(--green)}.registration-success h2,.registration-success p{margin:0}.registration-success p{color:var(--muted)}.registration-public-shell{min-height:100vh;padding-top:22px;background:var(--bg)}.registration-public-header{display:flex;align-items:center;gap:12px;width:min(1080px,100%);margin:0 auto;padding:0 32px}.registration-public-header strong,.registration-public-header span{display:block}.registration-public-header span{color:var(--muted);font-size:.9rem}@media(max-width:920px){.app-layout{grid-template-columns:1fr}.sidebar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px}.brand-block{margin-bottom:0}nav{grid-auto-flow:column}.nav-button{width:auto}.page-shell{padding:22px 16px}.metrics-grid,.work-band,.demand-grid,.result-metrics,.fairness-grid,.results-layout,.filter-bar,.attention-item,.registration-schedule,.registration-period{grid-template-columns:1fr}.mapping-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.detail-panel{position:static}}@media(max-width:640px){.top-band,.toolbar,.period-title-row,.modal-actions{align-items:stretch;flex-direction:column}.toolbar,.modal-actions,.primary-button,.secondary-button,.ghost-button{width:100%}.sidebar{align-items:stretch;flex-direction:column}nav{grid-auto-flow:row;grid-template-columns:1fr 1fr}.nav-button{justify-content:center}.brand-mark{width:40px;height:40px}h1{font-size:1.65rem}.status-list div{grid-template-columns:1fr;gap:2px}.mapping-grid,.simulation-grid,.segmented-control,.registration-identity,.registration-schedule-fields,.registration-ranking-grid,.registration-success,.preference-ranking{grid-template-columns:1fr}.registration-public-header{padding:0 16px}.registration-schedule-actions{align-items:stretch;flex-direction:column}}.pupil-login{max-width:620px;margin:30px auto}.pupil-login label{display:grid;gap:8px}.pupil-login input{width:100%;min-height:44px;padding:10px}.pupil-session{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center;padding:12px 24px;background:#fff}.roster-totals{display:flex;flex-wrap:wrap;gap:24px;padding:20px;margin-bottom:20px;background:#fff;border-radius:12px}.roster-import{margin:20px 0;padding:16px;background:#fff;border-radius:12px}.table-wrap{overflow-x:auto}
