:root{--ink:#17253d;--muted:#6e7d92;--line:#e3e9f0;--blue:#b9e6f5;--blue-deep:#1685a8;--green:#26ad77;--yellow:#e2ae35;--red:#e35e5d;--surface:#fff;--bg:#f5f8fb;--shadow:0 14px 40px rgba(25,50,78,.07)}
*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{margin:0;color:var(--ink);background:var(--bg);font-family:'DM Sans',system-ui,sans-serif}button,input,select{font:inherit}.site-header{background:var(--blue);border-bottom:1px solid rgba(23,37,61,.08)}.header-inner{height:78px;max-width:1180px;margin:auto;padding:0 28px;display:flex;align-items:center;gap:24px}.updated{font-size:12px;color:#3c6372}.page-shell{max-width:1180px;margin:auto;padding:48px 28px 55px}.intro{display:flex;justify-content:space-between;align-items:flex-end;gap:28px;margin-bottom:34px}.intro h1{font:600 clamp(32px,4vw,46px)/1.05 'Space Grotesk',sans-serif;letter-spacing:-.065em;margin:0}.intro-copy{color:var(--muted);font-size:15px;margin:13px 0 0}.summary{display:flex;gap:26px;padding-bottom:3px}.summary div{display:grid;gap:1px}.summary strong{font:600 23px 'Space Grotesk',sans-serif}.summary span,.results-heading span{font-size:12px;color:var(--muted)}.controls{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:15px;box-shadow:var(--shadow);margin-bottom:26px}.results-heading{display:flex;align-items:baseline;gap:12px;margin:0 3px 11px}.results-heading h2{font:600 18px 'Space Grotesk',sans-serif;letter-spacing:-.03em;margin:0}.table-wrap{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}table{width:100%;border-collapse:collapse}th{height:44px;background:#f8fafc;color:#8997a8;text-align:left;text-transform:uppercase;letter-spacing:.08em;font-size:10px;font-weight:700;padding:0 17px}td{border-top:1px solid var(--line);padding:15px 17px;font-size:13px;vertical-align:middle}.train-row{cursor:pointer;transition:background .15s}.train-row:hover,.train-row:focus{background:#fafdff}.train-row:focus{outline:2px solid var(--blue-deep);outline-offset:-2px}.service-pill{display:inline-flex;border-radius:5px;padding:5px 7px;background:#eaf6fa;color:#187795;font-size:11px;font-weight:700;letter-spacing:.03em}.code{font-weight:700;font-family:'Space Grotesk',sans-serif;letter-spacing:.02em}.route{font-weight:600}.route span{color:var(--muted);font-weight:400}.time{color:#53657c;font-variant-numeric:tabular-nums;white-space:nowrap}.time b{color:var(--ink);font-weight:600}.delay{min-width:140px}.chevron{display:inline-block;color:#9aa8b7;font-size:18px;transition:transform .2s}.is-open .chevron{transform:rotate(180deg)}.detail-row{display:none;background:#f9fbfd}.detail-row.is-open{display:table-row}.detail-row td{padding:0;border-top:0}.detail-inner{margin:0 17px 16px;border:1px solid #dfe8ef;border-radius:10px;background:#fff;padding:16px;display:flex;gap:30px;align-items:center}.detail-heading{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:700}.stops{display:flex;align-items:flex-start;flex-wrap:wrap;gap:0;flex:1;margin-top:10px}.stop{display:flex;align-items:center;color:var(--ink);font-size:12px}.stop:not(:last-child)::after{content:'→';color:#9babb9;margin:0 10px}.stop-dot{height:7px;width:7px;background:var(--blue-deep);border-radius:50%;margin-right:5px}.movement{color:var(--muted);font-size:12px;white-space:nowrap}.empty-state{text-align:center;padding:60px 20px;color:var(--muted)}.empty-icon{font-size:38px;color:var(--blue-deep);display:block;transform:rotate(-20deg)}.empty-state strong{display:block;color:var(--ink);margin-top:8px}.empty-state p{font-size:13px;margin:6px 0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.schedule{display:flex;align-items:center;gap:9px;color:#9aa8b7;white-space:nowrap}.schedule>i{font-style:normal}.date-time{display:grid;gap:1px;font-variant-numeric:tabular-nums}.date-time small{font-size:10px;color:var(--muted);text-transform:uppercase}.date-time b{color:var(--ink);font-weight:600}.delay{min-width:165px}.empty-icon{transform:none}.empty-icon.is-search{transform:rotate(-20deg)}.empty-icon.is-close{font-size:52px;line-height:.75}
.schedule{display:table-cell;text-align:center;vertical-align:middle}.schedule-inner{display:inline-flex;align-items:center;justify-content:center;gap:9px;color:#9aa8b7;white-space:nowrap}.schedule-inner>i{font-style:normal}.schedule-route{display:none}.schedule-times{display:inline-flex;align-items:center;gap:9px}.schedule-times>i{font-style:normal}.current-trains-table-wrap{overflow-x:auto}.current-trains-table{table-layout:fixed;min-width:1000px}.current-trains-table .train-col-type{width:10%}.current-trains-table .train-col-code{width:8%}.current-trains-table .train-col-route{width:37%}.current-trains-table .train-col-schedule{width:21%}.current-trains-table .train-col-delay{width:21%}.current-trains-table .train-col-details{width:3%}.current-trains-table .route{overflow:visible;text-overflow:clip;white-space:normal;overflow-wrap:break-word;line-height:1.4}.current-trains-table .schedule{white-space:nowrap}.current-trains-table th:nth-child(4){text-align:center;white-space:nowrap}.current-trains-table .delay-cell{width:100%;flex-flow:row nowrap;align-items:center;justify-content:flex-start;gap:8px}.current-trains-table .train-map-link{flex:0 0 auto;margin-left:15px}.current-trains-table th:last-child,.current-trains-table td:last-child{text-align:center;padding-left:4px;padding-right:8px}
@media(max-width:760px){.header-inner{height:70px;padding:0 17px}.updated{font-size:10px}.page-shell{padding:30px 14px}.intro{display:block;margin-bottom:25px}.summary{margin-top:25px;gap:23px}.summary strong{font-size:20px}.table-wrap{overflow-x:auto}table{min-width:840px}.detail-inner{align-items:flex-start;display:block}}

.journey-filters{display:grid;grid-template-columns:1fr .78fr 1.42fr 1.42fr 1.05fr 1.05fr;gap:10px}.mini-filter{height:58px;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fbfcfe;padding:8px 11px;display:flex;flex-direction:column;justify-content:center;gap:3px}.mini-filter:focus-within{border-color:var(--blue-deep);box-shadow:0 0 0 3px rgba(22,133,168,.1)}.mini-filter>span{color:#8997a8;font-size:9px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;white-space:nowrap}.mini-filter input,.mini-filter select{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--ink);padding:0;font-size:13px}.mini-filter input::placeholder{color:#a4afbc}.mini-filter select{cursor:pointer}.mini-filter input[type=time]{font-variant-numeric:tabular-nums}
@media(max-width:1000px){.journey-filters{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:760px){.journey-filters{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:430px){.journey-filters{grid-template-columns:1fr}}

.view-tabs{display:inline-flex;gap:4px;margin:0 0 28px;padding:4px;background:#eaf0f5;border-radius:10px}.view-tab{border:0;border-radius:7px;background:transparent;color:var(--muted);cursor:pointer;padding:9px 14px;font-size:13px;font-weight:700;text-decoration:none}.view-tab.is-active{color:var(--ink);background:#fff;box-shadow:0 2px 7px rgba(28,48,70,.09)}.view-tab:focus-visible{outline:2px solid var(--blue-deep);outline-offset:2px}
.history-intro{align-items:flex-end}.history-actions{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-top:0}.history-actions p{margin:12px 0 0;color:var(--muted);font-size:12px}
.history-results-heading{margin-bottom:11px}.history-search-results{margin-bottom:14px;padding:15px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}.history-options{display:grid;gap:9px}.history-option-item{overflow:hidden;border:1px solid var(--line);border-radius:11px;background:#fbfcfe;transition:border-color .16s,box-shadow .16s}.history-option-item:hover{border-color:#9fd4e5}.history-option-item.is-selected{border-color:var(--blue-deep);box-shadow:0 0 0 2px rgba(22,133,168,.10)}.history-option{width:100%;display:grid;grid-template-columns:85px minmax(0,1fr) auto 18px;gap:13px;align-items:center;border:0;background:transparent;color:var(--ink);cursor:pointer;text-align:left;padding:12px}.history-option:hover,.history-option:focus-visible{background:#f6fbfd;outline:0}.history-option.is-selected{background:#f4fafc}.history-option-train{display:grid;gap:4px}.history-option-train strong{font:700 14px 'Space Grotesk',sans-serif}.history-option-route{min-width:0;display:grid;justify-items:start;gap:4px}.history-route-status{display:inline-flex;max-width:100%;align-items:center;gap:6px;border-radius:8px;padding:5px 8px;font-size:9px;line-height:1.25}.history-route-status.is-complete{background:#eaf6fa;color:var(--blue-deep)}.history-route-status strong{font-weight:800}.history-info-icon{display:inline-grid;flex:0 0 auto;width:14px;height:14px;place-items:center;border:1.5px solid currentColor;border-radius:50%;font:700 9px/1 'Space Grotesk',sans-serif}.history-route-primary,.history-route-context{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.history-route-primary{font-size:13px;font-weight:700}.history-route-primary.is-complete-route{font-weight:600}.history-route-context{color:var(--muted);font-size:10px}.history-option-meta{text-align:right;color:var(--muted);font-size:10px;white-space:nowrap;display:grid;gap:4px}.history-option-meta span{display:block}.history-option-meta strong{display:inline;margin:0 3px 0 0;color:var(--ink);font-size:12px}.history-option-toggle{color:#8da0b2;font-size:18px;line-height:1;transition:transform .2s}.history-option[aria-expanded="true"] .history-option-toggle{transform:rotate(180deg)}.history-option-detail{border-top:1px solid var(--line);background:#f8fafc}.history-inline-detail{padding:18px}.history-options-message{padding:18px;text-align:center;color:var(--muted);font-size:13px;border:1px dashed var(--line);border-radius:9px}.history-options-initial,.history-options-empty{min-height:150px;display:flex;flex-direction:column;align-items:center;justify-content:center}.history-options-initial-icon,.history-options-placeholder-icon{color:var(--blue-deep);font-size:38px;line-height:1}.history-options-initial-icon{transform:rotate(-20deg)}.history-options-placeholder-icon.is-close{font-size:52px;line-height:.75}.history-options-message strong{display:block;margin-top:8px;color:var(--ink);font-size:16px}.history-options-message p{max-width:470px;margin:6px auto 0;line-height:1.45}.history-options-loader{display:block;width:25px;height:25px;border:3px solid #dcebf1;border-top-color:var(--blue-deep);border-radius:50%;animation:history-spin .8s linear infinite}
.history-search-hint{display:flex;align-items:center;gap:7px;min-height:14px;line-height:14px;color:var(--muted);font-size:12px}.history-search-hint .history-info-icon{background:#eaf6fa;color:var(--blue-deep);}
.current-search-hint{margin:12px 0 0}
.history-options-scroll{padding:1px}.history-more{display:block;margin:11px auto 2px;border:1px solid #bfd4df;border-radius:8px;background:#f7fbfd;color:var(--blue-deep);cursor:pointer;padding:8px 18px;font-size:11px;font-weight:700}.history-more:hover{background:#edf8fb;border-color:#8fc7d9}.history-more:focus-visible{outline:3px solid rgba(22,133,168,.18);outline-offset:2px}.history-more:disabled{cursor:wait;opacity:.65}
.history-inline-state{min-height:170px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:35px 20px;color:var(--muted)}.history-inline-state strong{color:var(--ink);margin-top:8px}.history-inline-state p{font-size:13px;margin:6px 0}.history-placeholder-icon{color:var(--blue-deep);font-size:32px}.history-placeholder-icon.is-search{transform:rotate(-20deg)}.history-loader{width:25px;height:25px;border:3px solid #dcebf1;border-top-color:var(--blue-deep);border-radius:50%;animation:history-spin .8s linear infinite}@keyframes history-spin{to{transform:rotate(360deg)}}
.history-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:12px}.history-summary>div{background:#fff;border:1px solid var(--line);border-radius:11px;padding:13px 15px;box-shadow:0 8px 24px rgba(25,50,78,.04)}.history-summary span{display:block;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.07em;font-weight:700}.history-summary strong{display:block;margin-top:5px;font:600 21px 'Space Grotesk',sans-serif}
.history-chart-card{margin:0;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);padding:17px 18px 13px;overflow:hidden}.history-chart-card figcaption{font-size:12px;font-weight:700;color:var(--ink);margin-bottom:12px}.history-chart{height:270px;min-width:760px;display:grid;grid-template-columns:repeat(14,minmax(0,1fr));gap:4px;align-items:stretch;padding:16px 3px 0;background:repeating-linear-gradient(to top,transparent 0,transparent 61px,#edf1f5 62px,#edf1f5 63px)}.history-day{min-width:0;display:grid;grid-template-rows:1fr 32px;gap:8px}.history-bars{display:flex;align-items:flex-end;justify-content:center;gap:4px;min-height:0}.history-bar-wrap{height:100%;min-width:16px;flex:1;max-width:34px;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;position:relative}.history-bar-value{font-size:9px;font-weight:700;color:var(--muted);white-space:nowrap;margin-bottom:4px}.history-bar{width:100%;height:var(--bar-height);min-height:4px;border-radius:5px 5px 2px 2px;background:var(--green)}.history-bar.yellow{background:var(--yellow)}.history-bar.red{background:var(--red)}.history-unavailable{display:flex;align-items:center;justify-content:center;width:30px;height:22px;margin-bottom:2px;border-radius:5px;background:#f0f3f6;color:#8290a1;font-size:9px;font-weight:800}.history-day-label{text-align:center;color:var(--muted);font-size:10px;line-height:1.15;text-transform:uppercase}.history-day-label strong{display:block;color:var(--ink);font-size:11px}.history-legend{display:flex;gap:18px;align-items:center;border-top:1px solid var(--line);padding-top:10px;color:var(--muted);font-size:10px}.history-legend span{display:flex;align-items:center;gap:5px}.history-legend i{display:block;width:8px;height:8px;border-radius:2px;background:var(--blue-deep)}.history-legend b{display:inline-flex;align-items:center;justify-content:center;height:16px;padding:0 4px;border-radius:3px;background:#f0f3f6;color:#8290a1;font-size:8px}
@media(max-width:760px){.view-tabs{display:flex;width:100%}.view-tab{flex:1}.history-actions{align-items:stretch;flex-direction:column}.history-search-results{padding:12px}.history-option{grid-template-columns:70px minmax(0,1fr) 18px}.history-option-route{grid-column:2}.history-option-meta{grid-column:2;text-align:left;display:flex;gap:7px;align-items:baseline;white-space:normal}.history-option-toggle{grid-column:3;grid-row:1/3}.history-option-meta strong{display:inline}.history-inline-detail{padding:13px}.history-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.history-chart-card{overflow-x:auto}}

.delay-badge{display:inline-flex;align-items:center;min-width:138px;min-height:52px;padding:8px 12px;border:1px solid;border-left-width:5px;border-radius:10px;box-shadow:0 5px 14px rgba(23,37,61,.05);vertical-align:middle}.delay-badge.green{color:#17885c;background:#effaf5;border-color:#a9dfc8;border-left-color:var(--green)}.delay-badge.yellow{color:#a77708;background:#fff9e9;border-color:#ecd491;border-left-color:var(--yellow)}.delay-badge.red{color:#c94746;background:#fff2f2;border-color:#efb1b0;border-left-color:var(--red)}.delay-badge-copy{display:grid;gap:2px;line-height:1}.delay-badge-copy strong{font:700 17px 'Space Grotesk',sans-serif;letter-spacing:-.02em;white-space:nowrap}.delay-badge-copy small{font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;opacity:.72}.delay-badge.green .delay-badge-copy strong{font-size:14px}
.delay-badge{color:var(--delay-color);background:var(--delay-soft);border-color:var(--delay-border);border-left-color:var(--delay-color)}.delay-badge.is-clear .delay-badge-copy strong{font-size:14px}.history-bar{background:var(--delay-color,var(--green))}

/* Cabecera principal */




/* Cabecera con navegación integrada */
.site-header{background:#edf8fb;border-bottom-color:#d8eaf0}
.header-inner{min-height:0;height:auto;padding:16px 28px;gap:12px;justify-content:flex-start;align-items:flex-start;flex-direction:column}



.site-header .view-tabs{flex:0 0 auto;margin:0;padding:4px;background:#dfeef3;border:1px solid #d3e5eb;border-radius:11px}
.site-header .view-tab{color:#607985;padding:9px 14px}
.site-header .view-tab:hover{color:var(--ink)}
.site-header .view-tab.is-active{color:#176f8b;background:#f8fcfd;box-shadow:0 2px 6px rgba(31,91,108,.08)}
.intro-summary{display:grid;justify-items:start;gap:13px}.realtime-status{display:flex;align-items:center;gap:9px;color:#3c6372;font-size:12px;font-weight:600;white-space:nowrap}.realtime-pulse{position:relative;display:block;width:11px;height:11px;border-radius:50%;background:var(--green);box-shadow:0 0 0 5px rgba(38,173,119,.14)}.realtime-pulse::after{content:'';position:absolute;inset:-6px;border:1px solid rgba(38,173,119,.38);border-radius:50%;animation:realtime-ripple 2.2s ease-out infinite}@keyframes realtime-ripple{0%{opacity:.75;transform:scale(.55)}70%,100%{opacity:0;transform:scale(1.55)}}
.page-shell{padding-top:36px}

@media(max-width:760px){
  .header-inner{padding:15px 17px;gap:11px;align-items:flex-start}


  .site-header .view-tabs{display:flex;width:auto;align-self:flex-start;margin:0}
  .site-header .view-tab{flex:0 0 auto;padding:8px 10px;font-size:11px}
  .page-shell{padding-top:26px}
}

/* Cabecera compacta: logo y secciones */
.header-inner{height:72px;min-height:0;padding:0 28px;gap:13px;justify-content:flex-start;align-items:center;flex-direction:row}




@media(max-width:760px){
  .header-inner{height:64px;padding:0 14px;gap:9px;align-items:center;flex-direction:row}


  .site-header .view-tabs{display:flex;width:auto;align-self:auto;margin:0}
  .site-header .view-tab{flex:0 0 auto;padding:8px 9px;font-size:10px}
  .realtime-status{font-size:10px}
}

.renfe-highlight{color:#82005e}
.renfe-highlight strong{font-weight:700}

/* Todos los días recibidos ocupan la fila completa */
.history-chart{grid-template-columns:repeat(var(--history-day-count,14),minmax(0,1fr));gap:3px}

/* Mapa de posiciones en tiempo real */
.map-intro{align-items:flex-end}
.map-controls{margin-bottom:26px}
.map-search-hint{margin:12px 0 0}
.map-results-section{margin-top:0}
.map-results-heading{justify-content:space-between}
.map-card{position:relative;overflow:hidden;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}
.train-map{width:100%;height:min(67vh,650px);min-height:520px;background:#edf1f2}
.map-card:fullscreen,.map-card:-webkit-full-screen{width:100%;height:100%;border:0;border-radius:0;background:#edf1f2}
.map-card:fullscreen .train-map,.map-card:-webkit-full-screen .train-map{height:100%;min-height:0}
body.map-fullscreen-active{overflow:hidden}
.map-card.is-fullscreen-fallback{position:fixed;z-index:2000;inset:0;width:100vw;height:100vh;height:100dvh;border:0;border-radius:0;background:#edf1f2}
.map-card.is-fullscreen-fallback .train-map{height:100%;min-height:0}
.map-station-search{position:absolute;z-index:750;top:14px;right:14px;width:min(300px,calc(100% - 28px));margin:0}
.map-station-search-row{display:flex;align-items:center;gap:7px;padding:5px 6px 5px 10px;border:1px solid rgba(205,217,227,.95);border-radius:10px;background:rgba(255,255,255,.96);box-shadow:0 6px 20px rgba(24,47,67,.12);backdrop-filter:blur(5px)}
.map-station-search-icon{color:#176f8b;font-size:18px;line-height:1;transform:rotate(-20deg)}
.map-station-search input{min-width:0;flex:1;border:0;background:transparent;color:var(--ink);font:500 11px 'DM Sans',sans-serif;outline:0}
.map-station-search input::placeholder{color:#8796a3}
.map-station-search button{border:0;border-radius:6px;background:#176f8b;color:#fff;cursor:pointer;padding:7px 10px;font:700 10px 'DM Sans',sans-serif;line-height:1;transition:background .15s,transform .15s}
.map-station-search button:hover,.map-station-search button:focus-visible{background:#125d73;transform:translateY(-1px)}
.map-station-search button:focus-visible{outline:2px solid rgba(22,133,168,.35);outline-offset:2px}
.map-station-suggestions{overflow:hidden;margin-top:5px;border:1px solid rgba(205,217,227,.95);border-radius:10px;background:rgba(255,255,255,.97);box-shadow:0 6px 20px rgba(24,47,67,.12);color:#647684;font:600 10px 'DM Sans',sans-serif}
.map-station-suggestions button{display:block;width:100%;border:0;border-radius:0;background:transparent;color:var(--ink);cursor:pointer;padding:9px 11px;text-align:left;font:600 11px 'DM Sans',sans-serif;line-height:1.2}
.map-station-suggestions button+button{border-top:1px solid #edf1f4}
.map-station-suggestions button:hover,.map-station-suggestions button:focus-visible{background:#eef8fa;color:#176f8b;outline:0}
.map-station-suggestions.is-message{padding:10px 11px}
.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}
.map-state-overlay{position:absolute;z-index:800;left:50%;top:50%;width:min(390px,calc(100% - 36px));transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;text-align:center;padding:24px 26px;border:1px solid rgba(203,216,226,.92);border-radius:14px;background:rgba(255,255,255,.96);box-shadow:0 16px 45px rgba(30,48,67,.14);color:var(--muted)}
.map-state-overlay strong{margin-top:10px;color:var(--ink);font-size:14px}
.map-state-overlay p{margin:5px 0 0;font-size:12px;line-height:1.45}
.map-legend-toggle{display:none}.map-legend{position:absolute;z-index:750;left:14px;bottom:14px;width:205px;padding:11px 12px 10px;border:1px solid rgba(205,217,227,.95);border-radius:10px;background:rgba(255,255,255,.94);box-shadow:0 6px 20px rgba(24,47,67,.12);backdrop-filter:blur(5px)}
.map-legend-title{margin-bottom:7px;color:var(--ink);font-size:10px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}
.map-delay-scale-wrap{position:relative;padding-top:6px}
.map-delay-unit{position:absolute;top:-2px;right:0;color:var(--muted);font-size:7px;font-weight:700;line-height:1}
.map-delay-scale{height:7px;border-radius:99px;background:linear-gradient(90deg,rgb(38,173,119) 0%,rgb(226,174,53) 16.667%,rgb(239,133,31) 50%,rgb(229,57,53) 100%)}
.map-delay-labels{position:relative;height:12px;margin-top:4px;color:var(--muted);font-size:8px;font-variant-numeric:tabular-nums}
.map-delay-labels span{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap}
.map-delay-labels span:first-child{left:0;transform:none}
.map-delay-labels span:nth-child(2){left:25%}
.map-delay-labels span:nth-child(3){left:50%}
.map-delay-labels span:nth-child(4){left:75%}
.map-delay-labels span:last-child{left:100%;transform:translateX(-100%)}
.map-railway-key,.map-station-key,.map-itinerary-station-key{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:9px}
.map-railway-key{margin-top:9px;padding-top:8px;border-top:1px solid var(--line)}
.map-railway-key+.map-railway-key{margin-top:7px;padding-top:0;border-top:0}
.map-railway-key i{display:block;width:18px;border-top:2px solid;border-radius:99px;opacity:.9}
.map-railway-key.is-high-speed i{border-color:#8c397c}
.map-railway-key.is-conventional i{border-color:#4a4a49}
.map-station-key,.map-itinerary-station-key{margin-top:7px}
.map-station-key i{display:block;width:7px;height:7px;border:1.5px solid #60788b;border-radius:50%;background:#fff}
.map-itinerary-station-key i{display:block;width:11px;height:11px;border:3px solid #1685a8;border-radius:50%;background:#fff}
.train-code-tooltip .maplibregl-popup-content{padding:4px 7px;border:1px solid rgba(210,220,228,.95);border-radius:5px;background:rgba(255,255,255,.97);box-shadow:0 3px 9px rgba(20,36,50,.14);color:var(--ink);font:700 10px/1.45 'Space Grotesk',sans-serif;letter-spacing:.01em;text-align:left}
.train-code-tooltip.maplibregl-popup-anchor-left .maplibregl-popup-tip{border-right-color:rgba(210,220,228,.95)}
.station-map-tooltip .maplibregl-popup-content{padding:5px 7px;border:1px solid #d5dfe7;border-radius:6px;background:#fff;box-shadow:0 4px 12px rgba(24,47,67,.10);color:var(--ink);font:600 10px 'DM Sans',sans-serif}
.station-map-tooltip.maplibregl-popup-anchor-bottom .maplibregl-popup-tip{border-top-color:#d5dfe7}
.train-map-popup .maplibregl-popup-content{overflow:hidden;padding:0;border-radius:12px;box-shadow:0 12px 34px rgba(20,39,58,.18)}
.train-map-popup .maplibregl-popup-close-button{z-index:2;top:7px;right:7px;width:25px;height:25px;border-radius:50%;color:#7a8998;font-size:18px;line-height:23px}
.map-popup{min-width:320px;max-width:420px;padding:13px 17px;color:var(--ink);font-family:'DM Sans',sans-serif}
.map-popup.has-multiple-trains{padding-top:9px}
.map-popup-tabs{display:flex;gap:4px;overflow-x:auto;margin:0 -4px 11px;padding:0 26px 7px 4px;border-bottom:1px solid var(--line);scrollbar-width:thin}
.map-popup-tab{flex:0 0 auto;border:1px solid #dce5eb;border-radius:7px;background:#f5f7f9;color:#667987;cursor:pointer;padding:6px 8px;font:700 12px/1 'Space Grotesk',sans-serif;white-space:nowrap;transition:background .15s,border-color .15s,color .15s}
.map-popup-tab:hover,.map-popup-tab:focus-visible{border-color:#9dcbd9;background:#f0f9fb;color:#176f8b;outline:0}
.map-popup-tab.is-active{border-color:#1685a8;background:#eaf6fa;color:#176f8b;box-shadow:0 0 0 1px rgba(22,133,168,.08)}
.map-popup-train-panel[hidden]{display:none}
.map-popup-heading{display:flex;align-items:center;gap:8px;padding-right:22px;margin-bottom:11px}
.map-popup-heading strong{font:700 16px 'Space Grotesk',sans-serif}
.map-popup-route{font-size:12px;font-weight:700;line-height:1.4}
.map-popup-route span{color:#91a1af;font-weight:500}
.map-popup-route.is-unknown{color:var(--muted);font-weight:500}
.map-popup-time-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:25px;margin-top:3px}
.map-popup-times{flex:1;min-width:0;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}
.map-popup-status{display:flex;align-items:center;gap:7px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line);font-size:11px}
.map-popup-status i{width:9px;height:9px;border-radius:50%;background:var(--marker-color)}
.map-popup-movement{margin-top:2px;color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}
.map-popup-movement time{color:var(--ink);font-size:11.5px;font-weight:700}
.map-popup-follow{display:inline-flex;width:30px;height:auto;min-height:26px;align-self:stretch;align-items:center;justify-content:center;flex:0 0 30px;border:1px solid #bdd9e3;border-radius:5px;background:#f5fbfd;color:#176f8b;cursor:pointer;padding:0;line-height:1;transition:background .15s,border-color .15s,transform .15s}
.map-popup-follow:hover,.map-popup-follow:focus-visible{background:#eaf6fa;border-color:#8fc7d9;transform:translateY(-1px)}
.map-popup-follow:focus-visible{outline:2px solid rgba(22,133,168,.35);outline-offset:2px}
.map-popup-follow-icon{position:relative;display:inline-flex;align-items:center;justify-content:center;font-size:12px;line-height:1}
.map-popup-follow.is-cancel .map-popup-follow-icon::after{content:'';position:absolute;width:16px;height:2px;border-radius:2px;background:currentColor;transform:rotate(-45deg)}
.train-map .maplibregl-ctrl-group{overflow:hidden;border:1px solid #d5dfe7;border-radius:9px;box-shadow:0 5px 17px rgba(24,47,67,.12)}
.train-map .maplibregl-ctrl-group button{color:#36556a;background-color:rgba(255,255,255,.95);transition:background-color .15s,color .15s}
.train-map .maplibregl-ctrl-group button:hover{background-color:#f4f8fa}
.train-map .maplibregl-ctrl-group button:focus-visible{position:relative;z-index:1;outline:2px solid #1685a8;outline-offset:-2px}
.train-map .maplibregl-ctrl-group button:disabled{cursor:default;opacity:.35}
.train-map .maplibregl-ctrl-group button:disabled .maplibregl-ctrl-icon{opacity:.55}
.train-map .map-fullscreen-control{overflow:hidden;border:1px solid #d5dfe7;border-radius:9px;box-shadow:0 5px 17px rgba(24,47,67,.12)}
.train-map .maplibregl-ctrl-group .map-fullscreen-button{display:grid;width:30px;height:30px;place-items:center;border:0;background:rgba(255,255,255,.95);color:#36556a;cursor:pointer;padding:0;transition:background .15s,color .15s}
.map-fullscreen-button:hover{background:#f4f8fa;color:#176f8b}
.map-fullscreen-button:focus-visible{position:relative;z-index:1;outline:2px solid #1685a8;outline-offset:-2px}
.map-fullscreen-button svg{display:block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.map-fullscreen-button .map-fullscreen-exit-icon,.map-fullscreen-button.is-active .map-fullscreen-enter-icon{display:none}
.map-fullscreen-button.is-active .map-fullscreen-exit-icon{display:block}
.train-map .maplibregl-ctrl-attrib{color:#70808e;background:rgba(255,255,255,.82);font-size:8px}
.train-map .maplibregl-ctrl-attrib a{color:#466f85}
.train-map .maplibregl-ctrl-scale{margin-right:14px;margin-bottom:14px;border-color:#304d60;border-top:0;border-width:0 2px 2px;background:rgba(255,255,255,.88);box-shadow:0 1px 4px rgba(24,47,67,.12);color:#304d60;font:600 9px/1.2 'DM Sans',sans-serif;text-align:center;text-shadow:none}

/* En páginas cortas, el pie se mantiene al final de la ventana. */
html{scrollbar-gutter:stable}
body{min-height:100vh;display:flex;flex-direction:column}
.page-shell{margin-block:0}
.site-footer{margin-top:auto;border-top:1px solid #d8eaf0;background:#eaf6f9;color:#587482}
.footer-inner{max-width:1180px;margin:auto;padding:27px 28px 30px;display:flex;align-items:flex-start;justify-content:space-between;gap:30px}
.footer-copy{max-width:800px;font-size:11px;line-height:1.55}
.footer-copy p{margin:0 0 7px}
.footer-copy p:last-child{margin-bottom:0}
.footer-title{color:#176f8b;font:700 13px 'Space Grotesk',sans-serif;letter-spacing:-.02em}
.footer-disclaimer{color:#708896}
.footer-contact-card{width:340px;flex:0 0 auto;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:'author author' 'copy contact';align-items:center;column-gap:12px;row-gap:9px;margin-top:22px;padding:12px 13px;border:1px solid #cce3ea;border-radius:11px;background:rgba(248,252,253,.82);box-shadow:0 3px 10px rgba(31,91,108,.06)}
.footer-author{grid-column:1/-1;display:flex;align-items:center;justify-content:flex-start;gap:2px;color:#176f8b;font:700 12px 'Space Grotesk',sans-serif}
.footer-linkedin{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 20px;border:0;border-radius:3px;background:transparent;text-decoration:none;overflow:hidden;transition:transform .15s,opacity .15s}
.footer-linkedin img{display:block;width:70%;height:70%;object-fit:contain}
.footer-linkedin:hover,.footer-linkedin:focus-visible{background:transparent;transform:translateY(-1px);opacity:.86}
.footer-linkedin:focus-visible{outline:2px solid #1685a8;outline-offset:2px}
.footer-contact-copy{grid-area:copy;min-width:0;margin:0;color:#708896;font-size:11px;line-height:1.4}
.footer-contact-icon{width:14px;height:14px;fill:currentColor}
.footer-contact{grid-area:contact;display:inline-flex;align-items:center;justify-self:end;gap:7px;flex:0 0 auto;white-space:nowrap;padding:8px 11px;border:1px solid #b9dce6;border-radius:8px;background:#f8fcfd;color:#176f8b;font-size:12px;font-weight:700;text-decoration:none;box-shadow:0 2px 6px rgba(31,91,108,.07);transition:background .15s,border-color .15s,transform .15s}
.footer-contact:hover,.footer-contact:focus-visible{background:#fff;border-color:#8fc8d8;transform:translateY(-1px)}
.footer-contact:focus-visible{outline:2px solid #1685a8;outline-offset:2px}
.delay-cell{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.train-map-link{display:inline-flex;width:44px;height:52px;align-items:center;justify-content:center;flex:0 0 44px;border:1px solid #bdd9e3;border-radius:10px;background:#f5fbfd;color:#176f8b;cursor:pointer;padding:0;line-height:1;transition:background .15s,border-color .15s,transform .15s}
.train-map-link:hover,.train-map-link:focus-visible{background:#eaf6fa;border-color:#8fc7d9;transform:translateY(-1px)}
.train-map-link:focus-visible{outline:2px solid rgba(22,133,168,.35);outline-offset:2px}
.train-map-link>span:first-child{font-size:14px;line-height:1}
.train-map-link.is-unavailable{position:relative;overflow:hidden;border-color:#cbd3dc;background:#f2f4f6;color:#98a3af;cursor:default;pointer-events:none}
.train-map-link.is-unavailable>span{filter:grayscale(1);opacity:.42}
.train-map-link.is-unavailable::after{content:'';position:absolute;top:50%;left:50%;width:calc(100% + 18px);height:1px;border-radius:999px;background:#8f9aa6;transform:translate(-50%,-50%) rotate(-45deg)}
.train-map-link.is-unavailable:hover{border-color:#cbd3dc;background:#f2f4f6;transform:none}

@media(max-width:760px){
  .site-header .view-tabs{max-width:calc(100vw - 118px);overflow-x:auto;scrollbar-width:none}
  .site-header .view-tabs::-webkit-scrollbar{display:none}
  .site-header .view-tab{white-space:nowrap}
  .map-summary{flex-wrap:wrap}
  .train-map{height:560px;min-height:480px}
  .map-legend{left:10px;bottom:10px;width:185px}
  .history-search-hint{align-items:flex-start;line-height:1.4}
  .footer-inner{display:block;padding:23px 14px 25px}
  .footer-contact-card{width:100%;margin-top:18px}
  .footer-contact{margin-top:0}
}
/* Ajuste de alineación del detalle de paradas */
.detail-inner{margin:14px 17px;align-items:flex-start}
.detail-inner>div{width:100%;min-width:0;text-align:left}
.detail-heading{text-align:left}

/* Itinerario vertical dentro del detalle de cada tren. */
.detail-inner .stops{display:grid;gap:0;max-height:300px;overflow-y:auto;margin:10px 0 0;padding:2px 12px 2px 2px;scrollbar-gutter:stable}
.detail-inner .stop{position:relative;display:grid;grid-template-columns:14px minmax(0,1fr);column-gap:9px;align-items:start;min-height:51px;color:var(--ink);font-size:12px;line-height:1.35}
.detail-inner .stop:not(:last-child)::after{display:none}
.detail-inner .stop:not(:last-child)::before{content:'';position:absolute;top:17px;bottom:-17px;left:5px;width:2px;background:#b8dfea}
.detail-inner .stop-dot{position:relative;z-index:1;width:12px;height:12px;margin:11px 0 0;border:3px solid #eaf6fa;border-radius:50%;background:var(--blue-deep);box-shadow:0 0 0 1px var(--blue-deep)}
.detail-inner .stop:first-child{min-height:40px}
.detail-inner .stop:last-child{min-height:0}
.detail-inner .stop:first-child .stop-dot{margin-top:0}
.detail-inner .stop:first-child:not(:last-child)::before{top:6px}
.detail-inner .stop-info{display:grid;gap:2px;min-width:0;margin-top:-2px}
.detail-inner .stop-time{display:block;color:var(--muted);font-size:9px;line-height:1.1;font-variant-numeric:tabular-nums}
.detail-inner .stop-time.is-endpoint-time{color:var(--ink);font-weight:700}
.detail-inner .stop-name{min-width:0;overflow-wrap:anywhere;font-size:12px;font-weight:400;line-height:1.25}
.detail-inner .stop-name.is-endpoint{font-weight:700}

/* Estado actual: borde uniforme y halo de color muy sutil, sin franja lateral. */
.delay-badge{border-left-width:1px;border-left-color:var(--delay-border);box-shadow:0 4px 14px rgba(23,37,61,.04),0 0 12px var(--delay-soft)}

/* Adaptación móvil: mantiene intacta la composición de escritorio. */
.history-chart-scroll-hint{display:none}

@media(max-width:760px){
  html,body{max-width:100%;overflow-x:clip}
  img,svg{max-width:100%}

  .header-inner{height:auto;min-height:66px;width:100%;padding:9px 12px}
  .site-header .view-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%;max-width:none;overflow:visible;gap:3px;padding:4px}
  .site-header .view-tab{display:flex;min-width:0;min-height:44px;align-items:center;justify-content:center;padding:7px 5px;text-align:center;white-space:normal;font-size:clamp(9px,2.9vw,11px);line-height:1.15}

  .page-shell{width:100%;padding:25px 12px 40px}
  .intro{margin-bottom:22px}
  .intro h1{font-size:clamp(29px,9vw,38px);line-height:1.08;letter-spacing:-.055em}
  .intro-copy{font-size:14px;line-height:1.45;margin-top:10px}
  .intro-summary{width:100%;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;margin-top:18px}
  .intro-summary .summary{margin:0;padding:0;gap:18px}
  .intro-summary .summary div{min-width:0}
  .intro-summary .summary strong{font-size:19px}
  .realtime-status{min-width:0;font-size:12px;white-space:normal;line-height:1.25}
  .realtime-pulse{flex:0 0 10px;width:10px;height:10px}
  .controls{padding:10px;border-radius:14px;margin-bottom:22px}
  .journey-filters{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .mini-filter{height:57px;min-width:0;padding:7px 9px}
  .mini-filter>span{overflow:hidden;text-overflow:ellipsis;font-size:8px}
  .mini-filter input,.mini-filter select{min-width:0;width:100%;font-size:13px}
  .current-search-hint,.map-search-hint,.history-actions p{margin-top:10px}

  .results-heading{justify-content:space-between;gap:10px;margin:0 2px 10px}
  .results-heading h2{min-width:0;font-size:17px}
  .results-heading span{flex:0 0 auto;text-align:right}

  .current-trains-table-wrap{overflow:visible;border:0;border-radius:0;background:transparent;box-shadow:none}
  .current-trains-table,.current-trains-table tbody{display:block;width:100%;min-width:0}
  .current-trains-table colgroup,.current-trains-table thead{display:none}
  .current-trains-table .train-row{position:relative;display:grid;width:100%;grid-template-columns:auto auto minmax(0,1fr) auto;grid-template-areas:
    "service code spacer toggle"
    "schedule schedule schedule schedule"
    "status status status status";
    align-items:center;column-gap:9px;row-gap:6px;margin:0 0 8px;padding:10px 12px;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:0 8px 24px rgba(25,50,78,.055)}
  .current-trains-table .train-row.is-open{margin-bottom:0;border-bottom-color:transparent;border-radius:14px 14px 0 0;box-shadow:none}
  .current-trains-table .train-row>td{display:block;min-width:0;border:0;padding:0}
  .current-trains-table .train-row>td:nth-child(1){grid-area:service}
  .current-trains-table .train-row>td:nth-child(2){grid-area:code}
  .current-trains-table .train-row>td:nth-child(3){display:none}
  .current-trains-table .train-row>td:nth-child(4){grid-area:schedule}
  .current-trains-table .train-row>td:nth-child(5){grid-area:status}
  .current-trains-table .train-row>td:nth-child(6){grid-area:toggle;text-align:right;padding:0}
  .current-trains-table .service-pill{padding:4px 6px}
  .current-trains-table .code{font-size:15px}
  .current-trains-table .schedule{width:100%;text-align:left}
  .current-trains-table .schedule-inner{width:100%;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;padding:6px 8px;border-radius:8px;background:#f7f9fb;white-space:normal}
  .current-trains-table .schedule-route{display:block;width:100%;color:var(--ink);font-size:14px;font-weight:600;line-height:1.3;overflow-wrap:anywhere}
  .current-trains-table .schedule-route>span{color:var(--muted);font-weight:400}
  .current-trains-table .schedule-times{display:flex;align-items:center;gap:4px;color:#9aa8b7;white-space:nowrap}
  .current-trains-table .date-time{display:grid;grid-template-columns:1fr;justify-items:center;align-items:center;gap:0}
  .current-trains-table .date-time small{font-size:7px}
  .current-trains-table .date-time b{font-size:14px}
  .current-trains-table .delay{min-width:0;width:100%}
  .current-trains-table .delay-cell{display:flex;width:100%;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:8px}
  .current-trains-table .delay-badge{min-width:0;min-height:40px;flex:1;padding:6px 9px}
  .current-trains-table .delay-badge-copy strong{font-size:16px}
  .current-trains-table .delay-badge.green .delay-badge-copy strong,
  .current-trains-table .delay-badge.is-clear .delay-badge-copy strong{font-size:14px}
  .current-trains-table .train-map-link{margin-left:auto}
  .current-trains-table .chevron{font-size:20px}

  .current-trains-table .detail-row.is-open{display:block;width:100%;margin:0 0 10px;border:1px solid var(--line);border-top:0;border-radius:0 0 14px 14px;background:#fff;box-shadow:0 8px 24px rgba(25,50,78,.055)}
  .current-trains-table .detail-row>td{display:block;width:100%;border:0;padding:0}
  .current-trains-table .detail-inner{display:block;margin:0;padding:4px 13px 14px;border:0;border-radius:0;background:transparent}
  .current-trains-table .detail-inner .stops{max-height:260px;padding-right:5px}
  .empty-state{border:1px solid var(--line);border-radius:14px;background:#fff;padding:45px 18px}

  .history-search-results{max-width:100%;overflow:hidden}
  .history-option{position:relative;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"train toggle" "route route" "meta meta";column-gap:9px;row-gap:9px;align-items:start;padding:11px}
  .history-option-train{grid-area:train;display:flex;align-items:center;gap:8px;min-width:0}
  .history-option-route{grid-area:route;grid-column:auto;width:100%;min-width:0;justify-items:stretch;gap:6px}
  .history-route-primary,.history-route-context{max-width:none;overflow:visible;text-overflow:clip;white-space:normal;overflow-wrap:anywhere}
  .history-route-primary{font-size:14px;line-height:1.35}
  .history-route-context{font-size:11px;line-height:1.4}
  .history-route-status{display:flex;width:100%;max-width:none;align-items:flex-start;padding:7px 8px}
  .history-route-status>span:last-child{min-width:0;overflow-wrap:anywhere}
  .history-option-meta{grid-area:meta;grid-column:auto;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px;align-items:start;text-align:left;white-space:normal}
  .history-option-meta{font-size:11px}
  .history-option-meta span{min-width:0;line-height:1.35;overflow-wrap:anywhere}
  .history-option-toggle{grid-area:toggle;grid-column:auto;grid-row:auto;align-self:center}
  .history-inline-detail{min-width:0}
  .history-summary>div{min-width:0;padding:11px}
  .history-summary strong{overflow-wrap:anywhere;font-size:18px}
  .history-chart-card{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
  .history-chart-card figcaption{position:sticky;left:0;display:flex;width:calc(100vw - 76px);align-items:center;justify-content:space-between;gap:12px;white-space:nowrap}
  .history-chart-scroll-hint{display:inline;color:var(--muted);font-size:9px;font-weight:600}
  .history-chart{min-width:max(650px,calc(var(--history-day-count,14) * 46px))}
  .history-legend{position:sticky;left:0;width:max-content;min-width:min(100%,calc(100vw - 76px));flex-wrap:wrap;row-gap:6px}

  .map-card{max-width:100%}
  .train-map{width:100%;height:min(70vh,560px);min-height:430px}
  .map-station-search{top:10px;right:10px;left:62px;width:auto}
  .map-state-overlay{width:calc(100% - 24px);padding:20px 16px}
  .train-map-popup{width:clamp(190px,55vw,230px)}
  .train-map-popup .maplibregl-popup-content{width:100%;border-radius:10px}
  .train-map-popup .maplibregl-popup-close-button{top:3px;right:3px;width:21px;height:21px;font-size:15px;line-height:20px}
  .map-popup{width:100%;min-width:0;max-width:none;padding:8px 10px;font-size:10px}
  .map-popup.has-multiple-trains{padding-top:7px}
  .map-popup-tabs{gap:3px;margin:0 -2px 6px;padding:0 22px 5px 2px}
  .map-popup-tab{padding:6px 8px;font-size:12px}
  .map-popup-train-panel{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:"heading" "route" "time" "movement" "status";align-items:center;row-gap:5px}
  .map-popup-heading{grid-area:heading;gap:5px;margin:0;padding:0}
  .map-popup-heading .service-pill{padding:4px 6px;font-size:9px}
  .map-popup-heading strong{font-size:12px;white-space:nowrap}
  .map-popup-route{grid-area:route;min-width:0;font-size:11px;line-height:1.3;overflow-wrap:anywhere}
  .map-popup-time-row{grid-area:time;min-height:0;margin:0;gap:6px;flex-wrap:wrap}
  .map-popup-times{font-size:10px}
  .map-popup-follow{width:26px;height:auto;min-height:22px;flex-basis:26px;border-radius:5px}
  .map-popup-follow-icon{font-size:10px}
  .map-popup-status{grid-area:status;gap:5px;margin:0;padding-top:6px;font-size:11px}
  .map-popup-status i{width:8px;height:8px}
  .map-popup-movement{grid-area:movement;margin:0;font-size:9px}
  .map-popup-movement time{font-size:10.5px}
  .map-legend-toggle{position:absolute;z-index:760;left:6px;bottom:30px;display:inline-flex;align-items:center;gap:5px;min-height:28px;padding:5px 8px;border:1px solid rgba(205,217,227,.95);border-radius:8px;background:rgba(255,255,255,.95);box-shadow:0 4px 14px rgba(24,47,67,.12);color:#176f8b;font-size:9px;font-weight:700;line-height:1;cursor:pointer;backdrop-filter:blur(5px)}
  .map-legend-toggle .history-info-icon{width:12px;height:12px;font-size:8px}
  .map-legend{display:none;left:6px;bottom:64px;width:148px;padding:7px 8px}
  .map-legend.is-open{display:block}
  .map-legend-title{margin-bottom:5px;font-size:9px}
  .map-railway-key,.map-station-key,.map-itinerary-station-key{font-size:8px}
  .map-railway-key{margin-top:7px;padding-top:6px}
  .map-railway-key+.map-railway-key,.map-station-key,.map-itinerary-station-key{margin-top:5px}
  .train-map .maplibregl-ctrl-bottom-right .maplibregl-ctrl-scale{position:absolute;right:6px;bottom:36px;margin:0}
  .train-map .maplibregl-ctrl-attrib{max-width:100%;padding:2px 4px;font-size:7px;line-height:1.2;text-align:left;white-space:normal}

  .footer-copy,.footer-contact-copy{overflow-wrap:anywhere}
  .footer-contact-card{grid-template-columns:minmax(0,1fr) auto;column-gap:8px;padding:11px}
  .footer-author{min-width:0;flex-wrap:wrap;line-height:1.3}
}

@media(max-width:360px){
  .page-shell{padding-inline:10px}
  .header-inner{padding-inline:8px}
  .site-header .view-tabs{gap:2px;padding:3px}
  .site-header .view-tab{padding-inline:3px;font-size:9px}
  .journey-filters{gap:7px}
  .mini-filter{padding-inline:7px}
  .intro-summary{grid-template-columns:1fr;justify-items:start}
  .intro-summary .summary{width:100%;justify-content:flex-start}
  .current-trains-table .train-row{column-gap:7px;padding:9px 10px}
  .history-chart-card{padding-inline:12px}
  .history-chart-card figcaption{width:calc(100vw - 68px)}
  .history-chart-scroll-hint{font-size:8px}
  .map-station-search{left:58px;right:8px}
  .map-legend-toggle{left:5px}
  .map-legend{left:5px;width:144px}
  .footer-contact-card{grid-template-columns:1fr;grid-template-areas:'author' 'copy' 'contact'}
  .footer-contact{justify-self:start}
}
/* Mantener los contadores de resultados alineados al extremo derecho. */
.results-heading{justify-content:space-between}

/* La línea inicial de la cuadrícula coincide con la base de las barras. */
.history-chart{position:relative;background:none}
.history-chart::before{content:'';position:absolute;z-index:0;inset:16px 3px 40px;pointer-events:none;background:repeating-linear-gradient(to top,#edf1f5 0,#edf1f5 1px,transparent 1px,transparent 63px)}
.history-day{position:relative;z-index:1}

/* Distinguir la separación de la leyenda de las líneas de la cuadrícula. */
.history-legend{border-top-width:2px}

/* Solo las barras se desplazan; el título, la ayuda y la leyenda permanecen fijos. */
.history-chart-card figcaption{display:grid;justify-content:start;gap:3px}
.history-chart-scroll{max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.history-chart-scroll:focus-visible{outline:2px solid rgba(22,133,168,.3);outline-offset:3px}
.history-chart-scroll-hint{color:var(--muted);font-size:10px;font-weight:500;line-height:1.3}
@media(max-width:760px){
  .history-chart-card{overflow:hidden}
  .history-chart-card figcaption{position:static;left:auto;width:auto;display:grid;justify-content:start;gap:3px;white-space:normal}
  .history-chart-scroll-hint{display:block}
  .history-legend{position:static;left:auto;width:auto;min-width:0}
}

/* Encaje fluido: ninguna vista provoca desplazamiento horizontal de la página. */
html,body{max-width:100%;overflow-x:clip}
.page-shell{min-width:0}
#currentView,#historyView,#mapView,.results-section{min-width:0;max-width:100%}
.current-trains-table-wrap{max-width:100%}
.history-chart{width:100%;min-width:max(100%,var(--history-chart-min-width,644px))}
.history-chart-scroll-hint{display:block}

/* La tabla pasa a tarjetas antes de que sus columnas necesiten desplazamiento. */
@media(max-width:1080px){
  .journey-filters{grid-template-columns:repeat(3,minmax(0,1fr))}
  .current-trains-table-wrap{overflow:visible;border:0;border-radius:0;background:transparent;box-shadow:none}
  .current-trains-table,.current-trains-table tbody{display:block;width:100%;min-width:0}
  .current-trains-table colgroup,.current-trains-table thead{display:none}
  .current-trains-table .train-row{position:relative;display:grid;width:100%;grid-template-columns:auto auto minmax(220px,1fr) minmax(205px,.75fr) auto;grid-template-areas:"service code schedule status toggle";align-items:center;column-gap:10px;row-gap:7px;margin:0 0 9px;padding:11px 13px;border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:0 8px 24px rgba(25,50,78,.055)}
  .current-trains-table .train-row.is-open{margin-bottom:0;border-bottom-color:transparent;border-radius:14px 14px 0 0;box-shadow:none}
  .current-trains-table .train-row>td{display:block;min-width:0;border:0;padding:0}
  .current-trains-table .train-row>td:nth-child(1){grid-area:service}
  .current-trains-table .train-row>td:nth-child(2){grid-area:code}
  .current-trains-table .train-row>td:nth-child(3){display:none}
  .current-trains-table .train-row>td:nth-child(4){grid-area:schedule}
  .current-trains-table .train-row>td:nth-child(5){grid-area:status}
  .current-trains-table .train-row>td:nth-child(6){grid-area:toggle;text-align:right;padding:0}
  .current-trains-table .schedule{width:100%;text-align:left}
  .current-trains-table .schedule-inner{width:100%;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;padding:7px 9px;border-radius:8px;background:#f7f9fb;white-space:normal}
  .current-trains-table .schedule-route{display:block;width:100%;color:var(--ink);font-size:13px;font-weight:600;line-height:1.25;overflow-wrap:anywhere}
  .current-trains-table .schedule-route>span{color:var(--muted);font-weight:400}
  .current-trains-table .schedule-times{display:flex;align-items:center;gap:5px;color:#9aa8b7;white-space:nowrap}
  .current-trains-table .delay{min-width:0;width:100%}
  .current-trains-table .delay-cell{display:flex;width:100%;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:8px}
  .current-trains-table .delay-badge{min-width:0;min-height:40px;flex:1;padding:6px 9px}
  .current-trains-table .train-map-link{width:40px;height:auto;min-height:40px;align-self:stretch;flex-basis:40px;margin-left:auto;border-radius:8px}
  .current-trains-table .detail-row.is-open{display:block;width:100%;margin:0 0 10px;border:1px solid var(--line);border-top:0;border-radius:0 0 14px 14px;background:#fff;box-shadow:0 8px 24px rgba(25,50,78,.055)}
  .current-trains-table .detail-row>td{display:block;width:100%;border:0;padding:0}
  .current-trains-table .detail-inner{display:block;margin:0;padding:4px 13px 14px;border:0;border-radius:0;background:transparent}
  .empty-state{border:1px solid var(--line);border-radius:14px;background:#fff}
}

@media(max-width:900px){
  .page-shell{padding-inline:22px}
  .intro{display:block}
  .intro-summary{width:100%;grid-template-columns:minmax(0,1fr) auto;align-items:center;margin-top:22px}
  .intro-summary .summary{margin-top:0}
  .history-summary{grid-template-columns:repeat(2,minmax(0,1fr))}
  .footer-inner{display:block}
  .footer-contact-card{width:100%;max-width:420px;margin-top:18px}
}

@media(max-width:760px){
  .page-shell{padding-inline:12px}
  .journey-filters{grid-template-columns:repeat(2,minmax(0,1fr))}
  .current-trains-table .train-row{grid-template-columns:auto auto minmax(0,1fr) 22px;grid-template-areas:"service code spacer toggle" "schedule schedule schedule toggle" "status status status toggle";padding:10px 12px}
  .current-trains-table .train-row>td:nth-child(6){align-self:stretch}
  .current-trains-table .chevron{display:flex;width:22px;height:100%;align-items:center;justify-content:center}
}

@media(max-width:430px){
  .journey-filters{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* Orden por parejas en el buscador de tres columnas para tablet. */
@media(min-width:761px) and (max-width:1080px){
  .journey-filters>.mini-filter:nth-child(1){grid-column:1;grid-row:1}
  .journey-filters>.mini-filter:nth-child(2){grid-column:1;grid-row:2}
  .journey-filters>.mini-filter:nth-child(3){grid-column:2;grid-row:1}
  .journey-filters>.mini-filter:nth-child(4){grid-column:2;grid-row:2}
  .journey-filters>.mini-filter:nth-child(5){grid-column:3;grid-row:1}
  .journey-filters>.mini-filter:nth-child(6){grid-column:3;grid-row:2}

  /* Tarjetas uniformes: identidad apilada y bloques de contenido estables. */
  .current-trains-table .train-row{
    grid-template-columns:80px minmax(0,1fr) 224px 26px;
    grid-template-rows:repeat(2,minmax(0,1fr));
    grid-template-areas:
      "service schedule status toggle"
      "code schedule status toggle";
    min-height:100px;
    column-gap:8px;
    row-gap:3px;
  }
  /* Compensar el reparto en dos filas: la pareja tipo/código queda centrada en la tarjeta. */
  .current-trains-table .train-row>td:nth-child(1){width:100%;align-self:end;justify-self:stretch;text-align:center;transform:translateY(7px)}
  .current-trains-table .train-row>td:nth-child(2){width:100%;align-self:start;justify-self:stretch;text-align:center;transform:translateY(7px)}
  .current-trains-table .train-row>td:nth-child(5),
  .current-trains-table .train-row>td:nth-child(6){align-self:stretch}
  .current-trains-table .service-pill{max-width:80px;justify-content:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .current-trains-table .code{padding-top:2px;font-size:13px;text-align:center}
  .current-trains-table .schedule-inner{height:auto;min-height:76px;overflow:visible;padding:8px 10px}
  .current-trains-table .schedule-route{
    display:block;
    overflow-wrap:anywhere;
  }
  .current-trains-table .schedule-times{align-items:center}
  .current-trains-table .date-time{justify-items:center;text-align:center}
  .current-trains-table .date-time small{font-size:8px;line-height:1}
  .current-trains-table .delay-cell{height:100%;min-height:76px}
  .current-trains-table .delay-badge{width:172px;height:100%;min-width:172px;min-height:76px;flex:0 0 172px}
  .current-trains-table .train-map-link{width:44px;height:76px;flex-basis:44px;margin-left:auto;border-radius:10px}
  .current-trains-table .chevron{display:flex;height:100%;min-height:76px;align-items:center;justify-content:center}
}

/* Ritmo horizontal compartido por cabecera, contenido y pie. */
.header-inner,
.page-shell,
.footer-inner{
  width:100%;
  max-width:1280px;
  margin-inline:auto;
  padding-inline:38px;
}

@media(max-width:900px){
  .header-inner,
  .page-shell,
  .footer-inner{padding-inline:24px}
}

/* Microtipografia: un punto mas en etiquetas auxiliares de tablet. */
@media(min-width:761px) and (max-width:1080px){
  .mini-filter>span,
  .history-route-status,
  .history-bar-value,
  .delay-badge-copy small{font-size:10px}

  .current-trains-table .date-time small{font-size:9px}

  .history-day-label{font-size:11px}

  .map-railway-key,
  .map-station-key,.map-itinerary-station-key{font-size:10px}

  .history-day-label strong{font-size:12px}
  .map-legend-title{font-size:11px}

  .map-delay-unit{font-size:8px}
  .map-delay-labels{font-size:9px}
}

@media(max-width:760px){
  .header-inner,
  .page-shell,
  .footer-inner{padding-inline:16px}

  /* Un poco más de aire entre días sin alargar en exceso el desplazamiento. */
  .history-chart{min-width:max(100%,calc(var(--history-day-count,14) * 48px));gap:4px}
  .history-bar-value{white-space:nowrap}
  .history-bar-value.is-long{font-size:10px;letter-spacing:-.025em}

  .current-trains-table .date-time small,
  .map-delay-unit{font-size:9px}

  .mini-filter>span,
  .map-delay-labels{font-size:10px}

  .map-railway-key,
  .map-station-key,.map-itinerary-station-key{font-size:10px}

  .history-route-status,
  .history-bar-value,
  .delay-badge-copy small{font-size:11px}

  .history-day-label{font-size:11px}
  .history-day-label strong{font-size:12px}
  .map-legend-title{font-size:11px}
}

@media(max-width:360px){
  .header-inner,
  .page-shell,
  .footer-inner{padding-inline:12px}
}

/* Mantiene la hora alineada con el resto de valores de los filtros cuando el navegador expone estas partes nativas. */
.mini-filter input[type=time]::-webkit-datetime-edit,
.mini-filter input[type=time]::-webkit-date-and-time-value{margin:0;padding:0;text-align:left}
.mini-filter input[type=time]::-webkit-datetime-edit-fields-wrapper{padding:0}

/* Acceso discreto para volver al inicio tras un desplazamiento largo. */
.back-to-top{
  position:fixed;
  z-index:900;
  right:max(18px,env(safe-area-inset-right));
  bottom:max(18px,env(safe-area-inset-bottom));
  width:38px;
  height:38px;
  display:grid;
  place-items:center;
  padding:0;
  border:1px solid rgba(22,133,168,.22);
  border-radius:50%;
  background:rgba(255,255,255,.9);
  color:#176f8b;
  box-shadow:0 5px 18px rgba(23,37,61,.12);
  backdrop-filter:blur(6px);
  cursor:pointer;
  transition:background .15s,border-color .15s,box-shadow .15s,transform .15s;
}
.back-to-top svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.back-to-top:hover{background:#fff;border-color:rgba(22,133,168,.42);box-shadow:0 7px 22px rgba(23,37,61,.16);transform:translateY(-2px)}
.back-to-top:focus-visible{outline:3px solid rgba(22,133,168,.2);outline-offset:3px}

@media(max-width:760px){
  .back-to-top{right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));width:36px;height:36px}
}

@media(prefers-reduced-motion:reduce){
  .back-to-top{transition:none}
}

/* Navegación principal: tamaños estables, reparto natural y una sola fila. */
.site-header .header-inner{
  min-height:72px;
  height:auto;
  justify-content:flex-start;
  align-items:center;
  padding-block:11px;
}
.site-header .view-tabs{
  display:flex;
  width:max-content;
  max-width:100%;
  align-items:stretch;
  justify-content:flex-start;
  gap:5px;
  margin:0;
  padding:5px;
  overflow:visible;
}
.site-header .view-tab{
  display:flex;
  flex:0 1 auto;
  min-width:0;
  min-height:42px;
  align-items:center;
  justify-content:center;
  gap:8px;
  padding:9px 15px;
  font-size:14px;
  line-height:1.2;
  text-align:center;
  white-space:nowrap;
}
.view-tab-icon{
  width:21px;
  height:21px;
  flex:0 0 21px;
  fill:none;
  stroke:currentColor;
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round;
}
.view-tab-icon circle[r=".8"]{fill:currentColor;stroke:none}
.view-tab-label{min-width:0}

/* En escritorio la navegación recupera una presencia más discreta. */
@media(min-width:1081px){
  .site-header .header-inner{
    min-height:66px;
    padding-block:10px;
  }
  .site-header .view-tabs{
    gap:4px;
    padding:4px;
  }
  .site-header .view-tab{
    min-height:36px;
    gap:7px;
    padding:7px 11px;
    font-size:13px;
  }
  .view-tab-icon{
    width:19px;
    height:19px;
    flex-basis:19px;
  }
}

@media(max-width:760px){
  .site-header .header-inner{
    min-height:82px;
    padding:8px 12px;
  }
  .site-header .view-tabs{
    display:flex;
    width:max-content;
    max-width:100%;
    justify-content:flex-start;
    gap:3px;
    padding:4px;
  }
  .site-header .view-tab{
    flex:0 1 auto;
    min-width:0;
    min-height:64px;
    flex-direction:column;
    gap:4px;
    padding:7px 9px;
    font-size:13px;
    line-height:1.12;
    white-space:normal;
  }
  .view-tab-icon{
    width:20px;
    height:20px;
    flex-basis:20px;
  }
  .view-tab-label{overflow-wrap:normal}
}

@media(max-width:380px){
  .site-header .header-inner{padding-inline:8px}
  .site-header .view-tabs{gap:2px;padding:3px}
  .site-header .view-tab{
    min-height:62px;
    padding:7px 6px;
    font-size:12px;
  }
  .view-tab-icon{
    width:19px;
    height:19px;
    flex-basis:19px;
  }
}

/* Evita el zoom automático de iOS al enfocar los buscadores en móvil y tablet. */
@media(max-width:1080px){
  .mini-filter input,
  .mini-filter select,
  .map-station-search input{font-size:16px}
}

@media(max-width:760px){
  .mini-filter{height:58px}
  .mini-filter input,
  .mini-filter select{height:23px}
}

/* Alinea la altura de los dos estados vacíos principales. */
.empty-state{padding-block:25px}
