:root{--ink:#16211d;--paper:#f2f6f3;--chalkboard:#1f6f54;--red-ink:#b23a2e;--gold:#c88a2e;--bg:var(--paper);--bg-subtle:#e8eee9;--surface:#fff;--text:var(--ink);--text-muted:#55635c;--text-subtle:#8a968f;--border:#dce6df;--border-subtle:#e9f0ea;--border-hover:#c4d2c8;--primary:var(--chalkboard);--primary-hover:#17573f;--primary-active:#103f2d;--primary-soft:#e7f2ec;--primary-border:#bfe0ce;--border-focus:var(--primary);--danger:var(--red-ink);--danger-hover:#8f2e24;--danger-soft:#f6e7e4;--danger-border:#e7c3bc;--success:#16a34a;--success-soft:#f0fdf4;--success-border:#bbf7d0;--warning:var(--gold);--warning-soft:#fbf1df;--warning-border:#ead3a0;--radius-lg:14px;--radius:10px;--radius-sm:7px;--radius-full:9999px;--shadow-xs:0 1px 2px #16211d0d;--shadow:0 1px 3px #16211d12, 0 1px 2px #16211d0d;--shadow-md:0 4px 6px -1px #16211d14, 0 2px 4px -2px #16211d0d;--shadow-lg:0 10px 15px -3px #16211d17, 0 4px 6px -4px #16211d0d;--shadow-xl:0 20px 25px -5px #16211d1f, 0 8px 10px -6px #16211d0f;--sidebar-width:240px;--sidebar-bg:#14231d;--sidebar-border:#22352c;--sidebar-text:#9ab0a5;--sidebar-text-active:#fff;--font-sans:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-display:var(--font-display-family), var(--font-sans)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#101a16;--bg-subtle:#16221c;--surface:#182a23;--text:#eaf1ec;--text-muted:#a9bab1;--text-subtle:#7c8f85;--border:#26382f;--border-subtle:#1e2d26;--border-hover:#34493d;--primary:#3fae87;--primary-hover:#4fc296;--primary-active:#2f8a6a;--primary-soft:#1b3329;--primary-border:#2f5546;--danger:#e07767;--danger-hover:#e88f81;--danger-soft:#3a231f;--danger-border:#5c342c;--success:#4ade80;--success-soft:#163024;--success-border:#2c5240;--warning:#e0ab52;--warning-soft:#3a2f19;--warning-border:#5c4a28;--sidebar-bg:#0b1512;--sidebar-border:#1b2b23;--sidebar-text:#8fa89b;--sidebar-text-active:#fff}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;height:100%}html,body{max-width:100vw;overflow-x:hidden}body{min-height:100%;color:var(--text);background-color:var(--bg);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:14px;line-height:1.5}a{color:var(--primary);font-weight:500;text-decoration:none;transition:color .15s}a:hover{color:var(--primary-hover);text-decoration:underline}h1,h2,h3,h4,h5,h6{color:var(--text);font-family:var(--font-display);letter-spacing:-.015em;text-wrap:balance;margin:0;font-weight:600;line-height:1.25}h1{letter-spacing:-.025em;margin-bottom:4px;font-size:22px;font-weight:700}h2{margin-bottom:14px;font-size:17px}h3{margin-bottom:12px;font-size:15px}p{color:var(--text-muted);margin:0 0 10px;line-height:1.6}.auth-page{background:radial-gradient(circle at 50% 0,#dceee3 0%,#e8eee9 50%,#f2f6f3 100%);justify-content:center;align-items:center;min-height:100vh;padding:32px 16px;display:flex;position:relative;overflow:hidden}.auth-page:before{content:"";pointer-events:none;background:radial-gradient(circle,#1f6f541a 0%,#1f6f5400 70%);width:680px;height:680px;position:absolute;top:-120px;left:50%;transform:translate(-50%)}.auth-card{background:var(--surface);border-radius:var(--radius-lg);z-index:1;border:1px solid #dce6dfe6;width:100%;max-width:440px;padding:38px 34px;position:relative;box-shadow:0 20px 25px -5px #16211d14,0 8px 10px -6px #16211d0a,inset 0 0 0 1px #fffc}.auth-header{text-align:center;flex-direction:column;align-items:center;margin-bottom:24px;display:flex}.auth-logo-badge{color:#fff;background:linear-gradient(135deg,#2f8a6b 0%,#17573f 100%);border-radius:18px;justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:14px;display:flex;box-shadow:0 10px 20px -3px #1f6f5459,0 4px 6px -4px #1f6f5433}.auth-school-name{text-transform:uppercase;letter-spacing:.05em;color:var(--primary);margin-bottom:4px;font-size:13px;font-weight:700}.auth-card h1{color:var(--text);letter-spacing:-.025em;margin-bottom:6px;font-size:24px;font-weight:700}.auth-subtitle{color:var(--text-muted);margin:0;font-size:14px;line-height:1.4}.auth-card .form{max-width:none}.auth-features{border-top:1px solid var(--border-subtle);flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin-top:26px;padding-top:20px;display:flex}.auth-feature-item{color:var(--text-muted);background:var(--bg-subtle);border-radius:var(--radius-full);border:1px solid var(--border);align-items:center;gap:5px;padding:4px 10px;font-size:12px;font-weight:500;display:inline-flex}.auth-feature-item svg{color:var(--primary)}.input-with-icon{align-items:center;width:100%;display:flex;position:relative}.field-icon{color:var(--text-subtle);pointer-events:none;justify-content:center;align-items:center;transition:color .15s;display:flex;position:absolute;top:50%;left:13px;transform:translateY(-50%)}.input-with-icon input,.input-with-icon input[type=text],.input-with-icon input[type=password],.input-with-icon input[type=email]{padding-left:42px!important;padding-right:42px!important}.input-with-icon:focus-within .field-icon{color:var(--primary)}.toggle-password-btn{box-shadow:none;color:var(--text-subtle);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;justify-content:center;align-items:center;width:32px;height:32px;min-height:32px;max-height:32px;padding:0;line-height:1;transition:color .15s,background-color .15s;display:flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)!important}.toggle-password-btn:hover{color:var(--text);background:#16211d0d}.toggle-password-btn:active{background:#16211d14;transform:translateY(-50%)!important}.login-submit-btn{gap:8px;width:100%;height:42px;margin-top:6px;padding:11px 18px;font-size:15px;box-shadow:0 4px 6px -1px #1f6f5440,0 2px 4px -2px #1f6f5426}.login-submit-btn:hover:not(:disabled){box-shadow:0 6px 12px -2px #1f6f5459,0 3px 6px -3px #1f6f5433}.app-shell{background-color:var(--bg);min-height:100vh;display:flex}.sidebar{width:var(--sidebar-width);background:var(--sidebar-bg);border-right:1px solid var(--sidebar-border);color:var(--sidebar-text);flex-direction:column;flex-shrink:0;gap:6px;padding:20px 14px;display:flex}.sidebar-brand{color:#fff;letter-spacing:-.01em;border-bottom:1px solid var(--sidebar-border);align-items:center;gap:12px;margin-bottom:8px;padding:6px 10px 20px;font-size:16px;font-weight:700;display:flex}.sidebar-brand-icon{color:#d9a441;flex-shrink:0}.sidebar-brand-text{flex-direction:column;line-height:1.25;display:flex}.sidebar-brand-school{letter-spacing:.05em;color:#d9a441;text-transform:uppercase;font-size:11px;font-weight:600}.sidebar-brand-title{font-family:var(--font-display);color:#fff;font-size:15px;font-weight:700}.sidebar-nav{flex-direction:column;gap:4px;display:flex}.sidebar-link{border-radius:var(--radius-sm);color:var(--sidebar-text);align-items:center;gap:10px;padding:11px 14px;font-size:14px;font-weight:500;text-decoration:none;transition:background-color .15s,color .15s;display:flex}.sidebar-link-text{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.sidebar-link-badge{text-transform:uppercase;letter-spacing:.04em;color:var(--warning);border-radius:var(--radius-full);white-space:nowrap;background:#c88a2e29;flex-shrink:0;margin-left:auto;padding:2px 7px;font-size:10px;font-weight:700}.sidebar-icon{color:var(--sidebar-text);flex-shrink:0;transition:color .15s}.sidebar-link:hover{color:#fff;background:#ffffff12;text-decoration:none}.sidebar-link:hover .sidebar-icon,.sidebar-link.active .sidebar-icon{color:#fff}.sidebar-link.active{background:var(--primary);color:#fff;box-shadow:0 1px 3px #1f6f5459}.app-main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--border);z-index:20;background:#fffffff2;justify-content:space-between;align-items:center;padding:16px 28px;display:flex;position:sticky;top:0}.topbar-title-wrap{align-items:center;gap:12px;display:flex}.topbar strong{font-family:var(--font-display);color:var(--text);letter-spacing:-.01em;font-size:18px;font-weight:700;line-height:1.2}.topbar .row{flex-wrap:nowrap;gap:12px}.topbar-user-badge{color:var(--text);background:var(--bg-subtle);border-radius:var(--radius-full);border:1px solid var(--border);box-shadow:var(--shadow-xs);align-items:center;gap:8px;padding:7px 14px;font-size:13px;font-weight:600;display:inline-flex}.topbar-user-badge svg{color:var(--primary)}.btn-with-icon{align-items:center;gap:8px;display:inline-flex}.topbar-user{color:var(--text-muted);font-size:13px}.page{flex:1;width:100%;margin:0;padding:24px 28px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:24px;padding:24px;transition:box-shadow .2s}.card-header{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;margin-bottom:18px;padding-bottom:14px;display:flex}.card-header h1{margin-bottom:0}.form{flex-direction:column;gap:16px;max-width:440px;display:flex}.form.inline{max-width:none}.field{color:#3a4a40;flex-direction:column;gap:6px;font-size:13px;font-weight:500;display:flex}label.row.field{cursor:pointer;flex-direction:row;align-items:center;gap:10px}label.row.field span{color:var(--text);font-size:14px;font-weight:400}input[type=text],input[type=password],input[type=email],input:not([type]),select{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;height:40px;color:var(--text);background-color:var(--surface);box-shadow:var(--shadow-xs);padding:8px 12px;font-family:inherit;font-size:14px;transition:border-color .15s,box-shadow .15s}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='%2364748b' stroke-width='2'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;background-size:16px 16px;padding-right:36px}input:focus,select:focus{border-color:var(--border-focus);outline:none;box-shadow:0 0 0 3px #1f6f5426}input::placeholder{color:var(--text-subtle)}input[type=checkbox]{width:18px;height:18px;accent-color:var(--primary);cursor:pointer;margin:0}button{border-radius:var(--radius-sm);background:var(--primary);color:#fff;cursor:pointer;white-space:nowrap;height:38px;box-shadow:var(--shadow-xs);border:1px solid #0000;justify-content:center;align-items:center;padding:0 16px;font-family:inherit;font-size:14px;font-weight:500;line-height:1;transition:background-color .15s,border-color .15s,box-shadow .15s,transform 50ms;display:inline-flex}button:hover:not(:disabled){background:var(--primary-hover)}button:active:not(:disabled){background:var(--primary-active);transform:translateY(1px)}button:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--primary);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}button.secondary{background:var(--surface);color:#3a4a40;border:1px solid var(--border);box-shadow:var(--shadow-xs)}button.secondary:hover:not(:disabled){background:var(--bg-subtle);color:var(--text);border-color:#c4d2c8}button.danger{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-border)}button.danger:hover:not(:disabled){color:var(--danger-hover);background:#f3e0dc;border-color:#dba79e}a.btn-with-icon{border-radius:var(--radius-sm);background:var(--primary);color:#fff;height:38px;box-shadow:var(--shadow-xs);justify-content:center;align-items:center;padding:0 16px;font-size:14px;font-weight:500;display:inline-flex}a.btn-with-icon.secondary{background:var(--surface);color:var(--text);border:1px solid var(--border);box-shadow:var(--shadow-xs)}a.btn-with-icon.secondary:hover{background:var(--bg-subtle);border-color:var(--border-hover);color:var(--text)}a.btn-with-icon:hover{background:var(--primary-hover);color:#fff;text-decoration:none}.error{color:var(--danger);background:var(--danger-soft);border:1px solid var(--danger-border);border-radius:var(--radius-sm);align-items:center;gap:8px;margin:0;padding:10px 14px;font-size:13px;font-weight:500;display:flex}.error svg{flex-shrink:0}.table-wrap{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);overflow-x:auto}table{border-collapse:collapse;text-align:left;width:100%}thead{background:var(--bg)}th{text-align:left;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);border-bottom:1px solid var(--border);white-space:nowrap;padding:12px 16px;font-size:12px;font-weight:600}td{text-align:left;border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle;padding:14px 16px;font-size:14px}tbody tr:last-child td{border-bottom:none}tbody tr{transition:background-color .1s}tbody tr:hover{background:#f2f6f3}td .row{gap:8px}td a{border-radius:4px;align-items:center;padding:4px 8px;font-weight:500;display:inline-flex}td a:hover{background:var(--primary-soft)}td strong{background:var(--warning-soft);color:var(--warning);border:1px solid var(--warning-border);border-radius:4px;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:13px}.badge{border-radius:var(--radius-full);align-items:center;gap:5px;padding:3px 10px;font-size:12px;font-weight:600;line-height:1.3;display:inline-flex}.badge.on{background:var(--success-soft);color:var(--success);border:1px solid var(--success-border)}.badge.on:before{content:"";background:var(--success);border-radius:50%;width:6px;height:6px;display:inline-block}.badge.off{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-border)}.badge.off:before{content:"";background:var(--danger);border-radius:50%;width:6px;height:6px;display:inline-block}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.empty-state{color:var(--text-muted);text-align:center;background:var(--bg);border:1px dashed var(--border);border-radius:var(--radius-sm);margin:0;padding:36px 16px;font-size:14px}.modal-backdrop{-webkit-backdrop-filter:blur(4px);z-index:50;background:#16211d8c;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--radius-lg);width:min(92vw,420px);box-shadow:var(--shadow-xl);border:1px solid var(--border);flex-direction:column;gap:16px;padding:28px;display:flex}.modal h2,.modal h3{margin-top:0;margin-bottom:2px}.modal>button.secondary{align-self:flex-end}.dashboard-banner{border:1px solid var(--primary-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);background:linear-gradient(135deg,#e7f2ec 0%,#dceee3 100%);margin-bottom:24px;padding:24px 28px}.dashboard-badge{text-transform:uppercase;letter-spacing:.06em;color:var(--primary);border-radius:var(--radius-full);border:1px solid var(--primary-border);background:#ffffffd9;margin-bottom:8px;padding:3px 10px;font-size:11px;font-weight:700;display:inline-block}.dashboard-banner h1{color:#123c2e;margin-bottom:6px;font-size:22px;font-weight:700}.dashboard-banner p{color:#1f6f54;margin:0;font-size:14px}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px;display:grid}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);align-items:center;gap:16px;padding:18px 20px;transition:transform .15s,box-shadow .15s;display:flex}.stat-card:hover{box-shadow:var(--shadow);transform:translateY(-2px)}.stat-icon-wrap{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:48px;height:48px;display:flex}.stat-icon-wrap.primary{background:var(--primary-soft);color:var(--primary)}.stat-icon-wrap.success{background:var(--success-soft);color:var(--success)}.stat-icon-wrap.warning{background:var(--warning-soft);color:var(--warning)}.stat-icon-wrap.danger{background:var(--danger-soft);color:var(--danger)}.stat-details{flex-direction:column;display:flex}.stat-label{color:var(--text-muted);font-size:12px;font-weight:500}.stat-value{color:var(--text);font-variant-numeric:tabular-nums;font-size:22px;font-weight:700;line-height:1.2}.classes-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;display:grid}.class-item-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);flex-direction:column;justify-content:space-between;gap:16px;padding:20px;transition:all .2s;display:flex}.class-item-card:hover{border-color:var(--primary-border);box-shadow:var(--shadow-md);transform:translateY(-2px)}.class-item-header{justify-content:space-between;align-items:center;display:flex}.class-item-badge{color:var(--text);align-items:center;gap:8px;font-size:16px;font-weight:700;display:inline-flex}.class-item-badge svg{color:var(--primary)}.class-meta-row{background:var(--bg);border-radius:var(--radius-sm);justify-content:space-between;align-items:center;padding:10px 12px;font-size:13px;display:flex}.class-meta-label{color:var(--text-muted)}.class-meta-value{color:var(--text);font-weight:600}.class-item-footer{border-top:1px solid var(--border-subtle);padding-top:14px}.class-action-btn{border-radius:var(--radius-sm);background:var(--primary-soft);width:100%;color:var(--primary);justify-content:space-between;align-items:center;padding:9px 14px;font-size:13px;font-weight:600;transition:all .15s;display:flex}.class-action-btn:hover{background:var(--primary);color:#fff;text-decoration:none}.class-action-btn svg{transition:transform .15s}.class-action-btn:hover svg{transform:translate(4px)}.breadcrumb-nav{margin-bottom:16px}.back-link{color:var(--text-muted);align-items:center;gap:6px;font-size:13px;font-weight:500;transition:color .15s;display:inline-flex}.back-link:hover{color:var(--primary);text-decoration:none}.class-header-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:24px;padding:24px 24px 0}.class-header-main{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:20px;display:flex}.class-tag{text-transform:uppercase;letter-spacing:.05em;color:var(--primary);background:var(--primary-soft);border-radius:var(--radius-sm);margin-bottom:6px;padding:2px 8px;font-size:11px;font-weight:700;display:inline-block}.class-header-stats{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.class-stat-badge{color:#3a4a40;background:var(--bg);border-radius:var(--radius-full);border:1px solid var(--border);align-items:center;gap:6px;padding:6px 12px;font-size:13px;font-weight:600;display:inline-flex}.class-stat-badge svg{color:var(--primary)}.tab-bar{border-bottom:1px solid var(--border);gap:8px;display:flex;overflow-x:auto}.tab-btn{height:44px;color:var(--text-muted);box-shadow:none;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;align-items:center;gap:8px;padding:0 16px;font-size:14px;font-weight:500;transition:all .15s;display:inline-flex}.tab-btn:hover{color:var(--text);background:0 0}.tab-btn.active{color:var(--primary);border-bottom-color:var(--primary);background:0 0;font-weight:600}.tab-btn.active svg{color:var(--primary)}.assignment-list{flex-direction:column;gap:16px;display:flex}.assignment-teacher-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);flex-direction:column;gap:14px;padding:20px;transition:border-color .15s;display:flex}.assignment-teacher-card:hover{border-color:#c4d2c8}.assignment-teacher-header{justify-content:space-between;align-items:flex-start;display:flex}.assignment-meta-row{flex-wrap:wrap;align-items:center;gap:14px;margin-top:4px;display:flex}.assignment-meta-item{color:var(--text-muted);align-items:center;gap:5px;font-size:13px;display:inline-flex}.assignment-desc{color:#3a4a40;margin:0;font-size:14px;line-height:1.5}.assignment-progress-bar-wrap{background:var(--bg);border-radius:var(--radius-sm);flex-direction:column;gap:6px;padding:10px 14px;display:flex}.assignment-progress-meta{color:var(--text-muted);justify-content:space-between;font-size:12px;display:flex}.progress-track{background:#dce6df;border-radius:999px;height:7px;overflow:hidden}.progress-fill{background:var(--primary);border-radius:999px;height:100%;transition:width .3s}.assignment-teacher-footer{border-top:1px solid var(--border-subtle);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding-top:14px;display:flex}.filter-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:20px;display:flex}.filter-pills{flex-wrap:wrap;gap:6px;display:flex}.filter-pill{border-radius:var(--radius-full);background:var(--bg);height:auto;color:var(--text-muted);border:1px solid var(--border);box-shadow:none;cursor:pointer;padding:6px 14px;font-size:13px;font-weight:500;transition:all .15s}.filter-pill:hover{background:var(--bg-subtle);color:var(--text)}.filter-pill.active{background:var(--primary);color:#fff;border-color:var(--primary)}.score-badge{color:var(--success);background:var(--success-soft);border:1px solid var(--success-border);border-radius:var(--radius-sm);font-variant-numeric:tabular-nums;padding:2px 8px;font-size:13px;font-weight:700;display:inline-block}.grading-panel{flex-direction:column;display:flex}.grading-file-box{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);justify-content:space-between;align-items:center;margin-top:8px;padding:12px 14px;display:flex}.feedback-textarea{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;color:var(--text);background:var(--surface);resize:vertical;min-height:72px;padding:10px 12px;font-family:inherit;font-size:14px}.feedback-textarea:focus{border-color:var(--border-focus);outline:none;box-shadow:0 0 0 3px #1f6f5426}.loading-text{text-align:center;color:var(--text-muted);padding:32px 0;font-size:14px}.header-icon{color:var(--primary);flex-shrink:0}@media (max-width:768px){.app-shell{flex-direction:column}.sidebar{border-right:none;border-bottom:1px solid var(--sidebar-border);flex-direction:row;align-items:center;gap:8px;width:100%;padding:10px 14px;overflow-x:auto}.sidebar-brand{border-bottom:none;border-right:1px solid var(--sidebar-border);white-space:nowrap;margin-bottom:0;padding:0 14px 0 0;font-size:14px}.sidebar-link{white-space:nowrap;padding:8px 12px;font-size:13px}.topbar{padding:12px 16px}.page{padding:16px}.card{margin-bottom:16px;padding:16px}.form{max-width:100%}}.file-preview-modal{background:var(--surface);border-radius:var(--radius-md);width:min(94vw,860px);max-width:860px;max-height:92vh;box-shadow:var(--shadow-lg);flex-direction:column;padding:20px;display:flex}.file-preview-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding-bottom:14px;display:flex}.file-preview-title{color:var(--text-heading);align-items:center;gap:8px;min-width:0;font-size:15px;font-weight:600;display:flex}.file-preview-name{white-space:nowrap;text-overflow:ellipsis;max-width:400px;overflow:hidden}.file-type-badge{color:var(--primary);background:var(--primary-soft);border-radius:4px;flex-shrink:0;padding:2px 6px;font-size:11px;font-weight:700}.close-preview-btn{cursor:pointer;color:var(--text-muted);border-radius:var(--radius-sm);background:0 0;border:none;justify-content:center;align-items:center;padding:6px;transition:all .2s;display:flex}.close-preview-btn:hover{background:var(--surface-hover);color:var(--text)}.file-preview-body{flex:1;justify-content:center;align-items:center;min-height:300px;padding:16px 0;display:flex;overflow-y:auto}.preview-loading{color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.preview-image-wrap{justify-content:center;width:100%;max-height:72vh;display:flex;overflow:auto}.preview-image{object-fit:contain;border-radius:var(--radius-sm);max-width:100%;max-height:70vh;box-shadow:var(--shadow-sm);background:#fff}.preview-iframe{border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;width:100%;height:72vh}.docx-preview-box{text-align:center;background:var(--surface-alt);border:1px dashed var(--border);border-radius:var(--radius-md);flex-direction:column;align-items:center;max-width:480px;padding:36px 20px;display:flex}.docx-icon-wrap{color:#1f6f54;justify-content:center;align-items:center;margin-bottom:12px;display:flex}.progress-detail-toggle-btn{color:var(--primary);cursor:pointer;border-radius:var(--radius-sm);box-shadow:none;background:0 0;border:none;align-items:center;gap:6px;padding:4px 6px;font-size:12px;font-weight:600;transition:all .15s;display:inline-flex}.progress-detail-toggle-btn:hover{background:var(--primary-soft);color:var(--primary-hover)}.assignment-progress-detail-box{border-top:1px dashed var(--border);flex-direction:column;gap:10px;margin-top:10px;padding-top:10px;display:flex}.progress-detail-tabs{gap:6px;display:flex}.progress-detail-tab-btn{background:var(--surface);border:1px solid var(--border);color:var(--text-muted);border-radius:var(--radius-full);cursor:pointer;box-shadow:none;padding:3px 10px;font-size:12px;font-weight:500;transition:all .15s}.progress-detail-tab-btn:hover{border-color:var(--text-subtle);color:var(--text)}.progress-detail-tab-btn.active{background:var(--primary);color:#fff;border-color:var(--primary);font-weight:600}.progress-students-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;max-height:240px;padding:4px 2px;display:grid;overflow-y:auto}.progress-student-item{background:var(--surface);border-radius:var(--radius-sm);border:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;transition:all .15s;display:flex}.progress-student-item.is-submitted{border-left:3px solid var(--success)}.progress-student-item.is-unsubmitted{background:#f2f6f3;border-left:3px solid #c4d2c8}.progress-student-info{flex-direction:column;min-width:0;display:flex}.progress-student-name{color:var(--text-heading);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.progress-student-username{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.progress-student-status{flex-shrink:0}.status-badge-submitted{color:var(--success);background:var(--success-soft);border-radius:var(--radius-sm);align-items:center;gap:4px;padding:2px 6px;font-size:11px;font-weight:600;display:inline-flex}.status-badge-unsubmitted{color:#55635c;border-radius:var(--radius-sm);background:#e8eee9;align-items:center;gap:4px;padding:2px 6px;font-size:11px;font-weight:600;display:inline-flex}.student-assignment-list{flex-direction:column;gap:16px;display:flex}.student-assignment-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-xs);flex-direction:column;gap:14px;padding:20px;transition:all .2s;display:flex}.student-assignment-card:hover{box-shadow:var(--shadow-sm);border-color:#c4d2c8}.student-assignment-header{justify-content:space-between;align-items:flex-start;display:flex}.student-status-chip{border-radius:var(--radius-full);align-items:center;gap:5px;padding:3px 8px;font-size:12px;font-weight:600;display:inline-flex}.student-status-chip.graded{background:var(--success-soft);color:var(--success)}.student-status-chip.submitted{background:var(--primary-soft);color:var(--primary)}.student-status-chip.pending{color:#c88a2e;background:#f5e4c2}.student-status-chip.expired{color:#c24b3d;background:#f3e0dc}.student-feedback-preview{border-left:3px solid var(--primary);border-radius:0 var(--radius-sm) var(--radius-sm) 0;background:#f2f6f3;flex-direction:column;gap:4px;padding:10px 14px;display:flex}.feedback-label{color:var(--text-muted);font-size:12px;font-weight:600}.feedback-text{color:var(--text);margin:0;font-size:13px;line-height:1.4}.student-assignment-actions{border-top:1px solid var(--border-subtle);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding-top:14px;display:flex}.student-dropzone{border-radius:var(--radius-md);text-align:center;cursor:pointer;background:var(--surface-alt);border:2px dashed #c4d2c8;padding:24px;transition:all .2s;display:block}.student-dropzone:hover{border-color:var(--primary);background:var(--primary-soft)}.student-dropzone-inner{flex-direction:column;align-items:center;gap:10px;display:flex}.student-dropzone-icon{color:var(--primary);justify-content:center;align-items:center;display:flex}.student-dropzone-prompt{flex-direction:column;gap:4px;display:flex}.student-dropzone-prompt strong{color:var(--text-heading);font-size:14px}.student-dropzone-prompt span{color:var(--text-muted);font-size:12px}.student-dropzone-file-selected{flex-direction:column;gap:4px;display:flex}.selected-filename{color:var(--primary);word-break:break-all;font-size:14px}.selected-filesize{color:var(--text-muted);font-size:12px}.student-assignment-detail-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:24px}.assignment-detail-desc-box{background:var(--surface-alt);border-radius:var(--radius-sm);margin:18px 0;padding:14px 16px}.assignment-detail-desc-box h4{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 6px;font-size:13px;font-weight:600}.assignment-detail-desc-box p{color:var(--text);margin:0;font-size:14px;line-height:1.5}.assignment-detail-file-box{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);padding:14px 16px}.student-submission-view{flex-direction:column;gap:20px;display:flex}.submission-result-box{background:var(--surface-alt);border-radius:var(--radius-md);border:1px solid var(--border);flex-direction:column;gap:14px;padding:18px;display:flex}.submission-score-box{flex-direction:column;align-items:flex-end;display:flex}.score-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:11px;font-weight:700}.score-display{color:var(--success);font-variant-numeric:tabular-nums;font-size:26px;font-weight:800}.score-display span{color:var(--text-muted);font-size:14px;font-weight:500}.submission-teacher-feedback{border-radius:var(--radius-sm);border-left:3px solid var(--primary);border:1px solid var(--border);background:#fff;padding:12px 14px}.submission-teacher-feedback strong{color:var(--primary);margin-bottom:4px;font-size:13px;display:block}.submission-teacher-feedback p{color:var(--text);margin:0;font-size:13px;line-height:1.5}.submission-file-attached{border-radius:var(--radius-sm);border:1px solid var(--border);background:#fff;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:10px 14px;display:flex}.resubmit-section{border-top:1px dashed var(--border);padding-top:16px}.pair-partner-box{background:var(--surface-alt);border-radius:var(--radius-md);border:1px solid var(--border);align-items:center;gap:16px;margin-bottom:16px;padding:16px 20px;display:flex}.pair-partner-avatar{border-radius:var(--radius-full);background:var(--primary-soft);width:52px;height:52px;color:var(--primary);flex-shrink:0;justify-content:center;align-items:center;display:flex}.pair-partner-info{flex-direction:column;display:flex}.pair-partner-label{color:var(--text-muted);font-size:12px}.pair-partner-name{color:var(--text-heading);margin:2px 0 0;font-size:17px}.pair-partner-username{color:var(--text-muted);font-size:12px}.pair-confirm-prompt{border-radius:var(--radius-md);background:#f0fdf4;border:1px solid #bbf7d0;padding:16px 20px}.pair-status-notice{border:1px solid var(--border);border-radius:var(--radius-md);color:var(--text);background:#f2f6f3;align-items:center;gap:10px;padding:14px 18px;font-size:13px;display:flex}.pair-status-notice.success{color:#166534;background:#f0fdf4;border-color:#bbf7d0}.student-pair-actions-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;margin-top:20px;display:grid}.pair-feature-card{flex-direction:column;justify-content:space-between;display:flex}.achievements-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;display:grid}.achievement-badge-card{border-radius:var(--radius-md);box-shadow:var(--shadow-xs);background:linear-gradient(135deg,#fbf1df 0%,#fff 100%);border:1px solid #f5e4c2;align-items:flex-start;gap:12px;padding:16px;transition:all .2s;display:flex}.achievement-badge-card:hover{box-shadow:var(--shadow-md);border-color:#ead3a0;transform:translateY(-2px)}.achievement-badge-icon{border-radius:var(--radius-full);color:#c88a2e;background:#f5e4c2;flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.achievement-badge-content{flex:1;min-width:0}.achievement-badge-title{color:#8a5d1e;font-size:14px}.achievement-badge-desc{color:#6b4a17;margin:4px 0 6px;font-size:12px;line-height:1.4}.achievement-badge-date{color:#a3711f;font-size:11px}input[type=datetime-local],input[type=date],input[type=time]{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;height:44px;color:var(--text);background-color:var(--surface);box-shadow:var(--shadow-xs);cursor:pointer;padding:10px 14px;font-family:inherit;font-size:14px;font-weight:500;transition:all .2s}input[type=datetime-local]:focus,input[type=date]:focus,input[type=time]:focus{border-color:var(--border-focus);background-color:#fff;outline:none;box-shadow:0 0 0 3px #1f6f5426}input[type=datetime-local]::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.7;filter:invert(34%)sepia(35%)saturate(800%)hue-rotate(115deg)brightness(88%)contrast(90%);border-radius:4px;padding:4px;transition:transform .15s,opacity .15s}input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.7;filter:invert(34%)sepia(35%)saturate(800%)hue-rotate(115deg)brightness(88%)contrast(90%);border-radius:4px;padding:4px;transition:transform .15s,opacity .15s}input[type=time]::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.7;filter:invert(34%)sepia(35%)saturate(800%)hue-rotate(115deg)brightness(88%)contrast(90%);border-radius:4px;padding:4px;transition:transform .15s,opacity .15s}input[type=datetime-local]::-webkit-calendar-picker-indicator:hover{opacity:1;transform:scale(1.15)}input[type=date]::-webkit-calendar-picker-indicator:hover{opacity:1;transform:scale(1.15)}input[type=time]::-webkit-calendar-picker-indicator:hover{opacity:1;transform:scale(1.15)}.assignment-form-card{width:100%;max-width:720px}.assignment-form-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}@media (max-width:640px){.assignment-form-grid{grid-template-columns:1fr}}.assignment-file-dropzone{border:2px dashed var(--border);border-radius:var(--radius-md);background:var(--bg);cursor:pointer;text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:22px 18px;transition:all .2s;display:flex;position:relative}.assignment-file-dropzone:hover{border-color:var(--primary);background:#1f6f540a}.assignment-file-dropzone.has-file{border-color:var(--primary);background:#1f6f540f}.assignment-file-icon{border-radius:var(--radius-full);width:44px;height:44px;color:var(--primary);background:#1f6f541a;justify-content:center;align-items:center;margin-bottom:10px;display:flex}.assignment-file-text{color:var(--text);margin-bottom:4px;font-size:13px;font-weight:500}.assignment-file-hint{color:var(--text-muted);font-size:12px}.assignment-file-name{color:var(--primary);word-break:break-all;align-items:center;gap:6px;font-size:13px;font-weight:600;display:flex}.confirm-backdrop{z-index:999;animation:.15s ease-out confirmFadeIn}.confirm-modal{border-radius:var(--radius-lg);width:min(90vw,440px);box-shadow:var(--shadow-xl), 0 20px 25px -5px #0000001a, 0 10px 10px -5px #0000000a;border:1px solid var(--border);gap:16px;padding:24px;animation:.15s ease-out confirmScaleUp}.confirm-modal-header{justify-content:space-between;align-items:center;display:flex}.confirm-icon-wrapper{border-radius:var(--radius-full);flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;display:flex}.confirm-icon-wrapper.danger{background:var(--danger-soft);color:var(--danger);border:1px solid var(--danger-border)}.confirm-icon-wrapper.warning{color:#d97706;background:#fef3c7;border:1px solid #fcd34d}.confirm-close-btn{justify-content:center;align-items:center;display:flex;width:32px!important;min-width:auto!important;height:32px!important;box-shadow:none!important;border:none!important;border-radius:50%!important;padding:6px!important}.confirm-modal-content{flex-direction:column;gap:8px;display:flex}.confirm-title{color:var(--text);margin:0;font-size:18px;font-weight:700;line-height:1.3}.confirm-message{color:var(--text-muted);white-space:pre-line;word-break:break-word;margin:0;font-size:14px;line-height:1.5}.confirm-modal-actions{border-top:1px solid var(--border);justify-content:flex-end;align-items:center;gap:10px;margin-top:6px;padding-top:14px;display:flex}.confirm-modal-actions button{min-width:90px;font-weight:600}@keyframes confirmFadeIn{0%{opacity:0}to{opacity:1}}@keyframes confirmScaleUp{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}
@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:600;font-display:swap;src:url(../media/a3bcb02a0e9e5d11-s.p.25pbmqxk8u2s7.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b35fd19aef91b293-s.0n_ln9vqskgts.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:600;font-display:swap;src:url(../media/8f46d218c8f79e34-s.p.2wu4yy186g04j.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:700;font-display:swap;src:url(../media/8ffc259da9d23054-s.p.10uaeld2xxvpt.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:700;font-display:swap;src:url(../media/9e486ba39c38fb8a-s.2bbpeapf-lbjw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:700;font-display:swap;src:url(../media/6f42e0a3b0519c4d-s.p.13y-iz2lazqtb.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:800;font-display:swap;src:url(../media/fcf129058e6e31f2-s.p.1ubek13yfcpkr.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:800;font-display:swap;src:url(../media/7b74840ea7c05e95-s.0t1_atrj_pkiu.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:800;font-display:swap;src:url(../media/3eca85881bcfa204-s.p.0unco9n87mni8.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Be Vietnam Pro Fallback;src:local(Arial);ascent-override:90.61%;descent-override:24.01%;line-gap-override:0.0%;size-adjust:110.36%}.be_vietnam_pro_69aa2a4c-module__JTm-Xq__className{font-family:Be Vietnam Pro,Be Vietnam Pro Fallback;font-style:normal}.be_vietnam_pro_69aa2a4c-module__JTm-Xq__variable{--font-display-family:"Be Vietnam Pro", "Be Vietnam Pro Fallback"}
