:root{--bg-page: #030303;--bg-elev-1: #111111;--bg-elev-2: #1a1a1a;--bg-elev-3: #1d1d1d;--brand-blue: #45b1e5;--brand-blue-hov: #3993c0;--brand-pink: #ee4097;--brand-pink-hov: #eb2676;--brand-purple: #1b1753;--ok: #2ecc71;--ok-soft: rgba(46, 204, 113, .14);--warn: #f5a623;--warn-soft: rgba(245, 166, 35, .14);--danger: #ff5470;--danger-soft: rgba(255, 84, 112, .14);--text-primary: #ffffff;--text-muted: #cccccc;--text-dim: #aaaaaa;--text-faint: #777777;--border-soft: #333333;--border-card: rgba(255, 255, 255, .2);--gradient-title: linear-gradient(135deg, #45b1e5, #ee4097);--radius-card: 20px;--radius-btn: 12px;--t-fast: .2s ease;--t-base: .3s ease}@font-face{font-family:Montserrat;src:url(/fonts/Montserrat-Regular.otf) format("opentype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Montserrat;src:url(/fonts/Montserrat-Light.otf) format("opentype");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Montserrat;src:url(/fonts/Montserrat-Bold.otf) format("opentype");font-weight:700;font-style:normal;font-display:swap}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;min-height:100%;width:100%;max-width:100%;overflow-x:hidden}body{background:radial-gradient(1200px 600px at 50% -10%,rgba(69,177,229,.12),transparent 60%),var(--bg-page);color:var(--text-primary);font-family:Montserrat,system-ui,-apple-system,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}button{font-family:inherit}.gradient-text{background:var(--gradient-title);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.app-shell{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.app-main{flex:1;width:100%;max-width:640px;margin:0 auto;padding:18px 16px calc(28px + env(safe-area-inset-bottom))}.app-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:12px;padding:12px 16px;padding-top:calc(12px + env(safe-area-inset-top));background:#030303d1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border-soft)}.app-header img.logo{height:34px;width:auto}.app-header .logo-fallback{font-weight:800;letter-spacing:.04em;font-size:1.05rem}.app-header .header-event{margin-left:auto;text-align:right;min-width:0}.app-header .header-event .label{display:block;font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint)}.app-header .header-event .value{display:block;font-size:.9rem;font-weight:700;color:var(--brand-blue);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46vw}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;border:1px solid var(--border-soft);background:var(--bg-elev-2);color:var(--text-primary);cursor:pointer;transition:background var(--t-fast),border-color var(--t-fast);flex-shrink:0}.icon-btn:hover{background:var(--bg-elev-3);border-color:var(--brand-blue)}.card{background:linear-gradient(135deg,#161616,#232323);border:1px solid var(--border-soft);border-radius:var(--radius-card);padding:1.5rem;box-shadow:0 20px 50px #0006}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:14px 18px;border-radius:var(--radius-btn);border:none;font-weight:700;font-size:1rem;cursor:pointer;transition:filter var(--t-fast),transform var(--t-fast),background var(--t-fast)}.btn-primary{background:linear-gradient(135deg,var(--brand-blue),var(--brand-blue-hov));color:#fff;box-shadow:0 10px 24px #45b1e547}.btn-primary:hover:not(:disabled){filter:brightness(1.07)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{background:var(--bg-elev-2);color:var(--text-primary);border:1px solid var(--border-soft)}.btn-ghost:hover{border-color:var(--brand-blue)}.login-wrap{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 18px calc(24px + env(safe-area-inset-bottom));gap:18px}.login-brand{text-align:center;margin-bottom:4px}.login-brand img{height:52px;margin-bottom:12px}.login-brand h1{font-size:1.5rem;margin:0 0 4px;font-weight:800}.login-brand p{margin:0;color:var(--text-muted);font-size:.92rem}.login-card{width:100%;max-width:400px}.field{margin-bottom:1rem}.field label{display:block;font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--brand-blue);margin-bottom:6px}.field input{width:100%;padding:14px;border-radius:10px;border:1.5px solid var(--border-soft);background:#0c0c0c;color:#fff;font-size:16px;outline:none;transition:border-color var(--t-fast),box-shadow var(--t-fast)}.field input:focus{border-color:var(--brand-blue);box-shadow:0 0 0 3px #45b1e529}.form-error{background:var(--danger-soft);border:1px solid var(--danger);color:#ffb3c0;padding:10px 14px;border-radius:10px;font-size:.9rem;margin-bottom:1rem}.section-title{font-size:1.25rem;font-weight:800;margin:0 0 4px}.section-sub{color:var(--text-muted);margin:0 0 18px;font-size:.92rem}.event-list{display:flex;flex-direction:column;gap:12px}.event-row{display:flex;align-items:center;gap:14px;width:100%;text-align:left;padding:14px;border-radius:16px;border:1px solid var(--border-soft);background:linear-gradient(135deg,#161616,#202020);color:#fff;cursor:pointer;transition:border-color var(--t-fast),transform var(--t-fast)}.event-row:hover{border-color:var(--brand-blue);transform:translateY(-1px)}.event-thumb{width:56px;height:56px;border-radius:12px;object-fit:cover;background:#000;flex-shrink:0}.event-row .meta{min-width:0;flex:1}.event-row .meta strong{display:block;font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.event-row .meta span{color:var(--text-muted);font-size:.82rem}.scan-event-banner{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:16px;border:1px solid var(--border-soft);background:linear-gradient(135deg,#161616,#202020);margin-bottom:14px}.scan-event-banner img{width:48px;height:48px;border-radius:10px;object-fit:cover;background:#000;flex-shrink:0}.scan-event-banner .meta{min-width:0}.scan-event-banner .meta strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.scan-event-banner .meta span{font-size:.8rem;color:var(--text-muted)}.scan-event-banner .change{margin-left:auto;background:transparent;border:none;color:var(--brand-blue);font-weight:700;font-size:.82rem;cursor:pointer;flex-shrink:0}.viewport{position:relative;width:100%;aspect-ratio:3 / 4;max-height:60vh;border-radius:20px;overflow:hidden;background:#000;border:1px solid var(--border-soft)}.viewport video{width:100%;height:100%;object-fit:cover;display:block}.viewport .reticle{position:absolute;top:14%;right:14%;bottom:14%;left:14%;border-radius:18px;box-shadow:0 0 0 100vmax #00000059;pointer-events:none}.viewport .reticle:before,.viewport .reticle:after,.viewport .reticle .c1,.viewport .reticle .c2{content:"";position:absolute;width:34px;height:34px;border:3px solid var(--brand-blue)}.viewport .reticle:before{top:-2px;left:-2px;border-right:none;border-bottom:none;border-top-left-radius:14px}.viewport .reticle:after{top:-2px;right:-2px;border-left:none;border-bottom:none;border-top-right-radius:14px}.viewport .reticle .c1{bottom:-2px;left:-2px;border-right:none;border-top:none;border-bottom-left-radius:14px}.viewport .reticle .c2{bottom:-2px;right:-2px;border-left:none;border-top:none;border-bottom-right-radius:14px}.viewport .cam-state{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:24px;color:var(--text-muted)}.scan-hint{text-align:center;color:var(--text-muted);font-size:.88rem;margin:12px 0 4px}.scan-controls{display:flex;gap:10px;margin-top:12px}.scan-controls .btn{width:auto;flex:1;padding:12px 14px;font-size:.92rem}.stats-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.stat{text-align:center;padding:12px 8px;border-radius:14px;border:1px solid var(--border-soft);background:var(--bg-elev-1)}.stat .num{font-size:1.4rem;font-weight:800;line-height:1}.stat .lbl{display:block;margin-top:5px;font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint)}.stat.ok .num{color:var(--ok)}.stat.warn .num{color:var(--warn)}.stat.bad .num{color:var(--danger)}.manual{margin-top:14px;display:flex;gap:8px}.manual input{flex:1;padding:12px;border-radius:10px;border:1.5px solid var(--border-soft);background:#0c0c0c;color:#fff;font-size:16px;outline:none}.manual input:focus{border-color:var(--brand-blue)}.manual button{width:auto;padding:12px 16px}.result-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:flex-end;justify-content:center;background:#0000008c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom));animation:fade .15s ease-out}@keyframes fade{0%{opacity:0}to{opacity:1}}.result-card{width:100%;max-width:460px;border-radius:22px;padding:22px 20px 20px;text-align:center;animation:pop .22s cubic-bezier(.22,1.2,.36,1);border:1px solid var(--border-soft);background:linear-gradient(135deg,#161616,#232323)}@keyframes pop{0%{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.result-badge{width:76px;height:76px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 14px}.result-card.admitted{border-color:#2ecc7180}.result-card.admitted .result-badge{background:var(--ok-soft);color:var(--ok)}.result-card.warn{border-color:#f5a62380}.result-card.warn .result-badge{background:var(--warn-soft);color:var(--warn)}.result-card.bad{border-color:#ff547080}.result-card.bad .result-badge{background:var(--danger-soft);color:var(--danger)}.result-title{font-size:1.5rem;font-weight:800;margin:0 0 4px}.result-sub{color:var(--text-muted);margin:0 0 16px;font-size:.95rem}.result-detail{text-align:left;background:#ffffff0a;border:1px solid var(--border-soft);border-radius:14px;padding:12px 14px;margin-bottom:16px}.result-detail .line{display:flex;justify-content:space-between;gap:12px;padding:4px 0;font-size:.92rem}.result-detail .line span:first-child{color:var(--text-faint)}.result-detail .line span:last-child{font-weight:600;text-align:right;overflow-wrap:anywhere}.spinner{width:38px;height:38px;border:4px solid var(--border-soft);border-top-color:var(--brand-blue);border-radius:50%;animation:spin .9s linear infinite}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.center-state{text-align:center;padding:3rem 1rem;display:flex;flex-direction:column;align-items:center;gap:14px}
