.gg-live-map{--gg-first-vp-height:100vh;--bg:#f5f4ef;--ink:#17211b;--muted:#667169;--accent:#244b35;--accent2:#315f78;--live:#a21d22;--embedded:#b36513;--snapshot:#1f5d3e;--line:rgba(23,33,27,.14);--panel:rgba(255,255,252,.97)}.gg-live-map *{box-sizing:border-box}.gg-live-map{position:relative;width:var(--gg-vw,100vw);max-width:none!important;margin:0 0 0 calc((100% - var(--gg-vw,100vw))/2)!important;padding:0!important;overflow:clip;font-family:Inter,system-ui,-apple-system,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink)}.gg-live-map .app{height:var(--gg-first-vp-height,calc(100svh - 96px));min-height:0;width:100%;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto}.gg-live-map .top{padding:12px 16px 10px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:end;gap:16px}.gg-live-map .eyebrow{font-size:10px;letter-spacing:.18em;font-weight:750;color:var(--muted);margin:0 0 3px}.gg-live-map .top h1{margin:0;font-size:clamp(26px,3vw,40px);line-height:1;letter-spacing:-.035em;font-weight:680}.gg-live-map .status{font-size:12px;color:var(--muted);text-align:right}.gg-live-map .controls{display:flex;gap:8px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--line);background:var(--panel)}.gg-live-map button,.gg-live-map select{border:1px solid var(--line);background:#fff;color:var(--ink);padding:8px 12px;border-radius:999px;font:inherit;font-size:13px}.gg-live-map button{cursor:pointer}.gg-live-map button.active{background:var(--accent);color:#fff;border-color:var(--accent)}.gg-live-map select{margin-left:auto;border-radius:8px}.gg-live-map #map{position:relative;min-height:0;overflow:hidden;background:#dfe6df;touch-action:none;cursor:grab}.gg-live-map #map.dragging{cursor:grabbing}.gg-live-map .tile-layer,.gg-live-map .reference-tile-layer,.gg-live-map .marker-layer{position:absolute;inset:0;overflow:visible}.gg-live-map .tile-layer{z-index:0}.gg-live-map .tile{position:absolute;width:256px;height:256px;user-select:none;-webkit-user-drag:none}.gg-live-map .reference-tile-layer{z-index:2;pointer-events:none;opacity:.20;filter:grayscale(.58) contrast(1.18) brightness(1.06)}.gg-live-map .reference-tile-layer[hidden]{display:none}.gg-live-map .reference-tile-layer .tile{opacity:1}.gg-live-map .marker-layer{pointer-events:none;z-index:4}.gg-live-map .meteo-label-layer{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:visible}.gg-live-map .meteo-label-layer[hidden]{display:none}.gg-live-map .meteo-city-label{position:absolute;transform:translate(-50%,-50%);font-size:11px;font-weight:800;line-height:1;color:#17211b;white-space:nowrap;text-shadow:-1px -1px 0 rgba(255,255,255,.96),1px -1px 0 rgba(255,255,255,.96),-1px 1px 0 rgba(255,255,255,.96),1px 1px 0 rgba(255,255,255,.96),0 0 4px rgba(255,255,255,.98);letter-spacing:.005em}.gg-live-map .meteo-city-label.secondary{font-size:10px;font-weight:700;opacity:.82}.gg-live-map .meteo-probe-title{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:800;margin:0 0 5px}.gg-live-map .meteo-probe-value{font-size:29px;line-height:1;font-weight:800;margin:2px 0 7px}.gg-live-map .meteo-probe-grid{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;font-size:12px;margin-top:8px}.gg-live-map .meteo-probe-grid span:nth-child(odd){color:var(--muted)}.gg-live-map .meteo-probe-coord{font-size:10px;color:var(--muted);margin-top:9px}.gg-live-map .marker{position:absolute;transform:translate(-50%,-50%);cursor:pointer;pointer-events:auto;z-index:4;font:inherit}.gg-live-map .marker.camera{width:20px;height:20px;border-radius:50%;border:3px solid var(--accent);background:#fff;box-shadow:0 1px 5px rgba(0,0,0,.32);padding:0}.gg-live-map .marker.camera::after{content:"";position:absolute;width:6px;height:6px;border-radius:50%;background:var(--accent);left:4px;top:4px}.gg-live-map .marker.integrated{width:25px;height:25px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 2px currentColor,0 2px 8px rgba(0,0,0,.35);padding:0;z-index:6;color:var(--embedded);background:var(--embedded)}.gg-live-map .marker.integrated.video{color:var(--live);background:var(--live)}.gg-live-map .marker.integrated::after{content:"↻";position:absolute;color:#fff;font-size:11px;line-height:1;left:5px;top:4px;font-weight:800}.gg-live-map .marker.integrated.video::after{content:"▶";font-size:9px;left:6px;top:5px}.gg-live-map .marker.weather{border:2px solid var(--accent2);background:rgba(255,255,255,.96);box-shadow:0 2px 7px rgba(0,0,0,.22);border-radius:999px;padding:5px 8px;min-width:45px;font-size:12px;font-weight:750;color:#16384a;white-space:nowrap;z-index:5}.gg-live-map .marker.weather.compact .place{display:none!important}.gg-live-map .marker.weather.loading{color:#7b8580}.gg-live-map .marker.weather .place{display:none;font-weight:600;margin-right:5px}.gg-live-map .marker.weather.primary .place{display:inline}.gg-live-map .marker.weather:hover .place{display:inline}.gg-live-map .legend{position:absolute;right:12px;bottom:12px;z-index:8;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:7px 9px;font-size:11px;display:flex;gap:12px;box-shadow:0 7px 20px rgba(0,0,0,.1)}.gg-live-map .legend span{display:flex;align-items:center;gap:5px}.gg-live-map .legend i{display:inline-block}.gg-live-map .legend .live{width:12px;height:12px;border-radius:50%;background:var(--live);box-shadow:0 0 0 2px #fff,0 0 0 3px var(--live)}.gg-live-map .legend .embedded{width:12px;height:12px;border-radius:50%;background:var(--embedded);box-shadow:0 0 0 2px #fff,0 0 0 3px var(--embedded)}.gg-live-map .legend .cam{width:12px;height:12px;border-radius:50%;border:2px solid var(--accent);background:#fff}.gg-live-map .legend .met{width:23px;height:14px;border:2px solid var(--accent2);border-radius:999px;background:#fff}.gg-live-map .legend .air{width:15px;height:15px;border-radius:50%;background:#fff;border:2px solid #5b3f86;position:relative}.gg-live-map .legend .air::after{content:"✈";position:absolute;left:1px;top:-4px;font-size:10px;color:#5b3f86}.gg-live-map .marker.airport{width:46px;height:46px;border-radius:50%;border:2px solid #5b3f86;background:#fff;color:#5b3f86;box-shadow:0 4px 14px rgba(0,0,0,.25);padding:3px 0 2px;z-index:7;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}.gg-live-map .marker.airport::before{content:none}.gg-live-map .marker.airport .airport-plane{display:block;font-size:17px;line-height:15px;font-weight:700}.gg-live-map .marker.airport .airport-code{display:block;margin-top:2px;font-size:9px;font-weight:850;letter-spacing:.05em}.gg-live-map .marker.airport.selected{background:#5b3f86;color:#fff}.gg-live-map .airport-select{margin-left:0}.gg-live-map .popup.flight-popup{width:min(500px,calc(100vw - 36px));max-width:500px}.gg-live-map .flight-head{padding:17px 16px 13px;border-bottom:1px solid var(--line)}.gg-live-map .flight-kicker{font-size:10px;letter-spacing:.15em;font-weight:800;color:var(--muted);margin:0 0 5px}.gg-live-map .flight-title{display:flex;gap:9px;align-items:baseline;padding-right:35px}.gg-live-map .flight-title h2{margin:0;font-size:24px}.gg-live-map .iata{font-size:12px;font-weight:850;background:#f0edf5;color:#5b3f86;border-radius:6px;padding:4px 6px}.gg-live-map .flight-body{padding:14px 16px 18px}.gg-live-map .flight-metric{display:inline-flex;align-items:baseline;gap:6px;background:#f2f4f0;border-radius:10px;padding:8px 10px;margin-bottom:12px}.gg-live-map .flight-metric strong{font-size:21px}.gg-live-map .flight-metric span{font-size:11px;color:var(--muted)}.gg-live-map .flight-section{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);margin:4px 0 8px}.gg-live-map .destinations{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:15px}.gg-live-map .destination-chip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:5px 8px;font-size:11px}.gg-live-map .flight-tabs{display:flex;gap:6px;margin:0 0 8px}.gg-live-map .flight-tabs button{padding:6px 10px;font-size:11px}.gg-live-map .flight-tabs button.active{background:#5b3f86;color:#fff;border-color:#5b3f86}.gg-live-map .demo-label{display:inline-block;font-size:10px;color:#28523b;background:#edf6ef;border:1px solid #bfd8c5;border-radius:999px;padding:4px 7px;margin-bottom:7px}.gg-live-map .flight-board{width:100%;border-collapse:collapse;font-size:11px}.gg-live-map .flight-board th{text-align:left;color:var(--muted);font-weight:650;padding:6px 4px;border-bottom:1px solid var(--line)}.gg-live-map .flight-board td{padding:8px 4px;border-bottom:1px solid var(--line)}.gg-live-map .flight-board td:last-child{text-align:right;font-weight:700}.gg-live-map .territory-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}.gg-live-map .territory{background:#f2f4f0;border-radius:9px;padding:8px}.gg-live-map .territory strong{display:block;font-size:11px;margin-bottom:2px}.gg-live-map .territory span{font-size:10px;color:var(--muted)}.gg-live-map .flight-source{font-size:10px;color:var(--muted);margin:12px 0 0}.gg-live-map .flight-source a{color:inherit}.gg-live-map .flight-mini{position:absolute;left:12px;top:12px;z-index:8;width:min(300px,calc(100vw - 90px));background:var(--panel);border:1px solid var(--line);border-radius:13px;box-shadow:0 9px 28px rgba(0,0,0,.13);overflow:hidden}.gg-live-map .flight-mini-head{display:flex;justify-content:space-between;align-items:center;padding:9px 10px;border-bottom:1px solid var(--line);font-size:12px}.gg-live-map .flight-mini-head span{font-size:9px;background:#fff4d9;color:#805c1f;border:1px solid #e9d29f;border-radius:999px;padding:3px 6px}.gg-live-map .flight-mini-row{display:grid;grid-template-columns:38px 1fr auto;gap:7px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--line);font-size:10px}.gg-live-map .flight-mini-row:last-child{border-bottom:0}.gg-live-map .flight-mini-code{font-weight:850;color:#5b3f86}.gg-live-map .flight-mini-route strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gg-live-map .flight-mini-route small{color:var(--muted)}.gg-live-map .flight-mini-state{font-weight:750;white-space:nowrap}.gg-live-map .zoom{position:absolute;right:12px;top:12px;z-index:8;display:flex;flex-direction:column;gap:4px}.gg-live-map .zoom button{width:36px;height:36px;border-radius:8px;padding:0;font-size:20px;background:#fff}.gg-live-map .notice{position:absolute;left:12px;bottom:12px;z-index:8;max-width:430px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:12px;box-shadow:0 8px 26px rgba(0,0,0,.12)}.gg-live-map .notice strong{display:block;margin-bottom:3px}.gg-live-map .popup{position:absolute;z-index:10;min-width:280px;max-width:min(380px,88vw);background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 14px 36px rgba(0,0,0,.18);overflow:hidden}.gg-live-map .popup[hidden]{display:none}.gg-live-map .popup.media-popup{width:min(720px,calc(100vw - 36px));max-width:720px}.gg-live-map .media-frame{width:100%;aspect-ratio:16/9;background:#101212}.gg-live-map .media-frame iframe,.gg-live-map .media-frame img{display:block;width:100%;height:100%;border:0;background:#101212}.gg-live-map .media-frame img{object-fit:cover}.gg-live-map .media-meta{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.gg-live-map .feed-clock{font-variant-numeric:tabular-nums}.gg-live-map .popup img{display:block;width:100%;max-height:205px;object-fit:cover;background:#e9ece8}.gg-live-map .popup .media-frame img{max-height:none;height:100%;object-fit:cover}.gg-live-map .popup-body{padding:12px 13px}.gg-live-map .popup h2{font-size:21px;margin:0 0 3px}.gg-live-map .meta{font-size:11px;color:var(--muted);margin:0 0 8px}.gg-live-map .temp{font-size:27px;font-weight:760}.gg-live-map .forecast{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:9px}.gg-live-map .day{background:#f2f4f0;border-radius:9px;padding:7px;font-size:11px}.gg-live-map .day strong{display:block;margin-bottom:3px}.gg-live-map .badge{display:inline-block;background:#eef1ec;border-radius:999px;padding:4px 8px;font-size:11px;margin-top:7px}.gg-live-map .badge.live{background:#f8e7e7;color:#7e1117;font-weight:750}.gg-live-map .badge.embedded{background:#fff0df;color:#7a4307;font-weight:750}.gg-live-map .badge.skyline{background:#eef4ff;color:#224b7a;font-weight:750}.gg-live-map .source-link{display:inline-block;margin-top:10px;background:var(--live);color:#fff;text-decoration:none;border-radius:999px;padding:9px 13px;font-size:12px;font-weight:700}.gg-live-map .desc{font-size:12px;line-height:1.45;color:#35413a;margin:8px 0 0}.gg-live-map .close{position:absolute;right:8px;top:8px;width:30px;height:30px;border-radius:50%;padding:0;background:rgba(255,255,255,.95);z-index:2}.gg-live-map .credits{font-size:10px;color:var(--muted);padding:6px 10px;border-top:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gg-live-map .meteo-canvas{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;opacity:1}.gg-live-map .meteo-panel{position:absolute;left:12px;top:12px;z-index:8;width:min(520px,calc(100vw - 88px));background:rgba(255,255,252,.96);border:1px solid var(--line);border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.14);padding:10px 11px}.gg-live-map .meteo-panel[hidden],.gg-live-map .meteo-timeline[hidden],.gg-live-map .meteo-scale[hidden]{display:none}.gg-live-map .meteo-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:8px}.gg-live-map .meteo-head strong{font-size:13px}.gg-live-map .meteo-head small{display:block;color:var(--muted);font-size:10px;margin-top:2px}.gg-live-map .meteo-badge{font-size:9px;font-weight:800;letter-spacing:.08em;background:#edf2f8;color:#2d526f;border:1px solid #c8d7e4;border-radius:999px;padding:4px 7px;white-space:nowrap}.gg-live-map .meteo-tabs{display:flex;flex-wrap:wrap;gap:6px}.gg-live-map .meteo-tabs button{padding:6px 9px;font-size:11px}.gg-live-map .meteo-tabs button.active{background:#315f78;color:#fff;border-color:#315f78}.gg-live-map .meteo-timeline{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:8;display:flex;align-items:center;gap:5px;background:rgba(255,255,252,.96);border:1px solid var(--line);border-radius:999px;padding:6px 7px;box-shadow:0 8px 24px rgba(0,0,0,.13);max-width:calc(100vw - 36px);overflow:auto}.gg-live-map .meteo-timeline button{padding:6px 8px;font-size:10px;white-space:nowrap}.gg-live-map .meteo-timeline button.active{background:#17211b;color:#fff;border-color:#17211b}.gg-live-map .meteo-time-label{font-size:10px;color:var(--muted);padding:0 4px;white-space:nowrap}.gg-live-map .meteo-scale{position:absolute;right:12px;bottom:62px;z-index:8;width:150px;background:rgba(255,255,252,.96);border:1px solid var(--line);border-radius:11px;padding:8px 9px;box-shadow:0 7px 20px rgba(0,0,0,.1);font-size:10px}.gg-live-map .meteo-scale strong{display:block;font-size:10px;margin-bottom:6px}.gg-live-map .meteo-gradient{height:8px;border-radius:999px;background:linear-gradient(90deg,#2350a3,#2f9ed2,#5ec6bb,#f1d45a,#e78b35,#c43c34)}.gg-live-map .meteo-scale-row{display:flex;justify-content:space-between;color:var(--muted);margin-top:4px}.gg-live-map .meteo-note{font-size:9px;line-height:1.35;color:var(--muted);margin-top:6px}@media (max-width:700px){.gg-live-map .meteo-panel{left:8px;top:8px;width:calc(100vw - 62px);padding:8px}.gg-live-map .meteo-head small{display:none}.gg-live-map .meteo-scale{display:none}.gg-live-map .meteo-timeline{left:8px;right:8px;transform:none;bottom:8px}.gg-live-map .notice{bottom:58px}}@media (max-width:700px){.gg-live-map .app{height:var(--gg-first-vp-height,calc(100svh - 64px));min-height:0}.gg-live-map .meteo-city-label.secondary{display:none}.gg-live-map .flight-mini{display:none}.gg-live-map .popup.flight-popup{width:calc(100vw - 16px);max-width:none}.gg-live-map .territory-grid{grid-template-columns:1fr}.gg-live-map .popup.media-popup{width:calc(100vw - 16px);max-width:none}.gg-live-map .media-frame{aspect-ratio:4/3}.gg-live-map .top{padding:10px 11px 8px}.gg-live-map .status{display:none}.gg-live-map .controls{overflow:auto}.gg-live-map .controls select{min-width:130px}.gg-live-map .notice{left:8px;right:8px;max-width:none}.gg-live-map .legend{display:none}.gg-live-map .credits{display:none}.gg-live-map .marker.weather.primary .place{display:none}.gg-live-map .forecast{grid-template-columns:1fr}}
.gg-live-map .related-content{margin:10px 0 2px;font-size:12px}.gg-live-map .related-content a{font-weight:750;color:var(--accent);text-decoration:none}.gg-live-map .related-content a:hover{text-decoration:underline}.gg-live-map .territory{text-decoration:none;color:var(--ink);border:1px solid transparent}.gg-live-map .territory:hover{border-color:var(--line);background:#fff}.gg-live-map .flight-board-meta{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:5px;font-size:10px;color:var(--muted)}.gg-live-map .flight-board tr.flight-done{opacity:.55}.gg-live-map .controls button{white-space:nowrap}

/* V18.2 · legibilidad y paneles */
.gg-live-map .meteo-scale{width:190px}
.gg-live-map .meteo-scale-row.numeric{gap:4px;font-variant-numeric:tabular-nums}
.gg-live-map .meteo-scale-row.numeric span{flex:1;text-align:center}
.gg-live-map .meteo-scale-row.numeric span:first-child{text-align:left}
.gg-live-map .meteo-scale-row.numeric span:last-child{text-align:right}
.gg-live-map .flight-mini{width:min(430px,calc(100vw - 90px))}
.gg-live-map .flight-mini-row{grid-template-columns:40px minmax(0,1fr) minmax(72px,auto)}
.gg-live-map .flight-mini-route{min-width:0}
.gg-live-map .flight-mini-route strong{max-width:100%}
.gg-live-map .flight-mini-state{min-width:0;max-width:112px;overflow:hidden;text-overflow:ellipsis;text-align:right}
.gg-live-map .flight-mini-section{padding:6px 10px 5px;background:#f2f4f0;border-bottom:1px solid var(--line);font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.gg-live-map .related-content--fallback a{font-weight:650}
@media(max-width:900px){.gg-live-map .flight-mini{width:min(380px,calc(100vw - 82px))}}

/* V18.4 — temperaturas por localidad y mareas */
.gg-live-map .meteo-city-label.temp-label{display:flex;align-items:baseline;gap:4px;padding:3px 5px;border-radius:7px;background:rgba(255,255,255,.78);box-shadow:0 1px 4px rgba(0,0,0,.10);text-shadow:none;color:#17211b}
.gg-live-map .meteo-city-label.temp-label strong{font-size:13px;font-weight:850;color:#16384a}
.gg-live-map .meteo-city-label.temp-label.secondary strong{font-size:11px}
.gg-live-map .marker.tide{min-width:30px;height:30px;border-radius:999px;border:2px solid #25606d;background:rgba(255,255,255,.97);color:#174a55;box-shadow:0 2px 8px rgba(0,0,0,.22);padding:0 7px;font-size:14px;font-weight:850;z-index:6}
.gg-live-map .marker.tide.rising{color:#1f6573}.gg-live-map .marker.tide.falling{color:#315f78}.gg-live-map .marker.tide.loading{color:#87928d}
.gg-live-map .tide-state{font-size:25px;font-weight:800;line-height:1.1;margin:3px 0 10px}.gg-live-map .tide-events{display:grid;gap:6px;margin-top:8px}.gg-live-map .tide-event{display:grid;grid-template-columns:auto 1fr auto;gap:8px;align-items:center;background:#f2f4f0;border-radius:9px;padding:8px 9px;font-size:12px}.gg-live-map .tide-event b{font-size:15px}.gg-live-map .tide-event small{color:var(--muted)}
.gg-live-map .tide-note{font-size:10px;line-height:1.4;color:var(--muted);margin:10px 0 0}.gg-live-map .legend .tide{width:18px;height:14px;border:2px solid #25606d;border-radius:999px;background:#fff;position:relative}.gg-live-map .legend .tide::after{position:absolute;left:4px;top:-5px;font-size:10px;color:#25606d}.gg-live-map .legend .tide.rising::after{content:'↑'}.gg-live-map .legend .tide.falling::after{content:'↓'}

.related-content{display:flex;gap:7px;flex-wrap:wrap;align-items:center;margin:10px 0 0}.related-content strong{font-size:11px;color:var(--muted);margin-right:2px}.related-content a{display:inline-block;font-size:12px;font-weight:700;color:var(--accent);text-decoration:none;border-bottom:1px solid currentColor}.related-content a:hover{text-decoration:none;opacity:.78}

/* V18.9 · Canvas Camino + DGT precargada */
.gg-live-map .controls select{margin-left:0}
.gg-live-map .controls button[data-mode="camino"]{margin-right:auto}
.gg-live-map #cameraTypeSelect,.gg-live-map #caminoSelect{border-radius:8px;max-width:240px}
.gg-live-map .route-layer{position:absolute;inset:0;z-index:3;width:100%;height:100%;pointer-events:none}
.gg-live-map .route-layer[hidden]{display:none}
.gg-live-map .marker.camino-place{width:25px;height:25px;border-radius:50%;border:3px solid #fff;background:#a06b22;color:#fff;box-shadow:0 0 0 2px #a06b22,0 2px 8px rgba(0,0,0,.3);font-size:20px;line-height:14px;padding:0;z-index:7}
.gg-live-map .marker.dgt{width:25px;height:25px;border-radius:6px;border:2px solid #fff;background:#3d4650;color:#fff;box-shadow:0 0 0 2px #3d4650,0 2px 8px rgba(0,0,0,.3);font-size:10px;font-weight:900;padding:0;z-index:6}
.gg-live-map .marker.dgt::after{content:"";position:absolute;left:5px;right:5px;bottom:4px;height:2px;background:#fff;opacity:.9}
.gg-live-map .dgt-badge{background:#edf0f2;color:#313b44;font-weight:800}
.gg-live-map .dgt-source{background:#3d4650}
.gg-live-map .camino-source{background:#8a5c20}
.gg-live-map .legend .dgt{width:13px;height:13px;border-radius:3px;background:#3d4650;border:2px solid #fff;box-shadow:0 0 0 1px #3d4650}
.gg-live-map .legend .camino{width:24px;height:0;border-top:4px solid #a06b22;box-shadow:0 -2px 0 #fff}
.gg-live-map .legend .camino-place{width:12px;height:12px;border-radius:50%;background:#a06b22;box-shadow:0 0 0 2px #fff,0 0 0 3px #a06b22}
@media(max-width:700px){.gg-live-map #cameraTypeSelect,.gg-live-map #caminoSelect{min-width:150px}.gg-live-map .controls button[data-mode="camino"]{margin-right:0}}


/* V18.8 — paneles descartables y mayor contraste en controles */
.gg-live-map .panel-head-actions{display:flex;align-items:center;gap:7px;flex:0 0 auto}
.gg-live-map .panel-close{width:27px;height:27px;min-width:27px;padding:0;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,.92);color:var(--muted);border:1px solid var(--line);font-size:18px;line-height:1;cursor:pointer}
.gg-live-map .panel-close:hover,.gg-live-map .panel-close:focus-visible{color:var(--ink);background:#fff;border-color:rgba(23,33,27,.28)}
.gg-live-map .notice{padding-right:42px}
.gg-live-map .notice-close{position:absolute;right:7px;top:7px}
.gg-live-map .notice-copy span{display:block}
.gg-live-map .flight-mini-head .panel-close{width:25px;height:25px;min-width:25px;font-size:16px}
.gg-live-map .meteo-head-actions{align-items:flex-start}
@media(max-width:700px){
  .gg-live-map .panel-close{width:34px;height:34px;min-width:34px;font-size:20px}
  .gg-live-map .meteo-panel{padding-right:8px}
  .gg-live-map .notice{padding-right:48px}
}

.gg-live-map .legend i.camino-selected{width:24px;height:0;border-top:3px solid #c91f2d;background:transparent;border-left:0;border-right:0;border-bottom:0;box-shadow:0 -1px 0 rgba(255,255,255,.95)}

/* V18.12 — leyenda de cámaras interactiva y limpieza de capas al cambiar de modo */
.gg-live-map .legend .legend-filter{display:flex;align-items:center;gap:5px;border:0;background:transparent;border-radius:7px;padding:2px 4px;font-size:11px;color:var(--ink);cursor:pointer}
.gg-live-map .legend .legend-filter:hover,.gg-live-map .legend .legend-filter:focus-visible{background:rgba(23,33,27,.07)}
.gg-live-map .legend .legend-filter.active{background:var(--accent);color:#fff}
.gg-live-map .legend .legend-filter.active i{filter:none}

.gg-live-map .camino-primary{background:var(--accent);margin-top:12px}.gg-live-map .camino-attribution{font-size:10px;color:var(--muted);margin:10px 0 0}.gg-live-map .camino-primary + .related-content{margin-top:12px}

/* V18.14 · Mar + Transporte */
.gg-live-map .controls button[data-mode="camino"]{margin-right:0}
.gg-live-map .mode-subselect{border-color:rgba(36,75,53,.28);background:#f8faf7;font-weight:750;max-width:210px}
.gg-live-map .bus-panel{position:absolute;left:12px;top:12px;z-index:9;width:min(390px,calc(100vw - 90px));background:var(--panel);border:1px solid var(--line);border-radius:13px;box-shadow:0 9px 28px rgba(0,0,0,.14);overflow:visible}
.gg-live-map .bus-panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 10px;border-bottom:1px solid var(--line)}
.gg-live-map .bus-panel-head>div:first-child{min-width:0}.gg-live-map .bus-panel-head strong{display:block;font-size:12px}.gg-live-map .bus-panel-head small{display:block;margin-top:2px;font-size:9px;color:var(--muted)}
.gg-live-map .bus-panel-head .panel-head-actions>span{font-size:9px;background:#edf6ef;color:#28523b;border:1px solid #bfd8c5;border-radius:999px;padding:3px 6px;font-weight:800}
.gg-live-map .bus-search{position:relative;padding:10px}.gg-live-map .bus-search input{width:100%;border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--ink);padding:10px 11px;font:inherit;font-size:13px;outline:none}
.gg-live-map .bus-search input:focus{border-color:rgba(36,75,53,.55);box-shadow:0 0 0 3px rgba(36,75,53,.08)}
.gg-live-map .bus-search-results{position:absolute;left:10px;right:10px;top:48px;z-index:12;max-height:280px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 30px rgba(0,0,0,.18)}
.gg-live-map .bus-search-results button{display:block;width:100%;border:0;border-bottom:1px solid var(--line);border-radius:0;text-align:left;padding:9px 10px;background:#fff;font-size:12px}.gg-live-map .bus-search-results button:last-child{border-bottom:0}.gg-live-map .bus-search-results button:hover,.gg-live-map .bus-search-results button:focus-visible{background:#f2f4f0;color:var(--ink)}
.gg-live-map .bus-result-empty{padding:10px;font-size:11px;color:var(--muted)}
.gg-live-map .marker.bus{min-width:38px;height:28px;border-radius:7px;border:2px solid #fff;background:#244b35;color:#fff;box-shadow:0 0 0 2px #244b35,0 3px 9px rgba(0,0,0,.28);font-size:9px;font-weight:900;padding:0 6px;z-index:7}
.gg-live-map .legend .bus{width:16px;height:11px;border-radius:3px;background:#244b35;box-shadow:0 0 0 1px #244b35}
.gg-live-map .bus-departures{display:grid;gap:6px;margin-top:8px}.gg-live-map .bus-departure{display:grid;grid-template-columns:46px minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 9px;background:#f2f4f0;border-radius:9px;font-size:11px}.gg-live-map .bus-departure>strong{font-size:14px;font-variant-numeric:tabular-nums}.gg-live-map .bus-departure b{display:block}.gg-live-map .bus-departure small{display:block;color:var(--muted);margin-top:2px;overflow:hidden;text-overflow:ellipsis}.gg-live-map .bus-tag{font-size:8px;text-transform:uppercase;letter-spacing:.04em;background:#fff4d9;color:#805c1f;border:1px solid #e9d29f;border-radius:999px;padding:3px 5px;white-space:nowrap}

.gg-live-map .marker.beach{width:18px;height:18px;border-radius:50%;border:3px solid #fff;box-shadow:0 0 0 2px #557a88,0 2px 7px rgba(0,0,0,.25);padding:0;background:#78909c;z-index:6}
.gg-live-map .marker.beach.excellent{background:#16856a;box-shadow:0 0 0 2px #16856a,0 2px 7px rgba(0,0,0,.25)}
.gg-live-map .marker.beach.good{background:#4e9f61;box-shadow:0 0 0 2px #4e9f61,0 2px 7px rgba(0,0,0,.25)}
.gg-live-map .marker.beach.fair{background:#d0a33a;box-shadow:0 0 0 2px #d0a33a,0 2px 7px rgba(0,0,0,.25)}
.gg-live-map .marker.beach.poor,.gg-live-map .marker.beach.warning{background:#d66b32;box-shadow:0 0 0 2px #d66b32,0 2px 7px rgba(0,0,0,.25)}
.gg-live-map .marker.beach.closed{background:#a21d22;box-shadow:0 0 0 2px #a21d22,0 2px 7px rgba(0,0,0,.25)}
.gg-live-map .legend .beach{width:11px;height:11px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #78909c}.gg-live-map .legend .beach.excellent{background:#16856a;box-shadow:0 0 0 1px #16856a}.gg-live-map .legend .beach.good{background:#4e9f61;box-shadow:0 0 0 1px #4e9f61}.gg-live-map .legend .beach.warning{background:#d66b32;box-shadow:0 0 0 1px #d66b32}
.gg-live-map .beach-quality{display:inline-block;margin:7px 0 5px;padding:5px 8px;border-radius:999px;font-size:11px;font-weight:800;background:#edf0f2;color:#313b44}.gg-live-map .beach-quality.excellent{background:#e7f5ef;color:#126752}.gg-live-map .beach-quality.good{background:#edf7ee;color:#357544}.gg-live-map .beach-quality.fair{background:#fff6dd;color:#7a5b0b}.gg-live-map .beach-quality.poor,.gg-live-map .beach-quality.warning{background:#fff0e7;color:#974516}.gg-live-map .beach-quality.closed{background:#fbe9ea;color:#8a171c}
.gg-live-map .beach-alert{margin:8px 0;padding:8px 9px;border-radius:8px;font-size:11px;font-weight:800}.gg-live-map .beach-alert.warning{background:#fff4d9;color:#805c1f}.gg-live-map .beach-alert.danger{background:#fbe9ea;color:#8a171c}

.gg-live-map .marker.marine{display:flex;align-items:center;gap:6px;min-width:82px;max-width:145px;border:2px solid #315f78;background:rgba(255,255,255,.96);color:#244b61;box-shadow:0 2px 8px rgba(0,0,0,.22);border-radius:999px;padding:5px 8px;font-size:10px;font-weight:750;z-index:6}.gg-live-map .marker.marine span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gg-live-map .marker.marine b{font-size:11px;white-space:nowrap}.gg-live-map .legend .marine{width:20px;height:10px;border-radius:999px;background:#315f78}
.gg-live-map .marine-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:8px 0 10px}.gg-live-map .marine-metrics div{background:#eef3f5;border-radius:9px;padding:8px;text-align:center}.gg-live-map .marine-metrics span{display:block;font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.gg-live-map .marine-metrics strong{display:block;margin-top:2px;font-size:15px}

@media(max-width:700px){
  .gg-live-map .mode-subselect{min-width:125px!important}.gg-live-map .bus-panel{left:8px;right:8px;top:8px;width:auto}.gg-live-map .bus-panel-head small{display:none}.gg-live-map .bus-search-results{max-height:220px}.gg-live-map .marker.marine{min-width:66px;max-width:110px;font-size:9px;padding:4px 6px}
}

/* V18.15 · subnavegación contextual + trenes */
.gg-live-map .app{grid-template-rows:auto auto auto minmax(0,1fr) auto}
.gg-live-map .context-nav{background:#f7f8f4;border-bottom:1px solid var(--line);padding:7px 12px}
.gg-live-map .context-nav[hidden],.gg-live-map .context-nav-row[hidden]{display:none}
.gg-live-map .context-nav-row{display:flex;align-items:center;gap:7px;min-width:0;overflow-x:auto;scrollbar-width:thin}
.gg-live-map .context-nav-label{flex:0 0 auto;font-size:10px;font-weight:850;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);padding:0 4px 0 1px}
.gg-live-map .context-nav-row button{flex:0 0 auto;padding:6px 10px;font-size:12px;background:#fff}
.gg-live-map .context-nav-row button.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.gg-live-map .context-nav .airport-select{flex:0 0 auto;margin-left:auto;min-width:175px;padding:6px 9px;font-size:12px}
.gg-live-map .marker.train{min-width:46px;height:28px;border-radius:7px;border:2px solid #fff;background:#7a263b;color:#fff;box-shadow:0 0 0 2px #7a263b,0 3px 9px rgba(0,0,0,.28);font-size:9px;font-weight:900;padding:0 6px;z-index:7;white-space:nowrap}
.gg-live-map .legend .train{width:18px;height:11px;border-radius:3px;background:#7a263b;box-shadow:0 0 0 1px #7a263b}
.gg-live-map .train-delay{display:inline-block;margin:7px 0 2px;padding:5px 8px;border-radius:999px;font-size:11px;font-weight:800;background:#eef1ec;color:#39453e}
.gg-live-map .train-delay.late{background:#fff0e7;color:#974516}.gg-live-map .train-delay.early{background:#edf6ef;color:#28523b}.gg-live-map .train-delay.ontime{background:#edf6ef;color:#28523b}
.gg-live-map .train-meta{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;margin-top:8px;font-size:12px}.gg-live-map .train-meta span:nth-child(odd){color:var(--muted)}
@media(max-width:700px){
  .gg-live-map .context-nav{padding:6px 8px}.gg-live-map .context-nav-row{gap:5px}.gg-live-map .context-nav-label{font-size:9px}.gg-live-map .context-nav-row button{padding:6px 9px;font-size:11px}.gg-live-map .context-nav .airport-select{min-width:145px;margin-left:2px}.gg-live-map .marker.train{min-width:40px;height:26px;font-size:8px;padding:0 5px}
}


/* V18.16 · navegación contextual consistente y mapa estable */
.gg-live-map .app{grid-template-areas:"top" "primary" "context" "map" "credits";grid-template-rows:auto auto auto minmax(0,1fr) auto}
.gg-live-map .top{grid-area:top}.gg-live-map .controls{grid-area:primary}.gg-live-map .context-nav{grid-area:context}.gg-live-map #map{grid-area:map}.gg-live-map .credits{grid-area:credits}
.gg-live-map .primary-nav{overflow-x:auto;scrollbar-width:thin;white-space:nowrap}
.gg-live-map .primary-nav > button{flex:0 0 auto}
.gg-live-map .context-nav{display:flex;align-items:center;gap:8px;min-width:0;background:#f7f8f4;border-bottom:1px solid var(--line);padding:7px 12px}
.gg-live-map .context-nav[hidden],.gg-live-map .context-nav-row[hidden]{display:none!important}
.gg-live-map .context-nav-row{display:flex;align-items:center;gap:7px;min-width:0;overflow-x:auto;scrollbar-width:thin;flex:1 1 auto}
.gg-live-map .context-route-list{display:flex;align-items:center;gap:7px;min-width:0;overflow-x:auto;scrollbar-width:thin}
.gg-live-map .context-route-list button{flex:0 0 auto}
.gg-live-map .context-nav-tools{display:flex;align-items:center;gap:6px;flex:0 0 auto;margin-left:auto}
.gg-live-map .context-nav-tools select{margin-left:0;min-width:132px;padding:6px 9px;font-size:12px;background:#fff}
.gg-live-map .context-nav-row button{flex:0 0 auto;padding:6px 10px;font-size:12px;background:#fff}
.gg-live-map .context-nav-row button.active,.gg-live-map .context-route-list button.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.gg-live-map .meteo-panel{display:none!important}
.gg-live-map .meteo-canvas{filter:saturate(1.12) contrast(1.03);opacity:.78;mix-blend-mode:multiply}
.gg-live-map #map.meteo-mode .tile-layer{filter:grayscale(.55) brightness(1.12) contrast(.92)}
.gg-live-map .reference-tile-layer{opacity:.42;filter:grayscale(1) contrast(1.65) brightness(.98);mix-blend-mode:multiply}
@media (max-width:700px){
  .gg-live-map .context-nav{padding:6px 8px;gap:5px}
  .gg-live-map .context-nav-row{gap:5px}
  .gg-live-map .context-nav-label{font-size:9px}
  .gg-live-map .context-nav-row button,.gg-live-map .context-route-list button{padding:6px 9px;font-size:11px}
  .gg-live-map .context-nav-tools select{min-width:116px;max-width:132px;padding:6px 8px;font-size:11px}
}

/* V18.17 · Playas, mar, Camino y transporte */
.gg-live-map .beach-quality{border-radius:10px;padding:7px 10px;font-size:14px;line-height:1.15}.gg-live-map .beach-quality small{display:block;margin-bottom:3px;font-size:9px;line-height:1.2;text-transform:uppercase;letter-spacing:.06em;opacity:.72}.gg-live-map .beach-secondary{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:3px 0 8px;padding:6px 9px;border:1px solid var(--line);border-radius:8px;font-size:11px}.gg-live-map .beach-secondary span{color:var(--muted)}.gg-live-map .beach-lab{display:flex;flex-wrap:wrap;gap:6px;margin:7px 0}.gg-live-map .beach-lab span{background:#f3f4f1;border-radius:7px;padding:5px 7px;font-size:10px}.gg-live-map .beach-forecast{margin-top:10px}.gg-live-map .beach-forecast-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline;margin-bottom:6px}.gg-live-map .beach-forecast-head strong{font-size:11px}.gg-live-map .beach-forecast-head span{font-size:9px;color:var(--muted)}.gg-live-map .beach-forecast-fallback{margin:7px 0 0;font-size:10px;line-height:1.35;color:var(--muted)}
.gg-live-map .marine-metrics{grid-template-columns:repeat(4,1fr)}.gg-live-map .marine-text{margin:7px 0;padding:8px 9px;background:#f4f6f5;border-radius:9px}.gg-live-map .marine-text span{display:block;margin-bottom:3px;font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:800}.gg-live-map .marine-text p{margin:0;font-size:12px;line-height:1.42}
.gg-live-map .context-route-list button.active{background:#c91f2d;color:#fff;border-color:#c91f2d;box-shadow:0 0 0 2px rgba(201,31,45,.12)}
.gg-live-map .train-route{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;margin:8px 0 10px;padding:9px 10px;background:#f2f3f5;border-radius:10px;font-size:12px;font-weight:750}.gg-live-map .train-route span:last-child{text-align:right}.gg-live-map .train-route b{color:var(--muted)}
@media(max-width:680px){.gg-live-map .marine-metrics{grid-template-columns:repeat(2,1fr)}.gg-live-map .beach-forecast-head{display:block}.gg-live-map .beach-forecast-head span{display:block;margin-top:2px}}

/* V18.18 — metadatos normalizados de cámaras y horarios de tren */
.gg-live-map .camera-facts{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;margin:10px 0 4px;padding:9px 10px;background:#f4f5f1;border-radius:10px;font-size:11px}.gg-live-map .camera-facts span{color:var(--muted)}.gg-live-map .camera-facts strong{font-weight:720}.gg-live-map .camera-freshness{display:inline-block;margin:4px 0 2px;padding:4px 8px;border-radius:999px;background:#edf4ee;color:#28523b;font-size:10px;font-weight:750}.gg-live-map .train-schedule{display:flex;justify-content:space-between;gap:12px;align-items:center;margin:6px 0 10px;padding:8px 10px;background:#f4f5f1;border-radius:9px;font-size:11px}.gg-live-map .train-schedule span{color:var(--muted)}.gg-live-map .train-schedule strong{font-variant-numeric:tabular-nums}

.gg-live-map .marine-periods{display:grid;gap:4px}.gg-live-map .marine-period-row{display:grid;grid-template-columns:58px 1fr;gap:8px;align-items:start}.gg-live-map .marine-period-row b{font-size:10px;color:var(--muted);font-weight:800}.gg-live-map .marine-period-row span{margin:0!important;font-size:12px!important;text-transform:none!important;letter-spacing:0!important;color:var(--ink)!important;font-weight:500!important}

/* V18.21 · Indicador de carga sobre el mapa */
.gg-live-map .map-loading{position:absolute;left:50%;top:18px;transform:translateX(-50%);z-index:30;display:flex;align-items:center;gap:9px;padding:9px 15px;border-radius:999px;background:var(--panel);color:var(--ink);font-size:13px;font-weight:650;box-shadow:0 6px 22px rgba(0,0,0,.16);pointer-events:none}
.gg-live-map .map-loading[hidden]{display:none}
.gg-live-map .map-loading.centered{top:50%;transform:translate(-50%,-50%)}
.gg-live-map .map-loading-spinner{width:15px;height:15px;border-radius:50%;border:2px solid rgba(36,75,53,.22);border-top-color:var(--accent);animation:gg-spin .8s linear infinite}
@keyframes gg-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.gg-live-map .map-loading-spinner{animation-duration:2.4s}}

/* V18.25 · Eventos culturales */
.gg-live-map .marker.event{width:28px;height:28px;border-radius:50%;border:3px solid #fff;background:#7a3f73;color:#fff;box-shadow:0 0 0 2px #7a3f73,0 3px 9px rgba(0,0,0,.28);font-size:10px;font-weight:850;padding:0;z-index:7;font-variant-numeric:tabular-nums}
.gg-live-map .marker.event:hover{transform:translate(-50%,-50%) scale(1.08)}
.gg-live-map .legend .event{width:12px;height:12px;border-radius:50%;background:#7a3f73;box-shadow:0 0 0 2px #fff,0 0 0 3px #7a3f73}
.gg-live-map .event-type{display:inline-block;margin:3px 0 4px;padding:4px 7px;border-radius:999px;background:#f3edf2;color:#6b315f;font-size:10px;font-weight:750}
.gg-live-map .event-state{display:inline-block;margin:4px 0 6px;padding:5px 8px;border-radius:7px;font-size:11px;font-weight:800}
.gg-live-map .event-state.cancelled{background:#f8e6e6;color:#8b1f27}
.gg-live-map .event-state.postponed{background:#fff2dc;color:#84590f}
.gg-live-map .source-link.event-link{background:#7a3f73}


/* V18.27 · Ficha ferroviaria: itinerario completo GTFS + tiempos vivos */
.gg-live-map .popup.train-popup{width:min(520px,calc(100vw - 36px));max-width:520px}
.gg-live-map .train-popup-body{padding:14px 15px 13px}
.gg-live-map .train-itinerary{margin:13px 0 4px;border-top:1px solid var(--line);padding-top:11px}
.gg-live-map .train-itinerary-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:7px}
.gg-live-map .train-itinerary-head strong{font-size:12px;text-transform:uppercase;letter-spacing:.08em}
.gg-live-map .train-itinerary-head span{font-size:10px;color:var(--muted)}
.gg-live-map .train-stops{max-height:260px;overflow:auto;padding:2px 3px 2px 0;scrollbar-width:thin}
.gg-live-map .train-stop{display:grid;grid-template-columns:56px 18px minmax(0,1fr) auto;gap:6px;align-items:start;min-height:46px;position:relative;font-size:11px}
.gg-live-map .train-stop-time{text-align:right;padding-top:1px;font-variant-numeric:tabular-nums}.gg-live-map .train-stop-time strong{display:block;font-size:11px}.gg-live-map .train-stop-time small{display:block;color:var(--muted);font-size:8px;white-space:nowrap}
.gg-live-map .train-stop-line{position:relative;align-self:stretch;min-height:46px}.gg-live-map .train-stop-line::before{content:"";position:absolute;left:8px;top:0;bottom:0;width:2px;background:#d7ddd8}.gg-live-map .train-stop-line i{position:absolute;left:4px;top:4px;width:10px;height:10px;border-radius:50%;background:#fff;border:2px solid #89948d;z-index:1}
.gg-live-map .train-stop:first-child .train-stop-line::before{top:8px}.gg-live-map .train-stop:last-child .train-stop-line::before{bottom:calc(100% - 8px)}
.gg-live-map .train-stop.current .train-stop-line i{background:#7a263b;border-color:#7a263b;box-shadow:0 0 0 3px rgba(122,38,59,.13)}
.gg-live-map .train-stop.next .train-stop-line i{border-color:#7a263b}.gg-live-map .train-stop.past{opacity:.58}.gg-live-map .train-stop.past .train-stop-line::before{background:#aab5ad}.gg-live-map .train-stop.past .train-stop-line i{background:#aab5ad;border-color:#aab5ad}
.gg-live-map .train-stop-place{min-width:0;padding-top:0}.gg-live-map .train-stop-place strong{display:block;line-height:1.25}.gg-live-map .train-stop-place small{display:block;margin-top:2px;font-size:9px;color:#7a263b;font-weight:750}
.gg-live-map .train-stop-delay{margin-top:0;padding:3px 5px;border-radius:999px;background:#fff0e7;color:#974516;font-size:9px;font-weight:800;white-space:nowrap}
@media(max-width:700px){.gg-live-map .popup.train-popup{width:calc(100vw - 16px);max-width:none}.gg-live-map .train-stops{max-height:220px}.gg-live-map .train-stop{grid-template-columns:50px 17px minmax(0,1fr) auto;gap:5px}}


/* V18.29 · Tráfico aéreo ADS-B */
.gg-live-map .marker.aircraft{min-width:31px;height:25px;border:1px solid rgba(55,43,82,.30);border-radius:999px;background:rgba(255,255,255,.94);color:#4e356f;box-shadow:0 2px 7px rgba(0,0,0,.20);padding:2px 6px 2px 4px;z-index:6;display:flex;align-items:center;gap:3px;white-space:nowrap}
.gg-live-map .marker.aircraft:hover,.gg-live-map .marker.aircraft.selected{background:#5b3f86;color:#fff;border-color:#5b3f86;z-index:9}
.gg-live-map .marker.aircraft .aircraft-plane{display:inline-block;width:17px;height:17px;line-height:17px;text-align:center;font-size:16px;transform-origin:50% 50%;flex:0 0 17px}
.gg-live-map .marker.aircraft .aircraft-call{font-size:8px;font-weight:850;letter-spacing:.02em;max-width:58px;overflow:hidden;text-overflow:ellipsis}
.gg-live-map .legend .aircraft{width:17px;height:17px;position:relative}
.gg-live-map .legend .aircraft::after{content:'✈';position:absolute;left:1px;top:-3px;font-size:15px;color:#5b3f86;transform:rotate(-15deg)}
.gg-live-map .aircraft-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:9px 0 10px}.gg-live-map .aircraft-metrics div{background:#f2f0f6;border-radius:9px;padding:8px;text-align:center}.gg-live-map .aircraft-metrics span{display:block;font-size:9px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.gg-live-map .aircraft-metrics strong{display:block;margin-top:2px;font-size:14px;font-variant-numeric:tabular-nums}
.gg-live-map .aircraft-meta{display:grid;grid-template-columns:auto 1fr;gap:5px 10px;margin-top:8px;font-size:12px}.gg-live-map .aircraft-meta span{color:var(--muted)}
.gg-live-map .aircraft-times{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:8px 0 4px}
.gg-live-map .aircraft-times>div{background:#f4f2f7;border-radius:9px;padding:8px 9px}
.gg-live-map .aircraft-times span{display:block;font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:2px}
.gg-live-map .aircraft-times strong{display:block;font-size:14px;font-variant-numeric:tabular-nums}
.gg-live-map .aircraft-times small{display:block;margin-top:2px;font-size:9px;color:var(--muted);font-variant-numeric:tabular-nums}
.gg-live-map .aircraft-times.loading{opacity:.78}
.gg-live-map .aircraft-time-note{margin:2px 0 8px;font-size:9px;line-height:1.35;color:var(--muted)}
.gg-live-map[data-site-theme="dark"] .aircraft-times>div{background:#202722}

@media(max-width:700px){.gg-live-map .tile{border:0;outline:0;}.gg-live-map .marker.aircraft .aircraft-call{display:none}.gg-live-map .marker.aircraft{min-width:25px;width:25px;height:25px;padding:2px;justify-content:center}.gg-live-map .aircraft-metrics{grid-template-columns:repeat(3,1fr)}}

/* V18.34 · navegación por pestañas laterales / dock móvil + tema heredado del sitio */
.gg-live-map .app{position:relative;grid-template-areas:"top" "map" "credits";grid-template-rows:auto minmax(0,1fr) auto}
.gg-live-map .top{grid-area:top}.gg-live-map #map{grid-area:map}.gg-live-map .credits{grid-area:credits}

/* El selector global del sitio manda. GaliciaGo solo refleja su estado. */
.gg-live-map[data-site-theme="dark"]{--bg:#111512;--ink:#edf2ee;--muted:#a9b4ad;--line:rgba(235,244,238,.16);--panel:rgba(20,25,22,.96);--accent:#78a98b;--accent2:#79a9c1}
.gg-live-map[data-site-theme="dark"] .top,.gg-live-map[data-site-theme="dark"] .credits{background:#111512;color:var(--ink);border-color:var(--line)}
.gg-live-map[data-site-theme="dark"] #map{background:#171d19}
.gg-live-map[data-site-theme="dark"] .tile-layer{filter:brightness(.76) saturate(.86) contrast(1.06)}
.gg-live-map[data-site-theme="dark"] button,.gg-live-map[data-site-theme="dark"] select,.gg-live-map[data-site-theme="dark"] input{background:#1b211d;color:var(--ink);border-color:var(--line)}
.gg-live-map[data-site-theme="dark"] button.active{background:#6c9d80;color:#0c120e;border-color:#6c9d80}
.gg-live-map[data-site-theme="dark"] .popup,.gg-live-map[data-site-theme="dark"] .flight-mini,.gg-live-map[data-site-theme="dark"] .bus-panel,.gg-live-map[data-site-theme="dark"] .notice,.gg-live-map[data-site-theme="dark"] .legend,.gg-live-map[data-site-theme="dark"] .meteo-timeline,.gg-live-map[data-site-theme="dark"] .meteo-scale{background:var(--panel);color:var(--ink);border-color:var(--line)}
.gg-live-map[data-site-theme="dark"] .popup .train-route,.gg-live-map[data-site-theme="dark"] .train-stop,.gg-live-map[data-site-theme="dark"] .aircraft-metrics div,.gg-live-map[data-site-theme="dark"] .marine-metrics div,.gg-live-map[data-site-theme="dark"] .marine-text,.gg-live-map[data-site-theme="dark"] .bus-departure,.gg-live-map[data-site-theme="dark"] .day,.gg-live-map[data-site-theme="dark"] .territory,.gg-live-map[data-site-theme="dark"] .flight-metric{background:#202722;color:var(--ink)}
.gg-live-map[data-site-theme="dark"] .destination-chip,.gg-live-map[data-site-theme="dark"] .badge,.gg-live-map[data-site-theme="dark"] .close{background:#252d28;color:var(--ink);border-color:var(--line)}
.gg-live-map[data-site-theme="dark"] .desc,.gg-live-map[data-site-theme="dark"] .marine-text p{color:#d5ddd7}
.gg-live-map[data-site-theme="dark"] .bus-search-results,.gg-live-map[data-site-theme="dark"] .bus-search-results button{background:#1b211d;color:var(--ink);border-color:var(--line)}
.gg-live-map[data-site-theme="dark"] .bus-search-results button:hover{background:#252d28}

/* Rail principal: la sección activa se convierte en la pestaña rotulada; el resto queda en vertical. */
.gg-live-map .primary-nav{position:absolute;z-index:14;left:10px;top:10px;display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:0;border:0;background:transparent;overflow:visible;white-space:normal;box-shadow:none}
.gg-live-map .primary-nav > button{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;width:44px;height:44px;min-width:44px;padding:0;border-radius:11px;background:var(--panel);box-shadow:0 6px 18px rgba(0,0,0,.13);backdrop-filter:blur(10px);overflow:hidden;transition:width .18s ease,background .16s ease,color .16s ease}
.gg-live-map .primary-nav > button .nav-icon{font-size:20px;line-height:1;flex:0 0 24px;text-align:center}
.gg-live-map .primary-nav > button .nav-label{display:none;font-size:12px;font-weight:760;white-space:nowrap}
.gg-live-map .primary-nav > button.active{width:118px;justify-content:flex-start;padding:0 11px;background:var(--accent);color:#fff;border-color:var(--accent)}
.gg-live-map .primary-nav > button.active .nav-label{display:block}
.gg-live-map .primary-nav > button:not(.active):hover,.gg-live-map .primary-nav > button:not(.active):focus-visible{width:104px;justify-content:flex-start;padding:0 10px}
.gg-live-map .primary-nav > button:not(.active):hover .nav-label,.gg-live-map .primary-nav > button:not(.active):focus-visible .nav-label{display:block}

/* La bandeja contextual sale horizontalmente desde la pestaña activa. No hay panel híbrido. */
.gg-live-map .context-nav{position:absolute;z-index:13;left:136px;top:var(--context-y,10px);display:flex;align-items:center;gap:6px;width:auto;max-width:calc(100% - 208px);padding:6px;background:var(--panel);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px rgba(0,0,0,.14);backdrop-filter:blur(12px);overflow:hidden;animation:ggTrayIn .16s ease-out}
.gg-live-map .context-nav[hidden],.gg-live-map .context-nav-row[hidden]{display:none!important}
@keyframes ggTrayIn{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}
.gg-live-map .context-nav-label{display:none}
.gg-live-map .context-nav-row{display:flex;align-items:center;gap:6px;min-width:0;max-width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin;flex:1 1 auto}
.gg-live-map .context-route-list{display:flex;align-items:center;gap:6px;min-width:0;overflow-x:auto;scrollbar-width:thin}
.gg-live-map .context-nav-row button,.gg-live-map .context-route-list button{flex:0 0 auto;padding:7px 10px;border-radius:9px;font-size:11px;white-space:nowrap;background:rgba(255,255,255,.92)}
.gg-live-map[data-site-theme="dark"] .context-nav-row button,.gg-live-map[data-site-theme="dark"] .context-route-list button{background:#1b211d}
.gg-live-map .context-nav-row button.active,.gg-live-map .context-route-list button.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.gg-live-map .context-nav-tools{display:flex;align-items:center;gap:5px;flex:0 0 auto;margin-left:2px}
.gg-live-map .context-nav-tools[hidden]{display:none!important}
.gg-live-map .context-nav-tools select,.gg-live-map .context-nav .airport-select{margin:0;min-width:132px;max-width:190px;padding:7px 8px;border-radius:9px;font-size:11px}

/* Los paneles funcionales no compiten con el rail. */
.gg-live-map .flight-mini,.gg-live-map .bus-panel{left:136px}
.gg-live-map .notice{left:136px}
.gg-live-map .aircraft-route-loading{margin:8px 0 10px;padding:8px 10px;border-radius:9px;background:rgba(49,95,120,.09);font-size:11px;font-weight:700;color:var(--accent2)}
.gg-live-map .aircraft-route-loading.muted{color:var(--muted);font-weight:600}

@media(max-width:700px){
  /* Móvil: dock inferior. El mapa conserva casi toda la altura útil. */
  .gg-live-map .app{height:var(--gg-first-vp-height,100svh);grid-template-rows:auto minmax(0,1fr)}
  .gg-live-map .credits{display:none}
  .gg-live-map .primary-nav{position:absolute;left:8px;right:8px;top:auto;bottom:8px;z-index:16;display:flex;flex-direction:row;align-items:stretch;gap:3px;width:auto;padding:4px;border:1px solid var(--line);border-radius:15px;background:var(--panel);box-shadow:0 8px 28px rgba(0,0,0,.22);backdrop-filter:blur(14px);overflow-x:auto}
  .gg-live-map .primary-nav button,.gg-live-map .primary-nav button.active,.gg-live-map .primary-nav > button:not(.active):hover,.gg-live-map .primary-nav > button:not(.active):focus-visible{flex:1 0 52px;width:auto;min-width:52px;height:48px;padding:4px 2px;display:flex;flex-direction:column;justify-content:center;gap:3px;border:0;border-radius:10px;box-shadow:none;background:transparent;color:var(--muted)}
  .gg-live-map .primary-nav > button.active{background:var(--accent);color:#fff}
  .gg-live-map .primary-nav > button .nav-icon{font-size:17px;line-height:17px;flex:0 0 auto}
  .gg-live-map .primary-nav > button .nav-label,.gg-live-map .primary-nav > button:not(.active):hover .nav-label,.gg-live-map .primary-nav > button:not(.active):focus-visible .nav-label{display:block;font-size:8px;line-height:1;font-weight:760;max-width:54px;overflow:hidden;text-overflow:ellipsis}
  .gg-live-map .context-nav{position:absolute;left:8px;right:8px;top:auto!important;bottom:66px;z-index:15;width:auto;max-width:none;padding:5px;border-radius:12px;overflow:hidden;animation:ggTrayUp .16s ease-out}
  @keyframes ggTrayUp{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
  .gg-live-map .context-nav-row{gap:5px;overflow-x:auto;overscroll-behavior-x:contain}
  .gg-live-map .context-nav-row button,.gg-live-map .context-route-list button{padding:7px 9px;font-size:10px}
  .gg-live-map .context-nav-tools{flex:0 0 auto}
  .gg-live-map .context-nav-tools select,.gg-live-map .context-nav .airport-select{min-width:112px;max-width:132px;padding:7px 7px;font-size:10px}
  .gg-live-map .flight-mini{display:none}
  .gg-live-map .bus-panel{left:8px;right:8px;top:8px;width:auto}
  .gg-live-map .notice{left:8px;right:8px;bottom:70px;max-width:none}
  .gg-live-map #map.context-open .notice{bottom:126px}
  .gg-live-map .meteo-timeline{bottom:70px}
  .gg-live-map #map.context-open .meteo-timeline{bottom:126px}
  .gg-live-map .zoom{top:8px;right:8px}
  .gg-live-map .popup{max-height:calc(100% - 76px);overflow:auto}
}

@media (prefers-reduced-motion:reduce){.gg-live-map .context-nav{animation:none}.gg-live-map .primary-nav > button{transition:none}}

/* V18.37 · Escritorio: las subsecciones se despliegan en vertical desde la pestaña activa. */
@media(min-width:701px){
  .gg-live-map .context-nav{
    left:136px;
    top:var(--context-y,10px);
    width:224px;
    max-width:224px;
    max-height:calc(100% - var(--context-y,10px) - 10px);
    display:flex;
    flex-direction:column;
    align-items:stretch;
    gap:6px;
    padding:7px;
    overflow-y:auto;
    overflow-x:hidden;
  }
  .gg-live-map .context-nav-row{
    display:flex;
    flex-direction:column;
    align-items:stretch;
    gap:5px;
    width:100%;
    max-width:none;
    overflow:visible;
  }
  .gg-live-map .context-route-list{
    display:flex;
    flex-direction:column;
    align-items:stretch;
    gap:5px;
    width:100%;
    max-height:min(58vh,430px);
    overflow-y:auto;
    overflow-x:hidden;
    padding-right:2px;
  }
  .gg-live-map .context-nav-row button,
  .gg-live-map .context-route-list button{
    width:100%;
    flex:0 0 auto;
    text-align:left;
    white-space:normal;
    line-height:1.2;
    padding:8px 10px;
  }
  .gg-live-map .context-nav-tools{
    display:flex;
    flex-direction:column;
    align-items:stretch;
    gap:5px;
    width:100%;
    margin:1px 0 0;
  }
  .gg-live-map .context-nav-tools select,
  .gg-live-map .context-nav .airport-select{
    width:100%;
    min-width:0;
    max-width:none;
    margin:0;
  }
  .gg-live-map #map.context-open .notice{left:372px}
  .gg-live-map #map.context-open .bus-panel{left:372px}
}

/* V18.37 · Móvil mantiene el dock inferior y su bandeja compacta horizontal. */
@media(max-width:700px){
  .gg-live-map .context-nav{display:flex;flex-direction:row;align-items:center;overflow:hidden}
  .gg-live-map .context-nav-row{display:flex;flex-direction:row;align-items:center;overflow-x:auto;overflow-y:hidden;width:auto;max-width:100%}
  .gg-live-map .context-route-list{display:flex;flex-direction:row;align-items:center;overflow-x:auto;overflow-y:hidden;max-height:none;width:auto}
  .gg-live-map .context-nav-row button,.gg-live-map .context-route-list button{width:auto;text-align:center;white-space:nowrap}
  .gg-live-map .context-nav-tools{display:flex;flex-direction:row;align-items:center;width:auto;margin-left:2px}
}
@media(min-width:701px){
  .gg-live-map #map.context-open .notice{max-width:calc(100% - 384px)}
  .gg-live-map #map.context-open .bus-panel{max-width:calc(100% - 384px)}
}


/* V18.39 · Las fichas de Aena se centran en el área útil del mapa y evitan el menú contextual. */
.gg-live-map .popup.flight-popup{z-index:20}


/* V18.40 · Dropdown contextual real bajo la sección activa + submenú de Vuelos. */
@media(min-width:701px){
  .gg-live-map .primary-nav{width:230px;max-height:calc(100% - 20px);overflow-y:auto;overflow-x:visible;scrollbar-width:thin;padding-right:2px}
  .gg-live-map .primary-nav .context-nav{
    position:relative;
    left:auto;
    top:auto!important;
    width:224px;
    max-width:224px;
    max-height:min(60vh,470px);
    margin:0;
    align-self:flex-start;
    display:flex;
    flex-direction:column;
    align-items:stretch;
    gap:6px;
    padding:7px;
    overflow-y:auto;
    overflow-x:hidden;
    animation:ggDropDown .16s ease-out;
  }
  @keyframes ggDropDown{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
  .gg-live-map .primary-nav .context-nav[hidden]{display:none!important}
  .gg-live-map .transport-subnav{display:flex;flex-direction:column;gap:5px;margin:0 0 2px 12px;padding:7px 0 3px 8px;border-left:2px solid rgba(91,63,134,.22)}
  .gg-live-map .transport-subnav[hidden]{display:none!important}
  .gg-live-map .transport-subnav .airport-select{width:100%;min-width:0;max-width:none;margin:0}
  .gg-live-map .transport-subnav .transport-subaction{width:100%;text-align:left;background:rgba(91,63,134,.08);border-color:rgba(91,63,134,.22);color:#513a76}
  .gg-live-map[data-site-theme="dark"] .transport-subnav .transport-subaction{background:#25202e;color:#d8cbed;border-color:#4d405e}
  .gg-live-map #map.context-open .notice,.gg-live-map #map.context-open .bus-panel{left:250px;max-width:calc(100% - 262px)}
}
@media(max-width:700px){
  .gg-live-map .transport-subnav{display:flex;align-items:center;gap:5px;flex:0 0 auto}
  .gg-live-map .transport-subnav[hidden]{display:none!important}
  .gg-live-map .transport-subnav .transport-subaction{white-space:nowrap;padding:7px 9px;font-size:10px}
}

/* Las fichas Aena son modales cartográficos: centro geométrico real del mapa. */
.gg-live-map .popup.flight-popup{z-index:24;max-height:calc(100% - 24px);overflow:auto}
@media(min-width:701px){
  .gg-live-map #map.context-open .popup.flight-popup{width:min(500px,calc(100% - 270px));min-width:min(280px,calc(100% - 270px))}
}

/* V18.40.2 · Tramos oficiales CNIG: inicio/final y ficha GPX. */
.gg-live-map .marker.camino-stage-point{
  width:22px;height:22px;min-width:22px;border-radius:50%;padding:0;
  display:flex;align-items:center;justify-content:center;
  font:800 10px/1 system-ui,-apple-system,Segoe UI,sans-serif;
  color:#fff;background:#176f52;border:2px solid #fff;
  box-shadow:0 1px 5px rgba(0,0,0,.28);z-index:7
}
.gg-live-map .marker.camino-stage-point.end{background:#9b2f38}
.gg-live-map .marker.camino-stage-point.selected{outline:3px solid rgba(17,24,39,.28);z-index:9}
.gg-live-map .camino-stage-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:12px 0}
.gg-live-map .camino-stage-stats span{padding:8px;border:1px solid rgba(0,0,0,.10);border-radius:8px;font-size:11px}
.gg-live-map .camino-stage-stats b{display:block;font-size:14px;margin-bottom:2px}
.gg-live-map .camino-stage-actions{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.gg-live-map .camino-stage-actions .source-link{display:inline-flex;margin:0}
.gg-live-map .camino-stage-variant,.gg-live-map .camino-stage-no-gpx{font-size:12px;opacity:.78}
.gg-live-map .legend .camino-stage-legend{display:inline-block;width:10px;height:10px;border-radius:50%;background:#176f52;border:2px solid #fff;box-shadow:0 0 0 1px #9b2f38}
@media(max-width:700px){.gg-live-map .camino-stage-stats{grid-template-columns:1fr 1fr 1fr}.gg-live-map .marker.camino-stage-point{width:20px;height:20px;min-width:20px}}

/* V18.40.3 · Perfil altimétrico de tramo, sin librerías externas. */
.gg-live-map .camino-profile{margin:14px 0 10px;padding-top:11px;border-top:1px solid rgba(0,0,0,.09)}
.gg-live-map .camino-profile h3{margin:0 0 7px;font-size:13px;text-transform:uppercase;letter-spacing:.035em}
.gg-live-map .camino-profile svg{display:block;width:100%;height:auto;max-height:190px;overflow:visible}
.gg-live-map .camino-profile svg text{font:10px system-ui,-apple-system,Segoe UI,sans-serif;fill:currentColor;opacity:.68}
.gg-live-map .profile-axis{stroke:currentColor;stroke-width:1;opacity:.25}
.gg-live-map .profile-grid{stroke:currentColor;stroke-width:1;stroke-dasharray:3 4;opacity:.12}
.gg-live-map .profile-area{fill:currentColor;opacity:.08}
.gg-live-map .profile-line{fill:none;stroke:#176f52;stroke-width:2.3;vector-effect:non-scaling-stroke}
.gg-live-map .camino-profile-note,.gg-live-map .camino-profile-empty{margin:5px 0 0;font-size:10px;opacity:.62}

/* V18.40.4 · hitos únicos y visualización real del tramo */
.gg-live-map .marker.camino-stage-point.joint{background:#24362f}
.gg-live-map .camino-stage-choices{display:grid;gap:7px;margin-top:10px}
.gg-live-map .camino-stage-choices button{width:100%;text-align:left;border:1px solid rgba(0,0,0,.12);background:transparent;border-radius:8px;padding:9px 10px;cursor:pointer}
.gg-live-map .camino-stage-actions button.source-link{font:inherit;cursor:pointer}

/* V18.40.5 · Hitos 1..N y visor GPX */
.gg-live-map .marker.camino-stage-point.numbered{background:#24362f}
.gg-live-map .marker.camino-stage-point.branch{width:16px;height:16px;min-width:16px;background:#8a6d3b;font-size:14px}
body.camino-gpx-open{overflow:hidden}
.camino-gpx-viewer[hidden]{display:none}
.camino-gpx-viewer{position:fixed;inset:0;z-index:100000;background:rgba(14,20,17,.76);display:flex;align-items:center;justify-content:center;padding:22px}
.camino-gpx-shell{width:min(1080px,96vw);max-height:94vh;overflow:auto;background:#fff;border-radius:12px;box-shadow:0 18px 60px rgba(0,0,0,.34)}
.camino-gpx-head{display:flex;justify-content:space-between;gap:20px;align-items:flex-start;padding:18px 20px 14px}
.camino-gpx-head p{margin:0 0 4px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;opacity:.62}
.camino-gpx-head h2{margin:0;font-size:21px}
.camino-gpx-close{border:0;background:transparent;font-size:30px;line-height:1;cursor:pointer;padding:0 4px}
.camino-gpx-map{height:min(48vh,480px);position:relative;overflow:hidden;background:#f3f1ea;border-top:1px solid rgba(0,0,0,.08);border-bottom:1px solid rgba(0,0,0,.08)}
.camino-gpx-map canvas{display:block;width:100%;height:100%}
.camino-gpx-map-label{position:absolute;left:14px;top:12px;padding:5px 7px;background:rgba(255,255,255,.9);border-radius:5px;font:700 10px/1 system-ui;letter-spacing:.05em}
.camino-gpx-profile-large{padding:10px 20px 0}
.camino-gpx-profile-large .camino-profile{border:0;margin:0}
.camino-gpx-profile-large .camino-profile svg{max-height:250px}
.camino-gpx-footer{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:10px 20px 20px}
@media(max-width:700px){
 .camino-gpx-viewer{padding:0}.camino-gpx-shell{width:100vw;max-height:100vh;height:100vh;border-radius:0}
 .camino-gpx-map{height:42vh}.camino-gpx-head{padding:14px}.camino-gpx-profile-large{padding:8px 12px 0}
 .camino-gpx-footer{padding:8px 12px 18px;align-items:flex-start;flex-direction:column}
}

/* V18.40.7 · Leyenda Camino sincronizada con la simbología real */
.gg-live-map .legend .camino{
  display:inline-block;width:24px;height:0;border-top:3px solid #c91f2d;
  border-radius:0;background:none;box-shadow:none
}
.gg-live-map .legend .camino-selected{
  display:inline-block;width:24px;height:0;border-top:5px solid #111827;
  border-radius:0;background:none;box-shadow:0 0 0 2px rgba(255,255,255,.98)
}
.gg-live-map .legend .camino-stage-legend{
  display:inline-flex;width:18px;height:18px;border-radius:50%;
  align-items:center;justify-content:center;background:#24362f;border:2px solid #fff;
  box-shadow:0 0 0 1px rgba(0,0,0,.2)
}
.gg-live-map .legend .camino-stage-legend::after{
  content:"1";color:#fff;font:800 9px/1 system-ui,-apple-system,Segoe UI,sans-serif
}
.gg-live-map .legend .camino-branch-legend{
  display:inline-block;width:14px;height:14px;border-radius:50%;
  background:#8a6d3b;border:2px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.2)
}

/* V18.40.8 · Visor GPX cartográfico */
.camino-gpx-map{background:#e8e6df}
.camino-gpx-tiles{position:absolute;inset:0;overflow:hidden}
.camino-gpx-tiles img{position:absolute;width:256px;height:256px;max-width:none;user-select:none}
.camino-gpx-track{position:absolute;inset:0;z-index:2;pointer-events:none}
.camino-gpx-controls{position:absolute;z-index:4;left:12px;top:12px;display:grid;gap:4px}
.camino-gpx-controls button{width:34px;height:34px;border:1px solid rgba(0,0,0,.18);border-radius:5px;background:rgba(255,255,255,.94);font:700 20px/1 system-ui;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.16)}
.camino-gpx-hover-dot{position:absolute;z-index:5;width:13px;height:13px;margin:-6.5px 0 0 -6.5px;border-radius:50%;background:#fff;border:4px solid #2864c7;box-shadow:0 1px 5px rgba(0,0,0,.3);pointer-events:none}
.camino-gpx-shell:fullscreen{width:100vw;height:100vh;max-height:none;border-radius:0;overflow:auto;background:#fff}
.camino-gpx-shell:fullscreen .camino-gpx-map{height:56vh}
.camino-gpx-profile-large .camino-profile svg{width:100%;max-height:280px}

/* V18.40.9 · Visor GPX tipo ficha técnica */
.camino-gpx-attribution{position:absolute;right:8px;bottom:6px;z-index:4;background:rgba(255,255,255,.86);padding:3px 5px;font:10px/1.2 system-ui;color:#4d5551}
.camino-gpx-metrics{display:grid;grid-template-columns:repeat(5,1fr);border-top:1px solid #ccd2ca;border-bottom:1px solid #ccd2ca;background:#f3f4ef}
.camino-gpx-metrics>div{padding:16px 18px;border-right:1px solid #ccd2ca}.camino-gpx-metrics>div:last-child{border-right:0}
.camino-gpx-metrics span,.camino-gpx-time-grid span{display:block;text-transform:uppercase;letter-spacing:.11em;font:700 10px/1.2 system-ui;color:#466257;margin-bottom:9px}
.camino-gpx-metrics b{font:700 23px/1.05 system-ui;color:#15211c}.camino-gpx-metrics small{font-size:11px;font-weight:500}
.camino-gpx-profile-section,.camino-gpx-time{padding:22px 26px}.camino-gpx-profile-section h3,.camino-gpx-time h3{margin:0 0 14px;font-size:21px;color:#17221d}
.camino-gpx-profile-large{padding:0;border:1px solid #cbd1ca;background:#f7f8f4}
.camino-gpx-profile-large .camino-profile{padding:14px 18px 8px}
.camino-gpx-profile-large .camino-profile h3{display:none}
.camino-gpx-profile-large .profile-line{stroke:#71877e;stroke-width:1.6}
.camino-gpx-profile-large .profile-area{fill:#71877e;opacity:.14}
.camino-gpx-profile-large .profile-axis{stroke:#8b9690;opacity:.38}
.camino-gpx-profile-large .profile-grid{stroke:#8b9690;opacity:.25}
.camino-gpx-profile-large .camino-profile-note{display:none}
.camino-gpx-time{padding-top:6px}.camino-gpx-time>p{max-width:650px;margin:0 0 16px;color:#65706b;font-size:13px;line-height:1.55}
.camino-gpx-time-grid{display:grid;grid-template-columns:1fr 1fr;border:1px solid #cbd1ca;background:#f7f8f4}
.camino-gpx-time-grid>div{padding:16px 18px}.camino-gpx-time-grid>div+div{border-left:1px solid #cbd1ca}
.camino-gpx-time-grid b{display:block;font:700 22px/1.1 ui-monospace,SFMono-Regular,Consolas,monospace;color:#17221d;margin-bottom:8px}
.camino-gpx-time-grid small{display:block;color:#65706b;line-height:1.45}
.camino-gpx-footer{border-top:1px solid #d8ddd6;background:#f3f4ef}
@media(max-width:760px){
 .camino-gpx-metrics{grid-template-columns:repeat(2,1fr)}.camino-gpx-metrics>div{border-bottom:1px solid #ccd2ca}
 .camino-gpx-time-grid{grid-template-columns:1fr}.camino-gpx-time-grid>div+div{border-left:0;border-top:1px solid #cbd1ca}
 .camino-gpx-profile-section,.camino-gpx-time{padding-left:12px;padding-right:12px}
}

/* V18.40.10 · Perfil altimétrico corregido */
.camino-gpx-profile-large .camino-profile{padding:16px 18px 8px;background:#f7f8f4;color:#46544e}
.camino-gpx-profile-large .camino-profile svg{display:block;width:100%;height:auto;max-height:320px;overflow:visible}
.camino-gpx-profile-large .camino-profile svg text{font:12px ui-monospace,SFMono-Regular,Consolas,monospace;fill:#45534d;opacity:1}
.camino-gpx-profile-large .profile-line{fill:none!important;stroke:#788f86!important;stroke-width:1.8!important;vector-effect:non-scaling-stroke}
.camino-gpx-profile-large .profile-area{fill:#aebbb5!important;fill-opacity:.28!important;stroke:none!important}
.camino-gpx-profile-large .profile-grid{stroke:#b8c0bb!important;stroke-width:1!important;stroke-dasharray:none!important;opacity:.72!important}
.camino-gpx-profile-large .profile-grid.vertical{opacity:.35!important}
.camino-profile-key{display:flex;gap:18px;align-items:center;margin:0 0 5px;font-size:12px;color:#53615b}
.camino-profile-key span{display:inline-flex;align-items:center;gap:7px}
.camino-profile-key i{display:inline-block;width:18px;height:0;border-top:2px solid #788f86}

/* V18.40.11 · táctil móvil y costuras de teselas */
.gg-live-map #map{touch-action:none;-webkit-user-select:none;user-select:none}
.gg-live-map .tile{
  image-rendering:auto;
  border:0;outline:0;
}

/* V18.40.12 · leyenda: tramo seleccionado = negro, igual que en el mapa */
.gg-live-map .legend i.camino-selected,
.gg-live-map .legend i.camino-selected-legend{
  display:inline-block!important;
  width:24px!important;
  height:0!important;
  min-width:24px!important;
  border:0!important;
  border-top:5px solid #111827!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
}

/* V18.40.13 · estabilización móvil */
.gg-live-map .marker.camino-place{
  width:30px;height:30px;padding:5px;border-radius:50%;
  background:#f7f5ed;border:2px solid #24362f;color:#24362f;
  box-shadow:0 1px 5px rgba(0,0,0,.24);
  display:flex;align-items:center;justify-content:center;
}
.gg-live-map .marker.camino-place svg{
  display:block;width:17px;height:17px;fill:none;stroke:currentColor;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round;
}
.gg-live-map .legend i.camino-place-legend{
  width:22px!important;height:22px!important;min-width:22px!important;
  border-radius:50%!important;background:#f7f5ed!important;
  border:2px solid #24362f!important;color:#24362f!important;
  display:inline-flex!important;align-items:center;justify-content:center;
  box-sizing:border-box;
}
.gg-live-map .legend i.camino-place-legend svg{
  width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;
}

/* V18.40.14 · perfil GPX táctil */
.gg-live-map .camino-gpx-profile svg{touch-action:pan-y}


/* V18.40.15 · gesto móvil: escena congelada, sin reconstruir teselas durante pinch/drag */
.gg-live-map .tile-layer,
.gg-live-map .reference-tile-layer,
.gg-live-map .meteo-canvas,
.gg-live-map .route-layer,
.gg-live-map .meteo-label-layer,
.gg-live-map .marker-layer{transform-origin:0 0}
.gg-live-map #map.gesture-active .tile-layer,
.gg-live-map #map.gesture-active .reference-tile-layer,
.gg-live-map #map.gesture-active .meteo-canvas,
.gg-live-map #map.gesture-active .route-layer,
.gg-live-map #map.gesture-active .meteo-label-layer,
.gg-live-map #map.gesture-active .marker-layer{will-change:transform}


/* V18.40.16 · Dock móvil anclado al viewport, no al lienzo del mapa. */
@media(max-width:700px){
  .gg-live-map .primary-nav{
    position:fixed;
    left:8px;
    right:8px;
    top:auto;
    bottom:calc(8px + env(safe-area-inset-bottom, 0px));
    z-index:9990;
    max-width:calc(100vw - 16px);
    margin:0;
    overscroll-behavior:contain;
  }
  .gg-live-map .context-nav{
    position:fixed;
    left:8px;
    right:8px;
    top:auto!important;
    bottom:calc(66px + env(safe-area-inset-bottom, 0px));
    z-index:9989;
    max-width:calc(100vw - 16px);
    margin:0;
    overscroll-behavior:contain;
  }
}
