:root{--bg: #f5f6f8;--surface: #ffffff;--surface-soft: #f8fafc;--surface-hover: #f3f6fa;--text: #1d2838;--text-soft: #3d4b5f;--muted: #6f7c8f;--line: #dce4ee;--line-strong: #bdc9d8;--primary: #2f5be8;--primary-strong: #2448bd;--primary-soft: #f1f4ff;--accent: #0f766e;--success: #0b6b50;--success-soft: #e8f7f1;--warning: #8b5e00;--warning-soft: #fff5d9;--danger: #b93b22;--danger-soft: #fff0eb;--shadow: 0 1px 2px rgba(29, 40, 56, .06);color:var(--text);background:var(--bg);font-family:Inter,PingFang SC,Microsoft YaHei,Noto Sans SC,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);margin:0;min-height:100vh;min-width:1200px}button,input,textarea{font:inherit}button{align-items:center;border:0;border-radius:6px;cursor:pointer;display:inline-flex;font-weight:700;gap:8px;justify-content:center;min-height:36px;padding:0 14px;transition:background-color .16s ease,border-color .16s ease,color .16s ease,transform .16s ease;white-space:nowrap}button:disabled{background:#eef2f6;border:1px solid #dfe6ef;color:#9aa6b2;cursor:not-allowed;opacity:1}button:not(:disabled):active{transform:translateY(1px)}input,textarea{background:#fff;border:1px solid var(--line-strong);border-radius:6px;color:var(--text);font-size:14px;outline:none;transition:border-color .14s ease,box-shadow .14s ease,background-color .14s ease}input:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #315cf429}textarea{line-height:1.45;min-height:132px;padding:10px 11px;resize:vertical}.app-shell{margin:0 auto;max-width:1780px;min-width:1200px;min-height:100vh;padding:16px}.app-header{align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:7px;box-shadow:var(--shadow);display:flex;gap:18px;justify-content:space-between;margin-bottom:14px;padding:14px 16px}.brand-block{align-items:center;display:flex;gap:14px;min-width:0}.brand-mark,.panel-icon,.metric-icon{align-items:center;display:inline-flex;justify-content:center}.brand-mark{background:var(--surface-soft);border:1px solid var(--line);border-radius:7px;color:#243246;flex:0 0 auto;height:48px;width:48px}.brand-copy{min-width:0}.eyebrow{color:var(--accent);display:block;font-size:12px;font-weight:800;letter-spacing:0;line-height:1.2;margin-bottom:3px}.brand-copy h1,.brand-copy p,.section-heading h2,.section-subtitle,.message-list p{margin:0}.brand-copy h1{color:var(--text);font-size:28px;font-weight:820;letter-spacing:0;line-height:1.18}.brand-copy p{color:var(--muted);font-size:14px;line-height:1.45;margin-top:4px}.header-actions{align-items:center;display:flex;flex:0 0 auto;gap:10px}.next-step-pill{background:var(--surface-soft);border:1px solid var(--line);border-radius:999px;color:var(--text-soft);font-size:12px;font-weight:760;overflow:hidden;padding:7px 10px;text-overflow:ellipsis;white-space:nowrap}.workspace-layout{align-items:start;display:grid;gap:14px;grid-template-columns:264px minmax(0,1fr)}.workspace-layout.sidebar-collapsed{grid-template-columns:48px minmax(0,1fr)}.side-rail{align-self:start;display:grid;gap:12px;position:sticky;top:16px}.side-rail.collapsed{gap:0}.workspace-main{display:grid;gap:12px;min-width:0}.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);min-width:0;padding:14px;scroll-margin-top:16px}.section-heading{align-items:center;display:flex;gap:12px;justify-content:space-between;margin-bottom:12px;min-height:34px;min-width:0}.compact-heading{margin-bottom:10px}.heading-title{align-items:center;display:flex;gap:10px;min-width:0}.heading-title>div{min-width:0}.panel-icon{background:var(--surface-soft);border:1px solid var(--line);border-radius:7px;color:var(--text-soft);flex:0 0 auto;height:32px;width:32px}.section-heading h2{color:var(--text);font-size:17px;font-weight:780;letter-spacing:0;line-height:1.25}.section-subtitle{color:var(--muted);font-size:12px;line-height:1.35;margin-top:3px}.heading-actions{align-items:center;display:flex;flex-shrink:0;gap:8px}.primary-button{background:var(--primary);color:#fff}.primary-button:not(:disabled):hover{background:var(--primary-strong)}.primary-button:disabled{background:#dfe6f1;color:#8c98a8}.secondary-button,.ghost-button{background:var(--surface-soft);border:1px solid var(--line);color:var(--text-soft)}.secondary-button:not(:disabled):hover,.ghost-button:not(:disabled):hover{background:#eef3f8;border-color:var(--line-strong);color:var(--text)}.icon-button{background:#fff;border:1px solid var(--line);color:var(--text-soft);min-height:30px;padding:0;width:30px}.icon-button:not(:disabled):hover{background:var(--primary-soft);border-color:#b8c9ff;color:var(--primary)}.icon-button.compact{min-height:22px;width:22px}.sidebar-toggle{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);color:var(--text-soft);justify-content:center;min-height:40px;width:100%}.sidebar-toggle:hover{background:var(--surface-soft);border-color:var(--line-strong);color:var(--text)}.status-chip{align-items:center;background:var(--surface-soft);border:1px solid var(--line);border-radius:999px;color:var(--muted);display:inline-flex;flex-shrink:0;font-size:12px;font-weight:750;gap:5px;min-height:28px;padding:0 8px;white-space:nowrap}.status-chip.done{background:#f6fbf8;border-color:#d4e8dd;color:var(--success)}.status-dot{background:#c4911f;border-radius:999px;height:7px;width:7px}.status-chip.done .status-dot{background:var(--success)}.workflow-list{display:grid;gap:8px;list-style:none;margin:0;padding:0}.workflow-list a{align-items:center;border:1px solid transparent;border-radius:7px;color:var(--text-soft);display:flex;gap:9px;min-height:38px;padding:6px 8px;text-decoration:none}.workflow-list a:hover{background:var(--surface-soft);border-color:var(--line)}.workflow-list strong{font-size:13px;font-weight:760;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workflow-marker{align-items:center;background:#edf1f6;border-radius:999px;color:var(--muted);display:inline-flex;flex:0 0 auto;font-size:12px;font-weight:800;height:26px;justify-content:center;width:26px}.workflow-list li.done a{color:var(--success)}.workflow-list li.done .workflow-marker{background:var(--success);color:#fff}.metric-copy>span,.text-field span,.textarea-field span{color:var(--muted);display:block;font-size:12px;font-weight:760}.metric-grid{display:grid;gap:10px;grid-template-columns:repeat(6,minmax(0,1fr))}.metric-card{align-items:center;background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);display:grid;gap:12px;grid-template-columns:52px minmax(0,1fr);min-height:82px;min-width:0;padding:12px}.metric-icon{background:var(--surface-soft);border:1px solid var(--line);border-radius:7px;color:var(--accent);height:52px;width:52px}.metric-copy{align-self:center;display:grid;gap:6px;min-width:0}.metric-card strong{color:var(--text);display:block;font-size:24px;font-weight:820;letter-spacing:0;line-height:1.05;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.setup-grid{align-items:start;display:grid;gap:12px;grid-template-columns:minmax(340px,.95fr) minmax(360px,1.05fr)}.form-grid{display:grid;gap:10px;grid-template-columns:repeat(2,minmax(0,1fr))}.text-field,.textarea-field{display:grid;gap:6px;min-width:0}.text-field input{height:36px;min-width:0;padding:0 10px;width:100%}.roster-textarea textarea{min-height:160px}.panel-message{margin-top:8px}.message-list{border:1px solid transparent;border-radius:7px;display:grid;gap:5px;padding:9px 10px;width:100%}.group-weight-note{background:var(--surface-soft);border:1px solid var(--line);border-radius:6px;color:var(--text-soft);font-size:12px;font-weight:700;line-height:1.45;margin-bottom:10px;padding:8px 10px}.score-rules{align-items:center;background:var(--surface-soft);border:1px solid var(--line);border-radius:6px;color:var(--text-soft);display:flex;flex-wrap:wrap;gap:4px 10px;margin-bottom:10px;padding:8px 10px}.score-rules span{font-size:12px;font-weight:700;line-height:1.35}.score-rules span:not(:last-child):after{color:#a2adba;content:"·";margin-left:10px}.message-list p{font-size:13px;line-height:1.45}.message-list.success{background:var(--success-soft);border-color:#b9e2d0;color:var(--success)}.message-list.warning{background:var(--warning-soft);border-color:#ecd58e;color:var(--warning)}.message-list.danger{background:var(--danger-soft);border-color:#f0b5a6;color:var(--danger)}.table-wrap{background:#fff;border:1px solid var(--line);border-radius:8px;max-height:640px;min-width:0;overflow:auto}.table-wrap.compact{max-height:300px}.table-wrap.wide{max-height:680px}.table-wrap.wide table{min-width:100%}table{border-collapse:collapse;min-width:100%;table-layout:fixed;width:100%}th,td{border-bottom:1px solid #e9eef5;font-size:13px;line-height:1.25;overflow:hidden;padding:8px;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}th{background:var(--surface-soft);color:#2e3c4f;font-weight:760;height:40px;position:sticky;text-align:left;top:0;z-index:2}tbody tr:nth-child(2n){background:#fafcff}tbody tr:hover{background:var(--surface-hover)}.empty-cell{color:var(--muted);height:86px;text-align:center}.table-empty{align-items:center;color:var(--muted);display:inline-flex;flex-direction:column;gap:7px;justify-content:center}.table-empty strong{color:var(--text-soft);font-size:13px;font-weight:760}.table-count{background:var(--surface-soft);border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:12px;font-weight:760;padding:6px 9px;white-space:nowrap}.student-table .col-order{width:44px}.student-table .col-id{width:100px}.student-table .col-name{width:60px}.student-table .col-group{width:50px}.student-table .col-small{width:56px}.student-table .col-action{width:70px}.student-table .col-score{width:72px}.student-table .col-grade{width:62px}.student-panel th,.student-panel td{font-size:12px;padding:6px}.cell-input{background:#fff;height:31px;min-width:0;padding:0 8px;width:100%}.student-panel .cell-input{font-size:12px;height:28px;padding:0 6px}.cell-input.number{max-width:none}.cell-input.invalid{background:var(--danger-soft);border-color:#eea894;color:var(--danger)}.cell-input.readonly{background:#f0f4f8;color:var(--text-soft);cursor:default;font-weight:720}.header-label,.header-with-action{align-items:center;display:inline-flex;gap:4px;min-width:0}.header-label{overflow:hidden;text-overflow:ellipsis}.header-with-action{max-width:100%}.header-with-action .icon-button{flex:0 0 auto}.export-panel{display:grid;gap:12px}.generate-actions{display:grid;gap:9px}.generate-actions .primary-button{width:100%}.export-button{min-height:42px}.file-name-list{background:var(--surface-soft);border:1px solid var(--line);border-radius:7px;color:var(--text-soft);display:grid;gap:6px;padding:9px 10px}.file-name-list span{font-size:12px;font-weight:720;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.spin{animation:spin .9s linear infinite}.sr-only{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.coffee-backdrop{align-items:center;background:#0f172a61;display:flex;top:0;right:0;bottom:0;left:0;justify-content:center;padding:24px;position:fixed;z-index:20}.coffee-dialog{background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 18px 48px #0f172a2e;max-width:680px;padding:22px;position:relative;width:680px}.coffee-close{background:var(--surface-soft);border:1px solid var(--line);color:var(--text-soft);min-height:32px;padding:0;position:absolute;right:14px;top:14px;width:32px}.coffee-copy{padding-right:48px}.coffee-copy span{color:var(--accent);display:block;font-size:12px;font-weight:820;line-height:1.2;margin-bottom:6px}.coffee-copy h2{color:var(--text);font-size:24px;line-height:1.2;margin:0}.coffee-copy p{color:var(--muted);font-size:14px;line-height:1.5;margin:8px 0 0}.coffee-codes{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:18px}.coffee-codes figure{background:var(--surface-soft);border:1px solid var(--line);border-radius:8px;margin:0;padding:12px;text-align:center}.coffee-codes img{aspect-ratio:3 / 4;border-radius:6px;display:block;height:320px;object-fit:contain;width:100%}.coffee-codes figcaption{color:var(--text-soft);font-size:13px;font-weight:780;margin-top:8px}.coffee-later{margin-top:16px;width:100%}@keyframes spin{to{transform:rotate(360deg)}}
