:root{color-scheme:dark;--bg:#0d1117;--panel:#151b23;--panel-2:#1b232d;--panel-3:#222c38;--line:#2b3643;--text:#eef2f6;--muted:#8995a4;--accent:#e88919;--accent-2:#ffad3d;--accent-soft:#e8891920;--cyan:#36b7c9;--green:#31c48d;--red:#ef5a67;--shadow:0 18px 50px #0006;--radius:14px;--sidebar:248px;--header:64px;--sidebar-bg:linear-gradient(180deg,#191f27,#10151b);--sidebar-line:#ffffff0c;--sidebar-text:#aab4c0;--sidebar-hover:#ffffff0a;--sidebar-heading:#778391;--sidebar-strong:#aeb8c3}
[data-theme=light]{color-scheme:light;--bg:#eef1f4;--panel:#fff;--panel-2:#f7f8fa;--panel-3:#e9edf1;--line:#d6dce3;--text:#17202a;--muted:#647180;--accent:#c65f09;--accent-2:#e67b14;--accent-soft:#c65f0915;--cyan:#087f91;--green:#108a5d;--red:#c73545;--shadow:0 16px 42px #26354618;--sidebar-bg:linear-gradient(180deg,#fff,#f3f5f7);--sidebar-line:#cfd6de;--sidebar-text:#566474;--sidebar-hover:#18212b0a;--sidebar-heading:#718092;--sidebar-strong:#364454}
*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:Inter,Segoe UI,system-ui,sans-serif;font-size:14px}.boot{height:100vh;display:grid;place-content:center;text-align:center;color:var(--muted)}button,input,select,textarea{font:inherit}button{color:inherit}.shell{min-height:100vh}.sidebar{background:linear-gradient(180deg,#191f27,#10151b);border-right:1px solid #ffffff0c;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;top:0;width:var(--sidebar);z-index:30;transition:width .2s,transform .2s}.sidebar.collapsed{width:76px}.brand{align-items:center;display:flex;gap:12px;height:var(--header);padding:10px 16px}.brand-mark{align-items:center;background:linear-gradient(145deg,var(--accent-2),#a53e06);border:1px solid #ffc26d60;border-radius:12px;box-shadow:inset 0 1px #fff5,0 8px 20px #d7611230;color:#17120c;display:flex;font-size:20px;height:40px;justify-content:center;min-width:40px}.brand-mark.small{margin:auto}.brand-name{font-size:18px;font-weight:800;letter-spacing:.02em}.brand-name small{color:var(--muted);display:block;font-size:9px;font-weight:600;letter-spacing:.14em;text-transform:uppercase}.collapsed .brand-name,.collapsed .nav-label,.collapsed .sidebar-footer .meta{display:none}.sidebar nav{display:flex;flex:1;flex-direction:column;gap:3px;overflow-y:auto;padding:10px}.nav-section{color:#647180;font-size:9px;font-weight:800;letter-spacing:.16em;margin:16px 10px 6px;text-transform:uppercase}.collapsed .nav-section{border-top:1px solid #ffffff12;font-size:0;margin:12px 7px 5px}.nav-link{align-items:center;border-radius:9px;color:#aab4c0;display:flex;gap:12px;min-height:42px;padding:0 12px;text-decoration:none;white-space:nowrap}.nav-link i{font-size:15px;text-align:center;width:20px}.nav-link:hover{background:#ffffff0a;color:#fff}.nav-link.active{background:linear-gradient(90deg,var(--accent-soft),transparent);box-shadow:inset 3px 0 var(--accent);color:var(--accent-2)}.sidebar-footer{border-top:1px solid #ffffff0c;padding:12px}.version{color:#778391;font-size:10px;line-height:1.5}.version strong{color:#aeb8c3}.main{margin-left:var(--sidebar);min-height:100vh;transition:margin .2s}.sidebar.collapsed~.main{margin-left:76px}.topbar{align-items:center;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(18px);border-bottom:1px solid var(--line);display:flex;height:var(--header);left:var(--sidebar);padding:0 22px;position:fixed;right:0;top:0;z-index:20;transition:left .2s}.sidebar.collapsed~.main .topbar{left:76px}.icon-btn,.btn{align-items:center;border:1px solid var(--line);border-radius:9px;cursor:pointer;display:inline-flex;gap:8px;justify-content:center;min-height:38px;padding:0 13px}.icon-btn{background:transparent;min-width:38px;padding:0}.icon-btn:hover,.btn.secondary:hover{background:var(--panel-3)}.search-trigger{background:var(--panel);color:var(--muted);justify-content:flex-start;margin-left:14px;max-width:520px;width:min(42vw,520px)}.search-trigger kbd{background:var(--panel-3);border:1px solid var(--line);border-radius:5px;font-size:10px;margin-left:auto;padding:2px 6px}.top-actions{align-items:center;display:flex;gap:8px;margin-left:auto}.avatar{align-items:center;background:var(--accent-soft);border-radius:50%;color:var(--accent);display:flex;font-size:12px;font-weight:800;height:34px;justify-content:center;width:34px}.content{padding:calc(var(--header) + 24px) 24px 28px;max-width:1680px;margin:auto}.page-head{align-items:flex-start;display:flex;gap:20px;justify-content:space-between;margin-bottom:22px}.eyebrow{color:var(--accent);font-size:10px;font-weight:800;letter-spacing:.16em;text-transform:uppercase}.page-head h1{font-size:27px;letter-spacing:-.04em;margin:3px 0 4px}.page-head p{color:var(--muted);margin:0}.head-actions{display:flex;gap:8px}.btn{background:var(--panel);font-weight:700}.btn.primary{background:linear-gradient(135deg,var(--accent-2),var(--accent));border-color:#ffba5b;color:#1e1309;box-shadow:0 7px 22px #df741e30}.btn.danger{border-color:#ef5a6740;color:var(--red)}.btn.small{font-size:12px;min-height:31px;padding:0 10px}.grid{display:grid;gap:14px}.metrics{grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:14px}.metric,.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 0 #fff1}.metric{overflow:hidden;padding:18px;position:relative}.metric:after{background:radial-gradient(circle,var(--accent-soft),transparent 70%);content:"";height:100px;position:absolute;right:-25px;top:-35px;width:100px}.metric-icon{align-items:center;background:var(--panel-3);border:1px solid var(--line);border-radius:10px;color:var(--accent);display:flex;height:38px;justify-content:center;width:38px}.metric strong{display:block;font-size:27px;letter-spacing:-.04em;margin-top:16px}.metric span{color:var(--muted);font-size:12px}.dashboard-grid{grid-template-columns:1.15fr .85fr}.card{min-width:0}.card-head{align-items:center;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;padding:15px 17px}.card-head h2{font-size:14px;margin:0}.card-body{padding:16px}.quick-grid{display:grid;gap:10px;grid-template-columns:repeat(2,1fr)}.quick{align-items:flex-start;background:var(--panel-2);border:1px solid var(--line);border-radius:11px;color:var(--text);cursor:pointer;display:flex;flex-direction:column;gap:11px;min-height:100px;padding:15px;text-decoration:none}.quick:hover{border-color:var(--accent);transform:translateY(-1px)}.quick i{color:var(--accent);font-size:19px}.quick span{color:var(--muted);font-size:11px}.toolbar{align-items:center;display:flex;gap:8px;margin-bottom:13px}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field.grow{flex:1}.field label{font-size:11px;font-weight:800}.control,.field input,.field select,.field textarea{background:var(--panel-2);border:1px solid var(--line);border-radius:8px;color:var(--text);min-height:39px;outline:none;padding:8px 11px;width:100%}.field textarea{min-height:78px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.help{color:var(--muted);font-size:10px;line-height:1.35}.help a{color:var(--accent)}.form-grid{display:grid;gap:13px;grid-template-columns:repeat(12,1fr)}.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-6{grid-column:span 6}.span-4{grid-column:span 4}.span-3{grid-column:span 3}.table-wrap{overflow:auto}.data-table{border-collapse:separate;border-spacing:0;width:100%}.data-table th{background:var(--panel-2);color:var(--muted);font-size:10px;letter-spacing:.08em;padding:10px 13px;text-align:left;text-transform:uppercase;white-space:nowrap}.data-table td{border-top:1px solid var(--line);max-width:260px;padding:11px 13px;white-space:nowrap}.data-table tbody tr:hover td{background:var(--accent-soft)}.truncate{display:block;max-width:230px;overflow:hidden;text-overflow:ellipsis}.actions-col{position:sticky!important;right:0}.data-table th.actions-col{z-index:2}.data-table td.actions-col{background:var(--panel);box-shadow:-8px 0 15px #0002}.chip{align-items:center;background:var(--panel-3);border:1px solid var(--line);border-radius:999px;display:inline-flex;font-size:10px;font-weight:700;gap:6px;padding:4px 8px}.dot{background:var(--chip,#64748b);border-radius:50%;height:7px;width:7px}.empty{color:var(--muted);padding:50px 20px;text-align:center}.empty i{display:block;font-size:30px;margin-bottom:10px}.modal-backdrop{align-items:center;background:#05080cb8;display:flex;inset:0;justify-content:center;padding:18px;position:fixed;z-index:100}.modal{background:var(--panel);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);max-height:92vh;max-width:780px;overflow:auto;width:100%}.modal-head,.modal-foot{align-items:center;display:flex;justify-content:space-between;padding:16px 18px}.modal-head{border-bottom:1px solid var(--line)}.modal-head h2{font-size:17px;margin:0}.modal-body{padding:18px}.modal-foot{border-top:1px solid var(--line);gap:8px;justify-content:flex-end}.search-modal{align-self:flex-start;margin-top:7vh;max-width:690px}.search-input-wrap{align-items:center;display:flex;padding:10px 15px}.search-input-wrap i{color:var(--accent);font-size:18px}.search-input-wrap input{background:transparent;border:0;color:var(--text);font-size:17px;outline:none;padding:12px;width:100%}.search-results{border-top:1px solid var(--line);max-height:50vh;overflow:auto;padding:8px}.search-result{align-items:center;border-radius:9px;color:var(--text);cursor:pointer;display:flex;gap:12px;padding:11px}.search-result:hover{background:var(--panel-3)}.search-result small{color:var(--muted);display:block}.toasts{bottom:20px;display:flex;flex-direction:column;gap:8px;position:fixed;right:20px;z-index:200}.toast{background:var(--panel-3);border:1px solid var(--line);border-left:3px solid var(--green);border-radius:9px;box-shadow:var(--shadow);max-width:360px;padding:12px 15px}.toast.error{border-left-color:var(--red)}.photo-drop{border:1px dashed var(--line);border-radius:11px;padding:12px}.photo-actions{display:flex;gap:8px;flex-wrap:wrap}.photo-preview{display:flex;gap:8px;margin-top:10px;overflow:auto}.photo-thumb{border-radius:8px;height:82px;overflow:hidden;position:relative;min-width:82px}.photo-thumb img{height:100%;object-fit:cover;width:100%}.photo-thumb button{background:#111d;border:0;border-radius:50%;color:#fff;height:24px;position:absolute;right:4px;top:4px;width:24px}.repeat-list{display:flex;flex-direction:column;gap:7px}.repeat-row{display:flex;gap:7px}.repeat-row button{min-width:39px}.scanner video{background:#000;border-radius:12px;max-height:55vh;width:100%}.login{background:radial-gradient(circle at 20% 15%,#df741e24,transparent 34%),var(--bg);display:grid;min-height:100vh;place-content:center;padding:24px}.login-card{background:var(--panel);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow);max-width:430px;padding:38px;text-align:center}.login-card .brand-mark{height:58px;margin:auto;width:58px}.login-card h1{font-size:31px;margin:18px 0 5px}.login-card p{color:var(--muted);line-height:1.6}.login-card .btn{margin-top:16px;width:100%}.mobile-only{display:none}
@media(max-width:1050px){.metrics{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.span-3{grid-column:span 6}}
@media(max-width:760px){:root{--header:58px}.sidebar{transform:translateX(-100%);width:260px!important}.sidebar.mobile-open{box-shadow:var(--shadow);transform:none}.sidebar.collapsed{width:260px}.sidebar.collapsed .brand-name,.sidebar.collapsed .nav-label,.sidebar.collapsed .sidebar-footer .meta{display:block}.main,.sidebar.collapsed~.main{margin-left:0}.topbar,.sidebar.collapsed~.main .topbar{left:0;padding:0 12px}.mobile-only{display:inline-flex}.desktop-menu{display:none}.search-trigger{width:auto;flex:1}.search-trigger span,.search-trigger kbd{display:none}.content{padding:calc(var(--header) + 17px) 12px 20px}.page-head{align-items:stretch;flex-direction:column}.head-actions .btn{flex:1}.metrics{grid-template-columns:repeat(2,1fr);gap:9px}.metric{padding:14px}.metric strong{font-size:22px;margin-top:11px}.form-grid{grid-template-columns:1fr}.span-12,.span-8,.span-6,.span-4,.span-3{grid-column:1}.modal-backdrop{padding:0}.modal{border-radius:16px 16px 0 0;bottom:0;max-height:94vh;position:absolute}.data-table thead{display:none}.data-table,.data-table tbody{display:block}.data-table tr{background:var(--panel-2);border:1px solid var(--line);border-radius:11px;display:grid;margin:9px;padding:11px}.data-table td{align-items:center;border:0;display:flex;justify-content:space-between;max-width:none;padding:5px;white-space:normal}.data-table td:before{color:var(--muted);content:attr(data-label);font-size:10px;font-weight:800;text-transform:uppercase}.actions-col{background:transparent!important;box-shadow:none!important;position:static!important}.truncate{max-width:60%;text-align:right}.quick-grid{grid-template-columns:1fr 1fr}.toasts{bottom:10px;left:10px;right:10px}.toast{max-width:none}}
.truncate:focus,.truncate:hover{max-width:none;overflow:visible;text-overflow:clip;white-space:normal}
.login-error{align-items:flex-start;background:#ef5a6714;border:1px solid #ef5a6745;border-radius:10px;color:var(--red);display:flex;gap:10px;margin:16px 0 2px;padding:11px;text-align:left}.login-error small{color:var(--muted);display:block;margin-top:3px;word-break:break-all}
.sidebar{background:var(--sidebar-bg);border-right-color:var(--sidebar-line)}.nav-link{color:var(--sidebar-text)}.nav-link:hover{background:var(--sidebar-hover);color:var(--text)}.sidebar-footer{border-top-color:var(--sidebar-line)}.version{color:var(--sidebar-heading)}.version strong{color:var(--sidebar-strong)}
.nav-group{display:flex;flex-direction:column}.nav-section{align-items:center;background:transparent;border:0;color:var(--sidebar-heading);cursor:pointer;display:flex;justify-content:space-between;padding:0;text-align:left;width:calc(100% - 20px)}.nav-section i{font-size:9px;transition:transform .18s}.nav-group.closed .nav-section i{transform:rotate(-90deg)}.nav-group.closed .nav-group-links{display:none}.nav-group-links{display:flex;flex-direction:column;gap:3px}.collapsed .nav-section i{display:none}
.sidebar-resizer{bottom:0;cursor:col-resize;position:absolute;right:-4px;top:0;width:8px;z-index:2}.sidebar-resizer:focus,.sidebar-resizer:hover{background:linear-gradient(90deg,transparent,var(--accent),transparent);outline:0}.sidebar.collapsed .sidebar-resizer{display:none}.shell.resizing,.shell.resizing *{cursor:col-resize!important;transition:none!important;user-select:none!important}
.switch-control{align-items:center;cursor:pointer;display:inline-flex;gap:10px;min-height:39px;width:max-content}.switch-control input{height:1px!important;margin:0;min-height:0!important;opacity:0;padding:0!important;position:absolute;width:1px!important}.switch-track{background:var(--panel-3);border:1px solid var(--line);border-radius:999px;height:26px;position:relative;transition:.2s;width:48px}.switch-track:after{background:var(--muted);border-radius:50%;box-shadow:0 2px 5px #0003;content:"";height:18px;left:3px;position:absolute;top:3px;transition:.2s;width:18px}.switch-control input:checked+.switch-track{background:var(--accent-soft);border-color:var(--accent)}.switch-control input:checked+.switch-track:after{background:var(--accent);transform:translateX(22px)}.switch-control input:focus-visible+.switch-track{box-shadow:0 0 0 3px var(--accent-soft)}.switch-state{color:var(--muted);font-size:11px;font-weight:700}.status-color{align-items:center;display:inline-flex;gap:8px}.status-swatch{background:var(--status-color,#64748b);border:1px solid color-mix(in srgb,var(--status-color,#64748b) 70%,var(--line));border-radius:6px;box-shadow:inset 0 0 0 1px #fff3;height:20px;width:28px}
@media(max-width:760px){.sidebar-resizer{display:none}.nav-section{width:calc(100% - 20px)}.collapsed .nav-section i{display:block}}
.form-contents{display:contents}[hidden]{display:none!important}@media(min-width:761px){.sidebar.collapsed .nav-group-links{display:flex}}
.scanner-backdrop{padding:14px}.scanner-modal{max-width:1080px;overflow:hidden}.scanner-modal .modal-head small{color:var(--muted);display:block;font-size:10px;margin-top:3px}.scanner-body{padding:18px}.scanner-stage{aspect-ratio:16/9;background:#020406;border:1px solid var(--line);border-radius:14px;isolation:isolate;overflow:hidden;position:relative;width:100%}.scanner-stage video{height:100%;inset:0;max-height:none;object-fit:contain;position:absolute;transition:filter .18s,transform .18s;width:100%}.scanner-overlay{inset:0;overflow:hidden;pointer-events:none;position:absolute;z-index:2}.scanner-overlay>svg{filter:drop-shadow(0 0 7px #31c48dcc);inset:0;position:absolute!important;transform:scale(var(--scanner-digital-zoom,1));transform-origin:center}.scanner-overlay>svg polygon{fill:#31c48d24!important;stroke:#55f0b5!important;stroke-width:5!important}.scanner-guide{aspect-ratio:1;left:50%;max-height:64%;max-width:64%;position:absolute;top:50%;transform:translate(-50%,-50%);width:400px}.scanner-guide:before{background:#0003;border-radius:12px;box-shadow:0 0 0 200vmax #0004;content:"";inset:0;position:absolute}.scanner-guide i{height:28px;position:absolute;width:28px}.scanner-guide i:nth-child(1){border-left:3px solid #fff;border-top:3px solid #fff;left:0;top:0}.scanner-guide i:nth-child(2){border-right:3px solid #fff;border-top:3px solid #fff;right:0;top:0}.scanner-guide i:nth-child(3){border-bottom:3px solid #fff;border-left:3px solid #fff;bottom:0;left:0}.scanner-guide i:nth-child(4){border-bottom:3px solid #fff;border-right:3px solid #fff;bottom:0;right:0}.scanner-sweep{animation:scanner-sweep 2.1s ease-in-out infinite;background:linear-gradient(90deg,transparent,#ffb24a,#fff3,#ffb24a,transparent);box-shadow:0 0 12px #e8891999;height:2px;left:5%;position:absolute;right:5%;top:8%}@keyframes scanner-sweep{0%,100%{opacity:.35;transform:translateY(0)}50%{opacity:1;transform:translateY(calc(min(64vw,400px) - 45px))}}.scanner-status{align-items:center;background:#080d12bf;border:1px solid #ffffff24;border-radius:999px;color:#eef2f6;display:flex;font-size:11px;gap:7px;left:12px;max-width:calc(100% - 24px);padding:7px 10px;position:absolute;top:12px;z-index:4}.scanner-status.error{border-color:#ef5a6788;color:#ff9ba5}.scanner-status.success{background:#0a2b20e8;border-color:#31c48d;color:#8fffd5}.scanner-controls{align-items:center;background:#080d12d9;border:1px solid #ffffff24;border-radius:12px;bottom:12px;color:#eef2f6;display:flex;gap:7px;left:50%;max-width:calc(100% - 24px);padding:7px;position:absolute;transform:translateX(-50%);z-index:4}.scanner-control{align-items:center;background:#ffffff0d;border:1px solid #ffffff20;border-radius:8px;color:#eef2f6;cursor:pointer;display:flex;gap:6px;height:38px;padding:0 11px;white-space:nowrap}.scanner-control:hover,.scanner-control.active{background:#e8891933;border-color:#e88919;color:#ffb24a}.scanner-control:disabled{cursor:not-allowed;opacity:.4}.scanner-control.busy i{animation:spin .8s linear infinite}.scanner-zoom{align-items:center;display:flex!important;gap:7px;padding:0 5px;white-space:nowrap}.scanner-zoom input{accent-color:var(--accent);height:auto!important;min-height:0!important;padding:0!important;width:clamp(90px,18vw,190px)!important}.scanner-zoom output{color:#ffb24a;font-size:10px;font-variant-numeric:tabular-nums;min-width:30px}.scanner-help{color:var(--muted);font-size:11px;margin:11px 0}.scanner-help i{color:var(--accent);margin-right:5px}.scanner-manual{display:flex;gap:9px}.scanner-manual .btn{flex:0 0 auto}.scanner-stage.scan-success{animation:scanner-confirm .32s ease-out}.scanner-stage.scan-success .scanner-guide i{border-color:var(--green)}.scanner-stage.scan-success .scanner-sweep{animation:none;background:var(--green);top:50%}@keyframes scanner-confirm{50%{box-shadow:0 0 0 3px var(--green),0 0 45px #31c48d55}}
@media(max-width:760px){.scanner-backdrop{padding:0}.scanner-modal{border-radius:0;inset:0;max-height:none;position:fixed}.scanner-modal .modal-head{height:64px}.scanner-body{display:flex;flex-direction:column;height:calc(100svh - 64px);padding:10px}.scanner-stage{aspect-ratio:auto;flex:1;min-height:0}.scanner-guide{max-height:58%;max-width:72%;width:min(72vw,360px)}.scanner-controls{bottom:9px}.scanner-control span{display:none}.scanner-control{justify-content:center;padding:0;width:40px}.scanner-zoom input{width:min(34vw,170px)!important}.scanner-help{margin:8px 2px}.scanner-manual{gap:6px}.scanner-manual .btn{padding:0 12px}.scanner-manual .btn i{display:none}}
@keyframes scanner-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.scanner-sweep{animation:none;top:50%}.scanner-stage.scan-success{animation:none}}
