*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--color-primary: #3C3489;--color-primary-light: #EEEDFE;--color-primary-dark: #26215C;--color-success: #085041;--color-success-light: #E1F5EE;--color-warning: #633806;--color-warning-light: #FAEEDA;--color-danger: #791F1F;--color-danger-light: #FCEBEB;--color-info: #0C447C;--color-info-light: #E6F1FB;--color-bg: #F9F8F6;--color-surface: #FFFFFF;--color-surface-2: #F4F3F0;--color-border: #E2E0DA;--color-border-strong: #C8C6BF;--color-text-primary: #1A1A18;--color-text-secondary:#5F5E5A;--color-text-muted: #8A8880;--color-admin: #3C3489;--color-teacher: #085041;--color-parent: #0C447C;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--font-sans: "Inter", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--shadow-sm: 0 1px 2px rgba(0,0,0,.06);--shadow-md: 0 4px 12px rgba(0,0,0,.08);--shadow-lg: 0 8px 24px rgba(0,0,0,.1);--sidebar-width: 240px;--header-height: 56px;--transition: .15s ease}html{font-size:16px}body{font-family:var(--font-sans);font-size:14px;line-height:1.6;color:var(--color-text-primary);background:var(--color-bg);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:3px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input{width:100%;padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);color:var(--color-text-primary);font-size:14px;transition:border-color var(--transition),box-shadow var(--transition);outline:none}.input:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #3c34891f}.input::placeholder{color:var(--color-text-muted)}.input.error{border-color:var(--color-danger)}.label{display:block;font-size:13px;font-weight:500;color:var(--color-text-secondary);margin-bottom:4px}.field-error{font-size:12px;color:var(--color-danger);margin-top:3px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border-radius:var(--radius-md);font-size:14px;font-weight:500;border:1px solid transparent;transition:all var(--transition);white-space:nowrap}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.btn-primary:hover:not(:disabled){background:var(--color-primary-dark)}.btn-secondary{background:var(--color-surface);color:var(--color-text-primary);border-color:var(--color-border)}.btn-secondary:hover:not(:disabled){background:var(--color-surface-2)}.btn-danger{background:var(--color-danger-light);color:var(--color-danger);border-color:#f0959580}.btn-danger:hover:not(:disabled){background:#f7c1c1}.btn-warning{background:var(--color-warning-light);color:var(--color-warning);border-color:#e8c98580}.btn-warning:hover:not(:disabled){background:#f5e4c0}.btn-ghost{background:transparent;color:var(--color-text-secondary);border-color:transparent}.btn-ghost:hover:not(:disabled){background:var(--color-surface-2)}.btn-sm{padding:5px 10px;font-size:12px}.btn-lg{padding:11px 22px;font-size:15px}.btn-icon{padding:7px;border-radius:var(--radius-md)}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);min-width:0}.card-sm{padding:var(--space-4)}.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--radius-full);font-size:11px;font-weight:500}.badge-purple{background:var(--color-primary-light);color:var(--color-primary)}.badge-teal{background:var(--color-success-light);color:var(--color-success)}.badge-blue{background:var(--color-info-light);color:var(--color-info)}.badge-amber{background:var(--color-warning-light);color:var(--color-warning)}.badge-red{background:var(--color-danger-light);color:var(--color-danger)}.badge-gray{background:var(--color-surface-2);color:var(--color-text-secondary)}.table-wrap{overflow-x:auto;border-radius:var(--radius-lg);border:1px solid var(--color-border)}table{width:100%;border-collapse:collapse;background:var(--color-surface)}thead{background:var(--color-surface-2)}th{padding:10px 14px;text-align:left;font-size:12px;font-weight:500;color:var(--color-text-secondary);border-bottom:1px solid var(--color-border);white-space:nowrap}td{padding:12px 14px;font-size:13px;border-bottom:1px solid var(--color-border);color:var(--color-text-primary)}tr:last-child td{border-bottom:none}tr:hover td{background:var(--color-bg)}.stat-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-5);min-width:0}.stat-label{font-size:12px;color:var(--color-text-muted);margin-bottom:4px}.stat-value{font-size:28px;font-weight:600;color:var(--color-text-primary)}.stat-sub{font-size:12px;color:var(--color-text-muted);margin-top:2px}.alert{padding:12px 16px;border-radius:var(--radius-md);font-size:13px;border:1px solid transparent}.alert-error{background:var(--color-danger-light);color:var(--color-danger);border-color:#f0959580}.alert-success{background:var(--color-success-light);color:var(--color-success);border-color:#5dcaa580}.alert-info{background:var(--color-info-light);color:var(--color-info);border-color:#85b7eb80}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite;display:inline-block}.main-content,.main-content>main{min-width:0}@media (max-width: 768px){:root{--sidebar-width: 0px}.hide-mobile{display:none!important}.main-content{margin-left:0!important}body{overflow-x:hidden}}
