*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --ink:#0F0E0C;--ink2:#3A3832;--ash:#8C8880;--mist:#C8C4BC;
  --fog:#E8E4DC;--paper:#F4F1EC;--white:#FDFCFA;
  --panel-w:340px;--hdr:52px;--status-h:26px;--r:8px;
  --mono:'JetBrains Mono',monospace;--serif:'Instrument Serif',serif;--sans:'Geist',sans-serif;
  --safe-bottom:env(safe-area-inset-bottom,0px);--safe-top:env(safe-area-inset-top,0px);
}
html,body{height:100%;background:var(--paper);color:var(--ink);font-family:var(--sans);overflow:hidden;}
/* grain texture removida — causava erros de parse em Firefox */
#map{position:fixed;inset:0;z-index:0;}
.leaflet-control-attribution{font-family:var(--mono)!important;font-size:9px!important;background:rgba(253,252,250,.85)!important;border-radius:3px!important;}
.leaflet-bottom{bottom:var(--status-h)!important;}

#loading{position:fixed;inset:0;z-index:2000;background:var(--paper);display:flex;align-items:center;justify-content:center;flex-direction:column;transition:background .2s ease,opacity .3s ease;}
#loading.flash{background:#fff;}
#loading.out{opacity:0;pointer-events:none;}
.ld-name{font-family:var(--serif);font-style:italic;font-size:56px;letter-spacing:-2px;line-height:1;animation:fadein .9s cubic-bezier(.16,1,.3,1) both;}
.ld-sub{font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);letter-spacing:.18em;text-transform:uppercase;margin-top:8px;animation:fadein .9s .12s cubic-bezier(.16,1,.3,1) both;}
.ld-bar{width:180px;height:1px;background:var(--fog);margin-top:36px;overflow:hidden;animation:fadein .6s .25s both;}
.ld-fill{height:100%;background:var(--ink);width:0;transition:width .6s cubic-bezier(.4,0,.2,1);will-change:width;}
@keyframes fadein{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

#hdr{position:fixed;top:0;left:0;right:0;height:var(--hdr);display:flex;align-items:stretch;z-index:100;}
.hdr-logo{display:flex;align-items:center;justify-content:center;padding:0 22px;background:var(--white);border-right:1px solid var(--fog);border-bottom:1px solid var(--fog);text-decoration:none;color:var(--ink);flex-shrink:0;}
.hdr-logo-name{font-family:var(--serif);font-style:italic;font-size:23px;letter-spacing:-.5px;}
.hdr-search{display:flex;align-items:center;padding:0 14px 0 13px;gap:10px;background:var(--white);border-right:1px solid var(--fog);border-bottom:1px solid var(--fog);flex-shrink:0;width:230px;}
.hdr-search svg{width:12px;height:12px;color:var(--mist);flex-shrink:0;}
#search{flex:1;background:transparent;border:none;outline:none;font-family:var(--mono);font-size:12px;font-weight:300;color:var(--ink);}
#search::placeholder{color:var(--mist);}
.hdr-ops-wrap{flex:1;display:flex;align-items:stretch;position:relative;background:var(--white);border-bottom:1px solid var(--fog);min-width:0;overflow:hidden;}
.hdr-ops{flex:1;display:flex;align-items:center;gap:2px;padding:0 8px;overflow-x:auto;scrollbar-width:none;scroll-behavior:smooth;min-width:0;}
.hdr-ops::-webkit-scrollbar{display:none;}
/* Setas de scroll desktop */
.ops-arrow{display:flex;align-items:center;justify-content:center;width:28px;flex-shrink:0;background:var(--white);border:none;cursor:pointer;color:var(--mist);font-size:18px;line-height:1;transition:color .15s,opacity .15s;z-index:2;padding:0;}
.ops-arrow:hover{color:var(--ink);}
.ops-arrow.hidden{opacity:0;pointer-events:none;}
.ops-arrow-l{border-right:1px solid var(--fog);box-shadow:4px 0 8px rgba(255,255,255,.9);}
.ops-arrow-r{border-left:1px solid var(--fog);box-shadow:-4px 0 8px rgba(255,255,255,.9);}
.op-pill{display:flex;align-items:center;gap:5px;height:26px;padding:0 10px;border-radius:4px;white-space:nowrap;cursor:pointer;border:none;background:transparent;color:var(--ash);font-family:var(--mono);font-size:10px;font-weight:300;letter-spacing:.04em;transition:color .15s;flex-shrink:0;-webkit-tap-highlight-color:transparent;text-decoration:none;font-style:normal;}
.op-pill .pip{width:5px;height:5px;border-radius:50%;background:var(--mist);flex-shrink:0;transition:background .15s;}
.op-pill.on{color:var(--ink);font-weight:400;text-decoration:none;} .op-pill:active{opacity:.7;}
.op-pill.disabled{cursor:not-allowed;opacity:.45;}
.op-pill.on .pip{background:var(--c);}
.hdr-live{display:flex;align-items:center;gap:8px;padding:0 22px;flex-shrink:0;background:var(--white);border-left:1px solid var(--fog);border-bottom:1px solid var(--fog);}
.live-dot{width:6px;height:6px;border-radius:50%;background:#22C55E;flex-shrink:0;box-shadow:0 0 0 0 rgba(34,197,94,.4);animation:pulse-g 2s infinite;}
@keyframes pulse-g{0%{box-shadow:0 0 0 0 rgba(34,197,94,.4)}70%{box-shadow:0 0 0 7px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
.live-n{font-family:var(--serif);font-style:italic;font-size:22px;line-height:1;color:var(--ink);}
.live-lbl{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.08em;text-transform:uppercase;}

#panel{position:fixed;top:var(--hdr);left:0;bottom:var(--status-h);width:var(--panel-w);background:var(--white);border-right:1px solid var(--fog);display:flex;flex-direction:column;transform:translateX(-100%);transition:transform .32s cubic-bezier(.16,1,.3,1);z-index:90;will-change:transform;contain:layout style;}
#panel.open{transform:translateX(0);}
.panel-handle{display:none;width:36px;height:4px;background:var(--mist);border-radius:2px;margin:10px auto 0;flex-shrink:0;cursor:grab;}
.panel-x{position:absolute;top:14px;right:14px;width:26px;height:26px;border-radius:4px;border:1px solid var(--fog);background:transparent;cursor:pointer;display:grid;place-items:center;color:var(--mist);transition:all .15s;z-index:2;-webkit-tap-highlight-color:transparent;}
.panel-x:hover{border-color:var(--mist);color:var(--ink2);}
.panel-body{flex:1;overflow-y:auto;padding:26px 26px 36px;scrollbar-width:thin;scrollbar-color:var(--fog) transparent;-webkit-overflow-scrolling:touch;}

.p-op-tag{font-family:var(--mono);font-size:9px;font-weight:400;letter-spacing:.16em;text-transform:uppercase;display:flex;align-items:center;gap:7px;margin-bottom:18px;color:var(--ash);}
.p-op-tag .bar{display:inline-block;width:22px;height:1.5px;background:var(--c);border-radius:1px;}
.p-op-tag .p-dot{display:inline-block;width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.p-line{font-family:var(--serif);font-style:italic;font-size:68px;line-height:.88;letter-spacing:-3px;color:var(--ink);margin-bottom:6px;}
.p-vid{font-family:var(--mono);font-size:10px;font-weight:300;color:var(--mist);letter-spacing:.06em;margin-bottom:6px;}
.p-dest{font-family:var(--mono);font-size:11px;font-weight:300;color:var(--ash);letter-spacing:.04em;margin-bottom:22px;display:flex;align-items:center;gap:7px;}
.p-dest-arr{color:var(--mist);}
.p-upd{display:flex;align-items:center;gap:7px;margin-top:10px;font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);letter-spacing:.04em;}
.p-upd-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.p-upd-dot.rt{background:#22C55E;}
.p-upd-dot.est{background:#EAB308;}
.p-state{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:10px;font-weight:400;padding:5px 10px;border-radius:20px;margin-bottom:10px;border:1px solid var(--fog);color:var(--ink2);background:var(--paper);}
.p-state.moving{border-color:#22C55E33;color:#15803D;background:#F0FDF4;}
.p-state.stopped{border-color:#EF444433;color:#B91C1C;background:#FEF2F2;}
.p-state.starting{border-color:#F59E0B33;color:#B45309;background:#FFFBEB;}
.p-state.slowing{border-color:#F9731633;color:#C2410C;background:#FFF7ED;}
.p-state-dot{width:5px;height:5px;border-radius:50%;background:currentColor;}
.p-badge{display:inline-flex;align-items:center;gap:4px;font-family:var(--mono);font-size:9px;padding:3px 7px;border-radius:20px;border:1px solid var(--fog);color:var(--ash);background:var(--paper);}

.p-badge.moving{border-color:#22C55E33;color:#15803D;background:#F0FDF4;}
.p-badge.stopped{border-color:#EF444433;color:#B91C1C;background:#FEF2F2;}
.p-badge.starting{border-color:#F59E0B33;color:#B45309;background:#FFFBEB;}
.p-badge.slowing{border-color:#F9731633;color:#C2410C;background:#FFF7ED;}
@keyframes arr-blink{0%,100%{opacity:1;}50%{opacity:0;}}
.arr-now-blink{color:#DC2626;font-weight:700;animation:arr-blink .4s ease-in-out 3;}
.arr-row-arriving{background:linear-gradient(90deg,#FEF2F2 0%,transparent 100%);border-radius:6px;}
.p-stop-row{display:flex;justify-content:space-between;align-items:center;padding:9px 12px;border-bottom:1px solid var(--fog);font-family:var(--mono);font-size:10px;}
.p-stop-row:last-child{border-bottom:none;}
.p-stop-label{font-weight:300;color:var(--ash);letter-spacing:.06em;text-transform:uppercase;font-size:9px;}
.p-stop-name{font-weight:400;color:var(--ink);font-size:11px;}
.p-stop-zone{font-size:9px;color:var(--mist);}
.p-div{height:1px;background:var(--fog);margin:20px 0;}
.p-sec{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);letter-spacing:.16em;text-transform:uppercase;margin-bottom:11px;}
.p-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--fog);border:1px solid var(--fog);border-radius:var(--r);overflow:hidden;margin-bottom:4px;}
.p-cell{background:var(--white);padding:13px 12px;}
.p-clbl{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;}
.p-cval{font-family:var(--serif);font-style:italic;font-size:24px;line-height:1;color:var(--ink);}
.p-cval.mono{font-size:13px;font-family:var(--mono);font-style:normal;font-weight:300;color:var(--ink2);}

.p-badge.rt{background:#DCFCE7;color:#15803D;}
.p-badge.est{background:#FEF9C3;color:#A16207;}
.p-badge .d{width:4px;height:4px;border-radius:50%;background:currentColor;}
.arr-list{border:1px solid var(--fog);border-radius:var(--r);overflow:hidden;}
.p-progress-wrap{margin:14px 0 4px;}
.p-progress-label{display:flex;justify-content:space-between;margin-bottom:6px;font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.04em;}
.p-progress-bar{height:3px;background:var(--fog);border-radius:2px;overflow:hidden;}
.p-progress-fill{height:100%;background:var(--ink);border-radius:2px;transition:width .6s ease;}
.p-alert{display:flex;align-items:center;gap:8px;padding:10px 12px;background:#FEF3C7;border:1px solid #FCD34D;border-radius:var(--r);margin-bottom:8px;font-family:var(--mono);font-size:10px;font-weight:400;color:#92400E;}
.p-alert svg{flex-shrink:0;color:#D97706;}
.arr-row{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--fog);background:var(--white);transition:background .1s;}
.arr-row:last-child{border-bottom:none;}
.arr-row:hover{background:var(--paper);}
.arr-seq{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);min-width:16px;text-align:right;flex-shrink:0;}
.arr-info{flex:1;display:flex;flex-direction:column;gap:1px;overflow:hidden;}
.arr-dest{font-family:var(--sans);font-size:12px;font-weight:300;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.arr-code{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);}
.arr-time{display:flex;align-items:baseline;gap:2px;flex-shrink:0;}
.arr-eta{font-family:var(--serif);font-style:italic;font-size:20px;color:var(--ink);line-height:1;}
.arr-eta.now{color:#DC2626;font-weight:600;}
.arr-unit{font-family:var(--mono);font-size:9px;color:var(--ash);}
.p-empty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px;text-align:center;}
.p-empty svg{opacity:.08;}
.p-empty-t{font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);letter-spacing:.06em;line-height:2;}

#fctl{position:fixed;bottom:calc(var(--status-h) + 16px);right:18px;z-index:80;display:flex;flex-direction:row;align-items:flex-end;gap:4px;}
.fc-col{display:flex;flex-direction:column;gap:4px;}
#map-picker{position:fixed;bottom:calc(var(--status-h) + 16px + 32px + 8px);right:18px;z-index:81;background:var(--white);border:1px solid var(--fog);border-radius:var(--r);overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,.1);min-width:140px;}
.mp-item{display:flex;align-items:center;gap:9px;padding:9px 12px;cursor:pointer;font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ink2);border-bottom:1px solid var(--fog);transition:background .1s;-webkit-tap-highlight-color:transparent;}
.mp-item:last-child{border-bottom:none;}
.mp-item:hover{background:var(--paper);}
.mp-item.active{color:var(--ink);font-weight:500;}
.mp-dot{width:10px;height:10px;border-radius:2px;flex-shrink:0;border:1px solid var(--fog);}
.fc{width:32px;height:32px;border-radius:5px;background:var(--white);border:1px solid var(--fog);display:grid;place-items:center;cursor:pointer;color:var(--ash);transition:border-color .15s,color .15s,background .15s;font-family:var(--mono);font-size:10px;font-weight:500;-webkit-tap-highlight-color:transparent;contain:layout style;}
.fc.loading{opacity:.5;pointer-events:none;}
.fc:hover{border-color:var(--mist);color:var(--ink);background:var(--paper);}
.fc:active,.fc-press{background:var(--fog)!important;transform:scale(.93);}
.fc.on{border-color:var(--mist);color:var(--ink);}
.fc[data-sub].on{border-color:var(--mist);color:var(--ink);background:var(--paper);}
.fc svg{width:13px;height:13px;}

#status{position:fixed;bottom:0;left:0;right:0;height:var(--status-h);background:var(--white);border-top:1px solid var(--fog);display:flex;align-items:center;z-index:80;transition:padding-left .32s cubic-bezier(.16,1,.3,1);}
#status.shift{padding-left:var(--panel-w);}
.st-copy{flex:1;text-align:center;font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.04em;}
.st-side{width:160px;padding:0 14px;flex-shrink:0;font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);letter-spacing:.04em;white-space:nowrap;}

.leaflet-popup-content-wrapper{font-family:var(--sans)!important;padding:0!important;border:1px solid var(--fog)!important;border-radius:var(--r)!important;overflow:hidden!important;box-shadow:0 4px 28px rgba(0,0,0,.09)!important;min-width:160px;}
.leaflet-popup-tip-container{display:none!important;}
.leaflet-popup-content{margin:0!important;width:auto!important;}
.pop-in{padding:14px 16px;background:var(--white);}
.pop-ln{font-family:var(--serif);font-style:italic;font-size:30px;letter-spacing:-1px;line-height:1;color:var(--ink);}
.pop-ds{font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);margin-top:3px;margin-bottom:9px;letter-spacing:.03em;}
.pop-ft{padding:8px 16px;background:var(--paper);border-top:1px solid var(--fog);display:flex;align-items:center;justify-content:space-between;}
.pop-op{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;}
.pop-cta{font-family:var(--mono);font-size:9px;color:var(--ash);cursor:pointer;transition:color .1s;}
.pop-cta:hover{color:var(--ink);}
::-webkit-scrollbar{width:3px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--fog);border-radius:2px;}

/* ── MOBILE ── */
#mobile-nav{display:none;}

@media(max-width:640px){
  /* ══ Variáveis ══════════════════════════════════════════════════════ */
  :root{
    --hdr:52px; --status-h:0px; --panel-w:100vw;
    --nav-h:calc(56px + env(safe-area-inset-bottom));
    --safe-bottom:env(safe-area-inset-bottom,0px);
    --safe-top:env(safe-area-inset-top,0px);
    --touch-min:44px;
  }

  /* ══ Header ══════════════════════════════════════════════════════════ */
  .hdr-logo{ padding:0 14px; }
  .hdr-logo-name{ font-size:20px; }
  .hdr-search{ width:auto; flex:1; border-right:none; min-width:0; }
  #search{ font-size:16px; } /* evita zoom iOS */
  .hdr-ops-wrap{ display:none; }
  .hdr-live{ padding:0 12px; gap:5px; }
  .live-lbl{ display:none; }
  .live-n{ font-size:17px; }
  #status{ display:none; }

  /* ══ Ocultar desktop ════════════════════════════════════════════════ */
  #planner-overlay.open ~ #bottom-left-btns,
  body.panel-open #bottom-left-btns,
  body.overlay-open #bottom-left-btns,
  #paraki-overlay.open ~ #bottom-left-btns{ display:none!important; }

  /* ══ Mapa ════════════════════════════════════════════════════════════ */
  .leaflet-bottom{ bottom:var(--nav-h)!important; }
  .leaflet-control-zoom{ display:none!important; }
  .leaflet-popup-content-wrapper{
    border-radius:14px!important;
    max-width:calc(100vw - 32px)!important;
  }
  .leaflet-popup{ max-width:calc(100vw - 32px)!important; }
  .pop-in{ min-width:0; max-width:calc(100vw - 56px); }
  .pop-ln{ font-size:24px; }
  .pop-ds{ font-size:11px; }

  /* ══ Painel bottom sheet ════════════════════════════════════════════ */
  #panel{
    top:auto; left:0; right:0; bottom:0; width:100%;
    height:88svh; min-height:360px; max-height:93svh;
    border-right:none; border-top:1px solid var(--fog);
    border-radius:20px 20px 0 0;
    transform:translateY(100%);
    transition:transform .38s cubic-bezier(.16,1,.3,1);
    box-shadow:0 -12px 48px rgba(0,0,0,.18);
    overflow:hidden;
    overscroll-behavior:contain;
  }
  #panel.open{ transform:translateY(0); }
  .panel-handle{ display:block; margin:12px auto 4px; }
  .panel-x{
    top:14px; right:14px;
    width:var(--touch-min); height:var(--touch-min);
    border-radius:50%;
    display:grid; place-items:center;
  }
  .panel-body{
    padding:16px 18px calc(24px + env(safe-area-inset-bottom));
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
    overscroll-behavior:contain;
  }

  /* ══ Tipografia painel ════════════════════════════════════════════ */
  .p-line{ font-size:52px; letter-spacing:-2px; }
  .p-cval{ font-size:20px; }
  .p-cval.mono{ font-size:13px; }
  .p-grid{ grid-template-columns:1fr 1fr; margin-bottom:8px; }
  .p-cell{ padding:10px 10px; }
  .p-clbl{ font-size:8px; }
  .p-sec{ font-size:8px; margin-bottom:8px; }
  .p-dest{ font-size:11px; margin-bottom:16px; flex-wrap:wrap; gap:5px; }
  .p-op-tag{ margin-bottom:14px; }
  .p-stop-name{ font-size:12px; }
  .p-stop-label{ font-size:8px; }
  .p-div{ margin:14px 0; }
  .p-progress-wrap{ margin:10px 0 4px; }
  .p-progress-bar{ height:4px; }
  .p-progress-label{ font-size:9px; }

  /* ══ Lista chegadas ════════════════════════════════════════════════ */
  .arr-row{ padding:11px 12px; gap:8px; }
  .arr-dest{ font-size:12px; }
  .arr-eta{ font-size:21px; }
  .arr-unit{ font-size:9px; }
  .arr-code{ font-size:8px; }

  /* ══ Paragens ════════════════════════════════════════════════════ */
  .sd-name{ font-size:13px; }
  .sd-sub{ font-size:10px; }
  .p-stop-name{ font-size:12px; }

  /* ══ Tarifário ══════════════════════════════════════════════════ */
  .fare-box{ padding:10px 12px; }
  .fare-title{ font-size:8px; }
  .fare-row{ padding:3px 0; }
  .fare-label{ font-size:10px; }
  .fare-price{ font-size:11px; }
  .fare-badge-free{ font-size:7px; padding:2px 5px; }
  .fare-note{ font-size:9px; line-height:1.5; }

  /* ══ Botões fctl (mínimo 44px touch) ════════════════════════════ */
  .fc{ width:var(--touch-min); height:var(--touch-min); }
  .fc svg{ width:17px; height:17px; }
  .fc-col{ gap:5px; }
  #fctl{ bottom:calc(var(--nav-h) + 10px); right:12px; gap:5px; }
  #map-picker{ bottom:calc(var(--nav-h) + var(--touch-min) + 16px); right:12px; }
  #bottom-left-btns{ bottom:calc(var(--nav-h) + 12px)!important; left:12px; }

  /* ══ Toast ════════════════════════════════════════════════════ */
  .toast{
    max-width:calc(100vw - 32px);
    text-align:center; font-size:12px;
    left:16px; right:16px; transform:none;
  }

  /* ══ Nav bar ═════════════════════════════════════════════════ */
  #mobile-nav{
    display:flex;
    position:fixed; bottom:0; left:0; right:0;
    height:var(--nav-h);
    background:var(--white); border-top:1px solid var(--fog);
    align-items:center; padding:0 10px env(safe-area-inset-bottom);
    gap:4px; overflow-x:auto; scrollbar-width:none; z-index:80;
    -webkit-overflow-scrolling:touch;
  }
  #mobile-nav::-webkit-scrollbar{ display:none; }
  #mobile-nav .op-pill{
    height:38px; min-height:var(--touch-min); padding:0 16px; font-size:11px;
    border-radius:8px; font-weight:400;
    border:1px solid var(--fog); background:var(--white);
    letter-spacing:.03em; flex-shrink:0;
    -webkit-tap-highlight-color:transparent;
    transition:background .15s,border-color .15s,color .15s;
  }
  #mobile-nav .op-pill.on{
    background:var(--paper); border-color:var(--mist); color:var(--ink);
  }
  #mobile-nav .op-pill.op-pill-soon{ border-style:dashed; opacity:.6; }

  /* ══ Comparador / Planner ════════════════════════════════════ */
  #comp-sheet,#planner-sheet{ border-radius:20px 20px 0 0; }
  #comp-hdr,#planner-hdr{ padding:calc(12px + env(safe-area-inset-top)) 16px 10px; }
  .comp-cols{ grid-template-columns:1fr!important; }
  .comp-col:first-child{ border-right:none; border-bottom:1px solid var(--fog); }
  #comp-map-preview{ height:140px; }
  #comp-search-drop{ left:12px; right:12px; }
  #planner-inputs{ padding:12px 14px; }
  .pl-inp-row input{ font-size:16px; } /* evita zoom iOS */

  /* ══ Comboios popup ═════════════════════════════════════════ */
  .train-live-popup{ min-width:unset; }
  .tlp-header{ padding:10px 14px 9px; }
  .tlp-body{ padding:10px 14px 14px; }
  .train-subbar{ display:none!important; }

  /* ══ Hover tips (estações CP/Metro) ═════════════════════════ */
  .train-hover-tip{
    position:fixed!important;
    left:50%!important; transform:translateX(-50%)!important;
    top:calc(var(--hdr) + 8px)!important;
    width:calc(100vw - 32px)!important;
    max-width:340px;
  }

  /* ══ Ecrã de boas-vindas ════════════════════════════════════ */
  .wlc-topbar{ padding:calc(16px + env(safe-area-inset-top)) 20px 0; }
  .wlc-center{ padding:12px 20px; }
  .wlc-icon-wrap{ width:80px; height:80px; margin-bottom:20px; }
  .wlc-fs-title{ font-size:28px; letter-spacing:-.8px; }
  .wlc-fs-body{ font-size:13px; }
  .wlc-step-label{ margin-bottom:16px; }
  .wlc-footer{ padding:0 20px calc(16px + env(safe-area-inset-bottom)); gap:16px; }
  .wlc-btn-next,.wlc-btn-final{
    max-width:100%; padding:14px 24px; font-size:12px;
    border-radius:12px; min-height:var(--touch-min);
  }

  /* ══ Ecrã de manutenção ══════════════════════════════════ */
  .maint-wrap{ padding:32px 20px; }
  .maint-title{ font-size:28px; }
  .maint-sub{ font-size:11px; }
}

#paraki-overlay{
  position:fixed;inset:0;z-index:1050;pointer-events:none;
  display:flex;align-items:flex-end;
}
#paraki-sheet{
  width:100%;max-height:80vh;background:var(--white);
  border-radius:16px 16px 0 0;border-top:1px solid var(--fog);
  box-shadow:0 -8px 40px rgba(0,0,0,.12);
  display:flex;flex-direction:column;
  transform:translateY(100%);transition:transform .35s cubic-bezier(.16,1,.3,1);
  pointer-events:all;
  padding-bottom:calc(env(safe-area-inset-bottom) + 8px);
}
#paraki-overlay.open #paraki-sheet{transform:translateY(0);}
#paraki-backdrop{
  position:absolute;inset:0;background:rgba(15,14,12,.18);
  opacity:0;transition:opacity .35s;pointer-events:none;
}
#paraki-overlay.open #paraki-backdrop{opacity:1;pointer-events:all;}
#paraki-handle{width:36px;height:4px;background:var(--mist);border-radius:2px;margin:12px auto 0;flex-shrink:0;cursor:grab;}
#paraki-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:14px 20px 10px;flex-shrink:0;
}
#paraki-header .ph-title{font-family:var(--serif);font-style:italic;font-size:26px;letter-spacing:-.5px;color:var(--ink);}
#paraki-header .ph-sub{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.1em;text-transform:uppercase;margin-top:2px;}
#paraki-close{background:transparent;border:1px solid var(--fog);border-radius:4px;color:var(--mist);cursor:pointer;width:26px;height:26px;display:grid;place-items:center;font-size:11px;font-family:var(--mono);transition:all .15s;}
#paraki-close:hover{border-color:var(--mist);color:var(--ink2);}
#paraki-loc-status{
  display:flex;align-items:center;gap:8px;padding:10px 20px 14px;
  font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);letter-spacing:.04em;
  border-bottom:1px solid var(--fog);margin-bottom:4px;
}
#paraki-loc-status .loc-dot{width:6px;height:6px;border-radius:50%;background:var(--mist);flex-shrink:0;}
#paraki-loc-status .loc-dot.active{background:#22C55E;box-shadow:0 0 0 0 rgba(34,197,94,.4);animation:pulse-g 2s infinite;}
#paraki-body{flex:1;overflow-y:auto;padding:0 0 8px;scrollbar-width:thin;scrollbar-color:var(--fog) transparent;}
.pk-stop{border-bottom:1px solid var(--fog);}
.pk-stop:last-child{border-bottom:none;}
.pk-stop-hdr{
  display:flex;align-items:center;justify-content:space-between;
  padding:12px 20px 8px;cursor:pointer;
}
.pk-stop-name{font-family:var(--sans);font-size:13px;font-weight:400;color:var(--ink);}
.pk-stop-dist{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);letter-spacing:.06em;}
.pk-arrivals{padding:0 20px 12px;}
.pk-arr-row{
  display:flex;align-items:center;gap:10px;padding:7px 0;
  border-bottom:1px solid var(--fog);
}
.pk-arr-row:last-child{border-bottom:none;}
.pk-line-badge{
  font-family:var(--mono);font-size:10px;font-weight:500;
  padding:3px 7px;border-radius:4px;color:white;flex-shrink:0;min-width:36px;text-align:center;
}
.pk-arr-info{flex:1;overflow:hidden;}
.pk-arr-dest{font-family:var(--sans);font-size:11px;font-weight:300;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.pk-arr-eta{font-family:var(--serif);font-style:italic;font-size:22px;color:var(--ink);line-height:1;flex-shrink:0;}
.pk-arr-eta.now{color:#DC2626;}
.pk-arr-unit{font-family:var(--mono);font-size:9px;color:var(--ash);}
.pk-empty{padding:32px 20px;text-align:center;font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);letter-spacing:.06em;line-height:2;}
.pk-loading{padding:24px 20px;display:flex;align-items:center;justify-content:center;gap:10px;font-family:var(--mono);font-size:10px;font-weight:300;color:var(--mist);letter-spacing:.06em;}

#comp-overlay{
  position:fixed;inset:0;z-index:1060;pointer-events:none;
  display:flex;align-items:stretch;
}
#comp-backdrop{
  position:absolute;inset:0;background:rgba(15,14,12,.18);
  opacity:0;transition:opacity .3s;pointer-events:none;
}
#comp-overlay.open #comp-backdrop{opacity:1;pointer-events:all;}
#comp-sheet{
  position:relative;width:100%;height:100%;
  background:var(--white);
  border-radius:0;border:none;box-shadow:none;
  display:flex;flex-direction:column;
  transform:translateY(100%);transition:transform .35s cubic-bezier(.16,1,.3,1);
  pointer-events:all;padding-bottom:calc(env(safe-area-inset-bottom)+8px);
}
#comp-overlay.open #comp-sheet{transform:translateY(0);}
#comp-handle{display:none;}
#comp-hdr{display:flex;align-items:center;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 20px 10px;flex-shrink:0;border-bottom:1px solid var(--fog);}
#comp-hdr .ch-t{font-family:var(--serif);font-style:italic;font-size:24px;letter-spacing:-.5px;color:var(--ink);}
#comp-hdr .ch-s{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.1em;text-transform:uppercase;margin-top:2px;}
#comp-close{background:transparent;border:1px solid var(--fog);border-radius:4px;color:var(--mist);cursor:pointer;width:26px;height:26px;display:grid;place-items:center;font-size:11px;font-family:var(--mono);transition:all .15s;}
#comp-close:hover{border-color:var(--mist);color:var(--ink2);}
#comp-search-row{
  display:flex;align-items:center;gap:8px;padding:0 20px 12px;flex-shrink:0;
  border-bottom:1px solid var(--fog);
}
.comp-line-sel{
  flex:1;display:flex;align-items:center;gap:8px;padding:10px 12px;
  background:var(--paper);border:1px solid var(--fog);border-radius:var(--r);cursor:pointer;
  transition:border-color .15s,background .15s;min-width:0;position:relative;overflow:hidden;
}
.comp-line-sel:hover{border-color:var(--mist);background:var(--white);}
.comp-line-sel .cls-bar{position:absolute;top:0;left:0;bottom:0;width:3px;}
.comp-line-num{font-family:var(--serif);font-style:italic;font-size:22px;line-height:1;color:var(--ink);}
.comp-line-name{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.comp-vs{font-family:var(--mono);font-size:10px;font-weight:300;color:var(--mist);flex-shrink:0;}
.comp-sel-label{font-family:var(--mono);font-size:8px;letter-spacing:.1em;text-transform:uppercase;font-weight:400;margin-bottom:2px;}
#comp-sel-a .cls-bar{background:#DC2626;}
#comp-sel-b .cls-bar{background:#2563EB;}
#comp-sel-a .comp-sel-label{color:#DC2626;}
#comp-sel-b .comp-sel-label{color:#2563EB;}
#comp-body{flex:1;overflow-y:auto;padding:0;scrollbar-width:thin;scrollbar-color:var(--fog) transparent;}
#comp-map-preview{height:180px;background:var(--fog);flex-shrink:0;position:relative;overflow:hidden;}
#comp-map-inner{width:100%;height:100%;}
.comp-cols{display:grid;grid-template-columns:1fr 1fr;border-bottom:1px solid var(--fog);}
.comp-col{padding:14px 16px;}
.comp-col:first-child{border-right:1px solid var(--fog);}
.comp-col-hdr{display:flex;align-items:center;gap:7px;margin-bottom:10px;}
.comp-col-line{font-family:var(--serif);font-style:italic;font-size:20px;line-height:1;color:var(--ink);}
.comp-col-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.comp-col-dest{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.04em;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.comp-dep-row{display:flex;align-items:baseline;gap:6px;padding:5px 0;border-bottom:1px solid var(--fog);}
.comp-dep-row:last-child{border-bottom:none;}
.comp-dep-eta{font-family:var(--serif);font-style:italic;font-size:18px;color:var(--ink);line-height:1;}
.comp-dep-eta.now{color:#DC2626;}
.comp-dep-unit{font-family:var(--mono);font-size:9px;color:var(--ash);}
.comp-dep-dest{font-family:var(--mono);font-size:9px;color:var(--mist);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.comp-sec{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);letter-spacing:.16em;text-transform:uppercase;padding:12px 20px 6px;border-bottom:1px solid var(--fog);}
.comp-empty{padding:20px;font-family:var(--mono);font-size:10px;color:var(--mist);text-align:center;}

/* Search dropdown */
#comp-search-drop{
  position:fixed;left:20px;right:20px;z-index:1070;
  background:var(--white);border:1px solid var(--fog);border-radius:var(--r);
  box-shadow:0 8px 24px rgba(0,0,0,.1);max-height:60vh;overflow-y:auto;display:none;
}
#comp-search-drop.open{display:block;}
.comp-drop-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--fog);transition:background .1s;}
.comp-drop-item:last-child{border-bottom:none;}
.comp-drop-item:hover{background:var(--paper);}
.comp-drop-num{font-family:var(--serif);font-style:italic;font-size:18px;color:var(--ink);min-width:36px;}
.comp-drop-name{font-family:var(--mono);font-size:10px;font-weight:300;color:var(--ash);}

#heatmap-legend{
  display:none;flex-direction:column;
  background:rgba(253,252,250,.93);border:1px solid var(--fog);border-radius:8px;
  padding:8px 12px;font-family:var(--mono);font-size:9px;
  color:var(--ash);letter-spacing:.06em;white-space:nowrap;
}
#heatmap-legend.show{display:flex;}
.hm-grad{width:100px;height:6px;border-radius:3px;margin-top:4px;
  background:linear-gradient(to right,#3B82F6,#10B981,#F59E0B,#EF4444);}
.hm-labels{display:flex;justify-content:space-between;margin-top:2px;font-size:8px;}

#planner-overlay{
  position:fixed;inset:0;z-index:1060;pointer-events:none;
  display:flex;align-items:stretch;
}
#planner-backdrop{position:absolute;inset:0;background:rgba(15,14,12,.18);opacity:0;transition:opacity .3s;pointer-events:none;}
#planner-overlay.open #planner-backdrop{opacity:1;pointer-events:all;}
#planner-sheet{
  position:relative;width:100%;height:100%;background:var(--white);
  display:flex;flex-direction:column;
  transform:translateY(100%);transition:transform .35s cubic-bezier(.16,1,.3,1);
  pointer-events:all;padding-bottom:calc(env(safe-area-inset-bottom)+8px);
}
#planner-overlay.open #planner-sheet{transform:translateY(0);}
#planner-hdr{
  display:flex;align-items:center;justify-content:space-between;
  padding:calc(14px + env(safe-area-inset-top)) 20px 12px;
  border-bottom:1px solid var(--fog);flex-shrink:0;
}
#planner-hdr .ph-t{font-family:var(--serif);font-style:italic;font-size:26px;letter-spacing:-.5px;}
#planner-close{background:transparent;border:1px solid var(--fog);border-radius:4px;color:var(--mist);cursor:pointer;width:26px;height:26px;display:grid;place-items:center;font-size:11px;transition:all .15s;}
#planner-inputs{padding:16px 20px;border-bottom:1px solid var(--fog);flex-shrink:0;display:flex;flex-direction:column;gap:10px;}
.pl-inp-row{display:flex;align-items:center;gap:10px;}
.pl-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;}
.pl-inp{
  flex:1;padding:10px 14px;border:1px solid var(--fog);border-radius:var(--r);
  font-family:var(--mono);font-size:12px;font-weight:300;color:var(--ink);
  background:var(--paper);outline:none;transition:border-color .15s;
}
.pl-inp:focus{border-color:var(--mist);}
.pl-swap{background:transparent;border:1px solid var(--fog);border-radius:4px;padding:4px 8px;cursor:pointer;font-size:14px;color:var(--mist);transition:all .15s;align-self:center;}
.pl-swap:hover{border-color:var(--mist);color:var(--ink);}
#planner-go{
  margin:0 20px 0;padding:12px;background:var(--ink);color:var(--white);
  border:none;border-radius:var(--r);font-family:var(--mono);font-size:11px;
  letter-spacing:.1em;text-transform:uppercase;cursor:pointer;transition:opacity .15s;
  flex-shrink:0;
}
#planner-go:hover{opacity:.85;}
#planner-body{flex:1;overflow-y:auto;padding:0;scrollbar-width:thin;scrollbar-color:var(--fog) transparent;}
.pl-result-hdr{
  padding:14px 20px 8px;
  font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);
  letter-spacing:.12em;text-transform:uppercase;border-bottom:1px solid var(--fog);
}
.pl-option{border-bottom:1px solid var(--fog);padding:14px 20px;cursor:pointer;transition:background .12s;}
.pl-option:hover{background:var(--paper);}
.pl-option-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.pl-option-time{font-family:var(--serif);font-style:italic;font-size:28px;color:var(--ink);line-height:1;}
.pl-option-tag{font-family:var(--mono);font-size:9px;color:var(--ash);letter-spacing:.06em;background:var(--fog);padding:3px 8px;border-radius:20px;}
.pl-steps{display:flex;flex-direction:column;gap:0;}
.pl-step{display:flex;align-items:flex-start;gap:12px;padding:4px 0;}
.pl-step-icon{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;flex-shrink:0;font-family:var(--mono);font-size:10px;font-weight:500;color:white;margin-top:2px;}
.pl-step-info{flex:1;}
.pl-step-line{font-family:var(--mono);font-size:11px;color:var(--ink2);}
.pl-step-detail{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);margin-top:1px;}
.pl-step-connector{width:2px;height:12px;background:var(--fog);margin-left:11px;}
.pl-walk{display:flex;align-items:center;gap:8px;padding:3px 0;}
.pl-walk-line{font-family:var(--mono);font-size:10px;color:var(--mist);}

/* Autocomplete dropdown */
#pl-drop{
  position:fixed;left:20px;right:20px;z-index:1080;background:var(--white);
  border:1px solid var(--fog);border-radius:var(--r);
  box-shadow:0 8px 24px rgba(0,0,0,.1);max-height:220px;overflow-y:auto;display:none;
}
#pl-drop.open{display:block;}
.pl-drop-item{padding:9px 14px;cursor:pointer;border-bottom:1px solid var(--fog);font-family:var(--mono);font-size:11px;color:var(--ink2);transition:background .1s;}
.pl-drop-item:last-child{border-bottom:none;}
.pl-drop-item:hover{background:var(--paper);}
.pl-drop-sub{font-size:9px;color:var(--ash);margin-top:2px;display:flex;align-items:center;gap:4px;flex-wrap:wrap;}

#bottom-left-btns{
  position:fixed;bottom:calc(var(--status-h) + 16px);left:18px;
  display:flex;flex-direction:row;align-items:center;gap:6px;z-index:1100;
}
#chat-btn,#btn-heatmap{
  width:40px;height:40px;border-radius:6px;
  background:var(--white);border:1px solid var(--fog);color:var(--ash);
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 20px rgba(0,0,0,.09);
  font-family:var(--mono);font-size:10px;font-weight:400;letter-spacing:.06em;
  transition:border-color .15s,color .15s,background .15s;
}
#chat-btn:hover,#btn-heatmap:hover{border-color:var(--mist);color:var(--ink);background:var(--paper);}
#chat-btn:active,#btn-heatmap:active{transform:scale(.95);}
#chat-btn.has-unread{border-color:var(--ink);color:var(--ink);}
#chat-btn.has-unread::after{
  content:'';position:absolute;top:-3px;right:-3px;width:7px;height:7px;
  border-radius:50%;background:#DC2626;border:1.5px solid var(--paper);
}
#chat-overlay{
  position:fixed;inset:0;z-index:1200;display:flex;flex-direction:column;
  background:var(--white);transition:opacity .25s cubic-bezier(.16,1,.3,1),transform .25s cubic-bezier(.16,1,.3,1);
  opacity:0;transform:translateY(100%);pointer-events:none;will-change:transform,opacity;
}
#chat-overlay.open{opacity:1;transform:translateY(0);pointer-events:all;}
#chat-header{
  display:flex;align-items:center;gap:12px;
  padding:14px 20px;padding-top:calc(14px + env(safe-area-inset-top));
  background:var(--white);border-bottom:1px solid var(--fog);flex-shrink:0;
}
#chat-header .ch-logo{
  font-family:var(--serif);font-style:italic;font-size:22px;letter-spacing:-.5px;color:var(--ink);flex-shrink:0;
}
#chat-header .ch-info{flex:1;}
#chat-header .ch-info .ch-title{font-family:var(--mono);font-size:10px;font-weight:400;letter-spacing:.12em;text-transform:uppercase;color:var(--ash);}
#chat-header .ch-info .ch-status{font-family:var(--mono);font-size:9px;font-weight:300;color:var(--mist);letter-spacing:.04em;display:flex;align-items:center;gap:5px;margin-top:2px;}
#chat-header .ch-info .ch-status::before{content:'';display:inline-block;width:5px;height:5px;border-radius:50%;background:#22C55E;}
#chat-close{
  background:transparent;border:1px solid var(--fog);border-radius:4px;
  color:var(--mist);cursor:pointer;width:26px;height:26px;
  display:grid;place-items:center;font-size:12px;font-family:var(--mono);
  transition:all .15s;flex-shrink:0;
}
#chat-close:hover{border-color:var(--mist);color:var(--ink2);}
#chat-messages{
  flex:1;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:12px;
  scroll-behavior:smooth;background:var(--paper);
  scrollbar-width:thin;scrollbar-color:var(--fog) transparent;
}
.msg{max-width:80%;display:flex;flex-direction:column;gap:3px;}
.msg.user{align-self:flex-end;align-items:flex-end;}
.msg.bot{align-self:flex-start;align-items:flex-start;}
.msg .bubble{
  padding:11px 14px;font-size:12.5px;line-height:1.6;
  white-space:pre-wrap;word-break:break-word;
}
.msg.user .bubble{
  background:var(--ink);color:var(--white);
  border-radius:10px 10px 3px 10px;
  font-family:var(--sans);font-weight:300;
}
.msg.bot .bubble{
  background:var(--white);color:var(--ink2);
  border:1px solid var(--fog);border-radius:10px 10px 10px 3px;
  font-family:var(--sans);font-weight:300;
}
.msg.bot .bubble strong{font-weight:500;color:var(--ink);}
.msg .ts{font-family:var(--mono);font-size:9px;color:var(--mist);padding:0 3px;letter-spacing:.04em;}
.msg.bot .bubble.loading{color:var(--mist);font-style:italic;font-family:var(--serif);}
#chat-loc-bar{
  display:none;align-items:center;gap:8px;
  padding:7px 20px;background:var(--paper);border-bottom:1px solid var(--fog);
  font-family:var(--mono);font-size:9px;font-weight:300;color:var(--ash);letter-spacing:.06em;
}
#chat-loc-bar.visible{display:flex;}
#chat-loc-bar .loc-dot{width:5px;height:5px;border-radius:50%;background:#22C55E;flex-shrink:0;}
#chat-input-row{
  display:flex;align-items:flex-end;gap:8px;
  padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom));
  background:var(--white);border-top:1px solid var(--fog);
}
#chat-loc-btn{
  background:transparent;border:1px solid var(--fog);border-radius:4px;
  color:var(--mist);font-size:13px;cursor:pointer;
  width:32px;height:32px;display:grid;place-items:center;flex-shrink:0;
  transition:all .15s;-webkit-tap-highlight-color:transparent;
}
#chat-loc-btn:hover{border-color:var(--mist);color:var(--ash);}
#chat-loc-btn.active{border-color:#22C55E;color:#22C55E;background:#F0FDF4;}
#chat-input{
  flex:1;background:var(--paper);border:1px solid var(--fog);border-radius:6px;
  color:var(--ink);font-size:12.5px;font-family:var(--sans);font-weight:300;
  padding:8px 12px;resize:none;max-height:100px;overflow-y:auto;
  outline:none;line-height:1.5;
}
#chat-input::placeholder{color:var(--mist);font-family:var(--mono);font-size:11px;letter-spacing:.03em;}
#chat-input:focus{border-color:var(--mist);}
#chat-send{
  width:32px;height:32px;border-radius:4px;
  background:#E8650A;border:none;color:#fff;
  font-family:var(--mono);font-size:11px;cursor:pointer;
  display:grid;place-items:center;flex-shrink:0;
  transition:background .15s,transform .1s;
}
#chat-send:hover{background:#d45a08;}
#chat-send:active{transform:scale(.93);}
#chat-send:disabled{background:var(--fog);cursor:default;}
#chat-send svg{width:13px;height:13px;}
/* ── Clusters ─────────────────────────────────────────────────────────────── */
.leaflet-marker-icon div[style*="border-radius:50%"]{
  transition:transform .15s cubic-bezier(.16,1,.3,1);
  cursor:pointer;
}
.leaflet-marker-icon div[style*="border-radius:50%"]:hover{
  transform:scale(1.12);
}
.stop-tip{background:#0F0E0C;color:#FDFCFA;border:none;border-radius:6px;font-family:var(--mono);font-size:12px;padding:4px 10px;}
.stop-tip::before{display:none;}
/* ── Stop markers ida/volta ─────────────────────── */
.stop-dir-ida{opacity:1;}
.stop-dir-volta{opacity:.65;}

/* ── Preços / tarifas ────────────────────────────── */
.fare-box{background:var(--paper);border:1px solid var(--fog);border-radius:8px;padding:10px 14px;margin:10px 0 4px;}
.fare-title{font-family:var(--mono);font-size:9px;color:var(--mist);letter-spacing:.1em;text-transform:uppercase;margin-bottom:8px;}
.fare-row{display:flex;align-items:center;justify-content:space-between;padding:4px 0;}
.fare-row+.fare-row{border-top:1px solid var(--fog);}
.fare-label{font-family:var(--mono);font-size:10px;color:var(--ink2);}
.fare-price{font-family:var(--serif);font-style:italic;font-size:15px;color:var(--ink);letter-spacing:-.3px;}
.fare-note{font-family:var(--mono);font-size:8px;color:var(--ash);margin-top:4px;line-height:1.5;}
.fare-badge-free{background:#dcfce7;color:#15803d;font-family:var(--mono);font-size:8px;padding:2px 6px;border-radius:20px;font-weight:700;}

/* ── Search dropdown ─────────────────────────────── */
#search-drop{position:fixed;top:46px;left:0;width:280px;background:var(--white);border:1px solid var(--fog);border-top:none;border-radius:0 0 10px 10px;box-shadow:0 8px 24px rgba(0,0,0,.12);z-index:300;display:none;max-height:360px;overflow-y:auto;}
#search-drop.open{display:block;}
.sd-section{font-family:var(--mono);font-size:9px;color:var(--mist);letter-spacing:.08em;padding:8px 14px 4px;text-transform:uppercase;}
.sd-item{display:flex;align-items:center;gap:10px;padding:8px 14px;cursor:pointer;transition:background .1s;}
.sd-item:hover{background:var(--paper);}
.sd-badge{font-family:var(--mono);font-size:10px;font-weight:700;color:#fff;padding:2px 7px;border-radius:4px;flex-shrink:0;min-width:32px;text-align:center;}
.sd-name{font-family:var(--mono);font-size:11px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sd-sub{font-family:var(--mono);font-size:9px;color:var(--ash);}
.sd-empty{padding:14px;font-family:var(--mono);font-size:11px;color:var(--ash);text-align:center;}
.sd-count{font-family:var(--mono);font-size:9px;color:var(--ash);padding:6px 14px 8px;border-top:1px solid var(--fog);}
#search-clear{background:none;border:none;cursor:pointer;padding:0;color:var(--mist);font-size:14px;line-height:1;flex-shrink:0;}
#search-clear:hover{color:var(--ink2);}

/* ── Operadores "em breve" (sem dados RT) ─────────── */
.op-pill-soon{
  opacity:.55;cursor:default;
  filter:grayscale(.4);
  position:relative;
}
.op-pill-soon:hover{opacity:.7;}
.op-soon-badge{
  display:inline-block;
  font-family:var(--mono);
  font-size:7px;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  background:var(--fog);
  color:var(--mist);
  padding:1px 4px;
  border-radius:3px;
  margin-left:4px;
  vertical-align:middle;
  line-height:1.5;
}
/* ── Comparador intro + drop-item melhorado ─────────── */
#comp-intro-msg{
  font-family:var(--mono);font-size:10px;color:var(--ash);
  text-align:center;padding:8px 20px 0;letter-spacing:.04em;
}

.comp-drop-item:hover{background:var(--paper);}




/* ── Planeador drop popular label ───────────────── */
.pl-pop-label{
  font-family:var(--mono);font-size:9px;color:var(--mist);
  letter-spacing:.08em;text-transform:uppercase;
  padding:8px 14px 4px;
}

/* ── Calculadora de tarifário na paragem ──────────── */
.fare-calc-wrap{
  background:var(--paper);border:1px solid var(--fog);
  border-radius:8px;padding:10px 14px;margin:10px 0 4px;
}
.fare-dest-input::placeholder{color:var(--mist);}
.fare-dest-input:focus{border-color:var(--mist)!important;}

/* ── Horário Completo ──────────────────────────────────────────────────── */
.sched-toggle{
  display:flex;align-items:center;justify-content:space-between;
  cursor:pointer;user-select:none;
  padding:10px 0 6px;
  border-top:1px solid var(--fog);
  margin-top:8px;
}
.sched-toggle:hover{background:none;opacity:.8;}
.sched-chevron{font-size:10px;color:var(--ash);font-family:var(--mono);letter-spacing:.5px;}
.sched-body{padding:0 0 4px;}
.sched-loading,.sched-empty{
  font-size:12px;color:var(--ash);padding:8px 0;
}
.sched-table{font-size:12px;margin:4px 0;}
/* Horário da linha: grade hora × minutos */
.sched-hour-row{
  display:flex;align-items:baseline;gap:6px;
  padding:3px 0;border-bottom:1px solid var(--fog);
}
.sched-hour-row:last-of-type{border-bottom:none;}
.sched-hour{
  min-width:28px;font-family:var(--mono);font-size:12px;
  color:var(--ink);font-weight:600;
}
.sched-mins{display:flex;flex-wrap:wrap;gap:3px;align-items:center;}
.sched-min{
  font-family:var(--mono);font-size:11px;
  background:var(--fog);border-radius:3px;
  padding:1px 4px;cursor:default;
  color:var(--ink);
  transition:background .15s;
}
.sched-min:hover{background:var(--blue);color:#fff;}
.sched-min.sched-now{background:var(--orange);color:#fff;font-weight:700;}
/* Horário da paragem: linha + horas */
.sched-line-row{
  display:flex;align-items:flex-start;gap:6px;
  padding:4px 0;border-bottom:1px solid var(--fog);
}
.sched-line-row:last-of-type{border-bottom:none;}
.sched-line-badge{
  min-width:30px;text-align:center;
  border-radius:4px;padding:2px 5px;
  font-size:10px;font-weight:700;color:#fff;
  letter-spacing:.3px;flex-shrink:0;margin-top:1px;
}
.sched-line-times{display:flex;flex-wrap:wrap;gap:3px;align-items:center;}
.sched-line-h{
  font-family:var(--mono);font-size:11px;font-weight:600;
  color:var(--ash);margin-left:2px;
}
.sched-note{
  font-size:10px;color:var(--ash);margin-top:8px;
  padding-top:6px;border-top:1px solid var(--fog);
  font-style:italic;
}

/* ── Push Notifications ────────────────────────────────────────────────── */
.push-bar{
  display:flex;align-items:center;gap:8px;
  background:linear-gradient(135deg,#EFF6FF,#F0FFF4);
  border:1px solid var(--fog);border-radius:8px;
  padding:10px 12px;margin:12px 0 4px;
  font-size:12px;
}
.push-bar-icon{font-size:18px;line-height:1;}
.push-bar-text{flex:1;color:var(--ink);}
.push-bar-text strong{display:block;font-size:13px;margin-bottom:2px;}
.push-bar-text span{color:var(--ash);font-size:11px;}
.push-btn{
  background:var(--blue);color:#fff;
  border:none;border-radius:6px;
  padding:6px 12px;font-size:11px;font-weight:600;
  cursor:pointer;white-space:nowrap;flex-shrink:0;
  transition:background .15s;
}
.push-btn:hover{background:#1d4ed8;}
.push-btn.active{background:var(--green);}
.push-btn.unsub{background:var(--ash);}
/* ── Tooltip hover rico — estações CP (tema site) ───────────────────────── */
.train-hover-tip {
  position: fixed;
  z-index: 9999;
  width: 230px;
  background: var(--white);
  border: 1px solid var(--fog);
  border-radius: var(--r);
  overflow: hidden;
  box-shadow: 0 4px 24px rgba(15,14,12,.12), 0 1px 4px rgba(15,14,12,.06);
  pointer-events: none;
  font-family: var(--mono);
  animation: tht-in .14s cubic-bezier(.16,1,.3,1);
}
@keyframes tht-in {
  from { opacity:0; transform:translateY(5px) scale(.98); }
  to   { opacity:1; transform:translateY(0)   scale(1);   }
}

/* Imagem no topo */
.tht-img-wrap {
  width: 100%;
  height: 118px;
  background: var(--paper);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border-bottom: 1px solid var(--fog);
}
.tht-img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.tht-img-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  color: var(--mist);
}

/* Spinner enquanto carrega — usa cor CP */
.tht-spinner {
  width: 20px;
  height: 20px;
  border: 1.5px solid var(--fog);
  border-top-color: #C8102E;
  border-radius: 50%;
  animation: tht-spin .65s linear infinite;
  display: inline-block;
}
@keyframes tht-spin { to { transform: rotate(360deg); } }

/* Corpo */
.tht-body {
  padding: 12px 14px 14px;
  display: flex;
  flex-direction: column;
  gap: 5px;
}

/* Nome — serif itálico como o resto do site */
.tht-name {
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  line-height: 1.15;
  letter-spacing: -.3px;
  color: var(--ink);
}

/* Linha CP — mono uppercase vermelho */
.tht-line {
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 400;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: #C8102E;
  display: flex;
  align-items: center;
  gap: 6px;
}
.tht-line::before {
  content: '';
  display: inline-block;
  width: 18px;
  height: 1.5px;
  background: #C8102E;
  border-radius: 1px;
  flex-shrink: 0;
}

/* Divisor */
.tht-div {
  height: 1px;
  background: var(--fog);
  margin: 2px 0;
}

/* Endereço / horário — mono pequeno estilo .p-sec */
.tht-addr {
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 300;
  color: var(--ash);
  display: flex;
  align-items: flex-start;
  gap: 6px;
  line-height: 1.4;
}
.tht-addr i {
  margin-top: 1px;
  flex-shrink: 0;
  color: var(--mist);
  font-size: 9px;
}

/* Badges de serviços — estilo .p-badge do site */
.tht-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-top: 5px;
  align-items: center;
}
.tht-badge {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 400;
  letter-spacing: .06em;
  padding: 3px 7px;
  border-radius: 20px;
  border: 1px solid var(--fog);
  background: var(--paper);
  color: var(--ash);
}
.tht-badge-green {
  border-color: #BBF7D0;
  background: #F0FDF4;
  color: #15803D;
}

/* Ícones de comodidades da estação — círculos com ícone FA */
.tht-svc-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--paper);
  border: 1px solid var(--fog);
  color: var(--ash);
  font-size: 11px;
  transition: background .15s, color .15s;
  cursor: default;
}
.tht-svc-pill:hover {
  background: var(--fog);
  color: var(--ink);
}

/* ── Botões Partidas / Chegadas (Metro e CP) ────────────────────────────── */
.p-dir-btn {
  flex: 1; padding: 8px 0;
  background: var(--paper);
  border: 1px solid var(--fog);
  border-radius: var(--r);
  font-family: var(--mono); font-size: 10px; font-weight: 400;
  color: var(--ash); cursor: pointer; letter-spacing: .08em;
  text-transform: uppercase;
  transition: background .15s, color .15s, border-color .15s;
}
.p-dir-btn:hover { border-color: var(--mist); color: var(--ink); }
.p-dir-btn-on {
  background: var(--ink); color: var(--white);
  border-color: var(--ink);
}
.p-dir-btn-on:hover { background: #2a2925; border-color: #2a2925; color: var(--white); }

/* ── Sub-barra de comboios ───────────────────────────────────────────────── */
.train-subbar {
  display: none; /* controlado por JS */
  flex-direction: row;
  align-items: center;
  gap: 6px;
  padding: 6px 12px 8px;
  background: var(--white);
  border-top: 1px solid var(--fog);
  flex-wrap: wrap;
  animation: tht-in .15s ease;
}

.train-sub-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 30px;
  padding: 0 12px;
  border-radius: 6px;
  border: 1px solid rgba(200,16,46,.25);
  background: var(--white, #fff);
  color: var(--ash, #888);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .02em;
  cursor: pointer;
  transition: background .15s, color .15s, border-color .15s;
  white-space: nowrap;
}
.train-sub-btn i {
  font-size: 11px;
  opacity: .7;
}
.train-sub-btn:hover {
  border-color: var(--mist);
  color: var(--ink);
  background: var(--paper);
}
.train-sub-btn.on {
  border-color: var(--mist);
  color: var(--ink);
  background: var(--paper);
}
.train-sub-btn.on i { opacity: 1; }

/* ── Popup comboios em movimento (dark theme) ────────────────────────────── */
.train-live-popup-wrap .leaflet-popup-content-wrapper {
  background: #0F0E0C;
  border: 1px solid rgba(255,255,255,.10);
  border-radius: 12px;
  box-shadow: 0 8px 32px rgba(0,0,0,.55);
  padding: 0;
  overflow: hidden;
}
.train-live-popup-wrap .leaflet-popup-tip-container { display: none; }
.train-live-popup-wrap .leaflet-popup-content { margin: 0; width: auto !important; }
.train-live-popup-wrap .leaflet-popup-close-button {
  color: rgba(255,255,255,.5) !important;
  top: 6px !important; right: 8px !important;
  font-size: 16px !important;
}

.train-live-popup {
  font-family: var(--mono, 'JetBrains Mono', monospace);
  min-width: 200px;
}
.tlp-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px 7px;
  gap: 8px;
}
.tlp-svc {
  font-size: 10px;
  font-weight: 700;
  color: rgba(255,255,255,.9);
  text-transform: uppercase;
  letter-spacing: .07em;
}
.tlp-id {
  font-size: 16px;
  font-weight: 800;
  color: #fff;
  letter-spacing: .02em;
}
.tlp-body {
  padding: 10px 12px 12px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.tlp-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
}
.tlp-label {
  font-size: 9px;
  color: rgba(255,255,255,.45);
  text-transform: uppercase;
  letter-spacing: .06em;
  min-width: 44px;
  flex-shrink: 0;
}
.tlp-val {
  font-size: 11px;
  color: #FDFCFA;
  font-weight: 500;
  line-height: 1.3;
}
.tlp-seg { font-size: 10px; color: rgba(255,255,255,.7); }
.tlp-divider {
  height: 1px;
  background: rgba(255,255,255,.08);
  margin: 4px 0;
}
.tlp-progress-wrap {
  height: 3px;
  background: rgba(255,255,255,.1);
  border-radius: 2px;
  overflow: hidden;
  margin-top: 4px;
}
.tlp-progress-bar {
  height: 100%;
  border-radius: 2px;
  transition: width .3s ease;
}
.tlp-prog-label {
  font-size: 9px;
  color: rgba(255,255,255,.4);
  text-align: right;
  margin-top: 2px;
}

/* ── Botões fctl no modo comboios ────────────────────────────────────────── */
#fctl-left .fc.train-sub-btn.on {
  border-color: var(--mist);
  color: var(--ink);
  background: var(--paper);
}

/* ── Estações CP: cor de linha verde ─────────────────────────────────────── */


.tht-line { color: #009B4D !important; } /* linha CP verde */
/* botões fctl usam .fc.on nativo */

/* ── Loader mobile ───────────────────────────────────────────────────────── */
@media (max-width: 640px) {
  #ld-bar { height: 3px; }
}

/* ── Welcome Slideshow Fullscreen ── */
#welcome-overlay {
  position: fixed; inset: 0; z-index: 1800;
  background: var(--paper);
  opacity: 0; transition: opacity .4s cubic-bezier(.16,1,.3,1);
  pointer-events: none;
}
#welcome-overlay.wlc-in  { opacity: 1; pointer-events: all; }
#welcome-overlay.wlc-out { opacity: 0; pointer-events: none; }

.wlc-fs {
  position: relative;
  width: 100%; height: 100%;
  display: flex; flex-direction: column;
  overflow: hidden;
  animation: wlc-fs-in .3s cubic-bezier(.16,1,.3,1) both;
}
.wlc-slide-out { animation: wlc-fs-out .22s cubic-bezier(.4,0,1,1) both !important; }
@keyframes wlc-fs-in  { from { opacity:0; transform:translateY(18px); } to { opacity:1; transform:none; } }
@keyframes wlc-fs-out { from { opacity:1; transform:none; } to { opacity:0; transform:translateY(-14px); } }

/* Blob decorativo */
.wlc-bg-blob {
  position: absolute; width: 600px; height: 600px;
  border-radius: 50%;
  background: var(--wlc-accent-bg);
  top: -180px; right: -160px;
  pointer-events: none;
  transition: background .4s;
  filter: blur(60px);
}

/* Topbar */
.wlc-topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 22px 28px 0;
  flex-shrink: 0;
  position: relative; z-index: 1;
}
.wlc-logo-top {
  font-family: var(--serif); font-style: italic;
  font-size: 22px; letter-spacing: -.5px; color: var(--ink);
  display: flex; align-items: center; gap: 8px;
}
.wlc-badge-top {
  font-family: var(--mono); font-style: normal;
  font-size: 9px; font-weight: 400; letter-spacing: .1em;
  text-transform: uppercase; color: var(--ash);
  background: var(--fog); border-radius: 4px;
  padding: 3px 7px; margin-top: 2px;
}
.wlc-skip {
  font-family: var(--mono); font-size: 10px; font-weight: 400;
  letter-spacing: .06em; color: var(--ash);
  background: transparent; border: none; cursor: pointer;
  text-transform: uppercase; padding: 6px 0;
  transition: color .15s;
}
.wlc-skip:hover { color: var(--ink); }

/* Centro */
.wlc-center {
  flex: 1; display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  padding: 20px 40px; text-align: center;
  position: relative; z-index: 1;
  gap: 0;
}
.wlc-step-label {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 32px;
}
.wlc-step-num {
  font-family: var(--mono); font-size: 11px; font-weight: 400;
  color: var(--wlc-accent); letter-spacing: .1em;
  background: var(--wlc-accent-bg);
  padding: 4px 10px; border-radius: 20px;
}
.wlc-step-name {
  font-family: var(--mono); font-size: 11px; font-weight: 400;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ash);
}
.wlc-icon-wrap {
  width: 120px; height: 120px; margin-bottom: 36px;
  flex-shrink: 0;
}
.wlc-icon-wrap svg { width: 100%; height: 100%; }
.wlc-fs-title {
  font-family: var(--serif); font-style: italic;
  font-size: 42px; letter-spacing: -1.5px; line-height: 1.05;
  color: var(--ink); margin: 0 0 16px; font-weight: 400;
}
.wlc-fs-body {
  font-family: var(--sans); font-size: 15px; line-height: 1.65;
  color: var(--ash); margin: 0;
  max-width: 340px;
}

/* Rodapé */
.wlc-footer {
  display: flex; flex-direction: column; align-items: center;
  gap: 24px; padding: 0 40px 36px;
  flex-shrink: 0; position: relative; z-index: 1;
}
.wlc-dots {
  display: flex; gap: 8px; align-items: center;
}
.wlc-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--fog); cursor: pointer;
  transition: background .25s, transform .25s, width .25s;
}
.wlc-dot-on {
  width: 20px; border-radius: 3px; transform: none;
}
.wlc-btn-next, .wlc-btn-final {
  width: 100%; max-width: 340px;
  padding: 16px 28px;
  font-family: var(--mono); font-size: 12px; font-weight: 400;
  letter-spacing: .08em; text-transform: uppercase;
  border: none; border-radius: 12px; cursor: pointer;
  transition: all .18s;
  display: flex; align-items: center; justify-content: center;
}
.wlc-btn-next {
  background: var(--wlc-accent-bg);
  color: var(--wlc-accent);
  border: 1.5px solid var(--wlc-accent);
}
.wlc-btn-next:hover { background: var(--wlc-accent); color: #fff; }
.wlc-btn-final {
  background: var(--ink); color: var(--white);
}
.wlc-btn-final:hover { background: #2a2925; }
.wlc-btn-next:active, .wlc-btn-final:active { transform: scale(.98); }

/* Mobile */
@media (max-width: 640px) {
  .wlc-topbar { padding: 18px 20px 0; }
  .wlc-center { padding: 16px 24px; }
  .wlc-icon-wrap { width: 90px; height: 90px; margin-bottom: 24px; }
  .wlc-fs-title { font-size: 30px; }
  .wlc-fs-body { font-size: 14px; }
  .wlc-step-label { margin-bottom: 20px; }
  .wlc-footer { padding: 0 20px 28px; }
  .wlc-btn-next, .wlc-btn-final { max-width: 100%; }
}


/* ══════════════════════════════════════════════════════════════════════════
   ADAPTAÇÕES MOBILE / TABLET
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Tablet (641px – 1024px) ─────────────────────────────────────────────── */
@media (min-width: 641px) and (max-width: 1024px) {
  :root { --panel-w: 360px; }

  /* Painel lateral ligeiramente mais estreito */
  #panel { width: var(--panel-w); }

  /* Botões fctl maiores */
  .fc { width: 38px; height: 38px; }
  .fc svg { width: 15px; height: 15px; }
  .fc-col { gap: 5px; }
  #fctl { gap: 5px; }

  /* train-subbar visível e maior */
  .train-subbar { gap: 6px; padding: 6px; }
  .train-sub-btn { font-size: 11px; padding: 6px 12px; }

  /* Hover tip ligeiramente mais largo */
  .train-hover-tip { width: 240px; }

  /* Popup comboios */
  .train-live-popup { min-width: 210px; }
}

/* ── Mobile (≤640px) — melhorias sobre o existente ─────────────────────── */
@media (max-width: 640px) {

  /* Hover tip no mobile: centralizado, largura quase total */
  .train-hover-tip {
    position: fixed !important;
    left: 50% !important;
    transform: translateX(-50%) !important;
    top: 80px !important;
    width: calc(100vw - 32px);
    max-width: 360px;
    border-radius: 14px;
    pointer-events: none;
  }

  /* train-subbar no desktop esconde em mobile (usa mobile-train-bar) */
  .train-subbar { display: none !important; }

  /* Popup Leaflet mais largo em mobile */
  .train-live-popup-wrap .leaflet-popup-content-wrapper {
    width: calc(100vw - 48px);
    max-width: 340px;
  }
  .train-live-popup { min-width: unset; }
  .tlp-header { padding: 10px 14px 9px; }
  .tlp-body { padding: 10px 14px 14px; }

}

/* ── Barra de controlo CP no mobile (substitui train-subbar) ────────────── */
#mobile-train-bar {
  position: fixed;
  bottom: 0; left: 0; right: 0;
  height: calc(60px + env(safe-area-inset-bottom));
  padding-bottom: env(safe-area-inset-bottom);
  background: var(--white);
  border-top: 1px solid var(--fog);
  display: flex;
  align-items: stretch;
  z-index: 85;
  transform: translateY(100%);
  transition: transform .3s cubic-bezier(.16,1,.3,1);
  box-shadow: 0 -4px 20px rgba(0,0,0,.08);
}
#mobile-train-bar.mtb-visible {
  transform: translateY(0);
}
.mtb-btn {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  background: transparent;
  border: none;
  cursor: pointer;
  color: var(--ash);
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 400;
  letter-spacing: .04em;
  text-transform: uppercase;
  padding: 8px 4px;
  transition: color .15s, background .15s;
  -webkit-tap-highlight-color: transparent;
}
.mtb-btn i { font-size: 18px; transition: color .15s; }
.mtb-btn.mtb-on { color: var(--ink); }
.mtb-btn.mtb-on i { color: #C8102E; }
.mtb-btn:active { background: var(--paper); }

/* Quando train bar visível, ajustar elementos que ficam acima */
body.train-mode-mobile .leaflet-bottom { bottom: calc(60px + env(safe-area-inset-bottom) + 8px) !important; }
body.train-mode-mobile #bottom-left-btns { bottom: calc(60px + env(safe-area-inset-bottom) + 16px) !important; }
body.train-mode-mobile #fctl { bottom: calc(60px + env(safe-area-inset-bottom) + 14px) !important; }

/* ── Marcadores CP maiores em touch ─────────────────────────────────────── */
@media (max-width: 640px) {
  /* Aumentar área de toque nos marcadores Leaflet */
  .leaflet-marker-icon { touch-action: none; }
}

/* ── Loader mobile ───────────────────────────────────────────────────────── */
@media (max-width: 640px) {
  #ld-bar { height: 3px; }
}

/* ── Ecrã de Manutenção ─────────────────────────────────────────────────── */
.maint-wrap {
  display: flex; flex-direction: column;
  align-items: center; text-align: center;
  gap: 16px; padding: 40px 24px;
  max-width: 320px;
}
.maint-icon { margin-bottom: 8px; opacity: .6; }
.maint-title {
  font-family: var(--serif); font-style: italic;
  font-size: 36px; letter-spacing: -1px;
  color: var(--ink); margin: 0; font-weight: 400;
}
.maint-sub {
  font-family: var(--mono); font-size: 12px; font-weight: 300;
  letter-spacing: .06em; color: var(--ash); margin: 0;
}
.maint-retry {
  display: flex; gap: 8px; align-items: center;
  margin-top: 8px;
}
.maint-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--fog);
  animation: maint-pulse 1.4s ease-in-out infinite;
}
.maint-dot:nth-child(2) { animation-delay: .2s; }
.maint-dot:nth-child(3) { animation-delay: .4s; }
@keyframes maint-pulse {
  0%, 100% { background: var(--fog); transform: scale(1); }
  50% { background: var(--mist); transform: scale(1.3); }
}

/* ── Painel Metro do Porto ──────────────────────────────────────────────── */

/* Chip de linha — círculo com letra */
.mp-line-chip {
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; border-radius: 50%;
  font-family: var(--mono); font-size: 10px; font-weight: 700;
  line-height: 1; flex-shrink: 0;
}

/* Header da estação */
.mp-station-header {
  display: flex; align-items: center; gap: 12px; margin-bottom: 14px;
}
.mp-logo-wrap {
  width: 40px; height: 40px; border-radius: 8px;
  background: #fff; border: 1px solid var(--fog);
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.mp-station-info { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.mp-station-name {
  font-family: var(--serif); font-style: italic;
  font-size: 20px; letter-spacing: -.4px; color: var(--ink); line-height: 1.1;
}
.mp-line-chips { display: flex; gap: 4px; flex-wrap: wrap; }

/* Botões Partidas/Chegadas */
.mp-dir-row { display: flex; gap: 6px; margin-bottom: 14px; }
.mp-dir-btn {
  flex: 1; padding: 9px 0;
  background: var(--paper); border: 1px solid var(--fog);
  border-radius: var(--r); font-family: var(--mono);
  font-size: 10px; font-weight: 400; color: var(--ash);
  cursor: pointer; letter-spacing: .08em; text-transform: uppercase;
  transition: all .15s; display: flex; align-items: center;
  justify-content: center; gap: 6px;
}
.mp-dir-btn:hover { border-color: var(--mist); color: var(--ink); }
.mp-dir-on {
  background: var(--ink); color: var(--white); border-color: var(--ink);
}
.mp-dir-on:hover { background: #2a2925; border-color: #2a2925; }

/* Header da tabela */
.mp-table-hdr {
  display: grid;
  grid-template-columns: 28px 1fr 44px 40px;
  gap: 0 8px;
  padding: 5px 10px;
  background: var(--paper);
  border-radius: 6px 6px 0 0;
  border: 1px solid var(--fog);
  border-bottom: none;
  font-family: var(--mono); font-size: 8px; font-weight: 400;
  letter-spacing: .1em; text-transform: uppercase; color: var(--mist);
}
.mp-col-line  { text-align: center; }
.mp-col-dest  { min-width: 0; }
.mp-col-time  { text-align: right; }
.mp-col-wait  { text-align: right; }

/* Linhas da tabela */
#metro-dep-wrap { border: 1px solid var(--fog); border-radius: 0 0 6px 6px; overflow: hidden; }
.mp-row {
  display: grid;
  grid-template-columns: 28px 1fr 44px 40px;
  gap: 0 8px;
  padding: 9px 10px;
  align-items: center;
  border-bottom: 1px solid var(--fog);
  transition: background .12s;
}
.mp-row:last-child { border-bottom: none; }
.mp-row:hover { background: var(--paper); }
.mp-row-soon { background: #FEF9C3 !important; }
.mp-col-dest {
  font-family: var(--sans); font-size: 12px; color: var(--ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.mp-col-time {
  font-family: var(--mono); font-size: 11px; font-weight: 600;
  color: var(--ink); text-align: right;
}
.mp-col-wait {
  font-family: var(--mono); font-size: 10px; color: var(--ash);
  text-align: right;
}
.mp-wait-now { color: #CA8A04; font-weight: 700; }

/* Estados */
.mp-loading {
  display: flex; align-items: center; justify-content: center;
  padding: 24px; background: var(--white);
}
.mp-empty {
  padding: 16px 12px; font-family: var(--mono);
  font-size: 11px; color: var(--ash); text-align: center;
}

/* Rodapé */
.mp-footer {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 10px; padding: 0 2px;
}
.mp-footer > span {
  font-family: var(--mono); font-size: 9px; color: var(--mist);
}
.mp-refresh-btn {
  display: flex; align-items: center; gap: 5px;
  background: transparent; border: 1px solid var(--fog);
  border-radius: 6px; padding: 5px 10px;
  font-family: var(--mono); font-size: 9px; color: var(--ash);
  cursor: pointer; letter-spacing: .06em; text-transform: uppercase;
  transition: all .15s;
}
.mp-refresh-btn:hover { border-color: var(--mist); color: var(--ink); }