:root{--color-brand: #0d9488;--color-brand-dark: #00685f;--color-brand-mid: #008378;--color-brand-light: rgba(13, 148, 136, .1);--gradient-brand: linear-gradient(135deg, #0d9488 0%, #006387 100%);--gradient-brand-hover: linear-gradient(135deg, #0f8a7e 0%, #007399 100%);--gradient-brand-subtle: linear-gradient(135deg, rgba(13,148,136,.08) 0%, rgba(0,99,135,.08) 100%);--gradient-surface: linear-gradient(180deg, #ffffff 0%, #f8faff 100%);--color-bg: #f4f6fb;--color-bg-elevated: #ffffff;--color-surface: #ffffff;--color-surface-raised: #ffffff;--color-surface-overlay: #ffffff;--color-border: #e5e9f4;--color-border-strong: #c8cfe0;--color-border-subtle: rgba(229, 233, 244, .6);--color-text: #0b1c30;--color-text-secondary: #3d4947;--color-text-muted: #6d7a77;--color-text-inverse: #ffffff;--color-success: #059669;--color-success-bg: #ecfdf5;--color-success-border: #a7f3d0;--color-success-glow: rgba(5, 150, 105, .2);--color-danger: #ba1a1a;--color-danger-bg: #ffdad6;--color-danger-border: #ffb4ab;--color-danger-glow: rgba(186, 26, 26, .15);--color-warning: #d97706;--color-warning-text: #b45309;--color-warning-bg: #fffbeb;--color-warning-border: #fde68a;--color-warning-glow: rgba(217, 119, 6, .15);--color-info: #006387;--color-info-bg: #c4e7ff;--color-info-glow: rgba(0, 99, 135, .15);--color-brand-text: #0a7a70;--sidebar-bg: linear-gradient(180deg, #0f172a 0%, #0a1628 100%);--sidebar-border: rgba(255, 255, 255, .08);--sidebar-text: #94a3b8;--sidebar-text-active: #ffffff;--sidebar-accent: #6bd8cb;--sidebar-accent-bg: rgba(107, 216, 203, .12);--sidebar-hover-bg: rgba(255, 255, 255, .06);--sidebar-glow: radial-gradient(ellipse at 20% 50%, rgba(107, 216, 203, .08) 0%, transparent 60%);--shadow-level-1: 0 1px 2px rgba(11, 28, 48, .04), 0 1px 3px rgba(11, 28, 48, .06);--shadow-level-2: 0 2px 4px rgba(11, 28, 48, .04), 0 4px 12px rgba(11, 28, 48, .08);--shadow-level-3: 0 8px 16px rgba(11, 28, 48, .06), 0 16px 48px rgba(11, 28, 48, .12);--shadow-sm: var(--shadow-level-1);--shadow-md: var(--shadow-level-2);--shadow-lg: var(--shadow-level-3);--shadow-brand: 0 4px 14px rgba(13, 148, 136, .35);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-full: 9999px;--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--ease-smooth: cubic-bezier(.4, 0, .2, 1);--ease-bounce: cubic-bezier(.68, -.55, .265, 1.55);--duration-fast: .1s;--duration-normal: .2s;--duration-slow: .35s}:root[data-theme=dark]{--color-brand: #2dd4bf;--color-brand-dark: #14b8a6;--color-brand-mid: #2dd4bf;--color-brand-light: rgba(45, 212, 191, .14);--gradient-brand: linear-gradient(135deg, #14b8a6 0%, #0e7490 100%);--gradient-brand-hover: linear-gradient(135deg, #2dd4bf 0%, #0891b2 100%);--gradient-brand-subtle: linear-gradient(135deg, rgba(45,212,191,.1) 0%, rgba(8,145,178,.1) 100%);--gradient-surface: linear-gradient(180deg, #161e2e 0%, #131a28 100%);--color-bg: #0b111c;--color-bg-elevated: #161e2e;--color-surface: #161e2e;--color-surface-raised: #1c2536;--topbar-bg: rgba(18, 25, 40, .82);--color-surface-overlay: #1c2536;--color-border: #2a3650;--color-border-strong: #3a4a6b;--color-border-subtle: rgba(42, 54, 80, .5);--color-text: #e7ecf5;--color-text-secondary: #c0c9d8;--color-text-muted: #94a3b8;--color-text-inverse: #0b111c;--color-success: #34d399;--color-success-bg: rgba(16, 185, 129, .14);--color-success-border: rgba(52, 211, 153, .35);--color-success-glow: rgba(16, 185, 129, .28);--color-danger: #f87171;--color-danger-bg: rgba(239, 68, 68, .16);--color-danger-border: rgba(248, 113, 113, .4);--color-danger-glow: rgba(239, 68, 68, .28);--color-warning: #fbbf24;--color-warning-text: #fcd34d;--color-warning-bg: rgba(217, 119, 6, .16);--color-warning-border: rgba(251, 191, 36, .35);--color-warning-glow: rgba(217, 119, 6, .28);--color-info: #38bdf8;--color-info-bg: rgba(56, 189, 248, .16);--color-info-glow: rgba(56, 189, 248, .28);--color-brand-text: #5eead4;--sidebar-bg: linear-gradient(180deg, #0c1320 0%, #080e18 100%);--sidebar-border: rgba(255, 255, 255, .06);--sidebar-text: #94a3b8;--sidebar-text-active: #ffffff;--sidebar-accent: #5eead4;--sidebar-accent-bg: rgba(94, 234, 212, .14);--sidebar-hover-bg: rgba(255, 255, 255, .05);--sidebar-glow: radial-gradient(ellipse at 20% 50%, rgba(94, 234, 212, .07) 0%, transparent 60%);--shadow-level-1: 0 1px 2px rgba(0, 0, 0, .4), 0 1px 3px rgba(0, 0, 0, .5);--shadow-level-2: 0 2px 4px rgba(0, 0, 0, .4), 0 4px 12px rgba(0, 0, 0, .55);--shadow-level-3: 0 8px 16px rgba(0, 0, 0, .5), 0 16px 48px rgba(0, 0, 0, .6);--shadow-brand: 0 4px 14px rgba(45, 212, 191, .3)}:root[data-theme=dark] .glass{background:#161e2eb8;border-color:#ffffff14}:root[data-theme=dark] .glass-sm{background:#161e2ed1;border-color:#ffffff14}:root[data-theme=dark] .glass-lg{background:#161e2e9e;border-color:#ffffff0f}:root[data-theme=dark] .skeleton{background:linear-gradient(90deg,#1c2536 25%,#283349,#1c2536 75%);background-size:800px 100%}:root[data-theme=dark] .data-table tbody tr:nth-child(2n){background:#ffffff06}:root[data-theme=dark] .data-table tbody tr:hover{background:#2dd4bf14}:root[data-theme=dark] .badge-gray{background:#94a3b824;color:#cbd5e1;border-color:#94a3b840}:root[data-theme=dark] .live-badge{background:#f8717124;border-color:#f871714d;color:#f87171}:root[data-theme=dark] .live-dot{background:#f87171}:root[data-theme=dark] .toast-action-btn{border-color:#ffffff4d}.data-card,.modal-card,.notif-dropdown,.notif-trigger,.btn-icon,.field-input,.search-input,.data-table td,.data-table th{transition:background-color .25s ease,color .25s ease,border-color .25s ease}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--color-text);background:var(--color-bg);font-size:14px;line-height:1.5;transition:background-color .25s ease,color .25s ease;overscroll-behavior-y:contain;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;touch-action:manipulation}@supports (padding: max(0px)){body{padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}}h1,h2,h3,h4,h5,h6,p{margin:0}a{text-decoration:none;color:inherit}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit}button{transition:background var(--duration-normal) ease,transform var(--duration-fast) ease,box-shadow var(--duration-normal) ease,opacity var(--duration-normal) ease}input,select,textarea{transition:border-color var(--duration-normal) ease,box-shadow var(--duration-normal) ease}.glass{background:#ffffffb8;backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);border:1px solid rgba(255,255,255,.3)}.glass-sm{background:#fffc;backdrop-filter:blur(12px) saturate(160%);-webkit-backdrop-filter:blur(12px) saturate(160%);border:1px solid rgba(255,255,255,.4)}.glass-lg{background:#fff9;backdrop-filter:blur(24px) saturate(200%);-webkit-backdrop-filter:blur(24px) saturate(200%);border:1px solid rgba(255,255,255,.25)}.glass-dark{background:#0f172ad9;backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);border:1px solid rgba(255,255,255,.08)}@keyframes shimmer{0%{background-position:-400px 0}to{background-position:400px 0}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.skeleton{background:linear-gradient(90deg,#e8ecf5 25%,#d8dff0,#e8ecf5 75%);background-size:800px 100%;animation:shimmer 1.8s infinite linear;border-radius:var(--radius-sm)}.skeleton-text{height:14px;width:100%}.skeleton-text.sm{width:60%}.skeleton-badge{height:24px;width:70px;border-radius:20px}.skeleton-circle{border-radius:var(--radius-full);width:40px;height:40px}.skeleton-pulse{background:#64748b1f;animation:pulse 2s ease-in-out infinite}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#0f0a1e73;backdrop-filter:blur(8px) saturate(160%);-webkit-backdrop-filter:blur(8px) saturate(160%);display:flex;align-items:center;justify-content:center;padding:1rem;animation:fadeIn var(--duration-normal) ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-card{background:var(--gradient-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl);box-shadow:var(--shadow-level-3);width:100%;max-width:480px;padding:2rem;animation:slideUp var(--duration-normal) var(--ease-spring);position:relative}@media (max-width: 768px){.modal-card{max-width:100%;margin:0;border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:1.5rem;max-height:90vh;overflow-y:auto}.modal-backdrop{align-items:flex-end;padding:0}.modal-card:before{content:"";position:absolute;top:8px;left:50%;transform:translate(-50%);width:36px;height:4px;border-radius:2px;background:var(--color-border-strong);opacity:.5}}@media (max-width: 768px){.modal-card{max-width:100%;margin:0;border-radius:var(--radius-xl) var(--radius-xl) 0 0;padding:1.5rem;max-height:90vh;overflow-y:auto}.modal-backdrop{align-items:flex-end;padding:0}}@keyframes slideUp{0%{opacity:0;transform:translateY(24px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-title{font-size:1.125rem;font-weight:700;color:var(--color-text);margin-bottom:1.5rem}.modal-footer{display:flex;gap:.75rem;justify-content:flex-end;margin-top:1.5rem}.field{display:flex;flex-direction:column;gap:.375rem;margin-bottom:1rem}.field label{font-size:.8125rem;font-weight:600;color:var(--color-text)}.field-input{width:100%;height:44px;padding:0 12px;border:1.5px solid var(--color-border);border-radius:var(--radius-md);font-size:.875rem;color:var(--color-text);background:var(--color-surface);outline:none;transition:border-color .15s,box-shadow .15s}.field-input:focus{border-color:var(--color-brand);box-shadow:0 0 0 3px #0d94881f}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;height:40px;padding:0 1.125rem;font-size:.875rem;font-weight:600;letter-spacing:.01em;border:none;border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;min-height:44px;min-width:44px;position:relative;overflow:hidden;transition:all var(--duration-normal) ease}.btn:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(255,255,255,.2) 0%,transparent 50%);opacity:0;transition:opacity var(--duration-fast) ease;pointer-events:none}.btn:hover:after{opacity:1}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}.btn:disabled:after{display:none}.btn-primary{background:var(--gradient-brand);color:#fff;box-shadow:0 2px 8px #0d948840}.btn-primary:hover{background:var(--gradient-brand-hover);transform:translateY(-1px);box-shadow:0 4px 16px #0d948859}.btn-primary:active{transform:translateY(0) scale(.97)}.btn-primary:disabled{background:var(--gradient-brand);opacity:.5;box-shadow:none}.btn-ghost{background:transparent;color:var(--color-text-secondary);border:1.5px solid var(--color-border)}.btn-ghost:hover{background:var(--color-bg);color:var(--color-text);border-color:var(--color-border-strong)}.btn-danger{background:var(--color-danger-bg);color:var(--color-danger);border:1.5px solid var(--color-danger-border)}.btn-danger:hover{background:#fee2e2;box-shadow:0 2px 8px var(--color-danger-glow)}.btn-success{background:var(--color-success-bg);color:var(--color-success);border:1.5px solid var(--color-success-border)}.btn-success:hover{background:#d1fae5;box-shadow:0 2px 8px var(--color-success-glow)}.btn-warning{background:var(--color-warning-bg);color:var(--color-warning-text);border:1.5px solid var(--color-warning-border)}.btn-warning:hover{background:#fde68a;box-shadow:0 2px 8px var(--color-warning-glow)}.btn-sm{height:32px;padding:0 .75rem;font-size:.8125rem}.data-table{width:100%;border-collapse:collapse}.data-table th{text-align:left;padding:11px 20px;font-size:11px;font-weight:700;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.06em;border-bottom:2px solid var(--color-border);background:var(--gradient-surface)}.data-table td{padding:14px 20px;font-size:14px;color:var(--color-text);border-bottom:1px solid var(--color-border-subtle);vertical-align:middle;transition:background var(--duration-fast) ease}.data-table tbody tr:last-child td{border-bottom:none}.data-table tbody tr{transition:background var(--duration-fast) ease}.data-table tbody tr:nth-child(2n){background:#f4f6fb80}.data-table tbody tr:hover{background:#0d94880a}@media (max-width: 768px){.data-table thead{display:none}.data-table tbody{display:block}.data-table tbody tr{display:flex;flex-direction:column;padding:14px 16px;border-bottom:1px solid var(--color-border);gap:6px}.data-table tbody tr:last-child{border-bottom:none}.data-table tbody tr:hover{background:transparent}.data-table tbody td{display:flex;align-items:center;justify-content:space-between;padding:4px 0;border-bottom:none;font-size:13px}.data-table tbody td:first-child{font-weight:600;font-size:14px;padding-bottom:8px;margin-bottom:4px;border-bottom:1px dashed var(--color-border)}.data-table tbody td:last-child{justify-content:flex-end;padding-top:8px;margin-top:4px;border-top:1px dashed var(--color-border)}}.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:var(--radius-full);font-size:12px;font-weight:600;line-height:1;transition:all var(--duration-fast) ease;position:relative;overflow:hidden;animation:badgeScaleIn .2s ease}@media (prefers-reduced-motion: reduce){.badge{animation:none}}.badge:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(255,255,255,.3) 0%,transparent 50%);pointer-events:none}.badge-green{background:var(--color-success-bg);color:var(--color-success);border:1px solid var(--color-success-border)}.badge-gray{background:#64748b14;color:#64748b;border:1px solid rgba(100,116,139,.15)}.badge-orange{background:var(--color-warning-bg);color:var(--color-warning-text);border:1px solid var(--color-warning-border)}.badge-blue{background:var(--color-info-bg);color:var(--color-info);border:1px solid rgba(0,99,135,.2)}.badge-red{background:var(--color-danger-bg);color:var(--color-danger);border:1px solid var(--color-danger-border)}.page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.page-title{font-size:1.375rem;font-weight:700;color:var(--color-text);letter-spacing:-.4px}.search-input-wrap{position:relative}.search-input-wrap svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--color-text-secondary);pointer-events:none}.search-input{height:44px;padding:0 12px 0 34px;border:1.5px solid var(--color-border);border-radius:var(--radius-md);font-size:16px;color:var(--color-text);background:var(--color-surface);outline:none;min-width:220px;transition:border-color .15s,box-shadow .15s}.search-input:focus{border-color:var(--color-brand);box-shadow:0 0 0 3px #0d94881a}.data-card{background:var(--gradient-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-level-1);overflow:hidden;transition:box-shadow var(--duration-normal) ease}.data-card:hover{box-shadow:var(--shadow-level-2)}.error-banner{background:linear-gradient(135deg,#ffdad680,#ffdad64d);border:1px solid var(--color-danger-border);border-radius:var(--radius-md);padding:12px 18px;color:var(--color-danger);font-size:14px;margin-bottom:1rem;display:flex;align-items:center;gap:10px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.error-banner:before{content:"⚠";font-size:18px;flex-shrink:0}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;min-height:200px;text-align:center;color:var(--color-text-muted);font-size:14px}@keyframes toastIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.toast-action-btn{background:transparent;border:1px solid rgba(255,255,255,.4);color:#fff;padding:4px 12px;border-radius:4px;cursor:pointer;font-weight:600;font-size:13px;margin-left:8px;font-family:inherit;transition:background .15s ease}.toast-action-btn:hover{background:#ffffff26}@keyframes pageSlideIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.page-enter{animation:pageSlideIn var(--duration-slow) var(--ease-smooth)}@keyframes toastSlideIn{0%{opacity:0;transform:translate(20px) scale(.95)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes toastSlideOut{0%{opacity:1;transform:translate(0) scale(1)}to{opacity:0;transform:translate(20px) scale(.95)}}.toast-enter{animation:toastSlideIn var(--duration-normal) var(--ease-spring)}.toast-exit{animation:toastSlideOut var(--duration-normal) var(--ease-smooth)}@keyframes badgeScaleIn{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.badge-appear{animation:badgeScaleIn var(--duration-normal) var(--ease-spring)}.field-input{position:relative}.field-input:focus{border-color:var(--color-brand);box-shadow:0 0 0 3px #0d94881f,0 1px 4px #0d948814}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;min-width:40px;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--color-text-secondary);cursor:pointer;transition:all var(--duration-normal) ease;flex-shrink:0;position:relative;overflow:hidden}.btn-icon:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(255,255,255,.15) 0%,transparent 50%);opacity:0;transition:opacity var(--duration-fast) ease;pointer-events:none}.btn-icon:hover{background:var(--color-bg);color:var(--color-text);border-color:var(--color-border-strong)}.btn-icon:hover:after{opacity:1}.btn-icon:active{transform:scale(.93)}.btn-icon:disabled{opacity:.45;cursor:not-allowed}.btn-icon-primary{color:var(--color-brand);border-color:#0d94884d}.btn-icon-primary:hover{background:var(--color-brand-light);color:var(--color-brand);border-color:#0d948866}.btn-icon-danger{color:var(--color-danger);border-color:#dc26264d}.btn-icon-danger:hover{background:var(--color-danger-bg);color:var(--color-danger);border-color:#dc262666;box-shadow:0 2px 8px var(--color-danger-glow)}:focus{outline:none}:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px;border-radius:var(--radius-sm)}:focus:not(:focus-visible){outline:none}.btn:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px;box-shadow:0 0 0 4px var(--color-brand-light)}.btn-primary:focus-visible{outline-color:#fff;box-shadow:0 0 0 4px #ffffff4d}.btn-danger:focus-visible{outline-color:#fff;box-shadow:0 0 0 4px #ba1a1a4d}.btn-ghost:focus-visible{outline-color:var(--color-brand);box-shadow:0 0 0 4px var(--color-brand-light)}.btn-icon:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px}.field-input:focus-visible{outline:2px solid var(--color-brand);outline-offset:0;border-color:var(--color-brand);box-shadow:0 0 0 3px var(--color-brand-light)}.search-input:focus-visible{outline:2px solid var(--color-brand);outline-offset:0;border-color:var(--color-brand);box-shadow:0 0 0 3px var(--color-brand-light)}a:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px;border-radius:2px}.sidebar-nav-link:focus-visible{outline:2px solid var(--sidebar-accent);outline-offset:-2px}.notif-trigger:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px}.badge:focus-visible{outline:2px solid var(--color-brand);outline-offset:1px}.modal-backdrop:focus{outline:none}.kiosk-camera-placeholder:focus-visible,.kiosk-settings-btn:focus-visible{outline-color:#6bd8cb}.skip-link{position:absolute;top:-100%;left:50%;transform:translate(-50%);z-index:10000;padding:12px 24px;background:var(--color-brand);color:#fff;font-weight:600;border-radius:0 0 8px 8px;text-decoration:none;transition:top .2s}.skip-link:focus{top:0;outline:2px solid #ffffff;outline-offset:2px}.schedule-type-btn:focus-visible{outline:2px solid var(--color-brand);outline-offset:2px}.schedule-type-row{display:flex;gap:8px;margin-bottom:4px}.schedule-type-btn{padding:6px 16px;border-radius:var(--radius-md);border:1.5px solid var(--color-border);background:transparent;color:var(--color-text-secondary);font-size:13px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s,color .15s}.schedule-type-btn:hover{border-color:var(--color-brand);color:var(--color-brand-text)}.schedule-type-btn--active{border-color:var(--color-brand);background:var(--color-brand-light);color:var(--color-brand-text);font-weight:600}.session-list{display:flex;flex-direction:column;gap:8px}.session-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.session-row .field-input{flex:1;min-width:80px}.live-badge{display:inline-flex;align-items:center;gap:5px;background:#dc262614;border:1px solid rgba(220,38,38,.2);border-radius:var(--radius-full);padding:4px 10px;font-size:11px;font-weight:700;color:#dc2626;letter-spacing:.8px;align-self:flex-start}.live-dot{width:6px;height:6px;border-radius:50%;background:#dc2626;animation:live-pulse 1.5s ease-in-out infinite}@keyframes live-pulse{0%,to{opacity:1}50%{opacity:.3}}.notif-bell{position:relative;display:inline-flex}.notif-trigger{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;border:1px solid var(--color-border);border-radius:var(--radius-full);background:var(--color-surface);color:var(--color-text-secondary);cursor:pointer;transition:all var(--duration-normal) ease}.notif-trigger:hover{background:var(--color-bg);color:var(--color-text);border-color:var(--color-border-strong)}.notif-trigger:active{transform:scale(.93)}@keyframes bellBounce{0%,to{transform:scale(1)}30%{transform:scale(1.2) rotate(-8deg)}50%{transform:scale(1.1) rotate(8deg)}70%{transform:scale(1.15) rotate(-4deg)}}.notif-bell.has-unread .notif-trigger{animation:bellBounce .6s var(--ease-spring) 1}.notif-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:var(--color-danger);color:#fff;font-size:10px;font-weight:700;line-height:1;box-shadow:0 2px 4px #ba1a1a4d;transition:transform var(--duration-fast) var(--ease-spring)}@keyframes counterPulse{0%{transform:scale(1)}50%{transform:scale(1.3)}to{transform:scale(1)}}.notif-badge.updated{animation:counterPulse .3s var(--ease-spring)}.notif-badge{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 4px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-full);background:var(--color-danger);color:#fff;font-size:10px;font-weight:700;line-height:1}.notif-dropdown{position:absolute;top:calc(100% + 8px);right:0;width:280px;max-height:300px;overflow-y:auto;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md, 8px);box-shadow:0 8px 24px #0b1c301f;z-index:50}.notif-header{padding:10px 14px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border)}.notif-empty{padding:16px 14px;font-size:13px;color:var(--color-text-muted);text-align:center}.notif-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;font-size:13px;border-bottom:1px solid var(--color-border)}.notif-item:last-child{border-bottom:none}.notif-item-name{color:var(--color-text);font-weight:500}.notif-item-time{color:var(--color-text-muted);font-variant-numeric:tabular-nums}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.swipe-card{position:relative;overflow:hidden;touch-action:pan-y;-webkit-overflow-scrolling:touch;transition:transform .2s cubic-bezier(.4,0,.2,1)}.swipe-card-bg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:flex-end;padding:0 20px;gap:12px;pointer-events:none}.swipe-action{display:flex;align-items:center;justify-content:center;width:60px;height:100%;color:#fff;font-size:18px;font-weight:600;border-radius:0}.swipe-action--danger{background:#dc2626}.swipe-action--primary{background:#0d9488}.swipe-card-content{position:relative;z-index:1;background:var(--color-surface);transition:transform .25s cubic-bezier(.4,0,.2,1)}.pull-to-refresh{display:flex;align-items:center;justify-content:center;height:48px;color:var(--color-text-muted);font-size:13px;font-weight:500;overflow:hidden}@keyframes pullSpin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pull-spinner{width:20px;height:20px;border:2px solid var(--color-border);border-top-color:var(--color-brand);border-radius:50%;animation:pullSpin .8s linear infinite}.pagination{flex-wrap:wrap;justify-content:center;gap:4px;padding:12px 8px}.pagination button,.pagination .page-btn{min-width:44px;min-height:44px;padding:0 12px}.stat-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px!important;margin-bottom:16px!important}.stat-card{padding:.8rem .85rem;gap:.6rem}.stat-card .stat-icon{width:34px;height:34px;border-radius:var(--radius-md)}.stat-card .stat-value{font-size:1.35rem}.stat-card .stat-label{font-size:.7rem}.empty-state{padding:32px 16px}.data-card{border-radius:var(--radius-lg);overflow:hidden}.responsive-cards{display:none}@media (max-width: 768px){.responsive-table{display:none}.responsive-cards{display:flex;flex-direction:column;gap:10px}}.record-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:14px 16px;display:flex;flex-direction:column;gap:9px}.record-card-top{display:flex;align-items:center;justify-content:space-between;gap:10px}.record-card-name{font-weight:600;font-size:15px;color:var(--color-text)}.record-card-row{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px}.record-card-row .label{color:var(--color-text-muted)}.record-card-row .value{color:var(--color-text);font-weight:500}.schedule-row{flex-direction:column;align-items:flex-start;gap:8px;padding:14px 16px}.schedule-row-name,.schedule-row-time,.schedule-row-grace,.schedule-row-badge,.schedule-row-actions{flex:0 0 auto!important;font-size:13px}.schedule-row-actions{margin-top:4px}.activity-row{flex-direction:column;align-items:flex-start;gap:4px;padding:12px 16px}.activity-meta{width:100%;justify-content:space-between}.device-chip{width:100%;justify-content:center}.tenant-banner{flex-direction:column;align-items:flex-start;gap:8px;padding:12px}.tenant-banner select{width:100%}.schedule-form-card{flex-direction:column;align-items:stretch;padding:14px 16px}.schedule-form-field{width:100%}.toast-container{bottom:calc(72px + env(safe-area-inset-bottom));left:12px;right:12px;max-width:unset}body{overflow-x:hidden}.page-content{-webkit-overflow-scrolling:touch}@media (max-width: 768px){input,select,textarea{font-size:16px!important}}.mobile-fab{display:none}@media (max-width: 768px){.mobile-fab{position:fixed;bottom:calc(72px + env(safe-area-inset-bottom));right:16px;z-index:55;width:56px;height:56px;border-radius:50%;background:var(--gradient-brand);color:#fff;border:none;box-shadow:0 4px 16px #0d948866;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s cubic-bezier(.34,1.56,.64,1)}}.mobile-fab:active{transform:scale(.9)}.mobile-fab:hover{box-shadow:0 6px 24px #0d948880;transform:translateY(-2px)}.expandable-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden}.expandable-card-header{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:14px 16px;background:none;border:none;text-align:left;cursor:pointer;color:inherit;-webkit-tap-highlight-color:transparent}.expandable-card-header-content{flex:1;min-width:0}.expandable-card-chevron{flex-shrink:0;color:var(--color-text-muted);transition:transform .25s cubic-bezier(.34,1.56,.64,1)}.expandable-card--open .expandable-card-chevron{transform:rotate(180deg)}.expandable-card-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .28s cubic-bezier(.4,0,.2,1),opacity .22s ease}.expandable-card-body-inner{overflow:hidden;min-height:0}.expandable-card--open .expandable-card-body-inner{border-top:1px solid var(--color-border)}.users-card-list{display:none}@media (max-width: 768px){.users-table-wrap{display:none}.users-card-list{display:flex;flex-direction:column;gap:10px}}.user-card-title{font-weight:600;font-size:15px;color:var(--color-text);margin-bottom:6px}.user-card-badges{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.user-card-detail-row{display:flex;justify-content:space-between;gap:12px;padding:10px 16px;font-size:13px}.user-card-detail-row .label{color:var(--color-text-muted)}.user-card-detail-row .value{color:var(--color-text);font-weight:500;text-align:right}.user-card-actions{display:flex;gap:8px;padding:12px 16px}@media (max-width: 768px){.btn,.btn-icon,.btn-sm,.stat-card,.data-card,.swipe-card-content,.device-chip,.schedule-type-btn,.expandable-card-header,.mobile-nav-item{transition:transform .18s cubic-bezier(.34,1.56,.64,1),box-shadow .18s ease}.btn:active,.btn-icon:active,.btn-sm:active,.schedule-type-btn:active{transform:scale(.94)}.stat-card:active,.expandable-card-header:active,.device-chip:active{transform:scale(.985)}.swipe-card:active .swipe-card-content{transform:scale(.99)}}.ks-card{max-width:540px}.ks-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem}.ks-title{margin:0;font-size:1.125rem;font-weight:700;letter-spacing:-.3px;color:var(--color-text);display:flex;align-items:center;gap:.625rem}.ks-title-icon{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:var(--radius-md);background:var(--gradient-brand-subtle);color:var(--color-brand)}.ks-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:var(--radius-md);background:var(--color-brand-light);color:var(--color-text-muted);cursor:pointer;transition:background var(--duration-fast, .15s) ease,color var(--duration-fast, .15s) ease}.ks-close:hover{background:var(--color-brand-light);color:var(--color-text)}.ks-group{margin-bottom:1.25rem}.ks-group:last-child{margin-bottom:0}.ks-group-label{font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--color-text-muted);margin:0 0 .625rem}.ks-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 0;border-bottom:1px solid var(--color-border-subtle)}.ks-row:last-child{border-bottom:none}.ks-label{font-size:.875rem;color:var(--color-text-secondary)}.ks-keys{display:flex;align-items:center;gap:.25rem;flex-shrink:0}.ks-plus{font-size:.75rem;color:var(--color-text-muted)}kbd.ks-key{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 .4375rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.75rem;font-weight:600;color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border-strong, var(--color-border-subtle));border-bottom-width:2px;border-radius:var(--radius-sm);box-shadow:var(--shadow-level-1)}.ks-hint{margin:1.25rem 0 0;font-size:.75rem;color:var(--color-text-muted);text-align:center}.ob-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#0f0a1e59;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;padding:1rem;animation:fadeIn var(--duration-normal, .22s) ease}.ob-card{position:relative;width:100%;max-width:380px;background:var(--gradient-surface, var(--color-surface));border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl);box-shadow:var(--shadow-level-3);padding:1.75rem;animation:slideUp var(--duration-normal, .22s) var(--ease-spring, ease)}.ob-illu{width:64px;height:64px;border-radius:var(--radius-lg);background:var(--gradient-brand-subtle);display:flex;align-items:center;justify-content:center;color:var(--color-brand);margin-bottom:1rem}.ob-title{margin:0 0 .375rem;font-size:1.0625rem;font-weight:700;letter-spacing:-.3px;color:var(--color-text)}.ob-body{margin:0 0 1.25rem;font-size:.875rem;line-height:1.55;color:var(--color-text-muted)}.ob-footer{display:flex;align-items:center;justify-content:space-between;gap:1rem}.ob-dots{display:flex;gap:.375rem}.ob-dot{width:7px;height:7px;border-radius:var(--radius-full);background:var(--color-border-strong, var(--color-border-subtle));transition:background var(--duration-fast, .15s) ease,width var(--duration-fast, .15s) ease}.ob-dot.active{width:18px;border-radius:var(--radius-full);background:var(--color-brand)}.ob-actions{display:flex;align-items:center;gap:.5rem}.ob-skip{border:none;background:none;font-size:.8125rem;font-weight:600;color:var(--color-text-muted);cursor:pointer;padding:.5rem .25rem}.ob-skip:hover{color:var(--color-text)}.ob-next{border:none;border-radius:var(--radius-md);background:var(--gradient-brand);color:var(--color-text-inverse, #fff);font-size:.8125rem;font-weight:600;padding:.5rem 1rem;cursor:pointer;box-shadow:var(--shadow-level-1);transition:filter var(--duration-fast, .15s) ease,transform var(--duration-fast, .15s) ease}.ob-next:hover{filter:brightness(1.05);transform:translateY(-1px)}@keyframes stepSlideIn{0%{opacity:0;transform:translate(14px)}to{opacity:1;transform:translate(0)}}.auth-step-2{animation:stepSlideIn .22s cubic-bezier(.22,1,.36,1)}.auth-username-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.4rem .875rem;background:var(--color-bg);border:1.5px solid var(--color-border);border-radius:var(--radius-full);font-size:.875rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;transition:border-color .15s,color .15s,background .15s;align-self:flex-start;margin-bottom:.25rem}.auth-username-chip:hover{border-color:var(--color-brand);color:var(--color-brand);background:var(--color-brand-light)}.btn-verified{background:var(--color-success)!important;box-shadow:0 2px 8px #0596694d!important}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-7px)}40%{transform:translate(7px)}60%{transform:translate(-4px)}80%{transform:translate(4px)}}.auth-card.shake{animation:shake .45s cubic-bezier(.36,.07,.19,.97)}.auth-face-scan{display:flex;flex-direction:column;align-items:center;gap:.875rem;margin-top:1rem}.face-scan-svg{width:220px;height:240px;filter:drop-shadow(0 0 16px rgba(107,216,203,.2))}@keyframes scanMove{0%{transform:translateY(-38px);opacity:.85}50%{transform:translateY(100px);opacity:.9}to{transform:translateY(-38px);opacity:.85}}@keyframes scanMoveFast{0%{transform:translateY(-38px);opacity:.95}50%{transform:translateY(100px);opacity:1}to{transform:translateY(-38px);opacity:.95}}@keyframes bracketPulse{0%,to{opacity:.85}50%{opacity:1;filter:drop-shadow(0 0 6px rgba(107,216,203,.9))}}@keyframes verifiedRing{0%{stroke:#6bd8cb00;stroke-width:0;r:30}40%{stroke:#6bd8cbcc;stroke-width:2;r:36}to{stroke:#6bd8cb00;stroke-width:0;r:50}}@keyframes badgeDot{0%,to{opacity:.4;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}.scan-line,.scan-glow{animation:scanMove 3s ease-in-out infinite}.auth-face-scan.scanning .scan-line,.auth-face-scan.scanning .scan-glow{animation:scanMoveFast .9s ease-in-out infinite}.auth-face-scan.scanning .bracket{animation:bracketPulse .9s ease-in-out infinite}.auth-face-scan.verified .scan-line,.auth-face-scan.verified .scan-glow{animation-play-state:paused;opacity:.3}.auth-face-scan.verified .verified-ring{animation:verifiedRing .9s ease-out forwards}.auth-face-scan.failed .scan-line,.auth-face-scan.failed .scan-glow{animation-play-state:paused;opacity:.15}.face-scan-status{display:flex;flex-direction:column;align-items:center;gap:4px}.face-scan-badge{display:inline-flex;align-items:center;gap:6px;padding:5px 14px;border-radius:var(--radius-full);font-size:.8125rem;font-weight:600;background:#6bd8cb1f;border:1px solid rgba(107,216,203,.3);color:#6bd8cb;letter-spacing:.01em;transition:background .3s,border-color .3s,color .3s}.face-scan-badge.scanning{background:#6bd8cb14;border-color:#6bd8cb80;color:#6bd8cb}.face-scan-badge.verified{background:#05966926;border-color:#05966966;color:#34d399}.face-scan-badge.failed{background:#ba1a1a1f;border-color:#ba1a1a59;color:#f87171}.badge-dot{width:6px;height:6px;border-radius:50%;background:currentColor;animation:badgeDot .7s ease-in-out infinite;flex-shrink:0}.face-scan-meta{font-size:.75rem;color:#fff6;letter-spacing:.04em;transition:color .3s}.auth-powered{margin-top:1.25rem;text-align:center;font-size:.8125rem;color:var(--color-text-muted)}.auth-powered strong{color:var(--color-brand);font-weight:600}.auth-container{min-height:100vh;display:flex}.auth-brand{flex:1 1 48%;position:relative;background:linear-gradient(145deg,#0f172a,#065f52 45%,#0d9488);display:flex;align-items:center;justify-content:center;color:#fff;padding:3rem;overflow:hidden}.auth-brand:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:radial-gradient(rgba(255,255,255,.045) 1px,transparent 1px);background-size:28px 28px;pointer-events:none}.auth-brand:after{content:"";position:absolute;width:380px;height:380px;border-radius:50%;background:radial-gradient(circle,rgba(13,148,136,.25) 0%,transparent 70%);bottom:-80px;left:-60px;pointer-events:none}.auth-brand-inner{position:relative;z-index:1;max-width:360px;padding:24px 16px}.auth-brand-inner:before,.auth-brand-inner:after{content:"";position:absolute;width:28px;height:28px;border-color:#6bd8cb99;border-style:solid;pointer-events:none}.auth-brand-inner:before{top:0;left:0;border-width:2px 0 0 2px}.auth-brand-inner:after{bottom:0;right:0;border-width:0 2px 2px 0}.auth-brand-logo{display:flex;align-items:center;gap:.625rem;font-size:1.875rem;font-weight:800;letter-spacing:-.75px;margin-bottom:2rem}.auth-brand-logo svg{filter:drop-shadow(0 0 8px rgba(107,216,203,.8))}.auth-panel{flex:1 1 52%;background:#f8f9ff;display:flex;align-items:center;justify-content:center;padding:2.5rem 2rem}.auth-card{width:100%;max-width:420px;animation:authFadeIn .3s cubic-bezier(.22,1,.36,1)}@keyframes authFadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.auth-card-head{margin-bottom:2rem}.auth-title{font-size:1.875rem;font-weight:800;color:var(--color-text);letter-spacing:-.75px}.auth-subtitle{color:var(--color-text-secondary);font-size:.9375rem;margin-top:.4rem}.auth-form{display:flex;flex-direction:column;gap:1.25rem}.form-group{display:flex;flex-direction:column;gap:.4rem}.form-group label{font-size:.875rem;font-weight:600;color:var(--color-text)}.optional{color:var(--color-text-muted);font-weight:400}.input-icon-wrapper{position:relative;display:flex;align-items:center}.input-icon{position:absolute;left:.875rem;color:var(--color-text-muted);pointer-events:none}.input-with-icon{width:100%;height:46px;padding:0 .875rem 0 42px;border:1.5px solid var(--color-border);border-radius:var(--radius-md);font-size:.9375rem;color:var(--color-text);background:var(--color-surface);outline:none;transition:border-color .15s,box-shadow .15s}.input-with-trailing{padding-right:46px}.input-with-icon:focus{border-color:var(--color-brand);box-shadow:0 0 0 3px #0d94881f}.input-trailing-btn{position:absolute;right:.625rem;display:flex;align-items:center;justify-content:center;padding:.375rem;background:none;border:none;color:var(--color-text-muted);cursor:pointer;border-radius:var(--radius-sm);transition:color .12s}.input-trailing-btn:hover{color:var(--color-brand)}.auth-error{color:#dc2626;font-size:.875rem;background:#fef2f2;border:1px solid #fecaca;border-radius:var(--radius-md);padding:.625rem .875rem}.auth-form .btn-primary{display:flex;align-items:center;justify-content:center;gap:.5rem;width:100%;height:46px;font-size:.9375rem;letter-spacing:.01em}.auth-form .btn-primary:hover:not(:disabled){opacity:.92;transform:translateY(-1px);box-shadow:0 6px 20px #0d948866}.auth-form .btn-primary:active:not(:disabled){transform:translateY(0)}.auth-form .btn-primary:disabled{opacity:.65;cursor:not-allowed;box-shadow:none}.btn-spinner{width:18px;height:18px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:btn-spin .6s linear infinite}@keyframes btn-spin{to{transform:rotate(360deg)}}@media (max-width: 768px){.auth-brand{display:none}.auth-panel{flex:1 1 100%;background:#f8f9ff}}.layout{display:flex;min-height:100vh;background:var(--color-bg)}.sidebar-backdrop{display:none}.sidebar{width:248px;background:var(--sidebar-bg);display:flex;flex-direction:column;flex-shrink:0;position:relative;overflow:hidden}.sidebar:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--sidebar-glow);pointer-events:none}.sidebar-header{padding:1.5rem 1.25rem 1.125rem;border-bottom:1px solid var(--sidebar-border);position:relative;z-index:1}.sidebar-brand{display:flex;align-items:center;gap:.5rem;font-size:1.3rem;font-weight:800;color:#fff;letter-spacing:-.5px}.sidebar-brand-icon{color:var(--sidebar-accent);filter:drop-shadow(0 0 8px rgba(107,216,203,.7));transition:filter var(--duration-normal) ease}.sidebar-brand:hover .sidebar-brand-icon{filter:drop-shadow(0 0 12px rgba(107,216,203,.9))}.sidebar-role{font-size:.7rem;color:#6bd8cb8c;margin-top:.3rem;text-transform:uppercase;letter-spacing:.08em;font-weight:500}.sidebar-nav{flex:1;padding:.875rem .75rem;list-style:none;margin:0;display:flex;flex-direction:column;gap:2px;position:relative;z-index:1}.sidebar-nav li a{display:flex;align-items:center;gap:.75rem;padding:.625rem .875rem;color:var(--sidebar-text);text-decoration:none;font-size:.875rem;font-weight:500;border-radius:var(--radius-md);transition:all var(--duration-normal) ease;position:relative;overflow:hidden}.sidebar-nav li a svg{flex-shrink:0}.sidebar-nav li a:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%) scaleY(0);width:3px;height:60%;background:var(--sidebar-accent);border-radius:0 2px 2px 0;transition:transform var(--duration-normal) var(--ease-spring)}.sidebar-nav li a:hover{background:var(--sidebar-hover-bg);color:#e0e7ff}.sidebar-nav li a:hover:before{transform:translateY(-50%) scaleY(1)}.sidebar-nav li a.active{background:var(--sidebar-accent-bg);color:var(--sidebar-text-active);box-shadow:inset 0 0 0 1px #6bd8cb26}.sidebar-nav li a.active:before{transform:translateY(-50%) scaleY(1)}.sidebar-nav li a.active svg{color:var(--sidebar-accent);filter:drop-shadow(0 0 6px rgba(107,216,203,.6))}.sidebar-footer{padding:.875rem .75rem;border-top:1px solid var(--sidebar-border);position:relative;z-index:1}.sidebar-footer button{display:flex;align-items:center;justify-content:center;gap:.5rem;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:var(--sidebar-text);padding:.625rem 1rem;border-radius:var(--radius-md);font-size:.875rem;font-weight:500;width:100%;transition:all var(--duration-normal) ease}.sidebar-footer button:hover{background:#ffffff1a;color:#e0e7ff;border-color:#ffffff26}.main-content{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{background:var(--topbar-bg, rgba(255, 255, 255, .82));backdrop-filter:blur(20px) saturate(180%);-webkit-backdrop-filter:blur(20px) saturate(180%);border-bottom:1px solid var(--color-border-subtle);padding:0 1.5rem;height:60px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0;box-shadow:0 1px #0b1c300a;position:relative;z-index:10}.topbar-left{display:flex;align-items:center;gap:.75rem}.tenant-switcher{position:relative}.tenant-switcher-trigger{display:flex;align-items:center;gap:.45rem;max-width:240px;padding:.4rem .6rem;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-md);color:var(--color-text);font-size:.85rem;font-weight:600;cursor:pointer;transition:border-color .15s,background .15s}.tenant-switcher-trigger:hover{border-color:var(--color-brand)}.tenant-switcher-trigger.is-empty{color:var(--color-text-muted);border-style:dashed;border-color:var(--color-brand)}.tenant-switcher-icon{color:var(--color-brand);flex-shrink:0}.tenant-switcher-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tenant-switcher-caret{color:var(--color-text-muted);flex-shrink:0}.tenant-switcher-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:50;width:300px;max-width:90vw;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 12px 32px #00000029;overflow:hidden}.tenant-switcher-search{display:flex;align-items:center;gap:.45rem;padding:.55rem .7rem;border-bottom:1px solid var(--color-border);color:var(--color-text-muted)}.tenant-switcher-search input{flex:1;border:none;outline:none;background:transparent;color:var(--color-text);font-size:.85rem}.tenant-switcher-list{max-height:280px;overflow-y:auto;padding:.25rem}.tenant-switcher-empty{padding:.9rem;text-align:center;color:var(--color-text-muted);font-size:.85rem}.tenant-switcher-item{display:flex;align-items:center;gap:.55rem;width:100%;padding:.5rem .6rem;background:none;border:none;border-radius:var(--radius-sm, 6px);cursor:pointer;text-align:left;color:var(--color-text)}.tenant-switcher-item:hover{background:var(--color-bg)}.tenant-switcher-item.active{background:#7c3aed14}.tenant-switcher-status{width:8px;height:8px;border-radius:50%;flex-shrink:0}.tenant-switcher-status.status-active{background:#16a34a}.tenant-switcher-status.status-suspended{background:#dc2626}.tenant-switcher-item-text{display:flex;flex-direction:column;min-width:0;flex:1}.tenant-switcher-item-name{font-size:.85rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tenant-switcher-item-slug{font-size:.72rem;color:var(--color-text-muted)}.tenant-switcher-badge{font-size:.65rem;font-weight:700;padding:.1rem .4rem;border-radius:999px;flex-shrink:0}.tenant-switcher-badge.badge-active{background:#16a34a1f;color:#16a34a}.tenant-switcher-badge.badge-suspended{background:#dc26261f;color:#dc2626}.tenant-switcher-check{color:var(--color-brand);flex-shrink:0}.tenant-switcher-clear{width:100%;padding:.55rem;background:none;border:none;border-top:1px solid var(--color-border);color:var(--color-text-muted);font-size:.78rem;cursor:pointer}.tenant-switcher-clear:hover{background:var(--color-bg);color:var(--color-danger, #dc2626)}.topbar-menu-btn{display:none;align-items:center;justify-content:center;background:none;border:none;color:var(--color-text);padding:.25rem;border-radius:var(--radius-sm)}.topbar-title{font-size:1rem;font-weight:600;color:var(--color-text);letter-spacing:-.2px}.topbar-user,.topbar-user-desktop{display:flex;align-items:center;gap:.625rem}.topbar-avatar{width:32px;height:32px;border-radius:var(--radius-full);background:var(--gradient-brand);color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:var(--shadow-brand);transition:transform var(--duration-fast) var(--ease-spring),box-shadow var(--duration-normal) ease}.topbar-avatar:hover{transform:scale(1.08);box-shadow:0 4px 18px #0d948873}.topbar-role{font-size:.8125rem;color:var(--color-text-secondary);text-transform:capitalize}.profile-menu{position:relative}.profile-trigger{display:flex;align-items:center;gap:.5rem;padding:.25rem .5rem .25rem .3rem;background:transparent;border:1px solid transparent;border-radius:var(--radius-full);cursor:pointer;transition:background var(--duration-fast) ease,border-color var(--duration-fast) ease}.profile-trigger:hover{background:var(--color-surface-hover, rgba(148, 163, 184, .12));border-color:var(--color-border)}.profile-avatar{width:32px;height:32px;border-radius:var(--radius-full);background:var(--gradient-brand);color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:var(--shadow-brand)}.profile-avatar.lg{width:40px;height:40px;font-size:13px}.profile-trigger-name{font-size:.875rem;font-weight:600;color:var(--color-text);line-height:1.2}.profile-chevron{color:var(--color-text-muted);transition:transform var(--duration-fast) ease}.profile-chevron.open{transform:rotate(180deg)}.profile-dropdown{position:absolute;top:calc(100% + 8px);right:0;min-width:230px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg, 0 12px 32px rgba(15, 23, 42, .18));padding:6px;z-index:60;animation:profileMenuIn .16s cubic-bezier(.22,1,.36,1)}@keyframes profileMenuIn{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.profile-dropdown-header{display:flex;align-items:center;gap:10px;padding:10px 10px 12px}.profile-name{font-size:.875rem;font-weight:600;color:var(--color-text)}.profile-sub{font-size:.75rem;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.profile-divider{height:1px;background:var(--color-border);margin:4px 0}.profile-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;background:transparent;border:none;border-radius:var(--radius-md);font-size:.8125rem;font-weight:500;color:var(--color-text);cursor:pointer;text-align:left;transition:background var(--duration-fast) ease}.profile-item:hover{background:var(--color-surface-hover, rgba(148, 163, 184, .12))}.profile-item.danger{color:var(--color-danger)}.profile-item.danger:hover{background:#dc26261a}.page-content{flex:1;padding:2rem 1.75rem;animation:pageEnter .25s cubic-bezier(.22,1,.36,1)}@keyframes pageEnter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.page-header{margin-bottom:1.75rem}.page-header h2{font-size:1.5rem;font-weight:700;color:var(--color-text);letter-spacing:-.5px}.page-header p{color:var(--color-text-secondary);margin-top:.3rem;font-size:.875rem}.placeholder-card{background:var(--color-surface);border:2px dashed var(--color-border);border-radius:var(--radius-lg);padding:3rem 2rem;text-align:center;color:var(--color-text-muted);font-size:.9rem}.placeholder-card .placeholder-icon{font-size:2.5rem;margin-bottom:.75rem}.error-page{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;text-align:center;padding:2rem}.error-page h1{font-size:5rem;font-weight:800;background:var(--gradient-brand);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;line-height:1}.error-page p{color:var(--color-text-secondary)}.error-page a{color:var(--color-brand)}@media (max-width: 768px){.sidebar{display:none}.topbar{height:54px;padding:0 14px}.topbar-title{font-size:.98rem;font-weight:700;max-width:62vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topbar-user-desktop{display:none}.add-fab-twin{display:none!important}.page-content{padding:14px;padding-bottom:calc(86px + env(safe-area-inset-bottom))}.page-title{font-size:1.2rem}.page-toolbar{gap:.75rem;margin-bottom:1rem}@media (max-width: 480px){.page-toolbar{flex-direction:column;align-items:stretch}.page-toolbar .btn{width:100%;justify-content:center}}}.mobile-bottom-nav{display:none;position:fixed;bottom:0;left:0;right:0;z-index:60;background:var(--color-surface);border-top:1px solid var(--color-border);padding:0;padding-bottom:env(safe-area-inset-bottom);height:calc(56px + env(safe-area-inset-bottom));box-shadow:0 -2px 12px #00000014;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@media (max-width: 768px){.mobile-bottom-nav{display:flex;justify-content:space-around;align-items:stretch}}.mobile-nav-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;flex:1;min-height:56px;padding:6px 4px;color:var(--color-text-muted);text-decoration:none;font-size:.65rem;font-weight:500;transition:color .15s;-webkit-tap-highlight-color:transparent}.mobile-nav-item svg{flex-shrink:0;transition:transform .15s}.mobile-nav-item:active svg{transform:scale(.9)}.mobile-nav-item.active{color:var(--color-brand)}.mobile-nav-item.active svg{filter:drop-shadow(0 0 4px rgba(13,148,136,.4))}.mobile-more-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:70;background:#0b1c3080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:flex-end;animation:fadeIn .18s ease}.mobile-more-sheet{width:100%;background:var(--color-surface);border-radius:20px 20px 0 0;padding:10px 16px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -8px 32px #00000038;animation:sheetUp .26s cubic-bezier(.4,0,.2,1)}@keyframes sheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}.mobile-more-handle{width:40px;height:4px;border-radius:999px;background:var(--color-border);margin:4px auto 14px}.mobile-more-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px}.mobile-more-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:14px 6px;border-radius:var(--radius-md);background:var(--color-bg);color:var(--color-text);text-decoration:none;font-size:.72rem;font-weight:600;text-align:center}.mobile-more-item.active{background:#0d94881f;color:var(--color-brand)}.mobile-more-actions{border-top:1px solid var(--color-border);padding-top:12px;display:flex;flex-direction:column;gap:4px}.mobile-more-row{display:flex;align-items:center;justify-content:space-between;padding:10px 6px;font-size:.9rem;font-weight:600;color:var(--color-text)}.mobile-more-action{display:flex;align-items:center;gap:10px;width:100%;padding:13px 6px;background:none;border:none;text-align:left;font-size:.9rem;font-weight:600;color:var(--color-text);cursor:pointer;border-radius:var(--radius-md)}.mobile-more-action:active{background:var(--color-bg)}.mobile-more-action.danger{color:var(--color-danger, #dc2626)}.stat-card{background:var(--gradient-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);padding:1.25rem 1.5rem;display:flex;gap:1rem;align-items:center;box-shadow:var(--shadow-level-1);transition:all var(--duration-normal) ease;position:relative;overflow:hidden}.stat-card:after{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--gradient-brand);opacity:0;transition:opacity var(--duration-normal) ease}.stat-card:hover{box-shadow:var(--shadow-level-2);transform:translateY(-2px);border-color:var(--color-border)}.stat-card:hover:after{opacity:1}@media (max-width: 768px){.stat-card{padding:1rem}.stat-value{font-size:1.5rem}.stat-icon{width:40px;height:40px}}.stat-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.stat-icon{width:46px;height:46px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;overflow:hidden}.stat-icon:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(255,255,255,.3) 0%,transparent 60%);pointer-events:none}.stat-value{font-size:1.75rem;font-weight:800;color:var(--color-text);line-height:1.1}.stat-label{font-size:.8125rem;color:var(--color-text-secondary);margin-top:2px}.tenant-banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:20px;padding:10px 14px;background:#0d948814;border:1px solid rgba(107,216,203,.2);border-radius:var(--radius-md);color:var(--color-text-secondary);font-size:13px}.tenant-banner select{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);padding:5px 8px;font-size:13px;font-family:inherit;cursor:pointer}.tenant-banner-badge--selected{padding:3px 10px;border-radius:var(--radius-full);background:var(--color-success-bg);border:1px solid var(--color-success-border);color:var(--color-success);font-size:12px;font-weight:600}.tenant-banner-badge--empty{color:var(--color-warning);font-size:12px}.tenant-context-banner{display:flex;align-items:center;gap:8px;margin-bottom:16px;padding:6px 10px;background:#f59e0b0f;border:1px solid rgba(245,158,11,.2);border-radius:var(--radius-md);font-size:13px;color:var(--color-text-secondary);position:relative}.tenant-context-back{display:flex;align-items:center;justify-content:center;background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);color:var(--color-text);padding:4px 6px;cursor:pointer;transition:background .15s}.tenant-context-back:hover{background:var(--color-bg)}.tenant-context-icon{color:var(--color-warning, #f59e0b);flex-shrink:0}.tenant-context-name{font-weight:700;color:var(--color-text);white-space:nowrap;background:none;border:none;cursor:pointer;font-size:inherit;font-family:inherit;padding:0}.tenant-context-name:hover{text-decoration:underline;text-decoration-color:var(--color-brand)}.tenant-context-badge{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px}.tenant-context-badge.badge-active{background:#16a34a1f;color:#16a34a}.tenant-context-badge.badge-suspended{background:#dc26261f;color:#dc2626}.tenant-context-switcher-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:50;width:240px;max-width:90vw;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:0 12px 32px #00000029;overflow:hidden}.tenant-context-switcher-list{max-height:260px;overflow-y:auto;padding:.25rem}.tenant-context-switcher-item{display:block;width:100%;padding:.5rem .7rem;background:none;border:none;border-radius:var(--radius-sm);cursor:pointer;text-align:left;color:var(--color-text);font-size:.85rem;font-weight:600}.tenant-context-switcher-item:hover{background:var(--color-bg)}.tenant-context-switcher-item.active{background:#7c3aed14;color:var(--color-brand)}.progress-track{background:var(--color-border);height:8px;border-radius:4px;overflow:hidden}.progress-fill{height:100%;border-radius:4px;background:var(--gradient-brand);transition:width .6s ease}.activity-row{display:flex;justify-content:space-between;align-items:center;padding:14px 20px;border-top:1px solid var(--color-border)}.activity-row:first-child{border-top:none}.activity-name{font-size:14px;color:var(--color-text)}.activity-meta{display:flex;gap:12px;align-items:center}.activity-time{font-size:12px;color:var(--color-text-secondary)}.device-chip{display:flex;align-items:center;gap:8px;padding:8px 14px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:13px;color:var(--color-text-secondary)}.filter-row{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;align-items:center}@media (max-width: 768px){.filter-row{gap:10px}.filter-row .date-input,.filter-row .search-input-wrap{flex:1 1 100%;min-width:0}.filter-row .filter-label{display:none}.filter-row .btn{flex:1;justify-content:center}}.filter-label{font-size:13px;font-weight:500;color:var(--color-text-secondary);white-space:nowrap}.date-input{height:44px;padding:0 10px;border:1.5px solid var(--color-border);border-radius:var(--radius-md);font-size:16px;font-family:inherit;color:var(--color-text);background:var(--color-surface);outline:none;color-scheme:light;cursor:pointer;transition:border-color .15s,box-shadow .15s;min-width:138px}.date-input:focus{border-color:var(--color-brand);box-shadow:0 0 0 3px #0d94881a}.date-input::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.5;filter:invert(40%) sepia(50%) saturate(500%) hue-rotate(140deg);transition:opacity .15s}.date-input:hover::-webkit-calendar-picker-indicator,.date-input:focus::-webkit-calendar-picker-indicator{opacity:.85}.schedule-form-card{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;padding:16px 20px;margin-bottom:16px}.schedule-form-field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--color-text-secondary)}.schedule-row{display:flex;align-items:center;gap:16px;padding:16px 20px;margin-bottom:8px}.schedule-row-name{flex:1 1 180px}.schedule-row-name strong{display:block;font-weight:600;font-size:15px;color:var(--color-text)}.schedule-row-name span{font-size:13px;color:var(--color-text-muted);margin-top:2px;display:block}.schedule-row-time{display:flex;align-items:center;gap:6px;font-size:14px;color:var(--color-text-secondary);flex:0 0 150px}.schedule-row-grace{font-size:13px;color:var(--color-text-secondary);flex:0 0 140px}.schedule-row-badge{flex:0 0 90px}.schedule-row-actions{display:flex;gap:4px}.confirm-text{font-size:14px;color:var(--color-text-secondary);margin-bottom:8px;line-height:1.6}.donut-chart{display:flex;align-items:center;gap:24px;flex-wrap:wrap}.donut-chart__svg-wrap{position:relative;flex:0 0 auto;width:160px;height:160px}.donut-chart__svg{width:100%;height:100%;transform:rotate(-90deg)}.donut-chart__seg{transition:stroke-dasharray .6s ease,opacity .2s ease}.donut-chart__center{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;pointer-events:none}.donut-chart__total{font-size:1.75rem;font-weight:700;line-height:1;color:var(--color-text)}.donut-chart__total-label{margin-top:4px;font-size:.75rem;font-weight:500;color:var(--color-text-muted)}.donut-chart__legend{flex:1 1 160px;display:flex;flex-direction:column;gap:10px;min-width:140px}.donut-chart__legend-row{display:flex;align-items:center;gap:10px;font-size:.8125rem}.donut-chart__dot{width:10px;height:10px;border-radius:3px;flex-shrink:0}.donut-chart__legend-label{color:var(--color-text-secondary);flex:1}.donut-chart__legend-value{font-weight:700;color:var(--color-text)}.donut-chart__legend-pct{color:var(--color-text-muted);font-size:.75rem;min-width:38px;text-align:right}.donut-chart__empty{font-size:.8125rem;color:var(--color-text-muted);padding:24px 0}.sparkline{display:block;width:100%;height:28px;overflow:visible}.sparkline__area{opacity:.18}.sparkline__line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.sparkline__dot{stroke:var(--color-surface);stroke-width:1.5}.heatmap{display:flex;flex-direction:column;gap:12px}.heatmap__grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.heatmap__dow{font-size:.6875rem;font-weight:600;color:var(--color-text-muted);text-align:center;padding-bottom:2px}.heatmap__cell{aspect-ratio:1 / 1;border-radius:6px;border:1px solid var(--color-border-subtle);display:flex;align-items:center;justify-content:center;font-size:.6875rem;font-weight:600;color:var(--color-text-muted);cursor:default;transition:transform .12s ease,box-shadow .12s ease}.heatmap__cell--filled{color:var(--color-text-inverse);border-color:transparent}.heatmap__cell--filled:hover{transform:scale(1.08);box-shadow:var(--shadow-level-2)}.heatmap__cell--empty{background:var(--gradient-brand-subtle)}.heatmap__cell--blank{background:transparent;border-color:transparent}.heatmap__legend{display:flex;align-items:center;justify-content:flex-end;gap:6px;font-size:.6875rem;color:var(--color-text-muted)}.heatmap__legend-swatch{width:12px;height:12px;border-radius:4px;border:1px solid var(--color-border-subtle)}.step-progress{display:flex;align-items:flex-start;width:100%}.step-progress__step{display:flex;flex-direction:column;align-items:center;flex:1;text-align:center;position:relative}.step-progress__node{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.8125rem;font-weight:700;background:var(--color-surface);border:2px solid var(--color-border-strong);color:var(--color-text-muted);z-index:1;transition:all .2s ease}.step-progress__node--done{background:var(--gradient-brand);border-color:transparent;color:var(--color-text-inverse);box-shadow:var(--shadow-level-1)}.step-progress__node--current{border-color:var(--color-brand);color:var(--color-brand-text);box-shadow:0 0 0 4px var(--color-brand-light)}.step-progress__connector{position:absolute;top:17px;left:50%;width:100%;height:2px;background:var(--color-border);z-index:0}.step-progress__connector--done{background:var(--gradient-brand)}.step-progress__label{margin-top:8px;font-size:.75rem;font-weight:500;color:var(--color-text-secondary);max-width:90px}.step-progress__step--done .step-progress__label,.step-progress__step--current .step-progress__label{color:var(--color-text)}.step-bar{display:flex;align-items:flex-start;margin-bottom:1.75rem}.step-item{display:flex;align-items:flex-start;flex:1}.step-item:last-child{flex:none}.step-body{display:flex;flex-direction:column;align-items:center;gap:6px}.step-node{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0;transition:all .25s}.step-node--done{background:var(--color-success);color:#fff}.step-node--active{background:var(--gradient-brand);color:#fff;box-shadow:0 0 0 4px #7c3aed26}.step-node--inactive{background:#64748b1f;color:#64748b}.step-label{font-size:11px;white-space:nowrap}.step-label--active{font-weight:600;color:var(--color-brand)}.step-label--done{font-weight:500;color:var(--color-success)}.step-label--inactive{font-weight:400;color:#94a3b8}.step-connector{flex:1;height:2px;margin-top:14px;margin-inline:8px;transition:background .3s}.step-connector--done{background:var(--color-success)}.step-connector--inactive{background:#64748b26}.enrollment-layout{display:flex;flex-direction:column;gap:1.25rem;max-width:700px}.enrollment-section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:1.5rem;transition:opacity .2s,filter .2s}.enrollment-section--locked{opacity:.45;pointer-events:none;-webkit-user-select:none;user-select:none;filter:grayscale(.3)}.enrollment-section h3{font-size:1rem;font-weight:600;color:var(--color-text);margin-bottom:1rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem}.form-group{display:flex;flex-direction:column;gap:.375rem;margin-bottom:.75rem}.form-group label{font-size:.8125rem;font-weight:600;color:var(--color-text)}.user-id-input,.user-id-select{padding:.625rem .875rem;border:1.5px solid var(--color-border);border-radius:var(--radius-md);font-size:.9375rem;color:var(--color-text);outline:none;width:100%;background:var(--color-surface);cursor:pointer;transition:border-color .15s,box-shadow .15s}.user-id-input:focus,.user-id-select:focus{border-color:var(--color-brand);box-shadow:0 0 0 3px #7c3aed1f}.users-error{display:flex;align-items:center;justify-content:space-between;gap:.75rem;background:var(--color-danger-bg);border:1px solid var(--color-danger-border);border-radius:var(--radius-md);padding:.75rem 1rem;font-size:.875rem;color:var(--color-danger);margin-bottom:.75rem}.user-confirm-banner{display:inline-flex;align-items:center;gap:.5rem;background:var(--color-brand-light);border:1px solid rgba(124,58,237,.2);border-radius:var(--radius-full);padding:.3rem .875rem;font-size:.8125rem;font-weight:600;color:var(--color-brand);margin-bottom:1rem;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-confirm-banner .dot{width:6px;height:6px;border-radius:50%;background:var(--color-brand);flex-shrink:0}.camera-wrapper{position:relative;background:#000;border-radius:var(--radius-md);overflow:hidden;aspect-ratio:4 / 3;max-width:420px}.camera-video{width:100%;height:100%;object-fit:cover;display:block}.camera-canvas{display:none}.camera-placeholder{width:100%;min-height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;color:var(--color-text-secondary);background:var(--color-bg);border:2px dashed var(--color-border);border-radius:var(--radius-md);text-align:center;padding:2rem 1rem;font-size:.875rem}.camera-placeholder-icon{font-size:2.5rem}.camera-actions{display:flex;gap:.75rem;margin-top:1rem;flex-wrap:wrap}.captured-preview{display:flex;align-items:flex-start;gap:1.25rem;flex-wrap:wrap;padding:1rem;background:var(--color-bg);border-radius:var(--radius-md);border:1px solid var(--color-border)}.captured-preview img{width:180px;height:135px;object-fit:cover;border-radius:var(--radius-md);border:2px solid var(--color-brand);flex-shrink:0}.captured-meta{display:flex;flex-direction:column;gap:.375rem;padding-top:.25rem}.captured-label{font-size:.875rem;font-weight:600;color:var(--color-text)}.captured-sub{font-size:.8125rem;color:var(--color-text-secondary)}.file-upload-divider{display:flex;align-items:center;gap:.75rem;margin:1rem 0;color:var(--color-text-muted);font-size:.8rem}.file-upload-divider:before,.file-upload-divider:after{content:"";flex:1;height:1px;background:var(--color-border)}.file-upload-zone{border:1.5px dashed var(--color-border);border-radius:var(--radius-md);padding:1.125rem;display:flex;align-items:center;justify-content:center;gap:.625rem;cursor:pointer;transition:border-color .15s,background .15s,color .15s;font-size:.875rem;color:var(--color-text-secondary);position:relative;-webkit-user-select:none;user-select:none}.file-upload-zone:hover{border-color:var(--color-brand);background:var(--color-brand-light);color:var(--color-brand)}.file-upload-zone input[type=file]{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer;width:100%;height:100%}.file-upload-zone--selected{border-color:var(--color-success);background:var(--color-success-bg);color:var(--color-success)}.consent-row{display:flex;align-items:flex-start;gap:.75rem;font-size:.875rem;color:var(--color-text);cursor:pointer;line-height:1.55;margin-bottom:1.25rem;padding:1rem;background:var(--color-bg);border-radius:var(--radius-md);border:1.5px solid var(--color-border);transition:border-color .15s,background .15s}.consent-row:has(input:checked){border-color:var(--color-success);background:var(--color-success-bg)}.consent-row input[type=checkbox]{margin-top:.15rem;width:16px;height:16px;accent-color:var(--color-brand);flex-shrink:0;cursor:pointer}.enrollment-result{padding:.875rem 1rem;border-radius:var(--radius-md);font-size:.875rem;font-weight:500;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem}.enrollment-result.success{background:var(--color-success-bg);border:1px solid var(--color-success-border);color:var(--color-success)}.enrollment-result.error{background:var(--color-danger-bg);border:1px solid var(--color-danger-border);color:var(--color-danger)}.enrollment-submit-row{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.enrollment-hint{font-size:.8rem;color:var(--color-text-muted)}.step-nav-row{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--color-border)}.voice-toggle{display:flex;align-items:center;gap:.4rem;font-size:.82rem;color:var(--color-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}.voice-toggle input{accent-color:var(--color-brand);cursor:pointer}.angle-cards{display:flex;gap:.75rem;margin-bottom:1.25rem}.angle-card{flex:1;display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:.875rem .5rem .625rem;border-radius:var(--radius-lg);border:1.5px solid var(--color-border);background:var(--color-bg);transition:border-color .2s,background .2s,box-shadow .2s;position:relative;overflow:hidden}.angle-card--idle{opacity:.5}.angle-card--active{border-color:var(--color-brand);background:var(--color-brand-light);box-shadow:0 0 0 3px #7c3aed1f,0 4px 16px #7c3aed1a}.angle-card--done{border-color:var(--color-success);background:var(--color-success-bg)}.angle-card-ring{position:relative;width:52px;height:52px;display:flex;align-items:center;justify-content:center}.angle-ring-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.angle-card-icon{display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);transition:color .2s}.angle-card--active .angle-card-icon{color:var(--color-brand)}.angle-card--done .angle-card-icon{color:var(--color-success)}.angle-card-label{font-size:.75rem;font-weight:600;color:var(--color-text-secondary);letter-spacing:.02em}.angle-card--active .angle-card-label{color:var(--color-brand)}.angle-card--done .angle-card-label{color:var(--color-success)}.angle-card-badge{position:absolute;top:6px;right:6px;font-size:.6rem;font-weight:700;letter-spacing:.06em;color:#fff;background:var(--color-brand);border-radius:99px;padding:1px 6px;text-transform:uppercase}.cam-instruction{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(10,10,20,.94) 0%,rgba(10,10,20,.55) 75%,transparent 100%);padding:1.25rem 1rem 1rem;display:flex;flex-direction:column;align-items:center;gap:.25rem;pointer-events:none}.cam-instruction--dim{background:linear-gradient(to top,rgba(10,10,20,.65) 0%,transparent 100%)}.cam-instruction-icon{color:#c4b5fdd9;margin-bottom:.1rem}.cam-instruction-text{font-size:1rem;font-weight:700;color:#f1f5f9;letter-spacing:-.1px;text-align:center}.cam-instruction-countdown{font-size:2.5rem;font-weight:900;color:#c4b5fde6;font-variant-numeric:tabular-nums;line-height:1;letter-spacing:-1px;text-shadow:0 0 20px rgba(124,58,237,.5)}.camera-detection-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;display:block}.enroll-phase-dots{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem}.enroll-phase-dot{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;background:#64748b1f;color:#64748b;border:1.5px solid rgba(100,116,139,.2);transition:all .2s}.enroll-phase-dot.active{background:var(--gradient-brand);color:#fff;border-color:transparent;box-shadow:0 0 0 3px #7c3aed26}.enroll-phase-dot.done{background:var(--color-success);color:#fff;border-color:transparent}.enroll-phase-dots-label{font-size:.8rem;font-weight:600;color:var(--color-text-secondary);margin-left:.25rem}.enroll-phase-overlay{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(to top,rgba(10,10,20,.92) 0%,rgba(10,10,20,.5) 75%,transparent 100%);padding:1.25rem 1rem 1rem;display:flex;flex-direction:column;align-items:center;gap:.3rem;pointer-events:none}.enroll-phase-overlay--dim{background:linear-gradient(to top,rgba(10,10,20,.6) 0%,transparent 100%)}.enroll-phase-label{font-size:1rem;font-weight:700;color:#f1f5f9;letter-spacing:-.1px}.enroll-phase-hint{font-size:.75rem;color:#94a3b8}.enroll-countdown-wrap{width:100%;max-width:200px;display:flex;align-items:center;gap:.5rem;margin-top:.25rem}.enroll-countdown-bar{flex:1;height:3px;background:#ffffff1f;border-radius:99px;overflow:hidden}.enroll-countdown-fill{height:100%;background:linear-gradient(90deg,#7c3aed,#06b6d4);border-radius:99px;transition:width .9s linear}.enroll-countdown-num{font-size:.72rem;color:#a78bfa;font-variant-numeric:tabular-nums;font-weight:600;min-width:1.4rem;text-align:right}.enroll-previews{display:flex;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap}.enroll-previews--sm .enroll-preview-thumb img{max-height:80px}.enroll-preview-thumb{display:flex;flex-direction:column;align-items:center;gap:.3rem;flex:1;min-width:80px;max-width:150px}.enroll-preview-thumb img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--radius-md);border:1.5px solid var(--color-brand)}.enroll-preview-thumb span{font-size:.7rem;color:var(--color-text-secondary);font-weight:500}@keyframes spin{to{transform:rotate(360deg)}}.spinner{width:15px;height:15px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite;flex-shrink:0}.kiosk-page{min-height:100vh;background:#0f172a;color:#f1f5f9;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:2rem 1rem;font-family:Inter,Geist,-apple-system,BlinkMacSystemFont,sans-serif}.kiosk-header{width:100%;max-width:640px;display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem}.kiosk-clock{text-align:center;flex:1}.kiosk-clock-time{font-size:2.25rem;font-weight:700;letter-spacing:.04em;color:#f1f5f9;font-variant-numeric:tabular-nums;line-height:1.1}.kiosk-clock-date{font-size:.72rem;color:#64748b;text-transform:capitalize;margin-top:2px;letter-spacing:.03em}.kiosk-brand{display:flex;align-items:center;gap:.5rem;font-size:1.5rem;font-weight:800;color:#fff;letter-spacing:-.5px}.kiosk-brand-icon{color:#0d9488;filter:drop-shadow(0 0 6px rgba(13,148,136,.6))}.kiosk-setup-btn{display:flex;align-items:center;gap:6px;background:none;border:1px solid rgba(255,255,255,.12);color:#94a3b8;padding:.375rem .75rem;border-radius:6px;font-size:.8rem;cursor:pointer;transition:background .12s,color .12s,border-color .12s}.kiosk-setup-btn:hover{background:#ffffff0f;color:#e2e8f0;border-color:#fff3}.kiosk-setup-panel{width:100%;max-width:560px;background:#1e293b;border:1px solid rgba(107,216,203,.15);border-radius:12px;padding:1.5rem;margin-bottom:1.5rem}.kiosk-setup-panel h3{font-size:1rem;font-weight:600;color:#f1f5f9;margin-bottom:.75rem}.kiosk-setup-panel p{font-size:.85rem;color:#94a3b8;margin-bottom:1rem;line-height:1.6}.kiosk-token-row{display:flex;gap:.5rem}.kiosk-token-input{flex:1;padding:.625rem .875rem;background:#0f172a;border:1.5px solid rgba(255,255,255,.1);border-radius:8px;color:#f1f5f9;font-size:.9rem;outline:none;font-family:Geist Mono,Fira Code,monospace;transition:border-color .15s,box-shadow .15s}.kiosk-token-input:focus{border-color:#0d9488;box-shadow:0 0 0 3px #0d94882e}.kiosk-token-save-btn{background:linear-gradient(135deg,#0d9488,#0891b2);color:#fff;border:none;border-radius:8px;padding:.625rem 1rem;font-size:.9rem;font-weight:600;cursor:pointer;white-space:nowrap;box-shadow:0 4px 12px #0d948859;transition:opacity .15s,transform .1s}.kiosk-token-save-btn:hover{opacity:.9;transform:translateY(-1px)}.kiosk-token-status{margin-top:.5rem;font-size:.8rem}.kiosk-token-status.ok{color:#34d399}.kiosk-token-status.missing{color:#f87171}.kiosk-no-token-warning{width:100%;max-width:560px;background:#ba1a1a1f;border:1px solid rgba(186,26,26,.35);border-radius:8px;padding:.75rem 1rem;color:#fca5a5;font-size:.875rem;text-align:center}.kiosk-camera-area{width:100%;max-width:640px;display:flex;flex-direction:column;align-items:center;gap:1rem}.kiosk-camera-wrapper{position:relative;width:100%;background:#000;border-radius:12px;overflow:hidden;aspect-ratio:4 / 3;border:1.5px solid rgba(107,216,203,.2);box-shadow:0 0 0 1px #0d948814,0 8px 32px #0006}.kiosk-video{width:100%;height:100%;object-fit:cover;display:block;transform:scaleX(-1)}.kiosk-canvas{display:none}.kiosk-detection-canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;transform:scaleX(-1);display:block}.kiosk-camera-placeholder{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;color:#64748b;background:#1e293b;min-height:300px;text-align:center;padding:1.5rem}.kiosk-camera-placeholder-icon{font-size:3.5rem}.kiosk-camera-placeholder p{color:#64748b;font-size:.9rem}.kiosk-hud{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.kiosk-hud-svg{width:100%;height:100%}.kiosk-btn{flex:1;padding:1.1rem 1rem;border:none;border-radius:12px;font-size:1.25rem;font-weight:700;cursor:pointer;letter-spacing:-.3px;transition:opacity .15s,transform .08s,box-shadow .15s}.kiosk-btn:active:not(:disabled){transform:scale(.97)}.kiosk-btn:disabled{opacity:.4;cursor:not-allowed}.kiosk-btn-checkin{background:linear-gradient(135deg,#0d9488,#059669);color:#fff;box-shadow:0 4px 16px #0d948859}.kiosk-btn-checkin:hover:not(:disabled){opacity:.9;box-shadow:0 6px 20px #0d948873}.kiosk-result-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;border-radius:10px;padding:1.5rem;text-align:center;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.kiosk-result-overlay.success{background:#059669eb}.kiosk-result-overlay.error{background:#ba1a1ae6}.kiosk-result-type-badge{font-size:.78rem;font-weight:700;letter-spacing:.12em;color:#ffffffe6;background:#ffffff26;border:1px solid rgba(255,255,255,.25);border-radius:999px;padding:4px 14px}.kiosk-result-icon{font-size:3.5rem}.kiosk-result-name{font-size:2rem;font-weight:800;color:#fff;letter-spacing:-.5px}.kiosk-result-time{font-size:2.5rem;font-weight:700;color:#fffffff2;font-variant-numeric:tabular-nums;letter-spacing:.04em}.kiosk-result-status{font-size:.95rem;color:#fffc;text-transform:capitalize;background:#00000026;padding:3px 12px;border-radius:999px}.kiosk-result-error-msg{font-size:1.1rem;font-weight:600;color:#fff;padding:0 1rem}.kiosk-processing{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;background:#0f172ae0;border-radius:10px;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.kiosk-scan-icon{animation:kiosk-scan-pulse 1s ease-in-out infinite;filter:drop-shadow(0 0 8px rgba(13,148,136,.7))}@keyframes kiosk-scan-pulse{0%,to{opacity:.7;transform:scaleX(.92)}50%{opacity:1;transform:scaleX(1.08)}}.kiosk-processing p{color:#6ee7e7;font-size:1rem;font-weight:500;letter-spacing:.04em}.kiosk-status-bar{width:100%;max-width:560px;display:flex;align-items:center;justify-content:space-between;font-size:.8rem;color:#475569;padding:0 .25rem}.kiosk-status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:.4rem}.kiosk-status-dot.green{background:#34d399;box-shadow:0 0 4px #34d39999}.kiosk-status-dot.red{background:#f87171}.kiosk-status-dot.amber{background:#fbbf24;box-shadow:0 0 4px #fbbf2480}.kiosk-hud-bracket{animation:kiosk-bracket-pulse 2.5s ease-in-out infinite}@keyframes kiosk-bracket-pulse{0%,to{opacity:.7}50%{opacity:1}}.kiosk-scan-line{animation:kiosk-scan-sweep 2s ease-in-out infinite;transform-origin:center;filter:drop-shadow(0 0 3px rgba(107,216,203,.8))}@keyframes kiosk-scan-sweep{0%{transform:translateY(0);opacity:.9}48%{opacity:1}50%{transform:translateY(266px);opacity:.9}98%{opacity:1}to{transform:translateY(0);opacity:.9}}.kiosk-countdown{width:100%;max-width:560px;display:flex;align-items:center;gap:.75rem;padding:0 .25rem}.kiosk-countdown-bar{flex:1;height:6px;background:#ffffff14;border-radius:999px;overflow:hidden}.kiosk-countdown-fill{height:100%;transition:width .25s linear;background:#0d9488;border-radius:999px}.kiosk-countdown-label{flex-shrink:0;font-size:.72rem;font-weight:600;letter-spacing:.04em;color:#64748b;font-variant-numeric:tabular-nums;white-space:nowrap}.kiosk-offline-banner{width:100%;max-width:560px;margin-bottom:1rem;background:#d9770624;border:1px solid rgba(217,119,6,.45);border-radius:8px;padding:.625rem 1rem;color:#fcd34d;font-size:.875rem;font-weight:600;display:flex;align-items:center;justify-content:space-between;gap:.75rem}.kiosk-offline-banner button{background:#d97706e6;color:#fff;border:none;border-radius:6px;padding:.375rem .875rem;font-size:.8rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:opacity .15s}.kiosk-offline-banner button:hover{opacity:.85}.kiosk-lock-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#0a1628f7;display:flex;align-items:center;justify-content:center;cursor:pointer}.kiosk-lock-content{text-align:center;color:#fff}.kiosk-lock-icon{font-size:3rem;margin-bottom:1rem}.kiosk-lock-text{font-size:1.5rem;font-weight:600;opacity:.8;letter-spacing:.05em}@media (max-width: 768px){.kiosk-page{padding:1rem .75rem}.kiosk-header{flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem}.kiosk-brand{font-size:1.15rem}.kiosk-brand-icon{width:18px;height:18px}.kiosk-clock{text-align:right;flex:unset}.kiosk-clock-time{font-size:1.1rem;letter-spacing:.02em}.kiosk-clock-date{font-size:.65rem;display:none}.kiosk-camera-area{max-width:100%}.kiosk-camera-wrapper{border-radius:8px;aspect-ratio:3 / 4}.kiosk-status-bar{flex-direction:column;align-items:flex-start;gap:4px;font-size:.7rem;padding:0 .5rem}.kiosk-countdown-label{display:none}.kiosk-countdown{max-width:100%;padding:0 .5rem}.kiosk-setup-panel,.kiosk-no-token-warning,.kiosk-offline-banner{max-width:100%}.kiosk-result-name{font-size:1.35rem}.kiosk-result-time{font-size:1.75rem}.kiosk-result-type-badge{font-size:.7rem}.kiosk-result-error-msg{font-size:.95rem}.kiosk-result-overlay{padding:1rem}.kiosk-scan-icon{width:28px;height:28px}.kiosk-processing p{font-size:.85rem}.kiosk-token-row{flex-direction:column}.kiosk-token-save-btn{text-align:center}}
