:root{
  /* Jetons du thème. Valeurs par défaut du gabarit (aucun flash) ; themes/<dossier>/theme.json les remplace au démarrage (src/main.js, ui.applyTheme). Voir docs/Theme.md. */
  --brand:#0b7a1f; --brand-strong:#0a5c1f; --brand-soft:#e6f3e4; --brand-line:#b9dbb6; --on-brand:#fff;
  --accent:#c2410c; --accent-soft:#fff0e0;
  --water:#0a5ccf; --water-soft:#e3eefc; --water-line:#b8d0f2;
  --sun:#f0e000; --sun-soft:#fdf3c4; --sun-line:#ead98a; --sun-ink:#6b5000;
  --bg:#f7f4ee; --surface:#fffdf9; --surface-solid:#fff; --surface-sunken:#f3efe7;
  --ink:#1d2a22; --muted:#3f4d44; --night:#14231a;
  --line:rgba(40,50,40,.14); --line-strong:rgba(40,50,40,.3);
  --success:#0b7a1f; --warning:#8a5a00; --warning-soft:#fdf3c4; --danger:#b3261e; --danger-soft:#fde8e6;
  --r-sm:8px; --r-md:12px; --r-lg:16px; --r-pill:999px;
  --shadow-panel:0 1px 2px rgba(20,35,26,.08),0 8px 28px rgba(20,35,26,.18); --shadow-fab:0 2px 10px rgba(20,35,26,.25);
  --font-sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  /* verre liquide (jetons theme.json « glass ») */
  --glass-bg:rgba(255,255,255,.38); --glass-bg-text:rgba(255,253,249,.50); --glass-blur:26px; --glass-saturate:170%; --glass-radius:22px;
  --muted-glass:color-mix(in srgb,var(--muted) 70%,#000); --brand-strong-glass:color-mix(in srgb,var(--brand-strong) 68%,#000); --danger-glass:color-mix(in srgb,var(--danger) 58%,#000); --accent-glass:color-mix(in srgb,var(--accent) 66%,#000); /* textes secondaires / de marque / d'alerte un cran plus foncés sur verre translucide */
  --glass-tone:contrast(.55) brightness(1.25); --glass-tone-light:contrast(.75) brightness(1.1); /* relève les fonds sombres (nuit) pour garder le contraste du texte malgré la transparence */
  --glass-edge-light:rgba(255,255,255,.95); --glass-edge-dark:rgba(20,35,26,.24); --glass-shine:rgba(255,255,255,.5);
  --glass-shadow:0 12px 36px rgba(11,122,31,.18),0 2px 8px rgba(20,35,26,.14);
  --glass-blur-light:12px; --glass-bg-light:rgba(255,255,255,.50); --glass-bg-text-light:rgba(255,253,249,.62);
  --glass-hover:rgba(255,255,255,.66); --glass-field:rgba(255,255,255,.52);
  /* dérivés (suivent les jetons) */
  --panel:color-mix(in srgb,var(--surface) 94%,transparent); --focus:var(--water); --shadow:var(--shadow-panel);
  --sat:env(safe-area-inset-top,0px); --sar:env(safe-area-inset-right,0px); --sab:env(safe-area-inset-bottom,0px); --sal:env(safe-area-inset-left,0px);
  --foot:26px;
  /* grille de placement (jetons génériques, valables pour toute commune) */
  --m:12px; --gap:8px; --tap:40px; --dock-w:340px; --right-w:300px; --corner-w:182px; --title-h:112px; --rb:166px;
  --sim:#4b3fa8; --sim-soft:#ece9fb; --sim-line:#c9c2f0;
  --ring:0 0 0 1px var(--line),0 1px 3px rgba(20,35,26,.12),inset 0 1px 0 rgba(255,255,255,.9);
}
@media (min-width:1280px){:root{--m:16px}}
@media (min-width:1360px){:root{--rb:104px}}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
[hidden]{display:none!important}
.slot:empty{display:none}
html,body{margin:0;height:100%;height:100dvh;overflow:hidden;background:#9db9d3;font:14px/1.4 var(--font-sans);color:var(--ink);overscroll-behavior:none;-webkit-text-size-adjust:100%;touch-action:manipulation}
#scene{position:fixed;inset:0;width:100%;height:100%;display:block;outline:none;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
#ui{position:fixed;inset:0;pointer-events:none;-webkit-user-select:none;user-select:none}
#ui>*{pointer-events:auto}
#ui .body,#ui .card,#ui .dbody p,#ui .rule{-webkit-user-select:text;user-select:text}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:var(--r-sm)}
:is(button,input,select,a,summary,[tabindex]):focus-visible{box-shadow:0 0 0 6px rgba(255,255,255,.85)}
/* ---------- Grille : trois colonnes d'ancrage (aucune pile n'a de contexte d'empilement : les tiroirs mobiles restent au-dessus du voile) ---------- */
.dock{position:absolute;display:flex;flex-direction:column;gap:var(--gap);pointer-events:none!important}
.dock>*{pointer-events:auto}
#dockL{left:calc(var(--sal) + var(--m));top:calc(var(--sat) + var(--m));width:var(--dock-w);max-height:calc(100dvh - var(--m) - var(--foot) - 210px)}
#dockR{right:calc(var(--sar) + var(--m));top:calc(var(--sat) + var(--m));width:var(--right-w);align-items:flex-end}
#dockBL{left:calc(var(--sal) + var(--m));bottom:calc(var(--foot) + var(--gap));align-items:flex-start}
/* ---------- Verre liquide : mode body[data-glass=off|light|full] (Réglages), fond de repli opaque sans backdrop-filter ---------- */
body{--g-bg:var(--glass-bg);--g-bgt:var(--glass-bg-text);--g-blur:var(--glass-blur);--g-sat:var(--glass-saturate);--g-tone:var(--glass-tone);--g-rad:var(--glass-radius)}
body[data-glass=light]{--g-bg:var(--glass-bg-light);--g-bgt:var(--glass-bg-text-light);--g-blur:var(--glass-blur-light);--g-sat:125%;--g-tone:var(--glass-tone-light)}
body[data-glass=off]{--g-bg:var(--panel);--g-bgt:var(--panel);--g-blur:0px;--g-sat:100%;--g-tone:brightness(1);--g-rad:var(--r-lg)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){body[data-glass]{--g-bg:var(--panel);--g-bgt:var(--panel)}}
.panel,.fab,.pill{--g-fill:var(--g-bg)}
#layers,#info,#rules,#settings,#bar,#title,#tools,#scale{--g-fill:var(--g-bgt)}
.fab{position:relative}
.panel,.fab,.pill{--muted:var(--muted-glass);--brand-strong:var(--brand-strong-glass);--danger:var(--danger-glass);--accent:var(--accent-glass);background:linear-gradient(135deg,var(--glass-shine) 0%,transparent 42%),var(--g-fill);-webkit-backdrop-filter:blur(var(--g-blur)) saturate(var(--g-sat)) var(--g-tone);backdrop-filter:blur(var(--g-blur)) saturate(var(--g-sat)) var(--g-tone);border:1px solid transparent;border-radius:var(--g-rad);text-shadow:0 0 5px rgba(255,255,255,.55);
  box-shadow:var(--glass-shadow),inset 0 1px 0 rgba(255,255,255,.75),inset 0 -1px 0 rgba(20,35,26,.05),inset 0 0 24px rgba(255,255,255,.22)}
/* bord lumineux : blanc en haut à gauche, plus sombre en bas à droite */
.panel::before,.fab::before,.pill::before{content:"";position:absolute;inset:-1px;padding:1px;border-radius:inherit;pointer-events:none;background:linear-gradient(145deg,var(--glass-edge-light),rgba(255,255,255,.14) 36%,rgba(255,255,255,.06) 64%,var(--glass-edge-dark));-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
body[data-glass=off] :is(.panel,.fab,.pill){-webkit-backdrop-filter:none;backdrop-filter:none;border-color:var(--line);box-shadow:var(--shadow-panel);background:var(--g-fill)}
body[data-glass=off] :is(.panel,.fab,.pill)::before{display:none}
/* halo clair du texte sur verre : pas sur les boutons pleins (texte blanc) ni en mode « off » (fond opaque) */
:is(.panel,.fab,.pill) :is(.btn.strong,.btn.on,.chip.on,[aria-pressed=true],[aria-expanded=true]),.fab[aria-pressed=true],.fab[aria-expanded=true],body[data-glass=off] :is(.panel,.fab,.pill){text-shadow:none}
#minimap{border-color:rgba(255,255,255,.7)}
.panel{transition:transform .26s cubic-bezier(.2,.8,.2,1),opacity .22s}
button{font:inherit;color:inherit;cursor:pointer}
.btn{border:1px solid rgba(255,255,255,.75);background:linear-gradient(180deg,rgba(255,255,255,.8),rgba(255,255,255,.42));box-shadow:0 0 0 1px var(--line),0 1px 3px rgba(20,35,26,.12),inset 0 1px 0 rgba(255,255,255,.9);border-radius:var(--r-pill);padding:6px 10px;white-space:nowrap;font-weight:500;transition:background .12s,border-color .12s}
.btn:hover{border-color:#fff;background:linear-gradient(180deg,rgba(255,255,255,.98),rgba(255,255,255,.72))}
.btn.strong{background:linear-gradient(180deg,color-mix(in srgb,var(--brand) 92%,#000),color-mix(in srgb,var(--brand) 82%,#000));color:var(--on-brand);border-color:color-mix(in srgb,var(--brand) 70%,#fff);font-weight:600;box-shadow:0 0 0 1px var(--brand-strong),inset 0 1px 0 rgba(255,255,255,.35)}
.btn.strong:hover{background:var(--brand-strong);border-color:var(--brand-strong)}
.btn.on,.btn[aria-pressed=true]{background:linear-gradient(180deg,color-mix(in srgb,var(--brand) 84%,#fff),var(--brand));color:var(--on-brand);border-color:color-mix(in srgb,var(--brand) 70%,#fff);box-shadow:0 0 0 1px var(--brand-strong),inset 0 1px 0 rgba(255,255,255,.35)}
.btn.small{padding:2px 10px;font-size:12px}
.ico{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
a{color:var(--water)}

/* ---------- Titre : identité (logo, nom, accès aux règles) ---------- */
#title{position:relative;flex:none;height:var(--title-h);padding:8px 8px 8px 8px;display:flex;flex-direction:column;justify-content:space-between;gap:8px;z-index:3}
#title .trow{display:flex;gap:8px;align-items:center;justify-content:space-between}
#title .brand{display:flex;gap:10px;align-items:center;min-width:0}
#title .txt{min-width:0}
#title h1{margin:0;font-size:17px;font-weight:700;letter-spacing:-.1px;line-height:1.2}
#title h1 .short{display:none}
#title small{color:var(--muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.3;font-size:12px}
#rulesBtn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:var(--tap)}
#rulesBtn .ico{width:18px;height:18px}
/* pastille de marque : logo (≤ 48 px, source à basse résolution) ou initiales sans logo */
.mark{width:48px;height:48px;flex:none;display:grid;place-items:center;border-radius:var(--r-md);background:var(--surface-solid);border:1px solid var(--line);overflow:hidden}
.mark img{width:100%;height:100%;object-fit:contain;display:block}
.mark.initials{background:var(--brand);border-color:var(--brand);color:var(--on-brand);font-weight:700;font-size:16px;letter-spacing:.5px}

/* ---------- Tiroirs (desktop : panneaux flottants) ---------- */
.dhead{display:flex;align-items:center;justify-content:space-between;gap:8px}
.dhead h2{margin:0;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;color:var(--brand-strong)}
.dhead .close,#info .close{border:0;background:none;color:var(--muted);width:var(--tap);height:var(--tap);display:grid;place-items:center;border-radius:50%;flex:none}
.dhead .close:hover,#info .close:hover{background:var(--glass-hover);color:var(--ink)}
.dbody{overflow:auto;-webkit-overflow-scrolling:touch}
#layers{position:relative;width:100%;max-height:calc(100vh - var(--m) - var(--tap) - 2*var(--gap) - var(--rb) - 8px);max-height:calc(100dvh - var(--m) - var(--tap) - 2*var(--gap) - var(--rb) - 8px);display:flex;flex-direction:column;padding:8px 12px 10px;z-index:3}
body.layers-hidden #layers{display:none}
#layers .dhead .close{display:none}
#layers .ltools{display:grid;gap:6px;margin:6px 0 4px}
#layers .two{display:grid;grid-template-columns:1fr 1fr;gap:6px;align-items:center}
#layers .masterRow{display:flex;gap:8px;align-items:center;font-size:13px}
#layers .llist{display:block}
#layers .row{display:flex;align-items:center;gap:8px;padding:5px 6px;min-height:32px;margin:0 -6px;border-radius:var(--r-sm);cursor:pointer}
#layers .row:hover{background:var(--brand-soft)}
#layers .row.off:hover{background:none}
#layers .row.sub{padding-left:28px;font-size:13px}
#layers .row.off{opacity:.55;cursor:default}
#layers .row2{display:flex;gap:8px;align-items:center;font-size:13px;padding-left:28px}
#layers .row2 input{flex:1;accent-color:var(--accent)}
#layers .swatch,.chip .swatch{width:10px;height:10px;border-radius:50%;flex:none;border:1px solid rgba(0,0,0,.3)}
#layers input[type=checkbox],#masterCb{accent-color:var(--brand);width:16px;height:16px;flex:none}
#layers .hint{font-size:12px;color:var(--muted);margin:4px 0 0 22px}
#layers .legend{display:flex;flex-wrap:wrap;gap:4px;padding:2px 0 4px 22px}
.chip{display:inline-flex;align-items:center;gap:4px;border:1px solid rgba(255,255,255,.75);box-shadow:0 0 0 1px var(--line);background:linear-gradient(180deg,rgba(255,255,255,.8),rgba(255,255,255,.45));border-radius:var(--r-pill);padding:1px 8px 1px 5px;font-size:12px}
.chip:hover{background:var(--glass-hover)}
.chip.on{background:var(--water);color:#fff;border-color:var(--water)}
/* notes : cartes teintées pastel (calques : ambre ; fiche : eau ; réglages : texte discret) */
.note{font-size:12px;color:var(--muted);margin:4px 0;line-height:1.4}
/* notes : texte discret sans cadre ni fond (icône « i », 2 lignes au plus, texte complet au survol ou au toucher) */
.note.nt{display:flex;gap:6px;align-items:flex-start;cursor:help}
.note.nt .ico{width:13px;height:13px;margin-top:2px;stroke-width:2;opacity:.75}
.note.nt span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.note.nt.open span{display:block}
#layers .note{margin:2px 0 4px 22px}
#info .note{margin:6px 0 0}
#rules{position:absolute;left:calc(var(--sal) + var(--m));top:calc(var(--sat) + var(--m) + var(--title-h) + var(--gap));bottom:calc(var(--foot) + var(--gap));width:min(440px,calc(100vw - 24px));padding:14px;display:none;flex-direction:column;z-index:6}
#rules.open{display:flex}
#settings{position:absolute;right:calc(var(--sar) + var(--m));top:calc(var(--sat) + var(--m) + var(--tap) + 8px + var(--gap));width:320px;max-height:calc(100dvh - var(--m) - var(--tap) - 8px - var(--gap) - var(--foot) - 24px);padding:12px 14px;display:none;flex-direction:column;z-index:6}
#settings.open{display:flex}
#settings h4{margin:14px 0 4px;font-size:13px;color:var(--brand-strong)}
#settings select{width:100%;font:inherit;padding:8px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--glass-field)}
#settings .btn{margin-top:8px;width:100%}
#scrim{position:fixed;inset:0;background:rgba(10,20,15,.4);display:none;z-index:7}

/* ---------- Outils (barre en verre à droite) ---------- */
#tools{position:relative;display:flex;align-items:center;gap:2px;padding:4px;border-radius:var(--r-pill);z-index:4}
.fab{position:relative;width:var(--tap);height:var(--tap);display:grid;place-items:center;padding:0;border-radius:50%;color:var(--ink);flex:none;border:1px solid transparent}
.fab.m-only{display:none}
.fab:hover,.pill:hover{--g-fill:var(--glass-hover)}
.fab[aria-pressed=true],.fab[aria-expanded=true]{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}
#compass .dial{position:absolute;left:50%;top:50%;width:34px;height:34px;margin:-17px 0 0 -17px;border:1.5px solid var(--line-strong);border-radius:50%;transition:transform .08s linear}
#compass .n{position:absolute;left:50%;top:1px;transform:translateX(-50%);font-weight:700;font-size:9px;line-height:10px;color:var(--danger)}
#compass .needle{position:absolute;left:50%;top:12px;width:0;height:0;margin-left:-4px;border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:9px solid var(--danger)}
#compass .needle2{position:absolute;left:50%;top:21px;width:0;height:0;margin-left:-4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:9px solid #8a948e}
@media (min-width:900px){
  /* dans la barre en verre, les boutons n'ont pas leur propre verre : survol et état actif seulement */
  #tools .fab{background:none;box-shadow:none;border:0;-webkit-backdrop-filter:none;backdrop-filter:none;transition:background .12s,color .12s}
  #tools .fab::before{display:none}
  #tools .fab:hover{background:var(--glass-hover);box-shadow:0 0 0 1px var(--line)}
  #tools .fab[aria-pressed=true],#tools .fab[aria-expanded=true]{background:var(--brand);color:var(--on-brand)}
  #tools .fab[aria-pressed=true]:hover,#tools .fab[aria-expanded=true]:hover{background:var(--brand-strong)}
  #tools #compass::after,#tools #foldAll::before{content:"";position:absolute;top:9px;bottom:9px;width:1px;background:var(--line-strong);opacity:.5}
  #tools #compass::after{right:-3px}#tools #foldAll::before{left:-3px}
  #tools #foldAll{margin-left:2px}
}

/* ---------- Barre du bas : caméra (une rangée défilable) puis temps ---------- */
#bar{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--foot) + var(--gap));display:flex;flex-direction:column;gap:6px;padding:8px 10px;width:min(740px,calc(100vw - 2*(var(--corner-w) + var(--m))));z-index:2}
#bar .vrow{display:flex;gap:8px;align-items:center}
#viewsWrap{position:relative;display:flex;align-items:center;gap:8px;flex:1;min-width:0}
#viewsWrap .bico,#timeRow .sun{display:grid;place-items:center;flex:none;color:var(--muted)}
#viewsWrap .bico .ico,#timeRow .sun .ico{width:20px;height:20px}
#timeRow .sun{color:var(--accent)}
#views{display:flex;flex:1;min-width:0;gap:6px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;scrollbar-width:none;padding:2px 1px;-webkit-overflow-scrolling:touch}
#views::-webkit-scrollbar{display:none}
#views .btn{flex:none;scroll-snap-align:start;min-height:var(--tap)}
#views .btn:focus-visible{outline-offset:-3px;box-shadow:none}
#viewsWrap.fade-r #views{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 30px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 30px),transparent)}
#viewsWrap.fade-l #views{-webkit-mask-image:linear-gradient(90deg,transparent,#000 30px);mask-image:linear-gradient(90deg,transparent,#000 30px)}
#viewsWrap.fade-l.fade-r #views{-webkit-mask-image:linear-gradient(90deg,transparent,#000 30px,#000 calc(100% - 30px),transparent);mask-image:linear-gradient(90deg,transparent,#000 30px,#000 calc(100% - 30px),transparent)}
#barRight{display:flex;flex:none;padding-left:8px;border-left:1px solid var(--line-strong)}
#modeBtn{display:flex;align-items:center;gap:6px;min-height:var(--tap);max-width:210px}
#modeBtn .ico{width:18px;height:18px}
#timeRow{display:flex;gap:10px;align-items:center;min-height:var(--tap)}
#timeRow input[type=range]{flex:1;min-width:90px;height:var(--tap);margin:0;accent-color:var(--accent)}
#timeRow input[type=date]{flex:none;width:142px;height:var(--tap);font:inherit;font-size:13px;border:1px solid var(--line-strong);border-radius:var(--r-md);padding:0 8px;background:var(--glass-field)}
#timeLabel{min-width:0;white-space:nowrap;font-size:13px;font-variant-numeric:tabular-nums}
#joy,#runBtn{display:none}

/* ---------- Échelle, minimap (coin bas gauche, empilées sans chevauchement) ---------- */
#scale{position:relative;padding:4px 8px;font-size:12px;display:none}
#scale .bar{height:6px;border:2px solid var(--ink);border-top:none;margin-bottom:2px}
#minimap{position:relative;width:170px;height:150px;padding:0;cursor:crosshair;touch-action:none;display:block}
#help{position:absolute;left:50%;transform:translateX(-50%);top:calc(var(--sat) + var(--m));padding:6px 10px;font-size:12px;color:var(--muted);display:none;max-width:230px}

/* ---------- Fiche d'info ---------- */
#info{position:absolute;top:calc(var(--sat) + var(--m));right:calc(var(--sar) + var(--m) + var(--right-w) + var(--gap));width:min(390px,max(300px,calc(100vw - 2*var(--m) - var(--dock-w) - var(--right-w) - 2*var(--gap))));max-height:calc(100dvh - var(--m) - var(--rb) - var(--gap));display:none;flex-direction:column;padding:10px 14px 12px;z-index:5}
#info.show{display:flex}
#info .grab,#info .grow{display:none}
#info .ihead{display:flex;gap:6px;align-items:flex-start}
#info .itxt{flex:1;min-width:0}
#info h3{margin:0 0 2px;font-size:16px;font-weight:700}
#info .sub{color:var(--muted);margin-bottom:6px;font-size:13px}
#info .body{overflow:auto;-webkit-overflow-scrolling:touch;flex:1;min-height:0}
#info .body section{border-top:1px solid var(--line);padding-top:6px;margin-top:8px}
#info .body section:first-child{border-top:none;margin-top:0;padding-top:0}
#info dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:3px 10px}
#info dt{color:var(--muted)}
#info dd{margin:0;word-break:break-word}
#info h4{margin:0 0 4px;font-size:13px;color:var(--brand-strong)}
#info p{margin:4px 0}
#info .rules-title{font-weight:600;font-size:12px;margin:6px 0 2px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
.rule{margin:4px 0 6px;padding:6px 10px;background:color-mix(in srgb,var(--brand-soft) 72%,transparent);border-left:3px solid var(--brand);border-radius:var(--r-sm)}
.rule p{margin:2px 0;font-size:13px}.rule .ref{font-size:12px;color:var(--muted)}
details summary{cursor:pointer;color:var(--brand-strong);font-size:13px;margin:4px 0}
.links{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:4px;font-size:13px}
#tip{position:fixed;pointer-events:none!important;background:color-mix(in srgb,var(--night) 94%,transparent);color:#fff;padding:3px 8px;border-radius:var(--r-sm);font-size:12px;display:none;max-width:260px;z-index:5}

/* ---------- Règles et documents ---------- */
#rules h2{font-size:15px}
#rules .close{width:var(--tap);height:var(--tap)}
#rules .warn{font-size:12px;color:var(--sun-ink);background:color-mix(in srgb,var(--sun-soft) 70%,transparent);border:1px solid var(--sun-line);border-radius:var(--r-md);padding:6px 10px;margin:6px 0;line-height:1.35}
#rules .warn.strong{font-weight:600}
#rules .tabs{display:flex;gap:6px;margin:6px 0;flex-wrap:wrap}
#rules .tools{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:6px}
#rules .tools input{flex:1 1 180px;font:inherit;padding:6px 12px;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:var(--glass-field)}
#rules .tools select{font:inherit;padding:5px 8px;border:1px solid var(--line-strong);border-radius:var(--r-md);max-width:190px;background:var(--glass-field)}
#rules .count{font-size:12px;color:var(--muted)}
#rules .dbody{flex:1;min-height:0}
#rules .card{background:var(--glass-field);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px;margin:8px 0}
#rules .card.zone{background:color-mix(in srgb,var(--brand-soft) 70%,transparent);border-color:var(--brand-line)}
#rules .card[hidden],#rules .list[hidden]{display:none}
#rules .card h5{margin:3px 0;font-size:14px}
#rules .card p{margin:3px 0;font-size:13px}
#rules .card .voc{color:var(--brand);font-weight:600}
#rules .meta{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--muted)}
#rules .badge{background:var(--brand);color:var(--on-brand);border-radius:var(--r-pill);padding:1px 8px;font-size:12px}
#rules .kw{font-size:12px;color:var(--muted)}

/* ---------- Pied de page ---------- */
#footer{position:absolute;left:0;right:0;bottom:0;min-height:var(--foot);padding:5px 12px calc(5px + var(--sab));font-size:12px;line-height:16px;color:#fff;background:color-mix(in srgb,var(--night) 74%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);text-align:center;z-index:2}
#footer span{display:block}
#footer{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}#footer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#footer.open{white-space:normal;overflow:visible;z-index:9}#footer.open span{white-space:normal}

/* ---------- Progression / erreurs ---------- */
#loading{position:absolute;inset:0;background:var(--bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;z-index:20;transition:opacity .5s;padding:24px;text-align:center}
#loading.done{opacity:0;pointer-events:none}
#loading .lt{font-size:20px;font-weight:700}
#loading .mark{width:56px;height:56px}
#loading .tag{color:var(--muted);margin-top:-8px}
#loading .ltxt{font-size:16px;min-height:1.4em}
#loading .pbar{width:min(360px,80vw);height:10px;border-radius:5px;background:var(--brand-line);overflow:hidden}
#loading .pbar i,#topProgress i{display:block;height:100%;width:0;background:var(--brand);transition:width .25s}
#loading .spin{width:38px;height:38px;border:4px solid var(--brand-line);border-top-color:var(--brand);border-radius:50%;animation:sp 1s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){#loading .spin{animation:none}}
#topProgress{position:absolute;left:50%;transform:translateX(-50%);top:var(--sat);width:min(420px,70vw);height:22px;background:var(--panel);border:1px solid var(--line);border-top:none;border-radius:0 0 var(--r-md) var(--r-md);overflow:hidden;display:none;font-size:12px;text-align:center;z-index:4}
#topProgress i{position:absolute;left:0;top:0;bottom:0;opacity:.35}
#topProgress span{position:relative;line-height:21px}
#ctxlost{position:absolute;inset:0;background:rgba(15,25,20,.72);display:none;align-items:center;justify-content:center;z-index:30;padding:24px}
#ctxlost.show{display:flex}
#ctxlost .box{background:var(--surface-solid);border-radius:var(--r-lg);padding:20px;max-width:360px;text-align:center;font-size:16px}
#ctxlost .btn{min-height:44px;padding:8px 18px;font-size:16px}

/* ---------- Cibles tactiles >= 44 px (pointeur grossier) ; >= 40 px au pointeur fin ---------- */
@media (pointer:coarse){
  :root{--tap:44px}
  .btn,.chip,select,input[type=date],#settings select{min-height:44px}
  .btn{padding:8px 14px}
  #layers .row,#layers .masterRow{min-height:44px;gap:10px}
  #layers input[type=checkbox],#masterCb{width:22px;height:22px}
  #layers .row2{min-height:44px}
  input[type=range]{min-height:44px}
  .chip{padding:4px 12px 4px 8px}
  #rules .tools input{min-height:44px}
  details summary{min-height:36px;display:flex;align-items:center}
}

/* ---------- Mobile et tablette : tiroirs, feuille basse, colonne d'outils ronds ---------- */
@media (max-width:899px){
  :root{--m:8px;--tap:44px}
  body{font-size:15px}
  #dockL{left:calc(var(--sal) + 8px);top:calc(var(--sat) + 8px);right:calc(var(--sar) + 64px);width:auto;max-height:none}
  #dockR{right:calc(var(--sar) + 8px);top:calc(var(--sat) + 8px);width:auto}
  #title{height:auto;min-height:48px;padding:6px 4px 6px 6px;flex-direction:row;align-items:center}
  #title .trow{flex:1;min-width:0}
  #title .mark{width:36px;height:36px;border-radius:var(--r-sm)}
  #title .mark.initials{font-size:13px}
  #title h1{font-size:16px}#title h1 .long{display:none}#title h1 .short{display:inline}
  #title small,#rulesBtn,#help{display:none!important}
  /* colonne d'outils : boutons ronds en verre, pas de barre */
  #tools{flex-direction:column;align-items:center;gap:8px;padding:0;border-radius:0;background:none;box-shadow:none;border:0;-webkit-backdrop-filter:none;backdrop-filter:none}
  #tools::before{display:none}
  .fab,.fab.m-only{display:grid}
  .fab{width:48px;height:48px;border:1px solid transparent}
  #foldAll::before,#compass::after{display:none}
  body.drawer-open #tools{z-index:1}
  /* barre du bas : vues défilables */
  #bar{left:0;right:0;transform:none;width:auto;bottom:calc(var(--foot) + var(--sab));border-radius:14px 14px 0 0;padding:8px calc(var(--sar) + 8px) 8px calc(var(--sal) + 8px);z-index:2}
  #viewsWrap .bico{display:none}
  #barRight,#bar>#timeRow{display:none}
  #timeSlot #timeRow{display:flex;flex-wrap:wrap}
  #timeSlot .sun{display:none}
  #timeSlot input[type=range]{min-width:0;flex:1 1 100%}
  #timeLabel{min-width:0;flex:1 1 100%;font-size:15px}
  #timeRow input[type=date]{width:auto;min-height:44px}
  /* tiroirs */
  #layers,#rules,#settings{z-index:8}
  .drawer{position:fixed!important;top:0!important;bottom:0!important;max-height:none!important;height:100dvh;border-radius:0;padding:calc(var(--sat) + 8px) 12px calc(var(--sab) + 8px)!important;display:flex!important;flex-direction:column;z-index:8;visibility:hidden;transition:transform .22s ease,visibility 0s linear .22s;will-change:transform}
  .drawer.open{visibility:visible;transform:none!important;transition:transform .22s ease}
  .drawer.right{right:0!important;left:auto!important;width:min(92vw,400px)!important;border-radius:16px 0 0 16px;transform:translateX(105%);padding-right:calc(var(--sar) + 12px)!important}
  .drawer.left{left:0!important;right:auto!important;width:min(100vw,460px)!important;border-radius:0 16px 16px 0;transform:translateX(-105%);padding-left:calc(var(--sal) + 12px)!important}
  body.drawer-open #scrim{display:block}
  #layers .dhead .close{display:grid}
  .dhead h2{font-size:15px}
  #layers .dbody{flex:1;min-height:0}
  #settings .dbody{flex:1}
  #settings .btn,#settings select{width:100%}
  /* feuille basse */
  #info{left:0;right:0;top:auto;bottom:0;width:auto;max-height:46dvh;border-radius:16px 16px 0 0;padding:4px calc(var(--sar) + 14px) calc(var(--sab) + 10px) calc(var(--sal) + 14px);z-index:6;transition:max-height .2s}
  #info.expanded{max-height:88dvh}
  #info .grab{display:block;width:100%;height:20px;position:relative;touch-action:none;cursor:grab}
  #info .grab::after{content:"";position:absolute;left:50%;top:8px;width:44px;height:5px;margin-left:-22px;border-radius:3px;background:var(--line-strong)}
  #info .grow{display:grid}
  #info.expanded .grow .ico{transform:rotate(180deg)}
  body.sheet-open #bar,body.sheet-open #dockBL{visibility:hidden}
  #dockBL{left:calc(var(--sal) + 8px);bottom:calc(var(--foot) + var(--sab) + 74px)}
  #minimap{width:120px;height:105px}
  .note,.warn,.hint,.kw,.meta,.ref,.chip,#layers .hint,#rules .warn,#rules .count,#rules .badge,#rules .kw,#info .sub,#layers .row.sub,#layers .row2,.rule .ref,.links{font-size:14px!important}
  #footer{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;padding-left:calc(var(--sal) + 10px);padding-right:calc(var(--sar) + 10px)}
  #footer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  #footer.open{white-space:normal;overflow:visible;z-index:9}#footer.open span{white-space:normal}
  /* joystick (mode marche) */
  body.walking #joy{display:block;position:absolute;left:calc(var(--sal) + 20px);bottom:calc(var(--foot) + var(--sab) + 84px);width:132px;height:132px;border-radius:50%;background:color-mix(in srgb,var(--surface) 55%,transparent);border:2px solid color-mix(in srgb,var(--ink) 45%,transparent);touch-action:none;z-index:3}
  #joy .knob{position:absolute;left:50%;top:50%;width:56px;height:56px;margin:-28px 0 0 -28px;border-radius:50%;background:color-mix(in srgb,var(--brand) 85%,transparent);border:2px solid #fff;box-shadow:0 2px 8px rgba(0,0,0,.35)}
  body.walking #runBtn{display:block;position:absolute;right:calc(var(--sar) + 18px);bottom:calc(var(--foot) + var(--sab) + 96px);width:72px;height:72px;border-radius:50%;padding:0;font-weight:600;z-index:3;touch-action:none}
  body.walking #dockBL{display:none}
}
@media (max-width:899px) and (min-width:700px) and (min-height:600px){ #minimap{display:block} }
@media (max-width:699px){ #minimap{display:none} }
@media (max-width:899px) and (max-height:520px){
  /* paysage téléphone : outils sur une colonne à droite, caméra en bas, partenaire à gauche des outils */
  #dockL{right:calc(var(--sar) + 64px)}
  #title{min-height:40px;padding:4px 6px 4px 5px}
  #title .mark{width:30px;height:30px}
  #title h1{font-size:15px}
  #tools{flex-flow:column wrap-reverse;gap:6px;max-height:calc(100dvh - var(--sat) - var(--sab) - 16px);align-content:flex-start}
  .fab{width:44px;height:44px}
  #compass{display:none}
  #footer{display:none}
  :root{--foot:0px}
  #bar{left:calc(var(--sal) + 8px);right:calc(var(--sar) + 180px);bottom:calc(var(--sab) + 6px);border-radius:14px;padding:6px 8px}
  .drawer.right{width:min(60vw,380px)!important}
  .drawer.left{width:min(70vw,440px)!important}
  #info{left:auto;right:0;top:0;bottom:0;width:min(46vw,420px);max-height:none;height:100dvh;border-radius:16px 0 0 16px;padding-top:calc(var(--sat) + 4px)}
  #info.expanded{width:min(70vw,640px);max-height:none}
  #info .grab{display:none}
  body.sheet-open #dockR{right:calc(min(46vw,420px) + 8px)}
  body.sheet-open #dockL{right:calc(min(46vw,420px) + 64px)}
  body.walking #joy{bottom:calc(var(--sab) + 70px);width:116px;height:116px}
  body.walking #runBtn{bottom:calc(var(--sab) + 80px);right:calc(var(--sar) + 70px)}
  #dockBL{bottom:calc(var(--sab) + 70px)}
}
@media (max-width:899px) and (max-height:520px){ #minimap{display:none} }

/* ---------- Panneaux rétractables : pastilles, poignées, masquage de l'interface ---------- */
.pill{position:absolute;display:flex;align-items:center;gap:6px;height:var(--tap);padding:0 14px 0 10px;font-weight:600;font-size:13px;color:var(--ink);cursor:pointer;z-index:4;border-radius:var(--r-pill);max-width:min(60vw,240px);
  opacity:0;visibility:hidden;pointer-events:none;transform:scale(.85);transition:opacity .2s,transform .26s cubic-bezier(.2,.8,.2,1),visibility 0s linear .26s}
.pill .ico{width:20px;height:20px}
.pill .lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pill.show{opacity:1;visibility:visible;pointer-events:auto;transform:none;transition-delay:.06s,.06s,0s}
/* pastilles des colonnes : dans le flux, à la place du panneau replié */
.dock .pill{position:relative;flex:none;align-self:flex-start}
#dockR .pill{align-self:flex-end}
.dock .pill:not(.show),.dock .panel.folded{display:none!important}
.pill[data-pill=info]{top:calc(var(--sat) + var(--m));right:calc(var(--sar) + var(--m) + var(--right-w) + var(--gap));transform-origin:top right}
.pill[data-pill=bar]{left:50%;bottom:calc(var(--foot) + var(--gap));transform:translateX(-50%) scale(.85)}
.pill[data-pill=bar].show{transform:translateX(-50%)}
/* pastille de secours quand l'interface est masquée (touche H) */
#uiToggle{display:none;top:calc(var(--sat) + var(--m));right:calc(var(--sar) + var(--m));left:auto;bottom:auto;transform:none;transform-origin:top right}
body.ui-hidden #uiToggle{display:flex;opacity:.85;visibility:visible;pointer-events:auto}
body.ui-hidden #uiToggle:hover,body.ui-hidden #uiToggle:focus-visible{opacity:1}
.cbtn{border:0;background:none;color:var(--muted);width:var(--tap);height:var(--tap);display:grid;place-items:center;border-radius:50%;flex:none;padding:0}
.cbtn:hover{background:var(--glass-hover);color:var(--ink)}
.cbtn .ico{width:18px;height:18px}
.cbtn[data-id=title] .ico{transform:rotate(-90deg)}
.cbtn[data-id=layers] .ico,.cbtn[data-id=info] .ico{transform:rotate(90deg)}
.cbtn[data-id=bar] .ico{transform:rotate(180deg)}
#bar .cbtn{position:absolute;left:50%;top:-24px;transform:translateX(-50%);width:64px;height:24px;border-radius:12px 12px 0 0;border:1px solid rgba(255,255,255,.7);border-bottom:0;background:var(--g-fill);color:var(--ink)}
#bar .cbtn .ico{width:16px;height:16px}
.panel.folded{opacity:0;visibility:hidden;pointer-events:none;transition:transform .26s cubic-bezier(.2,.8,.2,1),opacity .2s,visibility 0s linear .26s}
#info.folded{transform:translate(14px,-8px) scale(.92);transform-origin:top right}
#bar.folded{transform:translateX(-50%) translateY(18px) scale(.92);transform-origin:bottom center}
body.ui-hidden #ui>*:not(#uiToggle):not(#loading):not(#ctxlost):not(#joy):not(#runBtn):not(#scrim){opacity:0!important;visibility:hidden!important;pointer-events:none!important}
/* tiroirs Règles et Réglages sur grand écran : glissent au lieu d'apparaître */
@media (min-width:900px){
  #rules,#settings{display:flex;visibility:hidden;opacity:0;pointer-events:none;transition:transform .26s cubic-bezier(.2,.8,.2,1),opacity .2s,visibility 0s linear .26s}
  #rules{transform:translateX(-18px)}
  #settings{transform:translateY(-14px)}
  #rules.open,#settings.open{visibility:visible;opacity:1;transform:none;pointer-events:auto;transition:transform .26s cubic-bezier(.2,.8,.2,1),opacity .22s}
}
@media (pointer:coarse){ #bar .cbtn{width:72px;height:28px;top:-28px} }
@media (max-width:899px){
  .cbtn.d{display:none}
  .pill[data-pill=bar]{left:calc(var(--sal) + 8px);bottom:calc(var(--foot) + var(--sab) + 8px);transform:scale(.85);transform-origin:bottom left}
  .pill[data-pill=bar].show{transform:none}
  #bar.folded{transform:translateY(24px) scale(.96)}
  #uiToggle{width:48px;height:48px;padding:0;justify-content:center;border-radius:50%;transform-origin:center}
  #uiToggle .lbl{display:none}
}
@media (max-width:899px) and (max-height:520px){
  .pill[data-pill=bar]{bottom:calc(var(--sab) + 6px)}
  #uiToggle{width:44px;height:44px}
  body.sheet-open #uiToggle{right:calc(min(46vw,420px) + 8px)}
}
@media (prefers-reduced-motion:reduce){ .panel,.pill,.fab,.drawer{transition-duration:.01ms!important;transition-delay:0s!important} }

/* Logo partenaire (coin bas droit, au-dessus du pied de page) */
#partners{position:absolute;right:calc(var(--sar,0px) + var(--m));bottom:calc(var(--sab,0px) + var(--foot) + var(--gap));z-index:3;display:flex;align-items:center;padding:6px 10px;border-radius:16px;background:rgba(255,255,255,.93);-webkit-backdrop-filter:blur(10px) saturate(160%);backdrop-filter:blur(10px) saturate(160%);box-shadow:0 6px 20px rgba(20,35,26,.18),inset 0 1px 0 rgba(255,255,255,.7);transition:transform .15s ease,box-shadow .15s ease}
#partners a{display:flex;align-items:center}
#partners{gap:10px}
#partners:hover{transform:translateY(-1px);box-shadow:0 10px 26px rgba(20,35,26,.24),inset 0 1px 0 rgba(255,255,255,.8)}
#partners img{display:block;height:40px;width:auto;max-width:130px;pointer-events:none}
#partnerNsl img{width:40px;height:40px;border-radius:50%;object-fit:contain}
@media (max-width:899px){#partners{right:calc(var(--sar,0px) + 10px);bottom:calc(var(--sab,0px) + var(--foot) + 84px);padding:4px 8px;border-radius:14px}#partners img{height:26px}#partnerNsl img{width:26px;height:26px}#partners{gap:8px}}
@media (max-width:899px) and (max-height:520px){#partners{right:calc(var(--sar,0px) + 64px);bottom:calc(var(--sab,0px) + 6px)}}

/* ---------- Vues de gestion (panneau, légende à statuts, bandeau de simulation) ---------- */
#vues,#vlegend{--g-fill:var(--g-bgt)}
body:not(.has-vues) #vues,body:not(.has-vues) #vlegend,body:not(.has-vues) #simBanner,body:not(.has-vues) .fab[data-panel=vues]{display:none!important}
@media (min-width:900px){
  #vues{position:relative;width:100%;flex:0 1 auto;min-height:clamp(120px,calc(100dvh - 520px),200px);display:flex;flex-direction:column;padding:8px 12px 10px;z-index:3}
  #vues .dhead .close{display:none}
  #vues.collapsed{min-height:0}
  #vues.collapsed .dbody{display:none}
  #vues.collapsed .vfold .ico{transform:rotate(180deg)}
  #vlegend{position:relative;width:100%;flex:0 8 auto;min-height:clamp(80px,calc(100dvh - 600px),110px);display:flex;flex-direction:column;padding:10px 12px;z-index:3;overflow:hidden}
  #vlegend .vactive{overflow:auto;min-height:0;-webkit-overflow-scrolling:touch}
  #vlegend .vsec:first-child{border-top:0;margin-top:0;padding-top:0}
}
#vues .dbody{flex:1;min-height:0}
#vues .dhead{min-height:var(--tap)}
#vues .vcount{margin-right:auto;font-size:12px;font-weight:700;color:var(--brand-strong);background:var(--brand-soft);border:1px solid var(--brand-line);border-radius:var(--r-pill);padding:1px 9px;white-space:nowrap}
#vues .vcount[hidden]{display:none}
#vues .dhead h2{white-space:nowrap}
#vues .vfold{border:0;background:none;color:var(--muted);width:var(--tap);height:var(--tap);display:grid;place-items:center;border-radius:50%;margin-left:auto}
#vues .vcount:not([hidden])~.vfold{margin-left:0}
#vues .vfold:hover{background:var(--glass-hover);color:var(--ink)}
#vues .vfold .ico{width:18px;height:18px;transform:rotate(180deg);transition:transform .2s}
#vues:not(.collapsed) .vfold .ico{transform:none}
#vues .vintro{margin:0 0 8px;font-size:12px;color:var(--muted)}
#vues .vlist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
#vues .vcat{grid-column:1/-1;font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--muted);margin-top:4px}
#vues .vbtn{display:flex;align-items:center;gap:8px;text-align:left;padding:4px 8px;border-radius:var(--r-md);border:1px solid rgba(255,255,255,.75);background:linear-gradient(180deg,rgba(255,255,255,.8),rgba(255,255,255,.42));box-shadow:var(--ring);min-height:var(--tap);font-size:13px;transition:background .12s}
#vues .vbtn:hover{background:rgba(255,255,255,.95)}
#vues .vbtn[aria-pressed=true]{background:linear-gradient(180deg,color-mix(in srgb,var(--brand) 84%,#fff),var(--brand));color:var(--on-brand);border-color:color-mix(in srgb,var(--brand) 70%,#fff);font-weight:600}
#vues .vbtn[aria-pressed=true]:hover{background:var(--brand-strong)}
#vues .vbtn.busy{opacity:.7}
#vues .vico{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:13px;flex:none;background:var(--brand-soft);color:var(--brand-strong);font-weight:700}
#vues .vbtn[aria-pressed=true] .vico{background:rgba(255,255,255,.28);color:inherit}
#vues .vtxt{min-width:0;overflow-wrap:anywhere;line-height:1.15}
#vues .vtools{display:flex;justify-content:space-between;align-items:center;gap:8px;margin:8px 0 2px;font-size:13px}
#vues .vtools .row{display:flex;gap:8px;align-items:center;cursor:pointer;min-height:var(--tap)}
:is(#vues,#vlegend) input[type=checkbox]{accent-color:var(--brand);width:16px;height:16px;flex:none}
:is(#vues,#vlegend) .vsec{border-top:1px solid var(--line);margin-top:10px;padding-top:8px}
:is(#vues,#vlegend) .vsechead{display:flex;align-items:center;justify-content:space-between;gap:6px}
:is(#vues,#vlegend) .vsec h3{margin:0;font-size:14px;color:var(--brand-strong)}
:is(#vues,#vlegend) .vsec h4{margin:8px 0 4px;font-size:11px;letter-spacing:.5px;text-transform:uppercase;color:var(--muted)}
:is(#vues,#vlegend) .vclose{border:0;background:none;width:var(--tap);height:var(--tap);margin:-6px -8px -6px 0;display:grid;place-items:center;border-radius:50%;color:var(--muted)}
:is(#vues,#vlegend) .vclose:hover{background:var(--glass-hover);color:var(--ink)}
:is(#vues,#vlegend) .vclose .ico{width:16px;height:16px}
:is(#vues,#vlegend) .vdesc{margin:2px 0 4px;font-size:12px;color:var(--muted)}
:is(#vues,#vlegend) .vmsg{margin:4px 0;font-size:12px;padding:4px 8px;border-radius:var(--r-sm);background:var(--sun-soft);color:var(--sun-ink)}
:is(#vues,#vlegend) .vmsg.erreur,:is(#vues,#vlegend) .vmsg.sans-donnees{background:var(--warning-soft);color:var(--warning)}
:is(#vues,#vlegend) .vctrls{display:grid;gap:6px;margin-top:6px}
:is(#vues,#vlegend) .vc{display:flex;gap:8px;align-items:center;font-size:13px}
:is(#vues,#vlegend) .vc.vrange{display:grid;grid-template-columns:1fr auto;gap:2px 8px}
:is(#vues,#vlegend) .vc.vrange input{grid-column:1/-1;accent-color:var(--accent);width:100%}
:is(#vues,#vlegend) .vc.vrange output{grid-row:1;grid-column:2;font-variant-numeric:tabular-nums;color:var(--muted);font-size:12px}
:is(#vues,#vlegend) select{font:inherit;padding:3px 6px;border-radius:var(--r-sm);border:1px solid var(--line-strong);background:var(--glass-field)}
:is(#vues,#vlegend) .vlegend{list-style:none;margin:0;padding:0;display:grid;gap:4px}
:is(#vues,#vlegend) .vlegend li{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:12.5px}
:is(#vues,#vlegend) .vlegend .lt{flex:1;min-width:0}
:is(#vues,#vlegend) .vlegend small{flex-basis:100%;margin-left:16px;color:var(--muted)}
:is(#vues,#vlegend) .swatch{width:10px;height:10px;border-radius:50%;flex:none;border:1px solid rgba(0,0,0,.3);background:#999}
:is(#vues,#vlegend) .vsrc{margin-top:6px;font-size:12px}
:is(#vues,#vlegend) .vsrc ul{margin:4px 0 0;padding-left:16px}
:is(#vues,#vlegend) .vsrc small{color:var(--muted)}
/* statuts : texte + forme (jamais la couleur seule) */
.stat{font-size:10.5px;font-weight:700;letter-spacing:.3px;padding:1px 7px;border-radius:var(--r-pill);border:1px solid;white-space:nowrap}
.stat-reel{background:var(--brand-soft);color:var(--brand-strong);border-color:var(--brand-line)}
.stat-reel::before{content:"● "}
.stat-estime{background:var(--sun-soft);color:var(--sun-ink);border-color:var(--sun-line)}
.stat-estime::before{content:"◐ "}
.stat-simule{background:var(--sim-soft);color:var(--sim);border-color:var(--sim-line)}
.stat-simule::before{content:"○ "}
.stat-inconnu{background:var(--danger-soft);color:var(--danger);border-color:var(--danger)}
/* bandeau « simulation illustrative » : rattaché à la légende (grand écran) ou puce sous l'en-tête (mobile) ; visible seulement si une vue simulée est active */
#simBanner{display:block;font-size:12.5px;line-height:1.3;padding:6px 10px;margin:0 0 8px;border-radius:var(--r-md);background:var(--sim-soft);border:1px solid var(--sim-line);color:var(--ink)}
#simBanner::before{content:"○";color:var(--sim);font-weight:700;margin-right:2px}
#simBanner b{color:var(--sim)}
#simBanner[hidden]{display:none!important}
@media (max-width:899px){
  #vues{z-index:8}
  #vues .dhead .close{display:grid}
  #vues .vfold{display:none}
  #vues .vlist{grid-template-columns:1fr 1fr}
  #vues input[type=checkbox]{width:22px;height:22px}
  #simBanner{align-self:flex-start;margin:0;font-size:12px;padding:4px 10px;border-radius:var(--r-md);background:var(--g-bgt);-webkit-backdrop-filter:blur(var(--g-blur));backdrop-filter:blur(var(--g-blur));max-width:100%;pointer-events:none}
}
@media (prefers-reduced-motion:reduce){#vues .vfold .ico{transition:none}}

@media (min-width:900px) and (max-height:820px){ #vues .vintro{display:none} }
/* grand écran étroit (900 à 1099 px) : la fiche prend la colonne de droite, sous les outils, au lieu de se glisser entre les deux colonnes */
@media (min-width:900px) and (max-width:1099px){
  #info{right:calc(var(--sar) + var(--m));top:calc(var(--sat) + var(--m) + var(--tap) + 8px + var(--gap));width:var(--right-w);max-height:calc(100dvh - var(--m) - var(--tap) - 8px - 2*var(--gap) - var(--rb))}
  .pill[data-pill=info]{right:calc(var(--sar) + var(--m));top:calc(var(--sat) + var(--m) + var(--tap) + 8px + var(--gap))}
}

/* cibles : 40 px au minimum (44 px au tactile) pour les boutons, curseurs et résumés ; les liens en ligne dans le texte font exception */
.btn.small,#layers .ltools .btn{min-height:var(--tap)}
input[type=range]{min-height:32px}
#vues .vc.vrange input,#layers .row2 input{min-height:32px}
details summary{min-height:32px;display:flex;align-items:center}
#bar .cbtn::after{content:"";position:absolute;left:-8px;right:-8px;top:-10px;bottom:0}

/* FICHE */
#info .fiche{border-top:none!important;margin-top:0!important;padding-top:0!important}
#info .fban{height:84px;border-radius:var(--r-md);display:grid;place-items:center;font-size:38px;background:linear-gradient(135deg,var(--fc),color-mix(in srgb,var(--fc) 55%,#fff))}
#info .fphotos{position:relative;border-radius:var(--r-md);overflow:hidden;background:var(--surface-sunken)}
#info .fstrip{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;outline-offset:-2px}
#info .fstrip::-webkit-scrollbar{display:none}
#info .fslide{flex:0 0 100%;scroll-snap-align:center;aspect-ratio:3/2;max-height:230px}
#info .fslide img{width:100%;height:100%;object-fit:cover;display:block}
#info .fnav{position:absolute;top:50%;margin-top:-18px;width:36px;height:36px;border-radius:50%;border:0;display:grid;place-items:center;background:rgba(255,255,255,.82);color:var(--ink);cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.3)}
#info .fnav.prev{left:6px}#info .fnav.next{right:6px}
#info .fnav .ico{width:18px;height:18px}
#info .fcount{position:absolute;right:8px;bottom:6px;font-size:11px;color:#fff;background:rgba(0,0,0,.55);padding:1px 8px;border-radius:var(--r-pill)}
#info .fcred{font-size:11px;color:var(--muted);margin:3px 2px 0;line-height:1.3}
#info .fcred a{font-size:11px}
#info .fdesc{margin:8px 0 4px;line-height:1.45}
#info .flines{list-style:none;margin:6px 0;padding:0;display:grid;gap:6px}
#info .flines li{display:flex;gap:10px;align-items:flex-start}
#info .flines .ico{width:18px;height:18px;flex:none;margin-top:2px;color:var(--brand-strong);fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#info .ftxt{min-width:0;word-break:break-word}
#info .fpill{display:inline-block;margin-left:8px;padding:0 9px;border-radius:var(--r-pill);font-size:12px;font-weight:700}
#info .fpill.open{background:var(--brand-soft);color:var(--success)}
#info .fpill.closed{background:var(--danger-soft);color:var(--danger)}
#info .facts{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 4px}
#info .fact{display:inline-flex;align-items:center;gap:6px;min-height:var(--tap);padding:0 12px;border-radius:var(--r-pill);border:1px solid var(--line-strong);background:var(--glass-field);font:inherit;font-size:13px;color:var(--ink);cursor:pointer}
#info .fact:hover{background:var(--glass-hover)}
#info .fact .ico{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
#info .fsrc{font-size:11px;color:var(--muted);margin-top:4px}
#info .ftech{margin-top:8px;border-top:1px solid var(--line);padding-top:4px}
#info .ftech>summary{font-weight:600}
#info .ftech>section{margin-top:6px}
@media (max-width:899px){#info .fslide{max-height:190px}#info .fsrc,#info .fcred,#info .fcred a{font-size:12px!important}}
/* /FICHE */
