:root{font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:#182338;background:#f4f7fb;line-height:1.5;--navy:#07111f;--muted:#718096;--line:#e3e9f1;--accent:#1677ff;--accent2:#08a6a6;--danger:#dc3545;--success:#12a66a;--shadow:0 14px 38px rgba(21,38,68,.08)}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at 80% 0,rgba(22,119,255,.07),transparent 30rem),#f4f7fb}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.topbar{height:76px;padding:0 max(24px,calc((100% - 1240px)/2));display:flex;align-items:center;gap:42px;background:rgba(7,17,31,.97);color:#fff;position:sticky;top:0;z-index:20;box-shadow:0 4px 22px rgba(7,17,31,.16)}.brand{display:flex;align-items:center;gap:11px;color:inherit;text-decoration:none}.brand-mark{width:40px;height:40px;display:grid;place-items:center;border-radius:12px;color:#fff;background:linear-gradient(135deg,var(--accent),var(--accent2));box-shadow:0 8px 18px rgba(22,119,255,.28)}.brand-mark.large{width:58px;height:58px;border-radius:17px}.brand-mark.large svg{width:28px;height:28px}.brand strong,.brand small{display:block;line-height:1.15}.brand strong{font-size:17px}.brand small{font-size:10px;color:#8fa3bc;letter-spacing:1.2px;margin-top:5px}.topbar nav{align-self:stretch;display:flex;gap:4px}.topbar nav button{position:relative;display:flex;align-items:center;gap:8px;padding:0 18px;border:0;background:transparent;color:#91a4bc;font:inherit;cursor:pointer}.topbar nav button:after{content:"";position:absolute;height:3px;left:18px;right:18px;bottom:0;border-radius:3px;background:var(--accent);transform:scaleX(0);transition:.2s}.topbar nav button:hover,.topbar nav button.active{color:#fff}.topbar nav button.active:after{transform:scaleX(1)}.service-state{margin-left:auto;display:flex;align-items:center;gap:8px;color:#94a5ba;font-size:12px}.service-state i,.live-badge i{width:7px;height:7px;border-radius:50%;background:#f2b84b}.service-state.ok i,.live-badge i{background:#35d48b;box-shadow:0 0 0 4px rgba(53,212,139,.12)}.service-state.bad i{background:#ff6b72}.tab{display:none;max-width:1240px;margin:0 auto;padding:46px 24px 70px}.tab.active{display:block;animation:fade .22s ease}@keyframes fade{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}.page-title{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:28px}.page-title h1{margin:2px 0 7px;font-size:32px;line-height:1.2;letter-spacing:-.5px}.page-title>div>p:last-child{margin:0;color:var(--muted);font-size:14px}.eyebrow{margin:0;color:var(--accent);font-size:10px;font-weight:800;letter-spacing:1.5px}.recognize-layout{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(300px,.8fr);gap:22px}.stage-card,.card,.result-card{background:#fff;border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow)}.stage-card{padding:14px}.stage{position:relative;overflow:hidden;aspect-ratio:16/10;border-radius:13px;background:linear-gradient(150deg,#111d2d,#050b13)}.stage video,.stage canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.stage video{transform:scaleX(-1)}.stage canvas{pointer-events:none}.stage-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#d9e2ed}.stage.running .stage-empty{display:none}.stage-empty span{display:grid;place-items:center;width:66px;height:66px;border-radius:50%;background:rgba(255,255,255,.07);margin-bottom:14px}.stage-empty span svg{width:28px;height:28px}.stage-empty small{color:#7f93aa;margin-top:5px}.live-badge{display:none;position:absolute;top:14px;left:14px;align-items:center;gap:7px;padding:6px 10px;border-radius:99px;background:rgba(5,12,21,.72);color:#fff;font-size:10px;letter-spacing:1.2px}.stage.running .live-badge{display:flex}.stage-actions{display:flex;justify-content:center;gap:10px;padding:14px 4px 1px}.btn{border:1px solid transparent;border-radius:10px;padding:11px 17px;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:#fff;color:#182338;font:600 14px inherit;cursor:pointer;transition:.18s}.btn:hover{transform:translateY(-1px)}.btn.primary{background:linear-gradient(135deg,var(--accent),#0965dc);color:#fff;box-shadow:0 7px 16px rgba(22,119,255,.2)}.btn.secondary{border-color:var(--line);background:#fff;color:#475569}.btn.full{width:100%}.btn input{display:none}.result-card{padding:24px;display:flex;flex-direction:column}.card-label{margin:0;color:var(--muted);font-size:12px;font-weight:700;letter-spacing:.8px}.result-state{flex:1;min-height:290px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}.result-icon{width:64px;height:64px;border-radius:50%;display:grid;place-items:center;color:var(--accent);background:#edf5ff;margin-bottom:14px}.result-icon svg{width:29px;height:29px}.result-state h2{margin:0 0 6px;font-size:21px}.result-state p{max-width:245px;margin:0;color:var(--muted);font-size:13px}.result-state small{margin-top:5px;color:var(--muted)}.result-state.success .result-icon{color:var(--success);background:#eaf9f2}.result-state.unknown .result-icon{color:#d18a16;background:#fff6e5}.privacy-note{display:flex;gap:10px;padding:13px;border-radius:11px;background:#f6f8fb;color:var(--muted);font-size:11px}.privacy-note svg{flex:none;width:18px;height:18px;color:var(--accent)}.privacy-note b{display:block;color:#48576b;font-size:12px}.login-shell{max-width:850px;min-height:470px;margin:30px auto;display:grid;grid-template-columns:1fr 1fr;overflow:hidden;background:#fff;border:1px solid var(--line);border-radius:22px;box-shadow:0 24px 65px rgba(21,38,68,.13)}.login-visual{padding:54px 44px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;color:#fff;background:radial-gradient(circle at 20% 10%,rgba(22,119,255,.35),transparent 20rem),linear-gradient(150deg,#101d30,#07111f)}.login-visual .eyebrow{margin-top:28px;color:#61c2ff}.login-visual h1{font-size:30px;margin:8px 0}.login-visual p:last-child{color:#9cafc5;font-size:14px}.login-form{padding:55px 44px;display:flex;flex-direction:column;justify-content:center}.login-form h2{margin:0;font-size:26px}.login-form>p{margin:5px 0 27px;color:var(--muted);font-size:13px}.field{display:block;margin-bottom:16px}.field span{display:block;margin-bottom:7px;color:#475569;font-size:12px;font-weight:700}.field em{color:var(--danger);font-style:normal}.field input,.search input{width:100%;border:1px solid #d7e0eb;border-radius:9px;background:#fbfcfe;color:#182338;padding:11px 12px;font:14px inherit;outline:none}.field input:focus,.search input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(22,119,255,.1);background:#fff}.admin-title{align-items:center}.admin-layout{display:grid;grid-template-columns:360px minmax(0,1fr);gap:22px}.card{padding:24px}.card-head{display:flex;gap:12px;align-items:center;margin-bottom:23px}.card-head h2,.users-head h2{margin:0;font-size:18px}.card-head p,.users-head p{margin:3px 0 0;color:var(--muted);font-size:12px}.head-icon{width:40px;height:40px;display:grid;place-items:center;border-radius:11px;color:var(--accent);background:#edf5ff}.enroll-guide{display:grid;grid-template-columns:auto 1fr 18px auto 1fr 18px auto 1fr;align-items:center;gap:7px;padding:13px 0 19px}.enroll-guide>span{width:25px;height:25px;display:grid;place-items:center;border-radius:50%;background:#edf5ff;color:var(--accent);font-size:10px;font-weight:800}.enroll-guide p{margin:0}.enroll-guide b,.enroll-guide small{display:block;white-space:nowrap}.enroll-guide b{font-size:11px}.enroll-guide small{font-size:9px;color:var(--muted)}.enroll-guide i{height:1px;background:var(--line)}.users-card{min-width:0}.users-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--line)}.search{position:relative;width:230px}.search svg{position:absolute;left:11px;top:10px;width:17px;height:17px;color:#8a9aaf}.search input{padding:9px 11px 9px 35px}.table-head,.user-row{display:grid;grid-template-columns:minmax(170px,1.4fr) minmax(90px,.65fr) minmax(110px,.8fr) 130px;gap:10px;align-items:center}.table-head{padding:13px 12px;color:#92a0b2;background:#f8fafc;font-size:10px;font-weight:800;letter-spacing:.7px}.user-row{padding:15px 12px;border-bottom:1px solid #edf1f6}.identity{display:flex;align-items:center;gap:11px;min-width:0}.avatar{width:38px;height:38px;display:grid;place-items:center;flex:none;border-radius:11px;color:#fff;background:linear-gradient(135deg,#3b82f6,#14b8a6);font-size:13px;font-weight:800}.identity b,.identity small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.identity b{font-size:13px}.identity small,.face-count,.updated{color:var(--muted);font-size:11px}.face-count strong{display:block;color:var(--success);font-size:12px}.row-actions{display:flex;gap:6px}.mini-btn{padding:6px 9px;border:1px solid var(--line);border-radius:7px;background:#fff;color:#4c5c70;font:11px inherit;cursor:pointer}.mini-btn:hover{border-color:var(--accent);color:var(--accent)}.mini-btn.danger{color:var(--danger)}.empty-list,.list-loading{text-align:center;padding:65px 15px;color:var(--muted);font-size:13px}.modal{position:fixed;inset:0;z-index:50;display:none;align-items:center;justify-content:center;padding:20px;background:rgba(4,10,19,.72);backdrop-filter:blur(6px)}.modal.show{display:flex}.modal-card{width:min(520px,100%);max-height:calc(100vh - 40px);overflow:auto;padding:20px;background:#fff;border-radius:20px;box-shadow:0 25px 80px rgba(0,0,0,.28)}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.modal-head h2{margin:2px 0 0;font-size:20px}.icon-btn{width:36px;height:36px;display:grid;place-items:center;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--muted);cursor:pointer}.enroll-stage{aspect-ratio:4/3}.face-guide{position:absolute;inset:12% 23%;border:1px dashed rgba(255,255,255,.42);border-radius:48% 48% 44% 44%;pointer-events:none}.capture-info{padding:12px 2px 6px}.capture-copy{display:flex;align-items:center;gap:10px}.capture-copy>div{flex:1}.capture-copy b,.capture-copy small{display:block}.capture-copy b{font-size:13px}.capture-copy small{color:var(--muted);font-size:11px}.capture-copy>strong{font-size:13px;color:var(--accent)}.capture-pulse{width:10px;height:10px;border-radius:50%;background:var(--success);box-shadow:0 0 0 5px rgba(18,166,106,.1)}.capture-pulse.paused{background:#f0a526}.progress{height:7px;margin:12px 0;background:#edf1f5;border-radius:99px;overflow:hidden}.progress span{display:block;width:0;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),var(--accent2));transition:width .2s}.thumbs{min-height:44px;display:flex;gap:5px;overflow:hidden}.thumbs img{width:39px;height:39px;flex:none;object-fit:cover;border-radius:8px;border:1px solid var(--line)}#toast{position:fixed;left:50%;bottom:25px;z-index:100;max-width:calc(100% - 30px);padding:11px 18px;border-radius:10px;background:#1d2a3c;color:#fff;font-size:13px;box-shadow:0 12px 30px rgba(0,0,0,.2);opacity:0;pointer-events:none;transform:translate(-50%,16px);transition:.2s}#toast.show{opacity:1;transform:translate(-50%,0)}#toast.ok{background:#087a50}#toast.err{background:#b82d3b}[hidden]{display:none!important}@media(max-width:900px){.recognize-layout,.admin-layout{grid-template-columns:1fr}.result-state{min-height:190px}}@media(max-width:680px){.topbar{height:auto;padding:10px 14px;gap:10px}.brand small,.service-state{display:none}.topbar nav{margin-left:auto;height:48px}.topbar nav button{padding:0 10px}.topbar nav button span{display:none}.tab{padding:28px 14px 45px}.page-title{align-items:flex-start}.page-title h1{font-size:25px}.stage{aspect-ratio:4/3}.stage-actions{flex-direction:column}.stage-actions .btn{width:100%}.login-shell{grid-template-columns:1fr;margin:0}.login-visual{display:none}.login-form{padding:38px 25px;min-height:390px}.admin-title{display:block}.admin-title>.btn{margin-top:15px}.card{padding:18px}.users-head{display:block}.search{width:100%;margin-top:13px}.table-head{display:none}.user-row{grid-template-columns:1fr auto}.face-count,.updated{display:none}.enroll-guide{grid-template-columns:auto 1fr auto 1fr auto 1fr}.enroll-guide i,.enroll-guide small{display:none}.modal{padding:10px}.modal-card{max-height:calc(100vh - 20px)}}
