:root{--accent:#a3123c;--accent-dark:#8a0f33;--accent-fg:#fff;--accent-ink:#830f2e;--accent-ink-h:#6e0c27;--accent-ink-page:#7a0c2c;--nav-bg:#262d34;--nav-hover:#313943;--nav-bd:#333b43;--nav-fg:#b8c0c8;--nav-fg-strong:#fff;--page:linear-gradient(160deg,#ece5d4 0%,#e7dfcf 55%,#e2dbcd 100%);--card:#fffdf9;--card-h:#faf8f3;--tint:#fffdf9;--bd:#e6e2da;--bd2:#f0ede6;--bd3:#d9d4ca;--bd-h:#b8b2a6;--bd-input:#8a857b;--ink:#23282e;--ink2:#444138;--ink3:#43403a;--mut:#454138;--thead:#f2ecdd;--theadink:#484034;--focus-ring:#1d232a;--chip:#f4f2ee;--chip2:#e6e1d6;--chip3:#eeeae2;--tblue:#e7eaf7;--tblue2:#c9d0ea;--tblue3:#2b3768;--tamber:#f9eed6;--tamber2:#eadaa8;--tamber3:#5e3504;--tgreen:#e0f1e7;--tgreen2:#b9dfc9;--tgreen3:#0d4530;--tred:#f7e2e2;--tred2:#eec9c9;--tred3:#5d1111;--tlime:#eef3d9;--tlime2:#dde7b3;--tlime3:#33420b;--pink-badge-bg:color-mix(in srgb,var(--accent) 9%,#fffdf9);--pink-badge-ink:var(--accent-dark);--chart-1:var(--accent);--chart-2:#2f5fd6;--chart-3:#1f9d55;--chart-4:#b6540a;--sidebar-bg:#1d232a;--radius-card:12px;--radius-btn:8px;--radius-md:8px;--radius-pill:999px;--shadow-overlay:0 24px 60px rgba(0,0,0,.3);--shadow-card:0 12px 34px rgba(38,45,52,.08);--backdrop:rgba(20,20,20,.35);--line-strong:var(--bd-h);--surface:var(--card-h);--bg:var(--page);--bg2:var(--chip);--control-height:34px;color-scheme:light}:root[data-dark="1"]{--accent-dark:#ad1440;--accent-ink:#ffcfdb;--accent-ink-h:#ffe0e8;--accent-ink-page:var(--accent-ink);--page:linear-gradient(160deg,#1d232a,#1a2026 55%,#171d23);--card:#2a323b;--card-h:#323c46;--tint:#2a323b;--bd:#3a434d;--bd2:#323a43;--bd3:#4a545f;--bd-h:#5a6672;--bd-input:#77828d;--ink:#e9ebee;--ink2:#d7dade;--ink3:#d8dde2;--mut:#d5dbe1;--thead:#232a31;--theadink:#d5dbe1;--chip:#2f3841;--chip2:#3a434d;--chip3:#333c45;--tblue:#2b3450;--tblue2:#2b3450;--tblue3:#bcc7ee;--tamber:#3a3122;--tamber2:#3a3122;--tamber3:#e9bd7e;--tgreen:#22352b;--tgreen2:#22352b;--tgreen3:#90d5af;--tred:#3b2323;--tred2:#3b2323;--tred3:#f0a9a9;--tlime:#313a22;--tlime2:#313a22;--tlime3:#c6dc8c;--pink-badge-bg:color-mix(in srgb,var(--accent) 16%,#2a323b);--pink-badge-ink:var(--accent-ink);--chart-1:#e0546f;--chart-2:#5c86e8;--chart-3:#2fa870;--chart-4:#cf7e2f;--focus-ring:#fff;--shadow-card:0 12px 34px rgba(0,0,0,.45);--backdrop:rgba(0,0,0,.6);color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;padding:0;overscroll-behavior:none}body{font-family:'Inter','Archivo',system-ui,-apple-system,sans-serif;font-feature-settings:'cv11','ss03';-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5;color:var(--ink);background:var(--page);min-height:100vh;min-height:100dvh}.mono{font-family:'IBM Plex Mono',ui-monospace,Consolas,monospace}a{color:var(--accent-ink);text-decoration:underline}a:hover{color:var(--accent-ink-h)}h1,h2,h3,h4{font-weight:800;margin:0}@keyframes fadeUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes slideIn{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:none}}@keyframes pop{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}@keyframes dialogPop{from{opacity:0;transform:translateY(6px) scale(.97)}to{opacity:1;transform:none}}@keyframes skeletonShimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}@keyframes fadeInOnly{from{opacity:0}to{opacity:1}}@media(prefers-reduced-motion:reduce){*{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.brand-mark{display:block;border-radius:22%;flex:none}.card{background:var(--card);border:1px solid var(--bd);border-radius:var(--radius-card);flex-shrink:0}.btn,.btn-primary,.btn-secondary{font-family:inherit;font-weight:600;font-size:13.5px;border-radius:var(--radius-btn);padding:0 16px;border:0;cursor:pointer;transition:filter .15s,border-color .15s,background .15s,transform .1s ease-out;display:inline-flex;align-items:center;justify-content:center;gap:7px;white-space:nowrap;flex:none;text-decoration:none;position:relative;height:var(--control-height);box-sizing:border-box}.btn::before,.btn-primary::before,.btn-secondary::before{content:"";position:absolute;inset:-5px}.btn:disabled,.btn-primary:disabled,.btn-secondary:disabled{cursor:not-allowed;opacity:.6}.btn-primary:disabled,:root[data-dark="1"] .btn-primary:disabled{background:var(--chip2);color:var(--mut);opacity:1;box-shadow:inset 0 0 0 1px var(--bd3)}.btn:active:not(:disabled),.btn-primary:active:not(:disabled),.btn-secondary:active:not(:disabled){transform:scale(.97)}.btn-primary{background:var(--accent);color:var(--accent-fg,#fff)}.btn-primary:hover:not(:disabled){background:var(--accent-dark)}.btn-secondary{background:var(--card);color:var(--ink);padding:0 15px;border:1px solid var(--bd-input,var(--bd3))}.btn-secondary:hover:not(:disabled){border-color:var(--ink3);background:var(--card-h)}.field{width:100%;font-family:inherit;font-size:15px;color:var(--ink);background:var(--tint);border:1.5px solid var(--bd-input);border-radius:10px;padding:12px 14px;min-height:44px}.field::placeholder{color:var(--mut)}.field:focus-visible{border-color:var(--accent)}.file-upload-label{position:relative;overflow:hidden}.file-upload-input{position:absolute;inset:0;width:100%;opacity:0;cursor:pointer}.file-upload-label:has(.file-upload-input:disabled){cursor:not-allowed;opacity:.6}.file-upload-input:disabled{cursor:not-allowed;pointer-events:none}.file-upload-label:focus-within{outline:3px solid var(--focus-ring);outline-offset:2px}.file-upload-label:has(.file-upload-input:focus-visible){outline:3px solid var(--focus-ring);outline-offset:2px}.search-field{position:relative;display:block}.search-field-icon{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--mut);pointer-events:none}.search-field-input{padding-left:38px;padding-top:0;padding-bottom:0;height:var(--control-height);min-height:0;box-sizing:border-box;position:relative;z-index:1}.search-field .search-field-icon{z-index:2}.search-field::before{content:"";position:absolute;inset:-5px 0}.search-field-input::-webkit-search-cancel-button{margin-right:2px}:focus-visible{outline:3px solid var(--focus-ring);outline-offset:2px}.dark-chrome-focus :focus-visible,.toast :focus-visible{outline-color:#fff}.nav-chrome-focus :focus-visible{outline-color:var(--nav-fg-strong,#fff)}.field-error{color:var(--tamber3);font-size:13.5px;margin-top:-6px;margin-bottom:8px}.pill{font-family:'IBM Plex Mono',monospace;font-size:11.5px;font-weight:600;letter-spacing:.8px;text-transform:uppercase;padding:4px 9px;border-radius:var(--radius-pill);background:var(--chip2);color:var(--ink2);display:inline-block;white-space:nowrap}.pill-blue{background:var(--tblue2);color:var(--tblue3)}.pill-amber{background:var(--tamber2);color:var(--tamber3)}.pill-green{background:var(--tgreen2);color:var(--tgreen3)}.pill-red{background:var(--tred2);color:var(--tred3)}.pill-lime{background:var(--tlime2);color:var(--tlime3)}.pill-accent{background:var(--pink-badge-bg);color:var(--pink-badge-ink)}.pill-dark{background:#262d34;color:#fff}.mt-banner{display:flex;align-items:center;gap:8px;background:var(--tamber2);color:var(--tamber3);border:1px solid var(--tamber3);border-radius:10px;padding:10px 14px;font-size:15px;margin-bottom:12px}.mt-banner-icon{flex:none}html[data-test-env="1"]{--test-env-banner-h:32px}.test-env-banner{display:flex;align-items:center;justify-content:center;gap:8px;height:var(--test-env-banner-h,32px);padding:0 14px;background:var(--tamber2);color:var(--tamber3);border-bottom:1px solid var(--tamber3);font-size:13.5px;font-weight:700;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.test-env-banner-icon{flex:none}.test-env-banner-detail{margin-left:-8px}@media(max-width:640px){.test-env-banner-detail{display:none}}.admin-license-banner{display:flex;align-items:center;gap:10px;background:var(--tamber2);color:var(--tamber3);border:1px solid var(--tamber3);border-radius:10px;padding:10px 14px;font-size:15px;margin-bottom:12px}.admin-license-banner .linkbtn{color:var(--tamber3);font-weight:600}.qrdb-map-pin span{display:block;width:14px;height:14px;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4);transition:transform .15s ease}.qrdb-map-pin-active span{transform:scale(1.5);outline:3px solid var(--accent);outline-offset:1px}:root[data-dark="1"] .leaflet-container{background:var(--card)}:root[data-dark="1"] .leaflet-tile{filter:brightness(.7) invert(1) contrast(3) hue-rotate(200deg) saturate(.3) brightness(.7)}.leaflet-container .leaflet-popup-content-wrapper,.leaflet-container .leaflet-popup-tip{background:var(--card);color:var(--ink)}.leaflet-container .leaflet-popup a.leaflet-popup-close-button{color:var(--mut)}.leaflet-container .leaflet-popup a.leaflet-popup-close-button:hover,.leaflet-container .leaflet-popup a.leaflet-popup-close-button:focus-visible{color:var(--ink)}.leaflet-container .leaflet-popup-content{font-size:15px;line-height:1.5;color:var(--ink);margin:11px 15px}.qrdb-map-pin-person{display:inline-block;margin-top:4px;font-weight:600}.qrdb-map-pin-date{display:inline-block;margin-top:4px;color:var(--mut);font-size:12.5px}.qrdb-map-pin-accuracy{display:inline-block;margin-top:4px;color:var(--mut);font-size:12.5px}.qrdb-map-legend{background:var(--card);border:1px solid var(--bd);border-radius:8px;padding:7px 12px;font-size:12.5px;color:var(--ink2);display:flex;gap:10px;box-shadow:0 3px 10px rgba(38,45,52,.12)}.qrdb-map-legend span{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}.qrdb-map-legend-dot{width:8px;height:8px;border-radius:50%;flex:none;border:1px solid var(--ink3);box-sizing:border-box}.recovery-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;font-size:13.5px;margin:12px 0}.qr-frame{display:block;margin:4px auto 0;border:1px solid var(--bd);border-radius:8px;padding:8px;background:#fff}.sig-canvas{width:100%;max-width:360px;aspect-ratio:2/1;background:#fff;border:1.5px solid var(--bd-input);border-radius:var(--radius-md);touch-action:none;box-sizing:border-box}:root[data-dark="1"] .sig-canvas{box-shadow:0 0 0 8px var(--card)}.qrdb-map-legend-dot-neutral{background:#39424b}:root[data-dark="1"] .qrdb-map-legend-dot-neutral{background:var(--ink3)}.toast{position:fixed;bottom:calc(32px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);background:#262d34;color:#fff;font-size:15.5px;font-weight:600;padding:16px 26px;border-radius:10px;border-left:5px solid var(--accent);box-shadow:0 28px 70px rgba(0,0,0,.45);z-index:60;max-width:min(90vw,480px);animation:toastIn .25s ease both}@keyframes toastIn{from{opacity:0;transform:translateX(-50%) translateY(14px) scale(.98)}to{opacity:1;transform:translateX(-50%)}}.toast-hide{animation:toastOut .2s ease forwards}@keyframes toastOut{from{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}to{opacity:0;transform:translateX(-50%) translateY(10px) scale(.96)}}.undo-toast{display:flex;align-items:center;gap:14px}.undo-toast-btn{text-decoration:underline;font-weight:700;white-space:nowrap;flex:none}.presence-indicator{display:inline-flex;align-items:center;gap:-6px}.presence-avatar{width:28px;height:28px;border-radius:50%;background:var(--accent);color:var(--accent-fg,#fff);display:grid;place-items:center;font-size:11.5px;font-weight:700;border:2px solid var(--card);margin-left:-8px}.presence-avatar:first-child{margin-left:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.linkbtn{background:none;border:0;padding:0;margin:0;font:inherit;letter-spacing:inherit;text-transform:inherit;color:inherit;text-align:inherit;cursor:pointer;position:relative}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;flex:none;background:var(--card);color:var(--ink);border:1px solid var(--bd-input);border-radius:8px;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,transform .1s ease}.icon-btn svg{width:18px;height:18px}.icon-btn:hover:not(:disabled){background:var(--chip2);border-color:var(--ink)}.icon-btn-danger:hover:not(:disabled){background:var(--tred)}.icon-btn:active:not(:disabled){transform:scale(.94)}.icon-btn:disabled{cursor:not-allowed;opacity:.5}.hit-target{position:relative}.hit-target::before{content:"";position:absolute;inset:-13px -6px}.sortable-th{cursor:pointer;white-space:nowrap}.sortable-th:hover{color:var(--ink)}.admin-content.admin-content:has(.inst-shell){max-width:none}.row-highlight-flash{animation:rowChangedFlash 2s ease-out}@keyframes rowChangedFlash{0%{background-color:var(--chip2)}100%{background-color:transparent}}.skip-link{position:absolute;left:8px;top:8px;z-index:200;background:var(--card);color:var(--ink);font-weight:600;padding:10px 16px;border-radius:8px;border:2px solid var(--focus-ring);transform:translateY(-200%)}.skip-link:focus-visible{transform:none}*{scrollbar-width:thin;scrollbar-color:var(--bd-input) transparent}*::-webkit-scrollbar{width:11px;height:11px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:var(--bd-input);border-radius:var(--radius-pill);border:3px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background-color:var(--mut)}*::-webkit-scrollbar-corner{background:transparent}@media print{.admin-sidebar,.admin-topbar,.admin-topbar-title-mobile,.admin-sidebar-toggle,.admin-license-banner,.admin-dock,.admin-bell-dock,.skip-link{display:none!important}.admin-content{margin:0!important;padding:0!important}.btn,.btn-primary,.btn-secondary,.linkbtn,button{display:none!important}body{background:#fff!important;color:#000!important}.card{box-shadow:none!important;border:1px solid #ccc!important}}[role="dialog"]{animation:dialogPop .18s ease backwards;border-color:transparent;box-shadow:0 18px 48px rgba(0,0,0,.38)}.route-fade{animation:fadeInOnly .18s ease backwards}.layout-error{max-width:560px;margin:24px auto;padding:26px;display:flex;flex-direction:column;gap:12px}.layout-error-title{font-size:16px;font-weight:800;margin:0}.layout-error-text{font-size:15px;color:var(--ink3);line-height:1.5;margin:0}.layout-error .btn-primary{align-self:flex-start}.skeleton-line{height:14px;border-radius:6px;background:linear-gradient(90deg,var(--chip) 25%,var(--chip2) 50%,var(--chip) 75%);background-size:200% 100%;animation:skeletonShimmer 1.4s ease-in-out infinite,skeletonAppear .2s ease .25s backwards}.skeleton-wrap{animation:skeletonAppear .2s ease .25s backwards}@keyframes skeletonAppear{from{opacity:0}to{opacity:1}}.skeleton-line--title{height:20px;width:40%}.skeleton-line--sm{height:11px}.skeleton-row{display:flex;align-items:center;gap:14px;padding:12px 4px;border-bottom:1px solid var(--bd2)}.skeleton-row .skeleton-line{flex:1 1 0}.skeleton-row .skeleton-line:first-child{flex:0 0 32px;height:32px;border-radius:50%}.skeleton-card{padding:18px}.skeleton-card .skeleton-line+.skeleton-line{margin-top:10px}.empty-state{text-align:center;padding:32px 18px;color:var(--mut);font-size:15px}.empty-state-icon{width:56px;height:56px;margin:0 auto 12px;opacity:.55}.empty-state-message{font-size:15px}.empty-state-actions{margin-top:14px}.overlay-backdrop{position:fixed;inset:0;background:rgba(20,20,20,.35);display:flex;align-items:center;justify-content:center;padding:20px;z-index:50;animation:fadeUp .2s ease backwards}.overlay-dialog{width:380px;max-width:calc(100vw - 40px);max-height:calc(100vh - 40px);overflow-y:auto;padding:22px;display:flex;flex-direction:column;gap:4px}.overlay-title{font-size:16px;font-weight:700;margin-bottom:10px}.dialog-form{display:contents}.overlay-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.toggle-switch{width:34px;height:19px;flex:none;border-radius:10px;background:var(--bd-input);position:relative;cursor:pointer;border:0;padding:0;transition:background .2s}.toggle-switch::after{content:"";position:absolute;inset:-13px -5px}.toggle-switch:disabled{cursor:not-allowed;opacity:.5}.toggle-switch-on{background:var(--accent)}.toggle-switch-knob{position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;background:#fff;transition:left .2s}.toggle-switch-on .toggle-switch-knob{left:17px}.form-field-label{font-size:12.5px;font-weight:600;color:var(--mut);margin-top:8px}.form-error{color:var(--tamber3);font-size:13.5px;margin-top:6px}.field-required-mark{color:var(--accent-ink);font-weight:700}.form-required-note{font-size:12.5px;color:var(--mut);margin:2px 0 0}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.spacer{flex:1}.tablewrap{padding:0;overflow-x:auto}.subgrid-table>*{grid-column:1/-1}.tf-cell{display:contents}.table-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 18px;border-top:1px solid var(--bd2);font-size:12.5px;color:var(--mut)}.filter-chip{font-size:13.5px;font-weight:600;font-family:inherit;padding:7px 14px;border-radius:8px;cursor:pointer;white-space:nowrap;background:var(--card);color:var(--ink2);border:1px solid var(--bd3);transition:background-color .15s,color .15s,border-color .15s;position:relative}.filter-chip::before{content:"";position:absolute;inset:-6px -4px}.filter-chip-on{background:#262d34;color:#fff;border-color:#262d34}.auth-shell{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;padding:34px 16px 50px}.auth-brand{display:flex;flex-direction:column;align-items:center;gap:10px;text-decoration:none;color:inherit;border-radius:12px}.auth-brand-name{font-weight:800;font-size:19px;letter-spacing:.5px}.auth-card{width:380px;max-width:100%;padding:26px;box-shadow:var(--shadow-card);display:flex;flex-direction:column;gap:4px;animation:fadeUp .35s ease backwards}.auth-title{font-size:16px;font-weight:800;margin-bottom:8px}.auth-subtext{font-size:15px;color:var(--ink3);line-height:1.5;margin:0 0 4px}.auth-back-link{display:inline-flex;align-items:center;gap:4px;height:var(--control-height);padding:0 13px;border-radius:999px;border:1px solid var(--bd3);background:var(--card);color:var(--ink2);font-size:13.5px;font-weight:600;text-decoration:none;white-space:nowrap;flex:none;transition:border-color .15s ease,color .15s ease,background-color .15s ease}.auth-back-link:hover{border-color:var(--accent-ink,var(--accent));color:var(--accent-ink,var(--accent));background:var(--pink-badge-bg)}@media(display-mode:standalone){html{overscroll-behavior-x:none}}