/* bo-monde.css : le dessin vivant (assets/bo/bo-monde.js). Generique, aucun savoir client. */
.bo-monde { position:relative; border-radius:var(--bo-radius-lg, 22px); overflow:hidden; box-shadow:var(--bo-shadow-2); background:#25b7bd; line-height:0; }
.bo-monde__svg { display:block; width:100%; height:auto; }
.bo-monde__svg--l { display:none; }
@media (min-width:720px) { .bo-monde__svg--p { display:none; } .bo-monde__svg--l { display:block; } }
.bo-monde__e { cursor:pointer; outline:none; transition:transform .25s var(--bo-ease, ease); }
.bo-monde__e:focus-visible .bo-monde__hit { stroke:#e2b354; stroke-width:3; }
.bo-monde__e:active { opacity:.85; }
.bo-monde .bm-zone { font:600 13px var(--bo-font-num, system-ui); fill:#fff; letter-spacing:.08em; text-transform:uppercase; opacity:.9; }
.bo-monde .bm-sign { font:600 11px var(--bo-font-num, system-ui); fill:#e2b354; letter-spacing:.04em; }
.bo-monde .bm-t1 { font:600 12.5px var(--bo-font, system-ui); fill:#1d2b2a; }
.bo-monde .bm-t2 { font:500 11px var(--bo-font, system-ui); fill:#56625c; }
.bo-monde__legend { display:flex; flex-wrap:wrap; gap:6px 12px; margin-top:10px; font-size:var(--bo-fs-s, 13px); color:var(--bo-muted); }
.bo-monde__key { display:inline-flex; align-items:center; gap:6px; }
.bo-monde__key i { width:12px; height:12px; border-radius:50%; display:inline-block; border:1px solid rgba(0,0,0,.15); }
@media (prefers-reduced-motion:reduce) { .bo-monde__e { transition:none; } }

/* ---------- vue isometrique (assets/bo/bo-monde-iso.js) ----------
   Les bulles en verre depoli reprennent celles du plan d Exhelia (12/10) : fond translucide,
   flou + saturation de ce qui passe dessous, liseré clair, ombre douce ; au survol la bulle
   redevient presque opaque. Sans flou (vieux navigateur) ou transparence reduite : bulle pleine. */
.bo-iso { display:block; --gl-bg:rgba(255,255,255,.58); --gl-bg-h:rgba(255,255,255,.9); --gl-line:rgba(255,255,255,.7); --gl-hi:rgba(255,255,255,.65); --gl-text:#14251f; --gl-muted:#3f514a; --gl-sh:0 2px 12px rgba(12,34,30,.14), 0 1px 2px rgba(12,34,30,.10); --gl-solid:rgba(255,255,255,.94); }
html[data-theme="dark"] .bo-iso { --gl-bg:rgba(14,38,33,.55); --gl-bg-h:rgba(14,38,33,.9); --gl-line:rgba(255,255,255,.16); --gl-hi:rgba(255,255,255,.12); --gl-text:#f1f6f3; --gl-muted:#bcd0c8; --gl-sh:0 4px 16px rgba(0,0,0,.35); --gl-solid:rgba(16,42,36,.95); }
.bo-iso__stage { position:relative; aspect-ratio:1/1; max-height:72vh; width:100%; border-radius:var(--bo-radius-lg, 22px); overflow:hidden; box-shadow:var(--bo-shadow-2); background:#e9ecef; touch-action:pan-y; user-select:none; -webkit-user-select:none; }
.bo-iso__stage.is-zoom { touch-action:none; cursor:grab; }
.bo-iso__stage.is-zoom:active { cursor:grabbing; }
@media (min-width:720px) { .bo-iso__stage { aspect-ratio:16/9; max-height:76vh; } }
/* plein cadre (onglet Carte) : la scene prend toute la hauteur donnee par la page */
.bo-iso--plein, .bo-iso--plein .bo-iso__stage { height:100%; }
.bo-iso--plein .bo-iso__stage { aspect-ratio:auto; max-height:none; touch-action:none; }
.bo-iso__svg { position:absolute; inset:0; width:100%; height:100%; display:block; }
.bo-iso__svg [data-iso-id] { cursor:pointer; }
.bo-iso__pills { position:absolute; inset:0; pointer-events:none; }
.bo-glass, .bo-iso__pill, .bo-iso__ctl, .bo-iso__tl { background:var(--gl-bg); -webkit-backdrop-filter:blur(12px) saturate(165%); backdrop-filter:blur(12px) saturate(165%); border:1px solid var(--gl-line); box-shadow:var(--gl-sh), inset 0 1px 0 var(--gl-hi); color:var(--gl-text); }
.bo-iso__pill { pointer-events:auto; position:absolute; transform:translate(-50%,-100%) translateY(-6px); display:inline-flex; align-items:center; gap:7px; width:max-content; max-width:260px; min-height:36px; padding:4px 10px 4px 5px; border-radius:999px; font:600 13px/1.15 var(--bo-font, system-ui); text-align:left; cursor:pointer; white-space:nowrap; transition:background .15s ease, box-shadow .15s ease, transform .15s ease; }
.bo-iso__pill:hover { background:var(--gl-bg-h); }
.bo-iso__pill::after { content:""; position:absolute; left:50%; bottom:-7px; width:2px; height:6px; margin-left:-1px; border-radius:2px; background:var(--gl-line); box-shadow:0 1px 2px rgba(0,0,0,.2); }
.bo-iso__pill.is-s { min-height:28px; padding:3px 9px 3px 5px; gap:5px; font-size:12px; }
.bo-iso__pill.is-s .bo-iso__tx small { font-size:10.5px; }
.bo-iso__pill.t-hl { border-color:#e2b354; box-shadow:0 0 0 2px rgba(226,179,84,.55), var(--gl-sh); }
.bo-iso__pill:focus-visible { outline:3px solid #e2b354; outline-offset:2px; }
.bo-iso__ic { flex:none; width:26px; height:26px; border-radius:50%; display:grid; place-items:center; background:rgba(255,255,255,.75); color:#1f3b4d; }
html[data-theme="dark"] .bo-iso__ic { background:rgba(255,255,255,.12); color:#e2f0ea; }
.bo-iso__ic svg { width:16px; height:16px; }
.bo-iso__pill.t-warn .bo-iso__ic { background:#fdeedd; color:#b45a12; }
.bo-iso__pill.t-bad .bo-iso__ic { background:#fbe3e8; color:#a3243f; }
.bo-iso__pill.t-ok .bo-iso__ic { background:#e2f2ea; color:#1f7a62; }
.bo-iso__tx { display:grid; line-height:1.15; min-width:0; }
.bo-iso__tx b { font-weight:700; letter-spacing:.005em; }
.bo-iso__tx b, .bo-iso__tx small { overflow:hidden; text-overflow:ellipsis; }
.bo-iso__tx small { font:500 11px var(--bo-font, system-ui); color:var(--gl-muted); }
.bo-iso__n { flex:none; font:700 11.5px var(--bo-font-num, system-ui); font-style:normal; min-width:22px; height:22px; padding:0 6px; border-radius:999px; display:grid; place-items:center; background:#d9772f; color:#fff; }
.bo-iso__pill.t-ok .bo-iso__n { background:#1f7a62; }
.bo-iso__pill.t-bad .bo-iso__n { background:#c2415d; }
.bo-iso__dot { flex:none; width:11px; height:11px; border-radius:50%; border:1.5px solid rgba(255,255,255,.85); box-shadow:0 0 0 1px rgba(0,0,0,.18); }
/* les boutons de camera montent en haut a gauche (comme chez Exhelia : la frise ne les couvre plus) */
.bo-iso__ctl { position:absolute; left:10px; top:10px; display:grid; gap:2px; padding:4px; border-radius:16px; }
.bo-iso__ctl button { width:42px; height:42px; border:0; border-radius:12px; background:transparent; color:var(--gl-text); display:grid; place-items:center; cursor:pointer; transition:background .15s ease; }
.bo-iso__ctl button:hover { background:var(--gl-bg-h); }
.bo-iso__ctl button:focus-visible { outline:3px solid #e2b354; }
.bo-iso__ctl svg { width:20px; height:20px; }
.bo-iso__tl { position:absolute; left:10px; right:10px; bottom:10px; z-index:2; display:flex; align-items:center; gap:10px; max-width:560px; margin:0 auto; padding:8px 10px; border-radius:18px; }
.bo-iso__tl[hidden] { display:none; }
.bo-iso__play { flex:none; width:42px; height:42px; border-radius:50%; border:0; background:#17362B; color:#f6f0e6; display:grid; place-items:center; cursor:pointer; }
html[data-theme="dark"] .bo-iso__play { background:#e2b354; color:#1d2b2a; }
.bo-iso__play svg { width:18px; height:18px; }
.bo-iso__tlm { flex:1; min-width:0; display:grid; gap:0; }
.bo-iso__tll { font:600 13px var(--bo-font-num, system-ui); color:var(--gl-text); }
.bo-iso__tlm input { width:100%; margin:0; min-height:28px; accent-color:#e2b354; }
.bo-iso__now { flex:none; min-height:38px; padding:0 14px; border-radius:999px; border:1px solid var(--gl-line); background:rgba(255,255,255,.5); color:var(--gl-text); font:600 13px var(--bo-font, system-ui); cursor:pointer; }
.bo-iso__now[aria-pressed="true"] { background:#17362B; border-color:#17362B; color:#f6f0e6; }
html[data-theme="dark"] .bo-iso__now { background:rgba(255,255,255,.08); }
html[data-theme="dark"] .bo-iso__now[aria-pressed="true"] { background:#e2b354; border-color:#e2b354; color:#1d2b2a; }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { .bo-glass, .bo-iso__pill, .bo-iso__ctl, .bo-iso__tl { background:var(--gl-solid); } }
@media (prefers-reduced-transparency: reduce) { .bo-glass, .bo-iso__pill, .bo-iso__ctl, .bo-iso__tl { background:var(--gl-solid); -webkit-backdrop-filter:none; backdrop-filter:none; } }
/* telephone : etiquettes plus compactes, mais toujours au moins 12px de texte */
.bo-iso__stage.is-compact .bo-iso__pill { min-height:32px; padding:3px 9px 3px 4px; gap:5px; font-size:12.5px; }
.bo-iso__stage.is-compact .bo-iso__pill .bo-iso__tx small { display:none; }
.bo-iso__stage.is-compact .bo-iso__ic { width:24px; height:24px; }
.bo-iso__stage.is-compact .bo-iso__ic svg { width:14px; height:14px; }
.bo-iso__stage.is-compact .bo-iso__n { min-width:20px; height:20px; font-size:11px; }
.bo-iso__stage.is-compact .bo-iso__pill.is-s { min-height:26px; padding:2px 8px 2px 5px; font-size:12px; }
.bo-iso__stage.is-compact .bo-iso__ctl { left:8px; top:8px; }
.bo-iso__stage.is-compact .bo-iso__ctl button { width:40px; height:40px; }
.bo-iso__stage.is-compact .bo-iso__tl { left:8px; right:8px; bottom:8px; padding:6px 8px; gap:8px; }
@media (prefers-reduced-motion:reduce) { .bo-iso__pill, .bo-iso__ctl button { transition:none; } }
.bi-p { transform-box:fill-box; }
.bi-p--walk { animation:bi-walk 9s ease-in-out infinite alternate; }
.bi-p--walk .bi-p__body, .bi-p--work .bi-p__body { animation:bi-step .5s ease-in-out infinite alternate; }
.bi-p--wave .bi-p__arm { transform-origin:3px -14px; transform-box:view-box; animation:bi-wave .6s ease-in-out infinite alternate; }
.bi-p--work .bi-p__arm { transform-origin:3px -14px; transform-box:view-box; animation:bi-wave 1.1s ease-in-out infinite alternate; }
.bi-boat.is-sea { animation:bi-bob 3.2s ease-in-out infinite alternate; }
@keyframes bi-walk { from { transform:translate(0,0); } to { transform:translate(var(--dx,0),var(--dy,0)); } }
@keyframes bi-step { from { transform:translateY(0); } to { transform:translateY(-1.2px); } }
@keyframes bi-wave { from { transform:rotate(0deg); } to { transform:rotate(-130deg); } }
@keyframes bi-bob { from { transform:translateY(0); } to { transform:translateY(-3px); } }
@media (prefers-reduced-motion:reduce) { .bi-p, .bi-p *, .bi-boat { animation:none !important; } }
/* bandeau, semaine, repartition */
.bo-iso-band { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; margin:0 0 12px; }
@media (min-width:720px) { .bo-iso-band { grid-template-columns:repeat(4,minmax(0,1fr)); } }
.bo-iso-band__t { text-align:left; cursor:pointer; display:grid; gap:2px; padding:10px 12px; min-height:72px; border-radius:var(--bo-radius, 14px); border:1px solid var(--bo-line, #dfe5e2); background:var(--bo-surface, #fff); color:var(--bo-text, #1d2b2a); font:inherit; }
.bo-iso-band__t span { font:600 12px var(--bo-font, system-ui); color:var(--bo-muted, #5d6b66); }
.bo-iso-band__t b { font:700 20px var(--bo-font-num, system-ui); }
.bo-iso-band__t small { font:500 11.5px var(--bo-font, system-ui); color:var(--bo-muted, #5d6b66); }
.bo-iso-band__t.t-warn { border-color:#e8843a; background:color-mix(in srgb, #e8843a 9%, var(--bo-surface, #fff)); }
.bo-iso-band__t.t-bad { border-color:#c2415d; background:color-mix(in srgb, #c2415d 8%, var(--bo-surface, #fff)); }
.bo-iso-band__t.t-ok b { color:#1f7a62; }
.bo-iso-week { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:6px; margin:12px 0 0; }
.bo-iso-week__d { cursor:pointer; display:grid; justify-items:center; gap:2px; padding:7px 3px; min-height:44px; border-radius:12px; border:1px solid var(--bo-line, #dfe5e2); background:var(--bo-surface, #fff); color:var(--bo-text, #1d2b2a); font:inherit; }
.bo-iso-week__d.is-today { border-color:var(--bo-ink, #1f3b4d); box-shadow:inset 0 0 0 1px var(--bo-ink, #1f3b4d); }
.bo-iso-week__d b { font:600 12px var(--bo-font, system-ui); }
.bo-iso-week__d small { font:500 10.5px var(--bo-font-num, system-ui); color:var(--bo-muted, #5d6b66); }
.bo-iso-week__d em { font:600 10.5px var(--bo-font-num, system-ui); font-style:normal; color:var(--bo-muted, #5d6b66); }
.bo-iso-week__d svg { width:100%; max-width:64px; height:auto; }
.bo-iso-mix { display:grid; gap:8px; }
.bo-iso-mix__bar { display:flex; height:12px; border-radius:999px; overflow:hidden; gap:2px; }
.bo-iso-mix__k { display:flex; flex-wrap:wrap; gap:4px 12px; font-size:var(--bo-fs-s, 13px); color:var(--bo-muted, #5d6b66); }
.bo-iso-mix__k span { display:inline-flex; align-items:center; gap:5px; }
.bo-iso-mix__k i { width:10px; height:10px; border-radius:3px; }
.bo-iso-mix__k b { color:var(--bo-text, #1d2b2a); }
.bo-iso-mix__empty { margin:0; color:var(--bo-muted, #5d6b66); font-size:var(--bo-fs-s, 13px); }
/* pastilles d une etiquette (12/10 v4) : coche verte (pret), mot court (client arrive) */
.bo-iso__bd { flex:none; font:700 10.5px var(--bo-font-num, system-ui); font-style:normal; height:20px; min-width:20px; padding:0 6px; border-radius:999px; display:inline-grid; place-items:center; background:#1f7a62; color:#fff; }
.bo-iso__bd svg { width:13px; height:13px; }
.bo-iso__bd.t-info { background:#2a6fb0; }
.bo-iso__bd.t-warn { background:#d9772f; }
/* une nouvelle reservation : l etiquette respire quelques secondes (jamais si mouvement reduit) */
.bo-iso__pill.is-pulse { animation:bo-iso-pulse 1.1s ease-in-out 4; }
@keyframes bo-iso-pulse { 0%,100% { box-shadow:var(--gl-sh), 0 0 0 0 rgba(226,179,84,.0); } 50% { box-shadow:var(--gl-sh), 0 0 0 9px rgba(226,179,84,.45); } }
@media (prefers-reduced-motion:reduce) { .bo-iso__pill.is-pulse { animation:none; } }
/* la vie de la carte (12/10 v4) : transformations et opacite seulement, rien en JS image par image.
   Arretee quand l onglet est cache (.is-paused) et coupee si le mouvement reduit est demande. */
.bi-wave { stroke-opacity:.5; animation:bi-shimmer 3.6s ease-in-out infinite alternate; }
.bi-wave:nth-of-type(3n) { animation-duration:4.4s; animation-delay:-1.2s; }
.bi-wave:nth-of-type(3n+1) { animation-duration:5.1s; animation-delay:-2.5s; }
.bi-boat.is-quai { animation:bi-bob 4.2s ease-in-out infinite alternate; }
.bi-boat.is-quai:nth-of-type(2n) { animation-duration:3.6s; animation-delay:-1.4s; }
.bi-ribbon { transform-box:fill-box; transform-origin:0 0; animation:bi-flutter .5s ease-in-out infinite alternate; }
.bi-leaf { transform-box:fill-box; transform-origin:0 0; animation:bi-sway 3.4s ease-in-out infinite alternate; }
.bi-wake { animation:bi-foam 1.6s ease-in-out infinite alternate; }
.bi-hl { animation:bi-brass 1.8s ease-in-out infinite alternate; }
.bi-cloud { animation:bi-drift 38s linear infinite; }
.bi-cloud--1 { animation-duration:52s; animation-delay:-20s; }
.bi-gull { animation:bi-fly 26s linear infinite; }
.bi-gull--1 { animation-duration:34s; animation-delay:-14s; }
.bi-lamp { animation:bi-lamp 2.6s ease-in-out infinite alternate; }
.bo-iso__pill.is-soft { animation:bo-iso-pulse 2.4s ease-in-out infinite; }
@keyframes bi-shimmer { from { stroke-opacity:.08; transform:translateX(0); } to { stroke-opacity:.6; transform:translateX(6px); } }
@keyframes bi-flutter { from { transform:skewY(0deg); } to { transform:skewY(14deg); } }
@keyframes bi-sway { from { transform:rotate(-3deg); } to { transform:rotate(4deg); } }
@keyframes bi-foam { from { opacity:.45; } to { opacity:.9; } }
@keyframes bi-brass { from { stroke-opacity:.35; } to { stroke-opacity:1; } }
@keyframes bi-drift { from { transform:translate(-160px,-40px); } to { transform:translate(260px,70px); } }
@keyframes bi-fly { from { transform:translate(-320px,60px); } 50% { transform:translate(0,-20px); } to { transform:translate(320px,60px); } }
@keyframes bi-lamp { from { opacity:.85; } to { opacity:1; } }
.bo-iso.is-paused *, .bo-iso.is-paused *::before, .bo-iso.is-paused *::after { animation-play-state:paused !important; }
@media (prefers-reduced-motion:reduce) { .bi-wave, .bi-ribbon, .bi-leaf, .bi-wake, .bi-hl, .bi-cloud, .bi-gull, .bi-lamp, .bi-boat, .bo-iso__pill.is-soft { animation:none !important; } }
.bi-blink { transform-box:fill-box; transform-origin:center; animation:bi-blink 5s steps(1) infinite; }
.bi-blink--1 { animation-delay:-1.3s; } .bi-blink--2 { animation-delay:-2.9s; animation-duration:6.2s; } .bi-blink--3 { animation-delay:-4.1s; animation-duration:4.4s; }
@keyframes bi-blink { 0%, 94% { transform:scaleY(1); } 95%, 98% { transform:scaleY(.1); } }
@media (prefers-reduced-motion:reduce) { .bi-blink { animation:none !important; } }
/* 13/10 : les marcheurs (bo-monde-iso.js les bouge le long des chemins ; ici, le travail et le salut) */
.bo-iso__walk { pointer-events:none; }
.bi-w.is-work .bi-w__a, .bi-w.is-wave .bi-w__a { transform-origin:3px -14px; transform-box:view-box; animation:bi-wave 1.1s ease-in-out infinite alternate; }
.bi-w.is-wave .bi-w__a { animation-duration:.6s; }
.bo-iso.is-paused .bi-w * { animation-play-state:paused; }
/* 13/10 : le popover en verre, pres de l objet tape (feuille du bas sur telephone) */
.bo-iso__pop { position:absolute; z-index:6; width:min(320px, calc(100% - 16px)); max-height:min(70%, 460px); overflow:auto; border-radius:16px; padding:10px 12px 12px;
  background:var(--gl-bg-h); -webkit-backdrop-filter:blur(14px) saturate(1.3); backdrop-filter:blur(14px) saturate(1.3);
  border:1px solid var(--gl-line); box-shadow:0 10px 30px rgba(10,40,40,.22); color:var(--gl-text); font:14px/1.35 var(--bo-font, system-ui); }
.bo-iso__pop.is-bas { left:8px !important; right:8px; bottom:8px; top:auto !important; width:auto; max-height:62%; border-radius:18px 18px 14px 14px; }
.bo-iso__pop-h { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; }
.bo-iso__pop-h b { font:600 15px/1.2 var(--bo-num, var(--bo-font, system-ui)); }
.bo-iso__pop-x { border:0; background:rgba(23,54,43,.08); color:inherit; width:30px; height:30px; border-radius:50%; font-size:20px; line-height:1; cursor:pointer; }
.bo-iso__pop-b > * + * { margin-top:8px; }
html[data-theme="dark"] .bo-iso__pop-x { background:rgba(255,255,255,.1); }
@media (prefers-reduced-transparency: reduce) { .bo-iso__pop { background:var(--gl-solid); backdrop-filter:none; -webkit-backdrop-filter:none; } }
@media (prefers-reduced-motion:reduce) { .bi-w * { animation:none !important; } }
/* la feuille du bas reste au dessus de la barre de navigation de la coque */
.bo-iso--plein .bo-iso__pop.is-bas { bottom:calc(92px + env(safe-area-inset-bottom, 0px)); max-height:52%; }
