:root{--font-sans:Inter,"PingFang SC","Microsoft YaHei",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-display:var(--font-sans);--font-body:var(--font-sans);--bg-page:#f4f7fb;--bg-surface:#ffffff;--bg-soft:#f7faff;--bg-input:#eef3f9;--bg-sidebar:#062342;--bg-sidebar-deep:#041a32;--border-subtle:#dbe4f0;--border-soft:#edf2f7;--border-input:#c5d3e6;--text-primary:#111827;--text-secondary:#516174;--text-muted:#667085;--text-inverse:#ffffff;--blue:#2478f2;--blue-deep:#135bd7;--blue-strong:#0f4db8;--green:#16b364;--green-deep:oklch(42% 0.13 155);--orange:#f97316;--red:#f04438;--red-deep:oklch(47% 0.18 25);--red-strong:#9f1c20;--purple:#635bff;--cyan:#22b8cf;--blue-soft:oklch(96% 0.025 252);--green-soft:oklch(96% 0.035 155);--red-soft:oklch(96% 0.035 25);--focus-ring:var(--blue);--color-paper:var(--bg-page);--color-paper-2:var(--bg-soft);--color-ink:var(--text-primary);--color-ink-2:var(--text-secondary);--color-rule:var(--border-subtle);--color-accent:var(--blue);--color-accent-ink:var(--text-inverse);--color-focus:var(--focus-ring);--color-success:var(--green-deep);--color-warning:var(--orange);--color-error:var(--red-deep);--shadow-card:0 8px 26px rgba(15,35,65,0.07);--shadow-soft:0 4px 16px rgba(15,35,65,0.05);--shadow-modal:0 28px 72px oklch(21% 0.035 252/0.24);--modal-overlay:oklch(18% 0.035 252/0.68);--space-3xs:0.125rem;--space-2xs:0.25rem;--space-xs:0.5rem;--space-sm:0.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2.5rem;--space-2xl:4rem;--space-3xl:6rem;--text-xs:0.75rem;--text-sm:0.8125rem;--text-base:0.875rem;--text-md:1rem;--text-lg:1.25rem;--ease-out:cubic-bezier(0.16,1,0.3,1);--ease-in:cubic-bezier(0.7,0,0.84,0);--ease-in-out:cubic-bezier(0.65,0,0.35,1);--dur-micro:120ms;--dur-short:180ms;--dur-modal:280ms;--z-base:1;--z-raised:10;--z-dropdown:100;--z-sticky:200;--z-modal:400;--z-toast:500;--z-tooltip:600;--radius-card:8px;--radius-control:6px;--radius-modal:16px;--primary:var(--blue-deep);--primary-hover:var(--blue-strong);--bg:var(--bg-page);--card-bg:var(--bg-surface);--border:var(--border-subtle);--success:var(--green-deep);--warning:var(--orange);--danger:var(--red-deep)}*{box-sizing:border-box}body,html{width:100%;height:100%;height:100dvh;overflow-x:clip}body{margin:0;overflow-y:hidden;overscroll-behavior:none;background:var(--bg-page);color:var(--text-primary);font-family:var(--font-sans);-webkit-tap-highlight-color:transparent}button,input,textarea{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}input[type=checkbox],input[type=radio]{width:16px;height:16px;flex:0 0 16px;margin:0;padding:0;accent-color:var(--blue);box-shadow:none;cursor:pointer;vertical-align:middle}input[type=checkbox]:focus-visible,input[type=radio]:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}input[type=checkbox]:disabled,input[type=radio]:disabled{opacity:.55;cursor:not-allowed}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.auth-loading-screen{width:100%;height:100vh;height:100dvh;display:flex;align-items:center;justify-content:center;gap:12px;color:rgba(255,255,255,.82);background:radial-gradient(circle at 50% 50%,#102e52,#041222);font-size:14px;font-weight:700}.auth-loading-screen__spinner{width:28px;height:28px;border:3px solid rgba(255,255,255,.16);border-left:3px solid var(--blue);border-radius:50%;animation:teacher-spin .8s linear infinite}.admin-shell{display:flex;width:100%;max-width:100%;height:100vh;height:100dvh;min-width:0;overflow:hidden;background:var(--bg-page)}.mobile-menu-toggle,.mobile-sidebar-mask{display:none}.admin-sidebar{width:196px;flex:0 0 196px;display:flex;flex-direction:column;justify-content:space-between;min-height:0;padding:20px 12px 22px;color:var(--text-inverse);background:linear-gradient(180deg,rgba(28,113,237,.16),rgba(4,26,50,0) 36%),linear-gradient(180deg,var(--bg-sidebar),var(--bg-sidebar-deep));box-shadow:7px 0 22px rgba(6,35,66,.16);transition:width var(--dur-short) var(--ease-out),flex-basis var(--dur-short) var(--ease-out),min-width var(--dur-short) var(--ease-out),padding var(--dur-short) var(--ease-out)}.admin-sidebar__scroll{flex:1 1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.admin-brand{display:flex;align-items:center;gap:11px;padding:2px 10px 28px}.admin-brand__mark{width:36px;height:36px;flex:0 0 36px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.8);border-radius:6px}.admin-brand span,.admin-brand strong{display:block;line-height:1.2}.admin-brand strong{font-size:15px;font-weight:800;white-space:nowrap}.admin-brand span{margin-top:3px;font-size:13px;font-weight:700}.sidebar-close-mobile{display:none}.sidebar-search{position:relative;display:block;height:34px;margin:0 10px 16px}.sidebar-search input{width:100%;height:100%;padding:0 34px 0 12px;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-control);outline:2px solid transparent;outline-offset:1px;color:var(--text-inverse);background:rgba(255,255,255,.06);font-size:13px}.sidebar-search input::placeholder{color:rgba(255,255,255,.48)}.sidebar-search input:focus-visible{outline-color:rgba(255,255,255,.76);background:rgba(255,255,255,.1)}.sidebar-search svg{position:absolute;top:50%;right:11px;color:rgba(255,255,255,.54);pointer-events:none;transform:translateY(-50%)}.admin-nav{flex:1 1;min-height:0;display:grid;align-content:start;gap:4px;overflow-y:auto;padding-right:2px;scrollbar-width:none;-webkit-overflow-scrolling:touch}.admin-nav::-webkit-scrollbar{display:none}.admin-nav__empty{padding:12px 16px;color:rgba(255,255,255,.68);font-size:13px;line-height:1.5}.admin-nav-group{display:grid;gap:4px}.admin-nav-group__title{width:100%;height:28px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border:0;color:rgba(255,255,255,.52);background:transparent;font-size:11px;font-weight:900}.admin-nav-group__chevron{color:rgba(255,255,255,.58);font-size:16px;line-height:1;transition:transform var(--dur-short) var(--ease-out)}.admin-nav-group__title[aria-expanded=true] .admin-nav-group__chevron{transform:rotate(90deg)}.admin-subnav{display:none;gap:4px}.admin-subnav--open{display:grid}.admin-nav__item{width:100%;min-height:36px;display:flex;align-items:center;gap:10px;padding:0 12px;border:0;border-radius:6px;color:rgba(255,255,255,.9);background:transparent;text-align:left;transition:background-color var(--dur-short) var(--ease-out),color var(--dur-short) var(--ease-out),transform var(--dur-micro) var(--ease-out)}.admin-nav__item span{font-size:14px;font-weight:700;white-space:nowrap}.admin-nav__item:hover{background:rgba(255,255,255,.1)}.admin-nav__item:active{transform:translateY(1px)}.admin-nav__item--active{color:#ffffff;background:linear-gradient(90deg,var(--blue-deep),var(--blue-strong));box-shadow:0 8px 18px rgba(31,124,255,.28)}.sidebar-collapse{width:100%;height:38px;display:flex;align-items:center;gap:9px;padding:0 12px;border:0;border-top:1px solid rgba(255,255,255,.18);color:rgba(255,255,255,.88);background:transparent;font-size:13px;font-weight:700;white-space:nowrap}.sidebar-collapse span{width:20px;height:20px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.75);border-radius:4px;font-size:20px;line-height:1}.admin-shell--sidebar-collapsed .admin-sidebar{width:72px;min-width:72px;flex-basis:72px;padding-right:8px;padding-left:8px}.admin-shell--sidebar-collapsed .admin-brand{justify-content:center;padding:2px 0 20px}.admin-shell--sidebar-collapsed .admin-brand>:not(.admin-brand__mark),.admin-shell--sidebar-collapsed .admin-nav-group__title,.admin-shell--sidebar-collapsed .admin-nav__item>span,.admin-shell--sidebar-collapsed .sidebar-search{display:none}.admin-shell--sidebar-collapsed .admin-subnav{display:grid}.admin-shell--sidebar-collapsed .admin-nav__item{width:100%;justify-content:center;padding-inline:0}.admin-shell--sidebar-collapsed .sidebar-collapse{justify-content:center;gap:0;padding:0;overflow:hidden;color:transparent;font-size:0}.admin-shell--sidebar-collapsed .sidebar-collapse span{color:rgba(255,255,255,.88);font-size:20px}.admin-main{flex:1 1;min-width:0;display:flex;flex-direction:column}.admin-topbar{min-height:64px;flex:0 0 auto;justify-content:space-between;gap:16px;padding:10px 28px;overflow:visible;border-bottom:1px solid var(--border-subtle);background:rgba(255,255,255,.96);box-shadow:0 2px 9px rgba(15,35,65,.04)}.admin-topbar,.top-actions{display:flex;align-items:center}.top-actions{min-width:0;gap:14px}.account-chip{display:flex;align-items:center;gap:9px;flex:0 0 auto;color:var(--text-primary);white-space:nowrap}.account-chip__avatar{width:34px;height:34px;display:grid;place-items:center;border:1px solid #d5deeb;border-radius:50%;color:#13263b;background:linear-gradient(180deg,#f2f6fb,#d9e3ef)}.account-chip__meta{min-width:0;display:flex;flex-direction:column;align-items:flex-start}.account-chip__name{max-width:130px;overflow:hidden;font-size:13px;font-weight:700;line-height:1.2;text-overflow:ellipsis}.account-chip__role{margin-top:2px;color:var(--text-muted);font-size:11px}.account-chip__action{position:relative;width:36px;height:36px;flex:0 0 36px;display:inline-grid;place-items:center;margin-left:2px;padding:0;border:0;border-radius:8px;color:var(--text-secondary);background:transparent}.account-chip__action:focus-visible,.account-chip__action:hover{color:var(--text-primary);background:rgba(15,35,65,.06)}.account-chip__action:after{content:attr(data-tooltip);position:absolute;z-index:80;top:calc(100% + 7px);left:50%;width:max-content;max-width:160px;padding:6px 9px;border-radius:5px;color:#ffffff;background:#10243b;box-shadow:0 8px 22px rgba(4,18,34,.24);font-size:12px;font-weight:700;line-height:1.35;opacity:0;pointer-events:none;transform:translate(-50%,-3px);transition:opacity .12s ease,transform .12s ease}.account-chip__action:focus-visible:after,.account-chip__action:hover:after{opacity:1;transform:translate(-50%)}.admin-content{flex:1 1;min-height:0;overflow:auto;padding:20px 24px 36px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.admin-content>*{width:100%;max-width:1320px;margin-right:auto;margin-left:auto}.admin-content>.visually-hidden{width:1px;max-width:1px;margin:-1px}.workspace-tabs{width:100%;max-width:1320px;display:flex;align-items:flex-end;gap:6px;margin:0 auto 14px;padding:0 2px 8px;overflow-x:auto;border-bottom:1px solid var(--border-subtle);scrollbar-width:none}.workspace-tabs::-webkit-scrollbar{display:none}.workspace-tab{min-width:0;display:inline-flex;align-items:center;flex:0 0 auto;border:1px solid var(--border-subtle);border-radius:var(--radius-control);color:var(--text-secondary);background:var(--bg-surface)}.workspace-tab--active{color:var(--blue-deep);border-color:color-mix(in srgb,var(--blue) 34%,var(--border-subtle));background:var(--blue-soft)}.workspace-tab__close,.workspace-tab__main{height:34px;display:inline-flex;align-items:center;justify-content:center;border:0;color:inherit;background:transparent;white-space:nowrap}.workspace-tab__main{padding:0 12px;font-size:13px;font-weight:800}.workspace-tab__close{width:34px;padding:0;border-left:1px solid color-mix(in srgb,currentColor 12%,transparent)}.workspace-tab__close:hover{color:var(--red-deep);background:var(--red-soft)}.card{min-width:0;margin-bottom:16px;padding:18px 20px 20px;overflow:hidden;border:1px solid var(--border-subtle);border-radius:var(--radius-card);background:var(--bg-surface);box-shadow:var(--shadow-card)}.card__title{margin:0 0 14px;gap:10px;flex-wrap:wrap;color:var(--text-primary);font-size:16px;font-weight:900;line-height:1.35}.table-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--border-subtle);border-radius:var(--radius-control);-webkit-overflow-scrolling:touch}.table-scroll,table{width:100%;background:#ffffff}table{display:table;min-width:max-content;border:0;border-radius:0;border-spacing:0;border-collapse:collapse;color:#263547;font-size:12px}.table-scroll>table{min-width:100%}td,th{min-width:96px;padding:9px 10px;border-bottom:1px solid var(--border-soft);text-align:left;vertical-align:middle;overflow-wrap:anywhere}th{color:var(--text-secondary);background:#f7faff;font-size:12px;font-weight:900;white-space:nowrap}td{font-size:13px;font-weight:600}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fbfdff}.loading{padding:42px 20px;color:var(--text-secondary)}.empty-state,.loading{text-align:center;font-size:14px}.empty-state{min-height:104px;display:grid;place-items:center;padding:26px 20px;border:1px dashed var(--border-input);border-radius:var(--radius-control);background:var(--bg-soft)}.empty-cell,.empty-state{color:var(--text-secondary)}.empty-cell{padding:28px 20px;text-align:center;font-weight:700}.filter-bar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:14px;padding:12px;border:1px solid var(--border-subtle);border-radius:var(--radius-card);background:#ffffff;box-shadow:var(--shadow-soft)}.filter-bar>span{color:var(--text-secondary);font-size:13px;font-weight:700}.attendance-batch-panel{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:12px;padding:12px;border:1px solid #bfd6ff;border-radius:var(--radius-card);background:#f6f9ff}.attendance-batch-panel__copy{min-width:min(100%,260px);display:grid;gap:4px}.attendance-batch-panel__copy strong{color:var(--text-primary);font-size:14px}.attendance-batch-panel__copy span{color:var(--text-secondary);font-size:12px;line-height:1.5}.attendance-batch-panel__actions,.attendance-status-summary{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.attendance-status-summary{margin-bottom:12px;color:var(--text-secondary);font-size:12px}.attendance-status-summary span{padding:5px 9px;border:1px solid var(--border-subtle);border-radius:999px;background:var(--bg-soft)}.attendance-status-summary strong{color:var(--text-primary)}.attendance-selection-column{width:72px;min-width:72px;text-align:center}.attendance-selection-control{min-height:32px;display:inline-flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;white-space:nowrap}.attendance-selection-control input{width:18px;height:18px;margin:0;accent-color:var(--blue-deep);cursor:pointer}.attendance-row--selected,.attendance-row--selected:hover{background:#f1f6ff}.action-button,.danger-button,.pagination button,.secondary-button{min-height:34px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 13px;border-radius:var(--radius-control);font-size:13px;font-weight:800;line-height:1.2;white-space:nowrap}.action-button{border:1px solid var(--blue-deep);color:#ffffff;background:var(--blue-deep)}.action-button:hover:not(:disabled){border-color:var(--blue-strong);background:var(--blue-strong)}.danger-button{border:1px solid var(--red-deep);color:#ffffff;background:var(--red-deep)}.danger-button:hover:not(:disabled){border-color:var(--red-strong);background:var(--red-strong)}.pagination button,.secondary-button{border:1px solid var(--border-subtle);color:var(--text-secondary);background:#ffffff}.pagination button:hover:not(:disabled),.secondary-button:hover:not(:disabled){color:var(--blue-deep);border-color:#9cc2ff;background:#f7faff}.action-button:disabled,.danger-button:disabled,.pagination button:disabled,.secondary-button:disabled{opacity:.55;cursor:not-allowed}.pagination{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:16px;color:var(--text-secondary);font-size:13px}.card input:not([type=checkbox]):not([type=radio]),.card textarea,.filter-bar input:not([type=checkbox]):not([type=radio]),.modal-card input:not([type=checkbox]):not([type=radio]),.modal-card textarea{width:100%;min-width:0;min-height:36px;padding:0 12px;border:1px solid var(--border-input);border-radius:var(--radius-control);outline:none;color:var(--text-primary);background:var(--bg-input);box-shadow:inset 0 1px 2px rgba(15,35,65,.04);font-size:13px;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}.card textarea,.modal-card textarea{min-height:88px;padding:10px 12px;line-height:1.5;resize:vertical}.card input:not([type=checkbox]):not([type=radio]):focus,.card textarea:focus,.filter-bar input:not([type=checkbox]):not([type=radio]):focus,.modal-card input:not([type=checkbox]):not([type=radio]):focus,.modal-card textarea:focus{border-color:var(--blue);background:#ffffff;box-shadow:0 0 0 3px rgba(36,120,242,.12)}.card label,.login-field label,.modal-card label{color:var(--text-secondary);font-size:13px;font-weight:700}.login-field{display:grid;gap:6px;margin-bottom:14px}.status-badge{display:inline-flex;align-items:center;justify-content:center;min-height:22px;padding:0 9px;border-radius:999px;color:#516174;background:#eef2f6;font-size:12px;font-weight:800;white-space:nowrap}.status-badge--active,.status-badge--approved,.status-badge--attended,.status-badge--checked_in,.status-badge--published{color:#087443;background:#e9fbf1}.status-badge--enrolling,.status-badge--pending_review,.status-badge--planning{color:#155fd0;background:#eaf2ff}.status-badge--leave,.status-badge--pending{color:#bd4b00;background:#fff1e7}.status-badge--absent,.status-badge--conversion_failed,.status-badge--rejected{color:#c0182f;background:#fff0f0}.status-badge--archived,.status-badge--completed,.status-badge--draft,.status-badge--revoked,.status-badge--unpublished,.status-badge--withdrawn{color:#516174;background:#eef2f6}.login-error{margin-bottom:14px;padding:10px 12px;border:1px solid rgba(240,68,56,.26);border-radius:var(--radius-control);color:#c0182f;background:#fff0f0;font-size:13px;font-weight:700;text-align:center}.modal-mask{position:fixed;inset:0;z-index:1250;display:grid;place-items:center;overflow-y:auto;padding:16px;background:rgba(4,18,34,.65)}.modal-card{width:min(520px,100%);max-height:calc(100dvh - 32px);overflow:auto;padding:20px;border:1px solid var(--border-subtle);border-radius:12px;background:var(--bg-surface);box-shadow:0 18px 48px rgba(4,18,34,.26)}.modal-card--wide{width:min(760px,100%)}.modal-card__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:14px}.modal-card__header .card__title{margin:5px 0 0}.modal-card__close{width:32px;height:32px;flex:0 0 32px;display:inline-grid;place-items:center;padding:0;border:0;border-radius:8px;color:var(--text-secondary);background:transparent}.modal-card__close:hover{color:var(--text-primary);background:rgba(15,35,65,.06)}.modal-card__close:disabled{opacity:.5;cursor:not-allowed}.modal-description{margin:0 0 14px;color:var(--text-secondary);font-size:13px;line-height:1.5}.modal-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:10px;margin-top:16px}.modal-actions>button:not(.action-button):not(.secondary-button):not(.danger-button){min-height:34px;padding:0 13px;border:1px solid var(--border-subtle);border-radius:var(--radius-control);color:var(--text-secondary);background:#ffffff;font-size:13px;font-weight:800}.transfer-form{display:grid;gap:14px}.transfer-option-field{min-width:0;display:grid;gap:7px;padding:12px;border:1px solid var(--border-subtle);border-radius:var(--radius-control);background:var(--bg-soft)}.transfer-option-field__search{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.transfer-option-field__feedback,.transfer-option-field__footer,.transfer-option-field__hint{color:var(--text-secondary);font-size:12px;font-weight:700;line-height:1.45}.transfer-option-field__feedback,.transfer-option-field__footer,.transfer-option-field__pager{display:flex;align-items:center;gap:8px}.transfer-option-field__footer{justify-content:space-between}.transfer-option-field__feedback{justify-content:space-between;color:#c0182f}.transfer-option-field__feedback>span{min-width:0}.transfer-option-field__pager button{min-height:28px;padding:0 9px;border:1px solid var(--border-subtle);border-radius:var(--radius-control);color:var(--text-secondary);background:#ffffff;font-size:12px;font-weight:800}.transfer-option-field__pager button:hover:not(:disabled){color:var(--blue-deep);border-color:#9cc2ff;background:#f7faff}.transfer-option-field__pager button:disabled{opacity:.55;cursor:not-allowed}.select-field{position:relative;min-width:0}.select-control{min-width:120px}.form-group .select-control,.modal-card .select-control{width:100%}.select-field__button{width:100%;height:36px;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 10px;border:1px solid var(--border-input);border-radius:var(--radius-control);color:var(--text-primary);background:var(--bg-input);box-shadow:inset 0 1px 2px rgba(15,35,65,.04);font-size:13px;font-weight:800}.select-field__button>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-field__button>svg{flex:0 0 auto;color:var(--text-muted);transition:transform .16s ease}.select-field--open .select-field__button{border-color:#9cc2ff;background:#ffffff;box-shadow:0 0 0 3px rgba(36,120,242,.12)}.select-field--open .select-field__button>svg{transform:rotate(180deg)}.select-field--disabled .select-field__button{opacity:.58;cursor:not-allowed}.select-field__placeholder{color:var(--text-muted);font-weight:700}.select-field__menu{z-index:1300;overflow:auto;padding:5px;border:1px solid #cbd8e8;border-radius:7px;background:#ffffff;box-shadow:0 14px 32px rgba(15,35,65,.18);-webkit-overflow-scrolling:touch}.select-field__option{width:100%;min-height:34px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 8px;border:0;border-radius:5px;color:var(--text-secondary);background:transparent;text-align:left;font-size:13px;font-weight:800}.select-field__option>span{min-width:0;overflow-wrap:anywhere}.select-field__option--active,.select-field__option--selected,.select-field__option:hover{color:var(--blue-deep);background:#eaf2ff}.select-field__option:disabled{color:var(--text-muted);background:transparent;opacity:.58;cursor:not-allowed}.select-field__empty{padding:10px 9px;color:var(--text-secondary);font-size:13px;text-align:center}.select-field__native-proxy{position:absolute;width:1px;height:1px;margin:0;padding:0;opacity:0;pointer-events:none}.login-container{position:relative;width:100%;height:100vh;height:100dvh;display:flex;align-items:flex-start;justify-content:center;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:20px;background:radial-gradient(circle at 50% 50%,#102e52,#041222)}.login-glow-1,.login-glow-2{position:absolute;border-radius:50%;pointer-events:none;filter:blur(44px);animation:teacher-pulse 8s infinite alternate}.login-glow-1{top:15%;left:20%;width:32vw;height:32vw;background:radial-gradient(circle,rgba(36,120,242,.22),rgba(36,120,242,0) 70%)}.login-glow-2{right:20%;bottom:15%;width:38vw;height:38vw;background:radial-gradient(circle,rgba(99,91,255,.18),rgba(99,91,255,0) 70%);animation-direction:alternate-reverse;animation-duration:10s}.login-card{position:relative;z-index:2;width:min(420px,100%);margin:auto 0;padding:38px 32px 34px;border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-card);background:rgba(255,255,255,.08);box-shadow:0 20px 50px rgba(0,0,0,.3);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.login-header{margin-bottom:28px;text-align:center}.login-logo{width:60px;height:60px;display:inline-grid;place-items:center;margin-bottom:16px;border-radius:12px;color:#ffffff;background:linear-gradient(135deg,var(--blue),var(--purple));box-shadow:0 4px 16px rgba(36,120,242,.35)}.login-header h2{margin:0;color:#ffffff;font-size:22px;font-weight:700;letter-spacing:.5px}.login-header p{margin:6px 0 0;color:rgba(255,255,255,.5);font-size:13px;font-weight:500}.login-form,.login-form form{display:flex;flex-direction:column;gap:18px}.form-group{display:flex;flex-direction:column;gap:8px;color:var(--text-secondary);font-size:13px;font-weight:700}.form-group>label{display:flex;align-items:center;gap:8px}.login-form .form-group>label{color:rgba(255,255,255,.75);font-weight:600}.login-form .form-group input{width:100%;height:40px;padding:0 12px;border:1px solid rgba(255,255,255,.15);border-radius:var(--radius-control);outline:none;color:#ffffff;background:rgba(255,255,255,.05);box-shadow:none;font-size:14px}.login-form .form-group input::placeholder{color:rgba(255,255,255,.3)}.login-form .form-group input:focus{border-color:var(--blue);background:rgba(255,255,255,.09);box-shadow:0 0 0 3px rgba(36,120,242,.25)}.login-form .form-group input:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.login-container .login-error{color:#ff9992;border-color:rgba(240,68,56,.35);background:rgba(240,68,56,.16)}.login-submit{width:100%;height:42px;display:flex;align-items:center;justify-content:center;margin-top:10px;border:0;border-radius:var(--radius-control);color:#ffffff;background:linear-gradient(90deg,var(--blue-deep),var(--blue-strong));box-shadow:0 4px 14px rgba(36,120,242,.25);font-size:15px;font-weight:700}.login-submit:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 18px rgba(36,120,242,.35)}.login-submit:disabled{color:rgba(255,255,255,.4);background:rgba(255,255,255,.15);box-shadow:none;cursor:not-allowed}@keyframes teacher-spin{to{transform:rotate(1turn)}}@keyframes teacher-pulse{0%{transform:scale(1);opacity:.8}to{transform:scale(1.1);opacity:1}}@media (max-width:768px){button{min-width:44px}.action-button,.card input:not([type=checkbox]):not([type=radio]),.danger-button,.filter-bar input:not([type=checkbox]):not([type=radio]),.login-form .form-group input,.modal-actions>button:not(.action-button):not(.secondary-button):not(.danger-button),.modal-card input:not([type=checkbox]):not([type=radio]),.pagination button,.secondary-button,.select-field__option,.transfer-option-field__pager button,button{min-height:44px}label:has(input[type=checkbox]),label:has(input[type=radio]){min-height:44px}.mobile-menu-toggle{position:fixed;z-index:1202;top:14px;left:14px;width:44px;height:44px;display:grid;place-items:center;padding:0;border:1px solid var(--border-subtle);border-radius:8px;color:var(--text-primary);background:#ffffff;box-shadow:var(--shadow-soft)}.mobile-sidebar-mask{position:fixed;inset:0;z-index:1199;display:block;background:rgba(4,18,34,.54);opacity:0;pointer-events:none;transition:opacity .18s ease}.mobile-sidebar-mask--show{opacity:1;pointer-events:auto}.admin-shell--sidebar-collapsed .admin-sidebar,.admin-sidebar{position:fixed;z-index:1201;inset:0 auto 0 0;width:min(290px,86vw);min-width:0;flex:none;flex-basis:auto;padding:max(14px,env(safe-area-inset-top)) 12px max(14px,env(safe-area-inset-bottom));transform:translateX(-105%);transition:transform .2s ease}.admin-sidebar--mobile-open{transform:translateX(0)}.sidebar-search{height:44px}.sidebar-close-mobile{width:44px;height:44px;display:grid;place-items:center;margin-left:auto;padding:0;border:0;border-radius:7px;color:#ffffff;background:rgba(255,255,255,.08)}.admin-shell--sidebar-collapsed .admin-brand{justify-content:flex-start;padding:2px 10px 28px}.admin-shell--sidebar-collapsed .admin-brand>:not(.admin-brand__mark){display:block}.admin-shell--sidebar-collapsed .sidebar-close-mobile{display:grid}.admin-shell--sidebar-collapsed .sidebar-search{display:block}.admin-shell--sidebar-collapsed .admin-nav-group__title{display:flex}.admin-nav-group__title{height:44px}.admin-shell--sidebar-collapsed .admin-subnav{display:none}.admin-shell--sidebar-collapsed .admin-subnav--open{display:grid}.admin-nav__item,.admin-shell--sidebar-collapsed .admin-nav__item{justify-content:flex-start;min-height:44px;padding:0 12px}.admin-shell--sidebar-collapsed .admin-nav__item>span{display:inline}.admin-shell--sidebar-collapsed .sidebar-collapse,.sidebar-collapse{display:none}.admin-topbar{min-height:64px;padding:10px 12px 10px 62px}.account-chip__avatar,.account-chip__meta{display:none}.account-chip__action{width:44px;height:44px;flex-basis:44px}.account-chip__action:after{display:none}.workspace-tab__close,.workspace-tab__main{height:44px}.workspace-tab__close{width:44px}.admin-content{padding:16px 14px 28px}.card{padding:16px}.filter-bar>*{flex:1 1 150px;min-width:0}.select-control{width:100%}}@media (max-width:560px){.admin-content{padding:12px 10px 24px}.card{padding:14px 12px;border-radius:7px}.summary-grid{grid-template-columns:1fr!important}td,th{padding:8px 9px}.modal-mask{place-items:end center;padding:8px}.modal-card{width:100%;max-height:calc(100dvh - 16px);padding:18px 16px;border-radius:12px 12px 8px 8px}.modal-actions>button{flex:1 1 120px;min-height:44px}.transfer-option-field{padding:10px}.transfer-option-field__search{grid-template-columns:minmax(0,1fr)}.transfer-option-field__search .secondary-button{width:100%}.transfer-option-field__feedback,.transfer-option-field__footer{align-items:flex-start;flex-direction:column}.action-button,.danger-button,.secondary-button{min-height:44px}.attendance-batch-panel{align-items:stretch}.attendance-batch-panel__actions{display:grid;grid-template-columns:1fr}.attendance-batch-panel__actions button{width:100%}.login-container{align-items:flex-start;padding:16px}.login-card{margin:auto 0;padding:28px 20px}}@media (pointer:coarse){button{min-width:48px}.action-button,.danger-button,.modal-actions>button,.pagination button,.secondary-button,.select-field__button,.transfer-option-field__pager button,button{min-height:48px}label:has(input[type=checkbox]),label:has(input[type=radio]){min-height:48px}}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.resource-file-cell{min-width:190px;max-width:260px;display:grid;gap:4px}.resource-file-cell>strong{overflow:hidden;color:var(--text-primary);font-size:12px;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.resource-file-cell>small,.resource-file-cell>span,.resource-file-cell__empty{color:var(--text-secondary);font-size:11px;line-height:1.45}.resource-file-cell__error{color:var(--red-deep)!important}.resource-file-cell__actions{display:flex;align-items:center;gap:10px;margin-top:3px}.resource-file-link{padding:0;border:0;color:var(--blue-deep);background:transparent;font-size:12px;font-weight:800}.resource-file-link:hover:not(:disabled){text-decoration:underline}.resource-file-link:disabled{color:var(--text-muted);cursor:wait}.resource-readonly-label{align-self:center;color:var(--text-muted);font-size:12px;font-weight:700}.resource-grant-options{min-width:0;max-height:190px;display:grid;gap:6px;overflow-y:auto;margin:0;padding:10px 12px 12px;border:1px solid var(--border-subtle);border-radius:var(--radius-control);background:var(--bg-soft)}.resource-grant-options legend{padding:0 5px;color:var(--text-secondary);font-size:13px;font-weight:800}.resource-grant-option{min-width:0;min-height:36px;display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--radius-control);color:var(--text-primary);background:var(--bg-surface);font-size:13px;cursor:pointer}.resource-grant-option>span{min-width:0;overflow-wrap:anywhere}.resource-grant-options:disabled .resource-grant-option{opacity:.64;cursor:not-allowed}.resource-stats,.resource-upload{display:grid;gap:14px}.resource-stats__resource,.resource-upload__resource{margin:0;overflow:hidden;color:var(--text-secondary);font-size:13px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.resource-stats__resource{margin-bottom:16px}.resource-stats__summary,.resource-upload__rule{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--border-soft);border-radius:var(--radius-control);background:var(--bg-soft);overflow:hidden}.resource-stats__metric,.resource-upload__rule>span{min-width:0;display:grid;align-content:start;gap:4px;padding:12px 14px}.resource-stats__metric+.resource-stats__metric,.resource-upload__rule>span+span{border-left:1px solid var(--border-soft)}.resource-upload__rule strong{color:var(--text-muted);font-size:11px;font-weight:800;letter-spacing:.03em}.resource-upload__input{display:none}.resource-upload__picker{width:100%;min-height:104px;display:flex;align-items:center;justify-content:center;gap:12px;padding:18px;border:1px dashed var(--border-input);border-radius:var(--radius-control);color:var(--blue-deep);background:var(--bg-surface)}.resource-upload__picker:hover:not(:disabled){border-color:var(--blue);background:var(--blue-soft)}.resource-upload__picker:disabled{opacity:.5;cursor:not-allowed}.resource-upload__picker>span{min-width:0;display:grid;gap:4px;text-align:left}.resource-upload__picker strong{color:var(--text-primary);font-size:14px;font-weight:800}.resource-upload__picker small{color:var(--text-secondary);font-size:12px;font-weight:600}.resource-stats__section-heading,.resource-upload__file,.resource-upload__progress-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.resource-upload__file{min-width:0;padding:10px 12px;border:1px solid var(--border-soft);border-radius:var(--radius-control);color:var(--text-primary);background:var(--bg-soft);font-size:13px}.resource-upload__file span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resource-upload__file strong,.resource-upload__progress-head strong{flex:0 0 auto;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.resource-upload__error,.resource-upload__note,.resource-upload__warning{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:8px;margin:0;padding:10px 12px;border-radius:var(--radius-control);font-size:13px;line-height:1.5}.resource-upload__warning{border:1px solid var(--orange);color:var(--text-primary);background:var(--bg-soft)}.resource-upload__error{border:1px solid var(--red-deep);color:var(--red-deep);background:var(--red-soft);font-weight:700}.resource-upload__note{padding:0;color:var(--text-secondary)}.resource-upload__progress{display:grid;gap:8px}.resource-upload__progress-head{color:var(--text-secondary);font-size:12px;font-weight:700}.resource-stats__progress-track,.resource-upload__progress-track{height:8px;overflow:hidden;border-radius:999px;background:var(--bg-input)}.resource-stats__progress-track>span,.resource-upload__progress-track>span{display:block;height:100%;border-radius:inherit;background:var(--blue);transition:width .15s ease}.resource-stats{gap:20px}.resource-stats__duration>span,.resource-stats__metric>span,.resource-stats__progress-copy>span{color:var(--text-secondary);font-size:12px;font-weight:700}.resource-stats__duration>strong,.resource-stats__metric>strong,.resource-stats__progress-copy>strong{color:var(--text-primary);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.resource-stats__metric>strong{font-size:26px;line-height:1.15;font-weight:850}.resource-stats__metric>small,.resource-stats__progress-copy>small{color:var(--text-muted);font-size:11px;line-height:1.4}.resource-stats__progress{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px 24px;padding:15px 16px;border:1px solid var(--border-soft);border-radius:var(--radius-control);background:var(--bg-surface)}.resource-stats__progress-copy{min-width:0;display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:2px 10px}.resource-stats__progress-copy>strong{font-size:20px;font-weight:850}.resource-stats__progress-copy>small{grid-column:1/-1}.resource-stats__progress-track{grid-column:1}.resource-stats__duration{grid-column:2;grid-row:1/span 2;display:grid;gap:4px;padding-left:24px;border-left:1px solid var(--border-soft);text-align:right}.resource-stats__duration>strong{font-size:17px;font-weight:800}.resource-stats__classes{min-width:0;display:grid;gap:10px}.resource-stats__section-heading{align-items:flex-end}.resource-stats__section-heading h4{margin:0;color:var(--text-primary);font-size:14px;font-weight:850}.resource-stats__section-heading p{margin:3px 0 0;color:var(--text-secondary);font-size:12px;line-height:1.5}.resource-stats__section-heading>span{flex:0 0 auto;color:var(--text-muted);font-size:12px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.resource-stats__table-wrap{max-height:300px;overflow:auto;border:1px solid var(--border-soft);border-radius:var(--radius-control)}.resource-stats__table{width:100%;min-width:620px}.resource-stats__table th{position:sticky;top:0;z-index:1;background:var(--bg-soft)}.resource-stats__table td,.resource-stats__table th{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.resource-stats__table td:not(:first-child),.resource-stats__table th:not(:first-child){text-align:right;white-space:nowrap}.resource-stats__empty,.resource-stats__state{min-height:180px;display:grid;place-items:center;align-content:center;gap:7px;padding:28px 20px;border:1px dashed var(--border-input);border-radius:var(--radius-control);color:var(--text-secondary);background:var(--bg-soft);text-align:center}.resource-stats__empty strong,.resource-stats__state strong{color:var(--text-primary);font-size:14px}.resource-stats__empty span,.resource-stats__state span{max-width:430px;font-size:12px;line-height:1.5}.resource-stats__state--error{border-style:solid;border-color:var(--red-deep);color:var(--red-deep);background:var(--red-soft)}.resource-preview__resource{margin:0 0 12px;overflow:hidden;color:var(--text-secondary);font-size:13px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.resource-preview{min-width:0;display:grid;place-items:center;overflow:hidden;border:1px solid var(--border-soft);border-radius:var(--radius-control);background:var(--bg-soft)}.resource-preview__document,.resource-preview__image,.resource-preview__video{width:100%;border:0}.resource-preview__video{max-height:68vh;background:#0f172a}.resource-preview__image{max-height:68vh;object-fit:contain}.resource-preview__document{height:64vh;min-height:440px;background:white}.resource-preview__state{min-height:440px;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);font-size:13px}.resource-preview__state--error{color:var(--red-deep)}@media (max-width:640px){.resource-stats__summary,.resource-upload__rule{grid-template-columns:1fr}.resource-stats__metric+.resource-stats__metric,.resource-upload__rule>span+span{border-top:1px solid var(--border-soft);border-left:0}.resource-stats__progress{grid-template-columns:1fr}.resource-stats__progress-track{grid-column:1}.resource-stats__duration{grid-column:1;grid-row:auto;padding-top:12px;padding-left:0;border-top:1px solid var(--border-soft);border-left:0;text-align:left}.resource-stats__section-heading{align-items:flex-start;flex-direction:column;gap:5px}.resource-preview__document,.resource-preview__state{height:56vh;min-height:300px}}.toast-region{position:fixed;right:16px;bottom:calc(16px + env(safe-area-inset-bottom, 0px));z-index:1800;width:min(380px,calc(100vw - 32px));max-height:calc(100dvh - 32px - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px));overflow-y:auto;overscroll-behavior:contain;padding:4px;pointer-events:auto}.toast-stack{display:flex;flex-direction:column;gap:8px}.toast{flex-shrink:0;display:flex;align-items:flex-start;gap:10px;padding:12px 12px 12px 14px;border:1px solid var(--border-subtle);border-radius:8px;background:var(--bg-surface);box-shadow:var(--shadow-modal);color:var(--text-primary);font-size:14px;line-height:1.5;pointer-events:auto;animation:toast-in var(--dur-short) var(--ease-out)}.toast--error{border-color:rgba(240,68,56,.4);border-left:4px solid var(--red);background:var(--red-soft);color:var(--red-deep)}.toast--warning{border-color:rgba(249,115,22,.45);border-left:4px solid var(--orange);background:color-mix(in srgb,var(--orange) 10%,white);color:var(--text-primary)}.toast--success{border-color:rgba(22,179,100,.4);border-left:4px solid var(--green);background:var(--green-soft);color:var(--green-deep)}.toast__message{flex:1 1;min-width:0;overflow-wrap:anywhere}.toast__close{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;border-radius:6px;background:transparent;color:inherit;cursor:pointer}.toast__close:hover{background:rgba(15,35,65,.08)}.toast__close:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}@media (max-width:768px){.toast-region{top:calc(16px + env(safe-area-inset-top, 0px));right:16px;bottom:auto;left:16px;width:auto}.toast-stack{flex-direction:column-reverse}.toast{animation-name:toast-in-top}.toast__close{width:44px;min-width:44px;height:44px;min-height:44px}}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes toast-in-top{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}