/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-font-family:"Microsoft YaHei", "PingFang SC", Arial, sans-serif;--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.table{display:table}}:root{--background:#f6f8fb;--foreground:#172033;--ink-soft:#657189;--line:#dfe5ee;--brand:#2257a6;--brand-soft:#eaf1ff}*{box-sizing:border-box}html,body{background:var(--background);min-height:100%;margin:0}body{color:var(--foreground);font-family:Microsoft YaHei,PingFang SC,Arial,sans-serif}button,select{font:inherit}button{cursor:pointer}.app-shell{min-height:100vh}.topbar{z-index:20;border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffffff2;justify-content:space-between;align-items:center;gap:20px;padding:14px 24px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:12px;display:flex}.brand-mark{color:#fff;background:linear-gradient(135deg,#2d72d9,#173e86);border-radius:12px;place-items:center;width:38px;height:38px;font-weight:800;display:grid}.brand h1{letter-spacing:.02em;margin:0;font-size:18px}.brand p{color:var(--ink-soft);margin:2px 0 0;font-size:12px}.sync{color:var(--ink-soft);align-items:center;gap:8px;font-size:13px;display:flex}.undo-btn{color:#245d9e;background:#eef5ff;border:1px solid #c7d4e6;border-radius:8px;padding:7px 11px;font-size:12px}.undo-btn:disabled{cursor:not-allowed;color:#aab4c2;background:#f4f6f9;border-color:#e1e6ee}.share-btn{color:#245d9e;background:#fff;border:1px solid #b9cdec;border-radius:8px;padding:7px 12px;font-size:12px}.export-btn{color:#287749;background:#f0fbf4;border:1px solid #b7d8c4;border-radius:8px;padding:7px 12px;font-size:12px}.share-status{white-space:nowrap;border-radius:999px;padding:4px 8px;font-size:11px}.share-status.owner,.share-status.edit{color:#287749;background:#eaf8f0}.share-status.edit~.share-btn{display:none}.identity-btn{color:#245d9e;white-space:nowrap;background:#f5f9ff;border:1px solid #c7d4e6;border-radius:8px;padding:7px 12px;font-size:12px}.identity-dialog{width:min(470px,100%)}.account-tabs{gap:8px;margin:12px 0;display:flex}.account-tabs button{color:#536178;background:#fff;border:1px solid #d6deea;border-radius:8px;flex:1;padding:8px}.account-tabs button.active{color:#245d9e;background:#eef5ff;border-color:#9bb7df;font-weight:700}.identity-warning{color:#8a641b;margin-top:12px;display:block}@media (max-width:700px){.topbar{flex-wrap:wrap;gap:8px}.topbar .brand{flex:100%}}.share-status.view{color:#8a641b;background:#fff4e4}.readonly-banner{color:#8a641b;background:#fff9ed;border:1px solid #f0d49a;border-radius:9px;padding:10px 12px;font-size:13px}.share-overlay{z-index:50;background:#12233e59;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.share-dialog{background:#fff;border-radius:14px;width:min(420px,100%);padding:22px;box-shadow:0 18px 60px #162a4b3d}.share-dialog h3{margin:0 0 7px;font-size:18px}.share-dialog p{color:var(--ink-soft);margin:0 0 14px;font-size:13px}.request-name-input{border:1px solid #d6deea;border-radius:8px;width:100%;padding:9px 10px}.share-dialog label{color:#33445e;margin:10px 0;font-size:14px;display:block}.legacy-share-choice{display:none!important}.share-permission-options{gap:8px;margin:14px 0 4px;display:grid}.share-permission-option{color:#33445e;cursor:pointer;background:#fff;border:1px solid #dce4ef;border-radius:10px;align-items:center;gap:10px;padding:11px 12px;transition:border-color .15s,background .15s,box-shadow .15s;display:flex}.share-permission-option:hover{background:#f8fbff;border-color:#9bb7df}.share-permission-option.selected{background:#eef5ff;border-color:#2c71d1;box-shadow:0 0 0 2px #2c71d11a}.share-permission-mark{color:#fff;background:#fff;border:2px solid #b9c7d9;border-radius:50%;flex:0 0 20px;place-items:center;width:20px;height:20px;font-size:12px;font-weight:800;display:grid}.share-permission-option.selected .share-permission-mark{background:#2c71d1;border-color:#2c71d1}.share-restricted-permissions{flex-wrap:wrap;gap:8px;margin:10px 0 0 30px;display:flex}.share-restricted-choice{color:#536178;cursor:pointer;background:#fff;border:1px solid #d6deea;border-radius:999px;padding:5px 10px;font-size:12px;line-height:1.2;transition:border-color .15s,color .15s,background .15s}.share-restricted-choice:hover{color:#2463b8;background:#f8fbff;border-color:#8eb3e5}.share-restricted-choice.selected{color:#2463b8;background:#eef5ff;border-color:#2c71d1;font-weight:700}.share-permission-copy{gap:3px;display:grid}.share-permission-copy strong{color:#253b62;font-size:14px}.share-permission-copy small{color:#7a879a;font-size:11px;line-height:1.4}.share-actions{gap:8px;margin-top:18px;display:flex}.share-actions button{color:#fff;background:var(--brand);border:0;border-radius:8px;padding:8px 12px}.share-actions .share-cancel{color:#536178;background:#eef2f7}.share-result{gap:6px;margin-top:14px;display:grid}.share-result input{color:#536178;border:1px solid #d6deea;border-radius:7px;width:100%;padding:8px;font-size:12px}.share-result small{color:#287749}.share-requests{border-top:1px solid var(--line);margin-top:18px;padding-top:12px}.share-requests h4{margin:0 0 8px;font-size:13px}.share-request{color:#33445e;justify-content:space-between;align-items:center;gap:10px;padding:7px 0;font-size:13px;display:flex}.share-request button{color:#fff;background:#287749;border:0;border-radius:6px;padding:5px 9px;font-size:12px}.dot{background:#23a26d;border-radius:999px;width:8px;height:8px;box-shadow:0 0 0 4px #e2f5ec}.dot.off{background:#dd8d2f;box-shadow:0 0 0 4px #fff2df}.page{grid-template-columns:1fr;gap:18px;max-width:1800px;margin:0 auto;padding:20px 24px 40px;display:grid}.main-tabs{border:1px solid var(--line);background:#fff;border-radius:12px;gap:8px;width:fit-content;padding:5px;display:flex}.term-bar{border:1px solid var(--line);background:#fff;border-radius:12px;flex-wrap:wrap;align-items:center;gap:10px;padding:12px 14px;display:flex}.term-label{color:var(--ink-soft);font-size:13px;font-weight:700}.term-bar select,.term-bar input{background:#fff;border:1px solid #d6deea;border-radius:8px;padding:8px 10px}.term-bar input{width:220px}.term-bar button{color:#fff;background:var(--brand);border:0;border-radius:8px;padding:8px 13px}.term-bar .term-delete-btn{color:#a14436;background:#fff0ed;border:1px solid #f0c3bd}.term-bar .term-delete-btn:disabled{cursor:not-allowed;color:#aab4c2;background:#f4f6f9;border-color:#e1e6ee}.main-tabs button{color:#536178;background:0 0;border:0;border-radius:8px;padding:10px 24px}.main-tabs button.active{color:#fff;background:var(--brand)}.panel{border:1px solid var(--line);background:#fff;border-radius:16px;min-width:0;padding:18px;box-shadow:0 8px 30px #22375a0d}.panel-head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.panel-head h2{margin:0;font-size:18px}.panel-head p{color:var(--ink-soft);margin:5px 0 0;font-size:13px}.campus-tabs{gap:8px;margin-bottom:16px;padding-bottom:3px;display:flex;overflow-x:auto}.campus-tabs button{border:1px solid var(--line);color:#4a5870;background:#fff;border-radius:10px;flex:none;padding:9px 13px}.campus-tabs button.active{color:#fff;border-color:var(--brand);background:var(--brand)}.period-tabs{flex-wrap:wrap;gap:4px;margin-top:7px;display:flex}.period-tabs button{border:1px solid var(--line);color:#536178;background:#fff;border-radius:7px;padding:4px 8px;font-size:12px}.period-tabs button.active{color:#fff;border-color:var(--brand);background:var(--brand)}.campus-control-row .muted{color:#8792a5;font-size:12px}.duration-hint{color:#8792a5;white-space:nowrap;font-size:12px}.schedule-wrap{border:1px solid var(--line);border-radius:12px;overflow:auto}.schedule-table{border-collapse:collapse;table-layout:auto;width:max-content;min-width:100%}.schedule-table th,.schedule-table td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);vertical-align:top;padding:8px}.schedule-table th{color:#fff;background:#275ca6;font-size:13px;font-weight:700}.schedule-table th:first-child{width:116px}.schedule-table th:not(:first-child),.schedule-table td:not(:first-child){min-width:196px}.schedule-table tr:last-child td{border-bottom:0}.schedule-table th:last-child,.schedule-table td:last-child{border-right:0}.day-label{color:#34506f;white-space:nowrap;background:#f1f5fa;font-weight:700}.day-label small{color:#7c899d;margin-top:3px;font-weight:400;display:block}.slot-cell{min-height:72px}.slot-cell select{color:#1e2a40;background:#fff;border:1px solid #d6deea;border-radius:7px;width:100%;min-width:120px;padding:7px 6px;font-size:12px}.course-row{grid-template-columns:110px 82px;align-items:start;gap:4px;display:grid}.course-row .course-select{width:100%;min-width:0}.course-row .class-type-select{width:82px;min-width:82px}.course-row select+select{margin-top:0}.course-row select{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.class-type-select{font-weight:700}.course-select.course-regular{background:#eef5ff;border-color:#9fc0ed}.course-select.course-experimental{background:#f4edff;border-color:#bea1e8}.course-select.course-innovation-a{background:#eaf8f0;border-color:#9bd2b1}.course-select.course-innovation-b{background:#fff4e4;border-color:#e8bb78}.slot-cell select+select{margin-top:6px}.slot-cell .teacher-select{width:100%;min-width:0;margin-left:0;padding:7px 6px;font-size:13px;display:block}.teacher-select:disabled{color:#a4adbb;background:#f6f8fb}.hint{color:#8692a5;font-size:11px}.teacher-panel{max-height:calc(100vh - 120px);overflow:auto}.teacher-summary-wrap{border:1px solid var(--line);border-radius:10px;overflow:auto}.teacher-summary-table{border-collapse:collapse;width:100%;min-width:1330px;font-size:12px}.teacher-summary-table th,.teacher-summary-table td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;vertical-align:middle;white-space:nowrap;padding:8px 7px}.teacher-summary-table th{color:#fff;background:#275ca6;font-weight:700}.teacher-summary-table th small{opacity:.85;margin-top:3px;font-weight:400;display:block}.teacher-summary-table td:last-child,.teacher-summary-table th:last-child{border-right:0}.teacher-summary-table tr:last-child td{border-bottom:0}.teacher-name-cell{color:#203c6c;font-weight:700}.summary-conflict{color:#a14436;background:#fff0ed;font-weight:700}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;display:grid}.stats-table-wrap{border:1px solid var(--line);border-radius:10px;min-width:0;overflow:auto}.stats-table-wrap h3{color:#203c6c;background:#f4f7fb;margin:0;padding:12px 14px;font-size:15px}.stats-table{border-collapse:collapse;width:100%;min-width:430px}.stats-table th,.stats-table td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;white-space:nowrap;padding:11px 14px}.stats-table th:first-child,.stats-table td:first-child{text-align:left}.stats-table th{color:#fff;background:#275ca6;font-size:13px}.stats-table td{color:#33445e}.stats-table tr:last-child td{border-bottom:0}.stats-table th:last-child,.stats-table td:last-child{border-right:0}.stats-table .stats-total td{color:#203c6c;background:#edf4fb;font-weight:700}.stats-table .stats-subtotal td{color:#203c6c;background:#f4f7fb;font-weight:700}.center-stats-wrap{grid-column:1/-1}.center-stats-table{table-layout:fixed;min-width:1120px}.center-stats-table th,.center-stats-table td{text-align:center;vertical-align:middle}.center-stats-table th:first-child,.center-stats-table td:first-child{text-align:center;width:180px}.center-stats-table th:last-child,.center-stats-table td:last-child{width:90px}.roster-add{gap:10px;margin-bottom:16px;display:flex}.roster-add select,.roster-add input{background:#fff;border:1px solid #d6deea;border-radius:8px;padding:9px 10px}.roster-add input{width:240px}.roster-add button,.delete-btn{color:#fff;background:var(--brand);border:0;border-radius:8px;padding:8px 14px}.course-admin{border:1px solid var(--line);background:#f8fafc;border-radius:10px;margin-bottom:18px;padding:14px}.course-admin h3{margin:0 0 10px;font-size:14px}.course-admin .roster-add{margin-bottom:10px}.course-message{color:#287749;margin:4px 0 10px;font-size:12px}.course-admin-list{flex-wrap:wrap;gap:7px;display:flex}.course-admin-list span{color:#315174;background:#edf4fb;border-radius:6px;align-items:center;gap:5px;padding:5px 8px;font-size:12px;display:inline-flex}.course-admin-list button{color:#a14436;background:0 0;border:0;padding:0;font-weight:700}.roster-table-wrap{border:1px solid var(--line);border-radius:10px;max-width:800px;overflow:auto}.roster-table{border-collapse:collapse;width:100%}.roster-table th,.roster-table td{border-bottom:1px solid var(--line);text-align:left;padding:10px 12px}.roster-table th{color:#fff;background:#275ca6}.roster-table tr:last-child td{border-bottom:0}.delete-btn,.edit-btn,.save-btn,.cancel-btn{border-radius:7px;margin-right:6px;padding:6px 10px;font-size:12px}.delete-btn{color:#a14436;background:#fff0ed}.edit-btn{color:#245d9e;background:#eef5ff;border:1px solid #b9cdec}.save-btn{color:#fff;border:1px solid var(--brand);background:var(--brand)}.cancel-btn{color:#536178;background:#f4f6f9;border:1px solid #d6deea}.roster-edit-select,.roster-edit-input{color:#33445e;background:#fff;border:1px solid #b9cdec;border-radius:7px;width:100%;min-width:92px;padding:6px 7px;font-size:12px}.settings-add{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.settings-add input,.settings-add select{background:#fff;border:1px solid #d6deea;border-radius:8px;padding:8px 10px}.settings-add button{color:#fff;background:var(--brand);border:0;border-radius:8px;padding:8px 14px}.settings-chips{flex-wrap:wrap;gap:8px;margin:12px 0 18px;display:flex}.settings-chips span{color:#315174;background:#edf4fb;border-radius:8px;padding:7px 10px}.settings-chips button{color:#a14436;background:0 0;border:0;margin-left:7px;padding:0;font-weight:700}.settings-section-title{margin-top:22px}.settings-slots{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px;max-width:900px;display:grid}.settings-slots div{border:1px solid var(--line);background:#f8fafc;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:9px 10px;font-size:13px;display:flex}.settings-slots button{color:#a14436;background:0 0;border:0;padding:0;font-size:12px;font-weight:400}.settings-slots .slot-save,.settings-slots .slot-cancel{border-radius:7px;padding:6px 10px;font-weight:700}.settings-slots .slot-save{color:#fff;border:1px solid var(--brand);background:var(--brand)}.settings-slots .slot-cancel{color:#a14436;background:#fff0ed;border:1px solid #f0c3bd}.settings-slots button:hover{text-decoration:underline}.settings-slots .slot-save:hover,.settings-slots .slot-cancel:hover{filter:brightness(.96);text-decoration:none}.teacher-row{border-bottom:1px solid #edf0f5;padding:12px 0}.teacher-row:last-child{border-bottom:0}.teacher-main{justify-content:space-between;align-items:center;gap:8px;display:flex}.teacher-name{font-weight:700}.teacher-subject{color:var(--brand);font-size:12px}.teacher-chips{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.teacher-chip{color:#44556e;background:#f2f5fa;border-radius:6px;padding:4px 7px;font-size:11px}.teacher-chip.conflict{color:#a14436;background:#fff0ed}.empty{color:#8792a3;text-align:center;padding:34px 10px;font-size:13px}.warning{color:#9b4238;background:#fff6f4;border:1px solid #f0c3bd;border-radius:9px;margin-bottom:12px;padding:10px 12px;font-size:12px}.stats{color:var(--ink-soft);align-items:center;gap:8px;font-size:12px;display:flex}.class-legend{flex-wrap:wrap;gap:6px;margin-top:9px;font-size:11px;display:flex}.class-legend span{border-radius:5px;padding:3px 7px}.legend-regular{color:#245d9e;background:#eef5ff}.legend-experimental{color:#7040a6;background:#f4edff}.legend-innovation-a{color:#287749;background:#eaf8f0}.legend-innovation-b{color:#9b641c;background:#fff4e4}@media (max-width:1050px){.teacher-panel{max-height:none}.stats-grid{grid-template-columns:1fr}}@media (max-width:640px){.topbar{padding:12px 14px}.topbar .sync span:last-child{display:none}.page{padding:12px 10px 28px}.panel{border-radius:12px;padding:13px}.brand h1{font-size:16px}.main-tabs button{padding:9px 12px}.roster-add{flex-wrap:wrap}.roster-add input{width:min(240px,100%)}.schedule-table{min-width:1540px}.schedule-table th:not(:first-child),.schedule-table td:not(:first-child){min-width:235px}.course-row{grid-template-columns:minmax(0,1fr) 92px}.course-row .class-type-select{width:92px;min-width:92px}}
