:root{--primary:#0B3A53;--primary-dark:#082B3D;--accent:#0E7490;--success:#168A5B;--warning:#D97706;--danger:#C43D3D;--surface:#fff;--bg:#F3F6F8;--text:#17242d;--muted:#667782;--line:#dfe7eb;--shadow:0 10px 30px rgba(22,45,58,.10);--radius:18px;--safe-bottom:env(safe-area-inset-bottom,0px);--safe-top:env(safe-area-inset-top,0px);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;color-scheme:light}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);overscroll-behavior-y:none}body{font-size:15px;-webkit-tap-highlight-color:transparent}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.55;cursor:not-allowed}a{color:inherit}.hidden{display:none!important}.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}
#boot{position:fixed;inset:0;display:grid;place-items:center;background:var(--bg);z-index:9999}.boot-card{text-align:center}.logo-mark{width:68px;height:68px;border-radius:22px;display:grid;place-items:center;background:linear-gradient(145deg,var(--primary),var(--accent));color:#fff;box-shadow:var(--shadow);font-weight:900;font-size:23px;letter-spacing:-1px}.spinner{width:28px;height:28px;margin:22px auto 0;border:3px solid #dce6eb;border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
/* Login: mismo lenguaje visual de la PWA biométrica: identidad arriba, tarjeta amplia, controles táctiles */
.login-page{min-height:100dvh;background:linear-gradient(165deg,var(--primary) 0,var(--primary-dark) 34%,var(--bg) 34.2%,var(--bg) 100%);padding:max(28px,var(--safe-top)) 18px 28px;display:flex;flex-direction:column}.login-brand{color:#fff;padding:15px 8px 34px;display:flex;align-items:center;gap:15px}.login-brand .logo-mark{box-shadow:0 15px 38px rgba(0,0,0,.22);background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.22)}.login-brand h1{font-size:24px;margin:0 0 4px;line-height:1.05}.login-brand p{margin:0;color:rgba(255,255,255,.78);font-size:13px}.login-card{width:min(100%,440px);margin:0 auto;background:var(--surface);border-radius:24px;padding:24px 20px;box-shadow:var(--shadow)}.login-card h2{margin:0 0 5px;font-size:21px}.login-card>p{margin:0 0 22px;color:var(--muted)}
.field{display:block;margin:0 0 15px}.field>span,.field-label{display:block;font-weight:750;font-size:13px;margin:0 0 7px;color:#31434e}.input,.select,.textarea{width:100%;min-height:50px;border:1px solid var(--line);background:#fbfcfd;border-radius:14px;padding:12px 14px;color:var(--text);outline:none;transition:.18s}.textarea{min-height:90px;resize:vertical}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(14,116,144,.12);background:#fff}.password-wrap{position:relative}.password-wrap .input{padding-right:52px}.icon-button.eye{position:absolute;right:5px;top:5px;border:0;background:transparent;width:42px;height:40px;color:var(--muted)}
.btn{min-height:48px;border:0;border-radius:14px;padding:11px 16px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .08s,filter .15s;text-decoration:none}.btn:active{transform:scale(.985)}.btn-primary{background:var(--primary);color:#fff}.btn-accent{background:var(--accent);color:#fff}.btn-success{background:var(--success);color:#fff}.btn-danger{background:var(--danger);color:#fff}.btn-soft{background:#e9f1f4;color:var(--primary)}.btn-ghost{background:transparent;color:var(--primary);border:1px solid var(--line)}.btn-block{width:100%}.btn-sm{min-height:40px;padding:8px 12px;border-radius:12px;font-size:13px}.login-help{font-size:12px;color:var(--muted);line-height:1.5;margin:18px 3px 0}.form-error{border-radius:12px;background:#fff0f0;color:#8f2929;padding:11px 13px;margin:0 0 14px;font-size:13px}.security-note{display:flex;gap:9px;align-items:flex-start;color:var(--muted);font-size:12px;margin-top:16px}.security-note svg{flex:0 0 auto;color:var(--success)}
/* App shell */
.app-shell{min-height:100dvh;padding-bottom:calc(82px + var(--safe-bottom))}.topbar{height:calc(64px + var(--safe-top));padding:max(8px,var(--safe-top)) 14px 8px;background:var(--primary);color:#fff;display:flex;align-items:flex-end;gap:10px;position:sticky;top:0;z-index:80;box-shadow:0 4px 18px rgba(5,34,49,.16)}.topbar-inner{height:48px;display:flex;align-items:center;width:100%;gap:10px}.topbar-brand{min-width:0;flex:1}.topbar-brand b{display:block;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-brand small{display:block;opacity:.72;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-icon{position:relative;width:43px;height:43px;border:0;border-radius:13px;background:rgba(255,255,255,.11);color:#fff;display:grid;place-items:center}.badge-count{position:absolute;top:-4px;right:-3px;min-width:19px;height:19px;padding:0 5px;border-radius:20px;background:var(--danger);color:#fff;font-size:10px;font-weight:900;display:grid;place-items:center;border:2px solid var(--primary)}
.main{width:min(100%,900px);margin:0 auto;padding:14px}.screen{display:none;animation:fade .18s ease}.screen.active{display:block}@keyframes fade{from{opacity:.6;transform:translateY(3px)}}.bottom-nav{position:fixed;left:0;right:0;bottom:0;height:calc(68px + var(--safe-bottom));padding:4px 8px var(--safe-bottom);z-index:100;background:rgba(255,255,255,.97);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(5,1fr);box-shadow:0 -8px 30px rgba(30,58,72,.08);backdrop-filter:blur(10px)}.nav-btn{border:0;background:transparent;color:#71808a;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-width:0;font-size:10px;font-weight:750}.nav-btn svg{width:22px;height:22px}.nav-btn.active{color:var(--primary)}.nav-btn.active svg{filter:drop-shadow(0 2px 4px rgba(11,58,83,.18))}
.section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:3px 1px 12px}.section-head h2{margin:0;font-size:19px}.section-head p{margin:2px 0 0;color:var(--muted);font-size:12px}.section-title{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:850;margin:18px 2px 9px}
.card{background:var(--surface);border:1px solid #e8eef1;border-radius:var(--radius);box-shadow:0 5px 20px rgba(29,56,70,.06);padding:15px}.card+.card{margin-top:11px}.hero{background:linear-gradient(135deg,var(--primary),#145e78);color:#fff;border:0;padding:19px}.hero-top{display:flex;justify-content:space-between;gap:12px}.hero h2{margin:0 0 4px;font-size:21px}.hero p{margin:0;opacity:.8;font-size:12px}.live-chip{height:30px;border-radius:18px;padding:0 10px;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.13);font-size:11px;font-weight:800}.live-dot{width:8px;height:8px;border-radius:50%;background:#63e6a9;box-shadow:0 0 0 4px rgba(99,230,169,.14)}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:17px}.stat{background:rgba(255,255,255,.10);padding:11px 9px;border-radius:14px}.stat strong{display:block;font-size:23px}.stat span{font-size:10px;opacity:.78;font-weight:750}.quick-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.quick{min-height:91px;border:1px solid var(--line);background:#fff;border-radius:17px;padding:14px;text-align:left;display:flex;flex-direction:column;gap:8px;color:var(--text)}.quick svg{color:var(--accent);width:24px;height:24px}.quick b{font-size:14px}.quick small{color:var(--muted);font-size:11px;line-height:1.25}
.status-row{display:flex;gap:7px;overflow:auto;padding:0 0 8px;scrollbar-width:none}.status-row::-webkit-scrollbar{display:none}.filter-chip{flex:0 0 auto;min-height:38px;border-radius:20px;border:1px solid var(--line);background:#fff;padding:8px 12px;font-size:12px;font-weight:750;color:#596b75}.filter-chip.active{background:var(--primary);border-color:var(--primary);color:#fff}.search-box{position:relative;margin-bottom:10px}.search-box .input{padding-left:43px;background:#fff}.search-box svg{position:absolute;left:14px;top:14px;color:#81909a;width:21px;height:21px}
.device-list{display:flex;flex-direction:column;gap:9px}.device-card{width:100%;border:1px solid #e5ecef;background:#fff;border-radius:17px;padding:13px;display:grid;grid-template-columns:48px 1fr auto;gap:11px;text-align:left;align-items:center;color:var(--text)}.device-icon{width:48px;height:48px;border-radius:15px;display:grid;place-items:center;background:#edf3f6;color:#75848d;position:relative}.device-icon .dot{position:absolute;right:3px;bottom:3px;width:11px;height:11px;border-radius:50%;border:2px solid #fff}.device-icon.online{color:var(--success);background:#e8f7f0}.device-icon.online .dot{background:var(--success)}.device-icon.offline .dot{background:#96a2aa}.device-icon.ack .dot,.device-icon.unknown .dot{background:var(--warning)}.device-main{min-width:0}.device-main b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}.device-meta{display:flex;gap:8px;align-items:center;color:var(--muted);font-size:11px;margin-top:3px;white-space:nowrap;overflow:hidden}.device-meta span{overflow:hidden;text-overflow:ellipsis}.device-speed{text-align:right;min-width:52px}.device-speed strong{font-size:18px;display:block}.device-speed small{color:var(--muted);font-size:9px}.empty{padding:30px 16px;text-align:center;color:var(--muted)}.empty svg{width:45px;height:45px;opacity:.55;margin-bottom:8px}.empty b{display:block;color:#40515c;margin-bottom:4px}
.map-card{padding:0;overflow:hidden;position:relative}.map-toolbar{position:absolute;z-index:20;left:10px;right:10px;top:10px;display:flex;gap:7px;pointer-events:none}.map-toolbar>*{pointer-events:auto}.map-pill{border:0;background:rgba(255,255,255,.95);box-shadow:0 5px 18px rgba(13,43,58,.14);height:42px;border-radius:14px;padding:0 13px;display:flex;align-items:center;gap:7px;color:var(--primary);font-size:12px;font-weight:800}.map-pill.icon-only{width:42px;padding:0;justify-content:center}.map-stage{height:calc(100dvh - 164px);min-height:420px;background:#dfe9ed}.gm-map{position:relative;overflow:hidden;touch-action:none;background:#dce7eb;user-select:none}.gm-tiles,.gm-markers,.gm-overlay{position:absolute;inset:0}.gm-tiles img{position:absolute;width:256px;height:256px;max-width:none;will-change:transform}.gm-tiles img.tile-error{background:#e6eef1}.gm-overlay{pointer-events:none;overflow:visible}.gm-markers{pointer-events:none}.gm-marker{position:absolute;left:0;top:0;width:38px;height:38px;border:0;border-radius:50%;background:var(--success);color:#fff;display:grid;place-items:center;pointer-events:auto;box-shadow:0 5px 14px rgba(20,48,62,.28);border:3px solid #fff;will-change:transform;transform-origin:center}.gm-marker.status-offline{background:#84929a}.gm-marker.status-ack,.gm-marker.status-unknown{background:var(--warning)}.gm-marker.selected{width:46px;height:46px;box-shadow:0 0 0 5px rgba(14,116,144,.20),0 7px 18px rgba(20,48,62,.28)}.gm-car{font-size:17px;line-height:1}.gm-controls{position:absolute;right:10px;bottom:38px;z-index:15;display:flex;flex-direction:column;box-shadow:0 4px 14px rgba(20,48,62,.18);border-radius:12px;overflow:hidden}.gm-controls button{width:42px;height:40px;background:#fff;border:0;color:var(--primary);font-weight:900;font-size:20px}.gm-controls button+button{border-top:1px solid var(--line)}.gm-attribution{position:absolute;right:4px;bottom:2px;z-index:11;font-size:8px;background:rgba(255,255,255,.8);padding:2px 4px;color:#50616b}.map-popup-card{position:absolute;left:10px;right:10px;bottom:10px;z-index:25;background:#fff;border-radius:17px;box-shadow:0 8px 30px rgba(11,45,62,.22);padding:13px;display:grid;grid-template-columns:1fr auto;gap:8px}.map-popup-card b{font-size:14px}.map-popup-card p{font-size:11px;color:var(--muted);margin:4px 0 0}
.event-list{display:flex;flex-direction:column;gap:9px}.event-card{border:1px solid #e5ecef;background:#fff;border-radius:17px;padding:13px;display:grid;grid-template-columns:42px 1fr auto;gap:10px;align-items:start}.event-card.unread{border-left:4px solid var(--accent)}.event-icon{width:42px;height:42px;border-radius:13px;background:#fff2e5;color:var(--warning);display:grid;place-items:center}.event-icon.critical{background:#ffebeb;color:var(--danger)}.event-card b{font-size:13px}.event-card p{margin:4px 0;color:#435560;font-size:12px}.event-card small{color:var(--muted);font-size:10px}.event-speed{font-size:11px;font-weight:800;color:var(--primary);white-space:nowrap}
.menu-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.menu-card{border:1px solid var(--line);border-radius:17px;background:#fff;min-height:110px;padding:15px;text-align:left;color:var(--text);display:flex;flex-direction:column;gap:9px}.menu-card svg{width:25px;height:25px;color:var(--accent)}.menu-card b{font-size:14px}.menu-card small{font-size:11px;color:var(--muted);line-height:1.25}.profile-card{display:flex;align-items:center;gap:12px}.avatar{width:48px;height:48px;border-radius:16px;background:var(--primary);color:#fff;display:grid;place-items:center;font-weight:900;font-size:18px}.profile-card b{display:block}.profile-card small{color:var(--muted)}
/* sheets / modals */
.overlay-backdrop{position:fixed;inset:0;z-index:220;background:rgba(10,30,41,.52);opacity:0;pointer-events:none;transition:.18s}.overlay-backdrop.show{opacity:1;pointer-events:auto}.sheet{position:fixed;z-index:230;left:0;right:0;bottom:0;background:#fff;border-radius:24px 24px 0 0;max-height:92dvh;transform:translateY(103%);transition:.22s ease;box-shadow:0 -12px 40px rgba(8,38,53,.18);padding-bottom:var(--safe-bottom);overflow:hidden}.sheet.show{transform:translateY(0)}.sheet-handle{width:42px;height:5px;border-radius:6px;background:#dbe2e6;margin:8px auto 4px}.sheet-head{display:flex;align-items:center;gap:10px;padding:9px 16px 12px;border-bottom:1px solid var(--line)}.sheet-head>div{flex:1;min-width:0}.sheet-head h3{margin:0;font-size:17px}.sheet-head p{margin:2px 0 0;color:var(--muted);font-size:11px}.icon-button{width:42px;height:42px;border:1px solid var(--line);border-radius:13px;background:#fff;color:var(--primary);display:grid;place-items:center}.sheet-body{overflow:auto;max-height:calc(92dvh - 70px - var(--safe-bottom));padding:15px}.sheet-body.no-pad{padding:0}.sheet-actions{display:flex;gap:8px;position:sticky;bottom:0;background:linear-gradient(transparent,#fff 16%);padding:20px 0 3px}.sheet-actions .btn{flex:1}.kv{display:grid;grid-template-columns:1fr auto;gap:9px 13px;padding:5px 0;font-size:12px}.kv span{color:var(--muted)}.kv strong{text-align:right;max-width:60vw;overflow-wrap:anywhere}.sensor-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.sensor{background:#f5f8f9;border:1px solid #e7edef;border-radius:14px;padding:11px}.sensor span{display:block;color:var(--muted);font-size:10px;margin-bottom:4px}.sensor strong{font-size:13px}.action-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.action-btn{min-height:64px;border:1px solid var(--line);border-radius:15px;background:#fff;color:var(--primary);font-weight:800;font-size:12px;display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center}.action-btn svg{width:22px;height:22px;color:var(--accent)}.action-btn.danger{color:var(--danger)}.action-btn.danger svg{color:var(--danger)}
.track-map,.history-map,.geo-map{height:48dvh;min-height:310px;background:#dce7eb}.track-panel{padding:13px}.track-info{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.track-stat{background:#f4f7f9;border-radius:13px;padding:9px;text-align:center}.track-stat strong{font-size:16px;display:block}.track-stat small{font-size:9px;color:var(--muted)}.playback-controls{display:flex;align-items:center;gap:8px;margin-top:12px}.playback-controls input[type=range]{flex:1}.playback-time{font-size:11px;color:var(--muted);min-width:70px}.draw-hint{background:#eef6f8;color:#36555f;border-radius:12px;padding:10px 12px;font-size:11px;margin-bottom:10px}.point-list{font-size:11px;color:var(--muted);max-height:90px;overflow:auto}.toggle-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid #edf1f3}.toggle-row>div b{display:block;font-size:13px}.toggle-row>div small{color:var(--muted);font-size:10px}.switch{position:relative;width:48px;height:28px;flex:0 0 auto}.switch input{opacity:0;width:0;height:0}.switch span{position:absolute;inset:0;border-radius:20px;background:#cbd5da;transition:.2s}.switch span:after{content:"";position:absolute;width:22px;height:22px;left:3px;top:3px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 2px 5px rgba(0,0,0,.18)}.switch input:checked+span{background:var(--success)}.switch input:checked+span:after{transform:translateX(20px)}
.toast-stack{position:fixed;z-index:400;left:12px;right:12px;top:calc(72px + var(--safe-top));display:flex;flex-direction:column;align-items:center;gap:8px;pointer-events:none}.toast{width:min(100%,440px);background:#233945;color:#fff;border-radius:14px;padding:11px 13px;box-shadow:0 8px 28px rgba(0,0,0,.2);font-size:12px;display:flex;gap:9px;align-items:center;pointer-events:auto;animation:toastIn .2s ease}.toast.success{background:#126b49}.toast.error{background:#9b3434}.toast.warn{background:#9a5a08}@keyframes toastIn{from{opacity:0;transform:translateY(-7px)}}.skeleton{height:74px;border-radius:16px;background:linear-gradient(90deg,#edf2f4 25%,#f7f9fa 37%,#edf2f4 63%);background-size:400% 100%;animation:shine 1.2s infinite}@keyframes shine{to{background-position:-100% 0}}.divider{height:1px;background:var(--line);margin:14px 0}.info-banner{border-radius:15px;background:#eef6f8;padding:12px 13px;color:#375862;font-size:12px;line-height:1.45}.warning-banner{background:#fff5e8;color:#77531f}.danger-banner{background:#fff0f0;color:#7c3434}.code{font:11px ui-monospace,SFMono-Regular,Consolas,monospace;background:#f0f4f6;padding:8px;border-radius:10px;word-break:break-all;color:#3c505b}.checkbox-list{display:flex;flex-direction:column;gap:7px;max-height:220px;overflow:auto}.check-card{display:flex;gap:10px;align-items:center;border:1px solid var(--line);border-radius:13px;padding:10px}.check-card input{width:20px;height:20px;accent-color:var(--accent)}.check-card span{font-size:12px;font-weight:700}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:9px}.form-row{display:grid;grid-template-columns:1fr;gap:10px}.form-row.cols2{grid-template-columns:1fr 1fr}.muted{color:var(--muted)}.small{font-size:11px}.center{text-align:center}.nowrap{white-space:nowrap}
.install-card{background:linear-gradient(135deg,#e8f4f7,#fff);border-color:#d4e9ee}.install-card .row{display:flex;align-items:center;gap:12px}.install-card .row>div{flex:1}.install-card h3{font-size:14px;margin:0 0 3px}.install-card p{font-size:11px;color:var(--muted);margin:0}.online-indicator{display:inline-flex;gap:5px;align-items:center;font-size:10px;font-weight:800;color:var(--success)}.online-indicator.offline{color:var(--danger)}
@media(min-width:650px){.main{padding:18px}.quick-grid,.menu-grid{grid-template-columns:repeat(4,1fr)}.device-list{display:grid;grid-template-columns:repeat(2,1fr)}.bottom-nav{left:50%;right:auto;width:min(100%,900px);transform:translateX(-50%);border-left:1px solid var(--line);border-right:1px solid var(--line)}.sheet{left:50%;right:auto;width:min(620px,100%);transform:translate(-50%,103%);border-radius:24px 24px 0 0}.sheet.show{transform:translate(-50%,0)}.sensor-grid{grid-template-columns:repeat(3,1fr)}.map-stage{height:calc(100dvh - 170px)}}
@media(display-mode:standalone){.install-only-browser{display:none!important}}

/* FOX GPS map markers v1.2.0 */
.gm-marker{background:transparent;color:#fff;border:0;box-shadow:none;border-radius:0;width:auto;height:auto;min-width:34px;min-height:34px;padding:0;display:grid;place-items:center;overflow:visible;transform-origin:center}
.gm-marker .gm-marker-visual{display:block;transform-origin:50% 50%;will-change:transform;filter:drop-shadow(0 4px 5px rgba(15,38,50,.30));transition:filter .15s ease,transform .2s linear}
.gm-marker.marker-arrow{min-width:38px;min-height:44px}
.gm-marker .gm-arrow{display:grid;place-items:center}
.gm-marker.marker-image{min-width:42px;min-height:42px}
.gm-marker-image{object-fit:contain;max-width:72px;max-height:82px;user-select:none;-webkit-user-drag:none}
.gm-marker-image.gm-icon-error{opacity:0}
.gm-marker.marker-default{width:38px;height:38px;border-radius:50%;background:var(--success);border:3px solid #fff;box-shadow:0 5px 14px rgba(20,48,62,.28)}
.gm-marker.marker-default.status-offline{background:#84929a}.gm-marker.marker-default.status-ack,.gm-marker.marker-default.status-unknown{background:var(--warning)}
.gm-marker.selected .gm-marker-visual{filter:drop-shadow(0 0 3px #fff) drop-shadow(0 0 7px rgba(14,116,144,.75)) drop-shadow(0 5px 6px rgba(15,38,50,.35))}
.gm-marker.marker-default.selected{width:46px;height:46px;box-shadow:0 0 0 5px rgba(14,116,144,.20),0 7px 18px rgba(20,48,62,.28)}

/* FOX GPS map parity v1.2: labels, tails and anchored quick popup */
.gm-marker-label{position:absolute;left:50%;bottom:calc(100% + 7px);transform:translateX(-50%);display:block;z-index:4;pointer-events:none;filter:none!important;white-space:nowrap}
.gm-marker-label.hidden{display:none}
.gm-marker-label i{display:block;font-style:normal;font-size:11px;line-height:1.15;font-weight:600;color:#17242c;background:rgba(255,255,255,.97);padding:5px 8px;border:1px solid rgba(38,57,67,.22);border-radius:5px;box-shadow:0 2px 8px rgba(24,44,55,.16)}
.gm-marker-label:before,.gm-marker-label:after{content:"";position:absolute;left:50%;transform:translateX(-50%);width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent}
.gm-marker-label:before{bottom:-7px;border-top:7px solid rgba(38,57,67,.25)}
.gm-marker-label:after{bottom:-6px;border-top:7px solid rgba(255,255,255,.97)}
.gm-marker.selected{z-index:12}.gm-marker.selected .gm-marker-label i{font-weight:800;border-color:rgba(14,116,144,.42);box-shadow:0 3px 12px rgba(14,116,144,.20)}
.gm-popup{position:absolute;z-index:30;width:min(320px,calc(100vw - 24px));max-height:min(62dvh,430px);overflow:auto;background:#fff;border:1px solid rgba(31,51,62,.18);border-radius:6px;box-shadow:0 10px 30px rgba(14,39,52,.28);pointer-events:auto;color:#23323a;-webkit-overflow-scrolling:touch}
.gm-popup:after,.gm-popup:before{content:"";position:absolute;left:50%;transform:translateX(-50%);width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent}
.gm-popup:not(.below):before{bottom:-11px;border-top:11px solid rgba(31,51,62,.18)}
.gm-popup:not(.below):after{bottom:-10px;border-top:10px solid #fff}
.gm-popup.below:before{top:-11px;border-bottom:11px solid rgba(31,51,62,.18)}
.gm-popup.below:after{top:-10px;border-bottom:10px solid #fff}
.map-quick-head{display:flex;align-items:center;min-height:43px;padding-left:13px;background:#fff;border-bottom:1px solid #edf1f3;position:sticky;top:0;z-index:2}
.map-quick-head>strong{font-size:14px;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}
.map-quick-actions{display:flex;align-self:stretch;margin-left:8px}.map-quick-actions button{width:43px;border:0;border-left:1px solid #edf1f3;background:#fff;color:#6c7b84;display:grid;place-items:center;padding:0}.map-quick-actions button:active{background:#f1f6f8;color:var(--accent)}
.map-quick-body{padding:9px 13px 8px}.map-quick-row{display:grid;grid-template-columns:minmax(88px,.85fr) minmax(0,1.65fr);gap:10px;padding:4px 0;align-items:start;font-size:11.5px;line-height:1.35}.map-quick-row>span{color:#596871}.map-quick-row>strong{font-weight:500;color:#37464e;overflow-wrap:anywhere}.map-quick-extra{border-top:1px solid #edf1f3;margin-top:5px;padding-top:5px}.map-quick-more{display:block;margin:3px auto -2px;border:0;background:transparent;color:#667780;font-size:15px;font-weight:900;line-height:22px;min-width:54px;height:26px}.map-quick-more:active{color:var(--accent)}
@media (max-width:420px){.gm-marker-label i{font-size:10.5px;padding:4px 7px}.gm-popup{width:min(310px,calc(100vw - 16px))}.map-quick-row{grid-template-columns:92px 1fr;font-size:11px}}
.map-quick-actions button.active{color:var(--accent);box-shadow:inset 0 -3px 0 var(--accent);background:#f8fbfc}
.map-coord-link{color:var(--accent);text-decoration:none;font-weight:600}.map-coord-link:active{text-decoration:underline}
.map-quick-mobile-actions{display:flex;gap:7px;margin-top:9px;padding-top:8px;border-top:1px solid #edf1f3}.map-quick-mobile-actions button{flex:1;min-height:38px;border:1px solid #dce6eb;border-radius:8px;background:#f8fafb;color:#344751;font-weight:700;font-size:11px;display:flex;gap:5px;align-items:center;justify-content:center}.map-quick-mobile-actions button:active{background:#edf5f7;color:var(--accent)}
.toggle-row{display:flex;align-items:center;gap:14px;padding:13px 2px;border-bottom:1px solid var(--line)}.toggle-row:last-child{border-bottom:0}.toggle-row>span{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.toggle-row b{font-size:13px}.toggle-row small{font-size:10.5px;color:var(--muted);line-height:1.35}.toggle-row input[type="checkbox"]{appearance:none;width:46px;height:27px;border-radius:16px;background:#cad5da;position:relative;flex:0 0 auto;transition:.18s}.toggle-row input[type="checkbox"]:before{content:"";position:absolute;width:21px;height:21px;border-radius:50%;background:white;top:3px;left:3px;box-shadow:0 1px 4px rgba(0,0,0,.2);transition:.18s}.toggle-row input[type="checkbox"]:checked{background:var(--accent)}.toggle-row input[type="checkbox"]:checked:before{transform:translateX(19px)}
.toggle-row{display:flex;align-items:center;gap:14px;padding:13px 2px;border-bottom:1px solid var(--line)}.toggle-row:last-child{border-bottom:0}.toggle-row>span{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.toggle-row b{font-size:13px}.toggle-row small{font-size:10.5px;color:var(--muted);line-height:1.35}.toggle-row input[type="checkbox"]{appearance:none;width:46px;height:27px;border-radius:16px;background:#cad5da;position:relative;flex:0 0 auto;transition:.18s}.toggle-row input[type="checkbox"]:before{content:"";position:absolute;width:21px;height:21px;border-radius:50%;background:white;top:3px;left:3px;box-shadow:0 1px 4px rgba(0,0,0,.2);transition:.18s}.toggle-row input[type="checkbox"]:checked{background:var(--accent)}.toggle-row input[type="checkbox"]:checked:before{transform:translateX(19px)}


/* FOX GPS v1.3 - marcadores PNG limpios, popup anclado y controles laterales */
.gm-marker,.gm-marker.marker-image,.gm-marker.marker-arrow{-webkit-appearance:none!important;appearance:none!important;background:none!important;background-color:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;outline:0!important;padding:0!important;margin:0!important;overflow:visible!important}
.gm-marker.marker-image::before,.gm-marker.marker-image::after{display:none!important;content:none!important}
.gm-marker-image{display:block!important;background:transparent!important;border:0!important;border-radius:0!important;box-shadow:none!important;padding:0!important;margin:0!important;filter:none!important}
.gm-marker.marker-image.selected .gm-marker-image,.gm-marker.marker-arrow.selected .gm-marker-visual{filter:drop-shadow(0 0 2px #fff) drop-shadow(0 0 5px rgba(14,116,144,.7))!important}
.gm-cluster-badge{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--primary);color:#fff;border:4px solid rgba(255,255,255,.9);font-weight:900;font-size:14px;box-shadow:0 5px 16px rgba(7,41,58,.3)}
.gm-poi-pin{font-size:25px;filter:drop-shadow(0 2px 2px rgba(0,0,0,.3))}
.gm-popup{overflow:visible!important;max-height:none!important}
.gm-popup .map-quick-body{max-height:min(50dvh,330px);overflow:auto;-webkit-overflow-scrolling:touch}
.gm-popup.below:before,.gm-popup.below:after{display:none!important}
.map-side-rail{position:absolute;z-index:22;right:10px;top:66px;display:flex;flex-direction:column;gap:7px;pointer-events:none}
.map-side-rail>*{pointer-events:auto}
.map-side-btn{width:43px;height:43px;border:0;border-radius:50%;background:rgba(255,255,255,.96);color:var(--primary);box-shadow:0 4px 14px rgba(12,44,60,.22);display:grid;place-items:center;padding:0}
.map-side-btn.active{background:var(--primary);color:#fff}.map-side-btn.danger{color:var(--danger)}
.map-card:fullscreen,.map-card:-webkit-full-screen{width:100vw!important;height:100vh!important;border-radius:0!important;margin:0!important}.map-card:fullscreen .map-stage,.map-card:-webkit-full-screen .map-stage{height:100vh!important}
.map-card:fullscreen .map-toolbar,.map-card:-webkit-full-screen .map-toolbar{top:max(10px,env(safe-area-inset-top))}
.map-card:fullscreen .map-side-rail,.map-card:-webkit-full-screen .map-side-rail{top:max(66px,calc(env(safe-area-inset-top) + 58px))}
.fleet-summary{padding:14px;margin-bottom:12px}.fleet-summary-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.fleet-summary-head h2{margin:0;font-size:20px}.fleet-summary-head p{margin:2px 0 0;color:var(--muted);font-size:12px}.fleet-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.fleet-stat{text-align:center;min-width:0}.fleet-stat strong{width:44px;height:44px;border-radius:13px;background:#f1f4f6;display:grid;place-items:center;margin:0 auto 5px;font-size:18px}.fleet-stat span{display:block;font-size:9.5px;font-weight:750;color:var(--muted);line-height:1.15}.fleet-stat.moving strong,.fleet-stat.moving span{color:var(--success)}.fleet-stat.stopped strong,.fleet-stat.stopped span{color:#c45b1a}.fleet-stat.offline strong,.fleet-stat.offline span{color:#9a6c00}
.device-card-rich{width:100%;border:1px solid #dce5e9;background:#fff;border-radius:17px;padding:14px 13px;text-align:left;color:var(--text);box-shadow:0 2px 7px rgba(18,48,63,.05);cursor:pointer}.device-card-rich+.device-card-rich{margin-top:9px}.device-card-head{font-weight:850;font-size:14px;margin:0 0 12px 4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-card-body{display:grid;grid-template-columns:78px 1fr 70px;gap:10px;align-items:center}.device-visual{height:76px;display:grid;place-items:center;position:relative}.device-visual img{max-width:70px;max-height:70px;object-fit:contain;background:transparent;border:0}.device-list-arrow{width:36px;height:45px;display:block}.device-details{display:grid;gap:6px;font-size:11.5px;min-width:0}.device-detail-line{display:flex;gap:7px;align-items:flex-start;color:#53636d}.device-detail-line b{color:#364751;min-width:0}.device-detail-line .mini-ico{width:16px;flex:0 0 16px;text-align:center;color:#71808a}.device-speed-badge{width:64px;min-height:70px;border:2px solid #8d9aa2;border-radius:22px;display:grid;place-items:center;text-align:center;background:#f8fafb}.device-speed-badge strong{font-size:22px;line-height:1}.device-speed-badge small{font-size:10px;color:#667780}.device-speed-badge.moving{background:#e6faed;border-color:#94e4ad;color:#168a5b}.device-service-bar{margin-top:12px;border-top:1px solid #edf1f3;padding-top:9px;display:flex;align-items:center;justify-content:space-between;font-size:11px;color:#5a6b74}.device-status-foot{margin-top:9px;padding-top:9px;border-top:1px solid #edf1f3;display:flex;justify-content:space-between;gap:8px;font-size:10.5px;color:#71808a}.device-status-foot b{color:#3d4c55}.status-dot2{width:11px;height:11px;border-radius:50%;display:inline-block;margin-right:6px;vertical-align:-1px;background:#7b8790}.status-dot2.moving{background:var(--success)}.status-dot2.stopped{background:#7d8992}.status-dot2.offline{background:#c99a22}.status-dot2.engine{background:var(--warning)}.status-dot2.blocked{background:var(--danger)}
@media(max-width:380px){.map-side-rail{right:6px}.map-side-btn{width:39px;height:39px}.device-card-body{grid-template-columns:65px 1fr 58px;gap:7px}.device-speed-badge{width:56px}.fleet-stats{gap:3px}.fleet-stat strong{width:39px;height:39px}.fleet-stat span{font-size:8.8px}}
/* Barra lateral segura en pantallas móviles bajas */
.map-side-rail{max-height:calc(100% - 132px);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none;padding:1px 2px 3px}
.map-side-rail::-webkit-scrollbar{display:none}
@media(max-height:690px){.map-side-rail{gap:4px;top:60px}.map-side-btn{width:38px;height:38px}}

/* ==========================================================
   FOX GPS v1.4.0
   Branding dinámico, Google Maps, seguimiento y alertas
   ========================================================== */
.brand-image{overflow:hidden;background:rgba(255,255,255,.12)!important}.brand-image img{width:100%;height:100%;object-fit:contain;display:block;background:transparent}.topbar-logo{width:38px;height:38px;object-fit:contain;border-radius:10px;background:rgba(255,255,255,.10);padding:3px;flex:0 0 38px}
#boot{background-color:var(--bg);background-image:linear-gradient(rgba(243,246,248,.92),rgba(243,246,248,.92)),var(--boot-splash);background-position:center;background-repeat:no-repeat;background-size:cover,42vmin auto}

/* Google Maps oficial debajo de nuestros marcadores/overlays. */
.gm-google-base{position:absolute;inset:0;display:none;z-index:0;background:#dce7eb}.gm-tiles{z-index:1}.gm-overlay{z-index:8}.gm-markers{z-index:9}.gm-controls{z-index:15}.gm-attribution{z-index:11}.gm-map.gm-google-active{touch-action:auto}.gm-map.gm-google-active .gm-google-base{display:block}.gm-map.gm-google-active .gm-tiles{display:none}

.map-type-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.map-type-card{min-height:82px;border:1px solid var(--line);border-radius:15px;background:#fff;color:var(--text);padding:12px;text-align:left;display:flex;flex-direction:column;gap:5px;justify-content:center}.map-type-card b{font-size:13px}.map-type-card small{font-size:10.5px;color:var(--muted);line-height:1.25}.map-type-card.active{border-color:var(--accent);box-shadow:0 0 0 2px rgba(14,116,144,.12);background:#f1f8fa}.map-type-card.google b:before{content:'G';display:inline-grid;place-items:center;width:21px;height:21px;border-radius:6px;margin-right:7px;background:#fff;border:1px solid #dfe6ea;color:#3068d5;font-weight:900}.map-type-foot{margin-top:12px}

.track-map-wrap{position:relative}.track-follow-btn{position:absolute;z-index:25;right:10px;top:10px;min-height:42px;border:0;border-radius:14px;background:rgba(255,255,255,.96);box-shadow:0 4px 14px rgba(12,44,60,.22);padding:0 12px;color:var(--primary);font-weight:850;font-size:11px;display:flex;align-items:center;gap:6px}.track-follow-btn.active{background:var(--primary);color:#fff}.track-follow-btn svg{width:17px;height:17px}

/* Marcador de una alarma abierta desde Push: visible sobre cualquier mapa. */
.gm-alert-beacon{width:50px;height:50px;position:relative;display:grid;place-items:center;filter:drop-shadow(0 5px 7px rgba(80,0,0,.35));animation:foxAlarmPulse 1.25s ease-in-out infinite}.gm-alert-beacon:before{content:'';position:absolute;width:42px;height:42px;border-radius:50%;background:rgba(196,61,61,.18);box-shadow:0 0 0 8px rgba(196,61,61,.10)}.gm-alert-beacon svg{position:relative;width:39px;height:39px}.gm-alert-label{font-weight:900;color:var(--danger)}@keyframes foxAlarmPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.10)}}
.event-map-popup .map-quick-head{padding-right:10px}.event-map-popup .map-quick-body{max-height:220px!important}

.report-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.report-actions .btn{min-width:0}.report-download-status{margin-top:8px}
