:root{color-scheme:light;--bg: #f4f6f8;--panel: #ffffff;--panel-2: #eef2f5;--brand: #063451;--brand-soft: #e7f0f5;--text: #17202a;--muted: #687381;--line: #d9e1e8;--green: #0f7b5f;--blue: #063451;--amber: #b36b00;--red: #b42318;--ink: #273444;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}button,input,select{font:inherit}button{cursor:pointer}.shell{min-height:100vh;display:grid;grid-template-columns:260px minmax(0,1fr)}.sidebar{background:var(--brand);color:#eef2f5;padding:18px 14px;display:flex;flex-direction:column;gap:18px}.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 14px;border-bottom:1px solid rgba(255,255,255,.12)}.brand-mark{display:grid;place-items:center;width:46px;height:46px;border-radius:8px;background:#fff;font-weight:800;overflow:hidden;border:1px solid rgba(255,255,255,.4)}.brand-mark img{width:100%;height:100%;object-fit:cover}.brand strong,.brand small{display:block}.brand small{color:#aab7c4;margin-top:2px}.sidebar nav{display:grid;gap:14px;overflow:auto}.nav-section{display:grid;gap:4px}.nav-section-title{margin:0 0 2px;padding:0 10px;color:#8fa0b2;font-size:.68rem;font-weight:800;text-transform:uppercase}.sidebar button{display:flex;align-items:center;gap:10px;min-height:38px;border:0;border-radius:8px;color:#d8e1ea;background:transparent;padding:8px 10px;text-align:left}.sidebar button:hover,.sidebar button.active{background:#ffffff1a;color:#fff}.logout{margin-top:auto}.main{padding:24px;min-width:0}.topbar{display:flex;justify-content:flex-start;align-items:center;gap:14px;margin-bottom:20px}.topbar-logo{width:54px;height:54px;border-radius:8px;object-fit:cover;background:#fff;border:1px solid var(--line);box-shadow:0 8px 20px #06345114;flex:0 0 auto}.eyebrow{margin:0 0 4px;color:var(--muted);font-size:.78rem;text-transform:uppercase;font-weight:700}h1,h2{margin:0;letter-spacing:0}h1{font-size:1.7rem}h2{font-size:1rem}.stack{display:grid;gap:16px}.workspace-grid{display:grid;grid-template-columns:minmax(320px,420px) minmax(0,1fr);gap:16px;align-items:start}.panel,.login-panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 20px #17202a0a}.panel{padding:16px}.panel-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.muted{margin:3px 0 0;color:var(--muted);font-size:.85rem}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.compact{max-width:220px;word-break:break-all;color:#425466;font-size:.78rem}.table-subtle{display:block;margin-top:4px;color:var(--muted);font-size:.74rem}.ble-live-hero{display:flex;align-items:center;justify-content:space-between;gap:16px}.live-indicator{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;min-width:132px;padding:8px 12px;border-radius:8px;background:#eef2f5;color:var(--muted);font-weight:900}.live-indicator.online{background:#e5f4ef;color:var(--green)}.ble-live-toolbar{align-items:flex-start}.ble-device-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:min(100%,560px);margin:0 0 14px;padding:4px;border-radius:8px;background:var(--panel-2)}.ble-device-tabs button{min-width:0;min-height:40px;display:flex;align-items:center;justify-content:center;gap:8px;padding:7px 10px;border:0;border-radius:6px;background:transparent;color:var(--muted);font-weight:800}.ble-device-tabs button.active{background:var(--brand);color:#fff}.ble-device-tabs button b{min-width:23px;padding:2px 6px;border-radius:999px;background:#06345117;color:currentColor;font-size:.74rem;line-height:1.3}.ble-device-tabs button.active b{background:#ffffff2e}.search-field{position:relative;display:block;min-width:260px}.search-field svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--muted)}.search-field input{padding-left:34px}.active-soft{background:var(--brand-soft);border-color:#06345138}.rssi-cell{display:grid;gap:6px;min-width:120px}.rssi-meter{display:block;width:100%;height:8px;border-radius:999px;background:#e7edf2;overflow:hidden}.rssi-meter i{display:block;height:100%;border-radius:inherit;background:var(--red)}.rssi-meter i.good{background:var(--amber)}.rssi-meter i.strong{background:var(--green)}.pill.strong{background:#e5f4ef;color:var(--green)}.pill.good{background:#fff6e6;color:var(--amber)}.pill.weak{background:#fff1f0;color:var(--red)}.ble-packet-list{display:grid;gap:8px}.ble-packet-list>div{display:flex;align-items:center;gap:10px;padding:10px;border:1px solid var(--line);border-radius:8px;background:#fff}.ble-packet-list small{display:block;margin-top:3px;color:var(--muted);font-size:.78rem;word-break:break-word}.packet-count{display:grid;place-items:center;flex:0 0 auto;width:34px;height:34px;border-radius:50%;background:#eef2f5;color:var(--muted);font-weight:900}.packet-count.has-devices{background:#e5f4ef;color:var(--green)}.ble-setup-hero{display:flex;align-items:center;justify-content:space-between;gap:16px}.mode-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.mode-card{min-height:96px;display:grid;gap:7px;align-content:start;text-align:left;border:1px solid var(--line);border-radius:8px;background:#fff;padding:14px;color:var(--text)}.mode-card.active{border-color:var(--brand);background:var(--brand-soft)}.mode-card span{color:var(--muted);font-size:.84rem;line-height:1.35}.add-device-row{display:grid;grid-template-columns:minmax(220px,1fr) minmax(180px,.8fr) minmax(110px,.35fr) auto;gap:10px;margin-bottom:14px}.proximity-setup-grid{display:grid;grid-template-columns:minmax(150px,190px) repeat(2,minmax(190px,1fr));gap:12px;align-items:end}.proximity-zone-editor{display:grid;grid-template-columns:1fr repeat(2,minmax(80px,110px));gap:10px;align-items:end;padding:10px;border:1px solid var(--line);border-radius:8px;background:#f8fafb}.proximity-zone-editor strong{align-self:center}.log-path-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.log-path-grid div{display:grid;gap:6px;min-width:0;border:1px solid var(--line);border-radius:8px;padding:10px;background:#fff}.log-path-grid span{color:var(--muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.log-path-grid code{overflow:auto;white-space:nowrap;color:var(--ink)}.form-grid,.report-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}label{display:grid;gap:6px;font-size:.82rem;color:var(--muted);font-weight:700}input,select{width:100%;min-height:38px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff;color:var(--text)}.primary,.secondary,.text-button,.icon-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:38px;border-radius:8px;border:1px solid transparent}.primary{margin-top:14px;padding:8px 12px;color:#fff;background:var(--brand)}.primary:disabled{opacity:.65}.secondary{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;padding:8px 11px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:#fff}.secondary:hover{background:var(--panel-2)}.secondary:disabled,.primary:disabled{cursor:not-allowed;opacity:.55}.full-width{width:100%}.icon-button{width:38px;background:#fff;border-color:var(--line);color:var(--ink)}.icon-button:hover{background:var(--panel-2)}.icon-button.danger{color:var(--red)}.text-button{padding:8px 10px;background:#fff;border-color:var(--line);color:var(--blue);font-weight:700}.toolbar{display:flex;gap:8px;align-items:center}.toolbar.end{justify-content:end}.search{width:min(260px,42vw)}.table-panel{min-width:0}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:8px}table{width:100%;border-collapse:collapse;min-width:720px}th,td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;font-size:.86rem}th{background:#f8fafb;color:#425466;font-size:.74rem;text-transform:uppercase}tr:last-child td{border-bottom:0}.actions{white-space:nowrap;width:94px}.actions .icon-button{margin-right:6px}.empty{color:var(--muted);text-align:center;padding:18px}.error{border:1px solid #f3b6b0;background:#fff1f0;color:var(--red);border-radius:8px;padding:10px 12px;margin:10px 0}.success{border:1px solid rgba(15,123,95,.28);background:#e5f4ef;color:var(--green);border-radius:8px;padding:10px 12px;margin:10px 0}.no-margin{margin-top:0}.login-screen{min-height:100vh;display:grid;place-items:center;padding:24px}.login-panel{width:min(420px,100%);padding:24px;display:grid;gap:12px}.login-logo-wrap{width:84px;height:84px;border-radius:8px;display:grid;place-items:center;background:#fff;border:1px solid var(--line);box-shadow:0 8px 20px #0634511a;overflow:hidden}.login-logo{width:100%;height:100%;object-fit:cover}.login-subtitle{margin:-6px 0 2px;color:var(--muted);font-weight:800}.stats-grid{display:grid;grid-template-columns:repeat(5,minmax(150px,1fr));gap:12px}.compact-stats{grid-template-columns:repeat(auto-fit,minmax(150px,220px))}.stat{min-height:84px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:14px;display:flex;align-items:center;gap:12px}.stat span,.stat strong{display:block;font-size:1.55rem}.stat small{color:var(--muted);font-weight:700}.stat.green{border-left:4px solid var(--green)}.stat.blue{border-left:4px solid var(--blue)}.stat.amber{border-left:4px solid var(--amber)}.stat.red{border-left:4px solid var(--red)}.two-column{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.list{display:grid;gap:8px}.list-row{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:8px}.list-row small{display:block;color:var(--muted);margin-top:4px}.pill{display:inline-flex;align-items:center;min-height:24px;border-radius:999px;padding:3px 8px;background:#edf1f5;color:#273444;font-size:.75rem;font-style:normal;font-weight:800}.pill.high,.pill.critical,.pill.red,.pill.stolen,.pill.lost{background:#fff1f0;color:var(--red)}.pill.medium,.pill.amber,.pill.possible_exit,.pill.out_of_schedule{background:#fff6e6;color:var(--amber)}.pill.low,.pill.present,.pill.valid_stay,.pill.corrected_false_exit{background:#e5f4ef;color:var(--green)}.json-block{overflow:auto;margin:0;padding:14px;border-radius:8px;border:1px solid var(--line);background:#101820;color:#eef2f5;font-size:.82rem}.command-list{display:grid;gap:12px}.command-list div{display:grid;grid-template-columns:170px minmax(0,1fr);gap:12px;align-items:center;padding:10px;border:1px solid var(--line);border-radius:8px}.command-list span{font-weight:800}.command-list code{display:block;overflow:auto;white-space:nowrap;padding:8px;border-radius:8px;background:#eef2f5}.simulator-hero{display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:132px;padding:18px;border-radius:8px;background:#fff;border:1px solid var(--line);box-shadow:0 8px 20px #17202a0a}.simulator-hero h2{font-size:1.45rem}.simulator-status{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-width:136px;min-height:40px;padding:8px 12px;border-radius:8px;font-weight:900;color:var(--muted);background:#eef2f5}.simulator-status.running{color:var(--green);background:#e5f4ef}.simulator-status.paused{color:var(--amber);background:#fff6e6}.simulator-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(280px,.6fr);gap:16px;align-items:stretch}.simulator-control-panel,.simulator-run-card{min-height:220px}.simulator-form{margin-bottom:14px}.simulator-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.simulator-actions .primary{margin-top:0}.run-metrics{display:grid;gap:8px;margin:0 0 14px}.run-metrics div{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--line)}.run-metrics div:last-child{border-bottom:0}.run-metrics dt,.run-metrics dd{margin:0;font-size:.86rem}.run-metrics dt{color:var(--muted);font-weight:800}.run-metrics dd{color:var(--ink);font-weight:900;text-align:right}.scenario-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.scenario-card{min-height:106px;display:grid;gap:7px;align-content:start;text-align:left;border:1px solid var(--line);border-radius:8px;background:#fff;padding:12px;color:var(--text)}.scenario-card:hover,.scenario-card.active{border-color:var(--brand);background:var(--brand-soft)}.scenario-card span{color:var(--muted);font-size:.82rem;line-height:1.35}.map-toolbar{display:flex;justify-content:space-between;gap:14px;align-items:end}.map-toolbar-actions{display:flex;align-items:center;gap:8px}.map-view-switch,.map-editor-tools{display:inline-grid;grid-template-columns:repeat(2,minmax(0,1fr));padding:3px;border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}.map-view-switch button,.map-editor-tools button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:34px;padding:6px 10px;border:0;border-radius:6px;color:var(--muted);background:transparent;font-weight:800}.map-view-switch button.active,.map-editor-tools button.active{color:#fff;background:var(--brand);box-shadow:0 2px 7px #0634512e}.map-selectors{display:grid;grid-template-columns:repeat(2,minmax(180px,260px));gap:12px}.floor-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:16px;align-items:start}.floor-map-panel{min-width:0;background:#fff;border:1px solid var(--line);border-radius:8px;overflow:hidden;box-shadow:0 8px 20px #17202a0a}.floor-map-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px;border-bottom:1px solid var(--line)}.map-heading-controls{min-width:0;display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}.map-zoom-controls{display:inline-flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--line);border-radius:7px;background:var(--panel-2)}.map-zoom-controls button{width:30px;height:30px;display:grid;place-items:center;padding:0;border:0;border-radius:5px;color:var(--brand);background:transparent}.map-zoom-controls button:hover:not(:disabled){color:#fff;background:var(--brand)}.map-zoom-controls button:disabled{color:#a8b3bd;cursor:not-allowed}.map-zoom-controls>span{min-width:46px;color:var(--text);font-size:.74rem;font-weight:900;text-align:center}.map-legend{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:.78rem;font-weight:700;flex-wrap:wrap}.map-legend span{display:inline-flex;align-items:center;gap:5px}.legend-geozone{width:18px;height:12px;display:inline-block;border:2px solid rgba(6,52,81,.58);background:#0634511a;transform:skew(-12deg)}.map-edit-status span{display:inline-flex;align-items:center;min-height:30px;padding:5px 9px;border-radius:8px;font-size:.76rem;font-weight:900}.map-edit-status .saved{color:var(--green);background:#e5f4ef}.map-edit-status .unsaved{color:var(--amber);background:#fff3dc}.legend-dot{width:10px;height:10px;border-radius:50%;display:inline-block}.legend-dot.present{background:var(--green)}.legend-dot.possible{background:var(--amber)}.legend-dot.passby{background:#64748b}.legend-dot.alert{background:var(--red)}.legend-ring{width:20px;height:12px;border-radius:999px;display:inline-block}.legend-ring.near{border:2px solid rgba(15,123,95,.45);background:#0f7b5f14}.legend-ring.extended{border:2px dashed rgba(6,52,81,.4);background:#0634510f}.map-mode-badge{min-height:26px;padding:4px 8px;border-radius:999px;background:#e5f4ef;color:var(--green);font-size:.72rem;text-transform:uppercase}.floor-map-viewport{width:100%;max-height:820px;overflow:auto;overscroll-behavior:contain;scrollbar-color:#9aabb8 #edf1f4;scrollbar-width:thin}.floor-layout.editing .floor-map-viewport{min-height:780px}.floor-map-canvas{position:relative;width:100%;min-height:620px;aspect-ratio:auto;background:linear-gradient(90deg,rgba(23,32,42,.04) 1px,transparent 1px),linear-gradient(rgba(23,32,42,.04) 1px,transparent 1px),#f8fafb;background-size:32px 32px;overflow:hidden;transition:width .18s ease,min-height .18s ease}.floor-map-canvas:before{content:"";position:absolute;left:4%;right:4%;top:48%;height:9%;border:1px dashed #aab7c4;background:#ffffffb8;border-radius:8px}.floor-map-canvas:after{content:"";position:absolute;right:4%;top:8%;bottom:8%;width:3%;background:#e7edf2;border-left:1px solid var(--line);border-right:1px solid var(--line)}.floor-grid-label{position:absolute;z-index:1;color:#7a8794;font-size:.75rem;font-weight:800;text-transform:uppercase}.floor-grid-label.main-aisle{left:6%;top:51%}.floor-grid-label.dock{right:8%;bottom:8%}.floor-route-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;width:100%;height:100%;pointer-events:none}.geozone-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;width:100%;height:100%;pointer-events:none}.geozone-shape{stroke-width:2;vector-effect:non-scaling-stroke;transition:fill .2s ease,stroke .2s ease}.geozone-shape.zone-color-0{fill:#0634511a;stroke:#0634519e}.geozone-shape.zone-color-1{fill:#0f7b5f1a;stroke:#0f7b5fa8}.geozone-shape.zone-color-2{fill:#b36b001a;stroke:#b36b00a6}.geozone-shape.zone-color-3{fill:#b4231814;stroke:#b4231894}.geozone-shape.selected{stroke-width:3}.geozone-draft-fill{fill:#06345121;stroke:none}.geozone-draft-line{fill:none;stroke:var(--brand);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.geozone-vertex{fill:#fff;stroke:var(--brand);stroke-width:2;vector-effect:non-scaling-stroke}.geozone-label{position:absolute;z-index:6;display:inline-flex;align-items:center;gap:7px;max-width:190px;min-height:30px;padding:5px 7px 5px 9px;transform:translate(-50%,-50%);border:1px solid rgba(6,52,81,.4);border-radius:8px;color:var(--brand);background:#fffffff0;box-shadow:0 5px 12px #17202a1f}.geozone-label strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.72rem}.geozone-label span{min-width:22px;height:22px;display:grid;place-items:center;border-radius:50%;color:#fff;background:var(--brand);font-size:.68rem;font-weight:900}.geozone-label.selected{outline:3px solid rgba(6,52,81,.2)}.route-line{fill:none;stroke:#06345147;stroke-width:.6;stroke-dasharray:1.8 1.2;vector-effect:non-scaling-stroke}.route-line.possible_exit,.route-line.out_of_schedule{stroke:#b36b0073}.route-line.lost_badge{stroke:#b4231880}.floor-area{position:absolute;z-index:1;display:grid;place-items:center;padding:8px;border-radius:8px;border:1px solid #cbd5df;background:#ffffffc7;color:#64748b;font-size:.74rem;font-weight:900;text-align:center;text-transform:uppercase}.floor-area.cafeteria{background:#fff9ee;border-color:#b36b0059}.floor-area.offices,.floor-area.reception{background:#f4f7fd;border-color:#06345138}.floor-area.entrance{background:#e5f4ef;border-color:#0f7b5f59}.floor-area.dock-area{writing-mode:vertical-rl;letter-spacing:0;background:#e7edf2}.station-zone{position:absolute;z-index:4;isolation:isolate;border:2px solid #b7c4cf;background:#ffffffe0;border-radius:8px;padding:12px;display:grid;grid-template-rows:auto auto 1fr auto;min-width:180px;transform:translate(-50%,-50%);box-shadow:0 12px 24px #17202a14}.station-zone.is-draggable{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none}.station-zone.is-draggable:active{cursor:grabbing}.station-zone.is-active{outline:3px solid rgba(6,52,81,.24);outline-offset:3px}.station-drag-handle{position:absolute;z-index:5;left:50%;top:-10px;width:34px;height:34px;display:grid;place-items:center;border:2px solid #ffffff;border-radius:50%;color:#fff;background:var(--brand);box-shadow:0 5px 12px #17202a33;transform:translate(-50%,-50%)}.floor-map-canvas.is-editing{box-shadow:inset 0 0 0 3px #0634511f}.floor-map-canvas.is-editing.tool-geozone{cursor:crosshair}.floor-map-canvas.is-editing .map-agent,.floor-map-canvas.is-editing .floor-route-layer,.floor-map-canvas.is-editing .employee-pins,.floor-map-canvas.is-editing .station-signal-dots{display:none}.floor-map-canvas.is-editing.tool-geozone .station-zone,.floor-map-canvas.is-editing.tool-geozone .geozone-label{pointer-events:none}.floor-map-canvas.is-editing.tool-geozone .station-zone{opacity:.72}.map-canvas-tools{position:absolute;z-index:20;left:14px;top:14px;display:inline-flex;gap:3px;padding:4px;border:1px solid var(--line);border-radius:8px;background:#fffffff5;box-shadow:0 8px 20px #17202a24}.map-canvas-tools button{min-height:36px;display:inline-flex;align-items:center;gap:7px;padding:7px 10px;border:0;border-radius:6px;color:var(--muted);background:transparent;font-weight:800}.map-canvas-tools button:hover{color:var(--brand);background:var(--brand-soft)}.map-canvas-tools button.active{color:#fff;background:var(--brand)}.geozone-direct-controls{position:absolute;z-index:14;top:0;right:0;bottom:0;left:0;pointer-events:none}.geozone-vertex-control,.geozone-midpoint-control,.geozone-draft-control{position:absolute;display:grid;place-items:center;transform:translate(-50%,-50%);border-radius:50%;touch-action:none}.geozone-vertex-control{width:18px;height:18px;pointer-events:auto;border:3px solid #ffffff;background:var(--brand);box-shadow:0 0 0 1px var(--brand),0 3px 8px #17202a33;cursor:grab}.geozone-vertex-control:active{cursor:grabbing}.geozone-midpoint-control{width:22px;height:22px;pointer-events:auto;border:1px solid rgba(6,52,81,.55);color:var(--brand);background:#fff;opacity:0;transition:opacity .15s ease}.geozone-direct-controls:hover .geozone-midpoint-control,.geozone-midpoint-control:focus-visible{opacity:1}.geozone-draft-control{z-index:15;width:18px;height:18px;border:3px solid #ffffff;color:#fff;background:var(--brand);box-shadow:0 0 0 1px var(--brand)}.geozone-draft-control.first{width:24px;height:24px}.pilot-station-edit-layer{position:absolute;z-index:8;top:0;right:0;bottom:0;left:0;pointer-events:none}.station-calibration-overlay{position:absolute;width:46%;aspect-ratio:1;transform:translate(-50%,-50%);pointer-events:none}.calibration-ring{position:absolute;left:50%;top:50%;display:block;transform:translate(-50%,-50%);border-radius:50%}.calibration-ring.extended{z-index:0;width:96%;height:96%;border:2px dashed rgba(179,107,0,.55);background:#b36b0012}.calibration-ring.near{z-index:1;width:43%;height:43%;border:2px solid rgba(15,123,95,.62);background:#0f7b5f1a}.calibration-ring span{position:absolute;left:50%;top:6px;padding:3px 6px;transform:translate(-50%);border-radius:999px;color:var(--text);background:#fffffff0;box-shadow:0 2px 6px #17202a1f;font-size:.66rem;font-style:normal;font-weight:900;white-space:nowrap}.calibration-point{position:absolute;z-index:2;top:50%;display:grid;justify-items:center;gap:4px;transform:translate(-50%,-50%)}.calibration-point i{width:9px;height:9px;border:2px solid #ffffff;border-radius:50%;background:var(--amber);box-shadow:0 0 0 1px #b36b00a6}.calibration-point:first-of-type i{background:var(--green)}.calibration-point b{padding:2px 4px;border-radius:4px;color:var(--text);background:#ffffffeb;font-size:.62rem;white-space:nowrap}.map-station-marker{position:absolute;z-index:4;display:grid;justify-items:center;gap:6px;max-width:150px;padding:0;transform:translate(-50%,-50%);border:0;color:var(--brand);background:transparent;pointer-events:auto;text-align:center}.map-station-marker>span{width:44px;height:44px;display:grid;place-items:center;border:4px solid #ffffff;border-radius:50%;color:#fff;background:var(--brand);box-shadow:0 0 0 2px var(--brand),0 8px 18px #17202a3d}.map-station-marker strong{padding:4px 7px;border-radius:6px;color:var(--text);background:#fffffff2;box-shadow:0 3px 9px #17202a21;font-size:.74rem}.map-station-marker.is-draggable{cursor:grab;touch-action:none}.map-station-marker.is-draggable:active{cursor:grabbing}.map-station-marker.is-active>span{background:var(--green);box-shadow:0 0 0 3px #0f7b5f47,0 8px 18px #17202a3d}.floor-map-canvas.is-editing.tool-geozone .map-station-marker{opacity:.72;pointer-events:none}.station-range-rings{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none}.station-range-ring{position:absolute;left:50%;top:50%;display:block;transform:translate(-50%,-50%);border-radius:50%}.station-range-ring.near{width:78%;height:72%;border:2px solid rgba(15,123,95,.36);background:#0f7b5f0d}.station-range-ring.extended{width:calc(100% + 58px);height:calc(100% + 58px);border:2px dashed rgba(6,52,81,.34);background:#06345109}.station-range-ring span{position:absolute;right:8px;top:8px;padding:2px 5px;border-radius:999px;background:#ffffffeb;color:#425466;font-size:.62rem;font-weight:900}.station-zone.green{border-color:#0f7b5f8c;background:#f3fbf8}.station-zone.blue{border-color:#2457a673;background:#f4f7fd}.station-zone.amber{border-color:#b36b0080;background:#fff9ee}.station-zone-header{position:relative;z-index:2;display:flex;justify-content:space-between;gap:10px;align-items:center}.station-zone-header strong{font-size:clamp(.86rem,1vw,1rem)}.station-zone-header span{min-width:30px;min-height:30px;display:grid;place-items:center;border-radius:50%;background:#17202a;color:#fff;font-weight:800}.station-zone small{position:relative;z-index:2;color:var(--muted);font-weight:700;margin-top:4px}.station-signal-dots{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none}.station-signal-dot{position:absolute;width:7px;height:7px;transform:translate(-50%,-50%);border-radius:50%;background:#cbd5df;box-shadow:0 0 0 2px #fff}.station-signal-dot.active{background:var(--green)}.station-signal-dot.warning{background:var(--amber)}.station-signal-dot.passby{background:#64748b}.gateway-pins{position:relative;z-index:2;display:flex;gap:6px;align-self:center;flex-wrap:wrap}.gateway-pin{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:#fff;background:var(--blue);border:2px solid #ffffff;box-shadow:0 4px 10px #17202a2e}.gateway-pin.offline{background:var(--red)}.employee-pins{position:relative;z-index:2;min-height:42px}.employee-pin{position:absolute;bottom:0;width:38px;height:38px;border:2px solid #ffffff;border-radius:50%;background:var(--green);color:#fff;font-size:.72rem;font-weight:900;box-shadow:0 8px 18px #17202a33}.employee-pin.possible_exit{background:var(--amber)}.employee-pin.absent{background:var(--red)}.employee-pin.passby{background:#64748b}.employee-pin.out_of_schedule,.employee-pin.lost_badge{background:var(--red)}.map-agent{position:absolute;z-index:8;width:42px;height:42px;transform:translate(-50%,-50%);border-radius:50%;border:3px solid #ffffff;display:grid;place-items:center;padding:0;background:var(--green);color:#fff;box-shadow:0 10px 24px #17202a3d;transition:left .65s ease,top .65s ease,background .2s ease}.map-agent span{display:grid;place-items:center;width:100%;height:100%;font-size:.76rem;font-weight:900}.ble-map-tag{position:absolute;z-index:10;width:44px;height:44px;display:grid;place-items:center;padding:0;transform:translate(-50%,-50%);border:4px solid #ffffff;border-radius:50%;color:#fff;background:var(--green);box-shadow:0 0 0 2px #0f7b5f73,0 9px 20px #17202a3b}.ble-map-tag.extended{background:var(--amber);box-shadow:0 0 0 2px #b36b006b,0 9px 20px #17202a3b}.ble-map-tag.outside{background:var(--red);box-shadow:0 0 0 2px #b4231866,0 9px 20px #17202a3b}.ble-map-tag.at-gateway{transform:translate(-50%,-135%)}.ble-map-tag span{font-size:.72rem;font-weight:900;letter-spacing:0}.map-agent.candidate{border-style:dashed}.map-agent.possible_exit{background:var(--amber)}.map-agent.passby{background:#64748b}.map-agent.out_of_schedule,.map-agent.lost_badge,.map-agent.has-alert{background:var(--red)}.map-agent.confirmed:after{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px;border-radius:50%;border:2px solid rgba(15,123,95,.24)}.map-agent.scenario-visual_demo.agent-ana{animation-name:visual-demo-ana;animation-timing-function:linear;animation-iteration-count:infinite}.map-agent.scenario-visual_demo.agent-bruno{animation-name:visual-demo-bruno;animation-timing-function:linear;animation-iteration-count:infinite}.map-agent.scenario-visual_demo.agent-carla{animation-name:visual-demo-carla;animation-timing-function:linear;animation-iteration-count:infinite}.map-agent.scenario-visual_demo.agent-lost{animation-name:visual-demo-lost;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes visual-demo-ana{0%{left:12%;top:89%}10%{left:20%;top:74%}20%,to{left:40%;top:31%}}@keyframes visual-demo-bruno{0%,30%{left:72%;top:31%}43%,57%{left:16%;top:63%}73%,to{left:43%;top:73%}}@keyframes visual-demo-carla{0%,7%{left:12%;top:89%}18%,48%{left:43%;top:73%}65%{left:79%;top:72%}87%{left:94%;top:87%}to{left:12%;top:89%}}@keyframes visual-demo-lost{0%,63%{left:94%;top:87%}73%,to{left:79%;top:72%}}.map-side-panel{position:sticky;top:18px}.ble-activity-panel{display:grid;gap:11px;margin-bottom:16px;padding-bottom:16px;border-bottom:1px solid var(--line)}.ble-activity-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.ble-activity-heading>div{min-width:0;display:grid;gap:2px}.ble-activity-heading h3{margin:0;font-size:.9rem}.ble-activity-heading small,.ble-activity-window small{color:var(--muted)}.ble-activity-heading>span{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:.7rem;font-weight:800;white-space:nowrap}.ble-activity-heading>span i{width:8px;height:8px;border-radius:50%;background:#a8b3bd}.ble-activity-heading>span.live{color:var(--green)}.ble-activity-heading>span.live i{background:var(--green);box-shadow:0 0 0 3px #0f7b5f1f}.ble-activity-windows{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.ble-activity-window{min-width:0;display:grid;gap:5px}.ble-activity-window>div{display:flex;align-items:baseline;justify-content:space-between;gap:6px}.ble-activity-window strong{color:var(--brand);font-size:.8rem}.ble-activity-window>div span,.ble-activity-window small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.68rem}.ble-activity-track{height:6px;overflow:hidden;border-radius:999px;background:#e7edf2}.ble-activity-track i{display:block;height:100%;border-radius:inherit;background:var(--green);transition:width .25s ease}.map-editor-panel{display:flex;flex-direction:column;min-height:780px}.map-editor-tools{width:100%;margin-bottom:16px}.map-editor-section{display:grid;gap:12px}.editor-context{padding-bottom:16px;border-bottom:1px solid var(--line)}.context-title{display:flex;align-items:center;gap:10px}.context-title>span{width:34px;height:34px;display:grid;flex:0 0 34px;place-items:center;border-radius:50%;color:#fff;background:var(--brand)}.context-title>div{min-width:0;display:grid;gap:2px}.context-title strong,.context-title small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.context-title small{color:var(--muted)}.empty-context{justify-items:center;padding:18px 8px 20px;color:var(--muted);text-align:center}.empty-context strong{color:var(--text)}.drawing-progress{display:flex;align-items:baseline;gap:7px;color:var(--muted)}.drawing-progress strong{color:var(--brand);font-size:1.45rem}.station-coordinate-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.station-coordinate-row span{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border:1px solid var(--line);border-radius:6px;color:var(--muted);background:var(--panel-2)}.station-coordinate-row b{color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.station-radius-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 10px;border-left:3px solid var(--green);border-radius:4px;color:var(--muted);background:#eef8f4;font-size:.8rem}.station-radius-summary strong{color:var(--green)}.calibration-list{display:grid;gap:7px}.calibration-list>strong{margin-bottom:2px;font-size:.82rem}.calibration-list>div{display:grid;grid-template-columns:38px minmax(0,1fr);gap:8px;align-items:center}.calibration-list span{color:var(--brand);font-weight:900}.calibration-list code{min-width:0;overflow:hidden;color:var(--muted);font-size:.74rem;text-overflow:ellipsis}.danger-action{color:var(--red)}.map-object-list{margin-top:16px}.object-list-heading{display:flex!important;align-items:center!important;justify-content:space-between;padding:0 2px 4px!important;border:0!important}.object-list-heading span{min-width:24px;height:24px;display:grid;place-items:center;border-radius:50%;color:#fff;background:var(--brand);font-size:.72rem;font-weight:900}.editor-instruction{margin:0;color:var(--muted);font-size:.84rem;line-height:1.45}.station-position-list,.geozone-editor-list{display:grid;gap:7px}.station-position-list>button{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:42px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;color:var(--text);background:#fff;text-align:left}.station-position-list>button.active{border-color:var(--brand);background:var(--brand-soft)}.station-position-list small{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.drawing-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.drawing-actions strong{width:100%;color:var(--brand);font-size:.8rem}.geozone-editor-list>div{display:grid;grid-template-columns:minmax(0,1fr) 38px;gap:6px;align-items:center;padding:4px;border:1px solid var(--line);border-radius:8px}.geozone-editor-list>div.active{border-color:var(--brand);background:var(--brand-soft)}.geozone-editor-list>div>button:first-child{min-width:0;display:grid;gap:2px;border:0;padding:5px;color:var(--text);background:transparent;text-align:left}.geozone-editor-list strong,.geozone-editor-list small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.geozone-editor-list small{color:var(--muted)}.editor-message{margin:12px 0 0;padding:9px 10px;border-radius:8px;color:var(--brand);background:var(--brand-soft);font-size:.8rem;font-weight:700}.map-save-actions{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:8px;margin-top:auto;padding-top:16px;border-top:1px solid var(--line)}.map-save-actions .primary{margin-top:0}.geozone-monitor-list,.geozone-event-list{display:grid;gap:7px;margin-bottom:16px}.geozone-monitor-list h3,.geozone-event-list h3{margin:0 0 2px;color:var(--muted);font-size:.75rem;text-transform:uppercase}.geozone-monitor-list>button{display:grid;grid-template-columns:minmax(0,1fr) 30px;gap:9px;align-items:center;min-height:46px;padding:7px 9px;border:1px solid var(--line);border-radius:8px;color:var(--text);background:#fff;text-align:left}.geozone-monitor-list span,.geozone-monitor-list strong,.geozone-monitor-list small{min-width:0;display:block}.geozone-monitor-list small{margin-top:3px;overflow:hidden;color:var(--muted);text-overflow:ellipsis;white-space:nowrap}.geozone-monitor-list b{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;color:#fff;background:var(--brand)}.geozone-event-list>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:8px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line)}.geozone-event-list i{padding:4px 6px;border-radius:6px;color:var(--green);background:#e5f4ef;font-size:.68rem;font-style:normal;font-weight:900;text-align:center}.geozone-event-list .exit i{color:var(--amber);background:#fff3dc}.geozone-event-list strong,.geozone-event-list small{display:block}.geozone-event-list small{margin-top:2px;color:var(--muted);font-size:.72rem}.sim-map-summary{display:grid;gap:3px;margin-bottom:12px;padding:10px;border-radius:8px;background:var(--brand-soft);color:var(--brand)}.sim-map-summary small{color:#3c5b6d;font-weight:800}.live-agent-list{display:grid;gap:8px;margin-bottom:12px}.live-agent-row{display:grid;grid-template-columns:36px minmax(0,1fr);gap:9px;align-items:center;padding:8px;border:1px solid var(--line);border-radius:8px}.live-agent-row>span{width:32px;height:32px;display:grid;place-items:center;border-radius:50%;background:var(--green);color:#fff;font-weight:900;font-size:.72rem}.live-agent-row.possible_exit>span{background:var(--amber)}.live-agent-row.passby>span{background:#64748b}.live-agent-row.out_of_schedule>span,.live-agent-row.lost_badge>span{background:var(--red)}.live-agent-row strong,.live-agent-row small{display:block}.live-agent-row small{color:var(--muted);margin-top:2px}.map-detail-list{display:grid;gap:10px}.map-detail-card{display:grid;gap:8px;border:1px solid var(--line);border-radius:8px;padding:12px}.map-detail-card>div{display:grid;gap:2px}.map-detail-card>div>strong,.map-detail-card>div>small{display:block}.map-detail-card small,.map-detail-card p{color:var(--muted)}.map-detail-card p{margin:0;font-size:.84rem}.map-detail-card em{color:var(--ink);font-style:normal;font-weight:800}@media (max-width: 1040px){.shell{grid-template-columns:84px minmax(0,1fr)}.brand div,.nav-section-title,.sidebar span:not(.brand-mark),.logout span{display:none}.workspace-grid,.two-column,.floor-layout,.simulator-grid{grid-template-columns:1fr}.scenario-cards,.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.map-side-panel{position:static}.geozone-midpoint-control{opacity:1}}@media (max-width: 720px){.ble-device-tabs button{min-height:66px;flex-direction:column;gap:3px;padding:6px 4px;text-align:center}.ble-device-tabs button span{line-height:1.15}.shell{grid-template-columns:1fr}.sidebar{position:sticky;top:0;z-index:10;display:block;min-width:0;max-width:100vw;overflow:hidden;padding:10px}.sidebar nav{display:flex;width:100%;min-width:0;overflow:auto;gap:8px}.nav-section{display:flex;gap:6px;flex:0 0 auto}.brand,.logout{display:none}.main{padding:14px}.form-grid,.report-controls,.map-selectors,.stats-grid,.compact-stats{grid-template-columns:1fr}.map-toolbar,.floor-map-heading,.ble-live-hero,.ble-live-toolbar,.ble-setup-hero,.simulator-hero{align-items:stretch;flex-direction:column}.map-toolbar-actions,.map-view-switch{width:100%}.map-toolbar-actions .icon-button{flex:0 0 38px}.map-save-actions{grid-template-columns:1fr}.drawing-actions .secondary,.drawing-actions .primary{flex:1 1 120px;margin-top:0}.scenario-cards{grid-template-columns:1fr}.floor-map-canvas{min-height:640px;aspect-ratio:auto}.map-canvas-tools{left:8px;right:8px;top:8px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.map-canvas-tools button{justify-content:center;min-width:0;padding:6px}.map-canvas-tools button span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.7rem}.station-calibration-overlay{width:72%}.calibration-ring span{display:none}.station-zone{min-width:0;padding:9px}.geozone-label{max-width:94px;min-height:26px;padding:4px 5px 4px 7px}.geozone-label strong{font-size:.66rem}.geozone-label span{min-width:20px;height:20px}.station-zone-header{align-items:flex-start}.station-zone-header strong{max-width:calc(100% - 26px);font-size:.72rem}.station-zone-header span{min-width:24px;min-height:24px;font-size:.72rem}.station-zone small{font-size:.62rem}.floor-map-canvas.is-editing .station-range-ring span{display:none}.command-list div{grid-template-columns:1fr}.search-field{min-width:0;width:100%}.mode-options,.add-device-row,.proximity-setup-grid,.proximity-zone-editor,.log-path-grid{grid-template-columns:1fr}}
