html,body{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0}[tabindex="-1"]:focus{outline:none}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[title],abbr[data-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=text],input[type=password],input[type=number],textarea{-webkit-appearance:none}ol,ul,dl{margin-top:0;margin-bottom:1em}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}pre,code,kbd,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;text-align:left;caption-side:bottom}input,button,select,optgroup,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}.ai-chat-panel{display:flex;flex-direction:column;border-top:1px solid var(--border-color);background:var(--bg-primary);transition:height .3s ease}.ai-chat-panel-collapsed{flex:0 0 auto}.ai-chat-panel:not(.ai-chat-panel-collapsed){height:50%;min-height:300px}.ai-chat-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;background:var(--bg-soft);border-bottom:1px solid var(--border-color);flex-shrink:0;min-height:40px}.ai-chat-header:hover{background:var(--bg-hover)}.ai-chat-header-left{display:flex;align-items:center;gap:8px;min-width:0}.ai-chat-title{font-weight:600;font-size:14px;color:var(--text-primary);white-space:nowrap}.ai-chat-context{font-size:12px;color:var(--text-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ai-chat-quick-actions{padding:12px;border-bottom:1px solid var(--border-color);flex-shrink:0}.ai-chat-quick-title{font-size:12px;color:var(--text-tertiary);margin-bottom:8px;display:flex;align-items:center;gap:4px}.ai-chat-quick-buttons{display:flex;flex-wrap:wrap;gap:6px}.ai-chat-quick-buttons .ant-btn{font-size:12px}.ai-chat-messages{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px;min-height:0}.ai-chat-messages::-webkit-scrollbar{width:6px}.ai-chat-messages::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}.ai-chat-loading{display:flex;align-items:center;gap:8px;padding:8px 12px;color:var(--text-tertiary);font-size:13px}.ai-chat-input-area{display:flex;align-items:flex-end;gap:8px;padding:10px 12px;border-top:1px solid var(--border-color);flex-shrink:0;background:var(--bg-primary)}.ai-chat-input-area .ant-input{flex:1;resize:none}.ai-chat-send-btn{flex-shrink:0}.ai-bubble{display:flex;gap:8px;max-width:85%}.ai-bubble-user{align-self:flex-end;flex-direction:row-reverse}.ai-bubble-assistant{align-self:flex-start}.ai-bubble-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;background:var(--bg-soft)}.ai-bubble-user .ai-bubble-avatar{background:#1677ff;color:#fff}.ai-bubble-content{position:relative;padding:10px 14px;border-radius:12px;font-size:13px;line-height:1.6;word-break:break-word}.ai-bubble-user .ai-bubble-content{background:#1677ff;color:#fff;border-bottom-right-radius:4px}.ai-bubble-assistant .ai-bubble-content{background:var(--bg-soft);color:var(--text-primary);border-bottom-left-radius:4px;border:1px solid var(--border-color)}.ai-bubble-text{margin:0;white-space:pre-wrap}.ai-bubble-markdown{overflow-wrap:break-word}.ai-bubble-markdown p{margin:0 0 6px}.ai-bubble-markdown p:last-child{margin-bottom:0}.ai-bubble-markdown h2,.ai-bubble-markdown h3,.ai-bubble-markdown h4{margin:8px 0 4px;font-weight:600}.ai-bubble-markdown h2{font-size:15px}.ai-bubble-markdown h3{font-size:14px}.ai-bubble-markdown h4{font-size:13px}.ai-bubble-markdown ul,.ai-bubble-markdown ol{margin:4px 0;padding-left:18px}.ai-bubble-markdown li{margin:2px 0}.ai-bubble-markdown pre{background:#1e1e1e;color:#d4d4d4;border-radius:6px;padding:10px 14px;overflow-x:auto;margin:6px 0;font-size:12px;line-height:1.5}.ai-bubble-markdown code{font-family:Consolas,Courier New,monospace;font-size:12px}.ai-bubble-markdown p code{background:#0000000f;padding:2px 6px;border-radius:4px}.ai-bubble-user .ai-bubble-markdown p code{background:#fff3}.ai-bubble-assistant .ai-bubble-markdown strong{color:#1677ff}.ai-bubble-copy{position:absolute;top:4px;right:4px;background:transparent;border:none;cursor:pointer;padding:2px 4px;border-radius:4px;color:var(--text-tertiary);font-size:12px;opacity:0;transition:opacity .2s}.ai-bubble-content:hover .ai-bubble-copy{opacity:1}.ai-bubble-copy:hover{color:var(--text-primary);background:#0000000f}@media (max-width: 768px){.ai-chat-panel:not(.ai-chat-panel-collapsed){height:60%;min-height:250px}.ai-bubble{max-width:90%}}:root,[data-theme=dark]{--bg-page: #0a0a0a;--bg-soft: #1a1a1a;--bg-elevated: #1f1f1f;--border-color: rgba(0, 212, 255, .2);--border-strong: rgba(0, 212, 255, .35);--text-primary: #ffffff;--text-secondary: #8c8c8c;--text-tertiary: #555555;--primary: #00d4ff;--primary-hover: #33e0ff;--primary-soft: rgba(0, 212, 255, .1);--primary-color: #00d4ff;--primary-dark: #0a7c9c;--primary-glow: rgba(0, 212, 255, .3);--bg-card: #141414;--bg-card-gradient: linear-gradient(135deg, #141414 0%, #1f1f1f 100%);--border-light: rgba(255, 255, 255, .08);--success-color: #52c41a;--pending-color: #8c8c8c;--warning-color: #faad14;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .3);--shadow-md: 0 4px 16px rgba(0, 0, 0, .4);--shadow-glow: 0 0 12px rgba(0, 212, 255, .15);--transition-base: all .3s ease;--sider-bg: linear-gradient(180deg, #0a0a0a 0%, #0d1117 100%);--sider-border: rgba(0, 212, 255, .1);--header-bg: rgba(10, 10, 10, .95);--header-border: rgba(0, 212, 255, .15);--table-header-bg: rgba(0, 212, 255, .1);--table-hover-bg: rgba(0, 212, 255, .06);--table-border: rgba(0, 212, 255, .2);--table-cell-border: rgba(255, 255, 255, .06);--current-week-bg: rgba(0, 212, 255, .1);--input-bg: #1a1a1a;--tag-primary-bg: rgba(0, 212, 255, .15);--tag-primary-color: #00d4ff;--icon-submitted: #00d4ff;--icon-unsubmitted: #555;--task-title-bg: rgba(0, 212, 255, .1);--task-title-border: rgba(0, 212, 255, .2)}[data-theme=light]{--bg-page: #f5f6f8;--bg-soft: #fafbfc;--bg-elevated: #ffffff;--border-color: #e7eaf0;--border-strong: #d9dee8;--text-primary: #333333;--text-secondary: #667085;--text-tertiary: #98a2b3;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-soft: #eff6ff;--primary-color: #2563eb;--primary-dark: #1d4ed8;--primary-glow: rgba(37, 99, 235, .15);--bg-card: #ffffff;--bg-card-gradient: linear-gradient(135deg, #ffffff 0%, #fafbfc 100%);--border-light: #f0f0f0;--success-color: #12b76a;--pending-color: #8c8c8c;--warning-color: #f79009;--radius-md: 8px;--radius-lg: 12px;--shadow-sm: 0 2px 8px rgba(15, 23, 42, .06);--shadow-md: 0 4px 16px rgba(15, 23, 42, .08);--shadow-glow: 0 2px 8px rgba(15, 23, 42, .06);--transition-base: all .3s ease;--sider-bg: linear-gradient(180deg, #1e293b 0%, #0f172a 100%);--sider-border: transparent;--header-bg: rgba(255, 255, 255, .95);--header-border: #e7eaf0;--table-header-bg: #f5f6f8;--table-hover-bg: #f0f5ff;--table-border: #e7eaf0;--table-cell-border: #f0f0f0;--current-week-bg: #f6ffed;--input-bg: #ffffff;--tag-primary-bg: #e0e7ff;--tag-primary-color: #4338ca;--icon-submitted: #1890ff;--icon-unsubmitted: #d9d9d9;--task-title-bg: #f0f0f0;--task-title-border: #e7eaf0}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans SC,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5;color:var(--text-primary);background:var(--bg-page);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--primary);text-decoration:none}button{font:inherit}.portal-layout{min-height:100vh}.portal-sider{background:var(--sider-bg)!important;border-right:1px solid var(--sider-border)!important;box-shadow:4px 0 24px #0006;position:fixed!important;left:0;top:0;bottom:0;z-index:100}.portal-logo{padding:28px 24px 20px;border-bottom:1px solid rgba(0,212,255,.15)}.portal-logo h2{margin:0 0 6px;color:var(--primary-color);font-size:20px;line-height:1.3;font-weight:700;text-shadow:0 0 12px var(--primary-glow)}.portal-logo p{margin:0;color:var(--primary-soft);font-size:13px}.portal-menu{border-inline-end:0!important;background:transparent!important;padding:12px}.portal-menu .ant-menu-item{height:46px;margin-bottom:8px;border-radius:8px;color:var(--text-secondary)!important;transition:all .3s ease}.portal-menu .ant-menu-item:hover{color:var(--primary-color)!important;background:var(--primary-soft)!important}.portal-menu .ant-menu-item-selected{color:#fff!important;background:linear-gradient(135deg,var(--primary-color) 0%,var(--primary-dark) 100%)!important;box-shadow:0 4px 12px var(--primary-glow)}.portal-menu .ant-menu-item .anticon{color:var(--text-secondary)!important}.portal-menu .ant-menu-item-selected .anticon,.portal-menu .ant-menu-item:hover .anticon{color:#fff!important}.portal-menu.ant-menu-inline-collapsed{width:60px}.portal-header{display:flex;align-items:center;justify-content:space-between;padding:0 24px!important;background:var(--header-bg)!important;border-bottom:1px solid var(--header-border);box-shadow:0 2px 12px #0000004d}.portal-header-left{display:flex;align-items:center;gap:12px}.portal-header-left h3{margin:0;color:var(--text-primary);font-size:18px;font-weight:600}.header-clock{font-family:Consolas,Courier New,monospace;font-size:14px;font-weight:700;color:var(--text-primary);letter-spacing:.5px;white-space:nowrap}.twl-table{width:100%;border-collapse:collapse;table-layout:fixed;font-size:13px}.twl-table th,.twl-table td{border:1px solid var(--table-cell-border);padding:4px 2px;text-align:center;vertical-align:middle}.twl-table thead th{background:var(--table-header-bg);font-weight:600;color:var(--text-primary)}.twl-table tbody td{background:var(--bg-card);color:var(--text-primary)}.twl-table .current-week-col{background:var(--current-week-bg)!important}.portal-content{padding:24px!important;background:var(--bg-page);position:relative;flex:1;overflow:auto;margin-left:240px}.portal-footer{text-align:center;padding:16px 24px!important;background:var(--bg-soft)!important;border-top:1px solid var(--border-color);margin-left:240px}.portal-footer a{color:var(--text-tertiary);font-size:12px;text-decoration:none;transition:color .3s ease}.portal-footer a:hover{color:var(--primary-color)}.user-pill{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border-color);border-radius:8px;background:var(--bg-soft);color:var(--text-secondary);cursor:pointer;padding:10px 14px;transition:var(--transition-base)}.user-pill:hover{color:var(--primary-color);border-color:var(--primary-color);box-shadow:var(--shadow-glow)}.page-shell{padding:0}.section-gap{margin-top:20px}.compact-card,.ant-card{border:1px solid var(--border-color)!important;border-radius:var(--radius-lg)!important;box-shadow:var(--shadow-glow),var(--shadow-sm)!important;background:var(--bg-card)!important}.compact-card .ant-card-body{padding:20px}.card-head{margin-bottom:18px}.card-head-between{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.card-head h3{margin:0;font-size:16px;font-weight:600;color:var(--text-primary)}.card-head p,.muted-meta,.modal-title-wrap p{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.compact-form .ant-form-item{margin-bottom:12px}.compact-form .ant-input,.compact-form .ant-input-number,.compact-form .ant-select-selector,.compact-form textarea{border-radius:12px!important}.compact-form .ant-form-item-label{padding-bottom:4px!important}.compact-form .ant-form-item-label>label{font-size:13px;font-weight:600}.compact-form .ant-input,.compact-form .ant-input-number,.compact-form .ant-picker,.compact-form .ant-select-selector{min-height:38px}.rich-editor{border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--input-bg)}.rich-editor-toolbar{display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px;background:var(--bg-elevated);border-bottom:1px solid var(--border-color)}.rich-editor-toolbar button{display:flex;align-items:center;justify-content:center;border:1px solid var(--border-color);border-radius:6px;background:var(--input-bg);color:var(--text-secondary);padding:6px 10px;cursor:pointer;transition:var(--transition-base);font-size:14px;width:32px;height:32px}.rich-editor-toolbar button:hover{color:var(--primary-color);border-color:var(--primary-color);background:var(--primary-soft)}.rich-editor-toolbar button svg{font-size:14px}.rich-editor-content{min-height:152px;padding:14px 16px;line-height:1.7;color:var(--text-primary);outline:none}.rich-editor-content ul,.rich-editor-content ol{padding-left:24px;margin:8px 0}.rich-editor-content li{margin:4px 0;line-height:1.6}.rich-editor-content img,.rich-content-preview img,.task-rich-content img,.detail-box img,.ant-table-cell img{max-width:100%;max-height:300px;width:auto;height:auto;object-fit:contain;border-radius:10px;margin:8px 0;display:inline-block;vertical-align:middle}.ant-table-cell{overflow:hidden;text-overflow:ellipsis;white-space:normal}.ant-table-thead>tr>th{text-align:center!important;background:var(--table-header-bg)!important;color:var(--text-primary)!important;border-bottom:1px solid var(--table-border)!important}.ant-table-tbody>tr:hover>td{background:var(--table-hover-bg)!important}.ant-table-tbody>tr>td{border-bottom:1px solid var(--table-cell-border)!important}.ant-table-cell img{max-height:200px;cursor:pointer;transition:transform .3s ease}.ant-table-cell img:hover{transform:scale(1.02)}.mb-4{margin-bottom:1.5rem}.tab-badge{display:inline-block;margin-left:8px;padding:2px 8px;background:var(--tag-primary-bg);color:var(--tag-primary-color);border-radius:10px;font-size:12px;font-weight:600}.border-gray-200{border-color:#e5e7eb}.rounded-lg{border-radius:.5rem}.bg-gray-50{background-color:#f9fafb}.bg-gray-100{background-color:#f3f4f6}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.p-4{padding:1rem}.flex{display:flex}.items-center{align-items:center}.justify-between{justify-content:space-between}.cursor-pointer{cursor:pointer}.ant-modal-footer{display:flex;justify-content:flex-end}.ant-modal-footer .ant-btn-primary{order:-1}.ant-modal-confirm-btns{display:flex;justify-content:flex-end}.ant-modal-confirm-btns .ant-btn-primary{order:-1}.gap-3{gap:.75rem}.gap-4{gap:1rem}.text-gray-500{color:#6b7280}.text-gray-800{color:#1f2937}.text-sm{font-size:.875rem}.text-xs{font-size:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mb-6{margin-bottom:1.5rem}.font-semibold{font-weight:600}.font-medium{font-weight:500}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.overflow-hidden{overflow:hidden}.current-week-col,td.current-week-col{background:var(--current-week-bg)!important}.rich-editor-content:empty:before{content:attr(data-placeholder);color:var(--text-tertiary)}.rich-editor-compact .rich-editor-toolbar{padding:6px 10px;gap:4px}.rich-editor-compact .rich-editor-toolbar button{padding:3px 8px;font-size:12px}.rich-editor-compact .rich-editor-content{min-height:auto;height:176px;overflow-y:auto;padding:8px 12px}.rich-content-preview,.task-rich-content{line-height:1.75;color:var(--text-secondary)}.rich-content-preview p,.task-rich-content p{margin:0 0 8px}.rich-content-preview ul,.rich-content-preview ol,.task-rich-content ul,.task-rich-content ol{margin:8px 0 8px 18px;padding:0}.rich-content-preview blockquote,.task-rich-content blockquote{margin:8px 0;padding-left:12px;border-left:3px solid #bfdbfe;color:#475467}.form-actions{margin-bottom:0!important}.stat-card .ant-card-body{padding:18px 20px}.stat-content{display:flex;align-items:center;gap:16px}.stat-icon{width:56px;height:56px;border-radius:16px;display:inline-flex;align-items:center;justify-content:center;font-size:22px}.stat-icon.blue{background:var(--primary-soft);color:var(--primary-color)}.stat-icon.green{background:#52c41a26;color:var(--success-color)}.stat-icon.orange{background:#faad1426;color:var(--warning-color)}.stat-icon.red{background:#f0443826;color:#f04438}.stat-value{font-size:28px;line-height:1.2;font-weight:700;color:var(--text-primary)}.stat-label{margin-top:6px;color:var(--text-secondary)}.action-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.action-tile{text-align:left;background:var(--bg-soft);border:1px solid var(--border-color);border-radius:12px;padding:18px 16px;display:flex;flex-direction:column;gap:14px;cursor:pointer;transition:var(--transition-base)}.action-tile:hover{transform:translateY(-3px);border-color:var(--primary-color);box-shadow:var(--shadow-glow)}.action-icon{width:44px;height:44px;border-radius:10px;background:var(--primary-soft);color:var(--primary-color);display:inline-flex;align-items:center;justify-content:center;font-size:18px}.action-text{display:flex;flex-direction:column;gap:4px}.action-text strong{font-size:15px;line-height:1.4;color:var(--text-primary)}.action-text small{color:var(--text-secondary);line-height:1.5}.remaining-days,.submit-stat{display:inline-flex;align-items:center;justify-content:center;min-width:76px;padding:4px 10px;border-radius:999px;font-weight:600}.submit-stat,.remaining-days.normal{background:var(--primary-soft);color:var(--primary-color)}.remaining-days.urgent{background:#faad1426;color:var(--warning-color)}.remaining-days.expired{background:var(--border-light);color:var(--text-secondary)}.modal-title-wrap strong{display:block;color:var(--text-primary)}.detail-pane{display:flex;flex-direction:column;gap:16px}.detail-block h4,.task-info-content h4{margin:0 0 10px;color:var(--text-primary);font-size:14px;font-weight:600}.detail-box,.file-info{padding:14px 16px;background:var(--bg-soft);border:1px solid var(--border-color);border-radius:8px;color:var(--text-primary)}.detail-box-remark{border-left:4px solid var(--primary-color)}.task-card .ant-card-body{padding:18px 20px}.task-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;gap:12px}.task-date{font-size:12px;color:var(--text-tertiary)}.task-title{margin:0 0 12px;font-size:20px;line-height:1.35;color:var(--text-primary)}.task-content{margin:0 0 16px;color:var(--text-secondary);line-height:1.7}.task-footer{display:flex;align-items:center;justify-content:space-between;padding-top:16px;border-top:1px solid var(--border-color);gap:12px}.task-doc-inline{margin-bottom:14px}.task-teacher{color:var(--text-tertiary);font-size:13px}.task-info-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.task-info-header h2{margin:0;font-size:22px;color:var(--text-primary)}.task-info-meta{display:flex;flex-wrap:wrap;gap:24px;margin-bottom:20px;color:var(--text-secondary)}.task-info-content p{margin:0;color:var(--text-secondary);line-height:1.8}.task-attachment-panel{margin-bottom:18px}.task-attachment-panel h4{margin:0 0 10px;color:var(--text-primary);font-size:14px;font-weight:600}.file-info{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px}.attachment-link{display:inline-flex;align-items:center;gap:8px;color:var(--primary);font-weight:500;min-width:0}.attachment-link:hover{color:var(--primary-hover)}.attachment-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-file-icon{flex:0 0 auto;font-size:16px}.attachment-file-icon.pdf{color:#ef4444}.attachment-file-icon.word{color:#2563eb}.attachment-file-icon.ppt{color:#f97316}.attachment-file-icon.txt{color:#64748b}.attachment-file-icon.xls{color:#16a34a}.attachment-file-icon.zip{color:#8b5cf6}.attachment-file-icon.default{color:#7c8aa5}.attachment-download-icon{flex:0 0 auto;font-size:14px;opacity:.75}.attachment-empty-text{color:var(--text-tertiary)}.simple-auth-page,.login-page-shell{min-height:100vh}.simple-auth-page{display:flex;align-items:center;justify-content:center;padding:24px;background:linear-gradient(#0e1c586b,#0e1c5894),url(/assets/background-BOahnhQL.jpeg) center center / cover no-repeat;background-color:#152768}.simple-auth-card{width:min(100%,720px)}.simple-auth-header{text-align:center;margin-bottom:24px}.simple-auth-header h1{margin:0 0 10px;font-size:28px;color:var(--text-primary)}.simple-auth-header p{margin:0;color:var(--text-secondary)}.simple-auth-footer{margin-top:20px;text-align:center;color:var(--text-secondary)}.simple-auth-footer a{margin-left:5px;font-weight:600}.role-switcher{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:18px}.role-switcher button{border:none;border-radius:999px;padding:10px 12px;cursor:pointer;background:#dee4f0;color:#5f6b8a;transition:var(--transition-base);display:flex;align-items:center;justify-content:center}.role-switcher button.active{background:linear-gradient(135deg,#5a7be7,#7396ff);color:#fff;box-shadow:0 10px 20px #5a7be738}.login-page-shell{position:relative;display:flex;flex-direction:column;justify-content:center;padding:36px 48px 42px;background:linear-gradient(135deg,#0a1628,#1a2a4a,#0d1b2a);overflow:hidden}.login-page-shell:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at 20% 20%,rgba(99,102,241,.15) 0%,transparent 50%),radial-gradient(ellipse at 80% 80%,rgba(59,130,246,.12) 0%,transparent 50%),radial-gradient(ellipse at 50% 50%,rgba(14,165,233,.08) 0%,transparent 60%);pointer-events:none}.login-page-shell:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:repeating-linear-gradient(0deg,transparent,transparent 50px,rgba(99,102,241,.03) 50px,rgba(99,102,241,.03) 51px),repeating-linear-gradient(90deg,transparent,transparent 50px,rgba(99,102,241,.03) 50px,rgba(99,102,241,.03) 51px);pointer-events:none;animation:gridMove 20s linear infinite}@keyframes gridMove{0%{transform:translate(0)}to{transform:translate(50px,50px)}}.login-bg-gradient-1{position:absolute;top:-20%;left:-20%;width:60%;height:60%;background:radial-gradient(circle,rgba(99,102,241,.2) 0%,transparent 70%);filter:blur(60px);animation:float1 15s ease-in-out infinite}.login-bg-gradient-2{position:absolute;bottom:-20%;right:-20%;width:60%;height:60%;background:radial-gradient(circle,rgba(59,130,246,.18) 0%,transparent 70%);filter:blur(60px);animation:float2 18s ease-in-out infinite}.login-bg-gradient-3{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:80%;height:80%;background:radial-gradient(circle,rgba(14,165,233,.06) 0%,transparent 70%);filter:blur(80px)}@keyframes float1{0%,to{transform:translate(0) scale(1)}50%{transform:translate(30px,30px) scale(1.1)}}@keyframes float2{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-30px,-30px) scale(1.1)}}.login-hero-card{position:relative;z-index:1;margin:0 auto;width:min(100%,1100px);min-height:560px;display:grid;grid-template-columns:1.55fr .95fr;align-items:center}.login-hero-visual{--title-light: 0;--title-shadow-x: 0px;position:relative;height:86%;min-height:500px;border-radius:22px 0 0 22px;background:linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(135deg,#69adff,#527eea);background-size:63px 63px,63px 63px,auto;box-shadow:0 26px 72px #05132e61;overflow:hidden}.login-hero-visual:before{content:"";position:absolute;top:28px;right:28px;bottom:28px;left:28px;border:1px solid rgba(255,255,255,.15);border-radius:20px;box-shadow:inset 0 0 46px #ffffff14}.login-hero-visual:after{content:"";position:absolute;width:760px;height:760px;left:135px;top:90px;border:1px solid rgba(255,255,255,.22);border-radius:50%;opacity:.72;box-shadow:126px 66px 0 -2px #ffffff21,inset 0 0 100px #ffffff0a}.pendulum-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:1;display:block}.star{position:absolute;z-index:2;width:4px;height:4px;border-radius:50%;background:#fffc;box-shadow:0 0 10px #ffffff8c}.star.s1{left:10%;top:20%}.star.s2{left:46%;top:31%}.star.s3{left:58%;top:67%}.star.s4{left:76%;top:20%}.star.s5{left:88%;top:82%}.copy{position:absolute;left:72px;top:38px;z-index:2;color:#fff}.copy h1{position:relative;margin:0 0 14px;color:transparent;background:linear-gradient(105deg,#f8fbff,#9da9b4 16%,#fff 28%,#5e6873,#e9eef3 58%,#7e8994,#fff,#a9b3bc);background-size:220% 100%;background-position:calc(50% + var(--title-light) * 30%) 50%;-webkit-background-clip:text;background-clip:text;font-size:42px;line-height:1.16;letter-spacing:0;font-weight:800;filter:drop-shadow(var(--title-shadow-x) 8px 12px rgba(21,48,94,.32)) drop-shadow(calc(var(--title-shadow-x) * -.45) -2px 2px rgba(255,255,255,.34))}.copy h1:before,.copy h1:after{content:attr(data-title);position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;letter-spacing:0}.copy h1:before{z-index:-1;color:#59636f;transform:translate(calc(2px + var(--title-light) * -1px),3px);text-shadow:1px 1px 0 #46515c,2px 2px 0 #3e4852,3px 3px 0 #36404a,4px 5px 10px rgba(22,42,78,.34)}.copy h1:after{z-index:1;color:transparent;background:linear-gradient(105deg,transparent 0%,rgba(255,255,255,.16) 34%,rgba(255,255,255,.9) 48%,rgba(255,255,255,.18) 60%,transparent 100%);background-size:240% 100%;background-position:calc(50% + var(--title-light) * 44%) 50%;-webkit-background-clip:text;background-clip:text;mix-blend-mode:screen}.copy p{width:min(560px,62vw);margin:0;color:#fffffff2;font-size:20px;line-height:1.75;font-weight:700}.scan-line{left:-8%;right:-8%;height:2px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.08),rgba(186,230,253,.9),rgba(255,255,255,.08),transparent);box-shadow:0 0 14px #bae6fd73}.scan-line-a{top:34%}.scan-line-b{top:66%}.tech-grid{position:absolute;top:24px;right:24px;bottom:24px;left:24px;border-radius:14px;background:linear-gradient(to right,rgba(255,255,255,.1) 1px,transparent 1px),linear-gradient(to bottom,rgba(255,255,255,.08) 1px,transparent 1px);background-size:42px 42px;opacity:.5}.tech-orbit{position:absolute;border:1px solid rgba(255,255,255,.22);border-radius:50%}.orbit-a{width:260px;height:260px;left:98px;top:102px}.orbit-b{width:180px;height:180px;left:182px;top:146px}.tech-glow-circle{position:absolute;width:84px;height:84px;border-radius:50%;left:218px;top:188px;background:radial-gradient(circle,#fffffff2,#b7f2ff99,#4cddff33);box-shadow:0 0 28px #a1f5ffb3}.hero-visual-content{position:absolute;left:48px;bottom:56px;max-width:320px;color:#fff}.hero-badge{display:inline-flex;padding:6px 12px;border-radius:999px;background:#ffffff2e;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);margin-bottom:12px;font-size:12px;letter-spacing:1px}.hero-visual-content h2{margin:0 0 10px;font-size:34px;line-height:1.2}.hero-visual-content p{margin:0;line-height:1.8;color:#ffffffeb}.login-panel-attachment{position:relative;margin-left:-48px;width:min(100%,360px);padding:34px 24px 26px;border-radius:10px;background:#f8f8fafa;box-shadow:0 22px 50px #101e593d}.login-panel-attachment:after{content:"";position:absolute;right:14px;bottom:12px;width:24px;height:24px;border-right:3px solid rgba(70,89,160,.5);border-bottom:3px solid rgba(70,89,160,.5);transform:rotate(0)}.login-title-group{text-align:center;margin-bottom:24px}.login-title-group h1{margin:0 0 6px;font-size:24px;color:#6f8ef0;letter-spacing:1px}.login-title-group p{margin:0;color:#b0b5c2;font-size:13px;font-weight:600}.batch-review-page{display:flex;position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden}.batch-review-left{width:280px;min-width:280px;border-right:1px solid var(--border-color);display:flex;flex-direction:column;background:var(--bg-page)}.batch-review-week-select{padding:12px;border-bottom:1px solid var(--border-color)}.batch-review-tree{flex:1;overflow-y:auto;padding:8px 12px}.batch-review-right{flex:1;overflow:hidden;display:flex;flex-direction:column;background:var(--bg-elevated)}.batch-review-content{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.batch-review-top{height:60px;min-height:60px;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--border-color);background:var(--bg-soft);font-size:12px;gap:12px}.batch-review-info{display:flex;align-items:center;gap:12px;overflow:hidden}.batch-review-student{font-weight:600;color:var(--text-primary);white-space:nowrap}.batch-review-task-name{color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.batch-review-attachment{display:flex;align-items:center;gap:8px;white-space:nowrap}.attachment-row{display:flex;align-items:center;gap:4px}.attachment-preview-link{display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border-radius:4px;cursor:pointer;color:var(--text-primary);text-decoration:none;transition:var(--transition-base)}.attachment-preview-link:hover{background:var(--primary-soft);color:var(--primary-color)}.attachment-preview-link span{max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.batch-review-docx-preview{padding:16px 24px;line-height:1.8;color:var(--text-primary);max-height:75vh;overflow-y:auto}.batch-review-docx-preview h1,.batch-review-docx-preview h2,.batch-review-docx-preview h3{margin-top:16px;margin-bottom:8px}.batch-review-docx-preview p{margin-bottom:8px}.batch-review-docx-preview table{border-collapse:collapse;width:100%;margin:12px 0}.batch-review-docx-preview td,.batch-review-docx-preview th{border:1px solid var(--border-color);padding:8px}.batch-review-docx-preview img{max-width:100%;border-radius:4px}.pdf-fullscreen-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1050;background:#1a1a1a;display:flex;flex-direction:column}.pdf-fullscreen-toolbar{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:10px 16px;background:#2a2a2a;border-bottom:1px solid rgba(255,255,255,.1)}.pdf-fullscreen-toolbar .batch-review-pdf-title{color:#fff}.pdf-fullscreen-iframe{flex:1;width:100%;border:none;display:block}.batch-review-action{margin-left:auto}.batch-review-time{color:var(--text-tertiary);font-size:11px}.batch-review-middle{flex:1;display:flex;flex-direction:column;overflow-y:auto;padding:16px;position:relative;min-height:0}.batch-review-html{flex-shrink:0;line-height:1.8;color:var(--text-primary)}.batch-review-html img{max-width:100%;border-radius:4px}.batch-review-pdf-inline{flex:1;display:flex;flex-direction:column;margin-top:16px;border:1px solid var(--border-color);border-radius:8px;overflow:hidden;background:var(--bg-soft);min-height:0}.batch-review-pdf-header{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--bg-elevated);border-bottom:1px solid var(--border-color)}.batch-review-pdf-title{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-primary);font-weight:500}.batch-review-pdf-title span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.batch-review-pdf-iframe{flex:1;width:100%;min-height:400px;border:none;display:block}.batch-review-preview{margin-top:16px;border-top:1px solid var(--border-color);padding-top:12px}.batch-review-preview-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-weight:600;color:var(--text-primary)}.batch-review-preview img{max-width:100%;border-radius:4px}.batch-review-eval-modal-editor{display:flex;flex-direction:column}.batch-review-eval-modal-editor .rich-editor{border:1px solid var(--border-color);border-radius:4px;flex:1;display:flex;flex-direction:column}.batch-review-eval-modal-editor .rich-editor-toolbar{padding:4px 8px;gap:4px}.batch-review-eval-modal-editor .rich-editor-content{flex:1;min-height:200px;padding:8px;font-size:13px;overflow-y:auto}.login-attachment-form .ant-form-item{margin-bottom:14px}.login-attachment-form .ant-input,.login-attachment-form .ant-input-password,.login-attachment-form .ant-input-affix-wrapper{border-radius:8px!important;background:#fff!important;border-color:#d7ddea!important;min-height:42px!important}.login-attachment-form .ant-input-affix-wrapper input.ant-input,.login-attachment-form .ant-input-affix-wrapper .ant-input{background:#fff!important}.login-attachment-form .ant-input::placeholder,.login-attachment-form .ant-input-password input::placeholder,.login-attachment-form .ant-input-affix-wrapper input::placeholder{color:#99a2b3}.captcha-row-attachment{display:grid;grid-template-columns:minmax(0,1fr) 118px;gap:12px}.captcha-box-attachment{border:1px solid #d8e3f6;border-radius:10px;background:linear-gradient(135deg,#fefefe,#f0f4ff);cursor:pointer;overflow:hidden;transition:var(--transition-base)}.captcha-box-attachment:hover{box-shadow:var(--shadow-sm)}.login-extra-row{display:flex;align-items:center;justify-content:space-between;margin:4px 0 18px;color:#a3a8b3;font-size:13px}.text-linkish{border:none;background:#f8f9fa;color:#a3a8b3;cursor:pointer;padding:0}.attachment-login-button{height:48px;border-radius:999px;background:linear-gradient(135deg,#5a7be7,#7396ff)!important;border:none!important;box-shadow:0 10px 24px #5a7be74d}.login-register-tip{margin-top:16px;text-align:center;color:#9ea6b5}.register-switcher{margin-bottom:20px}.login-attachment-form .ant-input,.login-attachment-form .ant-input-password,.login-attachment-form .ant-input-affix-wrapper,.login-attachment-form .ant-input-affix-wrapper input.ant-input,.login-attachment-form .ant-input-affix-wrapper .ant-input,.login-attachment-form .ant-input-affix-wrapper:hover,.login-attachment-form .ant-input-affix-wrapper:focus,.login-attachment-form .ant-input-affix-wrapper-focused{background:#fff!important;background-color:#fff!important}.login-input-white,.login-input-white.ant-input,.login-input-white.ant-input-affix-wrapper,.login-input-white.ant-input-password,.login-input-white .ant-input,.login-input-white input.ant-input{background:#fff!important;background-color:#fff!important}.login-input-white.ant-input-affix-wrapper:hover,.login-input-white.ant-input-affix-wrapper:focus,.login-input-white.ant-input-affix-wrapper-focused,.login-input-white.ant-input-affix-wrapper:hover .ant-input,.login-input-white.ant-input-affix-wrapper:focus .ant-input,.login-input-white.ant-input-affix-wrapper-focused .ant-input{background:#fff!important;background-color:#fff!important}.login-attachment-form .ant-input,.login-attachment-form .ant-input-password input,.login-attachment-form .ant-input-affix-wrapper input,.login-attachment-form .ant-input-affix-wrapper .ant-input,.login-attachment-form input.ant-input{color:#333!important;-webkit-text-fill-color:#333333!important}.login-attachment-form .ant-input::placeholder,.login-attachment-form .ant-input-password input::placeholder,.login-attachment-form .ant-input-affix-wrapper input::placeholder,.login-attachment-form .ant-input-affix-wrapper .ant-input::placeholder{color:#99a2b3!important;-webkit-text-fill-color:#99a2b3!important}.login-attachment-form .ant-input-affix-wrapper{color:#333!important}.login-attachment-form .ant-input-prefix,.login-attachment-form .ant-input-suffix{color:#667085!important}@media (max-width: 1100px){.login-page-shell{padding:28px 18px 24px}.login-hero-card{grid-template-columns:1fr;gap:20px}.login-panel-attachment{margin-left:0;width:100%;max-width:420px;justify-self:center}}@media (max-width: 768px){.portal-content{padding:16px!important;margin-left:0}.portal-footer{margin-left:0;padding:12px 16px!important}.portal-header{padding:0 16px!important}.action-grid{grid-template-columns:1fr}.task-footer,.task-header,.task-info-header,.card-head-between,.portal-header-left{flex-direction:column;align-items:flex-start}.login-hero-visual{min-height:320px}.hero-visual-content{left:24px;bottom:28px;max-width:240px}.hero-visual-content h2{font-size:28px}.captcha-row-attachment{grid-template-columns:1fr}.login-extra-row{gap:10px;flex-direction:column;align-items:flex-start}}.notification-badge{position:relative;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--border-color);border-radius:999px;background:var(--bg-soft);color:var(--text-secondary);cursor:pointer;transition:var(--transition-base)}.notification-badge:hover{color:var(--primary-color);border-color:var(--primary-color);background:var(--primary-soft)}.notification-icon{font-size:16px}.notification-count{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#ef4444;color:#fff;font-size:11px;font-weight:600;line-height:18px;text-align:center}.notification-popover .ant-popover-inner{width:420px;max-height:480px;overflow:hidden;display:flex;flex-direction:column}.notification-popover .ant-popover-inner-content{flex:1;display:flex;flex-direction:column;overflow:hidden}.notification-center{display:flex;flex-direction:column;flex:1;overflow:hidden}.notification-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border-color)}.notification-title{font-weight:600;color:var(--text-primary);font-size:14px}.notification-mark-all{display:flex;align-items:center;gap:4px;padding:4px 10px;border:none;background:transparent;color:var(--primary-color);font-size:12px;cursor:pointer;border-radius:4px;transition:var(--transition-base)}.notification-mark-all:hover{background:var(--primary-soft)}.notification-loading,.notification-empty{padding:32px;text-align:center;color:var(--text-secondary)}.empty-icon{font-size:32px;margin-bottom:12px;opacity:.5}.notification-list{flex:1;overflow-y:auto;padding:8px}.notification-item{display:flex;gap:12px;padding:12px;border-radius:8px;cursor:pointer;transition:var(--transition-base)}.notification-item:hover{background:var(--bg-soft)}.notification-item.unread{background:#00d4ff0f}.notification-icon-wrap{flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center;border-radius:8px;background:var(--bg-soft)}.notification-content{flex:1;min-width:0}.notification-item-title{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--text-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification-item-text{margin:0 0 6px;font-size:12px;color:var(--text-secondary);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:break-word;word-break:break-word}.notification-time{font-size:11px;color:var(--text-tertiary)}.notification-actions{display:flex;flex-direction:column;gap:6px;opacity:0;transition:opacity .2s}.notification-item:hover .notification-actions{opacity:1}.action-btn{padding:4px;border:none;background:transparent;color:var(--text-tertiary);cursor:pointer;border-radius:4px;transition:var(--transition-base)}.action-btn:hover{color:var(--primary-color);background:var(--bg-soft)}.error-boundary{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.error-content{max-width:500px;width:100%;padding:32px;background:var(--bg-elevated);border-radius:12px;text-align:center}.error-actions{margin-top:20px;display:flex;gap:12px;justify-content:center}.error-details{margin-top:16px;padding:12px;background:var(--bg-soft);border-radius:8px;text-align:left}.error-details summary{color:var(--text-secondary);cursor:pointer}.error-details pre{margin:8px 0 0;padding:12px;background:#000;border-radius:4px;overflow-x:auto;font-size:12px;color:#e5e7eb}.loading-spinner{display:flex;flex-direction:column;align-items:center;gap:12px}.spinner{border:3px solid var(--border-color);border-top-color:var(--primary-color);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{font-size:14px;color:var(--text-secondary)}.page-loading{min-height:100vh;display:flex;align-items:center;justify-content:center}.unread-dot{position:absolute;top:4px;right:4px;width:8px;height:8px;background:#ef4444;border-radius:50%;border:2px solid var(--bg-page)}.notification-item.unread{background:#00d4ff14;border-left:3px solid var(--primary-color)}.notification-item.unread .notification-item-title{color:var(--primary-color);font-weight:600}.mark-read-btn{display:flex;align-items:center;gap:4px;padding:6px 12px!important;background:linear-gradient(135deg,var(--primary-color),var(--primary-dark))!important;color:#fff!important;font-size:12px;font-weight:500;border-radius:6px!important;box-shadow:0 2px 8px #00d4ff4d;transition:all .3s ease}.mark-read-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px #00d4ff66!important;background:var(--primary-hover)!important}.mark-read-btn:active{transform:translateY(0)}.mark-read-btn .anticon{font-size:12px}.delete-btn{padding:6px 8px!important;border-radius:6px!important;transition:all .3s ease}.delete-btn:hover{background:#ef44441a!important;color:#ef4444!important}.notification-actions{opacity:1;flex-direction:column;gap:8px}.notification-item{transition:all .3s ease}.notification-item:hover{background:var(--bg-soft);transform:translate(2px)}.notification-icon-wrap{position:relative;background:linear-gradient(135deg,var(--primary-soft),var(--bg-soft))}.notification-time{font-size:11px;color:var(--text-tertiary);font-family:Consolas,monospace}.notification-popover .ant-popover-inner{max-height:520px}.notification-loading{display:flex;align-items:center;justify-content:center;padding:48px;color:var(--text-secondary)}.desktop-only{display:flex}.mobile-only{display:none}@media (max-width: 768px){.notification-popover .ant-popover-inner{width:320px!important;max-height:400px}.notification-item{padding:10px}.mark-read-btn{padding:5px 10px!important;font-size:11px}}@media (max-width: 768px){.desktop-only{display:none}.mobile-only{display:flex}.portal-header-right{gap:8px}.theme-select,.user-name,.user-info{display:none}.notification-badge{width:32px;height:32px}.user-pill{padding:6px!important}.mobile-drawer .ant-drawer-content{background:var(--bg-page)}.mobile-drawer .ant-drawer-header{background:var(--bg-soft);border-bottom:1px solid var(--border-color)}.mobile-drawer .ant-drawer-title{color:var(--text-primary)}.mobile-menu{border:none;background:transparent}}.check-mobile-list{display:flex;flex-direction:column;gap:12px}.check-mobile-card{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-soft);overflow:hidden}.check-mobile-card-header{display:flex;align-items:center;justify-content:space-between;padding:12px;border-bottom:1px solid var(--border-color);gap:12px}.check-mobile-student{display:flex;flex-direction:column;gap:2px;min-width:0}.check-mobile-student-id{font-size:11px;color:var(--text-tertiary)}.check-mobile-student-name{font-weight:600;color:var(--text-primary);font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.check-mobile-progress{display:flex;align-items:center;gap:8px;flex-shrink:0}.check-mobile-progress-text{font-size:11px;color:var(--text-secondary);white-space:nowrap}.check-mobile-weeks{display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px}.check-mobile-week{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:6px;background:var(--bg-page);border:1px solid var(--border-color);cursor:pointer;transition:var(--transition-base);flex:1;min-width:calc(50% - 3px);max-width:calc(50% - 3px)}.check-mobile-week:hover{border-color:var(--primary-color);background:var(--primary-soft)}.check-mobile-week.current{border-color:var(--primary-color);border-width:2px}.check-mobile-week.submitted{background:#22c55e0f;border-color:#22c55e33}.check-mobile-week-label{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap}.check-mobile-week-date{font-size:10px;color:var(--text-tertiary);white-space:nowrap;flex:1;text-align:center}.check-task-card .ant-card-head{min-height:auto}.check-task-card-title{display:flex;flex-direction:column;gap:8px;width:100%}.check-task-card-title-main{font-weight:600;font-size:14px;color:var(--text-primary);word-break:break-all}.check-task-card-title-info{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:12px;color:var(--text-secondary)}.check-task-card-title-actions{display:flex;justify-content:flex-end}.check-task-card-title-desktop{display:flex;align-items:center;justify-content:space-between;width:100%}.portal-header-right{display:flex;align-items:center;gap:16px}.user-pill{display:flex;align-items:center;gap:8px;padding:8px 14px;border:none;border-radius:10px;background:var(--bg-card);color:var(--text-primary);font-size:14px;cursor:pointer;transition:var(--transition-base);box-shadow:var(--shadow-sm)}.user-pill:hover{background:var(--primary-soft);color:var(--primary-color);box-shadow:var(--shadow-md)}.tech-table tbody td{padding:var(--padding-sm);color:var(--text-secondary);font-size:13px;border-bottom:1px solid var(--border-light);vertical-align:middle}.tech-table tbody tr:hover{background:var(--table-hover-bg)}.tech-table tbody tr:last-child td{border-bottom:none}.tech-table.compact td,.tech-table.compact th{padding:6px 10px;font-size:12px}.tech-card{background:var(--bg-card-gradient);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-glow),var(--shadow-sm);padding:var(--padding-md);margin-bottom:16px}.tech-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.tech-card-title{font-size:16px;font-weight:500;color:var(--text-primary)}.tech-card-subtitle{font-size:12px;color:var(--text-secondary);margin-top:4px}.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--radius-sm);font-size:12px;font-weight:500}.tag-success{background:#52c41a26;color:var(--success-color)}.tag-pending{background:#8c8c8c26;color:var(--pending-color)}.tag-primary{background:var(--tag-primary-bg);color:var(--tag-primary-color)}.hform .ant-form-item{margin-bottom:16px}.hform .ant-form-item-label{padding-bottom:0!important}.hform .ant-form-item-label>label{height:36px;display:inline-flex;align-items:center}.fieldset-group{border:1px solid var(--border-color);border-radius:var(--radius-md);padding:16px 16px 0;margin-bottom:16px;background:var(--bg-soft)}.fieldset-group legend{width:100%;padding:0 8px;font-size:13px;font-weight:600;color:var(--primary-color);float:none;margin-bottom:8px}.header-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.calendar-container{overflow-x:auto}.calendar-table{width:100%;border-collapse:collapse}.calendar-header-cell{border:1px solid var(--border-color);padding:8px;text-align:center;background:var(--table-header-bg);font-weight:600;width:14.28%}.calendar-cell{border:1px solid var(--border-color);padding:4px;text-align:center;min-height:80px;vertical-align:top}.calendar-empty-cell{background:var(--bg-soft)}.calendar-day-content{display:flex;flex-direction:column;align-items:center}.calendar-day-number{font-size:14px;font-weight:500;margin-bottom:4px}.calendar-anomaly-list{display:flex;flex-direction:column;gap:2px;font-size:12px;width:100%}.calendar-anomaly-item{line-height:1.4;word-break:break-all}.calendar-day-normal{font-size:11px;color:var(--success-color)}.calendar-legend{display:flex;justify-content:center;gap:20px;margin-top:16px;font-size:12px}.legend-item{display:flex;align-items:center;gap:6px}.legend-color{font-weight:500}.legend-text{color:var(--text-secondary)}.cube-page-shell{width:100%;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;background:radial-gradient(circle at 16% 12%,rgba(77,163,255,.24),transparent 28rem),radial-gradient(circle at 88% 20%,rgba(69,211,138,.16),transparent 28rem),linear-gradient(135deg,#080b10,#111823 55%,#06080c)}.cube-bg-g1,.cube-bg-g2{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0}.cube-zone{position:relative;z-index:1;display:grid;place-items:center;perspective:2000px;touch-action:none;-webkit-user-select:none;user-select:none}.cube-footer{position:fixed;bottom:24px;left:0;right:0;text-align:center;z-index:2}.cube-footer a{color:#ffffff73;font-size:12px;text-decoration:none;transition:color .3s ease}.cube-footer a:hover{color:#fffc}.cube-scene{width:440px;height:440px;transform-style:preserve-3d;transition:transform 80ms linear;will-change:transform}.cube-wrapper{width:100%;height:100%;position:relative;transform-style:preserve-3d}.cube-face{position:absolute;top:0;right:0;bottom:0;left:0;width:440px;height:440px;border:1px solid rgba(255,255,255,.12);background:#05080d8a;backface-visibility:hidden;box-shadow:inset 0 0 28px #ffffff0f,0 18px 44px #0000004d}.cube-face-front{transform:rotateY(0) translateZ(220px);padding:6px;background:linear-gradient(#070a10d6,#070a10d6),conic-gradient(from 45deg,#4da3ff,#45d38a,#ffd04a,#ff8a3d,#ff5d6c,#4da3ff);border:1px solid rgba(255,255,255,.18)}.cube-face-back{transform:rotateY(180deg) translateZ(220px);padding:6px;background:linear-gradient(#070a10e0,#070a10e0),conic-gradient(from 45deg,#a855f7,#06b6d4,#ec4899,#ff8a3d,#45d38a,#a855f7);border:1px solid rgba(255,255,255,.18)}.cube-face-right{transform:rotateY(90deg) translateZ(220px)}.cube-face-left{transform:rotateY(-90deg) translateZ(220px)}.cube-face-top{transform:rotateX(90deg) translateZ(220px)}.cube-face-bottom{transform:rotateX(-90deg) translateZ(220px)}.color-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);gap:10px;padding:14px}.color-grid .tile{border:1px solid rgba(255,255,255,.24);border-radius:10px;box-shadow:inset 0 1px #ffffff47,inset 0 -18px 34px #0003}.color-grid.green .tile{background:#45d38a}.color-grid.yellow .tile{background:#ffd04a}.color-grid.orange .tile{background:#ff8a3d}.color-grid.white .tile{background:#f4f7ff}.login-panel{width:100%;height:100%;display:grid;grid-template-rows:auto 1fr auto;gap:12px;padding:28px;border-radius:12px;background:#0a0e15db;border:1px solid rgba(255,255,255,.14);overflow:hidden;-webkit-user-select:text;user-select:text}.login-header{text-align:center}.login-header h2{margin:0;font-size:26px;line-height:1.15;color:#eef5ff}.login-header p{margin:6px 0 0;color:#a4afbf;font-size:12px}.status-row{display:flex;align-items:center;justify-content:center;gap:6px;margin-bottom:6px}.status-dot{width:10px;height:10px;border-radius:50%;background:#45d38a;box-shadow:0 0 0 5px #45d38a24}.lock-label{font-size:12px;color:#a4afbf}.lock-label.unlocked{color:#ffd04a}.login-panel form{display:grid;gap:10px;align-content:start}.login-panel label{display:grid;gap:5px;color:#eef5ffd1;font-size:13px}.field{min-height:44px;display:grid;align-items:center;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:#ffffff12;transition:border-color .12s,box-shadow .12s}.field:focus-within{border-color:#4da3ffdb;box-shadow:0 0 0 3px #4da3ff29}.field input{width:100%;height:42px;border:0;outline:0;padding:0 14px;background:transparent;color:#eef5ff;font:inherit;font-size:15px}.field input::placeholder{color:#eef5ff59}.captcha-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:end}.captcha-display{height:44px;display:grid;place-items:center;padding:0 8px;border-radius:8px;background:#ffffff0f;border:1px solid rgba(255,255,255,.16);cursor:pointer;overflow:hidden}.captcha-display:hover{background:#ffffff1a}.captcha-display svg{display:block}.submit-btn{height:44px;border:0;border-radius:8px;background:linear-gradient(135deg,#4da3ff,#45d38a);color:#061019;cursor:pointer;font:inherit;font-weight:700;font-size:15px;box-shadow:0 8px 22px #4da3ff38}.submit-btn:hover:not(:disabled){filter:brightness(1.06)}.submit-btn:disabled{opacity:.7;cursor:default}.form-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;color:#a4afbf;font-size:11px}.form-link{color:#4da3ff;text-decoration:none}.form-link:hover{text-decoration:underline}.message{min-height:18px;color:#eef5ffc2;font-size:12px}.quick-login-panel{width:100%;height:100%;display:flex;flex-direction:column;gap:8px;padding:16px;border-radius:12px;background:#080b12f0;border:1px solid rgba(255,255,255,.14);overflow:hidden}.quick-title{text-align:center;flex-shrink:0}.quick-title h2{margin:0;font-size:20px;color:#eef5ff}.quick-title p{margin:2px 0 0;color:#a4afbf;font-size:10px}.number-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(4,1fr);gap:6px;padding:4px;flex:1;min-height:0}.number-tile{display:flex;align-items:center;justify-content:center;border-radius:10px;font-size:24px;font-weight:700;color:#fffffff2;cursor:pointer;border:1px solid rgba(255,255,255,.15);transition:transform .12s,box-shadow .12s;outline:none;min-height:0}.number-tile:hover:not(:disabled){transform:scale(1.06)}.number-tile:active:not(:disabled){transform:scale(.94)}.number-tile:disabled{cursor:default;opacity:.7}.num-1{background:linear-gradient(135deg,#ef4444,#dc2626)}.num-2{background:linear-gradient(135deg,#f97316,#ea580c)}.num-3{background:linear-gradient(135deg,#eab308,#ca8a04)}.num-4{background:linear-gradient(135deg,#22c55e,#16a34a)}.num-5{background:linear-gradient(135deg,#06b6d4,#0891b2)}.num-6{background:linear-gradient(135deg,#3b82f6,#2563eb)}.num-7{background:linear-gradient(135deg,#8b5cf6,#7c3aed)}.num-8{background:linear-gradient(135deg,#ec4899,#db2777)}.num-9{background:linear-gradient(135deg,#6366f1,#4f46e5)}.num-0{background:linear-gradient(135deg,#6b7280,#4b5563)}.num-clear{background:linear-gradient(135deg,#f97316,#ea580c);font-size:22px}.num-backspace{background:linear-gradient(135deg,#ef4444,#dc2626);font-size:22px}.quick-input-display{flex-shrink:0;height:44px;display:flex;align-items:center;justify-content:center;gap:10px;padding:0 12px;border:1px solid rgba(255,255,255,.16);border-radius:10px;background:#ffffff0d}.quick-dot{width:14px;height:14px;border-radius:50%;background:#ffffff26;transition:background .15s}.quick-dot.filled{background:#45d38a;box-shadow:0 0 8px #45d38a80}.quick-message{flex-shrink:0;text-align:center;height:18px;color:#eef5ffc2;font-size:11px;display:flex;align-items:center;justify-content:center}.quick-clear-btn{flex-shrink:0;height:34px;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:#ffffff12;color:#eef5ffd1;cursor:pointer;font:inherit;font-size:12px;transition:all .2s}.quick-clear-btn:hover:not(:disabled){background:#ffffff24;border-color:#ffffff40}.quick-clear-btn:disabled{opacity:.4;cursor:default}.cube-hint-text{margin-top:20px;color:#eef5ff73;font-size:13px;text-align:center;pointer-events:none}@media (max-width: 520px){.cube-page-shell{padding:10px}.cube-scene,.cube-face{width:320px;height:320px}.cube-face-front{transform:rotateY(0) translateZ(160px)}.cube-face-back{transform:rotateY(180deg) translateZ(160px)}.cube-face-right{transform:rotateY(90deg) translateZ(160px)}.cube-face-left{transform:rotateY(-90deg) translateZ(160px)}.cube-face-top{transform:rotateX(90deg) translateZ(160px)}.cube-face-bottom{transform:rotateX(-90deg) translateZ(160px)}.login-panel{padding:16px 16px 52px;gap:8px}.login-header h2{font-size:22px}.message,.form-foot{font-size:10px}.submit-btn{height:40px}.quick-login-panel{padding:14px 16px 12px;gap:6px}.quick-title h2{font-size:20px}.number-tile{font-size:22px;border-radius:10px}.number-grid{gap:8px}.cube-hint-text{font-size:11px;margin-top:12px}.cube-footer{margin-top:16px}.cube-footer a{font-size:10px}}
