:root{
  /* Jetons du thème. Valeurs par défaut = thème LRC (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:#4b5a50; --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,.56); --glass-bg-text:rgba(255,253,249,.70); --glass-blur:22px; --glass-saturate:160%; --glass-radius:22px;
  --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:10px; --glass-bg-light:rgba(255,255,255,.72); --glass-bg-text-light:rgba(255,253,249,.82);
  --glass-hover:rgba(255,255,255,.82); --glass-field:rgba(255,255,255,.62);
  /* 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;
}
*{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)}
/* ---------- 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-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%}
body[data-glass=off]{--g-bg:var(--panel);--g-bgt:var(--panel);--g-blur:0px;--g-sat:100%;--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{--g-fill:var(--g-bgt)}
.fab{position:relative}
.panel,.fab,.pill{background:linear-gradient(135deg,var(--glass-shine) 0%,transparent 42%),var(--g-fill);-webkit-backdrop-filter:blur(var(--g-blur)) saturate(var(--g-sat));backdrop-filter:blur(var(--g-blur)) saturate(var(--g-sat));border:1px solid transparent;border-radius:var(--g-rad);
  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}
#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) 84%,#fff),var(--brand));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 ---------- */
#title{position:absolute;top:12px;left:12px;padding:8px 14px 8px 8px;max-width:calc(100vw - 24px);display:flex;gap:12px;align-items:center}
#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:block;line-height:1.3}
/* 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:36px;height:36px;display:grid;place-items:center;border-radius:50%;flex:none}
.dbody{overflow:auto;-webkit-overflow-scrolling:touch}
#layers{position:absolute;top:12px;right:12px;width:290px;max-height:calc(100vh - 205px);max-height:calc(100dvh - 205px);display:flex;flex-direction:column;padding:10px 12px;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:3px 6px;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:12px;top:76px;bottom:calc(var(--foot) + 8px);width:min(440px,calc(100vw - 24px));padding:14px;display:none;flex-direction:column;z-index:6}
#rules.open{display:flex}
#settings{position:absolute;right:12px;bottom:150px;width:320px;max-height:calc(100dvh - 240px);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}

/* ---------- Barre du bas ---------- */
#bar{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(var(--foot) + 8px);display:flex;flex-direction:column;gap:8px;padding:10px 12px;width:min(780px,calc(100vw - 24px));z-index:2}
#bar .vrow{display:flex;gap:8px;align-items:flex-start}
#views{display:flex;flex-wrap:wrap;gap:6px;flex:1;min-width:0}
#barRight{display:flex;gap:6px;flex:none}
#timeRow{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
#timeRow input[type=range]{flex:1;min-width:120px;accent-color:var(--accent)}
#timeRow input[type=date]{font:inherit;border:1px solid var(--line-strong);border-radius:var(--r-md);padding:4px 8px;background:var(--glass-field)}
#timeLabel{min-width:150px;font-variant-numeric:tabular-nums}
#fabs{display:none}
#joy,#runBtn{display:none}

/* ---------- Boussole, échelle, minimap ---------- */
#compass{position:absolute;top:76px;left:12px;width:64px;height:64px;border-radius:50%;padding:0;z-index:2}
#compass .dial{position:absolute;inset:0;transition:transform .08s linear}
#compass .n{position:absolute;left:50%;top:3px;transform:translateX(-50%);font-weight:700;font-size:12px;color:var(--danger)}
#compass .needle{position:absolute;left:50%;top:18px;width:0;height:0;margin-left:-6px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:20px solid var(--danger)}
#compass .needle2{position:absolute;left:50%;top:38px;width:0;height:0;margin-left:-6px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:20px solid #8a948e}
#scale{position:absolute;left:12px;bottom:206px;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:absolute;left:12px;bottom:calc(var(--foot) + 8px);width:170px;height:150px;padding:0;cursor:crosshair;touch-action:none}
#help{position:absolute;left:12px;top:196px;padding:6px 10px;font-size:12px;color:var(--muted);display:none;max-width:230px}

/* ---------- Fiche d'info ---------- */
#info{position:absolute;top:12px;right:314px;width:min(390px,calc(100vw - 24px));max-height:calc(100dvh - 205px);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:36px;height:36px}
#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}

/* ---------- 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 ---------- */
@media (pointer:coarse){
  .btn,.chip,select,input[type=date],#settings select{min-height:44px}
  .btn{padding:8px 14px}
  .dhead .close,#info .close,#rules .close{width:44px;height:44px}
  #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, boutons flottants ---------- */
@media (max-width:899px){
  body{font-size:15px}
  #title{top:calc(var(--sat) + 8px);left:calc(var(--sal) + 8px);right:calc(var(--sar) + 68px);max-width:none;padding:6px 12px 6px 6px;min-height:48px}
  #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}
  #fabs{display:flex;flex-direction:column;gap:8px;position:absolute;top:calc(var(--sat) + 8px);right:calc(var(--sar) + 8px);z-index:4}
  .fab{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;padding:0;color:var(--ink)}
  .fab[aria-pressed=true],.fab[aria-expanded=true]{background:var(--brand);color:var(--on-brand);border-color:var(--brand)}
  #compass{top:calc(var(--sat) + 64px);left:calc(var(--sal) + 8px);width:52px;height:52px}
  #compass .needle{top:13px}#compass .needle2{top:31px}
  /* 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}
  #views{flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}
  #views::-webkit-scrollbar{display:none}
  #views .btn{flex:none;scroll-snap-align:start;min-height:44px}
  #barRight,#bar>#timeRow{display:none}
  #timeSlot #timeRow{display:flex}
  #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}
  /* tiroirs */
  #layers,#rules,#settings{z-index:8}
  body.drawer-open #fabs{z-index:1}
  .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 #minimap,body.sheet-open #scale{visibility:hidden}
  #scale{left:calc(var(--sal) + 8px);bottom:calc(var(--foot) + var(--sab) + 70px)}
  #minimap{left:calc(var(--sal) + 8px);bottom:calc(var(--foot) + var(--sab) + 92px);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 #minimap{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 */
  #title{min-height:40px;padding:4px 10px 4px 5px;right:calc(var(--sar) + 64px)}
  #title .mark{width:30px;height:30px}
  #title h1{font-size:15px}
  #fabs{flex-direction:column;gap:6px}
  .fab{width:44px;height:44px}
  #compass{display:none}
  #footer{display:none}
  :root{--foot:0px}
  #bar{left:calc(var(--sal) + 8px);right:calc(var(--sar) + 64px);bottom:calc(var(--sab) + 6px);border-radius:14px;padding:6px 8px}
  #views .btn{min-height:44px}
  .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 #fabs{right:calc(min(46vw,420px) + 8px)}
  body.sheet-open #title{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)}
  #scale{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:40px;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,220px);
  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 .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}
.pill:hover{--g-fill:var(--glass-hover)}
.pill[data-pill=title]{top:12px;left:12px;transform-origin:top left}
.pill[data-pill=layers]{top:12px;right:12px;transform-origin:top right}
.pill[data-pill=info]{top:12px;right:314px;transform-origin:top right}
.pill[data-pill=bar]{left:50%;bottom:calc(var(--foot) + 8px);transform:translateX(-50%) scale(.85)}
.pill[data-pill=bar].show{transform:translateX(-50%)}
#uiToggle{top:148px;left:12px;right:auto;bottom:auto;transform:none;transform-origin:top left}
.cbtn{border:0;background:none;color:var(--muted);width:32px;height:32px;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:-22px;transform:translateX(-50%);width:56px;height:22px;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}
#title.folded{transform:translate(-10px,-8px) scale(.88);transform-origin:top left}
#layers.folded{transform:translate(14px,-8px) scale(.9);transform-origin:top right}
#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}
body.ui-hidden #uiToggle{opacity:.75}
/* 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){ .cbtn{width:44px;height:44px} #bar .cbtn{width:72px;height:28px;top:-28px} .pill{height:44px} }
@media (max-width:899px){
  .cbtn.d{display:none}
  .pill[data-pill=title]{top:calc(var(--sat) + 8px);left:calc(var(--sal) + 8px)}
  .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}
  #title.folded{transform:translate(-8px,-8px) scale(.9)}
  #bar.folded{transform:translateY(24px) scale(.96)}
  #uiToggle{top:calc(var(--sat) + 288px);left:auto;right:calc(var(--sar) + 8px);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{top:calc(var(--sat) + 264px);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} }
