
  :root{
    --ink:#0f172a; --muted:#566074; --faint:#8a93a3; --line:#e6e8ee; --wash:#f5f6f9;
    --lA:#852d7e; --lB:#00893e; --lC:#e2007a; --lD:#d8232a;
    --go:#15803d; --go-bg:#dcfce7; --go-ink:#14532d;
    --hurry:#d97706; --hurry-bg:#fef3c7; --hurry-ink:#78350f;
    --late:#dc2626; --late-bg:#fee2e2; --late-ink:#7f1d1d;
    --me:#2563eb;
    --safe-t:env(safe-area-inset-top,0px); --safe-b:env(safe-area-inset-bottom,0px);
    --safe-l:env(safe-area-inset-left,0px); --safe-r:env(safe-area-inset-right,0px);
    --sheet-offset:0px;
  }
  html,body{height:100%;margin:0;background:#ffffff;color:var(--ink);overscroll-behavior:none;-webkit-tap-highlight-color:transparent}
  body{font-family:'Figtree',system-ui,-apple-system,'Segoe UI',sans-serif;font-feature-settings:"tnum" 1;overflow:hidden}
  button{font:inherit;color:inherit;cursor:pointer}
  button:focus-visible,input:focus-visible{outline:2.5px solid var(--me);outline-offset:2px}
  .hidden{display:none!important}

  /* ---------- Carte ---------- */
  #map{position:fixed;inset:0;background:#f4f5f7;z-index:0}
  .leaflet-container{font-family:'Figtree',system-ui,sans-serif}
  .leaflet-container img,.leaflet-container img.leaflet-tile{max-width:none!important;max-height:none!important}
  .leaflet-bottom{bottom:var(--sheet-offset);transition:bottom .38s cubic-bezier(.2,.8,.2,1)}
  .leaflet-control-attribution{font-size:10px;background:rgba(255,255,255,.85)!important;border-radius:6px 0 0 0}
  .leaflet-right .leaflet-control{margin-right:calc(10px + var(--safe-r))}
  .leaflet-control-zoom{border:1px solid var(--line)!important;border-radius:12px!important;overflow:hidden;box-shadow:0 6px 18px -8px rgba(15,23,42,.3)!important}
  .leaflet-control-zoom a{width:40px!important;height:40px!important;line-height:40px!important;color:var(--ink)!important}

  .leaflet-popup-content-wrapper{border-radius:16px;box-shadow:0 1px 2px rgba(15,23,42,.08),0 18px 40px -12px rgba(15,23,42,.35);padding:0}
  .leaflet-popup-content{margin:0;line-height:1.35}
  .leaflet-popup-tip{box-shadow:none}
  .leaflet-container a.leaflet-popup-close-button{top:8px;right:8px;width:28px;height:28px;font-size:20px;line-height:26px;color:var(--faint);border-radius:8px}
  .leaflet-container a.leaflet-popup-close-button:hover{background:var(--wash);color:var(--ink)}

  .leaflet-tooltip.st-label{display:none;background:rgba(255,255,255,.94);border:0;border-radius:6px;box-shadow:0 1px 3px rgba(15,23,42,.22);font:700 11.5px/1.2 'Figtree',sans-serif;color:var(--ink);padding:3px 7px}
  .leaflet-tooltip.st-label::before{display:none}
  .z-labels .leaflet-tooltip.st-label.key{display:block}
  .z-all .leaflet-tooltip.st-label{display:block}

  /* Rames */
  .tram-icon{background:none;border:0}
  .tram{position:relative;width:26px;height:26px;border-radius:50%;background:var(--c);color:#fff;font:800 13px/26px 'Figtree',sans-serif;text-align:center;box-shadow:0 0 0 2.5px #fff,0 3px 8px rgba(15,23,42,.35)}
  .tram b{position:relative;z-index:1}
  .tram .dir{position:absolute;inset:-10px;pointer-events:none}
  .tram .dir::before{content:"";position:absolute;left:50%;top:0;transform:translateX(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:7px solid var(--c);filter:drop-shadow(0 0 1.5px #fff)}
  .tram.dwell{box-shadow:0 0 0 2.5px #fff,0 0 0 5px color-mix(in srgb,var(--c) 35%,transparent),0 3px 8px rgba(15,23,42,.35)}
  .tram .dest{display:none;position:absolute;left:31px;top:2px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:700 11px/1.2 'Figtree',sans-serif;color:var(--ink);background:#fff;border:1px solid var(--line);border-left:3px solid var(--c);padding:3px 6px;border-radius:6px;text-align:left}
  .z-dest .tram .dest{display:block}

  /* Piéton */
  .me-icon{background:none;border:0}
  .me{position:relative;width:22px;height:22px;border-radius:50%;background:var(--me);border:3.5px solid #fff;box-shadow:0 2px 6px rgba(15,23,42,.4)}
  .me::after{content:"";position:absolute;inset:-10px;border-radius:50%;border:2px solid var(--me);opacity:0;animation:ping 2.4s ease-out infinite}
  .me.manual{background:#0f172a}.me.manual::after{border-color:#0f172a}
  .me.sim{background:#7c3aed}.me.sim::after{border-color:#7c3aed}
  @keyframes ping{0%{transform:scale(.5);opacity:.7}100%{transform:scale(1.6);opacity:0}}

  /* ---------- Barre supérieure ---------- */
  #top{position:fixed;top:0;left:0;right:0;z-index:1000;pointer-events:none;padding:calc(var(--safe-t) + 10px) calc(var(--safe-r) + 12px) 0 calc(var(--safe-l) + 12px)}
  .topcol{pointer-events:none;max-width:560px;margin:0 auto;position:relative}
  .searchbox,.results,.banner,.brand,.chip,.gps{pointer-events:auto}
  @media (min-width:768px){ .topcol{margin:0;width:400px} #top{padding-left:calc(var(--safe-l) + 16px)} }
  .brand{display:none;align-items:center;gap:8px;margin:2px 0 10px;font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:19px;letter-spacing:-.01em}
  .brand small{font-family:'Figtree',sans-serif;font-weight:600;font-size:13px;color:var(--muted);letter-spacing:0}
  @media (min-width:768px){ .brand{display:flex} }
  .searchbox{display:flex;align-items:center;gap:6px;height:50px;padding:0 6px 0 10px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 1px 2px rgba(15,23,42,.06),0 10px 28px -12px rgba(15,23,42,.28)}
  .searchbox input{flex:1;min-width:0;height:100%;border:0;outline:0;background:transparent;font-size:16px;font-weight:500;color:var(--ink)}
  .searchbox input::placeholder{color:var(--faint)}
  .searchbox input::-webkit-search-cancel-button{display:none}
  .icon-btn{width:38px;height:38px;display:grid;place-items:center;border-radius:11px;color:var(--muted)}
  .icon-btn:hover{background:var(--wash);color:var(--ink)}
  .logo{width:30px;height:30px;display:grid;place-items:center;flex:none}

  .results{position:absolute;left:0;right:0;top:56px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 18px 40px -14px rgba(15,23,42,.35);overflow:hidden;z-index:5;max-height:52vh;overflow-y:auto}
  @media (min-width:768px){ .results{top:92px} }
  .res{display:flex;align-items:center;gap:10px;width:100%;padding:11px 14px;text-align:left;border-bottom:1px solid var(--line)}
  .res:last-child{border-bottom:0}
  .res.active,.res:hover{background:var(--wash)}
  .res-name{font-weight:700;font-size:15px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .res-name mark{background:none;color:inherit;text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
  .res-meta{font-size:12.5px;color:var(--muted);white-space:nowrap}
  .res-empty{padding:14px;color:var(--muted);font-size:14px}

  .row2{display:flex;align-items:center;gap:8px;margin-top:8px}
  .chips{display:flex;gap:6px}
  .chip{width:40px;height:38px;border-radius:12px;font-weight:800;font-size:16px;background:var(--c);color:#fff;border:2px solid var(--c);box-shadow:0 6px 16px -10px rgba(15,23,42,.6);transition:background .15s,color .15s,opacity .15s}
  .chip[aria-pressed="false"]{background:#fff;color:var(--c);opacity:.6}
  .gps{margin-left:auto;display:inline-flex;align-items:center;gap:7px;height:38px;padding:0 13px;border-radius:999px;background:#fff;border:1px solid var(--line);font-size:13px;font-weight:700;white-space:nowrap;box-shadow:0 6px 16px -10px rgba(15,23,42,.5);max-width:52%;overflow:hidden}
  .gps .txt{overflow:hidden;text-overflow:ellipsis}
  .gps .dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--faint)}
  .gps[data-state="search"] .dot{background:var(--hurry);animation:blink 1.1s ease-in-out infinite}
  .gps[data-state="ok"] .dot{background:var(--go)}
  .gps[data-state="manual"] .dot{background:var(--ink)}
  .gps[data-state="sim"] .dot{background:#7c3aed}
  .gps[data-state="error"] .dot,.gps[data-state="denied"] .dot{background:var(--late)}
  .gps[data-state="error"],.gps[data-state="denied"]{color:var(--late-ink)}
  @keyframes blink{50%{opacity:.25}}

  .banner{position:relative;margin-top:8px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--hurry);border-radius:14px;padding:12px 12px 12px 14px;box-shadow:0 12px 30px -14px rgba(15,23,42,.35);font-size:14px}
  .banner p{margin:0 28px 10px 0;line-height:1.4}
  .banner .acts{display:flex;flex-wrap:wrap;gap:6px}
  .banner .close{position:absolute;right:6px;top:6px}
  .btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 13px;border-radius:10px;font-weight:700;font-size:13.5px;background:var(--ink);color:#fff}
  .btn.ghost{background:var(--wash);color:var(--ink)}

  /* ---------- Boutons flottants ---------- */
  #fabs{position:fixed;right:calc(12px + var(--safe-r));bottom:calc(var(--sheet-offset) + 30px);z-index:900;display:flex;flex-direction:column;gap:8px;transition:bottom .38s cubic-bezier(.2,.8,.2,1)}
  @media (min-width:768px){ #fabs{bottom:130px} }
  .fab{width:46px;height:46px;border-radius:14px;background:#fff;border:1px solid var(--line);display:grid;place-items:center;color:var(--ink);box-shadow:0 10px 24px -12px rgba(15,23,42,.45)}
  .fab:hover{background:var(--wash)}
  .fab.on{color:var(--me)}

  .toast{position:fixed;left:50%;top:calc(var(--safe-t) + 118px);transform:translate(-50%,-8px);background:var(--ink);color:#fff;font-size:13.5px;font-weight:600;padding:9px 14px;border-radius:12px;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;z-index:1200;max-width:calc(100vw - 32px);text-align:center}
  .toast.show{opacity:1;transform:translate(-50%,0)}
  @media (min-width:768px){ .toast{left:calc(16px + 200px)} }

  /* ---------- Bottom sheet ---------- */
  #sheet{position:fixed;left:0;right:0;bottom:0;z-index:1100;background:#ffffff;border-radius:24px 24px 0 0;box-shadow:0 -1px 0 var(--line),0 -16px 44px -16px rgba(15,23,42,.32);display:flex;flex-direction:column;will-change:transform;touch-action:none;transform:translate3d(0,100%,0)}
  #sheet.anim{transition:transform .38s cubic-bezier(.2,.8,.2,1)}
  @media (min-width:768px){ #sheet{left:calc(16px + var(--safe-l));right:auto;width:400px} }
  #sheetHead{flex:none;padding:0 16px 10px;cursor:grab;user-select:none}
  #sheetHead:active{cursor:grabbing}
  .handle{display:block;width:100%;height:22px;padding:0;background:none;border:0}
  .handle span{display:block;width:40px;height:5px;border-radius:3px;background:#d4d8e0;margin:9px auto 0}
  #sheetBody{flex:1;min-height:0;overflow:hidden;padding:4px 16px calc(20px + var(--safe-b));overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
  #sheet.full #sheetBody{overflow-y:auto;touch-action:pan-y}

  .sum{display:flex;align-items:center;gap:12px;min-height:52px}
  .sum-main{flex:1;min-width:0}
  .sum-title{font-weight:800;font-size:16.5px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sum-sub{font-size:13.5px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sum-time{flex:none;min-width:64px;height:52px;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--wash);color:var(--ink);padding:0 10px}
  .sum-time strong{font-family:'Bricolage Grotesque',sans-serif;font-size:24px;line-height:1;font-weight:800}
  .sum-time strong.now{font-size:16px}
  .sum-time small{font-size:11.5px;font-weight:700;opacity:.8;margin-top:2px}
  .sum-time.v-green{background:var(--go-bg);color:var(--go-ink)}
  .sum-time.v-orange{background:var(--hurry-bg);color:var(--hurry-ink)}
  .sum-time.v-red{background:var(--late-bg);color:var(--late-ink)}
  .sum-ico{width:44px;height:44px;border-radius:14px;background:var(--wash);display:grid;place-items:center;flex:none;color:var(--muted)}

  .badge{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--c);color:#fff;font-weight:800;font-size:15px;flex:none}
  .badge.sm{width:22px;height:22px;border-radius:7px;font-size:12px}
  .badge.lg{width:44px;height:44px;border-radius:13px;font-size:22px;font-family:'Bricolage Grotesque',sans-serif}
  .dots{display:inline-flex;gap:3px;vertical-align:middle}
  .dots i{width:9px;height:9px;border-radius:50%;background:var(--c);display:block}

  /* Verdict (élément fort) */
  .hero{border:1px solid var(--line);border-radius:20px;padding:14px 14px 12px;margin-bottom:14px;background:#fff}
  .hero-top{display:flex;align-items:center;gap:12px}
  .hero-top>div{min-width:0}
  .hero-dir{font-weight:800;font-size:16px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .hero-st{font-size:13px;color:var(--muted);margin-top:2px}
  .hero-count{margin-left:auto;text-align:right;flex:none}
  .hero-count b{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:30px;line-height:1;font-weight:800;letter-spacing:-.02em}
  .hero-count small{font-size:11.5px;color:var(--muted);font-weight:600}
  .verdict{display:flex;align-items:center;gap:12px;margin-top:12px;border-radius:14px;padding:12px 14px;background:var(--wash)}
  .verdict .lamp{width:16px;height:16px;border-radius:50%;flex:none;background:var(--faint);box-shadow:0 0 0 4px rgba(255,255,255,.7)}
  .verdict strong{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:19px;line-height:1.15;font-weight:800}
  .verdict span{display:block;font-size:13.5px;margin-top:2px;opacity:.9}
  .v-green.verdict{background:var(--go-bg);color:var(--go-ink)} .v-green .lamp{background:var(--go)}
  .v-orange.verdict{background:var(--hurry-bg);color:var(--hurry-ink)} .v-orange .lamp{background:var(--hurry)}
  .v-red.verdict{background:var(--late-bg);color:var(--late-ink)} .v-red .lamp{background:var(--late)}
  .track{position:relative;height:58px;margin:14px 4px 2px}
  .track .bar{position:absolute;left:0;right:0;top:25px;height:6px;border-radius:3px;background:#eceff4}
  .track .walk{position:absolute;left:0;top:25px;height:6px;border-radius:3px;background:var(--ink);opacity:.18}
  .track .quai{position:absolute;top:22px;height:12px;border-radius:6px;background:var(--c);opacity:.35}
  .track .mk{position:absolute;top:18px;width:3px;height:20px;border-radius:2px;background:var(--ink);transform:translateX(-1.5px)}
  .track .mk.tr{background:var(--c)}
  .track .lbl{position:absolute;font-size:11.5px;font-weight:700;white-space:nowrap;transform:translateX(-50%)}
  .track .lbl.up{top:0}
  .track .lbl.down{top:41px}
  .track .lbl.start{transform:none;left:0}
  .hint{font-size:13.5px;color:var(--muted);margin:8px 0 0;line-height:1.4}
  .hint b{color:var(--ink)}
  .empty{padding:18px 4px 8px;color:var(--muted);font-size:14.5px;line-height:1.45}
  .empty h3{color:var(--ink);font-weight:800;font-size:17px;margin:0 0 4px}
  .empty .acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}

  .sec-title{display:flex;align-items:baseline;justify-content:space-between;gap:8px;font-weight:800;font-size:15px;margin:4px 0 8px}
  .sec-title button{font-size:13px;font-weight:700;color:var(--me);background:none;border:0;padding:0}
  .seg{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;background:var(--wash);padding:4px;border-radius:14px;margin-bottom:16px}
  .seg button{border-radius:11px;padding:7px 2px;text-align:center;line-height:1.15;background:transparent;border:0;color:var(--muted)}
  .seg button b{display:block;font-size:13px;font-weight:800;color:var(--ink)}
  .seg button small{font-size:11px;font-weight:600}
  .seg button[aria-checked="true"]{background:#fff;box-shadow:0 1px 2px rgba(15,23,42,.12),0 4px 10px -6px rgba(15,23,42,.3);color:var(--ink)}

  .deps{display:flex;flex-direction:column;gap:6px;margin-bottom:18px}
  .dep{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 10px;border-radius:14px;border:1px solid var(--line);background:#fff}
  .dep.pinned{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
  .dep-dir{flex:1;min-width:0;font-weight:700;font-size:14px;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dep-dir small{display:block;font-weight:600;font-size:11.5px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dep-times{display:flex;gap:4px;flex:none}
  .t{min-width:48px;text-align:center;font-size:12.5px;font-weight:800;padding:5px 6px;border-radius:8px;background:var(--wash);color:var(--ink)}
  .t.v-green{background:var(--go-bg);color:var(--go-ink)}
  .t.v-orange{background:var(--hurry-bg);color:var(--hurry-ink)}
  .t.v-red{background:var(--late-bg);color:var(--late-ink);text-decoration:line-through;text-decoration-thickness:1.5px}

  .near-list{display:flex;flex-direction:column;margin-bottom:14px}
  .near{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 2px;border-bottom:1px solid var(--line);background:none}
  .near:last-child{border-bottom:0}
  .near.focus .near-name::after{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--me);margin-left:7px;vertical-align:middle}
  .near-main{flex:1;min-width:0}
  .near-name{font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .near-meta{font-size:12.5px;color:var(--muted);margin-top:3px;display:flex;align-items:center;gap:7px}
  .near-next{display:flex;align-items:center;gap:6px;font-weight:800;font-size:13.5px;flex:none}
  .near-next .vd{width:9px;height:9px;border-radius:50%;background:var(--faint)}
  .vd.v-green{background:var(--go)} .vd.v-orange{background:var(--hurry)} .vd.v-red{background:var(--late)}

  .legend{border-top:1px solid var(--line);padding-top:12px;font-size:12.5px;color:var(--muted);line-height:1.5}
  .legend p{margin:0 0 6px}
  .legend .lg{display:flex;flex-direction:column;gap:4px;margin:6px 0 10px}
  .legend .lg span{display:flex;align-items:center;gap:8px}
  .legend .wordmark{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;color:var(--ink);font-size:14px}

  /* Popups */
  .pop{padding:14px 14px 12px}
  .pop-head{display:flex;align-items:center;gap:10px;margin-right:22px}
  .pop-title{font-weight:800;font-size:15.5px;line-height:1.2}
  .pop-sub{font-size:12.5px;color:var(--muted);margin-top:2px}
  .pop-lines{display:flex;gap:4px}
  .pop-walk{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin:10px 0 4px}
  .pop-walk div{background:var(--wash);border-radius:8px;padding:5px 2px;text-align:center;font-size:10.5px;color:var(--muted);font-weight:600;line-height:1.2}
  .pop-walk div b{display:block;font-size:13px;color:var(--ink)}
  .pop-walk div.cur{background:var(--ink);color:#cbd5e1}
  .pop-walk div.cur b{color:#fff}
  .pop-dist{font-size:12.5px;color:var(--muted);margin-top:8px}
  .pop-deps{margin-top:8px;display:flex;flex-direction:column;gap:5px}
  .pop-dep{display:flex;align-items:center;gap:8px}
  .pop-dep .dep-dir{font-size:13px}
  .pop-dep .t{min-width:42px;font-size:11.5px;padding:4px 4px}
  .pop dl{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;margin:10px 0 0;font-size:13px}
  .pop dt{color:var(--muted)}
  .pop dd{margin:0;font-weight:700;text-align:right}
  .prog{height:6px;border-radius:3px;background:var(--wash);margin-top:10px;overflow:hidden}
  .prog i{display:block;height:100%;background:var(--c);border-radius:3px}
  .nexts{margin:10px 0 0;padding:0;list-style:none;font-size:12.5px}
  .nexts li{display:flex;justify-content:space-between;gap:8px;padding:3px 0;border-bottom:1px dashed var(--line)}
  .nexts li:last-child{border-bottom:0}
  .nexts li span:last-child{font-weight:700}
  .note{font-size:11px;color:var(--faint);margin-top:8px}

  @media (prefers-reduced-motion:reduce){
    .me::after,.gps .dot{animation:none!important}
    #sheet.anim,#fabs,.leaflet-bottom{transition:none!important}
  }

  /* ---------- Ajouts v2 : temps réel ---------- */
  .live{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border-radius:10px;font-size:12.5px;font-weight:800;color:var(--muted);background:var(--wash);white-space:nowrap;flex:none}
  .live .dot{width:8px;height:8px;border-radius:50%;background:var(--faint);flex:none}
  .live[data-state="ok"] .dot{background:var(--go);box-shadow:0 0 0 3px rgba(21,128,61,.18)}
  .live[data-state="ok"]{color:var(--go-ink)}
  .live[data-state="stale"] .dot{background:var(--hurry)}
  .live[data-state="stale"]{color:var(--hurry-ink);background:var(--hurry-bg)}
  .live[data-state="loading"] .dot{background:var(--hurry);animation:blink 1.1s ease-in-out infinite}
  .live[data-state="error"] .dot{background:var(--late)}
  .live[data-state="error"]{color:var(--late-ink);background:var(--late-bg)}

  .rt{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;font-weight:700;color:var(--go-ink)}
  .rt::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--go)}
  .rt.theo{color:var(--faint)}
  .rt.theo::before{background:var(--faint)}
  .delay{font-size:11.5px;font-weight:800;padding:1px 6px;border-radius:6px;background:var(--hurry-bg);color:var(--hurry-ink)}
  .delay.ok{background:var(--go-bg);color:var(--go-ink)}

  /* Attribution compacte (sources toujours accessibles) */
  .leaflet-control-attribution{display:none!important}
  .attr{display:flex;align-items:center;gap:6px;flex-direction:row-reverse;margin:0 10px 10px 0!important}
  .attr button{width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,.92);border:1px solid var(--line);font:italic 700 13px/22px Georgia,serif;color:var(--muted);box-shadow:0 2px 6px -2px rgba(15,23,42,.3)}
  .attr .attr-txt{display:none;background:rgba(255,255,255,.95);border:1px solid var(--line);border-radius:8px;padding:4px 8px;font-size:11px;color:var(--muted);white-space:nowrap}
  .attr.open .attr-txt{display:block}
  .attr a{color:var(--ink)}

  /* Dialogue relais */
  dialog.cfg{border:0;border-radius:20px;padding:0;width:min(560px,calc(100vw - 24px));max-height:calc(100dvh - 40px);box-shadow:0 30px 80px -20px rgba(15,23,42,.5);color:var(--ink)}
  dialog.cfg::backdrop{background:rgba(15,23,42,.35)}
  .cfg-in{padding:20px;overflow:auto;max-height:calc(100dvh - 40px)}
  .cfg h2{font-family:'Bricolage Grotesque',sans-serif;font-weight:800;font-size:21px;margin:0 30px 6px 0}
  .cfg p{font-size:14px;line-height:1.5;color:var(--muted);margin:0 0 10px}
  .cfg label{display:block;font-weight:700;font-size:13.5px;margin:14px 0 6px}
  .cfg input{width:100%;height:44px;border:1px solid var(--line);border-radius:12px;padding:0 12px;font-size:14px;font-family:ui-monospace,Menlo,Consolas,monospace}
  .cfg pre{background:var(--wash);border-radius:12px;padding:12px;font-size:12px;line-height:1.45;overflow:auto;white-space:pre;margin:6px 0 0}
  .cfg .acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
  .cfg .x{position:absolute;right:10px;top:10px}
  .cfg .status{font-size:13px;font-weight:700;margin-top:10px}

  /* =================== v3 : mobile-first, panneaux distincts =================== */
  .scroller{overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-bottom:2px}
  .scroller::-webkit-scrollbar{display:none}
  .row2{pointer-events:none}
  .row2 .gps{margin-left:0;flex:none;max-width:none}
  .chips{flex:none}
  .chip{width:38px;height:36px;font-size:15px}
  .searchbox input{font-weight:600}
  .searchbox input::placeholder{font-weight:600;color:var(--muted)}
  .res .kind{font-size:11.5px;font-weight:700;color:var(--muted)}
  .res-sec{padding:8px 14px 4px;font-size:12px;font-weight:800;color:var(--muted);background:#fafbfc;border-bottom:1px solid var(--line)}

  #sheetBody{background:#f3f4f7;padding:10px 10px calc(20px + var(--safe-b))}
  #sheet{background:#f3f4f7}
  #sheetHead{background:#fff;border-radius:24px 24px 0 0;border-bottom:1px solid var(--line)}
  .panel{background:#fff;border-radius:18px;padding:14px;margin-bottom:10px;border:1px solid #e9ebf0}
  .panel:empty{display:none}
  .panel-compact{padding:10px 12px}
  .panel-compact .seg{margin-bottom:0}
  .panel-h{display:flex;align-items:center;gap:8px;margin:0 0 10px}
  .panel-h h2{font-weight:800;font-size:15.5px;margin:0;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .panel-h .ico{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;background:var(--wash);color:var(--muted);flex:none}
  .panel-meta{font-size:12px;font-weight:700;color:var(--muted);white-space:nowrap}
  .count{min-width:22px;height:22px;border-radius:11px;padding:0 7px;display:inline-grid;place-items:center;font-size:12px;font-weight:800;background:var(--wash);color:var(--muted)}
  .count.hot{background:var(--late-bg);color:var(--late-ink)}

  /* Verdict */
  .panel-verdict{padding:0;overflow:hidden;border-width:2px}
  .panel-verdict.v-green{border-color:#86efac}
  .panel-verdict.v-orange{border-color:#fcd34d}
  .panel-verdict.v-red{border-color:#fca5a5}
  .pv-band{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--wash)}
  .v-green .pv-band{background:var(--go-bg);color:var(--go-ink)}
  .v-orange .pv-band{background:var(--hurry-bg);color:var(--hurry-ink)}
  .v-red .pv-band{background:var(--late-bg);color:var(--late-ink)}
  .pv-band .lamp{width:18px;height:18px;border-radius:50%;flex:none;background:var(--faint);box-shadow:0 0 0 4px rgba(255,255,255,.7)}
  .v-green .lamp{background:var(--go)} .v-orange .lamp{background:var(--hurry)} .v-red .lamp{background:var(--late)}
  .pv-band strong{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:20px;line-height:1.1;font-weight:800}
  .pv-band span{display:block;font-size:13.5px;margin-top:2px}
  .pv-band .grow{flex:1;min-width:0}
  .pv-leave{flex:none;text-align:right;font-size:12px;font-weight:700;line-height:1.2}
  .pv-leave b{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:17px}
  .pv-main{display:flex;gap:14px;padding:14px 14px 4px;align-items:flex-start}
  .pv-cd{flex:none;min-width:96px}
  .pv-cd .cd{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:40px;line-height:.95;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
  .pv-cd small{display:block;font-size:12px;color:var(--muted);font-weight:600;margin-top:4px;line-height:1.3}
  .pv-info{flex:1;min-width:0}
  .pv-line{display:flex;align-items:center;gap:10px}
  .pv-dir{font-weight:800;font-size:15.5px;line-height:1.2}
  .pv-meta{display:flex;gap:8px;align-items:center;margin-top:3px;flex-wrap:wrap}
  .pv-rows{margin:10px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px;font-size:13.5px;line-height:1.35}
  .pv-rows li{display:flex;gap:8px;align-items:flex-start}
  .pv-rows li .k{flex:none;width:18px;height:18px;color:var(--muted);margin-top:1px}
  .pv-rows b{font-weight:800}
  .pv-pos{font-size:13px;color:var(--muted);margin:2px 14px 12px;line-height:1.4}
  .pv-pos b{color:var(--ink)}
  .pv-alert{display:flex;gap:8px;align-items:flex-start;margin:0 14px 12px;padding:9px 11px;border-radius:12px;background:var(--hurry-bg);color:var(--hurry-ink);font-size:13px;font-weight:600;text-align:left;width:calc(100% - 28px)}
  .pv-next{margin:0 14px 12px;padding:10px 12px;border-radius:12px;background:var(--wash);font-size:13.5px;line-height:1.4}
  .pv-empty{padding:16px 14px;font-size:14.5px;color:var(--muted);line-height:1.45}
  .pv-empty h3{color:var(--ink);font-weight:800;font-size:17px;margin:0 0 4px}
  .pv-empty .acts{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
  .recents{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
  .recents button{height:34px;padding:0 12px;border-radius:17px;background:var(--wash);font-weight:700;font-size:13px}

  /* Frise temps réel : tram, station, vous */
  .tl{position:relative;margin:6px 14px 10px;padding:4px 0 0}
  .tl-row{position:relative;height:40px}
  .tl-row + .tl-row{margin-top:6px}
  .tl-lab{position:absolute;left:0;top:-2px;font-size:11px;font-weight:800;color:var(--muted)}
  .tl-track{position:absolute;left:0;right:0;top:20px;height:4px;border-radius:2px;background:#e8ebf0}
  .tl-fill{position:absolute;left:0;top:20px;height:4px;border-radius:2px}
  .tl-quai{position:absolute;top:16px;height:12px;border-radius:6px;opacity:.3}
  .tl-dot{position:absolute;top:18px;width:8px;height:8px;border-radius:50%;background:#fff;border:2px solid var(--c);transform:translateX(-50%)}
  .tl-st{position:absolute;top:13px;width:18px;height:18px;border-radius:50%;background:#fff;border:4px solid var(--ink);transform:translateX(-50%);z-index:2}
  .tl-veh{position:absolute;top:10px;width:24px;height:24px;border-radius:50%;background:var(--c);color:#fff;font:800 12px/24px 'Figtree',sans-serif;text-align:center;transform:translateX(-50%);box-shadow:0 0 0 2px #fff,0 2px 6px rgba(15,23,42,.3);z-index:3}
  .tl-me{position:absolute;top:10px;width:24px;height:24px;border-radius:50%;background:var(--me);border:3px solid #fff;transform:translateX(-50%);box-shadow:0 2px 6px rgba(15,23,42,.3);z-index:3}
  .tl-flag{position:absolute;top:14px;width:3px;height:16px;border-radius:2px;background:var(--ink);transform:translateX(-50%)}
  .tl-txt{position:absolute;top:30px;font-size:11px;font-weight:700;white-space:nowrap;transform:translateX(-50%);color:var(--ink)}
  .tl-txt.l{transform:none}
  .tl-txt.r{transform:translateX(-100%)}
  .tl-now{position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--ink);opacity:.15}
  .tl-arr{position:absolute;top:0;bottom:-2px;width:0;border-left:2px dashed var(--c);opacity:.55}

  /* Options */
  .opt{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:10px 4px;border-bottom:1px solid var(--line);background:none}
  .opt:last-child{border-bottom:0}
  .opt .vd{width:12px;height:12px;border-radius:50%;flex:none}
  .opt-main{flex:1;min-width:0}
  .opt-t{font-weight:800;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .opt-s{font-size:12.5px;color:var(--muted);margin-top:2px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
  .opt-r{flex:none;text-align:right}
  .opt-r .cd{display:block;font-weight:800;font-size:15px;font-variant-numeric:tabular-nums}
  .opt-r small{font-size:11.5px;color:var(--muted);font-weight:600}
  .opt.cur{background:var(--wash);border-radius:12px;padding-left:8px;padding-right:8px}

  /* Passages */
  .dep.todest{border-color:var(--ink)}
  .dep .tag{display:inline-block;margin-left:6px;font-size:10.5px;font-weight:800;padding:1px 6px;border-radius:6px;background:var(--ink);color:#fff;vertical-align:middle}
  .t .cd{font-variant-numeric:tabular-nums}

  /* Infos trafic */
  .msg{padding:10px 0;border-bottom:1px solid var(--line)}
  .msg:last-child{border-bottom:0}
  .msg-h{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:4px}
  .msg-t{font-weight:800;font-size:14px;line-height:1.3}
  .msg-b{font-size:13.5px;color:var(--muted);line-height:1.45;margin-top:3px;white-space:pre-line}
  .msg-v{font-size:11.5px;color:var(--faint);margin-top:4px;font-weight:600}
  .msg.mine .msg-t::before{content:"Vous concerne";display:inline-block;margin-right:6px;font-size:10.5px;font-weight:800;padding:1px 6px;border-radius:6px;background:var(--late-bg);color:var(--late-ink);vertical-align:middle}
  .muted{color:var(--muted);font-size:13.5px;line-height:1.45}

  /* Stations sur la carte : anneau aux couleurs des lignes */
  .stn-icon{background:none;border:0}
  .stn{width:var(--s);height:var(--s);border-radius:50%;background:var(--ring);padding:var(--p,3.5px);box-shadow:0 1px 3px rgba(15,23,42,.35);box-sizing:border-box}
  .stn i{display:block;width:100%;height:100%;border-radius:50%;background:#fff}
  .stn.board i{background:#0f172a;box-shadow:inset 0 0 0 3px #fff}
  .stn.dest i{background:#fff;box-shadow:inset 0 0 0 4px #0f172a}
  .stn.board,.stn.dest{box-shadow:0 0 0 3px #fff,0 3px 10px rgba(15,23,42,.45)}
  .leaflet-tooltip.st-label.multi{font-size:12px}
  .z-labels .leaflet-tooltip.st-label.multi{display:block}
  .leaflet-tooltip.st-label.role{display:block!important;background:#0f172a;color:#fff;font-size:12.5px;padding:4px 8px}

  .updatebar{position:fixed;left:50%;transform:translateX(-50%);top:calc(var(--safe-t) + 118px);z-index:1250;display:flex;align-items:center;gap:10px;background:#0f172a;color:#fff;border-radius:14px;padding:8px 8px 8px 14px;font-size:13.5px;font-weight:600;box-shadow:0 12px 30px -10px rgba(15,23,42,.5);max-width:calc(100vw - 24px)}
  .updatebar button{background:#fff;color:#0f172a;font-weight:800;border-radius:10px;height:34px;padding:0 12px}
  .acts-line{display:flex;gap:8px;flex-wrap:wrap}
  .legend .vd{display:inline-block;width:10px;height:10px;border-radius:50%}
  .legend{background:#fff;border-radius:18px;padding:14px;border:1px solid #e9ebf0}
  .linkbtn{background:none;border:0;padding:0;color:var(--me);font-weight:800;font-size:12px}

  /* =================== v4 : un seul écran, carte visible =================== */
  #topbar{position:fixed;top:calc(var(--safe-t) + 10px);left:calc(var(--safe-l) + 12px);right:calc(var(--safe-r) + 12px);z-index:1000;display:flex;gap:6px;align-items:center;pointer-events:none}
  #topbar > *{pointer-events:auto}
  .brandpill{width:40px;height:40px;border-radius:13px;background:#fff;display:grid;place-items:center;box-shadow:0 6px 16px -8px rgba(15,23,42,.45);border:1px solid var(--line)}
  #topbar .live,#topbar .gps{height:40px;border-radius:13px;background:#fff;border:1px solid var(--line);box-shadow:0 6px 16px -8px rgba(15,23,42,.45);margin:0;max-width:none;padding:0 12px;font-size:13px}
  #topbar .fab{margin-left:auto;width:44px;height:44px}
  .banner{position:fixed;top:calc(var(--safe-t) + 60px);left:12px;right:12px;z-index:1000;max-width:520px;margin:0}
  .toast{top:calc(var(--safe-t) + 62px)}
  .updatebar{top:calc(var(--safe-t) + 62px)}
  .leaflet-bottom{bottom:calc(var(--card-h, 0px) + 6px)}

  #card{position:fixed;left:0;right:0;bottom:0;z-index:1100;background:#fff;border-radius:22px 22px 0 0;box-shadow:0 -12px 34px -14px rgba(15,23,42,.35);
    padding:12px 12px calc(10px + var(--safe-b));display:flex;flex-direction:column;gap:9px;overflow:hidden;max-height:64dvh}
  @media (min-width:768px){ #card{left:calc(16px + var(--safe-l));right:auto;width:400px;bottom:16px;border-radius:22px;max-height:calc(100dvh - 90px)} }
  #card > div:empty{display:none}

  .st-row{display:flex;align-items:center;gap:10px}
  .st-row .stn{flex:none}
  .st-main{flex:1;min-width:0}
  .st-main b{display:block;font-size:18px;font-weight:800;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .st-main small{display:block;font-size:12.5px;color:var(--muted);font-weight:600;margin-top:1px}
  .chipbtn{flex:none;height:32px;padding:0 10px;border-radius:10px;background:var(--wash);font-size:12px;font-weight:800}
  .icon-btn.more{position:relative;flex:none;width:42px;height:42px;background:var(--wash);color:var(--ink)}
  .pip{position:absolute;top:-3px;right:-3px;min-width:18px;height:18px;border-radius:9px;background:var(--late);color:#fff;font-size:11px;font-weight:800;display:grid;place-items:center;padding:0 5px}

  .dirs{display:flex;gap:6px;overflow-x:auto;margin:0 -12px;padding:1px 12px 2px;scroll-padding:12px}
  .dir{flex:none;display:flex;align-items:center;gap:7px;height:42px;padding:0 11px 0 7px;border-radius:13px;border:1.5px solid var(--line);background:#fff;font-weight:700;font-size:13.5px;white-space:nowrap;color:var(--ink)}
  .dir .nm{max-width:132px;overflow:hidden;text-overflow:ellipsis}
  .dir .cd{font-weight:800;font-variant-numeric:tabular-nums}
  .dir .vd{width:8px;height:8px;border-radius:50%;background:var(--faint);flex:none}
  .dir[aria-checked="true"]{border-color:var(--ink);background:var(--ink);color:#fff}
  .dir[aria-checked="true"] .badge{box-shadow:0 0 0 2px #fff}

  .vb{border-radius:18px;padding:12px 14px 10px;background:var(--wash);color:var(--ink)}
  .vb.v-green{background:var(--go-bg);color:var(--go-ink)}
  .vb.v-orange{background:var(--hurry-bg);color:var(--hurry-ink)}
  .vb.v-red{background:var(--late-bg);color:var(--late-ink)}
  .vb-top{display:flex;align-items:center;gap:12px}
  .vb-msg{flex:1;min-width:0}
  .vb-msg strong{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:23px;line-height:1.05;font-weight:800}
  .vb-msg span{display:block;font-size:14px;font-weight:600;margin-top:3px;line-height:1.3}
  .vb-cd{flex:none;text-align:right}
  .vb-cd .cd{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:42px;line-height:.9;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
  .vb-cd small{display:block;font-size:11.5px;font-weight:700;opacity:.75;margin-top:3px}
  .vb .acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}

  .strip{position:relative;height:46px;margin:10px 4px 2px}
  .sp-trk{position:absolute;left:0;right:0;top:21px;height:4px;border-radius:2px;background:rgba(15,23,42,.13)}
  .sp-now{position:absolute;left:0;top:14px;width:4px;height:18px;border-radius:2px;background:currentColor;opacity:.5}
  .sp-quai{position:absolute;top:17px;height:12px;border-radius:6px;background:var(--c);opacity:.45}
  .sp-dot{position:absolute;top:19px;width:8px;height:8px;border-radius:50%;background:#fff;border:2px solid var(--c);transform:translateX(-50%)}
  .sp-pin{position:absolute;top:13px;width:20px;height:20px;border-radius:50%;background:var(--c);border:3px solid #fff;box-shadow:0 1px 4px rgba(15,23,42,.35);transform:translateX(-50%);z-index:2}
  .sp-me{position:absolute;top:14px;width:18px;height:18px;border-radius:50%;background:var(--me);border:3px solid #fff;box-shadow:0 1px 4px rgba(15,23,42,.35);transform:translateX(-50%);z-index:3}
  .sp-lab{position:absolute;font-size:11.5px;font-weight:800;white-space:nowrap;transform:translateX(-50%);font-variant-numeric:tabular-nums}
  .sp-lab.up{top:-2px}
  .sp-lab.down{top:34px;color:var(--me)}
  .vb-foot{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;margin-top:4px;min-width:0}
  .vb-foot .grow{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .alertchip{flex:none;display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 8px;border-radius:8px;background:#fff;color:var(--late-ink);font-size:12px;font-weight:800}

  .seg-sm{margin:0;padding:3px;border-radius:13px}
  .seg-sm button{padding:5px 2px;border-radius:10px}
  .seg-sm button b{font-size:12.5px}
  .seg-sm button small{font-size:10.5px}

  dialog.dd{border:0;padding:0;margin:auto auto 0;width:100%;max-width:560px;max-height:86dvh;border-radius:22px 22px 0 0;color:var(--ink);box-shadow:0 -20px 60px -20px rgba(15,23,42,.5)}
  dialog.dd::backdrop{background:rgba(15,23,42,.35)}
  @media (min-width:768px){ dialog.dd{margin:auto;border-radius:22px} }
  .dd-head{display:flex;align-items:center;justify-content:space-between;padding:14px 14px 6px;font-size:17px}
  .dd-body{padding:0 14px calc(18px + var(--safe-b));overflow-y:auto;max-height:calc(86dvh - 56px)}
  .dd-body h3{font-size:14.5px;font-weight:800;margin:16px 0 8px}
  .dd-body h3:first-child{margin-top:4px}
  .chips.wrap{flex-wrap:wrap}
  .small{font-size:12px!important;margin-top:12px}
  .muted{color:var(--muted);font-size:13.5px;line-height:1.45}
  .msg.mine .msg-t::before{content:"Votre station";}

  /* =================== v5 : le panneau d'abord, la carte en second =================== */
  #app{position:fixed;inset:0;display:flex;flex-direction:column;background:#fff}
  #mapWrap{position:relative;flex:none;height:24dvh;min-height:140px;transition:height .3s ease}
  #map{position:absolute!important;inset:0}
  .leaflet-tile-pane{filter:grayscale(.85) brightness(1.06) contrast(.92)}
  .leaflet-bottom{bottom:22px}
  #topbar{position:absolute;top:calc(var(--safe-t) + 8px);left:10px;right:10px}
  .brandpill{width:34px;height:34px;border-radius:11px}
  #topbar .live,#topbar .gps{height:34px;border-radius:11px;padding:0 10px;font-size:12.5px}
  #topbar .fab{width:38px;height:38px;border-radius:12px}
  .maptoggle{position:absolute;right:10px;bottom:28px;z-index:900;display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;border-radius:11px;background:#fff;border:1px solid var(--line);font-size:12.5px;font-weight:800;box-shadow:0 6px 16px -8px rgba(15,23,42,.45)}
  body.map-big #mapWrap{height:62dvh}
  body.map-big #cDirs,body.map-big #cAllure{display:none}

  #card{position:relative;inset:auto;flex:1;min-height:0;margin-top:-18px;border-radius:22px 22px 0 0;max-height:none;box-shadow:0 -10px 26px -14px rgba(15,23,42,.3);
    padding:14px 14px calc(10px + var(--safe-b));gap:12px;overflow-y:auto;overscroll-behavior:contain;z-index:1000}
  #card > div{flex:none}
  @media (min-width:768px){
    #app{flex-direction:row-reverse}
    #mapWrap{flex:1;height:auto!important}
    #card{flex:none;width:420px;margin:0;border-radius:0;bottom:auto;left:auto;right:auto;box-shadow:1px 0 0 var(--line)}
    .maptoggle{display:none}
  }

  .st-main b{font-size:19px}
  .st-main small{font-size:12.5px}
  .chipinfo{flex:none;display:inline-flex;align-items:center;gap:4px;height:34px;padding:0 9px;border-radius:11px;background:var(--wash);color:var(--muted);font-weight:800;font-size:12.5px}
  .chipinfo.new{background:var(--hurry-bg);color:var(--hurry-ink)}

  .dirs-h{font-size:12px;font-weight:800;color:var(--muted);margin:0 2px 6px}
  .tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(145px,1fr));gap:8px}
  .tile{position:relative;display:flex;flex-direction:column;gap:5px;min-height:62px;padding:9px 10px 9px 13px;border-radius:14px;border:1.5px solid var(--line);background:#fff;text-align:left;color:var(--ink);overflow:hidden}
  .tile::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:var(--faint)}
  .tile.v-green::before{background:var(--go)} .tile.v-orange::before{background:var(--hurry)} .tile.v-red::before{background:var(--late)}
  .tile-top{display:flex;align-items:center;justify-content:space-between;gap:6px}
  .tile .cd{font-weight:800;font-size:15px;font-variant-numeric:tabular-nums}
  .tile.v-red .cd{color:var(--late-ink)}
  .tile-nm{font-weight:700;font-size:13.5px;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .tile[aria-checked="true"]{border-color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--ink);background:#f8fafc}
  .tile-more{align-items:center;justify-content:center;font-weight:800;font-size:13px;color:var(--muted)}
  .tile-more::before{display:none}

  .vb{padding:14px 16px 12px;border-radius:20px}
  .vb-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
  .vb-head strong{font-family:'Bricolage Grotesque',sans-serif;font-size:26px;line-height:1.05;font-weight:800;padding-top:4px}
  .vb-sub{font-size:14.5px;line-height:1.4;margin-top:4px}
  .vb-sub b{font-weight:800}
  .vb-sub .cd{font-variant-numeric:tabular-nums}
  .vb-cd{flex:none;text-align:right}
  .vb-cd .cd{display:block;font-family:'Bricolage Grotesque',sans-serif;font-size:44px;line-height:.9;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
  .vb-cd small{display:block;font-size:11.5px;font-weight:700;opacity:.75;margin-top:4px}

  /* Course tram / vous : épaisse et aérée */
  .race{position:relative;height:84px;margin:14px 6px 4px}
  .race-trk{position:absolute;left:0;right:0;top:36px;height:10px;border-radius:5px;background:rgba(255,255,255,.85);box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}
  .race-quai{position:absolute;top:36px;height:10px;border-radius:5px;background:var(--c);opacity:.5}
  .race-tram,.race-me{position:absolute;top:26px;width:30px;height:30px;border-radius:50%;transform:translateX(-50%);display:grid;place-items:center;border:3px solid #fff;box-shadow:0 2px 8px rgba(15,23,42,.3);z-index:2}
  .race-tram{background:var(--c);color:#fff;font:800 13px/1 'Figtree',sans-serif}
  .race-me{background:var(--me);color:#fff;z-index:3}
  .race-lab{position:absolute;font-size:12.5px;white-space:nowrap;transform:translateX(-50%);font-variant-numeric:tabular-nums;font-weight:600}
  .race-lab b{font-weight:800}
  .race-lab.up{top:0}
  .race-lab.down{top:62px;color:var(--me)}
  .race-lab.al{transform:translateX(-15px)}
  .race-lab.ar{transform:translateX(calc(-100% + 15px))}
  .vb-foot{flex-wrap:wrap;gap:6px 8px;font-size:13px;margin-top:2px}
  .impact{display:flex;align-items:flex-start;gap:8px;width:100%;margin-top:10px;padding:9px 11px;border-radius:12px;background:#fff;color:var(--late-ink);border:1.5px solid #fca5a5;text-align:left;font-size:13px;font-weight:700;line-height:1.35}
  .impact svg{flex:none;margin-top:1px}

  #cAllure{display:flex;flex-direction:column;gap:6px}
  .spd{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);font-weight:600;padding:0 2px}
  .spd i{width:8px;height:8px;border-radius:50%;background:var(--faint);flex:none}
  .spd.on{color:var(--go-ink)} .spd.on i{background:var(--go);box-shadow:0 0 0 3px rgba(21,128,61,.18)}
  .spd b{font-weight:800}

  /* =================== v5.0 : app iOS =================== */
  *,*::before,*::after{box-sizing:border-box}
  html,body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Helvetica Neue",system-ui,sans-serif;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;touch-action:manipulation}
  body{margin:0;background:#f2f2f7;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
  button{background:none;border:0;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
  button:disabled{opacity:.4;cursor:default}
  h1,h2,h3,p{margin:0}
  a{color:inherit;text-decoration:none}
  .sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .badge,.vb-cd .cd,.u-cd .cd,.stn{font-family:inherit}
  .tram{font-family:inherit}

  #app{position:fixed;inset:0;display:flex;flex-direction:column;background:#f2f2f7}
  /* Barre de navigation */
  #nav{flex:none;display:flex;align-items:center;gap:8px;padding:calc(var(--safe-t) + 6px) calc(var(--safe-r) + 12px) 8px calc(var(--safe-l) + 12px);background:rgba(242,242,247,.92);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);z-index:1200}
  body[data-view="map"] #nav{position:absolute;top:0;left:0;right:0;background:rgba(255,255,255,.82);box-shadow:0 1px 0 rgba(0,0,0,.06)}
  .nav-seg{flex:1;max-width:220px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;padding:2px;border-radius:9px;background:rgba(118,118,128,.14);gap:0}
  .nav-seg button{height:32px;border-radius:7px;font-size:14px;font-weight:600;color:var(--ink)}
  .nav-seg button[aria-selected="true"]{background:#fff;box-shadow:0 3px 8px rgba(0,0,0,.12),0 3px 1px rgba(0,0,0,.04)}
  #nav .live,#nav .gps{height:32px;padding:0 10px;border-radius:16px;font-size:12.5px;font-weight:700;background:#fff;border:0;box-shadow:0 1px 3px rgba(0,0,0,.08);margin:0;max-width:none;flex:none}
  .navbtn{position:relative;width:36px;height:36px;border-radius:18px;display:grid;place-items:center;color:var(--me);flex:none}
  .navbtn.has-new::after{content:"";position:absolute;top:5px;right:5px;width:9px;height:9px;border-radius:50%;background:var(--late);box-shadow:0 0 0 2px #f2f2f7}

  /* Vue Carte (plein écran) / vue Tram (plein écran) */
  #mapWrap{position:absolute;inset:0;display:none;height:auto;min-height:0}
  body[data-view="map"] .toast{bottom:calc(var(--safe-b) + 104px)}
  body[data-view="map"] #mapWrap{display:block}
  body[data-view="map"] #ui{display:none}
  #map{position:absolute!important;inset:0}
  .leaflet-tile-pane{filter:grayscale(.6) brightness(1.04) contrast(.95)}
  .leaflet-bottom{bottom:calc(var(--safe-b) + 104px)}
  .leaflet-top{top:calc(var(--safe-t) + 56px)}
  .map-tools{position:absolute;right:calc(var(--safe-r) + 12px);top:calc(var(--safe-t) + 62px);z-index:1000;display:flex;flex-direction:column;gap:8px;align-items:flex-end}
  .maptool{display:inline-flex;align-items:center;gap:6px;height:44px;padding:0 14px;border-radius:22px;background:#fff;font-size:14px;font-weight:700;box-shadow:0 4px 14px rgba(0,0,0,.15);color:var(--ink)}
  .maptool.icon{width:44px;padding:0;justify-content:center;color:var(--me)}
  .maptool[aria-pressed="true"]{background:var(--me);color:#fff}
  .mini{position:absolute;left:calc(var(--safe-l) + 12px);right:calc(var(--safe-r) + 12px);bottom:calc(var(--safe-b) + 12px);z-index:1000;display:flex;align-items:center;gap:12px;min-height:76px;padding:12px 14px;border-radius:20px;background:#fff;box-shadow:0 10px 30px rgba(0,0,0,.18);text-align:left;border-left:8px solid var(--faint)}
  .mini.v-green{border-left-color:var(--go)} .mini.v-orange{border-left-color:var(--hurry)} .mini.v-red{border-left-color:var(--late)}
  .mini-main{flex:1;min-width:0}
  .mini-main b{display:block;font-size:19px;font-weight:800}
  .mini-main small{display:block;font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mini-cd .cd{font-size:30px;font-weight:800;font-variant-numeric:tabular-nums}
  .mini-t{font-weight:700}

  /* Vue Tram : tout tient sans défilement */
  #ui{flex:1;min-height:0;display:flex;flex-direction:column;gap:10px;padding:4px calc(var(--safe-r) + 12px) calc(var(--safe-b) + 10px) calc(var(--safe-l) + 12px);overflow:hidden}
  #ui > *{flex:none}
  .u-card{background:#fff;border-radius:16px;padding:12px 14px}
  .u-eyebrow{display:block;font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
  .u-st{display:flex;align-items:center;gap:12px}
  .u-st .stn{flex:none}
  .u-st-main{flex:1;min-width:0}
  .u-st-main b{display:block;font-size:22px;font-weight:800;line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:-.01em}
  .u-walk{flex:none;text-align:right}
  .u-walk b{display:block;font-size:20px;font-weight:800;line-height:1.1}
  .u-walk small{font-size:12px;color:var(--muted);font-weight:600}
  .u-pill{height:30px;padding:0 10px;border-radius:15px;background:var(--wash);font-size:12px;font-weight:700;color:var(--me);flex:none}

  .u-dir{padding:8px 6px;outline:none}
  .u-dir:focus-visible{box-shadow:0 0 0 3px rgba(37,99,235,.35)}
  .u-dir-inner{display:flex;align-items:center;gap:4px}
  .u-arrow{flex:none;width:48px;height:64px;border-radius:14px;display:grid;place-items:center;color:var(--me)}
  .u-arrow:active{background:var(--wash)}
  .u-dir-cur{flex:1;min-width:0;text-align:center}
  .u-dir-top{display:flex;align-items:center;justify-content:center;gap:8px}
  .u-dir-top .u-eyebrow{text-transform:none;letter-spacing:0}
  .u-fav{width:32px;height:32px;display:grid;place-items:center;color:#f59e0b}
  .u-fav[aria-pressed="false"]{color:var(--faint)}
  .u-dir-name{font-size:20px;font-weight:800;line-height:1.2;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:24px}
  .u-dir-name.slide-l{animation:slideL .22s ease-out}
  .u-dir-name.slide-r{animation:slideR .22s ease-out}
  @keyframes slideL{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:none}}
  @keyframes slideR{from{opacity:0;transform:translateX(-24px)}to{opacity:1;transform:none}}
  .u-dots{display:flex;justify-content:center;gap:5px;margin-top:6px}
  .u-dots i{width:6px;height:6px;border-radius:3px;background:#d1d5db;transition:width .2s}
  .u-dots i.on{width:18px;background:var(--c)}
  .u-dir-empty{padding:18px;text-align:center;color:var(--muted);font-weight:600;width:100%}

  /* Verdict : le bloc principal, qui absorbe la hauteur disponible */
  #ui > .u-verdict{flex:1 1 auto;min-height:0}
  .u-verdict{display:flex;flex-direction:column;justify-content:center;gap:6px;border-radius:22px;padding:16px 18px;background:#fff;color:var(--ink);overflow:hidden}
  .u-verdict.v-green{background:var(--go);color:#fff}
  .u-verdict.v-orange{background:#f59e0b;color:#1f1300}
  .u-verdict.v-red{background:var(--late);color:#fff}
  .u-v-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
  .u-v-head strong{font-size:clamp(26px,4.4vh,36px);font-weight:800;line-height:1.05;letter-spacing:-.02em}
  .u-cd{text-align:right;flex:none}
  .u-cd .cd{display:block;font-size:clamp(44px,8.2vh,68px);font-weight:800;line-height:.9;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
  .u-cd small{display:block;font-size:12.5px;font-weight:700;opacity:.85;margin-top:4px}
  .u-v-sub{font-size:clamp(15px,2.2vh,18px);line-height:1.35;font-weight:500}
  .u-v-sub b{font-weight:800}
  .u-verdict .race{margin:10px 6px 0}
  .u-verdict .race-trk{background:rgba(255,255,255,.35);box-shadow:none}
  .u-verdict:not([class*="v-"]) .race-trk{background:#e5e7eb}
  .u-verdict .race-quai{background:#fff;opacity:.7}
  .u-verdict:not([class*="v-"]) .race-quai{background:var(--c);opacity:.4}
  .u-verdict .race-tram{background:#fff;color:var(--c);border-color:var(--c)}
  .u-verdict .race-me{border-color:#fff}
  .u-verdict .race-lab.down{color:inherit}
  .u-v-foot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:13.5px;font-weight:600;opacity:.95}
  .u-verdict .rt{color:inherit}
  .u-verdict .rt::before{background:currentColor}
  .u-verdict .delay{background:rgba(255,255,255,.9);color:var(--hurry-ink)}
  .u-next{opacity:.85}
  .u-acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}

  .u-impact{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border-radius:14px;background:#fff;color:var(--late-ink);text-align:left;box-shadow:inset 0 0 0 1.5px #fca5a5}
  .u-impact span{flex:1;min-width:0;font-size:13.5px;line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .u-impact b{display:block;font-size:14px}
  #uAlert:empty{display:none}

  .u-bottom{display:flex;flex-direction:column;gap:8px;padding:10px 12px}
  .seg.full{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}
  .seg-sm button[aria-checked="true"]{background:#fff}
  .u-actions{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:8px}
  .u-act{display:flex;align-items:center;justify-content:center;gap:6px;height:44px;border-radius:12px;background:var(--wash);color:var(--me);font-size:14px;font-weight:700;white-space:nowrap}
  .u-act.on{background:var(--me);color:#fff}

  @media (max-height:720px){ .u-card{padding:9px 12px} .u-st-main b{font-size:19px} .u-arrow{height:52px} .u-dir-name{font-size:18px} #ui{gap:8px} .u-verdict{padding:12px 14px} }
  @media (max-height:640px){ .u-verdict .race{display:none} .u-dots{display:none} .u-act span{display:none} .u-actions{grid-template-columns:repeat(3,1fr)} }

  @media (min-width:768px){
    #app{flex-direction:column}
    #ui{max-width:560px;width:100%;margin:0 auto}
    body[data-view="map"] .mini{max-width:520px;left:50%;transform:translateX(-50%);right:auto;width:calc(100% - 24px)}
  }

  /* Feuilles (menu, infos) */
  dialog.dd{background:#f2f2f7}
  .grabber{width:36px;height:5px;border-radius:3px;background:#c7c7cc;margin:8px auto 0}
  .dd-head{padding:8px 16px 8px}
  .dd-done{font-size:17px;font-weight:700;color:var(--me);padding:6px 4px}
  .dd-body h3{font-size:13px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:18px 4px 6px}
  .group{background:#fff;border-radius:12px;overflow:hidden}
  .row{display:flex;align-items:center;gap:10px;width:100%;min-height:46px;padding:10px 14px;border-bottom:1px solid #e5e5ea;text-align:left;font-size:16px;color:var(--ink)}
  .row:last-child{border-bottom:0}
  .row-t{flex:1;min-width:0}
  .row-t small{display:block;font-size:13px;color:var(--muted)}
  .row-v{color:var(--muted);font-size:15px}
  .row-times{display:flex;gap:4px}
  .row svg{color:#c7c7cc;flex:none}
  .row > svg:first-child{color:var(--hurry)}
  .chips-row{gap:6px;flex-wrap:wrap}
  .msg{background:#fff;border-radius:12px;padding:12px 14px;margin-bottom:8px;border:0}

  /* Présentation */
  .onb{position:fixed;inset:0;z-index:3000;background:#fff;display:flex;align-items:center;justify-content:center;padding:calc(var(--safe-t) + 24px) 28px calc(var(--safe-b) + 24px)}
  .onb-body{max-width:420px;width:100%;display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px}
  .onb-ico{width:92px;height:92px;border-radius:26px;background:var(--wash);display:grid;place-items:center;color:var(--me)}
  .onb h2{font-size:28px;font-weight:800;letter-spacing:-.02em}
  .onb p{font-size:17px;line-height:1.45;color:var(--muted)}
  .onb-dots{display:flex;gap:6px}
  .onb-dots i{width:7px;height:7px;border-radius:4px;background:#d1d5db}
  .onb-dots i.on{width:20px;background:var(--ink)}
  .onb-acts{display:flex;flex-direction:column;gap:10px;width:100%;margin-top:8px}
  .btn{height:44px;border-radius:12px;padding:0 16px;font-size:15px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--me);color:#fff}
  .btn.ghost{background:var(--wash);color:var(--me)}
  .btn.big{height:52px;font-size:17px;border-radius:14px;width:100%}
  .toast{top:auto;bottom:calc(var(--safe-b) + 24px);border-radius:14px}
  .banner{top:calc(var(--safe-t) + 58px)}
  @media (prefers-reduced-motion:reduce){ .u-dir-name{animation:none!important} }

  /* =================== v5.1 =================== */
  /* Rames : capsule orientée dans le sens de la marche */
  .tv{position:relative;width:30px;height:30px}
  .tv-body{position:absolute;left:3px;top:10px;width:24px;height:10px;border-radius:5px;background:var(--c);box-shadow:0 0 0 2px #fff,0 2px 5px rgba(15,23,42,.35);transform-origin:50% 50%}
  .tv-body::after{content:"";position:absolute;right:2px;top:3px;width:4px;height:4px;border-radius:50%;background:#fff;opacity:.9}
  .tv b{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:8.5px;font-weight:800;color:#fff;line-height:1;pointer-events:none;text-shadow:0 0 2px var(--c)}
  .tv.dwell .tv-body{box-shadow:0 0 0 2px #fff,0 0 0 5px color-mix(in srgb,var(--c) 30%,transparent),0 2px 5px rgba(15,23,42,.35)}
  .z-dest .tv b{font-size:9.5px}

  /* Sélecteur de direction */
  .u-eyebrow.warn{color:var(--hurry-ink);background:var(--hurry-bg);padding:2px 7px;border-radius:6px}
  .u-dir-bot{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:6px}
  .u-dir-bot .u-dots{margin:0}
  .u-dots i.off{opacity:.35}
  .u-other{font-size:13px;font-weight:700;color:var(--me);padding:4px 6px;border-radius:8px}
  .u-dir-empty .u-other{display:block;margin:6px auto 0}
  .row-check{color:var(--me)}
  .row-check svg{color:var(--me)}

  /* Plan (direction non desservie à votre station) */
  .u-plan{list-style:none;margin:4px 0 0;padding:10px 12px;border-radius:14px;background:rgba(255,255,255,.2);display:flex;flex-direction:column;gap:6px;font-size:14px;line-height:1.3}
  .u-verdict:not([class*="v-"]) .u-plan{background:var(--wash)}
  .u-plan li{display:flex;align-items:center;gap:8px}
  .u-plan li > svg{flex:none}
  .u-plan .badge{box-shadow:0 0 0 1.5px #fff}

  /* Dernier tram, fin de service */
  .u-lastpill{align-self:flex-start;font-size:12.5px;font-weight:800;padding:4px 9px;border-radius:8px;background:#0f172a;color:#fff;text-transform:uppercase;letter-spacing:.03em}
  .u-lastpill.soft{background:rgba(255,255,255,.25);color:inherit;text-transform:none;letter-spacing:0}
  .u-verdict:not([class*="v-"]) .u-lastpill.soft{background:var(--wash)}
  .u-verdict.v-off{background:#334155;color:#fff}
  .u-reason{display:flex;gap:10px;align-items:flex-start;padding:12px;border-radius:14px;background:rgba(255,255,255,.1);font-size:14.5px;line-height:1.4}
  .u-reason svg{flex:none;color:#fbbf24;margin-top:1px}
  .u-reason span{display:-webkit-box;-webkit-line-clamp:6;-webkit-box-orient:vertical;overflow:hidden}
  .u-alt{padding:12px;border-radius:14px;background:#fff;color:var(--ink);font-size:14.5px;line-height:1.45}
  .u-alt .u-eyebrow{margin-bottom:2px}
  .mini.v-off{border-left-color:#334155}
  .u-bottom{gap:8px}

  /* =================== v5.2 : épuré, dans l'esprit de la présentation =================== */
  body,#app,#ui{background:#fff}
  #nav{background:rgba(255,255,255,.94)}
  #nav .live{background:transparent;box-shadow:none;padding:0 4px;font-size:13px}
  .nav-seg{max-width:200px}
  #ui{gap:6px;padding-top:2px}
  .u-sec{padding:10px 4px}
  .u-sec + .u-sec{border-top:1px solid #f0f1f4}

  /* Station */
  .u-station{display:flex;align-items:center;gap:10px}
  .u-st{flex:1;min-width:0;display:flex;align-items:center;gap:12px}
  .u-st-main{flex:1;min-width:0}
  .u-st-main b{display:block;font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1.1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .u-eyebrow{font-size:12px;font-weight:600;color:#8e8e93;letter-spacing:.02em;text-transform:none}
  .u-walk{flex:none;text-align:right}
  .u-walk b{display:block;font-size:22px;font-weight:800;line-height:1.1}
  .u-walk small{font-size:12.5px;color:#8e8e93;font-weight:600}
  .u-station .gps{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px;overflow:hidden}
  .u-station .gps[data-state="manual"],.u-station .gps[data-state="sim"],.u-station .gps[data-state="denied"],.u-station .gps[data-state="error"]{position:static;opacity:1;pointer-events:auto;width:auto;height:28px;overflow:visible;flex:none;margin:0;padding:0 10px;border-radius:14px;background:#f2f2f7;border:0;box-shadow:none;font-size:12px;max-width:none}
  .u-link{font-size:14px;font-weight:600;color:var(--me);padding:4px 2px;background:none}

  /* Direction */
  .u-dir{padding:6px 0}
  .u-dir-inner{display:flex;align-items:center;gap:2px}
  .u-arrow{width:44px;height:60px;border-radius:12px;color:var(--me)}
  .u-dir-cur{flex:1;min-width:0;text-align:center}
  .u-dir-line{display:flex;align-items:center;justify-content:center;gap:10px;min-width:0}
  .u-dir-line .badge{flex:none;width:30px;height:30px;font-size:15px}
  .u-dir-name{font-size:23px;font-weight:800;letter-spacing:-.015em;line-height:1.15;margin:0;display:block;white-space:normal;overflow:visible;-webkit-line-clamp:unset;text-align:left}
  .u-dir-bot{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:6px;min-height:26px}
  .u-dots{margin:0}
  .u-count{font-size:12.5px;font-weight:600;color:#8e8e93}
  .u-tag{font-size:12px;font-weight:700;padding:3px 8px;border-radius:7px;background:var(--hurry-bg);color:var(--hurry-ink)}
  .u-fav{width:30px;height:30px}

  /* Verdict : aucun élément ne se chevauche, aucun texte coupé */
  #ui > .u-verdict{flex:1 1 auto;min-height:0}
  .u-verdict{justify-content:flex-start;gap:10px;padding:18px 20px;border-radius:26px;overflow-y:auto;overscroll-behavior:contain}
  .u-verdict > *{flex:none}
  .u-verdict:not([class*="v-"]){background:#f2f2f7}
  .u-v-head{align-items:center}
  .u-v-head strong{font-size:clamp(28px,4.6vh,38px)}
  .u-cd .cd{font-size:clamp(46px,8.6vh,72px)}
  .u-v-sub{font-size:clamp(16px,2.3vh,19px)}
  .u-v-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:14px;font-weight:600;opacity:.92;line-height:1.35}
  .u-verdict .rt{color:inherit}
  .u-verdict .rt::before{background:currentColor}
  .u-lastpill{margin-bottom:-2px}

  .race2{display:flex;flex-direction:column;gap:6px;margin:6px 4px 0}
  .race2-row{position:relative;height:17px}
  .rl{position:absolute;top:0;font-size:13px;font-weight:700;white-space:nowrap;transform:translateX(-50%);font-variant-numeric:tabular-nums}
  .rl.al{transform:translateX(-14px)}
  .rl.ar{transform:translateX(calc(-100% + 14px))}
  .race2-trk{position:relative;height:12px;border-radius:6px;background:rgba(255,255,255,.35)}
  .u-verdict:not([class*="v-"]) .race2-trk{background:#e5e5ea}
  .race2-quai{position:absolute;top:0;height:12px;border-radius:6px;background:#fff;opacity:.75}
  .u-verdict:not([class*="v-"]) .race2-quai{background:var(--c);opacity:.35}
  .race2-tram,.race2-me{position:absolute;top:50%;width:32px;height:32px;border-radius:50%;transform:translate(-50%,-50%);display:grid;place-items:center;border:3px solid #fff;box-shadow:0 2px 8px rgba(0,0,0,.25)}
  .race2-tram{background:var(--c);color:#fff;font-size:13px;font-weight:800;z-index:1}
  .race2-me{background:var(--me);color:#fff;z-index:2}

  /* Itinéraire avec correspondance */
  .u-plan2{list-style:none;margin:2px 0 0;padding:12px 14px;border-radius:16px;background:rgba(255,255,255,.18);display:flex;flex-direction:column;gap:9px;font-size:15px;line-height:1.35}
  .u-verdict:not([class*="v-"]) .u-plan2{background:#fff}
  .u-plan2 li{display:flex;align-items:flex-start;gap:10px}
  .u-plan2 li > span:last-child{flex:1;min-width:0}
  .u-plan2 svg{vertical-align:-2px}
  .u-plan2 .badge{vertical-align:-5px;box-shadow:0 0 0 1.5px #fff}
  .u-plan2 em{font-style:normal;font-weight:800;font-size:12.5px;padding:1px 6px;border-radius:6px;background:#fff;color:var(--hurry-ink);margin-left:4px}
  .u-step{flex:none;width:22px;height:22px;border-radius:50%;background:#fff;color:var(--ink);font-size:12.5px;font-weight:800;display:grid;place-items:center;margin-top:1px}

  /* Fin de service : messages affichés en entier */
  .u-reason{display:block;padding:14px;border-radius:16px;background:rgba(255,255,255,.1);font-size:15px;line-height:1.45}
  .u-reason .u-eyebrow{display:block;color:#fbbf24;margin-bottom:4px}
  .u-reason b{display:block;margin-bottom:3px}
  .u-reason p{margin:0;opacity:.92}
  .u-alt{padding:14px;border-radius:16px}

  .u-impact{box-shadow:none;background:var(--late-bg);padding:12px 14px}
  .u-impact span{display:block;-webkit-line-clamp:unset;overflow:visible;font-weight:700;font-size:14px}
  .u-impact em{font-style:normal;opacity:.7}

  /* Allure */
  .u-bottom{padding:8px 0 0;gap:8px}
  .spd{justify-content:center;text-align:center;font-size:12.5px}
  .u-la{display:flex;align-items:center;justify-content:center;gap:8px;height:42px;border-radius:12px;background:#f2f2f7;color:var(--me);font-size:14px;font-weight:700}
  .u-la[aria-pressed="true"]{background:var(--me);color:#fff}
  .u-la[hidden]{display:none}
  .row-dot{width:10px;height:10px;border-radius:50%;flex:none}
  .row-dot.ok{background:var(--go);box-shadow:0 0 0 3px rgba(21,128,61,.18)}
  .row-dot.ko{background:var(--late)}

  /* Rames plus grosses */
  .tram-icon{overflow:visible}
  .tv{width:40px;height:40px}
  .tv-body{left:3px;top:13px;width:34px;height:14px;border-radius:7px;box-shadow:0 0 0 2.5px #fff,0 2px 6px rgba(15,23,42,.35)}
  .tv-body::after{right:3px;top:4px;width:6px;height:6px}
  .tv b{font-size:10.5px}
  .z-dest .tv b{font-size:11px}

  @media (max-height:720px){ .u-st-main b{font-size:22px} .u-dir-name{font-size:20px} .u-arrow{height:50px} .u-verdict{padding:14px 16px} }
  @media (max-height:640px){ .race2{display:none} }

  /* =================== v5.3 : le style de la présentation, partout =================== */
  body,#app,#ui{background:#fff}
  #nav{background:#fff;box-shadow:none;padding-bottom:4px}
  body[data-view="map"] #nav{background:rgba(255,255,255,.9);box-shadow:none}
  #nav .live{background:transparent;box-shadow:none;padding:0 2px;font-size:13px;font-weight:600;color:#8e8e93}
  #nav .live[data-state="ok"]{color:#8e8e93}
  #nav .live[data-state="ok"] .dot{box-shadow:none}
  .navbtn{color:#8e8e93}

  #ui{display:flex;flex-direction:column;align-items:stretch;gap:0;padding:6px calc(var(--safe-r) + 24px) calc(var(--safe-b) + 14px) calc(var(--safe-l) + 24px);text-align:center}
  #ui > *{flex:none}

  /* Où je suis : une ligne grise, comme un sous-titre */
  .u-where{display:flex;align-items:center;justify-content:center;gap:8px;min-height:24px;font-size:15px;color:#8e8e93;padding-top:4px}
  .u-where b{color:#3c3c43;font-weight:600}
  .u-where .gps{display:none}
  .u-where .gps[data-state="manual"],.u-where .gps[data-state="sim"],.u-where .gps[data-state="denied"],.u-where .gps[data-state="error"]{display:inline-flex;height:24px;padding:0 9px;border-radius:12px;background:#f2f2f7;border:0;box-shadow:none;font-size:12px;margin:0;max-width:none}
  .u-link{font:inherit;color:var(--me);font-weight:600}
  .u-link.big{font-size:17px;padding:14px}

  /* Direction : une grande ligne, deux flèches */
  .u-dir{padding:10px 0 0;outline:none}
  .u-dir-inner{display:flex;align-items:center;justify-content:center;gap:4px}
  .u-arrow{flex:none;width:44px;height:56px;border-radius:14px;color:#c7c7cc;display:grid;place-items:center}
  .u-arrow:not(:disabled){color:var(--me)}
  .u-dir-cur{flex:1;min-width:0}
  .u-dir-line{display:flex;align-items:center;justify-content:center;gap:10px}
  .u-dir-line .badge{flex:none;width:30px;height:30px;font-size:15px;border-radius:9px}
  .u-dir-name{font-size:24px;font-weight:800;letter-spacing:-.02em;line-height:1.15;text-align:left}
  .u-dir-sub{font-size:14px;color:#8e8e93;margin-top:3px}

  /* Centre : anneau, titre, phrase, comme les écrans de présentation */
  #ui > .u-center{flex:1 1 auto;min-height:0}
  .u-center{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:8px 0;overflow-y:auto;overscroll-behavior:contain}
  .u-center > *{flex:none}
  .ring{position:relative;width:clamp(150px,27vh,230px);height:clamp(150px,27vh,230px);--rc:#c7c7cc}
  .ring svg{width:100%;height:100%;transform:rotate(-90deg)}
  .ring-bg{fill:none;stroke:#f2f2f7;stroke-width:9}
  .ring-fg{fill:none;stroke:var(--rc);stroke-width:9;stroke-linecap:round;transition:stroke-dashoffset 1s linear,stroke .3s}
  .ring-in{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--rc)}
  .ring-in .cd{font-size:clamp(40px,7.4vh,60px);font-weight:800;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums;color:#0f172a}
  .ring-in small{font-size:13px;font-weight:600;color:#8e8e93;margin-top:4px}
  .ring.v-green{--rc:#16a34a} .ring.v-orange{--rc:#f59e0b} .ring.v-red{--rc:#dc2626} .ring.v-off{--rc:#475569} .ring.v-none{--rc:#c7c7cc}
  .ring.v-none .ring-in,.ring.v-off .ring-in{color:var(--rc)}
  .u-title{font-size:clamp(28px,4.4vh,34px);font-weight:800;letter-spacing:-.02em;line-height:1.1;margin-top:6px;color:#0f172a}
  .u-center.v-green .u-title{color:#15803d}
  .u-center.v-orange .u-title{color:#b45309}
  .u-center.v-red .u-title{color:#b91c1c}
  .u-text{font-size:17px;line-height:1.45;color:#6b7280;max-width:340px}
  .u-text b{color:#0f172a}
  .u-meta{font-size:14px;color:#8e8e93;max-width:340px;line-height:1.4}
  .u-last{font-size:13px;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:#fff;background:#0f172a;padding:5px 10px;border-radius:8px}
  .u-last.soft{background:#f2f2f7;color:#3c3c43;text-transform:none;letter-spacing:0;font-weight:700}
  .u-steps{list-style:none;counter-reset:s;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;text-align:left;font-size:15.5px;color:#3c3c43}
  .u-steps li{counter-increment:s;display:flex;align-items:center;gap:10px}
  .u-steps li::before{content:counter(s);flex:none;width:22px;height:22px;border-radius:50%;background:#f2f2f7;color:#0f172a;font-size:12.5px;font-weight:800;display:grid;place-items:center}
  .u-steps .badge{vertical-align:-5px}
  .u-note{font-size:14.5px;line-height:1.45;color:#3c3c43;background:#f2f2f7;border-radius:14px;padding:12px 14px;text-align:left;max-width:360px}
  .u-btns{display:flex;flex-direction:column;gap:10px;width:100%;max-width:340px;margin-top:6px}

  /* Info trafic : une seule ligne discrète, texte complet */
  #uAlert:empty{display:none}
  .u-alertline{display:flex;align-items:flex-start;justify-content:center;gap:8px;width:100%;padding:8px 4px;font-size:14px;font-weight:600;color:#b45309;text-align:left;line-height:1.35}
  .u-alertline svg{flex:none;margin-top:1px}

  /* Bas : l'allure */
  .u-foot{padding-top:6px;display:flex;flex-direction:column;gap:6px}
  .u-speed{font-size:12.5px;color:#8e8e93}
  .u-speed b{color:#3c3c43}

  /* Vue Carte : une pastille, rien de plus */
  .map-tools{top:calc(var(--safe-t) + 60px)}
  .maptool .lbl{display:none}
  .maptool{width:44px;padding:0;justify-content:center}
  .maptool[aria-pressed="true"]{background:var(--me);color:#fff}
  .mini2{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--safe-b) + 16px);z-index:1000;display:flex;align-items:center;gap:12px;width:calc(100% - 32px);max-width:440px;padding:14px 18px;border-radius:22px;background:#fff;box-shadow:0 10px 30px rgba(0,0,0,.16);text-align:left}
  .mini2-dot{width:14px;height:14px;border-radius:50%;background:#c7c7cc;flex:none}
  .mini2.v-green .mini2-dot{background:#16a34a} .mini2.v-orange .mini2-dot{background:#f59e0b} .mini2.v-red .mini2-dot{background:#dc2626} .mini2.v-off .mini2-dot{background:#475569}
  .mini2-main{flex:1;min-width:0}
  .mini2-main b{display:block;font-size:18px;font-weight:800}
  .mini2-main small{display:block;font-size:13px;color:#8e8e93;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .mini2-cd .cd{font-size:26px;font-weight:800;font-variant-numeric:tabular-nums}
  .leaflet-bottom{bottom:calc(var(--safe-b) + 100px)}

  /* Réglages */
  .menu-foot{font-size:12.5px;color:#8e8e93;line-height:1.5;margin:22px 6px 6px;text-align:center}
  .menu-foot a{color:var(--me)}

  @media (max-height:700px){ .u-dir-name{font-size:21px} .u-text{font-size:16px} .u-center{gap:8px} }
  @media (max-height:620px){ .u-meta{display:none} }
  .ring > svg{width:100%;height:100%;transform:rotate(-90deg)}
  .ring-in svg{width:48px;height:48px}

  /* =================== v5.4 =================== */
  /* Station : libellé explicite */
  .u-where{flex-direction:column;gap:2px;padding-top:2px}
  #uStationInfo{display:flex;flex-direction:column;align-items:center;gap:1px}
  .u-where-lbl{font-size:12px;font-weight:600;color:#8e8e93;text-transform:uppercase;letter-spacing:.04em}
  .u-where-lbl .u-link{text-transform:none;letter-spacing:0;font-size:12px}
  .u-where-st{display:flex;align-items:center;gap:6px;font-size:16px;color:#6b7280}
  .u-where-st svg{color:var(--me);flex:none}
  .u-where-st b{color:#0f172a;font-weight:700;font-size:17px}
  .u-where-st span{white-space:nowrap}

  /* Panneau central : un encadré doux, jamais de défilement */
  #ui > .u-center{flex:1 1 auto;min-height:0}
  .u-center{margin:8px 0 6px;padding:18px 16px;border-radius:28px;background:#f6f7f9;overflow:hidden;gap:8px}
  .u-center .ring-bg{stroke:#e8eaee}
  .ring{width:clamp(130px,23vh,200px);height:clamp(130px,23vh,200px)}
  .ring-in .cd{font-size:clamp(36px,6.4vh,54px)}
  .u-center.compact{justify-content:flex-start;padding-top:14px}
  .u-center.compact .ring{width:clamp(88px,13vh,120px);height:clamp(88px,13vh,120px)}
  .u-center.compact .ring-in .cd{font-size:clamp(24px,3.8vh,32px)}
  .u-center.compact .ring-in small{font-size:11px;margin-top:2px}
  .u-center.compact .ring-in svg{width:32px;height:32px}
  .u-center.compact .u-title{font-size:clamp(24px,3.6vh,30px);margin-top:2px}
  .u-center.compact .u-text{font-size:15.5px}

  /* Étapes : bien distinctes, chacune sur sa ligne avec son heure */
  .u-steps2{list-style:none;margin:4px 0 0;padding:4px 14px;width:100%;max-width:380px;background:#fff;border-radius:18px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
  .u-steps2 li{display:grid;grid-template-columns:28px 1fr auto;align-items:center;gap:10px;padding:11px 0;text-align:left}
  .u-steps2 li + li{border-top:1px solid #eef0f3}
  .st-n{width:26px;height:26px;border-radius:50%;background:#0f172a;color:#fff;font-size:13px;font-weight:800;display:grid;place-items:center}
  .st-t{display:flex;align-items:center;gap:8px;min-width:0;font-size:15.5px;color:#3c3c43;line-height:1.3;flex-wrap:wrap}
  .st-t b{color:#0f172a}
  .st-t svg{color:#8e8e93;flex:none}
  .st-t small{font-size:12.5px;color:#8e8e93}
  .st-t em{font-style:normal;font-size:12px;font-weight:800;padding:1px 7px;border-radius:6px;background:var(--hurry-bg);color:var(--hurry-ink)}
  .st-h{font-size:15.5px;font-weight:800;color:#0f172a;font-variant-numeric:tabular-nums;white-space:nowrap}

  /* Message de fin de service : aperçu, message complet au toucher */
  .u-note{display:flex;flex-direction:column;gap:4px;width:100%;max-width:380px;background:#fff;border-radius:16px;padding:12px 14px;text-align:left;font-size:14.5px;line-height:1.4;color:#3c3c43}
  .u-note b{color:#0f172a}
  .u-note-b{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
  .u-note-more{color:var(--me);font-weight:600;font-size:14px}

  @media (max-height:700px){ .u-center{padding:14px 12px} .u-steps2 li{padding:8px 0} }
  .u-where-st{flex-wrap:wrap;justify-content:center;column-gap:5px}
  .u-where-st b{white-space:nowrap}
  .st-t{display:block}
  .st-t > svg,.st-t > .badge{vertical-align:-4px;margin-right:6px}
  .st-t small{margin-left:4px}
  .u-center.compact .u-meta{display:none}
  .u-title{font-size:clamp(26px,4vh,32px)}

  /* =================== v5.5 : panneaux nuancés, lecture en un coup d'œil =================== */
  body,#app{background:#f2f2f7}
  #nav{background:#f2f2f7}
  #ui{background:#f2f2f7;display:flex;flex-direction:column;gap:10px;padding:4px calc(var(--safe-r) + 14px) calc(var(--safe-b) + 12px) calc(var(--safe-l) + 14px);text-align:left;overflow:hidden}
  #ui > *{flex:none}

  /* Panneau 1 : Depuis / Vers (le contexte, en blanc) */
  .p-trip{background:#fff;border-radius:20px;padding:4px 14px;box-shadow:0 1px 2px rgba(0,0,0,.04)}
  .trip-row{display:flex;align-items:center;gap:10px;min-height:52px}
  .trip-row + .trip-row{border-top:1px solid #eef0f3}
  .trip-lbl{flex:none;width:52px;font-size:11.5px;font-weight:700;color:#8e8e93;text-transform:uppercase;letter-spacing:.05em}
  .trip-main{flex:1;min-width:0;display:flex;align-items:center;gap:8px}
  .trip-name{font-size:18px;font-weight:700;color:#0f172a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;letter-spacing:-.01em}
  .trip-name.muted{color:#8e8e93;font-weight:600}
  .trip-aside{flex:none;margin-left:auto;font-size:14px;font-weight:600;color:#8e8e93;white-space:nowrap}
  .trip-reset{flex:none;font-size:12.5px;font-weight:600;color:var(--me)}
  .trip-pick{flex:1;min-width:0;display:flex;align-items:center;gap:8px;text-align:left;padding:6px 0}
  .trip-pick .badge{flex:none;width:26px;height:26px;font-size:14px;border-radius:8px}
  .trip-pick > svg{flex:none;color:#8e8e93}
  .trip-arrow{flex:none;width:34px;height:40px;border-radius:10px;display:grid;place-items:center;color:var(--me)}
  .trip-arrow:disabled{color:#d1d5db;opacity:1}
  .trip-arrow:active{background:#f2f2f7}
  .trip-tag{flex:none;font-size:11.5px;font-weight:700;padding:3px 8px;border-radius:7px;background:#eef2ff;color:#3730a3}
  .p-trip .gps{display:none}
  .p-trip .gps[data-state="manual"],.p-trip .gps[data-state="sim"],.p-trip .gps[data-state="denied"],.p-trip .gps[data-state="error"]{display:inline-flex;flex:none;height:22px;padding:0 8px;border-radius:11px;background:#f2f2f7;border:0;box-shadow:none;font-size:11px;margin:0;max-width:none}

  /* Panneau 2 : la décision (teinté selon le verdict, l'élément le plus visible) */
  #ui > .p-main{flex:1 1 auto;min-height:0}
  .p-main{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;border-radius:24px;background:#fff;overflow:hidden;text-align:center;box-shadow:0 1px 2px rgba(0,0,0,.04)}
  .p-main > *{flex:none}
  .p-main.v-green{background:#ecfdf3}
  .p-main.v-orange{background:#fff7e6}
  .p-main.v-red{background:#fef2f2}
  .p-main.v-off{background:#eef1f5}
  .p-main .ring{width:clamp(120px,22vh,190px);height:clamp(120px,22vh,190px)}
  .p-main .ring.sm{width:clamp(84px,12vh,110px);height:clamp(84px,12vh,110px)}
  .p-main .ring-bg{stroke:rgba(15,23,42,.07)}
  .p-main .ring-in .cd{font-size:clamp(34px,6.2vh,52px)}
  .m-title{font-size:26px;font-weight:800;letter-spacing:-.02em;line-height:1.1;color:#0f172a}
  .m-title.big{font-size:clamp(28px,4.2vh,34px)}
  .v-green .m-title{color:#15803d} .v-orange .m-title{color:#b45309} .v-red .m-title{color:#b91c1c}
  .m-text{font-size:16.5px;color:#4b5563;line-height:1.35}
  .m-text b{color:#0f172a}
  .m-facts{font-size:13.5px;color:#6b7280;line-height:1.35}
  .m-flag{font-size:12px;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:#fff;background:#0f172a;padding:4px 9px;border-radius:7px}
  .m-flag.soft{background:rgba(15,23,42,.07);color:#334155;text-transform:none;letter-spacing:0}

  /* Itinéraire : verdict en tête, puis les étapes */
  .p-main.plan,.p-main.v-off{justify-content:flex-start;align-items:stretch;text-align:left}
  .m-head{display:flex;align-items:center;gap:14px}
  .m-head-t{flex:1;min-width:0}
  .m-head .m-title{font-size:24px}
  .m-head .m-text{font-size:15.5px;margin-top:2px}
  .m-count{flex:none;width:92px;height:92px;border-radius:24px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;box-shadow:inset 0 0 0 4px var(--vc,#c7c7cc)}
  .m-count.v-green{--vc:#16a34a} .m-count.v-orange{--vc:#f59e0b} .m-count.v-red{--vc:#dc2626}
  .m-count .cd{font-size:28px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:#0f172a;line-height:1}
  .m-count small{font-size:10.5px;font-weight:600;color:#8e8e93;margin-top:3px}
  .m-badge{flex:none;width:64px;height:64px;border-radius:20px;display:grid;place-items:center;background:#fff;color:#475569}
  .p-main .m-flag{align-self:center}
  .p-main.plan .m-flag,.p-main.v-off .m-flag{align-self:flex-start}

  .steps3{list-style:none;margin:6px 0 0;padding:4px 12px;background:#fff;border-radius:18px;display:flex;flex-direction:column}
  .steps3 li{display:grid;grid-template-columns:26px 1fr auto;align-items:center;gap:10px;min-height:44px;padding:4px 0}
  .steps3 li + li{border-top:1px solid #f0f1f4}
  .s-n{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:12.5px;font-weight:800}
  .s-ride .s-n{background:var(--lc);color:#fff}
  .s-off .s-n{background:color-mix(in srgb,var(--lc) 16%,#fff);color:var(--lc);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--lc) 45%,#fff)}
  .s-walk .s-n{background:#eef0f3;color:#64748b}
  .s-t{min-width:0;font-size:15px;color:#374151;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .s-t b{color:#0f172a;font-weight:700}
  .s-t .badge{vertical-align:-5px;margin-right:4px}
  .s-t small{font-size:12.5px;color:#9ca3af;margin-left:3px}
  .s-t em{font-style:normal;font-size:11.5px;font-weight:800;padding:1px 6px;border-radius:6px;background:var(--hurry-bg);color:var(--hurry-ink);margin-left:4px}
  .s-h{font-size:15px;font-weight:800;color:#0f172a;font-variant-numeric:tabular-nums;white-space:nowrap}
  .s-walk .s-h{color:#6b7280;font-weight:700}

  .m-sub{display:flex;flex-direction:column;gap:2px;margin-top:4px}
  .m-sub-lbl{font-size:11.5px;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.05em;padding-left:4px}
  .m-note{display:flex;flex-direction:column;gap:2px;background:#fff;border-radius:16px;padding:10px 12px;text-align:left;font-size:14px;line-height:1.35;color:#374151}
  .m-note b{font-size:12px;color:#b45309;text-transform:uppercase;letter-spacing:.04em}
  .m-note span{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

  /* Panneau 3 : l'alerte, seulement si elle vous concerne (ambre, une ligne) */
  #uAlert:empty{display:none}
  .p-alert{display:flex;align-items:center;gap:10px;width:100%;padding:10px 14px;border-radius:16px;background:#fff7e6;color:#92400e;font-size:14px;font-weight:600;text-align:left;line-height:1.3}
  .p-alert svg{flex:none}
  .p-alert span{flex:1;min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

  /* Panneau 4 : l'allure */
  .p-allure{display:flex;flex-direction:column;gap:6px}
  .p-allure .seg{background:#e5e5ea;margin:0}
  .u-speed{font-size:12.5px;color:#15803d;text-align:center;font-weight:600}
  .u-speed:empty{display:none}
  .u-speed b{color:#14532d}

  @media (max-height:700px){ .trip-row{min-height:46px} .p-main{padding:12px} .m-count{width:80px;height:80px} .steps3 li{min-height:40px} }
  @media (max-height:620px){ .m-facts{display:none} .p-main .ring{width:110px;height:110px} }
  #uStationInfo{flex-direction:row;align-items:center;gap:8px}
  .trip-ico{flex:none;width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:#eef2ff;color:var(--me)}
  .trip-ico.to{background:#f2f2f7;color:#0f172a}
  .trip-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
  .trip-sub{display:flex;align-items:center;gap:6px;font-size:12.5px;color:#8e8e93;font-weight:600}
  .trip-sub svg{color:#8e8e93}
  .trip-pick .badge{width:30px;height:30px;font-size:15px}
  .trip-arrow{width:32px}
  .s-t{white-space:normal;overflow:visible}
  .trip-to .trip-name{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.15}
  .p-main.plan{justify-content:center}
  .m-count small{font-size:10px;white-space:nowrap}

  /* =================== v5.6 : situation instantanée, messages humains =================== */
  #ui{gap:10px}
  /* Trajet : libellés explicites « Vous êtes près de » / « Vous allez vers » */
  .p-trip{padding:2px 14px}
  .trip-row{min-height:0;padding:10px 0}
  .trip-main.tcol{flex-direction:column;align-items:stretch;gap:2px}
  .trip-cap{font-size:11.5px;font-weight:700;color:#8e8e93;text-transform:uppercase;letter-spacing:.05em}
  .trip-cap .trip-reset{text-transform:none;letter-spacing:0;font-size:12px}
  .trip-line{display:flex;align-items:center;gap:8px;min-width:0}
  .trip-name{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.2;font-size:18px}
  .trip-to .trip-name{-webkit-line-clamp:unset;display:block}
  .trip-aside{align-self:flex-start;margin-top:2px}
  .trip-arrow{width:30px;height:36px}
  .trip-pick{padding:2px 0}

  /* Décision : compacte, tout est utile */
  #ui > .p-main{flex:0 1 auto;min-height:0}
  .p-main{align-items:stretch;justify-content:flex-start;text-align:left;gap:10px;padding:14px 16px 16px}
  .p-main.plan{justify-content:flex-start}
  .d-cap{font-size:11.5px;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.05em}
  .d-top,.d-head{display:flex;align-items:center;gap:14px}
  .d-count{flex:none;width:clamp(96px,14vh,118px);height:clamp(96px,14vh,118px);border-radius:26px;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#fff;box-shadow:inset 0 0 0 5px var(--vc,#d1d5db)}
  .d-head .d-count{width:clamp(84px,11vh,96px);height:clamp(84px,11vh,96px);border-radius:22px}
  .d-count.v-green{--vc:#16a34a} .d-count.v-orange{--vc:#f59e0b} .d-count.v-red{--vc:#dc2626}
  .d-count .cd{font-size:clamp(30px,4.6vh,40px);font-weight:800;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:#0f172a;line-height:1}
  .d-head .d-count .cd{font-size:clamp(26px,3.8vh,32px)}
  .d-count small{font-size:10.5px;font-weight:600;color:#8e8e93;margin-top:4px;white-space:nowrap}
  .d-tram{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
  .d-id{display:flex;align-items:center;gap:8px;font-size:17px;font-weight:700;color:#0f172a;line-height:1.2}
  .d-id .badge{flex:none}
  .d-pos{font-size:clamp(22px,3.3vh,27px);font-weight:800;letter-spacing:-.02em;color:#0f172a;line-height:1.1}
  .d-pos::first-letter{text-transform:uppercase}
  .d-at{font-size:13px;color:#6b7280;font-weight:600}
  .d-head-t{flex:1;min-width:0}
  .d-pos-inline{display:flex;align-items:center;gap:6px;font-size:15px;font-weight:700;color:#0f172a;margin-top:4px}
  .d-title{font-size:clamp(22px,3.3vh,26px);font-weight:800;letter-spacing:-.02em;line-height:1.15;color:#0f172a}
  .v-green .d-title{color:#15803d} .v-orange .d-title{color:#b45309} .v-red .d-title{color:#b91c1c}
  .d-msg{font-size:16.5px;font-weight:600;line-height:1.35;padding:10px 14px;border-radius:14px;background:#fff;color:#1f2937}
  .d-msg.v-green{box-shadow:inset 4px 0 0 #16a34a} .d-msg.v-orange{box-shadow:inset 4px 0 0 #f59e0b;background:#fff} .d-msg.v-red{box-shadow:inset 4px 0 0 #dc2626}
  .d-msg.plain{padding:0;background:none;font-weight:500;color:#4b5563;font-size:15.5px}
  .d-empty{display:flex;align-items:center;gap:14px}
  .d-empty .ring{flex:none;width:72px;height:72px;border-radius:50%;box-shadow:inset 0 0 0 5px #d1d5db;background:#fff}
  .d-empty .ring.v-off{box-shadow:inset 0 0 0 5px #475569}
  .d-empty .ring-in{position:absolute;inset:0;display:grid;place-items:center;color:#64748b}
  .d-empty .ring-in svg{width:30px;height:30px}
  .p-main .m-flag{align-self:flex-start}
  .steps3{margin:0}

  /* L'allure reste en bas de l'écran */
  .p-allure{margin-top:auto}

  @media (max-height:700px){ .p-main{gap:8px;padding:12px 14px} .d-msg{font-size:15.5px;padding:8px 12px} .trip-row{padding:8px 0} }
  #uStationInfo.tcol{flex-direction:column;align-items:stretch;gap:2px}
  .d-msg.plain.strong{font-size:15px;font-weight:600;color:#1f2937;margin-top:3px}
  .d-pos-inline{font-size:14.5px;color:#374151}
  @media (max-height:650px){ .steps3 li{min-height:36px;padding:2px 0} .s-t{font-size:14px} .d-head .d-count{width:78px;height:78px} .d-cap{display:none} }
  #ui > .p-main{margin:auto 0}
  .p-allure{margin-top:0}

  /* =================== Ajout à l'écran d'accueil =================== */
  .inst{z-index:3100}
  .inst-steps{list-style:none;margin:4px 0 0;padding:6px 16px;width:100%;background:#f6f7f9;border-radius:18px;text-align:left}
  .inst-steps li{display:flex;align-items:center;gap:12px;padding:10px 0;font-size:16px;color:#374151;line-height:1.35}
  .inst-steps li + li{border-top:1px solid #eceef2}
  .inst-n{flex:none;width:26px;height:26px;border-radius:50%;background:#e0e7ff;color:#3730a3;font-size:13px;font-weight:800;display:grid;place-items:center}
  .inst-steps b{color:#0f172a}
  .inst-key{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:8px;background:#fff;color:var(--me);vertical-align:middle;box-shadow:0 1px 2px rgba(0,0,0,.08);margin:0 2px}
  .inst-p{font-size:16px;color:#6b7280}
  .inst-arrow{display:none}
  .inst.arrow-bottom .inst-arrow{display:block;position:absolute;left:50%;bottom:calc(var(--safe-b) + 6px);width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;border-top:18px solid var(--me);transform:translateX(-50%);animation:instBounce 1.2s ease-in-out infinite}
  @keyframes instBounce{50%{transform:translate(-50%,8px)}}
  @media (prefers-reduced-motion:reduce){ .inst-arrow{animation:none!important} }
  .u-speed .muted-s{color:#8e8e93;font-weight:500}
  .p-main.scrollable{overflow-y:auto;align-items:stretch;text-align:left;justify-content:flex-start}
  .p-main.scrollable .inst-steps{background:#fff;padding:2px 14px}
  .p-main.scrollable .inst-steps li{font-size:15px;padding:9px 0}
  .d-fine{font-size:12px;color:#8e8e93;line-height:1.4}
  .u-btns .btn.big{width:100%}
  .p-main.scrollable{gap:8px;padding:14px}
  .p-main.scrollable .d-title{font-size:23px}
  .p-main.scrollable .inst-steps li{font-size:14.5px;padding:8px 0;gap:10px}
  .p-main.scrollable .d-msg.plain{font-size:15px}
  .p-main.scrollable .u-btns{margin-top:2px;gap:8px}
  .p-main.scrollable .btn.big{height:48px;font-size:16px}

  /* =================== Votre quai =================== */
  .d-quai{display:flex;align-items:center;gap:5px;margin-top:3px;padding:5px 9px 5px 7px;border-radius:10px;background:rgba(255,255,255,.75);color:#1f2937;font-size:13px;font-weight:600;text-align:left;align-self:flex-start;max-width:100%}
  .d-quai svg{flex:none;color:var(--me)}
  .d-quai span{min-width:0}
  .d-quai b{font-weight:800}

  .quai{position:fixed;inset:0;z-index:2500;background:#f2f2f7;display:flex;flex-direction:column;align-items:center;padding:0 16px calc(var(--safe-b) + 14px);overflow:hidden}
  .q-bar{width:100%;display:flex;align-items:center;padding:calc(var(--safe-t) + 8px) 0 6px}
  .q-back{flex:none;width:84px;text-align:left;font-size:17px;font-weight:600;color:var(--me)}
  .q-bar-t{flex:1;text-align:center;line-height:1.2}
  .q-bar-t span{display:block;font-size:11.5px;font-weight:700;color:#8e8e93;text-transform:uppercase;letter-spacing:.05em}
  .q-bar-t b{font-size:17px;font-weight:800;color:#0f172a}
  .q-bar-sp{flex:none;width:84px}

  /* Radar circulaire, façon mini-carte de jeu vidéo */
  .q-radar-wrap{position:relative;width:min(72vw,300px,34vh);aspect-ratio:1;margin:6px 0 10px;flex:none}
  .q-radar{position:absolute;inset:0;border-radius:50%;overflow:hidden;background:#dfe3ea;
    box-shadow:0 0 0 6px #fff,0 0 0 8px #0f172a,0 18px 40px -12px rgba(15,23,42,.45)}
  .q-radar::after{content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;z-index:500;
    background:radial-gradient(circle,transparent 58%,rgba(15,23,42,.18) 100%)}
  .q-north{position:absolute;top:-12px;left:50%;transform:translateX(-50%);width:26px;height:26px;border-radius:50%;background:#0f172a;color:#fff;font-size:12px;font-weight:800;display:grid;place-items:center;z-index:600}
  .q-radar .leaflet-tile-pane{filter:grayscale(.5) contrast(1.05)}
  .q-tgt-icon{background:none;border:0}
  .q-tgt{position:relative;width:44px;height:44px;display:grid;place-items:center}
  .q-tgt::before{content:"";position:absolute;inset:0;border-radius:50%;background:var(--c);opacity:.25;animation:qPulse 1.6s ease-out infinite}
  .q-tgt span{position:relative;width:26px;height:26px;border-radius:50%;background:var(--c);color:#fff;font-weight:800;font-size:13px;display:grid;place-items:center;box-shadow:0 0 0 3px #fff}
  @keyframes qPulse{0%{transform:scale(.6);opacity:.5}100%{transform:scale(1.4);opacity:0}}

  .q-info{width:100%;max-width:460px;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;flex:1;min-height:0}
  .q-head{font-size:28px;font-weight:800;letter-spacing:-.02em;color:#0f172a}
  .q-msg{font-size:16px;color:#4b5563;line-height:1.35;max-width:340px}
  .q-svg{width:100%;height:auto;max-height:28vh;margin-top:6px;background:#fff;border-radius:20px;padding:6px}
  .q-pf{fill:#eef0f3}
  .q-pf.mine{fill:color-mix(in srgb,var(--c) 18%,#fff);stroke:var(--c);stroke-width:2.5}
  .q-pft{font:700 12px -apple-system,system-ui,sans-serif;fill:#6b7280}
  .q-pft.mine{fill:#0f172a;font-weight:800}
  .q-rails line{stroke:#cbd5e1;stroke-width:2.5}
  .q-tram{transition:transform 1s linear}
  .q-lbl{font:800 12px -apple-system,system-ui,sans-serif;fill:#fff}
  .q-cross{fill:none;stroke:#2563eb;stroke-width:3;stroke-dasharray:3 6;stroke-linecap:round}
  .q-fine{font-size:12px;color:#8e8e93;line-height:1.4;max-width:360px}
  @media (prefers-reduced-motion:reduce){ .q-tgt::before{animation:none} .q-tram{transition:none} }

  /* =================== Mode simulation =================== */
  .ios-switch{flex:none;position:relative;width:51px;height:31px;border-radius:16px;background:#e5e5ea;transition:background .2s}
  .ios-switch i{position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 3px 8px rgba(0,0,0,.15),0 1px 1px rgba(0,0,0,.16);transition:transform .2s}
  .ios-switch.on{background:#34c759}
  .ios-switch.on i{transform:translateX(20px)}
  .sim-hint{display:none;position:absolute;left:50%;transform:translateX(-50%);top:calc(var(--safe-t) + 60px);z-index:1000;padding:8px 14px;border-radius:14px;background:#7c3aed;color:#fff;font-size:13.5px;font-weight:700;white-space:nowrap;box-shadow:0 8px 20px -8px rgba(124,58,237,.6);pointer-events:none}
  body.demo[data-view="map"] .sim-hint{display:block}
  .gps[data-state="manual"] .dot,.gps[data-state="sim"] .dot{background:#7c3aed}
  .sim-hint{left:12px;right:auto;transform:none;max-width:calc(100% - 80px);white-space:normal}
  .me.manual,.me.sim{background:#7c3aed}
  .me.manual::after,.me.sim::after{border-color:#7c3aed}
