:root{--color-primary: #078ea7;--color-primary-hover: #067990;--color-primary-soft: #e7f6f8;--color-sidebar: #0a2f48;--color-sidebar-deep: #062238;--color-page-bg: #eef4f7;--color-surface: #ffffff;--color-surface-raised: #fbfdfe;--color-muted-surface: #f6f9fb;--color-text: #142d3e;--color-muted: #647b8c;--color-border: #dbe6ec;--color-border-strong: #b9cad4;--color-success: #168a67;--color-success-soft: #e5f5ef;--color-warning: #b9820c;--color-warning-soft: #fff5d9;--color-danger: #c95545;--color-danger-soft: #fff0ed;--color-info: #397ca8;--color-info-soft: #eaf4fa;--color-violet: #7559b8;--color-violet-soft: #f0ebfa;--sidebar-width: 276px;--topbar-height: 70px;--radius: 8px;--radius-control: 6px;--space-page-x: 32px;--space-page-y: 28px;--space-grid: 16px;--shadow-card: 0 10px 28px rgba(13, 55, 75, .08);--shadow-card-hover: 0 16px 36px rgba(13, 55, 75, .12);--shadow-popover: 0 20px 58px rgba(8, 32, 47, .24);--focus-ring: 0 0 0 3px rgba(7, 142, 167, .14);font-family:Noto Sans SC,PingFang SC,Microsoft YaHei,Arial,sans-serif;color:var(--color-text);background:var(--color-page-bg);font-synthesis:none}*{box-sizing:border-box}html,body,#app{min-width:320px;min-height:100%}body{margin:0;background:linear-gradient(180deg,#f6fafc 0%,var(--color-page-bg) 42%,#eaf2f6 100%)}button,input,select,textarea{font:inherit}button{border:0}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;z-index:50;display:flex;width:var(--sidebar-width);min-height:100vh;flex-direction:column;color:#fff;border-right:1px solid rgba(255,255,255,.1);background:linear-gradient(180deg,#ffffff14,#fff0 32%),linear-gradient(180deg,var(--color-sidebar-deep) 0%,var(--color-sidebar) 46%,#086b86 100%);box-shadow:10px 0 30px #0725391f}.brand{display:flex;min-height:88px;align-items:center;gap:13px;padding:18px 22px;border-bottom:1px solid rgba(255,255,255,.12)}.brand-mark,.login-mark{display:grid;place-items:center;color:#fff;background:#ffffff1f;border:1px solid rgba(255,255,255,.28)}.brand-mark{width:44px;height:44px;border-radius:8px}.brand strong,.brand span{display:block}.brand strong{font-size:18px;line-height:1.3}.brand span{margin-top:3px;color:#ffffffa3;font-size:11px}.side-nav{display:grid;gap:6px;padding:16px 12px}.side-nav a{position:relative;display:grid;grid-template-columns:24px minmax(0,1fr);min-height:44px;align-items:center;gap:10px;padding:0 14px;color:#ffffffc7;border-radius:6px;transition:background .16s ease,color .16s ease,transform .16s ease}.side-nav a svg{justify-self:center;stroke-width:2}.side-nav a:hover,.side-nav a.active{color:#fff;background:#16bbcf6b}.side-nav a.active:before{position:absolute;left:7px;width:3px;height:22px;border-radius:999px;background:#8feaf1;content:""}.sidebar-status{margin:auto 18px 20px;padding:15px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#ffffff14}.sidebar-status strong{display:block;margin-top:8px;font-size:15px}.status-line{display:flex;align-items:center;gap:8px;color:#ffffffb8;font-size:12px}.main-shell{min-width:0;margin-left:var(--sidebar-width)}.topbar{position:sticky;top:0;z-index:40;display:flex;height:var(--topbar-height);align-items:center;gap:18px;padding:0 var(--space-page-x);border-bottom:1px solid var(--color-border);background:#ffffffeb;box-shadow:0 1px #fffc;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.topbar-title span,.page-heading span,.panel-heading span{display:block;color:var(--color-muted);font-size:11px;font-weight:700}.topbar-title strong{display:block;margin-top:2px;font-size:18px}.topbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto}.content-shell{width:min(100%,1540px);margin:0 auto;padding:var(--space-page-y) var(--space-page-x) 44px}.page-stack{display:grid;gap:20px}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:56px}.page-heading h1{margin:4px 0 0;font-size:27px;line-height:1.25}.primary-button,.secondary-button,.link-button,.icon-button{display:inline-flex;min-height:40px;align-items:center;justify-content:center;gap:8px;border-radius:var(--radius-control);cursor:pointer;font-weight:700;line-height:1;white-space:nowrap;transition:background .16s ease,border-color .16s ease,box-shadow .16s ease,color .16s ease,opacity .16s ease,transform .16s ease}.primary-button svg,.secondary-button svg,.link-button svg,.icon-button svg{width:18px;height:18px;flex:0 0 auto}.primary-button{padding:0 16px;color:#fff;background:var(--color-primary);box-shadow:0 8px 18px #078ea729}.primary-button:hover{background:var(--color-primary-hover);box-shadow:0 10px 22px #078ea738}.secondary-button,.link-button{padding:0 14px;color:var(--color-text);border:1px solid var(--color-border);background:linear-gradient(180deg,#fff,#f9fbfc)}.secondary-button:hover,.link-button:hover{border-color:var(--color-primary);color:var(--color-primary-hover);box-shadow:0 8px 18px #0d374b14}.icon-button{width:40px;height:40px;min-width:40px;color:var(--color-text);border:1px solid var(--color-border);background:linear-gradient(180deg,#fff,#f9fbfc)}.icon-button:hover{border-color:var(--color-primary);color:var(--color-primary-hover)}.icon-button.danger{color:var(--color-danger)}button:disabled{cursor:not-allowed;opacity:.58}.full{width:100%}.stat-grid{display:grid;align-items:stretch;gap:var(--space-grid)}.stat-grid.five{grid-template-columns:repeat(5,minmax(0,1fr))}.stat-grid.compact{grid-template-columns:repeat(4,minmax(0,1fr))}.stat-card,.platform-card,.policy-panel,.filter-panel,.table-panel,.login-panel{border:1px solid var(--color-border);border-radius:var(--radius);background:linear-gradient(180deg,var(--color-surface) 0%,var(--color-surface-raised) 100%);box-shadow:var(--shadow-card)}.stat-card{position:relative;display:grid;grid-template-columns:48px minmax(0,1fr);align-items:center;gap:14px;min-height:98px;padding:18px;overflow:hidden}.stat-card.small{min-height:86px}.stat-card strong{display:block;font-size:25px;line-height:1.15}.stat-card span{display:block;margin-top:3px;color:var(--color-muted);font-size:12px}.stat-icon{display:grid;width:48px;height:48px;flex:0 0 auto;place-items:center;border-radius:8px}.stat-icon svg,.platform-icon svg,.metric-icon svg{width:20px;height:20px;stroke-width:2}.stat-icon.teal,.platform-icon{color:var(--color-primary-hover);background:var(--color-primary-soft)}.stat-icon.green{color:var(--color-success);background:var(--color-success-soft)}.stat-icon.gold{color:var(--color-warning);background:var(--color-warning-soft)}.stat-icon.violet{color:var(--color-violet);background:var(--color-violet-soft)}.stat-icon.blue{color:var(--color-info);background:var(--color-info-soft)}.stat-icon.red{color:var(--color-danger);background:var(--color-danger-soft)}.platform-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:stretch;gap:var(--space-grid)}.platform-card{display:grid;gap:16px;min-height:210px;padding:20px}.platform-head{display:grid;grid-template-columns:48px minmax(0,1fr) 40px;gap:12px;align-items:start}.platform-icon{display:grid;width:48px;height:48px;place-items:center;border-radius:8px}.platform-head h2{margin:0;font-size:17px;line-height:1.35}.platform-head p{margin:6px 0 0;color:var(--color-muted);font-size:12px;line-height:1.55}.platform-count{display:flex;align-items:baseline;gap:10px}.platform-count strong{font-size:30px;line-height:1}.platform-count span{color:var(--color-muted);font-size:12px}.table-stats{display:flex;flex-wrap:wrap;gap:8px}.table-stats span,.role-badge,.status-badge{display:inline-flex;min-height:26px;align-items:center;border-radius:6px;font-size:12px;font-weight:700}.table-stats span{padding:0 9px;color:var(--color-info);background:var(--color-info-soft)}.table-stats span.muted{color:var(--color-muted);background:var(--color-muted-surface)}.policy-panel{display:flex;min-width:0;flex-direction:column;padding:20px}.panel-heading strong{display:block;margin-top:4px;font-size:18px}.policy-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch;gap:var(--space-grid);margin-top:18px}.policy-grid div{min-height:82px;padding:15px;border:1px solid var(--color-border);border-radius:8px;background:linear-gradient(180deg,#fff 0%,var(--color-muted-surface) 100%)}.policy-grid span{display:block;color:var(--color-muted);font-size:12px}.policy-grid strong{display:block;margin-top:5px;font-size:15px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:64px;padding:15px 18px;border-bottom:1px solid var(--color-border);background:linear-gradient(180deg,#fff,#f9fcfd)}.panel-head strong,.panel-head span,.muted{display:block}.panel-head strong{font-size:16px}.panel-head span,.muted{color:var(--color-muted);font-size:12px}.block{margin-top:4px}.split-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(320px,.95fr);gap:var(--space-grid);align-items:stretch}.form-grid-roomy{margin-top:18px}.form-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:18px}.policy-panel>.form-actions{margin-top:18px;padding-top:0}.primary-button.compact,.secondary-button.compact{min-height:32px;padding:0 10px;font-size:12px}.danger-text{color:var(--color-danger)}.tag,.status{display:inline-flex;min-height:28px;align-items:center;justify-content:center;border-radius:6px;font-size:12px;font-weight:700;line-height:1}.tag{padding:0 10px;color:var(--color-info);background:var(--color-info-soft)}.tag.teal{color:var(--color-primary-hover);background:var(--color-primary-soft)}.tag.green,.status.green{color:var(--color-success);background:var(--color-success-soft)}.tag.gold,.status.gold{color:var(--color-warning);background:var(--color-warning-soft)}.tag.red,.status.red{color:var(--color-danger);background:var(--color-danger-soft)}.tag.violet,.status.violet{color:var(--color-violet);background:var(--color-violet-soft)}.status{padding:0 10px}.pill-list,.student-mini-list{display:flex;flex-wrap:wrap;gap:7px}.student-mini-list{margin-top:12px}.metric-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch;gap:12px;margin-top:16px}.metric-strip.padded{margin-top:0;padding:18px}.metric-strip.compact-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.metric{display:grid;grid-template-columns:38px minmax(0,1fr);min-height:76px;align-items:center;gap:11px;padding:13px;border:1px solid var(--color-border);border-radius:8px;background:linear-gradient(180deg,#fff 0%,var(--color-muted-surface) 100%)}.metric-icon{display:grid;width:38px;height:38px;flex:0 0 auto;place-items:center;color:var(--color-primary-hover);border-radius:8px;background:var(--color-primary-soft)}.metric strong,.metric span{display:block}.metric strong{font-size:18px}.metric span{margin-top:2px;color:var(--color-muted);font-size:12px}.choice-list{display:grid;max-height:56vh;overflow:auto;border:1px solid var(--color-border);border-radius:8px;background:#fff}.choice-row{display:grid;grid-template-columns:18px minmax(0,1fr) max-content;gap:12px;align-items:center;min-height:62px;padding:12px 14px;border-bottom:1px solid var(--color-border)}.choice-row:last-child{border-bottom:0}.choice-row strong,.choice-row small{display:block}.choice-row small{margin-top:3px;color:var(--color-muted);font-size:12px}.checkbox-row{display:inline-grid;grid-template-columns:18px minmax(0,1fr);gap:10px;align-items:start;color:var(--color-text);font-size:13px;font-weight:700}.checkbox-row.boxed{min-height:62px;padding:13px;border:1px solid var(--color-border);border-radius:8px;background:linear-gradient(180deg,#fff,#fbfdfe)}.checkbox-row strong,.checkbox-row small{display:block}.checkbox-row small{margin-top:4px;color:var(--color-muted);font-size:12px;font-weight:500;line-height:1.5}.toggle-list,.reviewer-grid{display:grid;align-items:stretch;gap:12px;margin-top:16px}.reviewer-grid{grid-template-columns:repeat(2,minmax(0,1fr));max-height:452px;overflow:auto;padding-right:4px}.inline-filters{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:flex-end}.inline-filters.align-end{justify-content:flex-start;align-items:end;margin-top:14px;margin-bottom:12px}.inline-filters input,.inline-filters select{width:180px}.compact-field{min-width:180px}.mono-textarea{font-family:Consolas,SFMono-Regular,Menlo,Monaco,monospace;font-size:12px}.export-grid,.ai-cost-grid,.operation-grid,.achievement-grid{display:grid;align-items:stretch;gap:12px}.export-grid{grid-template-columns:repeat(2,minmax(0,1fr));margin-top:14px}.export-option,.cost-item,.operation-item,.achievement-item{border:1px solid var(--color-border);border-radius:8px;background:#fff}.export-option{display:grid;grid-template-columns:38px minmax(0,1fr);gap:12px;align-items:center;min-height:82px;padding:14px;color:var(--color-text);text-align:left;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.export-option svg{justify-self:center;color:var(--color-primary-hover)}.export-option:hover{border-color:var(--color-primary);box-shadow:0 10px 22px #0d374b14}.export-option strong,.export-option small,.result-box strong,.result-box span,.result-box small{display:block}.export-option small,.result-box small{margin-top:3px;color:var(--color-muted);font-size:12px;line-height:1.5}.result-box{display:grid;gap:4px;margin-top:14px;padding:13px 14px;color:var(--color-primary-hover);border:1px solid rgba(7,153,178,.22);border-radius:8px;background:var(--color-primary-soft);font-size:13px}.operation-grid{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:16px}.operation-item{display:grid;grid-template-columns:48px minmax(0,1fr);gap:13px;align-items:center;min-height:94px;padding:15px}.operation-item strong,.operation-item span,.operation-item small{display:block}.operation-item strong{font-size:18px}.operation-item span,.operation-item small{color:var(--color-muted);font-size:12px}.operation-item small{margin-top:4px;line-height:1.5}.service-list{display:grid;gap:0;padding:6px 18px 12px}.service-row{display:grid;grid-template-columns:40px minmax(0,1fr) max-content;gap:12px;align-items:center;min-height:70px;padding:12px 0;border-bottom:1px solid var(--color-border)}.service-row:last-child{border-bottom:0}.service-row strong,.service-row small{display:block}.service-row small{margin-top:3px;color:var(--color-muted);font-size:12px;line-height:1.5}.stat-icon.mini{width:40px;height:40px}.compact-empty{min-height:86px}.ai-cost-grid{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:16px}.cost-item{display:grid;align-content:start;gap:9px;min-height:128px;padding:15px}.cost-item strong{font-size:28px}.cost-item small{color:var(--color-muted);font-size:12px;line-height:1.6}.quota-form{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) auto;gap:14px;align-items:end;margin-top:16px}.wide-table{min-width:1160px}.clamp-text{max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.achievement-grid{grid-template-columns:repeat(2,minmax(0,1fr));padding:0 18px 18px}.achievement-item{display:grid;align-content:space-between;gap:12px;min-height:168px;padding:15px}.achievement-item header,.achievement-item footer{display:flex;align-items:center;justify-content:space-between;gap:10px}.achievement-item strong,.achievement-item p,.achievement-item footer span:first-child{display:block}.achievement-item p{margin:0;color:var(--color-muted);font-size:13px;line-height:1.6}.achievement-item footer{color:var(--color-muted);font-size:12px}.progress-line{height:8px;overflow:hidden;border-radius:999px;background:var(--color-border)}.progress-line span{display:block;height:100%;border-radius:inherit;background:var(--color-primary)}.filter-panel{display:grid;grid-template-columns:minmax(220px,1fr) 148px 148px auto auto;gap:12px;align-items:center;padding:16px}.search-box,.input-shell{display:flex;align-items:center;gap:9px}.search-box{min-height:42px;padding:0 12px;color:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-control);background:#fff}.search-box input,.input-shell input{width:100%;min-width:0;border:0;outline:0;background:transparent}input,select,textarea{min-height:42px;padding:0 12px;color:var(--color-text);border:1px solid var(--color-border);border-radius:var(--radius-control);outline:0;background:#fff}input:focus,select:focus,textarea:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring)}textarea{width:100%;min-height:96px;padding:10px 12px;resize:vertical;line-height:1.6}input[type=checkbox]{width:16px;height:16px;min-height:16px;padding:0;accent-color:var(--color-primary)}.table-panel{overflow:hidden}.table-scroll{overflow-x:auto}table{width:100%;min-width:760px;border-collapse:collapse;border-spacing:0}th,td{padding:14px 18px;border-bottom:1px solid var(--color-border);text-align:left;vertical-align:middle}th{color:var(--color-muted);background:linear-gradient(180deg,#f9fcfd 0%,var(--color-muted-surface) 100%);font-size:12px;font-weight:800}td{font-size:13px;line-height:1.55}tbody tr{transition:background .14s ease}tbody tr:hover{background:#078ea709}th.right{text-align:right}.user-cell{display:flex;align-items:center;gap:12px}.user-cell strong,.user-cell span{display:block}.user-cell span{margin-top:3px;color:var(--color-muted);font-size:12px}.avatar{display:grid;width:36px;height:36px;flex:0 0 auto;place-items:center;color:#fff;border-radius:8px;background:var(--color-primary);font-weight:800}.role-badge,.status-badge{padding:0 9px}.role-badge.admin{color:var(--color-warning);background:var(--color-warning-soft)}.role-badge.teacher{color:var(--color-violet);background:var(--color-violet-soft)}.role-badge.student{color:var(--color-info);background:var(--color-info-soft)}.status-badge{color:var(--color-success);background:var(--color-success-soft)}.status-badge.disabled{color:var(--color-danger);background:var(--color-danger-soft)}.row-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.empty-cell{height:160px;color:var(--color-muted);text-align:center}.pagination{display:flex;min-height:62px;align-items:center;justify-content:space-between;gap:12px;padding:0 16px}.pagination span{color:var(--color-muted);font-size:12px}.pagination div{display:flex;align-items:center;gap:8px}.pagination strong{min-width:68px;text-align:center;font-size:13px}.field{display:grid;gap:7px}.field span{color:var(--color-muted);font-size:12px;font-weight:700}.field input,.field select,.field textarea{width:100%}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.form-grid .full{grid-column:1 / -1}.form-error{margin:0;padding:11px 13px;color:var(--color-danger);border:1px solid rgba(201,85,69,.26);border-radius:8px;background:var(--color-danger-soft);font-size:13px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:grid;place-items:center;padding:20px;background:#08202f6b}.modal-panel{width:min(620px,100%);padding:20px;border-radius:8px;background:#fff;box-shadow:var(--shadow-popover)}.modal-panel.narrow{width:min(420px,100%)}.modal-panel.wide{width:min(760px,100%)}.modal-head,.modal-actions{display:flex;align-items:center;justify-content:space-between;gap:12px}.modal-head{margin-bottom:16px}.modal-head strong{font-size:18px}.modal-actions{justify-content:flex-end;margin-top:18px}.simple-state{display:grid;min-height:100vh;place-items:center;align-content:center;gap:12px;padding:24px;color:var(--color-text);background:var(--color-page-bg);text-align:center}.simple-state svg{color:var(--color-danger)}.simple-state h1{margin:0;font-size:24px}.simple-state p{margin:0 0 6px;color:var(--color-muted)}.mobile-only,.sidebar-backdrop{display:none}@media(max-width:1180px){.stat-grid.five{grid-template-columns:repeat(3,minmax(0,1fr))}.platform-grid,.policy-grid,.split-grid,.operation-grid,.metric-strip,.quota-form{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:860px){.sidebar{transform:translate(-100%);transition:transform .18s ease}.sidebar-visible .sidebar{transform:translate(0)}.sidebar-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:45;background:#08202f5c}.sidebar-visible .sidebar-backdrop{display:block}.main-shell{margin-left:0}.mobile-only{display:inline-flex}.topbar{padding:0 16px}.topbar-actions .link-button{display:none}.content-shell{padding:22px 16px 34px}.filter-panel{grid-template-columns:1fr 1fr}.search-box{grid-column:1 / -1}.panel-head{align-items:flex-start;flex-direction:column}.inline-filters{width:100%;justify-content:flex-start}.inline-filters input,.inline-filters select{width:min(100%,220px)}}@media(max-width:640px){.page-heading{align-items:stretch;flex-direction:column}.stat-grid.five,.stat-grid.compact,.platform-grid,.policy-grid,.filter-panel,.form-grid,.split-grid,.metric-strip,.operation-grid,.ai-cost-grid,.quota-form,.reviewer-grid,.export-grid,.achievement-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}.pagination{align-items:flex-start;flex-direction:column;padding:13px 16px}.choice-row,.service-row{grid-template-columns:1fr}.form-actions{align-items:stretch;flex-direction:column}}
