:root{--navy:#1f2d52;--blue:#2e528a;--light-blue:#8faadc;--bg:#f4f6fb;--card:#fff;--border:#d9dfea;--muted:#6b7385;--danger:#c0392b}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:#1b1f2a;font-family:Segoe UI,system-ui,-apple-system,sans-serif;font-size:14px}.topbar{background:var(--navy);color:#fff;padding:14px 28px;display:flex;align-items:center;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:20;box-shadow:0 2px 8px rgba(0,0,0,.15)}.topbar h1{font-size:18px;margin:0;font-weight:600}.topbar .sub{font-size:12px;color:var(--light-blue)}.layout{max-width:980px;margin:24px auto;padding:0 20px 80px}.section{background:var(--card);border:1px solid var(--border);border-radius:10px;margin-bottom:18px;overflow:hidden}.section>header{padding:12px 18px;background:#eef2fa;border-bottom:1px solid var(--border);cursor:pointer;display:flex;justify-content:space-between;align-items:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.section>header h2{margin:0;font-size:15px;color:var(--navy)}.section>header .page-tag{font-size:11px;color:var(--muted);background:#fff;border:1px solid var(--border);border-radius:20px;padding:2px 10px}.section .body{padding:18px}.field{margin-bottom:14px}.field label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:5px;text-transform:uppercase;letter-spacing:.03em}.field input,.field select,.field textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;background:#fff}.field textarea{resize:vertical;min-height:64px}.checkbox-field{display:flex;align-items:flex-start;gap:10px;margin-top:4px;cursor:pointer;font-size:14px;color:#1b1f2a}.checkbox-field input[type=checkbox]{width:16px;height:16px;margin-top:2px;flex:none;cursor:pointer;accent-color:var(--navy)}.checkbox-hint{display:block;font-size:12px;color:var(--muted);margin-top:2px}.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(46,82,138,.12)}.grid2{grid-template-columns:1fr 1fr;grid-gap:0 16px}.grid2,.grid3{display:grid;gap:0 16px}.grid3{grid-template-columns:1fr 1fr 1fr;grid-gap:0 16px}.btn{border:1px solid var(--border);background:#fff;color:var(--navy);border-radius:6px;padding:7px 14px;font:inherit;font-weight:600;cursor:pointer}.btn:hover{background:#f0f3fa}.btn.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.btn.primary:hover{background:#16213f}.btn.primary:disabled{opacity:.6;cursor:not-allowed}.btn.small{padding:4px 9px;font-size:12px}.btn.danger{color:var(--danger);border-color:#e8c4be}.btn.danger:hover{background:#fbeceb}.row-card{border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:10px;background:#fafbfe}.row-card .row-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.row-card .row-head strong{color:var(--navy);font-size:13px}.list-add{margin-top:4px}.scheme-table{width:100%;border-collapse:collapse;font-size:12px}.scheme-table td,.scheme-table th{border:1px solid var(--border);padding:3px}.scheme-table th{background:#eef2fa;color:var(--navy);font-size:11px}.scheme-table input{width:100%;border:none;padding:4px;font:inherit;background:transparent}.scheme-table input:focus{outline:1px solid var(--blue);background:#fff}.scheme-table .narrow{width:38px}.scheme-table td.title-col{min-width:130px}.scheme-table .reorder-col{position:-webkit-sticky;position:sticky;left:0;z-index:2;width:30px;min-width:30px;padding:2px;background:#eef2fa;box-shadow:1px 0 0 var(--border)}.scheme-table td.reorder-col{background:#fff}.reorder-btns{display:flex;flex-direction:column;gap:2px;align-items:center}.reorder-btns button{width:20px;height:16px;line-height:1;font-size:9px;padding:0;border:1px solid var(--border);border-radius:4px;background:#f4f6fb;color:var(--navy);cursor:pointer}.reorder-btns button:hover:not(:disabled){background:#dfe6f4}.reorder-btns button:disabled{opacity:.3;cursor:default}.group-block{border:1px solid var(--border);border-radius:8px;margin-bottom:16px}.group-block .group-head{background:#eef2fa;padding:8px 12px;display:flex;gap:12px;align-items:center;border-bottom:1px solid var(--border)}.group-block .group-head input{max-width:160px}.group-block .group-body{padding:10px;overflow-x:auto}.group-totals{display:flex;gap:12px;padding:8px 12px;align-items:center;flex-wrap:wrap}.group-totals .field{margin:0}.group-totals .field input{max-width:90px}.help{font-size:12px;color:var(--muted);margin:-6px 0 12px}.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--navy);color:#fff;padding:10px 18px;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.25);z-index:50}.toast.error{background:var(--danger)}.inline{display:flex;gap:10px;align-items:center}.spacer{flex:1 1}.muted{color:var(--muted)}.grid4{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:0 12px;gap:0 12px}.tabs{display:flex;background:hsla(0,0%,100%,.12);border-radius:8px;padding:3px}.tab{border:none;background:transparent;color:#cdd7ec;font:inherit;font-weight:600;padding:6px 14px;border-radius:6px;cursor:pointer}.tab.active{background:#fff;color:var(--navy)}.course-layout{display:grid;grid-template-columns:240px 1fr;grid-gap:16px;gap:16px;align-items:start}.course-list{position:-webkit-sticky;position:sticky;top:78px;background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden;max-height:calc(100vh - 110px);overflow-y:auto}.course-list-head{padding:8px 10px 8px 12px;background:#eef2fa;font-size:13px;display:flex;align-items:center;justify-content:space-between;gap:8px}.course-list-head,.course-year-head{font-weight:700;color:var(--navy);border-bottom:1px solid var(--border)}.course-year-head{padding:6px 12px;background:#e3e9f6;font-size:11px;letter-spacing:.04em;text-transform:uppercase}.course-item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:none;border-bottom:1px solid var(--border);background:#fff;padding:9px 12px;cursor:pointer;font:inherit}.course-item:hover{background:#f5f8ff}.course-item.active{background:#e8eefb}.course-item-text{display:flex;flex-direction:column;line-height:1.25;overflow:hidden}.course-item-text strong{font-size:13px;color:var(--navy)}.course-item-text .muted{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}.status-dot{width:9px;height:9px;border-radius:50%;flex:0 0 auto}.status-dot.ok{background:#1e7e34}.status-dot.no{background:#d9a400}.status-dot.excluded{background:#b0b6c3}.course-excluded,.course-lock{margin-left:auto;flex:0 0 auto;font-size:12px;line-height:1}.course-excluded{color:#8a90a0}.course-excluded+.course-lock{margin-left:6px}.course-main{min-width:0}.course-toolbar{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:12px 16px;margin-bottom:14px}.checklist{margin-top:6px;font-size:12px}.checklist.ok{color:#1e7e34;font-weight:600}.checklist.no{color:#c0392b;font-weight:600}.checklist.excluded{color:var(--muted);font-weight:600}.chip{display:inline-block;background:#fdecec;border:1px solid #f0b4b4;color:#c0392b;border-radius:12px;padding:1px 8px;margin:2px 4px 0 0;font-size:11px;font-weight:600}.mini-table{width:100%;border-collapse:collapse;font-size:12px}.mini-table td,.mini-table th{border:1px solid var(--border);padding:2px;vertical-align:top}.mini-table th{background:#eef2fa;color:var(--navy);font-size:11px;padding:4px}.mini-table input,.mini-table textarea{width:100%;border:none;padding:4px;font:inherit;background:transparent;resize:vertical}.mini-table input:focus,.mini-table textarea:focus{outline:1px solid var(--blue);background:#fff}.eval-total-row{display:flex;justify-content:flex-end;align-items:center;gap:18px;margin-top:6px;padding:7px 12px;background:#eef2fa;border:1px solid var(--border);border-radius:6px;font-size:13px;color:var(--navy)}.eval-total-field{display:flex;align-items:center;gap:6px;font-weight:600}.eval-total-field input{width:64px;padding:4px 6px;border:1px solid var(--border);border-radius:5px;font:inherit;text-align:center;background:#fff;font-weight:700}.eval-total-field input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 2px rgba(46,82,138,.15)}.landing{min-height:100vh;display:grid;place-items:center;padding:24px}.landing-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:32px;max-width:780px;width:100%;box-shadow:0 8px 30px rgba(0,0,0,.08)}.landing-card h1{margin:0;color:var(--navy);font-size:22px}.landing-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px;margin-top:20px}.landing-option{display:flex;flex-direction:column;align-items:flex-start;gap:6px;text-align:left;border:1px solid var(--border);border-radius:12px;padding:20px;background:#fafbfe;cursor:pointer;font:inherit}.landing-option:hover:not(.load){background:#f0f4fc;border-color:var(--blue)}.landing-option.load{cursor:default}.landing-option strong{color:var(--navy);font-size:15px}.lo-icon{font-size:26px;color:var(--blue);line-height:1}.landing-input{width:100%;padding:9px 10px;border:1px solid var(--border);border-radius:6px;font:inherit;margin-top:6px}.landing-error{color:var(--danger);font-size:12px;margin-top:6px}@media (max-width:620px){.landing-grid{grid-template-columns:1fr}}.modal-backdrop{position:fixed;inset:0;background:rgba(20,28,50,.55);display:grid;place-items:center;z-index:100}.modal{background:#fff;border-radius:12px;padding:24px;max-width:520px;width:90%;box-shadow:0 12px 40px rgba(0,0,0,.3)}.modal h2{margin:0 0 8px;color:var(--navy);font-size:18px}.modal .warn{background:#fff4e0;border:1px solid #f0d8a8;color:#8a5a00;padding:10px 12px;border-radius:8px;font-size:13px}.uuid-box{display:flex;gap:8px;align-items:center;margin:14px 0}.uuid-box code{flex:1 1;background:#f4f6fb;border:1px solid var(--border);border-radius:6px;padding:10px;font-size:13px;word-break:break-all}.lock-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#fff4e0;border:1px solid #f0d8a8;color:#8a5a00;border-radius:8px;padding:10px 14px;margin-bottom:12px;font-size:13px;font-weight:600}.locked-pane{opacity:.6;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.uuid-chip{background:hsla(0,0%,100%,.18);padding:1px 6px;border-radius:4px}.btn.toggle-on{background:#1e7e34;color:#fff;border-color:#1e7e34}.btn.toggle-on:hover{background:#19682b}.import-modal{max-width:580px}.import-list{max-height:52vh;overflow-y:auto;border:1px solid var(--border);border-radius:8px;margin-top:10px}.import-item{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;text-align:left;border:none;border-bottom:1px solid var(--border);background:#fff;padding:9px 12px;cursor:pointer;font:inherit}.import-item:hover{background:#f5f8ff}.import-item:last-child{border-bottom:none}.import-item:disabled{opacity:.6;cursor:default}.import-item-text{display:flex;flex-direction:column;line-height:1.25}.import-item-text strong{color:var(--navy);font-size:13px}.import-item-text .muted{font-size:11px}.admin-login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:#f4f6fb}.admin-login-card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:28px;width:320px;display:flex;flex-direction:column;gap:12px;box-shadow:0 10px 30px rgba(0,0,0,.08)}.admin-login-card h1{margin:0;color:var(--navy)}.admin-login-card input{padding:10px;border:1px solid var(--border);border-radius:8px;font:inherit}.admin-err{color:#c0392b;font-size:13px}.admin{max-width:1100px;margin:0 auto;padding:24px 20px 60px}.admin-head{display:flex;align-items:center;justify-content:space-between}.admin-head h1{color:var(--navy);margin:0}.admin-flash{background:#e8f5e9;border:1px solid #b6dbb9;color:#1e7e34;padding:8px 12px;border-radius:8px;margin:12px 0}.admin-stats{display:flex;align-items:center;gap:16px;margin:18px 0}.admin-stats .stat{background:#fff;border:1px solid var(--border);border-radius:10px;padding:12px 18px;min-width:90px;text-align:center;color:#555;font-size:12px}.admin-stats .stat span{display:block;font-size:24px;font-weight:700;color:var(--navy)}.admin-section{margin-top:26px}.admin-section h2{color:var(--navy);font-size:16px}.admin-table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:10px}.admin-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff}.admin-table td,.admin-table th{padding:8px 12px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}.admin-table th{background:#eef2fa;color:var(--navy)}.admin-table code{font-size:11px;color:#444}.admin-actions{display:flex;gap:6px}.btn.small.admin-unlock{color:#8a5a00;border-color:#f0d8a8;background:#fff4e0}.admin-modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:60;padding:20px}.admin-modal{background:#fff;border-radius:12px;width:min(820px,100%);max-height:86vh;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.3)}.admin-modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border)}.admin-modal-head strong{color:var(--navy);font-size:13px;word-break:break-all}.admin-json{margin:0;padding:16px 18px;overflow:auto;font-size:12px;line-height:1.45;background:#0f1530;color:#d6e2ff;border-radius:0 0 12px 12px}.mapping-grid th{padding:2px 4px}.po-head{display:flex;align-items:center;gap:2px}.po-head-input{width:46px;text-align:center;border:1px solid transparent;background:transparent;font:inherit;font-weight:600;color:var(--navy);border-radius:4px;padding:2px}.po-head-input:hover{border-color:var(--border);background:#fff}.po-head-input:focus{outline:none;border-color:var(--blue);background:#fff}.po-del{border:none;background:none;color:#b9b9c2;cursor:pointer;font-size:11px;line-height:1;padding:0 2px;border-radius:3px}.po-del:hover{color:var(--danger);background:#fbeceb}