@font-face{font-family:Manrope;src:url('assets/fonts/Manrope.ttf') format('truetype');font-weight:200 800;font-display:swap}
:root{--canvas:#f4f7f6;--surface:#fff;--surface2:#f7f9f8;--ink:#193735;--ink2:#47615d;--muted:#82938e;--border:#e4ebe7;--accent:#287f6d;--accent2:#d2f49b;--soft:#eaf4ef;--amber:#ba8140;--amber-bg:#fff3df;--red:#c46f69;--red-bg:#faeae7;--blue:#6387b8;--shadow:0 16px 40px #183b3212;--sidebar:#163b36;--radius:18px}
*{box-sizing:border-box}body{margin:0;background:var(--canvas);color:var(--ink);font:13px/1.5 Manrope,'Segoe UI',sans-serif}button,input,select{font:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:wait;opacity:.55}button{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #91cbb7;outline-offset:3px}svg{display:block;flex-shrink:0}button{border:0;background:none}button svg{pointer-events:none}.app{height:100vh;display:grid;grid-template-columns:224px minmax(0,1fr);overflow:hidden}.sidebar{background:var(--sidebar);color:#e5eee7;padding:30px 17px 18px;display:flex;flex-direction:column;z-index:15}.brand{display:flex;align-items:center;gap:11px;padding:0 12px 29px}.brand-icon{width:37px;height:37px;border-radius:11px;background:var(--accent2);display:grid;place-items:center;color:var(--sidebar)}.brand-name{font-size:16px;font-weight:750;line-height:1.3;letter-spacing:-.5px}.brand-name small{display:block;font-size:10px;letter-spacing:1.65px;color:#95b2a7;font-weight:600;margin-top:4px}.workspace-label{font-size:9px;font-weight:700;letter-spacing:1.5px;color:#819f93;padding:16px 14px 12px}.nav-item{height:45px;width:100%;display:flex;align-items:center;gap:12px;border-radius:10px;text-align:left;padding:0 14px;color:#adc3b7;font-weight:550;font-size:12px;transition:background .18s,color .18s;margin-bottom:5px}.nav-item:hover{background:#ffffff0b;color:#f4f8f1}.nav-item.active{background:var(--accent2);color:#213d2d;font-weight:750}.nav-item.active svg{stroke-width:1.9}.nav-count{margin-left:auto;font-size:10px;padding:2px 6px;background:#ffffff10;border-radius:5px;color:#b6ccbc}.nav-item.active .nav-count{background:#163b3615;color:var(--sidebar)}.sidebar-bottom{margin-top:auto}.local-card{border:1px solid #54786866;border-radius:12px;margin:18px 5px 20px;padding:14px 13px;background:#ffffff04}.local-card-top{display:flex;gap:9px;align-items:center;font-size:11px;color:#e2ecdc;font-weight:650}.local-card p{color:#88a99b;font-size:10px;line-height:1.6;margin:9px 0 0 23px}.status-dot{width:6px;height:6px;background:#b7e58b;border-radius:50%;box-shadow:0 0 0 3px #b7e58b15;display:inline-block;flex-shrink:0}.profile{padding:14px 9px 0;border-top:1px solid #ffffff13;display:flex;align-items:center;gap:10px}.profile-avatar{width:31px;height:31px;display:grid;place-items:center;background:#ffffff10;border:1px solid #ffffff15;border-radius:50%;font-size:10px;color:#e0ebd7}.profile strong{font-size:11px;font-weight:600;display:block}.profile span{font-size:9px;color:#8baa9c}.profile button{margin-left:auto;padding:5px;color:#a2bbaa}.workspace{display:flex;flex-direction:column;min-width:0;overflow:hidden}.topbar{height:73px;flex-shrink:0;background:var(--surface);border-bottom:1px solid var(--border);padding:0 34px;display:flex;align-items:center;gap:22px}.breadcrumb{color:var(--muted);font-size:11px;display:flex;align-items:center;gap:10px;white-space:nowrap}.breadcrumb b{font-weight:600;color:var(--ink)}.topbar-actions{display:flex;align-items:center;gap:14px;margin-left:auto}.search{display:flex;align-items:center;gap:9px;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 9px;color:var(--muted);background:var(--surface)}.search input{width:170px;border:0;outline:none!important;background:none;color:var(--ink);font-size:11px}.search input::placeholder{color:var(--muted)}kbd{font-family:inherit;font-size:9px;border:1px solid var(--border);border-radius:4px;padding:0 4px;color:var(--muted)}.icon-button{width:33px;height:33px;border:1px solid var(--border);border-radius:9px;display:grid;place-items:center;color:var(--ink2);background:var(--surface)}.icon-button:hover{background:var(--surface2)}.device-status{display:flex;gap:7px;align-items:center;font-size:10px;color:var(--muted);white-space:nowrap}.device-status .status-dot{background:#55a282;box-shadow:none;width:5px;height:5px}.content-scroll{overflow:auto;min-height:0;scrollbar-gutter:stable}.content{padding:31px 34px 24px;max-width:1760px;margin:0 auto}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:25px}.eyebrow{font-size:10px;letter-spacing:1.5px;font-weight:700;color:var(--accent);text-transform:uppercase;margin:0 0 6px}h1{font-size:29px;line-height:1.35;letter-spacing:-1.2px;font-weight:750;margin:0 0 8px}h2{font-size:14px;letter-spacing:-.25px;font-weight:750;margin:0}h3{font-size:13px;margin:0;font-weight:700}.subtitle{font-size:11px;color:var(--muted);margin:0;line-height:1.7}.heading-actions{display:flex;align-items:center;gap:9px;padding-top:11px}.button{height:36px;padding:0 13px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:10.5px;font-weight:650;border:1px solid var(--border);background:var(--surface);white-space:nowrap;transition:transform .12s,background .16s}.button:hover{background:var(--surface2);transform:translateY(-1px)}.button.primary{color:#fff;background:var(--accent);border-color:var(--accent)}.button.primary:hover{background:#246e60}.button.quiet{border-color:transparent;background:transparent;color:var(--muted)}.button.small{height:29px;font-size:10px;padding:0 10px}.filter-bar{display:flex;align-items:center;gap:10px;margin-bottom:23px;flex-wrap:wrap}.filter-group{display:flex;gap:7px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:8px;height:34px;padding:0 10px;color:var(--ink2)}.filter-group input[type=date]{width:102px;font-size:10px;border:0;outline:0;background:none;color:var(--ink);padding:0}.filter-group input::-webkit-calendar-picker-indicator{opacity:.4;width:10px;padding:0;margin-left:2px}.filter-group select{border:0;outline:0;color:var(--ink2);background:transparent;font-size:10px;max-width:200px;min-width:92px;padding:0 7px 0 0}.filter-group .sep{color:var(--muted);font-size:10px}.filter-period-note{margin-left:auto;font-size:10px;color:var(--muted);display:flex;align-items:center;gap:6px}.reset-filter{font-size:10px;color:var(--accent);padding:5px 0}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:21px}.kpi{border-radius:13px;background:var(--surface);border:1px solid var(--border);padding:18px 19px 16px;position:relative;overflow:hidden}.kpi-icon{position:absolute;right:16px;top:17px;color:#a0b4a8;background:var(--surface2);border-radius:8px;width:29px;height:29px;display:grid;place-items:center}.kpi-label{font-size:10px;font-weight:600;color:var(--ink2);margin-bottom:11px}.kpi-value{font-size:31px;letter-spacing:-1.3px;line-height:1.2;font-weight:750}.kpi-note{font-size:9px;color:var(--muted);margin-top:10px;display:flex;align-items:center;gap:5px}.kpi.highlight{background:#e8f0e7;border-color:#d9e6d8}.kpi.highlight .kpi-icon{background:#d9e7d6;color:#73956a}.kpi-value small{font-size:14px;letter-spacing:0;color:var(--muted);font-weight:500}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(275px,1fr);gap:20px;margin-bottom:20px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden}.panel-header{display:flex;justify-content:space-between;align-items:flex-start;padding:21px 22px 12px;gap:15px}.panel-header .subtitle{font-size:9px;margin-top:4px}.tag{font-size:9px;padding:4px 8px;display:inline-flex;align-items:center;gap:5px;border-radius:5px;white-space:nowrap;font-weight:600;background:var(--surface2);color:var(--ink2)}.tag.green{background:#edf5e6;color:#738b4c}.tag.amber{background:var(--amber-bg);color:var(--amber)}.tag.red{background:var(--red-bg);color:var(--red)}.tag.teal{background:var(--soft);color:var(--accent)}.text-button{font-size:10px;color:var(--muted);display:inline-flex;gap:5px;align-items:center;padding:0;white-space:nowrap}.text-button:hover{color:var(--accent)}.trend-summary{display:flex;align-items:center;gap:9px;padding:0 22px 5px}.trend-summary strong{font-size:22px;font-weight:750;letter-spacing:-.7px}.trend-summary span{font-size:9px;color:var(--muted)}.chart-wrap{padding:0 14px 0 12px;position:relative}.line-chart{width:100%;height:190px;overflow:visible}.chart-grid{stroke:var(--border);stroke-dasharray:3 5;stroke-width:1}.chart-label{fill:var(--muted);font-size:9px;font-family:Manrope,sans-serif}.chart-area{fill:url(#chart-area)}.chart-line{fill:none;stroke:var(--accent);stroke-width:2.6;stroke-linejoin:round;stroke-linecap:round}.chart-point{fill:var(--surface);stroke:var(--accent);stroke-width:2;cursor:help}.chart-point:hover{r:5}.chart-caption{font-size:8.5px;color:var(--muted);padding:0 22px 17px}.distribution{display:grid;grid-template-columns:130px minmax(0,1fr);align-items:center;gap:10px;padding:7px 21px 21px}.donut{width:130px;height:130px;position:relative}.donut svg{width:130px;height:130px;transform:rotate(-90deg)}.donut-total{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center}.donut-total strong{font-size:21px;letter-spacing:-.7px}.donut-total span{font-size:8px;color:var(--muted)}.grade-legend{display:flex;flex-direction:column;gap:9px;padding-top:3px}.legend-row{display:flex;align-items:center;gap:6px;font-size:9px;color:var(--ink2)}.legend-row b{font-size:10px;margin-left:auto;font-weight:650;color:var(--ink)}.legend-dot{width:6px;height:6px;border-radius:2px;display:inline-block}.grade-footer{padding:12px 20px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-size:9px;color:var(--muted)}.grade-footer strong{color:var(--accent);font-size:12px;font-weight:700}.focus-list{padding:1px 22px 15px}.focus-row{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid var(--border);width:100%;text-align:left}.focus-row:last-child{border:0}.focus-symbol{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;background:var(--amber-bg);color:var(--amber)}.focus-row:nth-child(2) .focus-symbol{background:#eff0fb;color:#9698c4}.focus-row:nth-child(3) .focus-symbol{background:#e9f3f6;color:#719bab}.focus-row strong{font-size:11px;font-weight:650;display:block}.focus-row p{font-size:9px;color:var(--muted);margin:3px 0 0}.focus-count{font-size:13px;font-weight:750;margin-left:auto;margin-right:10px}.focus-row>svg{color:var(--muted)}.monitor-summary{padding:4px 22px 17px;display:flex;align-items:baseline;gap:5px}.monitor-summary strong{font-size:29px;letter-spacing:-1px}.monitor-summary>span{font-size:11px;color:var(--muted)}.monitor-summary .tag{margin-left:auto}.progress-track{height:5px;background:var(--border);border-radius:4px;overflow:hidden}.progress-fill{height:100%;border-radius:4px;background:#9ec49f}.monitor-progress{margin:0 22px 18px}.mini-indicators{padding:0 22px 14px}.mini-indicator{display:flex;align-items:center;justify-content:space-between;font-size:10px;padding:8px 0}.mini-indicator span{color:var(--ink2)}.mini-indicator strong{font-weight:700;color:var(--accent)}.mini-indicator strong.warn{color:var(--amber)}.panel-bottom{padding:11px 22px;border-top:1px solid var(--border);font-size:9px;color:var(--muted);display:flex;justify-content:space-between;align-items:center}.footer-note{display:flex;align-items:center;justify-content:space-between;font-size:9px;color:var(--muted);padding:7px 0}.footer-note>span{display:flex;align-items:center;gap:6px}.overview-school{font-size:10px;color:var(--ink2)}.teacher-preview .panel-header{padding-bottom:15px}.table-container{width:100%;overflow:auto}.data-table{border-collapse:collapse;width:100%;font-size:10px;text-align:left;white-space:nowrap}.data-table th{font-weight:600;color:var(--muted);font-size:9px;background:var(--surface2);padding:12px 18px;border-block:1px solid var(--border);text-align:left;cursor:pointer}.data-table th:hover{color:var(--accent)}.data-table td{padding:13px 18px;border-bottom:1px solid var(--border);color:var(--ink2);vertical-align:middle}.data-table tbody tr:last-child td{border-bottom:0}.data-table tbody tr{transition:background .12s}.data-table tbody tr:hover{background:var(--surface2)}.data-table tbody tr.clickable{cursor:pointer}.data-table .strong{font-weight:650;color:var(--ink)}.data-table .secondary{font-size:9px;color:var(--muted);max-width:220px;overflow:hidden;text-overflow:ellipsis;display:block;margin-top:3px}.person{display:flex;align-items:center;gap:11px}.avatar{width:33px;height:33px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;background:#e5eee9;color:#65857d;font-size:10px;font-weight:700}.avatar.lavender{background:#eeeaf8;color:#9581b8}.avatar.sand{background:#f5eddf;color:#a1916d}.avatar.blue{background:#e5edf4;color:#7d99af}.avatar.large{width:64px;height:64px;font-size:20px;margin-bottom:13px}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 20px}.table-toolbar-left{display:flex;align-items:center;gap:10px}.table-toolbar .search input{width:210px}.table-count{font-size:10px;color:var(--muted)}.table-pagination{padding:14px 20px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-size:10px;color:var(--muted)}.page-controls{display:flex;align-items:center;gap:10px}.page-controls button{width:28px;height:28px;border:1px solid var(--border);border-radius:7px;display:grid;place-items:center}.page-controls button:disabled{opacity:.3;cursor:default}.page-size{border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--ink2);font-size:10px;padding:4px}.empty-state{padding:65px 25px;text-align:center;color:var(--muted)}.empty-state .empty-icon{width:55px;height:55px;background:var(--surface2);border:1px solid var(--border);border-radius:16px;display:grid;place-items:center;margin:0 auto 16px;color:#a7bab0}.empty-state h3{color:var(--ink2);margin-bottom:5px}.empty-state p{font-size:11px;max-width:400px;margin:0 auto 17px}.view-note{background:var(--soft);padding:13px 16px;display:flex;gap:10px;border-radius:9px;color:var(--ink2);font-size:10px;margin-bottom:20px;align-items:flex-start}.view-note svg{color:var(--accent);margin-top:1px}.summary-chips{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}.summary-chip{padding:8px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;color:var(--muted);font-size:10px}.summary-chip strong{font-size:13px;color:var(--ink);padding-left:7px}.tabs{display:flex;gap:5px;margin-bottom:20px;flex-wrap:wrap}.tab{padding:7px 12px;border:1px solid var(--border);border-radius:7px;background:var(--surface);color:var(--muted);font-size:10px;display:flex;gap:7px;align-items:center}.tab.active{background:var(--soft);border-color:#b5d5c7;color:var(--accent);font-weight:700}.tab span{font-size:9px;opacity:.7}.status-pill{display:inline-flex;align-items:center;gap:5px;font-size:9px;padding:4px 7px;border-radius:5px;background:#edf5e9;color:#7b945c}.status-pill.warn{background:var(--amber-bg);color:var(--amber)}.status-pill.neutral{background:var(--surface2);color:var(--muted)}.status-pill.info{background:#edf2f8;color:var(--blue)}.indicator-title{font-weight:650;color:var(--ink);white-space:normal;min-width:200px;max-width:300px}.indicator-value{font-size:16px;font-weight:750;color:var(--ink);width:54px}.indicator-bar{display:flex;gap:14px;align-items:center}.indicator-bar .progress-track{width:85px;height:4px}.indicator-bar .progress-fill.warn{background:#d8ac77}.indicator-bar .progress-fill.good{background:#8cbba6}.two-column{display:grid;grid-template-columns:1fr 1fr;gap:20px}.settings-section{padding:22px}.settings-section h3{margin-bottom:6px}.settings-section p{font-size:11px;color:var(--muted);line-height:1.75;margin:7px 0 15px}.settings-row{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--border);padding:14px 0;gap:16px}.settings-row label{font-size:11px;color:var(--ink2)}.number-input{width:62px;border:1px solid var(--border);padding:6px 8px;border-radius:7px;background:var(--surface);color:var(--ink)}.provenance{font-size:10px;color:var(--muted);margin-top:14px;line-height:1.9}.loading-screen{min-height:75vh;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted)}.loading-screen h2{font-size:18px;color:var(--ink);margin-top:21px}.loading-screen p{font-size:11px}.spinner{width:31px;height:31px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.busy-line{height:2px;position:fixed;top:0;left:224px;right:0;z-index:80;overflow:hidden}.busy-line:before{content:'';position:absolute;width:30%;height:100%;background:var(--accent);animation:loading 1.4s ease-in-out infinite}@keyframes loading{from{left:-30%}to{left:100%}}.demo-banner{padding:9px 16px;border:1px solid #ead9a8;border-radius:9px;background:var(--amber-bg);color:var(--amber);font-size:10px;display:flex;align-items:center;gap:10px;margin-bottom:20px}.demo-banner .text-button{margin-left:auto;color:var(--amber)}.overlay{position:fixed;inset:0;background:#122c2c45;backdrop-filter:blur(3px);z-index:100;display:flex;align-items:center;justify-content:center;padding:30px;animation:fade-in .15s}@keyframes fade-in{from{opacity:0}to{opacity:1}}.dialog{background:var(--surface);box-shadow:var(--shadow);border:1px solid var(--border);border-radius:18px;width:620px;max-width:100%;max-height:90vh;overflow:auto;padding:30px;position:relative}.dialog h2{font-size:21px;letter-spacing:-.6px;margin-bottom:8px}.dialog>.icon-button{position:absolute;right:20px;top:20px}.dialog-intro{font-size:11px;color:var(--muted);line-height:1.8;margin:0 20px 22px 0}.connection-state{padding:13px 15px;border:1px solid #cde0d4;background:var(--soft);border-radius:9px;display:flex;align-items:center;gap:10px;font-size:11px;color:var(--accent);margin-bottom:20px}.connection-state .status-dot{background:var(--accent);box-shadow:none}.connection-step{display:flex;gap:13px;margin-top:18px}.step-num{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;color:var(--accent);background:var(--soft);font-size:10px;font-weight:700}.connection-step h3{font-size:11px;margin-bottom:5px}.connection-step p{font-size:10px;color:var(--muted);line-height:1.8;margin:0 0 10px}.code-row{display:flex;gap:8px;margin-top:10px}.code-row input{width:100%;min-width:0;border:1px solid var(--border);border-radius:7px;padding:10px;font:10px Consolas,monospace;color:var(--muted);background:var(--surface2)}.dialog-footer{margin-top:24px;padding-top:18px;border-top:1px solid var(--border);display:flex;gap:8px;align-items:center;justify-content:flex-end}.drawer-overlay{justify-content:flex-end;padding:0}.drawer{background:var(--surface);height:100vh;overflow:auto;width:470px;padding:31px;border-left:1px solid var(--border);box-shadow:-10px 0 50px #102b2820;position:relative;animation:slide-in .2s}@keyframes slide-in{from{transform:translateX(35px);opacity:.5}to{transform:translateX(0);opacity:1}}.drawer>.icon-button{position:absolute;right:24px;top:24px}.drawer h2{font-size:24px;letter-spacing:-.6px;margin-bottom:5px;line-height:1.4}.drawer-subtitle{font-size:11px;color:var(--muted);margin:0 0 24px}.drawer-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:22px 0}.drawer-stat{border:1px solid var(--border);background:var(--surface2);border-radius:10px;padding:13px}.drawer-stat strong{display:block;font-size:20px;letter-spacing:-.5px;font-weight:750}.drawer-stat span{font-size:9px;color:var(--muted)}.detail-line{display:grid;grid-template-columns:130px minmax(0,1fr);gap:14px;padding:12px 0;border-bottom:1px solid var(--border);font-size:11px}.detail-line>span:first-child{color:var(--muted)}.detail-line>span:last-child{color:var(--ink2);word-break:break-word}.detail-topic{border:1px solid var(--border);border-radius:10px;background:var(--surface2);padding:15px;margin:20px 0}.detail-topic small{display:block;font-size:9px;color:var(--muted);margin-bottom:6px}.detail-topic p{font-size:13px;margin:0;color:var(--ink);font-weight:650;line-height:1.6}.drawer-actions{display:flex;gap:9px;margin-top:25px;flex-wrap:wrap}.drawer-hint{font-size:10px;line-height:1.9;color:var(--muted);margin-top:20px}.export-menu{position:fixed;right:34px;top:156px;width:250px;z-index:90;border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:6px;box-shadow:var(--shadow)}.export-menu button{width:100%;text-align:left;display:flex;gap:12px;padding:12px;border-radius:8px}.export-menu button:hover{background:var(--surface2)}.export-menu strong{display:block;font-size:11px;font-weight:650}.export-menu small{display:block;font-size:9px;color:var(--muted);margin-top:3px}#toast-root{position:fixed;bottom:25px;left:calc(50% + 112px);transform:translateX(-50%);z-index:200;pointer-events:none}.toast{background:#193e38;color:#f0f6ed;padding:13px 18px;border-radius:11px;box-shadow:var(--shadow);font-size:11px;display:flex;gap:12px;align-items:center;max-width:650px;pointer-events:auto;animation:fade-in .2s}.toast.error{background:#8d4f49}.toast button{color:var(--accent2);font-weight:700;font-size:10px;padding:0}.issue-description{white-space:normal;max-width:350px;min-width:200px;line-height:1.7;font-size:10px}.source-state{display:flex;gap:7px;align-items:center;font-size:10px}.source-state.good{color:var(--accent)}.source-state.missing{color:var(--muted)}.teaching-bar{display:flex;gap:8px;align-items:center}.teaching-bar .progress-track{width:45px;height:4px}.teaching-bar .progress-fill{background:#accdbb}.hidden{display:none!important}.full-table-panel{min-height:250px}.subtle{color:var(--muted)}.numeric{font-variant-numeric:tabular-nums}.safety-note{padding:14px 22px;background:var(--surface2);border-top:1px solid var(--border);font-size:9px;color:var(--muted);display:flex;gap:7px;align-items:flex-start}
[data-theme=dark]{--canvas:#102a28;--surface:#183532;--surface2:#1d3b37;--ink:#e3ece2;--ink2:#b3c7bb;--muted:#78988c;--border:#2a4740;--accent:#8bc9ac;--soft:#25493c;--amber-bg:#453d2e;--amber:#dcb478;--red-bg:#483432;--red:#df9b94;--shadow:0 16px 40px #0003;--sidebar:#0c211e}[data-theme=dark] .kpi.highlight{background:#294b37;border-color:#365b42}[data-theme=dark] .kpi.highlight .kpi-icon{background:#375d41;color:#a5c194}[data-theme=dark] .button.primary{background:#8bc9ac;color:#13352a;border-color:#8bc9ac}[data-theme=dark] .tag.green,[data-theme=dark] .status-pill{background:#2a4936;color:#a7c18f}[data-theme=dark] .avatar{background:#2a493d;color:#a4c7b6}[data-theme=dark] .avatar.lavender{background:#3c3c55;color:#beb5df}[data-theme=dark] .avatar.sand{background:#4d4633;color:#d0bc8a}[data-theme=dark] .avatar.blue{background:#2d4656;color:#9bb7cc}[data-theme=dark] input[type=date]{color-scheme:dark}
@media(min-width:1600px){.content{padding:37px 45px}.topbar{padding-inline:45px}.line-chart{height:215px}.distribution{padding-top:15px;padding-bottom:25px}.kpi{padding:21px}.kpi-value{font-size:35px}}@media(max-width:1200px){.app{grid-template-columns:194px minmax(0,1fr)}.sidebar{padding-inline:11px}.brand{padding-inline:9px}.brand-name{font-size:14px}.content{padding:25px}.topbar{padding-inline:25px}.device-status{display:none}.dashboard-grid{grid-template-columns:minmax(0,1.6fr) 285px;gap:15px}.kpi-grid{gap:11px}.kpi{padding:16px}.kpi-value{font-size:28px}.heading-actions{gap:6px}.distribution{grid-template-columns:115px 1fr;padding-inline:13px;gap:6px}.donut,.donut svg{width:115px;height:115px}.line-chart{height:180px}.search input{width:140px}.nav-item{font-size:11px}.busy-line{left:194px}#toast-root{left:calc(50% + 97px)}.filter-period-note{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* Reading scale for school desktops. */
body{font-size:14px}.nav-item{font-size:13px}.brand-name{font-size:16px}.brand-name small{font-size:9px;letter-spacing:1.3px}.breadcrumb{font-size:12px}.search input{font-size:12px}.subtitle{font-size:12px}.page-heading h1{font-size:32px}.button{font-size:12px;height:38px}.button.small{font-size:11px;height:32px}.filter-group{height:36px}.filter-group input[type=date]{font-size:11px;width:108px}.filter-group select{font-size:11px}.kpi-label{font-size:12px}.kpi-note{font-size:10px}.kpi-value{font-size:33px}.panel-header h2{font-size:16px}.panel-header .subtitle{font-size:10px}.tag{font-size:10px}.text-button{font-size:11px}.trend-summary span{font-size:10px}.chart-label{font-size:10px}.chart-caption{font-size:10px}.legend-row{font-size:10px}.legend-row b{font-size:11px}.grade-footer{font-size:10px}.focus-row strong{font-size:12px}.focus-row p{font-size:10px}.mini-indicator{font-size:11px}.panel-bottom{font-size:10px}.safety-note{font-size:10px}.data-table{font-size:12px}.data-table th{font-size:11px}.data-table .secondary{font-size:10px}.table-count,.table-pagination{font-size:11px}.status-pill{font-size:10px}.summary-chip{font-size:11px}.tab{font-size:11px}.view-note{font-size:11px}.issue-description{font-size:11px}.source-state{font-size:11px}.settings-section p{font-size:12px}.settings-row label{font-size:12px}.local-card-top{font-size:11px}.local-card p{font-size:10px}.profile strong{font-size:11px}.profile span{font-size:9px}.drawer-subtitle,.detail-line{font-size:12px}.drawer-hint{font-size:11px}.dialog-intro{font-size:12px}.connection-step h3{font-size:12px}.connection-step p{font-size:11px}.footer-note{font-size:10px}
@media(max-width:1200px){.nav-item{font-size:12px}.brand-name{font-size:14px}.data-table{font-size:11px}.content{padding:24px}.heading-actions .button{font-size:11px}}
.connection-divider{font-size:11px;margin:24px 0 0;padding-top:18px;border-top:1px solid var(--border);color:var(--muted)}
.connection-step p.portal-status{color:var(--ink)}.connection-step p.portal-status[data-state=ready]{color:var(--accent)}
.connection-step p.portal-status[data-state=error],.connection-step p.portal-status[data-state=expired]{color:var(--red)}
.portal-actions{display:flex;gap:8px;flex-wrap:wrap}
.device-status.sync-running .status-dot{background:var(--amber)}
.device-status.sync-attention{color:var(--red);cursor:pointer}.device-status.sync-attention .status-dot{background:var(--red)}
