.login-page[data-v-1d536e7d]{position:fixed;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;overflow:hidden}.login-bg[data-v-1d536e7d]{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#4a5568}.login-overlay[data-v-1d536e7d]{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent}.login-wrapper[data-v-1d536e7d]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;padding:24px 24px 24px 74px}.login-card[data-v-1d536e7d]{width:500px;height:500px;max-width:100%;background:#fff;border-radius:0;box-shadow:0 12px 48px #0000002e,0 2px 8px #0000000f;padding:58px 40px 50px;margin-left:630px;box-sizing:border-box}.header[data-v-1d536e7d]{text-align:center;margin-bottom:36px}.title[data-v-1d536e7d]{font-size:28px;color:#1a1a1a;font-weight:700;margin-bottom:10px;letter-spacing:.5px}.subtitle[data-v-1d536e7d]{font-size:14px;color:#aaa}.error-banner[data-v-1d536e7d]{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;color:#dc2626;font-size:13px;margin-bottom:24px;animation:slideDown-1d536e7d .25s ease}.error-icon[data-v-1d536e7d]{flex-shrink:0}@keyframes slideDown-1d536e7d{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.form[data-v-1d536e7d]{display:flex;flex-direction:column;gap:18px}.field[data-v-1d536e7d]{display:flex;flex-direction:column;gap:6px}.input-wrapper[data-v-1d536e7d]{position:relative;display:flex;align-items:center}.input-icon[data-v-1d536e7d]{position:absolute;left:14px;color:#bbb;pointer-events:none;z-index:1}.input[data-v-1d536e7d]{width:100%;height:48px;border:1.5px solid #e2e2e2;border-radius:0;padding:0 44px 0 42px;font-size:14px;outline:none;transition:border-color .25s,box-shadow .25s;box-sizing:border-box;background:#fff;color:#1a1a1a}.input[data-v-1d536e7d]::placeholder{color:#bbb}.input[data-v-1d536e7d]:focus{border-color:#6c63ff;box-shadow:0 0 0 3px #6c63ff1a}.input-error[data-v-1d536e7d]{border-color:#e74c3c}.input-error[data-v-1d536e7d]:focus{box-shadow:0 0 0 3px #e74c3c1a}.toggle-pwd[data-v-1d536e7d]{position:absolute;right:10px;border:none;background:none;color:#bbb;cursor:pointer;padding:4px;display:flex;align-items:center;transition:color .15s;z-index:1}.toggle-pwd[data-v-1d536e7d]:hover{color:#555}.field-err[data-v-1d536e7d]{font-size:12px;color:#e74c3c;padding-left:2px}.btn-submit[data-v-1d536e7d]{width:100%;height:48px;border:none;border-radius:0;background:#36b8f3;color:#fff;font-size:16px;font-weight:600;cursor:pointer;margin-top:8px;transition:opacity .2s,transform .15s,box-shadow .2s;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px #36b8f359}.btn-submit[data-v-1d536e7d]:hover{opacity:.92;transform:translateY(-1px);box-shadow:0 6px 20px #36b8f373}.btn-submit[data-v-1d536e7d]:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.switch-link[data-v-1d536e7d]{text-align:center;font-size:13px;color:#aaa;margin-top:6px}.switch-link a[data-v-1d536e7d]{color:#4a90d9;text-decoration:none;font-weight:500}.switch-link a[data-v-1d536e7d]:hover{text-decoration:underline}.spinner[data-v-1d536e7d]{width:22px;height:22px;border:2.5px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-1d536e7d .6s linear infinite}@keyframes spin-1d536e7d{to{transform:rotate(360deg)}}@media (max-width: 480px){.login-wrapper[data-v-1d536e7d]{padding:80px 16px 16px;align-items:flex-start}.login-card[data-v-1d536e7d]{padding:36px 24px 28px;border-radius:0}.title[data-v-1d536e7d]{font-size:24px}}.register-page[data-v-bd7eafe6]{position:fixed;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;overflow:hidden}.register-bg[data-v-bd7eafe6]{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:center;background-repeat:no-repeat;background-color:#4a5568}.register-overlay[data-v-bd7eafe6]{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent}.register-wrapper[data-v-bd7eafe6]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;padding:24px 24px 24px 74px}.register-card[data-v-bd7eafe6]{width:500px;max-width:100%;background:#fff;border-radius:0;box-shadow:0 12px 48px #0000002e,0 2px 8px #0000000f;padding:58px 40px 50px;margin-left:630px;box-sizing:border-box}.header[data-v-bd7eafe6]{text-align:center;margin-bottom:30px}.title[data-v-bd7eafe6]{font-size:28px;color:#1a1a1a;font-weight:700;margin-bottom:10px;letter-spacing:.5px}.subtitle[data-v-bd7eafe6]{font-size:14px;color:#aaa}.error-banner[data-v-bd7eafe6]{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;color:#dc2626;font-size:13px;margin-bottom:24px;animation:slideDown-bd7eafe6 .25s ease}.error-icon[data-v-bd7eafe6]{flex-shrink:0}@keyframes slideDown-bd7eafe6{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.form[data-v-bd7eafe6]{display:flex;flex-direction:column;gap:16px}.field[data-v-bd7eafe6]{display:flex;flex-direction:column;gap:6px}.input-wrapper[data-v-bd7eafe6]{position:relative;display:flex;align-items:center}.input-icon[data-v-bd7eafe6]{position:absolute;left:14px;color:#bbb;pointer-events:none;z-index:1}.input[data-v-bd7eafe6]{width:100%;height:48px;border:1.5px solid #e2e2e2;border-radius:0;padding:0 44px 0 42px;font-size:14px;outline:none;transition:border-color .25s,box-shadow .25s;box-sizing:border-box;background:#fff;color:#1a1a1a}.input[data-v-bd7eafe6]::placeholder{color:#bbb}.input[data-v-bd7eafe6]:focus{border-color:#6c63ff;box-shadow:0 0 0 3px #6c63ff1a}.input-error[data-v-bd7eafe6]{border-color:#e74c3c}.input-error[data-v-bd7eafe6]:focus{box-shadow:0 0 0 3px #e74c3c1a}.field-err[data-v-bd7eafe6]{font-size:12px;color:#e74c3c;padding-left:2px}.toggle-pwd[data-v-bd7eafe6]{position:absolute;right:10px;border:none;background:none;color:#bbb;cursor:pointer;padding:4px;display:flex;align-items:center;transition:color .15s;z-index:1}.toggle-pwd[data-v-bd7eafe6]:hover{color:#555}.radio-group[data-v-bd7eafe6]{display:flex;gap:10px;padding-top:2px}.radio[data-v-bd7eafe6]{flex:1;height:44px;display:flex;align-items:center;justify-content:center;border:1.5px solid #e2e2e2;border-radius:0;cursor:pointer;font-size:13px;color:#888;transition:all .2s;background:#fff}.radio input[data-v-bd7eafe6]{display:none}.radio[data-v-bd7eafe6]:hover{border-color:#6c63ff;color:#6c63ff}.radio.active[data-v-bd7eafe6]{border-color:#6c63ff;color:#6c63ff;background:#f5f3ff}.dropdown-wrapper[data-v-bd7eafe6]{position:relative}.dropdown[data-v-bd7eafe6]{position:absolute;top:52px;left:0;right:0;max-height:200px;overflow-y:auto;background:#fff;border:1.5px solid #e2e2e2;border-radius:0;box-shadow:0 4px 12px #0000001a;z-index:10;list-style:none;padding:4px 0}.dropdown li[data-v-bd7eafe6]{padding:10px 14px;font-size:13px;color:#333;cursor:pointer;transition:background .15s}.dropdown li[data-v-bd7eafe6]:hover{background:#f5f3ff}.code-row[data-v-bd7eafe6]{display:flex;gap:10px}.btn-code[data-v-bd7eafe6]{width:110px;height:48px;border:none;border-radius:0;background:#36b8f3;color:#fff;font-size:13px;cursor:pointer;white-space:nowrap;transition:opacity .2s;flex-shrink:0}.btn-code[data-v-bd7eafe6]:hover{opacity:.88}.btn-code[data-v-bd7eafe6]:disabled{background:#ccc;cursor:not-allowed;opacity:1}.btn-submit[data-v-bd7eafe6]{width:100%;height:48px;border:none;border-radius:0;background:#36b8f3;color:#fff;font-size:16px;font-weight:600;cursor:pointer;margin-top:6px;transition:opacity .2s,transform .15s,box-shadow .2s;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 14px #36b8f359}.btn-submit[data-v-bd7eafe6]:hover{opacity:.92;transform:translateY(-1px);box-shadow:0 6px 20px #36b8f373}.btn-submit[data-v-bd7eafe6]:disabled{opacity:.5;cursor:not-allowed;transform:none;box-shadow:none}.switch-link[data-v-bd7eafe6]{text-align:center;font-size:13px;color:#aaa;margin-top:6px}.switch-link a[data-v-bd7eafe6]{color:#4a90d9;text-decoration:none;font-weight:500}.switch-link a[data-v-bd7eafe6]:hover{text-decoration:underline}.spinner[data-v-bd7eafe6]{width:22px;height:22px;border:2.5px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-bd7eafe6 .6s linear infinite}@keyframes spin-bd7eafe6{to{transform:rotate(360deg)}}@media (max-width: 480px){.register-wrapper[data-v-bd7eafe6]{padding:80px 16px 16px;align-items:flex-start}.register-card[data-v-bd7eafe6]{padding:36px 24px 28px;border-radius:0;width:100%}.title[data-v-bd7eafe6]{font-size:24px}}.profile[data-v-188f0dda]{padding:20px 16px;display:flex;flex-direction:column;align-items:center;gap:20px}.avatar-section[data-v-188f0dda]{display:flex;flex-direction:column;align-items:center;gap:10px;padding:28px 0 16px}.avatar[data-v-188f0dda]{width:72px;height:72px;border-radius:50%;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-size:30px;font-weight:700;display:flex;align-items:center;justify-content:center}.name[data-v-188f0dda]{font-size:20px;color:#1a1a1a;font-weight:600}.role-tag[data-v-188f0dda]{font-size:12px;padding:3px 14px;border-radius:20px;background:#f0f4ff;color:#4a6cf7;font-weight:500}.info-card[data-v-188f0dda]{width:100%;background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 1px 6px #0000000a}.info-item[data-v-188f0dda]{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid #f5f5f5}.info-item[data-v-188f0dda]:last-child{border-bottom:none}.info-label[data-v-188f0dda]{font-size:14px;color:#888}.info-value[data-v-188f0dda]{font-size:14px;color:#333;font-weight:500}.expand-section[data-v-188f0dda]{width:100%}.expand-entry[data-v-188f0dda]{width:100%;display:flex;justify-content:space-between;align-items:center;padding:16px 18px;background:#fff;border:none;border-radius:12px;cursor:pointer;box-shadow:0 1px 6px #0000000a;transition:box-shadow .2s}.expand-entry[data-v-188f0dda]:hover{box-shadow:0 2px 10px #00000014}.expand-entry-left[data-v-188f0dda]{display:flex;align-items:center;gap:10px}.expand-entry-icon[data-v-188f0dda]{color:#4a6cf7}.expand-entry-text[data-v-188f0dda]{font-size:15px;color:#333;font-weight:500}.expand-arrow[data-v-188f0dda]{color:#bbb;transition:transform .25s}.expand-arrow.rotated[data-v-188f0dda]{transform:rotate(180deg)}.expand-body[data-v-188f0dda]{max-height:0;overflow:hidden;transition:max-height .35s ease}.expand-body.expanded[data-v-188f0dda]{max-height:1000px}.expand-body-inner[data-v-188f0dda]{background:#fff;border-radius:0 0 12px 12px;padding:0 18px 20px;margin-top:-6px;box-shadow:0 1px 6px #0000000a;display:flex;flex-direction:column;gap:16px}.toast[data-v-188f0dda]{padding:10px 14px;border-radius:8px;font-size:13px;text-align:center;animation:fadeIn-188f0dda .25s ease}.toast-ok[data-v-188f0dda]{background:#f0fdf4;color:#16a34a;border:1px solid #bbf7d0}.toast-err[data-v-188f0dda]{background:#fef2f2;color:#dc2626;border:1px solid #fecaca}@keyframes fadeIn-188f0dda{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.field[data-v-188f0dda]{display:flex;flex-direction:column;gap:4px}.field label[data-v-188f0dda]{font-size:13px;color:#555;font-weight:500}.input[data-v-188f0dda]{width:100%;height:42px;border:1px solid #ddd;border-radius:8px;padding:0 12px;font-size:14px;outline:none;transition:border-color .2s;box-sizing:border-box;background:#fafafa}.input[data-v-188f0dda]:focus{border-color:#4a6cf7;background:#fff}.input-err[data-v-188f0dda]{border-color:#e74c3c}.input-err[data-v-188f0dda]:focus{border-color:#e74c3c}.input-disabled[data-v-188f0dda]{background:#f3f4f6;color:#999;cursor:not-allowed}.phone-row[data-v-188f0dda]{display:flex;gap:10px}.flex-input[data-v-188f0dda]{flex:1}.btn-code[data-v-188f0dda]{width:110px;height:42px;border:none;border-radius:8px;background:#4a6cf7;color:#fff;font-size:13px;cursor:pointer;white-space:nowrap;transition:background .2s;flex-shrink:0}.btn-code[data-v-188f0dda]:hover{background:#3d5bd9}.btn-code[data-v-188f0dda]:disabled{background:#ccc;cursor:not-allowed}.field-hint[data-v-188f0dda]{font-size:11px;color:#bbb;padding-left:2px}.field-err[data-v-188f0dda]{font-size:12px;color:#e74c3c;padding-left:2px}.btn-submit[data-v-188f0dda]{width:100%;height:44px;border:none;border-radius:10px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-size:15px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:opacity .2s}.btn-submit[data-v-188f0dda]:hover{opacity:.92}.btn-submit[data-v-188f0dda]:disabled{opacity:.6;cursor:not-allowed}.submit-hint[data-v-188f0dda]{font-size:11px;color:#ccc;text-align:center;margin-top:-8px;font-style:italic}.spinner[data-v-188f0dda]{width:20px;height:20px;border:2.5px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-188f0dda .6s linear infinite}@keyframes spin-188f0dda{to{transform:rotate(360deg)}}.btn-logout[data-v-188f0dda]{width:100%;height:44px;border:none;border-radius:10px;background:#fff;color:#e74c3c;font-size:15px;cursor:pointer;box-shadow:0 1px 4px #0000000f;margin-top:8px;transition:background .2s}.btn-logout[data-v-188f0dda]:hover{background:#fef2f2}@media (min-width: 768px){.profile[data-v-188f0dda]{max-width:500px;margin:0 auto;padding:32px 20px}}@media (min-width: 1024px){.profile[data-v-188f0dda]{max-width:540px}}.create-overlay[data-v-f297851a]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:300;background:#00000059;display:flex;align-items:center;justify-content:center;padding:20px}.create-card[data-v-f297851a]{width:460px;max-width:100%;max-height:85vh;overflow-y:auto;background:#fff;border-radius:14px;box-shadow:0 8px 32px #00000026;padding:24px 28px 28px}.create-header[data-v-f297851a]{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.create-title[data-v-f297851a]{font-size:18px;font-weight:600;color:#222}.create-close-btn[data-v-f297851a]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:transparent;color:#888;cursor:pointer;transition:background .15s,color .15s}.create-close-btn[data-v-f297851a]:hover{background:#f0f0f0;color:#333}.error-banner[data-v-f297851a]{padding:10px 14px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;color:#dc2626;font-size:13px;margin-bottom:16px;animation:slideDown-f297851a .25s ease}@keyframes slideDown-f297851a{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.form[data-v-f297851a]{display:flex;flex-direction:column;gap:16px}.field[data-v-f297851a]{display:flex;flex-direction:column;gap:6px}.field label[data-v-f297851a]{font-size:13px;color:#555;font-weight:500}.input[data-v-f297851a]{width:100%;height:44px;border:1.5px solid #e2e2e2;border-radius:8px;padding:0 14px;font-size:14px;outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box;background:#fff}.input[data-v-f297851a]:focus{border-color:#36b8f3;box-shadow:0 0 0 3px #36b8f31a}.input-error[data-v-f297851a]{border-color:#e74c3c}.textarea[data-v-f297851a]{height:auto;padding:12px 14px;resize:vertical;font-family:inherit}.select[data-v-f297851a]{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23999' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;padding-right:36px}.field-err[data-v-f297851a]{font-size:12px;color:#e74c3c;padding-left:2px}.btn-submit[data-v-f297851a]{width:100%;height:48px;border:none;border-radius:8px;background:#36b8f3;color:#fff;font-size:16px;font-weight:600;cursor:pointer;margin-top:4px;transition:opacity .2s,transform .15s;display:flex;align-items:center;justify-content:center}.btn-submit[data-v-f297851a]:hover{opacity:.92}.btn-submit[data-v-f297851a]:disabled{opacity:.5;cursor:not-allowed}.spinner[data-v-f297851a]{width:22px;height:22px;border:2.5px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-f297851a .6s linear infinite}@keyframes spin-f297851a{to{transform:rotate(360deg)}}.members-page[data-v-00506eb2]{width:100%;max-width:640px;margin:0 auto;min-height:100vh;background:#f5f6fa}.members-topbar[data-v-00506eb2]{display:flex;align-items:center;gap:10px;padding:12px 16px;background:#fff;border-bottom:1px solid #f0f0f0;position:sticky;top:0;z-index:10}.members-back[data-v-00506eb2]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#f0f0f0;color:#333;cursor:pointer;flex-shrink:0;transition:background .15s}.members-back[data-v-00506eb2]:hover{background:#e0e0e0}.members-search[data-v-00506eb2]{flex:1;display:flex;align-items:center;gap:8px;height:36px;padding:0 12px;background:#f5f6fa;border-radius:10px}.members-search-icon[data-v-00506eb2]{flex-shrink:0;color:#bbb}.members-search-input[data-v-00506eb2]{flex:1;border:none;outline:none;background:transparent;font-size:14px;color:#333}.members-search-input[data-v-00506eb2]::placeholder{color:#bbb}.members-search-clear[data-v-00506eb2]{width:22px;height:22px;display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#ddd;color:#666;cursor:pointer;flex-shrink:0}.members-status[data-v-00506eb2]{text-align:center;padding:60px 0;color:#999;font-size:14px}.members-error[data-v-00506eb2]{color:#e74c3c}.members-section[data-v-00506eb2]{background:#fff;margin:12px 16px;border-radius:12px;overflow:hidden}.members-section-header[data-v-00506eb2]{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 10px}.members-section-title[data-v-00506eb2]{font-size:15px;font-weight:600;color:#1a1a1a}.members-section-count[data-v-00506eb2]{font-size:12px;color:#aaa}.members-list[data-v-00506eb2]{padding:0 16px 4px}.member-card[data-v-00506eb2]{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid #f5f5f5}.member-card[data-v-00506eb2]:first-child{border-top:none}.member-avatar[data-v-00506eb2]{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;color:#fff;flex-shrink:0}.member-info[data-v-00506eb2]{flex:1;min-width:0}.member-name[data-v-00506eb2]{font-size:14px;font-weight:500;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.member-id[data-v-00506eb2]{font-size:12px;color:#aaa;margin-top:2px}.member-role-tag[data-v-00506eb2]{font-size:11px;padding:2px 8px;border-radius:4px;font-weight:500;flex-shrink:0}.member-role-tag.teacher[data-v-00506eb2]{color:#2377e4;background:#2377e41a}.member-role-tag.student[data-v-00506eb2]{color:#059669;background:#ecfdf5}.promote-btn[data-v-00506eb2]{font-size:11px;padding:3px 10px;border-radius:4px;border:1px solid #2377E4;background:#fff;color:#2377e4;cursor:pointer;font-weight:500;flex-shrink:0;transition:all .15s}.promote-btn[data-v-00506eb2]:hover{background:#2377e4;color:#fff}.demote-btn[data-v-00506eb2]{font-size:11px;padding:3px 10px;border-radius:4px;border:1px solid #e67e22;background:#fff;color:#e67e22;cursor:pointer;font-weight:500;flex-shrink:0;transition:all .15s}.demote-btn[data-v-00506eb2]:hover{background:#e67e22;color:#fff}.members-empty[data-v-00506eb2]{text-align:center;padding:32px 0;color:#bbb;font-size:13px}.shd-page[data-v-ece6e281]{--primary: #3b82f6;--primary-dark: #2563eb;--primary-light: #eff6ff;--bg: #f8fafc;--card: #fff;--border: #e2e8f0;--shadow: 0 1px 3px rgba(0,0,0,.06);--text: #1e293b;--text-secondary: #64748b;--text-muted: #94a3b8;--danger: #ef4444;--success: #22c55e;--warn: #f59e0b;padding:0 0 32px}.back-bar[data-v-ece6e281]{padding:12px 28px;background:var(--card);border-bottom:1px solid var(--border)}.btn-back[data-v-ece6e281]{display:flex;align-items:center;gap:6px;background:none;border:none;font-size:15px;color:var(--text);cursor:pointer;font-weight:600}.btn-back[data-v-ece6e281]:hover{color:var(--primary)}.shd-card[data-v-ece6e281]{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:24px 28px;margin:20px 28px 0;box-shadow:var(--shadow)}.shd-card-header[data-v-ece6e281]{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px}.shd-title[data-v-ece6e281]{font-size:20px;font-weight:700;color:var(--text);flex:1}.shd-section-title[data-v-ece6e281]{font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px}.shd-status[data-v-ece6e281]{padding:5px 14px;border-radius:14px;font-size:13px;font-weight:600;white-space:nowrap}.status-unsubmitted[data-v-ece6e281]{background:#fef3c7;color:#92400e}.status-submitted[data-v-ece6e281]{background:#dbeafe;color:#1d4ed8}.status-overdue[data-v-ece6e281]{background:#fee2e2;color:#dc2626}.status-graded[data-v-ece6e281]{background:#dcfce7;color:#15803d}.shd-meta[data-v-ece6e281]{display:flex;flex-wrap:wrap;gap:16px}.shd-meta-item[data-v-ece6e281]{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--text-secondary)}.deadline-soon[data-v-ece6e281]{color:var(--warn)}.deadline-over[data-v-ece6e281]{color:var(--danger);font-weight:600}.tag-warn[data-v-ece6e281]{font-size:11px;padding:1px 8px;border-radius:10px;background:#fef3c7;color:#92400e;margin-left:6px}.tag-over[data-v-ece6e281]{font-size:11px;padding:1px 8px;border-radius:10px;background:#fee2e2;color:#dc2626;margin-left:6px}.score-item[data-v-ece6e281]{color:var(--primary)}.score-item strong[data-v-ece6e281]{font-size:15px}.shd-content[data-v-ece6e281]{font-size:14px;line-height:1.8;color:var(--text);white-space:pre-wrap;padding:14px 16px;background:var(--bg);border-radius:8px}.shd-files-section[data-v-ece6e281]{margin-top:24px;border-top:1px solid var(--border);padding-top:20px}.file-list[data-v-ece6e281]{display:flex;flex-direction:column;gap:4px}.file-item[data-v-ece6e281]{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--bg);border-radius:8px;transition:background .15s}.file-item[data-v-ece6e281]:hover{background:var(--primary-light)}.file-icon[data-v-ece6e281]{font-size:18px;flex-shrink:0}.file-name[data-v-ece6e281]{flex:1;font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size[data-v-ece6e281]{font-size:12px;color:var(--text-muted);flex-shrink:0}.file-dl[data-v-ece6e281]{font-size:14px;text-decoration:none;color:var(--primary);flex-shrink:0;padding:4px 8px;border-radius:4px}.file-dl[data-v-ece6e281]:hover{background:var(--primary-light)}.shd-empty-block[data-v-ece6e281]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 0;color:var(--text-muted);font-size:14px}.btn-submit-hw[data-v-ece6e281]{display:flex;align-items:center;gap:6px;padding:9px 20px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background .2s}.btn-submit-hw[data-v-ece6e281]:hover{background:var(--primary-dark)}.sub-record[data-v-ece6e281]{padding:16px;border:1px solid var(--border);border-radius:10px;margin-bottom:12px;transition:box-shadow .15s}.sub-record[data-v-ece6e281]:hover{box-shadow:0 2px 8px #0000000a}.sub-record-header[data-v-ece6e281]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.sub-time[data-v-ece6e281]{font-size:13px;color:var(--text-secondary)}.sub-status-tag[data-v-ece6e281]{font-size:12px;padding:2px 10px;border-radius:10px;background:#dbeafe;color:#1d4ed8;font-weight:500}.sub-graded[data-v-ece6e281]{background:#dcfce7;color:#15803d}.sub-content[data-v-ece6e281]{font-size:13px;color:var(--text-secondary);margin-bottom:6px}.sub-grade[data-v-ece6e281]{margin-top:10px;padding-top:10px;border-top:1px dashed var(--border)}.sub-grade-item[data-v-ece6e281]{font-size:13px;margin-bottom:4px;color:var(--text-secondary)}.sub-grade-item strong[data-v-ece6e281]{color:var(--primary);font-size:16px}.sub-label[data-v-ece6e281]{font-weight:600;color:var(--text)}.sub-comment[data-v-ece6e281]{color:var(--text)}.shd-state[data-v-ece6e281]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:80px 20px;color:var(--text-muted)}.error-text[data-v-ece6e281]{color:var(--danger);text-align:center;max-width:360px}.btn-retry[data-v-ece6e281]{padding:10px 28px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background .2s}.btn-retry[data-v-ece6e281]:hover{background:var(--primary-dark)}.loading-spinner[data-v-ece6e281]{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin-ece6e281 .7s linear infinite}@keyframes spin-ece6e281{to{transform:rotate(360deg)}}.teacher-hw-page[data-v-e3a4c3ed]{width:100%;max-width:740px;margin:0 auto;min-height:100vh;background:#f8f9fb;padding-bottom:32px}.th-status[data-v-e3a4c3ed]{text-align:center;padding:80px 0;color:#999;font-size:14px}.th-error[data-v-e3a4c3ed]{color:#e74c3c}.th-topbar[data-v-e3a4c3ed]{display:flex;align-items:center;gap:16px;padding:10px 16px;background:#fff;border-bottom:1px solid #edf0f5}.th-back[data-v-e3a4c3ed]{width:30px;height:30px;display:flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:#f0f2f7;color:#555;cursor:pointer;flex-shrink:0}.th-back[data-v-e3a4c3ed]:hover{background:#e4e7ed}.th-tabs[data-v-e3a4c3ed]{display:flex;gap:6px}.th-tab[data-v-e3a4c3ed]{padding:6px 14px;border:none;border-radius:6px;background:transparent;font-size:13px;color:#888;cursor:pointer;transition:all .15s}.th-tab.active[data-v-e3a4c3ed]{background:#e8f0fe;color:#2377e4;font-weight:500}.th-header[data-v-e3a4c3ed]{padding:20px 20px 4px}.th-title[data-v-e3a4c3ed]{font-size:22px;font-weight:700;color:#1a1a1a}.th-actions[data-v-e3a4c3ed]{display:flex;align-items:center;justify-content:space-between;padding:12px 20px;flex-wrap:wrap;gap:10px}.th-time-group[data-v-e3a4c3ed]{display:flex;align-items:center;gap:8px}.th-time-tag[data-v-e3a4c3ed]{display:flex;align-items:center;gap:4px;font-size:12px;padding:4px 10px;border-radius:6px}.th-time-tag.start[data-v-e3a4c3ed]{color:#059669;background:#ecfdf5}.th-time-tag.end[data-v-e3a4c3ed]{color:#e74c3c;background:#fef2f2}.th-time-input[data-v-e3a4c3ed]{width:160px;padding:2px 6px;font-size:12px;border:1px solid #e74c3c;border-radius:4px;outline:none;background:#fff}.th-time-input[data-v-e3a4c3ed]:focus{box-shadow:0 0 0 2px #e74c3c33}.th-actions-right[data-v-e3a4c3ed]{display:flex;align-items:center;gap:8px}.th-dropdown-wrapper[data-v-e3a4c3ed]{position:relative}.th-dropdown[data-v-e3a4c3ed]{position:absolute;right:0;top:36px;background:#fff;border-radius:10px;box-shadow:0 4px 20px #0000001a;padding:6px;z-index:20;min-width:140px}.th-dropdown-item[data-v-e3a4c3ed]{display:block;width:100%;padding:10px 14px;border:none;border-radius:8px;background:transparent;font-size:13px;color:#333;cursor:pointer;text-align:left;transition:background .1s}.th-dropdown-item[data-v-e3a4c3ed]:hover{background:#f5f6fa}.th-dropdown-item.danger[data-v-e3a4c3ed]{color:#e74c3c}.th-btn[data-v-e3a4c3ed]{height:34px;padding:0 14px;border:none;border-radius:8px;font-size:13px;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:5px;transition:all .15s}.th-btn-outline[data-v-e3a4c3ed]{background:#fff;color:#555;border:1px solid #e0e0e0}.th-btn-outline[data-v-e3a4c3ed]:hover{background:#f5f6fa}.th-btn-primary[data-v-e3a4c3ed]{background:#2377e4;color:#fff}.th-btn-primary[data-v-e3a4c3ed]:hover{background:#1a5fc4}.th-search-bar[data-v-e3a4c3ed]{display:flex;align-items:center;gap:8px;margin:0 20px 12px;padding:0 12px;height:38px;background:#fff;border-radius:8px;border:1px solid #edf0f5}.th-search-icon[data-v-e3a4c3ed]{flex-shrink:0;color:#bbb}.th-search-input[data-v-e3a4c3ed]{flex:1;border:none;outline:none;font-size:13px;color:#333;background:transparent}.th-search-input[data-v-e3a4c3ed]::placeholder{color:#ccc}.th-search-clear[data-v-e3a4c3ed]{width:20px;height:20px;display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#e0e0e0;color:#666;cursor:pointer}.th-stats[data-v-e3a4c3ed]{display:flex;gap:0;margin:0 20px 16px;background:#fff;border-radius:10px;overflow:hidden;border:1px solid #edf0f5}.th-stat[data-v-e3a4c3ed]{flex:1;text-align:center;padding:14px 8px;border-right:1px solid #edf0f5}.th-stat[data-v-e3a4c3ed]:last-child{border-right:none}.th-stat-num[data-v-e3a4c3ed]{font-size:20px;font-weight:700;color:#333;display:block}.th-stat-num.green[data-v-e3a4c3ed]{color:#059669}.th-stat-num.blue[data-v-e3a4c3ed]{color:#2377e4}.th-stat-num.red[data-v-e3a4c3ed]{color:#e74c3c}.th-stat-label[data-v-e3a4c3ed]{font-size:11px;color:#999;margin-top:2px;display:block}.th-table[data-v-e3a4c3ed]{margin:0 20px;background:#fff;border-radius:10px;border:1px solid #edf0f5;overflow:hidden}.th-table-head[data-v-e3a4c3ed]{display:flex;align-items:center;padding:10px 16px;background:#fafbfc;border-bottom:1px solid #edf0f5;font-size:12px;color:#999;font-weight:500}.th-row[data-v-e3a4c3ed]{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #f5f5f5;transition:background .1s}.th-row[data-v-e3a4c3ed]:last-child{border-bottom:none}.th-row[data-v-e3a4c3ed]:hover{background:#fafbfc}.th-row.row-unsubmitted[data-v-e3a4c3ed]{background:#fefdf6}.th-col-id[data-v-e3a4c3ed]{width:90px;font-size:13px;color:#666;flex-shrink:0}.th-col-name[data-v-e3a4c3ed]{flex:1;font-size:13px;color:#333;font-weight:500;min-width:0}.th-col-score[data-v-e3a4c3ed]{width:80px;text-align:center;flex-shrink:0}.th-col-time[data-v-e3a4c3ed]{width:100px;text-align:center;font-size:12px;color:#999;flex-shrink:0}.th-col-action[data-v-e3a4c3ed]{width:82px;text-align:right;flex-shrink:0}.th-score-val[data-v-e3a4c3ed]{font-size:14px;font-weight:600;color:#059669}.th-score-total[data-v-e3a4c3ed]{font-size:12px;color:#bbb}.th-tag[data-v-e3a4c3ed]{display:inline-block;font-size:11px;padding:2px 8px;border-radius:4px;font-weight:500}.th-tag.danger[data-v-e3a4c3ed]{color:#e74c3c;background:#fef2f2}.th-tag.warn[data-v-e3a4c3ed]{color:#b45309;background:#fffbeb}.th-action-btn[data-v-e3a4c3ed]{height:28px;padding:0 10px;border:none;border-radius:6px;font-size:11px;font-weight:500;cursor:pointer;transition:all .15s}.th-action-btn.primary[data-v-e3a4c3ed]{background:#e8f0fe;color:#2377e4}.th-action-btn.primary[data-v-e3a4c3ed]:hover{background:#2377e4;color:#fff}.th-action-btn.warn[data-v-e3a4c3ed]{background:#fef2f2;color:#e74c3c}.th-action-btn.warn[data-v-e3a4c3ed]:hover{background:#e74c3c;color:#fff}.th-action-btn.ghost[data-v-e3a4c3ed]{background:#f8fafc;color:#64748b}.th-action-btn.ghost[data-v-e3a4c3ed]:hover{background:#f1f5f9}.th-file-badge[data-v-e3a4c3ed]{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:#3b82f6;margin-top:4px;cursor:default}.th-not-started-tip[data-v-e3a4c3ed]{font-size:11px;color:#9ca3af;font-style:italic}.th-empty[data-v-e3a4c3ed]{text-align:center;padding:32px 0;color:#bbb;font-size:13px}.th-footer[data-v-e3a4c3ed]{display:flex;gap:12px;padding:20px}.th-footer-btn[data-v-e3a4c3ed]{flex:1;height:44px;display:flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:10px;font-size:14px;font-weight:500;cursor:pointer;transition:all .15s;background:#e8f0fe;color:#2377e4}.th-footer-btn[data-v-e3a4c3ed]:hover{background:#d0e2fd}.th-footer-btn.warn[data-v-e3a4c3ed]{background:#fef2f2;color:#e74c3c}.th-footer-btn.warn[data-v-e3a4c3ed]:hover{background:#fde2e2}.th-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;justify-content:center;align-items:flex-start;padding:30px 20px;z-index:1000;overflow-y:auto}.th-dialog{background:#fff;border-radius:14px;width:560px;max-width:95vw;box-shadow:0 25px 60px #0000002e}.th-dialog-header{display:flex;justify-content:space-between;align-items:center;padding:20px 28px;border-bottom:1px solid #e2e8f0}.th-dialog-header h3{font-size:18px;font-weight:700;color:#1e293b}.th-dialog-close{width:34px;height:34px;display:flex;align-items:center;justify-content:center;background:none;border:none;font-size:22px;color:#94a3b8;cursor:pointer;border-radius:8px}.th-dialog-close:hover{background:#f8fafc;color:#1e293b}.th-dialog-body{padding:24px 28px;max-height:60vh;overflow-y:auto}.th-dialog-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.th-field{margin-bottom:16px}.th-field label{display:block;font-size:13px;font-weight:600;color:#1e293b;margin-bottom:6px}.th-req{color:#ef4444}.th-input{width:100%;padding:9px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;color:#1e293b;outline:none;transition:border-color .2s;background:#fff;box-sizing:border-box}.th-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.th-textarea{resize:vertical;font-family:inherit}.th-submit-content{padding:12px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0;font-size:13px;color:#475569;white-space:pre-wrap;max-height:200px;overflow-y:auto}.th-grade-error{color:#ef4444;font-size:13px;margin-top:8px}.th-btn-cancel{padding:10px 24px;background:#f8fafc;border:none;border-radius:8px;font-size:14px;color:#64748b;cursor:pointer}.th-btn-submit{padding:10px 28px;background:#3b82f6;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:700;cursor:pointer;transition:background .2s}.th-btn-submit:hover{background:#2563eb}.th-btn-submit:disabled{background:#a5b4fc;cursor:not-allowed}.th-file-list{display:flex;flex-direction:column;gap:8px}.th-file-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;background:#f0f9ff;border:1px solid #bae6fd;border-radius:8px;font-size:13px;color:#0369a1;text-decoration:none;transition:background .15s;word-break:break-all}.th-file-link:hover{background:#e0f2fe}.course-homework[data-v-6f0111f7]{--primary: #3b82f6;--primary-dark: #2563eb;--primary-light: #eff6ff;--bg: #f8fafc;--card: #fff;--border: #e2e8f0;--text: #1e293b;--text-secondary: #64748b;--text-muted: #94a3b8;--danger: #ef4444;--success: #22c55e}.back-bar[data-v-6f0111f7]{padding:12px 28px;background:var(--card);border-bottom:1px solid var(--border)}.btn-back[data-v-6f0111f7]{display:flex;align-items:center;gap:6px;background:none;border:none;font-size:15px;color:var(--text);cursor:pointer;font-weight:600}.btn-back[data-v-6f0111f7]:hover{color:var(--primary)}.course-tabs[data-v-6f0111f7]{display:flex;justify-content:space-between;align-items:center;padding:0 28px;background:var(--card);border-bottom:2px solid var(--border);height:48px}.course-tabs-left[data-v-6f0111f7]{display:flex}.course-tab[data-v-6f0111f7]{padding:12px 22px;background:none;border:none;font-size:14px;color:var(--text-secondary);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s;font-weight:500}.course-tab[data-v-6f0111f7]:hover{color:var(--text)}.course-tab.active[data-v-6f0111f7]{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.course-code-label[data-v-6f0111f7]{font-size:13px;color:var(--text-muted)}.hw-toolbar[data-v-6f0111f7]{display:flex;justify-content:space-between;align-items:center;padding:16px 28px;background:var(--bg)}.hw-summary[data-v-6f0111f7]{font-size:14px;color:var(--text-secondary)}.btn-publish[data-v-6f0111f7]{display:flex;align-items:center;gap:6px;padding:9px 20px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:background .2s}.btn-publish[data-v-6f0111f7]:hover{background:var(--primary-dark)}.hw-table-wrap[data-v-6f0111f7]{padding:0 28px 28px}.hw-table[data-v-6f0111f7]{width:100%;border-collapse:collapse;background:var(--card);border-radius:12px;overflow:hidden;box-shadow:0 1px 3px #0000000a}.hw-table thead[data-v-6f0111f7]{background:#f1f5f9}.hw-table th[data-v-6f0111f7]{padding:14px 16px;font-size:13px;font-weight:600;color:var(--text-secondary);text-align:left}.hw-table td[data-v-6f0111f7]{padding:14px 16px;font-size:13px;color:var(--text);border-top:1px solid var(--border);vertical-align:middle}.hw-table tbody tr[data-v-6f0111f7]:hover{background:var(--primary-light)}.hw-name[data-v-6f0111f7]{font-weight:600}.progress-cell[data-v-6f0111f7]{display:flex;align-items:center;gap:8px}.progress-bar[data-v-6f0111f7]{width:60px;height:6px;background:#e2e8f0;border-radius:3px;overflow:hidden;flex-shrink:0}.progress-fill[data-v-6f0111f7]{height:100%;background:var(--primary);border-radius:3px}.progress-text[data-v-6f0111f7]{font-size:12px;color:var(--text-secondary);white-space:nowrap}.action-btns[data-v-6f0111f7]{display:flex;gap:4px}.act-btn[data-v-6f0111f7]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid var(--border);border-radius:6px;cursor:pointer;color:var(--text-secondary);transition:all .15s}.act-btn[data-v-6f0111f7]:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-light)}.empty-cell[data-v-6f0111f7]{text-align:center;padding:48px 0!important}.empty-state[data-v-6f0111f7]{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--text-muted);font-size:14px}.pagination[data-v-6f0111f7]{display:flex;justify-content:center;align-items:center;gap:6px;margin-top:20px}.pagination button[data-v-6f0111f7]{padding:6px 14px;border:1px solid var(--border);border-radius:6px;background:var(--card);cursor:pointer;font-size:13px;color:var(--text-secondary)}.pagination button[data-v-6f0111f7]:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}.pagination button[data-v-6f0111f7]:disabled{opacity:.4;cursor:not-allowed}.page-num[data-v-6f0111f7]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text-secondary)}.page-num.active[data-v-6f0111f7]{background:var(--primary);color:#fff}.cw-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;display:flex;justify-content:center;align-items:flex-start;padding:30px 20px;z-index:1000;overflow-y:auto}.cw-dialog{background:#fff;border-radius:14px;width:640px;max-width:95vw;box-shadow:0 25px 60px #0000002e}.cw-dialog-wide{width:700px}.cw-dialog-xwide{width:780px}.cw-dialog-header{display:flex;justify-content:space-between;align-items:center;padding:20px 28px;border-bottom:1px solid #e2e8f0}.cw-dialog-header h3{font-size:18px;font-weight:700;color:#1e293b}.cw-dialog-close{width:34px;height:34px;display:flex;align-items:center;justify-content:center;background:none;border:none;font-size:22px;color:#94a3b8;cursor:pointer;border-radius:8px}.cw-dialog-close:hover{background:#f8fafc;color:#1e293b}.cw-dialog-body{padding:24px 28px;max-height:60vh;overflow-y:auto}.cw-dialog-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:20px}.cw-field{margin-bottom:16px}.cw-field label{display:block;font-size:13px;font-weight:600;color:#1e293b;margin-bottom:6px}.cw-req{color:#ef4444}.cw-field-row{display:flex;gap:20px}.cw-field-row .cw-field{flex:1}.cw-input{width:100%;padding:9px 14px;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;color:#1e293b;outline:none;transition:border-color .2s;background:#fff;box-sizing:border-box}.cw-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.cw-textarea{resize:vertical;font-family:inherit}.cw-error{color:#ef4444;font-size:13px;margin-top:8px}.cw-btn-cancel{padding:10px 24px;background:#f8fafc;border:none;border-radius:8px;font-size:14px;color:#64748b;cursor:pointer}.cw-btn-submit{padding:10px 28px;background:#3b82f6;color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:700;cursor:pointer;transition:background .2s}.cw-btn-submit:hover{background:#2563eb}.cw-btn-submit:disabled{background:#a5b4fc;cursor:not-allowed}.cw-attach-area{display:flex;align-items:center;gap:14px}.cw-attach-btn{display:flex;align-items:center;gap:6px;padding:8px 16px;border:1px dashed #3b82f6;border-radius:8px;font-size:13px;color:#3b82f6;cursor:pointer;background:#eff6ff}.cw-attach-btn:hover{background:#dbeafe}.cw-attach-hint{font-size:12px;color:#94a3b8}.cw-attach-list{list-style:none;margin-top:10px}.cw-attach-item{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#f8fafc;border-radius:6px;margin-bottom:6px;font-size:13px}.cw-attach-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cw-attach-size{color:#94a3b8;font-size:12px}.cw-attach-del{background:none;border:none;font-size:18px;color:#94a3b8;cursor:pointer}.cw-detail-meta{display:flex;flex-wrap:wrap;gap:16px;padding-bottom:14px;border-bottom:1px solid #e2e8f0;margin-bottom:14px;font-size:13px;color:#64748b}.cw-detail-section{margin-bottom:16px}.cw-detail-section h4{font-size:14px;font-weight:600;color:#1e293b;margin-bottom:8px}.cw-detail-content{font-size:14px;line-height:1.7;color:#1e293b;white-space:pre-wrap}.cw-file-list{list-style:none}.cw-file-item{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid #e2e8f0;font-size:13px;color:#1e293b}.cw-file-size{color:#94a3b8;font-size:12px}.cw-grading-table{width:100%;border-collapse:collapse;font-size:13px}.cw-grading-table th{text-align:left;padding:8px 10px;background:#f1f5f9;color:#64748b;font-weight:600}.cw-grading-table td{padding:10px;border-top:1px solid #e2e8f0;color:#1e293b}.cw-empty-state{display:flex;flex-direction:column;align-items:center;gap:12px;color:#94a3b8;font-size:14px}.shs-page[data-v-40e6b80f]{--primary:#3b82f6;--primary-dark:#2563eb;--primary-light:#eff6ff;--bg:#f8fafc;--card:white;--border:#e2e8f0;--shadow:0 1px 3px rgba(0,0,0,.06);--text:#1e293b;--text2:#64748b;--text3:#94a3b8;--danger:#ef4444;--success:#22c55e;--warn:#f59e0b;padding:0 0 32px}.back-bar[data-v-40e6b80f]{padding:12px 28px;background:#fff;border-bottom:1px solid var(--border)}.btn-back[data-v-40e6b80f]{display:flex;align-items:center;gap:6px;background:none;border:none;font-size:15px;color:var(--text);cursor:pointer;font-weight:600}.btn-back[data-v-40e6b80f]:hover{color:var(--primary)}.shs-card[data-v-40e6b80f]{background:#fff;border:1px solid var(--border);border-radius:12px;padding:24px 28px;margin:20px 28px 0;box-shadow:var(--shadow)}.shs-card-header[data-v-40e6b80f]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.shs-title[data-v-40e6b80f]{font-size:20px;font-weight:700;color:var(--text)}.shs-section-title[data-v-40e6b80f]{font-size:15px;font-weight:700;color:var(--text);margin-bottom:12px}.shs-status[data-v-40e6b80f]{padding:5px 14px;border-radius:14px;font-size:13px;font-weight:600;white-space:nowrap}.s-unsubmitted[data-v-40e6b80f],.s-unstarted[data-v-40e6b80f]{background:#fef3c7;color:#92400e}.s-submitted[data-v-40e6b80f]{background:#dbeafe;color:#1d4ed8}.s-overdue[data-v-40e6b80f]{background:#fee2e2;color:#dc2626}.s-graded[data-v-40e6b80f]{background:#dcfce7;color:#15803d}.shs-meta[data-v-40e6b80f]{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;color:var(--text2)}.deadline-soon[data-v-40e6b80f]{color:var(--warn)}.deadline-over[data-v-40e6b80f]{color:var(--danger);font-weight:600}.tag-warn[data-v-40e6b80f]{font-size:11px;padding:1px 8px;border-radius:10px;background:#fef3c7;color:#92400e;margin-left:6px;font-style:normal}.tag-over[data-v-40e6b80f]{font-size:11px;padding:1px 8px;border-radius:10px;background:#fee2e2;color:#dc2626;margin-left:6px;font-style:normal}.shs-desc[data-v-40e6b80f]{font-size:14px;line-height:1.8;color:var(--text);white-space:pre-wrap;padding:14px 16px;background:var(--bg);border-radius:8px}.shs-files-section[data-v-40e6b80f]{margin-top:20px;border-top:1px solid var(--border);padding-top:16px}.shs-files-section h4[data-v-40e6b80f]{font-size:14px;font-weight:600;color:var(--text);margin-bottom:8px}.file-list[data-v-40e6b80f]{display:flex;flex-direction:column;gap:4px}.file-item[data-v-40e6b80f]{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--bg);border-radius:6px;font-size:13px}.file-name[data-v-40e6b80f]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text)}.file-size[data-v-40e6b80f]{font-size:12px;color:var(--text3)}.file-dl[data-v-40e6b80f]{text-decoration:none;color:var(--primary);font-size:14px;padding:2px 6px}.file-dl[data-v-40e6b80f]:hover{background:var(--primary-light);border-radius:4px}.field[data-v-40e6b80f]{margin-bottom:16px}.field label[data-v-40e6b80f]{display:block;font-size:13px;font-weight:600;color:var(--text);margin-bottom:6px}.input[data-v-40e6b80f]{width:100%;padding:10px 14px;border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text);outline:none;resize:vertical;background:#fff;box-sizing:border-box}.input[data-v-40e6b80f]:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f61a}.input[data-v-40e6b80f]:disabled{background:var(--bg);color:var(--text3)}.upload-row[data-v-40e6b80f]{display:flex;align-items:center;gap:10px}.upload-btn[data-v-40e6b80f]{display:inline-flex;align-items:center;gap:6px;padding:9px 18px;border:1px dashed var(--primary);border-radius:8px;font-size:13px;color:var(--primary);cursor:pointer;background:var(--primary-light)}.upload-btn[data-v-40e6b80f]:hover{background:#dbeafe}.upload-btn.disabled[data-v-40e6b80f]{opacity:.4;cursor:not-allowed}.upload-list[data-v-40e6b80f]{list-style:none;margin-top:8px}.upload-item[data-v-40e6b80f]{display:flex;align-items:center;gap:8px;padding:6px 12px;background:var(--bg);border-radius:6px;margin-bottom:4px;font-size:13px}.f-size[data-v-40e6b80f]{font-size:12px;color:var(--text3)}.upload-item button[data-v-40e6b80f]{background:none;border:none;font-size:16px;color:var(--text3);cursor:pointer;margin-left:auto}.upload-item button[data-v-40e6b80f]:hover{color:var(--danger)}.submit-bar[data-v-40e6b80f]{display:flex;justify-content:flex-end;align-items:center;gap:14px;margin-top:16px}.submit-hint[data-v-40e6b80f]{font-size:13px;color:var(--danger)}.btn-submit[data-v-40e6b80f]{padding:10px 32px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;transition:background .2s}.btn-submit[data-v-40e6b80f]:hover:not(:disabled){background:var(--primary-dark)}.btn-submit[data-v-40e6b80f]:disabled{background:#a5b4fc;cursor:not-allowed}.error-text[data-v-40e6b80f]{color:var(--danger);font-size:13px;margin-top:8px}.sub-record[data-v-40e6b80f]{padding:16px;border:1px solid var(--border);border-radius:10px;margin-bottom:12px;transition:box-shadow .15s}.sub-record[data-v-40e6b80f]:hover{box-shadow:0 2px 8px #0000000a}.sub-record.latest[data-v-40e6b80f]{border-color:var(--primary);background:var(--primary-light)}.sub-record-hd[data-v-40e6b80f]{display:flex;align-items:center;gap:8px;margin-bottom:8px}.sub-time[data-v-40e6b80f]{font-size:13px;color:var(--text2);flex:1}.sub-tag[data-v-40e6b80f]{font-size:12px;padding:2px 10px;border-radius:10px;background:#dbeafe;color:#1d4ed8;font-weight:500}.sub-tag.graded[data-v-40e6b80f]{background:#dcfce7;color:#15803d}.sub-tag.latest-tag[data-v-40e6b80f]{background:var(--primary);color:#fff}.sub-content[data-v-40e6b80f]{font-size:13px;color:var(--text2);margin-bottom:6px;white-space:pre-wrap}.sub-files[data-v-40e6b80f]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.sub-file-chip[data-v-40e6b80f]{font-size:12px;padding:2px 10px;background:var(--bg);border-radius:6px;color:var(--text2)}.sub-grade[data-v-40e6b80f]{margin-top:10px;padding-top:10px;border-top:1px dashed var(--border)}.sub-grade strong[data-v-40e6b80f]{color:var(--primary)}.sub-comment[data-v-40e6b80f]{color:var(--text2);font-size:13px;margin-top:4px}.empty-block[data-v-40e6b80f]{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 0;color:var(--text3);font-size:14px}.shs-state[data-v-40e6b80f]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:80px 20px;color:var(--text3)}.err-text[data-v-40e6b80f]{color:var(--danger);text-align:center;max-width:360px}.btn-retry[data-v-40e6b80f]{padding:10px 28px;background:var(--primary);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer}.btn-retry[data-v-40e6b80f]:hover{background:var(--primary-dark)}.loading-spinner[data-v-40e6b80f]{width:36px;height:36px;border:3px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin-40e6b80f .7s linear infinite}@keyframes spin-40e6b80f{to{transform:rotate(360deg)}}.discussion[data-v-5b92d5c7]{padding:0}.disc-ctrl[data-v-5b92d5c7]{display:flex;justify-content:flex-end;margin-bottom:12px}.disc-ctrl-btn[data-v-5b92d5c7]{font-size:12px;padding:4px 12px;border:1px solid #e74c3c;background:#fff;color:#e74c3c;border-radius:4px;cursor:pointer}.disc-create[data-v-5b92d5c7]{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.disc-input[data-v-5b92d5c7],.disc-textarea[data-v-5b92d5c7]{width:100%;padding:8px 12px;border:1px solid var(--border, #e5e7eb);border-radius:6px;font-size:14px;outline:none;resize:vertical;box-sizing:border-box}.disc-input[data-v-5b92d5c7]:focus,.disc-textarea[data-v-5b92d5c7]:focus{border-color:var(--primary, #4a6cf7)}.disc-btn[data-v-5b92d5c7]{align-self:flex-end;padding:6px 20px;background:var(--primary, #4a6cf7);color:#fff;border:none;border-radius:6px;font-size:13px;cursor:pointer}.disc-btn[data-v-5b92d5c7]:disabled{opacity:.5;cursor:not-allowed}.disc-back[data-v-5b92d5c7]{margin-bottom:12px}.disc-back-btn[data-v-5b92d5c7]{font-size:13px;color:var(--primary, #4a6cf7);background:none;border:none;cursor:pointer}.disc-locked[data-v-5b92d5c7]{text-align:center;padding:24px;color:#9ca3af;font-size:13px}.disc-list[data-v-5b92d5c7]{display:flex;flex-direction:column;gap:10px}.disc-empty[data-v-5b92d5c7]{text-align:center;padding:32px;color:#9ca3af;font-size:13px}.disc-item[data-v-5b92d5c7]{border:1px solid var(--border, #e5e7eb);border-radius:8px;padding:12px 14px}.disc-item.pinned[data-v-5b92d5c7]{border-color:#f59e0b;background:#fffbeb}.disc-item-header[data-v-5b92d5c7]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.disc-pin-badge[data-v-5b92d5c7]{font-size:10px;background:#f59e0b;color:#fff;padding:1px 6px;border-radius:3px}.disc-title[data-v-5b92d5c7]{font-weight:600;font-size:14px;cursor:pointer;color:var(--text, #1f2937);flex:1;min-width:0}.disc-title[data-v-5b92d5c7]:hover{color:var(--primary, #4a6cf7)}.disc-meta[data-v-5b92d5c7]{display:flex;gap:10px;font-size:11px;color:#9ca3af}.disc-item-actions[data-v-5b92d5c7]{display:flex;gap:4px}.disc-action-btn[data-v-5b92d5c7]{font-size:11px;padding:2px 8px;border:1px solid #d1d5db;background:#fff;color:#6b7280;border-radius:3px;cursor:pointer}.disc-action-btn.danger[data-v-5b92d5c7]{color:#ef4444;border-color:#fca5a5}.disc-item-body[data-v-5b92d5c7]{margin-top:8px;font-size:13px;color:#4b5563;white-space:pre-wrap;word-break:break-all}.disc-edit-area[data-v-5b92d5c7]{margin-top:8px;display:flex;flex-direction:column;gap:6px}.disc-edit-btns[data-v-5b92d5c7]{display:flex;gap:6px}.disc-btn-sm[data-v-5b92d5c7]{padding:4px 12px;border-radius:4px;font-size:12px;border:1px solid var(--primary, #4a6cf7);background:var(--primary, #4a6cf7);color:#fff;cursor:pointer}.disc-btn-sm.cancel[data-v-5b92d5c7]{background:#fff;color:#6b7280;border-color:#d1d5db}.disc-replies[data-v-5b92d5c7]{display:flex;flex-direction:column;gap:10px}.disc-reply-item[data-v-5b92d5c7]{padding:10px 12px;border:1px solid var(--border, #e5e7eb);border-radius:6px;border-left:3px solid var(--primary, #4a6cf7)}.disc-reply-header[data-v-5b92d5c7]{display:flex;gap:8px;font-size:12px;color:#6b7280;margin-bottom:4px}.disc-reply-author[data-v-5b92d5c7]{font-weight:500}.disc-reply-content[data-v-5b92d5c7]{font-size:13px;color:#374151;white-space:pre-wrap;word-break:break-all}.disc-reply-create[data-v-5b92d5c7]{margin-top:12px;display:flex;flex-direction:column;gap:8px}.disc-reply-bar[data-v-5b92d5c7]{display:flex;align-items:center;justify-content:space-between}.disc-anon-label[data-v-5b92d5c7]{font-size:12px;color:#6b7280;display:flex;align-items:center;gap:4px;cursor:pointer}.material-panel[data-v-f4bc72e0]{position:relative}.mat-breadcrumb[data-v-f4bc72e0]{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:14px;font-size:13px}.mat-bread-item[data-v-f4bc72e0]{color:#2377e4;cursor:pointer}.mat-bread-item[data-v-f4bc72e0]:hover{text-decoration:underline}.mat-bread-sep[data-v-f4bc72e0]{color:#ccc}.mat-toolbar[data-v-f4bc72e0]{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}.mat-tb-btn[data-v-f4bc72e0]{display:inline-flex;align-items:center;padding:6px 14px;border:1px solid #2377E4;border-radius:6px;background:#fff;color:#2377e4;font-size:12px;cursor:pointer;transition:background .15s}.mat-tb-btn[data-v-f4bc72e0]:hover{background:#eef2ff}.mat-tb-btn input[type=file][data-v-f4bc72e0]{display:none}.mat-list[data-v-f4bc72e0]{display:flex;flex-direction:column;gap:4px}.mat-item[data-v-f4bc72e0]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;transition:background .15s}.mat-item[data-v-f4bc72e0]:hover{background:#f5f6fa}.mat-icon[data-v-f4bc72e0]{flex-shrink:0}.mat-name[data-v-f4bc72e0]{flex:1;min-width:0;font-size:14px;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.mat-folder .mat-name[data-v-f4bc72e0]{font-weight:500}.mat-name[data-v-f4bc72e0]:hover{color:#2377e4}.mat-size[data-v-f4bc72e0]{font-size:11px;color:#999;white-space:nowrap}.mat-actions[data-v-f4bc72e0]{display:flex;gap:4px;flex-shrink:0}.mat-act-btn[data-v-f4bc72e0]{padding:3px 8px;border:1px solid #d1d5db;border-radius:4px;background:#fff;color:#6b7280;font-size:11px;cursor:pointer}.mat-act-btn[data-v-f4bc72e0]:hover{background:#f3f4f6}.mat-act-btn.danger[data-v-f4bc72e0]{color:#ef4444;border-color:#fca5a5}.mat-act-btn.danger[data-v-f4bc72e0]:hover{background:#fef2f2}.mat-empty[data-v-f4bc72e0]{text-align:center;padding:40px 0;color:#bbb;font-size:13px}.mat-overlay[data-v-f4bc72e0]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#0000004d;display:flex;align-items:center;justify-content:center}.mat-dialog[data-v-f4bc72e0]{background:#fff;border-radius:12px;padding:20px 24px;width:90%;max-width:360px;box-shadow:0 8px 30px #00000026}.mat-dialog h4[data-v-f4bc72e0]{margin:0 0 12px;font-size:15px;color:#111}.mat-input[data-v-f4bc72e0]{width:100%;padding:8px 12px;border:1px solid #e5e7eb;border-radius:6px;font-size:14px;outline:none;box-sizing:border-box}.mat-input[data-v-f4bc72e0]:focus{border-color:#2377e4}.mat-dialog-btns[data-v-f4bc72e0]{display:flex;justify-content:flex-end;gap:8px;margin-top:14px}.mat-d-btn[data-v-f4bc72e0]{padding:6px 16px;border:none;border-radius:6px;background:#2377e4;color:#fff;font-size:13px;cursor:pointer}.mat-d-btn[data-v-f4bc72e0]:disabled{opacity:.5;cursor:not-allowed}.mat-d-btn.cancel[data-v-f4bc72e0]{background:#f3f4f6;color:#6b7280}.mat-move-list[data-v-f4bc72e0]{max-height:200px;overflow-y:auto;margin-bottom:8px;border:1px solid #e5e7eb;border-radius:6px}.mat-move-item[data-v-f4bc72e0]{padding:8px 12px;cursor:pointer;font-size:13px;color:#333;border-bottom:1px solid #f0f0f0}.mat-move-item[data-v-f4bc72e0]:last-child{border-bottom:none}.mat-move-item[data-v-f4bc72e0]:hover{background:#eef2ff}.course-detail-page[data-v-edd28824]{width:100%;max-width:100%;min-height:100vh;background:#fff;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}.banner[data-v-edd28824]{position:relative;padding:16px 16px 20px;min-height:180px;background-position:center;background-size:cover;background-repeat:no-repeat;overflow:hidden}.banner-bg[data-v-edd28824]{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.banner-leaf[data-v-edd28824]{position:absolute;opacity:.4}.leaf-1[data-v-edd28824]{right:-10px;top:-30px;width:160px;height:200px;transform:rotate(15deg)}.leaf-2[data-v-edd28824]{right:30px;top:-20px;width:130px;height:170px;transform:rotate(-20deg)}.banner-back[data-v-edd28824]{position:absolute;top:12px;left:12px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#ffffff26;cursor:pointer;z-index:2;transition:background .15s}.banner-back[data-v-edd28824]:hover{background:#ffffff40}.banner-main[data-v-edd28824]{position:relative;z-index:1;padding-top:8px;padding-left:44px}.banner-class[data-v-edd28824]{font-size:13px;color:#ffffffbf;margin-bottom:6px;line-height:1.4}.banner-title[data-v-edd28824]{font-size:20px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:12px;letter-spacing:.5px}.banner-code-row[data-v-edd28824]{display:flex;align-items:center;gap:10px}.banner-code[data-v-edd28824]{font-size:13px;color:#fffc;letter-spacing:1px}.banner-code-copy[data-v-edd28824]{display:flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid rgba(255,255,255,.3);border-radius:4px;background:#ffffff1a;color:#fff;font-size:11px;cursor:pointer;transition:background .15s}.banner-code-copy[data-v-edd28824]:hover{background:#fff3}.banner-stats[data-v-edd28824]{position:relative;z-index:1;display:flex;gap:20px;margin-top:18px}.stat-item[data-v-edd28824]{display:flex;align-items:center;gap:5px;font-size:12px;color:#ffffffb3}.stat-clickable[data-v-edd28824]{cursor:pointer;padding:4px 8px;margin:-4px -8px;border-radius:8px;transition:background .15s}.stat-clickable[data-v-edd28824]:hover{background:#ffffff1a}.stat-arrow[data-v-edd28824]{flex-shrink:0}.archived-tag[data-v-edd28824]{display:inline-block;vertical-align:middle;margin-left:10px;padding:2px 10px;font-size:11px;font-weight:500;color:#92400e;background:#ffffff40;border:1px solid rgba(255,255,255,.3);border-radius:10px;letter-spacing:0}.func-buttons[data-v-edd28824]{display:flex;justify-content:space-around;padding:16px 12px;background:#fff}.func-btn[data-v-edd28824]{display:flex;flex-direction:column;align-items:center;gap:6px;border:none;background:none;cursor:pointer;padding:4px;transition:transform .15s}.func-btn[data-v-edd28824]:active{transform:scale(.95)}.func-btn-circle[data-v-edd28824]{width:46px;height:46px;border-radius:50%;background:#2377e4;display:flex;align-items:center;justify-content:center;color:#fff;transition:background .15s}.func-btn:hover .func-btn-circle[data-v-edd28824]{background:#1a5fc4}.func-btn-label[data-v-edd28824]{font-size:11px;color:#555;white-space:nowrap}.tab-bar-wrapper[data-v-edd28824]{background:#fff;border-bottom:1px solid #f0f0f0}.tab-bar[data-v-edd28824]{display:flex;overflow-x:auto;padding:0 4px;gap:0;-webkit-overflow-scrolling:touch}.tab-bar[data-v-edd28824]::-webkit-scrollbar{display:none}.tab-item[data-v-edd28824]{flex-shrink:0;padding:12px 14px;border:none;background:none;font-size:13px;color:#777;cursor:pointer;position:relative;white-space:nowrap;transition:color .15s}.tab-item.active[data-v-edd28824]{color:#2377e4;font-weight:600}.tab-item.active[data-v-edd28824]:after{content:"";position:absolute;bottom:0;left:50%;transform:translate(-50%);width:24px;height:3px;border-radius:2px;background:#2377e4}.content-area[data-v-edd28824]{background:#fff;min-height:400px}.catalog-panel[data-v-edd28824]{padding:16px}.catalog-header[data-v-edd28824]{display:flex;align-items:center;justify-content:space-between;margin-bottom:40px}.catalog-title[data-v-edd28824]{font-size:16px;font-weight:600;color:#111}.catalog-stats[data-v-edd28824]{font-size:12px;color:#999}.catalog-empty[data-v-edd28824]{display:flex;flex-direction:column;align-items:center;padding:40px 0 60px}.catalog-empty-icon[data-v-edd28824]{width:120px;height:120px;margin-bottom:16px}.catalog-empty-text[data-v-edd28824]{font-size:14px;color:#aaa}.homework-panel[data-v-edd28824],.topic-panel[data-v-edd28824],.material-panel[data-v-edd28824]{padding:16px}.homework-header[data-v-edd28824]{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.homework-title[data-v-edd28824]{font-size:16px;font-weight:600;color:#111}.add-hw-btn[data-v-edd28824]{display:inline-flex;align-items:center;gap:4px;height:34px;padding:0 16px;border:none;border-radius:8px;background:#2377e4;color:#fff;font-size:13px;font-weight:500;cursor:pointer;transition:opacity .15s}.add-hw-btn[data-v-edd28824]:hover{opacity:.9}.add-hw-btn[data-v-edd28824]:active{transform:scale(.97)}.homework-list[data-v-edd28824]{display:flex;flex-direction:column;gap:12px}.homework-card[data-v-edd28824]{background:#f9f9fb;border-radius:10px;padding:14px 16px;cursor:pointer;transition:background .15s}.homework-card[data-v-edd28824]:hover{background:#f0f0f5}.hw-card-top[data-v-edd28824]{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:8px}.hw-title[data-v-edd28824]{font-size:15px;font-weight:600;color:#1a1a1a;flex:1}.hw-deadline[data-v-edd28824]{font-size:11px;color:#e74c3c;white-space:nowrap;padding:2px 8px;background:#fef2f2;border-radius:4px;flex-shrink:0}.hw-status[data-v-edd28824]{font-size:11px;white-space:nowrap;padding:2px 8px;border-radius:4px;flex-shrink:0}.hw-status.submitted[data-v-edd28824]{color:#059669;background:#ecfdf5}.hw-status.unsubmitted[data-v-edd28824]{color:#e74c3c;background:#fef2f2}.hw-stats[data-v-edd28824]{font-size:11px;color:#666;white-space:nowrap;flex-shrink:0}.hw-card-bottom[data-v-edd28824]{display:flex;align-items:flex-start;gap:8px}.hw-content[data-v-edd28824]{flex:1;font-size:13px;color:#666;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.hw-file-btn[data-v-edd28824]{flex-shrink:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border:none;border-radius:6px;background:#eef0f5;color:#888;cursor:pointer;transition:background .15s,color .15s}.hw-file-btn[data-v-edd28824]:hover{background:#2377e4;color:#fff}.hw-files[data-v-edd28824]{margin-top:10px;padding-top:10px;border-top:1px solid #eee}.hw-files-loading[data-v-edd28824],.hw-files-empty[data-v-edd28824]{font-size:12px;color:#bbb}.hw-file-link[data-v-edd28824]{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:6px;background:#fff;font-size:13px;color:#2377e4;text-decoration:none;transition:background .15s}.hw-file-link+.hw-file-link[data-v-edd28824]{margin-top:4px}.hw-file-link[data-v-edd28824]:hover{background:#eef2ff}.homework-empty[data-v-edd28824]{display:flex;flex-direction:column;align-items:center;padding:60px 0}.homework-empty-icon[data-v-edd28824]{width:100px;height:100px;margin-bottom:12px}.homework-empty-text[data-v-edd28824]{font-size:13px;color:#bbb}.tab-placeholder[data-v-edd28824]{display:flex;flex-direction:column;align-items:center;padding:80px 0}.tab-placeholder-icon[data-v-edd28824]{width:80px;height:80px;margin-bottom:14px}.tab-placeholder-text[data-v-edd28824]{font-size:13px;color:#bbb}.page-loading[data-v-edd28824],.page-error[data-v-edd28824]{text-align:center;padding:80px 0;color:#999;font-size:14px}.page-error button[data-v-edd28824]{margin-top:10px;padding:8px 20px;border:none;border-radius:6px;background:#2377e4;color:#fff;font-size:13px;cursor:pointer}.hw-detail-placeholder[data-v-edd28824]{min-height:100vh;background:#f5f6fa}.hw-detail-topbar[data-v-edd28824]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fff;border-bottom:1px solid #f0f0f0}.hw-detail-back[data-v-edd28824]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;border-radius:50%;background:#f0f0f0;color:#333;cursor:pointer;transition:background .15s}.hw-detail-back[data-v-edd28824]:hover{background:#e0e0e0}.hw-detail-title[data-v-edd28824]{font-size:17px;font-weight:600;color:#1a1a1a}.hw-detail-body[data-v-edd28824]{padding:40px 20px;text-align:center}.hw-detail-info[data-v-edd28824]{font-size:14px;color:#888;margin-bottom:8px}.hw-detail-placeholder-text[data-v-edd28824]{font-size:14px;color:#bbb;margin-top:24px}.classroom-page[data-v-6e879c2b]{width:100%;max-width:1180px;margin:0 auto;padding:24px;min-height:100%;background:#f5f6fa;overflow:hidden}.top-section[data-v-6e879c2b]{margin-bottom:24px;min-width:0;overflow:hidden}.top-header[data-v-6e879c2b]{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.top-title[data-v-6e879c2b]{font-size:18px;font-weight:600;color:#1a1a1a}.btn-action[data-v-6e879c2b]{display:flex;align-items:center;gap:4px;height:34px;padding:0 14px;border:none;border-radius:8px;background:#4a6cf7;color:#fff;font-size:13px;font-weight:500;cursor:pointer;transition:opacity .15s}.btn-action[data-v-6e879c2b]:hover{opacity:.9}.btn-action-icon[data-v-6e879c2b]{flex-shrink:0}.btn-action-wrapper[data-v-6e879c2b]{position:relative}.action-sheet[data-v-6e879c2b]{position:absolute;right:0;top:38px;background:#fff;border-radius:10px;box-shadow:0 4px 20px #0000001f;padding:6px;z-index:50;min-width:150px}.action-sheet-item[data-v-6e879c2b]{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;border:none;border-radius:8px;background:transparent;font-size:14px;color:#333;cursor:pointer;white-space:nowrap;transition:background .15s}.action-sheet-item[data-v-6e879c2b]:hover{background:#f5f6fa}.top-cards-scroll[data-v-6e879c2b]{display:flex;flex-wrap:nowrap;gap:12px;overflow-x:auto;overflow-y:hidden;padding-bottom:4px;width:100%;-webkit-overflow-scrolling:touch;scroll-behavior:auto}.top-cards-scroll[data-v-6e879c2b]::-webkit-scrollbar{display:none}.custom-scrollbar[data-v-6e879c2b]{height:4px;background:#e8e8e8;border-radius:2px;margin-top:12px;cursor:pointer;position:relative;touch-action:none;transition:height .25s cubic-bezier(.4,0,.2,1),border-radius .25s cubic-bezier(.4,0,.2,1),background .25s cubic-bezier(.4,0,.2,1)}.custom-scrollbar-thumb[data-v-6e879c2b]{position:absolute;top:50%;transform:translateY(-50%);height:100%;background:#c8c8c8;border-radius:2px;min-width:32px;transition:height .25s cubic-bezier(.4,0,.2,1),background .25s cubic-bezier(.4,0,.2,1),border-radius .25s cubic-bezier(.4,0,.2,1);pointer-events:auto}.custom-scrollbar.active[data-v-6e879c2b]{height:12px;border-radius:6px;background:#e0e0e0}.custom-scrollbar.active .custom-scrollbar-thumb[data-v-6e879c2b]{height:100%;background:#888;border-radius:6px}.top-card[data-v-6e879c2b]{flex-shrink:0;width:154px;background:#fff;border-radius:12px;overflow:hidden;cursor:grab;position:relative;transition:box-shadow .15s,transform .15s,opacity .15s;user-select:none;-webkit-user-select:none}.top-card[data-v-6e879c2b]:active{cursor:grabbing}.top-card[data-v-6e879c2b]:hover{box-shadow:0 2px 12px #00000014}.top-card.dragging[data-v-6e879c2b]{opacity:.4;transform:scale(.95)}.top-card.drag-over[data-v-6e879c2b]{box-shadow:0 0 0 2px #4a6cf7,0 4px 16px #4a6cf733;transform:scale(1.03)}.top-card-tag[data-v-6e879c2b]{position:absolute;top:8px;left:8px;font-size:11px;color:#4a6cf7;background:#4a6cf71f;padding:2px 6px;border-radius:4px;font-weight:500;z-index:1}.top-card-menu-btn[data-v-6e879c2b]{position:absolute;top:6px;right:6px;width:22px;height:22px;display:flex;align-items:center;justify-content:center;border:none;border-radius:4px;background:#00000059;color:#fff;cursor:pointer;z-index:2;opacity:0;transition:opacity .15s}.top-card:hover .top-card-menu-btn[data-v-6e879c2b]{opacity:1}.sheet-overlay[data-v-6e879c2b]{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;z-index:200;display:flex;align-items:flex-end;justify-content:center;animation:overlayIn-6e879c2b .2s ease}@keyframes overlayIn-6e879c2b{0%{opacity:0}to{opacity:1}}.sheet-panel[data-v-6e879c2b]{width:100%;background:#fff;border-radius:16px 16px 0 0;padding:24px 20px 20px;animation:slideUp-6e879c2b .25s ease}@keyframes slideUp-6e879c2b{0%{transform:translateY(100%)}to{transform:translateY(0)}}.sheet-header[data-v-6e879c2b]{text-align:center;margin-bottom:20px}.sheet-course-name[data-v-6e879c2b]{font-size:17px;font-weight:600;color:#1a1a1a;margin-bottom:4px}.sheet-course-code[data-v-6e879c2b]{font-size:12px;color:#aaa;letter-spacing:1px}.sheet-actions[data-v-6e879c2b]{display:flex;flex-direction:column;gap:2px;margin-bottom:12px}.sheet-action-item[data-v-6e879c2b]{width:100%;height:48px;border:none;border-radius:10px;background:#f5f6fa;color:#333;font-size:15px;cursor:pointer;transition:background .12s}.sheet-action-item[data-v-6e879c2b]:hover{background:#eef0f5}.sheet-action-item[data-v-6e879c2b]:active{background:#e5e7ec}.sheet-cancel-btn[data-v-6e879c2b]{width:100%;height:44px;border:none;border-radius:10px;background:#e8e8e8;color:#666;font-size:14px;cursor:pointer;transition:background .12s}.sheet-cancel-btn[data-v-6e879c2b]:hover{background:#ddd}.top-card-cover[data-v-6e879c2b]{width:100%;height:88px;background-size:cover;background-position:center;background-color:#e0e0e0}.top-card-body[data-v-6e879c2b]{padding:10px 10px 12px}.top-card-code[data-v-6e879c2b]{font-size:11px;color:#aaa;display:block;margin-bottom:4px}.top-card-name[data-v-6e879c2b]{font-size:14px;font-weight:600;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.top-card-intro[data-v-6e879c2b]{font-size:11px;color:#aaa;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:3px}.top-empty[data-v-6e879c2b]{width:100%;text-align:center;padding:28px 0;color:#bbb;font-size:13px}.tab-bar[data-v-6e879c2b]{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;padding:0 2px}.tab-tabs[data-v-6e879c2b]{display:flex;gap:4px;background:#eef0f5;border-radius:8px;padding:3px}.tab-btn[data-v-6e879c2b]{height:32px;padding:0 16px;border:none;border-radius:6px;background:transparent;font-size:13px;color:#888;cursor:pointer;transition:all .2s}.tab-btn.active[data-v-6e879c2b]{background:#fff;color:#1a1a1a;font-weight:500;box-shadow:0 1px 3px #00000014}.tab-actions[data-v-6e879c2b]{display:flex;gap:6px;position:relative}.tab-icon-btn[data-v-6e879c2b]{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border:none;border-radius:8px;background:#fff;color:#888;cursor:pointer;transition:color .15s}.tab-icon-btn[data-v-6e879c2b]:hover{color:#4a6cf7}.more-menu-backdrop[data-v-6e879c2b]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}.more-menu[data-v-6e879c2b]{position:absolute;right:0;top:42px;background:#fff;border-radius:10px;box-shadow:0 8px 30px #0000001f;min-width:140px;z-index:100;overflow:hidden}.more-menu-item[data-v-6e879c2b]{display:block;width:100%;padding:11px 18px;border:none;background:none;font-size:13px;color:#333;text-align:left;cursor:pointer;transition:background .15s}.more-menu-item[data-v-6e879c2b]:hover{background:#f5f7ff}.more-menu-item.cancel[data-v-6e879c2b]{color:#999}.more-menu-item.cancel[data-v-6e879c2b]:hover{background:#f8f8f8}.search-bar[data-v-6e879c2b]{display:flex;align-items:center;gap:8px;padding:0 12px;height:40px;background:#fff;border-radius:10px;margin-bottom:16px}.search-icon[data-v-6e879c2b]{flex-shrink:0;color:#bbb}.search-input[data-v-6e879c2b]{flex:1;border:none;outline:none;font-size:13px;color:#333;background:transparent}.search-input[data-v-6e879c2b]::placeholder{color:#bbb}.course-empty[data-v-6e879c2b]{text-align:center;padding:40px 0;color:#bbb;font-size:13px}.group-list[data-v-6e879c2b]{display:flex;flex-direction:column;gap:12px}.group-item[data-v-6e879c2b]{background:#fff;border-radius:12px;overflow:hidden}.group-header[data-v-6e879c2b]{display:flex;align-items:center;gap:8px;padding:14px 16px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.group-header[data-v-6e879c2b]:hover{background:#fafafa}.group-header[data-v-6e879c2b]:active{background:#f5f5f5}.group-arrow[data-v-6e879c2b]{flex-shrink:0;color:#bbb;transition:transform .25s ease}.group-arrow.expanded[data-v-6e879c2b]{transform:rotate(90deg)}.group-name[data-v-6e879c2b]{font-size:15px;font-weight:600;color:#1a1a1a;flex:1}.group-count[data-v-6e879c2b]{font-size:12px;color:#aaa}.group-courses[data-v-6e879c2b]{border-top:1px solid #f0f0f0;overflow:hidden}.group-slide-enter-active[data-v-6e879c2b],.group-slide-leave-active[data-v-6e879c2b]{transition:all .25s ease;max-height:2000px}.group-slide-enter-from[data-v-6e879c2b],.group-slide-leave-to[data-v-6e879c2b]{max-height:0;opacity:0}.group-course-card[data-v-6e879c2b]{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;transition:background .1s;position:relative}.group-course-card[data-v-6e879c2b]:hover{background:#fafafa}.group-course-card[data-v-6e879c2b]:active{background:#f5f5f5}.group-course-card+.group-course-card[data-v-6e879c2b]{border-top:1px solid #f5f5f5}.group-card-cover[data-v-6e879c2b]{width:44px;height:44px;border-radius:10px;background-size:cover;background-position:center;background-color:#e0e0e0;flex-shrink:0}.group-card-body[data-v-6e879c2b]{flex:1;min-width:0}.group-card-name[data-v-6e879c2b]{font-size:15px;font-weight:500;color:#1a1a1a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:3px}.group-card-intro[data-v-6e879c2b]{font-size:12px;color:#999;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:4px}.group-card-meta[data-v-6e879c2b]{font-size:11px;color:#bbb}.group-card-tag[data-v-6e879c2b]{position:absolute;top:6px;left:6px;font-size:10px;color:#4a6cf7;background:#4a6cf71a;padding:1px 5px;border-radius:3px;font-weight:600;z-index:1}.group-card-menu[data-v-6e879c2b]{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:none;border-radius:6px;background:transparent;color:#bbb;cursor:pointer;flex-shrink:0;transition:color .15s,background .15s}.group-card-menu[data-v-6e879c2b]:hover{color:#666;background:#f0f0f0}.dialog-overlay[data-v-6e879c2b]{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:100;padding:20px}.dialog-card[data-v-6e879c2b]{width:320px;max-width:100%;background:#fff;border-radius:14px;padding:28px 24px 20px;text-align:center}.dialog-title[data-v-6e879c2b]{font-size:18px;font-weight:600;color:#1a1a1a;margin-bottom:6px}.dialog-desc[data-v-6e879c2b]{font-size:13px;color:#999;margin-bottom:16px}.dialog-input[data-v-6e879c2b]{width:100%;height:42px;border:1.5px solid #e0e0e0;border-radius:8px;padding:0 12px;font-size:14px;outline:none;box-sizing:border-box;text-align:center;letter-spacing:2px;transition:border-color .2s}.dialog-input[data-v-6e879c2b]:focus{border-color:#4a6cf7}.dialog-input[data-v-6e879c2b]::placeholder{color:#ccc;letter-spacing:0}.dialog-actions[data-v-6e879c2b]{display:flex;gap:10px;margin-top:18px}.dialog-btn-cancel[data-v-6e879c2b],.dialog-btn-confirm[data-v-6e879c2b]{flex:1;height:40px;border:none;border-radius:8px;font-size:14px;cursor:pointer;font-weight:500;transition:opacity .15s}.dialog-btn-cancel[data-v-6e879c2b]:active,.dialog-btn-confirm[data-v-6e879c2b]:active{opacity:.85}.dialog-btn-cancel[data-v-6e879c2b]{background:#f0f0f0;color:#666}.dialog-btn-confirm[data-v-6e879c2b]{background:#4a6cf7;color:#fff}.dialog-btn-confirm[data-v-6e879c2b]:disabled{opacity:.5;cursor:not-allowed}.dialog-error[data-v-6e879c2b]{margin-top:12px;font-size:12px;color:#e74c3c}.archived-list[data-v-6e879c2b]{max-height:320px;overflow-y:auto}.archived-item[data-v-6e879c2b]{display:flex;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid #f0f0f0;cursor:pointer;transition:background .15s}.archived-item[data-v-6e879c2b]:hover{background:#f8f9fb}.archived-item[data-v-6e879c2b]:last-child{border-bottom:none}.archived-info[data-v-6e879c2b]{flex:1;min-width:0}.archived-name[data-v-6e879c2b]{font-size:14px;font-weight:500;color:#1a1a1a;margin-bottom:2px}.archived-code[data-v-6e879c2b]{font-size:12px;color:#aaa}.archived-unarchive-btn[data-v-6e879c2b]{flex-shrink:0;margin-left:12px;height:30px;padding:0 12px;border:none;border-radius:6px;background:#4a6cf7;color:#fff;font-size:12px;cursor:pointer;transition:opacity .15s}.archived-unarchive-btn[data-v-6e879c2b]:hover{opacity:.85}@media (max-width: 480px){.classroom-page[data-v-6e879c2b]{padding:14px 12px}.top-title[data-v-6e879c2b]{font-size:16px}.top-card[data-v-6e879c2b]{width:136px}.top-card-cover[data-v-6e879c2b]{height:76px}.dialog-card[data-v-6e879c2b]{padding:24px 18px 18px}}.msg-page[data-v-c9078f07]{min-height:100vh;background:#f5f6fa}.msg-header[data-v-c9078f07]{display:flex;align-items:center;gap:8px;padding:16px 20px;background:#fff;border-bottom:1px solid #edf0f5}.msg-back-btn[data-v-c9078f07]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:8px;background:transparent;color:#555;cursor:pointer;transition:background .15s}.msg-back-btn[data-v-c9078f07]:hover{background:#f0f0f0}.msg-header h2[data-v-c9078f07]{font-size:18px;font-weight:700;color:#1a1a1a}.msg-status[data-v-c9078f07]{text-align:center;padding:80px 0;color:#999;font-size:14px}.msg-error[data-v-c9078f07]{color:#e74c3c}.msg-empty[data-v-c9078f07]{display:flex;flex-direction:column;align-items:center;padding:80px 0;color:#bbb;font-size:14px;gap:12px}.msg-list[data-v-c9078f07]{padding:0}.msg-item[data-v-c9078f07]{display:flex;align-items:flex-start;gap:12px;padding:16px 20px;background:#fff;border-bottom:1px solid #f0f0f5;position:relative}.msg-item.unread[data-v-c9078f07]{background:#f8faff}.msg-avatar[data-v-c9078f07]{width:40px;height:40px;border-radius:50%;background:#e8f0fe;color:#2377e4;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}.msg-body[data-v-c9078f07]{flex:1;min-width:0}.msg-meta[data-v-c9078f07]{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.msg-sender[data-v-c9078f07]{font-size:14px;font-weight:600;color:#1a1a1a}.msg-time[data-v-c9078f07]{font-size:12px;color:#bbb}.msg-content[data-v-c9078f07]{font-size:13px;color:#666;line-height:1.5;word-break:break-all}.msg-dot[data-v-c9078f07]{position:absolute;top:20px;right:20px;width:8px;height:8px;border-radius:50%;background:#e74c3c}.msg-item.sent[data-v-c9078f07]{flex-direction:row-reverse;text-align:right;background:#f0fdf4}.msg-item.sent.unread[data-v-c9078f07]{background:#f0fdf4}.msg-avatar.sent[data-v-c9078f07]{background:#dcfce7;color:#16a34a}.msg-item.sent .msg-sender[data-v-c9078f07]{color:#16a34a}.msg-item.sent .msg-content[data-v-c9078f07]{color:#166534}.main-layout[data-v-928f781d]{width:100%;height:100vh;display:flex;flex-direction:column;background:#f5f6fa}.top-nav[data-v-928f781d]{flex-shrink:0;height:70px;background:#fff;border-bottom:1px solid #e9edf5;box-shadow:0 1px 8px #0f172a0a}.nav-inner[data-v-928f781d]{width:100%;height:100%;padding:0 36px;display:flex;align-items:center;justify-content:space-between;gap:24px}.nav-left[data-v-928f781d]{display:inline-flex;align-items:center;gap:18px;min-width:0}.brand-logo[data-v-928f781d]{width:200px;height:150px;object-fit:contain;flex-shrink:0}.classroom-link[data-v-928f781d]{height:42px;padding:0 14px;border:none;border-radius:8px;background:transparent;color:#2377e4;font-size:18px;font-weight:700;white-space:nowrap;cursor:pointer;transition:background .15s}.classroom-link[data-v-928f781d]:hover,.classroom-link.active[data-v-928f781d]{background:#eef4ff}.nav-actions[data-v-928f781d]{display:flex;align-items:center;gap:8px;flex-shrink:0}.nav-icon-btn[data-v-928f781d]{position:relative;width:42px;height:42px;border:none;border-radius:50%;background:transparent;color:#64748b;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s,color .15s}.nav-icon-btn[data-v-928f781d]:hover,.nav-icon-btn.active[data-v-928f781d]{background:#eef4ff;color:#2377e4}.nav-badge[data-v-928f781d]{position:absolute;top:1px;right:-1px;min-width:18px;height:18px;padding:0 5px;background:#e74c3c;color:#fff;font-size:10px;font-weight:700;border-radius:9px;display:flex;align-items:center;justify-content:center;line-height:1}.content[data-v-928f781d]{flex:1;min-height:0;overflow-y:auto}@media (max-width: 480px){.top-nav[data-v-928f781d]{height:64px}.nav-inner[data-v-928f781d]{padding:0 12px;gap:8px}.nav-left[data-v-928f781d]{gap:8px}.brand-logo[data-v-928f781d]{width:46px;height:46px}.classroom-link[data-v-928f781d]{height:36px;padding:0 8px;font-size:16px}.nav-actions[data-v-928f781d]{gap:4px}.nav-icon-btn[data-v-928f781d]{width:38px;height:38px}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Microsoft YaHei,sans-serif;background:#f0f2f5;min-height:100vh}#app-root{min-height:100vh}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;border:2px solid var(--border, #e5e7eb);border-top-color:var(--primary, #4a6cf7);border-radius:50%;animation:spin .6s linear infinite}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.slide-down{animation:slideDown .2s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fade-in{animation:fadeIn .2s ease-out}.error-banner{background:#fef2f2;color:#b91c1c;padding:10px 14px;border-radius:8px;font-size:13px;animation:slideDown .25s ease;border-left:3px solid #ef4444}.success-banner{background:#f0fdf4;color:#166534;padding:10px 14px;border-radius:8px;font-size:13px;animation:slideDown .25s ease;border-left:3px solid #22c55e}.btn-primary{width:100%;padding:12px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 4px 12px #667eea66}.btn-primary:active{transform:translateY(0)}.btn-primary:disabled{opacity:.6;cursor:not-allowed;transform:none;box-shadow:none}
