:root{--navy:#0d2e49;--blue:#1b5f8d;--sky:#eaf4fa;--gold:#f2b84b;--ink:#192b38;--muted:#687884;--line:#dbe4ea;--paper:#fff;--bg:#f4f7f9;--success:#197552;--warn:#b86400;--danger:#b64040}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:16px}.app-shell{min-height:100vh;display:flex}.sidebar{width:250px;background:var(--navy);color:#e6f0f5;padding:28px 18px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{font-size:1.4rem;font-weight:750;display:flex;gap:9px;align-items:center;padding:0 10px 34px}.brand-mark{width:30px;height:30px;display:grid;place-items:center;background:var(--gold);color:var(--navy);font-weight:900;border-radius:8px}.brand-accent{color:var(--gold)}nav{display:grid;gap:6px}.nav-item{color:#bcd0df;text-decoration:none;padding:12px;border-radius:8px;display:flex;gap:12px;align-items:center}.nav-item:hover,.nav-item.active{background:#1b4565;color:#fff}.nav-item.active{box-shadow:inset 3px 0 var(--gold)}.sidebar-foot{margin-top:auto;padding:16px 11px;border-top:1px solid #31546e;font-size:.8rem;color:#c3d5e1;line-height:1.7}.sidebar-foot strong{display:block;color:#fff}.term-label{color:#8fb0c6}.status-dot{width:7px;height:7px;display:inline-block;border-radius:50%;background:#5ed09c;margin-right:5px}.main-content{max-width:1600px;width:100%;padding:32px 42px 48px}.topbar{display:flex;justify-content:space-between;gap:18px;align-items:flex-start}.eyebrow{text-transform:uppercase;letter-spacing:.1em;color:var(--blue);font-size:.72rem;font-weight:800;margin:0 0 4px}.topbar h1{font-size:1.7rem;margin:0;font-weight:750;letter-spacing:-.025em}.section-pill{font-size:.76rem;vertical-align:middle;padding:4px 8px;background:#d8e9f4;border-radius:6px;color:#235777;margin-left:6px;letter-spacing:0}.user-menu{display:flex;gap:10px;align-items:center;font-size:.85rem}.user-menu small{display:block;color:var(--muted);margin-top:2px}.avatar{background:#d2e6f2;color:#174b6f;font-weight:800;width:36px;height:36px;border-radius:50%;display:grid;place-items:center}.class-summary{margin:26px 0;display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);background:#fff;border-radius:10px}.class-summary>div{padding:14px 19px;border-right:1px solid var(--line)}.class-summary>div:last-child{border:0}.class-summary span{display:block;font-weight:700;font-size:.94rem}.class-summary small{color:var(--muted);font-size:.78rem}.workspace-head{display:flex;justify-content:space-between;align-items:center;gap:18px;margin:10px 0 16px}.workspace-head h2{margin:0;font-size:1.2rem}.workspace-head p{margin:5px 0 0;color:var(--muted);font-size:.88rem}.actions{display:flex;gap:9px;flex-wrap:wrap}.button{border:0;border-radius:7px;padding:10px 13px;font:inherit;font-weight:700;font-size:.85rem;cursor:pointer}.button.primary{background:var(--blue);color:#fff}.button.primary:hover{background:#124d77}.button.secondary{background:#fff;color:var(--navy);border:1px solid var(--line)}.button.outline{border:1px solid var(--blue);color:var(--blue);background:#fff}.metric-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:16px 0}.metric-row article{border:1px solid var(--line);background:#fff;padding:15px 17px;border-radius:9px}.metric-row span,.metric-row small{display:block;color:var(--muted);font-size:.78rem}.metric-row strong{display:block;font-size:1.2rem;margin:6px 0 2px}.gradebook-card,.attendance-card,.cpl-card{background:#fff;border:1px solid var(--line);border-radius:10px}.table-toolbar{padding:14px 16px;display:flex;justify-content:space-between;align-items:center;gap:15px;border-bottom:1px solid var(--line)}.search{height:36px;border:1px solid var(--line);border-radius:7px;display:flex;align-items:center;gap:7px;padding:0 10px;color:var(--muted);min-width:280px}.search input{border:0;outline:0;font:inherit;width:100%;font-size:.86rem}.save-status{font-size:.78rem;color:var(--success)}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:.83rem;min-width:970px}th{background:#f5f8fa;text-align:center;color:#465966;padding:10px 7px;border-bottom:1px solid var(--line);font-weight:750}th small{font-weight:500;color:#71808a}th.group-head{background:#edf5f9;color:#235777}td{padding:8px 7px;border-bottom:1px solid #edf1f3;text-align:center}tbody tr:hover{background:#fafcfd}.student-col{text-align:left;min-width:210px}td.student{text-align:left;font-weight:600}.score-input{width:57px;border:1px solid transparent;background:#f4f7f8;padding:7px 4px;border-radius:5px;text-align:center;font:inherit}.score-input:focus{outline:2px solid #a9d0e5;background:#fff}.nas{font-weight:800}.letter{font-weight:850}.letter-a{color:#1b744f}.letter-b{color:#226290}.letter-c{color:#aa6200}.grade-status{font-size:.72rem;padding:4px 7px;border-radius:99px;font-weight:750;background:#e7f5ed;color:var(--success)}.grade-status.attention{background:#fff3e0;color:var(--warn)}.bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:16px}.attendance-card,.cpl-card{padding:18px}.card-title{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}.card-title h3{margin:0;font-size:1rem}.link-button{border:0;background:transparent;color:var(--blue);font-weight:700;cursor:pointer}.attendance-progress{display:flex;align-items:center;gap:18px;margin-top:14px;font-size:.87rem}.attendance-progress p{margin:4px 0}.progress-ring{width:76px;height:76px;border-radius:50%;background:conic-gradient(var(--success) 0 92%,#e5ecee 92%);display:grid;place-content:center;text-align:center;position:relative}.progress-ring:after{content:"";position:absolute;inset:7px;background:#fff;border-radius:50%}.progress-ring strong,.progress-ring span{z-index:1}.progress-ring strong{font-size:.95rem}.progress-ring span{font-size:.58rem;color:var(--muted)}.muted,.cpl-card>p{color:var(--muted)}.cpl-card>p{font-size:.87rem;line-height:1.5}.warning-chip{font-size:.72rem;background:#fff2df;color:var(--warn);padding:5px 8px;border-radius:999px;font-weight:700}dialog{border:0;padding:0;border-radius:12px;box-shadow:0 18px 48px #10233355;max-width:490px}dialog::backdrop{background:#10233366}.dialog-content{padding:26px;position:relative}.dialog-content h2{margin:0 0 16px}.dialog-content p{line-height:1.55;color:var(--muted);font-size:.9rem}.dialog-close{position:absolute;right:14px;top:10px;border:0;background:transparent;font-size:1.6rem;cursor:pointer}.formula-box{background:var(--sky);color:var(--navy);padding:14px;border-radius:7px;line-height:1.5;font-weight:650;font-size:.9rem;margin:13px 0}#toast{position:fixed;right:24px;bottom:24px;opacity:0;transform:translateY(12px);transition:.2s;background:#153c58;color:#fff;padding:12px 15px;border-radius:8px;font-size:.88rem;pointer-events:none}#toast.show{opacity:1;transform:none}@media(max-width:1020px){.sidebar{width:208px}.main-content{padding:26px}.metric-row{grid-template-columns:repeat(2,1fr)}.class-summary{grid-template-columns:repeat(2,1fr)}.class-summary>div:nth-child(2){border-right:0}.class-summary>div:nth-child(-n+2){border-bottom:1px solid var(--line)}}@media(max-width:720px){.sidebar{display:none}.main-content{padding:20px 14px}.topbar{align-items:flex-start}.user-menu{display:none}.class-summary,.metric-row,.bottom-grid{grid-template-columns:1fr}.class-summary>div{border-right:0;border-bottom:1px solid var(--line)}.workspace-head{align-items:flex-start;flex-direction:column}.search{min-width:0;width:100%}.table-toolbar{align-items:stretch;flex-direction:column}.save-status{font-size:.72rem}}.mapping-dialog{width:min(860px,calc(100vw - 28px))}.mapping-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:8px;margin:16px 0}.mapping-table{min-width:630px;font-size:.82rem}.mapping-table th,.mapping-table td{text-align:left}.mapping-table select{border:1px solid var(--line);border-radius:5px;background:#fff;padding:7px;width:100%;font:inherit;color:var(--ink)}.map-state{font-size:.72rem;font-weight:700;color:var(--warn)}.map-state.complete{color:var(--success)}.cpl-result{padding:13px 14px;border-radius:8px;background:#f5f8fa;display:flex;flex-direction:column;gap:4px;font-size:.86rem}.cpl-result span{color:var(--muted)}.cpl-result.ready{background:#eaf7f0}.cpl-result.ready strong{color:var(--success)}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
