/* Take Up : carte de Lyon et carte de France de l'accueil. */
.demo{margin-top:6px;scroll-margin-top:20px}.demo-head{text-align:center;max-width:720px;margin:0 auto 30px}.demo-head h2{margin:0;font-size:clamp(30px,3.6vw,46px);line-height:1.15;font-weight:560;letter-spacing:-.025em}.demo-head h2 span{color:#64dcc6}.demo-head h2{text-wrap:balance}
.demo-grid{display:grid;grid-template-columns:minmax(0,1fr) 400px;gap:16px}.map-card{min-width:0;border:1px solid #2d4b4b;border-radius:14px;background:#0a1d21;overflow:hidden;box-shadow:0 30px 80px -45px #000}.map-card button{font:inherit;cursor:pointer}.map-card button:focus-visible,.map-card a:focus-visible{outline:2px solid #f0faf7;outline-offset:3px}
.lyon-card{scroll-margin-top:20px;transition:border-color .3s,box-shadow .3s}.lyon-card.flash{border-color:#5fd8c2;box-shadow:0 0 0 3px #00c4ae33,0 30px 80px -45px #000}
.map-bar{display:flex;align-items:center;gap:16px;min-height:54px;padding:10px 18px;border-bottom:1px solid #243f42;background:#0b2024;font-size:13px}.map-place{display:flex;align-items:center;gap:8px;color:#d9efe9;font-weight:500}.map-place svg{width:17px;height:17px;color:#69cbb6}
.lyon-stage{position:relative;height:540px;overflow:hidden;background:#102129;isolation:isolate}.lyon-stage img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 50%}.lyon-stage::after{content:"";position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 70px #0a1d21cc;z-index:2}
.lyon-route{position:absolute;left:0;top:0;overflow:visible;transform-origin:0 0;pointer-events:none}.lyon-route path{fill:none;vector-effect:non-scaling-stroke;stroke-linejoin:round;stroke-linecap:round}.lyon-route .glow{stroke:#00c4ae;stroke-width:10;opacity:.14}.lyon-route .line{stroke:#51d9c5;stroke-width:2;stroke-dasharray:4 6;opacity:.8}
.lyon-cars{position:absolute;inset:0;pointer-events:none}.car{pointer-events:auto;position:absolute;left:0;top:0;width:40px;height:40px;margin:-20px 0 0 -20px;padding:0;display:grid;place-items:center;border:0;background:none;color:#65e7cd;will-change:transform}.car[data-busy=true]{color:#d5a563}.car:focus-visible{outline:none}
.car-halo{position:absolute;inset:4px;border-radius:50%;background:#35d5af20;border:1px solid #50e7c838;transition:inset .2s,border-color .2s}.car[data-busy=true] .car-halo{background:#d5a56318;border-color:#d5a56340}.car[aria-pressed=true]{z-index:1}.car[aria-pressed=true] .car-halo{inset:-5px;border:2px solid #89ffe4;background:#3ed6ba25;box-shadow:0 0 22px #25cfab45}.car:focus-visible .car-halo{border:2px solid #f0faf7}
.car-body{position:relative;width:17px;height:27px;filter:drop-shadow(0 3px 3px #000b)}.car-body svg{width:100%;height:100%}.car-label{position:absolute;top:43px;left:50%;transform:translateX(-50%);white-space:nowrap;font-size:11px;line-height:1;background:#071a20f2;border:1px solid #39756d;border-radius:5px;color:#e6fff6;padding:6px 8px;opacity:0;pointer-events:none;transition:opacity .15s}.car:hover .car-label,.car:focus-visible .car-label,.car[aria-pressed=true] .car-label{opacity:1}
.lyon-count,.lyon-legend{position:absolute;z-index:3;border:1px solid #2c4b4d;background:#0a1f25e8;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.lyon-count{left:16px;top:16px;display:flex;align-items:center;gap:12px;padding:11px 16px 11px 14px;border-radius:10px;font-size:12px;line-height:1.35;color:#e6f6f2}.lyon-count strong{font-size:40px;line-height:1;font-weight:520;color:#68e4cc;letter-spacing:-.05em;font-variant-numeric:tabular-nums}.lyon-count small{display:block;margin-top:2px;color:#e6f2ee;font-size:11px}
.lyon-legend{left:16px;bottom:16px;display:flex;align-items:center;gap:7px;padding:9px 12px;border-radius:8px;font-size:11px;color:#e6f2ee}.lyon-legend i{width:7px;height:7px;border-radius:50%;background:#64e0c1}.lyon-legend i.busy{margin-left:8px;background:#d5a563}
.lyon-credit{position:absolute;z-index:3;right:10px;bottom:8px;font-size:9.5px;line-height:1.4;color:#e6f2ee}.lyon-credit a:hover{color:#e6f6f2;text-decoration:underline}
.lyon-detail{display:flex;align-items:center;gap:14px;min-height:72px;padding:12px 18px;border-top:1px solid #243f42;background:#0b2226;font-size:13px}.lyon-hint{display:flex;align-items:center;gap:10px;color:#e6f2ee}.lyon-hint svg{width:18px;height:18px;color:#69cbb6;flex-shrink:0}
.avatar{position:relative;flex-shrink:0;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;border:1px solid #3a6a62;background:#12322f;font-size:13px;font-weight:600;color:#dff8f1}.avatar i{position:absolute;right:-1px;bottom:-1px;width:11px;height:11px;border-radius:50%;background:#64e0c1;border:2px solid #0b2226}.avatar[data-busy=true] i{background:#d5a563}
.detail-name,.detail-car{display:grid;line-height:1.4}.detail-name strong,.detail-car strong{color:#f0faf7;font-size:14px;font-weight:600}.detail-name span,.detail-car span{color:#e6f2ee;font-size:12px}.detail-car{margin-left:auto;text-align:right}
.detail-status{display:flex;align-items:center;gap:7px;padding:5px 11px;border:1px solid #3a7466;border-radius:30px;color:#9ff0dc;font-size:12px;white-space:nowrap}.detail-status i{width:7px;height:7px;border-radius:50%;background:#64e0c1}.detail-status[data-busy=true]{border-color:#7a6440;color:#f0c98f}.detail-status[data-busy=true] i{background:#d5a563}
.detail-close{display:grid;place-items:center;width:36px;height:36px;flex-shrink:0;padding:0;border:1px solid #2c4b4d;border-radius:8px;background:transparent;color:#e6f2ee}.detail-close:hover{background:#12302f}.detail-close svg{width:15px;height:15px}
.france-card{display:flex;flex-direction:column;padding:24px 22px 20px}.france-card h3{margin:0;font-size:23px;line-height:1.25;font-weight:550;letter-spacing:-.02em;text-wrap:balance}.france-map{width:calc(100% + 28px);height:auto;margin:auto -14px;padding:18px 0 10px;overflow:hidden}
.fr-city{cursor:pointer;fill:#b7e7df;outline:none}.fr-city[aria-pressed=true]{fill:#00e7c5}.fr-city text{font-size:34px;font-weight:500;fill:#edf8f5;paint-order:stroke;stroke:#071517;stroke-width:9px;stroke-linejoin:round}.fr-hit{fill:transparent;stroke:none}.fr-city:focus-visible .fr-hit{stroke:#f0faf7;stroke-width:3}.fr-city:hover text{fill:#8ff3dd}
.fr-city .pulse{opacity:0;transform-box:fill-box;transform-origin:center}.fr-city[aria-pressed=true] .pulse{opacity:.25}.demo[data-running=true] .fr-city[aria-pressed=true] .pulse{animation:radar 3s ease-out infinite}@keyframes radar{from{transform:scale(1);opacity:.35}to{transform:scale(3.2);opacity:0}}
.fr-arcs path{fill:none;stroke:#00c4ae;stroke-width:3;opacity:.5;transition:stroke-dashoffset 1.4s cubic-bezier(.3,.6,.3,1)}.fr-cars use{color:#65e7cd}
.france-status{display:flex;align-items:center;gap:12px;margin-top:6px;font-size:12.5px;line-height:1.45;color:#e6f2ee}.france-status i{width:8px;height:8px;flex-shrink:0;border-radius:50%;background:#63dfc3;box-shadow:0 0 0 4px #63dfc322}.france-status strong{display:block;color:#f0faf7;font-size:14px;font-weight:550}
.demo-note{margin-top:16px;font-size:12px;color:#e6f2ee;text-align:center;text-wrap:balance}.demo-note svg{display:inline-block;width:15px;height:15px;margin-right:8px;vertical-align:-3px;color:#69cbb6}
@media(max-width:1079px){.demo-grid{grid-template-columns:minmax(0,1fr)}.lyon-stage{height:500px}.france-card{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);grid-template-rows:auto 1fr;column-gap:28px;padding:26px}.france-card>*{grid-column:1}.france-map{grid-column:2;grid-row:1/span 2;width:100%;margin:auto 0;padding:0}.france-status{margin-top:22px;align-self:end}}
@media(max-width:859px){.lyon-stage{height:480px}}
@media(max-width:599px){.demo-head{margin-bottom:22px}.demo-head h2{font-size:clamp(26px,8.4vw,31px)}.map-bar{padding:8px 14px;gap:10px}.lyon-stage{height:auto;aspect-ratio:4/5;max-height:600px}.lyon-count{left:10px;top:10px;padding:8px 12px 8px 10px;gap:9px;font-size:11px}.lyon-count strong{font-size:30px}.lyon-count small{font-size:10px}.lyon-legend{left:10px;bottom:26px;padding:7px 10px;font-size:10px}.lyon-credit{right:8px;bottom:6px;font-size:8.5px}
.lyon-detail{flex-wrap:wrap;gap:8px 12px;padding:12px 14px}.detail-name{flex:1}.detail-car{order:5;width:100%;margin-left:52px;text-align:left}.detail-status{font-size:11px;padding:4px 9px}.france-card{display:flex;padding:22px 18px 18px}.france-card h3{font-size:21px}.france-map{width:calc(100% + 20px);margin:0 -10px;padding:14px 0 6px}}
@media(max-width:400px){.map-bar{gap:8px;padding:8px 12px}.map-place{gap:6px;font-size:12px;white-space:nowrap}.map-place svg{width:15px;height:15px}}
