@import "https://fonts.cdnfonts.com/css/avenir-lt-pro";@font-face{font-family:Zing Rust Demo;src:url(/fonts/zing.rust-demo-base.otf)format("opentype");font-style:normal;font-weight:400;font-display:swap}:root{--color-primary:#e87722;--color-secondary:#1d4289;--color-gray-50:#f9fafb;--color-gray-100:#f3f4f6;--color-gray-200:#e5e7eb;--color-gray-300:#d1d5db;--color-gray-400:#9ca3af;--color-gray-500:#6b7280;--color-gray-600:#4b5563;--color-gray-700:#374151;--color-gray-800:#1f2937;--color-gray-900:#111827;--color-success-bg:#dcfce7;--color-success-text:#166534;--color-danger-bg:#fee2e2;--color-danger-text:#b91c1c;--color-warning-bg:#fef3c7;--color-warning-text:#92400e;--color-info-bg:#dbeafe;--color-info-text:#1e40af;--surface:#fff;--surface-muted:#f9fafb;--surface-overlay:#11182766;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-pill:999px;--shadow-sm:0 1px 2px #1118270f;--shadow-md:0 8px 24px #1118271a;--font-title:"Zing Rust Demo", cursive;--font-subtitle:"Avenir Next LT Pro", "Avenir LT Pro", system-ui, sans-serif;--font-body:"Avenir Next LT Pro", "Avenir LT Pro", system-ui, sans-serif;--bp-mobile:640px;--bp-tablet:1024px;--sidebar-width:224px;--sidebar-mobile-width:280px}*,:before,:after{box-sizing:border-box;border-color:var(--color-gray-200)}html,body,#root{min-height:100%;margin:0}body{font-family:var(--font-body);color:var(--color-gray-700);background:radial-gradient(circle at 95% 0%, #1d428917 0%, transparent 37%), radial-gradient(circle at 0% 100%, #e877221c 0%, transparent 32%), var(--color-gray-50);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-style:normal}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.app-loader{min-height:100vh;color:var(--color-gray-500);place-items:center;font-size:.95rem;display:grid}.btn{border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:10px 14px;font-size:.88rem;font-weight:700;transition:all .16s;display:inline-flex}.btn:disabled{cursor:not-allowed;opacity:.55}.btn-primary{background-color:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background-color:#d96d1e}.btn-secondary{background-color:var(--surface);border-color:var(--color-gray-300);color:var(--color-gray-700)}.btn-secondary:hover:not(:disabled){background-color:var(--color-gray-100)}.btn-danger{background-color:var(--color-danger-bg);color:var(--color-danger-text);border-color:#fecaca}.btn-danger:hover:not(:disabled){background-color:#fecaca}.btn-ghost{color:var(--color-gray-600);background-color:#0000;padding:8px 10px}.btn-ghost:hover:not(:disabled){background-color:var(--color-gray-100);color:var(--color-gray-800)}.input-field,.select-field{border:1px solid var(--color-gray-300);border-radius:var(--radius-md);background-color:var(--surface);width:100%;color:var(--color-gray-700);padding:10px 14px;font-size:.9rem;line-height:1.5;transition:border-color .16s,box-shadow .16s}.input-field::placeholder{color:var(--color-gray-400)}.input-field:focus,.select-field:focus{border-color:var(--color-primary);outline:none;box-shadow:0 0 0 3px #e8772224}.input-field:disabled,.select-field:disabled{cursor:not-allowed;color:var(--color-gray-500);background-color:var(--color-gray-100)}.field-group{gap:6px;display:grid}.password-field{position:relative}.password-input{padding-right:42px}.password-toggle{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--color-gray-500);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;transition:color .15s,background-color .15s;display:inline-flex;position:absolute;top:50%;right:7px;transform:translateY(-50%)}.password-toggle:hover{color:var(--color-gray-700);background-color:var(--color-gray-100)}.password-toggle:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.password-toggle svg{width:16px;height:16px}.field-label{letter-spacing:.02em;text-transform:uppercase;color:var(--color-gray-500);font-size:.75rem;font-weight:700}.field-error{color:var(--color-danger-text);margin:0;font-size:.76rem}.alert-banner{border-radius:var(--radius-md);color:#991b1b;background-color:#fef2f2;border:1px solid #fecaca;padding:10px 12px;font-size:.82rem}.app-shell{grid-template-columns:224px minmax(0,1fr);min-height:100vh;display:grid}.app-sidebar{background-color:var(--surface);border-right:1px solid var(--color-gray-200);flex-direction:column;gap:14px;padding:14px 10px;display:flex}.sidebar-brand{border-bottom:1px solid var(--color-gray-200);padding:2px 8px 10px}.sidebar-brand p{text-transform:uppercase;letter-spacing:.12em;color:var(--color-gray-500);margin:0;font-size:.64rem;font-weight:700}.sidebar-brand h1{font-family:var(--font-title);color:var(--color-secondary);margin:8px 0 0;font-size:1.15rem;font-weight:400;line-height:1.1}.sidebar-nav{flex-direction:column;flex:1;justify-content:flex-start;align-items:stretch;gap:8px;padding-right:4px;display:flex;overflow-y:auto}.sidebar-group{flex-direction:column;gap:1px;display:flex}.sidebar-group-label{text-transform:uppercase;letter-spacing:.1em;color:var(--color-gray-400);margin:0;padding:5px 8px;font-size:.62rem;font-weight:700}.sidebar-link{border-radius:var(--radius-md);color:var(--color-gray-700);padding:7px 9px;font-size:.8rem;font-weight:700;transition:all .13s;display:block}.sidebar-link:hover{background-color:var(--color-gray-100);color:var(--color-gray-900)}.sidebar-link.active{color:var(--color-primary);background-color:#e877221f}.sidebar-footer{border-top:1px solid var(--color-gray-200);gap:10px;padding:10px 8px 2px;display:grid}.sidebar-account{border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background-color:var(--surface-muted);align-items:center;gap:10px;padding:8px;display:flex}.sidebar-avatar{border-radius:var(--radius-pill);width:34px;height:34px;color:var(--color-secondary);background-color:#1d42891f;flex-shrink:0;place-items:center;font-size:.82rem;font-weight:800;display:grid}.sidebar-account-content{gap:4px;min-width:0;display:grid}.sidebar-account-content strong{color:var(--color-gray-800);white-space:nowrap;text-overflow:ellipsis;font-size:.8rem;line-height:1.25;overflow:hidden}.sidebar-account-role{border-radius:var(--radius-pill);width:fit-content;color:var(--color-secondary);text-transform:uppercase;letter-spacing:.05em;background-color:#1d428914;border:1px solid #1d428933;margin:0;padding:2px 6px;font-size:.6rem;font-weight:700;display:inline-flex}.sidebar-logout{border:1px solid var(--color-gray-300);border-radius:var(--radius-md);background-color:var(--surface);color:var(--color-gray-700);cursor:pointer;padding:6px 8px;font-size:.76rem;font-weight:700;transition:all .16s}.sidebar-logout:hover{background-color:var(--color-gray-100)}.app-content{flex-direction:column;min-width:0;height:100vh;display:flex}.app-header{z-index:20;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--color-gray-200);background-color:#fffffff0;justify-content:space-between;align-items:center;gap:10px;min-height:62px;padding:12px 20px;display:flex;position:sticky;top:0}.header-meta{text-transform:uppercase;letter-spacing:.08em;color:var(--color-gray-500);margin:0;font-size:.62rem;font-weight:700}.header-context{color:var(--color-gray-700);margin:3px 0 0;font-size:.84rem;font-weight:700}.content-scroll{flex:1;padding:24px;overflow-y:auto}.page-wrapper{gap:20px;width:min(1280px,100%);margin:0 auto;display:grid}.page-intro{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.page-title{color:var(--color-secondary);font-family:var(--font-title);margin:0;font-size:1.7rem;font-weight:400;line-height:1.1}.page-subtitle{color:var(--color-gray-500);margin:6px 0 0;font-size:.91rem}.page-note{color:var(--color-gray-500);margin:0;font-size:.78rem}.page-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.panel{background-color:var(--surface);border:1px solid var(--color-gray-200);border-radius:var(--radius-lg)}.panel-header{border-bottom:1px solid var(--color-gray-200);justify-content:space-between;align-items:center;gap:12px;padding:16px 20px;display:flex}.panel-title{color:var(--color-gray-800);font-family:var(--font-subtitle);margin:0;font-size:1rem;font-weight:700}.panel-description{color:var(--color-gray-500);margin:4px 0 0;font-size:.82rem}.panel-body{padding:18px 20px}.panel-footer{border-top:1px solid var(--color-gray-200);padding:14px 20px}.split-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.kpi-grid{gap:14px;display:grid}.kpi-grid.four{grid-template-columns:repeat(4,minmax(0,1fr))}.kpi-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.kpi-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.kpi-card{border:1px solid var(--color-gray-200);border-radius:var(--radius-lg);background-color:var(--surface);padding:16px}.kpi-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.kpi-label{color:var(--color-gray-500);margin:0;font-size:.82rem;font-weight:700}.kpi-icon{border-radius:var(--radius-pill);place-items:center;width:34px;height:34px;font-size:.78rem;font-weight:800;display:inline-grid}.kpi-icon.primary{color:var(--color-primary);background-color:#e877221f}.kpi-icon.secondary{color:var(--color-secondary);background-color:#1d42891f}.kpi-icon.success{color:#15803d;background-color:#22c55e24}.kpi-icon.neutral{background-color:var(--color-gray-100);color:var(--color-gray-600)}.kpi-value{color:var(--color-gray-900);margin:12px 0 0;font-size:1.78rem;font-weight:800;line-height:1}.kpi-hint{color:var(--color-gray-500);margin:8px 0 0;font-size:.75rem}.kpi-card.loading{animation:1.15s ease-in-out infinite pulse}.kpi-placeholder{border-radius:var(--radius-sm);background-color:var(--color-gray-200)}.badge{border-radius:var(--radius-pill);align-items:center;gap:6px;padding:3px 9px;font-size:.72rem;font-weight:700;display:inline-flex}.badge.neutral{background-color:var(--color-gray-100);color:var(--color-gray-600)}.badge.primary{color:var(--color-primary);background-color:#e877221f}.badge.secondary{color:var(--color-secondary);background-color:#1d42891f}.badge.success{background-color:var(--color-success-bg);color:var(--color-success-text)}.badge.danger{background-color:var(--color-danger-bg);color:var(--color-danger-text)}.status-badge{border-radius:var(--radius-pill);font-size:.72rem;font-weight:700;font-family:var(--font-sans);letter-spacing:.05em;text-transform:uppercase;align-items:center;gap:6px;padding:3px 9px;line-height:normal;display:inline-flex}.status-dot{border-radius:var(--radius-pill);width:7px;height:7px}.status-active{background-color:var(--color-success-bg);color:var(--color-success-text)}.status-active .status-dot{background-color:#16a34a}.status-blocked{background-color:var(--color-danger-bg);color:var(--color-danger-text)}.status-blocked .status-dot{background-color:#dc2626}.status-unknown{background-color:var(--color-gray-100);color:var(--color-gray-600)}.status-unknown .status-dot{background-color:var(--color-gray-400)}.filter-bar{background-color:var(--surface);border:1px solid var(--color-gray-200);border-radius:var(--radius-lg);gap:12px;padding:14px;display:grid}.filter-grid{grid-template-columns:minmax(220px,1.3fr) repeat(4,minmax(150px,1fr)) auto;align-items:end;gap:10px;display:grid}.filter-actions{justify-content:flex-end;align-items:center;gap:10px;display:flex}.filter-chips{flex-wrap:wrap;gap:8px;display:flex}.filter-chip{border-radius:var(--radius-pill);color:var(--color-primary);background-color:#e8772214;border:1px solid #e8772247;padding:4px 10px;font-size:.72rem;font-weight:700}.table-card{background-color:var(--surface);border:1px solid var(--color-gray-200);border-radius:var(--radius-lg);overflow:hidden}.table-wrapper{max-height:min(64vh,620px);overflow:auto}.data-table{border-collapse:collapse;width:100%;min-width:680px}.data-table thead tr{background-color:var(--color-gray-50);border-bottom:1px solid var(--color-gray-200)}.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--color-gray-500);white-space:nowrap;padding:12px 16px;font-size:.7rem;font-weight:700}.data-table td{border-bottom:1px solid var(--color-gray-100);color:var(--color-gray-700);vertical-align:middle;padding:13px 16px;font-size:.86rem}.data-table tr:last-child td{border-bottom:none}.data-table tbody tr{transition:background-color .14s}.data-table tbody tr:hover{background-color:var(--color-gray-50)}.data-table td.right,.data-table th.right{text-align:right}.table-primary-text{color:var(--color-gray-800);font-weight:700}.table-secondary-text{color:var(--color-gray-500);font-size:.78rem}.table-actions{align-items:center;gap:8px;display:inline-flex}.table-empty{padding:54px 18px}.empty-state{text-align:center;color:var(--color-gray-500);place-items:center;gap:8px;display:grid}.empty-state-icon{border-radius:var(--radius-pill);background-color:var(--color-gray-100);width:52px;height:52px;color:var(--color-gray-400);place-items:center;font-size:.9rem;font-weight:800;display:grid}.empty-state h3{color:var(--color-gray-700);margin:0;font-size:.92rem}.empty-state p{margin:0;font-size:.82rem}.table-skeleton{border-radius:var(--radius-sm);background-color:var(--color-gray-200);height:10px;animation:1.15s ease-in-out infinite pulse}.table-skeleton.small{width:42%}.table-skeleton.medium{width:65%}.table-skeleton.large{width:82%}.pagination{border-top:1px solid var(--color-gray-200);background-color:var(--surface);justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.pagination p{color:var(--color-gray-500);margin:0;font-size:.8rem}.pagination-controls{align-items:center;gap:8px;display:flex}.tabs{border:1px solid var(--color-gray-200);border-radius:var(--radius-lg);background-color:var(--surface);overflow:hidden}.tab-list{border-bottom:1px solid var(--color-gray-200);background-color:var(--surface);flex-wrap:wrap;gap:0;display:flex}.tab-button{color:var(--color-gray-500);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:12px 16px;font-size:.85rem;font-weight:700}.tab-button:hover{color:var(--color-gray-700)}.tab-button.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}.tab-content{padding:18px 20px}.text-link{color:var(--color-primary);font-weight:700}.text-link:hover{text-decoration:underline}.key-value-list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.key-value-item{justify-content:space-between;align-items:center;gap:12px;display:flex}.key-value-item span{color:var(--color-gray-500);font-size:.82rem}.key-value-item strong{color:var(--color-gray-800);font-size:.9rem}.group-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.group-card{border:1px solid var(--color-gray-200);border-radius:var(--radius-lg);background-color:var(--surface-muted);gap:8px;padding:14px;display:grid}.group-card-header{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.group-card-header h3{color:var(--color-gray-800);margin:0;font-size:.95rem}.group-card-detail{color:var(--color-gray-600);margin:0;font-size:.82rem}.group-card-detail strong{color:var(--color-gray-700)}.auth-page{background:radial-gradient(circle at 90% 0%, #1d42891f 0%, transparent 36%), radial-gradient(circle at 0% 100%, #e8772229 0%, transparent 31%), var(--color-gray-50);place-items:center;min-height:100vh;padding:24px;display:grid}.auth-card{border:1px solid var(--color-gray-200);border-radius:var(--radius-xl);background-color:var(--surface);width:min(460px,100%);box-shadow:var(--shadow-md);padding:28px}.auth-title{font-family:var(--font-title);color:var(--color-secondary);margin:0;font-size:1.8rem;font-weight:400;line-height:1.1}.auth-description{color:var(--color-gray-500);margin:8px 0 0;font-size:.9rem}.auth-form{gap:14px;margin-top:20px;display:grid}.unauthorized-page{place-items:center;min-height:100vh;padding:24px;display:grid}.unauthorized-card{border-radius:var(--radius-lg);border:1px solid var(--color-gray-200);background-color:var(--surface);text-align:center;gap:12px;width:min(480px,100%);padding:28px;display:grid}.unauthorized-card h1{color:var(--color-gray-900);margin:0;font-size:1.4rem}.unauthorized-card p{color:var(--color-gray-500);margin:0}@keyframes pulse{0%{opacity:.6}50%{opacity:1}to{opacity:.6}}@media (width<=1280px){.kpi-grid.four,.kpi-grid.three,.filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.filter-actions{justify-content:flex-start}}@media (width<=1024px){.app-shell{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.app-sidebar{border-right:none;border-bottom:1px solid var(--color-gray-200);gap:12px;padding:12px}.sidebar-brand{padding:0 8px 10px}.sidebar-nav{gap:10px;display:flex;overflow-x:auto}.sidebar-group{gap:6px;min-width:max-content;display:flex}.sidebar-group-label{display:none}.sidebar-link{white-space:nowrap}.sidebar-footer{align-items:center;gap:10px;padding:10px 8px 0;display:flex}.sidebar-account{flex:1;min-width:0}.sidebar-logout{white-space:nowrap}.app-content{height:auto;min-height:0}.app-header{padding:12px 16px}.content-scroll{padding:16px}.split-grid{grid-template-columns:minmax(0,1fr)}}@media (width<=760px){.page-intro{gap:10px;display:grid}.kpi-grid.two,.kpi-grid.three,.kpi-grid.four,.filter-grid{grid-template-columns:minmax(0,1fr)}.pagination{flex-direction:column;align-items:flex-start}.group-grid{grid-template-columns:minmax(0,1fr)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-slide-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.modal-overlay{z-index:50;background:#11182773;place-items:center;padding:16px;animation:.12s modal-fade-in;display:grid;position:fixed;inset:0}.modal-panel{background:#fff;border-radius:12px;flex-direction:column;width:100%;max-height:calc(100vh - 48px);animation:.16s ease-out modal-slide-up;display:flex;box-shadow:0 20px 60px #1118272e}.modal-panel--sm{max-width:420px}.modal-panel--md{max-width:560px}.modal-panel--lg{max-width:720px}.modal-header{flex-shrink:0;justify-content:space-between;align-items:center;padding:20px 24px 0;display:flex}.modal-title{color:#1d4289;margin:0;font-size:1.05rem;font-weight:700}.modal-description{color:#6b7280;margin:4px 0 0;font-size:.83rem}.modal-close-btn{color:#9ca3af;cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:1.1rem;transition:background .12s,color .12s;display:grid}.modal-close-btn:hover{color:#374151;background:#f3f4f6}.modal-body{flex:1;gap:14px;padding:16px 24px;display:grid;overflow-y:auto}.modal-footer{border-top:1px solid #f3f4f6;flex-shrink:0;justify-content:flex-end;gap:10px;padding:12px 24px 20px;display:flex}.confirm-dialog{text-align:center;padding:28px 24px 20px}.confirm-dialog-icon{border-radius:999px;place-items:center;width:52px;height:52px;margin:0 auto 16px;font-size:1.4rem;display:grid}.confirm-dialog-icon--danger{color:#b91c1c;background:#fee2e2}.confirm-dialog-icon--warning{color:#92400e;background:#fef3c7}.confirm-dialog-title{color:#111827;margin:0 0 8px;font-size:1rem;font-weight:700}.confirm-dialog-description{color:#4b5563;margin:0 0 6px;font-size:.92rem}.confirm-dialog-detail{color:#9ca3af;margin:0 0 20px;font-size:.84rem}.confirm-dialog-footer{justify-content:center;gap:10px;display:flex}.form-field{flex-direction:column;gap:7px;display:flex}.form-field+.form-field{margin-top:16px}.field-label-new{color:#1f2937;letter-spacing:.01em;align-items:center;gap:4px;font-size:.85rem;font-weight:600;display:flex}.field-required{color:#e87722;font-size:.85rem;line-height:1}.input-field.field-invalid,.select-field.field-invalid{border-color:#b91c1c;box-shadow:0 0 0 3px #b91c1c1f}.field-hint{color:#9ca3af;font-size:.8rem;line-height:1.4}.field-error-msg{color:#b91c1c;align-items:center;gap:4px;font-size:.8rem;line-height:1.4;display:flex}.field-error-msg:before{content:"!";color:#fff;background:#b91c1c;border-radius:50%;flex-shrink:0;place-items:center;width:14px;height:14px;font-size:.72rem;font-weight:700;display:grid}.password-wrapper{align-items:center;display:flex;position:relative}.password-wrapper .input-field{flex:1;padding-right:40px}.password-toggle-btn{cursor:pointer;color:#9ca3af;background:0 0;border:none;border-radius:4px;place-items:center;padding:4px;font-size:1rem;transition:color .12s;display:grid;position:absolute;right:10px}.password-toggle-btn:hover{color:#374151}.password-strength{margin-top:6px}.password-strength-bar{background:#e5e7eb;border-radius:999px;height:4px;margin-bottom:4px;overflow:hidden}.password-strength-fill{border-radius:999px;height:100%;transition:width .3s,background .3s}.password-strength-fill--weak{background:#b91c1c;width:33%}.password-strength-fill--medium{background:#d97706;width:66%}.password-strength-fill--strong{background:#166534;width:100%}.password-strength-label{font-size:.75rem}.password-strength-label--weak{color:#b91c1c}.password-strength-label--medium{color:#d97706}.password-strength-label--strong{color:#166534}.inline-alert{border:1px solid #0000;border-radius:8px;align-items:flex-start;gap:10px;padding:12px 14px;font-size:.88rem;display:flex}.inline-alert--error{color:#b91c1c;background:#fef2f2;border-color:#fecaca}.inline-alert--warning{color:#92400e;background:#fffbeb;border-color:#fde68a}.inline-alert--info{color:#1e40af;background:#eff6ff;border-color:#bfdbfe}.inline-alert--success{color:#166534;background:#f0fdf4;border-color:#bbf7d0}.inline-alert-icon{flex-shrink:0;margin-top:1px;font-size:1rem}.inline-alert-content{flex:1}.inline-alert-title{margin-bottom:2px;font-weight:700}.inline-alert-close{cursor:pointer;opacity:.5;background:0 0;border:none;border-radius:4px;flex-shrink:0;padding:0;font-size:1rem;transition:opacity .12s}.inline-alert-close:hover{opacity:1}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:var(--spinner-size,18px);height:var(--spinner-size,18px);border:2px solid #0000001a;border-top-color:currentColor;border-radius:50%;flex-shrink:0;animation:.6s linear infinite spin;display:inline-block}.spinner--sm{--spinner-size:14px}.spinner--lg{--spinner-size:28px}.btn-loading{align-items:center;gap:8px;display:flex}@keyframes toast-enter{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}@keyframes toast-exit{0%{opacity:1;max-height:80px;margin-bottom:8px;transform:translate(0)}to{opacity:0;max-height:0;margin-bottom:0;transform:translate(24px)}}@keyframes toast-progress{0%{width:100%}to{width:0%}}.toast-container{z-index:100;pointer-events:none;flex-direction:column;gap:8px;width:340px;display:flex;position:fixed;bottom:24px;right:24px}.toast{pointer-events:all;border:1px solid #0000;border-radius:8px;align-items:flex-start;gap:10px;padding:12px 14px;animation:.2s ease-out toast-enter;display:flex;position:relative;overflow:hidden;box-shadow:0 4px 16px #1118271f}.toast--success{color:#166534;background:#f0fdf4;border-color:#bbf7d0}.toast--error{color:#b91c1c;background:#fef2f2;border-color:#fecaca}.toast--warning{color:#92400e;background:#fffbeb;border-color:#fde68a}.toast--info{color:#1e40af;background:#eff6ff;border-color:#bfdbfe}.toast-icon{flex-shrink:0;margin-top:1px;font-size:1rem}.toast-content{flex:1}.toast-message{font-size:.88rem;font-weight:600;line-height:1.4}.toast-detail{opacity:.8;margin-top:2px;font-size:.82rem}.toast-close{cursor:pointer;opacity:.5;background:0 0;border:none;border-radius:4px;flex-shrink:0;margin-left:auto;padding:2px;font-size:.9rem;transition:opacity .12s}.toast-close:hover{opacity:1}.toast-progress{opacity:.25;background:currentColor;height:2px;animation:4s linear forwards toast-progress;position:absolute;bottom:0;left:0}.dropzone{text-align:center;cursor:pointer;background:#fafafa;border:2px dashed #d1d5db;border-radius:12px;padding:40px 24px;transition:all .16s}.dropzone:hover,.dropzone--dragover{background:#e877220a;border-color:#e87722}.dropzone--has-file{cursor:default;background:#f0fdf4;border-style:solid;border-color:#166534}.dropzone--loading{cursor:not-allowed;opacity:.7}.dropzone-icon{margin-bottom:12px;font-size:2.4rem;display:block}.dropzone-title{color:#374151;font-size:.95rem;font-weight:600}.dropzone-sub{color:#6b7280;margin-top:4px;font-size:.85rem}.dropzone-hint{color:#9ca3af;margin-top:8px;font-size:.78rem}.dropzone-file-name{color:#166534;font-size:.9rem;font-weight:600}.dropzone-file-size{color:#6b7280;margin-top:4px;font-size:.82rem}.dropzone-file-clear{color:#6b7280;cursor:pointer;background:0 0;border:1px solid #d1d5db;border-radius:6px;margin-top:10px;padding:5px 12px;font-size:.82rem;transition:all .12s;display:inline-block}.dropzone-file-clear:hover{color:#e87722;border-color:#e87722}@keyframes menu-appear{0%{opacity:0;transform:scale(.95)translateY(-4px)}to{opacity:1;transform:scale(1)translateY(0)}}.row-menu{display:inline-block;position:relative}.row-menu-trigger{cursor:pointer;color:#9ca3af;opacity:0;background:0 0;border:none;border-radius:6px;place-items:center;width:30px;height:30px;font-size:1rem;transition:opacity .12s,background .12s,color .12s;display:grid}tr:hover .row-menu-trigger{opacity:1}.row-menu-trigger:hover{color:#374151;background:#f3f4f6}.row-menu-trigger.open{opacity:1;color:#374151;background:#f3f4f6}.row-menu-dropdown--portal{z-index:9999;transform-origin:100% 0;background:#fff;border:1px solid #e5e7eb;border-radius:8px;min-width:170px;padding:4px;animation:.12s ease-out menu-appear;box-shadow:0 8px 24px #1118271f,0 2px 8px #0000000f}.row-menu-dropdown--up{transform-origin:100% 100%;animation:.12s ease-out menu-appear-up}@keyframes menu-appear-up{0%{opacity:0;transform:scale(.95)translateY(4px)}to{opacity:1;transform:scale(1)translateY(0)}}.row-menu-item{color:#374151;cursor:pointer;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:6px;align-items:center;gap:8px;width:100%;padding:8px 12px;font-size:.88rem;transition:background .1s;display:flex}.row-menu-item-icon{color:#6b7280;flex-shrink:0;align-items:center;display:flex}.row-menu-item:hover{background:#f9fafb}.row-menu-item--danger{color:#b91c1c}.row-menu-item--danger:hover{background:#fef2f2}.row-menu-item--danger .row-menu-item-icon{color:#b91c1c}.row-menu-item:disabled{opacity:.45;cursor:not-allowed}.row-menu-divider{background:#f3f4f6;height:1px;margin:4px 0}.filter-controls{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.search-input-wrapper{flex:1;min-width:200px;max-width:320px;position:relative}.search-input-wrapper .input-field{padding-left:36px}.search-input-icon{color:#9ca3af;pointer-events:none;font-size:.95rem;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.filter-select{flex:1;min-width:160px;max-width:260px}.filter-clear-btn{color:#6b7280;cursor:pointer;white-space:nowrap;background:0 0;border:1px dashed #d1d5db;border-radius:6px;padding:8px 12px;font-size:.82rem;transition:border-color .12s,color .12s}.filter-clear-btn:hover{color:#e87722;border-color:#e87722}.filter-chip-remove{color:#1e40af;cursor:pointer;background:#bfdbfe;border:none;border-radius:50%;place-items:center;width:16px;height:16px;font-size:.7rem;line-height:1;transition:background .12s;display:grid}.filter-chip-remove:hover{background:#93c5fd}.filter-meta{color:#9ca3af;font-size:.82rem}.pagination-btn{color:#374151;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:6px;place-items:center;min-width:32px;height:32px;padding:0 10px;font-size:.83rem;transition:all .12s;display:grid}.pagination-btn:hover:not(:disabled){color:#e87722;border-color:#e87722}.pagination-btn:disabled{opacity:.45;cursor:not-allowed}.pagination-btn.active{color:#fff;background:#e87722;border-color:#e87722;font-weight:700}.pagination-ellipsis{color:#9ca3af;padding:0 6px;font-size:.83rem}.pagination-info{color:#6b7280;font-size:.83rem}.status-inactive{color:#4b5563;background-color:#f3f4f6}.status-inactive .status-dot{background-color:#9ca3af}.header-actions{align-items:center;gap:12px;margin-left:auto;display:flex}.header-user-menu{position:relative}.header-user-trigger{cursor:pointer;color:#374151;background:0 0;border:1px solid #e5e7eb;border-radius:8px;align-items:center;gap:8px;padding:6px 10px;transition:all .12s;display:flex}.header-user-trigger:hover{background:#e877220a;border-color:#e87722}.header-user-trigger.open{border-color:#e87722}.avatar-initial{color:#1d4289;background:#1d42891f;border-radius:50%;flex-shrink:0;place-items:center;width:26px;height:26px;font-size:.72rem;font-weight:800;display:grid}.user-name-short{text-overflow:ellipsis;white-space:nowrap;max-width:120px;font-size:.85rem;font-weight:600;overflow:hidden}.header-user-dropdown{z-index:30;background:#fff;border:1px solid #e5e7eb;border-radius:10px;min-width:220px;padding:4px;animation:.12s ease-out menu-appear;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 24px #1118271a}.user-dropdown-header{border-bottom:1px solid #f3f4f6;margin-bottom:4px;padding:10px 12px}.user-email{color:#374151;text-overflow:ellipsis;font-size:.83rem;font-weight:600;overflow:hidden}.user-role-badge{text-transform:uppercase;letter-spacing:.04em;border-radius:999px;margin-top:4px;padding:2px 7px;font-size:.72rem;font-weight:700;display:inline-block}.user-role-badge--admin{color:#6d28d9;background:#ede9fe}.user-role-badge--teacher{color:#1e40af;background:#dbeafe}.user-role-badge--student{color:#166534;background:#dcfce7}.dropdown-item{color:#374151;cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:9px;width:100%;padding:9px 12px;font-size:.88rem;transition:background .1s;display:flex}.dropdown-item:hover{background:#f9fafb}.dropdown-item--danger{color:#b91c1c}.dropdown-item--danger:hover{background:#fef2f2}.dropdown-divider{background:#f3f4f6;height:1px;margin:4px 0}.detail-page-back{color:#6b7280;border-radius:6px;align-items:center;gap:6px;width:fit-content;margin-bottom:12px;padding:6px 4px;font-size:.85rem;text-decoration:none;transition:color .12s;display:inline-flex}.detail-page-back:hover{color:#e87722}.detail-page-back--primary{color:#fff;background:#1d4289;border-radius:8px;gap:6px;padding:7px 14px 7px 10px;font-size:.84rem;font-weight:600;transition:background .15s,transform .12s;box-shadow:0 1px 4px #1d428940}.detail-page-back--primary:hover{color:#fff;background:#163472;transform:translate(-2px)}.detail-grid{grid-template-columns:minmax(0,2fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}@media (width<=900px){.detail-grid{grid-template-columns:1fr}}.info-grid{grid-template-columns:1fr 1fr;gap:16px 20px;display:grid}.info-item{flex-direction:column;gap:4px;display:flex}.info-item-label{color:#9ca3af;text-transform:uppercase;letter-spacing:.05em;align-items:center;gap:6px;font-size:.74rem;font-weight:600;display:flex}.info-item-value{color:#1f2937;font-size:.93rem;font-weight:500}.btn svg{flex-shrink:0}.group-name-cell{flex-direction:column;gap:4px;display:flex}.group-code{color:#1d4289;font-family:monospace;font-size:.9rem;font-weight:600}.teacher-cell{align-items:center;gap:8px;display:flex}.no-teacher-badge{color:#92400e;background:#fef3c7;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:.78rem;display:inline-flex}.count-badge{color:#374151;background:#f3f4f6;border:none;border-radius:999px;padding:2px 8px;font-size:.82rem;font-weight:600;display:inline-block}.count-badge--empty{color:#9ca3af;background:#fef2f2}.count-badge--link{cursor:pointer;text-decoration:none;transition:background .12s,color .12s}.count-badge--link:hover{color:#fff;background:#e87722}.teacher-card{background:#f9fafb;border-radius:8px;align-items:center;gap:12px;padding:14px;display:flex}.avatar-lg{color:#1e40af;background:#dbeafe;border-radius:50%;flex-shrink:0;place-items:center;width:44px;height:44px;font-size:1rem;font-weight:700;display:grid}.teacher-name{color:#1f2937;font-size:.9rem;font-weight:600}.teacher-email{color:#6b7280;font-size:.82rem}.no-teacher-state{text-align:center;color:#92400e;padding:20px;font-size:.88rem}.group-name-preview{background:linear-gradient(135deg,#eff6ff 0%,#f0fdf4 100%);border:1px solid #bfdbfe;border-radius:10px;flex-direction:column;gap:4px;padding:14px 16px;animation:.18s ease-out preview-appear;display:flex}@keyframes preview-appear{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.group-name-preview--empty{background:#f9fafb;border-color:#e5e7eb}.group-name-preview__label{text-transform:uppercase;letter-spacing:.06em;color:#6b7280;font-size:.72rem;font-weight:700}.group-name-preview__code{color:#1d4289;letter-spacing:.04em;font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-size:1.15rem;font-weight:700}.group-name-preview__placeholder{color:#9ca3af;font-size:.83rem;font-style:italic}.group-name-preview__hint{color:#64748b;margin-top:2px;font-size:.74rem;line-height:1.4}.form-row-2col{grid-template-columns:1fr 1fr;gap:12px;display:grid}.form-row-2col .form-field+.form-field{margin-top:0}@media (width<=480px){.form-row-2col{grid-template-columns:1fr}}.stat-list{flex-direction:column;gap:0;display:flex}.stat-item{border-bottom:1px solid #f3f4f6;justify-content:space-between;align-items:center;padding:10px 0;font-size:.88rem;display:flex}.stat-item:last-child{border-bottom:none}.stat-item-label{color:#6b7280}.stat-item-value{color:#111827;font-weight:700}.student-cell{align-items:center;gap:10px;display:flex}.student-info{flex-direction:column;gap:1px;display:flex}.student-name{color:#1f2937;font-size:.88rem;font-weight:600}.student-email{color:#6b7280;font-size:.78rem}.status-selector{flex-direction:column;gap:10px;display:flex}.status-option{cursor:pointer;text-align:left;background:#fff;border:1.5px solid #e5e7eb;border-radius:10px;align-items:center;gap:12px;padding:13px 14px 13px 0;transition:border-color .14s,background .14s;display:flex;position:relative;overflow:hidden}.status-option:before{content:"";background:#e5e7eb;flex-shrink:0;align-self:stretch;width:4px;min-width:4px;margin-right:12px;transition:background .14s}.status-option:hover{background:#f9fafb;border-color:#d1d5db}.status-option--active:before{background:#bbf7d0}.status-option--active:hover:before{background:#6ee7b7}.status-option--active.selected{background:#f0fdf4;border-color:#10b981}.status-option--active.selected:before{background:#10b981}.status-option--blocked:before{background:#fecaca}.status-option--blocked:hover:before{background:#fca5a5}.status-option--blocked.selected{background:#fef2f2;border-color:#ef4444}.status-option--blocked.selected:before{background:#ef4444}.status-option--inactive:before{background:#e5e7eb}.status-option--inactive:hover:before{background:#d1d5db}.status-option--inactive.selected{background:#f9fafb;border-color:#9ca3af}.status-option--inactive.selected:before{background:#9ca3af}.status-option-icon{color:#6b7280;background:#f3f4f6;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;transition:background .14s,color .14s;display:flex}.status-option--active .status-option-icon{color:#16a34a;background:#dcfce7}.status-option--blocked .status-option-icon{color:#dc2626;background:#fee2e2}.status-option--inactive .status-option-icon{color:#9ca3af;background:#f3f4f6}.status-option-body{flex:1;min-width:0}.status-option-title{color:#111827;font-size:.875rem;font-weight:600;line-height:1.3}.status-option-desc{color:#6b7280;margin-top:3px;font-size:.79rem;line-height:1.4}.status-option-radio{background:#fff;border:2px solid #d1d5db;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;margin-right:4px;transition:border-color .14s,background .14s;display:flex}.status-option-radio:after{content:"";opacity:0;background:#fff;border-radius:50%;width:7px;height:7px;transition:opacity .12s}.status-option.selected .status-option-radio:after{opacity:1}.status-option--active.selected .status-option-radio{background:#10b981;border-color:#10b981}.status-option--blocked.selected .status-option-radio{background:#ef4444;border-color:#ef4444}.status-option--inactive.selected .status-option-radio{background:#9ca3af;border-color:#9ca3af}.current-status-info{color:#6b7280;background:#f9fafb;border:1px solid #f3f4f6;border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;padding:10px 13px;font-size:.84rem;display:flex}.current-status-info strong{color:#374151;font-weight:600}.groups-table-compact{border-collapse:collapse;width:100%;font-size:.87rem}.groups-table-compact td{border-bottom:1px solid #f3f4f6;padding:8px 0}.groups-table-compact tr:last-child td{border-bottom:none}.quick-actions{flex-direction:column;gap:8px;display:flex}.btn-full{justify-content:center;width:100%}.import-page-grid{grid-template-columns:minmax(0,2fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}@media (width<=960px){.import-page-grid{grid-template-columns:1fr}}@media (width<=560px){.step-indicator{flex-wrap:wrap;gap:8px}.step-line{display:none}.step{font-size:.8rem}}.step-indicator{align-items:center;gap:0;margin-bottom:20px;display:flex}.step{align-items:center;gap:8px;font-size:.85rem;font-weight:600;display:flex}.step-number{color:#9ca3af;border:2px solid #e5e7eb;border-radius:50%;place-items:center;width:28px;height:28px;font-size:.8rem;font-weight:700;display:grid}.step--active .step-number{color:#fff;background:#e87722;border-color:#e87722}.step--done .step-number{color:#166534;background:#dcfce7;border-color:#86efac}.step--active .step-label{color:#e87722}.step--done .step-label{color:#166534}.step--pending .step-label{color:#9ca3af}.step-line{background:#e5e7eb;flex:1;height:2px;margin:0 8px}.step-line--done{background:#86efac}.import-processing-full{text-align:center;flex-direction:column;align-items:center;gap:16px;padding:48px 24px;display:flex}.result-metrics-grid{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}@media (width<=700px){.result-metrics-grid{grid-template-columns:repeat(2,1fr)}}.metric-card{text-align:center;background:#fff;border:1px solid #f3f4f6;border-radius:8px;padding:12px 14px}.metric-card--warning{background:#fffbeb;border-color:#fde68a}.metric-card--error{background:#fef2f2;border-color:#fecaca}.metric-card-value,.metric-value{color:#1f2937;font-size:1.6rem;font-weight:800;display:block}.metric-card--warning .metric-card-value,.metric-card--warning .metric-value{color:#92400e}.metric-card--error .metric-card-value,.metric-card--error .metric-value{color:#b91c1c}.metric-card-label,.metric-label{color:#9ca3af;margin-top:2px;font-size:.77rem;display:block}.result-detail-section{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.detail-section-header{cursor:pointer;text-align:left;color:#374151;background:#f9fafb;border:none;justify-content:space-between;align-items:center;width:100%;padding:12px 14px;font-size:.9rem;font-weight:700;transition:background .12s;display:flex}.detail-section-header:hover{background:#f3f4f6}.detail-section-body{padding:12px 14px}.result-errors-table{border-collapse:collapse;width:100%;font-size:.83rem}.result-errors-table th{text-align:left;color:#6b7280;background:#f9fafb;border-bottom:1px solid #e5e7eb;padding:6px 8px;font-size:.77rem;font-weight:600}.result-errors-table td{border-bottom:1px solid #f3f4f6;padding:7px 8px}.result-errors-table td:last-child{color:#b91c1c}.import-step-title{color:#1f2937;margin:0 0 4px;font-size:1rem;font-weight:700}.import-step-sub{color:#6b7280;margin:0 0 16px;font-size:.85rem}.import-step-footer{flex-direction:column;gap:10px;margin-top:16px;display:flex}.step-actions{justify-content:space-between;align-items:center;gap:10px;margin-top:16px;display:flex}.processing-steps-list{text-align:left;flex-direction:column;gap:8px;margin:12px 0 0;padding:0;list-style:none;display:flex}.processing-step{align-items:center;gap:8px;font-size:.88rem;display:flex}.processing-step--done{color:#166534}.processing-step--active{color:#e87722;font-weight:600}.processing-step--pending{color:#9ca3af}.processing-note{color:#9ca3af;font-size:.82rem}.result-page-header{text-align:center;padding:12px 0 20px}.result-icon{border-radius:50%;place-items:center;width:56px;height:56px;margin:0 auto 12px;font-size:1.5rem;display:grid}.result-icon--success{background:#dcfce7}.result-icon--partial{background:#fef3c7}.result-icon--error{background:#fee2e2}.result-title{color:#1f2937;margin:0;font-size:1.05rem;font-weight:700}.result-subtitle{color:#6b7280;margin:4px 0 0;font-size:.85rem}.result-actions{border-top:1px solid #f3f4f6;flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:4px;padding-top:12px;display:flex}.format-guide-columns{flex-direction:column;gap:8px;margin-bottom:16px;display:flex}.format-col-item{background:#f9fafb;border-radius:6px;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:6px 10px;min-width:0;padding:8px 10px;display:flex}.col-name{color:#1d4289;flex-shrink:0;font-family:monospace;font-size:.83rem;font-weight:700}.col-desc{color:#6b7280;word-break:break-word;overflow-wrap:break-word;flex:1;min-width:100px;font-size:.8rem}.col-req-badge{border-radius:999px;flex-shrink:0;padding:2px 6px;font-size:.72rem}.col-req-badge--required{color:#b91c1c;background:#fee2e2}.col-req-badge--optional{color:#9ca3af;background:#f3f4f6}.parser-title{color:#374151;margin:16px 0 8px;font-size:.83rem;font-weight:700}.parser-example{color:#f9fafb;background:#1f2937;border-radius:8px;margin:8px 0;padding:12px 14px;font-family:monospace;font-size:.83rem;overflow-x:auto}.parser-input{color:#e87722;white-space:nowrap;margin-bottom:8px;font-size:.95rem;font-weight:700}.parser-breakdown{flex-direction:column;gap:4px;display:flex}.parser-breakdown span{color:#9ca3af;white-space:nowrap}.parser-breakdown span strong{color:#f9fafb}.map-title{color:#374151;margin-bottom:8px;font-size:.83rem;font-weight:700}.status-map-table{border-collapse:collapse;width:100%;font-size:.82rem}.status-map-table td{word-break:break-word;border-bottom:1px solid #f3f4f6;padding:5px 8px}.status-map-table tr:last-child td{border-bottom:none}@media (width<=560px){.step-indicator{flex-wrap:wrap;gap:8px}.step-line{display:none}.step{font-size:.8rem}}.import-format-guide{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;margin-bottom:16px;padding:14px 16px}.guide-title{color:#374151;margin-bottom:10px;font-size:.88rem;font-weight:700}.guide-table{border-collapse:collapse;width:100%;font-size:.83rem}.guide-table th{text-align:left;color:#6b7280;background:#f1f5f9;border-bottom:1px solid #e2e8f0;padding:6px 10px;font-size:.78rem;font-weight:600}.guide-table td{color:#374151;border-bottom:1px solid #f1f5f9;padding:6px 10px}.guide-note{color:#9ca3af;margin-top:8px;font-size:.78rem}.import-processing{text-align:center;flex-direction:column;align-items:center;gap:14px;padding:48px 24px;display:flex}.processing-spinner{--spinner-size:44px}.processing-title{color:#1f2937;font-size:1rem;font-weight:600}.processing-sub{color:#9ca3af;font-size:.88rem}.import-result{flex-direction:column;gap:20px;display:flex}.import-result-header{text-align:center;padding:8px 0}.result-summary-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.result-stat{text-align:center;background:#f9fafb;border:1px solid #f3f4f6;border-radius:8px;padding:10px 12px}.result-stat-value{color:#1f2937;font-size:1.3rem;font-weight:800;display:block}.result-stat-label{color:#9ca3af;margin-top:2px;font-size:.75rem}.result-stat--error{background:#fef2f2;border-color:#fecaca}.result-stat--error .result-stat-value{color:#b91c1c}.result-section{flex-direction:column;gap:8px;display:flex}.result-section-title{color:#374151;font-size:.88rem;font-weight:700}.result-section-body{background:#fff;border:1px solid #e5e7eb;border-radius:8px;max-height:min(56vh,460px);overflow:auto}.result-table{border-collapse:collapse;width:100%;min-width:680px;font-size:.83rem}.result-table th{text-align:left;color:#6b7280;white-space:nowrap;z-index:1;background:#f9fafb;border-bottom:1px solid #e5e7eb;padding:8px 10px;font-size:.77rem;font-weight:600;position:sticky;top:0}.result-table td{color:#374151;vertical-align:top;border-bottom:1px solid #f3f4f6;padding:7px 10px}.result-table tr:last-child td{border-bottom:none}.result-errors-list{flex-direction:column;gap:4px;display:flex}.result-error-item{color:#b91c1c;background:#fef2f2;border-radius:6px;padding:7px 10px;font-size:.82rem}.credentials-table{border-collapse:collapse;width:100%;margin-top:10px;font-size:.85rem}.credentials-table th{text-align:left;color:#6b7280;background:#f9fafb;border-bottom:1px solid #e5e7eb;padding:8px 10px;font-size:.78rem}.credentials-table td{border-bottom:1px solid #f3f4f6;padding:8px 10px}.credentials-table tr:last-child td{border-bottom:none}.copy-btn{cursor:pointer;color:#6b7280;background:0 0;border:1px solid #e5e7eb;border-radius:4px;padding:3px 7px;font-size:.75rem;transition:all .12s}.copy-btn:hover{color:#e87722;border-color:#e87722}.copy-btn.copied{color:#166534;background:#f0fdf4;border-color:#166534}.unmatched-teachers-list{flex-direction:column;gap:8px;margin-top:10px;display:flex}.unmatched-item{background:#fffbeb;border:1px solid #fde68a;border-radius:6px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;display:flex}.unmatched-name{color:#92400e;font-size:.85rem;font-weight:600}.unmatched-group{color:#b45309;font-family:monospace;font-size:.78rem}.result-status{border-radius:8px;align-items:center;gap:8px;margin-bottom:4px;padding:10px 14px;font-size:.9rem;font-weight:600;display:flex}.result-status--success{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0}.result-status--partial{color:#92400e;background:#fffbeb;border:1px solid #fde68a}.result-status--error{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca}.import-stats-table{border:1px solid #e5e7eb;border-radius:10px;margin:12px 0;overflow:hidden}.import-stats-row{border-bottom:1px solid #f3f4f6;align-items:center;gap:16px;padding:9px 16px;display:flex}.import-stats-row:last-child{border-bottom:none}.import-stats-row:nth-child(2n){background:#fafafa}.import-stats-section{text-transform:uppercase;letter-spacing:.06em;color:#9ca3af;flex-shrink:0;min-width:68px;font-size:.72rem;font-weight:700}.import-stats-items{flex-wrap:wrap;flex:1;gap:4px 20px;display:flex}.import-stat-item{color:#6b7280;align-items:baseline;gap:4px;font-size:.85rem;display:flex}.import-stat-item strong{color:#111827;font-size:1.05rem;font-weight:700}.import-stat-item--warn strong{color:#d97706}.import-stat-item--err strong{color:#dc2626}.result-section{border:1px solid #e5e7eb;border-radius:8px;margin-top:8px;overflow:hidden}.result-section-toggle{cursor:pointer;color:#374151;text-align:left;background:#f9fafb;border:none;justify-content:space-between;align-items:center;width:100%;padding:10px 14px;font-size:.85rem;font-weight:600;transition:background .12s;display:flex}.result-section-toggle:hover{background:#f3f4f6}.unmatched-badge{border-radius:999px;align-items:center;gap:5px;padding:3px 8px;font-size:.8rem;font-weight:600;display:inline-flex}.unmatched-badge--assigning{color:#6b7280;background:#f3f4f6}.unmatched-badge--done{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0}.mobile-menu-btn{border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background-color:var(--surface);width:38px;height:38px;color:var(--color-gray-700);cursor:pointer;flex-shrink:0;justify-content:center;align-items:center;transition:background-color .14s,color .14s;display:none}.mobile-menu-btn:hover{background-color:var(--color-gray-100);color:var(--color-gray-900)}.mobile-menu-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.mobile-nav-overlay{z-index:40;background-color:var(--surface-overlay);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:.2s fadeInOverlay;display:none;position:fixed;inset:0}@keyframes fadeInOverlay{0%{opacity:0}to{opacity:1}}.mobile-nav-drawer{inset-block:0;z-index:50;width:var(--sidebar-mobile-width);background-color:var(--surface);max-width:85vw;box-shadow:var(--shadow-md);flex-direction:column;animation:.22s cubic-bezier(.16,1,.3,1) slideInDrawer;display:flex;position:fixed;left:0;overflow-y:auto}@keyframes slideInDrawer{0%{transform:translate(-100%)}to{transform:translate(0)}}.mobile-nav-header{border-bottom:1px solid var(--color-gray-200);flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px 12px;display:flex}.mobile-nav-header h2{font-family:var(--font-title);color:var(--color-secondary);margin:0;font-size:1.1rem;font-weight:400;line-height:1.1}.mobile-nav-close{border-radius:var(--radius-md);width:32px;height:32px;color:var(--color-gray-500);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;transition:background-color .14s,color .14s;display:inline-flex}.mobile-nav-close:hover{background-color:var(--color-gray-100);color:var(--color-gray-800)}.mobile-nav-body{flex-direction:column;flex:1;gap:8px;padding:12px 10px;display:flex;overflow-y:auto}.mobile-nav-divider{background-color:var(--color-gray-200);height:1px;margin:6px 0}.mobile-nav-footer{border-top:1px solid var(--color-gray-200);flex-direction:column;flex-shrink:0;gap:6px;padding:12px 10px;display:flex}.mobile-nav-user{border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background-color:var(--surface-muted);align-items:center;gap:10px;margin-bottom:4px;padding:8px;display:flex}.mobile-nav-user .avatar-initial{flex-shrink:0;width:36px;height:36px}.mobile-nav-user-info{flex:1;min-width:0}.mobile-nav-user-email{color:var(--color-gray-700);white-space:nowrap;text-overflow:ellipsis;font-size:.78rem;font-weight:600;overflow:hidden}.mobile-nav-user-role{margin-top:2px}.mobile-nav-action{border:1px solid var(--color-gray-200);border-radius:var(--radius-md);background-color:var(--surface);width:100%;color:var(--color-gray-700);cursor:pointer;text-align:left;align-items:center;gap:8px;padding:9px 10px;font-size:.82rem;font-weight:700;transition:background-color .14s,color .14s;display:flex}.mobile-nav-action:hover{background-color:var(--color-gray-100);color:var(--color-gray-900)}.mobile-nav-action--danger{color:var(--color-danger-text);background-color:var(--color-danger-bg);border-color:#fecaca}.mobile-nav-action--danger:hover{background-color:#fecaca}@media (width<=1024px){.app-shell{grid-template-columns:minmax(0,1fr)}.app-sidebar{display:none}.mobile-menu-btn{display:inline-flex}.mobile-nav-overlay{display:block}.content-scroll{padding:16px}.app-header{padding:10px 16px}.header-actions{display:none}}@media (width<=640px){.content-scroll{padding:12px}.app-header{min-height:54px;padding:8px 12px}.kpi-grid.four,.kpi-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.split-grid{grid-template-columns:minmax(0,1fr)}.filter-grid{grid-template-columns:1fr}.page-intro{flex-direction:column;align-items:flex-start}}@media (width<=768px){.challenge-grid{gap:8px}.at-risk-item{flex-wrap:wrap;gap:8px}.at-risk-info{flex:100%}.chart-panel{height:180px}.evaluation-rubric{gap:6px}.rubric-item{min-width:60px}}@media (width<=480px){.challenge-grid{grid-template-columns:1fr}.chart-panel{height:160px}.metrics-section-title{font-size:.9rem}}.metrics-section{margin-top:32px}.metrics-section-title{color:#111827;letter-spacing:-.01em;border-bottom:2px solid #f3f4f6;margin:0 0 16px;padding-bottom:10px;font-size:1rem;font-weight:700}.chart-panel{width:100%;height:220px;position:relative}.chart-empty{color:#9ca3af;background:#f9fafb;border:1px dashed #e5e7eb;border-radius:8px;justify-content:center;align-items:center;height:100%;font-size:.875rem;display:flex}.chart-legend{border-top:1px solid #f3f4f6;flex-direction:column;gap:6px;margin-top:12px;padding-top:10px;display:flex}.chart-legend-item{color:#374151;align-items:center;gap:6px;min-width:0;font-size:.8rem;display:flex}.chart-legend-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.session-mode-badge{white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:2px 9px;font-size:.78rem;font-weight:600;display:inline-flex}.session-mode-badge--free-conversation{color:#c05c0c;background:#e877221a}.session-mode-badge--roleplay{color:#1d4289;background:#1d42891a}.session-mode-badge--weekly-challenge{color:#15803d;background:#16a34a1a}.challenge-grid{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.challenge-week-card{background:#fff;border:1.5px solid #e5e7eb;border-radius:10px;flex-direction:column;gap:6px;min-width:0;padding:12px 14px;display:flex}.challenge-week-card--completed{background:#f0fdf4;border-color:#bbf7d0}.challenge-week-card--in-progress{background:#fffbeb;border-color:#fde68a}.challenge-week-card--pending{background:#f9fafb;border-color:#e5e7eb}.challenge-week-card--abandoned{background:#fef2f2;border-color:#fecaca}.challenge-week-number{color:#6b7280;text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;font-weight:700}.challenge-week-type{color:#374151;background:#f3f4f6;border-radius:4px;width:fit-content;padding:1px 7px;font-size:.72rem;font-weight:600;display:inline-block}.challenge-week-card--completed .challenge-week-type{color:#15803d;background:#dcfce7}.challenge-week-card--in-progress .challenge-week-type{color:#854d0e;background:#fef9c3}.challenge-week-card--abandoned .challenge-week-type{color:#b91c1c;background:#fee2e2}.challenge-week-rate{color:#111827;margin-top:2px;font-size:1.15rem;font-weight:700;line-height:1}.challenge-week-card--completed .challenge-week-rate{color:#15803d}.challenge-week-card--abandoned .challenge-week-rate{color:#b91c1c}.challenge-week-bar{background:#e5e7eb;border-radius:999px;height:5px;margin-top:2px;overflow:hidden}.challenge-week-fill{background:#9ca3af;border-radius:999px;height:100%;transition:width .3s}.challenge-week-card--completed .challenge-week-fill{background:#16a34a}.challenge-week-card--in-progress .challenge-week-fill{background:#d97706}.challenge-week-card--abandoned .challenge-week-fill{background:#dc2626}.evaluation-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:12px;padding:16px}.evaluation-card:last-child{margin-bottom:0}.evaluation-card header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;display:flex}.evaluation-summary{color:#374151;margin:0 0 12px;font-size:.875rem;line-height:1.5}.evaluation-rubric{border-top:1px solid #f3f4f6;flex-wrap:wrap;gap:8px;padding-top:12px;display:flex}.rubric-item{flex-direction:column;align-items:center;gap:3px;min-width:72px;display:flex}.rubric-item-label{color:#6b7280;text-transform:capitalize;text-align:center;font-size:.7rem}.rubric-score{border-radius:6px;padding:2px 8px;font-size:1rem;font-weight:700}.rubric-score--high{color:#15803d;background:#dcfce7}.rubric-score--medium{color:#854d0e;background:#fef9c3}.rubric-score--low{color:#b91c1c;background:#fee2e2}.at-risk-list{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.at-risk-item{background:#fffbeb;border:1px solid #fde68a;border-radius:8px;flex-wrap:wrap;align-items:center;gap:12px;padding:10px 14px;display:flex}.at-risk-info{flex:1;min-width:0}.at-risk-name{color:#111827;white-space:nowrap;text-overflow:ellipsis;font-size:.875rem;font-weight:600;display:block;overflow:hidden}.at-risk-meta{color:#6b7280;margin-top:1px;font-size:.78rem;display:block}.days-since-label{white-space:nowrap;border-radius:999px;flex-shrink:0;padding:2px 9px;font-size:.8rem;font-weight:600}.days-since-label--warning{color:#854d0e;background:#fef9c3}.days-since-label--critical{color:#b91c1c;background:#fee2e2}.input-source-bars{flex-direction:column;gap:12px;display:flex}.input-source-row{align-items:center;gap:10px;display:flex}.input-source-label{color:#374151;min-width:44px;font-size:.82rem;font-weight:500}.input-source-bar{background:#f3f4f6;border-radius:999px;flex:1;height:8px;overflow:hidden}.input-source-fill{border-radius:999px;height:100%;transition:width .4s}.input-source-fill--text{background:#e87722}.input-source-fill--voice{background:#1d4289}.input-source-pct{color:#374151;text-align:right;min-width:36px;font-size:.8rem;font-weight:600}.stat-trend{border-radius:999px;align-items:center;gap:3px;padding:1px 6px;font-size:.78rem;font-weight:600;display:inline-flex}.stat-trend--up{color:#15803d;background:#dcfce7}.stat-trend--down{color:#b91c1c;background:#fee2e2}.stat-trend--neutral{color:#6b7280;background:#f3f4f6}@media (width<=768px){.challenge-grid{gap:8px}.at-risk-item{flex-wrap:wrap;gap:8px}.at-risk-info{flex:100%}.chart-panel{height:180px}.evaluation-rubric{gap:6px}.rubric-item{min-width:60px}}@media (width<=480px){.challenge-grid{grid-template-columns:1fr}.chart-panel{height:160px}.metrics-section-title{font-size:.9rem}}
