:root{--brand:#3333b2;--brand-d:#25258a;--brand-l:#eeeefb;--brand-m:#c9c9f0;--ink:#1b1d2a;--ink2:#4a4f63;--mute:#8a8fa3;--line:#e3e5ee;--bg:#f6f7fb;--card:#fff;--ok:#1f9d57;--ok-l:#e3f5ea;--warn:#b86e00;--warn-l:#fff3dc;--bad:#c9353b;--bad-l:#fce7e8;--radius:14px;--shadow:0 1px 2px #14143c0d, 0 6px 20px #14143c0f;--ease-out:cubic-bezier(.23, 1, .32, 1);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--bg);font-size:15px;line-height:1.45}button{font:inherit;cursor:pointer;touch-action:manipulation}input,select,textarea{font:inherit;font-size:16px}h1,h2,h3{margin:0;line-height:1.2}p{margin:0}.sub{color:var(--ink2);font-size:13px}.lbl{color:var(--mute);text-transform:uppercase;letter-spacing:.06em;font-size:12px;font-weight:600}.hint{color:var(--mute);font-size:12.5px}.tnum{font-variant-numeric:tabular-nums}.stack{flex-direction:column;gap:12px;display:flex}.row{align-items:center;gap:10px;display:flex}.spread{justify-content:space-between;align-items:center;gap:10px;display:flex}.btn{height:46px;color:var(--ink);white-space:nowrap;transition:transform .12s var(--ease-out), background-color .15s, border-color .15s, opacity .15s;background:#fff;border:1.5px solid #0000;border-radius:12px;justify-content:center;align-items:center;gap:8px;padding:0 18px;font-size:15px;font-weight:600;display:inline-flex}.btn:active:not(:disabled){transform:scale(.97)}.btn:disabled{opacity:.55;cursor:default}.btn.primary{background:var(--brand);color:#fff}.btn.primary:hover:not(:disabled){background:var(--brand-d)}.btn.ghost{color:var(--brand);border-color:var(--brand-m);background:0 0}.btn.ghost:hover:not(:disabled){background:var(--brand-l)}.btn.danger{color:var(--bad);background:0 0;border-color:#f1c2c4}.btn.danger:hover:not(:disabled){background:var(--bad-l)}.btn.ok{background:var(--ok);color:#fff}.btn.sm{border-radius:9px;height:36px;padding:0 13px;font-size:14px}.btn.block{width:100%}.link{color:var(--brand);background:0 0;border:none;padding:4px 0;font-weight:600}.pill{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;font-weight:600;display:inline-flex}.pill.ok{background:var(--ok-l);color:var(--ok)}.pill.warn{background:var(--warn-l);color:var(--warn)}.pill.bad{background:var(--bad-l);color:var(--bad)}.pill.brand{background:var(--brand-l);color:var(--brand)}.pill.mute{color:var(--ink2);background:#eef0f5}.dot{background:currentColor;border-radius:50%;width:8px;height:8px;display:inline-block}.pulse{animation:1.6s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.35}}.alert{border-radius:10px;padding:10px 12px;font-size:14px}.alert.bad{background:var(--bad-l);color:var(--bad)}.alert.warn{background:var(--warn-l);color:var(--warn)}.alert.ok{background:var(--ok-l);color:var(--ok)}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px}.field{color:var(--ink2);flex-direction:column;gap:6px;font-size:13px;font-weight:600;display:flex}.field input,.field textarea,.field select{border:1.5px solid var(--line);height:46px;color:var(--ink);background:#fff;border-radius:11px;outline:none;padding:0 13px;font-weight:400;transition:border-color .15s}.field textarea{resize:vertical;height:auto;min-height:80px;padding:10px 13px}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--brand)}.signin{justify-content:center;align-items:center;min-height:100dvh;padding:24px 16px;display:flex}.signin-card{flex-direction:column;gap:22px;width:100%;max-width:400px;display:flex}.brand-row{align-items:center;gap:12px;display:flex}.brand-name{letter-spacing:-.01em;font-size:22px;font-weight:750}.logo{background:var(--brand);border-radius:12px;place-items:center;width:44px;height:44px;display:grid;box-shadow:0 6px 14px #3333b24d}.logo span{border:3px solid #fff;border-radius:5px;width:20px;height:20px;position:relative}.logo span:after{content:"";background:#fff;border-radius:1px;position:absolute;inset:4px}.demo{border-top:1px solid var(--line);flex-direction:column;gap:10px;padding-top:18px;display:flex}.demo-list{flex-direction:column;gap:6px;display:flex}.demo-item{border:1px solid var(--line);text-align:left;transition:border-color .15s, transform .12s var(--ease-out);background:#fff;border-radius:11px;justify-content:space-between;align-items:center;gap:10px;padding:11px 14px;display:flex}.demo-item:hover{border-color:var(--brand-m)}.demo-item:active{transform:scale(.98)}.demo-who{text-align:left;flex-direction:column;align-items:flex-start;gap:1px;min-width:0;display:flex}.demo-name{font-weight:600}.demo-groups{color:var(--ink2);font-variant-numeric:tabular-nums;font-size:12.5px}.center-screen{min-height:60dvh;color:var(--mute);place-items:center;display:grid}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.shell{flex-direction:column;min-height:100dvh;display:flex}.shell-main{padding-bottom:calc(84px + env(safe-area-inset-bottom));flex:1}.page{max-width:520px;padding:calc(14px + env(safe-area-inset-top)) 16px 24px;flex-direction:column;gap:14px;margin:0 auto;display:flex}.appbar{justify-content:space-between;align-items:center;min-height:48px;padding:6px 2px 4px;display:flex}.appbar h1{letter-spacing:-.01em;font-size:24px;font-weight:750}.back{color:var(--brand);font-size:16px;font-weight:600;text-decoration:none}.avatar{background:var(--brand-l);width:38px;height:38px;color:var(--brand);border:none;border-radius:50%;font-size:13px;font-weight:700}.tabbar{height:calc(70px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line);z-index:10;background:#fffffff0;justify-content:space-around;align-items:center;display:flex;position:fixed;bottom:0;left:0;right:0}.tab{color:var(--mute);-webkit-user-select:none;user-select:none;flex-direction:column;align-items:center;gap:3px;min-width:72px;font-size:11.5px;font-weight:600;text-decoration:none;display:flex}.tab svg{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:24px;height:24px}.tab.active{color:var(--brand)}.scan-btn{background:var(--brand);width:52px;height:52px;transition:transform .12s var(--ease-out);border-radius:16px;place-items:center;margin-top:-26px;display:grid;box-shadow:0 8px 18px #3333b259}.tab.scan:active .scan-btn{transform:scale(.94)}.scan-btn svg{stroke:#fff;width:26px;height:26px}.lab{flex-direction:column;gap:4px;display:flex}.lab-open{border-color:var(--brand-m);box-shadow:var(--shadow)}.lab-title{margin-top:6px;font-size:22px;font-weight:750}.big-btn{height:54px;font-size:16.5px;text-decoration:none}.btn.ghost{text-decoration:none}.note{background:var(--bg);border-radius:10px;margin-top:12px;padding:10px 12px}.checked{border-radius:12px;align-items:center;gap:12px;margin-top:14px;padding:12px;display:flex}.checked.ok{background:var(--ok-l)}.checked.warn{background:var(--warn-l)}.checked.bad{background:var(--bad-l)}.checked.mute{background:#eef0f5}.checked-icon{color:#fff;border-radius:50%;flex:none;place-items:center;width:34px;height:34px;font-weight:800;display:grid}.checked.ok .checked-icon{background:var(--ok)}.checked.warn .checked-icon{background:var(--warn)}.checked.bad .checked-icon{background:var(--bad)}.checked.mute .checked-icon{background:var(--mute)}.checked-title{font-weight:700}.empty{text-align:center;flex-direction:column;align-items:center;gap:6px;padding:32px 20px;display:flex}.empty-icon{font-size:30px}.skeleton{background:linear-gradient(90deg,#fff 0%,#f1f2f8 50%,#fff 100%) 0 0/200% 100%;animation:1.4s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.scanner{z-index:20;background:#000;position:fixed;inset:0}.scan-video{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.scan-overlay{color:#fff;padding:calc(12px + env(safe-area-inset-top)) 16px calc(24px + env(safe-area-inset-bottom));background:radial-gradient(#0000 34%,#0000008c 70%);flex-direction:column;justify-content:space-between;align-items:center;display:flex;position:absolute;inset:0}.scan-top{justify-content:space-between;align-items:center;width:100%;font-weight:600;display:flex}.scan-close{color:#fff;background:#ffffff2e;border-radius:50%;place-items:center;width:36px;height:36px;font-size:16px;text-decoration:none;display:grid}.viewfinder{aspect-ratio:1;width:min(72vw,300px);transition:transform .2s var(--ease-out);position:relative}.viewfinder.locked{transform:scale(.94)}.viewfinder i{border:4px solid #fff;border-radius:6px;width:46px;height:46px;position:absolute}.viewfinder.locked i{border-color:#6fe3a0}.viewfinder i:first-child{border-bottom:none;border-right:none;top:0;left:0}.viewfinder i:nth-child(2){border-bottom:none;border-left:none;top:0;right:0}.viewfinder i:nth-child(3){border-top:none;border-right:none;bottom:0;left:0}.viewfinder i:nth-child(4){border-top:none;border-left:none;bottom:0;right:0}.scanline{background:#fffc;height:2px;animation:2.2s ease-in-out infinite scanline;position:absolute;left:8%;right:8%;box-shadow:0 0 12px #fffc}@keyframes scanline{0%,to{top:10%}50%{top:88%}}.scan-bottom{text-align:center;max-width:340px}.scan-hint{opacity:.9;font-size:14px}.scan-msg{color:var(--ink);flex-direction:column;gap:10px;max-width:340px;display:flex}.scan-msg .btn{text-decoration:none}.pin-card h2{font-size:22px}.pin-wrap{margin:6px 0;position:relative}.pin-input{opacity:0;width:100%;height:100%;position:absolute;inset:0}.pin-boxes{grid-template-columns:repeat(6,1fr);gap:8px;display:grid}.pin-boxes span{border:1.5px solid var(--line);font-variant-numeric:tabular-nums;background:#fff;border-radius:12px;place-items:center;height:58px;font-size:26px;font-weight:700;display:grid}.pin-boxes span.cur{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-l)}.result{text-align:center;padding-top:calc(48px + env(safe-area-inset-top));align-items:center}.result h1{font-size:26px;font-weight:750}.result-text{max-width:320px;font-size:15px}.result-icon{color:#fff;width:84px;height:84px;animation:pop .38s var(--ease-out);border-radius:50%;place-items:center;font-size:40px;font-weight:800;display:grid}@keyframes pop{0%{opacity:0;transform:scale(.6)}}.result-icon.ok{background:var(--ok);box-shadow:0 0 0 10px var(--ok-l)}.result-icon.warn{background:var(--warn);box-shadow:0 0 0 10px var(--warn-l)}.result-icon.bad{background:var(--bad);box-shadow:0 0 0 10px var(--bad-l)}.result-icon.brand{background:var(--brand-l)}.spinner{border:4px solid var(--brand-m);border-top-color:var(--brand);border-radius:50%;width:34px;height:34px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.result-card{text-align:left;width:100%;margin-top:6px}.result-session{margin-top:4px;font-size:18px;font-weight:700}.kv{border-top:1px solid var(--line);grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0 0;padding-top:12px;display:grid}.kv dt{color:var(--mute);font-size:12px;font-weight:600}.kv dd{margin:2px 0 0;font-weight:650}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:13px}.result-actions{width:100%;margin-top:8px}.result-actions .btn{text-decoration:none}.summary{align-items:center;gap:16px;display:flex}.summary>div:first-child{flex:none}.big{font-size:26px;font-weight:750}.prog{background:#e9ebf3;border-radius:6px;flex:1;height:8px;overflow:hidden}.prog b{background:var(--brand);border-radius:6px;height:100%;display:block}.list{border:1px solid var(--line);border-radius:var(--radius);background:#fff;margin:0;padding:0;list-style:none}.list-row{justify-content:space-between;align-items:center;gap:10px;padding:13px 16px;display:flex}.list-row+.list-row{border-top:1px solid var(--line)}.list-title{font-weight:650}
