:root{color-scheme:light;--bg: #f7f5f0;--surface: #ffffff;--surface-2: #faf8f4;--sidebar: #f1ede5;--ink: #1b1a16;--ink-2: #4c4941;--ink-3: #6f6b62;--line: #e8e3da;--line-2: #d9d2c5;--hover: rgba(27,26,22,.045);--accent: #a9583e;--accent-hover: #93482f;--accent-soft: #f6e8e1;--accent-ink: #8c4329;--on-accent: #ffffff;--success: #2c7a53;--success-soft: #e5f1ea;--warning: #8e5a0c;--warning-soft: #faefd9;--danger: #b03b30;--danger-soft: #f9e4e1;--info: #356597;--info-soft: #e4ecf6;--c1: #b05a3b;--c2: #2a7d72;--c3: #557f47;--c4: #946819;--c5: #85536f;--c6: #4f6987;--on-tone: #ffffff;--option: #d9d2c5;--pop: 0 16px 40px -12px rgba(27,26,22,.22), 0 2px 6px rgba(27,26,22,.06);--bg-primary: var(--bg);--bg-secondary: var(--surface);--bg-card: var(--surface);--bg-hover: var(--hover);--bg-inset: var(--surface-2);--text-primary: var(--ink);--text-secondary: var(--ink-2);--text-muted: var(--ink-3);--border-light: var(--line);--accent-2: var(--c2);--accent-2-soft: color-mix(in srgb, var(--c2) 14%, transparent);--green: var(--success);--green-soft: var(--success-soft);--orange: var(--warning);--orange-soft: var(--warning-soft);--red: var(--danger);--red-soft: var(--danger-soft);--shadow-sm: 0 1px 2px rgba(27,26,22,.04);--shadow-md: 0 2px 8px rgba(27,26,22,.06);--shadow-lg: var(--pop);--radius-sm: 8px;--radius-md: 10px;--radius-lg: 12px;--font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-display: "Source Serif 4", "Noto Serif SC", "Songti SC", Georgia, serif;--font-mono: "SF Mono", ui-monospace, Menlo, Consolas, monospace;--sidebar-width: 240px;--header-height: 56px;--transition: .16s cubic-bezier(.4,0,.2,1)}html.dark{color-scheme:dark;--bg: #121110;--surface: #1a1917;--surface-2: #201f1c;--sidebar: #161513;--ink: #f2efe9;--ink-2: #beb9af;--ink-3: #8f8a80;--line: #2d2b27;--line-2: #3b3934;--hover: rgba(242,239,233,.05);--accent: #dc8e70;--accent-hover: #e7a288;--accent-soft: rgba(220,142,112,.14);--accent-ink: #eba88e;--on-accent: #1b1a16;--success: #62b68a;--success-soft: rgba(98,182,138,.14);--warning: #e1a84e;--warning-soft: rgba(225,168,78,.14);--danger: #e57b6a;--danger-soft: rgba(229,123,106,.15);--info: #7fa8d9;--info-soft: rgba(127,168,217,.14);--c1: #d9876a;--c2: #4fb3a5;--c3: #86b474;--c4: #d9a955;--c5: #c08aa9;--c6: #8aa1c0;--on-tone: #161513;--option: #4a4741;--pop: 0 16px 40px -12px rgba(0,0,0,.7);--shadow-sm: 0 1px 2px rgba(0,0,0,.3);--shadow-md: 0 2px 8px rgba(0,0,0,.35)}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:var(--font-sans);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:14px;overflow:hidden}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font-family:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:8px;border:2px solid transparent;background-clip:content-box}::-webkit-scrollbar-track{background:transparent}::placeholder{color:var(--ink-3)}.num{font-variant-numeric:tabular-nums}.mono{font-family:var(--font-mono)}.serif{font-family:var(--font-display);font-weight:500}.sr-only{position:absolute;top:0;left:0;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.tone-1{--tone: var(--c1)}.tone-2{--tone: var(--c2)}.tone-3{--tone: var(--c3)}.tone-4{--tone: var(--c4)}.tone-5{--tone: var(--c5)}.tone-6{--tone: var(--c6)}.dot{display:inline-block;flex:none;width:8px;height:8px;border-radius:3px;background:var(--tone, var(--ink-3))}.monogram{display:grid;flex:none;place-items:center;width:36px;height:36px;border-radius:9px;background:var(--tone, var(--ink-3));color:var(--on-tone);font-size:12px;font-weight:700;letter-spacing:.02em}.page{display:flex;flex-direction:column;gap:22px;max-width:1240px;margin:0 auto}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap}.eyebrow{color:var(--ink-3);font-size:13px;font-weight:500}.page-title{font-family:var(--font-display);font-size:30px;font-weight:500;letter-spacing:-.015em;line-height:1.2}.page-sub{margin-top:6px;color:var(--ink-2);font-size:14px;line-height:1.55}.page-actions{display:flex;gap:8px;flex-wrap:wrap}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:18px 20px}.card.flush{padding:0;overflow:hidden}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:16px 20px 14px}.section-head h2,.section-title{font-size:16px;font-weight:650}.section-desc{margin-top:3px;color:var(--ink-3);font-size:12.5px}.section-foot{padding:12px 20px;border-top:1px solid var(--line)}.link{color:var(--accent-ink);font-size:13px;font-weight:600;text-decoration:none;cursor:pointer}.link:hover{text-decoration:underline}.split{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}.split>.main-col{flex:999 1 560px;min-width:0}.split>.side-col{flex:1 1 340px;min-width:0;display:flex;flex-direction:column;gap:20px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:36px;padding:0 14px;border:1px solid var(--line-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font-size:13px;font-weight:600;white-space:nowrap;text-decoration:none;transition:background var(--transition),border-color var(--transition),color var(--transition)}.btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--ink-3)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn svg{width:15px;height:15px;flex:none}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn-ghost{background:var(--surface)}.btn-quiet{border-color:transparent;background:transparent;color:var(--ink-2)}.btn-quiet:hover:not(:disabled){background:var(--hover);border-color:transparent;color:var(--ink)}.btn-danger{color:var(--danger)}.btn-sm,.mini-btn{min-height:30px;padding:0 11px;font-size:12.5px}.mini-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font-weight:600;white-space:nowrap}.mini-btn:hover:not(:disabled){background:var(--surface-2);border-color:var(--ink-3)}.mini-btn.danger{color:var(--danger)}.icon-btn{display:inline-flex;flex:none;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--radius-sm);color:var(--ink-2);transition:background var(--transition),color var(--transition)}.icon-btn:hover{background:var(--hover);color:var(--ink)}.icon-btn svg{width:17px;height:17px}.pill,.status-pill{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap;flex-shrink:0}.pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.p-ok,.sp-live{color:var(--success);background:var(--success-soft)}.p-warn,.sp-overdue,.sp-upcoming{color:var(--warning);background:var(--warning-soft)}.p-risk,.sp-closed{color:var(--danger);background:var(--danger-soft)}.p-info{color:var(--info);background:var(--info-soft)}.p-mute,.sp-draft{color:var(--ink-2);background:var(--hover);box-shadow:inset 0 0 0 1px var(--line)}.count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 6px;border-radius:999px;background:var(--line);color:var(--ink-2);font-size:11px;font-weight:700;font-variant-numeric:tabular-nums}.invite-chip,.code-chip{display:inline-flex;align-items:center;gap:8px;min-height:30px;padding:0 8px 0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--ink);font-family:var(--font-mono);font-size:12.5px;font-weight:600;letter-spacing:.06em;white-space:nowrap}.invite-chip:hover,.code-chip:hover{border-color:var(--line-2)}.invite-chip svg,.code-chip svg{width:14px;height:14px;color:var(--ink-3)}.seg{display:inline-flex;gap:2px;padding:3px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2)}.seg button{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:0 10px;border-radius:6px;color:var(--ink-2);font-size:12.5px;font-weight:600;white-space:nowrap}.seg button:hover{color:var(--ink)}.seg button.active,.seg button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px #1b1a1614,0 0 0 1px var(--line)}.seg .n{color:var(--ink-3);font-weight:500;font-variant-numeric:tabular-nums}.tabs{display:flex;gap:24px;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{display:inline-flex;align-items:center;gap:7px;height:44px;border-bottom:2px solid transparent;color:var(--ink-2);font-size:13.5px;font-weight:600;white-space:nowrap}.tab:hover{color:var(--ink)}.tab.on{color:var(--ink);border-bottom-color:var(--accent)}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:1px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--line)}.kpi{display:flex;flex-direction:column;gap:6px;padding:16px 20px;background:var(--surface)}.kpi-label{color:var(--ink-2);font-size:13px;font-weight:500}.kpi-value{font-family:var(--font-display);font-size:30px;font-weight:500;line-height:1.1;font-variant-numeric:tabular-nums}.kpi-note{color:var(--ink-3);font-size:12.5px}.kpi-note strong{color:var(--danger);font-weight:600}.meter{display:block;flex:1;height:6px;overflow:hidden;border-radius:3px;background:var(--line)}.meter>span{display:block;height:100%;border-radius:3px;background:var(--accent);transition:width .5s cubic-bezier(.4,0,.2,1)}.meter.warn>span{background:var(--warning)}.meter.risk>span{background:var(--danger)}.meter.ok>span{background:var(--success)}.meter.ink>span{background:var(--ink-2)}.dt-wrap{position:relative;overflow-x:auto}.dt{width:100%;border-collapse:collapse}.dt th{padding:9px 12px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--surface-2);color:var(--ink-3);font-size:12px;font-weight:600;text-align:left;white-space:nowrap}.dt td{padding:11px 12px;border-bottom:1px solid var(--line);font-size:13px;vertical-align:middle}.dt th:first-child,.dt td:first-child{padding-left:20px}.dt th:last-child,.dt td:last-child{padding-right:20px}.dt tbody tr:hover td{background:var(--hover)}.dt tbody tr:last-child td{border-bottom:0}.dt .r{text-align:right}.dt .c{text-align:center}.dt .strong{font-weight:600}.cell-title{display:block;overflow:hidden;color:var(--ink);font-size:14px;font-weight:600;text-overflow:ellipsis;white-space:nowrap;text-decoration:none}a.cell-title:hover,button.cell-title:hover{color:var(--accent-ink)}.cell-sub{display:block;margin-top:2px;overflow:hidden;color:var(--ink-3);font-size:12.5px;text-overflow:ellipsis;white-space:nowrap}.rank-table{width:100%;border-collapse:collapse}.rank-table th{padding:9px 10px;border-bottom:1px solid var(--line);background:var(--surface-2);color:var(--ink-3);font-size:12px;font-weight:600;text-align:left}.rank-table td{padding:10px;border-bottom:1px solid var(--line);font-size:13px}.rank-table tr:last-child td{border-bottom:none}.rank-table tbody tr:hover td{background:var(--hover)}.student-name{font-weight:600}.num.good,.tone-good{color:var(--success)}.num.mid,.tone-mid{color:var(--warning)}.num.low,.tone-low{color:var(--danger)}.menu{position:absolute;z-index:30;min-width:196px;padding:6px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--pop);animation:fadeUp .14s ease}.menu-item{display:flex;align-items:center;gap:10px;width:100%;min-height:34px;padding:0 10px;border-radius:7px;color:var(--ink);font-size:13px;text-align:left;white-space:nowrap}.menu-item:hover,.menu-item:focus-visible{background:var(--hover);outline:none}.menu-item svg{width:15px;height:15px;color:var(--ink-3)}.menu-item.danger,.menu-item.danger svg{color:var(--danger)}.menu-sep{height:1px;margin:6px 4px;background:var(--line)}.connected-empty,.empty-roster{display:grid;place-items:center;align-content:center;gap:10px;min-height:180px;padding:32px 24px;border:1px dashed var(--line-2);border-radius:var(--radius-lg);background:transparent;color:var(--ink-2);text-align:center;font-size:13.5px;line-height:1.6}.connected-empty{min-height:320px}.connected-empty-icon{display:grid;width:52px;height:52px;place-items:center;border-radius:50%;border:1px solid var(--line);background:var(--surface);color:var(--accent)}.connected-empty-icon svg{width:24px;height:24px}.connected-empty h2{font-family:var(--font-display);font-size:22px;font-weight:500;color:var(--ink)}.connected-empty p{max-width:520px;color:var(--ink-2)}.connected-empty-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:6px}.empty-inline{padding:28px 20px;color:var(--ink-3);font-size:13.5px;text-align:center}.loading-line{padding:28px 20px;color:var(--ink-3);font-size:13.5px}.update-notes-shell{display:grid;gap:14px;max-height:min(68vh,700px);overflow-y:auto;padding:2px 4px 4px 0}.update-notes-version{font-family:var(--font-display);font-size:24px;font-weight:500;letter-spacing:-.02em;line-height:1.1}.update-notes-title{font-size:13px;color:var(--ink-2);line-height:1.55}.update-latest-label{font-size:12px;font-weight:700;letter-spacing:.06em;color:var(--accent-ink)}.update-latest-date{font-size:12px;font-weight:600;color:var(--ink-3)}.update-latest-title{font-size:13px;color:var(--ink-2);line-height:1.55;margin:8px 0 12px}.update-history-list{display:grid;gap:10px;padding:0 14px 14px}.update-history-header{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.update-history-version-row{display:flex;align-items:center;gap:8px}.update-history-version{font-family:var(--font-display);font-size:15px;font-weight:500}.update-history-date{font-size:12px;color:var(--ink-3);font-weight:600}.update-history-title{font-size:12.5px;color:var(--ink-2);line-height:1.5;margin:6px 0 8px}.update-major-badge{font-size:11px;font-weight:700;color:var(--danger);background:var(--danger-soft);padding:3px 7px;border-radius:999px}.update-notes-actions{display:flex;justify-content:flex-end;gap:10px}.modal-overlay{position:fixed;inset:0;z-index:100;display:none;align-items:flex-start;justify-content:center;padding:60px 20px;overflow-y:auto;background:#1413106b;backdrop-filter:blur(4px)}.modal-overlay.open{display:flex}.modal{display:flex;flex-direction:column;width:100%;max-width:480px;max-height:calc(100vh - 36px);min-height:0;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:var(--pop);animation:fadeUp .2s ease}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:18px 22px 0}.modal-title{font-family:var(--font-display);font-size:19px;font-weight:500}.modal-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);color:var(--ink-2);font-size:20px}.modal-close:hover{background:var(--hover);color:var(--ink)}.modal-close svg{width:15px;height:15px}.modal-body{min-height:0;overflow-y:auto;padding:16px 22px 22px}.modal-foot{position:sticky;bottom:-1px;z-index:2;display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:16px;padding-top:14px;border-top:1px solid var(--line);background:var(--surface)}.field{margin-bottom:14px}.field label{display:block;margin-bottom:6px;color:var(--ink-2);font-size:12.5px;font-weight:600}.field input,.field select,.field textarea,.input,.select{width:100%;min-height:38px;padding:0 12px;border:1px solid var(--line-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);font-size:13.5px;outline:none}.field textarea{padding:9px 12px}.select,.field select{appearance:none;-webkit-appearance:none;padding-right:32px;cursor:pointer;background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);background-position:calc(100% - 17px) 50%,calc(100% - 12px) 50%;background-size:5px 5px;background-repeat:no-repeat}.select{width:auto;min-height:36px;font-size:13px;font-weight:500}.field input:focus,.field select:focus,.field textarea:focus,.input:focus,.select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.field input[type=checkbox]{width:16px;min-height:16px;accent-color:var(--accent)}.field-hint{margin-top:5px;color:var(--ink-3);font-size:12px}.search-field{display:flex;align-items:center;gap:8px;min-height:36px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink-3)}.search-field svg{width:15px;height:15px;flex:none}.search-field input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--ink);font-size:13px}.search-field:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.question-picker-list{display:grid;gap:6px;max-height:min(360px,44vh);overflow-y:auto;padding-right:3px;scrollbar-width:thin}.question-picker-empty{display:grid;place-items:center;min-height:152px;padding:20px;color:var(--ink-3);text-align:center;font-size:12.5px;line-height:1.55}.question-choice{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:9px;align-items:center;padding:9px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;transition:border-color var(--transition),background var(--transition)}.question-choice:hover{border-color:var(--line-2)}.question-choice input{width:16px;height:16px;accent-color:var(--accent)}.question-choice-main{min-width:0}.question-choice-main strong{display:block;font-size:12.5px}.question-choice-main small{display:block;margin-top:2px;overflow:hidden;color:var(--ink-3);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.question-preview-button{padding:4px 8px;border-radius:7px;color:var(--accent-ink);font-size:12px;font-weight:600}.question-preview-button:hover{background:var(--accent-soft)}.answer-key-loading{padding:24px;color:var(--ink-3);text-align:center}.gradebook-note{margin:0 0 12px;color:var(--ink-3);font-size:12.5px}.answers-list{display:grid;gap:6px;max-height:56vh;overflow-y:auto;padding-right:3px}.answers-num{color:var(--ink-3);font-size:12px;font-weight:700}.answers-qid{flex:1;min-width:0;overflow:hidden;color:var(--ink);font-size:12.5px;text-overflow:ellipsis;white-space:nowrap}@media(max-width:720px){.modal-overlay{padding:18px 10px}.question-picker-list{max-height:280px}.page{gap:18px}.page-title{font-size:26px}.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.kpi{padding:14px 16px}.kpi-value{font-size:26px}.section-head{padding:14px 16px 12px}.dt th:first-child,.dt td:first-child{padding-left:16px}.dt th:last-child,.dt td:last-child{padding-right:16px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
