:root{--vvn-bg:#0b1016;--vvn-bg-soft:#121a24;--vvn-surface:#16202c;--vvn-surface-2:#1d2937;--vvn-border:#263546;--vvn-text:#e9eef5;--vvn-text-muted:#93a4b8;--vvn-accent:#f2c14e;--vvn-accent-strong:#d99e1f;--vvn-danger:#e5484d;--vvn-ok:#3fb27f;--vvn-radius:14px;--vvn-radius-sm:9px;--vvn-shadow:0 18px 44px #0000006b}*{box-sizing:border-box}html,body{min-height:100%;margin:0;padding:0}body{background:radial-gradient(1100px 620px at 12% -10%, #f2c14e1f, transparent 60%), radial-gradient(900px 520px at 96% 0%, #e5484d1a, transparent 58%), var(--vvn-bg);color:var(--vvn-text);-webkit-font-smoothing:antialiased;font-family:Segoe UI,system-ui,-apple-system,Noto Sans,Arial,sans-serif;line-height:1.55}a{color:var(--vvn-accent)}.page{flex-direction:column;min-height:100vh;display:flex}.container{width:100%;max-width:1080px;margin:0 auto;padding:0 24px}.page-wide .container,.page-wide .topbar-inner,.page-wide .app-nav{max-width:none}@media (min-width:1280px){.page-wide .container{padding:0 32px}.page-wide .topbar-inner{padding-left:32px;padding-right:32px}.page-wide .app-nav{padding-left:26px;padding-right:26px}}.auth-wrap{flex:1;place-items:center;padding:48px 24px;display:grid}.auth-card{background:var(--vvn-surface);border:1px solid var(--vvn-border);border-radius:var(--vvn-radius);width:100%;max-width:430px;box-shadow:var(--vvn-shadow);padding:32px}.brand{align-items:center;gap:12px;margin-bottom:26px;display:flex}.brand-mark{color:#17202b;background:linear-gradient(140deg, var(--vvn-accent), var(--vvn-accent-strong));letter-spacing:-.5px;border-radius:12px;place-items:center;width:42px;height:42px;font-weight:700;display:grid}.brand-text strong{font-size:16px;display:block}.brand-text span{color:var(--vvn-text-muted);font-size:12.5px}.field{margin-bottom:16px;display:block}.field-label{color:var(--vvn-text-muted);margin-bottom:6px;font-size:13px;display:block}.input{border-radius:var(--vvn-radius-sm);border:1px solid var(--vvn-border);background:var(--vvn-bg-soft);width:100%;color:var(--vvn-text);outline:none;padding:11px 13px;font-size:14.5px;transition:border-color .15s,box-shadow .15s}.input:focus{border-color:var(--vvn-accent);box-shadow:0 0 0 3px #f2c14e29}.btn{border-radius:var(--vvn-radius-sm);cursor:pointer;background:linear-gradient(140deg, var(--vvn-accent), var(--vvn-accent-strong));color:#17202b;border:none;width:100%;padding:11px 16px;font-size:15px;font-weight:600;transition:transform .12s,opacity .15s}.btn:hover:not(:disabled){transform:translateY(-1px)}.btn:disabled{opacity:.6;cursor:progress}.btn-ghost{border:1px solid var(--vvn-border);width:auto;color:var(--vvn-text-muted);background:0 0;padding:8px 14px;font-weight:500}.btn-ghost:hover:not(:disabled){color:var(--vvn-text);border-color:var(--vvn-accent)}.alert{border-radius:var(--vvn-radius-sm);color:#ffb4b6;background:#e5484d1f;border:1px solid #e5484d66;margin-bottom:16px;padding:10px 12px;font-size:13.5px}.demo-hint{border-top:1px dashed var(--vvn-border);color:var(--vvn-text-muted);margin-top:22px;padding-top:18px;font-size:12.5px}.demo-hint code{color:var(--vvn-text);background:var(--vvn-bg-soft);border-radius:5px;padding:1px 5px}.demo-hint ul{margin:8px 0 0;padding-left:18px}.topbar{border-bottom:1px solid var(--vvn-border);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:5;background:#0b1016db;position:sticky;top:0}.topbar-inner{justify-content:space-between;align-items:center;gap:16px;max-width:1080px;margin:0 auto;padding:14px 24px;display:flex}.who{text-align:right;color:var(--vvn-text-muted);font-size:13px}.who strong{color:var(--vvn-text);font-size:14px;display:block}.who-name{color:inherit;text-decoration:none;display:block}.who-account{color:var(--vvn-text-muted);font-size:12px;display:block}.who-name:hover strong,.who-name:focus-visible strong,.who-name:hover .who-account,.who-name:focus-visible .who-account{text-underline-offset:2px;text-decoration:underline}.password-field-wrap{flex-direction:column;gap:4px;display:flex}.password-field{align-items:stretch;gap:8px;display:flex}.password-field .input{flex:1;min-width:0}.password-reveal-btn{-webkit-user-select:none;user-select:none;touch-action:none;flex-shrink:0;justify-content:center;align-items:center;min-width:40px;padding-inline:10px;display:inline-flex}.password-reveal-icon{flex-shrink:0;display:block}.topbar-actions{align-items:center;gap:14px;display:flex}main.content{flex:1;padding:34px 0 56px}.page-head{margin-bottom:26px}.page-head h1{letter-spacing:-.3px;margin:0 0 6px;font-size:25px}.page-head p{color:var(--vvn-text-muted);margin:0;font-size:14.5px}.badge{letter-spacing:.4px;text-transform:uppercase;color:var(--vvn-accent);background:#f2c14e1f;border:1px solid #f2c14e66;border-radius:999px;padding:4px 9px;font-size:11.5px;font-weight:600;display:inline-block}.grid{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-bottom:26px;display:grid}.card{background:var(--vvn-surface);border:1px solid var(--vvn-border);border-radius:var(--vvn-radius);padding:18px}.card h2{margin:0 0 12px;font-size:15px}.stat-value{letter-spacing:-1px;font-size:30px;font-weight:700;line-height:1.1}.stat-label{color:var(--vvn-text-muted);margin-top:4px;font-size:13px}.kv{grid-template-columns:minmax(160px,240px) 1fr;gap:8px 16px;font-size:14px;display:grid}.kv dt{color:var(--vvn-text-muted)}.kv dd{margin:0}.list-parked{color:var(--vvn-text-muted);margin:0;padding-left:18px;font-size:14px}.list-parked li{margin-bottom:5px}.note{color:var(--vvn-text-muted);border-left:2px solid var(--vvn-accent);margin-top:4px;padding-left:12px;font-size:13px}.cols-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;display:grid}.pct-bar-row{margin-bottom:12px}.pct-bar-meta{justify-content:space-between;gap:12px;margin-bottom:4px;font-size:13px;display:flex}.pct-bar-track{background:color-mix(in srgb, var(--vvn-border) 70%, transparent);border-radius:999px;height:8px;overflow:hidden}.pct-bar-fill{background:var(--vvn-accent);border-radius:999px;min-width:0;height:100%;transition:width .2s}.topbar-nav{border-top:1px solid var(--vvn-border);overflow-x:auto}.app-nav{gap:4px;max-width:1080px;margin:0 auto;padding:0 18px;display:flex}.nav-link{color:var(--vvn-text-muted);white-space:nowrap;border-bottom:2px solid #0000;align-items:center;gap:7px;padding:11px 12px;font-size:13.5px;text-decoration:none;display:inline-flex}.nav-link:hover{color:var(--vvn-text)}.nav-link-active{color:var(--vvn-accent);border-bottom-color:var(--vvn-accent)}.nav-badge{text-align:center;background:var(--vvn-danger);color:#fff;border-radius:999px;min-width:19px;padding:1px 6px;font-size:11.5px;font-weight:700}.page-head-row{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.page-head-actions{gap:10px;display:flex}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.card-head h2{margin:0}.stack{gap:14px;display:grid}.stack-sm{gap:8px;display:grid}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;display:grid}.stat{flex-direction:column;display:flex}.detail-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px 18px;margin:0 0 14px;font-size:14px;display:grid}.detail-grid dt{color:var(--vvn-text-muted);font-size:12.5px}.detail-grid dd{margin:2px 0 0}.detail-wide{grid-column:1/-1}.table-wrap{margin:0 -4px;overflow-x:auto}table.data{border-collapse:collapse;width:100%;font-size:13.5px}table.data th,table.data td{text-align:left;border-bottom:1px solid var(--vvn-border);vertical-align:top;white-space:nowrap;padding:9px 10px}table.data th{color:var(--vvn-text-muted);text-transform:uppercase;letter-spacing:.3px;font-size:12.5px;font-weight:600}table.data tbody tr:hover{background:var(--vvn-surface-2)}table.data td.wrap{white-space:normal;min-width:220px}.inbox-row{cursor:pointer}.inbox-row:focus-visible{outline:2px solid var(--vvn-accent,#c45c26);outline-offset:-2px}.inbox-row td:first-child{border-left:3px solid #0000}.inbox-row-unread td:first-child{border-left-color:var(--vvn-accent,#c45c26)}.inbox-row:not(.inbox-row-unread) td strong{font-weight:500}.inbox-preview{-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.num{text-align:right;font-variant-numeric:tabular-nums}.empty{color:var(--vvn-text-muted);padding:22px 4px;font-size:14px}.muted{color:var(--vvn-text-muted)}.session-card-list{gap:12px;margin:0;padding:0;list-style:none;display:grid}.session-card{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);background:var(--vvn-bg-soft);gap:10px;padding:14px;display:grid}.session-card-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.session-card-when{flex-wrap:wrap;align-items:baseline;gap:9px;margin:0;display:flex}.session-card-when strong{letter-spacing:-.2px;font-variant-numeric:tabular-nums;font-size:18px}.session-card-date{color:var(--vvn-text-muted);font-variant-numeric:tabular-nums;font-size:13px}.session-card-title{overflow-wrap:anywhere;margin:0;font-size:15.5px;line-height:1.4}.session-card-meta{gap:8px 18px;margin:0;font-size:13.5px;display:grid}.session-card-meta dt{letter-spacing:.3px;text-transform:uppercase;color:var(--vvn-text-muted);font-size:11.5px}.session-card-meta dd{overflow-wrap:anywhere;margin:2px 0 0}.session-card-meta-wide{grid-column:1/-1}.session-card-inline{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.session-card-actions{border-top:1px solid var(--vvn-border);flex-direction:column;gap:8px;padding-top:10px;display:flex}.session-card-action-block{gap:6px;width:100%;display:grid}.session-card-cta{justify-content:center;align-items:center;width:100%;min-height:44px;text-decoration:none;display:inline-flex}.session-card-cta:focus-visible{outline:2px solid var(--vvn-text);outline-offset:2px}@media (min-width:560px){.session-card{padding:16px}.session-card-meta{grid-template-columns:repeat(2,minmax(0,1fr))}.session-card-actions{flex-direction:row;justify-content:flex-end;align-items:stretch}.session-card-action-block{width:auto}.session-card-cta{width:auto;padding:11px 26px}}.profile-dialog{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);background:var(--vvn-bg);color:var(--vvn-text);width:min(560px,100vw - 24px);max-height:min(88vh,820px);margin:auto;padding:0;overflow:auto;box-shadow:0 18px 48px #00000047}.profile-dialog::backdrop{background:#080c128c}.profile-dialog-panel{gap:14px;padding:16px;display:grid}.profile-dialog-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.student-avatar{object-fit:cover;background:color-mix(in srgb, var(--vvn-accent,#c45c26) 18%, transparent);border-radius:50%;flex-shrink:0;width:48px;height:48px;display:inline-block}.student-avatar-sm{width:36px;height:36px}.student-avatar-lg{width:96px;height:96px}.student-avatar-fallback{letter-spacing:.02em;color:var(--vvn-text);justify-content:center;align-items:center;font-size:.75em;font-weight:700;display:inline-flex}.student-avatar-row{align-items:center;gap:14px;display:flex}.student-avatar-upload{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.student-avatar-upload-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.session-card-identity{align-items:center;gap:10px;min-width:0;display:flex}.profile-dialog-title{overflow-wrap:anywhere;margin:0;font-size:1.15rem;line-height:1.35}.profile-dialog-badge{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.school-assign-dialog{width:min(640px,100vw - 24px)}.school-assign-cell{flex-wrap:wrap;align-items:center;gap:8px;max-width:420px;display:flex}.school-assign-chips{flex-wrap:wrap;align-items:center;gap:5px;display:flex}.school-chip{border:1px solid var(--vvn-border);background:var(--vvn-surface-2);white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:12px;font-weight:600;display:inline-block}.school-chip-more{color:var(--vvn-text-muted);font-weight:500}.school-chip-lead{border-color:color-mix(in srgb, var(--vvn-accent,#c45c26) 45%, var(--vvn-border));background:color-mix(in srgb, var(--vvn-accent,#c45c26) 12%, var(--vvn-surface-2))}.school-chip-role{color:var(--vvn-text-muted);font-weight:500}.instructor-name-link{appearance:none;color:var(--vvn-accent,#c45c26);font:inherit;text-align:left;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;margin:0;padding:0;font-weight:600;text-decoration:underline}.instructor-name-link:hover{opacity:.85}.instructor-staff-line{flex-direction:column;align-items:flex-start;gap:4px;display:flex}.profile-section-title{margin:0 0 8px;font-size:.95rem;font-weight:700}.credential-list{gap:6px;margin:0;padding-left:1.1rem;display:grid}.credential-list li{flex-direction:column;gap:2px;display:flex}.credential-editor-row{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);background:var(--vvn-surface);gap:8px;padding:10px;display:grid}@media (min-width:720px){.credential-editor-row{grid-template-columns:140px 1fr 90px 1fr auto;align-items:end}}.lead-school-fieldset{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);margin:0;padding:12px}.handoff-item{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);background:var(--vvn-surface);padding:10px 12px}.handoff-item-main{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.school-assign{gap:10px;display:grid}.school-assign-search{margin-bottom:0}.school-assign-meta{font-size:12.5px}.school-assign-list{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);background:var(--vvn-surface);gap:4px;max-height:min(42vh,360px);padding:4px;display:grid;overflow:auto}.school-assign-item{cursor:pointer;border-radius:6px;align-items:flex-start;gap:10px;padding:8px 10px;font-size:13.5px;display:flex}.school-assign-item:hover{background:var(--vvn-surface-2)}.school-assign-item-on{background:#f2c14e1a}.school-assign-item input{flex-shrink:0;margin-top:3px}.school-assign-codes{gap:2px;min-width:0;display:grid}.school-assign-codes strong{font-size:13px}.status{white-space:nowrap;border:1px solid #0000;border-radius:999px;padding:2px 8px;font-size:11.5px;font-weight:600;display:inline-block}.status-neutral{border-color:var(--vvn-border);background:var(--vvn-surface-2);color:var(--vvn-text-muted)}.status-ok{color:#7fd6ac;background:#3fb27f24;border-color:#3fb27f73}.status-warn{color:var(--vvn-accent);background:#f2c14e24;border-color:#f2c14e73}.status-danger{color:#ffb4b6;background:#e5484d24;border-color:#e5484d73}.form-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.list-pager{border-top:1px solid color-mix(in srgb, var(--vvn-border) 80%, transparent);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px 20px;margin-top:14px;padding-top:12px;display:flex}.list-pager-controls{flex-wrap:wrap;align-items:center;gap:12px 16px;display:flex}.list-pager-sizes{flex-wrap:wrap;align-items:center;gap:6px;display:inline-flex}.list-pager-nav{align-items:center;gap:8px;display:inline-flex}.check{color:var(--vvn-text);align-items:center;gap:8px;font-size:14px;display:inline-flex}.form-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0 16px;display:grid}.form-grid .field-wide{grid-column:1/-1}.field-hint{color:var(--vvn-text-muted);margin-top:5px;font-size:12.5px}select.input,textarea.input{font-family:inherit}textarea.input{resize:vertical;min-height:76px}.form-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;display:flex}.btn-auto{width:auto}.btn-sm{width:auto;padding:6px 11px;font-size:13px}.btn-danger{color:#ffb4b6;background:0 0;border:1px solid #e5484d80}.btn-danger:hover:not(:disabled){border-color:var(--vvn-danger);color:#fff}.row-actions{flex-wrap:wrap;gap:6px;display:flex}.alert-ok{border-radius:var(--vvn-radius-sm);color:#9ce0bd;background:#3fb27f1f;border:1px solid #3fb27f66;margin-bottom:16px;padding:10px 12px;font-size:13.5px}.toolbar{flex-wrap:wrap;align-items:flex-end;gap:10px;margin-bottom:14px;display:flex}.toolbar .field{min-width:150px;margin-bottom:0}.chip{border:1px solid var(--vvn-border);background:var(--vvn-bg-soft);color:var(--vvn-text-muted);white-space:nowrap;border-radius:999px;padding:6px 12px;font-size:13px;text-decoration:none;display:inline-block}.chip:hover{color:var(--vvn-text);border-color:var(--vvn-accent)}.chip-active{border-color:var(--vvn-accent);color:var(--vvn-accent);background:#f2c14e24;font-weight:600}.field-check{align-items:flex-start;gap:9px;margin-bottom:16px;font-size:14px;display:flex}.field-check input{margin-top:4px}.code-block{border-radius:var(--vvn-radius-sm);border:1px solid var(--vvn-border);background:var(--vvn-bg-soft);color:var(--vvn-text-muted);white-space:pre;margin:0;padding:11px 13px;font-family:Cascadia Mono,Consolas,monospace;font-size:12.5px;overflow-x:auto}.qr-panel{align-items:start;gap:20px;display:grid}@media (min-width:720px){.qr-panel{grid-template-columns:280px 1fr}}.qr-canvas{border-radius:var(--vvn-radius-sm);background:#fff;width:280px;max-width:100%;height:auto}.qr-guide{border:1px solid var(--vvn-border);border-radius:var(--vvn-radius-sm);background:var(--vvn-surface-2,#94a3b814);gap:8px;padding:12px;font-size:13px;display:grid}.qr-guide ul{gap:6px;margin:0;padding-left:18px;display:grid}.qr-guide .alert{margin:0}.code-token{word-break:break-all;resize:vertical;font-family:Cascadia Mono,Consolas,monospace;font-size:12px}.scan-video{border-radius:var(--vvn-radius-sm);border:1px solid var(--vvn-border);background:#000;width:100%;max-width:420px}.alert-ok{border-radius:var(--vvn-radius-sm);color:var(--vvn-ok);background:#3fb27f1f;border:1px solid #3fb27f73;margin:0 0 12px;padding:10px 12px}
