.sv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:16px}.sv-tile{display:flex;flex-direction:column;gap:10px;text-align:left;font:inherit;color:var(--ink);cursor:pointer;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg, 12px);padding:16px 18px;box-shadow:var(--shadow-sm, none);transition:border-color .15s,box-shadow .15s,transform .15s}.sv-tile:hover{border-color:var(--brand);box-shadow:0 4px 16px color-mix(in srgb,var(--brand) 14%,transparent);transform:translateY(-1px)}.sv-tile:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.sv-tile-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.sv-tile-title{font-size:var(--fs-h2);font-weight:700;line-height:1.2}.sv-tile-sub{font-size:var(--fs-sm);color:var(--muted);margin-top:-6px}.sv-tile-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:10px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.sv-tile-stats>div{display:grid;gap:2px}.sv-stat-label{font-size:var(--fs-xs);font-weight:600;color:var(--muted)}.sv-stat-val{font-size:var(--fs-h1);font-weight:700;font-variant-numeric:tabular-nums}.sv-stat-sub{font-size:var(--fs-xs);color:var(--muted)}.tone-ok{color:var(--success);font-weight:600}.tone-bad{color:var(--danger);font-weight:600}.sv-tile-foot{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.sv-tile-go{margin-left:auto;display:inline-flex;align-items:center;gap:2px;font-size:var(--fs-sm);font-weight:600;color:var(--brand-text)}.sv-back{margin-bottom:4px;align-self:flex-start}.sv-code{text-transform:none;font-variant-numeric:tabular-nums;margin-right:4px}.sv-grp-card{margin-bottom:16px;min-width:0}.sv-grp-body,.sv-grp-section,.sv-grp-add,.sv-grp-note,.sv-grp-proposal{display:grid;gap:10px;min-width:0}.sv-grp-section{padding-top:14px;border-top:1px solid var(--line)}.sv-grp-section h3,.sv-grp-section h4{font-size:var(--fs-meta);font-weight:600;margin:0}.sv-grp-heading,.sv-grp-actions{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.sv-grp-code{color:var(--ink);font-weight:600;overflow-wrap:anywhere}.sv-grp-helper{color:var(--muted);font-size:var(--fs-sm);margin:0}.sv-grp-members{list-style:none;padding:0;margin:0;display:grid;gap:10px}.sv-grp-member{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.sv-grp-person{display:grid;gap:2px;min-width:0;color:var(--ink);font-size:var(--fs-meta);overflow-wrap:anywhere}.sv-grp-roll{font:var(--fs-sm) var(--font-mono);color:var(--muted)}.sv-grp-results{display:flex;flex-wrap:wrap;gap:8px}.sv-grp-results .btn{height:auto;min-height:28px;white-space:normal;text-align:left}.sv-grp-add>.btn,.sv-grp-section>.btn{justify-self:start}.sv-grp-textarea{width:100%;font-family:var(--font)}.sv-grp-note-text{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--fs-meta)}.sv-grp-score-row{display:flex;justify-content:space-between;align-items:start;gap:10px;font-size:var(--fs-meta)}.sv-grp-score-row>span:first-child{min-width:0;overflow-wrap:anywhere}.sv-grp-score-row>span:last-child{display:grid;gap:2px;justify-items:end}.sv-grp-score{width:75px;min-width:0}.sv-grp-ready{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 12px;padding:10px 12px;border-radius:var(--r-sm);background:var(--surface-2)}.sv-grp-ready .sv-grp-helper{flex:1 1 220px;margin:0}.sv-grp-join{list-style:none;margin:0;padding:0;display:grid}.sv-grp-join li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--line-soft)}.sv-grp-join li:first-child{border-top:0}.sv-grp-join-info{min-width:0;display:grid;gap:2px}.sv-grp-join-names{color:var(--ink);font-size:var(--fs-sm);overflow-wrap:anywhere}.sv-locked{margin-left:8px;background:var(--danger-bg);color:var(--danger)}.sv-grp-link-row{display:grid;grid-template-columns:minmax(0,140px) minmax(0,1fr) 32px;gap:6px;align-items:center;margin-bottom:6px}.sv-grp-project{display:grid;gap:6px}.sv-grp-topic{margin:0;color:var(--ink);font-size:var(--fs-meta);font-weight:600}.sv-grp-link{display:inline-flex;align-items:center;gap:6px;color:var(--brand-text);font-size:var(--fs-sm);overflow-wrap:anywhere}.sv-grp-error{color:var(--danger);font-size:var(--fs-sm)}@media (max-width: 480px){.sv-grp-link-row{grid-template-columns:1fr 32px}.sv-grp-link-row .input:first-child{grid-column:1 / -1}}:root{--brand: #f36c21;--brand-hover: #e05e1a;--brand-text: #c2410c;--brand-soft: #fff1e8;--brand-ink: #ffffff;--secondary: #00457c;--secondary-hover: #0c3355;--bg: #f5f7f9;--surface: #ffffff;--surface-2: #f8fafc;--ink: #1e293b;--ink-2: #334155;--muted: #64748b;--subtle: #94a3b8;--line: #e2e8f0;--line-soft: #f1f5f9;--success: #047857;--success-bg: #d1fae5;--warning: #b45309;--warning-bg: #fef3c7;--danger: #b91c1c;--danger-bg: #fee2e2;--danger-solid: #dc2626;--info: #1d4ed8;--info-bg: #dbeafe;--star: #d97706;--star-fill: #fbbf24;--series-1: #2a78d6;--tooltip-bg: #0f172a;--tooltip-ink: #e2e8f0;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-full: 999px;--shadow-sm: 0 1px 2px rgb(15 23 42 / .05);--shadow-md: 0 4px 12px rgb(15 23 42 / .08);--shadow-lg: 0 24px 48px rgb(15 23 42 / .18);--focus: var(--brand);--font: "Inter", "Be Vietnam Pro", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono: ui-monospace, "Cascadia Code", Consolas, monospace;--fs-overline: 11px;--fs-xs: 12px;--fs-sm: 13px;--fs-meta: 14px;--fs-body: 15px;--fs-h3: 17px;--fs-h2: 20px;--fs-h1: 24px;--fs-kpi: 28px;--content-max: 1200px;--side-w: 256px;color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--brand: #fb8433;--brand-hover: #fd9a52;--brand-text: #fdba74;--brand-soft: #3a2314;--brand-ink: #1a0c02;--secondary: #7fb3e6;--secondary-hover: #a9cdf0;--bg: #0f172a;--surface: #1b2537;--surface-2: #212d42;--ink: #e5eaf2;--ink-2: #cbd5e1;--muted: #98a5b8;--subtle: #64748b;--line: #2c384c;--line-soft: #243044;--success: #34d399;--success-bg: #123b2e;--warning: #fbbf24;--warning-bg: #3b2c0f;--danger: #f87171;--danger-bg: #3f1d1d;--danger-solid: #ef4444;--info: #93c5fd;--info-bg: #172b4d;--star: #d97706;--star-fill: #fbbf24;--series-1: #3987e5;--tooltip-bg: #0f172a;--tooltip-ink: #e2e8f0;--shadow-sm: 0 1px 2px rgb(0 0 0 / .3);--shadow-md: 0 4px 12px rgb(0 0 0 / .35);--shadow-lg: 0 24px 48px rgb(0 0 0 / .5);color-scheme:dark}}:root[data-theme=dark]{--star: #d97706;--star-fill: #fbbf24;--series-1: #3987e5;--tooltip-bg: #0f172a;--tooltip-ink: #e2e8f0}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font)}body{font-size:var(--fs-body);line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,p{margin:0}a{color:var(--secondary)}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}[hidden]{display:none!important}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.app{min-height:100vh}.page{max-width:var(--content-max);margin:0 auto;padding:32px 32px 64px;display:grid;grid-template-columns:minmax(0,1fr);gap:16px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:8px}.page-head h1{font-size:var(--fs-h1);font-weight:700;line-height:1.25}.page-head p{color:var(--muted);font-size:var(--fs-meta);margin-top:4px}.center{min-height:100vh;display:grid;place-items:center;padding:16px}.muted{color:var(--muted)}.small{font-size:var(--fs-sm)}.mono{font-family:var(--font-mono)}.row{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}.stack{display:grid;grid-template-columns:minmax(0,1fr);gap:16px}.shell{min-height:100vh}.main{margin-left:var(--side-w);min-width:0}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:var(--fs-body);color:var(--ink);text-decoration:none}.brand-mark{width:32px;height:32px;border-radius:var(--r-sm);flex:none;display:grid;place-items:center;background:var(--brand);color:var(--brand-ink)}.side{position:fixed;inset:0 auto 0 0;z-index:45;width:var(--side-w);display:flex;flex-direction:column;background:var(--surface);border-right:1px solid var(--line)}.side-head{display:flex;align-items:center;justify-content:space-between;padding:20px 20px 12px}.side .side-close{display:none}.nav{flex:1;overflow-y:auto;padding:4px 12px;display:grid;align-content:start;gap:2px}.nav-group{display:grid;gap:2px}.nav-group+.nav-group{margin-top:8px;padding-top:4px;border-top:1px solid var(--line-soft)}.nav-label{padding:16px 12px 6px;font-size:var(--fs-overline);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--subtle)}.nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--r-sm);color:var(--muted);text-decoration:none;font-weight:600;font-size:var(--fs-body)}.nav a svg{flex:none;color:var(--subtle)}.nav a:hover{background:var(--surface-2);color:var(--ink)}.nav a.active{background:var(--brand-soft);color:var(--brand-text)}.nav a.active svg{color:var(--brand)}.side-foot{border-top:1px solid var(--line);padding:12px;display:grid;gap:8px}.who{display:flex;align-items:center;gap:10px;padding:4px;min-width:0}.avatar{width:32px;height:32px;border-radius:50%;flex:none;display:grid;place-items:center;background:var(--surface-2);border:1px solid var(--line);font-weight:700;color:var(--ink-2)}.who-name{font-size:var(--fs-meta);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.who-email{font-size:var(--fs-xs);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobilebar{display:none}.scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:44;background:#0f172a73}.backlink{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-sm);color:var(--muted);text-decoration:none;margin-bottom:6px}.backlink:hover{color:var(--brand-text)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 18px;white-space:nowrap;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font-weight:600;font-size:var(--fs-body);line-height:1;cursor:pointer;transition:background .15s,border-color .15s,color .15s,transform .05s}.btn:hover{background:var(--surface-2)}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn-primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.btn-primary:hover{background:var(--brand-hover);border-color:var(--brand-hover)}.btn-secondary{background:var(--secondary);border-color:var(--secondary);color:#fff}.btn-secondary:hover{background:var(--secondary-hover);border-color:var(--secondary-hover)}.btn-ghost{background:transparent;border-color:transparent;color:var(--muted)}.btn-ghost:hover{background:var(--surface-2);color:var(--ink)}.btn-danger{background:var(--danger-solid);border-color:var(--danger-solid);color:#fff}.btn-sm{height:32px;padding:0 12px;font-size:var(--fs-sm)}.btn-lg{height:48px;padding:0 24px;font-size:var(--fs-body)}.btn-block{width:100%}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm)}.card-head{padding:16px 24px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.card-head h2,.card-head h3{font-size:var(--fs-h3);font-weight:600;display:flex;align-items:center;gap:10px}.card-head .meta{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:var(--fs-sm)}.card-body{padding:20px 24px}.card-body.flush{padding:0}.card-foot{padding:12px 24px;border-top:1px solid var(--line);background:var(--surface-2);border-radius:0 0 var(--r-md) var(--r-md);display:flex;justify-content:flex-end;gap:8px}.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:var(--r-full);font-size:var(--fs-xs);font-weight:600;line-height:1.5;white-space:nowrap;background:var(--surface-2);color:var(--muted);border:1px solid var(--line)}.badge-success{background:var(--success-bg);color:var(--success);border-color:transparent}.badge-warning{background:var(--warning-bg);color:var(--warning);border-color:transparent}.badge-danger{background:var(--danger-bg);color:var(--danger);border-color:transparent}.badge-info{background:var(--info-bg);color:var(--info);border-color:transparent}.badge-code{border-radius:6px;border-color:transparent;background:var(--brand-soft);color:var(--brand-text);letter-spacing:.06em}.alert{display:flex;gap:10px;align-items:flex-start;padding:12px 16px;border-radius:var(--r-sm);font-size:var(--fs-meta);border:1px solid transparent}.alert svg{flex:none;margin-top:2px}.alert-success{background:var(--success-bg);color:var(--success)}.alert-danger{background:var(--danger-bg);color:var(--danger)}.alert-info{background:var(--info-bg);color:var(--info)}.alert-warning{background:var(--warning-bg);color:var(--warning)}.alert b{font-weight:700}.field{display:grid;gap:6px;min-width:0}.field>label,.field-label{font-size:var(--fs-meta);font-weight:500;color:var(--ink-2)}.field .req{color:var(--danger);margin-left:2px}.helper{font-size:var(--fs-xs);color:var(--muted)}.input,.select,.textarea{width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font-size:var(--fs-meta);transition:border-color .15s,box-shadow .15s}.select{cursor:pointer}.textarea{resize:vertical;font-family:var(--font-mono);font-size:var(--fs-sm)}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 20%,transparent)}.input::placeholder,.textarea::placeholder{color:var(--subtle)}.input[aria-invalid=true]{border-color:var(--danger);background:var(--danger-bg)}input[type=checkbox],input[type=radio]{accent-color:var(--brand);width:16px;height:16px;margin:0}.file{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px dashed var(--line);border-radius:var(--r-sm);background:var(--surface-2)}.file input[type=file]{font-size:var(--fs-sm);color:var(--muted);max-width:100%}.file input[type=file]::file-selector-button{height:32px;padding:0 12px;margin-right:12px;cursor:pointer;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font:600 var(--fs-sm) var(--font)}.file svg{color:var(--subtle);flex:none}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 12px;border-radius:var(--r-full);font-size:var(--fs-sm);font-weight:500;border:1px solid var(--line);background:var(--surface);color:var(--ink-2)}.chip:hover{border-color:var(--subtle)}.chip:has(input:checked),.chip[aria-pressed=true]{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-text)}.chip:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:2px}.list-subjects{padding:12px 24px;border-bottom:1px solid var(--line)}.mapping-column{min-width:220px}.mapping-chips{gap:4px}.mapping-chips .chip{cursor:default;white-space:nowrap}.menu{position:relative}.menu-list{position:absolute;right:0;top:calc(100% + 4px);z-index:40;min-width:180px;padding:4px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);box-shadow:var(--shadow-md)}.menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:8px 12px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink);text-align:left;cursor:pointer}.menu-item:hover,.menu-item:focus-visible{background:var(--surface-2)}.menu-item.danger-text{color:var(--danger)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);overflow-x:auto;overflow-y:hidden;scrollbar-width:none}.tab{display:inline-flex;align-items:center;gap:8px;padding:12px 16px;border:0;border-bottom:2px solid transparent;margin-bottom:-1px;background:none;font-weight:600;font-size:var(--fs-meta);color:var(--muted);cursor:pointer;white-space:nowrap}.tab:hover{color:var(--ink)}.tab[aria-selected=true]{color:var(--brand);border-bottom-color:var(--brand)}.table-wrap{overflow:auto;max-height:70vh}.table{width:100%;border-collapse:separate;border-spacing:0;font-size:var(--fs-meta)}.table th{position:sticky;top:0;z-index:1;background:var(--surface-2);text-align:left;padding:12px 16px;font-size:var(--fs-xs);font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--line);white-space:nowrap}.table td{padding:10px 16px;border-bottom:1px solid var(--line-soft);vertical-align:middle}.table tbody tr:last-child td{border-bottom:0}.table tbody tr:hover{background:var(--surface-2)}.table .num{text-align:right;font-variant-numeric:tabular-nums}.table .nowrap{white-space:nowrap}.table th.sticky-col,.table td.sticky-col{position:sticky;left:0;background:var(--surface)}.table th.sticky-col{z-index:2;background:var(--surface-2)}.table tbody tr:hover td.sticky-col{background:var(--surface-2)}.table th.sticky-right,.table td.sticky-right{position:sticky;right:0;background:var(--surface);box-shadow:-1px 0 0 var(--line),-6px 0 8px -6px #0f172a1f}.table th.sticky-right{z-index:2;background:var(--surface-2)}.table tbody tr:hover td.sticky-right{background:var(--surface-2)}.table .row-flag td.sticky-right{background:color-mix(in srgb,var(--danger-bg) 55%,var(--surface))}.grade-val{font-weight:600;font-variant-numeric:tabular-nums}.grade-empty{color:var(--subtle)}.cell-input{width:72px;height:34px;padding:4px 8px;text-align:right;font-variant-numeric:tabular-nums;font-size:var(--fs-meta);border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--ink)}.cell-input:hover{border-color:var(--subtle)}.cell-input[aria-invalid=true]{border-color:var(--danger);background:var(--danger-bg);color:var(--danger)}.cell-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 20%,transparent)}.cell{display:inline-flex;align-items:center;gap:6px;justify-content:flex-end}.saved{color:var(--success);display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);font-weight:600;animation:fade 2s forwards}.save-err{color:var(--danger);display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-xs);font-weight:600}@keyframes fade{0%,70%{opacity:1}to{opacity:0}}.empty{display:grid;justify-items:center;gap:6px;text-align:center;padding:48px 24px;border:2px dashed var(--line);border-radius:var(--r-md);background:var(--surface)}.empty .icon{width:72px;height:72px;border-radius:50%;display:grid;place-items:center;background:var(--surface-2);color:var(--subtle);margin-bottom:8px}.empty h3{font-size:var(--fs-h3);font-weight:600}.empty p{color:var(--muted);font-size:var(--fs-meta);max-width:440px}.empty .btn{margin-top:12px}.empty.flat{border:0}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loader{display:grid;justify-items:center;gap:12px;color:var(--muted)}.loader svg{color:var(--brand)}.skeleton{display:grid;gap:12px}.skeleton i{display:block;height:14px;border-radius:6px;background:var(--line-soft);animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}.logbox{margin:0;padding:12px 16px;border-radius:var(--r-sm);background:var(--tooltip-bg);color:var(--tooltip-ink);font:var(--fs-xs)/1.6 var(--font-mono);max-height:260px;overflow:auto;white-space:pre-wrap}.login{width:100%;max-width:420px;padding:40px 32px;text-align:center;display:grid;gap:12px;justify-items:center}.login .brand-mark{width:56px;height:56px;border-radius:var(--r-md);margin-bottom:4px}.login h1{font-size:var(--fs-h1);font-weight:700}.login p{color:var(--muted);font-size:var(--fs-meta)}.login .btn{margin-top:12px}.login .alert{text-align:left;width:100%}.btn-icon{width:36px;height:36px;padding:0}.btn-icon.btn-xs,.btn-xs{height:24px;padding:0 6px;font-size:var(--fs-xs);gap:4px;border-radius:6px}.btn-icon.btn-xs{width:24px;padding:0}.btn-icon.danger:hover{color:var(--danger);background:var(--danger-bg)}.btn.ok{color:var(--success);border-color:color-mix(in srgb,var(--success) 35%,transparent);background:var(--success-bg)}.btn.no{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 35%,transparent);background:var(--danger-bg)}.tab-count{font-size:var(--fs-xs);font-weight:600;color:var(--subtle)}.tab[aria-selected=true] .tab-count{color:var(--brand-text)}.tab .count{min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-full);display:inline-grid;place-items:center;font-size:var(--fs-overline);font-weight:700;background:var(--danger-solid);color:#fff}.table-wrap.tall{max-height:calc(100vh - 240px)}.row-link{cursor:pointer}.row-flag td,.table .row-flag td.sticky-col{background:color-mix(in srgb,var(--danger-bg) 55%,var(--surface))}.row-total td{background:var(--surface-2);font-weight:600}.th-stack{display:inline-grid;justify-items:end;gap:2px}.th-stack svg{vertical-align:-1px}.th-sub{display:block;font-size:var(--fs-overline);font-weight:500;text-transform:none;letter-spacing:0;color:var(--subtle);white-space:nowrap}.cell-stack{display:inline-grid;justify-items:end;gap:4px}.exam-cell{display:inline-flex;align-items:center;justify-content:flex-end;min-width:72px;height:34px;padding:0 8px;border:1px dashed var(--line);border-radius:6px;color:var(--muted);background:var(--surface-2);font-variant-numeric:tabular-nums;cursor:not-allowed}.cell-input.auto{background:color-mix(in srgb,var(--info-bg) 55%,var(--surface))}.pending{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 8px;border-radius:var(--r-full);background:var(--warning-bg);color:var(--warning);font-size:var(--fs-xs);white-space:nowrap}.section-title{display:flex;align-items:center;gap:8px;padding:14px 24px 10px;font-size:var(--fs-sm);font-weight:700;color:var(--ink-2);border-top:1px solid var(--line)}.card-head+.section-title{border-top:0}.ack-box{display:grid;gap:12px;border-top:1px solid var(--line)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid .span-2{grid-column:span 2}.stepper{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}.stepper li{display:flex;align-items:center;gap:8px;padding:6px 14px 6px 6px;border-radius:var(--r-full);border:1px solid var(--line);color:var(--muted);font-size:var(--fs-sm);font-weight:600;background:var(--surface)}.stepper .dot{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:var(--fs-overline);background:var(--surface-2);border:1px solid var(--line)}.stepper li.done{color:var(--success);border-color:color-mix(in srgb,var(--success) 35%,transparent)}.stepper li.done .dot{background:var(--success);border-color:var(--success);color:#fff}.stepper li.cur{color:var(--brand-text);border-color:var(--brand);background:var(--brand-soft)}.stepper li.cur .dot{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;padding:16px;overflow-y:auto;display:grid;place-items:center;background:#0f172a80}.dialog{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:calc(100vh - 32px)}.dialog-sm{max-width:440px}.dialog-md{max-width:560px}.dialog-lg{max-width:720px}.dialog-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:20px 24px 12px}.dialog-head h2{font-size:var(--fs-h2);font-weight:700}.dialog-body{padding:4px 24px 20px;overflow-y:auto}.dialog-foot{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px;border-top:1px solid var(--line)}.toaster{position:fixed;top:16px;right:16px;z-index:100;display:grid;gap:8px;width:min(400px,calc(100vw - 32px))}.toast{display:flex;align-items:flex-start;gap:10px;padding:12px 8px 12px 14px;border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-md);font-size:var(--fs-meta);animation:toast-in .18s ease-out}.toast>svg{flex:none;margin-top:2px}.toast span{flex:1}.toast-success>svg{color:var(--success)}.toast-error{border-color:color-mix(in srgb,var(--danger) 40%,var(--line))}.toast-error>svg{color:var(--danger)}.toast-info>svg{color:var(--info)}@keyframes toast-in{0%{opacity:0;transform:translateY(-6px)}}@media (max-width: 900px){.main{margin-left:0}.side{transform:translate(-100%);box-shadow:var(--shadow-lg)}.side.animating{transition:transform .2s ease}.side.open{transform:none}.side .side-close{display:inline-flex}.mobilebar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:8px;height:56px;padding:0 8px;background:var(--surface);border-bottom:1px solid var(--line)}}@media (max-width: 768px){.page{padding:20px 16px 48px}.card-head,.card-body,.section-title{padding-left:16px;padding-right:16px}.form-grid{grid-template-columns:1fr}.form-grid .span-2{grid-column:auto}.toaster{left:16px;right:16px;width:auto}}.group-tag{display:inline-flex;align-items:center;gap:4px}.star-on{color:var(--star);fill:var(--star-fill)}.flag-on{color:var(--danger);fill:color-mix(in srgb,var(--danger) 25%,transparent)}.star-btn{color:var(--subtle)}.star-btn.on{color:var(--star);background:var(--warning-bg)}.star-btn.on svg{fill:var(--star-fill)}.flag-btn{color:var(--subtle)}.flag-btn.on{color:var(--danger);background:var(--danger-bg)}.danger-text{color:var(--danger)}.danger-text:hover{background:var(--danger-bg);color:var(--danger)}.seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden}.seg button{border:0;background:var(--surface);padding:6px 12px;font:600 var(--fs-sm) var(--font);color:var(--muted);cursor:pointer}.seg button+button{border-left:1px solid var(--line)}.seg button.on{background:var(--brand-soft);color:var(--brand-text)}.seg button:disabled{opacity:.5;cursor:not-allowed}.member-inline{display:inline-flex;align-items:center;gap:3px;margin-right:10px;white-space:nowrap}.group-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:16px;align-items:start}.member-list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.member-list li{display:flex;align-items:center;gap:8px;font-size:var(--fs-meta)}.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:14px 16px;display:grid;gap:4px}.kpi-label{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);font-weight:600;color:var(--muted)}.kpi-value{font-size:var(--fs-kpi);font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums;color:var(--ink)}.kpi-sub{font-size:var(--fs-xs);color:var(--muted)}.kpi-danger{background:var(--danger-bg);border-color:transparent}.kpi-danger .kpi-value{color:var(--danger)}.kpi-warning{background:var(--warning-bg);border-color:transparent}.kpi-warning .kpi-value{color:var(--warning)}.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:16px}.chart-wrap{position:relative}.chart-wrap svg{width:100%;max-width:720px;height:auto;display:block;overflow:visible;margin:0 auto}.chart-wrap .bar{fill:var(--series-1)}.chart-wrap .bar-low{fill:var(--danger-solid)}.chart-wrap .bar-mid{fill:var(--warning)}.chart-wrap .bar-high{fill:var(--success)}.chart-wrap .grid{stroke:var(--line-soft);stroke-width:1}.chart-wrap .axis{fill:var(--muted);font:500 var(--fs-overline) var(--font)}.chart-wrap .axis.label{fill:var(--ink-2);font-size:var(--fs-xs)}.chart-wrap .axis.value{fill:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}.chart-wrap .threshold{stroke:var(--ink-2);stroke-width:1.5;stroke-dasharray:4 3}.chart-wrap .threshold-label{fill:var(--ink-2);font:600 var(--fs-overline) var(--font)}.chart-tip{position:absolute;transform:translate(-50%,calc(-100% - 10px));pointer-events:none;white-space:nowrap;background:var(--ink);color:var(--surface);font-size:var(--fs-xs);padding:4px 8px;border-radius:6px;box-shadow:var(--shadow-md)}@media (max-width: 768px){.chart-grid,.group-grid{grid-template-columns:1fr}}.calc-box{display:grid;gap:10px;border-top:1px solid var(--line)}.calc-head{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);font-weight:700;color:var(--ink-2)}.ongoing-head>.row{min-width:0;flex:1 1 260px}.ongoing-head .seg{max-width:100%}.total-cell{display:inline-flex;align-items:center;justify-content:flex-end;gap:4px;white-space:nowrap}.table th.gcol{min-width:84px;padding:8px;vertical-align:bottom;text-transform:none;letter-spacing:0}.table th.gcol-on{background:var(--brand-soft);box-shadow:inset 0 -2px 0 var(--brand)}.gcol-head{display:inline-flex;align-items:center;gap:4px;justify-content:flex-end}.gcol-code{font-size:var(--fs-sm);font-weight:700;color:var(--ink)}.gcol-sub{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:120px;margin-left:auto;overflow:hidden;white-space:normal;line-height:1.3;color:var(--muted);font-size:var(--fs-xs);font-weight:500}.gcol-tools{display:flex;justify-content:flex-end;gap:4px;margin-top:6px}.gcol-edit{display:inline-flex;align-items:center;gap:3px;height:24px;padding:0 7px;border:1px solid var(--line);border-radius:var(--r-full);background:var(--surface);color:var(--muted);font:600 var(--fs-xs) var(--font);cursor:pointer}.gcol-edit:hover:not(:disabled){border-color:var(--ink);color:var(--ink)}.gcol-edit.on{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.gcol-edit:disabled{cursor:not-allowed;opacity:.55}.gcol-input{display:inline-flex;align-items:center;justify-content:center;gap:3px;height:24px;padding:0 7px;border:0;border-radius:var(--r-full);background:var(--surface-2);color:var(--muted);font:600 var(--fs-xs) var(--font);cursor:pointer}.gcol-input.on{background:var(--success-bg);color:var(--success)}.gcol-input:disabled{cursor:not-allowed;opacity:.65}.gcol-input:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.gcol-pend{min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-full);display:inline-grid;place-items:center;font-size:var(--fs-overline);font-weight:700;background:var(--warning-bg);color:var(--warning);text-transform:none;letter-spacing:0}.gcol-actions{display:flex;gap:3px;justify-content:flex-end;margin-top:6px;text-transform:none;letter-spacing:0}.gcol-actions .btn-xs{height:22px;padding:0 5px;font-size:var(--fs-overline)}.table td.gcell{position:relative;padding:13px 18px 13px 34px;min-width:84px;vertical-align:middle}.table td.gcell.editing{background:color-mix(in srgb,var(--brand-soft) 45%,transparent)}.g-label{font-weight:600;font-variant-numeric:tabular-nums}.g-label.g-none{color:var(--subtle);font-weight:400}td.gcell.auto .g-label{color:var(--info)}.g-input{width:52px;height:30px;padding:2px 6px;text-align:right;font:600 var(--fs-meta) var(--font);font-variant-numeric:tabular-nums;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--ink)}.g-input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 20%,transparent)}.g-input.dirty{border-color:var(--brand);background:var(--brand-soft)}.g-input[aria-invalid=true]{border-color:var(--danger);background:var(--danger-bg);color:var(--danger)}.g-corner{position:absolute;right:3px;bottom:1px;font-size:var(--fs-overline);line-height:1.2;font-weight:700;color:var(--warning);background:var(--warning-bg);border-radius:4px;padding:0 3px;font-variant-numeric:tabular-nums}.g-lock{position:absolute;left:6px;top:50%;transform:translateY(-50%);width:26px;height:26px;display:grid;place-items:center;padding:0;border:0;border-radius:3px;background:none;color:var(--subtle);cursor:pointer;opacity:0}td.gcell:hover .g-lock,.g-lock:focus-visible,.g-lock.on{opacity:1}.g-lock:hover{background:var(--surface-2);color:var(--ink)}.g-lock.on{color:var(--danger);background:var(--danger-bg)}.g-lock:disabled{cursor:default}td.gcell.g-locked{background:repeating-linear-gradient(135deg,transparent 0 6px,var(--surface-2) 6px 8px)}.g-rowname{display:inline-flex;align-items:center;gap:6px}.g-rowlock{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 8px;border:0;border-radius:3px;background:none;color:var(--subtle);font:600 var(--fs-xs) var(--font);cursor:pointer;opacity:0}tr:hover .g-rowlock,.g-rowlock:focus-visible,.g-rowlock.on{opacity:1}.g-rowlock:hover{background:var(--surface-2);color:var(--ink)}.g-rowlock.on{background:var(--danger-bg);color:var(--danger)}@media (hover: none){.g-lock,.g-rowlock{opacity:1}}.g-corner-wrap{position:absolute;right:2px;bottom:0;display:inline-flex;gap:1px}.g-corner-wrap .g-corner{position:static;border:0;cursor:pointer}.g-corner.take:hover{background:var(--warning);color:#fff}.g-corner.reject{color:var(--danger);background:var(--danger-bg)}.g-corner.reject:hover{background:var(--danger-solid);color:#fff}.class-chips{display:flex;flex-wrap:wrap;gap:4px}.row-detail>td{background:var(--surface-2, var(--bg));padding-top:4px;padding-bottom:12px}.table-inner{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm)}.table-inner th,.table-inner td{padding:6px 10px}.mini-details{display:inline-block;text-align:left}.mini-details summary{cursor:pointer;list-style:none;text-align:right}.mini-details summary::-webkit-details-marker{display:none}.mini-details summary b{border-bottom:1px dashed currentColor}.mini-details ul{margin:4px 0 0;padding-left:16px;font-size:var(--fs-xs);color:var(--muted);max-height:160px;overflow:auto;white-space:nowrap}.tone-info{color:var(--info)}.tone-muted{color:var(--muted)}.ri-table td,.ri-table th{padding:8px 10px}.ri-table td:first-child,.ri-table th:first-child{text-align:left}.ri-name{white-space:nowrap}.ri-subj{text-transform:none}.ri-sub{font-size:var(--fs-xs);color:var(--muted);margin-top:2px}.tt,.tt-card{min-width:0}.tt-toolbar,.tt-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.tt-toolbar{justify-content:space-between;min-width:0}.tt-toolbar .chips{flex:1 1 280px;min-width:0}.tt-actions{margin-left:auto}.tt-actions .field label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.tt-actions .select{width:auto;height:32px;font-size:var(--fs-sm)}.tt-json-menu .menu>.btn{width:auto;height:32px;padding:0 12px;border-color:var(--line);background:var(--surface);color:var(--ink);font-size:var(--fs-sm)}.tt-json-menu .menu>.btn:hover{background:var(--surface-2)}.tt-wrap{max-height:none}.tt-grid{min-width:850px;table-layout:fixed}.tt-grid th:first-child{width:120px}.tt-grid th{font-size:var(--fs-meta);font-weight:700;color:var(--ink);letter-spacing:.02em;border-bottom:2px solid var(--line)}.tt-grid th:not(:first-child){min-width:180px}.tt-grid th.tt-today{background:var(--brand-soft);color:var(--brand-text)}.tt-grid td{padding:8px;vertical-align:top;border-right:1px solid var(--line-soft)}.tt-grid tbody tr:hover{background:transparent}.tt-slot{font-size:var(--fs-meta);color:var(--ink)}.tt-time{color:var(--muted);font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.tt-cell{min-height:96px;display:grid;align-content:start;gap:6px}.tt-class{position:relative;display:grid;justify-items:start;gap:5px;padding:9px;border:1px solid var(--line);border-radius:2px;background:var(--surface);cursor:pointer}.tt-class:hover{border-color:var(--brand)}.tt-class-link{padding:0 24px 0 0;border:0;background:none;color:var(--ink);font-weight:700;text-align:left;overflow-wrap:anywhere;cursor:pointer}.tt-class-link:hover{text-decoration:underline}.tt-room{display:flex;align-items:center;gap:4px;color:var(--muted);font-size:var(--fs-xs)}.tt-remove,.tt-add{border:0;background:transparent;color:var(--subtle);cursor:pointer;opacity:0}.tt-remove{position:absolute;top:2px;right:2px;width:28px;height:28px;display:grid;place-items:center;padding:0}.tt-add{justify-self:center;padding:4px 12px;border-radius:var(--r-sm)}.tt-cell:hover .tt-add,.tt-class:hover .tt-remove,.tt-class:focus-within .tt-remove,.tt-add:focus-visible,.tt-remove:focus-visible{opacity:1}.tt-add:hover,.tt-remove:hover{background:var(--surface-2);color:var(--brand-text)}.tt-unscheduled{display:grid;gap:10px}.tt-unscheduled-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.tt-unscheduled-row b{flex:1 1 200px;font-size:var(--fs-meta)}.tt-unscheduled-row .select,.tt-unscheduled-row .input{width:auto;flex:1 1 120px}.tt-picker{max-height:300px;overflow:auto;display:grid;gap:4px}.tt-picker label{display:flex;align-items:flex-start;gap:10px;padding:8px;border-radius:var(--r-sm);cursor:pointer}.tt-picker label:hover{background:var(--surface-2)}@media (hover: none){.tt-add,.tt-remove{opacity:1}}.tt-grid td.tt-flex{background:var(--surface-2)}.tt-grid td.tt-flex .tt-cell{border-top:1px dashed var(--line)}.search-box{position:relative;flex:1 1 260px;max-width:360px}.icon-input{position:relative;max-width:360px}.input-icon{position:absolute;left:12px;top:12px;color:var(--subtle)}.input.input-with-icon{padding-left:36px}.text-ink{color:var(--ink)}.text-subtle{color:var(--subtle)}.text-danger{color:var(--danger)}.text-warning{color:var(--warning)}.text-success{color:var(--success)}.inline-center{display:inline-flex;align-items:center;gap:8px}.title-inline{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}.align-center{align-items:center}.self-start{align-self:start}.flex-1{flex:1}.mt-6{margin-top:6px}.mt-12{margin-top:12px}.mt-16{margin-top:16px}.mb-16{margin-bottom:16px}.ml-6{margin-left:6px}.ml-8{margin-left:8px}.ml-12{margin-left:12px}.ml-auto{margin-left:auto}.cursor-pointer{cursor:pointer}.font-normal{font-weight:400}.textarea.font-sans{font-family:var(--font)}.text-wrap{white-space:normal}.cell-wrap-wide{white-space:normal;min-width:220px}.comment-cell{max-width:320px;white-space:normal}.feedback-reason{white-space:normal;max-width:280px;margin-top:4px}.import-email-list{max-height:140px;overflow:auto;margin-top:6px}.table-helper{padding:8px 16px}.select.select-compact{width:auto;min-height:32px;padding:4px 8px}.select.semester-select{min-width:160px}.cell-input.code-input{width:72px;text-align:left;text-transform:uppercase}.cell-input.input-condition{width:72px;text-align:left}.chip.chip-compact{padding:4px 10px}.card-body.card-body-compact{padding-top:12px;padding-bottom:12px}.table-wrap-bordered{border:1px solid var(--line);border-radius:var(--r-sm)}.w-28{width:28px}.w-56{width:56px}.cell-input.w-64{width:64px}.cell-input.w-72{width:72px}.w-90{width:90px}.w-100{width:100px}.w-110{width:110px}.w-120{width:120px}.ov-status{display:grid;gap:12px}.ov-stack{display:flex;height:12px;border-radius:2px;overflow:hidden;background:var(--surface-2);gap:2px}.ov-seg{flex-basis:0;min-width:6px}.ov-ongoing{background:var(--info)}.ov-converted{background:var(--warning)}.ov-finalized{background:var(--success)}.ov-cancelled{background:var(--subtle)}.ov-legend{display:flex;flex-wrap:wrap;gap:8px 20px}.ov-legend-item{display:inline-flex;align-items:center;gap:8px;color:var(--muted);font-size:var(--fs-meta);text-decoration:none}.ov-legend-item:hover{color:var(--ink)}.ov-legend-item b{color:var(--ink);font-variant-numeric:tabular-nums}.ov-dot{width:10px;height:10px;border-radius:2px}.ov-badges{display:flex;flex-wrap:wrap;gap:4px}.ov-progress{display:flex;align-items:center;gap:8px;min-width:140px}.ov-bar{flex:1;height:6px;border-radius:2px;background:var(--surface-2);overflow:hidden}.ov-bar span{display:block;height:100%;background:var(--brand)}.ov-pct{width:40px;text-align:right;font-size:var(--fs-sm);font-variant-numeric:tabular-nums;color:var(--ink)}.swatch{display:inline-block;flex:none;width:14px;height:10px;border-radius:2px;background:var(--sw);vertical-align:middle;margin-right:6px}.subj{display:inline-flex;align-items:center;white-space:nowrap}.subj .swatch{margin-right:6px}.chip .swatch{margin-right:2px}.color-pick{display:flex;flex-wrap:wrap;gap:8px}.color-opt{width:32px;height:24px;padding:0;border:2px solid transparent;border-radius:3px;background:var(--sw);background-clip:padding-box;box-shadow:0 0 0 1px var(--line);cursor:pointer}.color-opt:hover{box-shadow:0 0 0 1px var(--ink)}.color-opt[aria-checked=true]{border-color:var(--surface);box-shadow:0 0 0 2px var(--ink)}.co-life{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px}.co-next{display:flex;align-items:center;gap:12px;flex-wrap:wrap;color:var(--muted);font-size:var(--fs-meta)}.co-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:16px}@media (max-width: 900px){.co-grid{grid-template-columns:1fr}}.co-todos{list-style:none;margin:0;padding:0}.co-todo{display:flex;align-items:center;gap:12px;padding:12px 20px;border-top:1px solid var(--line-soft);font-size:var(--fs-meta);color:var(--ink)}.co-todo:first-child{border-top:0}.co-todo>span{flex:1;min-width:0}.co-todo b{font-variant-numeric:tabular-nums}.co-t-warning>svg{color:var(--warning)}.co-t-danger>svg{color:var(--danger)}.co-t-info>svg{color:var(--info)}.co-done{display:flex;align-items:center;gap:8px;color:var(--success);font-weight:600}.co-info{display:grid;grid-template-columns:max-content 1fr;gap:10px 16px;margin:0;font-size:var(--fs-meta)}.co-info dt{color:var(--muted);font-size:var(--fs-sm);font-weight:600}.co-info dd{margin:0;color:var(--ink)}.co-info dd>div+div{margin-top:4px}.co-info dd svg{vertical-align:-2px;color:var(--muted)}.co-sub{color:var(--muted);font-size:var(--fs-sm)}.co-sub svg{vertical-align:-2px}.co-code{color:var(--ink)}.co-syl{display:flex;flex-wrap:wrap;gap:8px}.co-syl-item{display:inline-flex;align-items:baseline;gap:8px;padding:6px 12px;border:1px solid var(--line);border-radius:2px;background:var(--surface)}.co-syl-w{font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;min-width:32px}.co-syl-name{color:var(--ink);font-size:var(--fs-meta)}.co .table,.co .badge{font-variant-numeric:tabular-nums}.co .card,.co-alert{min-width:0}.co-input-toggle{min-height:32px;display:inline-flex;align-items:center;gap:5px;padding:0 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--muted);font-size:var(--fs-sm);cursor:pointer}.co-input-toggle.co-input-on{background:var(--info-bg);border-color:transparent;color:var(--info)}.co-input-toggle:disabled{opacity:.55;cursor:not-allowed}.co-count-button{cursor:pointer;border:0;font:inherit;font-size:var(--fs-xs)}.co-count-button:hover{filter:brightness(.95)}.co-filters{padding:12px 24px}.co-missing-codes{display:flex;flex-wrap:wrap;gap:4px}.co-syl-note{margin-top:12px}.co-alert{color:var(--ink);flex-wrap:wrap}.co-alert>svg{color:var(--warning)}.co-alert>span{flex:1 1 220px;min-width:0}.card-body>.co-alert{margin-top:12px}.co-check-summary{color:var(--warning);font-size:var(--fs-sm)}.co-checks{list-style:none;padding:0;margin:0 0 12px;display:grid;gap:8px}.co-checks li{display:flex;align-items:flex-start;gap:8px}.co-checks svg{flex:none;margin-top:3px}.co-check-danger{color:var(--danger)}.co-check-warning{color:var(--warning)}.grp-root{min-width:0}.grp-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.grp-center{justify-content:center}.grp-nowrap{flex-wrap:nowrap}.grp-toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px}.grp-toolbar a.badge{text-decoration:none}.grp-label{color:var(--muted);font-size:var(--fs-sm);font-weight:600}.grp-hint{margin:0;color:var(--muted);font-size:var(--fs-sm)}.grp-name{color:var(--ink);font-size:var(--fs-meta)}.grp-roll{color:var(--muted);font-size:var(--fs-xs);font-family:var(--font-mono)}.grp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:16px;align-items:start}.grp-forming{display:flex;align-items:center;flex-wrap:wrap;gap:12px;padding:12px 16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);color:var(--muted)}.grp-forming.on{border-color:transparent;background:var(--info-bg);color:var(--info)}.grp-forming-text{flex:1 1 280px;min-width:0;display:grid;gap:2px}.grp-forming-text b{color:var(--ink);font-size:var(--fs-meta)}.grp-forming-text span{color:var(--muted);font-size:var(--fs-sm)}.grp-card{min-width:0;padding:16px 18px;display:grid;gap:12px}.grp-card-locked{background:var(--surface-2)}.grp-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.grp-title{min-width:0;display:grid;gap:6px}.grp-title h3{margin:0;font-size:var(--fs-body);font-weight:700;color:var(--ink);overflow-wrap:anywhere}.grp-meta{color:var(--muted);font-size:var(--fs-sm);font-variant-numeric:tabular-nums}.grp-rename{display:flex;gap:6px;align-items:center;min-width:0;flex:1}.grp-rename .input{height:32px;min-width:0}.grp-lock{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 9px;border:1px solid var(--line);border-radius:var(--r-full);background:var(--surface);color:var(--muted);font:600 var(--fs-xs) var(--font);cursor:pointer;white-space:nowrap}.grp-lock:hover{border-color:var(--ink);color:var(--ink)}.grp-lock.on{background:var(--success-bg);border-color:transparent;color:var(--success)}.grp-lock.on-info{background:var(--info-bg);border-color:transparent;color:var(--info)}.grp-lock:disabled{opacity:.55;cursor:not-allowed}.grp-members{list-style:none;margin:0;padding:0;display:grid}.grp-member{display:grid;grid-template-columns:28px minmax(0,1fr) auto 28px;align-items:center;gap:6px;padding:6px 0;border-top:1px solid var(--line-soft)}.grp-member:first-child{border-top:0}.grp-who{min-width:0;display:grid}.grp-who .grp-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grp-star{width:28px;height:28px;display:grid;place-items:center;border:0;border-radius:var(--r-sm);background:none;color:var(--line);cursor:pointer}.grp-star:hover:not(:disabled){color:var(--star);background:var(--surface-2)}.grp-star.on{color:var(--star)}.grp-star.on svg{fill:var(--star-fill)}.grp-star:disabled{cursor:default}.grp-remove{width:28px;height:28px;color:var(--subtle)}.grp-icon-space{width:28px}.grp-flags{grid-column:2 / -1;display:flex;flex-wrap:wrap;align-items:center;gap:6px}.grp-reason{color:var(--ink);font-size:var(--fs-sm);font-style:italic}.grp-empty{color:var(--muted);font-size:var(--fs-sm);padding:6px 0}.grp-add .select{height:34px;font-size:var(--fs-sm);color:var(--muted)}.grp-notes{display:grid;gap:8px}.grp-leader-note{background:var(--surface-2);border-radius:var(--r-sm);padding:8px 10px;overflow-wrap:anywhere}.grp-leader-note p{margin:4px 0 0;color:var(--ink);font-size:var(--fs-sm);white-space:pre-wrap}.grp-private{border-top:1px solid var(--line-soft);padding-top:10px}.grp-private summary{display:flex;align-items:center;gap:6px;cursor:pointer;color:var(--muted);font-size:var(--fs-sm);font-weight:600;list-style:none}.grp-private summary::-webkit-details-marker{display:none}.grp-private[open] summary svg{transform:rotate(180deg)}.grp-private[open]{display:grid;gap:8px}.grp-private .btn{justify-self:start}.grp-textarea{font-family:var(--font)}.grp-title-btn{padding:0;border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;overflow-wrap:anywhere}.grp-title-btn:hover{color:var(--brand-text);text-decoration:underline}.grp-topic{margin:0;color:var(--ink-2, var(--ink));font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grp-open{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:8px 0 0;border:0;border-top:1px solid var(--line-soft);background:none;color:var(--muted);font:600 var(--fs-sm) var(--font);cursor:pointer;text-align:left}.grp-open:hover{color:var(--brand-text)}.grp-detail{display:grid;gap:18px}.grp-detail-status{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:10px}.grp-detail-lock{display:grid;gap:6px;justify-items:start;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm)}.grp-detail-sec{display:grid;gap:10px}.grp-detail-sec h4{margin:0;color:var(--ink);font-size:var(--fs-meta);font-weight:700}.grp-links{display:grid;gap:6px}.grp-link-row{display:grid;grid-template-columns:minmax(0,140px) minmax(0,1fr) 32px 32px;gap:6px;align-items:center}.grp-link-row .input{height:34px}.grp-add-link{justify-self:start}.grp-detail-save{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}.grp-error{color:var(--danger);font-size:var(--fs-sm)}.grp-detail-members{list-style:none;margin:0;padding:0;display:grid;gap:6px}.grp-detail-members li{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.grp-star-icon{color:var(--star);fill:var(--star-fill)}.grp-star-space{width:14px}.grp-tag{display:inline-flex;align-items:center;gap:4px;height:24px;padding:0 8px;border:1px solid var(--line);border-radius:var(--r-full);background:var(--surface);color:var(--ink);font-size:var(--fs-xs);font-weight:600;white-space:nowrap}.grp-tag .swatch{width:10px;height:8px;margin:0}.grp-tag-val{color:var(--muted);font-weight:500;font-variant-numeric:tabular-nums}.grp-tag-empty{border-style:dashed;color:var(--subtle);font-weight:500}.grp-tag-btn{padding:0;border:0;background:none;cursor:pointer;border-radius:var(--r-full)}.grp-tag-btn:hover .grp-tag{border-color:var(--ink)}.grp-tag-btn+.menu-list{right:0;left:auto;min-width:180px}.grp-score-head{flex-wrap:wrap;gap:10px}.grp-score-head .seg{flex-wrap:wrap;max-width:100%}.grp-score-intro{padding-top:0;padding-bottom:12px}.grp-score-table td{vertical-align:middle}.grp-cell-code{font-weight:600;color:var(--ink);white-space:nowrap;vertical-align:top!important}.grp-grade{width:76px;height:32px;text-align:right;font-variant-numeric:tabular-nums}.grp-score-note{min-width:160px;height:32px}.grp-proposed{display:block;color:var(--info);font-size:var(--fs-xs)}.grp-score-members{display:grid;gap:4px}.grp-score-member{display:flex;align-items:center;gap:8px}.grp-score{margin-left:auto;min-width:36px;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}.grp-changed{font-weight:700;color:var(--brand-text)}.grp-free{list-style:none;margin:0;padding:8px 20px 16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,240px),1fr));gap:4px 16px}.grp-free li{display:flex;align-items:center;gap:8px;min-width:0}.grp-free .grp-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grp-count{width:100px}.grp-tag-editor{display:grid;grid-template-columns:minmax(0,1fr) 110px 36px;align-items:end;gap:8px 10px;padding-bottom:12px;border-bottom:1px solid var(--line-soft)}.grp-tag-colors{grid-column:1 / -1}.grp-color-orange{--sw: #f36c21}.grp-color-red{--sw: #dc2626}.grp-color-pink{--sw: #db2777}.grp-color-purple{--sw: #7c3aed}.grp-color-indigo{--sw: #4f46e5}.grp-color-blue{--sw: #2563eb}.grp-color-cyan{--sw: #0891b2}.grp-color-teal{--sw: #0d9488}.grp-color-green{--sw: #16a34a}.grp-color-lime{--sw: #65a30d}.grp-color-amber{--sw: #d97706}.grp-color-slate{--sw: #64748b}.tab .count-muted{background:var(--surface-2);color:var(--muted)}.tab .count-ok{background:var(--success-bg);color:var(--success)}.tab .count-warn{background:var(--warning-bg);color:var(--warning)}.cs-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}.cs-tile{display:grid;gap:2px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);text-align:left;cursor:pointer;font:inherit}.cs-tile:hover{border-color:var(--ink-2, var(--ink))}.cs-label{color:var(--muted);font-size:var(--fs-xs);font-weight:600}.cs-value{color:var(--ink);font-size:var(--fs-h2);font-weight:700;line-height:1.15;font-variant-numeric:tabular-nums}.cs-sub{color:var(--muted);font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cs-danger{background:var(--danger-bg);border-color:transparent}.cs-danger .cs-value{color:var(--danger)}.cs-warning{background:var(--warning-bg);border-color:transparent}.cs-warning .cs-value{color:var(--warning)}.cs-success{background:var(--success-bg);border-color:transparent}.cs-success .cs-value{color:var(--success)}.cs-info{background:var(--info-bg);border-color:transparent}.cs-info .cs-value{color:var(--info)}td.gcell.g-zero{background:var(--danger-bg)}td.gcell.g-zero .g-label{color:var(--danger);font-weight:700}.gp-layout{display:grid;grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:16px;align-items:start}@media (max-width: 960px){.gp-layout{grid-template-columns:1fr}}.gp-form,.gp-cols{display:grid;gap:14px}.gp-foot{display:flex;justify-content:flex-end;align-items:center;gap:10px;flex-wrap:wrap}.gp-locks{display:grid;gap:12px}.gp-lock-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.gp-lock-row>div{display:grid;gap:2px;flex:1 1 180px;min-width:0}.gp-lock-row b{color:var(--ink);font-size:var(--fs-meta)}.gp-ready{margin:0;padding:8px 10px;border-radius:var(--r-sm);background:var(--success-bg);color:var(--success);font-size:var(--fs-sm);font-weight:600}.gp-log-form{display:grid;gap:8px}.gp-log-actions{display:flex;align-items:center;justify-content:space-between;gap:8px}.gp-log{list-style:none;margin:0;padding:0 20px 16px;display:grid;gap:10px}.gp-log li{padding:10px 12px;border-radius:var(--r-sm);background:var(--surface-2)}.gp-log li.grp-hint{background:none;padding:0}.gp-log-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.gp-log-time{color:var(--muted);font-size:var(--fs-xs);font-weight:600;font-variant-numeric:tabular-nums}.gp-log p{margin:4px 0 0;color:var(--ink);font-size:var(--fs-meta);white-space:pre-wrap;overflow-wrap:anywhere}.gp-log-legacy{border:1px dashed var(--line)}.gp-members{list-style:none;margin:0;padding:8px 20px 16px;display:grid;gap:8px}.gp-members li{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
