:root{--bg:#f4f5f7;--surface:#ffffff;--surface-soft:#f9fafb;--ink:#1c2130;--muted:#5d687a;--faint:#98a2b3;--line:#e3e7ee;--line-strong:#cfd6e0;--brand-blue:#283070;--brand-blue-deep:#172052;--brand-teal:#007078;--brand-ink:#101735;--accent:var(--brand-blue);--accent-hover:#1e2560;--good:#067647;--good-soft:#eef7f2;--warn:#b54708;--warn-soft:#fdf5e9;--bad:#b42318;--bad-soft:#fdf1f0;--neutral-soft:#f2f4f7;--chart-good:#0e8484;--chart-warn:#d9820b;--chart-bad:#d92d20;--radius:8px;--radius-sm:6px;--shadow-card:0 1px 2px rgba(16,24,40,0.04);--ring:0 0 0 3px rgba(40,48,112,0.14)}*{box-sizing:border-box}html{min-height:100%}body,html{background:var(--bg)}body{margin:0;color:var(--ink);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.45;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button{cursor:pointer;transition:border-color .12s ease,background-color .12s ease,color .12s ease,box-shadow .12s ease}button:disabled,input:disabled,select:disabled{cursor:not-allowed;opacity:.5}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.loading-screen{min-height:100vh;display:grid;place-items:center;align-content:center;grid-gap:14px;gap:14px}.loading-logo{width:170px;height:auto;padding:12px 16px;border:1px solid var(--line);border-radius:var(--radius);background:#ffffff}.loading-screen p{margin:0;color:var(--muted);font-size:13px}.app-shell{min-height:100vh;display:grid;grid-template-columns:248px minmax(0,1fr)}.sidebar{position:-webkit-sticky;position:sticky;top:0;min-width:0;height:100vh;display:flex;flex-direction:column;gap:22px;padding:20px 14px;color:#eef1f8;background:var(--brand-blue-deep);border-right:1px solid rgba(255,255,255,.06)}.brand-block{display:grid;grid-gap:10px;gap:10px;padding:2px 4px 12px;border-bottom:1px solid rgba(255,255,255,.08)}.brand-logo-shell{width:168px;min-height:48px;display:flex;align-items:center;padding:8px 11px;border-radius:var(--radius-sm);background:#ffffff}.brand-logo-shell img{width:100%;height:auto;display:block}.brand-block span{color:#8d97b8;font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase}.nav-list{display:grid;grid-gap:2px;gap:2px}.nav-item{width:100%;min-height:36px;display:flex;align-items:center;gap:10px;padding:0 10px;border:0;border-radius:var(--radius-sm);color:#a6aec9;background:transparent;text-align:left;font-size:13px;font-weight:500}.nav-item svg{flex:0 0 auto;opacity:.75}.nav-item:hover{color:#ffffff;background:rgba(255,255,255,.06)}.nav-item.active{color:#ffffff;background:rgba(255,255,255,.1);box-shadow:inset 2px 0 0 var(--brand-teal)}.nav-item.active svg{opacity:1}.role-panel{margin-top:auto;display:grid;grid-gap:8px;gap:8px;padding:12px;border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);background:rgba(255,255,255,.04)}.role-panel span{color:#8d97b8;font-size:10.5px;font-weight:500;letter-spacing:.06em;text-transform:uppercase}.role-panel small{color:#c6cde0;font-size:12px}.select-wrap{position:relative;display:block}.select-wrap select{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:30px}.select-wrap svg{position:absolute;top:50%;right:9px;transform:translateY(-50%);pointer-events:none}.select-wrap.compact select{min-height:32px;color:#eef1f8;border-color:rgba(255,255,255,.16);background:rgba(255,255,255,.06)}.select-wrap.compact svg{color:#8d97b8}.workspace{min-width:0;max-width:1600px;padding:20px 28px 32px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--line)}.eyebrow{margin:0 0 2px;color:var(--faint);font-size:12px;font-weight:400}.title-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.mode-chip{display:inline-flex;align-items:center;gap:6px;min-height:22px;padding:0 8px;border-radius:999px;border:1px solid var(--line-strong);background:var(--surface);color:var(--muted);font-size:11px;font-weight:500;letter-spacing:.02em}.mode-chip:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.mode-chip.live{border-color:#cce8d8;color:var(--good)}.mode-chip.demo{border-color:#ecd9b0;color:var(--warn)}.demo-strip{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;grid-gap:12px;gap:12px;margin-bottom:16px;padding:10px 14px;border:1px solid #ecd9b0;border-radius:var(--radius);background:#fffaf0}.demo-strip-icon{display:grid;place-items:center;color:var(--warn)}.demo-strip-copy{display:grid;grid-gap:1px;gap:1px;min-width:0}.demo-strip-copy strong{color:var(--ink);font-size:13px;font-weight:600}.demo-strip-copy span{color:var(--muted);font-size:12px;line-height:1.45}.demo-pill-set{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.demo-pill{min-height:22px;display:inline-flex;align-items:center;padding:0 8px;border:1px solid #ecd9b0;border-radius:999px;color:#8a6116;background:transparent;font-size:11px;font-weight:500}h1,h2{margin:0;line-height:1.2}h1{color:var(--ink);font-size:19px;font-weight:650;letter-spacing:-.01em}h2{font-size:14px}.top-actions{min-width:0}.search-box,.top-actions{display:flex;align-items:center;gap:8px}.search-box{width:min(320px,32vw);min-width:210px;height:36px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);color:var(--faint)}.search-box:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.search-box input{width:100%;min-height:0;border:0;outline:0;background:transparent;box-shadow:none;color:var(--ink);font-size:13px}.day-toggle,.icon-button,.primary-action,.report-card,.secondary-action,.sort-button,.text-button{border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface)}.icon-button{width:36px;height:36px;display:grid;place-items:center;color:var(--muted)}.icon-button:hover:not(:disabled),.secondary-action:hover:not(:disabled){border-color:var(--line-strong);background:var(--surface-soft);color:var(--ink)}.primary-action,.secondary-action{min-height:36px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 13px;font-size:13px;font-weight:500;white-space:nowrap}.primary-action{color:#ffffff;border-color:var(--accent);background:var(--accent)}.primary-action:hover:not(:disabled){border-color:var(--accent-hover);background:var(--accent-hover)}.secondary-action{color:var(--ink);background:var(--surface)}.full{width:100%}.filter-rail{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));grid-gap:10px 12px;gap:10px 12px;margin-bottom:16px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.field{display:grid;grid-gap:5px;gap:5px;min-width:0}.field>span{color:var(--muted);font-size:11px;font-weight:500;letter-spacing:.04em;text-transform:uppercase}input,select,textarea{width:100%;min-height:34px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink);padding:0 10px;outline:none;font-size:13px}input::placeholder,textarea::placeholder{color:var(--faint)}textarea{min-height:78px;padding:8px 10px;resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:var(--ring)}.content-stack{display:grid;grid-gap:16px;gap:16px}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-gap:12px;gap:12px}.kpi-card,.panel,.report-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-card)}.kpi-card{position:relative;min-height:88px;display:grid;align-content:space-between;grid-gap:8px;gap:8px;padding:14px 16px}.kpi-card svg{position:absolute;top:14px;right:14px;width:16px;height:16px;color:var(--faint)}.kpi-card span{padding-right:28px;color:var(--muted);font-size:11.5px;font-weight:500;letter-spacing:.03em;text-transform:uppercase}.kpi-card strong{color:var(--ink);font-size:24px;font-weight:650;letter-spacing:-.01em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.kpi-card.good svg{color:var(--chart-good)}.kpi-card.warn svg{color:var(--chart-warn)}.kpi-card.bad svg{color:var(--chart-bad)}.dashboard-grid,.management-grid{display:grid;grid-template-columns:minmax(0,1.42fr) minmax(340px,.58fr);grid-gap:14px;gap:14px;align-items:start}.wide-panel{grid-row:span 2}.panel{min-width:0;padding:16px}.panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}.panel-header h2{color:var(--ink);font-weight:600}.panel-header p{margin:3px 0 0;color:var(--muted);font-size:12px;line-height:1.45}.department-bars,.device-usage,.export-stack,.inside-list,.method-list{display:grid;grid-gap:10px;gap:10px}.department-row,.method-row,.mini-row{display:grid;grid-template-columns:minmax(160px,220px) 1fr auto;align-items:center;grid-gap:11px;gap:11px}.department-row span,.department-row strong,.method-row span,.method-row strong,.mini-row span,.mini-row strong{display:block}.department-row strong,.method-row strong,.mini-row strong{color:var(--ink);font-size:13px;font-weight:500}.department-row span,.method-row span,.mini-row span{margin-top:2px;color:var(--muted);font-size:12px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.meter,.stacked-bar{height:6px;display:flex;overflow:hidden;border-radius:999px;background:var(--neutral-soft)}.bar-good{background:var(--chart-good)}.bar-warn{background:var(--chart-warn)}.bar-bad{background:var(--chart-bad)}.meter span{border-radius:inherit;background:var(--accent)}.mini-row{grid-template-columns:minmax(0,1fr) auto;padding:8px 0;border-bottom:1px solid var(--line)}.mini-row:last-child{border-bottom:0;padding-bottom:0}.method-row b,.mini-row b,.mini-row time{color:var(--ink);font-size:12.5px;font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.empty-state{min-height:82px;display:grid;place-items:center;padding:12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-soft);color:var(--muted);font-size:13px;text-align:center}.table-panel{overflow:hidden}.responsive-table{width:100%;overflow:auto;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface)}.responsive-table::-webkit-scrollbar{height:8px}.responsive-table::-webkit-scrollbar-thumb{border-radius:999px;background:var(--line-strong)}.responsive-table::-webkit-scrollbar-track{background:transparent}table{width:100%;min-width:900px;border-collapse:collapse}td,th{padding:9px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}th{color:var(--muted);background:var(--surface-soft);font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}td{color:var(--ink);font-size:13px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}td:first-child{white-space:nowrap}tbody tr:hover td{background:var(--surface-soft)}td strong{color:var(--ink);font-weight:550}td span,td strong{display:block}td span{margin-top:1px;color:var(--muted);font-size:12px}tr:last-child td{border-bottom:0}.selected-row td{background:#f2f4fb}.selected-row td:first-child{box-shadow:inset 2px 0 0 var(--accent)}.selected-col{color:var(--accent)}.missing-device-row td{background:#fffaeb}.missing-device-row td:first-child{box-shadow:inset 2px 0 0 var(--chart-warn)}.sort-button{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:7px;padding:0;color:inherit;border:0;background:transparent;font-size:inherit;font-weight:inherit;letter-spacing:inherit;text-transform:inherit}.sort-button:hover{color:var(--accent)}.sort-button svg{color:var(--faint)}.sort-button svg.asc{transform:rotate(180deg)}.sort-button svg.asc,.sort-button svg.desc{color:var(--accent)}.status-chip,.status-token{display:inline-flex;align-items:center;min-height:22px;padding:0 8px;border-radius:999px;font-size:11.5px;font-weight:500;line-height:1;white-space:nowrap}.status-chip.neutral,.status-token{color:var(--muted);background:var(--neutral-soft)}.status-chip.good,.status-token.active{color:var(--good);background:var(--good-soft)}.status-chip.warn{color:var(--warn);background:var(--warn-soft)}.status-chip.bad{color:var(--bad);background:var(--bad-soft)}.status-chip.demo{color:var(--warn);background:var(--warn-soft)}.token-row{gap:4px}.row-actions,.token-row{display:flex;flex-wrap:wrap}.row-actions{gap:2px}.text-button{min-height:28px;padding:0 8px;color:var(--accent);background:transparent;border-color:transparent;font-size:12.5px;font-weight:500}.text-button:hover:not(:disabled){color:var(--accent-hover);background:var(--neutral-soft)}.text-button.danger{color:var(--bad)}.text-button.danger:hover:not(:disabled){color:var(--bad);background:var(--bad-soft)}.payload-cell{max-width:340px;color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px}.pagination span{color:var(--muted);font-size:12px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.pagination div{display:flex;gap:8px}.pagination .secondary-action{min-height:30px;padding:0 10px;font-size:12.5px}.form-panel{align-self:start}.form-grid,.rules-grid{display:grid;grid-gap:12px;gap:12px}.form-grid{margin-bottom:14px}.device-sync-bar{display:flex;align-items:center;gap:12px;margin-bottom:12px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-soft);flex-wrap:wrap}.device-sync-bar small{color:var(--muted);font-size:12px;line-height:1.45}.control-note{margin:-3px 0 0;color:var(--warn);font-size:12px;line-height:1.45}.rules-grid{grid-template-columns:repeat(3,minmax(180px,1fr));margin-bottom:14px}.check-row{min-height:32px;display:flex;align-items:center;gap:8px;color:var(--ink);font-size:13px}.check-row input{width:15px;min-height:15px;accent-color:var(--accent)}.form-message{margin:-2px 0 12px;padding:9px 11px;border:1px solid var(--line);border-left:2px solid var(--accent);border-radius:var(--radius-sm);background:var(--surface-soft);color:var(--ink);font-size:12.5px;line-height:1.45}.inline-form{display:grid;grid-template-columns:repeat(3,minmax(140px,1fr)) auto;grid-gap:10px;gap:10px;margin-bottom:14px}.report-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:12px;gap:12px}.report-card{min-height:104px;display:grid;align-content:space-between;grid-gap:8px;gap:8px;padding:14px 16px;text-align:left}.report-card:hover:not(:disabled){border-color:var(--line-strong);background:var(--surface-soft)}.report-card.active{border-color:var(--accent);background:#f7f8fc;box-shadow:inset 2px 0 0 var(--accent)}.report-card span{color:var(--muted);font-size:11.5px;font-weight:500;letter-spacing:.03em;text-transform:uppercase}.report-card strong{color:var(--ink);font-size:20px;font-weight:650;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.report-card small{color:var(--muted);font-size:11.5px;line-height:1.4}.report-card.static{cursor:default}.trend-chart{height:230px;display:flex;align-items:flex-end;gap:14px;padding:14px 10px 0;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface)}.trend-chart .empty-state.full{width:100%;min-height:100%}.trend-day{flex:1 1;min-width:52px;display:grid;grid-gap:8px;gap:8px;justify-items:center}.trend-bars{height:170px;width:42px;display:flex;align-items:flex-end;gap:3px}.trend-bars span{flex:1 1;min-height:3px;border-radius:2px 2px 0 0}.trend-day small{color:var(--muted);font-size:11px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.rules-panel{max-width:1040px}.weekend-row{margin:10px 0 16px}.day-row,.weekend-row{display:flex;flex-wrap:wrap;gap:6px}.day-toggle{min-width:52px;min-height:32px;color:var(--muted);font-size:12.5px;font-weight:500}.day-toggle:hover:not(:disabled){border-color:var(--line-strong);color:var(--ink)}.day-toggle.active{color:#ffffff;border-color:var(--accent);background:var(--accent)}@media (max-width:1280px){.filter-rail{grid-template-columns:repeat(3,minmax(160px,1fr))}.kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:980px){.app-shell{grid-template-columns:minmax(0,1fr)}.sidebar{position:relative;height:auto}.nav-list{grid-template-columns:repeat(2,minmax(0,1fr))}.top-actions,.topbar{align-items:stretch;flex-direction:column}.search-box,.top-actions{width:100%}.demo-strip{grid-template-columns:auto minmax(0,1fr)}.demo-pill-set{grid-column:1/-1;justify-content:flex-start}.dashboard-grid,.inline-form,.management-grid,.report-grid,.rules-grid{grid-template-columns:1fr}}@media (max-width:640px){.workspace{padding:14px}.filter-rail,.kpi-grid{grid-template-columns:1fr}.demo-strip{align-items:flex-start;padding:10px 12px}.demo-pill-set{display:none}.nav-list{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;scrollbar-width:thin}.nav-item{width:auto;flex:0 0 auto;min-height:34px;padding:0 9px;font-size:12.5px}.sidebar{gap:14px;padding:16px 14px}.role-panel{margin-top:4px;grid-template-columns:auto minmax(160px,1fr);align-items:center}.role-panel small{display:none}.department-row,.method-row{grid-template-columns:1fr}.pagination{align-items:stretch;flex-direction:column}.pagination div{width:100%}.pagination button{flex:1 1}}.academic-workspace,.stacked-panels{display:grid;grid-gap:14px;gap:14px}.tab-strip{display:flex;flex-wrap:wrap;gap:4px;padding:4px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.tab-button{min-height:32px;display:inline-flex;align-items:center;gap:7px;padding:0 12px;border:0;border-radius:var(--radius-sm);color:var(--muted);background:transparent;font-size:13px;font-weight:500}.tab-button:hover:not(.active){color:var(--ink);background:var(--neutral-soft)}.tab-button.active{color:#ffffff;background:var(--accent)}.tab-button b{min-width:18px;padding:0 5px;border-radius:999px;background:var(--neutral-soft);color:var(--muted);font-size:11px;font-weight:600;text-align:center}.tab-button.active b{color:#ffffff;background:rgba(255,255,255,.22)}.field-hint{color:var(--faint);font-size:11.5px;line-height:1.4}.form-actions{display:grid;grid-gap:8px;gap:8px}.form-message.error{border-left-color:var(--bad);color:var(--bad)}.over-capacity{color:var(--bad);font-weight:600}.muted-row td{color:var(--faint)}.panel-search{width:min(240px,40vw)}.inline-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.inline-filters select{width:auto;min-width:150px}.check-list{max-height:320px;overflow-y:auto;display:grid;grid-gap:2px;gap:2px;margin-bottom:10px;padding:6px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-soft)}.check-list .check-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-gap:8px;gap:8px;padding:0 4px;font-size:12.5px}.check-list .check-row b{color:var(--muted);font-size:11.5px;font-weight:600}.chip-picker{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-gap:6px;gap:6px}.chip-picker .secondary-action{min-height:34px;padding:0 10px}.chip-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.chip{min-height:24px;display:inline-flex;align-items:center;gap:5px;padding:0 5px 0 9px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface-soft);color:var(--ink);font-size:12px;font-weight:500}.chip button{display:grid;place-items:center;padding:2px;border:0;border-radius:50%;background:transparent;color:var(--muted)}.chip button:hover{color:var(--bad);background:var(--bad-soft)}.bulk-import{display:grid;grid-gap:8px;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}.bulk-import textarea{min-height:120px;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;resize:vertical}.bulk-import code{padding:1px 4px;border-radius:4px;background:var(--neutral-soft);font-size:11.5px}.auth-shell{min-height:100vh;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr)}.auth-brand{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:32px;padding:48px 52px;overflow:hidden;color:#eef1f8;background:radial-gradient(120% 90% at 12% 8%,rgba(0,112,120,.42),transparent 58%),linear-gradient(150deg,var(--brand-blue-deep) 0,var(--brand-blue) 62%,#101735 100%)}.auth-brand:after{content:"";position:absolute;right:-140px;bottom:-160px;width:460px;height:460px;border-radius:50%;background:radial-gradient(circle,rgba(0,112,120,.3),transparent 68%);pointer-events:none}.auth-brand-inner{position:relative;z-index:1;max-width:460px;margin-top:auto}.auth-logo-shell{width:186px;margin-bottom:34px;padding:11px 15px;border-radius:var(--radius);background:#ffffff}.auth-logo-shell img{width:100%;height:auto;display:block}.auth-brand h1{margin:0 0 12px;color:#ffffff;font-size:30px;font-weight:650;line-height:1.2;letter-spacing:-.02em}.auth-brand p{margin:0 0 26px;max-width:40ch;color:#b9c1da;font-size:14px;line-height:1.6}.auth-points{display:grid;grid-gap:10px;gap:10px;margin:0;padding:0;list-style:none}.auth-points li{display:flex;align-items:center;gap:9px;color:#cdd4e8;font-size:13px}.auth-points svg{flex:0 0 auto;color:#4fb3ba}.auth-brand-footer{position:relative;z-index:1;color:#7f89ab;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase}.auth-panel{display:grid;place-items:center;padding:40px 28px;background:var(--bg)}.auth-card{width:100%;max-width:392px;display:grid;grid-gap:16px;gap:16px;padding:32px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:0 12px 34px rgba(16,24,40,.07)}.auth-mobile-logo{display:none}.auth-mobile-logo img{width:150px;height:auto}.auth-heading h2{margin:0 0 4px;color:var(--ink);font-size:21px;font-weight:650;letter-spacing:-.01em}.auth-heading p{margin:0;color:var(--muted);font-size:13px}.auth-error{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border:1px solid #f3c9c4;border-left:2px solid var(--bad);border-radius:var(--radius-sm);background:var(--bad-soft);color:#8a231b;font-size:12.5px;line-height:1.45}.auth-error svg{flex:0 0 auto;margin-top:1px}.auth-field{display:grid;grid-gap:6px;gap:6px}.auth-field>span{color:var(--muted);font-size:11px;font-weight:500;letter-spacing:.04em;text-transform:uppercase}.auth-input{display:flex;align-items:center;gap:9px;padding:0 11px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);transition:border-color .12s ease,box-shadow .12s ease}.auth-input:focus-within{border-color:var(--accent);box-shadow:var(--ring)}.auth-input>svg{flex:0 0 auto;color:var(--faint)}.auth-input input{flex:1 1;min-width:0;min-height:42px;padding:0;border:0;background:transparent;font-size:14px}.auth-input input:focus-visible{outline:none}.auth-reveal{display:grid;place-items:center;padding:4px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--faint)}.auth-reveal:hover{color:var(--ink)}.auth-submit{min-height:44px;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:4px;border:0;border-radius:var(--radius-sm);color:#ffffff;background:var(--accent);font-size:14px;font-weight:600}.auth-submit:hover:not(:disabled){background:var(--accent-hover)}.auth-spin{animation:auth-spin .9s linear infinite}@keyframes auth-spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.auth-spin{animation:none}}.auth-help{margin:0;color:var(--faint);font-size:12px;line-height:1.5}@media (max-width:900px){.auth-shell{grid-template-columns:1fr}.auth-brand{display:none}.auth-mobile-logo{display:block;margin-bottom:4px}}@media (max-width:420px){.auth-card{padding:24px 20px;border:0;box-shadow:none;background:transparent}.auth-panel{padding:24px 16px}}.account-panel{margin-top:auto;display:grid;grid-gap:10px;gap:10px;padding:12px;border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm);background:rgba(255,255,255,.04)}.account-identity{display:flex;align-items:center;gap:10px;min-width:0}.account-identity>div{display:grid;min-width:0}.account-identity strong{color:#ffffff;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.account-identity small{color:#8d97b8;font-size:11.5px}.account-avatar{flex:0 0 auto;width:32px;height:32px;display:grid;place-items:center;border-radius:50%;background:var(--brand-teal);color:#ffffff;font-size:13px;font-weight:600}.account-signout{min-height:32px;display:flex;align-items:center;justify-content:center;gap:7px;border:1px solid rgba(255,255,255,.16);border-radius:var(--radius-sm);background:transparent;color:#c6cde0;font-size:12.5px;font-weight:500}.account-signout:hover:not(:disabled){border-color:rgba(255,255,255,.3);background:rgba(255,255,255,.07);color:#ffffff}.credential-slip{margin-bottom:16px;padding:14px;border:1px solid var(--line-strong);border-left:3px solid var(--brand-teal);border-radius:var(--radius-sm);background:var(--surface-soft)}.credential-slip h3{display:flex;align-items:center;gap:7px;margin:0 0 4px;color:var(--ink);font-size:13.5px;font-weight:600}.credential-slip p{margin:0 0 10px;color:var(--warn);font-size:12px;line-height:1.45}.credential-slip dl{display:grid;grid-gap:6px;gap:6px;margin:0 0 12px}.credential-slip dl>div{display:grid;grid-template-columns:78px minmax(0,1fr);align-items:baseline;grid-gap:8px;gap:8px}.credential-slip dt{color:var(--muted);font-size:11px;font-weight:500;letter-spacing:.04em;text-transform:uppercase}.credential-slip dd{margin:0;color:var(--ink);font-size:13px;word-break:break-all}.credential-slip code{padding:2px 6px;border:1px solid var(--line);border-radius:4px;background:var(--surface);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px;font-weight:600}.credential-actions{display:flex;align-items:center;gap:8px}.class-header{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.class-header h2{color:var(--ink);font-size:17px;font-weight:650}.class-header p{margin:2px 0 0;color:var(--muted);font-size:12.5px}.mark-row{display:flex;flex-wrap:wrap;gap:4px}.mark-chip{min-height:28px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);color:var(--muted);font-size:12px;font-weight:500}.mark-chip:hover:not(:disabled):not(.active){border-color:var(--line-strong);color:var(--ink)}.mark-chip.active{color:#ffffff;border-color:transparent}.mark-chip.present.active{background:var(--good)}.mark-chip.late.active{background:var(--warn)}.mark-chip.absent.active{background:var(--bad)}.mark-chip.leave.active{background:var(--brand-teal)}.register-actions{margin-top:14px}.credential-table{max-height:260px;overflow:auto;margin-bottom:12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface)}.credential-table table{width:100%;border-collapse:collapse;font-size:12.5px}.credential-table th{position:-webkit-sticky;position:sticky;top:0;padding:7px 9px;border-bottom:1px solid var(--line);background:var(--surface-soft);color:var(--muted);font-size:10.5px;font-weight:600;letter-spacing:.05em;text-align:left;text-transform:uppercase}.credential-table td{padding:6px 9px;border-bottom:1px solid var(--line);color:var(--ink);white-space:nowrap}.credential-table code{padding:1px 5px;border:1px solid var(--line);border-radius:4px;background:var(--surface-soft);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-weight:600}.face-camera{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius);background:#0d1117}.face-camera video{display:block;width:100%;object-fit:cover;transform:scaleX(-1)}.face-camera.error{flex-direction:column;gap:8px;padding:20px;border-color:var(--bad);background:var(--bad-soft);color:var(--bad);text-align:center}.face-camera.error p{margin:0;font-size:12.5px;line-height:1.5}.face-camera-overlay{display:flex;align-items:center;gap:8px;color:#cbd5e1;font-size:12.5px}.face-camera-live{position:absolute;top:10px;left:10px;display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:999px;background:rgba(6,118,71,.9);color:#fff;font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.face-spin{animation:face-spin .9s linear infinite}@keyframes face-spin{to{transform:rotate(1turn)}}.face-checkin{padding:16px 18px;border-left:3px solid var(--accent)}.face-checkin-head{display:flex;align-items:flex-start;gap:10px}.face-checkin-head>svg{flex:none;margin-top:2px;color:var(--accent)}.face-checkin-head>div{flex:1 1}.face-checkin-head h2{margin:0;font-size:14.5px}.face-checkin-head p{margin:3px 0 0;color:var(--muted);font-size:12.5px;line-height:1.5}.face-checkin-body{max-width:420px;margin-top:14px}.face-checkin-actions{display:flex;align-items:center;gap:10px;margin-top:12px}.kiosk-link{padding:11px 14px;border:1px dashed var(--line);border-radius:var(--radius)}.kiosk-link-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:12.5px}.kiosk-link-head>span{flex:1 1;min-width:200px}.kiosk-link-head>svg{flex:none;color:var(--accent)}.kiosk-link-value{display:flex;align-items:center;gap:10px;margin-top:9px}.kiosk-link-value code{flex:1 1;min-width:0;padding:7px 9px;border-radius:7px;background:var(--surface-2,rgba(127,127,127,.08));font-size:12px;word-break:break-all}.control-note.error{color:var(--bad)}.kiosk-page{min-height:100dvh;padding:max(14px,env(safe-area-inset-top)) max(14px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left));display:flex;align-items:flex-start;justify-content:center;background:var(--bg)}.kiosk-page>.panel{width:100%;max-width:860px}.face-guide{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;pointer-events:none}.face-guide-box{position:relative;height:62%;aspect-ratio:3/4;border-radius:14px;transition:border-color .16s ease-out}.face-guide-box i{position:absolute;width:26px;height:26px;border:3px solid;transition:color .16s ease-out}.face-guide-box i.tl{top:0;left:0;border-right:none;border-bottom:none;border-top-left-radius:12px}.face-guide-box i.tr{top:0;right:0;border-left:none;border-bottom:none;border-top-right-radius:12px}.face-guide-box i.bl{bottom:0;left:0;border-right:none;border-top:none;border-bottom-left-radius:12px}.face-guide-box i.br{bottom:0;right:0;border-left:none;border-top:none;border-bottom-right-radius:12px}.face-guide.caption-only{justify-content:flex-end;padding-bottom:12px}.face-track{position:absolute;border:2px solid;border-radius:10px;box-shadow:0 0 0 1px rgba(13,17,23,.45);pointer-events:none;transition:left .22s ease-out,top .22s ease-out,width .22s ease-out,height .22s ease-out,color .16s ease-out}.face-track.empty,.face-track.holding{color:#58a6ff}.face-track.marked{color:#3fb950}.face-track.refused{color:#d29922}.face-guide-caption{padding:4px 11px;border-radius:999px;background:rgba(13,17,23,.72);color:#e6edf3;font-size:12.5px;font-weight:500;letter-spacing:.01em}.face-guide.empty{color:rgba(230,237,243,.55)}.face-guide.holding{color:#58a6ff;animation:face-guide-pulse 1s ease-in-out infinite}.face-guide.marked{color:#3fb950}.face-guide.refused{color:#d29922}@keyframes face-guide-pulse{0%,to{opacity:1}50%{opacity:.45}}@media (prefers-reduced-motion:reduce){.face-guide.holding{animation:none}}.kiosk-stage{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);grid-gap:14px;gap:14px;margin-top:14px;align-items:start}@media (max-width:720px){.kiosk-stage{grid-template-columns:minmax(0,1fr)}}.kiosk-camera{min-width:0}.kiosk-side{display:flex;flex-direction:column;gap:10px;min-width:0}.kiosk-now{display:flex;align-items:center;gap:11px;padding:13px 14px;border-radius:10px;border:1px solid var(--border);background:var(--surface-2,rgba(127,127,127,.08))}.kiosk-now>svg{flex:none}.kiosk-now>div{display:flex;flex-direction:column;min-width:0}.kiosk-now strong{font-size:16px;line-height:1.25}.kiosk-now span{color:var(--muted);font-size:12.5px}.kiosk-now.marked{border-color:var(--good,#1a7f52)}.kiosk-now.marked>svg{color:var(--good,#1a7f52)}.kiosk-now.already>svg{color:var(--muted)}.kiosk-now.refused{border-color:var(--warn,#b4690e)}.kiosk-now.refused>svg{color:var(--warn,#b4690e)}.kiosk-now.idle>svg{color:var(--accent)}.kiosk-complete{display:flex;align-items:center;gap:11px;margin-top:14px;padding:13px 15px;border:1px solid var(--good,#1a7f52);border-radius:var(--radius);background:var(--good-soft,rgba(26,127,82,.08))}.kiosk-complete>svg{flex:none;color:var(--good,#1a7f52)}.kiosk-complete>div{display:flex;flex-direction:column}.kiosk-complete span{color:var(--muted);font-size:12.5px}.kiosk-remaining{font-size:12.5px}.kiosk-remaining ul{margin:6px 0 0;padding:8px 10px;list-style:none;border:1px solid var(--line);border-radius:7px;max-height:170px;overflow-y:auto;color:var(--muted)}.kiosk-remaining li{padding:2px 0}.kiosk-feed{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px;max-height:230px;overflow-y:auto}.kiosk-feed-item{display:flex;align-items:center;gap:8px;padding:6px 9px;border-radius:7px;background:var(--surface-2,rgba(127,127,127,.08));font-size:12.5px}.kiosk-feed-item>svg{flex:none}.kiosk-feed-item.marked>svg{color:var(--good,#1a7f52)}.kiosk-feed-item.already>svg{color:var(--muted)}.kiosk-feed-item.refused>svg{color:var(--warn,#b4690e)}.kiosk-feed-item.muted{background:none;color:var(--muted)}.face-enroll-backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(15,20,32,.55)}.face-enroll-dialog{width:100%;max-width:460px;max-height:92vh;overflow:auto;padding:16px 18px 18px}.face-enroll-dialog .panel-header h2{display:flex;align-items:center;gap:7px}.face-enroll-prompt{margin:12px 0 0;padding:8px 11px;border-radius:var(--radius-sm);background:var(--surface-soft);color:var(--ink);font-size:12.5px;font-weight:600}.face-enroll-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px}.mark-source{display:inline-flex;align-items:center;gap:4px;color:var(--muted);font-size:11.5px;white-space:nowrap}.mark-source.muted{color:var(--line-strong)}.mark-source.face{padding:2px 7px;border:1px solid var(--warn);border-radius:999px;background:var(--warn-soft);color:var(--warn);font-weight:600}.mark-source.face b{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;opacity:.75}.sample-count{display:block;margin-top:3px;color:var(--muted);font-size:11px}.checkin-shell{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom));background:var(--bg)}.checkin-card{width:100%;max-width:420px;padding:20px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-card)}.checkin-head{display:flex;align-items:center;gap:8px;color:var(--accent)}.checkin-card h1{margin:0;color:var(--ink);font-size:18px;line-height:1.3}.checkin-who{display:flex;flex-direction:column;margin:14px 0 10px;padding:10px 12px;border-radius:var(--radius-sm);background:var(--surface-soft)}.checkin-who b{font-size:15px}.checkin-who span{color:var(--muted);font-size:12.5px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.checkin-note{margin:10px 0;color:var(--muted);font-size:13px}.checkin-note.error{color:var(--bad)}.checkin-note code{padding:1px 4px;border-radius:4px;background:var(--neutral-soft);font-size:12px}.checkin-button{width:100%;min-height:46px;margin-top:12px;border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--accent);color:#fff;font-size:15px;font-weight:600}.checkin-button:disabled{opacity:.55}.checkin-button.ghost{border-color:var(--line-strong);background:transparent;color:var(--ink)}.checkin-hint{margin:8px 0 0;color:var(--faint);font-size:12px;text-align:center}.checkin-result{display:flex;align-items:flex-start;gap:8px;margin-top:14px;padding:10px 12px;border:1px solid var(--good);border-radius:var(--radius-sm);background:var(--good-soft);color:var(--good);font-size:13px}.checkin-result.error,.mark-source.face.unverified{border-color:var(--bad);background:var(--bad-soft);color:var(--bad)}