@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Red+Hat+Text:wght@400;500;600;700&display=swap";:root{--teal: #A855F7;--teal-dark: #9333EA;--coral: #F87171;--green: #3FB950;--amber: #D29922;--blue: #58A6FF;--red: #F85149;--purple-glow: rgba(168,85,247,.18);--bg: #12141D;--surface: #1C1E2A;--surface-raised: #252838;--surface-overlay: #2C2F44;--border: #363952;--border-subtle: #2C2F44;--text-primary: #F0F0F8;--text-secondary: #94A3B8;--text-muted: #5C657A;--navy: #12141D;--navy-light: #252838;--white: #F0F0F8;--grey-50: #1C1E2A;--grey-100: #252838;--grey-200: #363952;--grey-400: #5C657A;--grey-500: #94A3B8;--grey-600: #B0BAC8;--grey-700: #C9D1D9;--grey-800: #F0F0F8;--sidebar-width: 240px;--shadow: 0 1px 4px rgba(0,0,0,.5), 0 1px 2px rgba(0,0,0,.4);--shadow-md: 0 4px 16px rgba(0,0,0,.6), 0 2px 6px rgba(0,0,0,.5)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:14px;color:var(--text-primary);background:var(--bg);line-height:1.5}h1,h2,h3,h4,.page-title,.sidebar-nav a,.sidebar-nav button.nav-link{font-family:Red Hat Text,Inter,sans-serif}.app-layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-width);background:#0b0d12;border-right:1px solid var(--border);color:var(--text-primary);display:flex;flex-direction:column;position:fixed;top:0;left:0;height:100vh;z-index:100;overflow-y:auto}.main-content{margin-left:var(--sidebar-width);flex:1;min-height:100vh;background:var(--bg)}.page-header{background:var(--surface);border-bottom:1px solid var(--border);padding:16px 20px;margin-bottom:24px;border-radius:8px;display:flex;align-items:center;justify-content:space-between}.page-header h1{font-size:20px;font-weight:600;color:var(--text-primary)}.page-body{padding:32px}.sidebar-logo{padding:20px 20px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:center;background:#0b0d12}.sidebar-logo-img{width:160px;height:auto;display:block}.sidebar-logo .brand{font-size:11px;font-weight:700;letter-spacing:1.5px;color:var(--teal);text-transform:uppercase}.sidebar-logo .product{font-size:16px;font-weight:700;color:var(--text-primary);margin-top:2px}.sidebar-nav{flex:1;padding:16px 0}.sidebar-nav ul{list-style:none}.sidebar-nav a,.sidebar-nav button.nav-link{display:flex;align-items:center;gap:10px;padding:10px 20px;color:var(--text-secondary);text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;border:none;background:none;width:100%;text-align:left;transition:all .15s;border-radius:0}.sidebar-nav a:hover,.sidebar-nav button.nav-link:hover{background:var(--surface-overlay);color:var(--text-primary)}.sidebar-nav a.active,.sidebar-nav button.nav-link.active{background:var(--purple-glow);color:var(--teal);border-right:2px solid var(--teal)}.sidebar-nav .nav-section{font-size:10px;font-weight:700;letter-spacing:1px;color:var(--text-muted);text-transform:uppercase;padding:16px 20px 6px}.sidebar-footer{padding:16px 20px;border-top:1px solid var(--border)}.sidebar-user{font-size:12px;color:var(--text-secondary);margin-bottom:10px}.sidebar-user strong{display:block;color:var(--text-primary);font-size:13px}.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:6px;border:none;font-family:inherit;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s;text-decoration:none}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--teal);color:#fff}.btn-primary:hover:not(:disabled){background:var(--teal-dark)}.btn-danger{background:#f8717126;color:#f87171;border:1px solid rgba(248,113,113,.3)}.btn-danger:hover:not(:disabled){background:#f8717140}.btn-ghost{background:transparent;color:var(--text-secondary);border:1px solid var(--border)}.btn-ghost:hover:not(:disabled){background:var(--surface-overlay);color:var(--text-primary)}.btn-secondary{background:var(--surface-overlay);color:var(--text-primary);border:1px solid var(--border)}.btn-secondary:hover:not(:disabled){background:var(--surface-raised);border-color:var(--text-muted)}.btn-marked{background:#a855f726;color:#c084fc;border:1px solid rgba(168,85,247,.4)}.btn-marked:hover:not(:disabled){background:#a855f740;border-color:#a855f799}.manually-marked-badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:#c084fc;padding:6px 12px;background:#a855f71f;border:1px solid rgba(168,85,247,.3);border-radius:6px}.btn-navy{background:var(--surface-raised);color:var(--text-primary);border:1px solid var(--border)}.btn-navy:hover:not(:disabled){background:var(--surface-overlay)}.btn-sm{padding:5px 12px;font-size:12px}.btn-lg{padding:12px 24px;font-size:15px}.btn-full{width:100%;justify-content:center}.btn-xs{padding:2px 8px;font-size:11px}.card{background:var(--surface);border-radius:8px;border:1px solid var(--border);box-shadow:var(--shadow);padding:24px;margin-bottom:20px}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px}.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.card-title{font-size:15px;font-weight:600;color:var(--text-primary)}.card-subtitle{font-size:12px;color:var(--text-secondary);margin-top:2px}.card-note{font-size:12px;color:var(--text-secondary);margin-bottom:16px;background:var(--surface-overlay);padding:8px 12px;border-radius:6px;border:1px solid var(--border-subtle)}.progress-bar-wrap{background:var(--surface-overlay);border-radius:4px;height:5px;overflow:hidden}.progress-bar,.progress-fill{background:var(--teal);height:100%;border-radius:4px;transition:width .3s}.badge{display:inline-flex;align-items:center;padding:2px 10px;border-radius:99px;font-size:11px;font-weight:600;background:var(--surface-overlay);color:var(--text-secondary)}.badge-quiz{background:#58a6ff26;color:#58a6ff}.badge-upload,.badge-file{background:#a855f726;color:var(--teal)}.badge-roleplay{background:#d2992226;color:var(--amber)}.badge-signoff{background:#f8514926;color:#f85149}.badge-declaration{background:#f59e0b26;color:#f59e0b}.badge-green{background:#3fb95026;color:var(--green)}.badge-orange{background:#d2992226;color:var(--amber)}.badge-blue{background:#58a6ff26;color:#58a6ff}.badge-grey{background:var(--surface-overlay);color:var(--text-secondary)}.badge-coral{background:#ff6b6b26;color:var(--coral)}.badge-eligible{background:#3fb95026;color:var(--green)}.badge-manual{background:#a855f726;color:#c084fc}.badge-ineligible{background:#f8514926;color:#f85149;font-size:11px;max-width:240px;white-space:normal}.badge-pending-mark{background:#d2992226;color:var(--amber)}.badge-resubmitted{background:#f9731633;color:#fb923c;border:1px solid rgba(249,115,22,.35);font-weight:700}.table-container{background:var(--surface);border-radius:8px;border:1px solid var(--border);overflow:hidden}table{width:100%;border-collapse:collapse}thead{background:var(--surface-overlay)}th{padding:10px 16px;text-align:left;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border)}td{padding:13px 16px;border-bottom:1px solid var(--border-subtle);font-size:13px;color:var(--text-primary)}tr:last-child td{border-bottom:none}tr.clickable:hover td{background:var(--surface-overlay);cursor:pointer}tr.ineligible td{color:var(--text-muted)}.form-group{margin-bottom:18px}label{display:block;font-size:12px;font-weight:600;color:var(--text-secondary);margin-bottom:4px}input,textarea,select{width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:6px;font-family:inherit;font-size:13px;color:var(--text-primary);background:var(--surface-overlay);transition:border-color .15s}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--teal);box-shadow:0 0 0 3px #a855f726}textarea{resize:vertical;min-height:80px}.form-error{font-size:12px;color:var(--coral);margin-top:4px}.form-hint{font-size:11px;color:var(--text-muted);margin-top:4px}.form-actions{display:flex;gap:10px;margin-top:24px}.form{display:flex;flex-direction:column;gap:0}.form-card{max-width:540px}.alert{padding:12px 16px;border-radius:6px;font-size:13px;margin-bottom:16px}.alert-error{background:#f851491a;border:1px solid rgba(248,81,73,.3);color:#ff7b72}.alert-success{background:#3fb9501a;border:1px solid rgba(63,185,80,.3);color:#56d364}.alert-info{background:#58a6ff1a;border:1px solid rgba(88,166,255,.3);color:#79c0ff}.alert-warning{background:#d299221a;border:1px solid rgba(210,153,34,.3);color:#e3b341}.alert-manually-marked{background:#a855f71a;border:1px solid rgba(168,85,247,.3);color:#c084fc}.alert-resubmission{background:#f973161a;border:1px solid rgba(249,115,22,.35);color:#fb923c;border-radius:6px;padding:10px 14px;font-size:13px;line-height:1.5}.submission-history{background:#00b4a612;border:1px solid rgba(0,180,166,.3);border-radius:6px;padding:10px 14px;font-size:12px}.submission-history.submission-history-warn{background:#f973160f;border-color:#f9731640}.submission-history-label{display:flex;align-items:center;gap:5px;font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);margin-bottom:6px}.submission-history-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.submission-history-entry{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:4px 0;border-bottom:1px solid var(--border-subtle);font-size:12px;color:var(--text-secondary)}.submission-history-entry:last-child{border-bottom:none}.submission-history-entry.latest{color:var(--text)}.submission-history-time{font-variant-numeric:tabular-nums;min-width:160px}.submission-history-score{font-weight:600;color:var(--text)}.submission-history-attempt{color:var(--text-muted)}.submission-history-type{font-size:10px;background:var(--surface-hover);border-radius:4px;padding:1px 6px;color:var(--text-muted);text-transform:capitalize}.submission-history-latest-badge{font-size:10px;background:var(--accent);color:#fff;border-radius:4px;padding:1px 6px;font-weight:600}.alert-body-available{background:#388bfd1a;border:1px solid rgba(56,139,253,.3);color:#79c0ff;border-radius:6px;padding:10px 14px;font-size:13px;line-height:1.5}.annotation-paste-box{border:1px solid var(--border);border-radius:8px;background:var(--surface-overlay);padding:16px;margin-bottom:16px}.annotation-paste-header{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--text);margin-bottom:6px}.annotation-paste-hint{font-size:12px;color:var(--text-muted);margin:0 0 10px}.annotation-paste-textarea{width:100%;box-sizing:border-box;padding:10px 12px;font-size:12.5px;line-height:1.65;font-family:inherit;background:var(--surface);color:var(--text-primary);border:1px solid var(--border);border-radius:6px;resize:vertical;min-height:160px}.annotation-paste-textarea:focus{outline:none;border-color:var(--accent)}.annotation-paste-actions{display:flex;align-items:center;gap:8px;margin-top:10px}.content-source-row{align-items:center;gap:12px}.content-source-toggle{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.content-source-option{display:inline-flex;align-items:center;gap:5px;font-size:12px;cursor:pointer;padding:3px 10px;border:1px solid var(--border);border-radius:4px;color:var(--text-muted);transition:all .15s}.content-source-option input[type=radio]{display:none}.content-source-option.active{border-color:var(--accent);color:var(--accent);background:#58a6ff14}.content-source-option:hover:not(.active){border-color:var(--border-hover);color:var(--text)}.content-source-msg{font-size:11px;color:var(--green);margin-left:4px}.bypass-active-banner{display:flex;align-items:center;gap:8px;background:#388bfd14;border:1px solid rgba(56,139,253,.25);border-radius:6px;padding:8px 12px;margin-bottom:12px;font-size:12px;color:#79c0ff}.resubmission-prev-grade{opacity:.8;font-style:italic}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg);background-image:radial-gradient(ellipse at 50% 0%,rgba(168,85,247,.12) 0%,transparent 60%)}.login-card{background:var(--surface);border-radius:12px;padding:48px;border:1px solid var(--border);box-shadow:0 16px 48px #0009;width:100%;max-width:420px}.login-logo{text-align:center;margin-bottom:32px}.login-logo .brand{font-size:11px;font-weight:700;letter-spacing:2px;color:var(--teal);text-transform:uppercase}.login-logo .product{font-size:24px;font-weight:700;color:var(--text-primary)}.login-logo .tagline{font-size:12px;color:var(--text-secondary);margin-top:4px}.login-logo-img{width:200px;height:auto;display:block;margin:0 auto 12px}.login-form{margin-top:8px}.login-logo h1{font-size:22px;font-weight:700;color:var(--text-primary);font-family:Red Hat Text,sans-serif}.login-logo p{font-size:12px;color:var(--text-secondary);margin-top:4px}.logo-raccoon{font-size:22px}.logo-text{font-size:15px;font-weight:700;color:var(--text-primary);margin-left:6px}.user-name{display:block;font-size:13px;font-weight:600;color:var(--text-primary)}.user-role{display:block;font-size:11px;color:var(--text-muted);text-transform:capitalize}.btn-logout{margin-top:8px;width:100%;padding:6px 0;background:transparent;color:var(--text-secondary);border:1px solid var(--border);border-radius:6px;cursor:pointer;font-size:12px;transition:all .15s}.btn-logout:hover{background:var(--surface-overlay);color:var(--text-primary)}.page{padding:32px;max-width:1200px;margin:0 auto}.page-title{font-size:20px;font-weight:700;color:var(--text-primary)}.page-subtitle{font-size:13px;color:var(--text-secondary);margin-top:4px}.page-header-actions{display:flex;align-items:center;gap:12px}.stats-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;margin-bottom:24px}.stat-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;margin-bottom:24px}.stat-card{background:var(--surface);border-radius:8px;padding:20px 24px;border:1px solid var(--border);box-shadow:var(--shadow)}.stat-card .stat-value{font-size:26px;font-weight:700;color:var(--teal)}.stat-card .stat-label{font-size:12px;color:var(--text-secondary);margin-top:2px}.stat-card .stat-sub{font-size:11px;color:var(--teal);font-weight:500}.period-selector{display:flex;gap:8px}.period-selector select{width:auto;padding:6px 10px}.month-selector{display:flex;align-items:center;gap:10px}.month-selector select{width:auto;padding:6px 10px}.data-table{width:100%;border-collapse:collapse}.data-table th{padding:10px 14px;text-align:left;font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid var(--border);background:var(--surface-overlay)}.data-table td{padding:11px 14px;border-bottom:1px solid var(--border-subtle);font-size:13px;color:var(--text-primary)}.data-table tr:last-child td{border-bottom:none}.data-table tr:hover td{background:var(--surface-overlay)}.data-table .totals-row td{font-weight:600;background:var(--surface-overlay);border-top:2px solid var(--border)}.actions-cell{white-space:nowrap;display:flex;gap:6px;align-items:center}.assessor-name{font-weight:500;color:var(--text-primary)}.assessor-email{font-size:11px;color:var(--text-secondary)}.rate-input{width:90px;padding:4px 8px}.confirm-warning{font-size:12px;color:var(--coral);margin-right:4px}.sync-button-wrap{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.sync-last-at{font-size:11px;color:var(--text-muted)}.sync-message{font-size:12px}.sync-message.success{color:var(--green)}.sync-message.error{color:var(--coral)}.sync-progress-banner{background:var(--surface);border:1px solid rgba(168,85,247,.3);border-radius:10px;padding:16px 20px;margin-bottom:24px;box-shadow:0 0 20px #a855f70f}.sync-progress-top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.sync-progress-spinner{flex-shrink:0}.sync-progress-text{flex:1;font-size:13px;color:var(--text-primary)}.sync-progress-detail{color:var(--text-secondary);font-size:12px}.sync-progress-counts{display:flex;gap:8px;flex-wrap:wrap}.sync-count-pill{background:#a855f71f;color:var(--teal);border:1px solid rgba(168,85,247,.2);border-radius:99px;padding:2px 10px;font-size:11px;font-weight:600}.sync-progress-bar-wrap{margin-top:12px;position:relative}.sync-progress-bar-track{background:var(--surface-overlay);border-radius:4px;height:4px;overflow:hidden}.sync-progress-bar{background:var(--teal);height:100%;border-radius:4px;transition:width .6s ease;box-shadow:0 0 8px #a855f766}@keyframes progress-indeterminate{0%{transform:translate(-120%) scaleX(.6)}50%{transform:translate(80%) scaleX(1)}to{transform:translate(300%) scaleX(.6)}}.sync-progress-bar.indeterminate{width:45%;animation:progress-indeterminate 1.5s cubic-bezier(.4,0,.6,1) infinite;transition:none}.sync-eta{display:block;margin-top:6px;font-size:11px;color:var(--text-muted);text-align:right;letter-spacing:.02em}.sync-waiting{padding:40px;text-align:center}.usage-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:8px;padding:14px 18px;min-width:280px}.usage-card-header{margin-bottom:10px}.usage-period{font-size:11px;color:var(--text-muted)}.usage-stats{display:flex;gap:18px}.usage-stat{display:flex;flex-direction:column}.usage-value{font-size:18px;font-weight:700;color:var(--teal)}.usage-label{font-size:10px;color:var(--text-muted)}.course-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.course-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);padding:20px;text-decoration:none;color:inherit;display:block;transition:border-color .15s,box-shadow .15s}.course-card:hover{border-color:var(--teal);box-shadow:0 0 0 1px #a855f733,var(--shadow-md)}.course-card-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.course-name{font-size:14px;font-weight:600;color:var(--text-primary)}.course-unit{font-size:11px;color:var(--teal);margin-top:2px;font-weight:600}.course-progress-label{font-size:12px;color:var(--text-secondary);white-space:nowrap}.course-detail-page{display:flex;flex-direction:column;gap:24px}.course-detail-header{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:20px 24px;display:flex;flex-direction:column;gap:12px}.course-detail-title{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.course-detail-title h1{font-size:20px;font-weight:700;color:var(--text-primary);margin:0}.unit-code-badge{background:#a855f71f;color:var(--teal);border:1px solid rgba(168,85,247,.3);border-radius:6px;padding:3px 10px;font-size:12px;font-weight:600;letter-spacing:.4px}.course-detail-summary{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.detail-stat{font-size:13px;color:var(--text-secondary)}.detail-stat.needs-action{color:var(--amber);font-weight:600}.detail-stat.all-done{color:var(--green);font-weight:600}.detail-stat.draft-ready{color:var(--teal);font-weight:600}.submit-all-banner{background:#a855f714;border:1px solid rgba(168,85,247,.28);border-radius:10px;padding:16px 20px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.submit-all-banner-info{display:flex;align-items:center;gap:12px}.submit-all-icon{font-size:22px}.submit-all-banner-info strong{font-size:14px;font-weight:600;color:var(--text-primary)}.submit-all-banner-info p{font-size:12px;color:var(--text-secondary);margin:2px 0 0}.pdf-signoff-course-banner{background:#ff6b6b12;border:1px solid rgba(255,107,107,.28);border-radius:10px;padding:16px 20px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:20px}.pdf-signoff-course-banner-info{display:flex;align-items:center;gap:12px}.pdf-signoff-course-banner-info strong{font-size:14px;font-weight:600;color:var(--text-primary)}.pdf-signoff-course-banner-info p{font-size:12px;color:var(--text-secondary);margin:2px 0 0}.submit-progress-wrap{border-radius:10px;padding:16px 20px;border:1px solid var(--border);background:var(--surface)}.submit-progress-wrap.status-running{border-color:#a855f74d;background:#a855f70f}.submit-progress-wrap.status-done{border-color:#3fb9504d;background:#3fb9500f}.submit-progress-wrap.status-errors{border-color:#f851494d;background:#f851490f}.submit-progress-track{height:6px;border-radius:3px;background:var(--border);overflow:hidden;margin-bottom:10px}.submit-progress-fill{height:100%;background:var(--teal);border-radius:3px;transition:width .3s ease}.submit-progress-label{font-size:13px;color:var(--text-secondary)}.submit-progress-results{display:flex;flex-direction:column;gap:8px}.submit-result-summary{font-size:14px;font-weight:600;color:var(--text-primary)}.submit-errors-list{list-style:none;padding:0;margin:4px 0;display:flex;flex-direction:column;gap:4px}.submit-errors-list li{font-size:12px;color:var(--coral)}.assignment-list{display:flex;flex-direction:column;gap:12px}.assignment-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;overflow:hidden}.assignment-card--pending{border-left:3px solid var(--amber)}.assignment-card--has-drafts,.assignment-card--pending.assignment-card--has-drafts{border-left:3px solid var(--teal)}.assignment-header{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.assignment-header:hover{background:var(--surface-overlay)}.assignment-info{display:flex;align-items:center;gap:10px;flex:1;min-width:0}.assignment-name{font-size:14px;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.assignment-meta{display:flex;align-items:center;gap:10px;flex-shrink:0}.expand-icon{font-size:10px;color:var(--text-muted)}.student-list{border-top:1px solid var(--border-subtle);padding:4px 10px 10px}.badge-needs-mark{background:#d299222e;color:var(--amber);border:1px solid rgba(210,153,34,.35);font-weight:700}.badge-all-done{background:#3fb9501f;color:var(--green);border:1px solid rgba(63,185,80,.25)}.badge-draft{background:#a855f726;color:var(--teal);border:1px solid rgba(168,85,247,.3);font-weight:700}.badge-draft-row{background:#a855f71f;color:var(--teal);border:1px solid rgba(168,85,247,.25)}.row-pending td{background:#d299220a}.row-draft td{background:#a855f70d}.row-ineligible td{background:transparent;opacity:.5}.assignment-progress-wrap{display:flex;align-items:center;gap:8px}.assignment-progress-track{width:64px;height:5px;background:var(--border);border-radius:3px;overflow:hidden}.assignment-progress-fill{height:100%;background:var(--teal);border-radius:3px;transition:width .3s}.assignment-progress-text{font-size:11px;color:var(--text-secondary);white-space:nowrap}.assignment-draft-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;background:#a855f712;border-bottom:1px solid rgba(168,85,247,.18);font-size:13px;color:var(--text-secondary)}.student-name-cell{font-weight:500}.score-cell{font-variant-numeric:tabular-nums;min-width:48px}.action-cell{text-align:right;white-space:nowrap}.modal-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:28px 32px;max-width:520px;width:92%;max-height:80vh;overflow-y:auto;box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:20px}.modal-card h2{font-size:17px;font-weight:700;color:var(--text-primary);margin:0}.modal-desc{font-size:13px;color:var(--text-secondary);margin:0}.draft-confirm-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px;max-height:260px;overflow-y:auto}.draft-confirm-item{display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--surface-raised);border-radius:6px;font-size:13px}.draft-confirm-student{font-weight:500;flex:1}.draft-confirm-assignment{color:var(--text-secondary);font-size:12px;flex:2}.grading-layout{display:flex;flex-direction:column;height:100vh}.grading-header{background:var(--surface);border-bottom:1px solid var(--border);color:var(--text-primary);padding:16px 24px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.grading-header h2{font-size:16px;font-weight:600}.grading-header .meta{font-size:12px;color:var(--text-secondary)}.grading-body{flex:1;overflow-y:auto;padding:28px 32px}.grading-footer{background:var(--surface);border-top:1px solid var(--border);padding:16px 24px;display:flex;align-items:flex-end;gap:16px;flex-shrink:0}.grading-panel{max-width:900px;display:flex;flex-direction:column;gap:0}.grading-meta{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:20px;margin-bottom:20px}.grading-meta-row{display:flex;align-items:baseline;gap:12px;padding:6px 0;border-bottom:1px solid var(--border-subtle)}.grading-meta-row:last-child{border-bottom:none}.meta-label{font-size:11px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;min-width:90px}.speedgrader-btn{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--purple);background:#a855f71a;border:1px solid rgba(168,85,247,.25);border-radius:6px;padding:4px 10px;text-decoration:none;transition:background .15s,border-color .15s}.speedgrader-btn:hover{background:#a855f72e;border-color:#a855f766;text-decoration:none}.sg-link-btn{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:var(--text-secondary);background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:5px;padding:3px 8px;text-decoration:none;margin-right:6px;transition:color .15s,border-color .15s;white-space:nowrap}.sg-link-btn:hover{color:var(--purple);border-color:#a855f766;text-decoration:none}.ai-disclaimer{background:#d299221a;border:1px solid rgba(210,153,34,.3);border-radius:6px;padding:10px 14px;font-size:12px;color:var(--amber);margin-bottom:16px}.submission-attachments{display:flex;align-items:flex-start;gap:12px;width:100%}.attachment-list{display:flex;flex-direction:column;gap:6px;flex:1}.attachment-item{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--surface-overlay);border:1px solid var(--border);border-radius:6px;text-decoration:none;color:var(--text-primary);font-size:13px;transition:border-color .15s}.attachment-item:hover{border-color:var(--teal);color:var(--teal)}.attachment-media{cursor:default}.attachment-icon{font-size:15px;flex-shrink:0}.attachment-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-size{font-size:11px;color:var(--text-secondary);white-space:nowrap;flex-shrink:0}.attachment-none{font-size:13px;color:var(--text-secondary);font-style:italic}.attachment-loading{font-size:12px;color:var(--text-secondary);margin:0}.attachment-error{font-size:12px;color:#ff7b72;margin:0}.attachment-pending{opacity:.75;cursor:default}.attachment-pending:hover{border-color:var(--border);color:var(--text-primary)}.attachment-url-pending{font-size:10px;color:var(--text-secondary);margin-left:auto;animation:spin 1.2s linear infinite;display:inline-block}.suggest-hint{font-size:12px;color:var(--text-secondary);font-style:italic;margin:6px 0 12px}.grader-body,.grading-fields{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:24px;margin-bottom:20px}.grade-input{max-width:140px}.notes-textarea{font-size:13px}.comment-textarea{font-size:13px;min-height:100px}.grading-actions{display:flex;align-items:center;gap:12px;padding:20px 0 8px;border-top:1px solid var(--border-subtle);margin-top:4px;flex-wrap:wrap}.save-msg{font-size:13px}.save-msg.success{color:var(--green)}.save-msg.error{color:var(--coral)}.quiz-submit-hint{font-size:12px;color:var(--text-muted);font-style:italic}.grading-section-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.grading-section-header h3{font-size:15px;font-weight:600;color:var(--text-primary)}.grading-section-actions{display:flex;gap:8px;align-items:center}.quiz-grader{display:flex;flex-direction:column;gap:0}.quiz-item{background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:8px;padding:18px;margin-bottom:16px}.quiz-question{display:flex;align-items:baseline;gap:8px;margin-bottom:10px;font-weight:500;color:var(--text-primary)}.quiz-q-num{background:var(--teal);color:#fff;border-radius:4px;padding:1px 7px;font-size:11px;font-weight:700;flex-shrink:0}.quiz-q-text{flex:1}.quiz-points{font-size:11px;color:var(--text-muted);flex-shrink:0}.quiz-answer{background:var(--surface);border:1px solid var(--border-subtle);border-radius:6px;padding:10px 12px;font-size:13px;margin-bottom:10px;color:var(--text-primary);display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap}.quiz-answer-label{font-weight:600;color:var(--text-secondary);font-size:12px;flex-shrink:0;margin-top:1px}.quiz-answer-text{flex:1;line-height:1.5}.score-input-row{display:flex;align-items:center;gap:8px}.score-input{width:70px}.quiz-score-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}.quiz-score-label{font-size:12px;font-weight:600;color:var(--text-secondary)}.quiz-score-btns{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.score-chip{min-width:42px;padding:5px 10px;border-radius:6px;border:2px solid var(--border);background:var(--surface-raised);color:var(--text-secondary);font-weight:700;font-size:13px;cursor:pointer;transition:all .15s}.score-chip.active{border-color:var(--teal);background:var(--purple-glow);color:var(--teal)}.score-chip:hover:not(.active):not(:disabled){border-color:var(--text-muted);color:var(--text-primary)}.score-chip:disabled{opacity:.4;cursor:not-allowed}.ai-score-pill{font-weight:700;font-size:13px;padding:2px 10px;border-radius:99px}.score-full{background:#3fb95026;color:var(--green)}.score-half{background:#d2992226;color:var(--amber)}.score-zero{background:#f871711f;color:var(--coral)}.quiz-comments-row{display:flex;flex-direction:column;gap:4px}.quiz-comments-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.quiz-comments-label{font-size:12px;font-weight:600;color:var(--text-secondary)}.copy-comment-btn{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;font-size:11px;font-weight:600;border-radius:5px;border:1px solid var(--border-subtle);background:var(--surface);color:var(--text-secondary);cursor:pointer;transition:all .15s;white-space:nowrap;flex-shrink:0}.copy-comment-btn:hover:not(:disabled){background:var(--brand);color:#fff;border-color:var(--brand)}.copy-comment-btn.copied{background:#16a34a;color:#fff;border-color:#16a34a}.copy-comment-btn:disabled{opacity:.35;cursor:not-allowed}.quiz-fudge-row{display:flex;align-items:center;gap:12px;padding:12px 14px;margin-top:8px;background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:8px;flex-wrap:wrap}.quiz-fudge-label{font-size:12px;font-weight:600;color:var(--text-secondary);flex-shrink:0}.quiz-fudge-input-wrap{display:flex;align-items:center;gap:8px}.quiz-fudge-input{width:80px!important;text-align:center}.item-resubmit-row{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}.item-submit-err{font-size:12px;color:#f87171}.ai-suggestion-box{background:#58a6ff14;border:1px solid rgba(88,166,255,.2);border-radius:6px;padding:8px 12px;margin-bottom:10px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ai-badge{background:#58a6ff33;color:#79c0ff;font-size:10px;font-weight:700;padding:2px 8px;border-radius:99px;text-transform:uppercase;letter-spacing:.5px}.ai-badge-none{background:var(--surface-overlay);color:var(--text-muted);font-size:10px;font-weight:700;padding:2px 8px;border-radius:99px}.ai-score{font-weight:600;color:var(--text-primary);font-size:13px}.ai-rationale{font-size:12px;color:var(--text-secondary);flex:1}.ai-overall-rationale{background:var(--surface-overlay);border-radius:6px;padding:12px;font-size:12px;color:var(--text-secondary);margin-top:12px}.suggestion-banner{background:#58a6ff14;border:1px solid rgba(88,166,255,.2);border-radius:6px;padding:10px 14px;margin-bottom:16px;font-size:12px;color:#79c0ff;display:flex;align-items:center;gap:8px}.suggestion-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:#58a6ff1f;border:1px solid rgba(88,166,255,.25);border-radius:99px;font-size:11px;color:#79c0ff;cursor:pointer;margin-left:8px;transition:all .15s}.suggestion-chip:hover{background:#58a6ff33}.question-card{background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:8px;padding:20px;margin-bottom:16px}.question-text{font-weight:500;margin-bottom:12px;line-height:1.6;color:var(--text-primary)}.student-answer{background:var(--surface);border:1px solid var(--border-subtle);border-radius:6px;padding:12px;font-size:13px;color:var(--text-secondary);margin-bottom:12px;white-space:pre-wrap}.score-buttons{display:flex;gap:8px;margin-bottom:8px}.score-btn{padding:6px 16px;border-radius:6px;border:2px solid var(--border);background:var(--surface-overlay);color:var(--text-primary);font-weight:600;cursor:pointer;transition:all .15s;font-size:13px}.score-btn.selected{border-color:var(--teal);background:var(--teal);color:#000}.score-btn:hover:not(.selected){border-color:var(--teal)}.rubric-grader{display:flex;flex-direction:column;gap:0}.rubric-item{border:1px solid var(--border);border-radius:8px;padding:18px;margin-bottom:16px;background:var(--surface-overlay)}.rubric-criterion-desc{font-weight:600;margin-bottom:6px;color:var(--text-primary)}.criterion-long-desc{font-size:12px;color:var(--text-muted);margin-top:4px;margin-bottom:8px;line-height:1.5}.submission-text-preview{background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:6px;padding:12px;margin-bottom:16px}.submission-text-preview pre{font-size:12px;white-space:pre-wrap;font-family:monospace;color:var(--text-secondary)}.rating-btn-row{display:flex;gap:8px;margin:10px 0 8px;flex-wrap:wrap}.rating-btn{display:flex;flex-direction:column;align-items:center;padding:8px 14px;border-radius:8px;border:2px solid var(--border);background:var(--surface-raised);cursor:pointer;transition:all .15s;min-width:100px;text-align:center}.rating-btn:disabled{opacity:.4;cursor:not-allowed}.rating-abbr{font-size:15px;font-weight:800;letter-spacing:.5px;line-height:1;margin-bottom:2px}.rating-label-text{font-size:11px;font-weight:500;line-height:1.2}.rating-pts{font-size:10px;color:var(--text-muted);margin-top:2px}.rating-s{border-color:var(--border)}.rating-s:hover:not(:disabled):not(.active){border-color:var(--green)}.rating-s.active{border-color:var(--green);background:#3fb95026}.rating-s.active .rating-abbr,.rating-s.active .rating-label-text{color:var(--green)}.rating-nys{border-color:var(--border)}.rating-nys:hover:not(:disabled):not(.active){border-color:var(--amber)}.rating-nys.active{border-color:var(--amber);background:#d2992226}.rating-nys.active .rating-abbr,.rating-nys.active .rating-label-text{color:var(--amber)}.rating-ne{border-color:var(--border)}.rating-ne:hover:not(:disabled):not(.active){border-color:var(--coral)}.rating-ne.active{border-color:var(--coral);background:#f871711f}.rating-ne.active .rating-abbr,.rating-ne.active .rating-label-text{color:var(--coral)}.criterion-comment{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text-primary);font-family:inherit;font-size:12px;padding:8px 10px;resize:vertical;margin-top:6px}.criterion-comment:focus{outline:none;border-color:var(--teal)}.criterion-comment:disabled{opacity:.5;cursor:not-allowed}.ai-rating-pill{font-size:11px;font-weight:700;padding:2px 10px;border-radius:99px}.ai-satisfactory{background:#3fb95026;color:var(--green)}.ai-not-yet-satisfactory{background:#d2992226;color:var(--amber)}.ai-no-evidence{background:#f871711f;color:var(--coral)}.conf-badge{font-size:10px;font-weight:600;padding:2px 7px;border-radius:99px;text-transform:uppercase;letter-spacing:.3px}.conf-high{background:#3fb9501f;color:var(--green)}.conf-med{background:#d299221f;color:var(--amber)}.conf-low{background:#f871711a;color:var(--coral)}.outcome-radio-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.radio-label{display:flex;align-items:center;gap:8px;cursor:pointer;color:var(--text-primary)}.radio-s{color:var(--green);font-weight:500}.radio-ns{color:var(--coral);font-weight:500}.media-grader{display:flex;flex-direction:column;gap:0}.transcription-panel{background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:8px;padding:16px;margin-bottom:16px}.transcription-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.transcription-header h4{font-weight:600;color:var(--text-primary)}.transcript-box{background:var(--surface-overlay);border-radius:8px;padding:16px;font-size:13px;line-height:1.7;white-space:pre-wrap;max-height:300px;overflow-y:auto;margin-bottom:16px;color:var(--text-secondary)}.transcript-text{white-space:pre-wrap;font-size:13px;line-height:1.7;max-height:320px;overflow-y:auto;font-family:inherit;color:var(--text-secondary)}.canvas-studio-upload-panel{margin-top:12px;padding:14px 16px;background:#6366f112;border:1px solid rgba(99,102,241,.25);border-radius:8px;display:flex;flex-direction:column;gap:10px}.canvas-studio-upload-info{font-size:13px;color:var(--text-secondary);margin:0}.canvas-studio-upload-info strong{color:var(--text-primary)}.canvas-studio-sglink{color:var(--accent);text-decoration:underline}.canvas-studio-upload-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.resubmission-prompt{margin-top:12px;padding:12px;background:#f59e0b14;border:1px solid rgba(245,158,11,.3);border-radius:8px;display:flex;flex-direction:column;gap:10px}.resubmission-prompt-text{font-size:13px;color:var(--text-secondary);margin:0}.resubmission-notice-panel{background:#f59e0b14;border:1px solid rgba(245,158,11,.35);border-radius:8px;padding:14px 16px;margin-bottom:16px;display:flex;flex-direction:column;gap:8px}.resubmission-notice-header{display:flex;align-items:center;gap:8px}.resubmission-notice-header strong{color:#b45309;font-size:14px}.resubmission-notice-desc{font-size:13px;color:var(--text-secondary);margin:0}.declaration-grader{display:flex;flex-direction:column;gap:0}.declaration-info{display:flex;align-items:flex-start;gap:12px;background:#38bdf80f;border:1px solid rgba(56,189,248,.25);border-radius:8px;padding:14px 16px;margin-bottom:16px;font-size:13px;color:var(--text-secondary)}.declaration-info p{margin:0 0 4px}.declaration-info p:last-child{margin-bottom:0}.declaration-info-icon{flex-shrink:0;color:var(--teal);margin-top:1px}.declaration-attachment{display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--text-secondary);background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:6px;padding:6px 12px;margin-bottom:16px}.declaration-comment-preview{margin-top:4px}.declaration-preview-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.declaration-comment-text{white-space:pre-wrap;line-height:1.65}.signoff-grader{display:flex;flex-direction:column;gap:0}.signoff-info{background:#d299221a;border:1px solid rgba(210,153,34,.3);border-radius:6px;padding:12px 14px;font-size:13px;color:var(--amber);margin-bottom:16px}.signoff-tasks{margin-bottom:16px}.signoff-tasks h4{font-size:13px;font-weight:600;margin-bottom:8px;color:var(--text-primary)}.task-list{list-style:none;display:flex;flex-direction:column;gap:6px}.task-item{display:flex;gap:10px;padding:8px 12px;background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:6px;font-size:13px;color:var(--text-primary)}.task-num{font-weight:600;color:var(--text-muted)}.signoff-outcome h4{font-size:13px;font-weight:600;margin-bottom:10px;color:var(--text-primary)}.signoff-task-summary{background:var(--surface-overlay);border-radius:8px;padding:16px;margin-bottom:16px}.signoff-task-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border-subtle);color:var(--text-primary)}.signoff-task-row:last-child{border-bottom:none}.signoff-jotform-section{margin-top:24px;padding-top:20px;border-top:1px solid var(--border-subtle)}.signoff-jotform-hint{font-size:12px;color:var(--text-muted);margin-bottom:14px;font-style:italic}.signoff-message-box{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface-overlay)}.signoff-message-toolbar{display:flex;align-items:center;gap:10px;padding:8px 12px;border-bottom:1px solid var(--border-subtle);background:var(--surface-raised)}.signoff-message-textarea{width:100%;box-sizing:border-box;padding:14px;font-size:13px;line-height:1.65;font-family:inherit;background:transparent;color:var(--text-primary);border:none;resize:vertical;min-height:220px}.signoff-message-textarea:focus{outline:none}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:28px;max-width:440px;width:90%;box-shadow:var(--shadow-md)}.modal h3{font-size:16px;font-weight:600;margin-bottom:12px;color:var(--text-primary)}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}.loading-center{display:flex;align-items:center;justify-content:center;padding:60px}.spinner{width:32px;height:32px;border:3px solid var(--border);border-top-color:var(--teal);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.spinner-wrap{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px;gap:12px}.spinner-text{font-size:13px;color:var(--text-secondary)}.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;font-size:14px;color:var(--text-secondary);background:var(--bg)}.empty-state{text-align:center;padding:60px 20px;color:var(--text-muted)}.empty-state h3{font-size:15px;color:var(--text-secondary);margin-bottom:8px}.empty-state.small{padding:20px}.unit-outcome-highlight{border:2px solid var(--coral);border-radius:8px;padding:16px;margin-bottom:12px;background:#ff6b6b0d}.unit-outcome-label{font-size:11px;font-weight:700;color:var(--coral);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.running-total{font-size:18px;font-weight:700;color:var(--teal)}.running-total span{font-size:12px;font-weight:400;color:var(--text-secondary);margin-left:4px}.back-link{display:inline-flex;align-items:center;gap:6px;color:var(--text-secondary);font-size:13px;text-decoration:none;margin-bottom:20px}.back-link:hover{color:var(--teal)}.sync-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:20px;text-align:center;background:var(--bg)}.sync-screen h2{font-size:20px;font-weight:600;color:var(--text-primary)}.sync-screen p{color:var(--text-secondary);font-size:14px}.ineligible-row{opacity:.4;pointer-events:none}.eligibility-reason{font-size:11px;color:var(--text-muted)}.text-muted{color:var(--text-muted)}.small{font-size:11px}.nowrap{white-space:nowrap}.required{color:var(--coral)}code{background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:4px;padding:1px 5px;font-size:12px;font-family:monospace;color:var(--teal)}.marking-page{max-width:1100px}.marking-summary-row{display:flex;gap:16px;margin-bottom:28px;flex-wrap:wrap}.marking-stat-card{flex:1;min-width:120px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px 24px;text-align:center}.marking-stat-card .stat-number{font-size:36px;font-weight:700;line-height:1}.marking-stat-card .stat-label{font-size:12px;color:var(--text-secondary);margin-top:4px;text-transform:uppercase;letter-spacing:.5px}.stat-pending .stat-number{color:var(--amber)}.stat-marked .stat-number{color:var(--green)}.stat-total .stat-number{color:var(--teal)}.marking-charts-row{display:flex;gap:20px;margin-bottom:32px;flex-wrap:wrap}.marking-chart-card{flex:1;min-width:260px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px 24px}.chart-title{font-size:13px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px}.donut-wrap{display:flex;flex-direction:column;align-items:center;gap:12px}.donut-empty{color:var(--text-muted);font-size:13px;text-align:center;padding:20px}.donut-num{font-size:22px;font-weight:700;fill:var(--text-primary);font-family:Inter,sans-serif}.donut-label-inner{font-size:10px;fill:var(--text-secondary);font-family:Inter,sans-serif}.donut-legend{font-size:12px;color:var(--text-secondary);display:flex;gap:16px;align-items:center}.legend-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:4px}.legend-dot.ml{margin-left:8px}.type-bars{display:flex;flex-direction:column;gap:14px;margin-bottom:16px}.type-bar-row{display:flex;align-items:center;gap:10px}.type-bar-label{width:60px;font-size:12px;color:var(--text-secondary);flex-shrink:0}.type-bar-track{flex:1;height:8px;background:var(--surface-raised);border-radius:4px;overflow:hidden}.type-bar-fill{height:100%;border-radius:4px;transition:width .4s ease}.type-bar-count{width:28px;text-align:right;font-size:12px;color:var(--text-primary);font-weight:600;flex-shrink:0}.type-bars-legend{display:flex;flex-direction:column;gap:8px}.type-legend-item{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary)}.type-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.marking-section{margin-bottom:32px}.marking-section-title{font-size:13px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:14px}.marking-section-title--done{color:var(--text-muted)}.marking-course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.marking-course-card{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;transition:border-color .15s,background .15s}.marking-course-card:hover{border-color:var(--teal);background:var(--surface-raised)}.marking-course-done{opacity:.55}.marking-course-done:hover{opacity:1}.marking-course-body{padding:16px 18px;cursor:pointer;flex:1;outline:none}.marking-course-body:focus-visible{box-shadow:inset 0 0 0 2px var(--teal)}.marking-course-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px}.course-sync-row{display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:8px 12px;border-top:1px solid var(--border);background:var(--surface-raised)}.btn-course-sync{font-size:11px;font-weight:600;padding:4px 10px;border-radius:6px;background:transparent;border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;display:flex;align-items:center;gap:5px;transition:border-color .15s,color .15s;white-space:nowrap}.btn-course-sync:hover:not(:disabled){border-color:var(--teal);color:var(--teal)}.btn-course-sync:disabled{opacity:.45;cursor:not-allowed}.btn-spinner{display:inline-block;width:10px;height:10px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin .7s linear infinite}.course-sync-error{font-size:11px;color:var(--red, #f87171);flex:1}.badge-pending{background:#d2992226;color:var(--amber);font-size:11px;font-weight:600;padding:3px 8px;border-radius:20px;white-space:nowrap}.badge-done{background:#3fb9501f;color:var(--green);font-size:11px;font-weight:600;padding:3px 8px;border-radius:20px}.marking-type-pills{display:flex;gap:6px;margin-bottom:10px}.type-pill{font-size:10px;font-weight:600;padding:2px 7px;border-radius:20px;text-transform:uppercase;letter-spacing:.3px}.pill-quiz{background:#6366f126;color:#818cf8}.pill-task{background:#0ea5e926;color:#38bdf8}.pill-declaration{background:#f59e0b26;color:#f59e0b}.pill-resubmission{background:#f9731633;color:#fb923c;border:1px solid rgba(249,115,22,.3)}.marking-bar-row{display:flex;align-items:center;gap:10px}.marking-bar-track{flex:1;height:4px;background:var(--surface-raised);border-radius:2px;overflow:hidden}.marking-bar-fill{height:100%;background:var(--green);border-radius:2px;transition:width .4s ease}.marking-bar-label{font-size:11px;color:var(--text-muted);width:32px;text-align:right;flex-shrink:0}.schedules-list{display:flex;flex-direction:column;gap:16px}.schedule-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden;max-width:560px}.schedule-card-header{display:flex;justify-content:space-between;align-items:center;padding:18px 20px;border-bottom:1px solid var(--border);background:var(--surface-raised)}.schedule-card-title{font-weight:600;font-size:14px;color:var(--text-primary)}.schedule-status-badge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}.badge-active{background:#3fb95026;color:var(--green)}.badge-paused{background:#64748b26;color:var(--text-secondary)}.schedule-details{padding:16px 20px;display:flex;flex-direction:column;gap:12px}.schedule-detail-row{display:flex;gap:16px;align-items:center}.schedule-detail-label{font-size:12px;color:var(--text-muted);width:72px;flex-shrink:0}.schedule-detail-value{font-size:13px;color:var(--text-primary)}.schedule-actions{display:flex;gap:8px;padding:14px 20px;border-top:1px solid var(--border);background:var(--surface-raised);flex-wrap:wrap}.day-pills{display:flex;gap:4px;flex-wrap:wrap}.day-pill{font-size:11px;font-weight:600;padding:2px 7px;border-radius:4px}.day-pill-on{background:#0ea5e926;color:#38bdf8}.day-pill-off{background:var(--surface);color:var(--text-muted);opacity:.5}.schedule-empty{padding:32px 0}.schedule-form-wrap{margin-top:24px;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:24px;max-width:520px}.schedule-form-title{font-size:15px;font-weight:600;color:var(--text-primary);margin-bottom:20px}.schedule-form{display:flex;flex-direction:column;gap:18px}.form-row{display:flex;flex-direction:column;gap:6px}.form-label{font-size:12px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.4px}.time-inputs{display:flex;align-items:center;gap:8px}.time-colon{font-size:18px;font-weight:600;color:var(--text-primary);margin:0 2px}.form-hint{font-size:11px;color:var(--text-muted);margin-left:4px}.form-select{background:var(--surface-raised);border:1px solid var(--border);color:var(--text-primary);border-radius:6px;padding:6px 10px;font-size:13px;cursor:pointer}.form-select:focus{outline:none;border-color:var(--teal)}.day-toggle-row{display:flex;gap:6px;flex-wrap:wrap}.day-toggle{font-size:12px;font-weight:600;padding:5px 10px;border-radius:6px;border:1px solid var(--border);background:var(--surface-raised);color:var(--text-muted);cursor:pointer;transition:all .15s}.day-toggle-on{background:#0ea5e926;border-color:#38bdf8;color:#38bdf8}.day-toggle:hover:not(.day-toggle-on){border-color:var(--teal);color:var(--teal)}.schedule-form-info{font-size:12px;color:var(--text-muted);line-height:1.5;background:var(--surface-raised);border-radius:6px;padding:10px 12px;border:1px solid var(--border)}.schedule-form-actions{display:flex;gap:8px}.btn-danger{background:#f871711f;color:#f87171;border:1px solid rgba(248,113,113,.3);border-radius:7px;padding:7px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s}.btn-danger:hover:not(:disabled){background:#f8717138}.btn-danger:disabled{opacity:.45;cursor:not-allowed}.delete-modal{max-width:480px;border-color:#f8717140}.delete-modal-icon{font-size:32px;text-align:center}.delete-modal h2{font-size:18px;font-weight:700;color:#f87171;text-align:center}.delete-warning-box{background:#f8717114;border:1px solid rgba(248,113,113,.25);border-radius:8px;padding:12px 16px;font-size:13px;color:#f87171}.settings-section{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:24px 28px;display:flex;flex-direction:column;gap:20px}.settings-section-title{font-size:15px;font-weight:700;color:var(--text-primary);margin:0}.settings-section-desc{font-size:13px;color:var(--text-secondary);margin:0;line-height:1.6}.settings-notes{padding-left:20px;display:flex;flex-direction:column;gap:6px}.settings-notes li{font-size:13px;color:var(--text-secondary);line-height:1.5}.settings-notes code{font-family:monospace;background:var(--surface-raised);border-radius:4px;padding:1px 5px;font-size:12px;color:var(--teal)}.provider-cards{display:flex;flex-direction:column;gap:14px}.provider-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;padding:20px 22px;display:flex;flex-direction:column;gap:12px;transition:border-color .15s}.provider-card--active{border-color:#a855f773;background:#a855f70d}.provider-card-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}.provider-card-title{display:flex;align-items:center;gap:10px}.provider-name{font-size:15px;font-weight:700;color:var(--text-primary)}.badge-active-provider{background:#a855f733;color:var(--teal);border:1px solid rgba(168,85,247,.35);font-weight:700;font-size:11px}.provider-desc{font-size:13px;color:var(--text-secondary);line-height:1.55;margin:0}.provider-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.provider-key-status{display:flex;align-items:center;gap:8px}.key-set-indicator{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text-secondary)}.key-set-indicator.not-set{color:var(--text-muted)}.key-dot{width:8px;height:8px;border-radius:50%;background:var(--border);display:inline-block}.key-dot.set{background:var(--green);box-shadow:0 0 6px #3fb95080}.key-hint{font-family:monospace;font-size:12px;color:var(--text-muted)}.provider-key-form{background:var(--surface-overlay);border:1px solid var(--border-subtle);border-radius:8px;padding:16px;display:flex;flex-direction:column;gap:12px}.provider-key-form-actions{display:flex;gap:8px;flex-wrap:wrap}.settings-page{display:flex;gap:0;min-height:100%;padding:32px 0}.settings-sidebar{width:220px;flex-shrink:0;padding:0;border-right:1px solid var(--border)}.settings-title{font-size:15px;font-weight:700;color:var(--text-primary);padding:0 20px 20px}.settings-content{flex:1;padding:0 40px;min-width:0}.settings-nav{display:flex;flex-direction:column;gap:2px;padding:0 10px}.settings-nav-link{display:block;padding:9px 14px;border-radius:6px;font-size:13px;color:var(--text-secondary);text-decoration:none;transition:background .15s,color .15s}.settings-nav-link:hover{background:var(--surface-raised);color:var(--text-primary)}.settings-nav-link.active{background:#a855f71f;color:var(--teal);font-weight:600}.settings-panel{display:flex;flex-direction:column;gap:0;padding:0;max-width:580px}.settings-panel-title{font-size:15px;font-weight:700;color:var(--text-primary);margin:0 0 6px}.settings-panel-subtitle{font-size:13px;font-weight:600;color:var(--text-primary);margin:0 0 6px}.settings-panel-desc{font-size:13px;color:var(--text-secondary);margin:0 0 20px;line-height:1.6}.settings-section-inner{display:flex;flex-direction:column;gap:0;padding-bottom:32px;margin-bottom:32px;border-bottom:1px solid var(--border-subtle)}.settings-section-inner:last-child{border-bottom:none;margin-bottom:0}.sidebar-nav-settings{margin-top:auto;border-top:1px solid var(--border-subtle);padding-top:8px}.sidebar-nav-section-label{font-size:10px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--text-muted);padding:6px 16px 4px;pointer-events:none}.canvas-status-badge{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;font-size:13px;margin-bottom:16px}.canvas-status-badge.connected{background:#3fb95014;border:1px solid rgba(63,185,80,.22);color:var(--green)}.canvas-status-badge.disconnected{background:#d2992214;border:1px solid rgba(210,153,34,.22);color:var(--amber)}.canvas-status-dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex-shrink:0}.canvas-status-url{font-weight:500}.canvas-guide{background:var(--surface-raised);border:1px solid var(--border);border-radius:8px;padding:16px 20px;margin-top:4px}.canvas-guide-title{font-size:13px;font-weight:600;color:var(--text-primary);margin:0 0 12px}.canvas-guide-steps{padding-left:20px;display:flex;flex-direction:column;gap:7px}.canvas-guide-steps li{font-size:13px;color:var(--text-secondary);line-height:1.5}.canvas-guide-steps strong{color:var(--text-primary)}.canvas-guide-link{margin-top:12px;display:inline-block}.canvas-guide-toggle{margin-top:4px;display:inline-block;font-size:12px}.form-hint-box{background:#a855f712;border:1px solid rgba(168,85,247,.2);border-radius:7px;padding:10px 14px;font-size:12px;color:var(--text-secondary);margin-bottom:4px}.signoff-total-badge{background:#3fb9501f;color:var(--green);border:1px solid rgba(63,185,80,.3);border-radius:20px;padding:4px 14px;font-size:13px;font-weight:600;white-space:nowrap;align-self:center}.signoff-submitted-count-badge{background:#6366f11f;color:#a5b4fc;border:1px solid rgba(99,102,241,.3);border-radius:20px;padding:4px 14px;font-size:13px;font-weight:600;white-space:nowrap;align-self:center}.signoff-courses{display:flex;flex-direction:column;gap:24px}.signoff-course-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;overflow:hidden}.signoff-course-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--surface-overlay);border-bottom:1px solid var(--border-subtle)}.signoff-course-title{display:flex;align-items:baseline;gap:10px}.signoff-unit-code{font-weight:700;font-size:13px;color:var(--accent);letter-spacing:.3px}.signoff-course-name{font-size:13px;color:var(--text-secondary)}.signoff-count-badge{background:#3fb9501f;color:var(--green);border:1px solid rgba(63,185,80,.25);border-radius:12px;padding:2px 10px;font-size:12px;font-weight:600}.signoff-table{width:100%;border-collapse:collapse;font-size:13px}.signoff-table th{padding:8px 20px;text-align:left;font-size:11px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;color:var(--text-muted);border-bottom:1px solid var(--border-subtle)}.signoff-table td{padding:12px 20px;border-bottom:1px solid var(--border-subtle);vertical-align:middle}.signoff-table tr:last-child td{border-bottom:none}.signoff-table tr:hover td{background:var(--surface-overlay)}.signoff-student-name{font-weight:500;color:var(--text-primary)}.signoff-done-badge{background:#3fb9501a;color:var(--green);border-radius:10px;padding:2px 8px;font-size:12px;font-weight:600}.signoff-date{color:var(--text-muted);font-size:12px}.signoff-action{text-align:right}.signoff-note{padding:8px 20px 10px;font-size:11px;color:var(--text-muted);margin:0}.signoff-pdf-redirect{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 20px;background:#58a6ff0f;border-top:1px solid var(--border-subtle)}.signoff-pdf-redirect-body{display:flex;align-items:center;gap:10px}.signoff-pdf-redirect-icon{font-size:20px;flex-shrink:0}.signoff-student-row td{vertical-align:top}.signoff-open-btn-wrap{display:flex;flex-direction:column;align-items:flex-end;gap:5px}.signoff-prefill-badge{font-size:10px;color:var(--green);background:#3fb9501a;border:1px solid rgba(63,185,80,.25);border-radius:10px;padding:2px 7px;white-space:nowrap}.signoff-row-submitted td{opacity:.65}.signoff-row-submitted:hover td{opacity:1}.signoff-status-cell{white-space:nowrap}.signoff-status-submitted{display:flex;flex-direction:column;gap:3px}.signoff-submitted-badge{display:inline-flex;align-items:center;gap:4px;background:#3fb9501f;color:var(--green);border:1px solid rgba(63,185,80,.3);border-radius:20px;padding:3px 10px;font-size:12px;font-weight:600}.signoff-submitted-date{font-size:11px;color:var(--text-muted);padding-left:2px}.signoff-undo-btn{font-size:11px;color:var(--text-muted);padding:1px 6px;margin-top:1px}.signoff-mark-btn{white-space:nowrap}.signoff-msg-cell{min-width:220px}.signoff-msg-generating{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-muted)}.spinner-inline{display:inline-block;width:12px;height:12px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}.signoff-msg-box{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface-overlay);min-width:340px}.signoff-msg-toolbar{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;border-bottom:1px solid var(--border-subtle);background:var(--surface-raised)}.signoff-msg-textarea{width:100%;box-sizing:border-box;padding:12px;font-size:12.5px;line-height:1.65;font-family:inherit;background:transparent;color:var(--text-primary);border:none;resize:vertical;min-height:200px}.signoff-msg-textarea:focus{outline:none}.jotform-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;background:#000000b8;display:flex;align-items:flex-start;justify-content:center;padding:24px 16px;animation:fadeIn .15s ease}.jotform-modal-container{width:100%;max-width:860px;height:calc(100vh - 48px);background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 8px 40px #00000080}.jotform-modal-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface-overlay);flex-shrink:0}.jotform-modal-title{font-size:14px;font-weight:600;color:var(--text)}.jotform-modal-close{background:none;border:none;cursor:pointer;font-size:18px;color:var(--text-muted);padding:2px 6px;border-radius:4px;line-height:1}.jotform-modal-close:hover{background:var(--surface-hover);color:var(--text)}.jotform-modal-iframe{flex:1;border:none;width:100%;background:#fff}.jotform-regenerating{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;color:var(--text-muted);font-size:14px}.jotform-mobile-launch{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:32px 24px;text-align:center}.jotform-mobile-launch-hint{font-size:14px;color:var(--text-secondary);max-width:320px;line-height:1.5}.jotform-confirm-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 16px;background:#f0faf9;border-bottom:1px solid #b2e4df;font-size:13px}.jotform-confirm-hint{color:var(--text-secondary);flex:1;min-width:200px}.jotform-confirm-btn{white-space:nowrap}.jotform-confirm-success{display:flex;align-items:center;gap:6px;color:#1a7a6e;font-weight:600;font-size:13px}.signoff-tabs{display:flex;gap:0;margin-bottom:20px;border-bottom:2px solid var(--border)}.signoff-tab{padding:8px 20px;font-size:13px;font-weight:500;border:none;background:none;cursor:pointer;color:var(--text-secondary);border-bottom:2px solid transparent;margin-bottom:-2px;display:flex;align-items:center;gap:6px}.signoff-tab:hover{color:var(--text)}.signoff-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.signoff-log-count{background:var(--accent);color:#fff;border-radius:10px;padding:1px 7px;font-size:11px;font-weight:700}.signoff-log{margin-top:4px}.signoff-log-summary{margin-bottom:16px;font-size:13px;color:var(--text-secondary);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.signoff-log-total{font-weight:600;color:var(--text)}.signoff-log-payable{font-size:13px;color:var(--text-secondary);background:#3fb9501a;border:1px solid rgba(63,185,80,.3);padding:4px 10px;border-radius:16px}.signoff-log-payable strong{color:var(--green)}.signoff-log-month{margin-bottom:24px}.signoff-log-month-header{display:flex;align-items:center;justify-content:space-between;padding:8px 0 8px 4px;border-bottom:2px solid var(--border);margin-bottom:4px}.signoff-log-month-name{font-size:14px;font-weight:700;color:var(--text)}.signoff-log-month-count{font-size:12px;color:var(--text-muted)}.signoff-log-row td{font-size:13px}.signoff-log-date{font-size:12px;color:var(--text-secondary);white-space:nowrap}.signoff-level-badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:11px;font-weight:600;line-height:1.5;white-space:nowrap;background:#7d85901f;color:var(--text-secondary);border:1px solid var(--border-subtle)}.signoff-level-cert_iv,.signoff-level-cert_iii,.signoff-level-cert_ii,.signoff-level-cert_i{background:#58a6ff1f;color:var(--blue);border-color:#58a6ff4d}.signoff-level-diploma,.signoff-level-adv_diploma{background:#a855f71f;color:var(--purple);border-color:#a855f74d}.signoff-mobile-pay{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:4px}.signoff-rate-amount{font-weight:600;color:var(--green);font-variant-numeric:tabular-nums}.date-range-filter{display:flex;flex-direction:column;gap:10px;margin-bottom:24px}.date-range-presets{display:flex;gap:6px;flex-wrap:wrap}.date-range-preset{padding:6px 16px;border-radius:20px;border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:border-color .15s,color .15s,background .15s;white-space:nowrap;font-family:inherit}.date-range-preset:hover{border-color:var(--teal);color:var(--text-primary);background:var(--surface-raised)}.date-range-preset.active{background:var(--teal);border-color:var(--teal);color:#fff;font-weight:600}.date-range-custom{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.date-input{padding:6px 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface-raised);color:var(--text-primary);font-size:13px;font-family:inherit}.date-input:focus{outline:none;border-color:var(--teal)}.date-range-sep{color:var(--text-muted);font-size:13px}.date-range-period-label{font-size:13px;color:var(--text-muted);margin-bottom:16px;margin-top:-6px}.period-activity-row{margin-bottom:6px}.period-activity-badge{display:inline-flex;align-items:center;padding:2px 9px;background:#a855f71a;border:1px solid rgba(168,85,247,.22);border-radius:10px;color:var(--teal);font-size:12px;font-weight:500}.lookup-search-form{display:flex;gap:12px;align-items:center;margin-bottom:24px;flex-wrap:wrap}.lookup-search-input{flex:1;min-width:220px;max-width:420px}.lookup-course-filter{min-width:200px;max-width:320px}.lookup-results-header{font-size:13px;color:var(--text-secondary);margin-bottom:12px}.lookup-results-header strong{color:var(--text-primary)}.lookup-results-wrap{overflow-x:auto;border-radius:8px;border:1px solid var(--border)}.lookup-table td:nth-child(3){max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lookup-cards{display:flex;flex-direction:column;gap:10px}.lookup-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px}.lookup-card-ineligible{opacity:.72}.lookup-card-header{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:7px}.lookup-card-student strong{font-size:14px;color:var(--text-primary)}.lookup-card-email{font-size:11px;color:var(--text-secondary);margin-top:2px}.lookup-card-assignment{font-size:13px;color:var(--text-primary);line-height:1.35;margin-bottom:8px}.lookup-card-meta{display:flex;align-items:center;gap:7px;margin-bottom:10px}.lookup-card-unit{font-size:11px;font-weight:600;color:var(--text-secondary);background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:2px 6px}.lookup-card-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px}.lookup-card-signoff{display:flex;margin:6px 0 4px}.signoff-lookup-btn{white-space:nowrap}.signoff-lookup-btn-disabled{white-space:nowrap;opacity:.55;cursor:not-allowed;background:#7d85901f;color:var(--text-secondary);border:1px solid var(--border-subtle)}.signoff-lookup-btn-legacy{white-space:nowrap;background:#f59e0b1f;color:#b45309;border:1px solid rgba(245,158,11,.4);font-weight:600}.signoff-lookup-btn-legacy:hover{background:#f59e0b38}.attempt-badge{display:inline-block;margin-left:7px;padding:1px 7px;font-size:10px;font-weight:600;border-radius:10px;background:#6366f11f;color:#6366f1;border:1px solid rgba(99,102,241,.25);vertical-align:middle;letter-spacing:.2px}.course-pdf-signoff-btn{display:inline-flex;align-items:center;gap:6px}.course-pdf-signoff-badge{background:#d2992233;color:var(--amber);border-radius:10px;padding:1px 7px;font-size:11px;font-weight:700}.section-title{font-size:13px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px;display:flex;align-items:center;gap:8px}.count-pill{background:#6366f11f;color:#a5b4fc;border:1px solid rgba(99,102,241,.25);border-radius:12px;padding:1px 9px;font-size:11px;font-weight:600}.empty-state-card{background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;padding:40px 24px;text-align:center;color:var(--text-secondary);font-size:14px}.signoff-student-list{display:flex;flex-direction:column;gap:8px}.signoff-student-row{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--surface-raised);border:1px solid var(--border);border-radius:8px}.signoff-student-row:hover{border-color:var(--border-light)}.signoff-student-info{flex:1;min-width:0}.signoff-student-status{flex-shrink:0}.signoff-modal{gap:0!important;padding:0!important}.signoff-modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--border-subtle)}.signoff-modal-body{padding:20px 24px 24px;display:flex;flex-direction:column;gap:16px}.signoff-stepper{display:flex;align-items:center;gap:0;margin-bottom:20px}.signoff-step{display:flex;align-items:center;gap:8px}.signoff-step-label{font-size:12px;font-weight:500;color:var(--text-muted);white-space:nowrap}.signoff-step.active .signoff-step-label{color:var(--text-primary);font-weight:600}.signoff-step.done .signoff-step-label{color:var(--text-secondary)}.signoff-step-line{flex:1;height:1px;background:var(--border);margin:0 8px;min-width:20px}.signoff-step-line.done{background:var(--teal)}.signoff-step-badge{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;border:2px solid var(--border);color:var(--text-muted);background:var(--surface-overlay)}.signoff-step-badge.active{border-color:var(--teal);color:var(--teal);background:#20b2aa1f}.signoff-step-badge.done{border-color:var(--teal);color:#fff;background:var(--teal)}.signoff-step-panel{display:flex;flex-direction:column;gap:12px}.signoff-panel-title{font-size:15px;font-weight:700;color:var(--text-primary);margin:0}.signoff-panel-desc{font-size:13px;color:var(--text-secondary);margin:0;line-height:1.55}.signoff-step1-actions{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.signoff-confirm-bar{background:var(--surface-overlay);border:1px solid var(--border);border-radius:8px;padding:14px 16px}.signoff-field-row{display:flex;align-items:baseline;gap:12px;padding:8px 0;border-bottom:1px solid var(--border-subtle)}.signoff-field-label{font-size:12px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.4px;min-width:110px}.signoff-field-value{font-size:13px;color:var(--text-primary)}.signoff-rubric-section{background:var(--surface-overlay);border:1px solid var(--border);border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:8px}.signoff-rubric-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.signoff-rubric-name{font-size:13px;color:var(--text-secondary);flex:1;min-width:0}.badge-competent{background:#3fb95026;color:var(--green);border:1px solid rgba(63,185,80,.3);border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600;white-space:nowrap}.badge-satisfactory{background:#58a6ff1f;color:#58a6ff;border:1px solid rgba(88,166,255,.25);border-radius:10px;padding:2px 8px;font-size:11px;font-weight:600;white-space:nowrap}.form-textarea{background:var(--surface-raised);border:1px solid var(--border);border-radius:6px;color:var(--text-primary);padding:10px 12px;font-size:13px;line-height:1.6;resize:vertical}.form-textarea:focus{outline:none;border-color:var(--teal)}.signoff-complete{align-items:center;text-align:center;padding:20px 0}.signoff-complete-icon{width:52px;height:52px;border-radius:50%;background:#3fb95026;color:var(--green);display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;margin:0 auto 12px}.signoff-complete-details{background:var(--surface-overlay);border:1px solid var(--border);border-radius:8px;padding:14px 18px;text-align:left;display:flex;flex-direction:column;gap:8px;margin-top:12px}.signoff-complete-row{display:flex;gap:12px;font-size:13px}.signoff-complete-label{font-weight:600;color:var(--text-muted);min-width:80px;font-size:12px;text-transform:uppercase;letter-spacing:.3px;padding-top:1px}.signoff-complete-checks{display:flex;flex-direction:column;gap:4px;margin-top:4px;padding-top:10px;border-top:1px solid var(--border-subtle)}.signoff-review-card{background:var(--surface-overlay);border:1px solid var(--border);border-radius:8px;padding:14px 18px;display:flex;flex-direction:column;gap:10px}.signoff-review-row{display:grid;grid-template-columns:90px 1fr;gap:10px;font-size:13px;align-items:start}.signoff-review-label{font-weight:600;color:var(--text-muted);font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding-top:2px}.signoff-review-feedback-text{color:var(--text-secondary);font-size:12.5px;line-height:1.55}.signoff-pdf-capture-notice{display:flex;align-items:flex-start;gap:8px;background:#58a6ff12;border:1px solid rgba(88,166,255,.25);border-radius:8px;padding:10px 14px;font-size:12.5px;color:var(--text-secondary);line-height:1.5}.signoff-pdf-capture-icon{font-size:15px;flex-shrink:0;margin-top:1px}.signoff-access-hint{display:flex;gap:10px;align-items:flex-start;background:#8b5cf612;border:1px solid rgba(139,92,246,.2);border-radius:10px;padding:12px 14px;font-size:13px;color:var(--text-primary);line-height:1.5;margin-bottom:4px}.signoff-access-hint-icon{font-size:18px;flex-shrink:0}.signoff-submitted-banner{display:flex;gap:12px;align-items:flex-start;background:#3fb95014;border:1px solid rgba(63,185,80,.3);border-radius:10px;padding:14px 16px}.signoff-submitted-icon{font-size:22px;flex-shrink:0;line-height:1}.signoff-submitted-body{display:flex;flex-direction:column;gap:4px;font-size:13px}.signoff-submitted-body strong{color:var(--green);font-size:14px}.signoff-submitted-body p{margin:0;color:var(--text-secondary);line-height:1.5}.signoff-ref-pill{display:inline-block;background:#3fb9501f;border:1px solid rgba(63,185,80,.25);border-radius:12px;padding:2px 10px;font-size:11px;color:var(--green);font-family:monospace;margin-top:4px}.signoff-ref-notice{background:var(--surface-overlay);border:1px solid var(--border);border-radius:6px;padding:6px 12px;font-size:12px;color:var(--text-secondary)}.signoff-check{font-size:13px;color:var(--text-secondary)}.signoff-iframe-wrap{border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface-overlay)}.signoff-iframe{display:block;width:100%;height:620px;border:none}.signoff-iframe-hint{display:flex;gap:8px;align-items:flex-start;background:#58a6ff14;border:1px solid rgba(88,166,255,.2);border-radius:8px;padding:10px 14px;font-size:13px;color:var(--text-secondary);line-height:1.5}.signoff-sig-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.signoff-sig-wrap{position:relative;border:1.5px solid var(--border);border-radius:8px;background:#fff;overflow:hidden}.signoff-sig-canvas{display:block;width:100%;cursor:crosshair;touch-action:none;-webkit-user-select:none;user-select:none}.signoff-sig-placeholder{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:13px;color:#bbb;pointer-events:none;-webkit-user-select:none;user-select:none;white-space:nowrap}.signoff-populate-row{display:flex;align-items:center;gap:14px;padding:10px 0}.signoff-populate-hint{font-size:13px;color:var(--text-secondary);line-height:1.4}.btn-populated{opacity:.75;cursor:default}.btn-secondary{background:#8b5cf61f;color:var(--purple);border:1px solid rgba(139,92,246,.3);border-radius:8px;padding:8px 16px;font-size:13px;font-weight:600;cursor:pointer;transition:background .15s;white-space:nowrap}.btn-secondary:hover:not(:disabled){background:#8b5cf633}.btn-secondary:disabled{opacity:.4;cursor:not-allowed}.signoff-drop-zone{display:flex;align-items:center;gap:10px;padding:20px;border:2px dashed var(--border);border-radius:8px;cursor:pointer;transition:border-color .15s,background .15s;background:var(--surface-overlay);flex-wrap:wrap}.signoff-drop-zone:hover{border-color:var(--teal);background:#20b2aa0d}.signoff-drop-zone.has-file{border-style:solid;border-color:var(--teal);background:#20b2aa0f}.signoff-drop-icon{font-size:22px}.signoff-drop-filename{font-size:13px;font-weight:600;color:var(--text-primary)}.signoff-drop-size{font-size:12px;color:var(--text-muted)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.mobile-header,.hamburger-btn,.mobile-nav-overlay,.sidebar-close-btn{display:none}.stat-card-clickable{cursor:pointer;transition:background .15s,border-color .15s,transform .1s;position:relative}.stat-card-clickable:hover{background:var(--surface-raised);border-color:var(--teal)}.stat-card-clickable:active{transform:scale(.97)}.stat-card-hint{font-size:11px;color:var(--teal);margin-top:4px;opacity:0;transition:opacity .15s}.stat-card-clickable:hover .stat-card-hint,.stat-card-clickable:focus .stat-card-hint{opacity:1}.queue-page{max-width:860px}.queue-page-header{display:flex;align-items:center;gap:12px;margin-bottom:24px}.queue-page-title{margin:0}.queue-back-btn{flex-shrink:0}.queue-total-badge{display:inline-flex;align-items:center;justify-content:center;min-width:28px;padding:2px 8px;background:var(--surface-raised);border:1px solid var(--border);border-radius:20px;font-size:13px;font-weight:600;color:var(--text-secondary)}.queue-list{display:flex;flex-direction:column;gap:12px}.queue-assignment-group{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden}.queue-assignment-header{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:12px 16px;background:var(--surface-raised);border-bottom:1px solid var(--border)}.queue-assignment-name{font-size:14px;font-weight:600;color:var(--text-primary)}.queue-assignment-meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text-secondary);white-space:nowrap}.queue-student-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;padding:1px 6px;background:var(--border);border-radius:10px;font-size:11px;font-weight:600;color:var(--text-primary)}.queue-students{display:flex;flex-direction:column}.queue-student-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 16px;border-bottom:1px solid var(--border);transition:background .12s}.queue-student-row:last-child{border-bottom:none}.queue-student-row:hover{background:var(--surface-overlay)}.queue-student-info{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.queue-student-name{font-size:14px;font-weight:500;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.queue-badge{display:inline-flex;align-items:center;padding:2px 7px;border-radius:10px;font-size:10px;font-weight:600;white-space:nowrap;flex-shrink:0}.queue-badge-resubmit{background:#f8717126;color:var(--coral);border:1px solid rgba(248,113,113,.3)}.queue-badge-marked{background:#3fb9501f;color:var(--green);border:1px solid rgba(63,185,80,.25)}.queue-badge-draft{background:#58a6ff1f;color:var(--blue);border:1px solid rgba(88,166,255,.25)}.queue-student-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}.queue-sg-btn{font-size:11px;font-weight:700;letter-spacing:.3px;padding:4px 8px;color:var(--text-secondary);border-color:var(--border)}.queue-sg-btn:hover{color:var(--text-primary);border-color:var(--text-secondary)}@media(max-width:768px){.queue-assignment-header{flex-direction:column;gap:4px}.queue-assignment-meta{font-size:11px}.queue-student-name{font-size:13px}.stat-card-hint{opacity:1}}@media(max-width:768px){.submission-attachments{flex-direction:column;align-items:stretch;gap:4px}.submission-attachments .meta-label{min-width:0;margin-bottom:2px}.attachment-item{flex-wrap:wrap;row-gap:4px;padding:7px 10px;min-width:0}.attachment-name{min-width:0;flex:1 1 100%;word-break:break-word;white-space:normal;overflow:visible;text-overflow:clip}.attachment-size,.attachment-url-pending{margin-left:0}.attachment-item .badge{margin-left:0!important}.declaration-attachment{display:flex;max-width:100%;min-width:0}.declaration-attachment>span{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}body{overflow-x:hidden}@media(max-width:768px){html,body{position:fixed;width:100%;height:100%;overflow:hidden;overscroll-behavior:none;-webkit-overflow-scrolling:auto}#root{width:100%;height:100%;overflow:hidden;overscroll-behavior:none}}@media(max-width:768px){.mobile-header{display:flex;align-items:center;gap:10px;padding:0 16px;height:52px;background:#0b0d12;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:150;flex-shrink:0}.mobile-header-logo{height:24px;width:auto}.hamburger-btn{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 10px;gap:6px;background:var(--surface-overlay);border:1px solid var(--border);border-radius:8px;color:var(--text-primary);font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;flex-shrink:0;transition:background .15s,border-color .15s}.hamburger-btn:active{background:var(--surface-raised);border-color:var(--teal)}.sidebar{width:min(280px,82vw);transform:translate(-100%);transition:transform .25s cubic-bezier(.4,0,.2,1);z-index:200}.app-layout.sidebar-open .sidebar{transform:translate(0);box-shadow:8px 0 40px #000000b3}.sidebar-close-btn{display:flex;align-items:center;justify-content:center;min-width:36px;min-height:36px;margin-left:auto;background:none;border:1px solid var(--border);border-radius:6px;color:var(--text-secondary);cursor:pointer;flex-shrink:0;transition:background .15s,color .15s}.sidebar-close-btn:active{background:var(--surface-overlay);color:var(--text-primary)}.sidebar-logo{display:flex;align-items:center;padding:14px 16px}.sidebar-logo-img{width:120px}.sidebar-nav a,.sidebar-nav button.nav-link{padding:13px 20px;font-size:15px}.mobile-nav-overlay{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:190;animation:fadeIn .18s ease}.main-content{margin-left:0;display:flex;flex-direction:column;min-width:0}.page,.page-body{padding:16px}.page-header{padding:10px 16px;margin-bottom:16px;flex-wrap:wrap;gap:8px}.grading-back-btn{display:none}.grading-page-title{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.login-card{padding:28px 20px;margin:16px}.stats-row,.stat-cards{grid-template-columns:1fr 1fr}.page-header-actions{flex-wrap:wrap;max-width:100%}.marking-page .page-header{flex-direction:column;align-items:flex-start}.marking-summary-row{gap:10px}.marking-stat-card{min-width:0;padding:14px 16px}.marking-stat-card .stat-number{font-size:26px}.marking-charts-row{flex-direction:column}.marking-chart-card{min-width:unset}.marking-course-grid,.course-list,.card-grid{grid-template-columns:1fr}.usage-card{min-width:unset;width:100%}.assignment-header{flex-wrap:wrap;gap:8px;padding:12px 14px}.assignment-meta{flex-wrap:wrap}.student-list{overflow-x:auto;-webkit-overflow-scrolling:touch;padding:4px 0 10px}.data-table{min-width:460px}.table-container{overflow-x:auto;-webkit-overflow-scrolling:touch}.grading-body{padding:16px}.grading-header{padding:12px 16px;flex-wrap:wrap;gap:8px}.grading-footer{padding:12px 16px;flex-wrap:wrap;gap:10px}.grading-actions{flex-wrap:wrap;gap:8px}.grading-panel{max-width:100%}.grader-body,.grading-fields{padding:16px}.grading-section-header{flex-wrap:wrap;gap:8px;align-items:flex-start}.grading-section-actions{flex-wrap:wrap;gap:6px}.rating-btn-row{flex-direction:column}.rating-btn{min-width:unset;width:100%;flex-direction:row;justify-content:flex-start;gap:12px;padding:12px 14px}.rating-abbr{font-size:14px;min-width:36px;text-align:left}.rating-label-text{flex:1;text-align:left}.rating-pts{margin-top:0;margin-left:auto}.score-chip{min-width:48px;padding:8px 12px;font-size:14px}.settings-page{flex-direction:column;padding:0}.settings-sidebar{width:100%;border-right:none;border-bottom:1px solid var(--border);padding-bottom:8px}.settings-nav{flex-direction:row;flex-wrap:wrap;padding:0 10px 6px}.settings-nav-link{padding:8px 12px;font-size:13px}.settings-content{padding:16px}.modal-card{width:calc(100vw - 32px);max-width:100%;padding:20px 16px}.modal-overlay{padding:16px;align-items:flex-end}.submit-all-banner,.pdf-signoff-course-banner{flex-direction:column;align-items:flex-start}.course-detail-page{gap:16px}.course-detail-header{padding:14px 16px}.signoff-course-header{flex-wrap:wrap;gap:8px;padding:12px 14px}.signoff-msg-box{min-width:unset;width:100%}.signoff-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.signoff-table{min-width:520px}.signoff-iframe{height:420px}.signoff-mobile-cards{display:flex;flex-direction:column;gap:10px;padding:12px 14px}.signoff-mobile-card{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:12px}.signoff-mobile-card-done{opacity:.72}.signoff-mobile-card-top{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:5px}.signoff-mobile-name{font-size:14px;color:var(--text-primary)}.signoff-mobile-meta{font-size:12px;color:var(--text-secondary);margin-bottom:3px}.signoff-mobile-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}.jotform-modal-overlay{padding:0}.jotform-modal-container{max-width:100%;width:100%;height:100vh;border-radius:0}}.mobile-app-shell{display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden;overscroll-behavior:none;background:var(--bg);padding-top:env(safe-area-inset-top)}.mobile-page-content{flex:1;overflow-y:auto;overflow-x:hidden;overscroll-behavior:none;-webkit-transform:translateZ(0);transform:translateZ(0)}.error-boundary-fallback{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 24px;text-align:center;min-height:300px}.error-boundary-icon{font-size:40px}.error-boundary-title{font-size:18px;font-weight:600;color:var(--text-primary)}.error-boundary-msg{font-size:13px;color:var(--text-secondary);max-width:360px}.error-boundary-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin-top:8px}.mobile-tab-bar{display:flex;flex-shrink:0;height:calc(56px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--surface);border-top:1px solid var(--border)}.mobile-tab-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:6px 4px;color:var(--text-muted);text-decoration:none;transition:color .15s;-webkit-tap-highlight-color:transparent}.mobile-tab-item.active{color:var(--teal)}.mobile-tab-item:active{opacity:.6}.mobile-tab-icon{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.mobile-tab-label{font-size:10px;font-weight:500;letter-spacing:.2px;line-height:1}.ptr-bar{flex-shrink:0;display:flex;align-items:center;justify-content:center;gap:7px;overflow:hidden;color:var(--teal);font-size:12px;font-weight:500;pointer-events:none;-webkit-user-select:none;user-select:none;background:var(--bg)}.mobile-grading-shell{display:flex;flex-direction:column;height:100%;width:100%;overflow:hidden;overscroll-behavior:none;background:var(--bg);padding-top:env(safe-area-inset-top)}.mobile-grading-header{display:flex;align-items:center;gap:10px;padding:0 12px 0 4px;height:52px;flex-shrink:0;background:#0b0d12;border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100}.mobile-grading-back-btn{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;background:none;border:none;color:var(--text-primary);cursor:pointer;flex-shrink:0;-webkit-tap-highlight-color:transparent}.mobile-grading-back-btn:active{opacity:.6}.mobile-grading-title{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.mobile-grading-student{font-size:14px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-grading-assignment{font-size:11px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-grading-content{flex:1;overflow-y:auto;overflow-x:hidden;overscroll-behavior:none;-webkit-transform:translateZ(0);transform:translateZ(0)}
