:root{--brand:#4f46e5;--brand-light:#6366f1;--brand-dark:#3730a3;--brand-soft:#eef2ff;--brand-glow:#4f46e540;--brand-gradient:linear-gradient(135deg, #4f46e5 0%, #6366f1 100%);--bg:#f8fafc;--card:#fff;--text:#0f172a;--text-muted:#64748b;--border:#e2e8f0;--border-light:#f1f5f9;--sidebar:#0f172a;--sidebar-hover:#ffffff12;--danger:#e11d48;--danger-soft:#fff1f2;--danger-border:#fecdd3;--success:#059669;--success-soft:#ecfdf5;--success-border:#a7f3d0;--warn:#d97706;--warn-soft:#fffbeb;--warn-border:#fde68a;--radius-sm:8px;--radius:12px;--radius-lg:16px;--shadow-xs:0 1px 2px #0f172a0a;--shadow-sm:0 1px 3px #0f172a14, 0 1px 2px #0f172a0a;--shadow:0 4px 6px -1px #0f172a12, 0 2px 4px -2px #0f172a0d;--shadow-md:0 10px 15px -3px #0f172a14, 0 4px 6px -4px #0f172a0a;--shadow-lg:0 20px 25px -5px #0f172a1a, 0 8px 10px -6px #0f172a0a;--shadow-brand:0 4px 14px #4f46e559;--transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--transition-smooth:.25s cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}html,body,#root{height:100%}body{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:Plus Jakarta Sans,Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}a{color:var(--brand);transition:color var(--transition-fast);text-decoration:none}a:hover{color:var(--brand-dark);text-decoration:underline}h1{letter-spacing:-.025em;color:var(--text);margin:0 0 6px;font-size:24px;font-weight:700}h2{letter-spacing:-.02em;color:var(--text);margin:0 0 8px;font-size:19px;font-weight:700}h3{color:var(--text);margin:0 0 10px;font-size:15px;font-weight:600}hr{border:0;border-top:1px solid var(--border);margin:18px 0}code{background:var(--brand-soft);color:var(--brand-dark);border-radius:6px;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px;font-weight:500}.muted{color:var(--text-muted)}.small{font-size:12.5px}.center{text-align:center}.mt{margin-top:16px}.mb{margin-bottom:12px;display:inline-flex}.danger-text{color:var(--danger)}input,select,textarea{font:inherit;color:var(--text);border:1.5px solid var(--border);width:100%;transition:border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);background:#fff;border-radius:10px;padding:10px 14px;font-size:13.5px;line-height:1.5}input::placeholder,textarea::placeholder{color:#94a3b8;font-weight:400}input:hover:not(:focus):not(:disabled),select:hover:not(:focus):not(:disabled),textarea:hover:not(:focus):not(:disabled){background:#fafbfc;border-color:#cbd5e1}input:focus,select:focus,textarea:focus{background:#fff;border-color:#6366f1;outline:none;box-shadow:0 0 0 3.5px #6366f124,0 1px 2px #0f172a0d}select{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.2' stroke='%234f46e5'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 8.25l-7.5 7.5-7.5-7.5'%3E%3C/path%3E%3C/svg%3E");background-position:right 14px center;background-repeat:no-repeat;background-size:15px 15px;padding-right:40px;font-weight:500}select:disabled{color:#94a3b8;cursor:not-allowed;background-color:#f1f5f9;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2' stroke='%2394a3b8'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 8.25l-7.5 7.5-7.5-7.5'%3E%3C/path%3E%3C/svg%3E");border-color:#e2e8f0}select option{color:#0f172a;background:#fff;padding:8px 12px;font-size:13.5px}select:has(>option[value=""]:checked){color:#94a3b8;font-weight:400}@supports (appearance:base-select){select{appearance:base-select}select::picker(select){appearance:base-select}select{background-image:none;align-items:center;gap:8px;min-height:42px;padding-right:12px;display:flex}select:disabled{background-image:none}select::picker-icon{content:"";width:15px;height:15px;transition:rotate var(--transition-fast);background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.2' stroke='%234f46e5'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 8.25l-7.5 7.5-7.5-7.5'/%3E%3C/svg%3E") 50%/contain no-repeat;flex-shrink:0;margin-left:auto}select:disabled::picker-icon{opacity:.4;filter:grayscale()}select:open::picker-icon{rotate:180deg}select:open{border-color:#6366f1;box-shadow:0 0 0 3.5px #6366f124}select::picker(select){border:1.5px solid var(--border);box-shadow:var(--shadow-lg);overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent;opacity:0;max-height:min(320px,55vh);transition:opacity var(--transition-fast), translate var(--transition-fast), overlay var(--transition-fast) allow-discrete, display var(--transition-fast) allow-discrete;background:#fff;border-radius:12px;margin-block:6px;padding:6px;overflow-y:auto;translate:0 -4px}select:open::picker(select){opacity:1;translate:0}@starting-style{select:open::picker(select){opacity:0;translate:0 -4px}}select option{color:var(--text);cursor:pointer;transition:background var(--transition-fast), color var(--transition-fast);background:0 0;border-radius:8px;align-items:center;gap:10px;padding:9px 12px;font-weight:500;display:flex}select option:hover,select option:focus-visible{background:var(--brand-soft);color:var(--brand-dark);outline:none}select option:checked{color:var(--brand);font-weight:600}select option::checkmark{content:"✓";color:var(--brand);order:1;margin-left:auto;font-weight:700}select option:disabled{color:#94a3b8;cursor:not-allowed;background:0 0}select option[value=""]{color:var(--text-muted);font-weight:400}select optgroup{letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);padding:8px 12px 4px;font-size:11.5px;font-weight:700}}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--brand);cursor:pointer}input[type=file]{cursor:pointer;background:#f8fafc;padding:8px 10px}input[type=file]::file-selector-button{border:1px solid var(--border);cursor:pointer;transition:background var(--transition-fast);background:#fff;border-radius:6px;margin-right:12px;padding:5px 12px;font-size:12.5px;font-weight:500}input[type=file]::file-selector-button:hover{background:#f1f5f9}textarea{resize:vertical}.w-num{width:90px}.field{flex-direction:column;gap:6px;display:flex}.field-label{color:#1e293b;letter-spacing:-.01em;font-size:13px;font-weight:600}.field-hint{color:var(--text-muted);font-size:12px;line-height:1.4}.req{color:var(--danger);margin-left:2px;font-weight:700}.form-grid{flex-direction:column;gap:15px;display:flex}.form-grid.narrow{width:100%;max-width:100%}.row-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.row-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}input[type=checkbox]:not(.switch){appearance:none;cursor:pointer;vertical-align:middle;background-color:#fff;border:1.5px solid #cbd5e1;border-radius:5px;flex-shrink:0;place-content:center;width:18px;height:18px;margin:0;transition:all .18s cubic-bezier(.4,0,.2,1);display:inline-grid;position:relative;box-shadow:0 1px 2px #0f172a0d}input[type=checkbox]:not(.switch):not(:checked):hover:not(:disabled),.check:hover input[type=checkbox]:not(.switch):not(:checked):not(:disabled){border-color:var(--tone,var(--brand,#4f46e5));background-color:#f8fafc;box-shadow:0 0 0 3px #6366f124}input[type=checkbox]:not(.switch):not(:checked):focus-visible{border-color:var(--tone,var(--brand,#4f46e5));outline:none;box-shadow:0 0 0 2px #fff,0 0 0 4px #6366f147}input[type=checkbox]:not(.switch):checked{box-shadow:0 1px 3px #4f46e547;background-color:var(--tone,var(--brand,#4f46e5))!important;border-color:var(--tone,var(--brand,#4f46e5))!important;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='none' stroke='white' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.5 8.2L6.3 11.2L12.5 4.8'/%3E%3C/svg%3E")!important;background-position:50%!important;background-repeat:no-repeat!important;background-size:11px 11px!important}input[type=checkbox]:not(.switch):checked:hover:not(:disabled),.check:hover input[type=checkbox]:not(.switch):checked:not(:disabled){box-shadow:0 0 0 3px #6366f140,0 2px 5px #4f46e559;background-color:var(--tone-dark,var(--brand-dark,#3730a3))!important;border-color:var(--tone-dark,var(--brand-dark,#3730a3))!important}input[type=checkbox]:not(.switch):checked:focus-visible{outline:none;box-shadow:0 0 0 2px #fff,0 0 0 4px #6366f161;border-color:var(--tone-dark,var(--brand-dark,#3730a3))!important}input[type=checkbox]:not(.switch):active:not(:disabled){transform:scale(.92)}input[type=checkbox]:not(.switch):disabled{opacity:.45;cursor:not-allowed;background-color:#f1f5f9;border-color:#e2e8f0}.check{cursor:pointer;-webkit-user-select:none;user-select:none;color:#334155;transition:color var(--transition-fast);align-items:center;gap:10px;font-size:13.5px;display:inline-flex}.check:hover{color:#0f172a}.check.small{font-size:13px}.perm-grid .check{border:1.5px solid var(--border);transition:all var(--transition-fast);background:#fff;border-radius:9px;padding:8px 12px}.perm-grid .check:hover:not(.muted){background:#f8fafc;border-color:#cbd5e1}.perm-grid .check:has(input:checked){color:#3730a3;background:#eef2ff;border-color:#a5b4fc;font-weight:500}.perm-grid .check:has(input:checked):hover:not(.muted){background:#e0e7ff;border-color:#818cf8}.perm-box{border:1.5px solid var(--border);border-radius:var(--radius);background:#fafbfc;margin:0;padding:14px 16px}.perm-box legend{color:#334155;padding:0 8px;font-size:13px;font-weight:600}.perm-grid{grid-template-columns:repeat(2,1fr);gap:10px;display:grid}.pw-row{align-items:center;gap:8px;display:flex}.pw-row input{flex:1}.form-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:6px;display:flex}.settings-section{grid-template-columns:280px minmax(0,1fr);align-items:start;gap:36px;max-width:1240px;display:grid}.settings-info{flex-direction:column;gap:8px;display:flex}.settings-info h3{color:var(--text);letter-spacing:-.01em;margin:0;font-size:17px;font-weight:700}.settings-info p{color:var(--text-muted);margin:0;font-size:13.5px;line-height:1.55}.settings-divider{border:0;border-top:1px solid var(--border);max-width:1240px;margin:36px 0}@media (width<=960px){.settings-section{grid-template-columns:1fr;gap:16px}}.btn{--btn-ring:#6366f159;color:#1e293b;min-height:40px;font:inherit;letter-spacing:.005em;cursor:pointer;white-space:nowrap;transition:background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast), filter var(--transition-fast);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;background:#fff;border:1px solid #d9dfe8;border-radius:10px;justify-content:center;align-items:center;gap:8px;padding:0 16px;font-size:13.5px;font-weight:600;line-height:1;text-decoration:none;display:inline-flex;position:relative;box-shadow:0 1px 2px #0f172a0f}.btn svg{flex-shrink:0;margin-left:-2px}.btn:hover{color:#0f172a;background:#f8fafc;border-color:#c5cdd9;text-decoration:none;box-shadow:0 2px 6px #0f172a14}.btn:active:not(:disabled){transform:translateY(1px)scale(.985);box-shadow:0 1px 1px #0f172a0f}.btn:focus-visible{box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--btn-ring);outline:none}.btn:disabled,.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;box-shadow:none;pointer-events:none;transform:none}.btn-primary{--btn-ring:#4f46e573;color:#fff;background:linear-gradient(#5b54ec 0%,#4f46e5 100%);border-color:#4338ca;box-shadow:inset 0 1px #ffffff2e,0 1px 2px #312e814d,0 4px 12px -2px #4f46e559}.btn-primary:hover{color:#fff;background:linear-gradient(#4f46e5 0%,#4338ca 100%);border-color:#3730a3;box-shadow:inset 0 1px #ffffff2e,0 1px 2px #312e8159,0 8px 18px -4px #4f46e580}.btn-primary:active:not(:disabled){background:#4338ca;box-shadow:inset 0 2px 4px #1e1b4b40}.btn-primary:focus-visible{box-shadow:inset 0 1px 0 #ffffff2e, 0 0 0 2px #fff, 0 0 0 4px var(--btn-ring)}.btn-danger{--btn-ring:#e11d4859;color:var(--danger);border-color:var(--danger-border);background:#fff}.btn-danger:hover{background:var(--danger-soft);color:#be123c;border-color:#fda4af}.btn-ghost{box-shadow:none;color:var(--text-muted);background:0 0;border-color:#0000}.btn-ghost:hover{color:var(--text);box-shadow:none;background:#eef2f7;border-color:#0000}.btn-secondary{color:#334155;box-shadow:none;background:#f1f5f9;border-color:#e2e8f0}.btn-secondary:hover{color:#0f172a;background:#e2e8f0;border-color:#cbd5e1}.form-actions-split{align-items:center;gap:12px;display:flex}.btn-sm{border-radius:8px;gap:6px;min-height:32px;padding:0 12px;font-size:12.5px}.btn-sm svg{width:14px;height:14px}.btn-block{width:100%}.icon-btn{cursor:pointer;color:var(--text-muted);transition:all var(--transition-fast);background:0 0;border:0;border-radius:6px;padding:6px 8px;font-size:16px}.icon-btn:hover:not(:disabled){color:var(--text);background:#f1f5f9}.icon-btn:disabled{opacity:.3;cursor:default}.icon-btn.danger:hover{color:var(--danger);background:var(--danger-soft)}.link-btn{color:var(--brand);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;font-weight:500}.link-btn.danger{color:var(--danger)}.link-btn:hover{text-decoration:underline}.link-btn:has(svg){align-items:center;gap:4px;display:inline-flex}.link-btn svg{width:14px;height:14px}.icon-btn:focus-visible,.link-btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:box-shadow var(--transition-fast), border-color var(--transition-fast);padding:22px}.card.no-pad{padding:0;overflow:hidden}.card-head{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.card-head h3{margin-bottom:2px}.card-toolbar{border-bottom:1px solid var(--border);background:#fafbfc;flex-wrap:wrap;align-items:center;gap:12px;padding:14px 18px;display:flex}.card-toolbar input[type=date]{width:auto}.card-toolbar label{align-items:center;gap:6px;display:inline-flex}.card-footer{border-top:1px solid var(--border);background:#fafbfc;justify-content:space-between;align-items:center;padding:14px 18px;display:flex}.alert{border-radius:var(--radius-sm);border:1px solid;margin-bottom:16px;padding:12px 16px;font-size:13.5px;line-height:1.5}.alert ul{margin:6px 0 0;padding-left:18px}.alert-error{background:var(--danger-soft);border-color:var(--danger-border);color:#9f1239}.alert-success{background:var(--success-soft);border-color:var(--success-border);color:#065f46}.alert-warn{background:var(--warn-soft);border-color:var(--warn-border);color:#92400e}.alert-info{background:var(--brand-soft);color:#3730a3;border-color:#c7d2fe}.badge{color:#475569;text-transform:capitalize;white-space:nowrap;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:999px;align-items:center;padding:3px 10px;font-size:11.5px;font-weight:600;display:inline-flex}.badge-done{background:var(--success-soft);color:#047857;border-color:var(--success-border)}.badge-in_progress{background:var(--brand-soft);color:#4338ca;border-color:#c7d2fe}.badge-pending{background:var(--warn-soft);color:#b45309;border-color:var(--warn-border)}.att-P{background:var(--success-soft);color:#047857;border:1px solid var(--success-border)}.att-A{background:var(--danger-soft);color:#be123c;border:1px solid var(--danger-border)}.att-L{background:var(--warn-soft);color:#b45309;border:1px solid var(--warn-border)}.tag{background:var(--brand-soft);color:var(--brand-dark);border:1px solid #e0e7ff;border-radius:6px;margin:2px 4px 2px 0;padding:2px 8px;font-size:11.5px;font-weight:500;display:inline-block}.pill{background:var(--brand-soft);color:var(--brand);border:1px solid #e0e7ff;border-radius:999px;align-items:center;gap:6px;padding:4px 12px;font-size:12px;font-weight:600;display:inline-flex}.pct{color:var(--success);font-weight:700}.pct.low{color:var(--danger)}.empty{text-align:center;color:var(--text-muted);padding:42px 16px}.empty strong{color:var(--text);margin-bottom:6px;font-size:15px;display:block}.empty p{margin:0;font-size:13.5px}.spinner{border:3px solid var(--brand-soft);border-top-color:var(--brand);border-radius:50%;width:32px;height:32px;margin:40px auto;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.center-screen{place-items:center;height:100%;display:grid}.table-wrap{overflow-x:auto}.table{border-collapse:collapse;width:100%}.table-wrap .table{min-width:560px}.table th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);border-bottom:1.5px solid var(--border);white-space:nowrap;background:#f8fafc;padding:12px 16px;font-size:11.5px;font-weight:600}.table td{border-bottom:1px solid var(--border-light);vertical-align:middle;transition:background var(--transition-fast);padding:12px 16px;font-size:13.5px}.table tbody tr:hover td{background:#f8fafc}.table tr:last-child td{border-bottom:0}.table td input{min-width:80px}.row-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.toasts{z-index:100;flex-direction:column;gap:10px;max-width:calc(100vw - 40px);display:flex;position:fixed;bottom:20px;right:20px}.toast{color:#fff;border-radius:var(--radius);box-shadow:var(--shadow-lg);background:#0f172a;border:1px solid #ffffff1a;max-width:440px;padding:12px 18px;font-size:13.5px;font-weight:500;animation:.25s cubic-bezier(.16,1,.3,1) toastPop}.toast-error{background:var(--danger);border-color:#f43f5e}@keyframes toastPop{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-backdrop{-webkit-backdrop-filter:blur(6px);z-index:50;background:#0f172aa6;place-items:center;padding:20px;animation:.2s ease-out fadeIn;display:grid;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{border-radius:var(--radius-lg);width:100%;max-width:560px;max-height:calc(100vh - 40px);box-shadow:var(--shadow-lg);background:#fff;border:1px solid #fff3;flex-direction:column;animation:.25s cubic-bezier(.16,1,.3,1) modalScale;display:flex}.modal-wide{max-width:820px}@keyframes modalScale{0%{opacity:0;transform:scale(.95)translateY(10px)}to{opacity:1;transform:scale(1)translateY(0)}}.modal-head{border-bottom:1.5px solid var(--border);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);background:#fff;justify-content:space-between;align-items:center;padding:16px 22px;display:flex}.modal-head h3{margin:0;font-size:16px;font-weight:700}.modal-body{padding:22px;overflow-y:auto}.modal-actions{justify-content:flex-end;align-items:center;gap:10px;margin-top:14px;display:flex}.confirm-backdrop{z-index:60;-webkit-backdrop-filter:blur(4px);background:#0f172a8c;place-items:center;padding:20px;animation:.15s ease-out fadeIn;display:grid;position:fixed;inset:0}.confirm{--tone:var(--brand);--tone-soft:var(--brand-soft);border-radius:var(--radius-lg);border:1px solid var(--border);background:#fff;grid-template-columns:auto 1fr;gap:4px 16px;width:100%;max-width:440px;max-height:calc(100vh - 40px);padding:24px 24px 20px;animation:.22s cubic-bezier(.16,1,.3,1) modalScale;display:grid;overflow-y:auto;box-shadow:0 24px 48px -12px #0f172a4d}.confirm-danger{--tone:var(--danger);--tone-soft:var(--danger-soft)}.confirm-warning{--tone:var(--warn);--tone-soft:var(--warn-soft)}.confirm-icon{width:44px;height:44px;color:var(--tone);background:var(--tone-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--tone) 18%, transparent);border-radius:12px;place-items:center;display:grid}.confirm-text h3{letter-spacing:-.01em;margin:2px 0 6px;font-size:16.5px;font-weight:700}.confirm-msg{color:#475569;overflow-wrap:anywhere;font-size:13.5px;line-height:1.6}.confirm-msg b{color:var(--text)}.confirm-list{gap:4px;margin:8px 0;padding:0;list-style:none;display:grid}.confirm-list li{border:1px solid var(--border-light);background:#f8fafc;border-radius:8px;padding:6px 10px}.confirm-note{background:var(--warn-soft);border:1px solid var(--warn-border);color:#92400e;border-radius:10px;margin-top:12px;padding:10px 12px;font-size:12.5px;line-height:1.5}.confirm-actions{grid-column:1/-1;justify-content:flex-end;gap:10px;margin-top:18px;display:flex}@media (width<=480px){.confirm{text-align:center;grid-template-columns:1fr}.confirm-icon{margin:0 auto 8px}.confirm-actions{flex-direction:column-reverse}.confirm-actions .btn{width:100%}}.btn-danger-solid{--btn-ring:#e11d4873;background:linear-gradient(180deg, #f43f5e 0%, var(--danger) 100%);color:#fff;border-color:#be123c;box-shadow:inset 0 1px #ffffff2e,0 1px 2px #8813374d,0 4px 12px -2px #e11d4859}.btn-danger-solid:hover{background:linear-gradient(180deg, var(--danger) 0%, #be123c 100%);color:#fff;border-color:#9f1239}.btn-danger-solid:focus-visible{box-shadow:0 0 0 2px #fff, 0 0 0 4px var(--btn-ring)}.shell{min-height:100%;display:flex}.sidebar{background:var(--sidebar);color:#cbd5e1;border-right:1px solid #ffffff0d;flex-direction:column;flex-shrink:0;width:256px;height:100vh;padding:18px 14px;display:flex;position:sticky;top:0;overflow-y:auto}.sidebar-top{padding:4px 8px 16px}.inst-chip{border-radius:var(--radius);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffff0d;border:1px solid #ffffff14;flex-direction:column;gap:3px;margin:0 2px 18px;padding:12px 14px;display:flex}.inst-name{color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px;font-weight:600;overflow:hidden}.inst-code{color:#94a3b8;letter-spacing:.06em;font-family:ui-monospace,SFMono-Regular,monospace;font-size:11.5px}.nav-link{color:#94a3b8;transition:all var(--transition-fast);border-radius:9px;align-items:center;gap:11px;margin-bottom:3px;padding:10px 14px;font-size:13.5px;font-weight:500;display:flex}.nav-link:hover{background:var(--sidebar-hover);color:#fff;text-decoration:none}.nav-link.active{background:var(--brand-gradient);color:#fff;font-weight:600;box-shadow:0 4px 14px #4f46e566}.nav-icon{flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;display:inline-flex}.nav-icon svg{stroke:currentColor;stroke-width:2px;width:18px;height:18px;transition:transform var(--transition-fast)}.nav-link:hover .nav-icon svg{transform:scale(1.1)}.nav-link.active .nav-icon svg{stroke-width:2.25px}.main{background:var(--bg);flex-direction:column;flex:1;min-width:0;display:flex}.topbar{-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);z-index:20;background:#ffffffd9;align-items:center;gap:12px;height:64px;padding:0 32px;display:flex;position:sticky;top:0}.topbar-spacer{flex:1}.menu-btn{display:none}.profile-menu-wrap{align-items:center;display:inline-flex;position:relative}.avatar-btn{cursor:pointer;transition:transform var(--transition-fast), box-shadow var(--transition-fast);background:0 0;border:none;border-radius:50%;outline:none;justify-content:center;align-items:center;padding:0;display:flex}.avatar-btn:hover{transform:scale(1.06)}.avatar-btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.avatar{background:var(--brand-gradient);color:#fff;-webkit-user-select:none;user-select:none;border-radius:50%;flex-shrink:0;place-items:center;width:36px;height:36px;font-size:14px;font-weight:700;display:grid;box-shadow:0 2px 8px #4f46e54d}.profile-popover{border:1px solid var(--border);width:140px;box-shadow:var(--shadow-lg);z-index:1000;background:#fff;border-radius:10px;flex-direction:column;padding:5px;animation:.15s cubic-bezier(.16,1,.3,1) popoverFadeIn;display:flex;position:absolute;top:calc(100% + 10px);right:0}@keyframes popoverFadeIn{0%{opacity:0;transform:translateY(-4px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.popover-item{width:100%;color:var(--text);cursor:pointer;text-align:left;transition:all var(--transition-fast);background:0 0;border:none;border-radius:6px;align-items:center;gap:9px;padding:8px 12px;font-family:inherit;font-size:13.5px;font-weight:500;display:flex}.popover-item svg{color:var(--text-muted);transition:color var(--transition-fast);flex-shrink:0}.popover-item:hover{color:var(--brand);background:#f1f5f9}.popover-item:hover svg{color:var(--brand)}.popover-item.danger,.popover-item.danger svg{color:var(--danger,#ef4444)}.popover-item.danger:hover{color:#dc2626;background:#fef2f2}.popover-item.danger:hover svg{color:#dc2626}.popover-divider{background:var(--border-light,#f1f5f9);height:1px;margin:3px 0}.content{width:100%;max-width:100%;padding:28px 32px}.scrim{display:none}.logo{color:var(--text);letter-spacing:-.02em;align-items:center;gap:9px;font-size:19px;font-weight:600;display:inline-flex}.logo b{color:var(--brand);font-weight:800}.logo-light{color:#fff}.logo-light b{color:#818cf8}.logo-mark{background:var(--brand-gradient);color:#fff;border-radius:9px;place-items:center;width:32px;height:32px;font-size:17px;font-weight:800;display:grid;box-shadow:0 2px 8px #4f46e559}.logo-img{object-fit:contain;width:32px;height:32px;transition:transform var(--transition-fast);border-radius:8px;flex-shrink:0;display:block}.logo:hover .logo-img{transform:scale(1.05)}.logo-light .logo-img{background:#fff;border:1px solid #fff3;padding:2px;box-shadow:0 2px 8px #00000059}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:22px;display:flex}.page-head p{color:var(--text-muted);margin:0}.page-actions{flex-wrap:wrap;gap:10px;display:flex}.filters{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:18px;display:flex}.filters input[type=search]{max-width:320px}.filters select{width:auto;min-width:200px}.tabs{border:1px solid var(--border);background:#f1f5f9;border-radius:11px;align-items:center;margin-bottom:16px;padding:3px;display:inline-flex}.tabs.inline{margin-bottom:0}.tabs button{font:inherit;color:var(--text-muted);cursor:pointer;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none;background:0 0;border:0;border-radius:8px;align-items:center;gap:7px;padding:7px 15px;font-size:13px;font-weight:600;display:inline-flex}.tabs button:hover:not(.on){color:#1e293b}.tabs button.on{color:var(--brand);background:#fff;box-shadow:0 1px 3px #0f172a14}.tab-badge{color:#64748b;transition:all var(--transition-fast);background:#e2e8f0;border-radius:999px;padding:1px 7px;font-size:11px;font-weight:700}.tabs button.on .tab-badge{background:var(--brand-soft);color:var(--brand)}.stats{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:18px;margin-bottom:24px;display:grid}.stat{border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:transform var(--transition-fast), box-shadow var(--transition-fast);background:#fff;flex-direction:column;gap:4px;padding:20px 22px;display:flex}.stat:hover{box-shadow:var(--shadow);transform:translateY(-2px)}.stat span{color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:12px;font-weight:600}.stat b{color:#0f172a;letter-spacing:-.02em;font-size:28px;font-weight:800}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;display:grid}.app-grid-card{display:block}.app-grid-card h3{margin:0 0 16px}.app-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:20px 8px;display:grid}.app-tile{color:var(--text);-webkit-tap-highlight-color:transparent;transition:transform var(--transition-fast);cursor:pointer;flex-direction:column;align-items:center;gap:8px;text-decoration:none;display:flex}.app-tile:hover{text-decoration:none}.app-tile:hover .app-icon{background:#e0e7ff;border-color:#a5b4fc;transform:translateY(-3px)scale(1.06);box-shadow:0 8px 18px #4f46e538}.app-tile:hover .app-label{color:var(--brand);font-weight:600}.app-icon{background:var(--brand-soft);width:56px;height:56px;color:var(--brand);transition:transform var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);border:1px solid #e0e7ff;border-radius:50%;place-items:center;display:grid;position:relative}.app-tile:active .app-icon{background:#e0e7ff;transform:scale(.94)}.app-tile:focus-visible .app-icon{outline:2px solid var(--brand);outline-offset:2px}.app-label{text-align:center;color:#334155;transition:color var(--transition-fast);font-size:12px;font-weight:500;line-height:1.25}.app-badge{white-space:nowrap;color:var(--brand);background:#fff;border:1.5px solid #c7d2fe;border-radius:999px;padding:1px 7px;font-size:10px;font-weight:700;line-height:16px;position:absolute;top:-9px;left:50%;transform:translate(-50%);box-shadow:0 1px 3px #00000014}.app-badge.hot{color:#fff;background:#ea580c;border-color:#ea580c}.quick-add-footer{border-top:1px solid var(--border-light);flex-wrap:wrap;align-items:center;gap:6px;margin-top:18px;padding-top:14px;display:flex}.quick{flex-wrap:wrap;gap:10px;display:flex}.simple-list{margin:0 0 10px;padding:0;list-style:none}.simple-list li{border-bottom:1px solid var(--border-light);justify-content:space-between;align-items:center;gap:12px;padding:12px 0;display:flex}.simple-list li:last-child{border-bottom:0}.period-list{margin:0;padding:0;list-style:none}.period-list li{border-bottom:1px solid var(--border-light);align-items:baseline;gap:14px;padding:12px 0;display:flex}.period-list li:last-child{border-bottom:0}.period-time{font-variant-numeric:tabular-nums;color:var(--brand);min-width:96px;font-size:13.5px;font-weight:700}.dl{grid-template-columns:120px 1fr;gap:10px;margin:0;display:grid}.dl dt{color:var(--text-muted)}.dl dd{margin:0}.class-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:18px;display:grid}.tasks-page{flex-direction:column;gap:16px;width:100%;display:flex}.tasks-header-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.task-list{flex-direction:column;gap:12px;width:100%;display:flex}.task,.task-card{border:1.5px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);transition:transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);background:#fff;justify-content:space-between;align-items:center;gap:20px;padding:16px 20px;display:flex;position:relative;overflow:hidden}.task:hover,.task-card:hover{border-color:#cbd5e1;transform:translateY(-2px);box-shadow:0 8px 20px -4px #0f172a14}.task-card.status-pending{border-left:4.5px solid #f59e0b}.task-card.status-in_progress{border-left:4.5px solid #4f46e5}.task-card.status-done{background:#fbfdfc;border-left:4.5px solid #10b981}.task-main{flex:1;align-items:flex-start;gap:14px;min-width:0;display:flex}.task-check-btn{color:#0000;cursor:pointer;width:24px;height:24px;transition:all var(--transition-fast);background:#fff;border:2px solid #cbd5e1;border-radius:50%;flex-shrink:0;place-items:center;margin-top:1px;padding:0;display:grid}.task-check-btn:hover{color:#10b981;background:#ecfdf5;border-color:#10b981;transform:scale(1.08)}.task-check-btn.is-done{color:#fff;background:#10b981;border-color:#10b981}.task-check-btn.is-done:hover{background:#059669;border-color:#059669}.task-content{flex-direction:column;flex:1;gap:6px;min-width:0;display:flex}.task-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.task-title{color:#0f172a;letter-spacing:-.01em;transition:color var(--transition-fast);margin:0;font-size:15.5px;font-weight:700;line-height:1.35}.task-title.is-done{color:#94a3b8;text-decoration:line-through}.task-badge-overdue{color:#be123c;letter-spacing:.03em;text-transform:uppercase;background:#ffe4e6;border:1px solid #fecdd3;border-radius:999px;padding:1.5px 8px;font-size:11px;font-weight:800}.task-desc{color:#475569;margin:0;font-size:13.5px;line-height:1.45}.task-meta-row{flex-wrap:wrap;align-items:center;gap:8px;margin-top:2px;display:flex}.task-meta-chip{color:#475569;background:#f8fafc;border:1px solid #e2e8f0;border-radius:7px;align-items:center;gap:5px;padding:3px 9px;font-size:12px;font-weight:500;display:inline-flex}.task-chip-icon{font-size:12px;line-height:1}.task-chip-assignee b{color:#0f172a}.task-chip-due.is-overdue{color:#be123c;background:#fff1f2;border-color:#fecdd3;font-weight:700}.task-actions{flex-shrink:0;align-items:center;gap:10px;display:flex}.task-status-wrap{position:relative}.status-select{appearance:none;cursor:pointer;transition:all var(--transition-fast);border-radius:999px;width:auto;min-width:135px;padding:7px 32px 7px 14px;font-size:12.5px;font-weight:700;line-height:1.3;box-shadow:0 1px 2px #0f172a0d}.status-select:focus-visible{outline:none;box-shadow:0 0 0 3px #4f46e533}select.status-select.status-pending,select.status-select.status-pending:hover:not(:focus){color:#92400e;background-color:#fef3c7;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.5' stroke='%23b45309'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 8.25l-7.5 7.5-7.5-7.5'%3E%3C/path%3E%3C/svg%3E");background-position:right 11px center;background-repeat:no-repeat;background-size:13px 13px;border:1.5px solid #fde68a}select.status-select.status-in_progress,select.status-select.status-in_progress:hover:not(:focus){color:#3730a3;background-color:#e0e7ff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.5' stroke='%234338ca'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 8.25l-7.5 7.5-7.5-7.5'%3E%3C/path%3E%3C/svg%3E");background-position:right 11px center;background-repeat:no-repeat;background-size:13px 13px;border:1.5px solid #c7d2fe}select.status-select.status-done,select.status-select.status-done:hover:not(:focus){color:#166534;background-color:#dcfce7;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='2.5' stroke='%2315803d'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19.5 8.25l-7.5 7.5-7.5-7.5'%3E%3C/path%3E%3C/svg%3E");background-position:right 11px center;background-repeat:no-repeat;background-size:13px 13px;border:1.5px solid #bbf7d0}.btn-task-delete{color:#e11d48;cursor:pointer;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none;background:#fff1f2;border:1.5px solid #fecdd3;border-radius:999px;align-items:center;gap:5px;padding:6.5px 12px;font-size:12.5px;font-weight:600;display:inline-flex;box-shadow:0 1px 2px #e11d480d}.btn-task-delete:hover{color:#fff;background:#e11d48;border-color:#e11d48;transform:translateY(-1px);box-shadow:0 2px 8px #e11d4840}.btn-task-delete:active{transform:translateY(0)}.btn-task-delete svg{flex-shrink:0}@media (width<=640px){.task,.task-card{flex-direction:column;align-items:stretch;gap:14px;padding:14px 16px}.task-actions{border-top:1px solid var(--border-light);justify-content:space-between;width:100%;padding-top:12px}.task-status-wrap{flex:1}.status-select{width:100%}}.seg{border:1.5px solid var(--border);border-radius:var(--radius-sm);background:#fff;display:inline-flex;overflow:hidden}.seg button{font:inherit;cursor:pointer;color:var(--text-muted);border:0;border-right:1px solid var(--border);transition:all var(--transition-fast);background:#fff;padding:7px 14px;font-size:12.5px;font-weight:600}.seg button:last-child{border-right:0}.seg button:hover:not(.on){background:#f8fafc}.seg .seg-P.on{background:var(--success);color:#fff}.seg .seg-A.on{background:var(--danger);color:#fff}.seg .seg-L.on{color:#fff;background:#f59e0b}.att-step{margin-bottom:14px}.att-step-title{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:18px 0 12px;font-size:13px;font-weight:700}.att-select-bar{flex-wrap:wrap;align-items:flex-end;gap:14px;display:flex}.att-select-bar .field{width:auto;min-width:180px}.att-select-bar .tabs{margin-bottom:0}.lecture-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;display:grid}.lecture-card{border:1px solid var(--border);border-radius:var(--radius);font:inherit;color:var(--text);text-align:left;cursor:pointer;box-shadow:var(--shadow-xs);transition:border-color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast);background:#fff;flex-direction:column;gap:6px;padding:14px 16px;display:flex}.lecture-card:hover:not(:disabled){box-shadow:var(--shadow);border-color:#a5b4fc;transform:translateY(-1px)}.lecture-card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.lecture-card:disabled{opacity:.6;cursor:progress}.lecture-card.is-marked{background:#fbfefc}.lecture-card-time{color:var(--brand);justify-content:space-between;gap:8px;font-size:12px;font-weight:700;display:flex}.lecture-card-subject{white-space:nowrap;text-overflow:ellipsis;font-size:15.5px;font-weight:700;overflow:hidden}.lecture-card-meta{color:var(--text-muted);font-size:12.5px}.lecture-card-status{border-radius:999px;width:fit-content;margin-top:2px;padding:2px 9px;font-size:11.5px;font-weight:600}.lecture-card-status.marked{background:var(--success-soft);color:#166534}.lecture-card-status.pending{background:var(--warn-soft);color:#92400e}.lecture-card-go{border-top:1px solid var(--border-light);color:var(--brand);margin-top:6px;padding-top:10px;font-size:12.5px;font-weight:600}.att-session{background:linear-gradient(135deg, #f8fafc 0%, var(--brand-soft) 100%);border-radius:var(--radius);border:1px solid #dfe3fb;flex-wrap:wrap;align-items:center;gap:4px 14px;margin-bottom:14px;padding:12px 16px;display:flex}.att-session-main{align-items:center;gap:8px;font-size:15px;display:flex}.att-session-main .badge{color:var(--brand-dark);background:#e0e7ff}.att-session-meta{color:#475569;flex:1;font-size:13px}.att-chips{flex-wrap:wrap;gap:6px;display:flex}.att-chip{border:1px solid #0000;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:600}.att-chip.st-P{background:var(--success-soft);color:#166534;border-color:var(--success-border)}.att-chip.st-A{background:var(--danger-soft);color:#9f1239;border-color:var(--danger-border)}.att-chip.st-L{background:var(--warn-soft);color:#92400e;border-color:var(--warn-border)}.att-search{max-width:240px;min-height:34px;padding:6px 12px}.att-inline-alert{margin:12px 18px 0}.att-list{margin:0;padding:0;list-style:none}.att-row{border-top:1px solid var(--border-light);transition:background var(--transition-fast), border-color var(--transition-fast);border-left:3px solid #0000;grid-template-columns:56px 1fr auto;align-items:center;gap:12px;padding:10px 18px;display:grid}.att-row:first-child{border-top:0}.att-row.st-A{border-left-color:var(--danger);background:#fffafb}.att-row.st-L{background:#fffdf5;border-left-color:#f59e0b}.att-roll{color:var(--text-muted);font-variant-numeric:tabular-nums;font-weight:600}.att-name{flex-direction:column;min-width:0;display:flex}.att-name b{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.att-foot{z-index:5;-webkit-backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:var(--radius);background:#ffffffeb;align-items:center;gap:12px;margin-top:14px;padding:12px 16px;display:flex;position:sticky;bottom:0;box-shadow:0 -4px 16px -8px #0f172a1f}.att-foot-info{text-align:center;flex:1}.att-summary{grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:14px;display:grid}.att-stat{border-top:3px solid var(--border);flex-direction:column;gap:2px;display:flex}.att-stat span{color:var(--text-muted);font-size:12.5px;font-weight:600}.att-stat b{font-size:26px;line-height:1.2}.att-stat small{color:var(--text-muted)}.att-stat.st-P{border-top-color:var(--success)}.att-stat.st-P b{color:var(--success)}.att-stat.st-A{border-top-color:var(--danger)}.att-stat.st-A b{color:var(--danger)}.att-stat.st-L{border-top-color:#f59e0b}.att-stat.st-L b{color:var(--warn)}.att-review-group+.att-review-group{margin-top:16px}.att-name-chips{flex-wrap:wrap;gap:6px;display:flex}.att-name-chip{border-radius:8px;padding:5px 10px;font-size:12.5px;font-weight:500}.att-name-chip.st-A{background:var(--danger-soft);color:#9f1239}.att-name-chip.st-L{background:var(--warn-soft);color:#92400e}.att-all-present{color:var(--success);margin:0;font-weight:600}.att-done{background:var(--success-soft);border:1px solid var(--success-border);border-radius:var(--radius);align-items:center;gap:14px;margin-bottom:14px;padding:14px 18px;display:flex}.att-done>div>b{color:#065f46;margin-bottom:6px;display:block}.att-done-icon{background:var(--success);color:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:36px;height:36px;font-weight:700;display:grid}.share-options{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin-bottom:14px;display:grid}.share-opt{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast);align-items:flex-start;gap:10px;padding:14px;display:flex}.share-opt:hover{border-color:#c7d2fe}.share-opt.on{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand);background:#fafaff}.share-opt input{margin-top:3px}.share-opt b{margin-bottom:2px;display:block}.share-opt span{color:var(--text-muted);font-size:12.5px}.att-share-note{margin:12px 0 0}.att-report-class{width:auto;min-width:180px}@media (width<=720px){.att-row{grid-template-columns:40px 1fr}.att-row .seg{grid-column:1/-1;display:flex}.att-row .seg button{flex:1}.att-summary{gap:8px}.att-foot-info{display:none}.att-foot{justify-content:space-between}}@media (width<=768px){.hide-mobile,.desktop-only{display:none!important}.page-head{flex-direction:column;align-items:stretch;gap:12px}.page-actions{flex-direction:row;gap:8px;width:100%;display:flex}.page-actions .btn,.page-actions .btn-primary,.page-actions .btn-secondary{white-space:nowrap;flex:1 1 0;justify-content:center;min-width:0;padding:9px 12px;font-size:13px;font-weight:600;width:auto!important}}@media (width>=769px){.mobile-only{display:none!important}}.test-cards{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:18px;display:grid}.test-card{transition:all var(--transition-fast);flex-direction:column;display:flex}.test-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.test-card p{margin:6px 0}.test-card-foot{margin-top:auto;padding-top:14px}.score{color:var(--brand);white-space:nowrap;font-size:26px;font-weight:800}.score small{color:var(--text-muted);font-size:14px;font-weight:500}.q-card{flex-direction:column;gap:12px;margin-bottom:14px;display:flex}.q-head{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.q-head select{width:auto}.q-head label{align-items:center;gap:6px;display:inline-flex}.opts{flex-direction:column;align-items:flex-start;gap:10px;display:flex}.opt-row{align-items:center;gap:10px;width:100%;display:flex}.add-q{flex-wrap:wrap;gap:10px;margin-top:6px;display:flex}.sheet-q{border-bottom:1px solid var(--border);padding:12px 0}.sheet-q p{margin:6px 0}.sheet-a{border-radius:var(--radius-sm);padding:8px 12px;font-size:13.5px}.sheet-a.ok{background:var(--success-soft);color:#065f46;border:1px solid var(--success-border)}.sheet-a.bad{background:var(--danger-soft);color:#9f1239;border:1px solid var(--danger-border)}.exam{background:#f8fafc;flex-direction:column;min-height:100%;display:flex}.exam-bar{border-bottom:1.5px solid var(--border);z-index:10;box-shadow:var(--shadow-xs);background:#fff;align-items:center;gap:20px;padding:14px 28px;display:flex;position:sticky;top:0}.exam-title{flex-direction:column;flex:1;min-width:0;display:flex}.exam-title small{color:var(--text-muted)}.timer{font-variant-numeric:tabular-nums;background:var(--brand-soft);color:var(--brand-dark);border:1px solid #c7d2fe;border-radius:10px;padding:6px 16px;font-size:20px;font-weight:700}.timer.urgent{background:var(--danger-soft);color:var(--danger);border-color:var(--danger-border);animation:1s infinite pulse}@keyframes pulse{50%{opacity:.6}}.exam-body{grid-template-columns:280px 1fr;align-items:start;gap:24px;width:100%;max-width:1140px;margin:0 auto;padding:24px 28px;display:grid}.exam-nav{position:sticky;top:86px}.q-dots{grid-template-columns:repeat(5,1fr);gap:8px;margin:12px 0 16px;display:grid}.q-dots button{aspect-ratio:1;border:1.5px solid var(--border);cursor:pointer;font:inherit;transition:all var(--transition-fast);background:#fff;border-radius:8px;font-size:13px;font-weight:600}.q-dots button:hover{border-color:var(--brand-light)}.q-dots button.ans{background:var(--success-soft);border-color:var(--success-border);color:var(--success)}.q-dots button.cur{border-color:var(--brand);background:var(--brand-soft);box-shadow:0 0 0 2px var(--brand)}.exam-q{padding:28px}.q-text{white-space:pre-wrap;margin:8px 0 20px;font-size:18px;font-weight:600;line-height:1.5}.choices{flex-direction:column;align-items:flex-start;gap:12px;width:100%;display:flex}.choice{border:1.5px solid var(--border);border-radius:var(--radius);cursor:pointer;width:100%;transition:all var(--transition-fast);background:#fff;align-items:center;gap:14px;padding:14px 16px;display:flex}.choice:hover{background:#f8fafc;border-color:#cbd5e1}.choice.on{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand);background:#f4f6ff}.choice input{display:none}.choice-key{border:1.5px solid var(--border);width:30px;height:30px;transition:all var(--transition-fast);background:#fff;border-radius:50%;flex-shrink:0;place-items:center;font-size:13px;font-weight:700;display:grid}.choice.on .choice-key{background:var(--brand);color:#fff;border-color:var(--brand)}.exam-foot{justify-content:space-between;margin-top:28px;display:flex}.exam-alert{width:calc(100% - 56px);max-width:1140px;margin:16px auto 0}.q-top{justify-content:space-between;align-items:center;gap:12px;display:flex}.btn-flag{background:var(--warning-soft,#fffbeb);color:#b45309;border-color:#f59e0b}.q-dots button.flag{border-color:#f59e0b;box-shadow:inset 0 -3px #f59e0b}.q-legend{gap:14px;margin:-6px 0 14px;display:flex}.q-legend .dot{vertical-align:-1px;border-radius:3px;width:10px;height:10px;margin-right:4px;display:inline-block}.q-legend .dot.ans{background:var(--success-soft);border:1px solid var(--success-border)}.q-legend .dot.flag{background:#fffbeb;border:1px solid #f59e0b}.save-state{min-height:1.4em;color:var(--text-muted);margin:0}.save-state.saved{color:var(--success)}.save-state.error{color:var(--danger);font-weight:600}.block-gap{margin-bottom:20px}.card-head-pad{padding:18px 22px 0}.exam-options{flex-direction:column;gap:8px;display:flex}.q-stats td .bar{background:var(--border);border-radius:3px;min-width:80px;height:6px;overflow:hidden}.q-stats td .bar>i{background:var(--brand);height:100%;display:block}.sheet-a.pending{color:#92400e;background:#fffbeb;border:1px solid #fcd34d}.sheet-grade{align-items:center;gap:8px;display:flex}.big-check{background:var(--success-soft);width:72px;height:72px;color:var(--success);border-radius:50%;place-items:center;margin:0 auto 16px;font-size:34px;display:grid}.auth-page{background:radial-gradient(at 15% 15%,#4f46e51f 0%,#0000 45%),radial-gradient(at 85% 85%,#6366f114 0%,#0000 45%),radial-gradient(#f8fafccc 0%,#f1f5f9 100%);justify-content:center;align-items:center;min-height:100vh;padding:48px 20px;display:flex;position:relative;overflow:hidden}.auth-page:before{content:"";pointer-events:none;background-image:radial-gradient(#64748b1a 1px,#0000 1px);background-size:28px 28px;position:absolute;inset:0}.auth-card{-webkit-backdrop-filter:blur(20px);background:#fffffffa;border:1.5px solid #e2e8f0e6;border-radius:22px;width:100%;max-width:540px;padding:40px;animation:.35s cubic-bezier(.16,1,.3,1) authCardEnter;position:relative;box-shadow:0 25px 50px -12px #0f172a1a,0 4px 12px #0f172a08}@keyframes authCardEnter{0%{opacity:0;transform:translateY(20px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.auth-card h1{letter-spacing:-.025em;color:#0f172a;margin-top:18px;font-size:25px;font-weight:700}.auth-card p.small{color:#64748b;margin-bottom:22px;font-size:13.5px}.steps{border:1.5px solid var(--border);background:#f8fafc;border-radius:14px;align-items:center;gap:12px;margin:0 0 24px;padding:10px 14px;display:flex}.step-item{opacity:.55;transition:all var(--transition-smooth);flex:1;align-items:center;gap:10px;display:flex}.step-item.active{opacity:1}.step-item.completed{opacity:.9}.step-badge{color:#64748b;width:28px;height:28px;transition:all var(--transition-smooth);background:#e2e8f0;border-radius:50%;flex-shrink:0;place-items:center;font-size:12px;font-weight:700;display:grid}.step-item.active .step-badge{background:var(--brand-gradient);color:#fff;box-shadow:0 2px 10px #4f46e566}.step-item.completed .step-badge{background:var(--success);color:#fff}.step-content{flex-direction:column;line-height:1.25;display:flex}.step-num{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:10px;font-weight:700}.step-title{color:var(--text);white-space:nowrap;font-size:13px;font-weight:600}.step-divider{background:#cbd5e1;flex-shrink:0;width:24px;height:1.5px}.steps span{border-radius:var(--radius-sm);color:var(--text-muted);text-align:center;border:1px solid var(--border);transition:all var(--transition-fast);background:#f1f5f9;flex:1;padding:8px 12px;font-weight:600}.steps .on{background:var(--brand-soft);color:var(--brand);border-color:#c7d2fe}.steps .done{background:var(--success-soft);color:var(--success);border-color:var(--success-border)}.landing{background:radial-gradient(at 20% 0,#eef2ff 0%,#0000 60%),radial-gradient(at 80% 20%,#f5f3ff 0%,#0000 50%),#f8fafc;width:100%;min-height:100%;overflow-x:hidden}.landing-nav{z-index:40;-webkit-backdrop-filter:blur(14px);max-width:1280px;transition:all var(--transition-fast);background:#ffffffe0;border-bottom:1px solid #e2e8f0cc;justify-content:space-between;align-items:center;margin:0 auto;padding:16px 36px;display:flex;position:sticky;top:0}.landing-nav-links{align-items:center;gap:24px;display:flex}.nav-text-link{color:#475569;transition:color var(--transition-fast);font-size:13.5px;font-weight:600;text-decoration:none}.nav-text-link:hover{color:var(--brand);text-decoration:none}.landing-nav-actions{align-items:center;gap:10px;display:flex}.reg-text-short{display:none}.reg-text-full{display:inline}.hero{grid-template-columns:1.15fr 1fr;align-items:start;gap:48px;max-width:1280px;margin:0 auto;padding:36px 36px 64px;display:grid}.hero-copy{flex-direction:column;display:flex}.hero-badge{color:var(--brand);background:#fff;border:1px solid #e0e7ff;border-radius:999px;align-items:center;gap:8px;width:fit-content;margin-bottom:18px;padding:6px 14px;font-size:12.5px;font-weight:700;display:inline-flex;box-shadow:0 1px 3px #4f46e514}.pulse-dot{background:#10b981;border-radius:50%;width:8px;height:8px;animation:2s infinite pulseGlow;display:inline-block;box-shadow:0 0 0 3px #10b98133}@keyframes pulseGlow{0%,to{box-shadow:0 0 0 3px #10b98133}50%{box-shadow:0 0 0 6px #10b98166}}.hero h1{letter-spacing:-.03em;color:#0f172a;margin:0 0 16px;font-size:42px;font-weight:800;line-height:1.16}.hero-highlight{background:linear-gradient(135deg,#4f46e5 0%,#7c3aed 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;display:inline}.lead{color:#475569;margin:0 0 20px;font-size:16px;line-height:1.6}.hero-points{flex-direction:column;gap:10px;margin:0 0 24px;padding:0;list-style:none;display:flex}.hero-points li{color:#334155;align-items:baseline;font-size:13.5px;line-height:1.45;display:flex}.hero-points li strong{color:#0f172a;margin-right:4px}.hero-points li:before{content:"✓";color:#059669;background:#ecfdf5;border:1px solid #a7f3d0;border-radius:50%;flex-shrink:0;place-items:center;width:20px;height:20px;margin-right:10px;font-size:11px;font-weight:800;display:inline-grid;transform:translateY(2px)}.hero-roles-panel{background:#fff;border:1.5px solid #e2e8f0;border-radius:16px;margin-bottom:24px;padding:18px 20px;scroll-margin-top:70px;box-shadow:0 4px 12px #0f172a0a}.hero-roles-header{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.panel-title{text-transform:uppercase;letter-spacing:.05em;color:#1e293b;font-size:12.5px;font-weight:700}.panel-hint{color:#64748b;font-size:11.5px}.role-tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:8px;margin-bottom:14px;padding-bottom:4px;display:flex;overflow-x:auto}.role-tabs::-webkit-scrollbar{display:none}.role-tab-btn{color:#475569;cursor:pointer;white-space:nowrap;transition:all var(--transition-fast);background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;align-items:center;gap:6px;padding:7px 12px;font-size:12.5px;font-weight:600;display:inline-flex}.role-tab-btn:hover{color:#0f172a;background:#f1f5f9}.role-tab-btn.active{background:var(--brand-gradient);color:#fff;border-color:#0000;box-shadow:0 2px 8px #4f46e54d}.role-tab-icon{font-size:14px}.role-preview-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:16px}.role-preview-top{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px;display:flex}.role-preview-title{align-items:center;gap:12px;display:flex}.role-icon-large{background:#fff;border:1px solid #e2e8f0;border-radius:10px;flex-shrink:0;place-items:center;width:44px;height:44px;font-size:26px;display:grid}.role-preview-title h4{color:#0f172a;margin:0;font-size:15px;font-weight:700}.role-preview-title p{color:#64748b;margin:2px 0 0;font-size:12px}.role-preview-tag{text-transform:uppercase;letter-spacing:.04em;color:#4f46e5;white-space:nowrap;background:#eef2ff;border:1px solid #c7d2fe;border-radius:6px;padding:3px 8px;font-size:11px;font-weight:700}.role-perks-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px;display:grid}.role-perk-item{color:#334155;align-items:baseline;gap:6px;font-size:12px;line-height:1.4;display:flex}.perk-bullet{color:var(--brand);font-size:11px;font-weight:700}.hero-stats-grid{grid-template-columns:repeat(4,1fr);gap:12px;display:grid}.stat-card{text-align:left;background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:12px 14px;box-shadow:0 1px 3px #0f172a08}.stat-val{color:#0f172a;letter-spacing:-.02em;font-size:18px;font-weight:800}.stat-label{color:#1e293b;margin-top:2px;font-size:12px;font-weight:600}.stat-sub{color:#64748b;margin-top:2px;font-size:10.5px;line-height:1.3}.hero-card{background:#fff;border:1.5px solid #e2e8f0e6;border-radius:20px;padding:32px 36px;scroll-margin-top:70px;box-shadow:0 20px 45px -12px #0f172a1a,0 2px 6px #0f172a0a}.hero-card-header{margin-bottom:20px}.hero-card-header h2{letter-spacing:-.02em;color:#0f172a;margin:0 0 6px;font-size:22px;font-weight:800}.hero-card-header p{margin:0}.features-section{max-width:1280px;margin:0 auto;padding:20px 36px 72px;scroll-margin-top:70px}.section-head{text-align:center;max-width:640px;margin:0 auto 40px}.section-head h2{letter-spacing:-.025em;color:#0f172a;margin:14px 0 8px;font-size:30px;font-weight:800}.section-head p{margin:0;font-size:15px;line-height:1.55}.features{grid-template-columns:repeat(3,1fr);gap:22px;display:grid}.feature{transition:transform var(--transition-smooth), box-shadow var(--transition-smooth), border-color var(--transition-smooth);background:#fff;border:1.5px solid #e2e8f0;border-radius:16px;flex-direction:column;padding:26px;display:flex}.feature:hover{border-color:#cbd5e1;transform:translateY(-4px);box-shadow:0 16px 32px -8px #0f172a14}.feature-top{justify-content:space-between;align-items:center;margin-bottom:18px;display:flex}.feature-icon{background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;place-items:center;width:44px;height:44px;display:grid}.feature-category{text-transform:uppercase;letter-spacing:.05em;color:#64748b;background:#f1f5f9;border-radius:6px;padding:3px 9px;font-size:11px;font-weight:700}.feature h3{color:#0f172a;margin:0 0 8px;font-size:16px;font-weight:700}.feature p{color:#64748b;margin:0;font-size:13.5px;line-height:1.55}.landing-foot{border-top:1px solid var(--border);background:#fff;padding:32px}.foot-content{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;max-width:1280px;margin:0 auto;display:flex}@media (width<=960px){.hero{grid-template-columns:1fr;gap:32px;padding:24px 20px 40px}.hero h1{font-size:34px}.features-section{padding:20px 20px 48px}.features{grid-template-columns:1fr 1fr;gap:16px}.landing-nav{padding:14px 24px}.grid-2{grid-template-columns:1fr}.exam-body{grid-template-columns:1fr;padding:16px 20px}.exam-nav{position:static}}@media (width<=820px){.sidebar{z-index:40;transition:transform var(--transition-smooth);box-shadow:var(--shadow-lg);position:fixed;top:0;left:0;transform:translate(-100%)}.sidebar.open{transform:none}.scrim{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:30;background:#0f172a80;display:block;position:fixed;inset:0}.menu-btn{display:inline-block}.content{padding:18px 16px}.topbar{padding:0 16px}.user-meta{display:none}}@media (width<=768px){.landing-nav{padding:12px 20px}.landing-nav-links{display:none!important}.landing-nav-actions{gap:8px}.hero-stats-grid{gap:10px;grid-template-columns:repeat(2,1fr)!important}.role-perks-grid{gap:8px;grid-template-columns:1fr!important}.hero-roles-panel{padding:16px}.hero-card{padding:24px 20px}}@media (width<=600px){.app-grid-card{margin-bottom:18px;display:block}.hide-mobile{display:none!important}.row-2,.row-3,.perm-grid,.features{grid-template-columns:1fr}.task{flex-direction:column}.filters select,.filters input[type=search]{width:100%;max-width:none}.exam-bar{gap:10px;padding:10px 14px}.exam-bar .logo{display:none}.auth-card{padding:22px}.landing-nav{padding:10px 16px}.landing-nav .logo{gap:7px;font-size:17px}.landing-nav .logo-img{width:28px;height:28px}.landing-nav-actions{gap:6px}.landing-nav .btn-ghost{min-height:34px;padding:0 10px;font-size:12.5px}.landing-nav .btn-primary{border-radius:8px;min-height:34px;padding:0 12px;font-size:12.5px;display:inline-flex!important}.reg-text-full{display:none!important}.reg-text-short{display:inline!important}.hero{gap:22px;padding:18px 16px 32px}.hero-badge{max-width:100%;margin-bottom:12px;padding:4px 11px;font-size:11.5px}.hero h1{letter-spacing:-.02em;margin-bottom:12px;line-height:1.25;font-size:26px!important}.hero h1 br{display:none}.lead{margin-bottom:16px;font-size:14px;line-height:1.5}.hero-points{gap:8px;margin-bottom:18px}.hero-points li{font-size:12.5px;line-height:1.4}.hero-points li:before{width:18px;height:18px;margin-right:8px;font-size:10px}.hero-roles-panel{border-radius:14px;margin-bottom:18px;padding:14px;scroll-margin-top:64px}.hero-roles-header{flex-direction:column;align-items:flex-start;gap:3px;margin-bottom:10px}.panel-title{font-size:11.5px}.panel-hint{font-size:11px}.role-tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:6px;margin-bottom:10px;padding-bottom:6px}.role-tabs::-webkit-scrollbar{display:none}.role-tab-btn{border-radius:8px;gap:5px;padding:5px 9px;font-size:11.5px}.role-preview-card{border-radius:10px;padding:12px}.role-preview-top{flex-direction:column;align-items:flex-start;gap:8px;margin-bottom:10px}.role-preview-title{gap:10px}.role-icon-large{border-radius:8px;width:38px;height:38px;font-size:20px}.role-preview-title h4{font-size:14px}.role-preview-title p{font-size:11.5px;line-height:1.35}.role-preview-tag{align-self:flex-start;padding:2px 7px;font-size:10px}.role-perks-grid{gap:6px;grid-template-columns:1fr!important}.role-perk-item{font-size:12px;line-height:1.35}.hero-stats-grid{gap:8px;grid-template-columns:repeat(2,1fr)!important}.stat-card{border-radius:10px;padding:10px 12px}.stat-val{font-size:16px}.stat-label{font-size:11.5px}.stat-sub{font-size:10px}.hero-card{scroll-margin-top:64px;border-radius:16px!important;padding:18px 14px!important}.hero-card-header{margin-bottom:14px}.hero-card-header h2{margin-bottom:4px;font-size:19px!important}.hero-card-header p{font-size:12.5px!important}.steps{border-radius:10px!important;gap:6px!important;margin-bottom:16px!important;padding:8px 10px!important}.step-item{gap:6px!important}.step-badge{width:22px!important;height:22px!important;font-size:11px!important}.step-num{font-size:9px!important}.step-title{font-size:11.5px!important}.step-divider{width:10px!important}.features-section{scroll-margin-top:64px;padding:16px 14px 40px!important}.section-head{margin-bottom:22px!important}.section-head h2{margin:10px 0 6px!important;font-size:22px!important}.section-head p{line-height:1.5;font-size:13.5px!important}.features{grid-template-columns:1fr!important;gap:12px!important;padding:0!important}.feature{border-radius:14px!important;padding:16px 14px!important}.feature-top{margin-bottom:10px!important}.feature-icon{border-radius:10px!important;width:38px!important;height:38px!important}.feature-category{padding:2px 7px!important;font-size:10.5px!important}.feature h3{margin-bottom:5px!important;font-size:15px!important}.feature p{font-size:13px!important;line-height:1.5!important}.landing-foot{padding:24px 16px!important}.foot-content{text-align:center!important;flex-direction:column!important;align-items:center!important;gap:10px!important}.foot-content p{text-align:center!important;font-size:12px!important;line-height:1.5!important}}@media (width<=380px){.landing-nav{padding:10px 12px}.landing-nav .logo{gap:6px;font-size:15.5px}.landing-nav .logo-img{width:24px;height:24px}.landing-nav-actions .btn{min-height:32px;padding:0 8px;font-size:12px}.hero{padding:14px 10px 28px}.hero h1{font-size:22px!important}.hero-card{padding:14px 10px!important}.step-title{font-size:10px!important}.step-badge{width:20px!important;height:20px!important;font-size:10px!important}.stat-card{padding:8px 10px}.stat-val{font-size:15px}}.dob-missing{color:var(--warn);font-weight:500}.dob-form{border-top:1px solid var(--border-light);margin-top:14px;padding-top:14px}.bday-top{grid-template-columns:minmax(0,2fr) minmax(260px,1fr);align-items:start;gap:16px;margin-bottom:18px;display:grid}.bday-top>:only-child{grid-column:1/-1}.bday-today{background:linear-gradient(135deg,#fff7ed 0%,#fdf2f8 100%);border-color:#fbcfe8}.bday-today h3{margin-bottom:12px}.bday-today .bday-person+.bday-person{border-top:1px solid #f472b633}.bday-person{align-items:center;gap:12px;min-width:0;padding:10px 0;display:flex}.bday-person-text{flex-direction:column;flex:1;min-width:0;display:flex}.bday-person-text b{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.bday-person-side{text-align:right;flex-direction:column;align-items:flex-end;gap:4px;display:flex}.bday-avatar{color:#fff;background:var(--brand);border-radius:50%;flex-shrink:0;place-items:center;width:38px;height:38px;font-size:13px;font-weight:700;display:grid}.bday-avatar.role-student{background:#6366f1}.bday-avatar.role-teacher{background:#0d9488}.bday-avatar.role-coadmin{background:#d97706}.bday-avatar.role-admin{background:#db2777}.bday-failed{background:var(--danger-soft);color:#9f1239}.bday-person-side .badge{text-transform:none}.bday-settings h3{margin-bottom:12px}.switch-row{cursor:pointer;align-items:flex-start;gap:12px;padding:10px 0;display:flex}.switch-row+.switch-row{border-top:1px solid var(--border-light)}.switch-row span{flex-direction:column;gap:2px;display:flex}.switch-row small{color:var(--text-muted);font-size:12.5px}.bday-settings-note{margin:10px 0 0}input[type=checkbox].switch{appearance:none;cursor:pointer;width:38px;height:22px;transition:background var(--transition-fast);background:#cbd5e1;border:0;border-radius:999px;flex-shrink:0;margin:1px 0 0;padding:0;position:relative}input[type=checkbox].switch:after{content:"";width:16px;height:16px;transition:transform var(--transition-fast);background:#fff;border-radius:50%;position:absolute;top:3px;left:3px;box-shadow:0 1px 2px #0f172a40}input[type=checkbox].switch:hover:not(:disabled){background:#94a3b8}input[type=checkbox].switch:checked{background:var(--brand)}input[type=checkbox].switch:checked:hover:not(:disabled){background:var(--brand-dark,#3730a3)}input[type=checkbox].switch:checked:after{transform:translate(16px)}input[type=checkbox].switch:focus-visible{outline:2px solid var(--brand);outline-offset:2px;box-shadow:none}input[type=checkbox].switch:disabled{opacity:.5;cursor:progress}.bday-section{margin-bottom:18px}.bday-list{margin:0;padding:0;list-style:none}.bday-list li{border-top:1px solid var(--border-light);grid-template-columns:120px 1fr;align-items:center;gap:12px;display:grid}.bday-list li:first-child{border-top:0}.bday-when{flex-direction:column;display:flex}.bday-when b{color:var(--brand-dark)}.bday-months{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;display:grid}.bday-month{border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.bday-month h4{justify-content:space-between;margin:0 0 8px;font-size:13.5px;display:flex}.bday-month ul{gap:4px;margin:0;padding:0;list-style:none;display:grid}.bday-month li{border-radius:6px;grid-template-columns:26px 1fr auto;align-items:baseline;gap:8px;padding:3px 6px;font-size:13px;display:grid}.bday-month li.is-today{color:#9d174d;background:#fdf2f8;font-weight:600}.bday-day{color:var(--brand);font-variant-numeric:tabular-nums;text-align:right;font-weight:700}.bday-month-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bday-missing{border-color:var(--warn-border)}.bday-missing-list{margin:8px 0 0;padding:0;list-style:none}.bday-missing-list li{border-top:1px solid var(--border-light);justify-content:space-between;gap:12px;padding:7px 0;display:flex}@media (width<=800px){.bday-top{grid-template-columns:1fr}.bday-list li{grid-template-columns:1fr;gap:0;padding-top:8px}}.person-form{flex-direction:column;display:flex}.form-section{border-top:1px solid var(--border-light);flex-direction:column;gap:14px;padding:16px 0;display:flex}.form-section:first-child{border-top:0;padding-top:0}.form-section-title{letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin:0;font-size:11.5px;font-weight:700}.form-section-sub{margin:-8px 0 0}.form-note-warn{background:var(--warn-soft);border:1px solid var(--warn-border);color:#92400e;border-radius:8px;margin:0;padding:8px 12px;font-size:12.5px}.form-footnote{margin:0}.person-form .modal-actions{border-top:1px solid var(--border-light);margin-top:4px;padding-top:16px}.person-form .switch-row{padding:0}.person-form .perm-grid{margin:0}.dash-bday{background:linear-gradient(135deg,#fff7ed 0%,#fdf2f8 100%);border-color:#fbcfe8;margin-bottom:18px}.dash-bday-head{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:6px;display:flex}.dash-bday-head h3{margin:0}.dash-bday-list{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:4px 20px;margin:0;padding:0;list-style:none;display:grid}.dash-bday-list li{align-items:center;gap:12px;min-width:0;padding:8px 0;display:flex}.dash-bday-name{flex-direction:column;flex:1;min-width:0;display:flex}.dash-bday-name b,.dash-bday-name small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dash-bday-list .badge{text-transform:none;flex-shrink:0}.dash-bday-next{border-top:1px solid #f472b633;margin:8px 0 0;padding-top:10px}.dash-bday-quiet{border-color:var(--border);background:#fff;align-items:center;gap:12px;padding:12px 18px;display:flex}.dash-bday-quiet>.small{flex:1}.dash-bday-emoji{font-size:20px}.dash-bday-link{white-space:nowrap}.student-dashboard{flex-direction:column;gap:20px;width:100%;display:flex}.student-quick-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;width:100%;display:grid}.student-portal-card{border:1.5px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);transition:transform var(--transition-fast), box-shadow var(--transition-fast), border-color var(--transition-fast);cursor:pointer;background:#fff;flex-direction:column;justify-content:space-between;gap:14px;padding:20px 22px;display:flex;color:inherit!important;text-decoration:none!important}.student-portal-card:hover{border-color:#cbd5e1;transform:translateY(-3px);box-shadow:0 12px 24px -6px #0f172a14}.card-timetable:hover{border-color:#a5b4fc}.card-attendance:hover{border-color:#6ee7b7}.card-tests:hover{border-color:#c4b5fd}.spc-top{justify-content:space-between;align-items:center;gap:12px;display:flex}.spc-icon-wrap{width:48px;height:48px;transition:transform var(--transition-fast);border-radius:12px;flex-shrink:0;place-items:center;display:grid}.student-portal-card:hover .spc-icon-wrap{transform:scale(1.06)}.icon-timetable{color:#4f46e5;background:#eef2ff;border:1.5px solid #c7d2fe}.icon-attendance{color:#059669;background:#ecfdf5;border:1.5px solid #a7f3d0}.icon-tests{color:#7c3aed;background:#fbf7ff;border:1.5px solid #ddd6fe}.spc-badge{color:#475569;white-space:nowrap;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:700}.spc-badge.badge-active{color:#3730a3;background:#e0e7ff;border-color:#c7d2fe}.spc-badge.badge-success{color:#166534;background:#dcfce7;border-color:#bbf7d0}.spc-badge.badge-warn{color:#92400e;background:#fef3c7;border-color:#fde68a}.spc-badge.badge-hot{color:#be123c;background:#ffe4e6;border-color:#fecdd3}.spc-content{flex-direction:column;gap:4px;display:flex}.spc-title{color:#0f172a;letter-spacing:-.01em;margin:0;font-size:16.5px;font-weight:700}.spc-desc{color:#64748b;margin:0;font-size:13px;line-height:1.45}.spc-foot{border-top:1px solid var(--border-light);justify-content:flex-end;align-items:center;margin-top:2px;padding-top:10px;display:flex}.spc-link{color:var(--brand);transition:transform var(--transition-fast);font-size:12.5px;font-weight:600}.student-portal-card:hover .spc-link{transform:translate(2px)}.dash-card-equal{flex-direction:column;height:100%;min-height:240px;padding:22px;display:flex}.card-head-simple{border-bottom:1px solid var(--border-light);justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;padding-bottom:10px;display:flex}.card-head-simple h3{color:#0f172a;margin:0;font-size:16px;font-weight:700}.dash-period-list{flex-direction:column;gap:10px;display:flex}.dash-period-card{border:1.5px solid var(--border);border-left:4.5px solid var(--accent-border,var(--brand));transition:all var(--transition-fast);background:#fff;border-radius:10px;justify-content:space-between;align-items:center;gap:14px;padding:12px 14px;display:flex;box-shadow:0 1px 2px #0f172a0a}.dash-period-card:hover{border-color:#cbd5e1;border-left-color:var(--accent-border,var(--brand));background:var(--accent-bg,#fafbfc);transform:translate(2px)}.dash-period-card.is-live{background:#fff5f6;border-color:#fb7185 #fb7185 #fb7185 #e11d48;border-left-width:5px;box-shadow:0 0 0 2px #e11d4826}.dash-period-card.is-past{opacity:.65}.dash-period-card.is-past:hover{opacity:1}.dash-period-time-col{flex-direction:column;gap:3px;min-width:110px;display:flex}.dash-period-time{color:#0f172a;font-variant-numeric:tabular-nums;font-size:13px;font-weight:700}.dash-live-badge{color:#be123c;background:#ffe4e6;border:1px solid #fecdd3;border-radius:999px;align-items:center;gap:4px;width:fit-content;padding:1.5px 7px;font-size:10px;font-weight:800;display:inline-flex}.dash-done-badge{color:#64748b;background:#f1f5f9;border-radius:4px;width:fit-content;padding:1px 6px;font-size:10px;font-weight:700}.dash-period-body{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.dash-period-title{justify-content:space-between;align-items:center;gap:6px;display:flex}.dash-period-title strong{color:#0f172a;text-overflow:ellipsis;white-space:nowrap;font-size:14.5px;font-weight:700;overflow:hidden}.dash-period-icon{font-size:14px}.dash-period-meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.dash-meta-chip{color:#334155;white-space:nowrap;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:5px;padding:2px 7px;font-size:11px;font-weight:500}.dash-test-list{flex-direction:column;gap:10px;display:flex}.dash-test-item{border:1px solid var(--border);transition:all var(--transition-fast);background:#f8fafc;border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.dash-test-item:hover{box-shadow:var(--shadow-xs);background:#fff;border-color:#cbd5e1}.dash-test-info{flex-direction:column;gap:4px;min-width:0;display:flex}.dash-test-info strong{color:#0f172a;font-size:14px}.dash-test-meta{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.dash-empty-state{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:8px;padding:28px 16px;display:flex}.dash-empty-emoji{margin-bottom:2px;font-size:34px}.dash-empty-state h4{color:#0f172a;margin:0;font-size:15.5px;font-weight:700}.dash-empty-state p{color:#64748b;max-width:320px;margin:0 0 10px;font-size:13px;line-height:1.45}.dash-results-preview{border-top:1px solid var(--border-light);margin-top:16px;padding-top:14px}.dash-results-preview h4{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:0 0 8px;font-size:12px;font-weight:700}.dash-results-list{flex-direction:column;gap:6px;display:flex}.dash-result-item{border:1px solid var(--border-light);background:#f8fafc;border-radius:8px;justify-content:space-between;align-items:center;padding:8px 12px;font-size:13px;display:flex}.dash-result-title{color:#1e293b;font-weight:600}.dash-result-score{color:#059669;font-size:12.5px}@media (width<=860px){.student-quick-grid{grid-template-columns:1fr;gap:12px}}@media (width<=600px){.dash-period-card{flex-direction:column;align-items:flex-start;gap:8px}}.dsh{flex-direction:column;gap:18px;display:flex}.dsh>.card,.dsh .dsh-main>.card,.dsh .dsh-side>.card{margin:0}.dsh-hero{border-radius:var(--radius-lg);color:#fff;background:radial-gradient(circle at 90% -20%,#ffffff2e 0,#0000 45%),linear-gradient(135deg,#4338ca 0%,#6366f1 60%,#818cf8 100%);padding:22px 26px;position:relative;overflow:hidden;box-shadow:0 10px 30px -12px #4338ca8c}.dsh-hero h1{color:#fff;margin:2px 0;font-size:26px}.dsh-date{letter-spacing:.04em;text-transform:uppercase;opacity:.8;margin:0;font-size:12.5px;font-weight:600}.dsh-sub{opacity:.9;margin:0}.dsh-summary{flex-wrap:wrap;gap:8px;margin:14px 0 0;padding:0;list-style:none;display:flex}.dsh-summary li{background:#ffffff29;border:1px solid #ffffff38;border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:600}.dsh-attention h3{margin-bottom:8px}.dsh-attention ul{margin:0;padding:0;list-style:none}.dsh-att-item{border-top:1px solid var(--border-light);align-items:center;gap:12px;padding:10px 0;display:flex}.dsh-att-item:first-child{border-top:0}.dsh-att-text{flex:1;font-size:13.5px}.dsh-att-dot{background:var(--warn);width:9px;height:9px;box-shadow:0 0 0 4px var(--warn-soft);border-radius:50%;flex-shrink:0}.dsh-att-item.tone-danger .dsh-att-dot{background:var(--danger);box-shadow:0 0 0 4px var(--danger-soft)}.dsh-att-item.tone-info .dsh-att-dot{background:var(--brand);box-shadow:0 0 0 4px var(--brand-soft)}.dsh-caught-up{border-radius:var(--radius);background:var(--success-soft);border:1px solid var(--success-border);color:#065f46;align-items:center;gap:10px;padding:12px 16px;font-size:13.5px;font-weight:500;display:flex}.dsh-caught-up span{font-weight:700}.dsh-layout{grid-template-columns:minmax(0,1.65fr) minmax(280px,1fr);align-items:start;gap:18px;display:grid}.dsh-main,.dsh-side{flex-direction:column;gap:18px;min-width:0;display:flex}.dsh-card-head{align-items:baseline;gap:10px;margin-bottom:12px;display:flex}.dsh-card-head h3{margin:0}.dsh-card-meta{color:var(--text-muted);font-size:12.5px;font-weight:500}.dsh-card-link{white-space:nowrap;margin-left:auto}.dsh-subhead{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:16px 0 6px;font-size:12px;font-weight:700}.dsh-empty-line{margin:4px 0 0}.dsh-more{margin-top:10px;display:inline-block}.dsh-timeline{margin:0;padding:0;list-style:none}.dsh-tl-item{border-top:1px solid var(--border-light);grid-template-columns:58px minmax(0,1fr) auto;align-items:center;gap:14px;padding:10px 12px 10px 0;display:grid}.dsh-tl-item:first-child{border-top:0}.dsh-tl-time{text-align:right;font-variant-numeric:tabular-nums;flex-direction:column;display:flex}.dsh-tl-time b{font-size:14px}.dsh-tl-time small{color:var(--text-muted);font-size:12px}.dsh-tl-body{border-left:3px solid var(--accent,var(--brand));min-width:0;padding-left:14px}.dsh-tl-title{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.dsh-tl-title b{font-size:14.5px}.dsh-tl-meta{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;display:block;overflow:hidden}.dsh-tl-item.is-done .dsh-tl-time,.dsh-tl-item.is-done .dsh-tl-title b{opacity:.6}.dsh-tl-item.is-live{background:linear-gradient(90deg,#f5f3ff 0%,#0000 70%);border-radius:10px}.dsh-tl-att{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:600}.dsh-tl-att.ok{color:var(--success)}.dsh-pill{border-radius:999px;align-items:center;gap:5px;padding:1px 8px;font-size:11px;font-weight:700;display:inline-flex}.pill-live{color:#6d28d9;background:#ede9fe}.pill-live i{background:#7c3aed;border-radius:50%;width:6px;height:6px;animation:1.2s infinite pulse}.pill-done{color:#64748b;background:#f1f5f9}.pill-next{background:var(--brand-soft);color:var(--brand-dark)}.dsh-list{margin:0;padding:0;list-style:none}.dsh-list li{border-top:1px solid var(--border-light);align-items:center;gap:12px;padding:10px 0;display:flex}.dsh-list li:first-child{border-top:0;padding-top:2px}.dsh-list-main{flex-direction:column;flex:1;min-width:0;display:flex}.dsh-list-main b{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dsh-list-main small{font-size:12.5px}.dsh-score{white-space:nowrap;color:var(--text-muted)}.dsh-score b{color:var(--text);font-size:15px}.dsh-quick-add{flex-wrap:wrap;gap:8px;display:flex}.dash-bday-calm{border-color:var(--border);background:#fff}.dsh-bday-upcoming{margin:8px 0 0;padding:0;list-style:none}.dsh-bday-upcoming li{border-top:1px solid #94a3b82e;justify-content:space-between;gap:12px;padding:6px 0;font-size:13px;display:flex}.dsh-bday-upcoming li:first-child{border-top:0}.dsh .dash-bday{margin-bottom:0}.dsh .dash-bday .dsh-card-head{margin-bottom:6px}.dsh .dash-bday-list{grid-template-columns:1fr}.dsh-mobile-only{display:none}@media (width<=1100px){.dsh-layout{grid-template-columns:1fr}}@media (width<=820px){.dsh-mobile-only{display:block}}@media (width<=560px){.dsh-hero{padding:18px}.dsh-hero h1{font-size:22px}.dsh-tl-item{grid-template-columns:48px minmax(0,1fr)}.dsh-tl-att,.dsh-tl-att-btn{grid-column:2;justify-self:start}.dsh-att-item{flex-wrap:wrap}.dsh-att-item .btn{margin-left:21px}}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tb-page{flex-direction:column;gap:14px;display:flex}.tb-page>.page-head{margin-bottom:0}.tb-toolbar{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.tb-select{width:auto;min-width:220px}.tb-sunday{align-items:center;padding:0}.tb-mode{margin-bottom:0}.tb-hint{margin:0}.tb-empty-cta{justify-content:center;padding-bottom:8px;display:flex}.tb-pill{white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:1px 8px;font-size:11px;font-weight:700;display:inline-flex}.tb-pill.pill-live{color:#6d28d9;background:#ede9fe}.tb-pill.pill-live i{background:#7c3aed;border-radius:50%;width:6px;height:6px;animation:1.2s infinite pulse}.tb-pill.pill-next{background:var(--brand-soft);color:var(--brand-dark)}.tb-pill.pill-done{color:#64748b;background:#f1f5f9}.tb-now{border:1px solid var(--border);border-left:4px solid var(--brand);border-radius:var(--radius);box-shadow:var(--shadow-xs);background:#fff;flex-wrap:wrap;align-items:center;gap:6px 14px;padding:12px 16px;display:flex}.tb-now.is-live{background:linear-gradient(90deg,#f5f3ff 0%,#fff 60%);border-left-color:#7c3aed}.tb-now.is-calm{border-left-color:#94a3b8}.tb-now-main{flex-wrap:wrap;flex:1;align-items:baseline;gap:4px 10px;min-width:0;display:flex}.tb-now-main b{font-size:15px}.tb-now-meta{color:var(--text-muted);font-size:13px}.tb-now-side{color:var(--brand-dark);font-size:13px;font-weight:600}.tb-grid-wrap{overflow-x:auto}.tb-grid{min-width:calc(76px + var(--days) * 150px)}.tb-row{grid-template-columns:76px repeat(var(--days), minmax(150px, 1fr));display:grid}.tb-row+.tb-row{border-top:1px solid var(--border-light)}.tb-head{z-index:2;border-bottom:1px solid var(--border);background:#f8fafc;position:sticky;top:0}.tb-corner,.tb-time{z-index:1;border-right:1px solid var(--border-light);background:#fff;position:sticky;left:0}.tb-head .tb-corner{background:#f8fafc}.tb-day{flex-direction:column;align-items:center;padding:10px 6px;display:flex}.tb-day b{font-size:13px}.tb-day small{color:var(--text-muted);font-size:11.5px}.tb-day.is-today{background:var(--brand-soft);box-shadow:inset 0 -2px 0 var(--brand)}.tb-day.is-today b,.tb-day.is-today small{color:var(--brand-dark);font-weight:700}.tb-time{font-variant-numeric:tabular-nums;flex-direction:column;justify-content:center;align-items:flex-end;padding:10px;display:flex}.tb-time b{font-size:13px}.tb-time small{color:var(--text-muted);font-size:11.5px}.tb-cell{flex-direction:column;gap:6px;min-height:64px;padding:6px;display:flex}.tb-cell.is-today{background:#eef2ff73}.tb-cell+.tb-cell{border-left:1px solid var(--border-light)}.tb-lecture{text-align:left;width:100%;font:inherit;color:var(--text);background:var(--c-bg);border:1px solid #0000;border-left:3px solid var(--c);transition:box-shadow var(--transition-fast), transform var(--transition-fast), border-color var(--transition-fast);border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.tb-lecture.is-editable{cursor:pointer}.tb-lecture.is-editable:hover{box-shadow:var(--shadow);border-color:color-mix(in srgb, var(--c) 30%, transparent);transform:translateY(-1px)}.tb-lecture:focus-visible,.tb-daylist-card:focus-visible,.tb-add:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.tb-lecture.is-live{box-shadow:0 0 0 2px #7c3aed}.tb-lecture.is-next{box-shadow:0 0 0 1px var(--brand)}.tb-lecture.is-done{opacity:.55}.tb-lecture-title{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.tb-lecture-title b{color:var(--c-text,var(--text));font-size:13.5px}.tb-lecture-meta{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.tb-add{color:#0000;cursor:pointer;min-height:48px;transition:all var(--transition-fast);background:0 0;border:1px dashed #0000;border-radius:8px;flex:1;place-items:center;display:grid}.tb-cell:hover .tb-add,.tb-add:focus-visible{color:var(--brand);background:#fafaff;border-color:#c7d2fe}@media (hover:none){.tb-add{border-color:var(--border);color:#94a3b8}}.tb-dayview{flex-direction:column;gap:12px;display:flex}.tb-daytabs{gap:8px;margin:-8px -6px 0;padding:8px 6px 4px;display:flex;overflow-x:auto}.tb-daytab{font:inherit;border:1px solid var(--border);cursor:pointer;color:var(--text);transition:all var(--transition-fast);background:#fff;border-radius:12px;flex-direction:column;flex:1 0 72px;align-items:center;gap:1px;padding:8px 6px;display:flex;position:relative}.tb-daytab small{color:var(--text-muted);font-size:11px}.tb-daytab:hover{border-color:#c7d2fe}.tb-daytab.is-today small{color:var(--brand);font-weight:700}.tb-daytab.on{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:var(--shadow-brand)}.tb-daytab.on small{color:#ffffffd9}.tb-daytab-count{color:#475569;background:#e2e8f0;border-radius:999px;min-width:18px;height:18px;padding:0 5px;font-size:10.5px;font-weight:700;line-height:18px;position:absolute;top:-6px;right:-4px}.tb-daytab.on .tb-daytab-count{color:var(--brand-dark);background:#fff}.tb-dayview-head{justify-content:space-between;align-items:baseline;margin-bottom:8px;display:flex}.tb-dayview-head h3{margin:0}.tb-daylist{margin:0;padding:0;list-style:none}.tb-daylist li{grid-template-columns:56px minmax(0,1fr);align-items:center;gap:12px;padding:6px 0;display:grid}.tb-daylist li.is-done{opacity:.6}.tb-daylist-time{font-variant-numeric:tabular-nums;flex-direction:column;align-items:flex-end;display:flex}.tb-daylist-time b{font-size:14px}.tb-daylist-time small{color:var(--text-muted);font-size:12px}.tb-daylist-card{text-align:left;width:100%;font:inherit;color:var(--text);background:var(--c-bg);border:1px solid #0000;border-left:4px solid var(--c);border-radius:10px;flex-direction:column;gap:2px;padding:10px 14px;display:flex}.tb-daylist-card.is-editable{cursor:pointer}.tb-daylist-card.is-editable:hover{box-shadow:var(--shadow)}.tb-daylist li.is-live .tb-daylist-card{box-shadow:0 0 0 2px #7c3aed}.tb-duration{color:var(--text-muted);margin-left:auto;font-size:11.5px;font-weight:600}.tb-dayview-add{margin-top:12px}.tb-form-class{margin:0 0 12px}@media (width<=640px){.tb-now{flex-direction:column;align-items:flex-start;gap:6px}.tb-select{flex:1;min-width:0}.tb-toolbar .topbar-spacer{display:none}.tb-mode{width:100%}.tb-mode button{flex:1}}.student-tests-page{flex-direction:column;gap:20px;display:flex}.tests-loading-state{flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:60px 20px;display:flex}.tests-error-state{text-align:center;flex-direction:column;align-items:center;gap:12px;max-width:480px;margin:20px auto;padding:40px 24px;display:flex}.tests-error-icon{font-size:38px}.tests-empty-card{text-align:center;border-radius:var(--radius-lg);border:1px dashed var(--border);background:var(--card);max-width:520px;margin:30px auto;padding:50px 24px}.tests-empty-icon{margin-bottom:12px;font-size:44px}.test-cards-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;display:grid}.modern-test-card{border:1px solid var(--border);transition:transform var(--transition-smooth), box-shadow var(--transition-smooth), border-color var(--transition-smooth);background:#fff;border-radius:14px;flex-direction:column;padding:20px;display:flex;box-shadow:0 2px 8px #0f172a0a}.modern-test-card:hover{border-color:#cbd5e1;transform:translateY(-2px);box-shadow:0 10px 22px #0f172a14}.modern-test-card.card-has-score{border-left:4px solid var(--brand)}.mtc-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.mtc-subject-chip{background:var(--brand-soft);color:var(--brand);letter-spacing:.02em;border-radius:6px;align-items:center;padding:4px 10px;font-size:12px;font-weight:700;display:inline-flex}.mtc-type-tag{border-radius:5px;padding:3px 8px;font-size:11.5px;font-weight:600}.mtc-type-tag.tag-online{color:#065f46;background:#ecfdf5}.mtc-type-tag.tag-offline{color:#475569;background:#f1f5f9}.mtc-body{flex-direction:column;flex:1;gap:10px;display:flex}.mtc-title{color:var(--text);margin:0;font-size:17px;font-weight:700;line-height:1.35}.mtc-meta{color:var(--text-muted);flex-wrap:wrap;align-items:center;gap:6px;font-size:13px;display:flex}.mtc-meta b{color:var(--text)}.mtc-instructions{color:var(--text-muted);background:#f8fafc;border-radius:8px;margin:0;padding:8px 12px;font-size:12.5px;line-height:1.45}.mtc-dates{background:#f8fafc;border:1px solid #f1f5f9;border-radius:8px;flex-direction:column;gap:3px;padding:8px 12px;font-size:12px;display:flex}.mtc-date-item{color:var(--text)}.mtc-score-banner{background:linear-gradient(135deg,#f0fdf4 0%,#e0f2fe 100%);border:1px solid #bbf7d0;border-radius:10px;justify-content:space-between;align-items:center;margin-top:4px;padding:12px 14px;display:flex}.mtc-score-left{flex-direction:column;gap:2px;display:flex}.mtc-score-label{color:#166534;text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:600}.mtc-score-val{color:#15803d;font-size:24px;font-weight:800;line-height:1}.mtc-score-val small{color:#64748b;margin-left:2px;font-size:14px;font-weight:600}.mtc-pct-badge{border-radius:20px;padding:5px 10px;font-size:13px;font-weight:700}.mtc-pct-badge.pct-good{color:#15803d;background:#dcfce7}.mtc-pct-badge.pct-avg{color:#b45309;background:#fef3c7}.mtc-pct-badge.pct-low{color:#b91c1c;background:#fee2e2}.mtc-remarks{color:#334155;background:#fffbeb;border-left:3px solid #f59e0b;border-radius:4px;padding:8px 12px;font-size:12.5px}.mtc-footer{border-top:1px solid #f1f5f9;justify-content:space-between;align-items:center;gap:10px;margin-top:16px;padding-top:14px;display:flex}.mtc-status-col{align-items:center;display:flex}.status-pill{border-radius:12px;padding:4px 9px;font-size:11.5px;font-weight:600}.status-pill.status-open{color:var(--brand);background:#eef2ff}.status-pill.status-resume{color:#b45309;background:#fef3c7}.status-pill.status-upcoming{color:#64748b;background:#f1f5f9}.status-pill.status-submitted{color:#0369a1;background:#e0f2fe}.status-pill.status-closed{color:#94a3b8;background:#f8fafc}.status-pill.status-offline{color:#475569;background:#f1f5f9}.status-pill.status-result{color:#15803d;background:#dcfce7}.mtc-actions{align-items:center;gap:8px;display:flex}@media (width<=640px){.test-cards-grid{grid-template-columns:1fr}}.avatar-initials{color:#fff;background:var(--brand);-webkit-user-select:none;user-select:none;border-radius:50%;flex-shrink:0;place-items:center;font-weight:700;display:inline-grid;box-shadow:inset 0 0 0 2px #ffffff40}.avatar-initials.role-student{background:linear-gradient(135deg,#6366f1,#818cf8)}.avatar-initials.role-teacher{background:linear-gradient(135deg,#0d9488,#2dd4bf)}.avatar-initials.role-coadmin{background:linear-gradient(135deg,#d97706,#fbbf24)}.avatar-initials.role-admin{background:linear-gradient(135deg,#db2777,#f472b6)}.avatar-initials.is-muted{background:#cbd5e1}.people-table td{vertical-align:middle}.people-table .col-avatar{width:56px;padding-right:0}.people-table .col-actions{white-space:nowrap;text-align:right;width:1%}.people-table tr.is-inactive .people-name b,.people-table tr.is-inactive .people-email{color:var(--text-muted)}.people-name{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.people-name .badge{text-transform:none;font-size:11px}.people-sub{color:var(--text-muted);font-size:12.5px;display:block}.people-email{word-break:break-all}.people-phone{white-space:nowrap;font-variant-numeric:tabular-nums}.row-icons{gap:6px;display:inline-flex}.icon-action{border:1px solid var(--border);color:#475569;cursor:pointer;width:34px;height:34px;transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);background:#fff;border-radius:9px;place-items:center;display:inline-grid}.icon-action:hover{background:var(--brand-soft);color:var(--brand-dark);border-color:#c7d2fe}.icon-action[aria-expanded=true]{background:var(--brand-soft);color:var(--brand-dark);border-color:var(--brand)}.icon-action:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.icon-action.is-placeholder{opacity:.35;cursor:not-allowed}.icon-action.is-placeholder:hover{color:#475569;border-color:var(--border);background:#fff}.action-menu{z-index:70;border:1px solid var(--border);min-width:190px;box-shadow:var(--shadow-lg);background:#fff;border-radius:12px;padding:6px;animation:.12s ease-out fadeIn;position:fixed}.action-menu button{width:100%;font:inherit;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;gap:10px;padding:9px 12px;font-size:13.5px;font-weight:500;display:flex}.action-menu button svg{color:var(--text-muted)}.action-menu button:hover,.action-menu button:focus-visible{background:var(--brand-soft);color:var(--brand-dark);outline:none}.action-menu button:hover svg,.action-menu button:focus-visible svg{color:var(--brand-dark)}.action-menu button.danger,.action-menu button.danger svg{color:var(--danger)}.action-menu button.danger:hover,.action-menu button.danger:focus-visible{background:var(--danger-soft);color:#be123c}.person-details-head{align-items:center;gap:14px;margin-bottom:16px;display:flex}.person-details-head h3{margin:0 0 2px;font-size:17px}.person-details-list{border:1px solid var(--border-light);border-radius:var(--radius);margin:0;overflow:hidden}.person-details-list>div{grid-template-columns:130px minmax(0,1fr);gap:12px;padding:10px 14px;display:grid}.person-details-list>div:nth-child(odd){background:#f8fafc}.person-details-list dt{color:var(--text-muted);font-size:12.5px;font-weight:600}.person-details-list dd{overflow-wrap:anywhere;margin:0;font-size:13.5px}.tag-list{flex-wrap:wrap;gap:6px;display:flex}@media (width<=640px){.people-table .people-email,.people-table th:nth-child(3){display:none}.person-details-list>div{grid-template-columns:1fr;gap:2px}}.confirm-check{border:1.5px solid var(--border);color:#334155;cursor:pointer;-webkit-user-select:none;user-select:none;background:#f8fafc;border-radius:12px;align-items:center;gap:12px;margin-top:16px;padding:12px 14px;font-size:13.5px;font-weight:500;transition:all .18s cubic-bezier(.4,0,.2,1);display:flex;box-shadow:0 1px 2px #0f172a0a}.confirm-check:hover{background:#f1f5f9;border-color:#c7d2fe}.confirm-check.on{border-color:var(--tone,var(--brand));background:var(--tone-soft,#eef2ff);color:#1e1b4b;box-shadow:0 2px 8px -2px #4f46e526}.confirm-check.on:hover{border-color:var(--tone,var(--brand));background:#e0e7ff}.confirm-check:hover input[type=checkbox]:not(:checked):not(:disabled){border-color:var(--tone,var(--brand,#4f46e5));background-color:#f8fafc}.confirm-check:hover input[type=checkbox]:checked:not(:disabled){background-color:var(--tone-dark,var(--brand-dark,#3730a3))!important;border-color:var(--tone-dark,var(--brand-dark,#3730a3))!important}.confirm-check input[type=checkbox]{border-width:1.8px;border-radius:6px;flex-shrink:0;width:20px;height:20px;margin:0}.confirm-check span{flex:1;line-height:1.35}.people-count-bar{border-bottom:1px solid var(--border-light);color:var(--text-muted);border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);background:#f8fafc;justify-content:space-between;align-items:center;padding:9px 16px;font-size:12px;font-weight:600;display:flex}.people-filter-tag{background:var(--brand-soft);color:var(--brand-dark);border-radius:999px;padding:1px 7px;font-size:11px;font-weight:700}.people-mobile-list{border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);background:#f8fafc;flex-direction:column;gap:10px;padding:12px;display:flex}.person-card-mobile{border:1px solid var(--border);background:#fff;border-radius:14px;flex-direction:column;gap:10px;padding:13px 14px;transition:transform .15s,box-shadow .15s,border-color .15s;display:flex;box-shadow:0 1px 3px #0f172a0a}.person-card-mobile:active{background:#fafafa}.person-card-mobile.is-inactive{opacity:.8;background:#f8fafc;border-style:dashed}.pcm-top{align-items:center;gap:11px;display:flex}.pcm-avatar-wrap{flex-shrink:0}.pcm-identity{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.pcm-name-row{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.pcm-name{color:#0f172a;word-break:break-word;font-size:15px;font-weight:700;line-height:1.25}.pcm-badges{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.pcm-pill{border-radius:6px;align-items:center;padding:2px 7px;font-size:11.5px;font-weight:600;line-height:1.3;display:inline-flex}.pcm-pill-roll{color:#475569;background:#f1f5f9;border:1px solid #e2e8f0}.pcm-pill-class{color:#4338ca;background:#eef2ff;border:1px solid #c7d2fe}.pcm-pill-desig{color:#0f766e;background:#f0fdfa;border:1px solid #99f6e4}.pcm-actions{flex-shrink:0;align-items:center;gap:6px;display:flex}.icon-action-sm{border-radius:9px;width:34px;height:34px}.icon-action-sm svg{width:16px;height:16px}.pcm-contact{border-top:1px solid var(--border-light);flex-wrap:wrap;align-items:center;gap:8px;padding-top:8px;display:flex}.pcm-contact-chip{border:1px solid var(--border);color:#334155;background:#f8fafc;border-radius:8px;align-items:center;gap:6px;max-width:100%;padding:6px 10px;font-size:12.5px;font-weight:500;text-decoration:none;transition:all .15s;display:inline-flex}.pcm-contact-chip:hover,.pcm-contact-chip:active{background:#f1f5f9;border-color:#cbd5e1}.pcm-chip-phone{color:#047857;background:#ecfdf5;border-color:#a7f3d0}.pcm-chip-phone:hover,.pcm-chip-phone:active{background:#d1fae5}.pcm-chip-phone svg{color:#059669}.pcm-chip-email{color:#3730a3;background:#eef2ff;border-color:#c7d2fe;flex:auto;min-width:0}.pcm-chip-email:hover,.pcm-chip-email:active{background:#e0e7ff}.pcm-chip-email svg{color:#4f46e5;flex-shrink:0}.pcm-contact-chip svg{flex-shrink:0;width:13px;height:13px}.pcm-truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pcm-chip-empty{color:#94a3b8;font-size:12px;font-style:italic}.pcm-parent-row{color:#92400e;background:#fffbeb;border:1px solid #fef3c7;border-radius:7px;align-items:center;gap:6px;padding:5px 9px;font-size:12px;display:flex}.pcm-parent-label{text-transform:uppercase;letter-spacing:.05em;color:#b45309;font-size:10px;font-weight:700}.pcm-parent-link{color:#92400e;text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;text-decoration:none;display:inline-flex;overflow:hidden}.pcm-parent-link svg{flex-shrink:0;width:12px;height:12px}.pcm-parent-link:hover{text-decoration:underline}.my-att-mobile-list{border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);background:#f8fafc;flex-direction:column;gap:10px;padding:12px;display:flex}.my-att-card{border:1px solid var(--border);border-left:4.5px solid var(--border);background:#fff;border-radius:12px;flex-direction:column;gap:8px;padding:12px 14px;display:flex;box-shadow:0 1px 2px #0f172a0a}.my-att-card.status-p{border-left-color:#10b981}.my-att-card.status-a{border-left-color:#ef4444}.my-att-card.status-l{border-left-color:#f59e0b}.my-att-card-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.my-att-date-col{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.my-att-date{color:#0f172a;font-size:13.5px;font-weight:700}.my-att-time{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:11.5px}.my-att-badge{font-size:11px}.my-att-card-body{flex-direction:column;gap:4px;display:flex}.my-att-subject{color:#1e293b;font-size:14px;font-weight:600}.my-att-meta-row{color:var(--text-muted);align-items:center;gap:12px;font-size:12px;display:flex}.my-att-room{color:#475569;background:#f1f5f9;border-radius:4px;padding:1px 6px;font-weight:500}@media (width<=640px){.stats{grid-template-columns:repeat(2,1fr)!important;gap:10px!important;margin-bottom:16px!important}.stat{padding:12px 14px!important}.stat b{font-size:20px!important}.stat span{font-size:11.5px!important}.filters{flex-direction:column;gap:8px;width:100%;margin-bottom:14px;display:flex}.filters input[type=search],.filters select{border-radius:10px;height:42px;padding:0 12px;font-size:14px;width:100%!important;min-width:0!important;max-width:100%!important}.modal-backdrop,.confirm-backdrop{padding:12px!important}.modal{border-radius:14px!important;max-height:calc(100vh - 24px)!important}.modal-head{padding:14px 16px!important}.modal-body{padding:16px!important}.modal-actions{flex-direction:column-reverse;gap:8px;width:100%}.modal-actions .btn{justify-content:center;padding:11px;font-size:14px;width:100%!important}.form-section{margin-bottom:14px!important;padding:14px!important}}.btn-icon{justify-content:center;align-items:center;min-width:32px;line-height:1;padding:6px 9px!important;display:inline-flex!important}.btn-icon svg{margin:0!important}.btn-trash-action{width:28px;height:28px;color:var(--danger);cursor:pointer;transition:all var(--transition-fast);background:0 0;border:1px solid #0000;border-radius:7px;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn-trash-action:hover{background:var(--danger-soft);color:#be123c;border-color:#fda4af}.btn-trash-action:focus-visible{outline:2px solid var(--danger);outline-offset:1px}.btn-trash-action svg{flex-shrink:0}.tb-agenda{flex-direction:column;gap:10px;display:flex}.tb-agenda-day{margin:0;padding:14px 14px 10px}.tb-agenda-day.is-today{box-shadow:0 0 0 1px #a5b4fc, var(--shadow-sm);border-color:#a5b4fc}.tb-agenda-day.is-empty{box-shadow:none;background:#fbfcfe;padding:10px 14px}.tb-agenda-head{align-items:center;gap:8px;min-height:34px;display:flex}.tb-agenda-date{align-items:baseline;gap:8px;display:flex}.tb-agenda-date b{font-size:15px}.tb-agenda-date small{color:var(--text-muted);font-size:12.5px}.tb-agenda-day.is-empty .tb-agenda-date b{color:var(--text-muted);font-size:14px;font-weight:600}.tb-agenda-count{color:var(--text-muted);margin-left:auto;font-size:12px;font-weight:600}.tb-agenda-day.is-empty .tb-agenda-count{color:#94a3b8;font-weight:500}.tb-agenda-add{border-radius:8px;width:30px;height:30px}.tb-agenda-day .tb-daylist{border-top:1px solid var(--border-light);margin-top:8px;padding-top:4px}@media (width<=640px){.tb-page{gap:12px}.tb-page .page-head h1{font-size:22px}.tb-daylist li{grid-template-columns:46px minmax(0,1fr);gap:10px}.tb-daylist-time b{font-size:13px}.tb-daylist-card{padding:9px 12px}.tb-now{padding:10px 12px}.tb-now-main b{font-size:14px}}.idc-page{flex-direction:column;gap:18px;display:flex}.idc-page>.page-head{margin-bottom:0}.idc-layout{grid-template-columns:auto minmax(240px,360px);justify-content:center;align-items:start;gap:28px;display:grid}.idc-stage{flex-direction:column;align-items:center;gap:10px;display:flex}.idc-tip{margin:0}.idc-flip{aspect-ratio:54/85.6;perspective:1400px;cursor:pointer;border-radius:5%/3.2%;width:min(340px,86vw)}.idc-flip:focus-visible{outline:3px solid var(--brand);outline-offset:6px}.idc-flip-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .6s cubic-bezier(.2,.8,.2,1);display:block;position:relative}.idc-flip.is-flipped .idc-flip-inner{transform:rotateY(180deg)}.idc-flip .idc-face{backface-visibility:hidden;position:absolute;inset:0}.idc-flip .idc-back{transform:rotateY(180deg)}@media (prefers-reduced-motion:reduce){.idc-flip-inner{transition:none}}.idc-face{--c1:#4338ca;--c2:#6366f1;--c-soft:#eef2ff;--c-ink:#3730a3;aspect-ratio:54/85.6;background:radial-gradient(circle at 100% 100%, var(--c-soft) 0, transparent 45%), #fff;color:#0f172a;text-align:center;border:1px solid #e2e8f0;border-radius:5%/3.2%;flex-direction:column;align-items:center;width:100%;font-size:4cqw;line-height:1.25;display:flex;overflow:hidden;box-shadow:0 1px 2px #0f172a0f,0 18px 40px -16px #0f172a59;container-type:inline-size}.idc-face.role-teacher{--c1:#0f766e;--c2:#14b8a6;--c-soft:#f0fdfa;--c-ink:#115e59}.idc-face.role-coadmin{--c1:#b45309;--c2:#f59e0b;--c-soft:#fffbeb;--c-ink:#92400e}.idc-face.role-admin{--c1:#be185d;--c2:#ec4899;--c-soft:#fdf2f8;--c-ink:#9d174d}.idc-head{background:linear-gradient(135deg, var(--c1), var(--c2));color:#fff;text-align:left;clip-path:polygon(0 0,100% 0,100% 78%,50% 100%,0 78%);align-items:center;gap:3cqw;width:100%;padding:5cqw 5cqw 15cqw;display:flex}.idc-logo{width:11cqw;height:11cqw;color:var(--c1);background:#fffffff2;border-radius:3cqw;flex-shrink:0;place-items:center;font-size:6cqw;font-weight:800;display:grid}.idc-inst{flex-direction:column;min-width:0;display:flex}.idc-inst b{text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:4.6cqw;line-height:1.2;display:-webkit-box;overflow:hidden}.idc-inst small{opacity:.9;letter-spacing:.02em;font-size:2.9cqw}.idc-ribbon{color:var(--c-ink);letter-spacing:.12em;text-transform:uppercase;z-index:1;background:#fff;border-radius:999px;margin-top:-10cqw;padding:1.2cqw 3.5cqw;font-size:2.7cqw;font-weight:800;position:relative;box-shadow:0 1cqw 3cqw #0f172a1f}.idc-photo{background:linear-gradient(135deg, var(--c1), var(--c2));border-radius:50%;flex-shrink:0;width:30cqw;height:30cqw;margin-top:3.5cqw;padding:1.3cqw}.idc-photo span{background:var(--c-soft);width:100%;height:100%;color:var(--c-ink);border:1.2cqw solid #fff;border-radius:50%;place-items:center;font-size:10cqw;font-weight:800;display:grid}.idc-name{margin-top:3cqw;padding:0 5cqw;font-size:6.4cqw;font-weight:800;line-height:1.15}.idc-role{color:var(--c-ink);text-transform:uppercase;letter-spacing:.08em;margin-top:.8cqw;font-size:3.4cqw;font-weight:700}.idc-rows{text-align:left;background:#f8fafc;border:1px solid #eef2f7;border-radius:3cqw;width:88%;margin:3.5cqw 0 0;padding:2.5cqw 3.5cqw}.idc-rows>div{grid-template-columns:38% 1fr;gap:2cqw;padding:.9cqw 0;display:grid}.idc-rows>div+div{border-top:1px dashed #e2e8f0}.idc-rows dt{color:#64748b;font-size:3cqw;font-weight:600}.idc-rows dd{overflow-wrap:anywhere;margin:0;font-size:3.3cqw;font-weight:700}.idc-code{flex-direction:column;align-items:center;gap:.6cqw;width:70%;margin-top:auto;padding:2.5cqw 0 1.5cqw;display:flex}.idc-barcode{fill:#0f172a;width:100%;height:9cqw;display:block}.idc-code span{letter-spacing:.18em;color:#334155;font-family:SFMono-Regular,Consolas,monospace;font-size:2.9cqw}.idc-foot{background:linear-gradient(90deg, var(--c1), var(--c2));flex-shrink:0;width:100%;height:3cqw}.idc-back{justify-content:flex-start}.idc-stripe{background:linear-gradient(#1e293b,#0f172a);flex-shrink:0;width:100%;height:13cqw;margin-top:9cqw}.idc-back-body{flex-direction:column;flex:1;align-items:center;width:100%;padding:5cqw 7cqw 3cqw;display:flex}.idc-back-body h4{color:var(--c-ink);margin:0;font-size:5cqw}.idc-address{color:#475569;margin:1.5cqw 0 0;font-size:3.1cqw}.idc-rows-compact{width:100%;margin-top:3cqw}.idc-rows-compact>div{grid-template-columns:34% 1fr}.idc-note{color:#64748b;margin:3.5cqw 0 0;font-size:2.9cqw;line-height:1.45}.idc-sign{flex-direction:column;align-self:flex-end;align-items:center;gap:.8cqw;width:42%;margin-top:auto;display:flex}.idc-sign-line{border-top:1px solid #94a3b8;width:100%;height:0;display:block}.idc-sign small{color:#64748b;font-size:2.6cqw}.idc-issued{color:#94a3b8;margin-top:3cqw;font-size:2.5cqw}.idc-info{margin:0}.idc-info h3{margin-bottom:10px}.idc-info ul{margin:0 0 12px;padding:0;list-style:none}.idc-info li{border-top:1px solid var(--border-light);justify-content:space-between;gap:12px;padding:8px 0;font-size:13.5px;display:flex}.idc-info li:first-child{border-top:0}.idc-info li span{font-family:SFMono-Regular,Consolas,monospace;font-size:13px}.idc-info p{margin:0 0 8px}.idc-print{display:none}@media print{@page{size:A4;margin:12mm}body *{visibility:hidden!important}.idc-print,.idc-print *{visibility:visible!important}.idc-print{gap:8mm;position:fixed;top:0;left:0;display:flex!important}.idc-print .idc-face{width:54mm;box-shadow:none;-webkit-print-color-adjust:exact;print-color-adjust:exact;border:.3mm solid #cbd5e1}}@media (width<=820px){.idc-layout{grid-template-columns:1fr;justify-items:center}.idc-info{width:min(340px,86vw)}}
