:root{--bg: #f5f5f2;--surface: #fcfcfb;--surface-raised: #ffffff;--ink: #1b1b19;--ink-secondary: #4a4a46;--ink-muted: #6e6d68;--border: rgba(11, 11, 11, .12);--hover: rgba(11, 11, 11, .05);--selected: #e7edfb;--accent: #2a5bd7;--accent-strong: #2a5bd7;--series-1: #2a78d6;--grid: #e1e0d9;--axis: #c3c2b7;--warning-bg: #fff4d6;--warning-ink: #6b4a00;--error-ink: #a12a2a;--shadow: 0 6px 24px rgba(0, 0, 0, .12);color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg: #121211;--surface: #1a1a19;--surface-raised: #222220;--ink: #ecebe6;--ink-secondary: #c3c2b7;--ink-muted: #9a998f;--border: rgba(255, 255, 255, .12);--hover: rgba(255, 255, 255, .06);--selected: #24304d;--accent: #7ea2ff;--accent-strong: #3b6ae0;--series-1: #3987e5;--grid: #2c2c2a;--axis: #383835;--warning-bg: #3a2f12;--warning-ink: #f6d58a;--error-ink: #ff8f8f;--shadow: 0 6px 24px rgba(0, 0, 0, .5);color-scheme:dark}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}button,input{font:inherit;color:inherit}code{font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--hover);padding:1px 4px;border-radius:4px}.app{display:flex;flex-direction:column;height:100%}.app main{flex:1;min-height:0}.topbar{display:flex;align-items:center;gap:16px;padding:0 16px;height:48px;background:var(--surface);border-bottom:1px solid var(--border)}.brand{font-weight:700;letter-spacing:.02em}.topbar nav{display:flex;gap:4px;overflow-x:auto;flex:1;scrollbar-width:none}.nav-item{white-space:nowrap;padding:6px 10px;border-radius:6px;color:var(--ink-muted)}a.nav-item{text-decoration:none}a.nav-item:hover{background:var(--hover);color:var(--ink)}.nav-item.soon{opacity:.6}.nav-item.active{color:var(--ink);background:var(--hover);font-weight:600}.user-chip{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2;text-decoration:none;color:inherit;padding:4px 8px;border-radius:6px;white-space:nowrap}.label-short,.user-initials{display:none}@media (max-width: 1440px){.label-long{display:none}.label-short{display:inline}}@media (max-width: 1100px){.user-role{display:none}.nav-item{padding:4px 6px}}.user-chip:hover{background:var(--hover)}.user-name{font-weight:600;font-size:13px}.user-role{color:var(--ink-muted);font-size:12px}.link{background:none;border:0;color:var(--accent);cursor:pointer;padding:6px}.live-map{display:grid;grid-template-columns:360px 1fr;grid-template-rows:minmax(0,1fr);grid-template-areas:"panel map";height:100%}.fleet-panel{grid-area:panel;display:flex;flex-direction:column;min-height:0;background:var(--surface);border-right:1px solid var(--border)}.fleet-panel-head{padding:16px 16px 12px;border-bottom:1px solid var(--border)}.fleet-panel h1{margin:0;font-size:18px}.freshness{margin:2px 0 12px;color:var(--ink-muted);font-size:13px}.freshness.stale{color:var(--warning-ink);background:var(--warning-bg);padding:6px 8px;border-radius:6px}.status-filters{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-bottom:12px}.status-filter{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised);cursor:pointer;text-align:left}.status-filter:hover{background:var(--hover)}.status-filter[aria-pressed=false]{opacity:.45;border-style:dashed}.status-filter-label{flex:1;color:var(--ink-secondary)}.status-filter-count{font-weight:700;font-variant-numeric:tabular-nums}.search{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised)}.vehicle-list{list-style:none;margin:0;padding:4px 0;overflow-y:auto;flex:1}.vehicle-row{display:flex;align-items:center;gap:10px;width:100%;padding:9px 16px;border:0;background:none;text-align:left;cursor:pointer}.vehicle-row:hover{background:var(--hover)}.vehicle-row[aria-current=true]{background:var(--selected)}.vehicle-row-main{flex:1;min-width:0;display:flex;flex-direction:column}.vehicle-reg{font-weight:600;font-variant-numeric:tabular-nums}.vehicle-sub,.vehicle-seen{color:var(--ink-muted);font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-icon{flex:none}.status-badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-secondary)}.empty,.page-message{padding:16px;color:var(--ink-muted)}.error{color:var(--error-ink)}.muted{color:var(--ink-muted)}.map-area{grid-area:map;position:relative;min-height:0}.fleet-map{position:absolute;top:0;right:0;bottom:0;left:0;background:#e8e6df}.vehicle-detail{grid-area:map;align-self:start;justify-self:end;position:relative;z-index:1000;margin:12px;width:340px;max-height:calc(100% - 24px);overflow-y:auto;padding:14px 16px;background:var(--surface-raised);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow)}.vehicle-detail header{display:flex;align-items:center;gap:10px}.vehicle-detail h2{margin:0;font-size:16px;font-variant-numeric:tabular-nums}.vehicle-detail .close{margin-left:auto;border:0;background:none;font-size:20px;line-height:1;cursor:pointer;color:var(--ink-muted);padding:2px 6px}.vehicle-detail dl{margin:12px 0 0;display:grid;grid-template-columns:92px 1fr;gap:8px 12px}.vehicle-detail dt{color:var(--ink-muted)}.vehicle-detail dd{margin:0;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.signed-out{min-height:100%;padding:16px}.card-form{max-width:420px;margin:10vh auto 0;padding:24px;background:var(--surface);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column;gap:8px}.card-form.inline{margin:24px 0 0}.card-form h1,.card-form h2{margin:0 0 4px;font-size:20px}.card-form h2{font-size:16px}.card-form p{margin:0}.card-form label{margin-top:6px;font-weight:600;font-size:13px}input,select{padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised)}.card-form button[type=submit],.add-user button[type=submit]{margin-top:10px;padding:9px 14px;border:0;border-radius:8px;background:var(--accent-strong);color:#fff;font-weight:600;cursor:pointer}.add-user button[type=submit]{margin-top:0;align-self:end}button:disabled{opacity:.5;cursor:default}.notice{padding:8px 10px;border-radius:8px;background:var(--selected);color:var(--ink)}.page-banner{margin:16px}.small{font-size:12.5px}.strong{font-weight:600}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.page{max-width:960px;height:100%;overflow-y:auto;margin:0 auto;padding:24px 16px 48px}.page h1{margin:0 0 4px;font-size:22px}.page>p{margin:4px 0 12px}.facts{display:grid;grid-template-columns:110px 1fr;gap:6px 12px;margin:16px 0 0}.facts dt{color:var(--ink-muted)}.facts dd{margin:0}.add-user{margin:16px 0 24px;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.add-user h2{margin:0 0 10px;font-size:16px}.add-user .fields{display:grid;grid-template-columns:1fr 1.3fr 1fr auto;gap:10px;align-items:end}.add-user label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px}.add-user p{margin:10px 0 0}.table-wrap{position:relative;overflow-x:auto;border:1px solid var(--border);border-radius:12px;background:var(--surface)}table.users{width:100%;border-collapse:collapse}table.users th{text-align:left;font-size:12.5px;font-weight:600;color:var(--ink-muted);padding:10px 14px;border-bottom:1px solid var(--border)}table.users td{padding:10px 14px;border-bottom:1px solid var(--border);vertical-align:middle}table.users tr:last-child td{border-bottom:0}table.users tr.disabled td{color:var(--ink-muted)}table.users .actions{white-space:nowrap;text-align:right}.pair-form .fields{grid-template-columns:10em minmax(12em,22em) auto;justify-content:start}.pair-form input{font-size:18px;letter-spacing:.2em;font-variant-numeric:tabular-nums}.pair-form input::placeholder{letter-spacing:normal}.vehicle-form .fields{grid-template-columns:repeat(3,1fr)}.vehicle-form .wide{grid-column:span 2}.vehicle-form .form-actions button[type=submit]{margin-top:0}.inline-filter input{width:min(100%,22em);margin-bottom:10px}.fences-page{display:grid;grid-template-columns:380px 1fr;grid-template-rows:minmax(0,1fr);height:100%}.fences-panel{overflow-y:auto;padding:16px;background:var(--surface);border-right:1px solid var(--border)}.fences-panel h1{margin:0 0 4px;font-size:18px}.fences-map-wrap{position:relative;min-height:0}.fence-map{position:absolute;top:0;right:0;bottom:0;left:0;background:#e8e6df}.fence-map.drawing{cursor:crosshair}.map-hint{position:absolute;top:10px;left:50%;transform:translate(-50%);z-index:500;margin:0;padding:6px 12px;border-radius:8px;background:var(--surface-raised);box-shadow:var(--shadow);font-size:13px;max-width:calc(100% - 120px);text-align:center}.fence-tools{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:12px 0}.file-button{position:relative;display:inline-block}.file-button input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.file-button:focus-within{outline:2px solid var(--accent);outline-offset:2px}.fence-filter{width:100%;margin-bottom:8px}.fence-list{list-style:none;margin:0 0 12px;padding:0}.fence-row{display:grid;grid-template-columns:12px 1fr;gap:2px 10px;width:100%;padding:8px;border:0;border-radius:8px;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.fence-row:hover{background:var(--hover)}.fence-row.selected{background:var(--selected)}.fence-row.archived .fence-name{color:var(--ink-muted)}.fence-row .small{grid-column:2}.fence-swatch{width:12px;height:12px;margin-top:3px;border-radius:3px}.fence-name{font-weight:600}.fence-actions{display:flex;gap:12px;align-items:center}.fence-editor{display:flex;flex-direction:column;gap:8px;margin-top:12px}.fence-editor h2{margin:0;font-size:16px}.fence-editor>label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px}.fence-editor p{margin:0}.fence-editor>label.check{flex-direction:row;align-items:center;font-weight:400;font-size:14px}.fence-editor .small .link{margin-left:8px}.boundary-options{list-style:none;margin:0;padding:0;max-height:220px;overflow-y:auto;border:1px solid var(--border);border-radius:8px}.boundary-options button{width:100%;padding:6px 10px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.boundary-options button:hover{background:var(--hover)}.boundary-options button.selected{background:var(--selected);font-weight:600}.import-names{margin:0;padding-left:18px}.form-actions button.primary{padding:7px 12px;border:0;border-radius:8px;background:var(--accent-strong);color:#fff;font-weight:600;cursor:pointer}.link.danger-link{color:var(--error-ink);margin-left:auto}.audit-table .refused td{background:var(--warning-bg)}.refused-label{color:var(--warning-ink);font-weight:600}.audit-detail pre{margin:0;max-height:320px;overflow:auto;font-size:12px;white-space:pre-wrap;word-break:break-word}.nowrap{white-space:nowrap}.fence-actions-edit{margin:6px 0 0;padding:10px;border:1px solid var(--border);border-radius:8px}.fence-actions-edit legend{font-weight:600;font-size:13px;padding:0 4px}.fence-actions-edit ul,.fence-events ul{list-style:none;margin:0 0 8px;padding:0}.fence-actions-edit li{display:flex;justify-content:space-between;gap:8px;align-items:center;padding:3px 0;word-break:break-all}.fence-actions-edit li .danger-link{margin-left:0}.action-add{display:flex;flex-wrap:wrap;gap:6px}.action-add input[type=number]{width:5em}.action-add input[type=url]{flex:1 1 12em;min-width:0}.fence-notify-list{list-style:none;margin:0;padding:0}.fence-notify-list li{padding:6px 0;border-bottom:1px solid var(--border)}.notification-form{max-width:560px}.event-choice{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:4px 12px;margin:6px 0 0;padding:0;border:0}.event-choice legend{font-weight:600;font-size:13px;margin-bottom:4px}.event-choice label,.notification-form fieldset.choice label{display:flex;align-items:center;gap:6px;margin:0;font-weight:400;font-size:14px}.recent-messages{margin:6px 0 0;padding-left:18px}.recovery-codes{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:0;padding:0;list-style:none}.card-form .qr{align-self:flex-start;padding:6px;border-radius:8px;background:#fff}.card-form form{display:flex;flex-direction:column;gap:8px}code.secret,.recovery-codes code{padding:2px 6px;border-radius:4px;background:var(--hover);word-break:break-all}.rally-control form{display:flex;flex-wrap:wrap;gap:6px}.rally-control select{padding:4px 6px}.check-inline{display:inline-flex!important;flex-direction:row!important;align-items:center;gap:6px;font-weight:400!important}.check-inline input[type=number]{width:5em}.fence-events{margin:12px 0}.fence-events li{padding:3px 0;border-bottom:1px solid var(--border)}.layout-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.layout-card{display:grid;gap:8px;padding:10px;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.layout-preview{position:relative;max-width:100%;background:#1a1a19;border-radius:6px;overflow:hidden}.layout-preview .zone{position:absolute;display:grid;place-items:center;overflow:hidden;box-sizing:border-box;border:1px solid rgba(255,255,255,.35);color:#fff;font-size:11px;text-align:center;white-space:nowrap;text-overflow:ellipsis}.layout-preview .zone span{overflow:hidden;text-overflow:ellipsis;max-width:100%;padding:0 4px}.layout-preview .zone-main{background:#52514e}.layout-preview .zone-logo,.layout-preview .zone-qr{background:#fff;color:#0b0b0b}.layout-preview .zone-logo img{max-width:100%;max-height:100%;object-fit:contain}.layout-preview .zone.selected{outline:3px solid #fab219;outline-offset:-3px;z-index:10}.layout-preview .zone[class*=zone-]{cursor:default}.preset-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:10px 0}.layout-workspace{display:grid;grid-template-columns:minmax(0,560px) minmax(240px,1fr);gap:16px;align-items:start}.zone-list{margin:0 0 8px;padding-left:20px}.zone-list li{display:flex;justify-content:space-between;padding:2px 0}.zone-list li.selected .link{font-weight:700}.zone-list .danger-link{margin-left:0}.zone-fields{display:grid;gap:8px;margin:8px 0 0;padding:10px;border:1px solid var(--border);border-radius:8px}.zone-fields legend{font-weight:600;font-size:13px}.zone-fields label,.box-fields label{display:flex;flex-direction:column;gap:2px;font-size:12.5px;font-weight:600}.box-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:6px}.box-fields input{min-width:0}.box-fields input[type=color]{width:100%;height:34px;padding:2px}.zone-order{display:flex;gap:12px}@media (max-width: 760px){.layout-workspace{grid-template-columns:1fr}}.device-panel{margin:12px 0 20px;padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.device-panel h2{margin:0 0 4px;font-size:16px}.health-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;margin:8px 0}.health-grid div{padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised)}.health-grid dt{color:var(--ink-muted);font-size:12px}.health-grid dd{margin:2px 0 0;font-weight:600;font-variant-numeric:tabular-nums}.command-buttons{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.command-levels{display:grid;grid-template-columns:1fr auto 1fr auto;gap:8px 10px;align-items:end;margin:8px 0}.command-levels label,.app-update label{display:flex;flex-direction:column;gap:2px;font-size:13px;font-weight:600}.app-update form{display:grid;gap:8px;margin-top:8px;max-width:520px}.app-update button{justify-self:start}.command-list{list-style:none;margin:8px 0 0;padding:0}.command-list li{padding:8px 0;border-bottom:1px solid var(--border)}.command-status.done{color:#006300}.command-status.failed,.command-status.expired{color:var(--error-ink)}.screenshot{display:block;max-width:min(100%,360px);margin-top:6px;border:1px solid var(--border);border-radius:6px}@media (max-width: 760px){.command-levels{grid-template-columns:1fr auto}}.route-day{display:flex;gap:10px;align-items:end;margin:12px 0}.route-day label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px}.plan-progress h2{margin:16px 0 4px;font-size:16px}.stop-list{margin:8px 0;padding-left:22px}.stop-list li{padding:6px 0;border-bottom:1px solid var(--border)}.stop-list li.visited::marker{color:#0ca30c;font-weight:700}.small-heading{margin:8px 0 0;font-size:14px}.stop-edit{margin:0;padding-left:22px}.stop-edit li{padding:8px 0;border-bottom:1px solid var(--border)}.stop-edit-head{display:flex;gap:6px;align-items:center}.stop-edit-head input{flex:1;min-width:0}.stop-edit-head .danger-link{margin-left:0}.stop-edit-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:6px}.stop-edit-fields label{display:flex;flex-direction:column;gap:2px;font-size:12px;font-weight:600}.stop-edit-fields input,.stop-edit-fields select{min-width:0;padding:5px 6px}.stop-edit-fields .wide{grid-column:1 / -1}.copy-vans{max-height:220px;overflow-y:auto}.stop-pin{display:grid;place-items:center;border-radius:50%;background:#0b0b0b;color:#fff;font:700 12px/1 system-ui,sans-serif;border:2px solid #fff;box-shadow:0 1px 4px #0006}.stop-pin.visited{background:#0ca30c}.emergency-live{margin:12px 0;padding:16px;border:2px solid #d03b3b;border-radius:12px;background:var(--surface)}.emergency-head{display:flex;gap:16px;justify-content:space-between;align-items:flex-start}.emergency-head h3{margin:4px 0;font-size:18px}.emergency-head p{margin:4px 0}.emergency-tag{display:inline-block;padding:1px 8px;border-radius:9px;background:#d03b3b;color:#fff;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.emergency-message{font-size:15px;font-weight:600}button.danger,.form-actions button.danger-submit{padding:8px 14px;border:0;border-radius:8px;background:#d03b3b;color:#fff;font-weight:600;cursor:pointer;white-space:nowrap}.reach{margin:12px 0 8px}.reach-bar{position:relative;height:10px;border-radius:5px;background:var(--grid);overflow:hidden}.reach-bar span{position:absolute;inset:0 auto 0 0}.reach-delivered{background:#86b6ef}.reach-acked{background:var(--series-1)}.reach-legend{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:6px}.swatch{display:inline-block;width:10px;height:10px;border-radius:2px;vertical-align:-1px}.swatch.acked{background:var(--series-1)}.swatch.delivered{background:#86b6ef}.swatch.waiting{background:var(--grid);box-shadow:inset 0 0 0 1px var(--axis)}.reach-list{list-style:none;margin:8px 0 0;padding:0;columns:2 22em;column-gap:24px}.reach-list li{display:flex;justify-content:space-between;gap:12px;padding:4px 0;border-bottom:1px solid var(--border);break-inside:avoid;font-size:13.5px}.reach-list .ok{color:#006300}.emergency-form{max-width:640px;margin-bottom:24px}.emergency-form label{display:flex;flex-direction:column;gap:4px}.emergency-form textarea{padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised);font:inherit;resize:vertical}fieldset.choice{margin:6px 0 0;padding:0;border:0;display:flex;flex-wrap:wrap;gap:6px 18px}fieldset.choice legend{font-weight:600;font-size:13px;margin-bottom:4px}fieldset.choice label{flex-direction:row;align-items:center;font-weight:400;font-size:14px;margin:0}.emergency-strip{display:flex;gap:12px;align-items:center;padding:8px 16px;background:#d03b3b;color:#fff;font-weight:600}.emergency-strip a{color:#fff;margin-left:auto;white-space:nowrap}@media (prefers-color-scheme: dark){.command-status.done,.reach-list .ok{color:#0ca30c}}.badge{display:inline-block;min-width:18px;margin-left:6px;padding:0 5px;border-radius:9px;background:#d03b3b;color:#fff;font-size:11.5px;font-weight:700;line-height:18px;text-align:center;font-variant-numeric:tabular-nums}.alert-label{display:inline-flex;align-items:center;gap:6px;font-weight:600;white-space:nowrap}.rules{margin:8px 0 16px;padding:12px 14px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.rules>p{margin:0;color:var(--ink-secondary)}.rules .link{padding:6px 0 0}.rules .notice,.rules .error{margin-top:8px}.rules-form h2{margin:0 0 10px;font-size:16px}.rules-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 14px}.rules-grid label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px}.with-unit{display:flex;align-items:center;gap:6px;font-weight:400;color:var(--ink-muted)}.with-unit input{width:80px}.days{display:flex;flex-wrap:wrap;gap:6px 14px;margin:12px 0 0;padding:0;border:0}.days legend{font-weight:600;font-size:13px;margin-bottom:4px}.day{display:inline-flex;align-items:center;gap:4px}.form-actions{display:flex;gap:12px;align-items:center;margin-top:10px}.form-actions button[type=submit],.secondary{padding:7px 12px;border-radius:8px;cursor:pointer;font-weight:600}.form-actions button[type=submit]{border:0;background:var(--accent-strong);color:#fff}.secondary{border:1px solid var(--border);background:var(--surface-raised)}.secondary:hover{background:var(--hover)}.tabs{display:flex;gap:4px;margin-bottom:10px;border-bottom:1px solid var(--border)}.tab{padding:8px 12px;border:0;border-bottom:2px solid transparent;background:none;cursor:pointer;color:var(--ink-muted);font-weight:600}a.tab{text-decoration:none}.tab[aria-current=page],.tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}.empty-state{padding:24px;text-align:center;color:var(--ink-muted);background:var(--surface);border:1px dashed var(--border);border-radius:12px}.alert-list{list-style:none;margin:0;padding:0;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.alert-row{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1.2fr) 190px;gap:8px 16px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--border)}.alert-row:last-child{border-bottom:0}.alert-row.quiet .alert-label{font-weight:500}.alert-main{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}.alert-main .muted{flex-basis:100%}.alert-vehicle{font-weight:600;color:var(--accent);font-variant-numeric:tabular-nums}.alert-when{font-variant-numeric:tabular-nums}.alert-ack{text-align:right}.vehicle-side{display:flex;flex-direction:column;align-items:flex-end;gap:2px}.vehicle-alerts{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;color:var(--ink-secondary);white-space:nowrap}.detail-alerts{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center}.detail-alerts a{color:var(--accent)}.report-page{max-width:1080px}.report-filters{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:end;margin:12px 0 16px}.report-filters label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px}.report-filters select{max-width:420px}.report-actions{display:flex;gap:8px;margin-left:auto}.button{display:inline-block;padding:8px 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised);color:var(--ink);font-weight:600;text-decoration:none;cursor:pointer}.button:hover{background:var(--hover)}.report{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:24px}.report.loading{opacity:.55}.report-head{border-bottom:1px solid var(--border);padding-bottom:14px;margin-bottom:16px}.report-brand{font-weight:700;letter-spacing:.02em;color:var(--ink-secondary)}.report-head h2{margin:6px 0 0;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted)}.report-title{margin:2px 0 4px;font-size:22px;font-weight:700}.report-head p{margin:0}.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-bottom:8px}.kpi{padding:12px 14px;border:1px solid var(--border);border-radius:10px;background:var(--surface-raised)}.kpi-label{color:var(--ink-muted);font-size:12.5px}.kpi-value{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums}.kpi-sub{color:var(--ink-muted);font-size:12.5px}.report-section{margin-top:22px;break-inside:avoid}.report-section h3{margin:0 0 8px;font-size:15px}.report-section p{margin:0 0 8px}.report-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 24px}table.data{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}table.data th{text-align:left;font-size:12.5px;font-weight:600;color:var(--ink-muted);border-bottom:1px solid var(--border);padding:6px 8px}table.data td{padding:6px 8px;border-bottom:1px solid var(--border)}table.data .num{text-align:right;white-space:nowrap}.mono{font-variant-numeric:tabular-nums}.presets{display:flex;gap:6px;flex-wrap:wrap;align-self:end}.presets [aria-pressed=true]{background:var(--selected);border-color:var(--accent)}.uptime-meter{display:inline-flex;align-items:center;gap:10px}.meter{position:relative;display:inline-block;width:120px;height:8px;border-radius:4px;background:var(--grid)}.meter-fill{position:absolute;inset:0 auto 0 0;border-radius:4px;background:var(--series-1)}.meter-target{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--ink)}.uptime-value{font-variant-numeric:tabular-nums;white-space:nowrap}.uptime-value.below{color:var(--error-ink);font-weight:600}.below-label{font-weight:400}.uptime-days td{background:var(--surface-raised)}.van-days{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:4px 24px}.van-days li{display:grid;grid-template-columns:4em 9em 1fr;gap:8px;align-items:center;font-size:13px}.van-days .meter{width:70px}.chart-box{position:relative;width:100%}.chart{position:relative}.chart .grid{stroke:var(--grid);stroke-width:1}.chart .axis{stroke:var(--axis);stroke-width:1}.chart .tick{fill:var(--ink-muted);font-size:11px;font-variant-numeric:tabular-nums}.chart .bar{fill:var(--series-1)}.chart .bar.active{fill:var(--accent-strong)}.chart rect:focus{outline:none}.chart-tooltip{position:absolute;width:170px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-raised);box-shadow:var(--shadow);pointer-events:none;font-size:13px}.play-map{height:380px;border-radius:10px;border:1px solid var(--border);background:#e8e6df}.map-legend{display:flex;flex-wrap:wrap;gap:4px 16px;margin-top:8px!important;font-size:13px}.map-legend span{display:inline-flex;align-items:center;gap:6px}.method ul{margin:0;padding-left:18px;color:var(--ink-secondary)}.method li{margin-bottom:4px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.page-head h1,.page-head h2{margin:0}.page-head h2{font-size:18px}.button.primary{background:var(--accent-strong);border-color:transparent;color:#fff}.button.primary:hover{background:var(--accent-strong);filter:brightness(1.08)}.tab-count{margin-left:6px;color:var(--ink-muted);font-weight:500;font-variant-numeric:tabular-nums}.pill{display:inline-block;padding:1px 8px;border-radius:10px;border:1px solid var(--border);font-size:12px;font-weight:600;white-space:nowrap}.pill.running{background:var(--selected)}.pill.ended,.pill.archived{color:var(--ink-muted)}table.campaigns .actions{text-align:right;white-space:nowrap}table.campaigns .actions .link{margin-left:12px;padding:0}a.link{text-decoration:none}a.link:hover{text-decoration:underline}.back{display:inline-block;padding:0;margin-bottom:8px}.campaign-form,.client-form{display:flex;flex-direction:column;gap:16px;margin-top:12px;padding:16px;background:var(--surface);border:1px solid var(--border);border-radius:12px}.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px 16px}.form-grid label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px;min-width:0}.form-grid .row{display:flex;gap:8px;align-items:center}.form-grid .row select,.form-grid .row input{flex:1;min-width:0}.form-grid .row .link{white-space:nowrap;font-weight:500}.picker{margin:0;padding:12px 14px;border:1px solid var(--border);border-radius:10px;min-width:0}.picker legend{padding:0 4px;font-weight:700}.picker>p{margin:0 0 8px}.picker-tools{display:flex;gap:10px;align-items:center;margin-bottom:8px}.picker-tools input{flex:1;min-width:0}.picker-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:4px 12px;max-height:220px;overflow-y:auto}.check{display:inline-flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}.clients{margin-top:32px}.client-list{list-style:none;margin:8px 0 0;padding:0;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.client-list li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--border)}.client-list li:last-child{border-bottom:0}.client-list li.archived .strong{color:var(--ink-muted)}.client-list .pill{margin-left:8px}.chart .target line{stroke:var(--ink-secondary);stroke-width:1.5;stroke-dasharray:5 4}.chart .target text{fill:var(--ink-secondary);font-size:11px;font-weight:600}.media-page{max-width:1200px;position:relative}.media-page.dragging:after{content:"Drop to upload";position:fixed;top:60px;right:16px;bottom:16px;left:16px;display:grid;place-items:center;border:3px dashed var(--accent);border-radius:16px;background:color-mix(in srgb,var(--surface) 85%,transparent);font-size:22px;font-weight:700;color:var(--accent);pointer-events:none;z-index:2000}.upload-list{list-style:none;margin:12px 0;padding:8px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface)}.upload-list li{display:flex;align-items:center;gap:10px;padding:4px 0;min-width:0}.upload-name{flex:0 1 40%;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.upload-list progress{flex:1;min-width:60px;accent-color:var(--accent-strong)}.upload-clear{justify-content:flex-end}.media-filters{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin:12px 0}.media-filters input[type=search]{flex:1 1 220px}.media-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}.media-card{display:flex;flex-direction:column;gap:4px;width:100%;padding:0 0 10px;border:1px solid var(--border);border-radius:12px;background:var(--surface);text-align:left;cursor:pointer;overflow:hidden}.media-card:hover{border-color:var(--axis)}.media-card.selected{outline:2px solid var(--accent);outline-offset:-1px}.media-thumb{position:relative;display:grid;place-items:center;aspect-ratio:16 / 9;background:var(--hover)}.media-thumb img{width:100%;height:100%;object-fit:contain;background:#000}.media-type-mark{font-weight:700;color:var(--ink-muted);letter-spacing:.04em;text-transform:uppercase;font-size:13px}.media-duration{position:absolute;right:6px;bottom:6px;padding:1px 6px;border-radius:4px;background:#000000bf;color:#fff;font-size:12px;font-variant-numeric:tabular-nums}.media-name,.media-meta,.media-state{padding:0 10px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-name{font-weight:600;margin-top:4px}.media-meta,.media-state{font-size:12.5px;color:var(--ink-muted)}.approval{font-weight:600;color:var(--ink-secondary)}.approval.rejected{color:var(--error-ink)}.creative-panel{position:fixed;z-index:1500;top:48px;right:0;bottom:0;width:min(440px,100vw);overflow-y:auto;padding:16px;background:var(--surface-raised);border-left:1px solid var(--border);box-shadow:var(--shadow)}.creative-panel header{display:flex;align-items:flex-start;gap:8px}.creative-panel h2{margin:0;font-size:17px;overflow-wrap:anywhere}.creative-panel .close{margin-left:auto;border:0;background:none;font-size:22px;line-height:1;cursor:pointer;color:var(--ink-muted)}.creative-panel h3{margin:16px 0 6px;font-size:14px}.preview{margin-top:12px;display:grid;place-items:center;min-height:80px;border-radius:10px;background:var(--hover);overflow:hidden}.preview video,.preview img{display:block;width:100%;max-height:260px;object-fit:contain;background:#000}.preview audio{width:100%;margin:12px}.preview p{padding:12px;margin:0}.decide textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface);font:inherit;resize:vertical}.history{list-style:none;margin:8px 0 0;padding:0;font-size:13px}.history li{padding:6px 0;border-top:1px solid var(--border)}.edit-creative{display:flex;flex-direction:column;gap:8px}.edit-creative label{display:flex;flex-direction:column;gap:4px;font-weight:600;font-size:13px}.warn{color:var(--warning-ink)}.day-preview{margin-top:28px;padding:16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.day-preview h2{margin:0 0 8px;font-size:16px}.day-preview .report-filters{margin:0 0 12px}.day-bar{position:relative;height:36px;border-radius:6px;background:repeating-linear-gradient(45deg,var(--hover),var(--hover) 6px,transparent 6px,transparent 12px);border:1px solid var(--border)}.day-seg{position:absolute;top:0;bottom:0;box-shadow:inset -2px 0 0 var(--surface)}.day-seg.idle{box-shadow:none}.day-tip{position:absolute;top:42px;z-index:2;padding:6px 8px;border:1px solid var(--border);border-radius:6px;background:var(--surface-raised);box-shadow:var(--shadow);font-size:13px;white-space:nowrap;pointer-events:none}.day-axis{position:relative;height:18px;margin-top:4px;font-size:11px;color:var(--ink-muted);font-variant-numeric:tabular-nums}.day-axis span{position:absolute;transform:translate(-50%)}.day-axis span:first-child{transform:none}.day-axis span:last-child{transform:translate(-100%)}.day-legend{list-style:none;margin:10px 0 0;padding:0;font-size:13px}.day-legend li{display:flex;align-items:center;gap:8px;padding:3px 0}.swatch{width:12px;height:12px;border-radius:3px;flex:none}.playlist-items{list-style:none;margin:0 0 10px;padding:0}.playlist-items li{display:grid;grid-template-columns:64px minmax(0,1fr) 90px minmax(0,200px) auto;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid var(--border)}.playlist-items li.unplayable .strong{color:var(--ink-muted)}.item-thumb{display:grid;place-items:center;width:64px;height:36px;border-radius:4px;overflow:hidden;background:var(--hover);font-size:11px;color:var(--ink-muted);text-transform:uppercase}.item-thumb img{width:100%;height:100%;object-fit:cover}.item-main{display:flex;flex-direction:column;min-width:0}.item-main .strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-len{display:flex;align-items:center;gap:4px}.item-len input{width:64px}.item-actions{display:flex;gap:2px}.item-actions .link{padding:4px 6px;font-size:15px}@page{size:A4;margin:14mm}@media print{:root{--bg: #ffffff;--surface: #ffffff;--surface-raised: #ffffff;--ink: #111111;--ink-secondary: #333333;--ink-muted: #555555;--border: rgba(0, 0, 0, .18);--series-1: #2a78d6;--grid: #e1e0d9;--axis: #c3c2b7;color-scheme:light}.topbar,.no-print,.leaflet-control-container{display:none!important}html,body,#root,.app,.app main,.page{height:auto!important;overflow:visible!important}.page{max-width:none;padding:0}.report{border:0;padding:0}.report-grid{grid-template-columns:1fr 1fr}body{-webkit-print-color-adjust:exact;print-color-adjust:exact}}@media (max-width: 760px){.fences-page{grid-template-columns:1fr;grid-template-rows:45vh minmax(0,1fr)}.fences-map-wrap{grid-row:1}.fences-panel{grid-row:2;border-right:0;border-top:1px solid var(--border)}.live-map{grid-template-columns:1fr;grid-template-rows:40vh auto minmax(0,1fr);grid-template-areas:"map" "detail" "panel"}.fleet-panel{border-right:0;border-top:1px solid var(--border)}.vehicle-detail{grid-area:detail;justify-self:stretch;margin:0;width:auto;max-height:none;border-radius:0;border-width:1px 0 0;box-shadow:none;padding:10px 16px}.vehicle-detail dl{margin-top:8px;gap:4px 12px}.card-form{margin-top:24px}.add-user .fields,.pair-form .fields,.vehicle-form .fields{grid-template-columns:1fr}.vehicle-form .wide{grid-column:auto}.user-role{display:none}.alert-row{grid-template-columns:1fr}.playlist-items li{grid-template-columns:64px minmax(0,1fr) auto}.playlist-items li select{grid-column:2 / 4}.playlist-items li .item-actions{grid-column:3;grid-row:1}.playlist-items li .item-len{grid-column:2}.report{padding:14px}.topbar nav{scroll-snap-type:x proximity;-webkit-mask-image:linear-gradient(to right,#000 85%,transparent);mask-image:linear-gradient(to right,#000 85%,transparent)}.nav-item{scroll-snap-align:start}table.campaigns thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}table.campaigns,table.campaigns tbody,table.campaigns tr,table.campaigns td{display:block;width:100%}table.campaigns tr{padding:10px 14px;border-bottom:1px solid var(--border)}table.campaigns td{border:0;padding:2px 0;text-align:left!important}table.campaigns td[data-label]:not([data-label=""]):before{content:attr(data-label) ": ";color:var(--ink-muted)}table.campaigns .actions{text-align:left;padding-top:6px}table.campaigns .actions .link{margin:0 16px 0 0}.report-grid{grid-template-columns:1fr}.report-actions{margin-left:0}.report-filters select{max-width:100%}.alert-ack{text-align:left}.nav-item.soon,.brand{display:none}.topbar{gap:8px;padding:0 8px}.label-long,.user-name,.user-role{display:none}.label-short{display:inline}.topbar nav{gap:0}.nav-item{padding:6px 7px}.badge{margin-left:3px}.user-initials{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--hover);font-weight:700;font-size:12px}.user-chip{padding:2px}.report-filters label{width:100%;min-width:0}.report-filters label:has(input[type=date]){width:calc(50% - 7px)}.report-filters select,.report-filters input{width:100%;min-width:0}table.users thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}table.users,table.users tbody,table.users tr,table.users td{display:block;width:100%}table.users tr{padding:12px 14px;border-bottom:1px solid var(--border)}table.users tr:last-child{border-bottom:0}table.users td{padding:3px 0;border:0}table.users td[data-label]:before{content:attr(data-label) ": ";color:var(--ink-muted)}table.users .actions{text-align:left;white-space:normal;padding-top:6px}table.users .actions .link{padding-left:0;margin-right:16px}}.crew-photo{max-width:160px;max-height:120px;border-radius:6px;object-fit:cover}.crew-photos{display:flex;gap:4px}.crew-thumb{width:44px;height:44px;border-radius:4px;object-fit:cover}.inline-field{display:inline-flex;align-items:center;gap:6px;margin-bottom:12px}.inline-form{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:6px}.inline-form input{flex:1 1 180px}.crew-gallery{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px}.crew-gallery li{display:flex;flex-direction:column;gap:2px}.crew-gallery img{width:100%;aspect-ratio:4 / 3;object-fit:cover;border-radius:6px;display:block}.segmented{display:flex;border:1px solid var(--border, #ccd);border-radius:8px;overflow:hidden}.segmented button{flex:1;border:0;border-radius:0;background:transparent;color:inherit;padding:8px}.segmented button[aria-selected=true]{background:var(--accent, #2a5bd7);color:#fff}.sso{display:flex;flex-direction:column;gap:8px;align-items:stretch;text-align:center;margin-top:8px}.sso .button{display:block;padding:10px;border:1px solid var(--border, #ccd);border-radius:8px;text-decoration:none;color:inherit}.linked-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:6px 0}.card-form.wide{max-width:960px}table.lines input{width:100%}table.lines td:nth-child(2),table.lines td:nth-child(3){width:110px}tr.clickable{cursor:pointer}.pill.overdue{background:#fdecea;color:#a12a2a}.pill.paid{background:#e6f4ea;color:#1f6b3a}.pill.void{text-decoration:line-through}ul.plain{list-style:none;padding:0;margin:0}fieldset.form-grid{border:0;padding:0;margin:0}.card-form.wide .block-field{display:flex;flex-direction:column;gap:4px}.card-form.wide .block-field input{width:100%}.payment-form{max-width:960px;margin-top:12px;padding:12px 16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.payment-form input,.payment-form select{flex:1 1 140px}.card-form .link.back{align-self:flex-start;padding:0}.qr-list{list-style:none;padding:0;margin:12px 0;display:grid;gap:8px}.qr-row{display:grid;grid-template-columns:96px 1fr auto auto;gap:16px;align-items:center;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}.qr-row.archived{opacity:.6}.qr-main,.qr-stats,.qr-actions{display:flex;flex-direction:column;gap:2px;min-width:0}.qr-main .mono{overflow-wrap:anywhere}@media (max-width: 720px){.qr-row{grid-template-columns:72px 1fr}.qr-row img{width:72px;height:72px}}.replay .filters{display:flex;gap:12px;flex-wrap:wrap;margin:8px 0}.replay-summary{display:flex;flex-wrap:wrap;gap:8px 24px;margin:8px 0}.replay-summary div{display:flex;flex-direction:column}.replay-summary dt{font-size:12px;color:var(--ink-muted, #6e6d68)}.replay-summary dd{margin:0;font-weight:600}.replay-summary .warn dd{color:#a12a2a}.replay-map{height:min(60vh,560px);border-radius:12px;border:1px solid var(--border);z-index:0}.replay-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:12px 0}.replay-controls input[type=range]{flex:1 1 240px}.replay-clock{font-variant-numeric:tabular-nums;min-width:72px}.replay-now{flex:1 1 100%}.display-rules{margin-top:32px}.display-rules fieldset{border:0;padding:0;margin:0}.band-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:8px 0;border-bottom:1px solid var(--border)}.band-row input[type=number]{width:64px}.band-days{display:flex;gap:6px;flex-wrap:wrap}.brand-form{margin-bottom:16px}.brand-logo-row{display:flex;align-items:center;gap:16px;margin-top:12px}.brand-logo-preview{max-height:56px;max-width:200px;object-fit:contain}
