:root{--font-sans:Inter, "PingFang SC", "Microsoft YaHei", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--bg-page:#f4f7fb;--bg-surface:#fff;--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:#8793a5;--text-inverse:#fff;--blue:#2478f2;--blue-deep:#135bd7;--green:#16b364;--orange:#f97316;--red:#f04438;--purple:#635bff;--shadow-card:0 8px 26px #0f234112;--shadow-soft:0 4px 16px #0f23410d;--radius-card:8px;--radius-control:6px;--primary:var(--blue);--primary-hover:var(--blue-deep);--bg:var(--bg-page);--card-bg:var(--bg-surface);--border:var(--border-subtle);--success:var(--green);--warning:var(--orange);--danger:var(--red)}*{box-sizing:border-box}html,body,#root{width:100%;height:100dvh}body{overscroll-behavior:none;background:var(--bg-page);color:var(--text-primary);font-family:var(--font-sans);-webkit-tap-highlight-color:transparent;margin:0;overflow:hidden}button,input,textarea{font:inherit}button{cursor:pointer}button:focus-visible,input:focus-visible,textarea:focus-visible{outline-offset:2px;outline:2px solid #2478f273}.auth-loading-screen{color:#ffffffd1;background:radial-gradient(circle,#102e52,#041222);justify-content:center;align-items:center;gap:12px;width:100%;height:100dvh;font-size:14px;font-weight:700;display:flex}.auth-loading-screen__spinner{border:3px solid #ffffff29;border-left-color:var(--blue);border-radius:50%;width:28px;height:28px;animation:.8s linear infinite teacher-spin}.app-layout{background:var(--bg-page);width:100%;min-width:0;max-width:100%;height:100dvh;display:flex;overflow:hidden}.mobile-menu-toggle,.mobile-sidebar-mask{display:none}.sidebar{width:196px;min-height:0;color:var(--text-inverse);background:linear-gradient(180deg, #1c71ed29, #041a3200 36%), linear-gradient(180deg, var(--bg-sidebar), var(--bg-sidebar-deep));flex-direction:column;flex:0 0 196px;padding:20px 12px 22px;display:flex;box-shadow:7px 0 22px #06234229}.sidebar__logo{align-items:center;gap:11px;padding:2px 10px 28px;display:flex}.sidebar__logo-mark{border:1px solid #fffc;border-radius:6px;flex:0 0 36px;place-items:center;width:36px;height:36px;display:grid}.sidebar__logo strong,.sidebar__logo span{line-height:1.2;display:block}.sidebar__logo strong{white-space:nowrap;font-size:15px;font-weight:800}.sidebar__logo span{margin-top:3px;font-size:13px;font-weight:700}.sidebar__close{display:none}.sidebar__nav{scrollbar-width:none;-webkit-overflow-scrolling:touch;flex:1;align-content:start;gap:4px;min-height:0;padding-right:2px;display:grid;overflow-y:auto}.sidebar__nav::-webkit-scrollbar{display:none}.sidebar__item{color:#ffffffe6;text-align:left;background:0 0;border:0;border-radius:6px;align-items:center;gap:10px;width:100%;min-height:36px;padding:0 12px;transition:background .18s,color .18s,box-shadow .18s;display:flex}.sidebar__item span{white-space:nowrap;font-size:14px;font-weight:700}.sidebar__item:hover{background:#ffffff1a}.sidebar__item--active{color:#fff;background:linear-gradient(90deg,#1f7cff,#2478f2);box-shadow:0 8px 18px #1f7cff47}.teacher-main{flex-direction:column;flex:1;min-width:0;display:flex}.main-header{border-bottom:1px solid var(--border-subtle);background:#fffffff5;flex:none;justify-content:space-between;align-items:center;gap:16px;min-height:64px;padding:10px 28px;display:flex;overflow:visible;box-shadow:0 2px 9px #0f23410a}.main-header__title{min-width:0}.main-header h1{max-width:min(58vw,760px);color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:20px;font-weight:900;line-height:1.25;overflow:hidden}.main-header__title>span{color:var(--text-muted);margin-top:2px;font-size:11px;font-weight:700;display:block}.account-chip{color:var(--text-primary);white-space:nowrap;flex:none;align-items:center;gap:9px;display:flex}.account-chip__avatar{color:#13263b;background:linear-gradient(#f2f6fb,#d9e3ef);border:1px solid #d5deeb;border-radius:50%;place-items:center;width:34px;height:34px;display:grid}.account-chip__meta{flex-direction:column;align-items:flex-start;min-width:0;display:flex}.account-chip__name{text-overflow:ellipsis;max-width:130px;font-size:13px;font-weight:700;line-height:1.2;overflow:hidden}.account-chip__role{color:var(--text-muted);margin-top:2px;font-size:11px}.account-chip__action{width:36px;height:36px;color:var(--text-secondary);background:0 0;border:0;border-radius:8px;flex:0 0 36px;place-items:center;margin-left:2px;padding:0;display:inline-grid;position:relative}.account-chip__action:hover,.account-chip__action:focus-visible{color:var(--text-primary);background:#0f23410f}.account-chip__action:after{content:attr(data-tooltip);z-index:80;color:#fff;opacity:0;pointer-events:none;background:#10243b;border-radius:5px;width:max-content;max-width:160px;padding:6px 9px;font-size:12px;font-weight:700;line-height:1.35;transition:opacity .12s,transform .12s;position:absolute;top:calc(100% + 7px);left:50%;transform:translate(-50%,-3px);box-shadow:0 8px 22px #0412223d}.account-chip__action:hover:after,.account-chip__action:focus-visible:after{opacity:1;transform:translate(-50%)}.main-area{overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:1;min-height:0;padding:20px 24px 36px;overflow:auto}.main-area>*{width:100%;max-width:1320px;margin-left:auto;margin-right:auto}.success-notice{border-radius:var(--radius-control);color:#087443;background:#e9fbf1;border:1px solid #16b36447;justify-content:space-between;align-items:center;gap:12px;min-height:38px;margin-bottom:14px;padding:8px 10px 8px 13px;font-size:13px;font-weight:700;display:flex}.success-notice button{width:26px;height:26px;color:inherit;background:0 0;border:0;border-radius:5px;place-items:center;padding:0;display:grid}.success-notice button:hover{background:#08744317}.card{border:1px solid var(--border-subtle);border-radius:var(--radius-card);background:var(--bg-surface);min-width:0;box-shadow:var(--shadow-card);margin-bottom:16px;padding:18px 20px 20px;overflow:hidden}.card__title{color:var(--text-primary);margin:0 0 14px;font-size:16px;font-weight:900;line-height:1.35}table{border:1px solid var(--border-subtle);border-radius:var(--radius-control);border-spacing:0;border-collapse:collapse;color:#263547;-webkit-overflow-scrolling:touch;background:#fff;width:100%;max-width:100%;font-size:12px;display:block;overflow-x:auto}th,td{border-bottom:1px solid var(--border-soft);text-align:left;vertical-align:middle;overflow-wrap:anywhere;min-width:96px;padding:9px 10px}th{color:var(--text-secondary);white-space:nowrap;background:#f7faff;font-size:12px;font-weight:900}td{font-size:13px;font-weight:600}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fbfdff}.loading{color:var(--text-secondary);text-align:center;padding:42px 20px;font-size:14px}.filter-bar{border:1px solid var(--border-subtle);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);background:#fff;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;padding:12px;display:flex}.filter-bar>span{color:var(--text-secondary);font-size:13px;font-weight:700}.action-button,.secondary-button,.pagination button{border-radius:var(--radius-control);white-space:nowrap;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:0 13px;font-size:13px;font-weight:800;line-height:1.2;display:inline-flex}.action-button{border:1px solid var(--blue-deep);color:#fff;background:var(--blue)}.action-button:hover:not(:disabled){background:var(--blue-deep)}.secondary-button,.pagination button{border:1px solid var(--border-subtle);color:var(--text-secondary);background:#fff}.secondary-button:hover:not(:disabled),.pagination button:hover:not(:disabled){color:var(--blue-deep);background:#f7faff;border-color:#9cc2ff}.action-button:disabled,.secondary-button:disabled,.pagination button:disabled{opacity:.55;cursor:not-allowed}.pagination{color:var(--text-secondary);justify-content:center;align-items:center;gap:10px;margin-top:16px;font-size:13px;display:flex}.card input:not([type=checkbox]):not([type=radio]),.card textarea,.modal-card input:not([type=checkbox]):not([type=radio]),.modal-card textarea,.filter-bar input{border:1px solid var(--border-input);border-radius:var(--radius-control);width:100%;min-width:0;min-height:36px;color:var(--text-primary);background:var(--bg-input);outline:none;padding:0 12px;font-size:13px;transition:border-color .15s,box-shadow .15s,background .15s;box-shadow:inset 0 1px 2px #0f23410a}.card textarea,.modal-card textarea{resize:vertical;min-height:88px;padding:10px 12px;line-height:1.5}.card input:not([type=checkbox]):not([type=radio]):focus,.card textarea:focus,.modal-card input:not([type=checkbox]):not([type=radio]):focus,.modal-card textarea:focus,.filter-bar input:focus{border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px #2478f21f}.card label,.modal-card label,.login-field label{color:var(--text-secondary);font-size:13px;font-weight:700}.login-field{gap:6px;margin-bottom:14px;display:grid}.status-badge{color:#516174;white-space:nowrap;background:#eef2f6;border-radius:999px;justify-content:center;align-items:center;min-height:22px;padding:0 9px;font-size:12px;font-weight:800;display:inline-flex}.status-badge--active,.status-badge--approved,.status-badge--published,.status-badge--checked_in,.status-badge--attended{color:#087443;background:#e9fbf1}.status-badge--planning,.status-badge--enrolling,.status-badge--pending_review{color:#155fd0;background:#eaf2ff}.status-badge--pending,.status-badge--leave{color:#bd4b00;background:#fff1e7}.status-badge--rejected,.status-badge--conversion_failed,.status-badge--absent{color:#c0182f;background:#fff0f0}.status-badge--completed,.status-badge--withdrawn,.status-badge--draft,.status-badge--unpublished,.status-badge--archived,.status-badge--revoked{color:#516174;background:#eef2f6}.login-error{border-radius:var(--radius-control);color:#c0182f;text-align:center;background:#fff0f0;border:1px solid #f0443842;margin-bottom:14px;padding:10px 12px;font-size:13px;font-weight:700}.modal-mask{z-index:1000;background:#041222a6;place-items:center;padding:16px;display:grid;position:fixed;inset:0;overflow-y:auto}.modal-card{border:1px solid var(--border-subtle);background:var(--bg-surface);border-radius:12px;width:min(520px,100%);max-height:calc(100dvh - 32px);padding:20px;overflow:auto;box-shadow:0 18px 48px #04122242}.modal-card--wide{width:min(760px,100%)}.modal-card__header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:14px;display:flex}.modal-card__header .card__title{margin:5px 0 0}.modal-card__close{width:32px;height:32px;color:var(--text-secondary);background:0 0;border:0;border-radius:8px;flex:0 0 32px;place-items:center;padding:0;display:inline-grid}.modal-card__close:hover{color:var(--text-primary);background:#0f23410f}.modal-card__close:disabled{opacity:.5;cursor:not-allowed}.modal-description{color:var(--text-secondary);margin:0 0 14px;font-size:13px;line-height:1.5}.modal-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;margin-top:16px;display:flex}.modal-actions>button:not(.action-button):not(.secondary-button){border:1px solid var(--border-subtle);border-radius:var(--radius-control);min-height:34px;color:var(--text-secondary);background:#fff;padding:0 13px;font-size:13px;font-weight:800}.select-field{min-width:0;position:relative}.select-control{min-width:120px}.form-group .select-control,.modal-card .select-control{width:100%}.select-field__button{border:1px solid var(--border-input);border-radius:var(--radius-control);width:100%;height:36px;color:var(--text-primary);background:var(--bg-input);justify-content:space-between;align-items:center;gap:8px;padding:0 10px;font-size:13px;font-weight:800;display:flex;box-shadow:inset 0 1px 2px #0f23410a}.select-field__button>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.select-field__button>svg{color:var(--text-muted);flex:none;transition:transform .16s}.select-field--open .select-field__button{background:#fff;border-color:#9cc2ff;box-shadow:0 0 0 3px #2478f21f}.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;-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #cbd8e8;border-radius:7px;padding:5px;overflow:auto;box-shadow:0 14px 32px #0f23412e}.select-field__option{width:100%;min-height:34px;color:var(--text-secondary);text-align:left;background:0 0;border:0;border-radius:5px;justify-content:space-between;align-items:center;gap:10px;padding:7px 8px;font-size:13px;font-weight:800;display:flex}.select-field__option>span{overflow-wrap:anywhere;min-width:0}.select-field__option:hover,.select-field__option--selected,.select-field__option--active{color:var(--blue-deep);background:#eaf2ff}.select-field__option:disabled{color:var(--text-muted);opacity:.58;cursor:not-allowed;background:0 0}.select-field__empty{color:var(--text-secondary);text-align:center;padding:10px 9px;font-size:13px}.select-field__native-proxy{opacity:0;pointer-events:none;width:1px;height:1px;margin:0;padding:0;position:absolute}.login-container{background:radial-gradient(circle,#102e52,#041222);justify-content:center;align-items:center;width:100%;height:100dvh;padding:20px;display:flex;position:relative;overflow:hidden}.login-glow-1,.login-glow-2{pointer-events:none;filter:blur(44px);border-radius:50%;animation:8s infinite alternate teacher-pulse;position:absolute}.login-glow-1{background:radial-gradient(circle,#2478f238,#2478f200 70%);width:32vw;height:32vw;top:15%;left:20%}.login-glow-2{background:radial-gradient(circle,#635bff2e,#635bff00 70%);width:38vw;height:38vw;animation-duration:10s;animation-direction:alternate-reverse;bottom:15%;right:20%}.login-card{z-index:2;border-radius:var(--radius-card);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#ffffff14;border:1px solid #ffffff1f;width:min(420px,100%);padding:38px 32px 34px;position:relative;box-shadow:0 20px 50px #0000004d}.login-header{text-align:center;margin-bottom:28px}.login-logo{color:#fff;background:linear-gradient(135deg, var(--blue), var(--purple));border-radius:12px;place-items:center;width:60px;height:60px;margin-bottom:16px;display:inline-grid;box-shadow:0 4px 16px #2478f259}.login-header h2{color:#fff;letter-spacing:.5px;margin:0;font-size:22px;font-weight:700}.login-header p{color:#ffffff80;margin:6px 0 0;font-size:13px;font-weight:500}.login-form,.login-form form{flex-direction:column;gap:18px;display:flex}.form-group{color:var(--text-secondary);flex-direction:column;gap:8px;font-size:13px;font-weight:700;display:flex}.form-group>label{align-items:center;gap:8px;display:flex}.login-form .form-group>label{color:#ffffffbf;font-weight:600}.login-form .form-group input{border-radius:var(--radius-control);color:#fff;width:100%;height:40px;box-shadow:none;background:#ffffff0d;border:1px solid #ffffff26;outline:none;padding:0 12px;font-size:14px}.login-form .form-group input::placeholder{color:#ffffff4d}.login-form .form-group input:focus{border-color:var(--blue);background:#ffffff17;box-shadow:0 0 0 3px #2478f240}.login-container .login-error{color:#ff9992;background:#f0443829;border-color:#f0443859}.login-submit{border-radius:var(--radius-control);color:#fff;background:linear-gradient(90deg, var(--blue), var(--blue-deep));border:0;justify-content:center;align-items:center;width:100%;height:42px;margin-top:10px;font-size:15px;font-weight:700;display:flex;box-shadow:0 4px 14px #2478f240}.login-submit:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 18px #2478f259}.login-submit:disabled{color:#fff6;box-shadow:none;cursor:not-allowed;background:#ffffff26}@keyframes teacher-spin{to{transform:rotate(360deg)}}@keyframes teacher-pulse{0%{opacity:.8;transform:scale(1)}to{opacity:1;transform:scale(1.1)}}@media (width<=760px){.mobile-menu-toggle{z-index:1202;border:1px solid var(--border-subtle);width:36px;height:36px;color:var(--text-primary);box-shadow:var(--shadow-soft);background:#fff;border-radius:8px;place-items:center;padding:0;display:grid;position:fixed;top:14px;left:14px}.mobile-sidebar-mask{z-index:1199;opacity:0;pointer-events:none;background:#0412228a;transition:opacity .18s;display:block;position:fixed;inset:0}.mobile-sidebar-mask--show{opacity:1;pointer-events:auto}.sidebar{z-index:1201;width:min(290px,86vw);transition:transform .2s;position:fixed;inset:0 auto 0 0;transform:translate(-105%)}.sidebar--mobile-open{transform:translate(0)}.sidebar__close{color:#fff;background:#ffffff14;border:0;border-radius:7px;place-items:center;width:32px;height:32px;margin-left:auto;padding:0;display:grid}.main-header{min-height:64px;padding:10px 12px 10px 62px}.main-header h1{max-width:42vw;font-size:18px}.account-chip__meta,.account-chip__avatar{display:none}.account-chip__action{flex-basis:34px;width:34px;height:34px}.account-chip__action:after{display:none}.main-area{padding:16px 14px 28px}.card{padding:16px}.filter-bar>*{flex:150px;min-width:0}.select-control{width:100%}}@media (width<=560px){.main-header__title>span{display:none}.main-header h1{max-width:34vw;font-size:17px}.main-area{padding:12px 10px 24px}.card{border-radius:7px;padding:14px 12px}th,td{padding:8px 9px}.modal-mask{place-items:end center;padding:8px}.modal-card{border-radius:12px 12px 8px 8px;width:100%;max-height:calc(100dvh - 16px);padding:18px 16px}.modal-actions>button{flex:120px;min-height:40px}.action-button,.secondary-button{min-height:40px}.login-container{align-items:flex-start;padding:16px}.login-card{margin:auto 0;padding:28px 20px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
