/* Fanal : styles de l'interface (page fanal/static/index.html). */
/* ===== Jetons de design =====
   Toutes les couleurs, tailles de texte, arrondis, ombres, mouvements et plans de l'interface viennent d'ici :
   un composant n'écrit pas de valeur en dur, il prend le jeton qui lui correspond. Le mode sombre ne redéfinit que
   des jetons (bloc suivant). */
:root{
  /* Identité L'Éclat Malouin */
  --marine:#13294B; --marine-2:#1D3A66; --olive:#6F7A45; --olive-2:#8E9A5E; --creme:#FBF7EC; --sable:#EFE8D6;
  --fond:var(--creme); --carte:#FFFFFF; --trait:#E2DACA; --texte:#16263F; --texte-2:#5B6779;
  /* Modes : couleurs franches */
  --corail:#E5533D; --soleil:#F2A41F; --vert:#7E9A35; --mer:#2C82C9; --lilas:#7F5BD6; --galet:#9AA4AE;
  --ok:#2E8B57; --alerte:#C8502A; --focus:#2C82C9;
  /* Eau : ballon, compteur d'eau, robinet */
  --eau:#3A9AD9; --robinet:#17A398;
  /* Dessin du ballon : eau froide au fond, tiède ou chaude en haut */
  --ballon-fond:#2C82C9; --ballon-milieu:#4FA3E8; --ballon-tiede:#7EC0F2; --ballon-chaud:#F07A52;
  /* Phases du ballon (ruban et graphiques de l'eau chaude) */
  --e-sejour:var(--corail); --e-menage:var(--soleil); --e-plein:#F08A73; --e-reduit:var(--vert); --e-absence:var(--nuit);
  /* Absence du ballon : indigo, distinct du gris « éteint » et du bleu « hors-gel » des radiateurs */
  --nuit:#5967C9;
  /* Programmation Fanal (planning de Fanal) : bleu-vert, distinct du jaune « planning Heatzy » */
  --fanal:#0E7C86;
  /* Lueur d'un radiateur qui chauffe (bas de sa carte) et halo du logo (le fanal veille) */
  --lueur-chauffe:color-mix(in srgb,var(--corail) 21%,transparent); --lueur-melange:multiply;
  --halo-fanal:color-mix(in srgb,var(--soleil) 50%,transparent);
  /* Carte de chaleur du plan (js/chaleur.js) : sept couleurs du froid au chaud (écart à la consigne ; -t : température,
     du hors-gel bleu à l'éco jaune, au confort rouge et au-dessus rouge foncé, 3.7.8),
     mêlées en OKLab ; verre des fenêtres, rayures « sans mesure », ombre et relief du logement, bulles givrées,
     anneau « ne monte pas », pièce survolée, mur mitoyen */
  --chaleur-1:#1D4E8F; --chaleur-2:#3F7BC0; --chaleur-3:#9DC3E6; --chaleur-4:#F1ECE2; --chaleur-5:#F8C894; --chaleur-6:#EF8E5A; --chaleur-7:#CC3F2A;
  --chaleur-t1:#2A5597; --chaleur-t2:#5B8FD0; --chaleur-t3:#BFD9F1; --chaleur-t4:#F6DA74; --chaleur-t5:#EC6248; --chaleur-t6:#C2362A; --chaleur-t7:#8E1D17;
  --chaleur-verre:#E4F1FC; --chaleur-hachure:rgba(19,41,75,.16); --chaleur-ombre:rgba(19,41,75,.22); --chaleur-relief:rgba(19,41,75,.10);
  --chaleur-bulle:rgba(255,255,255,.8); --chaleur-bulle-ombre:0 1px 3px rgba(19,41,75,.16); --chaleur-alerte:#D98A0B; --chaleur-lueur-a:.5;
  --chaleur-survol:rgba(255,255,255,.22); --chaleur-mitoyen:var(--olive);
  /* Bandeau : ciel de nuit (plus profond en haut), lumière du fanal (faisceau, heure qui compte), houle au large */
  --ciel-haut:#0C1E3B; --ciel-bas:#1A3762; --lumiere:#FFD993;
  --faisceau-coeur:rgba(255,222,160,.24); --faisceau-bord:rgba(255,222,160,.13); --faisceau-halo:rgba(255,222,160,.05);
  --houle-loin:color-mix(in srgb,var(--mer) 26%,var(--marine));
  --e-relance:repeating-linear-gradient(135deg,var(--corail) 0 5px,var(--soleil) 5px 10px);
  /* Texte et icônes posés sur une couleur franche (boutons pleins, badges, pastilles) */
  --sur-couleur:#FFFFFF; --sur-soleil:#3A2600;
  /* Catégories des fiches de l'assistant d'accueil (Réglages > Base de connaissance) : les couleurs du guide des
     voyageurs (fanal/static/voyageurs/voyageurs.css) */
  --cat-arrivee_depart:#2B6A8E; --cat-logement:#8A5A2B; --cat-equipements:#4F53A8; --cat-chauffage:#C4532A; --cat-dechets:#2E7D4F;
  --cat-regles:#74539E; --cat-securite:#A63A4C; --cat-urgence:#C81F37; --cat-transports:#1D7183; --cat-restaurants:#B04A2A;
  --cat-activites:#9A6510; --cat-alentours:#367558; --cat-autre:#536476;
  /* Carte QR de l'assistant d'accueil (aperçu et impression) : papier blanc, encre marine, en clair comme en sombre */
  --papier:#FFFFFF; --encre:#13294B;
  /* Compte rendu du séjour (Stats) : parts de ce qu'ont payé les voyageurs, électricité et eau (palette validée
     pour les daltonismes, dans cet ordre) ; états des points marquants */
  --cr-1:#2a78d6; --cr-2:#eb6834; --cr-3:#1baf7a; --cr-4:#eda100; --cr-ok:#2E7D4F; --cr-note:#A86A00; --cr-alerte:#C8502A;
  /* Lisibilité en clair (4,5:1 au moins) sans changer les couleurs franches : fonds un peu plus soutenus sous un
     texte blanc, liens un peu plus foncés, texte des pastilles et des chiffres en couleur mêlé au texte */
  --corail-plein:#C8402B; --vert-plein:#5F7A22; --galet-plein:#6B7682; --mer-plein:#246FAD; --lien:#1F6FB2; --mix-pastille:50%; --mix-texte:60%; --mix-barre:50%;
  /* Saisons du logement (sélecteur, ruban, graphiques) */
  --s-hiver:#BFE0FA; --s-mi-saison:#C9DB8F; --s-ete:#FFC85A; --pause:#C9CED6; --creux-clair:#7EC0F2;
  /* Sur le bandeau marine : voiles, traits et textes crème */
  --voile-1:rgba(251,247,236,.07); --voile-2:rgba(251,247,236,.13); --voile-trait:rgba(251,247,236,.22);
  --creme-doux:rgba(251,247,236,.72); --creme-fort:rgba(251,247,236,.9); --erreur-sur-marine:#FFB4A3;
  /* Fond derrière une fenêtre ouverte */
  --voile-fenetre:rgba(10,22,40,.62);
  /* Marine plein (onglet ouvert, choix en cours, bouton plein) et éléments qui changent de teinte en mode sombre */
  --contour-btn:var(--marine); --marine-plein:var(--marine); --marine-plein-trait:transparent; --onglet-tel-actif:var(--marine);
  /* Polices */
  --serif:"Libre Caslon Text",Georgia,"Times New Roman",serif;
  --sans:"Atkinson Hyperlegible",system-ui,sans-serif;
  --mono:ui-monospace,Menlo,Consolas,monospace;
  /* Tailles de texte (le corps du texte est à 17px ; 1rem = 16px) ; micro = 11,2 px, le plancher d'un texte lu */
  --txt-micro:.7rem; --txt-xs:.76rem; --txt-s:.84rem; --txt-m:.92rem; --txt-l:1.05rem; --txt-xl:1.2rem; --txt-2xl:1.35rem;
  --txt-3xl:1.5rem;
  /* Espacements */
  --esp-1:4px; --esp-2:8px; --esp-3:12px; --esp-4:16px; --esp-5:20px; --esp-6:24px; --esp-8:32px;
  /* Arrondis */
  --rayon-xs:4px; --rayon-s:8px; --rayon-m:12px; --rayon-l:16px; --rayon-xl:20px; --rayon-rond:999px;
  /* Liseré de couleur (haut d'une fiche, gauche d'une ligne) */
  --lisere:5px;
  /* Ombres : petite (bouton choisi), carte, menu, fenêtre, carte soulevée */
  --ombre-s:0 1px 4px rgba(19,41,75,.12);
  --ombre:0 1px 2px rgba(19,41,75,.06),0 8px 24px rgba(19,41,75,.07);
  --ombre-l:0 14px 40px rgba(10,22,40,.28);
  --ombre-xl:0 20px 60px rgba(10,22,40,.35);
  --ombre-levee:0 22px 50px rgba(10,22,40,.32),0 4px 12px rgba(10,22,40,.18);
  --ombre-pouce:0 1px 3px rgba(0,0,0,.3); --pouce:#FFFFFF;
  /* Mouvements : durées et courbes */
  --duree-1:120ms; --duree-2:200ms; --duree-3:320ms; --duree-4:520ms; --duree-lente:800ms;
  --courbe:cubic-bezier(.2,.8,.2,1); --courbe-sortie:cubic-bezier(.4,0,1,1); --ressort:cubic-bezier(.34,1.56,.64,1);
  /* Plans (z-index), du plus bas au plus haut */
  --plan-graph:4; --plan-recherche:4; --plan-onglets:5; --plan-carte:6; --plan-tip:10; --plan-onglets-tel:15; --plan-assistant:18; --plan-barre:20; --plan-toast:30;
  --plan-menu:45; --plan-ecran:50; --plan-glisse:60; --plan-bulle:1000;
  /* En-tête : hauteur commune des pastilles (étape, météo, réglages rapides), assez haute pour le doigt */
  --puce:44px;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --fond:#0B1424; --carte:#13203A; --sable:#1B2A47; --trait:#24365A; --texte:#EEF1F6; --texte-2:#9DABC0;
    --marine:#13294B; --marine-2:#1D3A66;
    --corail:#FF6B52; --soleil:#FFB733; --vert:#A3C05A; --mer:#4FA3E8; --lilas:#A486F0; --galet:#7D8794; --nuit:#8F9CF5; --fanal:#4CC9D4;
    --ok:#4CC27F; --alerte:#FF8A5C; --focus:#7FC1F5;
    --lueur-chauffe:color-mix(in srgb,var(--corail) 28%,transparent); --lueur-melange:screen;   /* en sombre la lueur éclaire */
    --chaleur-1:#6FB4FF; --chaleur-2:#3E82D6; --chaleur-3:#2C4F86; --chaleur-4:#2A3450; --chaleur-5:#6B3F66; --chaleur-6:#D0614F; --chaleur-7:#FFB25E;
    --chaleur-t1:#3E82D6; --chaleur-t2:#2F5FA0; --chaleur-t3:#2A4470; --chaleur-t4:#C9A43A; --chaleur-t5:#E0533F; --chaleur-t6:#B32C36; --chaleur-t7:#7E1A33;
    --chaleur-verre:#1C3556; --chaleur-hachure:rgba(238,241,246,.13); --chaleur-ombre:rgba(0,0,0,.55); --chaleur-relief:rgba(0,0,0,.28);
    --chaleur-bulle:rgba(11,20,36,.68); --chaleur-bulle-ombre:0 1px 3px rgba(0,0,0,.45); --chaleur-alerte:#FFB733; --chaleur-lueur-a:.62;
    --chaleur-survol:rgba(255,255,255,.08); --chaleur-mitoyen:var(--olive-2);
    /* couleurs franches plus claires en sombre : texte foncé dessus, plus lisible que le blanc */
    --sur-couleur:#0B1424;
    --cat-arrivee_depart:#8FC1DE; --cat-logement:#E0B07A; --cat-equipements:#AEB2F2; --cat-chauffage:#F29A6E; --cat-dechets:#84D3A4;
    --cat-regles:#C8ABEC; --cat-securite:#F2909D; --cat-urgence:#FF8E9B; --cat-transports:#80D0DE; --cat-restaurants:#F5A88C;
    --cat-activites:#F0C46A; --cat-alentours:#92D4B2; --cat-autre:#A7B6C4;
    --cr-1:#3987e5; --cr-2:#d95926; --cr-3:#199e70; --cr-4:#c98500; --cr-ok:#4CC27F; --cr-note:#FFB733; --cr-alerte:#FF8A5C;
    --corail-plein:var(--corail); --vert-plein:var(--vert); --galet-plein:var(--galet); --mer-plein:var(--mer); --lien:var(--mer); --mix-pastille:80%; --mix-texte:100%; --mix-barre:62%;
    --contour-btn:var(--texte-2); --marine-plein:var(--marine-2); --marine-plein-trait:var(--voile-trait); --onglet-tel-actif:var(--mer);
    --ombre-s:0 1px 4px rgba(0,0,0,.4);
    --ombre:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25);
    --ombre-l:0 14px 40px rgba(0,0,0,.45);
    --ombre-xl:0 20px 60px rgba(0,0,0,.55);
    --ombre-levee:0 22px 50px rgba(0,0,0,.5),0 4px 12px rgba(0,0,0,.3);
    color-scheme:dark;
  }
}
/* Mode sombre choisi avec le picto du bandeau (js/theme.js), quel que soit le système : mêmes jetons que le bloc
   précédent (un test vérifie qu'ils restent identiques) ; « clair » choisi écarte simplement ce bloc */
:root[data-theme="dark"]{
  --fond:#0B1424; --carte:#13203A; --sable:#1B2A47; --trait:#24365A; --texte:#EEF1F6; --texte-2:#9DABC0;
  --marine:#13294B; --marine-2:#1D3A66;
  --corail:#FF6B52; --soleil:#FFB733; --vert:#A3C05A; --mer:#4FA3E8; --lilas:#A486F0; --galet:#7D8794; --nuit:#8F9CF5; --fanal:#4CC9D4;
  --ok:#4CC27F; --alerte:#FF8A5C; --focus:#7FC1F5;
  --lueur-chauffe:color-mix(in srgb,var(--corail) 28%,transparent); --lueur-melange:screen;   /* en sombre la lueur éclaire */
  --chaleur-1:#6FB4FF; --chaleur-2:#3E82D6; --chaleur-3:#2C4F86; --chaleur-4:#2A3450; --chaleur-5:#6B3F66; --chaleur-6:#D0614F; --chaleur-7:#FFB25E;
  --chaleur-t1:#3E82D6; --chaleur-t2:#2F5FA0; --chaleur-t3:#2A4470; --chaleur-t4:#C9A43A; --chaleur-t5:#E0533F; --chaleur-t6:#B32C36; --chaleur-t7:#7E1A33;
  --chaleur-verre:#1C3556; --chaleur-hachure:rgba(238,241,246,.13); --chaleur-ombre:rgba(0,0,0,.55); --chaleur-relief:rgba(0,0,0,.28);
  --chaleur-bulle:rgba(11,20,36,.68); --chaleur-bulle-ombre:0 1px 3px rgba(0,0,0,.45); --chaleur-alerte:#FFB733; --chaleur-lueur-a:.62;
  --chaleur-survol:rgba(255,255,255,.08); --chaleur-mitoyen:var(--olive-2);
  /* couleurs franches plus claires en sombre : texte foncé dessus, plus lisible que le blanc */
  --sur-couleur:#0B1424;
  --cat-arrivee_depart:#8FC1DE; --cat-logement:#E0B07A; --cat-equipements:#AEB2F2; --cat-chauffage:#F29A6E; --cat-dechets:#84D3A4;
  --cat-regles:#C8ABEC; --cat-securite:#F2909D; --cat-urgence:#FF8E9B; --cat-transports:#80D0DE; --cat-restaurants:#F5A88C;
  --cat-activites:#F0C46A; --cat-alentours:#92D4B2; --cat-autre:#A7B6C4;
  --cr-1:#3987e5; --cr-2:#d95926; --cr-3:#199e70; --cr-4:#c98500; --cr-ok:#4CC27F; --cr-note:#FFB733; --cr-alerte:#FF8A5C;
  --corail-plein:var(--corail); --vert-plein:var(--vert); --galet-plein:var(--galet); --mer-plein:var(--mer); --lien:var(--mer); --mix-pastille:80%; --mix-texte:100%; --mix-barre:62%;
  --contour-btn:var(--texte-2); --marine-plein:var(--marine-2); --marine-plein-trait:var(--voile-trait); --onglet-tel-actif:var(--mer);
  --ombre-s:0 1px 4px rgba(0,0,0,.4);
  --ombre:0 1px 2px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.25);
  --ombre-l:0 14px 40px rgba(0,0,0,.45);
  --ombre-xl:0 20px 60px rgba(0,0,0,.55);
  --ombre-levee:0 22px 50px rgba(0,0,0,.5),0 4px 12px rgba(0,0,0,.3);
  color-scheme:dark;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-top:72px}   /* une rubrique amenée à l'écran reste sous les onglets */
body{margin:0;background:var(--fond);color:var(--texte);font:17px/1.55 var(--sans)}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.page{max-width:1240px;margin:0 auto;padding:0 clamp(14px,3vw,28px)}
.cache,[hidden]{display:none !important}
html.plateforme [data-pf-retire]{display:none !important}   /* logement de la plateforme : réglé dans la console (compte.js) */
/* Titres : tous en Caslon, trois tailles ; les composants ne règlent que leurs marges */
h2{font-family:var(--serif);font-weight:700;font-size:var(--txt-3xl);line-height:1.25;margin:34px 0 14px;color:var(--texte)}
h3,h4{font-family:var(--serif);font-weight:700;line-height:1.25;margin:0;color:var(--texte)}
h3{font-size:var(--txt-xl)}
h4{font-size:var(--txt-l)}
a{color:var(--lien)}

/* ===== Surfaces =====
   Fiches, panneaux, sections de réglages, graphiques, chiffres clés, debug, incidents : même fond, même arrondi,
   même ombre, mêmes marges. La couleur d'une rubrique (--accent) se montre en liseré sur le haut. */
.carte,.panneau,.reglages section,.graph,.stats-pan,.kpi,.prix-form,.stats-vide,.debug,.incidents{
  position:relative;background:var(--carte);border-radius:var(--rayon-xl);box-shadow:var(--ombre);padding:18px var(--esp-5)}
.carte,.kpi,.debug,.incidents{border-top:var(--lisere) solid var(--accent,var(--galet))}
/* Blocs posés dans une surface : fond crème et filet ; les blocs repliables sont plus serrés */
.bloc,.maj-carte,.prog,.zoom-prog,.regle-eau,.dbg-bloc,.cozy-app{background:var(--fond);border:1px solid var(--trait);border-radius:var(--rayon-l);
  padding:14px var(--esp-4)}
.dbg-bloc,.cozy-app{border-radius:var(--rayon-m);padding:var(--esp-2) var(--esp-3)}

/* ===== Interrupteurs =====
   Un seul dessin (piste et pouce) en deux tailles : réglages (case input.inter), bouton « bascule » (pilotage des
   radiateurs et du ballon, mode debug). Allumé : --allume, vert par défaut. */
.piste-mini,input.inter{--l:46px;--h:28px;--m:3px;
  width:var(--l);height:var(--h);border-radius:var(--rayon-rond);background:var(--trait);position:relative;flex:none;
  transition:background-color var(--duree-2) var(--courbe)}
.piste-mini::after,input.inter::after{content:"";position:absolute;top:var(--m);left:var(--m);
  width:calc(var(--h) - 2 * var(--m));height:calc(var(--h) - 2 * var(--m));border-radius:50%;background:var(--pouce);
  box-shadow:var(--ombre-pouce);transition:transform var(--duree-2) var(--courbe)}
.bascule[aria-checked="true"] .piste-mini,input.inter:checked{background:var(--allume,var(--vert))}
.bascule[aria-checked="true"] .piste-mini::after,input.inter:checked::after{
  transform:translateX(calc(var(--l) - var(--h)))}
.piste-mini{--l:38px;--h:22px}
input.inter{appearance:none;-webkit-appearance:none;cursor:pointer;margin:0}
.bascule{--allume:var(--lilas)}
.piste-mini.vert{--allume:var(--vert)}

/* ===== Choix segmentés =====
   Une piste (fond crème, filet) et des boutons transparents ; le choix en cours se soulève en tuile teintée de sa
   couleur (--c). Consigne et mode d'un radiateur, douches du ballon, pinceaux du planning. */
.consignes-rangee,.segments,.gouttes,.pinceaux{display:grid;grid-template-columns:repeat(var(--n,3),minmax(0,1fr));gap:3px;padding:3px;
  border-radius:var(--rayon-l);background:var(--fond);border:1px solid var(--trait)}
.consignes-rangee button,.segments button,.gouttes button,.pinceau{display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;min-width:0;padding:7px 2px 6px;border:1.5px solid transparent;border-radius:var(--rayon-m);background:none;color:var(--texte-2);
  font:700 var(--txt-xs) var(--sans);cursor:pointer;transition:background-color var(--duree-1),color var(--duree-1),transform var(--duree-1)}
.consignes-rangee button span,.segments button span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.consignes-rangee button svg,.segments button svg,.gouttes button svg{width:20px;height:20px}
.consignes-rangee button:hover,.segments button:hover,.gouttes button:hover,.pinceau:hover{color:var(--texte)}
.consignes-rangee button:active,.segments button:active,.gouttes button:active,.pinceau:active{transform:scale(.96)}
.consignes-rangee button[disabled],.segments button[disabled],.gouttes button[disabled]{opacity:.4;cursor:not-allowed}
.consignes-rangee button[aria-pressed="true"],.segments button[aria-pressed="true"],.gouttes button[aria-pressed="true"],.pinceau[aria-pressed="true"]{
  background:color-mix(in srgb,var(--c) 10%,var(--carte));border-color:var(--c);color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte));box-shadow:var(--ombre-s)}
:is(.consignes-rangee,.segments,.gouttes) [data-tip]:is(:hover,:focus-visible)::after{right:auto;left:50%;transform:translateX(-50%)}
.gouttes{--n:5;--c:var(--eau)}
.gouttes button .rempli{fill:currentColor;opacity:.18}
.gouttes button.sous{color:color-mix(in srgb,var(--eau) var(--mix-texte),var(--texte))}
.gouttes button.sous .rempli{opacity:.9;fill:var(--eau)}
.pinceaux{--n:4;margin-bottom:16px}
.pinceau{flex-direction:row;gap:8px;min-height:48px;padding:6px 8px;font-size:var(--txt-m)}
.pinceau[aria-pressed="true"]{color:var(--texte)}

/* ===== Pilules de choix =====
   Saison du logement (réglages rapides) et période de Stats : piste arrondie, le choix en cours en plein,
   comme l'onglet ouvert (la saison prend sa teinte). */
.saisons,.periode{gap:3px;padding:3px;max-width:100%;border-radius:var(--rayon-rond);border:1px solid var(--trait);background:var(--carte)}
.saisons button,.periode button{display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;background:none;
  padding:7px 14px;border-radius:var(--rayon-rond);font-weight:700;font-size:var(--txt-m);color:var(--texte-2);cursor:pointer;white-space:nowrap;
  transition:background-color var(--duree-2),color var(--duree-2),box-shadow var(--duree-2),scale var(--duree-1) var(--courbe)}
.periode{display:inline-grid;grid-template-columns:repeat(4,auto)}
.periode button:hover{color:var(--texte)}
.periode button[aria-checked="true"]{background:var(--marine-plein);color:var(--creme);box-shadow:inset 0 0 0 1px var(--marine-plein-trait)}
.graph-tete .periode button{padding:6px 11px;font-size:var(--txt-s)}
.saisons{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));background:var(--fond)}
.saisons button{min-width:0;min-height:42px;padding:8px 6px;gap:6px}
.saisons button svg{width:18px;height:18px;flex:none}
.saisons button span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.saisons button:hover{color:var(--texte)}
.saisons button[aria-checked="true"]{background:var(--teinte-s);color:var(--marine);box-shadow:var(--ombre-s)}

/* ===== Pastilles d'état, puces d'appareil et badges =====
   Pastille : un état en clair, point de couleur (--p) sur fond teinté (ordre envoyé, état du ballon).
   Puce d'appareil : un module ou un appareil, point d'état (--p) dans une pilule à filet (parc, alertes).
   Badge : petit libellé en capitales sur sa couleur (--b) (type d'alerte, d'évènement prévu, source du debug). */
.pastille,.ordre span{display:inline-flex;align-items:center;gap:7px;padding:5px 13px;border-radius:var(--rayon-rond);font-weight:700;
  font-size:var(--txt-m);color:color-mix(in srgb,var(--p) var(--mix-pastille),var(--texte));background:color-mix(in srgb,var(--p) 14%,transparent)}
.pastille::before,.ordre span::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;background:var(--p)}
.pastille{align-self:flex-start}
/* état qui vit (ballon en chauffe) : une onde part du point, en transform et opacity seulement (pas de box-shadow
   animé, repeint à chaque image) ; --phase garde le rythme quand la carte est refaite */
.pastille.anime{position:relative}
.pastille.anime::after{content:"";position:absolute;left:13px;top:50%;width:8px;height:8px;margin-top:-4px;border-radius:50%;background:var(--p);
  pointer-events:none;animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}
.ordre span{--p:var(--mode)}
.parc-liste li,.am-liste li{display:inline-flex;align-items:center;gap:7px;padding:5px 12px 5px 10px;border-radius:var(--rayon-rond);
  border:1px solid var(--trait);background:var(--fond);font-size:var(--txt-s);font-weight:700}
.parc-liste li i,.am-liste li i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--p,var(--ok));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--p,var(--ok)) 18%,transparent)}
.parc-liste li small,.am-liste li small{font-weight:400;color:var(--texte-2)}
.parc-liste li.offline{--p:var(--soleil)}
.parc-liste li.missing{--p:var(--corail);border-color:var(--corail)}
.am-liste li{--p:var(--corail)}
.alerte-modules.attention .am-liste li{--p:var(--soleil)}
.alerte-modules.info .am-liste li{--p:var(--mer)}
.badge,.alerte-modules .am-type{display:inline-block;font:800 var(--txt-micro)/1.5 var(--sans);letter-spacing:.06em;text-transform:uppercase;
  padding:1px 8px;border-radius:var(--rayon-rond);color:var(--sur-couleur);background:var(--b,var(--galet-plein));vertical-align:2px}
.alerte-modules .am-type{--b:var(--corail-plein);grid-column:2;justify-self:start;margin-bottom:2px}
.alerte-modules.attention .am-type{--b:var(--soleil);color:var(--sur-soleil)}
.alerte-modules.info .am-type{--b:var(--mer-plein)}
.dbg-ligne .badge{--b:var(--trait);color:var(--texte)}

/* ===== Lignes à liseré =====
   Une ligne de liste : arrondi, liseré à gauche de la couleur de son type (--k). Sur la page elle est blanche et
   ombrée (journal, séjours) ; dans une surface elle prend le fond crème (incidents, debug,
   absences du ballon). */
.journal li,.sejours li,.liste-incidents li,.dbg-liste li,.absences li{background:var(--carte);border-radius:var(--rayon-m);
  box-shadow:var(--ombre);padding:12px var(--esp-4);border-left:var(--lisere) solid var(--k,var(--galet))}
.liste-incidents li,.dbg-liste li,.absences li{background:var(--fond);box-shadow:none}
.liste-incidents li,.absences li{padding:10px var(--esp-3)}
:is(.journal,.sejours,.liste-incidents,.dbg-liste,.absences) li:is(.vide,.sq){border-left-color:transparent}
/* Chargement : des emplacements qui scintillent à la place des données qui arrivent (fiches, frise, séjours,
   journal, Stats, radiateurs), de la forme de ce qui va s'afficher */
.squelette{display:block;height:1em;border-radius:var(--rayon-s);animation:scintille 1.6s ease-in-out infinite;background:var(--sq-reflet)}
:root{--sq-fond:color-mix(in srgb,var(--texte) 7%,transparent);--sq-reflet:color-mix(in srgb,var(--texte) 14%,transparent)}
.hero{--sq-fond:var(--voile-1);--sq-reflet:var(--voile-2)}
@keyframes scintille{0%,100%{opacity:.5}50%{opacity:1}}   /* en opacité seulement : rien à repeindre */
/* ouverture à froid : les blocs d'attente ont la taille des vrais (planning, fiches, ballon), rien ne saute à l'arrivée */
.sq-carte{display:grid;gap:12px;align-content:start;min-height:155px}
.sq-eau{height:469px;border-radius:var(--rayon-xl)}
.sq-temp{width:40%;height:2.2em}
.sq-planning{height:411px;border-radius:var(--rayon-l)}
@media (max-width:639px){ .sq-planning{height:534px} .sq-eau{height:734px} }
@media (max-width:520px){ .sq-carte{min-height:152px} }
.sq-titre{width:55%;height:1.5em} .sq-court{width:55%}
.etat .squelette{width:128px;height:34px;border-radius:var(--rayon-rond)} .sous-etat .squelette{width:min(17em,90%);height:1.22em;margin:0}   /* une ligne de la phrase */
li.sq .squelette{grid-column:1/-1;width:70%} li.sq + li.sq .squelette{width:50%}
.sq-stats .kpi{height:118px} .sq-stats .kpi .sq-court{width:40%} .sq-stats .kpi .squelette + .squelette{margin-top:12px;width:65%}
.sq-graph{height:260px;margin-bottom:var(--esp-4)}
.sq-liste{display:grid;gap:10px;margin-top:12px} .sq-liste .squelette{height:52px;border-radius:var(--rayon-l)}
.lecteur-seul{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* ===== Petites aides de mise en page (au lieu de styles écrits dans la page ou le code) ===== */
.sans-marge{margin:0 !important}
.espace-haut{margin-top:var(--esp-3) !important}
.pleine-largeur{grid-column:1/-1}
.texte-alerte{color:var(--alerte)}
.sans-boite{display:contents}
.hors-ecran{position:fixed;opacity:0;top:0;left:0;width:1px;height:1px;font-size:16px}
h2 + .sous-titre{margin-top:0}
.sous-titre + .chapo{margin:0 0 10px}
#appli-chapo + .actions{margin:0 0 12px}
.panneau > .chapo:first-child{margin:0 0 14px}
.stats-tete h2{margin:6px 0 2px}
.stats-tete .chapo{margin:0}
:is(.regle-maitre,.maj-carte) + .grille{margin-top:var(--esp-4)}
.grille > .actions{margin:0}
.reglages .dbg-bloc{margin-top:14px}
.dbg-bloc > .aide{margin:8px 0}
.debug-tete .aide{margin:0}
.dbg-titre{margin:10px 0 0}
.dlg .case{margin-top:10px}
.dlg .rap-capture label,.dlg .rap-capture .aide{margin:0}
.redem-boite h2{color:inherit;margin:0 0 4px}
.re-params input[type=time]{max-width:9em}
.maj-evts .btn{margin-left:8px}
.parc .aide{margin:4px 0 0}
.parc > .aide{margin:0}
.consignes-rangee + .titre-pilotage{margin-top:12px}
.consignes .hg i{background:var(--mer)}

/* ===== Petits libellés en capitales =====
   « Ordre envoyé », « Consigne », « Mode », titres des chiffres clés et en-têtes de tableaux : un seul style. */
.ordre small,.titre-pilotage,.kpi small,.mini-kpis small,.table-sejours th,.dbg-table th{font-size:var(--txt-micro);font-weight:800;
  letter-spacing:.07em;text-transform:uppercase;color:var(--texte-2);line-height:1.4}

/* ===== Bandeau marine =====
   En-tête compact sur toutes les largeurs : marque, étape en cours (hors de Maintenant), météo et bouton des
   réglages rapides (saison, pilotage, langue). Sur Maintenant seulement, l'étape du logement dessous (pastille, phrase,
   cap). Un ciel de nuit teinté par la lueur de l'étape, le faisceau du fanal et la mer au pied : les seuls effets
   continus du bandeau sont le faisceau et la mer. */
.bandeau-haut{background:linear-gradient(180deg,var(--ciel-haut),var(--marine) 58%,var(--ciel-bas));color:var(--creme);position:relative}
.bandeau-haut > .page{position:relative}
/* Le fanal veille : de sa lanterne part un faisceau doré qui tourne comme celui d'un phare (vu de côté : il s'allonge
   vers la droite, se raccourcit en venant vers nous, la lanterne s'allume, il repasse derrière la tour). Un seul calque,
   animé en transform et opacity : le compositeur s'en charge, rien n'est repeint. Moins d'animations : il reste fixe. */
.ciel{position:absolute;inset:0;overflow:hidden;pointer-events:none}
.ciel .page,.ciel .phare{height:100%}
.ciel .phare{position:relative}
.faisceau{position:absolute;left:22px;top:calc(max(12px,env(safe-area-inset-top)) + 11px);width:min(1180px,96vw);height:360px;margin-top:-180px;
  transform-origin:0 50%;opacity:.9;
  background:conic-gradient(from 82deg at 0 50%,transparent 4.5deg,var(--faisceau-bord) 6.2deg,var(--faisceau-coeur) 9deg,var(--faisceau-bord) 11.8deg,transparent 13.5deg),
    conic-gradient(from 82deg at 0 50%,transparent -4deg,var(--faisceau-halo) 9deg,transparent 22deg);
  -webkit-mask-image:linear-gradient(90deg,#000 8%,rgba(0,0,0,.6) 50%,transparent 97%);mask-image:linear-gradient(90deg,#000 8%,rgba(0,0,0,.6) 50%,transparent 97%);
  animation:faisceau 18s linear infinite}
/* un tour : cos de l'angle pour la longueur vue de côté, plus pâle derrière la tour */
@keyframes faisceau{
  0%,100%{transform:scaleX(1);opacity:.9} 6.25%{transform:scaleX(.92);opacity:.92} 12.5%{transform:scaleX(.71);opacity:.8}
  18.75%{transform:scaleX(.38);opacity:.45} 25%{transform:scaleX(.03);opacity:.08} 31.25%{transform:scaleX(-.38);opacity:.26}
  37.5%{transform:scaleX(-.71);opacity:.34} 43.75%{transform:scaleX(-.92);opacity:.34} 50%{transform:scaleX(-1);opacity:.3}
  56.25%{transform:scaleX(-.92);opacity:.2} 62.5%{transform:scaleX(-.71);opacity:.1} 68.75%{transform:scaleX(-.38);opacity:0}
  75%{transform:scaleX(-.03);opacity:0} 81.25%{transform:scaleX(.38);opacity:.14} 87.5%{transform:scaleX(.71);opacity:.5}
  93.75%{transform:scaleX(.92);opacity:.8}}
/* lueur de l'étape en cours, derrière le cap : une couche par étape, une seule visible ; elle passe de l'une à l'autre
   en fondu (opacité seulement, rien en continu) */
.lueurs i{position:absolute;inset:0;opacity:0;transition:opacity 1.6s var(--courbe);
  background:radial-gradient(38% 120% at 84% 46%,var(--l1),transparent 72%),radial-gradient(30% 90% at 10% 100%,var(--l2),transparent 70%)}
.lueurs [data-l="sejour"]{--l1:color-mix(in srgb,var(--corail) 26%,transparent);--l2:color-mix(in srgb,var(--soleil) 10%,transparent)}
.lueurs [data-l="relance"]{--l1:color-mix(in srgb,var(--soleil) 26%,transparent);--l2:color-mix(in srgb,var(--corail) 12%,transparent)}
.lueurs [data-l="eco"]{--l1:color-mix(in srgb,var(--vert) 24%,transparent);--l2:color-mix(in srgb,var(--fanal) 16%,transparent)}
.lueurs [data-l="absence"]{--l1:color-mix(in srgb,var(--creux-clair) 24%,transparent);--l2:color-mix(in srgb,var(--mer) 18%,transparent)}
.lueurs [data-l="ete"]{--l1:color-mix(in srgb,var(--s-ete) 26%,transparent);--l2:color-mix(in srgb,var(--soleil) 10%,transparent)}
.lueurs [data-l="mi_saison"]{--l1:color-mix(in srgb,var(--s-mi-saison) 24%,transparent);--l2:color-mix(in srgb,var(--fanal) 12%,transparent)}
:is(.bandeau-haut[data-lueur="sejour"] [data-l="sejour"],.bandeau-haut[data-lueur="relance"] [data-l="relance"],
    .bandeau-haut[data-lueur="eco"] [data-l="eco"],.bandeau-haut[data-lueur="absence"] [data-l="absence"],
    .bandeau-haut[data-lueur="ete"] [data-l="ete"],.bandeau-haut[data-lueur="mi_saison"] [data-l="mi_saison"]){opacity:1}
header{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:max(12px,env(safe-area-inset-top)) 0 10px}
.marque{display:flex;align-items:center;gap:11px;margin:0 auto 0 0;min-width:0;flex:1 1 auto;color:inherit}
.marque .tuile{width:var(--puce);height:var(--puce);border-radius:50%;background:var(--creme);display:grid;place-items:center;flex:none;box-shadow:0 0 0 3px var(--voile-2)}
/* le fanal veille : quand le faisceau vient vers nous (quart du tour, même durée que lui), un halo doré s'allume autour
   du logo et la lanterne s'éclaire (deux calques, leur opacité seulement ; le logo lui-même reste net) */
.marque .tuile{position:relative}
.marque .tuile::before{content:"";position:absolute;inset:calc(var(--puce) / -2);border-radius:50%;pointer-events:none;
  background:radial-gradient(circle closest-side,transparent 50%,var(--halo-fanal) 53%,transparent 100%);opacity:0;animation:veille 18s ease-in-out infinite}
.marque .tuile::after{content:"";position:absolute;left:50%;top:11px;width:18px;height:18px;margin:-9px 0 0 -9px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle closest-side,var(--creme),var(--lumiere) 35%,transparent);opacity:0;animation:veille 18s ease-in-out infinite}
@keyframes veille{0%,15%,38%,100%{opacity:0}25%{opacity:.95}}
.marque .tuile img{width:82%;height:82%}
.marque > span{min-width:0}
.marque h1{display:block;margin:0;font-family:var(--serif);font-weight:700;font-size:var(--txt-xl);letter-spacing:.06em;line-height:1.1}
.marque span span{display:block;color:var(--creme-doux);font-size:var(--txt-xs);letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* pastilles de l'en-tête : même hauteur et même voile (étape, météo, réglages rapides) */
.puce-etape,.meteo,.btn-panneau{height:var(--puce);box-sizing:border-box;border:1px solid var(--voile-trait);background:var(--voile-1);
  color:var(--creme);border-radius:var(--rayon-rond);flex:none}
.puce-etape{display:inline-flex;align-items:center;gap:8px;padding:0 15px 0 13px;font:700 var(--txt-s) var(--sans);cursor:pointer}
.puce-etape i{flex:none;display:grid;place-items:center;width:24px;height:24px;margin-left:-6px;border-radius:50%;background:var(--teinte,var(--creme));color:var(--marine)}
.puce-etape i svg{width:14px;height:14px;color:inherit}
.puce-etape svg{width:15px;height:15px;flex:none;color:var(--creme-doux)}
.meteo{display:flex;align-items:center;gap:8px;padding:0 15px 0 10px;min-width:0;max-width:270px}
.meteo svg{width:26px;height:26px;flex:none}
.meteo > span{min-width:0;line-height:1.15}
.meteo strong{display:block;font-weight:800;font-size:var(--txt-m)}
.meteo .lieu{display:block;font-size:var(--txt-xs);color:var(--creme-doux);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.btn-panneau{position:relative;display:inline-flex;align-items:center;gap:9px;padding:0 14px 0 5px;cursor:pointer;text-align:left;font:inherit}
.bp-saison{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--teinte-s,var(--s-hiver));color:var(--marine);flex:none}
.bp-saison svg{width:18px;height:18px}
.bp-txt{display:grid;line-height:1.15;min-width:0}
.bp-txt b{font-size:var(--txt-s)}
.bp-txt small{font-size:var(--txt-xs);color:var(--creme-doux);white-space:nowrap}
.bp-txt small:empty{display:none}
.bp-ico{width:20px;height:20px;flex:none;opacity:.85}
/* un appareil n'est plus piloté : point soleil sur la saison, comme une notification */
.bp-alerte{position:absolute;top:3px;left:31px;width:12px;height:12px;border-radius:50%;background:var(--soleil);box-shadow:0 0 0 2px var(--marine)}
.puce-etape:hover,.btn-panneau:hover{background:var(--voile-2)}
/* mode clair ou sombre : soleil et lune côte à côte, le mode affiché en pastille crème (js/theme.js) */
.themes{flex:none;display:inline-flex;align-items:center;gap:2px;height:var(--puce);box-sizing:border-box;padding:3px;
  border:1px solid var(--voile-trait);background:var(--voile-1);border-radius:var(--rayon-rond)}
.themes button{display:grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:50%;background:none;
  color:var(--creme-doux);cursor:pointer;transition:background-color var(--duree-2) var(--courbe),color var(--duree-2) var(--courbe)}
.themes button:hover{background:var(--voile-2);color:var(--creme)}
.themes button[aria-pressed="true"]{background:var(--creme);color:var(--marine)}
.themes svg{width:18px;height:18px}
/* mode propriétaire : la page des voyageurs vue comme eux (lien du jour), un rond comme le mode d'affichage */
.btn-voyageurs{flex:none;display:grid;place-items:center;width:var(--puce);height:var(--puce);box-sizing:border-box;
  border:1px solid var(--voile-trait);background:var(--voile-1);border-radius:var(--rayon-rond);color:var(--creme);text-decoration:none}
.btn-voyageurs:hover{background:var(--voile-2)}
.btn-voyageurs svg{width:19px;height:19px}
/* plateforme (4.0.0) : picto du compte connecté (initiales), menu Mon compte, logement, console, déconnexion */
.btn-compte{flex:none;display:grid;place-items:center;width:var(--puce);height:var(--puce);box-sizing:border-box;padding:0;
  border:1px solid var(--voile-trait);background:var(--voile-1);border-radius:var(--rayon-rond);color:var(--creme);cursor:pointer}
.btn-compte:hover{background:var(--voile-2)}
.bc-initiales{font:800 var(--txt-s)/1 var(--sans);letter-spacing:.02em}
.menu-compte .mc-qui{display:grid;min-width:0}
.menu-compte .mc-qui h3{margin:0;overflow-wrap:anywhere}
.menu-compte .mc-qui small,.mc-logement small{color:var(--texte-2);overflow-wrap:anywhere}
.mc-logement{display:grid;margin:0}
.mc-liens{display:grid;gap:8px}
.mc-liens .btn{justify-content:center;text-align:center}
/* très petit téléphone (moins de 350 px) : la marque garde son logo seul, les réglages rapides restent sur la ligne */
@media (max-width:349px){ header .marque{flex:1 1 auto} header .marque > span{display:none} }
/* écran moyen et grand : une seule ligne ; l'étape puis la météo se resserrent (« … ») plutôt que de passer dessous */
@media (min-width:640px){
  header{flex-wrap:nowrap}
  .marque{flex:0 0 auto}
  .puce-etape{flex:0 1 auto;min-width:0}
  .puce-etape > span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .meteo{flex:0 1 auto}
}
@media (min-width:640px) and (max-width:1150px){
  .meteo{padding:0 13px 0 9px;flex:none}
  .meteo .lieu{display:none}
  /* hors de Maintenant, l'étape prend la place : le bouton des réglages rapides garde ses pictos (et son point) */
  header:has(.puce-etape:not(.cache)) .bp-txt{display:none}
  header:has(.puce-etape:not(.cache)) .btn-panneau{padding-right:11px}
}
@media (max-width:860px){ .pe-heure{display:none} }
.btn-panneau[data-saison="hiver"]{--teinte-s:var(--s-hiver)}
.btn-panneau[data-saison="mi_saison"]{--teinte-s:var(--s-mi-saison)}
.btn-panneau[data-saison="ete"]{--teinte-s:var(--s-ete)}

/* L'étape du logement : une pastille (picto et nom de l'étape, dans sa couleur), la phrase en Caslon avec l'heure qui
   compte en lumière, le calendrier vérifié, et à droite le cap : ce qui vient ensuite en compte à rebours, sur une frise
   (séjour : de l'arrivée au départ ; ailleurs : de maintenant à l'arrivée). Une nouvelle étape arrive en fondu (fondu(),
   maintenant.js). */
.hero{padding:6px 0 2px}
.hero-etat{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"etat cap" "txt cap";gap:12px clamp(24px,4vw,64px);align-items:start}
.etat{grid-area:etat;margin:0;display:flex;min-height:34px}
.etape{display:inline-flex;align-items:center;gap:10px;height:34px;padding:0 16px 0 4px;border-radius:var(--rayon-rond);
  background:color-mix(in srgb,var(--teinte,var(--creme)) 14%,transparent);border:1px solid color-mix(in srgb,var(--teinte,var(--creme)) 40%,transparent);
  font:800 var(--txt-xs)/1 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--creme)}
.etape-pic{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--teinte,var(--creme));color:var(--marine);flex:none}
.etape-pic svg{width:15px;height:15px}
.etape[data-k="prechauffage"] .etape-pic svg{transform-origin:50% 88%;animation:vacille 2.6s ease-in-out infinite}   /* relance : la flamme vacille, comme sur les fiches */
.hero-txt{grid-area:txt;min-width:0}
.sous-etat{margin:0;font-family:var(--serif);font-weight:400;font-size:clamp(1.3rem,2vw,1.75rem);line-height:1.22;letter-spacing:-.005em;
  color:var(--creme);text-wrap:balance}
.sous-etat.longue{max-width:52ch;font-size:clamp(1.12rem,1.5vw,1.3rem);line-height:1.32}
.sous-etat .cle{font-weight:700;color:var(--lumiere);white-space:nowrap;text-shadow:0 0 22px color-mix(in srgb,var(--lumiere) 35%,transparent)}
.meta{display:flex;align-items:center;gap:8px;color:var(--creme-doux);font-size:var(--txt-s);margin:8px 0 0;min-height:1.55em}   /* une ligne, réservée dès l'ouverture */
.meta::before{content:"";flex:none;width:7px;height:7px;border-radius:50%;background:var(--galet)}
.meta[data-frais="oui"]::before{background:var(--vert);box-shadow:0 0 0 3px color-mix(in srgb,var(--vert) 22%,transparent)}
.meta[data-frais="ko"]{color:var(--erreur-sur-marine)}   /* calendrier illisible : l'heure reste, en couleur d'alerte (le bandeau dessous explique) */
.meta[data-frais="ko"]::before{background:var(--corail);box-shadow:0 0 0 3px color-mix(in srgb,var(--corail) 25%,transparent)}
.meta:empty::before{display:none}
.cap{grid-area:cap;align-self:center;width:clamp(260px,28vw,360px);padding:13px 18px 12px;border-radius:var(--rayon-l);
  background:linear-gradient(160deg,var(--voile-2),var(--voile-1));border:1px solid var(--voile-trait)}
.cap-tete{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin:0}
.cap-quoi{font-size:var(--txt-micro);font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--creme-doux)}
.cap-reste{font-family:var(--serif);font-weight:700;font-size:var(--txt-2xl);line-height:1.1;color:var(--creme);font-variant-numeric:tabular-nums;white-space:nowrap}
/* frise : les étapes jusqu'au prochain évènement, aux couleurs du planning ; le passé voilé et strié comme au planning,
   le point « maintenant », un anneau au bout. Le temps avance par --p, --a et --l (posés seulement s'ils changent) ;
   une frise neuve se déroule une fois (.neuf, retirée ensuite) */
.cap-piste{position:relative;height:5px;margin:13px 7px 10px 0;border-radius:var(--rayon-rond);background:var(--voile-1);box-shadow:inset 0 0 0 1px var(--voile-trait)}
.cap-seg{position:absolute;top:0;bottom:0;left:calc(var(--a,0) * 100%);width:calc(var(--l,1) * 100%);min-width:4px;transform-origin:left;
  background:color-mix(in srgb,var(--c) 86%,var(--marine))}
.cap-seg:first-child{border-radius:var(--rayon-rond) 0 0 var(--rayon-rond)}
.cap-seg:nth-last-child(3){border-top-right-radius:var(--rayon-rond);border-bottom-right-radius:var(--rayon-rond)}
.cap-seg + .cap-seg{box-shadow:inset 2px 0 0 var(--marine)}
.cap-passe{position:absolute;inset:0;border-radius:var(--rayon-rond) 0 0 var(--rayon-rond);transform-origin:left;transform:scaleX(var(--p,0));
  background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--marine) 72%,transparent) 0 3px,color-mix(in srgb,var(--marine) 48%,transparent) 3px 6px)}
.cap-piste::after{content:"";position:absolute;right:-6px;top:50%;width:12px;height:12px;margin-top:-6px;border-radius:50%;
  background:var(--marine);box-shadow:inset 0 0 0 2px var(--creme-fort)}
/* le point « maintenant » est au bord droit d'une boîte de la largeur de la frise, décalée de (--p − 1) : la boîte ne
   dépasse jamais à droite (décalée de --p, elle élargissait la page au téléphone, qui glissait de côté : 3.5.3) */
.cap-curseur{position:absolute;inset:0;transform:translateX(calc((var(--p,0) - 1) * 100%));pointer-events:none}
.cap-curseur i{position:absolute;right:-7px;top:50%;width:14px;height:14px;margin-top:-7px;border-radius:50%;background:var(--creme);
  box-shadow:0 0 0 3px var(--marine),0 0 14px 2px color-mix(in srgb,var(--lumiere) 55%,transparent)}
.cap.neuf .cap-seg{animation:deroule var(--duree-lente) var(--courbe) both;animation-delay:calc(var(--i,0) * 70ms + 160ms)}
.cap.neuf .cap-passe{animation:deroule var(--duree-lente) var(--courbe) both;animation-delay:160ms}
.cap.neuf .cap-curseur{animation:avance var(--duree-lente) var(--courbe) both;animation-delay:160ms}
.cap.neuf .cap-curseur i{animation:point var(--duree-4) var(--ressort) both;animation-delay:120ms}
@keyframes avance{from{transform:translateX(-100%)}}
.cap-bornes{display:flex;justify-content:space-between;gap:10px;margin:6px 0 0;font-size:var(--txt-xs);color:var(--creme-doux)}
.cap-piste + .cap-bornes{margin-top:0}
.cap-nuit{color:var(--creme-fort);font-weight:700}
/* ce que Fanal pilote en ce moment (radiateurs, ballon) : toucher amène à son interrupteur */
.hero-pilotes{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 2px}
.hero-pilotes:empty{display:none}
.puce-pilote{display:inline-flex;align-items:center;gap:8px;padding:5px 14px 5px 11px;border-radius:var(--rayon-rond);border:1px solid var(--voile-trait);
  background:var(--voile-1);color:var(--creme);font:700 var(--txt-s) var(--sans);cursor:pointer}
.puce-pilote:hover{background:var(--voile-2)}
.puce-pilote i{flex:none;width:9px;height:9px;border-radius:50%;background:var(--vert);box-shadow:0 0 0 3px color-mix(in srgb,var(--vert) 25%,transparent)}
.puce-pilote.off{color:var(--creme-doux);border-style:dashed}
.puce-pilote.off i{background:var(--soleil);box-shadow:0 0 0 3px color-mix(in srgb,var(--soleil) 25%,transparent)}
/* Saison du logement : hiver (calendrier), mi-saison (éco permanent), été (hors-gel permanent) */
.saisons [data-saison="hiver"]{--teinte-s:var(--s-hiver)}
.saisons [data-saison="mi_saison"]{--teinte-s:var(--s-mi-saison)}
.saisons [data-saison="ete"]{--teinte-s:var(--s-ete)}
.controle-saison{display:inline-flex;align-items:center;gap:6px;margin:10px 0 0;padding:4px 12px 4px 8px;border-radius:var(--rayon-rond);
         font-size:var(--txt-s);font-weight:700;background:var(--voile-2);color:var(--creme)}
.controle-saison svg{width:16px;height:16px;flex:none}
.controle-saison.ko{background:color-mix(in srgb,var(--corail) 25%,transparent)}
.legende{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:var(--txt-s);color:var(--texte-2);margin:12px 0 0;padding:0;list-style:none}
/* Pastilles de couleur des légendes, bulles, consignes et jours : un petit carré arrondi, couleur dans --c */
:is(.legende,.legende-prog,.infobulle,.bulle-prog,.puce-jour,.consignes) i{display:inline-block;width:10px;height:10px;border-radius:3px;
  margin-right:6px;vertical-align:-1px;background:var(--c,var(--galet))}
:is(.infobulle,.bulle-prog,.consignes) i{width:8px;height:8px;vertical-align:0}
.consignes i{border-radius:50%;margin-right:5px}
.legende i.trait{height:5px;vertical-align:2px}
.legende i.pointille{background:none;border-top:2px dotted var(--eau);height:0;border-radius:0;vertical-align:3px}
.legende i.rayé{background:var(--e-relance)}
.legende .k-sejour{background:var(--corail)} .legende .k-prechauffage{background:var(--soleil)}
.legende .k-enchainement{background:var(--vert)} .legende .k-creux{background:var(--mer)}
/* La mer au pied du bandeau : houle au large (bleutée) et vague du bord (couleur de la page) avec ses deux traits olive,
   comme les vagues du logo. Chaque calque fait deux largeurs d'écran, répété à mi-largeur : il glisse d'une demi-largeur
   par tour, sans couture, en transform seulement (les deux en sens contraires, très lentement). */
.mer{position:relative;height:40px;margin-top:-1px;overflow:hidden}
.houle{position:absolute;left:0;bottom:0;display:block;width:200%;height:100%}
.houle.loin{fill:var(--houle-loin);opacity:.75;animation:houle 150s linear infinite reverse}
.houle.rive{animation:houle 110s linear infinite}
.houle .eau{fill:var(--fond)}
.houle .bord{stroke:var(--olive);stroke-width:3;stroke-linecap:round;vector-effect:non-scaling-stroke}
.houle .crete{stroke:var(--olive-2);stroke-width:2;stroke-linecap:round;vector-effect:non-scaling-stroke;opacity:.8}
@keyframes houle{to{transform:translateX(-50%)}}

/* ===== Maintenant : planning des 14 prochains jours =====
   Une colonne par jour (aujourd'hui d'abord, week-ends teintés), une piste par sujet : séjours, radiateurs, eau
   chaude. Même langage que la frise de Prévisualiser : tuile de picto devant chaque piste, filets fins entre les
   jours, aujourd'hui en pastille corail, passé voilé, repère corail de l'heure actuelle dont le point respire. Le
   jour choisi : sa date dans une pastille marine qui glisse d'un jour à l'autre (comme le repère des onglets) ;
   rien autour d'aujourd'hui ni de sa colonne. Les barres disent ce qu'elles sont quand elles ont la place ; toucher
   un jour (ou une barre) en donne le détail dessous, heure par heure. Sur téléphone la grille défile de côté, les
   pictos des pistes restent à gauche. */
.planning{--nom:140px;--piste:30px;position:relative;background:var(--carte);border-radius:var(--rayon-xl);box-shadow:var(--ombre);padding:16px var(--esp-5) 18px;margin:6px 0 0}
.pl-tete{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin:0 0 10px}
.pl-tete h2{margin:0;font-size:var(--txt-2xl)}
/* résumé à côté du titre : « 12 nuits occupées sur 14 », point corail des séjours */
.pl-resume{display:inline-flex;align-items:center;gap:7px;margin-right:auto;font-size:var(--txt-s);font-weight:700;color:var(--texte-2)}
.pl-resume:empty{display:none}
.pl-resume::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--corail)}
.pl-defile{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;margin:0 calc(-1 * var(--esp-5));padding:0 var(--esp-5) 4px;
  scroll-padding-left:var(--nom);isolation:isolate}   /* plans du planning (noms collants, repère) gardés chez lui (#29) */
.pl-grille{--j:minmax(44px,1fr);display:grid;grid-template-columns:var(--nom) repeat(var(--n,14),var(--j));
  column-gap:0;row-gap:8px;min-width:calc(var(--nom) + var(--n,14) * 44px);position:relative}
/* en-tête des jours : jour de la semaine en petites capitales, date en Caslon */
.pl-jour{grid-row:1;position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-width:0;min-height:54px;
  margin:0 2px 2px;padding:6px 0 7px;border:0;border-radius:var(--rayon-m);background:none;color:var(--texte-2);
  font:800 var(--txt-micro)/1.1 var(--sans);text-transform:uppercase;letter-spacing:.06em;cursor:pointer;transition:color var(--duree-2),background-color var(--duree-1)}
.pl-jour b{display:grid;place-items:center;min-width:30px;height:28px;padding:0 4px;border-radius:var(--rayon-rond);
  font:700 var(--txt-l)/1 var(--serif);text-transform:none;letter-spacing:0;color:var(--texte);font-variant-numeric:tabular-nums;
  transition:color var(--duree-2),background-color var(--duree-2)}
.pl-jour.we{color:color-mix(in srgb,var(--corail) 85%,var(--texte-2))}
.pl-jour.auj{color:var(--corail)}
.pl-jour.auj b{background:var(--corail);color:var(--sur-couleur);box-shadow:0 3px 10px color-mix(in srgb,var(--corail) 32%,transparent)}
.pl-jour:hover:not([aria-pressed="true"]){background:color-mix(in srgb,var(--texte) 5%,transparent)}
.pl-jour[aria-pressed="true"]:not(.auj){color:var(--texte)}
.pl-jour[aria-pressed="true"]:not(.auj) b{color:var(--creme)}
/* pastille marine du jour choisi : derrière sa date, elle glisse (translate) depuis le jour d'avant ; sur aujourd'hui
   elle s'efface (son rond corail suffit) */
.pl-curseur{grid-row:1;position:relative;z-index:1;pointer-events:none;
  transition:translate var(--duree-3) var(--courbe),opacity var(--duree-2) var(--courbe)}
.pl-curseur::before{content:"";position:absolute;left:50%;bottom:9px;width:36px;height:28px;margin-left:-18px;border-radius:var(--rayon-rond);
  background:var(--marine-plein);box-shadow:inset 0 0 0 1px var(--marine-plein-trait),var(--ombre-s)}
.pl-curseur.sur-auj{opacity:0}
/* jour tout juste choisi : sa date, refaite, part de la couleur du texte (classe glisse, ôtée quand la pastille part)
   et ne passe en crème qu'une fois la pastille presque arrivée (elle va vite, puis ralentit) ; crème sur la carte, elle
   disparaissait le temps du trajet */
.pl-grille.glisse .pl-jour[aria-pressed="true"]:not(.auj) b{color:var(--texte)}
.pl-jour[aria-pressed="true"]:not(.auj) b{transition-delay:var(--duree-1)}
/* noms des pistes : tuile de picto teintée de la piste, nom en petites capitales */
/* (collé au bord du défilement, il garde sa colonne ; son ombre pleine couvre la marge à sa gauche, sous laquelle
   les barres passent quand la grille défile) */
.pl-nom{grid-column:1;position:sticky;left:0;z-index:4;display:flex;align-items:center;gap:9px;min-width:0;
  padding:0 8px 0 0;background:var(--carte);box-shadow:calc(-1 * var(--esp-5)) 0 0 var(--carte);font:800 var(--txt-micro)/1.2 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--texte-2)}
.pl-ico{--k:var(--galet);flex:none;display:grid;place-items:center;width:28px;height:28px;border-radius:var(--rayon-s);
  color:color-mix(in srgb,var(--k) 85%,var(--texte));background:color-mix(in srgb,var(--k) 13%,var(--carte))}
.pl-ico svg{width:16px;height:16px}
.pl-nom-sejours .pl-ico{--k:var(--corail)} .pl-nom-radiateurs .pl-ico{--k:var(--soleil)} .pl-nom-eau .pl-ico{--k:var(--eau)}
.pl-nom span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.pl-voie{grid-column:2/-1;position:relative;height:var(--piste);cursor:pointer}
/* fond : colonnes des jours sur toute la hauteur, week-end teinté, filet plus marqué en début de semaine */
.pl-fond{grid-column:2/-1;position:relative;display:grid;grid-template-columns:repeat(var(--n,14),minmax(0,1fr));
  margin:0 0 -4px;pointer-events:none}
.pl-fond i{border-left:1px solid color-mix(in srgb,var(--trait) 55%,transparent)}
.pl-fond i:first-child{border-left-color:transparent}
.pl-fond i.lun{border-left-color:var(--trait)}
.pl-fond i.we{background:color-mix(in srgb,var(--sable) 42%,transparent);border-left-color:transparent}
.pl-fond i.we + i{border-left-color:transparent}
.pl-fond i.sam{border-radius:var(--rayon-m) 0 0 var(--rayon-m)} .pl-fond i.dim{border-radius:0 var(--rayon-m) var(--rayon-m) 0}
/* le temps : passé d'aujourd'hui voilé (par-dessus les barres), trait de l'heure actuelle, son point qui respire */
.pl-temps{grid-column:2/-1;position:relative;z-index:3;margin:-4px 0;pointer-events:none}
.pl-passe{position:absolute;top:0;bottom:0;left:0;width:calc(var(--m) * 1%);
  background:linear-gradient(90deg,color-mix(in srgb,var(--carte) 70%,transparent),color-mix(in srgb,var(--carte) 45%,transparent))}
.pl-maint{position:absolute;top:-2px;bottom:0;left:calc(var(--m) * 1%);width:2px;margin-left:-1px;border-radius:2px;
  background:linear-gradient(180deg,var(--corail) 70%,color-mix(in srgb,var(--corail) 0%,transparent))}
.pl-maint::before,.pl-maint::after{content:"";position:absolute;top:-5px;left:-4px;width:10px;height:10px;border-radius:50%;background:var(--corail)}
.pl-maint::before{box-shadow:0 0 0 3px var(--carte);z-index:1}
/* l'onde : un anneau corail qui s'élargit et s'efface (transform et opacity seulement) ; --phase garde le rythme
   d'un dessin à l'autre */
.pl-maint::after{animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}
@keyframes onde{0%{transform:scale(1);opacity:.55}70%,100%{transform:scale(var(--onde,3.2));opacity:0}}
/* barres : teinte de leur genre (--c) et un liseré plein au début (une étape courte reste un trait franc) ; l'étape
   en cours est pleine, avec une légère lumière en haut ; le texte se cache quand la barre est trop courte pour lui */
.pl-barre{position:absolute;top:0;bottom:0;left:calc(var(--a) * 1%);width:calc(var(--l) * 1%);min-width:3px;container-type:inline-size;
  display:flex;align-items:center;gap:5px;padding:0 9px 0 11px;overflow:hidden;border-radius:var(--rayon-s);
  background:color-mix(in srgb,var(--c,var(--galet)) 20%,var(--carte));color:color-mix(in srgb,var(--c,var(--galet)) var(--mix-barre),var(--texte));
  font:700 var(--txt-xs)/1 var(--sans);white-space:nowrap;box-shadow:inset 3px 0 0 var(--c,var(--galet))}
.pl-barre.en-cours,.pl-barre.court{background:linear-gradient(180deg,color-mix(in srgb,#fff 16%,transparent),transparent 65%),var(--c-plein,var(--c,var(--galet)));
  color:var(--t,var(--sur-couleur));box-shadow:inset 0 -1px 0 color-mix(in srgb,var(--c,var(--galet)) 60%,#000 14%)}
.pl-barre + .pl-barre{border-top-left-radius:3px;border-bottom-left-radius:3px}
.pl-barre:has(+ .pl-barre){border-top-right-radius:3px;border-bottom-right-radius:3px}
.pl-barre span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.pl-barre svg{width:14px;height:14px;flex:none}
@container (max-width:46px){ .pl-barre:not(.bloque) > *{display:none} }
.pl-barre.court{padding:0}
.pl-barre.debut-coupe{border-top-left-radius:0;border-bottom-left-radius:0}
.pl-barre.fin-coupe{border-top-right-radius:0;border-bottom-right-radius:0}
.pl-barre.k-sejour{--c:var(--corail);--c-plein:var(--corail-plein)} .pl-barre.k-prechauffage{--c:var(--soleil);--t:var(--sur-soleil)}
.pl-barre.k-enchainement{--c:var(--vert);--c-plein:var(--vert-plein)} .pl-barre.k-creux{--c:var(--creux-clair);--t:var(--marine)}
.pl-barre.k-ete{--c:var(--s-ete);--t:var(--marine)} .pl-barre.k-mi_saison{--c:var(--s-mi-saison);--t:var(--marine)}
.pl-barre.k-pause{--c:var(--pause);--t:var(--marine)}
.pl-barre.k-proprietaire{--c:var(--lilas)}   /* votre séjour (mode séjour propriétaire) : aucun ordre de Fanal */
.pl-barre.e-sejour{--c:var(--e-sejour);--c-plein:var(--corail-plein)} .pl-barre.e-menage{--c:var(--e-menage);--t:var(--sur-soleil)} .pl-barre.e-plein{--c:var(--e-plein);--t:var(--sur-soleil)}
.pl-barre.e-reduit{--c:var(--e-reduit);--c-plein:var(--vert-plein)} .pl-barre.e-absence{--c:var(--e-absence)}
.pl-barre.e-relance{background:var(--e-relance);text-shadow:0 1px 2px rgba(0,0,0,.35);color:#fff;box-shadow:none}
/* séjours : un billet sur deux lignes (le nom, puis voyageurs et heures), dégradé corail de l'arrivée au départ ; les
   dates bloquées rayées. Ce qui ne tient pas cède la place : nom de la plateforme seule, puis voyageurs sans les heures */
.pl-voie[data-piste="sejours"]{height:calc(var(--piste) + 10px)}
.pl-barre.sejour,.pl-barre.bloque{border-radius:var(--rayon-m)}
.pl-barre.sejour{flex-direction:column;align-items:stretch;justify-content:center;gap:2px;padding:0 10px 0 12px;color:var(--texte);
  background:linear-gradient(90deg,color-mix(in srgb,var(--corail) 26%,var(--carte)),color-mix(in srgb,var(--corail) 9%,var(--carte)));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--corail) 50%,transparent)}
.pl-barre.sejour svg{color:var(--corail)}
/* votre séjour (mode séjour propriétaire) : le même billet, en lilas */
.pl-barre.sejour.proprio{background:linear-gradient(90deg,color-mix(in srgb,var(--lilas) 24%,var(--carte)),color-mix(in srgb,var(--lilas) 8%,var(--carte)));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--lilas) 50%,transparent)}
.pl-barre.sejour.proprio > .pl-s2{color:color-mix(in srgb,var(--lilas) 60%,var(--texte))}
.pl-barre.sejour > span{display:block;overflow:hidden;text-overflow:ellipsis}
.pl-barre.sejour > .pl-s2{display:flex;align-items:center;gap:4px;font-weight:700;font-size:var(--txt-micro);color:color-mix(in srgb,var(--corail) 55%,var(--texte))}
.pl-s2 svg{width:12px;height:12px}
.pl-s2 b{font-weight:800}
.pl-s-h{min-width:0;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.pl-s-court{display:none}
.pl-barre.sejour.nom-court .pl-s-long{display:none} .pl-barre.sejour.nom-court .pl-s-court{display:inline}   /* (ajusterSejours) */
.pl-barre.sejour.sans-heures .pl-s-h{display:none}
/* douches visées sur la barre de l'eau chaude, quand elle a la place */
@container (max-width:150px){ .pl-dch{display:none} }
@container (max-width:46px){ .pl-barre.sejour > .pl-s1,.pl-barre.sejour > .pl-s2{display:none} }
.pl-barre.bloque{justify-content:center;padding:0 6px}
.pl-barre.bloque span{display:none}
.pl-barre.bloque{background:repeating-linear-gradient(135deg,color-mix(in srgb,var(--galet) 26%,transparent) 0 4px,transparent 4px 9px),var(--carte);
  color:var(--texte-2);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--galet) 60%,transparent)}
.pl-vide{grid-column:2/-1;align-self:center;font-size:var(--txt-s);color:var(--texte-2);font-style:italic;padding-left:8px}
.pl-voie.coupee{opacity:.55}
/* première apparition : chaque piste se déroule à son tour, puis le repère « maintenant » arrive */
.anime .pl-voie{animation:balaye var(--duree-lente) var(--courbe) backwards;animation-delay:calc(var(--i,0) * 90ms)}
.anime .pl-temps{animation:fondu var(--duree-4) var(--courbe) backwards;animation-delay:var(--duree-4)}
/* détail du jour choisi : une petite frise verticale, un point par étape relié au suivant */
.pl-detail{margin:16px 0 0;padding:14px var(--esp-4) 14px;border-radius:var(--rayon-l);background:var(--fond);border:1px solid var(--trait)}
.pl-detail.change{animation:apparait var(--duree-3) var(--courbe)}
.pl-detail h3{font-size:var(--txt-l);margin:0 0 10px}
.pl-evts{list-style:none;margin:0;padding:0;display:grid;gap:0}
.pl-evts li{position:relative;display:grid;grid-template-columns:5.6em 12px minmax(0,1fr);align-items:baseline;gap:4px 10px;padding:0 0 9px;font-size:var(--txt-m)}
.pl-evts li:last-child{padding-bottom:0}
.pl-evts li:not(:last-child)::before{content:"";position:absolute;left:calc(5.6em + 15px);top:calc(.42em + 12px);bottom:-.1em;width:2px;margin-left:-1px;
  border-radius:2px;background:color-mix(in srgb,var(--trait) 85%,transparent)}
.pl-evts time{font-variant-numeric:tabular-nums;font-weight:700;color:var(--texte-2);font-size:var(--txt-s)}
.pl-evts li.maint time{color:var(--corail)}
.pl-evts i{width:12px;height:12px;border-radius:50%;background:var(--c,var(--galet));align-self:start;margin-top:.36em;
  box-shadow:0 0 0 3px var(--fond)}
.pl-evts li.e-relance i{background:var(--e-relance)}
.pl-evts b{font-weight:700}
.pl-evts small{color:var(--texte-2);font-size:var(--txt-s)}
.pl-legendes{display:grid;gap:6px;margin:14px 0 0}
.pl-legende{margin:0;gap:4px 16px;color:var(--texte-2)}
.pl-legende i{width:16px;height:8px;border-radius:var(--rayon-rond);vertical-align:1px}
.pl-leg-nom{font-weight:800;color:var(--texte);min-width:7.5em;font-size:var(--txt-micro);letter-spacing:.06em;text-transform:uppercase}
@media (max-width:639px){
  .planning{padding:14px var(--esp-4) 16px;margin-left:calc(-1 * clamp(14px,3vw,28px) + 6px);margin-right:calc(-1 * clamp(14px,3vw,28px) + 6px)}
  .pl-tete h2{font-size:var(--txt-xl)}
  .pl-defile{margin:0 calc(-1 * var(--esp-4));padding:0 var(--esp-4) 4px}
  .planning{--nom:44px;--piste:28px}
  .pl-grille{--j:minmax(46px,1fr);min-width:calc(var(--nom) + var(--n,14) * 46px)}
  .pl-nom{padding:0 6px 0 0;box-shadow:calc(-1 * var(--esp-4)) 0 0 var(--carte)}
  .pl-nom span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}   /* le nom reste lu (lecteurs d'écran), le picto suffit à l'œil */
  .pl-ico{width:26px;height:26px}
  .pl-evts li{grid-template-columns:5.4em 12px minmax(0,1fr);font-size:var(--txt-s)}
  .pl-evts li:not(:last-child)::before{left:calc(5.4em + 15px)}
  .pl-legendes{font-size:var(--txt-xs)}
  .pl-legende{font-size:inherit;gap:2px 12px}
  /* l'information d'abord : titre et résumé, la grille, puis « Toutes les actions à venir » en pleine largeur */
  .planning{display:flex;flex-direction:column}
  .pl-tete{display:contents}
  .pl-tete h2{margin:0}
  .pl-resume{order:1;margin:4px 0 10px}
  .pl-corps{order:2}
  #pl-tout{order:3;align-self:stretch;min-height:44px;margin-top:14px}
}

/* ===== Onglets =====
   Ordinateur : picto et nom côte à côte ; écran moyen (Fold ouvert, tablette, téléphone en paysage) : les neuf noms
   sous leur picto, sur toute la largeur ; téléphone : barre en bas (plus bas). */
nav{display:flex;gap:4px;padding:10px 0 6px;overflow-x:auto;position:sticky;top:0;z-index:var(--plan-onglets);background:var(--fond)}
nav button{display:inline-flex;align-items:center;gap:7px;background:transparent;border:1px solid transparent;padding:8px 14px 8px 12px;
  border-radius:var(--rayon-rond);cursor:pointer;color:var(--texte-2);white-space:nowrap;font-weight:700}
nav .ico{width:18px;height:18px;flex:none}
nav button:hover{color:var(--texte);border-color:var(--trait)}
nav button[aria-selected="true"]{background:var(--marine-plein);color:var(--creme);box-shadow:inset 0 0 0 1px var(--marine-plein-trait)}
/* Repère de l'onglet choisi : il glisse d'un onglet à l'autre (place et taille données par le code) */
nav button{position:relative;transition:color var(--duree-2),scale var(--duree-1) var(--courbe)}
.bascule,.val-consigne{transition:border-color var(--duree-1),background-color var(--duree-1),scale var(--duree-1) var(--courbe)}
/* Retour au toucher : le bouton s'enfonce légèrement pendant l'appui */
:is(.btn,nav button,.saisons button,.periode button,.val-consigne,.bascule,.btn-panneau,.puce-etape,.carte-ouvrir):active:not([disabled]){scale:.97}
nav .repere{position:absolute;left:0;top:0;width:var(--l,0);height:var(--h,0);transform:translate(var(--x,0),var(--y,0));
  border-radius:var(--rayon-rond);background:var(--marine-plein);box-shadow:inset 0 0 0 1px var(--marine-plein-trait);pointer-events:none;
  opacity:0;transition:transform var(--duree-3) var(--courbe),width var(--duree-3) var(--courbe),height var(--duree-3) var(--courbe)}
nav.repere-pret .repere{opacity:1}
nav.repere-pret button[aria-selected="true"]{background:transparent;box-shadow:none}
/* Contenu d'un onglet : apparaît en fondu en montant légèrement */
/* (l'onglet arrive de son côté de la barre : --glisse-x et --glisse-y posés par le code) */
main{animation:vue-glisse var(--duree-3) var(--courbe)}
#hero{animation:vue-entree var(--duree-3) var(--courbe)}
@keyframes vue-entree{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes vue-glisse{from{opacity:0;transform:translate(var(--glisse-x,0px),var(--glisse-y,8px))}to{opacity:1;transform:none}}
main{padding:18px 0 120px}

/* ===== Boutons, champs ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--esp-2);border:1.5px solid var(--contour-btn);background:transparent;
     color:var(--texte);padding:9px 18px;border-radius:var(--rayon-rond);cursor:pointer;font-weight:700;font-size:var(--txt-m);text-decoration:none}
.btn svg{width:18px;height:18px;flex:none}
.btn:hover{background:var(--sable)}
.btn.plein{background:var(--marine-plein);color:var(--creme);border-color:var(--contour-btn)}
.btn.chaud{background:var(--corail-plein);border-color:var(--corail-plein);color:var(--sur-couleur)}
.btn.chaud:hover,.btn.plein:hover{filter:brightness(1.08)}
.btn{transition:background-color var(--duree-1),filter var(--duree-1),scale var(--duree-1) var(--courbe)}
.btn.petit{padding:4px 12px;font-size:var(--txt-s);border-width:1px;gap:6px}
.btn.petit svg{width:15px;height:15px}
.btn[disabled],.btn[aria-busy="true"]{opacity:.5;cursor:wait}
label{display:block;font-weight:700;font-size:var(--txt-m);margin-bottom:6px}
.aide{display:block;font-weight:400;color:var(--texte-2);font-size:var(--txt-s);margin-top:3px}
input:is([type=text],[type=email],[type=password],[type=url],[type=number],[type=search],[type=tel],[type=time],[type=date],[type=datetime-local]),
select,textarea{width:100%;padding:10px 12px;border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--fond)}
:where(input:is([type=text],[type=email],[type=password],[type=url],[type=number],[type=search],[type=tel],[type=time],[type=date],[type=datetime-local]),select,textarea):hover{
  border-color:color-mix(in srgb,var(--texte-2) 55%,var(--trait))}
:where(input,select,textarea):focus{border-color:var(--focus)}
:where(input,select,textarea)[disabled]{opacity:.55;cursor:not-allowed}
::placeholder{color:var(--texte-2);opacity:.8}
input.court{width:5.5em;display:inline-block;padding:7px 8px;text-align:right}
textarea{min-height:84px;resize:vertical}
.case{display:flex;gap:10px;align-items:flex-start;font-weight:400}
.case input{width:20px;height:20px;margin-top:3px;accent-color:var(--marine);flex:none}
.ligne{display:flex;gap:10px;align-items:flex-end}
.ligne > :first-child{flex:1}
.bandeau{padding:12px 16px;border-radius:var(--rayon-m);margin:0 0 18px;border:1.5px solid var(--alerte);color:var(--alerte);background:var(--carte)}
.bandeau.simu{border-color:var(--mer);color:var(--lien)}
/* Alerte : module Heatzy disparu du compte */
.alerte-modules{display:grid;grid-template-columns:auto 1fr;gap:4px 16px;margin:14px 0 6px;padding:18px 20px 18px 18px;border-radius:var(--rayon-xl);
  background:linear-gradient(135deg,color-mix(in srgb,var(--corail) 10%,transparent),color-mix(in srgb,var(--corail) 3%,transparent) 60%),var(--carte);border:1.5px solid var(--corail);
  box-shadow:var(--ombre);position:relative;overflow:hidden;animation:alerte-entree var(--duree-3) var(--courbe) both}
.alerte-modules::before{content:"";position:absolute;inset:0 auto 0 0;width:5px;background:var(--corail)}
.alerte-modules.attention{border-color:var(--soleil);background:linear-gradient(135deg,color-mix(in srgb,var(--soleil) 13%,transparent),color-mix(in srgb,var(--soleil) 3%,transparent) 60%),var(--carte)}
.alerte-modules.attention::before{background:var(--soleil)}
.alerte-modules.attention .am-ico{background:var(--soleil);box-shadow:0 0 0 6px color-mix(in srgb,var(--soleil) 18%,transparent)}
.alerte-modules.attention .am-ico::after{content:none}
.alerte-modules + .alerte-modules{margin-top:10px}
.puce-alerte.attention{background:var(--soleil);color:var(--sur-soleil);box-shadow:0 6px 18px color-mix(in srgb,var(--soleil) 35%,transparent)}
.parc-liste{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:8px;width:100%}
.parc .etat-parc.attention i{background:var(--soleil)}
.alerte-modules.conso.eau{--pouls:var(--eau);border-color:var(--eau);background:linear-gradient(135deg,color-mix(in srgb,var(--eau) 12%,transparent),color-mix(in srgb,var(--eau) 3%,transparent) 60%),var(--carte)}
.alerte-modules.conso.eau::before{background:var(--eau)}
.alerte-modules.conso.eau .am-ico{background:var(--eau);box-shadow:0 0 0 6px color-mix(in srgb,var(--eau) 18%,transparent)}
.alerte-modules.conso.eau .am-type{--b:var(--eau)}
.alerte-modules.conso.attention .am-ico{color:var(--sur-soleil)}
.regle-eau[data-regle="electricite"] .re-ico{color:var(--sur-soleil)}
.alerte-modules.info{border-color:var(--mer);background:linear-gradient(135deg,color-mix(in srgb,var(--mer) 10%,transparent),color-mix(in srgb,var(--mer) 3%,transparent) 60%),var(--carte)}
.alerte-modules.info::before{background:var(--mer)}
.alerte-modules .am-ico{grid-row:1/span 4;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;background:var(--corail);color:var(--sur-couleur);
  position:relative;box-shadow:0 0 0 6px color-mix(in srgb,var(--pouls,var(--corail)) 16%,transparent)}
/* l'anneau respire : un second anneau qui s'élargit puis revient (transform et opacity seulement) */
.alerte-modules .am-ico::after{content:"";position:absolute;inset:0;border-radius:50%;pointer-events:none;
  box-shadow:0 0 0 6px color-mix(in srgb,var(--pouls,var(--corail)) 14%,transparent);animation:anneau 2.4s ease-in-out infinite}
.alerte-modules.info .am-ico{background:var(--mer);box-shadow:0 0 0 6px color-mix(in srgb,var(--mer) 16%,transparent)}
.alerte-modules.info .am-ico::after{content:none}
.alerte-modules .am-ico svg{width:24px;height:24px}
.alerte-modules h3{margin:2px 0 0}
.alerte-modules p{margin:2px 0 0;color:var(--texte-2);font-size:var(--txt-m)}
.am-liste{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 2px;padding:0;list-style:none}
.am-aide{margin-top:8px;font-size:var(--txt-m)}
.am-aide summary{cursor:pointer;font-weight:700;color:var(--texte)}
.am-aide ol{margin:6px 0 0;padding-left:20px;color:var(--texte-2)}
.am-aide li{margin:3px 0}
.am-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.am-actions,.am-aide,.am-liste{grid-column:2}
@keyframes alerte-entree{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
@keyframes anneau{0%,100%{transform:scale(1);opacity:0}50%{transform:scale(1.14);opacity:1}}
@media (max-width:639px){.alerte-modules{grid-template-columns:1fr;padding:16px}.alerte-modules .am-ico{grid-row:auto;width:40px;height:40px}
  .am-actions,.am-aide,.am-liste,.alerte-modules .am-type{grid-column:1}.am-actions .btn{flex:1 1 auto}}
/* pastille d'alerte de l'en-tête : texte sur grand écran, picto seul ailleurs (la bannière détaillée est juste dessous) */
.puce-alerte{flex:none;height:var(--puce);box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:0 16px 0 12px;border-radius:var(--rayon-rond);
  border:0;background:var(--corail-plein);color:var(--sur-couleur);font-weight:800;font-size:var(--txt-s);white-space:nowrap;cursor:pointer;box-shadow:0 6px 18px color-mix(in srgb,var(--corail) 35%,transparent);animation:alerte-entree var(--duree-3) var(--courbe) both}
.puce-alerte svg{width:18px;height:18px;flex:none}
@media (max-width:1149px){
  .puce-alerte{width:var(--puce);padding:0}
  .puce-alerte .pa-txt{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
}
/* téléphone : deuxième ligne de l'en-tête, avec l'étape ; seule (Maintenant), elle garde son texte */
@media (max-width:639px){
  .puce-alerte{height:36px;width:36px}
  header:has(.puce-etape.cache) .puce-alerte{width:auto;padding:0 14px 0 11px}
  header:has(.puce-etape.cache) .puce-alerte .pa-txt{position:static;width:auto;height:auto;clip-path:none}
}
.puce-alerte:hover{filter:brightness(1.06)}
.cozy-app{margin:10px 0}
.cozy-app summary{cursor:pointer}
.cozy-app small{color:var(--texte-2)}
.cozy-etats{width:100%;border-collapse:collapse;margin-top:8px;font-size:var(--txt-s)}
.cozy-etats td{padding:4px 6px;border-top:1px solid var(--trait);vertical-align:top;word-break:break-word}
.cozy-etats td:first-child{color:var(--texte-2);width:45%}
.parc{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;justify-content:space-between;margin-top:6px}
.parc .etat-parc{display:inline-flex;align-items:center;gap:8px;font-weight:700}
.parc .etat-parc i{width:10px;height:10px;border-radius:50%;background:var(--ok)}
.parc .etat-parc.ko i{background:var(--corail)}
.chapo{color:var(--texte-2);margin:-6px 0 18px;max-width:66ch}
.vide{color:var(--texte-2);font-style:italic}

/* ===== Fiches radiateurs ===== */
/* Maintenant : un bloc par sujet, son titre et son interrupteur de pilotage sur une ligne */
.tete-bloc{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin:30px 0 14px}
.tete-bloc h2{margin:0}
.tete-bloc .bascule{min-height:40px}
.note-pilote{margin:-4px 0 14px;padding:10px 14px;border-radius:var(--rayon-m);font-size:var(--txt-m);color:var(--texte);
  background:color-mix(in srgb,var(--soleil) 12%,var(--carte));border:1px solid color-mix(in srgb,var(--soleil) 45%,transparent)}
/* grand écran : radiateurs puis séjours à gauche, ballon à droite ; sinon l'un sous l'autre (radiateurs, ballon, séjours) */
@media (min-width:1180px){
  .mt-grille{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(340px,1fr);grid-template-rows:auto 1fr;
    grid-template-areas:"rads eau" "sejours eau";gap:0 28px;align-items:start}
  .bloc-rads{grid-area:rads} .mt-cote{grid-area:eau} .bloc-sejours{grid-area:sejours}
}
/* Cartes légères : nom complet, température, humidité, état ; tout le reste sur la fiche, au toucher */
.rads-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,218px),1fr));gap:14px}
@media (max-width:520px){ .rads-grille{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px} }
.carte-legere{--coin-pic:26px;--coin-icone:15px;--coin-deborde:6px;   /* pictos d'alerte du coin, repris par la colonne des pictos d'état */
  display:flex;flex-direction:column;gap:9px;padding:13px 16px 14px;cursor:pointer;
  transition:box-shadow var(--duree-2) var(--courbe),translate var(--duree-2) var(--courbe)}
@media (hover:hover){ .carte-legere:not(.soulevee):hover{box-shadow:var(--ombre-l);translate:0 -2px} }
/* radiateur qui chauffe : une lueur chaude monte du bas de la carte et respire lentement, comme le ballon qui chauffe
   (un seul calque par carte, son opacité seulement ; --phase garde toutes les cartes au même souffle). Posée sur le
   contenu, elle s'y mêle (--lueur-melange : teinte en clair, lumière en sombre) sans le délaver ; la barre de
   température rougeoie un peu */
.carte-legere.en-chauffe{isolation:isolate}
.carte-legere.en-chauffe::after{content:"";position:absolute;inset:0;border-radius:0 0 var(--rayon-xl) var(--rayon-xl);pointer-events:none;
  background:radial-gradient(140% 85% at 50% 110%,var(--lueur-chauffe),transparent 72%);mix-blend-mode:var(--lueur-melange);
  animation:souffle 4.2s ease-in-out infinite;animation-delay:var(--phase,0ms)}
@keyframes souffle{0%,100%{opacity:.45}50%{opacity:1}}
.carte-legere.en-chauffe .cl-barre i{box-shadow:0 0 8px color-mix(in srgb,var(--c,var(--corail)) 55%,transparent)}
.cl-tete{display:flex;align-items:flex-start;gap:3px;margin-left:-9px;min-width:0}
.cl-tete .poignee{position:relative;z-index:2;height:26px}
.carte h3.cl-nom{flex:1;min-width:0;font-size:var(--txt-l);line-height:1.25;white-space:normal;overflow-wrap:anywhere;hyphens:auto;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.cl-ouvrir{all:unset;cursor:pointer;display:inline}
.cl-ouvrir::after{content:"";position:absolute;inset:0;z-index:1;border-radius:var(--rayon-xl)}
.cl-ouvrir:focus-visible::after{outline:3px solid var(--focus);outline-offset:2px}
.cl-alertes{position:relative;z-index:2;display:flex;gap:4px;flex:none;margin:-2px calc(-1 * var(--coin-deborde)) 0 0}
.cl-alertes .pic{width:var(--coin-pic);height:var(--coin-pic)}
.cl-alertes .pic svg{width:var(--coin-icone);height:var(--coin-icone)}
/* délestage (capteurs) : au coin, même taille que les alertes, teinté comme un picto d'état */
.cl-alertes .cl-pic{min-width:var(--coin-pic);height:var(--coin-pic);padding:0}
.cl-alertes .cl-pic svg{width:var(--coin-icone);height:var(--coin-icone)}
.cl-mesures{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 12px}
.cl-temp{font:700 2.15rem/1 var(--serif);font-variant-numeric:tabular-nums;letter-spacing:-.01em;color:var(--texte)}
.cl-temp.inconnue{color:var(--texte-2)}
.cl-hum{display:inline-flex;align-items:center;gap:3px;font-size:var(--txt-s);font-weight:700;color:var(--texte-2)}
.cl-hum svg{width:14px;height:14px;color:var(--eau)}
/* température sur l'échelle 5-25 °C, repère de la consigne en cours */
.cl-barre{position:relative;height:5px;border-radius:var(--rayon-rond);background:var(--sable)}
.cl-barre i{position:absolute;inset:0 auto 0 0;border-radius:inherit;background:var(--c,var(--galet));transform-origin:left}
.cl-barre b{position:absolute;top:-3px;bottom:-3px;width:3px;margin-left:-1.5px;border-radius:2px;background:var(--texte);box-shadow:0 0 0 2px var(--carte)}
.cl-etat{display:flex;align-items:center;flex-wrap:wrap;gap:5px 8px;margin-top:auto;min-width:0}
.cl-etat .pastille{--p:var(--mode,var(--galet));padding:4px 11px;font-size:var(--txt-s);gap:0;max-width:100%}
.cl-etat .pastille::before{margin-right:7px}
/* consigne toujours sur une ligne : trop étroite, le mode se coupe (…) et la valeur reste entière */
.cl-lib{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cl-val{flex:none;white-space:nowrap}
/* pictos d'état (mode du module, chauffe, attente de puissance) : pastilles rondes teintées de leur couleur, à droite
   de la consigne ; même couleur que le mode sur la fiche. Sens complet au survol (data-tip). */
.cl-pictos{display:flex;align-items:center;gap:5px;margin-left:auto}
.cl-pic{--c:var(--galet);--m:78%;position:relative;z-index:2;display:inline-flex;align-items:center;justify-content:center;gap:3px;
  min-width:28px;height:28px;padding:0 6px;border-radius:var(--rayon-rond);cursor:help;
  color:color-mix(in srgb,var(--c) var(--m),var(--texte));background:color-mix(in srgb,var(--c) 15%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 24%,transparent)}
.cl-pic:has(b){padding:0 9px 0 7px}
.cl-pic svg{width:17px;height:17px;flex:none}
.cl-pic .ton{fill:currentColor;fill-opacity:.24}
.cl-pic .coeur{fill:currentColor;stroke:none}
.cl-pic b{font-size:var(--txt-xs);font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}
.cl-pic.presence{--c:var(--lilas)}
.cl-pic.vacances{--c:var(--mer)}
.cl-pic.chauffe{--c:var(--corail)}
.cl-pic.programme,.cl-pic.boost,.cl-pic.attente{--c:var(--soleil);--m:68%}
.cl-pic.fanal{--c:var(--fanal)}
.cl-pic.suspendu{--c:var(--mer)}      /* capteurs : chauffage suspendu pendant une ouverture */
.cl-pic.essai{--c:var(--mer)}         /* capteurs : essai d'apprentissage en cours */
.cl-pic.soleil{--c:var(--soleil)}     /* capteurs : pièce au soleil (luminosité) */
.cl-pic.deleste{--c:var(--corail)}    /* capteurs : délesté, puissance proche de la puissance souscrite */
.cl-pic.volets{--c:var(--galet)}      /* capteurs : volets fermés probables */
/* dérogation après l'intervention d'un voyageur : programme Fanal en pause, heure de reprise affichée */
.cl-pic.fanal.derog{--c:var(--galet);--m:90%}
/* chauffe en cours : la flamme vacille doucement */
.cl-pic.chauffe svg{transform-origin:50% 88%;animation:vacille 2.6s ease-in-out infinite;animation-delay:var(--phase-flamme,0ms)}   /* carte refaite : la flamme garde son rythme */
@keyframes vacille{0%,100%{transform:none}30%{transform:scale(1.04,1.1) rotate(-3deg)}65%{transform:scale(.98,1.03) rotate(2deg)}}
.carte-legere.cl-hors{--mode:var(--alerte)}
@media (max-width:520px){
  .carte-legere{padding:12px 12px 12px;gap:7px}
  .cl-tete{margin-left:-6px}
  .carte h3.cl-nom{font-size:var(--txt-m)}
  .cl-temp{font-size:1.85rem}
  .cl-etat .pastille{padding:3px 9px;font-size:var(--txt-xs)}
  .cl-etat{gap:5px 6px;margin-top:0}   /* pastilles alignées dans une rangée, même quand une fiche a deux pictos */
  .cl-pictos{gap:4px}
  .cl-pic{min-width:24px;height:24px;padding:0 5px}
  .cl-pic:has(b){padding:0 7px 0 5px}
  .cl-pic svg{width:14px;height:14px}
}
/* Cartes alignées : les cartes d'une rangée partagent leurs lignes (sous-grille), un nom sur deux lignes descend aussi
   la température, la barre et la consigne des voisines ; la consigne a toujours sa ligne, sous la barre. Les pictos
   d'état s'empilent dans une colonne à droite, de la température à la consigne, sur l'axe des pictos d'alerte du coin
   (fenêtre ouverte…) : même taille, même débord dans la marge, et la barre s'arrête avant. Au téléphone, pas la
   place : ils ont leur rangée sous la consigne. Sans sous-grille (anciens navigateurs), la carte reste en colonne. */
@supports (grid-template-rows:subgrid){
  .carte-legere{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:subgrid;align-content:start;row-gap:9px}
  .carte-legere > .cl-tete{grid-row:1;grid-column:1 / -1}
  .carte-legere > .cl-mesures{grid-row:2;grid-column:1}
  .carte-legere > .cl-barre{grid-row:3;grid-column:1;align-self:center}
  .carte-legere > .cl-etat{display:contents}
  .cl-etat > .pastille{grid-row:4;grid-column:1;justify-self:start}
  @media (min-width:521px){
    .carte-legere,.rads-grille > .carte-place{grid-row:span 4}   /* la place d'une carte qu'on déplace prend ses lignes */
    .carte-legere{grid-template-columns:minmax(0,1fr) calc(var(--coin-pic) - var(--coin-deborde));column-gap:12px}
    .cl-etat > .pastille{align-self:end}
    .cl-etat > .cl-pictos{grid-row:2 / span 3;grid-column:2;align-self:start;flex-direction:column;gap:5px;
      margin:0 calc(-1 * var(--coin-deborde)) 0 0}
    /* trois pictos : de la température à la consigne, même quand une voisine plus haute agrandit la rangée */
    .cl-etat > .cl-pictos:has(> :nth-child(3)){align-self:stretch;justify-content:space-between}
    .cl-pictos .cl-pic{min-width:var(--coin-pic);height:var(--coin-pic);padding:0}
    .cl-pictos .cl-pic svg{width:var(--coin-icone);height:var(--coin-icone)}
    /* picto avec un texte (reprise de la Programmation Fanal, jours de vacances) : le texte sous l'icône, même axe */
    .cl-pictos .cl-pic:has(b){flex-direction:column;gap:1px;height:auto;padding:4px 1px 3px}
    .cl-pictos .cl-pic b{font-size:var(--txt-micro);line-height:1;letter-spacing:-.03em}
  }
  @media (max-width:520px){
    .carte-legere,.rads-grille > .carte-place{grid-row:span 5}
    .carte-legere{row-gap:7px}
    .cl-etat > .pastille{align-self:start}
    .cl-etat > .cl-pictos{grid-row:5;grid-column:1;align-self:start;margin-left:0}
  }
}
.carte{--accent:var(--mode,var(--galet));padding-bottom:var(--esp-4)}
.carte h3{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:1}
.tete-carte{display:flex;align-items:center;gap:4px;padding-right:96px;margin-left:-8px}
.poignee{flex:none;display:grid;place-items:center;width:22px;height:30px;border:0;border-radius:var(--rayon-s);background:none;color:var(--texte-2);opacity:.45;cursor:grab;touch-action:none;padding:0}
.poignee svg{width:10px;height:17px}
.poignee:hover,.poignee:focus-visible{opacity:1;background:var(--fond)}
.carte:hover .poignee{opacity:.8}
.carte.soulevee{position:fixed;z-index:var(--plan-glisse);margin:0;pointer-events:none;transform:scale(1.03) rotate(.6deg);
  box-shadow:var(--ombre-levee);transition:transform var(--duree-1) var(--courbe),box-shadow var(--duree-1)}
.carte-place{border:2.5px dashed color-mix(in srgb,var(--texte) 25%,transparent);border-radius:var(--rayon-xl);background:color-mix(in srgb,var(--texte) 4%,transparent)}
body.tri-en-cours,body.tri-en-cours *{cursor:grabbing!important;user-select:none}
/* carte occupée pendant l'envoi d'un ordre */
.carte .occupation{display:none}
.carte.occupee{isolation:isolate}   /* son voile reste dans la carte, sous les onglets collants (#29) */
.carte.occupee .occupation{display:flex;position:absolute;inset:0;z-index:var(--plan-carte);flex-direction:column;align-items:center;justify-content:center;gap:12px;
  border-radius:var(--rayon-xl);font-weight:700;color:var(--texte);background:color-mix(in srgb,var(--carte) 35%,transparent);backdrop-filter:blur(1.5px)}
.carte.occupee .occupation .maj-spin{width:34px;height:34px;border-width:4px}
.carte.occupee > :not(.occupation){opacity:.4;filter:saturate(.4);transition:opacity var(--duree-2)}
.carte.occupee::before{content:"";position:absolute;top:calc(-1 * var(--lisere));left:0;right:0;height:var(--lisere);border-radius:var(--rayon-xl) var(--rayon-xl) 0 0;z-index:calc(var(--plan-carte) + 1);
  background:linear-gradient(90deg,transparent,var(--texte),transparent);animation:barre-occupee 1.1s ease-in-out infinite}
@keyframes barre-occupee{0%,100%{transform:scaleX(.3);opacity:.35}50%{transform:scaleX(1);opacity:1}}
/* consignes modifiables */
body.tri-en-cours [data-tip]::after{display:none!important}
.val-consigne{display:inline-flex;align-items:center;gap:0;padding:3px 7px;border-radius:var(--rayon-rond);border:1px solid transparent;background:none;
  color:var(--texte-2);font:inherit;cursor:pointer}
.val-consigne b{color:var(--texte);margin-left:3px}
.val-consigne .crayon{font-size:var(--txt-s);margin-left:5px;opacity:0;transition:opacity var(--duree-1);color:var(--c)}
.val-consigne:hover,.val-consigne.actif{border-color:var(--c);background:color-mix(in srgb,var(--c) 9%,transparent)}
.val-consigne:hover .crayon,.val-consigne.actif .crayon,.val-consigne:focus-visible .crayon{opacity:1}
@media (hover:none){.val-consigne .crayon{opacity:.7}}
.consignes .hg{font-size:var(--txt-s);opacity:.85;padding:3px 4px;cursor:help}
.jauge .repere .prise{cursor:grab;touch-action:none}
.jauge .repere.tenu .prise{cursor:grabbing}
.jauge .repere.tenu .point,.jauge .repere.edite .point{r:9;stroke-width:3}
.jauge.en-edition .t{fill:var(--texte)}
.editeur{margin:10px 0 0;padding:12px 14px;border-radius:var(--rayon-l);border:1.5px solid var(--c);background:color-mix(in srgb,var(--c) 7%,var(--carte));
  animation:apparait var(--duree-2) var(--courbe)}
@keyframes apparait{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.ed-tete{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:var(--c)}
.ed-fermer{border:0;background:none;font-size:var(--txt-2xl);line-height:1;color:var(--texte-2);cursor:pointer;padding:0 4px}
.ed-valeur{display:flex;align-items:center;justify-content:center;gap:18px;margin:6px 0 4px}
.ed-v{font-family:var(--serif);font-size:2rem;font-weight:700;min-width:3.4em;text-align:center;font-variant-numeric:tabular-nums}
.ed-pas{width:42px;height:42px;border-radius:50%;border:1.5px solid var(--c);background:var(--carte);color:var(--c);font:700 var(--txt-2xl)/1 var(--sans);cursor:pointer}
.ed-pas:active{transform:scale(.92)}
.editeur input[type=range]{width:100%;accent-color:var(--c)}
.ed-bornes{display:flex;justify-content:space-between;font-size:var(--txt-xs);color:var(--texte-2);margin-top:-2px}
.ed-garder{margin:8px 0 0;font-size:var(--txt-s)}
.ed-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}
/* nom modifiable sur place */
.renom{display:flex;align-items:center;gap:6px;min-width:0}
.renom-txt{display:block;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:text;border-radius:var(--rayon-s);
  padding:1px 5px;margin:-1px -5px;transition:background var(--duree-1),box-shadow var(--duree-1)}
.renom-txt:hover{background:var(--fond);box-shadow:inset 0 0 0 1px var(--trait)}
input[type=text].renom-champ{flex:1;min-width:0;width:auto;font:inherit;color:var(--texte);padding:1px 6px;margin:-2px -7px -2px -7px;
  border:1.5px solid var(--focus);border-radius:var(--rayon-s);background:var(--fond);outline:none}
.renom.en-cours .renom-champ{margin-right:0}
.renom-actions{display:flex;gap:4px;flex:none}
.renom-actions[hidden]{display:none}
.renom-ok,.renom-non{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;padding:0;cursor:pointer;border:1.5px solid;
  animation:apparait var(--duree-1) var(--courbe)}
.renom-ok svg,.renom-non svg{width:16px;height:16px}
.renom-ok{background:var(--ok);border-color:var(--ok);color:var(--sur-couleur)}
.renom-ok[disabled]{opacity:.45;cursor:not-allowed}
.renom-non{background:var(--carte);border-color:var(--trait);color:var(--texte-2)}
.renom-non:hover{color:var(--texte);border-color:var(--texte-2)}
.renom.envoi{opacity:.6;cursor:wait}
.carte h3.renom.en-cours{overflow:visible}
.carte:has(.renom.en-cours) .tete-carte{padding-right:0}
.carte:has(.renom.en-cours) .etats,.carte:has(.renom.en-cours) .hors{display:none}
.rad-cfg .renom{font-weight:700;font-size:var(--txt-l);max-width:460px}
.rad-corps{flex:1;min-width:0}
.carte .modele{padding-right:110px;color:var(--texte-2);font-size:var(--txt-s)}
.etats{position:absolute;top:14px;right:14px;display:flex;gap:4px}
.pic{position:relative;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;color:var(--texte-2);background:var(--fond);outline-offset:1px;cursor:help}
.pic svg{width:17px;height:17px}
.pic.on{color:var(--texte)}
.pic.presence{color:var(--sur-couleur);background:var(--lilas)}
.pic.programme{color:var(--sur-soleil);background:var(--soleil)}
.pic.alerte{color:var(--sur-couleur);background:var(--corail)}
/* son onde : derrière le picto (le svg passe devant), comme le repère « maintenant » */
.pic.alerte::before{--onde:1.5;content:"";position:absolute;inset:0;border-radius:50%;background:var(--corail);pointer-events:none;animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}
.pic.alerte svg{position:relative}
[data-tip]{position:relative}
/* ===== Infobulles =====
   Survol d'un bouton (data-tip), graphiques de Stats, éditeur de programmation : même bulle marine. */
[data-tip]:hover::after,[data-tip]:focus-visible::after,.infobulle,.bulle-prog{background:var(--marine-plein);color:var(--creme);
  font:600 var(--txt-xs)/1.35 var(--sans);padding:6px 10px;border-radius:var(--rayon-s);pointer-events:none;
  box-shadow:var(--ombre),inset 0 0 0 1px var(--marine-plein-trait)}
[data-tip]:hover::after,[data-tip]:focus-visible::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 8px);right:-6px;z-index:var(--plan-tip);
  white-space:normal;width:max-content;max-width:230px;text-align:left}
button.pic{border:0;cursor:pointer;font:inherit;padding:0}
button.pic:hover{color:var(--texte);background:var(--sable)}
button.pic.on{color:var(--carte);background:var(--texte)}
.jours-vac{display:flex;align-items:center;gap:12px}
.jours-vac input{width:6em;font-size:var(--txt-2xl);font-weight:700;text-align:center}
.jours-vac .aide{margin:0}
.raccourcis{display:flex;gap:6px;margin:12px 0 0;flex-wrap:wrap}
.prog details summary{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none}
.prog details summary::-webkit-details-marker{display:none}
.prog details summary::before{content:"";width:0;height:0;border:5px solid transparent;border-left:6px solid currentColor;border-right:0;transition:transform var(--duree-1) var(--courbe)}
.prog details[open]:not(.se-ferme) summary::before{transform:rotate(90deg)}
.copier{margin-left:auto;display:inline-grid;place-items:center;width:28px;height:28px;border-radius:var(--rayon-s);border:1px solid var(--trait);background:var(--carte);color:var(--texte-2);cursor:pointer}
.copier:hover{color:var(--texte)} .copier svg{width:15px;height:15px}
.copier.ok{color:var(--sur-couleur);background:var(--vert-plein);border-color:var(--vert-plein)}
.a-copier{display:block;width:100%;margin:10px 0;font:var(--txt-xs)/1.4 var(--mono);border:1px solid var(--trait);border-radius:var(--rayon-m);padding:8px;background:var(--fond);color:var(--texte)}
/* ordre réellement envoyé + pilotage */
.ordre{display:flex;flex-direction:column;align-items:center;gap:3px;margin:-6px 0 2px}
.ordre small{min-height:1em}
.ordre [data-tip]:hover::after,.ordre [data-tip]:focus-visible::after{right:auto;left:50%;transform:translateX(-50%)}
.pilotage{margin:16px 0 0}
.titre-pilotage{margin:0 0 6px 2px}

.detail-pilotage{margin:7px 2px 0;font-size:var(--txt-s);color:var(--texte-2)}
/* 4 modes (planning Heatzy, présence, vacances, Programmation Fanal) : noms sur deux lignes si la fiche est étroite */
.segments.n4{--n:4}
.segments.n4 button span{white-space:normal;text-align:center;line-height:1.15}
.fanal-detail{display:flex;flex-direction:column;gap:2px;padding-left:9px;border-left:3px solid var(--fanal)}
.fanal-detail strong{font-weight:700;color:var(--texte)}
.fanal-derog{color:var(--alerte)}
.fenetre svg{width:16px;height:16px}
.hors{position:absolute;top:20px;right:16px;font-size:var(--txt-s);font-weight:700;color:var(--alerte)}
.jauge{display:block;width:170px;height:140px;margin:6px auto 0}
.jauge .piste{stroke:var(--sable)}
/* Fiches : apparition en cascade (--i : rang de la fiche) */
.carte.entree{animation:carte-entree var(--duree-4) var(--courbe) both;animation-delay:calc(var(--i,0) * 55ms)}
@keyframes carte-entree{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
.jauge text{fill:var(--texte)}
.jauge .t{font-family:var(--serif);font-weight:700;font-size:30px}
.jauge .h{font-size:11px;fill:var(--texte-2)}
.consignes{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:2px 4px;font-size:var(--txt-m);color:var(--texte-2);margin:10px 0 0}
.consignes b{color:var(--texte)}
.prochaine{font-size:var(--txt-s);margin:12px 0 0;padding-top:10px;border-top:1px dashed var(--trait);color:var(--texte-2)}
.prochaine b{color:var(--texte)}
/* Programmation Heatzy */
.prog{margin:12px 0 0}
.prog h4{margin:0 0 2px}
.prog .etat-prog{color:var(--texte-2);font-size:var(--txt-s);margin:0 0 12px}
.semaine{display:grid;grid-template-columns:2.6em 1fr;gap:5px 8px;align-items:center}
.semaine .j{font-weight:700;font-size:var(--txt-s);color:var(--texte-2)}
.semaine .j.auj{color:var(--texte)}
.jour-prog{position:relative;display:flex;height:22px;border-radius:var(--rayon-s);overflow:hidden}
.jour-prog span{flex:1}
/* consignes du planning Heatzy (frise, éditeur) */
.t-cft{background:var(--corail)} .t-eco{background:var(--vert)} .t-fro{background:var(--mer)} .t-stop{background:var(--galet)}
.t-cft1{background:color-mix(in srgb,var(--corail) 78%,var(--carte))} .t-cft2{background:color-mix(in srgb,var(--corail) 58%,var(--carte))}
.t-presence{background:var(--lilas)}
.jour-prog .maintenant{position:absolute;top:-3px;bottom:-3px;width:3px;margin-left:-1px;background:var(--texte);border-radius:2px;box-shadow:0 0 0 2px var(--fond)}
.heures{display:flex;justify-content:space-between;font-size:var(--txt-micro);color:var(--texte-2);grid-column:2;margin-bottom:-2px}
.prog .legende-prog{display:flex;flex-wrap:wrap;gap:4px 14px;margin:12px 0 0;padding:0;list-style:none;font-size:var(--txt-s);color:var(--texte-2)}
.prog details{margin-top:10px;font-size:var(--txt-s);color:var(--texte-2)}
.prog details code{display:block;white-space:pre-wrap;word-break:break-word;background:var(--carte);padding:6px 8px;border-radius:var(--rayon-s);margin-top:4px;max-height:220px;overflow:auto}
.prog-boutons{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
/* Programmation Fanal (Réglages > Chauffage) : un programme par carte, aperçu de la semaine puis ses changements */
.fanal-prog{border-left:var(--lisere) solid var(--fanal)}
.fanal-tete{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:4px}
.fanal-tete .fanal-nom{flex:1 1 200px;min-width:0;font-weight:700;font-size:var(--txt-l)}
.fanal-tete .badge{--b:var(--fanal)}
.groupe-jours{margin:12px 0 0;padding:10px 0 0;border-top:1px dashed var(--trait)}
.puces-jours{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px}
.puces-jours .puce-jour{padding:4px 10px;min-height:30px}
.puces-jours .puce-jour[disabled]{opacity:.4;cursor:not-allowed}
.jours-fanal > .btn{margin-top:10px}
.fanal-prog .regle input[type=time]{width:auto;min-width:7.2em;padding:7px 8px}
.fanal-prog .regle select{width:auto;max-width:100%;padding:7px 10px}
.fanal-prog .regles > .btn{justify-self:start}
#rub-fanal .nt-liste.pred-rads{margin:16px 0 0}
.prog-boutons .btn{margin:0}
/* Éditeur de programmation : on choisit une consigne (pinceau) et on la « peint » sur la semaine ou sur un jour */
.dlg.dlg-prog{width:min(96vw,860px);max-width:none;max-height:calc(100dvh - 32px);overflow:hidden}
.dlg-prog[open]{display:flex;flex-direction:column}
.dlg-prog .prog-corps{overflow:auto;padding:var(--esp-6) var(--esp-6) var(--esp-2);flex:1;overscroll-behavior:contain;background:var(--carte)}
html.editeur-ouvert{overflow:hidden}
.prog-tete{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.prog-tete > div{flex:1;min-width:0}
.prog-tete h3{margin:0;overflow-wrap:anywhere}
.prog-tete .aide{margin:2px 0 0}
.icone-prog{flex:none;width:40px;height:40px;display:grid;place-items:center;border-radius:50%;border:1px solid var(--trait);background:var(--carte);cursor:pointer;color:var(--texte)}
.icone-prog svg{width:20px;height:20px}
.icone-prog:hover:not([disabled]){background:var(--sable)}
.icone-prog[disabled]{opacity:.35;cursor:default}
.pinceau i{width:16px;height:16px;border-radius:var(--rayon-xs);background:var(--c);flex:none}
.pinceau span{display:flex;flex-direction:column;min-width:0;line-height:1.2;text-align:left}
.pinceau b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pinceau small{font-weight:400;font-size:var(--txt-s);color:var(--texte-2)}
.sem-edit{display:grid;grid-template-columns:3.2em minmax(0,1fr);gap:6px 8px;align-items:center;user-select:none;-webkit-user-select:none}
.sem-edit .heures{margin:0}
.sem-edit .j{position:relative;height:30px;padding:0;border:0;border-radius:var(--rayon-s);background:none;cursor:pointer;font-weight:700;font-size:var(--txt-s);color:var(--texte-2);text-align:left}
.sem-edit .j[aria-current="true"]{color:var(--texte);background:var(--sable);text-align:center}
.sem-edit .j.modifie::after{content:"";position:absolute;top:4px;right:3px;width:7px;height:7px;border-radius:50%;background:var(--soleil)}
.sem-edit .jour-prog{height:30px;cursor:crosshair;touch-action:pan-y;outline:2px solid transparent;outline-offset:2px;transition:outline-color var(--duree-1)}
.sem-edit .jour-prog.choisi{outline-color:var(--marine-2)}
.sem-edit .jour-prog span:nth-child(12n+1):not(:first-child){box-shadow:inset 1px 0 rgba(255,255,255,.6)}
.zoom-prog{margin-top:18px}
.zoom-tete{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.zoom-tete h4{flex:1;text-align:center}
.zoom-tete .icone-prog{width:36px;height:36px}
.quarts{display:grid;gap:10px;user-select:none;-webkit-user-select:none;touch-action:pan-y}
.quart{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:2px;row-gap:3px}
.quart .hr{grid-column:span 2;font-size:var(--txt-micro);color:var(--texte-2);padding-left:4px;font-variant-numeric:tabular-nums}
.quart button{height:38px;border:0;padding:0;border-radius:var(--rayon-xs);cursor:pointer;min-width:0}
.quart button:nth-of-type(odd){margin-left:3px;border-radius:7px 3px 3px 7px}
.quart button:nth-of-type(even){border-radius:3px 7px 7px 3px}
.quart button:hover{filter:brightness(1.12)}
.quart button:focus-visible{outline-offset:1px}
.plages{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 0}
.plages span{display:inline-flex;align-items:center;gap:6px;padding:3px 10px 3px 8px;border-radius:var(--rayon-rond);background:var(--carte);border:1px solid var(--trait);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.plages i{width:9px;height:9px;border-radius:var(--rayon-xs);background:var(--c)}
.outils-jour{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:12px;font-size:var(--txt-s);color:var(--texte-2)}
.outils-jour .titre-outil{width:100%;margin-top:4px}
.puce-jour{border:1px solid var(--trait);background:var(--carte);color:var(--texte);border-radius:var(--rayon-rond);padding:5px 12px;cursor:pointer;font-size:var(--txt-s);font-weight:700;min-height:34px}
.puce-jour:hover{background:var(--sable)}
.puce-jour.fait{border-color:var(--ok);color:var(--ok)}
.puce-jour[aria-pressed="true"]{background:color-mix(in srgb,var(--mer) 16%,var(--carte));border-color:var(--mer);box-shadow:inset 0 0 0 1px var(--mer)}
.puce-jour[aria-pressed="true"]::before{content:"✓ ";color:var(--mer)}
.copie-rads{margin-top:18px}
.copie-rads h4{margin:0 0 2px;font-size:var(--txt-m)}
.copie-rads .aide{margin:0 0 8px}
.copie-rads .outils-jour{margin-top:0}
.prog-pied{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:var(--esp-3) var(--esp-6) 14px;border-top:1px solid var(--trait);background:var(--carte)}
.prog-pied .etat-modif{flex:1;min-width:8em;font-size:var(--txt-s);color:var(--texte-2)}
.prog-pied .btn{margin:0}
.prog-pied .btn.plein{margin-left:auto}
.raccourcis-prog{display:none;font-size:var(--txt-xs);color:var(--texte-2);margin:10px 0 0}
@media (hover:hover) and (pointer:fine){.raccourcis-prog{display:block}}
.bulle-prog{position:fixed;z-index:var(--plan-bulle);transform:translate(-50%,-100%);margin-top:-14px;white-space:nowrap;font-variant-numeric:tabular-nums}
@media (max-width:640px){
  .dlg.dlg-prog{width:100%;height:100%;max-height:none;margin:0;border-radius:0}
  .dlg-prog .prog-corps{padding:16px 16px 8px}
  .prog-pied{padding:10px 16px calc(12px + env(safe-area-inset-bottom))}
  .pinceau{flex-direction:column;gap:3px;font-size:var(--txt-s)}
  .pinceau span{text-align:center}
  .pinceau i{width:14px;height:14px}
  .pinceau small{display:none}
  .quart button{height:42px}
  .prog-pied .btn.plein{flex:1 1 100%}
}
.m-cft,.m-cft1,.m-cft2,.m-boost{--mode:var(--corail)} .m-eco{--mode:var(--vert)} .m-fro,.m-vacances{--mode:var(--mer)}
.m-presence{--mode:var(--lilas)} .m-programme{--mode:var(--soleil)} .m-stop{--mode:var(--galet)} .m-fanal{--mode:var(--fanal)}
.actions{display:flex;flex-wrap:wrap;gap:10px;margin:20px 0 0}

.sejours{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.sejours li{--k:var(--corail);display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:4px 16px}
.sejours li.bloque{--k:var(--galet)}
.sejours .dates{font-family:var(--serif);font-weight:700}
/* séjour en cours : teinte corail qui s'efface vers la droite, point « le voyageur est là » qui respire comme le repère
   « maintenant » du planning */
.sejours li.en-cours{background:linear-gradient(90deg,color-mix(in srgb,var(--corail) 10%,var(--carte)),var(--carte) 60%)}
.sejours li.en-cours .dates{position:relative}   /* (le point loge dans la marge de la ligne : rien ne se décale) */
/* séjour en cours : un point corail fixe (l'onde vit dans le planning, au-dessus : une seule à l'écran) */
.sejours li.en-cours .dates::before{content:"";position:absolute;left:-13px;top:.75em;width:8px;height:8px;margin-top:-4px;
  border-radius:50%;background:var(--corail)}
.sejours .nuits{color:var(--creme);background:var(--marine-plein);box-shadow:inset 0 0 0 1px var(--marine-plein-trait);border-radius:var(--rayon-rond);padding:2px 10px;font-size:var(--txt-s);font-weight:700}
.sejours .titre{color:var(--texte-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sejours .voyageurs{display:inline-flex;align-items:center;gap:5px;color:var(--texte-2);font-weight:700;font-size:var(--txt-m)}
.sejours .voyageurs i{display:inline-flex;width:17px;height:17px}.sejours .voyageurs svg{width:100%;height:100%}
.sejours .voyageurs.bloque{font-weight:600;font-size:var(--txt-s)}
.sejours li.proprio{--k:var(--lilas)}
.sejours .voyageurs.proprio{color:color-mix(in srgb,var(--lilas) 70%,var(--texte));font-size:var(--txt-s);white-space:nowrap}
.sejours li.proprio.en-cours{background:linear-gradient(90deg,color-mix(in srgb,var(--lilas) 10%,var(--carte)),var(--carte) 60%)}
.sejours li.proprio.en-cours .dates::before{background:var(--lilas)}
/* fenêtre d'un séjour : qui séjourne (mode séjour propriétaire) */
.hs-type{display:grid;gap:4px;margin:var(--esp-2) 0}
/* un séjour se touche pour changer ses heures d'arrivée et de départ (fenêtre « Heures de ce séjour ») */
.sejours li[role=button]{cursor:pointer;transition:box-shadow var(--duree-1) var(--courbe),transform var(--duree-1) var(--courbe)}
.sejours li[role=button]:hover{box-shadow:var(--ombre-l);transform:translateY(-1px)}
.sejours li[role=button]:active{transform:none}
.pa-heure-changee{color:var(--corail);font-weight:700}
.sejours .heures-changees{display:block;margin-top:2px;font:700 var(--txt-xs) var(--sans);color:var(--corail);letter-spacing:.01em}
.dlg-h-sejour{margin:var(--esp-1) 0 var(--esp-2);font-size:var(--txt-m)}
.dlg-h-sejour span{color:var(--texte-2)}
.heures-sejour{display:grid;grid-template-columns:1fr 1fr;gap:var(--esp-4)}
.hs-champ{display:flex;flex-direction:column;gap:6px;min-width:0}
.hs-champ label{margin:0;font-weight:700}
.hs-champ input{font-size:var(--txt-xl);font-weight:700;text-align:center}
.hs-champ input.change{border-color:var(--corail);box-shadow:inset 0 0 0 1px var(--corail)}
.hs-raz{align-self:flex-start;font-size:var(--txt-s)}
button.lien.hs-raz:disabled{color:var(--texte-2);text-decoration:none;cursor:default;font-weight:600}
#dlg-h-tout{margin-right:auto}         /* retour aux heures habituelles : à gauche, loin d'« Enregistrer » */

/* ===== Journal : debug ===== */
/* en-tête du Journal : titre et chapeau comme les autres onglets (.stats-tete), ses deux boutons à droite */
.tete-journal-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px}
.bascule{display:inline-flex;align-items:center;gap:9px;padding:6px 14px 6px 6px;border-radius:var(--rayon-rond);border:1px solid var(--trait);background:var(--carte);color:var(--texte);font:700 var(--txt-s) var(--sans);cursor:pointer}
.debug{--accent:var(--lilas);margin:0 0 var(--esp-4)}
.debug-tete{display:flex;align-items:center;gap:10px 16px;flex-wrap:wrap}
.debug-tete h3{margin-right:auto}
.debug-tete .case{margin:0;font-size:var(--txt-m)}
.debug-actions{display:flex;gap:8px}
.debug .chapo{margin:10px 0 12px;font-size:var(--txt-m)}
.dbg-bloc{margin:0 0 8px;font-size:var(--txt-s)}
.dbg-bloc summary{cursor:pointer;font-weight:700}
.dbg-copier-rubrique{display:block;margin:8px 0 4px}
.dbg-info{display:grid;grid-template-columns:max-content 1fr;gap:3px 14px;margin:10px 0 4px}
.dbg-info dt{color:var(--texte-2)} .dbg-info dd{margin:0;word-break:break-word;font-family:var(--mono);font-size:var(--txt-s)}
.dbg-table{width:100%;border-collapse:collapse;margin:8px 0 4px;font-size:var(--txt-s)}
.dbg-table th,.dbg-table td{text-align:left;padding:4px 8px 4px 0;border-bottom:1px solid var(--trait);vertical-align:top}
.dbg-table td code{font-size:var(--txt-xs);word-break:break-all}
.dbg-code{display:block;white-space:pre-wrap;word-break:break-word;background:var(--fond);padding:8px 10px;border-radius:var(--rayon-s);margin:6px 0;max-height:320px;overflow:auto;
  font:var(--txt-xs)/1.4 var(--mono)}
.dbg-liste{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:6px}
.dbg-liste li{padding:7px 10px;font-size:var(--txt-s)}
.dbg-liste li.warn{--k:var(--soleil)} .dbg-liste li.error{--k:var(--alerte)}
.dbg-liste li.k-ordre{--k:var(--lilas)} .dbg-liste li.k-verif:not(.warn):not(.error){--k:var(--vert)} .dbg-liste li.k-notif{--k:var(--mer)} .dbg-liste li.k-alerte{--k:var(--eau)} .dbg-liste li.k-surveillance{--k:var(--corail)}
.dbg-ligne{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.dbg-ligne time{font:var(--txt-xs) var(--mono);color:var(--texte-2)}
.dbg-ligne .src{font-size:var(--txt-xs);color:var(--texte-2)}
.dbg-ligne .resume{flex-basis:100%;word-break:break-word}
.dbg-liste details summary{cursor:pointer;font-size:var(--txt-xs);color:var(--texte-2);margin-top:3px}
/* ===== Mises à jour ===== */
.maj-carte{border-left:var(--lisere) solid var(--galet)}
.maj-carte.dispo{border-left-color:var(--soleil)} .maj-carte.ajour{border-left-color:var(--vert)} .maj-carte.ko{border-left-color:var(--alerte)}
.maj-tete{display:flex;align-items:center;gap:12px 18px;flex-wrap:wrap}
.maj-tete > div:first-child{margin-right:auto}
.maj-version{font-family:var(--serif);font-weight:700;font-size:var(--txt-xl)}
.maj-etat{color:var(--texte-2);font-size:var(--txt-m)}
.maj-boutons{display:flex;gap:8px;flex-wrap:wrap}
.maj-progres{margin:14px 0 0}
.maj-ligne{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;font-weight:700}
.maj-ligne .eta{font-weight:600;color:var(--texte-2);font-variant-numeric:tabular-nums}
.barre-maj{position:relative;height:12px;border-radius:var(--rayon-rond);background:var(--sable);overflow:hidden;margin:8px 0 6px}
.barre-maj i{position:absolute;inset:0 auto 0 0;border-radius:var(--rayon-rond);transition:width var(--duree-lente) var(--courbe);overflow:hidden}
/* rayures qui défilent : un calque déplacé (transform), le dessin n'est pas refait */
.barre-maj i::before{content:"";position:absolute;top:0;bottom:0;left:-28px;right:0;
  background:repeating-linear-gradient(-45deg,var(--marine) 0 10px,color-mix(in srgb,var(--marine) 72%,var(--mer)) 10px 20px);
  background-size:28px 28px;animation:defile 1s linear infinite}
@keyframes defile{to{transform:translateX(28px)}}
.maj-sous{display:flex;justify-content:space-between;gap:10px;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.maj-etapes{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:5px;font-size:var(--txt-s)}
.maj-etapes li{display:flex;align-items:center;gap:9px;color:var(--texte-2)}
.maj-etapes li::before{content:"";flex:none;width:16px;height:16px;border-radius:50%;border:2px solid var(--trait);box-sizing:border-box}
.maj-etapes li.done{color:var(--texte)}
.maj-etapes li.done::before{border:0;background:var(--vert) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8.5l2.5 2.5L12 5.5' fill='none' stroke='white' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/16px no-repeat}
.maj-etapes li.current{color:var(--texte);font-weight:700}
.maj-etapes li.current::before{border-color:var(--trait);border-top-color:var(--marine);animation:tourne .9s linear infinite}
.maj-progres.sombre .barre-maj{background:var(--voile-trait)}
.maj-progres.sombre .barre-maj i{background:repeating-linear-gradient(-45deg,var(--creme) 0 10px,var(--creme-doux) 10px 20px);background-size:28px 28px}
.maj-progres.sombre .maj-sous,.maj-progres.sombre .maj-ligne .eta,.maj-progres.sombre .maj-etapes li{color:var(--creme-doux)}
.maj-progres.sombre .maj-etapes li.done,.maj-progres.sombre .maj-etapes li.current{color:var(--creme)}
.maj-progres.sombre .maj-etapes li.current::before{border-color:var(--voile-trait);border-top-color:var(--creme)}
.redem-boite{width:min(92vw,420px);text-align:left}
.maj-spin{width:18px;height:18px;border-radius:50%;border:3px solid var(--trait);border-top-color:var(--marine);animation:tourne 1s linear infinite}
@keyframes tourne{to{transform:rotate(360deg)}}
.maj-notes{margin:12px 0 0;font-size:var(--txt-m)} .maj-notes summary{cursor:pointer;font-weight:700}
.maj-notes div{white-space:pre-wrap;margin-top:6px;color:var(--texte-2)}
.maj-evts{list-style:none;padding:0;margin:10px 0;display:grid;gap:6px;font-size:var(--txt-s)}
.maj-evts time{color:var(--texte-2);margin-right:8px}
.maj-evts li.ko{color:var(--alerte)}
.maj-evts li code{margin-right:6px}
.maj-evts li.rollback,.maj-evts li.error{color:var(--alerte)}
.redemarrage{position:fixed;inset:0;z-index:var(--plan-ecran);display:grid;place-items:center;background:color-mix(in srgb,var(--marine) 88%,transparent);color:var(--creme);text-align:center;padding:24px}

/* ===== Incidents et rapports ===== */
.sous-titre{margin:22px 0 6px}
.incidents{--accent:var(--corail);margin:0 0 var(--esp-4)}
.liste-incidents{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:8px}
.liste-incidents li{--k:var(--corail);display:grid;grid-template-columns:1fr auto;gap:4px 12px;align-items:center}
.liste-incidents li.transitoire{--k:var(--soleil)} .liste-incidents li.ignore{--k:var(--galet);opacity:.55}
.liste-incidents li.resolu{--k:var(--ok)} .liste-incidents li.resolu .titre-inc{font-weight:600;color:var(--texte-2)}
.liste-incidents .titre-inc{font-weight:700;word-break:break-word}
.liste-incidents .meta-inc{grid-column:1;font-size:var(--txt-s);color:var(--texte-2)}
.liste-incidents .actions-inc{grid-row:1/span 2;grid-column:2;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.liste-incidents a{color:var(--lien);font-weight:700}
@media (max-width:600px){
  .liste-incidents li{grid-template-columns:1fr}
  .liste-incidents .actions-inc{grid-row:auto;grid-column:1;justify-content:flex-start}
}
/* Incidents de fonctionnement (autodiagnostic) : une ligne repliable par incident, son diagnostic et son fil dedans */
.incidents .chapo{margin:6px 0 4px}
.incidents + .incidents{margin-top:calc(-1 * var(--esp-2))}
.liste-diag{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px}
.liste-diag details.inc{background:var(--fond);border-radius:var(--rayon-m);border-left:4px solid var(--galet)}
.liste-diag details.inc.en-cours{border-left-color:var(--soleil)}
.liste-diag summary{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;align-items:center;padding:10px var(--esp-3);cursor:pointer;list-style:none;border-radius:var(--rayon-m)}
.liste-diag summary::-webkit-details-marker{display:none}
.liste-diag summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.inc-ico{grid-row:1/span 2;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--galet) 20%,transparent);color:var(--texte-2)}
.inc.en-cours .inc-ico{background:color-mix(in srgb,var(--soleil) 24%,transparent);color:var(--texte)}
.inc-ico svg{width:18px;height:18px}
.inc-tete{font-weight:700;word-break:break-word}
.inc-num{color:var(--texte-2);font-variant-numeric:tabular-nums}
.inc-meta{font-size:var(--txt-s);color:var(--texte-2)}
.inc-etat{font-weight:700}
.inc-etat.ouvert{color:var(--alerte)} .inc-etat.resolu{color:var(--ok)}
.inc-corps{padding:0 var(--esp-3) 14px calc(var(--esp-3) + 46px)}
.inc-symptome{margin:0 0 8px;font-weight:600}
.diag-verifs{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:var(--txt-s)}
.diag-verifs li{display:flex;gap:8px;align-items:baseline}
.diag-verifs i{flex:none;width:14px;text-align:center;font-style:normal;font-weight:800}
.diag-verifs li.ok i::before{content:"✓";color:var(--ok)}
.diag-verifs li.ko i::before{content:"✗";color:var(--alerte)}
.diag-verifs li.neutre i::before{content:"•";color:var(--texte-2)}
.diag-concl{margin:8px 0 0}
.diag-hyp{margin:4px 0 0;font-size:var(--txt-s);color:var(--texte-2)}
.inc-corps h4{margin:14px 0 6px;font:800 var(--txt-micro)/1.5 var(--sans);text-transform:uppercase;letter-spacing:.06em;color:var(--texte-2)}
.inc-fil{list-style:none;margin:0 0 0 4px;padding:0 0 0 14px;border-left:2px solid var(--trait)}
.inc-fil li{position:relative;display:grid;grid-template-columns:auto auto 1fr;gap:2px 10px;font-size:var(--txt-s);padding:3px 0}
.inc-fil li::before{content:"";position:absolute;left:-20px;top:9px;width:10px;height:10px;border-radius:50%;background:var(--galet);box-shadow:0 0 0 2px var(--fond)}
.inc-fil li.vide::before{display:none}
.inc-fil li.et-detection::before{background:var(--soleil)} .inc-fil li.et-reparation::before{background:var(--mer)}
.inc-fil li.et-verification::before{background:var(--lilas)} .inc-fil li.et-proposition::before{background:var(--marine-2)}
.inc-fil li.et-resolution::before{background:var(--ok)} .inc-fil li.echec::before{background:var(--alerte)}
.inc-fil time{color:var(--texte-2);font-variant-numeric:tabular-nums}
.inc-fil .et-type{font-weight:700}
.inc-fil li.echec .et-type{color:var(--alerte)}
.inc-corps .am-actions{margin-top:12px}
/* carte d'incident dans Maintenant (même gabarit que les autres alertes) */
.alerte-modules.diag .am-diag{grid-column:2;margin-top:8px;font-size:var(--txt-m)}
.alerte-modules.diag .am-diag summary{cursor:pointer;font-weight:700;color:var(--texte)}
.alerte-modules.diag .diag-inc{margin-top:6px}
@media (max-width:639px){.alerte-modules.diag .am-diag{grid-column:1}}
@media (max-width:600px){
  .inc-corps{padding-left:var(--esp-3)}
  .inc-fil li{grid-template-columns:auto 1fr}
  .inc-fil .et-texte{grid-column:1/-1}
}
/* ===== Fenêtres =====
   Rapport, boost, absence, vacances, éditeur de programmation : même gabarit (titre, aide, contenu, boutons à droite). */
.dlg{border:0;border-radius:var(--rayon-xl);padding:0;width:min(94vw,520px);background:var(--carte);color:var(--texte);box-shadow:var(--ombre-xl)}
.dlg.etroite{width:min(92vw,380px)}
/* pas de flou derrière les fenêtres : recalculé à chaque frappe ou à chaque image, il faisait ramer la saisie et le
   défilement de l'éditeur de programmation */
.dlg::backdrop{background:var(--voile-fenetre)}
/* ouverture : la fenêtre monte et le voile se pose en fondu ; fermeture animée seulement là où la fenêtre reste au
   premier plan pendant ce temps (sinon elle s'afficherait un instant au milieu de la page) */
.dlg,.dlg::backdrop{transition:opacity var(--duree-2) var(--courbe),transform var(--duree-2) var(--courbe)}
@starting-style{
  .dlg[open]{opacity:0;transform:translateY(12px) scale(.98)}
  .dlg[open]::backdrop{opacity:0}
}
@supports (overlay:auto){
  .dlg:not([open]){opacity:0;transform:translateY(8px) scale(.98)}
  .dlg:not([open])::backdrop{opacity:0}
  .dlg,.dlg::backdrop{transition:opacity var(--duree-2) var(--courbe),transform var(--duree-2) var(--courbe),
    overlay var(--duree-2) allow-discrete,display var(--duree-2) allow-discrete}
}
.dlg form{padding:var(--esp-6) var(--esp-6) var(--esp-5)}
.dlg h3{margin:0 0 var(--esp-1);font-size:var(--txt-2xl)}
.dlg .aide{margin:0 0 14px}
.dlg textarea{min-height:110px}
.dlg .actions{justify-content:flex-end;flex-wrap:wrap;margin-top:18px}
.rap-capture{display:flex;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap}
.rap-apercu{display:flex;flex-wrap:wrap;align-items:flex-start;gap:10px;margin-top:10px}
.rap-vignette{display:flex;flex-direction:column;align-items:flex-start;gap:6px;max-width:calc(50% - 5px)}
.rap-apercu img{max-width:100%;max-height:150px;border-radius:var(--rayon-s);border:1px solid var(--trait)}
/* Réglages rapides (bouton de l'en-tête) : saison, pilotage, langue, accès aux réglages. Sous le bouton sur grand
   écran, feuille qui monte du bas sur téléphone. */
.panneau-rapide{width:min(94vw,400px);max-height:calc(100dvh - 32px);overflow:auto;
  margin:calc(max(12px,env(safe-area-inset-top)) + var(--puce) + 6px) max(10px,calc((100vw - 1240px) / 2 + clamp(14px,3vw,28px) - 8px)) auto auto}
.pr-corps{display:grid;gap:20px;padding:var(--esp-5) var(--esp-5) var(--esp-6)}
.pr-tete{display:flex;align-items:center;justify-content:space-between;gap:12px}
.pr-tete h3{margin:0}
.pr-bloc{display:grid;gap:8px;min-width:0}
.pr-bloc h4{font:800 var(--txt-micro)/1.4 var(--sans);letter-spacing:.07em;text-transform:uppercase;color:var(--texte-2)}
.pr-bloc .aide{margin:0;font-size:var(--txt-s)}
.pr-pilotes{display:grid;gap:8px}
.pr-pilote.bascule{display:flex;width:100%;gap:12px;padding:11px 14px 11px 12px;border-radius:var(--rayon-m);background:var(--fond);text-align:left;font-weight:400}
.pr-pilote > span:last-child{display:grid;min-width:0}
.pr-pilote b{font-size:var(--txt-m)}
.pr-pilote small{font-size:var(--txt-xs);color:var(--texte-2)}
.pr-pilote[aria-checked="false"]{border-style:dashed}
/* Actions manuelles : une ligne repliée, discrète comme les liens du bas ; dépliée, les quatre actions deux par
   deux, picto teinté de ce qu'elles font */
.pr-plus{gap:0}
.pr-plus > summary{display:flex;align-items:center;gap:12px;min-height:48px;padding:8px 10px;border-radius:var(--rayon-m);cursor:pointer;list-style:none;
  color:var(--texte);transition:background-color var(--duree-1)}
.pr-plus > summary::-webkit-details-marker{display:none}
.pr-plus > summary:hover,.pr-plus[open] > summary{background:var(--fond)}
.pr-plus > summary > svg{width:22px;height:22px;flex:none;color:var(--texte-2)}
.pr-plus > summary > span{display:grid;min-width:0}
.pr-plus > summary b{font-size:var(--txt-m)}
.pr-plus > summary small{font-size:var(--txt-xs);color:var(--texte-2)}
.pr-plus > summary::after{content:"›";margin-left:auto;font-size:var(--txt-2xl);line-height:1;color:var(--texte-2);transition:rotate var(--duree-2) var(--courbe)}
.pr-plus[open] > summary::after{rotate:90deg}
.pr-plus[open] > :not(summary){animation:apparait var(--duree-2) var(--courbe) backwards}
.pr-plus > .pr-actions{margin-top:8px}
/* Composer ma journée (Réglages > Accueil) : groupes repliés, un titre et ce qu'ils contiennent (3.7.8 : la section
   dépliée faisait des mètres avec tous les lieux) */
.jn-groupe{margin-top:10px;border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--fond)}
.jn-groupe > summary{display:flex;align-items:center;gap:12px;min-height:48px;padding:8px 12px;cursor:pointer;list-style:none;border-radius:var(--rayon-m)}
.jn-groupe > summary::-webkit-details-marker{display:none}
.jn-groupe > summary > span{display:grid;min-width:0}
.jn-groupe > summary b{font-size:var(--txt-m);color:var(--texte)}
.jn-groupe > summary small{font-size:var(--txt-xs);color:var(--texte-2)}
.jn-groupe > summary small.jn-a-voir{color:var(--alerte);font-weight:600}
.jn-groupe > summary::after{content:"›";margin-left:auto;font-size:var(--txt-2xl);line-height:1;color:var(--texte-2);transition:rotate var(--duree-2) var(--courbe)}
.jn-groupe[open] > summary::after{rotate:90deg}
.jn-groupe[open] > summary{border-bottom:1px solid var(--trait);border-radius:var(--rayon-m) var(--rayon-m) 0 0}
.jn-groupe > :not(summary){margin-left:12px;margin-right:12px}
.jn-groupe > :last-child{margin-bottom:12px}
.jn-groupe[open] > :not(summary){animation:apparait var(--duree-2) var(--courbe) backwards}
.pr-plus > .aide{margin-top:8px}
.pr-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.pr-action{--k:var(--galet);display:flex;align-items:flex-start;gap:10px;min-width:0;min-height:64px;padding:11px 12px;border:1px solid var(--trait);
  border-radius:var(--rayon-m);background:var(--fond);color:var(--texte);text-align:left;font:inherit;cursor:pointer;
  transition:border-color var(--duree-1),background-color var(--duree-1),scale var(--duree-1) var(--courbe)}
.pr-action:hover{border-color:color-mix(in srgb,var(--k) 55%,var(--trait));background:color-mix(in srgb,var(--k) 7%,var(--fond))}
.pr-action:active:not([disabled]){scale:.97}
.pr-action[disabled]{cursor:wait}
.pr-action > span{display:grid;gap:1px;min-width:0}
.pr-action b{font-size:var(--txt-s);line-height:1.25}
.pr-action small{font-size:var(--txt-xs);line-height:1.3;color:var(--texte-2)}
.pr-ico{flex:none;width:30px;height:30px;padding:6px;border-radius:50%;color:color-mix(in srgb,var(--k) 85%,var(--texte));
  background:color-mix(in srgb,var(--k) 16%,var(--carte))}
.pr-action.chaud{--k:var(--corail)} .pr-action.froid{--k:var(--vert)} .pr-action.remettre{--k:var(--soleil)} .pr-action.calendrier{--k:var(--mer)}
/* envoi en cours : le picto tourne doucement, les autres actions restent possibles */
.pr-action.en-cours .pr-ico{animation:tourne 1.2s linear infinite}
.pr-langues{display:flex;flex-wrap:wrap;gap:8px}
.pr-langue{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:6px 14px 6px 10px;border-radius:var(--rayon-rond);border:1px solid var(--trait);
  background:var(--fond);color:var(--texte);font:700 var(--txt-s) var(--sans);cursor:pointer}
.pr-langue:hover{border-color:var(--texte-2)}
.pr-langue[aria-checked="true"]{border-color:var(--mer);box-shadow:inset 0 0 0 1px var(--mer);color:color-mix(in srgb,var(--mer) var(--mix-pastille),var(--texte))}
.pr-liens{gap:2px;padding-top:12px;border-top:1px solid var(--trait)}
.pr-lien{display:flex;align-items:center;gap:12px;width:100%;min-height:48px;padding:8px 10px;border:0;border-radius:var(--rayon-m);background:none;color:var(--texte);
  text-align:left;font:inherit;cursor:pointer}
.pr-lien:hover{background:var(--fond)}
.pr-lien > svg{width:22px;height:22px;flex:none;color:var(--texte-2)}
.pr-lien > span{display:grid;min-width:0}
.pr-lien b{font-size:var(--txt-m)}
.pr-lien small{font-size:var(--txt-xs);color:var(--texte-2)}
.pr-lien::after{content:"›";margin-left:auto;font-size:var(--txt-2xl);line-height:1;color:var(--texte-2)}
/* fiche d'un radiateur (toucher sa carte dans Maintenant) : la fiche complète, nom, consignes, mode, prochaine étape */
.dlg-fiche{width:min(94vw,500px);max-height:calc(100dvh - 32px);overflow:auto;background:var(--carte)}
/* la fiche est un plan isolé : le bouton de fermeture reste au-dessus d'un voile « occupé » sans dépasser les onglets */
.fiche-corps{isolation:isolate}
.fiche-corps > .carte{box-shadow:none;border-radius:0;padding:18px var(--esp-5) var(--esp-5)}
.fiche-corps .tete-carte{padding-right:46px;margin-left:0;align-items:flex-start;gap:8px}
.fiche-corps .tete-carte h3{white-space:normal;font-size:var(--txt-2xl);padding-top:3px}
.fiche-corps .renom-txt{white-space:normal;overflow-wrap:anywhere}
.fiche-corps .etats{position:static;flex:none;margin-top:2px}
.fiche-corps .hors{position:static;flex:none;margin-top:6px}
.fiche-fermer{position:absolute;top:14px;right:14px;z-index:1;width:40px;height:40px;border:0;border-radius:50%;
  background:var(--fond);color:var(--texte-2);font-size:var(--txt-2xl);line-height:1;cursor:pointer}
.fiche-liens{margin:12px 0 0;font-size:var(--txt-s)}
.fiche-pourquoi{margin:12px 0 0;padding:8px 12px;border-radius:var(--rayon-m);background:var(--fond);font-size:var(--txt-s)}
.fiche-pourquoi summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-weight:600}
.pourquoi-corps p{margin:0 0 6px}
.fiche-fermer:hover{color:var(--texte);background:var(--sable)}
.fiche-corps .jauge{width:200px;height:165px}
.fiche-corps .occupation{border-radius:0}
@media (max-width:640px){
  .panneau-rapide,.dlg-fiche{width:100%;max-width:100%;margin:auto 0 0;border-radius:var(--rayon-xl) var(--rayon-xl) 0 0;max-height:calc(100dvh - 24px)}
  .pr-corps,.fiche-corps > .carte{padding-bottom:calc(var(--esp-6) + env(safe-area-inset-bottom))}
  @starting-style{ .panneau-rapide[open],.dlg-fiche[open]{transform:translateY(60px)} }
  @supports (overlay:auto){ .panneau-rapide:not([open]),.dlg-fiche:not([open]){transform:translateY(60px)} }
}
/* ===== Langue ===== */
.langue{position:relative;flex:none}
.langue-btn{display:inline-flex;align-items:center;gap:7px;padding:6px 11px 6px 8px;border-radius:var(--rayon-rond);border:1px solid var(--voile-trait);
  background:var(--voile-1);color:var(--creme);font:700 var(--txt-s) var(--sans);letter-spacing:.04em;cursor:pointer}
.langue-btn:hover{background:var(--voile-2)}
.langue-btn::after{content:"";width:0;height:0;border:4px solid transparent;border-top-color:currentColor;margin:4px 0 0 1px;opacity:.7}
.drapeau{width:22px;height:15px;border-radius:var(--rayon-xs);object-fit:cover;box-shadow:0 0 0 1px rgba(0,0,0,.18);flex:none}
.langue-liste{position:absolute;right:0;top:calc(100% + 8px);z-index:var(--plan-menu);list-style:none;margin:0;padding:6px;min-width:180px;background:var(--carte);color:var(--texte);
  border-radius:var(--rayon-l);box-shadow:var(--ombre-l);border:1px solid var(--trait);animation:apparait var(--duree-1) var(--courbe)}
.langue-liste li{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:var(--rayon-s);cursor:pointer;font-weight:600;outline:none}
.langue-liste li:hover,.langue-liste li:focus{background:var(--fond)}
.langue-liste li[aria-selected="true"]{color:var(--lien)}
.langue-liste li[aria-selected="true"]::after{content:"✓";margin-left:auto;font-weight:800}
.langue-login{position:fixed;top:max(16px,env(safe-area-inset-top));right:16px;z-index:var(--plan-menu)}
#form-connexion{position:relative}
body.change-langue{opacity:.35;transition:opacity var(--duree-2)}
/* ===== Prévisualiser : calendrier des actions à venir =====
   En haut, les automatismes (actif, coupé avec « Simuler », simulé) et les chiffres clés ; puis la frise (une ligne
   par appareil : son état heure par heure, chaque action à son heure) et l'agenda jour par jour. Les états prennent
   les couleurs des fiches (confort corail, éco vert, hors-gel mer, présence lilas, programmation soleil), les phases
   du ballon celles de son ruban. Simulation : hachures lilas ; action « si besoin » : pointillés ; action faite par
   le module lui-même : losange. */
.periode.trois{grid-template-columns:repeat(3,auto)}
/* mise en page selon la place donnée à l'onglet (téléphone, ou colonne étroite à côté de Maintenant sur un écran
   pliable), pas selon la largeur de l'écran */
#prev-sortie{container:prev/inline-size}
.notes{margin:0 0 16px;padding:0 0 0 18px;color:var(--alerte)}
.prev-autos{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:12px;margin:0 0 16px}
.pa-auto{--p:var(--ok);display:flex;align-items:center;gap:14px;padding:12px var(--esp-4);border-radius:var(--rayon-l);background:var(--carte);
  box-shadow:var(--ombre);border:1.5px solid transparent}
.pa-auto-ico{flex:none;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;color:var(--p);
  background:color-mix(in srgb,var(--p) 14%,transparent)}
.pa-auto-ico svg{width:22px;height:22px}
.pa-auto-txt{flex:1;min-width:0;display:grid;gap:1px}
.pa-auto-txt b{font-size:var(--txt-m)}
.pa-auto-etat{display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:var(--txt-s);color:color-mix(in srgb,var(--p) var(--mix-pastille),var(--texte))}
.pa-auto-etat i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--p)}
.pa-auto small{color:var(--texte-2);font-size:var(--txt-s);line-height:1.35}
.pa-auto .btn{flex:none}
.pa-auto.on .pa-auto-etat i{position:relative}
.pa-auto.on .pa-auto-etat i::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--p);animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}
.pa-auto.off{--p:var(--galet);background:var(--fond);box-shadow:none;border:1.5px dashed var(--trait)}
.pa-auto.simu{--p:var(--lilas);border-color:color-mix(in srgb,var(--lilas) 45%,transparent);
  background:repeating-linear-gradient(135deg,var(--carte) 0 10px,color-mix(in srgb,var(--lilas) 6%,var(--carte)) 10px 20px)}
/* frise : noms à gauche (restent visibles quand la frise défile), jours en tête, fond rayé avant l'heure actuelle */
.pf{padding:14px var(--esp-4) 12px;margin-bottom:16px}
.pf-defile{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin;
  isolation:isolate}  /* plans de la frise (noms collants, repères) gardés chez elle : jamais sur les onglets (#29) */
.pf-grille{--nom:176px;position:relative;min-width:calc(var(--nom) + var(--n) * var(--jmin,0px))}
.pf-ligne{display:grid;grid-template-columns:var(--nom) minmax(0,1fr);min-height:42px}
.pf-ligne + .pf-ligne{border-top:1px solid color-mix(in srgb,var(--trait) 60%,transparent)}
.pf-nom{position:sticky;left:0;z-index:5;display:flex;align-items:center;gap:8px;min-width:0;padding:4px 10px 4px 0;background:var(--carte)}
.pf-nom-txt{display:grid;min-width:0;line-height:1.2}
.pf-nom b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-width:0;font-size:var(--txt-s);overflow-wrap:anywhere}
.pf-nom small{font-size:var(--txt-xs);font-weight:700;color:var(--texte-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.pf-ico{flex:none;display:grid;place-items:center;width:26px;height:26px;border-radius:var(--rayon-s);color:var(--texte-2);background:var(--fond)}
.pf-ico svg{width:15px;height:15px}
.pf-ligne.eau .pf-ico{color:var(--eau)}
.pf-sejours .pf-ico{color:var(--corail)}
.pf-piste{position:relative;min-height:42px}
.pf-tete{min-height:48px;border-bottom:1px solid var(--trait);position:relative;z-index:1}   /* au-dessus de la teinte des week-ends : dates lisibles */
.pf-jour{position:absolute;top:0;bottom:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;line-height:1.1;
  overflow:hidden;color:var(--texte-2)}
.pf-jour small{font-size:var(--txt-micro);font-weight:800;text-transform:uppercase;letter-spacing:.04em}
.pf-jour b{display:grid;place-items:center;min-width:24px;height:22px;padding:0 3px;border-radius:var(--rayon-rond);font-family:var(--serif);
  font-size:var(--txt-m);color:var(--texte);font-variant-numeric:tabular-nums}
.pf-jour em{position:absolute;top:1px;left:4px;font-style:normal;font-size:var(--txt-micro);font-weight:700;color:var(--texte-2)}
.pf-jour.weekend small{color:var(--corail)}
.pf-jour small.mois{text-transform:none;letter-spacing:0;color:var(--texte)}
.pf-jour.auj small{color:var(--corail)}
.pf-jour.auj b{background:var(--corail);color:var(--sur-couleur)}   /* aujourd'hui : même pastille que le planning de Maintenant */
.pf-fond{position:absolute;top:0;bottom:0;left:var(--nom);right:0;pointer-events:none}
.pf-fond i{position:absolute;top:0;bottom:0;border-left:1px solid color-mix(in srgb,var(--trait) 70%,transparent)}
.pf-fond i:first-child{border-left:0}
.pf-fond i.weekend{background:color-mix(in srgb,var(--sable) 40%,transparent)}
.pf-passe{position:absolute;top:48px;bottom:0;left:var(--nom);width:calc((100% - var(--nom)) * var(--maint));z-index:2;pointer-events:none;
  background:linear-gradient(90deg,color-mix(in srgb,var(--carte) 70%,transparent),color-mix(in srgb,var(--carte) 45%,transparent))}   /* passé voilé */
.pf-maintenant{position:absolute;top:48px;bottom:0;left:calc(var(--nom) + (100% - var(--nom)) * var(--maint));z-index:3;width:2px;margin-left:-1px;
  background:var(--corail);pointer-events:none;transition:left var(--duree-4) var(--courbe)}
.pf-maintenant::before,.pf-maintenant::after{content:"";position:absolute;top:-5px;left:50%;width:10px;height:10px;margin-left:-5px;border-radius:50%;background:var(--corail)}
.pf-maintenant::before{z-index:1;box-shadow:0 0 0 3px var(--carte)}
.pf-maintenant::after{animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}   /* même onde que le repère du planning de Maintenant */
.pf-maintenant span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.pf-sejour{position:absolute;top:50%;height:24px;margin-top:-12px;display:inline-flex;align-items:center;gap:4px;padding:0 8px;border:0;border-radius:var(--rayon-rond);
  background:color-mix(in srgb,var(--corail) 20%,var(--carte));color:color-mix(in srgb,var(--corail) 70%,var(--texte));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--corail) 45%,transparent);font:800 var(--txt-xs) var(--sans);overflow:hidden;white-space:nowrap;cursor:default}
.pf-sejour i{display:inline-flex;flex:none} .pf-sejour svg{width:13px;height:13px}
.pf-sejour.bloque{background:repeating-linear-gradient(135deg,var(--fond) 0 5px,var(--trait) 5px 7px);color:var(--texte-2);box-shadow:inset 0 0 0 1px var(--trait)}
.pf-sejour.proprio{background:color-mix(in srgb,var(--lilas) 20%,var(--carte));color:color-mix(in srgb,var(--lilas) 70%,var(--texte));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--lilas) 45%,transparent)}
.pf-seg{position:absolute;top:50%;height:16px;margin-top:-8px;min-width:2px;border-radius:5px;overflow:hidden;background:var(--c,var(--galet));box-shadow:inset -1px 0 var(--carte)}
:is(.pf-seg,.pf-legende i):is(.k-cft,.k-cft1,.k-cft2,.k-boost){--c:var(--corail)} :is(.pf-seg,.pf-legende i).k-eco{--c:var(--vert)}
:is(.pf-seg,.pf-legende i).k-fro{--c:var(--mer)} :is(.pf-seg,.pf-legende i).k-stop{--c:var(--galet)}
:is(.pf-seg,.pf-legende i).k-presence{--c:var(--lilas)} :is(.pf-seg,.pf-legende i).k-programme{--c:var(--soleil)}
.pf-seg.k-vacances,.pf-legende i.k-vacances{background:repeating-linear-gradient(135deg,var(--creux-clair) 0 6px,color-mix(in srgb,var(--creux-clair) 62%,var(--carte)) 6px 12px)}
.pf-seg.k-programme i{position:absolute;top:4px;bottom:0}
:is(.pf-seg,.pf-legende i):is(.k-inconnu,.k-fixe,.e-fixe){background:repeating-linear-gradient(135deg,var(--fond) 0 5px,var(--trait) 5px 7px);
  box-shadow:inset 0 0 0 1px var(--trait)}
:is(.pf-seg,.pf-legende i).e-sejour{background:var(--e-sejour)} :is(.pf-seg,.pf-legende i).e-menage{background:var(--e-menage)}
:is(.pf-seg,.pf-legende i).e-plein{background:var(--e-plein)} :is(.pf-seg,.pf-legende i).e-reduit{background:var(--e-reduit)}
:is(.pf-seg,.pf-legende i).e-absence{background:var(--e-absence)} :is(.pf-seg,.pf-legende i).e-relance{background:var(--e-relance)}
.pf-ligne.simule .pf-seg{opacity:.7}
.pf-ligne.simule .pf-seg::after{content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(135deg,transparent 0 4px,color-mix(in srgb,var(--carte) 60%,transparent) 4px 7px)}
.pf-mk{position:absolute;top:50%;z-index:4;display:grid;place-items:center;width:26px;height:26px;margin:-13px 0 0 -13px;padding:0;border-radius:50%;
  border:2px solid var(--carte);background:var(--k);color:var(--sur-couleur);box-shadow:var(--ombre-s);cursor:pointer;
  transition:transform var(--duree-1) var(--courbe),box-shadow var(--duree-1)}
.pf-mk svg{width:14px;height:14px}
.pf-mk[data-k="relance"],.pf-mk[data-k="saison"]{color:var(--sur-soleil)}
.pf-mk:hover,.pf-mk:focus-visible{z-index:6;transform:scale(1.2);box-shadow:0 0 0 4px color-mix(in srgb,var(--k) 28%,transparent),var(--ombre-s)}
.pf-mk.si{background:var(--carte);color:var(--k);border:2px dashed var(--k)}
.pf-mk.module{rotate:45deg;border-radius:6px;background:var(--carte);color:var(--galet);border:2px solid var(--galet);width:22px;height:22px;margin:-11px 0 0 -11px}
.pf-mk.module svg{rotate:-45deg;width:12px;height:12px}
.pf-mk.simule{border-style:dashed;border-color:var(--lilas)}
/* plusieurs actions trop proches pour deux pastilles : une seule, avec leur nombre */
.pf-nb{position:absolute;top:-8px;right:-9px;min-width:17px;height:17px;padding:0 4px;border-radius:var(--rayon-rond);background:var(--texte);
  color:var(--carte);font:800 var(--txt-micro)/17px var(--sans);text-align:center;box-shadow:0 0 0 2px var(--carte);font-variant-numeric:tabular-nums}
.pf-mk.module .pf-nb{rotate:-45deg;top:-10px;right:auto;left:50%;margin-left:-8px}
.pf .infobulle{max-width:280px}
.pf-bulle-l{display:block}
.pf-bulle-l + .pf-bulle-l{margin-top:3px}
.pf-bulle-l b{display:inline;margin:0;font-variant-numeric:tabular-nums}
.pf-bulle-l em{opacity:.75}
/* légende en trois groupes (radiateurs, ballon, actions), leur nom dans une colonne à gauche */
.pf-legende{display:grid;grid-template-columns:max-content minmax(0,1fr);align-items:baseline;gap:6px 16px;margin:14px 0 0;padding-top:12px;
  border-top:1px solid color-mix(in srgb,var(--trait) 60%,transparent)}
.pf-legende .legende{margin:0;gap:4px 16px;color:var(--texte-2)}
.pf-leg-titre{font-size:var(--txt-s);font-weight:800;color:var(--texte)}
.pf-legende i.mk{width:12px;height:12px;border-radius:50%;background:var(--texte-2)}
.pf-legende i.mk.si{background:none;box-shadow:inset 0 0 0 1.5px var(--texte-2);outline:1.5px dashed var(--texte-2);outline-offset:-1.5px}
.pf-legende i.mk.module{width:9px;height:9px;border-radius:2px;rotate:45deg;background:none;box-shadow:inset 0 0 0 1.5px var(--galet)}
.pf-legende i.hachure{background:repeating-linear-gradient(135deg,var(--lilas) 0 2px,transparent 2px 4px)}
/* agenda : un jour par bloc, une carte par heure et par genre d'action (les radiateurs d'un même départ ensemble) */
.prev-agenda{display:grid;gap:18px;margin:4px 0 18px}
.prev-agenda > .vide{margin:0}
.pa-jour h3{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:6px 0 10px}
.pa-jour h3 small{font:700 var(--txt-s) var(--sans);color:var(--texte-2)}
.pa-liste{display:grid;gap:8px}
.pa-carte,.pa-jalon{display:grid;grid-template-columns:4.6em 40px minmax(0,1fr);gap:4px 12px}
.pa-carte{--k:var(--galet);align-items:start;padding:12px var(--esp-4);border-radius:var(--rayon-m);background:var(--carte);box-shadow:var(--ombre);
  border-left:var(--lisere) solid var(--k)}
.pa-carte > time{padding-top:7px;font:700 var(--txt-l)/1.2 var(--serif);color:color-mix(in srgb,var(--k) 72%,var(--texte));font-variant-numeric:tabular-nums}
.pa-maint{display:inline-flex;align-items:flex-start;gap:6px;font:800 var(--txt-micro)/1.25 var(--sans);text-transform:uppercase;letter-spacing:.04em}
.pa-maint{position:relative}
.pa-maint::before,.pa-maint::after{content:"";flex:none;width:8px;height:8px;margin-top:2px;border-radius:50%;background:var(--k)}
.pa-maint::after{position:absolute;left:0;top:0;animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}
.pa-ico{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;color:var(--k);background:color-mix(in srgb,var(--k) 14%,transparent)}
.pa-ico svg{width:20px;height:20px}
.pa-corps{min-width:0}
/* radiateurs d'un même groupe : noms et actions sur deux colonnes communes à toute la carte */
@supports (grid-template-columns:subgrid){
  .pa-corps{display:grid;grid-template-columns:fit-content(15em) minmax(0,1fr);column-gap:12px;align-content:start}
  .pa-corps > *{grid-column:1/-1}
  .pa-corps > .pa-ligne{grid-template-columns:subgrid}
}
.pa-titre{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:2px 0 4px}
.pa-titre b{font-size:var(--txt-m)}
.pa-titre .badge{margin:0}
.pa-nb{font-size:var(--txt-xs);font-weight:700;color:var(--texte-2)}
.badge.si{--b:transparent;color:var(--ok);box-shadow:inset 0 0 0 1px currentColor}
.badge.essai{--b:var(--soleil);color:var(--sur-soleil)}
.badge.simu{--b:var(--lilas)}
.pa-action{margin:0;font-size:var(--txt-m)}
.pa-pourquoi{margin:4px 0 0;font-size:var(--txt-s);color:var(--texte-2)}
.pa-ligne{display:grid;grid-template-columns:minmax(84px,max-content) minmax(0,1fr);gap:2px 12px;padding:8px 0;
  border-top:1px solid color-mix(in srgb,var(--trait) 70%,transparent)}
.pa-titre + .pa-ligne{border-top:0;padding-top:2px}
.pa-ligne > b{font-size:var(--txt-m)}
.pa-ligne > :not(b){grid-column:2}
.pa-ligne .pa-pourquoi{margin-top:2px}
.pa-ligne + .pa-pourquoi{margin-top:2px;padding-top:8px;border-top:1px solid color-mix(in srgb,var(--trait) 70%,transparent)}
/* radiateurs qui reçoivent le même ordre : une puce par radiateur */
.pa-apps{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 2px;padding:0;list-style:none}
.pa-apps li{padding:3px 10px;border-radius:var(--rayon-rond);background:color-mix(in srgb,var(--k) 11%,var(--fond));font-size:var(--txt-s);font-weight:700;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--k) 30%,transparent)}
.pa-ordre{margin-top:4px;font-size:var(--txt-s);color:var(--texte-2)}
.pa-ordre summary{width:fit-content;max-width:100%;font-weight:700;cursor:pointer}
.pa-ordre code{display:block;margin-top:4px;padding:6px 8px;border-radius:var(--rayon-s);background:var(--fond);font:var(--txt-xs)/1.45 var(--mono);
  white-space:pre-wrap;word-break:break-word}
.pa-carte.si .pa-ico{background:none;outline:1.5px dashed var(--k);outline-offset:-1.5px}
.pa-carte.module{background:var(--fond);box-shadow:none;border:1px solid var(--trait);border-left:var(--lisere) solid var(--galet)}
.pa-carte.simule{background:repeating-linear-gradient(135deg,var(--carte) 0 10px,color-mix(in srgb,var(--lilas) 6%,var(--carte)) 10px 20px)}
/* éclairage d'un instant (carte touchée depuis la frise, ligne nouvelle du Journal, réglage trouvé) : un anneau
   posé sur l'élément, qui s'efface en opacité */
.pa-carte.eclaire,.journal li.nouvelle,.rg-trouve{position:relative}
.pa-carte.eclaire::after,.journal li.nouvelle::after,.rg-trouve::after{content:"";position:absolute;inset:0 0 0 calc(-1 * var(--lisere));
  border-radius:inherit;pointer-events:none;box-shadow:0 0 0 4px color-mix(in srgb,var(--k,var(--galet)) 45%,transparent);
  animation:eclaire 1.8s var(--courbe) both}
.journal li.nouvelle::after{animation-duration:2.4s}
@keyframes eclaire{0%,35%{opacity:1}100%{opacity:0}}
.pa-jalon{align-items:center;padding:0 var(--esp-4) 0 calc(var(--esp-4) + var(--lisere));font-size:var(--txt-s);font-weight:700;color:var(--texte-2)}
.pa-jalon time{font-variant-numeric:tabular-nums}
.pa-jalon .pa-ico{--k:var(--corail);justify-self:center;width:28px;height:28px}
.pa-jalon .pa-ico svg{width:15px;height:15px}
.pa-jalon.depart .pa-ico{--k:var(--mer)}
.pa-rien{margin:0;padding:10px var(--esp-4);border:1px dashed var(--trait);border-radius:var(--rayon-m);font-size:var(--txt-s);font-style:italic;color:var(--texte-2)}
.prev-fond{margin-bottom:12px}
.prev-fond .sous-graph{margin:2px 0 0}
.prev-fond ul{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:10px 20px;margin:14px 0 0;padding:0;list-style:none}
.prev-fond li{display:flex;align-items:flex-start;gap:10px;font-size:var(--txt-s);color:var(--texte-2)}
.prev-fond .pa-ico{--k:var(--mer);flex:none;width:30px;height:30px}
.prev-fond .pa-ico svg{width:16px;height:16px}
.prev-meta{margin:0 0 8px;font-size:var(--txt-xs);color:var(--texte-2)}
/* en mouvement (ouverture de l'onglet, changement de période ou de simulation) : chaque ligne de la frise se déroule
   à son tour, les actions apparaissent de gauche à droite, puis les jours de l'agenda arrivent en cascade */
.anime .pa-auto{animation:carte-entree var(--duree-3) var(--courbe) both}
.anime .pf-ligne:not(.pf-tete) .pf-piste{animation:balaye var(--duree-lente) var(--courbe) backwards;animation-delay:calc(var(--i,0) * 70ms)}
.anime .pf-mk{animation:point var(--duree-3) var(--ressort) backwards;
  animation-delay:calc(var(--duree-lente) * .45 + var(--x,0) * 5ms + var(--i,0) * 70ms)}
.anime .pf-maintenant{animation:fondu var(--duree-4) var(--courbe) backwards;animation-delay:var(--duree-3)}
.anime .pa-jour,.anime .pa-rien{animation:carte-entree var(--duree-3) var(--courbe) both;animation-delay:calc(200ms + var(--i,0) * 50ms)}
@keyframes balaye{from{opacity:0;transform:translateX(-12px)}}   /* pistes qui arrivent de la gauche, en fondu */
@container prev (max-width:600px){
  .pf{padding:12px var(--esp-3) 10px}
  .pf-grille{--nom:0px}
  .pf-ligne{grid-template-columns:minmax(0,1fr);min-height:0}
  .pf-tete .pf-nom{display:none}
  /* le nom garde un fond : le trait « maintenant » passe dessous, pas à travers */
  .pf-nom{justify-self:start;gap:6px;max-width:calc(100cqi - 2 * var(--esp-3) - 16px);padding:6px 8px 0 0;border-radius:var(--rayon-xs)}
  .pf-nom-txt{display:flex;align-items:baseline;gap:6px}
  .pf-nom b{display:block;font-size:var(--txt-xs);white-space:nowrap;text-overflow:ellipsis}
  .pf-legende{grid-template-columns:minmax(0,1fr);gap:2px}
  .pf-legende .legende + .pf-leg-titre{margin-top:8px}
  .pf-ico{width:18px;height:18px;background:none}
  .pf-ico svg{width:13px;height:13px}
  .pf-piste{min-height:36px}
  /* repères plus petits sur la frise étroite (la couleur du mode reste visible entre eux), zone de toucher de 44 px */
  .pf-mk{width:20px;height:20px;margin:-10px 0 0 -10px}
  .pf-mk svg{width:11px;height:11px}
  .pf-mk.module{width:18px;height:18px;margin:-9px 0 0 -9px}
  .pf-mk::after{content:"";position:absolute;inset:-12px;border-radius:50%}
  .pf-sejour::after{content:"";position:absolute;inset:-10px 0}
  .pf-nb{top:-7px;right:-7px;min-width:14px;height:14px;padding:0 3px;font-size:9px;line-height:14px}
  .pa-carte{grid-template-columns:3.7em minmax(0,1fr);gap:4px 10px;padding:12px var(--esp-3)}
  .pa-carte > .pa-ico{display:none}
  .pa-carte > time:has(.pa-maint){grid-column:1/-1;padding-top:0}   /* « Au prochain passage » : au-dessus du titre, pas dessus */
  .pa-jalon{grid-template-columns:3.7em 28px minmax(0,1fr);gap:10px;padding:0 var(--esp-3) 0 calc(var(--esp-3) + var(--lisere))}
  .pa-corps{display:block}
  .pa-ligne,.pa-corps > .pa-ligne{grid-template-columns:minmax(0,1fr)}
  .pa-ligne > :not(b){grid-column:1}
  .pa-auto{flex-wrap:wrap}
  .pa-auto .btn{margin-left:56px}
}
.resultat{font-size:var(--txt-m);margin-top:8px;color:var(--texte-2)}
.resultat.ok{color:var(--ok)} .resultat.ko{color:var(--alerte)}

/* ===== Réglages / Radiateurs ===== */
.reglages section{padding:var(--esp-6);margin:0 0 var(--esp-4)}
.reglages h2{margin:22px 0 12px;font-size:var(--txt-2xl)}
.reglages section > h2:first-child{margin-top:0}
/* rubriques repliables : le titre est un bouton (chevron, résumé de l'état quand la rubrique est repliée) */
.repliable > h2{margin:0}
.rubrique-tete{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 14px;width:100%;margin:0;padding:0;border:0;background:none;
  font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:var(--rayon-s)}
.rubrique-tete:focus-visible{outline-offset:6px}
.rubrique-resume{flex:1 1 14em;min-width:0;font:600 var(--txt-m)/1.35 var(--sans);color:var(--texte-2);animation:apparait var(--duree-3) var(--courbe)}
.repliable:not(.repliee) .rubrique-resume,.rubrique-resume:empty{display:none}
.rubrique-tete .chevron{align-self:center;flex:none;margin-left:auto;width:11px;height:11px;border-right:2.5px solid var(--texte-2);border-bottom:2.5px solid var(--texte-2);
  transform:translateY(-3px) rotate(45deg);transition:transform var(--duree-3) var(--courbe),border-color var(--duree-1)}
.repliee .rubrique-tete .chevron{transform:rotate(-45deg)}
.rubrique-tete:hover .chevron{border-color:var(--texte)}
.rubrique-interieur{display:flow-root;padding-top:12px}
.rubrique-interieur > :first-child{margin-top:0}
/* ===== Onglet Réglages : 8 rubriques (fanal/catalogue.py), une seule à la fois =====
   Téléphone : la liste des rubriques, puis la rubrique choisie (« Réglages » pour revenir à la liste). Fold ouvert,
   tablette et ordinateur : la liste à gauche, la rubrique à droite. La recherche mène droit au réglage. */
.rg-tete{margin:0 0 var(--esp-4)}
.rg-recherche{position:relative;max-width:720px}
.rg-recherche input[type=search]{padding:12px 14px 12px 44px;border-radius:var(--rayon-l);background:var(--carte);box-shadow:var(--ombre-s);font-size:var(--txt-l)}
.rg-loupe{position:absolute;left:15px;top:50%;width:19px;height:19px;margin-top:-9.5px;color:var(--texte-2);pointer-events:none}
.rg-resultats{position:absolute;z-index:var(--plan-recherche);left:0;right:0;top:calc(100% + 6px);margin:0;padding:6px;list-style:none;background:var(--carte);
  border:1px solid var(--trait);border-radius:var(--rayon-l);box-shadow:var(--ombre-l);max-height:min(62vh,460px);overflow:auto;overscroll-behavior:contain}
.rg-resultats li{display:grid;gap:2px;padding:9px 12px;border-radius:var(--rayon-m);cursor:pointer}
.rg-resultats li[aria-selected="true"],.rg-resultats li:hover{background:var(--fond)}
.rg-resultats li[aria-selected="true"]{box-shadow:inset 3px 0 0 var(--mer)}
.rg-resultats b{font-size:var(--txt-m)}
.rg-resultats small{font-size:var(--txt-xs);color:var(--texte-2)}
.rg-resultats .rg-ou{font-weight:700;color:var(--lien)}
.rg-resultats li.rg-vide{cursor:default;color:var(--texte-2);background:none}
.acc-adresse{position:relative}
.rg-menu{display:grid;gap:8px;align-content:start}
.rg-lien{display:flex;align-items:center;gap:12px;width:100%;min-height:58px;padding:10px 14px;border:1px solid var(--trait);border-radius:var(--rayon-l);
  background:var(--carte);color:var(--texte);font:inherit;text-align:left;cursor:pointer;box-shadow:var(--ombre-s);
  transition:background-color var(--duree-1),border-color var(--duree-1),box-shadow var(--duree-1)}
.rg-lien:hover{border-color:color-mix(in srgb,var(--texte-2) 45%,var(--trait))}
.rg-lien::after{content:"›";margin-left:auto;font-size:var(--txt-3xl);line-height:1;color:var(--texte-2)}
.rg-txt{display:grid;min-width:0;gap:1px}
.rg-lien b{font-size:var(--txt-l)}
.rg-lien small{font-size:var(--txt-xs);color:var(--texte-2);line-height:1.3}
.rg-ico{display:grid;place-items:center;flex:none;width:38px;height:38px;border-radius:var(--rayon-m);background:var(--fond);color:var(--mer)}
.rg-ico svg{width:21px;height:21px}
.rg-rub-tete{display:flex;align-items:center;flex-wrap:wrap;gap:10px 14px;margin:0 0 var(--esp-4)}
.reglages .rg-titre{display:flex;align-items:center;gap:12px;margin:0;font-size:var(--txt-3xl)}
.reglages .rg-titre .rg-ico{background:var(--carte);box-shadow:var(--ombre-s)}
.rg-retour{display:inline-flex;align-items:center;gap:2px;min-height:40px;padding:6px 14px 6px 8px;border:1px solid var(--trait);border-radius:var(--rayon-rond);
  background:var(--carte);color:var(--texte);font:inherit;font-weight:700;cursor:pointer}
.rg-retour svg{width:19px;height:19px}
.rg-rubrique:not([hidden]){animation:vue-entree var(--duree-3) var(--courbe)}
.rg-rubriques{container-type:inline-size;min-width:0}
@container (max-width:600px){ .rg-rubriques .grille{grid-template-columns:1fr} }
/* réglage trouvé par la recherche : il s'allume un instant */
.rg-trouve::after{inset:0;border-radius:var(--rayon-s);box-shadow:0 0 0 4px color-mix(in srgb,var(--soleil) 70%,transparent);animation-duration:2.2s}
/* réglage différent de sa valeur d'origine ; liste de la section pour y revenir */
.rg-modifie{display:inline-block;margin-left:8px;padding:0 8px;border-radius:var(--rayon-rond);font:700 var(--txt-micro)/1.6 var(--sans);letter-spacing:.02em;
  color:var(--marine);background:color-mix(in srgb,var(--soleil) 48%,var(--carte));vertical-align:.12em;white-space:nowrap}
.rg-modifs{margin-top:14px}
.rg-modifs ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px}
.rg-modifs li{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:var(--txt-s)}
.rg-modifs li > span{flex:1 1 16em;min-width:0}
.rg-modifs small{color:var(--texte-2)}
/* « Plus de réglages » : les réglages avancés d'une section, repliés tant qu'on ne les demande pas */
section:not(.rg-tout) .rg-avance{display:none !important}
section:not(.rg-tout) :is(.re-params,.nt-liste,.grille):not(:has(> :not(.rg-avance,.cache))){display:none}
.rg-plus{margin-top:14px}
.rg-plus::after{content:"";width:8px;height:8px;margin:-3px 0 0 4px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg)}
.rg-tout .rg-plus::after{margin-top:3px;transform:rotate(-135deg)}
/* blocs allégés : l'explication d'un réglage derrière un ⓘ, l'introduction d'une section sur deux lignes */
#vue-reglages{--l-aide:26px}
@media (pointer:coarse){#vue-reglages{--l-aide:34px}}
.info-aide{display:inline-grid;place-items:center;flex:none;width:var(--l-aide);height:var(--l-aide);margin:-5px 0 -5px 2px;padding:0;border:0;border-radius:50%;
  background:none;color:var(--texte-2);cursor:pointer;vertical-align:middle;transition:color var(--duree-2),background var(--duree-2)}
.info-aide svg{width:17px;height:17px}
.info-aide:hover,.info-aide[aria-expanded="true"]{color:var(--lien);background:color-mix(in srgb,var(--lien) 13%,transparent)}
.info-aide:focus-visible{outline:2px solid var(--lien);outline-offset:1px}
@media (pointer:coarse){.info-aide{margin:-9px -4px -9px 0}}
/* le ⓘ suit le dernier mot du titre, même sur deux lignes : sa place est gardée au bout du texte (.avant-aide) */
.avant-aide{padding-right:calc(var(--l-aide) + 4px)}
.avant-aide + .info-aide{margin-left:calc(-1 * var(--l-aide))}
.titre-aide{display:block;margin-bottom:6px}
.titre-aide > label{display:inline;margin:0}
.titre-aide:has(> .case){display:flex;align-items:flex-start;gap:2px}
.re-params .titre-aide{margin-bottom:3px}
.grille > :not(.large) > .titre-aide{align-self:end}
/* texte replié (.replie) ; un effet qui demande d'agir (bouton) ou signale un problème en cours (.a-voir) reste affiché */
.replie:not(.aide-ouverte,.a-voir,:has(button)){display:none}
.replie.aide-ouverte:not(.effet){margin-top:6px;padding:8px 12px;border-radius:var(--rayon-m);background:color-mix(in srgb,var(--lien) 7%,var(--carte));
  color:var(--texte);animation:bulle-aide var(--duree-2) var(--courbe) both}
.effet.replie.aide-ouverte{animation:bulle-aide var(--duree-2) var(--courbe) both}
@keyframes bulle-aide{from{opacity:0;transform:translateY(-3px)}}
:is(.nt-item,.regle-maitre).a-aide > span > b{display:inline}
#vue-reglages .chapo.chapo-court:not(.chapo-ouvert){display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}
.chapo-plus{display:block;margin:-14px 0 18px;font-size:var(--txt-s)}
/* historique des réglages */
.hr-liste{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:10px}
.hr-liste > li{display:grid;gap:6px;padding:12px 14px;border:1px solid var(--trait);border-radius:var(--rayon-l);background:var(--fond)}
.hr-tete{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}
.hr-tete time{font-weight:700}
.hr-tete .hr-origine{color:var(--texte-2);font-size:var(--txt-s)}
.hr-tete .badge{margin-left:auto}
.hr-changements{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:var(--txt-s)}
.hr-changements .hr-ou{color:var(--texte-2)}
.hr-liste .btn{justify-self:start}
.hr-liste li.vide{border-style:dashed;color:var(--texte-2)}
/* téléphone : la liste des rubriques, ou la rubrique choisie */
@media (max-width:639px){
  #vue-reglages.rg-ouverte .rg-menu,#vue-reglages:not(.rg-ouverte) .rg-rubriques{display:none}
  .reglages .rg-titre{flex-basis:100%;font-size:var(--txt-2xl)}
}
/* Fold ouvert, tablette, ordinateur : la liste à gauche, la rubrique à droite */
@media (min-width:640px){
  .rg-corps{display:grid;grid-template-columns:minmax(215px,265px) minmax(0,1fr);gap:var(--esp-5);align-items:start}
  .rg-menu{position:sticky;top:var(--haut-onglets,76px);gap:3px;max-height:calc(100vh - var(--haut-onglets,76px) - 16px);overflow:auto}
  .rg-lien{min-height:50px;padding:7px 10px;border-color:transparent;background:none;box-shadow:none}
  .rg-lien::after{content:none}
  .rg-lien:hover{background:color-mix(in srgb,var(--carte) 70%,transparent);border-color:transparent}
  .rg-lien[aria-current="true"]{background:var(--carte);border-color:var(--trait);box-shadow:var(--ombre-s)}
  .rg-lien[aria-current="true"] .rg-ico{background:var(--marine-plein);color:var(--creme)}
  .rg-lien small{display:none}
  .rg-ico{width:34px;height:34px}
  .rg-retour{display:none}
}
.grille{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}
.grille .large{grid-column:1/-1}
.grille > * > .aide{margin-top:6px}
/* Champs d'une même rangée alignés : intitulé, champ, aide sur trois lignes communes à la rangée,
   même quand un intitulé passe sur deux lignes ou qu'une seule case a une aide. */
@supports (grid-template-rows:subgrid){
  .grille{row-gap:0;margin-bottom:-18px}
  .grille > *{padding-bottom:18px}
  .grille > :not(.large){display:grid;grid-row:span 3;grid-template-rows:subgrid;align-content:start}
  .grille > :not(.large) > label{align-self:end}
  .grille > :not(.large) > :nth-child(n+2){align-self:start}
}
.regles{display:grid;gap:8px;margin:4px 0 8px}
.regle{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px}
.rad-cfg{border-top:1px solid var(--trait);padding:14px 0}
.rad-cfg .tete{display:flex;gap:12px;align-items:flex-start}
.rad-cfg .tete input{width:22px;height:22px;margin-top:3px;accent-color:var(--marine)}
.rad-cfg .nom{font-weight:700;font-size:var(--txt-l);margin:0}
.rad-cfg .infos{color:var(--texte-2);font-size:var(--txt-m)}
.rad-cfg .perso{margin:12px 0 0 34px}
.puissance-rad{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin:0 0 10px}
.puissance-rad label{font-weight:700;margin:0}
.puissance-rad .aide{flex-basis:100%;margin-top:0}
.barre-save{position:fixed;left:0;right:0;bottom:0;background:var(--marine);color:var(--creme);transform:translateY(110%);visibility:hidden;
  transition:transform var(--duree-2) var(--courbe-sortie),visibility var(--duree-2);z-index:var(--plan-barre)}
.barre-save.visible{transform:none;visibility:visible;transition:transform var(--duree-3) var(--courbe),visibility 0s}
.barre-save .page{display:flex;align-items:center;gap:14px;padding:12px 20px}
.save-point{flex:none;width:10px;height:10px;border-radius:50%;background:var(--soleil);box-shadow:0 0 0 4px color-mix(in srgb,var(--soleil) 28%,transparent)}
.save-point{position:relative}
.barre-save.visible .save-point::after{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:0 0 0 7px color-mix(in srgb,var(--soleil) 14%,transparent);
  animation:anneau 2.4s ease-in-out infinite}
.save-txt{display:flex;flex-direction:column;min-width:0;line-height:1.3}
.save-txt small{color:var(--creme-doux);font-size:var(--txt-s)}
.save-txt small:empty,.save-court{display:none}
.save-actions{margin-left:auto;display:flex;gap:10px;flex:none}
.barre-save .btn{background:transparent;color:var(--creme);border-color:var(--voile-trait)}
.barre-save .btn:hover{background:var(--voile-1)}
.barre-save .btn.plein{background:var(--creme);color:var(--marine);border-color:var(--creme)}
/* un message en bas ne cache jamais la barre d'enregistrement : il passe au-dessus */
body:has(.barre-save.visible) .toast{bottom:84px}
/* notifications (Réglages > Surveillance et notifications) : une carte par catégorie (pastille, compte, interrupteur de toute la catégorie, à mi-course
   quand une partie seulement est allumée), puis un interrupteur par notification ; la ligne entière se touche */
.nt-barre{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;margin:2px 0 14px}
.periode.nt-presets{grid-template-columns:repeat(3,auto)}
.nt-compte{font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.nt-cats{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,340px),1fr));gap:12px}
.nt-cat{background:var(--fond);border:1px solid var(--trait);border-radius:var(--rayon-l);padding:14px var(--esp-4) 4px;
  transition:border-color var(--duree-2)}
.nt-cat .re-tete{align-items:center}
.nt-cat .re-ico{transition:filter var(--duree-2),opacity var(--duree-2)}
.nt-cat.off .re-ico{filter:grayscale(1);opacity:.55}
.nt-cat .re-tete p{font-variant-numeric:tabular-nums}
.nt-cat[data-cat="alertes"] .re-ico{color:var(--sur-soleil)}
.nt-liste{list-style:none;margin:8px 0 0;padding:0 0 0 48px}
.nt-liste li + li{border-top:1px solid var(--trait)}
.nt-item{display:flex;align-items:center;gap:12px;margin:0;padding:10px 0;cursor:pointer;font-weight:400}
.nt-txt{flex:1;min-width:0}
.nt-txt b{display:block;font-size:var(--txt-m);font-weight:600;transition:color var(--duree-2)}
.nt-txt small{display:block;margin-top:1px;font-size:var(--txt-s);color:var(--texte-2)}
.nt-item:has(input:not(:checked)) b{color:var(--texte-2)}
input.inter.petit{--l:38px;--h:22px}
input.inter:indeterminate{background:color-mix(in srgb,var(--allume,var(--vert)) 45%,var(--trait))}
input.inter:indeterminate::after{transform:translateX(calc((var(--l) - var(--h)) / 2))}
/* fréquences (Réglages > Système) : mêmes cartes que les notifications, une ligne par appel régulier avec son rythme et son
   interrupteur ; ligne coupée grisée, rythme plus rapide que celui d'origine signalé en orange */
.fq-cats{grid-template-columns:repeat(auto-fill,minmax(min(100%,460px),1fr))}
.fq-ligne{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:12px 0}
.fq-txt{flex:1 1 240px;min-width:0}
.fq-txt b{display:block;font-size:var(--txt-m);font-weight:600;transition:color var(--duree-2)}
.fq-txt small{display:block;margin-top:2px;font-size:var(--txt-s);color:var(--texte-2)}
.fq-txt .fq-etat{font-variant-numeric:tabular-nums;color:var(--texte)}
.fq-txt .fq-etat:empty,.fq-txt .fq-avert:empty{display:none}
.fq-txt .fq-avert{color:var(--texte);background:color-mix(in srgb,var(--soleil) 16%,transparent);border-left:3px solid var(--soleil);
  border-radius:var(--rayon-xs);padding:4px 9px;margin-top:6px;width:fit-content;max-width:100%}
.fq-reglage{display:flex;align-items:center;gap:10px;margin-left:auto}
.fq-rythme{margin:0;font-size:var(--txt-s);color:var(--texte-2);font-weight:400;white-space:nowrap}
.fq-reglage .avec-unite{flex-wrap:nowrap;gap:6px}
.fq-reglage input.court{width:4.6em}
.fq-unite{font-size:var(--txt-s);color:var(--texte-2);min-width:2.2em}
.fq-sans-inter{width:38px;flex:none}
.fq-ligne.off .fq-txt b,.fq-ligne.off .fq-rythme,.fq-ligne.off .fq-unite{color:var(--texte-2)}
.fq-ligne.off .fq-txt .fq-etat{color:var(--texte-2);font-style:italic}
.fq-ligne.off input.court{opacity:.5}
.fq-note{margin-top:14px}
button.lien{border:0;background:none;padding:0;font:inherit;font-weight:700;color:var(--lien);cursor:pointer;text-decoration:underline;
  text-underline-offset:2px}
button.lien:hover{text-decoration-thickness:2px}

/* ===== Journal ===== */
/* Journal : recherche, puces de filtre (pièce, niveau, catégorie) et « Jours précédents » (A42) */
.journal-outils{display:grid;gap:8px;margin-bottom:12px}
.jr-puces{display:flex;flex-wrap:wrap;gap:6px}
.jr-puce{padding:4px 12px;min-height:30px;border:1px solid var(--trait);border-radius:999px;background:var(--carte);color:var(--texte);font-size:var(--txt-s);cursor:pointer}
.jr-puce[aria-pressed="true"]{background:var(--marine);color:var(--creme);border-color:var(--marine)}
.jr-pied{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.journal{list-style:none;padding:0;margin:0;display:grid;gap:10px}
.journal li.ok{--k:var(--ok)} .journal li.warn{--k:var(--soleil)}
.journal li.error{--k:var(--alerte)} .journal li.manual{--k:var(--lilas)}
/* ligne arrivée pendant que la page est ouverte : elle se glisse en tête et s'éclaire un instant */
.journal li.nouvelle{animation:carte-entree var(--duree-4) var(--courbe) both}
.journal time{display:block;font-size:var(--txt-s);color:var(--texte-2)}

/* message en bas : arrive avec un léger rebond, repart plus sobrement */
.toast{position:fixed;left:50%;bottom:24px;width:max-content;transform:translate(-50%,20px) scale(.96);opacity:0;background:var(--marine);color:var(--creme);padding:12px 18px;border-radius:var(--rayon-m);max-width:min(92vw,560px);
  transition:opacity var(--duree-2) var(--courbe),transform var(--duree-2) var(--courbe-sortie);z-index:var(--plan-toast);pointer-events:none;box-shadow:var(--ombre)}
.toast[data-genre="ok"],.toast[data-genre="erreur"]{padding-left:44px}
.toast[data-genre]::before{position:absolute;left:14px;top:50%;width:20px;height:20px;margin-top:-10px;border-radius:50%;
  display:grid;place-items:center;font-size:13px;font-weight:800;line-height:1;color:var(--marine)}
.toast[data-genre="ok"]::before{content:"✓";background:var(--vert)}
.toast[data-genre="erreur"]::before{content:"!";background:var(--erreur-sur-marine)}
.toast.visible{opacity:1;transform:translate(-50%,0);transition:opacity var(--duree-2) var(--courbe),transform var(--duree-3) var(--ressort)}
/* erreur : bouton « Fermer » (44 px) et message qui attend sous le pointeur ou le focus */
.toast[data-genre="erreur"]{pointer-events:auto;display:flex;align-items:center;gap:8px;padding-right:6px}
.toast-fermer{flex:none;min-width:44px;min-height:44px;margin:-8px 0;border:0;background:transparent;color:inherit;font-size:22px;line-height:1;border-radius:var(--rayon-m);cursor:pointer}
.toast-fermer:hover,.toast-fermer:focus-visible{background:color-mix(in srgb,var(--creme) 16%,transparent)}

@media (max-width:720px){
  .grille{grid-template-columns:1fr}
  .sejours li{grid-template-columns:1fr auto auto}
  .sejours .titre{grid-column:1/-1;grid-row:2}
  .reglages section{padding:var(--esp-5) var(--esp-4)}
}
/* ===== Eau chaude ===== */
.eau-carte{--accent:var(--eau);display:grid;grid-template-columns:150px minmax(0,1fr);gap:6px 22px;padding-bottom:18px}
.eau-carte.m-off{--accent:var(--galet)} .eau-carte.m-absence{--accent:var(--e-absence)} .eau-carte.m-boost{--accent:var(--corail)}
/* absence du ballon : bandeau en tête de fiche (dates, origine, remise en chauffe, boutons) */
.eau-absence{grid-column:1/-1;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:10px 14px;
  margin:0 0 6px;padding:14px 16px;border-radius:var(--rayon-m);color:var(--texte);
  background:color-mix(in srgb,var(--e-absence) 11%,var(--carte));border:1.5px solid color-mix(in srgb,var(--e-absence) 45%,transparent)}
.eau-absence.prevue{background:var(--carte);border-style:dashed}
.eau-abs-ico{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:var(--e-absence);color:var(--sur-couleur)}
.eau-abs-ico svg{width:21px;height:21px}
.eau-absence.prevue .eau-abs-ico{background:none;color:var(--e-absence);box-shadow:inset 0 0 0 2px var(--e-absence)}
.eau-abs-corps{min-width:0;display:flex;flex-direction:column;gap:6px}
.eau-abs-titre{font-size:var(--txt-l);line-height:1.3;color:color-mix(in srgb,var(--e-absence) 70%,var(--texte))}
.eau-abs-texte,.eau-abs-notes{margin:0;font-size:var(--txt-m);color:var(--texte-2)}
.eau-abs-notes{font-size:var(--txt-s)}
.eau-abs-duree{display:flex;flex-direction:column;gap:4px;font-size:var(--txt-s);color:var(--texte-2)}
.eau-abs-duree b{color:var(--texte)}
.eau-abs-barre{display:block;height:6px;border-radius:var(--rayon-rond);background:color-mix(in srgb,var(--e-absence) 18%,transparent);overflow:hidden}
.eau-abs-barre i{display:block;height:100%;border-radius:inherit;background:var(--e-absence)}
.eau-abs-actions{display:flex;flex-direction:column;gap:8px}
.eau-abs-alertes{grid-column:1/-1;display:flex;flex-direction:column;gap:6px}
.eau-abs-actions .btn{white-space:nowrap}
.eau-abs-actions .btn.plein{background:var(--e-absence);border-color:var(--e-absence);color:var(--sur-couleur)}
.ballon-svg.repos .eau-int{filter:saturate(.3);opacity:.7}
.ballon-svg .badge-repos circle{fill:var(--e-absence);stroke:var(--carte);stroke-width:3}
.ballon-svg .badge-repos :is(rect,path){fill:none;stroke:var(--sur-couleur);stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.douches.en-attente .gouttes{opacity:.55}
.douches .attente{font-weight:400;color:var(--texte-2)}
.eau-actions.sans-absence{grid-template-columns:1fr auto}
.eau-tete{grid-column:1/-1;display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:4px}
.eau-tete h3{flex:1;min-width:0}
.ballon-svg{display:block;width:150px;height:200px;margin:0 auto;overflow:visible}
.ballon-svg .corps{fill:var(--fond);stroke:var(--trait);stroke-width:2}
.ballon-svg .reflet{fill:#fff;opacity:.18}
.ballon-svg .grad{stroke:var(--texte-2);stroke-width:1;opacity:.35}
.ballon-svg text{font-family:var(--serif);font-weight:700;fill:#fff;paint-order:stroke;stroke:rgba(10,22,40,.35);stroke-width:3px}
.ballon-svg text.vide{fill:var(--texte-2);stroke:none}
.ballon-svg .vague{animation:vague 2.6s linear infinite;animation-delay:var(--phase,0s)}
.ballon-svg .vague.v2{animation-duration:3.8s;opacity:.55}
.ballon-svg .bulle{fill:#fff;opacity:0;animation:bulle 2.8s ease-in infinite}
.ballon-svg .resistance{stroke:var(--galet);stroke-width:3;fill:none;stroke-linecap:round}
.ballon-svg.chauffe .resistance{stroke:var(--corail);filter:drop-shadow(0 0 4px var(--corail))}
@keyframes vague{from{transform:translateX(0)}to{transform:translateX(-60px)}}
@keyframes bulle{0%{opacity:0;transform:translateY(0)}15%{opacity:.7}100%{opacity:0;transform:translateY(-110px)}}
.eau-infos{min-width:0;display:flex;flex-direction:column;gap:10px}
.eau-chiffres{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 14px}
.eau-chiffres .grand{font-family:var(--serif);font-weight:700;font-size:2.4rem;line-height:1}
.eau-chiffres .grand small{font-size:var(--txt-l);margin-left:6px;font-family:var(--sans);color:var(--texte-2);font-weight:700}
.eau-chiffres .sous{color:var(--texte-2);font-size:var(--txt-m)}
.eau-chiffres .sous b{color:var(--texte)}
.eau-phase{margin:0;font-size:var(--txt-m);color:var(--texte-2)}
.eau-phase b{color:var(--texte)}
.eau-alerte{margin:0;padding:8px 12px;border-radius:var(--rayon-m);font-size:var(--txt-m);font-weight:700;color:var(--alerte);background:color-mix(in srgb,var(--alerte) 10%,transparent)}
.douches{display:flex;flex-direction:column;gap:6px}
.douches .titre-pilotage{margin:0 0 0 2px}
.eau-actions{display:grid;grid-template-columns:1fr 1fr auto;gap:8px}
.eau-actions .btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:9px 12px;min-width:0}
.eau-actions .btn svg{width:18px;height:18px;flex:none}
.eau-actions .btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.eau-actions .btn.rond{width:42px;padding:0}
.eau-actions .btn.actif{background:color-mix(in srgb,var(--c) 14%,transparent);border-color:var(--c);color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte))}
.eau-conso{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px;margin:8px 0 0;padding-top:12px;border-top:1px dashed var(--trait);font-size:var(--txt-m);color:var(--texte-2)}
.eau-conso b{color:var(--texte);font-variant-numeric:tabular-nums}
.eau-conso .lien{margin-left:auto;border:0;background:none;color:var(--lien);font-weight:700;cursor:pointer;padding:0}
.eau-invite{--accent:var(--eau);display:flex;align-items:center;gap:18px}
.eau-invite svg{width:44px;height:44px;color:var(--eau);flex:none}
.eau-invite p{margin:2px 0 10px;color:var(--texte-2);font-size:var(--txt-m)}
dl.estimation{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:6px 0 4px;padding:12px 14px;border-radius:var(--rayon-m);background:var(--fond)}
dl.estimation dt{color:var(--texte-2)} dl.estimation dd{margin:0;font-weight:700;text-align:right}
.estimation-ligne{margin:12px 0 0;font-size:var(--txt-m);color:var(--texte-2)}
.estimation-ligne b{color:var(--texte)}
/* réglages du ballon */
.avec-unite{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
.regle-maitre{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:var(--rayon-l);border:1.5px solid var(--trait);background:var(--fond);cursor:pointer;font-weight:400;margin:0}
.regle-maitre b{display:block;font-size:var(--txt-l)}
.regle-maitre small{display:block;color:var(--texte-2);font-size:var(--txt-s)}
.regle-maitre:has(input:checked){border-color:var(--vert);background:color-mix(in srgb,var(--vert) 8%,var(--fond))}
.regles-eau{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:20px}
.regle-eau{display:flex;flex-direction:column;gap:10px;transition:opacity var(--duree-2)}
.re-tete{display:flex;align-items:flex-start;gap:12px}
.re-tete > div{flex:1;min-width:0}
.re-tete h3{font-size:var(--txt-l)}
.re-tete p{margin:2px 0 0;font-size:var(--txt-s);color:var(--texte-2)}
.re-ico{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;flex:none;color:var(--sur-couleur);background:var(--c,var(--eau))}
.re-ico svg{width:19px;height:19px}
.re-params{display:flex;flex-wrap:wrap;gap:10px 20px;padding-left:48px}
.re-params label{font-size:var(--txt-s);color:var(--texte-2);margin-bottom:3px}
.re-params > *{min-width:0;max-width:100%}
.re-params select{width:auto;max-width:100%}
.re-cases{padding-left:48px;display:grid;gap:6px}
.re-cases .case{font-size:var(--txt-m)}
.effet{margin:0 0 0 48px;padding:8px 12px;border-radius:var(--rayon-m);font-size:var(--txt-s);background:color-mix(in srgb,var(--c,var(--eau)) 9%,var(--carte));border-left:3px solid var(--c,var(--eau))}
.effet:empty{display:none}
.regle-eau.off .re-params,.regle-eau.off .effet{opacity:.45;pointer-events:none}
.regles-eau.off .regle-eau:not(.toujours){opacity:.55}
.eau-a-faire{margin:0 0 14px;padding:12px 14px;border-radius:var(--rayon-m);border:1.5px dashed var(--eau);font-size:var(--txt-m)}
.eau-a-faire button{margin-left:8px}
.ballons{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:10px;margin-top:14px}
.ballons:empty{display:none}
.ballon-choix{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--rayon-l);border:1.5px solid var(--trait);background:var(--fond);cursor:pointer;text-align:left;color:var(--texte);font:inherit}
.ballon-choix svg{width:34px;height:34px;color:var(--eau);flex:none}
.ballon-choix b{display:block}
.ballon-choix small{display:block;color:var(--texte-2);font-size:var(--txt-s)}
.ballon-choix[aria-checked="true"]{border-color:var(--eau);background:color-mix(in srgb,var(--eau) 9%,var(--fond));box-shadow:0 0 0 3px color-mix(in srgb,var(--eau) 20%,transparent)}
/* ===== Chauffage prédictif (Logement) =====
   Trois cartes de mode comme le choix du ballon, chacune de sa couleur ; réglages et pièces atténués s'il est désactivé. */
.pred-modes{grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));margin:4px 0 14px}
.pred-modes [data-mode="desactive"]{--c:var(--galet)}
.pred-modes [data-mode="observation"]{--c:var(--mer)}
.pred-modes [data-mode="actif"]{--c:var(--vert)}
.pred-modes .ballon-choix{align-items:flex-start;transition:border-color var(--duree-2),background-color var(--duree-2),box-shadow var(--duree-2)}
.pred-modes .ballon-choix:hover{border-color:var(--c)}
.pred-ico{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;flex:none;color:var(--c);
  background:color-mix(in srgb,var(--c) 14%,var(--carte));transition:background-color var(--duree-2),color var(--duree-2)}
.pred-modes .pred-ico svg{width:20px;height:20px;color:inherit}
.pred-modes .ballon-choix[aria-checked="true"]{border-color:var(--c);background:color-mix(in srgb,var(--c) 9%,var(--fond));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 20%,transparent)}
.pred-modes .ballon-choix[aria-checked="true"] .pred-ico{color:var(--sur-couleur);background:var(--c)}
.pred-avert{margin:0 0 14px;padding:10px 12px;border-radius:var(--rayon-m);font-size:var(--txt-s);
  background:color-mix(in srgb,var(--soleil) 16%,transparent);border-left:3px solid var(--soleil)}
.pred-avert button{margin-left:8px}
.pred-params,.pred-rads{transition:opacity var(--duree-2)}
.pred-params.off,.pred-rads.off{opacity:.45;pointer-events:none}
.pred-titre{margin:18px 0 2px}
.pred-aide{margin:0 0 2px}
.nt-liste.pred-rads{padding:0;margin:0 0 12px}
#rub-predictif .effet,#rub-puissance .effet{margin-left:0;font-variant-numeric:tabular-nums}
#rub-diagnostic .grille .effet{margin:8px 0 0}
#pred-etat.ko{--c:var(--alerte)}
/* Une relance vue par le prédictif (fiche du radiateur, Prévisualiser) : une ligne qui se déplie */
.pred-bloc{margin-top:10px;border-radius:var(--rayon-m);background:color-mix(in srgb,var(--c) 7%,transparent);
  border:1px solid color-mix(in srgb,var(--c) 22%,transparent);font-size:var(--txt-s)}
.pred-bloc>summary{display:flex;align-items:center;gap:10px;padding:7px 10px;cursor:pointer;list-style:none;border-radius:inherit}
.pred-bloc>summary::-webkit-details-marker{display:none}
.pred-bloc>summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.pred-bloc .pred-ico{width:28px;height:28px}
.pred-bloc .pred-ico svg{width:16px;height:16px}
.pred-bloc.pilote .pred-ico{color:var(--sur-couleur);background:var(--c)}
.pred-resume{flex:1;min-width:0;line-height:1.3}
.pred-resume small{display:block;font-size:var(--txt-xs);color:var(--texte-2)}
.pred-resume b{font-weight:700;font-variant-numeric:tabular-nums}
.pred-conf{flex:none;font:800 var(--txt-xs)/1.6 var(--sans);font-variant-numeric:tabular-nums;padding:0 8px;border-radius:var(--rayon-rond);
  color:var(--b);background:color-mix(in srgb,var(--b) 14%,transparent)}
.pred-bloc>summary::after{content:"";flex:none;width:7px;height:7px;margin:0 2px 3px 0;border:solid var(--texte-2);border-width:0 2px 2px 0;
  transform:rotate(45deg);transition:transform var(--duree-2) var(--courbe)}
.pred-bloc[open]>summary::after{transform:rotate(225deg);margin-bottom:-3px}
.pred-bloc ul{margin:0;padding:0 12px 10px 48px;list-style:none;color:var(--texte-2);display:grid;gap:3px}
.pa-ligne .pred-bloc{margin:6px 0 4px}
@media (max-width:480px){.pred-bloc .pred-ico{display:none}.pred-bloc ul{padding-left:12px}}
/* ===== Stats ===== */
.stats-tete{display:flex;align-items:flex-end;justify-content:space-between;gap:12px 20px;flex-wrap:wrap;margin-bottom:16px}
.kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.kpi{--accent:var(--c);padding:14px var(--esp-4);min-width:0}
.kpi small{display:block}
.kpi b{display:block;font-family:var(--serif);font-size:1.7rem;line-height:1.15;margin:4px 0 2px;font-variant-numeric:tabular-nums;white-space:nowrap}
.kpi b:has(> span){display:flex;flex-wrap:wrap;align-items:baseline;column-gap:4px;white-space:normal}
.kpi b:has(> span) span{margin-left:0}
.kpi b span{display:inline-block;font-family:var(--sans);font-size:var(--txt-m);color:var(--texte-2);margin-left:4px}   /* l’unité longue (« / voyageur / jour ») passe entière à la ligne au lieu de sortir de la carte */
.kpi p{margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.graph{margin-bottom:var(--esp-4)}
.graph .sous-graph{margin:2px 0 10px;font-size:var(--txt-s);color:var(--texte-2)}
.graph svg{display:block;width:100%;height:auto;overflow:visible;touch-action:pan-y}
.graph .axe{font:11px var(--sans);fill:var(--texte-2)}
.graph .grille-l{stroke:var(--trait);stroke-width:1}
/* électricité : puissance souscrite (pointillés) sur la bande des pics du compteur, valeur du plus fort */
.graph .souscrite{stroke:var(--texte-2);stroke-width:1.2;stroke-dasharray:4 4;opacity:.8}
.graph .pic-max{font-weight:800}
.graph .curseur{stroke:var(--texte);stroke-width:1;stroke-dasharray:3 3;stroke-opacity:.5}
.stats-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.prix-kwh{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--trait);background:var(--carte);color:var(--texte);border-radius:var(--rayon-rond);padding:8px 14px;font-weight:700;font-size:var(--txt-m);cursor:pointer;font-variant-numeric:tabular-nums}
.prix-kwh svg{width:15px;height:15px;margin-left:6px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:.7}
.prix-kwh:hover,.prix-kwh[aria-expanded="true"]{border-color:var(--mer)}
.prix-form{padding:14px var(--esp-4);margin:-4px 0 var(--esp-4);display:grid;gap:6px;max-width:560px}
.prix-form label{font-weight:700}
.prix-form .boutons{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.graph-tete{display:flex;justify-content:space-between;align-items:flex-start;gap:8px 16px;flex-wrap:wrap}
.graph-tete > .periode{margin-bottom:12px}   /* au téléphone, le choix passe sous le titre : il ne colle pas aux chiffres */
/* Chiffres en tuiles : ballon et compteur d'eau (Stats), base de données (Réglages > Système) */
.mini-kpis,.base-chiffres{display:grid;grid-template-columns:repeat(var(--n,4),minmax(0,1fr));gap:8px;margin:12px 0 10px}
.mini-kpis.trois,.base-chiffres{--n:3}
.mini-kpis > div,.base-chiffres > div{background:var(--fond);border-radius:var(--rayon-m);padding:10px 12px;min-width:0}
.mini-kpis b,.base-chiffres b{display:block;font-family:var(--serif);font-size:var(--txt-2xl);line-height:1.2;margin:2px 0;font-variant-numeric:tabular-nums;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini-kpis b span{font-family:var(--sans);font-size:var(--txt-s);color:var(--texte-2);margin-left:3px}
.mini-kpis p,.base-chiffres small{display:block;margin:0;font-size:var(--txt-xs);color:var(--texte-2)}
.mini-kpis .alerte b{color:var(--alerte)}
.mini-kpis small{display:block}
.graph .note-graph{margin:6px 0 0;font-size:var(--txt-s);color:var(--texte-2)}
.note-stats,.graph .note-stats{margin:-6px 0 16px}
.graph-vide{display:grid;place-items:center;text-align:center;gap:6px;padding:28px 12px;color:var(--texte-2)}
.graph-vide svg{width:40px;height:40px;color:var(--eau);opacity:.75}
.graph-vide b{color:var(--texte)}
.graph .legende{color:var(--texte-2);margin:10px 0 0}
.infobulle{position:absolute;z-index:var(--plan-graph);min-width:150px;max-width:240px;padding:7px 10px;transform:translate(-50%,-100%);opacity:0;
  transition:opacity var(--duree-1)}
.infobulle.visible{opacity:1}
.infobulle b{display:block;font-size:var(--txt-s);margin-bottom:2px}
.infobulle span b{display:inline;margin:0}   /* gras dans une ligne à pastille : sur la même ligne */
/* écart avec l'an dernier ou avec la période d'avant : ▲ en corail (plus), ▼ en vert (moins), = en gris */
.puce-ecart{--c:var(--galet);display:inline-flex;align-items:center;gap:3px;padding:0 7px;border-radius:var(--rayon-rond);white-space:nowrap;
  font-size:var(--txt-xs);font-weight:800;line-height:1.6;font-variant-numeric:tabular-nums;vertical-align:1px;
  color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte));background:color-mix(in srgb,var(--c) 15%,transparent)}
.puce-ecart.haut{--c:var(--corail)}
.puce-ecart.bas{--c:var(--vert)}
/* plusieurs choix en pastilles côte à côte (pas et période de l'électricité, filtres des actions) */
.filtres-graph{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}
#graph-elec{transition:opacity var(--duree-2)}
#graph-elec.en-charge{opacity:.45}
.graph .titre-mini{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:18px 0 6px;font-size:var(--txt-m)}
.graph .titre-mini small{font-weight:600;color:var(--texte-2);font-size:var(--txt-s)}
.graph .axe.axe-fort{font-weight:800;fill:var(--texte)}
.graph .axe.axe-petit{font-size:10px}
/* méthode, détail ou liste en texte : replié sous le graphique */
.stats-details{margin-top:14px;border-top:1px solid var(--trait);padding-top:4px}
.stats-details > summary{cursor:pointer;font-weight:700;font-size:var(--txt-s);padding:8px 0;color:var(--texte-2);width:fit-content}
.stats-details > summary:hover,.stats-details[open] > summary{color:var(--texte)}
.stats-details > :not(summary){margin-top:6px}
.stats-details > p{font-size:var(--txt-s)}
/* Stats en panneaux repliables (3.6.1) : un par bloc, son titre est un bouton (chevron, résumé quand il est replié) ;
   replié, tout le panneau se touche. La carte rangée dedans perd sa surface ; son titre est celui du panneau. */
.stats-pan{padding:0;margin-bottom:var(--esp-3)}
.stats-pan > h3{margin:0}
.stats-pan .rubrique-tete{position:relative;padding:16px calc(var(--esp-5) + 24px) 16px var(--esp-5);border-radius:var(--rayon-xl);
  transition:background-color var(--duree-1)}
.stats-pan .rubrique-tete:focus-visible{outline-offset:-3px}
.stats-pan.repliee .rubrique-tete:hover{background:color-mix(in srgb,var(--texte) 3%,transparent)}
.stats-pan .rubrique-tete .chevron{position:absolute;right:var(--esp-5);top:23px;margin:0}
.stats-pan:not(.repliee) .rubrique-resume{display:none}
.stats-pan .rubrique-titre .badge{margin-left:10px}
.stats-pan .rubrique-resume :is(.puce-ecart,b){font-weight:800}
.stats-pan-interieur{display:flow-root;padding:0 var(--esp-5) 18px}
.stats-pan .graph{background:none;box-shadow:none;border-radius:0;padding:0;margin:0}
.stats-pan-interieur > .graph:first-child > h3:first-child,
.stats-pan-interieur > .graph:first-child > .graph-tete > div:first-child > h3:first-child{display:none}
.stats-pan-interieur > .graph + .graph{margin-top:var(--esp-5);padding-top:var(--esp-5);border-top:1px solid var(--trait)}
.pan-alerte{color:var(--alerte);font-weight:700}
.pan-verdict{color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte))}
.anime .stats-pan{animation:carte-entree var(--duree-3) var(--courbe) both;animation-delay:calc(var(--i,0) * 35ms)}
@media (max-width:720px){
  .stats-pan .rubrique-tete{padding:14px 38px 14px 12px}
  .stats-pan .rubrique-tete .chevron{right:14px;top:21px}
  .stats-pan-interieur{padding:0 12px 12px}
}
.legende i.clair{background:color-mix(in srgb,var(--c) 45%,transparent)}
.legende i.rond{border-radius:50%}
.legende i.tirets{background:none;border-top:2px dashed var(--c,var(--texte-2));height:0;border-radius:0;vertical-align:3px}
.deux-graph{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.deux-graph .graph{margin-bottom:16px}
.barres-pieces{display:grid;gap:10px;margin-top:6px}
.piece{display:grid;grid-template-columns:minmax(0,9em) 1fr;gap:4px 12px;align-items:center}
.piece b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--txt-m)}
.piece .barre{height:14px;border-radius:var(--rayon-s);background:var(--fond);overflow:hidden}
.piece .barre i{display:block;height:100%;border-radius:var(--rayon-s);background:linear-gradient(90deg,var(--soleil),var(--corail))}
.piece small{grid-column:2;color:var(--texte-2);font-size:var(--txt-s);margin-top:-2px}
/* Stats > Radiateurs : un bouton par radiateur (liseré à la couleur de son mode), puis la courbe du radiateur choisi */
/* les 8 radiateurs en rangées égales (4 + 4 sur grand écran, 2 par rangée sur téléphone), même grille dans chaque onglet */
.choix-radiateurs{display:grid;grid-template-columns:repeat(auto-fill,minmax(max(140px,calc(25% - 8px)),1fr));gap:8px;margin:12px 0 4px}
.choix-rad{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:4px;text-align:left;border:1px solid var(--trait);border-left:4px solid var(--c,var(--trait));background:var(--carte);
  color:var(--texte);border-radius:var(--rayon-m);padding:8px 30px 8px 11px;cursor:pointer;min-height:44px;font:inherit}
.choix-rad:hover{background:var(--fond)}
.choix-rad[aria-pressed="true"]{background:color-mix(in srgb,var(--mer) 12%,var(--carte));border-color:var(--mer);border-left-color:var(--c,var(--mer));box-shadow:inset 0 0 0 1px var(--mer)}
.choix-rad b{font-size:var(--txt-m);line-height:1.25;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow-wrap:anywhere}
.choix-rad .etat-rad{display:flex;flex-wrap:wrap;gap:0 10px;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.choix-rad .temp-rad{font-weight:700;color:var(--texte)}
.choix-rad .etat-rad > span:last-child{display:flex;align-items:baseline;min-width:0}
.choix-rad .etat-rad i{flex:none;display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;background:var(--c,var(--galet))}
.choix-rad .chauffe{position:absolute;top:8px;right:9px;width:16px;height:16px;color:var(--corail)}
.choix-rad .chauffe svg{width:100%;height:100%}
.choix-rad .pastille-alerte{position:absolute;bottom:10px;right:11px;width:9px;height:9px;border-radius:50%;background:var(--alerte);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--alerte) 25%,transparent)}
/* fenêtre ouverte probable : son picto (le point rouge est pour les autres problèmes, à côté s'il y en a un) */
.choix-rad .fenetre-rad{position:absolute;bottom:7px;right:7px;width:17px;height:17px;color:var(--mer)}
.choix-rad .fenetre-rad svg{width:100%;height:100%}
.choix-rad .fenetre-rad + .pastille-alerte{right:30px}
/* Stats > Actions par réservation */
.choix-resa{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.resa-info{margin-top:10px}
/* qui a agi (Fanal, détection de présence, vous, voyageurs) : une pastille par auteur, puis les alertes */
.compteurs-actions{list-style:none;margin:8px 0 6px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.compteurs-actions li{display:inline-flex;align-items:center;gap:7px;padding:4px 12px 4px 10px;border-radius:var(--rayon-rond);
  background:color-mix(in srgb,var(--c) 12%,transparent);font-size:var(--txt-s);color:var(--texte-2)}
.compteurs-actions i{flex:none;width:9px;height:9px;border-radius:50%;background:var(--c)}
.compteurs-actions li.auto i{background:var(--carte);box-shadow:inset 0 0 0 2px var(--c)}
.compteurs-actions b{font-family:var(--serif);font-size:var(--txt-l);line-height:1.2;color:var(--texte);font-variant-numeric:tabular-nums}
.compteurs-actions li.alerte b{color:var(--alerte)}
.actions-resas{margin-top:4px}
/* colonnes à choisir (réservation, période des incidents) : au clavier, un cadre bleu */
:is(.actions-resas,.stats-incidents) svg rect[tabindex]{outline:none}
:is(.actions-resas,.stats-incidents) svg rect[tabindex]:focus-visible{stroke:var(--focus);stroke-width:2}
.graph svg.frise-svg{margin-top:4px}
.frise-vide svg{opacity:.55}
.frise-vide .vide{margin:2px 0 0;text-align:center;font-size:var(--txt-s)}
.frise-actions{display:grid;gap:12px}
.phase-actions{border-left:4px solid var(--c);padding:2px 0 2px 14px}
.phase-actions h4{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:0 0 6px;font-size:var(--txt-m)}
.phase-actions h4 small{font-weight:400;color:var(--texte-2);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.phase-actions .vide{margin:0;font-size:var(--txt-s)}
.liste-actions{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.liste-actions li{display:grid;grid-template-columns:auto auto 1fr;align-items:baseline;gap:4px 10px;font-size:var(--txt-s);line-height:1.4}
.liste-actions time{color:var(--texte-2);font-variant-numeric:tabular-nums;white-space:nowrap}
.src-action{display:inline-block;padding:1px 8px;border-radius:var(--rayon-rond);font-weight:700;font-size:var(--txt-xs);
  color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte));background:color-mix(in srgb,var(--c) 14%,transparent);white-space:nowrap}
.src-action{justify-self:start}
.txt-action{min-width:0;overflow-wrap:anywhere}
.liste-actions li:is(.niv-warn,.niv-error) .txt-action{color:var(--alerte)}
.liste-actions li.niv-guest .txt-action{font-weight:600}
@media (max-width:560px){.liste-actions li{gap:2px 8px}.liste-actions .txt-action{grid-column:1/-1}}
.courbe-radiateur{position:relative;transition:opacity var(--duree-2)}
.courbe-radiateur.en-charge{opacity:.45}
.graph .axe.ruban-lib{font-size:10px;font-weight:700;letter-spacing:.02em}
.infobulle .ecart{color:var(--alerte)}
.table-sejours{width:100%;border-collapse:collapse;font-size:var(--txt-m)}
.table-sejours th{text-align:left;padding:6px 8px;border-bottom:1px solid var(--trait)}
.table-sejours td{padding:8px;border-bottom:1px solid var(--trait);font-variant-numeric:tabular-nums}
.table-sejours td.n,.table-sejours th.n{text-align:right}
.table-energie td.incomplet{color:var(--alerte)}
.table-energie td .couv{font-size:var(--txt-xs);color:var(--texte-2)}
.table-energie td.vide-cell{color:var(--texte-2)}
.table-energie td,.table-energie th{white-space:nowrap}
.barre-delai{display:flex;align-items:center;gap:8px;min-width:120px}
.table-sejours small.en-cours{color:var(--texte-2);font-weight:600;white-space:nowrap}
.barre-delai i{display:block;height:8px;border-radius:var(--rayon-xs);background:var(--mer);min-width:2px}
.barre-delai span{font-variant-numeric:tabular-nums;white-space:nowrap}
.pied-base{margin:4px 0 16px}
/* Stats > Temps de chauffe appris : vitesse, temps pour chauffer l'eau, puissance utile, puis les dernières chauffes */
.chauffe-vue{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.7fr) minmax(0,1fr);gap:8px;margin:12px 0 4px}
.chauffe-vue > div{background:var(--fond);border-radius:var(--rayon-m);padding:12px 14px;min-width:0}
.chauffe-vue small{display:block;font-size:var(--txt-micro);font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--texte-2)}
.chauffe-vue > div > b{display:block;font-family:var(--serif);font-size:var(--txt-3xl);line-height:1.2;margin:4px 0 2px;font-variant-numeric:tabular-nums;white-space:nowrap}
.chauffe-vue > div > b span{font-family:var(--sans);font-size:var(--txt-s);color:var(--texte-2);margin-left:4px}
.chauffe-vue p{margin:0;font-size:var(--txt-xs);color:var(--texte-2)}
.cv-vitesse > b{color:color-mix(in srgb,var(--corail) var(--mix-texte),var(--texte))}
.cv-temps{display:grid;align-content:start;gap:6px}
.cv-ligne{display:grid;grid-template-columns:minmax(5.5em,auto) minmax(0,1fr) auto;align-items:center;gap:10px;font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.cv-ligne > span:first-child{color:var(--texte-2);white-space:nowrap}
.cv-ligne > b{white-space:nowrap}
.cv-barre{display:block;height:10px;border-radius:var(--rayon-rond);background:color-mix(in srgb,var(--trait) 70%,transparent);overflow:hidden}
.cv-barre i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--eau),var(--corail))}
.cv-barre.cv-jauge{margin:8px 0 6px}
.cv-barre.cv-jauge i{background:var(--eau)}
.chauffe-apprend{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:12px 0 4px;padding:12px 14px;border-radius:var(--rayon-m);background:var(--fond)}
.cv-points{display:inline-flex;gap:6px}
.cv-points i{width:14px;height:14px;border-radius:50%;box-shadow:inset 0 0 0 2px var(--eau)}
.cv-points i.fait{background:var(--eau)}
/* Stats > Incidents : une barre par type, la période d'avant en repère (trait) et l'écart */
.barres-types{display:grid;gap:8px;margin:6px 0 10px}
.bt-ligne{display:grid;grid-template-columns:minmax(0,19em) minmax(0,1fr) 2.2em minmax(3.6em,auto);align-items:center;gap:4px 12px;font-size:var(--txt-s)}
.bt-nom{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bt-barre{position:relative;height:12px;border-radius:var(--rayon-rond);background:var(--fond)}
.bt-barre i{display:block;height:100%;border-radius:inherit;background:var(--alerte);opacity:.85}
.bt-barre u{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;border-radius:1px;background:var(--texte-2)}
.bt-ligne > b{text-align:right;font-variant-numeric:tabular-nums}
.bt-ligne > :last-child{justify-self:start}
.bt-ligne > small{color:var(--texte-2);font-size:var(--txt-xs);white-space:nowrap}
@media (max-width:560px){
  .bt-ligne{grid-template-columns:minmax(0,1fr) 2em auto;gap:2px 10px}
  .bt-nom{grid-column:1/-1}
  .chauffe-vue{grid-template-columns:1fr 1fr}
  .cv-temps{grid-column:1/-1;grid-row:2}
}
/* Stats > Consommation selon le nombre de voyageurs : une colonne par nombre de voyageurs, pour chaque compteur */
.voy-graphes{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin-top:6px}
.voy-graphe{background:var(--fond);border-radius:var(--rayon-m);padding:12px 14px 10px;min-width:0}
.voy-graphe h4{display:flex;align-items:baseline;gap:6px;margin:0 0 8px;font-size:var(--txt-m)}
.voy-graphe h4::before{content:"";flex:none;width:9px;height:9px;border-radius:3px;background:var(--c)}
.voy-graphe h4 small{font-weight:600;color:var(--texte-2);font-size:var(--txt-s)}
.voy-colonnes{display:flex;align-items:stretch;gap:8px;height:170px}
.voy-col{flex:1 1 0;min-width:0;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;justify-items:center;gap:3px}
.voy-col > b{font-size:var(--txt-xs);font-variant-numeric:tabular-nums;white-space:nowrap}
.voy-barre{display:flex;align-items:flex-end;justify-content:center;width:100%;height:100%}
.voy-barre i{display:block;width:100%;max-width:44px;border-radius:6px 6px 2px 2px;background:var(--c)}
.voy-nb{display:inline-flex;align-items:center;gap:2px;font-weight:800;font-size:var(--txt-s);color:var(--texte)}
.voy-nb i{display:inline-flex;width:15px;height:15px;color:var(--texte-2)}
.voy-nb svg{width:100%;height:100%}
.voy-col > small{min-height:2.5em;font-size:var(--txt-micro);line-height:1.25;color:var(--texte-2);text-align:center}
.voy-pente{margin:10px 0 0;padding-top:8px;border-top:1px solid var(--trait);font-size:var(--txt-s);font-weight:700;
  color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte))}
/* Stats > Comparaison avec l'an dernier : de l'an dernier à l'attendu, mois par mois */
.comparaison-etapes{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:6px;max-width:640px}
.comparaison-etapes li{display:flex;justify-content:space-between;gap:12px;font-size:var(--txt-m)}
.comparaison-etapes li b{white-space:nowrap;font-variant-numeric:tabular-nums}
.comparaison-etapes li:nth-last-child(-n+2){border-top:1px solid var(--trait);padding-top:6px}
.comparaison-etapes li:last-child{border-top:0;padding-top:0}
/* verdict en grand (économie, surconsommation ou pas de différence prouvée), puis le passage de l'an dernier à
   l'attendu (réservations, météo) et au mesuré, en pistes horizontales */
.cmp-tete{display:flex;flex-wrap:wrap;gap:10px;margin:10px 0 16px}
.cmp-verdict{flex:2 1 300px;display:flex;gap:14px;align-items:flex-start;min-width:0;padding:14px 16px;border-radius:var(--rayon-m);
  background:color-mix(in srgb,var(--c) 10%,var(--carte));border:1px solid color-mix(in srgb,var(--c) 35%,transparent)}
.cmp-verdict.petit{flex:1 1 220px;padding:12px 14px;gap:12px}
.cmp-verdict > div{min-width:0}
.cmp-ico{flex:none;display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--c);color:var(--carte);
  font-size:var(--txt-3xl);font-weight:800;line-height:1}
.cmp-verdict.petit .cmp-ico{width:34px;height:34px;font-size:var(--txt-l)}
.cmp-verdict small{display:block;font-size:var(--txt-micro);font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--texte-2)}
.cmp-verdict b{display:block;font-family:var(--serif);font-size:var(--txt-2xl);line-height:1.2;margin:2px 0;
  color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte))}
.cmp-verdict.petit b{font-size:var(--txt-l)}
.cmp-chiffres{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;margin:2px 0 0;font-variant-numeric:tabular-nums}
.cmp-chiffres strong{font-family:var(--serif);font-size:var(--txt-3xl);line-height:1.15;white-space:nowrap}
.cmp-verdict.petit .cmp-chiffres strong{font-size:var(--txt-xl)}
.cmp-chiffres span{font-weight:700;color:var(--texte-2);white-space:nowrap}
.cmp-chiffres .cmp-euros{color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte))}
.cmp-quand{margin:6px 0 0;font-size:var(--txt-xs);color:var(--texte-2)}
.pont{display:grid;gap:7px;margin:0 0 6px}
.pont-ligne{display:grid;grid-template-columns:minmax(0,12em) minmax(0,1fr) minmax(5.5em,auto);align-items:center;gap:4px 12px;font-size:var(--txt-s)}
.pont-ligne.delta + .pont-ligne.total{border-top:1px solid var(--trait);padding-top:7px}
.pont-lib{min-width:0;font-weight:700}
.pont-lib small{display:block;font-weight:400;font-size:var(--txt-xs);color:var(--texte-2);overflow-wrap:anywhere}
.pont-piste{position:relative;height:16px;border-radius:var(--rayon-xs);background:var(--fond)}
.pont-piste i{position:absolute;top:0;bottom:0;border-radius:var(--rayon-xs);background:var(--c)}
.pont-ligne.delta .pont-piste i{top:3px;bottom:3px;opacity:.8}
.pont-piste em{position:absolute;top:-2px;bottom:-2px;border-radius:var(--rayon-xs);
  background:repeating-linear-gradient(135deg,var(--v) 0 3px,transparent 3px 7px);box-shadow:inset 0 0 0 1.5px var(--v)}
.pont-piste u{position:absolute;top:-5px;bottom:-5px;width:2px;margin-left:-1px;border-radius:1px;background:var(--nuit)}
.pont-val{text-align:right;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.pont-ligne.delta .pont-val{color:var(--texte-2)}
.graph .axe.ecart-economie{fill:color-mix(in srgb,var(--vert) var(--mix-texte),var(--texte))}
.graph .axe.ecart-surconsommation{fill:color-mix(in srgb,var(--corail) var(--mix-texte),var(--texte))}
.graph .axe:is(.ecart-egal,.ecart-brut){fill:var(--texte-2)}
@media (max-width:560px){
  .pont-ligne{grid-template-columns:minmax(0,7.5em) minmax(0,1fr) auto;gap:2px 8px}
  .cmp-chiffres strong{font-size:var(--txt-2xl)}
}
/* Stats > Chauffage prédictif : chiffres clés, nuage des montées, ce qu'il sait de chaque pièce, dernières arrivées */
.pred-stats h3 .badge{--b:var(--c);margin-left:10px}
.pred-stats h4{margin:20px 0 6px;font-size:var(--txt-m)}
.pred-stats .kpis{margin:12px 0 4px}
.pred-issue{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;font-weight:600}
.pred-issue i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--c)}
.pred-pieces{display:grid;grid-template-columns:repeat(auto-fill,minmax(max(210px,calc(25% - 10px)),1fr));gap:10px}
.pred-piece{border:1px solid var(--trait);border-top:3px solid var(--c);border-radius:var(--rayon-m);padding:10px 12px;min-width:0}
.pred-piece.exclue{opacity:.7}
.pp-tete{display:flex;align-items:center;gap:7px;min-width:0}
.pp-tete i{flex:none;width:9px;height:9px;border-radius:50%;background:var(--c)}
.pp-tete b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pp-tete .badge{--b:var(--galet-plein);margin-left:auto}
.pp-vitesse{display:block;font-family:var(--serif);font-size:var(--txt-2xl);line-height:1.2;margin-top:6px;font-variant-numeric:tabular-nums}
.pp-vitesse span{font-family:var(--sans);font-size:var(--txt-s);color:var(--texte-2);margin-left:4px}
.pred-piece small{display:block;font-size:var(--txt-xs);color:var(--texte-2)}
.pred-piece ul{margin:8px 0 0;padding:8px 0 0;border-top:1px solid var(--trait);list-style:none;display:grid;gap:2px;
  font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.pred-comp td{white-space:nowrap}
.pred-comp .pc-groupe th{text-align:left;padding:14px 8px 6px;font:inherit;letter-spacing:0;text-transform:none;color:var(--texte)}
.pred-comp tbody:first-of-type .pc-groupe th{padding-top:8px}
.pred-comp .pc-groupe span{margin-left:10px;font-size:var(--txt-s);color:var(--texte-2)}
.pred-comp .pc-piece{font-weight:700}
/* téléphone : chaque pièce sur deux lignes, le résultat à droite, les heures et durées dessous avec leur libellé */
@media (max-width:640px){
  .pred-comp thead{display:none}
  .pred-comp,.pred-comp tbody{display:block}
  .pred-comp .pc-groupe{display:block}
  .pred-comp .pc-groupe th{display:block;padding:14px 0 4px;border-bottom:1px solid var(--trait)}
  .pred-comp .pc-groupe span{display:block;margin:2px 0 0}
  .pred-comp tr:not(.pc-groupe){display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 14px;padding:8px 0;border-bottom:1px solid var(--trait)}
  .pred-comp tr:not(.pc-groupe)::after{content:"";order:1;flex-basis:100%}
  .pred-comp td{padding:0;border:0}
  .pred-comp .pc-piece{flex:1;min-width:0;white-space:normal}
  .pred-comp .pc-issue{order:0}
  .pred-comp td.n{order:2;font-size:var(--txt-s);color:var(--texte)}
  .pred-comp td.n::before{content:attr(data-lib) " ";color:var(--texte-2)}
}
/* Optimiseur d'énergie : décision et stratégies comparées (Réglages > Chauffage > Chauffage prédictif, Prévisualiser), périodes
   passées (Stats > Chauffage prédictif) */
.opt-etat{display:grid;gap:10px;margin:4px 0 0}
.opt-etat>.effet{margin:0}
.opt-etat .pred-bloc{margin:0}
.opt-corps{display:grid;gap:8px;padding:0 12px 12px 48px}
.opt-corps>p{margin:0}
.opt-phrase{color:var(--texte);font-weight:600}
.opt-bloc .opt-corps ul{padding:0}
.opt-strat{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.opt-strat th,.opt-strat td{padding:5px 10px 5px 0;text-align:left;border-bottom:1px solid var(--trait);white-space:nowrap}
.opt-strat th{font-size:var(--txt-micro);font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--texte-2)}
.opt-strat .n{text-align:right}
.opt-strat td.ok{color:var(--ok)}
.opt-strat td.ko{color:var(--alerte)}
.opt-strat tr.choisi td{font-weight:700;color:var(--texte)}
.opt-strat tr.choisi td:first-child::before{content:"";display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:var(--c)}
.opt-modele{font-size:var(--txt-s)}
.opt-modele summary{cursor:pointer;color:var(--texte-2);font-weight:600}
.opt-modele ul{margin:6px 0 0;padding-left:18px;display:grid;gap:3px;color:var(--texte-2)}
.opt-periodes tr.opt-ligne td{border-bottom:0}
.opt-periodes tr.opt-detail td{padding-top:0;font-size:var(--txt-s);color:var(--texte-2);white-space:normal}
.opt-periodes td>small{display:block;margin-top:2px;font-size:var(--txt-xs);font-weight:400;color:var(--texte-2)}
.opt-periodes .pc-issue{white-space:normal}
@media (max-width:480px){.opt-corps{padding-left:12px}}
/* étroit (téléphone, Fold, colonne) : chaque stratégie, puis chaque période, sur deux lignes avec leurs libellés */
.opt-corps{container:opt/inline-size}
@container opt (max-width:560px){
  .opt-strat thead{display:none}
  .opt-strat,.opt-strat tbody{display:block}
  .opt-strat tr{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 12px;padding:6px 0;border-bottom:1px solid var(--trait)}
  .opt-strat td{padding:0;border:0}
  .opt-strat td:first-child{flex-basis:100%}
  .opt-strat td.n::before{content:attr(data-lib) " ";color:var(--texte-2);font-weight:400}
}
.opt-table{container:optp/inline-size}
@container optp (max-width:640px){
  .opt-periodes thead{display:none}
  .opt-periodes,.opt-periodes tbody{display:block}
  .opt-periodes tr{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 14px;padding:8px 0;border-bottom:1px solid var(--trait)}
  .opt-periodes tr::after{content:"";order:1;flex-basis:100%}
  .opt-periodes td{padding:0;border:0}
  .opt-periodes .pc-piece{flex:1;min-width:0;white-space:normal}
  .opt-periodes td.n{order:2;font-size:var(--txt-s);color:var(--texte)}
  .opt-periodes td.n::before{content:attr(data-lib) " ";color:var(--texte-2)}
  .opt-periodes tr.opt-ligne{border-bottom:0;padding-bottom:2px}
  .opt-periodes tr.opt-detail{padding-top:0}
  .opt-periodes tr.opt-detail::after{display:none}
}
/* Capteurs (capteurs.js, 3.5) : voies de mesure et ouvrants (Réglages > Capteurs), piles et communication, données,
   bloc de Maintenant (seulement quand un usage est activé). Préfixe capt- : cap- est celui du cap de l'en-tête. */
#rg-capteurs .effet:not([data-effet]){margin-left:0}
.capt-liste{display:grid;gap:10px;margin:8px 0 18px}
.capt-liste:empty{display:none}
.capt-ligne{background:var(--fond);border:1px solid var(--trait);border-radius:var(--rayon-m);padding:var(--esp-2) var(--esp-3);
  transition:opacity var(--duree-2),border-color var(--duree-2)}
.capt-ligne.retiree{opacity:.5}
.capt-ligne.a-regler{border-color:color-mix(in srgb,var(--soleil) 55%,var(--trait))}
.capt-tete{display:flex;align-items:center;gap:10px;min-width:0}
summary.capt-tete{cursor:pointer;list-style:none}
summary.capt-tete::-webkit-details-marker{display:none}
summary.capt-tete::after{content:"";flex:none;width:8px;height:8px;margin:0 4px 0 auto;border:solid var(--texte-2);border-width:0 2px 2px 0;
  transform:rotate(45deg) translateY(-2px);transition:transform var(--duree-2) var(--courbe)}
details[open] > summary.capt-tete::after{transform:rotate(225deg) translateY(-2px)}
.capt-pt{flex:none;width:10px;height:10px;border-radius:50%;background:var(--p,var(--galet));
  box-shadow:0 0 0 3px color-mix(in srgb,var(--p,var(--galet)) 18%,transparent)}
.capt-pt[data-etat="ouvert"]{--p:var(--corail)}
.capt-pt:is([data-etat="ferme"],[data-etat="frais"]){--p:var(--vert)}
.capt-pt[data-etat="vieux"]{--p:var(--soleil)}
.capt-pt[data-etat="inconnu"]{background:transparent;border:2px solid var(--galet);box-shadow:none}
.capt-txt{flex:1;min-width:0}
.capt-txt b{display:block;font-size:var(--txt-m);font-weight:600;overflow-wrap:anywhere}
.capt-txt small{display:block;margin-top:1px;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.capt-txt .badge{margin-left:6px;--b:var(--soleil);color:var(--sur-soleil)}
.capt-champs{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,190px),1fr));gap:10px 16px;margin-top:12px}
.capt-champs label,.capt-groupe > span{display:block;font-size:var(--txt-s);color:var(--texte-2);margin-bottom:3px}
.capt-champs select{width:100%}
.capt-groupe{margin-top:12px}
.capt-cases{display:flex;flex-wrap:wrap;gap:6px 18px}
.capt-cases .case{font-size:var(--txt-m)}
.capt-cases small{display:block;color:var(--texte-2);font-size:var(--txt-s)}
.capt-actions{display:flex;justify-content:flex-end;margin-top:10px}
.capt-etats li{display:flex;align-items:center;gap:12px;padding:9px 0}
.capt-etats{list-style:none;margin:10px 0 0;padding:0}
.capt-etats li + li{border-top:1px solid var(--trait)}
.capt-donnees{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px;font-size:var(--txt-s);color:var(--texte-2)}
.capt-donnees b{color:var(--texte);font-variant-numeric:tabular-nums}
/* Réglages > Capteurs > Essais d'apprentissage : essai en cours, lancement, résultats et leur fiabilité */
.capt-essai-form{margin:4px 0 18px}
.capt-essai-form .capt-vide{display:flex;margin-top:12px}
.capt-essai .capt-txt .badge{--b:var(--trait);color:var(--texte)}
.capt-resultats{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:6px;font-size:var(--txt-s)}
.capt-resultats li{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px}
.capt-resultats li > small{flex-basis:100%;color:var(--texte-2)}
.capt-resultats .badge{margin:0;--b:var(--galet-plein)}
.capt-resultats .badge[data-fiab="bonne"]{--b:var(--vert-plein)}
.capt-resultats .badge[data-fiab="a_confirmer"]{--b:var(--soleil);color:var(--sur-soleil)}
.capt-resultats .badge[data-fiab="rejetee"]{--b:var(--corail-plein)}
.capt-essai > .aide{margin:8px 0 0}
.capt-essai > .capt-acts{margin-top:8px}
/* Maintenant > Capteurs */
.mt-cote > :empty{display:none}
.bloc-capteurs .tete-bloc small{color:var(--texte-2);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.bloc-capteurs .tete-bloc small.ko{color:var(--alerte)}
.capt-alertes{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:8px}
.capt-alertes li{padding:9px 12px;border-radius:var(--rayon-m);font-size:var(--txt-s);
  background:color-mix(in srgb,var(--corail) 10%,var(--carte));border-left:3px solid var(--corail)}
.capt-alertes li b{display:block;font-size:var(--txt-m)}
.capt-alertes li small{color:var(--texte-2)}
.capt-puces{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.capt-puces li{display:inline-flex;align-items:center;gap:7px;padding:5px 12px 5px 10px;border-radius:var(--rayon-rond);
  border:1px solid var(--trait);background:var(--fond);font-size:var(--txt-s);font-weight:700}
.capt-puces li small{font-weight:400;color:var(--texte-2)}
.capt-puces li.ouvert{border-color:color-mix(in srgb,var(--corail) 60%,var(--trait))}
.capt-puces .capt-pt{width:8px;height:8px}
.capt-manque{margin:0 0 12px}
.bloc-capteurs .effet{margin-left:0}
/* Maintenant > Électricité : compteur de puissance animé (capteurs.js, dessinerCompteur), même arc que la jauge des
   fiches. L'arc et la pointe glissent (transitions), des points courent sur la part tracée (un anneau qui tourne sous
   un masque, plus vite quand le logement consomme : capteurs.js change sa vitesse sans saut) ; la pointe prend la
   teinte du dégradé là où elle est (--cpt-c, déclarée pour glisser aussi), son halo bat près de la limite ; battement
   de la pointe à chaque mesure (capteurs.js, animer) ; mesure indisponible : la piste seule */
@property --cpt-c{syntax:"<color>";inherits:true;initial-value:#F2A41F}
#zone-compteur{container:compteur/inline-size}
.cpt-carte{--accent:var(--soleil);display:grid;grid-template-columns:132px minmax(0,1fr);align-items:center;gap:4px 18px;
  padding:16px var(--esp-5) 18px}
.cpt-carte.sans-total{grid-template-columns:minmax(0,1fr)}
.cpt-jauge{display:block;width:132px;height:auto;overflow:visible;--cpt-c:var(--soleil);transition:--cpt-c 1.2s var(--courbe)}
.cpt-jauge :is(.piste,.valeur,.masque,.flux,.zone-rouge){fill:none;stroke-linecap:round}
.cpt-jauge .piste{stroke:color-mix(in srgb,var(--texte) 9%,transparent);stroke-width:12}
.cpt-jauge :is(.valeur,.masque){stroke-width:12;stroke-dasharray:100 100;stroke-dashoffset:100;
  transition:stroke-dashoffset 1.2s var(--courbe),opacity var(--duree-3)}
.cpt-jauge .masque{stroke:#fff;stroke-width:14}
.cpt-jauge .flux{stroke:#fff;stroke-width:3;stroke-dasharray:0 6.25;opacity:.7;transform-origin:80px 78px;
  animation:tourne 23s linear infinite;transition:opacity var(--duree-3)}
.cpt-jauge .zone-rouge{stroke:var(--corail);stroke-width:5;stroke-linecap:butt;opacity:.28}
.cpt-jauge .grad{stroke:var(--texte-2);stroke-width:1.5;stroke-linecap:round;opacity:.4}
.cpt-jauge .pointe{transform-origin:80px 78px;transition:transform 1.2s var(--courbe),opacity var(--duree-3)}
.cpt-jauge .halo{fill:var(--cpt-c);fill-opacity:.2;transform-box:fill-box;transform-origin:center}
.cpt-jauge[data-niveau="limite"] .halo{fill-opacity:.45;animation:anneau 1.6s ease-in-out infinite}
.cpt-jauge .pouls{fill:none;stroke:var(--cpt-c);stroke-width:2;opacity:0;transform-box:fill-box;transform-origin:center}
.cpt-jauge .bouton{fill:var(--carte);stroke:var(--cpt-c);stroke-width:3.5}
.cpt-jauge .eclair{fill:var(--cpt-c);transition:opacity var(--duree-3)}
.cpt-jauge text{font-variant-numeric:tabular-nums}
.cpt-jauge .val{font-family:var(--serif);font-weight:700;font-size:28px;fill:var(--texte)}
.cpt-jauge .unite{font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.06em;fill:var(--texte-2)}
.cpt-jauge .borne{font-family:var(--sans);font-size:10px;fill:var(--texte-2)}
.cpt-jauge.vieille :is(.valeur,.flux,.pointe){opacity:0}
.cpt-jauge.vieille .flux{animation-play-state:paused}
.cpt-jauge.vieille .eclair{opacity:.35}
.cpt-jauge.vieille .val{fill:var(--texte-2)}
.cpt-infos{min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:6px}
.cpt-voie{margin:0;font-size:var(--txt-s);color:var(--texte-2);overflow-wrap:anywhere}
.cpt-voie b{color:var(--texte)}
.cpt-part{margin:0;font-size:var(--txt-s);line-height:1.35;color:var(--texte-2)}
.cpt-part b{display:block;font-family:var(--serif);font-size:1.7rem;line-height:1.1;font-weight:700;color:var(--texte);
  font-variant-numeric:tabular-nums}
.cpt-indispo{margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.cpt-part.limite b{color:color-mix(in srgb,var(--alerte) var(--mix-texte),var(--texte))}
.cpt-alerte{display:flex;align-items:baseline;gap:7px;margin:0;font-size:var(--txt-s);font-weight:700;line-height:1.3;
  color:color-mix(in srgb,var(--alerte) var(--mix-texte),var(--texte))}
.cpt-alerte::before{content:"";flex:none;width:7px;height:7px;border-radius:50%;background:var(--alerte);translate:0 -1px}
.cpt-alerte.delestage{color:color-mix(in srgb,var(--corail) var(--mix-texte),var(--texte))}
.cpt-alerte.delestage::before{background:var(--corail)}
.cpt-circuits{list-style:none;align-self:stretch;margin:2px 0 0;padding:8px 0 0;border-top:1px solid var(--trait);display:grid;gap:8px}
.cpt-carte.sans-total .cpt-circuits{margin:0;padding:0;border-top:0}
.cpt-circuits li{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:5px 10px;font-size:var(--txt-s)}
.cpt-circuits li > span{min-width:0;overflow-wrap:anywhere;color:var(--texte-2)}
.cpt-circuits li > b{font-variant-numeric:tabular-nums;white-space:nowrap}
.cpt-circuits li.vieille > b{color:var(--texte-2)}
.cpt-circuits li > .cpt-etat{grid-column:1/-1;display:block;margin-top:-3px;font-size:var(--txt-xs);color:var(--texte-2)}
.cpt-circuits li > .cpt-etat:empty{display:none}
.cpt-circuits li > i{grid-column:1/-1;display:block;height:4px;border-radius:var(--rayon-rond);overflow:hidden;
  background:color-mix(in srgb,var(--c) 16%,transparent)}
.cpt-circuits li > i > i{display:block;width:var(--part,0%);height:100%;border-radius:inherit;background:var(--c);transition:width 1.2s var(--courbe)}
.cpt-lu{display:inline-flex;align-items:center;gap:7px;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.cpt-lu > i{position:relative;flex:none;width:8px;height:8px;border-radius:50%;background:var(--galet)}
.cpt-lu > i > span{position:absolute;inset:0;border-radius:50%;background:inherit;opacity:0}
.cpt-lu[data-etat="frais"] > i{background:var(--ok)}
.cpt-lu[data-etat="ko"]{color:var(--alerte)}
.cpt-lu[data-etat="ko"] > i{background:var(--alerte)}
@container compteur (max-width:340px){
  .cpt-carte{grid-template-columns:112px minmax(0,1fr);gap:4px 12px;padding:14px 14px 16px}
  .cpt-jauge{width:112px}
}
/* Maintenant > Capteurs : entrée, ménage, surveillance et vérifications */
.capt-entree{display:grid;gap:14px;margin-top:14px;padding-top:12px;border-top:1px solid var(--trait)}
.capt-sous-tete{display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;margin-bottom:4px}
.capt-sous h3{margin:0;font-size:var(--txt-m);font-weight:700}
.capt-passages{list-style:none;margin:0;padding:0}
.capt-passages li{display:flex;align-items:center;gap:10px 14px;padding:8px 0}
.capt-passages li + li{border-top:1px solid var(--trait)}
.capt-passages li.alerte{margin:0 -10px;padding:8px 10px;border-radius:var(--rayon-m);border-top-color:transparent;
  background:color-mix(in srgb,var(--corail) 10%,var(--carte))}
.capt-passages li.alerte + li{border-top-color:transparent}
.capt-passages .capt-txt b{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.capt-passages .badge{--b:var(--trait);color:var(--texte);margin:0}
.capt-passages button.lien,.capt-acts{flex:none;font-size:var(--txt-s)}
.capt-acts{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:4px 14px}
.capt-plage{margin:0 0 4px}
.capt-passages li.capt-visite{flex-wrap:wrap}
.capt-visite .capt-acts{flex-basis:100%;justify-content:flex-start}
.capt-bilan{display:flex;align-items:flex-start;gap:10px;margin:4px 0 0;font-size:var(--txt-s)}
.capt-bilan .capt-pt{margin-top:4px}
.capt-bilan .capt-txt > span{display:block}
.capt-sous > .aide{margin:4px 0 0}
.capt-dlg-heures{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:10px 14px;margin-top:12px}
.capt-dlg-heures input{width:100%}
.capt-dlg-note{margin-top:12px}
.capt-brut{max-height:320px;overflow:auto;margin:10px 0;padding:10px 12px;border-radius:var(--rayon-m);background:var(--carte);font-size:var(--txt-xs);white-space:pre-wrap;overflow-wrap:anywhere}
/* Gestionnaire de puissance (puissance.js) : radiateurs avec leur priorité, charge en ce moment, relance échelonnée */
.nt-liste.pw-rads{padding:0;margin:4px 0 12px;transition:opacity var(--duree-2)}
.pw-rads.off{opacity:.45;pointer-events:none}
.pw-rad{display:flex;align-items:center;gap:12px;padding:10px 0}
.pw-pt{flex:none;width:10px;height:10px;border-radius:50%;background:var(--galet)}
.pw-pt[data-etat="montee"]{background:var(--corail)}
.pw-pt[data-etat="maintien"]{background:var(--soleil)}
.pw-pt[data-etat="arret"]{background:var(--vert)}
.pw-pt[data-etat="inconnu"]{background:transparent;border:2px solid var(--galet)}
.pw-rad .pw-prio{width:auto;flex:none;padding:6px 10px}
.pw-pt[data-etat="deleste"]{background:transparent;border:2px solid var(--corail)}
/* délestage (capteurs) : case par radiateur, à côté de sa priorité ; les deux passent sous le nom sur un écran étroit */
.pw-rad{flex-wrap:wrap}
.pw-rad .nt-txt{flex:1 1 9em;min-width:0}
.pw-ctrls{display:flex;align-items:center;gap:8px;margin-left:auto}
.pw-dl{display:inline-flex;align-items:center;gap:6px;padding:5px 11px 5px 9px;border-radius:var(--rayon-rond);cursor:pointer;
  border:1px solid color-mix(in srgb,var(--galet) 50%,transparent);font-size:var(--txt-s);color:var(--texte-2);
  user-select:none;white-space:nowrap;transition:background var(--duree-2),border-color var(--duree-2),color var(--duree-2)}
.pw-dl input{width:16px;height:16px;margin:0;accent-color:var(--corail)}
.pw-dl:has(input:checked){color:var(--texte);border-color:var(--corail);background:color-mix(in srgb,var(--corail) 12%,transparent)}
.pw-dl:has(input:focus-visible){outline:3px solid var(--focus);outline-offset:2px}
.pw-dl input:focus-visible{outline:none}
#rub-puissance .pw-dl-etat{margin:-4px 0 12px;--c:var(--corail)}
.pw-dl-etat.a-voir{--c:var(--alerte)}
.pw-etat{display:grid;gap:10px;container:opt/inline-size}
.pw-etat:empty{display:none}
.pw-etat .effet{margin:0}
.pw-jauge{display:grid;gap:4px}
.pw-barre{display:block;height:10px;border-radius:var(--rayon-rond);overflow:hidden;
  background:color-mix(in srgb,var(--galet) 22%,transparent)}
.pw-barre i{display:block;height:100%;border-radius:inherit;background:var(--vert);transition:width var(--duree-3) var(--courbe)}
.pw-jauge.ko .pw-barre i{background:var(--alerte)}
.pw-chiffre{font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.pw-attente{margin:0;padding:8px 12px;border-radius:var(--rayon-m);font-size:var(--txt-s);
  background:color-mix(in srgb,var(--soleil) 16%,transparent);border-left:3px solid var(--soleil)}
.carte .pw-attente{margin-top:10px}
/* capteurs (3.5) : ouverture confirmée et suspension du chauffage, sur la fiche du radiateur */
.fiche-ouverture{margin:10px 0 0;padding:8px 12px;border-radius:var(--rayon-m);font-size:var(--txt-s);
  background:color-mix(in srgb,var(--mer) 14%,transparent);border-left:3px solid var(--mer)}
.fiche-ouverture.fiche-delestage{background:color-mix(in srgb,var(--corail) 12%,transparent);border-left-color:var(--corail)}
.pw-plan .pred-titre{margin-top:6px}
.pw-plan>.aide{margin:0 0 4px}
.pw-liste{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-variant-numeric:tabular-nums}
.pw-liste li{display:grid;grid-template-columns:3.4em minmax(0,max-content) minmax(0,1fr);align-items:baseline;gap:2px 10px}
.pw-liste time{font-weight:700;color:var(--texte)}
.pw-liste small{font-size:var(--txt-xs);color:var(--texte-2)}
.pw-liste small.ko{color:var(--alerte)}
.pred-bloc ul.pw-liste{padding:0 12px 10px 48px;display:grid}
.pw-prev>.aide{margin:0;padding:0 12px 10px 48px}
.pw-pics summary{cursor:pointer;color:var(--texte-2);font-weight:600;font-size:var(--txt-s)}
.pw-pics table{margin-top:6px}
.pw-pics tr.ko td{color:var(--alerte)}
@container opt (max-width:420px){
  .pw-liste li{grid-template-columns:3.4em minmax(0,1fr)}
  .pw-liste li small{grid-column:2}
}
@media (max-width:480px){.pred-bloc ul.pw-liste,.pw-prev>.aide{padding-left:12px}}
/* Stats en mouvement, à l'ouverture de l'onglet ou au changement de période (pas en redimensionnant) : chiffres clés
   en cascade, colonnes qui montent depuis l'axe, courbes qui se tracent, rubans qui se déroulent, points qui
   apparaissent, de gauche à droite (--x : position dans le dessin, --base : ligne du zéro, --i : rang) */
.anime :is(.kpis,.mini-kpis) > *{animation:carte-entree var(--duree-3) var(--courbe) both;animation-delay:calc(var(--i,0) * 45ms)}
.anime .graph :is(.col,.aire){transform-box:view-box;transform-origin:0 var(--base);animation:monte var(--duree-4) var(--courbe) both;
  animation-delay:calc(var(--x,0) * .5ms)}
.anime .graph .trace{animation:fondu var(--duree-lente) var(--courbe) both}
.anime .graph .morceau{transform-box:fill-box;transform-origin:left;animation:deroule linear both;   /* balayage continu : chaque morceau à son tour */
  animation-duration:calc(var(--w,10) * .6ms);animation-delay:calc(var(--x,0) * .6ms)}
.anime .graph .point{transform-box:fill-box;transform-origin:center;animation:point var(--duree-3) var(--ressort) both;animation-delay:calc(var(--x,0) * .5ms)}
.anime .graph .fondu{animation:fondu var(--duree-4) var(--courbe) both;animation-delay:var(--duree-3)}
.anime :is(.piece .barre,.barre-delai) i{transform-origin:left;animation:deroule var(--duree-4) var(--courbe) both;animation-delay:calc(var(--i,0) * 40ms)}
.anime :is(.cv-barre,.bt-barre,.pont-piste) :is(i,em){transform-origin:left;animation:deroule var(--duree-4) var(--courbe) both;animation-delay:calc(var(--i,0) * 40ms)}
.anime .voy-barre i{transform-origin:bottom;animation:monte var(--duree-4) var(--courbe) both;animation-delay:calc(var(--i,0) * 60ms)}
.anime :is(.cmp-verdict,.compteurs-actions li,.chauffe-vue > div){animation:carte-entree var(--duree-3) var(--courbe) both;animation-delay:calc(var(--i,0) * 45ms)}
@keyframes monte{from{scale:1 0}}
@keyframes deroule{from{scale:0 1}}
@keyframes point{from{scale:0;opacity:0}}
@keyframes fondu{from{opacity:0}}
.pied-base a{color:var(--lien);font-weight:700}
.table-sejours tr.encours td:first-child{font-weight:700}
.table-sejours tr.encours td:first-child::after{content:"•";color:var(--corail);margin-left:6px}
.table-sejours td a{color:inherit;text-decoration:none;border-bottom:1px dotted var(--galet);white-space:nowrap}
.plateformes{list-style:none;margin:6px 0 14px;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px;font-size:var(--txt-m);color:var(--texte-2)}
.plateformes b{color:var(--texte)}
.sous-graph.ko{color:var(--alerte)}
.stats-vide{padding:28px var(--esp-6);text-align:center}
.stats-vide svg{width:56px;height:56px;color:var(--mer);opacity:.7}
.stats-vide h3{margin:8px 0 4px}
.stats-vide p{color:var(--texte-2);margin:0 auto;max-width:52ch}
.absences{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:6px}
.absences li{--k:var(--e-absence);display:flex;justify-content:space-between;gap:12px;font-size:var(--txt-m)}
.absences li b{color:var(--vert);white-space:nowrap}
.defile{overflow-x:auto}
.etapes-linky{margin:0 0 14px;padding-left:1.3em;color:var(--texte-2);font-size:var(--txt-m);display:grid;gap:4px}
.etapes-linky a{color:var(--lien);font-weight:700}
.ligne-code{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ligne-code input{max-width:10em;letter-spacing:.15em;font-variant-numeric:tabular-nums}
#sh-code:not([hidden]){animation:apparait .25s ease-out}
#linky-etat.ko{color:var(--alerte)}
#sauvegarde-etat.ko{color:var(--alerte)}
#sauvegarde-etat a{color:var(--lien);font-weight:700}
.base-depuis{list-style:none;margin:0 0 6px;padding:0;display:grid;gap:4px}
.base-depuis li{display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;padding:4px 0;border-bottom:1px solid var(--trait)}
.base-depuis li span{flex:1;min-width:12em}
.base-depuis li b{font-variant-numeric:tabular-nums}
.base-depuis li small{color:color-mix(in srgb,var(--soleil) var(--mix-pastille),var(--texte));font-weight:700}
#eau-etat.ko{color:var(--alerte)}
@media (max-width:720px){.mini-kpis.trois,.base-chiffres{grid-template-columns:1fr 1fr}.mini-kpis.trois > div:last-child,.base-chiffres > div:last-child{grid-column:1/-1}}
.kpis.cinq{grid-template-columns:repeat(5,minmax(0,1fr))}
.kpis.trois{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:1100px){.kpis.cinq{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:640px){.mini-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.stats-actions{width:100%;justify-content:space-between}}
@media (max-width:900px){.kpis,.kpis.cinq,.kpis.trois{grid-template-columns:repeat(2,minmax(0,1fr))}:is(.kpis.cinq,.kpis.trois) .kpi:last-child{grid-column:1/-1}.deux-graph{grid-template-columns:1fr}}
/* fiche du ballon dans une place étroite (téléphone, colonne de droite sur grand écran) : tout en colonne */
#zone-eau{container:eau/inline-size}
@container eau (max-width:560px){
  .eau-carte{grid-template-columns:1fr;padding:16px}
  .eau-absence{grid-template-columns:auto minmax(0,1fr)}
  .eau-absence{padding:12px;gap:10px 12px}
  .eau-abs-ico{width:32px;height:32px} .eau-abs-ico svg{width:17px;height:17px}
  .eau-abs-actions{grid-column:1/-1;flex-direction:row}
  .eau-abs-actions .btn{flex:1 1 0;min-width:0;white-space:normal}
  .ballon-svg{width:130px;height:170px}
  .eau-chiffres{justify-content:center;text-align:center}
  .eau-infos .pastille{align-self:center}
}
@media (max-width:720px){
  .regles-eau{grid-template-columns:minmax(0,1fr)}
  .re-params,.re-cases,.nt-liste{padding-left:0}
  .fq-reglage{margin-left:0;width:100%;gap:8px}
  .fq-rythme{white-space:normal}
  .fq-reglage input.inter{margin-left:auto;flex:none}
  .periode.nt-presets{grid-template-columns:repeat(3,1fr)}
  .effet{margin-left:0}
  .stats-tete{align-items:stretch}
  .periode{grid-template-columns:repeat(4,1fr)}
  .kpi b{font-size:var(--txt-2xl)}
  .graph{padding:14px 12px 12px}
  .piece{grid-template-columns:1fr}
  .piece small{grid-column:1}
}
/* ===== Prédiction : onglet du prédictif V3 (prediction.js) =====
   En-tête (mode, réglages, coût des calculs), choix de la vue et de la pièce, puis les graphiques. Formes et motifs
   doublent les couleurs (légendes, repères), « Mesuré » et « Simulé » sont écrits sur les dessins ; peu de données :
   effectifs en motif hachuré ou bordure en tirets, jamais une couleur pleine qui ferait croire à un résultat sûr. */
#prd-sortie{transition:opacity var(--duree-2)}
#prd-sortie.en-charge{opacity:.55}
.prd-etat h3{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin:0}
.prd-etat h3 .badge{--b:var(--c)}
.prd-etat .sous-graph{margin:4px 0 0}
.prd-infos{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.prd-infos li.ko{color:var(--alerte);font-weight:600}
.prd-controles{margin:0 0 var(--esp-4)}
.prd-vues{margin:0 0 4px}
/* quatre vues (3.7.0, Laboratoire) : sur un téléphone, deux lignes de deux plutôt qu'une ligne qui déborde */
@media (max-width:520px){.periode.prd-vues{display:grid;grid-template-columns:repeat(2,1fr);border-radius:var(--rayon-l)}}
.prd-pieces{grid-template-columns:repeat(auto-fill,minmax(max(min(100%,180px),calc(25% - 8px)),1fr))}
.prd-accueil{position:absolute;top:7px;right:8px;display:grid;place-items:center;width:18px;height:18px;border-radius:50%;
  font:800 10px/1 var(--sans);font-style:normal;color:var(--sur-couleur);background:var(--vert-plein)}
.prd-series{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 8px}
.prd-series button{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:4px 12px;border-radius:var(--rayon-rond);
  border:1px solid var(--trait);background:var(--carte);color:var(--texte);font:inherit;font-size:var(--txt-s);font-weight:600;cursor:pointer;
  transition:background-color var(--duree-1),color var(--duree-1),border-color var(--duree-1)}
.prd-series button[aria-pressed="true"]{border-color:var(--c);background:color-mix(in srgb,var(--c) 10%,var(--carte))}
.prd-series button[aria-pressed="false"]{color:var(--texte-2);background:var(--fond)}
.prd-series button[aria-pressed="false"] i{opacity:.3}
.prd-series i{display:inline-block;flex:none;width:16px;height:4px;border-radius:2px;background:var(--c)}
:is(.prd-series,.legende) i.tirets{height:0;border-radius:0;background:none;border-top:2.5px dashed var(--c);width:16px;vertical-align:3px}
.prd-series i.pointille{height:0;border-radius:0;background:none;border-top:3px dotted var(--c)}
.legende i.bande{background:color-mix(in srgb,var(--c) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 50%,transparent)}
.legende i.f-rond{border-radius:50%}
.legende i.f-rond-vide{border-radius:50%;background:none;box-shadow:inset 0 0 0 2px var(--c)}
.legende i.f-losange{border-radius:1px;transform:rotate(45deg) scale(.8)}
.legende i.f-triangle{border-radius:0;clip-path:polygon(50% 0,100% 100%,0 100%)}
.legende i.f-croix{border-radius:0;background:linear-gradient(var(--c),var(--c)) center/100% 2.5px no-repeat,linear-gradient(var(--c),var(--c)) center/2.5px 100% no-repeat}
.prd-zone{display:grid;gap:4px}
.prd-meteo{margin-top:10px}
.prd-sous{margin:18px 0 6px;font-size:var(--txt-m)}
.prd-sous small{font-weight:400;color:var(--texte-2)}
.graph .axe.prd-repere{font-size:10px;font-weight:700}
.graph .axe.prd-etiquette{font-size:10.5px;font-weight:700;fill:var(--texte)}
/* « Pourquoi cette décision ? », diagnostics thermiques */
.prd-pourquoi{margin-top:14px;border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--fond)}
.prd-pourquoi>summary{cursor:pointer;padding:9px 12px;font-weight:700;color:var(--lien)}
.prd-pourquoi ul{margin:0;padding:0 14px 6px 30px;display:grid;gap:3px;font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.prd-pourquoi p{margin:0 14px 10px;font-size:var(--txt-s);color:var(--texte-2)}
.prd-expl{white-space:pre-line}
.prd-diags{display:grid;gap:10px}
.prd-diags .prd-sous{margin-bottom:0}
.prd-diag{border:1px solid var(--trait);border-left:4px solid var(--c);border-radius:var(--rayon-m);padding:10px 12px;min-width:0}
.prd-diag-tete{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
.prd-diag-tete .badge{--b:var(--c)}
.prd-diag-tete small{color:var(--texte-2);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.prd-diag p{margin:6px 0 0;font-size:var(--txt-s)}
.prd-raisons{margin:6px 0 0;padding:0;list-style:none;display:grid;gap:2px;font-size:var(--txt-s)}
.prd-raisons li::before{content:"✓";display:inline-block;width:1.3em;font-weight:800;color:var(--ok)}
.prd-raisons li.non::before{content:"✗";color:var(--alerte)}
.prd-mini-box{margin-top:6px;max-width:540px}
/* Laboratoire des stratégies : changement proposé (ancienne valeur barrée), gain, échantillon (hachuré tant que le
   minimum de périodes n'est pas atteint), constats ; les statuts gardent leur couleur et leur nom écrit */
.prd-labo-chgt{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:2px;font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.prd-labo-chgt s{color:var(--texte-2)}
.prd-diag p.prd-labo-gain{font-size:var(--txt-m);font-variant-numeric:tabular-nums}
.prd-labo-gain b{color:var(--vert)}
.prd-diag p.ko,.prd-labo-constats p.ko{color:var(--alerte);font-weight:600}
.prd-labo-ech{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin-top:8px}
.prd-labo-ech i{flex:0 1 160px;min-width:80px;height:6px;border-radius:3px;background:linear-gradient(90deg,var(--c) var(--p),var(--fond) var(--p));
  box-shadow:inset 0 0 0 1px var(--trait)}
.prd-labo-ech.partiel i{background:repeating-linear-gradient(135deg,var(--c) 0 3px,transparent 3px 6px) 0 0/var(--p) 100% no-repeat,var(--fond)}
.prd-labo-ech small{color:var(--texte-2);font-variant-numeric:tabular-nums}
.prd-labo-constats{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.prd-labo-constats li{padding:8px 12px;border-radius:var(--rayon-m);background:var(--fond)}
.prd-labo-constats li.partiel{border:1px dashed var(--trait);background:none}
.prd-labo-constats .badge{margin-left:4px;white-space:nowrap}
.prd-labo-constats p{margin:4px 0 0;font-size:var(--txt-s)}
.prd-labo-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
/* Voyageurs : sélection du séjour, carte de chaleur, barres et distributions */
.prd-choix-sejour{width:auto;max-width:100%}
.prd-chaleur{border-collapse:separate;border-spacing:3px;font-variant-numeric:tabular-nums;font-size:var(--txt-s);min-width:100%}
.prd-chaleur th{padding:4px 6px;font-size:var(--txt-micro);font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--texte-2);
  text-align:center;white-space:nowrap}
.prd-chaleur tbody th{text-align:left;text-transform:none;letter-spacing:0;font-size:var(--txt-s);color:var(--texte);font-weight:700}
.prd-chaleur td{min-width:52px;padding:6px 4px;text-align:center;border-radius:var(--rayon-s);
  background:color-mix(in srgb,var(--corail) calc(var(--p,0) * .6%),var(--fond))}
.prd-chaleur td b{display:block;font-weight:700}
.prd-chaleur td small{display:block;font-size:var(--txt-xs);color:var(--texte-2)}
.prd-chaleur td.peu{background:var(--fond);outline:1.5px dashed var(--galet);outline-offset:-2px}
.prd-chaleur td.sans{color:var(--texte-2);background:repeating-linear-gradient(45deg,var(--fond) 0 5px,transparent 5px 10px)}
.prd-deux{margin-top:12px}
.prd-histo,.prd-barres{display:grid;gap:7px;margin-top:6px}
.prd-barre{display:grid;grid-template-columns:minmax(0,11em) minmax(60px,1fr) auto;align-items:center;gap:3px 10px;font-size:var(--txt-s)}
.prd-barre>span{min-width:0;overflow-wrap:anywhere}
.prd-barre>i{position:relative;display:block;height:12px;border-radius:var(--rayon-s);background:var(--fond)}
.prd-barre>i::before{content:"";position:absolute;inset:0 auto 0 0;width:var(--w,0);border-radius:inherit;background:var(--mer)}
.prd-barre>b{font-variant-numeric:tabular-nums;white-space:nowrap}
.prd-barre>small{grid-column:2/-1;margin-top:-2px;color:var(--texte-2);font-size:var(--txt-xs)}
/* intervalle à 95 % : moustache de --a à --b */
.prd-barre>i:is(.ic,[style*="--a"])::after{content:"";position:absolute;top:1px;bottom:1px;left:var(--a);width:calc(var(--b) - var(--a));
  border-inline:2px solid var(--texte);background:linear-gradient(var(--texte),var(--texte)) center/100% 1.5px no-repeat;opacity:.7}
.prd-barre.peu>i::before{background:repeating-linear-gradient(45deg,var(--galet) 0 4px,transparent 4px 7px)}
.prd-barre.kwh.mesure>i::before{background:var(--corail)}
.prd-barre.kwh.simule>i::before{background:repeating-linear-gradient(90deg,var(--mer) 0 7px,color-mix(in srgb,var(--mer) 50%,transparent) 7px 10px)}
.prd-tag{margin-left:6px;padding:0 6px;border-radius:var(--rayon-rond);font:700 var(--txt-micro)/1.6 var(--sans);font-style:normal;
  letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}
.prd-tag.mesure{color:var(--corail);background:color-mix(in srgb,var(--corail) 14%,transparent)}
.prd-tag.simule{color:var(--lien);background:color-mix(in srgb,var(--mer) 14%,transparent)}
.prd-accueil-piece{padding:6px 0 10px;border-top:1px solid var(--trait)}
.prd-accueil-piece:first-of-type{border-top:0}
.prd-accueil-piece .prd-sous{margin-top:8px}
/* Performance */
.prd-cal .courbe-radiateur + .courbe-radiateur{margin-top:8px}
.prd-arr td{white-space:nowrap}
.prd-ok{color:var(--ok);font-weight:700}
.prd-ko{color:var(--alerte);font-weight:700}
@media (max-width:640px){
  .prd-barre{grid-template-columns:minmax(0,1fr) auto}
  .prd-barre>i{grid-column:1/-1;grid-row:2}
  .prd-barre>small{grid-column:1/-1}
}
/* Réglages > Chauffage > Prédictif V3 : pièces (accueil, exclue, thermostat daté du radiateur) ; Système > Fréquences : coût */
#rub-predictif-v3 .effet{margin-left:0;font-variant-numeric:tabular-nums}
.v3-une{display:flex;align-items:center;gap:8px;margin:-4px 0 10px;font-size:var(--txt-s);color:var(--texte-2)}
.v3-une label{margin:0;font-size:inherit;font-weight:600}
.v3-une input.court{width:4.6em}
.v3-pieces{list-style:none;margin:6px 0 10px;padding:0;display:grid;gap:8px;transition:opacity var(--duree-2)}
.v3-pieces.off,#v3-options.off{opacity:.45;pointer-events:none}
.v3-piece{border:1px solid var(--trait);border-radius:var(--rayon-m);padding:8px 12px;background:var(--fond);min-width:0}
.v3-p-tete{display:flex;flex-wrap:wrap;align-items:center;gap:2px 16px}
.v3-p-tete b{flex:1 1 9em;min-width:0;overflow-wrap:anywhere}
.v3-case{display:inline-flex;align-items:center;gap:7px;min-height:36px;margin:0;font-size:var(--txt-s);font-weight:600;cursor:pointer}
.v3-case input{width:18px;height:18px;margin:0;accent-color:var(--mer)}
.v3-thermo-ligne{margin:2px 0 0;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.v3-thermo-ligne small{font-size:inherit}
.v3-thermo-hist{margin:4px 0 0;padding:0 0 0 18px;font-size:var(--txt-xs);color:var(--texte-2)}
.v3-retirer{margin-top:4px;font-size:var(--txt-s)}
.v3-thermo-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px 12px;margin:8px 0 4px;padding:10px;border-radius:var(--rayon-m);
  background:var(--carte);border:1px dashed var(--trait)}
.v3-thermo-form label{display:grid;gap:3px;margin:0;font-size:var(--txt-s);font-weight:600}
.v3-thermo-form input[type=date]{width:auto}
.v3-inconnues:empty{display:none}
.fq-v3{margin-top:12px;padding:10px 12px;border-radius:var(--rayon-m);background:var(--fond);font-size:var(--txt-s)}
.fq-v3:empty{display:none}
.fq-v3 ul{margin:4px 0;padding-left:18px;display:grid;gap:2px;color:var(--texte-2);font-variant-numeric:tabular-nums}
.fq-v3 small{color:var(--texte-2)}
/* ===== Connexion ===== */
.connexion{position:fixed;inset:0;z-index:var(--plan-ecran);background:var(--marine);color:var(--creme);display:grid;place-items:center;padding:24px}
.connexion form{width:min(360px,100%);text-align:center}
.connexion .tuile{width:120px;height:120px;border-radius:50%;background:var(--creme);display:grid;place-items:center;margin:0 auto 18px;box-shadow:0 0 0 6px var(--voile-2)}
.connexion .tuile img{width:100px;height:100px}
.connexion h1{font-family:var(--serif);font-size:1.9rem;margin:0 0 4px;letter-spacing:.05em}
.connexion p{color:var(--creme-doux);margin:0 0 24px}
.connexion input{background:var(--voile-2);border:1px solid var(--voile-trait);color:var(--creme);font-size:var(--txt-l);padding:14px 16px;text-align:center}
.connexion button{width:100%;margin-top:12px;padding:14px;background:var(--creme);color:var(--marine);border:0;border-radius:var(--rayon-rond);font-weight:700;font-size:var(--txt-l);cursor:pointer}
.connexion .erreur{color:var(--erreur-sur-marine);min-height:1.5em;margin-top:12px}
/* Page d'accord OAuth du MCP (accord.html) : le fond de la connexion, une carte claire */
.page-accord{background:var(--marine);color:var(--creme);min-height:100vh}
.accord{width:min(540px,100%);margin:0 auto;padding:32px 16px 48px;text-align:center}
.accord .tuile{width:96px;height:96px;border-radius:50%;background:var(--creme);display:grid;place-items:center;margin:0 auto 14px;box-shadow:0 0 0 6px var(--voile-2)}
.accord .tuile img{width:80px;height:80px}
.accord h1{font-family:var(--serif);font-size:1.9rem;margin:0 0 4px;letter-spacing:.05em}
.accord-sous{color:var(--creme-doux);margin:0 0 22px}
.accord-connexion{width:min(360px,100%);margin:0 auto}
.accord-connexion p{color:var(--creme-doux)}
.accord-connexion input{background:var(--voile-2);border:1px solid var(--voile-trait);color:var(--creme);font-size:var(--txt-l);padding:14px 16px;text-align:center}
.accord-entrer{width:100%;margin-top:12px;padding:14px;background:var(--creme);color:var(--marine);border:0;border-radius:var(--rayon-rond);font-weight:700;font-size:var(--txt-l);cursor:pointer}
.accord-connexion .erreur{color:var(--erreur-sur-marine);min-height:1.5em;margin-top:12px}
.accord-carte{background:var(--carte);color:var(--texte);border-radius:var(--rayon-xl);box-shadow:var(--ombre);padding:20px var(--esp-5);text-align:left}
.accord-carte h2{font-family:var(--serif);font-size:var(--txt-2xl);margin:0 0 8px}
.accord-texte,.accord-aide{color:var(--texte-2)}
.accord-aide{font-size:var(--txt-s);margin:6px 0 0}
.accord-champ{display:block;font-weight:700;margin:16px 0 6px}
.accord-groupe{border:1px solid var(--trait);border-radius:var(--rayon-l);padding:8px 14px 12px;margin:16px 0 0}
.accord-groupe legend{font-weight:700;padding:0 6px}
.accord-case{display:flex;gap:10px;align-items:flex-start;padding:6px 0;cursor:pointer}
.accord-case input{margin-top:5px;flex:none}
.accord-case small{display:block;color:var(--texte-2)}
.accord-alerte{margin:18px 0 0;padding:10px 12px;border-radius:var(--rayon-m);background:color-mix(in srgb,var(--alerte) 12%,var(--carte))}
.accord-boutons{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:16px}
.accord-carte .resultat{margin-top:10px;color:var(--alerte)}
.hors-ligne{background:var(--soleil);color:var(--sur-soleil);text-align:center;font-weight:700;padding:6px 12px;font-size:var(--txt-m)}
/* nouvelle version prête (A9) : bandeau « Fanal X est prête · Recharger », la page ne se recharge pas sous les yeux */
.version-prete{display:flex;justify-content:center;align-items:center;gap:12px;flex-wrap:wrap;background:var(--marine);color:var(--creme);padding:6px 12px;font-size:var(--txt-m)}
.version-prete .btn{border-color:var(--creme);color:var(--creme);min-height:36px}
.appareils{list-style:none;padding:0;margin:8px 0 0;display:grid;gap:8px}
.appareils li{display:flex;align-items:center;gap:10px;justify-content:space-between;background:var(--fond);border:1px solid var(--trait);border-radius:var(--rayon-m);padding:8px 12px}
/* Applications connectées (Réglages > Système > Accès) : jeton montré une seule fois, liste des appareils */
.jeton-neuf{margin:12px 0 4px;padding:12px 14px;border-radius:var(--rayon-m);border:1px solid color-mix(in srgb,var(--ok) 45%,var(--trait));
  background:color-mix(in srgb,var(--ok) 9%,var(--carte))}
.jeton-neuf p{margin:0 0 8px}
.jeton-neuf p:last-child{margin:8px 0 0}
.jeton-ligne{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.jeton-ligne code{flex:1 1 240px;min-width:0;font:600 var(--txt-s)/1.4 var(--mono);padding:8px 10px;border-radius:var(--rayon-s);
  background:var(--carte);border:1px solid var(--trait);overflow-wrap:anywhere;user-select:all}
.jetons li.jeton{flex-wrap:wrap}
.jeton-infos{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;min-width:0}
.jeton-infos .aide{flex-basis:100%;margin:0}
.jeton-droit{font:700 var(--txt-micro)/1.6 var(--sans);padding:0 8px;border-radius:var(--rayon-rond);
  background:color-mix(in srgb,var(--c,var(--mer)) 14%,var(--carte));color:var(--texte);border:1px solid color-mix(in srgb,var(--c,var(--mer)) 40%,transparent)}
.jeton-droit.d-lecture{--c:var(--galet)}
.jeton-droit.d-pilotage{--c:var(--mer)}
.jeton-droit.d-reglages{--c:var(--corail)}
/* Assistant IA (Réglages > Système > Assistant IA, MCP Fanal) : état, propositions à approuver, assistants, délégation, audit */
.mcp-tete{display:flex;align-items:center;justify-content:space-between;gap:12px 16px;padding:14px var(--esp-4);border-radius:var(--rayon-l);
  background:var(--fond);border:1px solid var(--trait)}
.mcp-tete .aide{margin-top:4px}
.mcp-etat .bandeau{margin:10px 0 0}
.mcp-pastille{display:inline-block;font:700 var(--txt-micro)/1.7 var(--sans);padding:0 9px;border-radius:var(--rayon-rond);vertical-align:1px;
  background:color-mix(in srgb,var(--c,var(--galet)) 15%,var(--carte));border:1px solid color-mix(in srgb,var(--c,var(--galet)) 45%,transparent)}
.mcp-pastille.ok{--c:var(--ok)}
.mcp-pastille.ko{--c:var(--corail)}
.mcp-pastille.off{--c:var(--galet);color:var(--texte-2)}
.mcp-caps{padding:0;margin:0 0 6px}
.mcp-prop{margin:10px 0;padding:14px var(--esp-4) 12px;border-radius:var(--rayon-l);border:1.5px solid var(--lilas);
  background:linear-gradient(135deg,color-mix(in srgb,var(--lilas) 12%,transparent),color-mix(in srgb,var(--lilas) 3%,transparent) 60%),var(--carte)}
.mcp-prop p{margin:0}
.mcp-prop .aide{margin-top:4px}
.mcp-prop .actions{margin-top:12px}
.mcp-motif{margin-top:8px !important;font-size:var(--txt-s);color:var(--texte-2)}
.mcp-motif q{font-style:italic;color:var(--texte);overflow-wrap:anywhere}
.mcp .grille + .mcp-test{margin-top:12px}
.mcp-test{list-style:none;padding:0;margin:12px 0 0;display:grid;gap:6px;font-size:var(--txt-s)}
.mcp-test li{display:flex;gap:10px;align-items:baseline}
.mcp-test-ico{flex:none;width:20px;height:20px;border-radius:50%;display:inline-grid;place-items:center;font-weight:700;font-size:12px;
  background:var(--c,var(--galet));color:var(--sur-couleur)}
.mcp-test .n-ok{--c:var(--ok)}
.mcp-test .n-ko{--c:var(--corail)}
.mcp-test .n-alerte{--c:var(--soleil)}
.mcp-test .n-alerte .mcp-test-ico{color:var(--sur-soleil)}
.mcp-test .n-info{--c:var(--mer)}
.mcp-test span:last-child{overflow-wrap:anywhere}
.mcp-connecteur{margin:14px 0 4px;padding:12px 14px;border-radius:var(--rayon-m);border:1px solid color-mix(in srgb,var(--mer) 40%,var(--trait));
  background:color-mix(in srgb,var(--mer) 7%,var(--carte))}
.mcp-connecteur p{margin:0 0 8px}
.mcp-connecteur p:last-child{margin:8px 0 0}
.mcp-suggestion{display:block;margin-top:6px;font-size:var(--txt-s)}
.mcp-boutons{display:flex;flex-wrap:wrap;gap:6px}
.mcp-clients li.jeton{align-items:flex-start}
.mcp-edition{flex-basis:100%;margin-top:8px;padding-top:10px;border-top:1px solid var(--trait)}
.mcp-edition .actions{margin-top:10px}
.mcp-edition select{max-width:16em;margin-top:6px}
.mcp-champ{display:block;font-weight:700;font-size:var(--txt-m);margin:8px 0 2px}
.mcp-coches{padding:0;margin:0}
.mcp-choix{display:flex;flex-wrap:wrap;gap:6px 18px;margin:4px 0 0}
.mcp-env-dyn{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:12px}
.mcp-groupe{border:1px solid var(--trait);border-radius:var(--rayon-m);padding:6px 12px 10px;margin:0}
.mcp-groupe legend{font-weight:700;padding:0 6px}
.mcp-groupe .case{margin:6px 0 0}
.mcp-enveloppes li.inactive,.mcp-ops .e-refusee,.mcp-ops .e-annulee,.mcp-ops .e-expiree,.mcp-ops .e-contexte_change{opacity:.7}
.mcp-ops{list-style:none;padding:0;margin:8px 0 0;display:grid;gap:8px}
.mcp-ops li{display:flex;flex-wrap:wrap;align-items:center;gap:10px;justify-content:space-between;background:var(--fond);border:1px solid var(--trait);
  border-radius:var(--rayon-m);padding:8px 12px}
.mcp-ops .e-echec{border-color:color-mix(in srgb,var(--corail) 55%,var(--trait))}
#mcp-audit h4{margin:14px 0 4px}
#mcp-audit .dbg-table td{overflow-wrap:anywhere}
.alerte-modules.assistant{border-color:var(--lilas);background:linear-gradient(135deg,color-mix(in srgb,var(--lilas) 12%,transparent),color-mix(in srgb,var(--lilas) 3%,transparent) 60%),var(--carte)}
.alerte-modules.assistant::before{background:var(--lilas)}
.alerte-modules.assistant .am-ico{--pouls:var(--lilas);background:var(--lilas);box-shadow:0 0 0 6px color-mix(in srgb,var(--lilas) 18%,transparent)}
.alerte-modules.assistant .am-type{--b:var(--lilas)}
.badge.assistant{--b:var(--lilas)}
.badge.ouverture{--b:var(--mer-plein)}
.badge.delestage{--b:var(--corail-plein)}
.badge.humidite{--b:var(--fanal)}
.badge.apprentissage{--b:var(--mer-plein)}

/* ===== Écran moyen (640 px et plus : Fold ouvert, tablette, téléphone en paysage) : les sept onglets nommés sur toute la largeur ===== */
@media (min-width:640px) and (max-width:1150px){
  nav{gap:2px}
  nav button{flex:1 1 0;min-width:0;flex-direction:column;justify-content:center;gap:3px;padding:7px 2px 6px;border-radius:var(--rayon-m);
    font-size:clamp(11px,1.45vw,13.5px)}
  nav .ico{width:20px;height:20px}
  nav .lib{max-width:100%;overflow:hidden;text-overflow:ellipsis}
  nav .repere{border-radius:var(--rayon-m)}
}
/* ===== Téléphone : barre d'onglets en bas, comme une appli ; le choisi s'élargit et montre son nom, les autres leur
   picto (sept noms complets ne tiennent pas sur la largeur ; le nom reste lu par les lecteurs d'écran) ===== */
@media (max-width:639px){
  nav{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:var(--plan-onglets-tel);justify-content:space-around;gap:0;padding:6px 4px calc(6px + env(safe-area-inset-bottom));
      background:var(--carte);box-shadow:0 -4px 18px rgba(19,41,75,.12);overflow:visible}
  nav button{flex:1 1 0;min-width:0;min-height:48px;flex-direction:column;justify-content:center;gap:2px;padding:6px 2px;border-radius:var(--rayon-m);
    font-size:var(--txt-micro);font-weight:700;border:0;overflow:hidden;
    transition:flex-grow var(--duree-3) var(--courbe),color var(--duree-2),scale var(--duree-1) var(--courbe)}
  nav .ico{width:22px;height:22px}
  nav button[aria-selected="true"]{flex-grow:2.4;background:transparent;color:var(--onglet-tel-actif);box-shadow:none}
  nav button[aria-selected="true"] .ico{transform:translateY(-1px)}
  nav .lib{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;max-height:1.6em;
    transition:max-height var(--duree-3) var(--courbe),opacity var(--duree-2)}
  nav button:not([aria-selected="true"]) .lib{max-height:0;opacity:0}
  nav .repere{border-radius:var(--rayon-m);background:color-mix(in srgb,var(--onglet-tel-actif) 12%,transparent);box-shadow:none}
  main{padding-bottom:110px}
  .barre-save{bottom:calc(64px + env(safe-area-inset-bottom))}
  .toast{bottom:calc(84px + env(safe-area-inset-bottom))}
  body:has(.barre-save.visible) .toast{bottom:calc(150px + env(safe-area-inset-bottom))}
  .barre-save .page{padding:10px 14px;gap:10px}
  .save-txt b{font-size:var(--txt-m)} .save-long{display:none} .save-court{display:inline}
  .save-actions .btn{padding:8px 12px}
  /* en-tête sur une ligne : marque, météo réduite, réglages rapides (pictos seuls) ; l'étape en cours dessous */
  header{gap:8px;padding-top:max(10px,env(safe-area-inset-top))}
  .marque{gap:9px}
  .meteo{padding:0 11px 0 8px;gap:5px}
  .meteo svg{width:24px;height:24px}
  .meteo .lieu{display:none}
  .btn-panneau{padding:0 10px 0 5px;gap:7px}
  .btn-panneau .bp-txt{display:none}
  /* un seul picto, celui de l'autre mode : un toucher bascule ; la marque se resserre (« … ») plutôt que de
     pousser les réglages rapides sur une deuxième ligne */
  .marque{flex:1 1 110px}
  .themes{width:var(--puce);padding:0;justify-content:center}
  .themes button{width:100%;height:100%}
  .themes button[aria-pressed="true"]{display:none}
  .themes button:hover{background:none}
  .themes svg{width:20px;height:20px}
  .puce-etape{order:5;flex:0 1 auto;min-width:0;max-width:100%;height:36px;padding:0 13px 0 11px}
  .puce-etape span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .faisceau{top:calc(max(10px,env(safe-area-inset-top)) + 11px)}
  /* l'étape sur une colonne : pastille et compte à rebours sur la même ligne, la phrase, la ligne du séjour, le calendrier */
  .hero-etat{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"etat tete" "phrase phrase" "piste piste" "bornes bornes" "meta meta";gap:0 12px}
  .hero-txt,.cap{display:contents}
  .sous-etat{grid-area:phrase;margin-top:12px;font-size:var(--txt-2xl)}
  .sous-etat.longue{font-size:var(--txt-l)}
  .hero-etat:has(.squelette){min-height:173px}   /* ouverture à froid : la place d'un séjour (phrase, ligne, calendrier) est gardée */
  .meta{grid-area:meta;margin-top:8px}
  .cap-tete{grid-area:tete;justify-self:end;align-self:center;display:grid;justify-items:end;gap:1px;text-align:right}
  .cap-tete .cap-quoi{font-size:var(--txt-micro)}
  .cap-reste{font-size:var(--txt-l)}
  .cap-piste{grid-area:piste;margin:14px 6px 8px}
  .cap-bornes{grid-area:bornes;margin-top:6px}
  .mer{height:28px}
}
/* très petit téléphone : la météo laisse la place à la marque */
@media (max-width:359px){ .meteo{display:none !important} }
/* téléphone en paysage, peu de hauteur : bandeau plus serré, l'essentiel reste visible */
@media (max-height:520px) and (orientation:landscape){
  .sous-etat{font-size:var(--txt-xl)}
  .meta,.hero-pilotes,.cap-piste,.cap-bornes{display:none}
  .mer{height:18px}
  nav{padding:6px 0 4px}
  nav button{padding:5px 2px 4px}
  main{padding-top:8px}
}

/* Moins d'animations demandé par le système : plus de mouvement, les changements sont immédiats, sans attente.
   (durée presque nulle plutôt que « none » : les fins d'animation attendues par le code arrivent quand même ; les
   effets qui respirent s'arrêtent sur leur état de repos : lueur des radiateurs fixe, point « maintenant » sans onde,
   halo du logo éteint, faisceau du fanal fixe, mer immobile ; une nouvelle étape et sa lueur arrivent sans fondu, la
   frise du cap ne se déroule pas) */
/* ===== Focus et doigt =====
   Zones qui défilent (onglets, jours du planning, menu des Réglages) : l'anneau du focus passe à l'intérieur, sinon le
   bord de la zone le coupe. Au doigt (pointer: coarse, quelle que soit la largeur : téléphone, Fold ouvert, tablette),
   chaque cible fait au moins 44 px ; quand le dessin doit rester petit (repère, cadenas, poignée, pictos du thème),
   une zone invisible autour l'agrandit. */
nav button:focus-visible,.pl-jour:focus-visible,.rg-menu :focus-visible{outline-offset:-3px}
.ed-fermer{display:grid;place-items:center;min-width:44px;min-height:44px;margin:-8px -10px -8px 0;border-radius:50%}
.ed-fermer:hover{color:var(--texte);background:var(--sable)}
@media (pointer:coarse){
  .periode button,.btn.petit,.bascule{min-height:44px}
  .puce-etape{height:var(--puce)}
  button.lien,.pa-ordre summary,.eau-conso .lien,.rv-dates a{padding-block:11px;margin-block:-11px}
  .rv-dates a{display:inline-block}
  .pic.cadenas::after,.poignee::after,.themes button::after{content:"";position:absolute;inset:-7px}
  .poignee,.themes button{position:relative}
  .themes button::after{inset:-4px;border-radius:50%}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;animation-delay:0s !important;
    transition-duration:.01ms !important;transition-delay:0s !important;scroll-behavior:auto !important}
}
/* Prévisualiser : réservation simulée */
/* (une surface comme les autres : même arrondi, même ombre ; l'arrondi venait d'un jeton qui n'existe pas) */
.prev-resa{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin:0 0 14px;padding:12px var(--esp-4);border-radius:var(--rayon-xl);
  background:var(--carte);box-shadow:var(--ombre)}
.prev-resa label{display:inline-flex;align-items:center;gap:6px}
.prev-resa .prev-resa-titre{font-weight:700;margin-right:4px}
.prev-resa .aide{flex-basis:100%}
/* Onglet Revenus : chiffres clés avec tendance, barre « où va l'argent », cascade, indicateurs, plateformes, séjours */
.rv-kpis .kpi b{font-size:1.6rem}
.rv-tend{display:inline-block;font-weight:800;font-size:var(--txt-xs);padding:1px 7px;border-radius:var(--rayon-rond);background:var(--sable);color:var(--texte-2);white-space:nowrap}
.rv-tend.haut{color:var(--ok)} .rv-tend.bas{color:var(--alerte)}
.rv-form{max-width:none}
.rv-champs{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px 16px}
.rv-champs > div{display:grid;gap:4px;align-content:start}
.rv-champs select{width:100%}
.rv-deux{align-items:start}
.rv-barre{display:flex;height:22px;border-radius:var(--rayon-rond);overflow:hidden;gap:2px;margin:8px 0 2px;background:var(--fond)}
.rv-barre i{display:block;flex-basis:0;min-width:3px;background:var(--c)}
.anime .rv-barre i{animation:rv-pousse var(--duree-4) var(--courbe) both}
@keyframes rv-pousse{from{transform:scaleX(0);transform-origin:left}to{transform:scaleX(1);transform-origin:left}}
.graph .rv-legende{color:var(--texte-2);gap:4px 14px;margin:8px 0 14px;font-size:var(--txt-xs)}
.rv-chute{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.rv-chute li{display:grid;grid-template-columns:minmax(120px,38%) 1fr auto;align-items:center;gap:10px;padding:5px 0}
.rv-chute li.sous,.rv-chute li.total{border-top:1px solid var(--trait);padding-top:8px;margin-top:2px}
.rv-chute li.total:last-child b{font-size:var(--txt-xl);color:var(--vert)}
.rv-lib{font-size:var(--txt-s);line-height:1.25;min-width:0}
.rv-lib small{display:block;color:var(--texte-2);font-size:var(--txt-xs)}
.rv-chute :is(.sous,.total) .rv-lib{font-weight:800}
.rv-piste{position:relative;height:14px;border-radius:var(--rayon-xs);background:var(--fond)}
.rv-piste i{position:absolute;top:0;bottom:0;border-radius:var(--rayon-xs);background:var(--c)}
.rv-chute .moins .rv-piste i{opacity:.85}
.anime .rv-piste i{animation:rv-pousse var(--duree-4) var(--courbe) both}
.rv-chute b{font-family:var(--serif);font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right;min-width:72px}
.rv-chute .moins b{color:var(--texte-2);font-family:var(--sans);font-weight:700;font-size:var(--txt-s)}
.rv-tuiles{margin-top:6px}
.rv-tuiles b{font-size:var(--txt-xl)}
.rv-faits{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:8px}
.rv-faits li{display:grid;grid-template-columns:auto 1fr;gap:0 12px;align-items:baseline;padding:8px 12px;border-radius:var(--rayon-m);background:var(--fond)}
.rv-faits span{font-size:var(--txt-xs);font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--texte-2);grid-row:span 2}
.rv-faits b{font-family:var(--serif);text-align:right}
.rv-faits small{grid-column:2;text-align:right;color:var(--texte-2);font-size:var(--txt-xs)}
.rv-plateformes{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;margin-top:6px}
.rv-plat{padding:12px 14px;border-radius:var(--rayon-m);background:var(--fond);border-left:4px solid var(--c)}
.rv-plat-tete{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.rv-plat-tete b{font-family:var(--serif);font-size:var(--txt-l)}
.rv-plat-tete span{font-weight:800;color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte))}
.rv-part{height:6px;border-radius:var(--rayon-rond);background:var(--trait);margin:6px 0 10px;overflow:hidden}
.rv-part i{display:block;height:100%;background:var(--c);border-radius:inherit}
.rv-plat dl{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;margin:0;font-size:var(--txt-s)}
.rv-plat dt{color:var(--texte-2)}
.rv-plat dd{margin:0;text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
.rv-table{font-size:var(--txt-s)}
.rv-table td,.rv-table th{white-space:nowrap;padding:7px 5px}
.rv-tout{margin-top:12px}
.rv-form .nt-liste{padding:0;margin:14px 0 6px;list-style:none}
.rv-sans-montant summary,.rv-ignores summary{cursor:pointer}
.rv-voir{text-decoration:underline;font-weight:700;white-space:nowrap}
.rv-liste-sans{list-style:none;margin:10px 0 6px;padding:0}
.rv-liste-sans li{padding:8px 0;border-top:1px solid var(--trait)}
.rv-sans-tete{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px}
.rv-liste-sans .rv-sans-tete .btn{margin-left:auto}
.rv-liste-sans .aide{margin:4px 0 0}
.rv-ignores{padding:10px 14px;border-radius:var(--rayon-m);background:var(--carte);border-left:4px solid var(--trait);margin:0 0 16px;color:var(--texte-2)}
.periode.rv-choix-annee{grid-template-columns:none;grid-auto-flow:column;margin:0 0 12px}
.rv-table tfoot th,.rv-table tfoot td{border-top:2px solid var(--trait);border-bottom:0;font-weight:800;padding-top:10px}
.rv-notes{margin:4px 0 24px;font-size:var(--txt-s);color:var(--texte-2)}
.rv-notes p{margin:2px 0}
.rv-notes .ko{color:var(--alerte)}
@media (max-width:640px){
  .rv-chute li{grid-template-columns:1fr auto;gap:2px 10px}
  .rv-chute .rv-piste{grid-column:1/-1;grid-row:2}
  .rv-tuiles{--n:2}
  /* séjours en cartes : chaque montant avec son libellé */
  .rv-table thead{display:none}
  .rv-table,.rv-table tbody,.rv-table tfoot{display:block}
  .rv-table tr{display:grid;grid-template-columns:1fr 1fr;gap:2px 14px;padding:10px 0;border-bottom:1px solid var(--trait)}
  .rv-table td,.rv-table th{padding:0;border:0;display:flex;justify-content:space-between;gap:8px;font-size:var(--txt-s)}
  .rv-table td.rv-dates,.rv-table tfoot th{grid-column:1/-1;font-size:var(--txt-m);font-weight:700}
  .rv-table td.rv-dates{justify-content:flex-start;align-items:baseline}
  .rv-table td.n::before,.rv-table td.rv-plateforme::before{content:attr(data-lib);color:var(--texte-2);font-weight:400}
  .rv-table tfoot tr{border-bottom:0}
  .rv-table tfoot td:empty,.rv-table tfoot td[data-lib="Voyageurs"],.rv-table tfoot td[data-lib="Réel / nuit"]{display:none}
}
.rv-alerte{padding:10px 14px;border-radius:var(--rayon-m);background:var(--carte);border-left:4px solid var(--soleil);margin:0 0 16px;color:var(--texte)}
.rv-alerte .btn{margin-left:6px;padding:4px 12px;font-size:var(--txt-s)}
.rv-sans .boutons{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:14px 0 8px}
.rv-sans p{max-width:620px;margin:6px auto}
.rv-a-lire{color:var(--texte-2);font-style:italic}
.rv-sous{color:var(--alerte)}
.rv-vise{margin:4px 0 8px;font-weight:700} .rv-vise small{font-weight:400;color:var(--texte-2)}
.rv-conseils{margin:6px 0 12px;padding-left:20px;display:grid;gap:6px;font-size:var(--txt-s)}
.rv-conseils li{line-height:1.45}
.rv-saison{margin:16px 0 4px;font-size:var(--txt-m)}
.rv-saison small{font-family:var(--sans);font-size:var(--txt-xs);font-weight:400;color:var(--texte-2)}
.rv-peu{margin-top:12px;font-size:var(--txt-s)} .rv-peu summary{cursor:pointer;font-weight:700}
.rv-peu ul{margin:8px 0 0;padding-left:20px;display:grid;gap:4px;font-variant-numeric:tabular-nums}
/* Stats > Habitudes des voyageurs : journée type (heure par heure), frise du séjour jour par jour */
.periode.deux{grid-template-columns:repeat(2,auto)}
.hab-titre{margin:18px 0 6px;font-size:var(--txt-m)}
.hab-faits{margin:0;padding-left:1.2em;display:grid;gap:4px;font-size:var(--txt-s);line-height:1.45}
.hab-faits li::marker{color:var(--mer)}
/* Stats > Compte rendu du séjour (compte_rendu.js) : bandeau marine, argent (gain, jauge, parts, cascade), points
   marquants, jour par jour, pièce par pièce, fil du séjour, habitudes */
.cr .cr-choix{margin-bottom:14px}
.cr-bandeau{background:var(--marine);color:var(--creme);border-radius:var(--rayon-m);padding:18px var(--esp-4) 16px;display:grid;gap:8px}
.cr-bandeau small{font-size:var(--txt-xs);letter-spacing:.12em;text-transform:uppercase;color:var(--creme-doux)}
.cr-bandeau h4{font-weight:400;font-size:clamp(1.35rem,4vw,1.9rem);line-height:1.18;color:var(--creme);text-wrap:balance}
.cr-bandeau p{margin:0;font-size:var(--txt-s);color:var(--creme-doux)}
.cr-puces{display:flex;flex-wrap:wrap;gap:6px}
.cr-puces span{border:1px solid rgba(251,247,236,.22);background:rgba(251,247,236,.1);border-radius:var(--rayon-rond);padding:2px 10px;font-size:var(--txt-s)}
.cr-carte{background:var(--carte);border:1px solid var(--trait);border-radius:var(--rayon-m);padding:16px;min-width:0}
.cr-argent{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:14px;margin-top:14px}
@media (max-width:760px){.cr-argent{grid-template-columns:minmax(0,1fr)}}
.cr-gain{display:grid;gap:10px;align-content:start}
.cr-gain > small{font-size:var(--txt-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--texte-2)}
.cr-gain > p{margin:0;font-size:var(--txt-s)}
.cr-montant{font-family:var(--serif);font-weight:400;font-size:clamp(2.3rem,7vw,3.2rem);line-height:1;font-variant-numeric:tabular-nums;
  display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}
.cr-montant.perte{color:var(--cr-alerte)}
.cr-montant span{font-family:var(--sans);font-size:var(--txt-m);color:var(--texte-2)}
.cr-couverture{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.cr-couverture li{display:inline-flex;align-items:baseline;gap:6px;padding:3px 10px;border:1px solid var(--trait);border-radius:var(--rayon-rond);
  font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.cr-couverture li.manque{border-color:var(--cr-note);background:color-mix(in srgb,var(--cr-note) 12%,transparent)}
.cr-jauge{position:relative;height:10px;border-radius:var(--rayon-rond);background:var(--sable);margin-top:4px}
.cr-jauge i{position:absolute;inset:0 auto 0 0;border-radius:var(--rayon-rond);background:var(--cr-1)}
.cr-jauge u{position:absolute;top:-4px;bottom:-4px;width:2px;margin-left:-1px;border-radius:2px;background:var(--texte)}
.cr-jauge-legende{display:flex;justify-content:space-between;gap:8px;font-size:var(--txt-xs);color:var(--texte-2);font-variant-numeric:tabular-nums}
.cr-barre{display:flex;gap:2px;height:20px;margin-top:4px}
.cr-barre span{display:block;min-width:3px}
.cr-barre span:first-child{border-radius:6px 0 0 6px}
.cr-barre span:last-child{border-radius:0 6px 6px 0}
.cr-barre span:only-child{border-radius:6px}
.cr-parts{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 14px;font-size:var(--txt-s)}
@media (max-width:420px){.cr-parts{grid-template-columns:minmax(0,1fr)}}
.cr-parts li{display:flex;align-items:baseline;gap:6px;min-width:0;font-variant-numeric:tabular-nums}
.cr-parts i{flex:none;width:10px;height:10px;border-radius:3px;background:var(--c);transform:translateY(1px)}
.cr-parts small{color:var(--texte-2)}
.cr-cascade{width:100%;border-collapse:collapse;font-size:var(--txt-m);font-variant-numeric:tabular-nums}
.cr-cascade td{padding:6px 0;border-bottom:1px solid var(--trait);vertical-align:top}
.cr-cascade td:last-child{text-align:right;white-space:nowrap;padding-left:12px}
.cr-cascade td small{display:block;font-size:var(--txt-xs);color:var(--texte-2)}
.cr-cascade tr.moins td{color:var(--texte-2)}
.cr-cascade tr.sous td{font-weight:700;border-bottom-color:var(--texte-2)}
.cr-cascade tr.final td{font-weight:700;font-size:var(--txt-l);border-bottom:none;padding-top:10px}
.graph .cr-titre{margin:22px 0 10px;font-size:var(--txt-xl)}
.cr-points{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:10px}
.cr-point{display:grid;gap:6px;align-content:start;border-left:4px solid var(--c)}
.cr-point.ok{--c:var(--cr-ok)} .cr-point.note{--c:var(--cr-note)} .cr-point.alerte{--c:var(--cr-alerte)}
.cr-point h5{margin:0;font-size:var(--txt-m);line-height:1.3;text-wrap:balance}
.cr-point > b{font-family:var(--serif);font-weight:400;font-size:1.6rem;line-height:1.1;font-variant-numeric:tabular-nums}
.cr-point p{margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.cr-etat{justify-self:start;display:inline-flex;align-items:center;gap:5px;padding:2px 10px 2px 8px;border-radius:var(--rayon-rond);
  font-size:var(--txt-micro);font-weight:800;letter-spacing:.05em;text-transform:uppercase;
  color:color-mix(in srgb,var(--c) var(--mix-texte),var(--texte));background:color-mix(in srgb,var(--c) 14%,transparent)}
.cr-etat svg{width:12px;height:12px}
.cr-graphes{display:grid;gap:14px}
.cr-graphes.deux{grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}
.cr-graphe{background:var(--carte);border:1px solid var(--trait);border-radius:var(--rayon-m);padding:14px;min-width:0}
.cr-graphe h5{margin:0;font-size:var(--txt-m)}
.cr-defile{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--carte)}
.cr-pieces{border-collapse:collapse;width:100%;min-width:680px;font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.cr-pieces th{font-size:var(--txt-micro);font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--texte-2);text-align:right;
  padding:10px 10px 6px;border-bottom:1px solid var(--trait);white-space:nowrap}
.cr-pieces td{padding:8px 10px;border-bottom:1px solid var(--trait);text-align:right;white-space:nowrap}
.cr-pieces :is(th,td):first-child{text-align:left;font-weight:700}
.cr-pieces tr:last-child td{border-bottom:none}
.cr-pieces small{margin-left:6px;color:var(--texte-2);font-size:var(--txt-xs)}
.cr-mini{display:inline-block;vertical-align:middle;height:6px;border-radius:var(--rayon-rond);background:var(--cr-1);margin-left:8px}
@media (max-width:600px){
  .cr-pieces{min-width:0}
  .cr-pieces thead{display:none}
  .cr-pieces tr{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 12px;padding:12px 14px;border-bottom:1px solid var(--trait)}
  .cr-pieces tr:last-child{border-bottom:none}
  .cr-pieces td{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:0;border:none;text-align:left;white-space:normal}
  .cr-pieces td::before{content:attr(data-l);font-size:var(--txt-micro);font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--texte-2)}
  .cr-pieces td:first-child{grid-column:1/-1;font-size:var(--txt-m)}
  .cr-pieces td:first-child::before{display:none}
  .cr-pieces small{margin-left:0}
  .cr-pieces .cr-signe.n0{padding-left:0;min-width:0;text-align:left}
}
.cr-signe{display:inline-block;min-width:1.7em;padding:0 7px;border-radius:var(--rayon-rond);font-weight:800;text-align:center}
.cr-signe.n0{color:var(--texte-2)}
.cr-signe.n1{color:color-mix(in srgb,var(--cr-note) var(--mix-texte),var(--texte));background:color-mix(in srgb,var(--cr-note) 14%,transparent)}
.cr-signe.n2{color:color-mix(in srgb,var(--cr-alerte) var(--mix-texte),var(--texte));background:color-mix(in srgb,var(--cr-alerte) 14%,transparent)}
.cr-fil{list-style:none;margin:0;padding:14px 16px 2px;background:var(--carte);border:1px solid var(--trait);border-radius:var(--rayon-m)}
.cr-fil li{display:grid;grid-template-columns:7rem 14px minmax(0,1fr);gap:0 10px;align-items:start;position:relative;padding-bottom:12px;font-size:var(--txt-s)}
.cr-fil li::before{content:"";position:absolute;left:calc(7rem + 16px);top:6px;bottom:-6px;width:2px;background:var(--trait)}
.cr-fil li:last-child::before{display:none}
.cr-fil .cr-quand{text-align:right;color:var(--texte-2);font-size:var(--txt-xs);padding-top:2px}
.cr-fil li > i{position:relative;z-index:1;width:12px;height:12px;margin-top:4px;border-radius:50%;background:var(--c);box-shadow:0 0 0 2px var(--carte)}
@media (max-width:480px){.cr-fil li{grid-template-columns:5.4rem 14px minmax(0,1fr)}.cr-fil li::before{left:calc(5.4rem + 16px)}}
.cr-habitudes{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.cr-habitude{display:grid;gap:2px;background:var(--fond);border-radius:var(--rayon-m);padding:10px 12px}
.cr-habitude b{font-family:var(--serif);font-weight:400;font-size:var(--txt-2xl);line-height:1.15;font-variant-numeric:tabular-nums}
.cr-habitude span{font-size:var(--txt-s);color:var(--texte-2)}
.hab-journee{width:100%;min-width:560px;border-collapse:separate;border-spacing:2px;table-layout:fixed;font-size:var(--txt-xs)}
.hab-journee thead th{font-weight:700;color:var(--texte-2);text-align:left;white-space:nowrap;font-variant-numeric:tabular-nums}
.hab-journee thead th:first-child,.hab-journee tbody th{width:11.5em}
.hab-journee tbody th{text-align:left;font-size:var(--txt-s);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:6px}
.hab-journee td{height:22px;border-radius:4px;background:color-mix(in srgb,var(--c) calc(var(--p,0) * .85%),var(--fond))}
.hab-puce{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:var(--c)}
.hab-table{margin-top:14px}
.hab-table summary{cursor:pointer;font-weight:700;font-size:var(--txt-s);padding:6px 0}
.hab-ligne{cursor:pointer}
.hab-ligne:is(:hover,:focus-visible){background:var(--fond)}
.hab-anciens{margin:8px 0 0}
.hab-frise{position:relative}
.hab-frise svg{display:block;width:100%;height:auto;overflow:visible}
.hab-frise .hab-fond{fill:var(--fond)}
.hab-frise .hab-hors{fill:url(#hab-raye)}
.hab-frise .hab-raye{fill:var(--galet);opacity:.45}
.hab-frise .hab-sortie{fill:var(--galet);opacity:.6}
.hab-frise .hab-barre{fill:var(--c)}
.hab-frise .hab-point{fill:var(--c);stroke:var(--carte);stroke-width:1.5}
.hab-frise .hab-point.faible{fill:var(--carte);stroke:var(--c);stroke-width:2}
.hab-frise g[tabindex]{cursor:pointer;outline:none}
.hab-frise g[tabindex]:focus-visible > *{stroke:var(--focus);stroke-width:2}
.hab-liste li.faible .txt-action{color:var(--texte-2)}
.hab-estimation{margin-top:14px}
/* ===== Plan du logement (3.4.0, js/plan.js) =====
   Dessin commun (éditeur, aperçu des Réglages), éditeur plein écran et carte de Réglages > Logement > Plan du
   logement. Maintenant, Prévisualiser et Stats dessinent la carte de chaleur (js/chaleur.js, règles .chl-*). */
.plg-svg{display:block;max-width:100%;height:auto;font-family:var(--sans);user-select:none;-webkit-user-select:none}
.plg-svg.vue{margin:0 auto;overflow:visible}
.plg-piece rect{fill:color-mix(in srgb,var(--mer) 7%,var(--carte));transition:fill var(--duree-2)}
.plg-piece.choisie rect{fill:color-mix(in srgb,var(--mer) 18%,var(--carte))}
.plg-piece.faute rect{fill:color-mix(in srgb,var(--alerte) 15%,var(--carte))}
.plg-svg.vue .plg-piece rect{fill:var(--sable);stroke-width:3}
.plg-mur{stroke:var(--texte);stroke-linecap:square}
.plg-mur.t-interieur{stroke:var(--texte-2);stroke-width:2.5}
.plg-mur.t-exterieur{stroke-width:7}
.plg-mur.t-mitoyen{stroke:var(--olive);stroke-width:7}
.plg-mur.t-non_chauffe{stroke:var(--galet);stroke-width:7;stroke-dasharray:9 5;stroke-linecap:butt}
.plg-mur.choisi{stroke:var(--focus);stroke-width:9}
.plg-fantome{stroke:var(--galet);stroke-width:2;stroke-dasharray:6 5;fill:none}
.plg-trou{stroke:var(--carte);stroke-width:9}
.plg-vitre{stroke:var(--mer);stroke-width:2}
.o-baie .plg-vitre{stroke-width:2.4}
.plg-battant{stroke:var(--texte-2);stroke-width:2}
.plg-battant.ferme{stroke:var(--texte);stroke-width:3}
.plg-arc{fill:none;stroke:var(--texte-2);stroke-width:1.2;stroke-dasharray:3 3}
.plg-jambage{stroke:var(--texte);stroke-width:3}
/* passage ouvert : une bande lilas, pour ne pas le confondre avec l'embrasure blanche d'une porte (3.4.1) */
.plg-passage{stroke:color-mix(in srgb,var(--lilas) 50%,var(--carte));stroke-width:7}
.plg-ouv.faute .plg-passage{stroke:color-mix(in srgb,var(--alerte) 40%,var(--carte))}
.plg-prise{stroke:transparent;stroke-width:16}
.plg-ouv.choisi :is(.plg-vitre,.plg-battant,.plg-jambage,.plg-vantail,.plg-panneau){stroke:var(--focus);stroke-width:3.5}
.plg-ouv.faute :is(.plg-vitre,.plg-battant,.plg-jambage,.plg-arc,.plg-vantail,.plg-panneau){stroke:var(--alerte)}
/* capteur d'ouverture posé (3.5) : pastille au milieu de l'ouverture, côté dedans, teintée par l'état mesuré */
.plg-capteur circle{fill:var(--carte);stroke:var(--mer);stroke-width:2}
.plg-capteur .coeur{fill:var(--mer);stroke:none}
.plg-capteur.e-ouvert circle:not(.coeur){stroke:var(--alerte);stroke-width:2.6}
.plg-capteur.e-ouvert .coeur{fill:var(--alerte)}
.plg-capteur.e-ferme circle:not(.coeur){stroke:var(--vert)}
.plg-capteur.e-ferme .coeur{fill:var(--vert)}
.plg-capteur.e-inconnu circle:not(.coeur){stroke:var(--galet);stroke-dasharray:.01 4;stroke-linecap:round}   /* 12 points (pathLength 48) */
.plg-capteur.e-inconnu .coeur{fill:var(--galet)}
/* porte qui porte un capteur (3.5) : un seul battant, tracé ouvert, tourné d'un quart de tour jusqu'au mur quand elle est
   fermée (--ferme : angle et sens, posés par planOuvrant) ; ouverte sur dehors, il passe en alerte. Il pivote quand l'état
   change, et s'ouvre depuis le mur quand elle paraît déjà ouverte (même durée et même courbe : rien ne saute) */
.plg-battant.mobile{transform-box:fill-box;transition:transform 1.2s var(--courbe)}
.plg-battant.mobile.ferme{transform:rotate(var(--ferme))}
.plg-ouv.c-ouvert .plg-battant.mobile{animation:battant-ouvre 1.2s var(--courbe)}
.plg-ouv.dehors.c-ouvert .plg-battant{stroke:var(--alerte)}
/* fenêtre ou baie qui porte un capteur (3.5, planVantaux) : repère local de chaque vantail, charnière en 0 0, y vers la
   pièce. Ouverte, les vantaux pivotent vers la pièce puis se balancent doucement (vent) ; en soufflet, un seul s'entrouvre ;
   baie : le panneau de dedans glisse sur l'autre. Porte-fenêtre ouverte : ses traits de vitrage s'effacent */
.plg-vantail,.plg-souffle,.plg-panneau.coulisse{transform-box:view-box;transform-origin:0 0}
.plg-vantail{fill:color-mix(in srgb,var(--mer) 12%,var(--carte));stroke:var(--mer);stroke-width:1.6;
  transition:transform 1.2s var(--courbe),fill .4s,stroke .4s}
.plg-panneau{stroke:var(--mer);stroke-width:2.4;stroke-linecap:round;transition:stroke .4s}
.plg-panneau.coulisse{transition:transform 1.2s var(--courbe),stroke .4s}
.plg-ouv.c-ouvert .plg-vantail{transform:rotate(75deg);animation:vantail-ouvre 1.2s var(--courbe)}
.plg-ouv.c-ouvert.p-soufflet .plg-vantail.premier{transform:rotate(14deg)}
.plg-ouv.c-ouvert.p-soufflet .plg-vantail.second{transform:none;animation:none}
.plg-ouv.c-ouvert:not(.p-soufflet) .plg-souffle{animation:vent 4.6s ease-in-out 1.2s infinite}
.plg-ouv.c-ouvert:not(.p-soufflet) .plg-souffle.second{animation-duration:5.4s}
.plg-ouv.c-ouvert .plg-panneau.coulisse{transform:translateX(var(--glisse));animation:panneau-glisse 1.2s var(--courbe)}
.plg-ouv.c-ouvert.p-soufflet .plg-panneau.coulisse{transform:translateX(calc(var(--glisse) * .3))}
.plg-ouv.dehors.c-ouvert .plg-vantail{fill:color-mix(in srgb,var(--alerte) 14%,var(--carte));stroke:var(--alerte)}
.plg-ouv.dehors.c-ouvert .plg-panneau{stroke:var(--alerte)}
.plg-ouv.capte .plg-vitre{transition:opacity .6s}
.plg-ouv.capte.c-ouvert .plg-vitre{opacity:0}
@keyframes battant-ouvre{from{transform:rotate(var(--ferme))}}
@keyframes vantail-ouvre{from{transform:none}}
@keyframes panneau-glisse{from{transform:none}}
@keyframes vent{0%,100%{transform:none}50%{transform:rotate(-7deg)}}
.plg-capteurs{margin:6px 0 0;padding-left:1.1em;display:grid;gap:4px;font-size:var(--txt-s)}
.plg-capteurs small{color:var(--texte-2)}
.plg-rad rect{fill:var(--carte);stroke:var(--corail-plein);stroke-width:2}
.plg-rad.choisi rect{stroke:var(--focus);stroke-width:3.5}
.plg-rad-nom{fill:var(--texte-2);text-anchor:middle;dominant-baseline:hanging}
.plg-txt{fill:var(--texte);text-anchor:middle;dominant-baseline:central;font-weight:700;paint-order:stroke;
  stroke:color-mix(in srgb,var(--carte) 70%,transparent);stroke-width:3px;stroke-linejoin:round}
.plg-txt.petit{fill:var(--texte-2);font-weight:400}
.plg-txt.grand{font-variant-numeric:tabular-nums}
.plg-boussole circle{fill:var(--carte);stroke:var(--trait);stroke-width:1.5}
.plg-boussole .nord{fill:var(--corail)}
.plg-boussole .sud{fill:var(--galet)}
.plg-boussole text{fill:var(--texte);text-anchor:middle;dominant-baseline:central;font-weight:700}
.plg-boussole.inconnue text{fill:var(--texte-2)}
.plg-soleil circle{fill:var(--soleil);stroke:color-mix(in srgb,var(--soleil) 40%,transparent);stroke-width:6}
.plg-soleil .rayon{stroke:var(--soleil);stroke-width:2;stroke-dasharray:4 4;opacity:.8}
.plg-grille{fill:none;stroke:var(--trait)}
.plg-grille.fine{stroke:color-mix(in srgb,var(--trait) 50%,transparent)}
.plg-trace-rect{fill:color-mix(in srgb,var(--mer) 14%,transparent);stroke:var(--mer);stroke-width:2;stroke-dasharray:6 4}
.plg-trace-mur{stroke:var(--texte);stroke-width:10;stroke-linecap:round;opacity:.75}
.plg-trace-mur.t-mitoyen{stroke:var(--olive)}
.plg-trace-mur.t-non_chauffe{stroke:var(--galet)}
.plg-poignee{fill:var(--carte);stroke:var(--mer);stroke-width:2;cursor:nwse-resize}
/* éditeur plein écran */
.dlg.plg-dlg{width:min(98vw,1440px);max-width:none;height:calc(100dvh - 24px);max-height:none;overflow:hidden}
.plg-dlg[open]{display:flex;flex-direction:column}
.plg-chargement{padding:var(--esp-8)}
.plg-tete{display:flex;align-items:center;gap:var(--esp-3);padding:var(--esp-3) var(--esp-5);border-bottom:1px solid var(--trait)}
.plg-tete h3{margin:0}
.plg-tete > .icone-plg{margin-left:auto}
.plg-pastille{padding:3px 12px;border-radius:var(--rayon-rond);font-size:var(--txt-xs);font-weight:700;
  background:color-mix(in srgb,var(--soleil) 18%,var(--carte));color:color-mix(in srgb,var(--soleil) var(--mix-pastille),var(--texte))}
.plg-pastille[data-etat="ok"]{background:color-mix(in srgb,var(--ok) 16%,var(--carte));color:color-mix(in srgb,var(--ok) var(--mix-pastille),var(--texte))}
.icone-plg{flex:none;width:40px;height:40px;display:inline-grid;place-items:center;border-radius:50%;border:1px solid var(--trait);
  background:var(--carte);color:var(--texte);cursor:pointer;padding:0}
.icone-plg svg{width:20px;height:20px}
.icone-plg:hover:not([disabled]){background:var(--sable)}
.icone-plg[disabled]{opacity:.35;cursor:default}
.plg-corps{flex:1;min-height:0;display:grid;grid-template-columns:auto minmax(0,1fr) minmax(300px,360px)}
.plg-outils{display:flex;flex-direction:column;gap:4px;padding:var(--esp-3) var(--esp-2);border-right:1px solid var(--trait);overflow:auto;background:var(--carte)}
.plg-outils .icone-plg{width:100%;height:42px;display:flex;justify-content:flex-start;gap:10px;padding:0 12px;border-radius:var(--rayon-m);border-color:transparent;background:none}
.plg-outils .icone-plg span{font-size:var(--txt-s);font-weight:700;white-space:nowrap}
.plg-outils .icone-plg[aria-pressed="true"]{background:var(--marine-plein);color:var(--creme);box-shadow:inset 0 0 0 1px var(--marine-plein-trait)}
.plg-zone{position:relative;min-width:0;min-height:0;overflow:hidden;background:var(--fond)}
.plg-svg.edition{width:100%;height:100%;max-width:none;touch-action:none;cursor:default;outline:none}
.plg-svg.edition:is([data-outil="piece"],[data-outil="rect"],[data-outil="mur"],[data-outil="radiateur"],[data-outil="fenetre"],[data-outil="baie"],
  [data-outil="porte_fenetre"],[data-outil="porte_entree"],[data-outil="porte"],[data-outil="passage"],[data-outil="gomme"]){cursor:crosshair}
.plg-svg.edition[data-outil="fond"]{cursor:move}
.plg-niveaux{position:absolute;top:10px;left:10px;display:flex;flex-wrap:wrap;gap:3px;padding:3px;max-width:calc(100% - 20px);
  border-radius:var(--rayon-rond);border:1px solid var(--trait);background:var(--carte);box-shadow:var(--ombre-s)}
.plg-niveaux button{border:0;background:none;border-radius:var(--rayon-rond);padding:5px 12px;font-size:var(--txt-s);font-weight:700;color:var(--texte-2);cursor:pointer}
.plg-niveaux button[aria-selected="true"]{background:var(--marine-plein);color:var(--creme)}
.plg-niveaux .plg-ajout-niv{color:var(--lien)}
.plg-zoom{position:absolute;right:10px;bottom:10px;display:flex;flex-direction:column;gap:6px}
.plg-zoom .icone-plg{box-shadow:var(--ombre-s)}
.plg-aide{position:absolute;left:10px;bottom:10px;max-width:min(480px,calc(100% - 76px));margin:0;padding:8px 12px;border-radius:var(--rayon-m);
  background:color-mix(in srgb,var(--carte) 92%,transparent);box-shadow:var(--ombre-s);font-size:var(--txt-s);color:var(--texte-2);pointer-events:none}
.plg-bulle{position:absolute;z-index:2;transform:translate(-50%,calc(-100% - 16px));padding:4px 10px;border-radius:var(--rayon-rond);
  background:var(--marine-plein);color:var(--creme);font-size:var(--txt-s);font-weight:700;white-space:nowrap;pointer-events:none;font-variant-numeric:tabular-nums}
.plg-panneau{overflow:auto;overscroll-behavior:contain;padding:var(--esp-3);display:flex;flex-direction:column;gap:var(--esp-3);border-left:1px solid var(--trait);background:var(--carte)}
.plg-bloc{background:var(--fond);border:1px solid var(--trait);border-radius:var(--rayon-l);padding:12px 14px}
.plg-bloc > .aide{margin:2px 0 8px}
.plg-bloc p{margin:0 0 6px}
.plg-titre-bloc{display:flex;align-items:center;gap:8px;margin:0 0 8px;font-size:var(--txt-m)}
.plg-titre-bloc i{display:inline-grid;color:var(--texte-2)}
.plg-titre-bloc svg{width:18px;height:18px}
.plg-pbs.ok{border-color:color-mix(in srgb,var(--ok) 55%,var(--trait));background:color-mix(in srgb,var(--ok) 8%,var(--carte))}
.plg-pbs.ko{border-color:color-mix(in srgb,var(--alerte) 55%,var(--trait));background:color-mix(in srgb,var(--alerte) 7%,var(--carte))}
.plg-pbs-tete{font-weight:700;margin:0}
.plg-pbs ul{margin:6px 0 0;padding-left:18px;font-size:var(--txt-s)}
.plg-pbs li.avertissement{color:var(--texte-2)}
.plg-pbs button.lien{display:inline;vertical-align:top;text-align:left;padding:0;margin:0;font-size:inherit;color:inherit;text-decoration:underline;
  text-decoration-color:color-mix(in srgb,currentColor 40%,transparent)}
.plg-champ{margin:10px 0 0}
.plg-champ > label,.plg-label{display:block;font-weight:700;font-size:var(--txt-s);margin:0 0 4px}
.plg-champ input:not([type]),.plg-champ input[type=text],.plg-champ select{width:100%}
.plg-bloc input[type=range]{width:100%;accent-color:var(--mer)}
.plg-cases{display:grid;gap:2px}
.plg-case{display:flex;align-items:center;gap:8px;margin:0;padding:4px 0;font-weight:400;font-size:var(--txt-m);cursor:pointer}
.plg-case small{margin-left:auto;color:var(--texte-2);font-size:var(--txt-xs);text-align:right}
.plg-types{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.plg-type{display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 10px;border:1px solid var(--trait);border-radius:var(--rayon-m);
  background:var(--carte);color:var(--texte);font-size:var(--txt-s);font-weight:700;text-align:left;cursor:pointer}
.plg-type svg{width:20px;height:20px;flex:none}
.plg-type:hover{border-color:var(--mer)}
.plg-type[aria-pressed="true"]{border-color:var(--mer);background:color-mix(in srgb,var(--mer) 14%,var(--carte));box-shadow:inset 0 0 0 1px var(--mer)}
.plg-types.murs{grid-template-columns:minmax(0,1fr)}
.plg-echantillon{width:28px;height:8px;flex:none;border-radius:2px;background:var(--texte)}
.mur-mitoyen .plg-echantillon{background:var(--olive)}
.mur-non_chauffe .plg-echantillon{background:repeating-linear-gradient(90deg,var(--galet) 0 6px,transparent 6px 9px)}
.plg-pas{display:flex;align-items:center;gap:10px}
.plg-segments{--n:2;--c:var(--mer)}
.plg-pas b{min-width:4.5em;text-align:center;font-variant-numeric:tabular-nums}
.plg-modeles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.plg-modele{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 12px;text-align:left;
  border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--carte);color:var(--texte);cursor:pointer}
.plg-modele:hover{border-color:var(--mer)}
.plg-modele i{display:inline-grid;margin-bottom:4px}
.plg-modele svg{width:34px;height:34px;fill:none;stroke:var(--texte);stroke-width:2;stroke-linejoin:round}
.plg-modele b{font-size:var(--txt-m)}
.plg-modele small{font-size:var(--txt-xs);color:var(--texte-2);line-height:1.3}
.plg-orientation{font-size:var(--txt-m)}
.plg-cardinaux{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.plg-deduit summary{cursor:pointer;font-weight:700}
.plg-deduit-piece{margin-top:10px;font-size:var(--txt-s)}
.plg-deduit-piece small{color:var(--texte-2)}
.plg-deduit ul{margin:4px 0 0;padding-left:18px;color:var(--texte-2)}
.plg-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px}
.btn.danger{color:var(--alerte);border-color:color-mix(in srgb,var(--alerte) 55%,var(--trait))}
.btn.danger:hover{background:color-mix(in srgb,var(--alerte) 10%,var(--carte))}
.plg-pied{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:var(--esp-3) var(--esp-5);border-top:1px solid var(--trait);background:var(--carte)}
.plg-modif{flex:1;min-width:8em;font-size:var(--txt-s);color:var(--texte-2)}
.plg-pied .btn[disabled]{cursor:not-allowed}
/* Réglages > Logement > Plan du logement */
.plg-carte-corps{display:grid;grid-template-columns:auto minmax(0,1fr);gap:18px;align-items:center;margin-top:14px;padding:14px 16px;
  background:var(--fond);border:1px solid var(--trait);border-radius:var(--rayon-l)}
.plg-mini{display:grid;place-items:center;min-width:160px;max-width:320px}
.plg-mini.vide{width:120px;min-width:0;color:var(--galet)}
.plg-mini.vide svg{width:64px;height:64px}
.plg-etat{margin:0 0 4px;font-weight:700;display:flex;align-items:baseline;gap:8px}
.plg-etat::before{content:"";flex:none;width:9px;height:9px;border-radius:50%;background:var(--galet);translate:0 -1px}
.plg-etat.ok::before{background:var(--ok)}
.plg-etat.attente::before{background:var(--soleil)}
.plg-carte-texte .aide{margin:0 0 6px}
/* vues Plan : Maintenant (« Cartes | Plan »), Prévisualiser, Stats */
.tete-bloc .plg-bascule{margin-right:auto}
.plg-bascule button{padding:5px 14px;font-size:var(--txt-s)}
.plg-vue-tete{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;margin-bottom:10px}
.periode.plg-niv-vue{grid-template-columns:none;grid-auto-flow:column}
.plg-causes{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:6px}
.plg-causes li{padding:8px 12px;border-radius:var(--rayon-m);border-left:4px solid var(--soleil);background:color-mix(in srgb,var(--soleil) 12%,var(--carte));font-size:var(--txt-s)}
/* capteurs d'ouverture posés (3.5) : ouvertures mesurées ouvertes ou d'état inconnu, sous la carte */
.plg-capteurs-etat li{border-left-color:var(--galet);background:color-mix(in srgb,var(--galet) 10%,var(--carte))}
.plg-capteurs-etat li.alerte,.plg-prev-liste li.alerte{border-left-color:var(--alerte);background:color-mix(in srgb,var(--alerte) 10%,var(--carte))}
.plg-prev-liste li.alerte{padding:4px 10px;border-left:4px solid var(--alerte);border-radius:var(--rayon-m)}
.plg-pied-vue{text-align:center;margin:8px 0 0}
.plg-prev-quand{margin:6px 0;font-weight:700;font-variant-numeric:tabular-nums}
.plg-prev input[type=range],.plg-lecture input[type=range]{width:100%;accent-color:var(--mer)}
.plg-prev-liste{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:4px;font-size:var(--txt-s)}
.plg-prev-liste b{font-variant-numeric:tabular-nums}
.plg-prev .legende{margin-top:10px}
.plg-stats-tete{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:10px}
.plg-lecture{display:flex;align-items:center;gap:12px;margin:4px 0 6px}
.plg-lecture .plg-prev-quand{margin:0;min-width:11.5em;text-align:right;white-space:nowrap}
.plg-mesures{margin-top:12px}
.plg-mesures td.n,.plg-mesures th{white-space:nowrap}
.periode.plg-mesure{grid-template-columns:repeat(2,minmax(0,1fr))}
/* Carte de chaleur (3.4.2, js/chaleur.js) : canevas des couleurs, dessus du plan en SVG (murs, ouvertures, radiateurs,
   ondes), puis bulles, renvois, rose des vents, dehors et légende en HTML, placés par le code sans chevauchement */
.chl-carte{position:relative;overflow:hidden;background:var(--carte);border-radius:var(--rayon-xl);box-shadow:var(--ombre);
  -webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}
.graph .chl-carte{box-shadow:none;border-radius:0}
.chl-toile{position:absolute;left:0;top:0;display:block;pointer-events:none}
.chl-plan{position:absolute}
.plg-svg.chl{width:100%;height:100%;max-width:none;overflow:visible}
.plg-svg.chl :is(.chl-ondes,.chl-murs,.plg-ouvrants,.chl-alertes,.chl-rads){pointer-events:none}
.chl-cible{cursor:pointer}
.chl-cible rect{fill:transparent;transition:fill var(--duree-2) var(--courbe)}
.chl-cible:hover rect,.chl-cible.survol rect{fill:var(--chaleur-survol)}
.chl-carte.inerte .chl-cible{cursor:default;pointer-events:none}
.chl-mur{stroke-linecap:square}
.chl-mur.t-interieur{stroke:var(--texte-2);stroke-width:2.6}
.chl-mur.t-exterieur{stroke:var(--texte);stroke-width:6}
.chl-mur.t-mitoyen{stroke:var(--chaleur-mitoyen);stroke-width:6}
.chl-mur.t-non_chauffe{stroke:var(--galet);stroke-width:6}
.plg-svg.chl .plg-trou{stroke:none}
.plg-svg.chl :is(.o-fenetre,.o-baie,.o-porte_fenetre) .plg-trou{stroke:var(--chaleur-verre);stroke-width:6}
.plg-svg.chl :is(.o-porte,.o-porte_entree) .plg-trou{stroke:color-mix(in srgb,var(--texte-2) 55%,transparent);stroke-width:1}
.plg-svg.chl .o-porte.souvent_ouverte .plg-trou{stroke-dasharray:2.4 2}
.plg-svg.chl .plg-vitre{stroke:var(--mer);stroke-width:1.1}
.plg-svg.chl .o-baie .plg-vitre{stroke-width:1.1}
.plg-svg.chl .plg-ouv.ouverte .plg-trou{stroke:color-mix(in srgb,var(--alerte) 22%,var(--chaleur-verre))}
.plg-svg.chl .plg-ouv.ouverte .plg-vitre{stroke:var(--alerte);stroke-width:1.6}
.plg-svg.chl .plg-battant{stroke:var(--texte-2);stroke-width:1.3}
.plg-svg.chl .plg-battant.ferme{stroke-width:2}
.plg-svg.chl .plg-vantail{stroke-width:1.1}
.plg-svg.chl .plg-panneau{stroke-width:2}
.plg-svg.chl .plg-arc{stroke:var(--texte-2);stroke-width:.8;stroke-dasharray:2 2.4;opacity:.75}
.plg-svg.chl .plg-passage{stroke:var(--lilas);stroke-width:1.2;stroke-dasharray:1.6 3.2;stroke-linecap:round}
.plg-svg.chl .plg-jambage{stroke:var(--texte-2);stroke-width:1.6}
.plg-svg.chl .plg-prise{display:none}
.chl-rad{fill:var(--carte);stroke:var(--corail);stroke-width:1.4}
.chl-rad.chauffe{fill:var(--corail);stroke:var(--carte);stroke-width:1.6}   /* 3.7.8 : détaché d'une pièce rouge (confort) */
.chl-rad.arret{fill:color-mix(in srgb,var(--galet) 35%,var(--carte));stroke:var(--galet)}
.chl-rad.ne_monte_pas{fill:color-mix(in srgb,var(--chaleur-alerte) 14%,var(--carte));stroke:var(--chaleur-alerte);stroke-dasharray:2.4 1.6}
.chl-rad:is(.hors_ligne,.inconnu){fill:var(--sable);stroke:var(--galet);stroke-dasharray:2 2}
.chl-rad.prevu{fill:var(--carte);stroke:var(--texte-2)}
/* chauffe demandée : une onde s'élargit et s'efface depuis le radiateur, une seconde à mi-chemin (même souffle partout) */
.chl-onde{fill:none;stroke:var(--corail);stroke-width:2px;vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;
  --onde:5.5;animation:onde 2.8s var(--courbe) infinite;animation-delay:var(--phase,0ms)}
.chl-alerte{fill:none;stroke:var(--chaleur-alerte);stroke-width:2px;vector-effect:non-scaling-stroke;stroke-dasharray:4 3}
.chl-liens{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.chl-trait{fill:none;stroke:var(--galet);stroke-width:1}
.chl-point{fill:var(--texte);stroke:var(--carte);stroke-width:2}
.chl-calque{position:absolute;inset:0;pointer-events:none}
.chl-calque > *{position:absolute;margin:0}
.chl-calque button{pointer-events:auto;cursor:pointer}
.chl-carte .chl-liens{width:100%;height:100%}
.chl-carte .chl-boussole{width:40px;height:40px}
.chl-bulle{display:flex;flex-direction:column;align-items:center;padding:5px 10px;border:0;border-radius:10px;background:var(--chaleur-bulle);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:var(--chaleur-bulle-ombre);color:var(--texte);text-align:center;white-space:nowrap;line-height:1.2;
  transition:box-shadow var(--duree-2) var(--courbe)}
.chl-titre{display:block;font-size:var(--txt-xs);font-weight:700;line-height:1.25}
.chl-val{display:block;min-width:4.4ch;font-size:var(--txt-l);font-weight:700;line-height:1.15;font-variant-numeric:tabular-nums}
.chl-calque .chl-val.chl-petit{font-size:var(--txt-xs);font-weight:400;color:var(--texte-2)}
.chl-val.chl-etat{font-size:var(--txt-s);color:color-mix(in srgb,var(--c,var(--galet)) var(--mix-texte),var(--texte))}
.chl-rang{display:flex;justify-content:space-between;align-items:baseline;gap:8px;width:100%;font-size:var(--txt-micro);line-height:20px;color:var(--texte-2)}
.chl-rang .chl-val{flex:none;min-width:4.6ch;text-align:right;font-size:var(--txt-m);white-space:nowrap;color:var(--texte)}
.chl-module{min-width:0;overflow:hidden;text-overflow:ellipsis}
.chl-note{display:block;font-size:var(--txt-micro);line-height:1.3;color:var(--texte-2)}
.chl-renvoi{display:block;padding:6px 9px;border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--carte);box-shadow:var(--ombre-s);
  color:var(--texte);text-align:left;white-space:normal;overflow-wrap:anywhere;line-height:1.2;transition:border-color var(--duree-2) var(--courbe)}
.chl-renvoi.libre{width:max-content;max-width:180px}
.chl-renvoi .chl-val{min-width:0;white-space:nowrap}
.chl-renvoi .chl-module{line-height:1.25;overflow:visible}
:is(.chl-bulle,.chl-renvoi):hover{box-shadow:var(--ombre)}
.chl-renvoi:hover{border-color:var(--galet)}
.chl-carte.serre .chl-bulle{padding:4px 7px}
.chl-carte.serre .chl-titre{font-size:var(--txt-micro)}
.chl-carte.serre .chl-val{font-size:var(--txt-m)}
.chl-carte.serre .chl-rang .chl-val{font-size:var(--txt-s)}
.chl-carte.serre .chl-renvoi{padding:5px 8px}
.chl-nom{padding:1px 3px;border:0;background:none;font-size:var(--txt-micro);font-weight:700;line-height:1.2;color:var(--texte-2);white-space:nowrap;
  text-shadow:0 0 3px var(--carte),0 0 2px var(--carte)}
.chl-nom.serre{padding:1px 2px;font-size:.54rem;letter-spacing:-.01em}
.chl-nom.debout{transform:rotate(-90deg)}
.chl-nom.masque{opacity:0}
.chl-nom.masque:focus-visible{opacity:1}
.chl-badge{width:16px;height:16px;border-radius:50%;background:var(--soleil);color:var(--sur-soleil);font-weight:700;font-size:11px;line-height:16px;
  text-align:center;pointer-events:none;box-shadow:0 0 0 2px var(--carte)}
.chl-boussole{overflow:visible}
.chl-boussole .fond{fill:var(--fond);stroke:var(--trait)}
.chl-boussole .nord{fill:var(--corail)}
.chl-boussole .sud{fill:var(--galet)}
.chl-boussole .n{fill:var(--texte);font-size:8px;font-weight:700;text-anchor:middle;dominant-baseline:central}
.chl-boussole .soleil{fill:var(--soleil);stroke:var(--carte);stroke-width:1.5}
.chl-dehors{padding:6px 8px;border-radius:var(--rayon-m);background:var(--fond);border:1px solid var(--trait);text-align:center;line-height:1.2;pointer-events:none}
.chl-dehors span{display:block;font-size:var(--txt-micro);color:var(--texte-2)}
.chl-dehors b{display:block;font-size:var(--txt-l);font-variant-numeric:tabular-nums}
.chl-dehors small{display:block;font-size:var(--txt-micro);line-height:1.25;color:var(--texte-2)}
.chl-signes{display:flex;flex-direction:column;gap:7px;padding:0;list-style:none;font-size:var(--txt-xs);line-height:1.2;color:var(--texte-2);pointer-events:none}
.chl-signes.rangee{flex-direction:row;flex-wrap:wrap;gap:6px 14px}
.chl-signes li{display:flex;align-items:center;gap:8px;white-space:nowrap}
.chl-signe{position:relative;flex:none;display:inline-block;width:22px;height:22px;border-radius:50%}
.chl-signe.chauffe{border:2px solid color-mix(in srgb,var(--corail) 45%,transparent)}
.chl-signe.chauffe::after{content:"";position:absolute;left:4px;top:7px;width:10px;height:4px;border-radius:2px;background:var(--corail)}
.chl-signe.ne_monte_pas{border:2px dashed var(--chaleur-alerte)}
.chl-signe:is(.sans_mesure,.sans_consigne){height:16px;border-radius:3px;border:1px solid color-mix(in srgb,var(--texte-2) 30%,var(--sable));
  background:repeating-linear-gradient(135deg,var(--sable) 0 3px,color-mix(in srgb,var(--texte-2) 45%,var(--sable)) 3px 4px)}
.chl-signe.passage{height:0;border-radius:0;border-top:2px dotted var(--lilas)}
.chl-signe.fenetre{height:0;border-radius:0;border-top:3px solid var(--alerte)}
/* capteurs d'ouverture posés (3.5) : la pastille de leur état, comme sur le plan */
.chl-signe:is(.capteur_ouvert,.capteur_ferme,.capteur_inconnu,.capteur_pose){--c:var(--mer);width:13px;height:13px;margin:0 4.5px;
  border:2px solid var(--c);background:radial-gradient(circle,var(--c) 0 2.2px,var(--carte) 2.7px)}
.chl-signe.capteur_ouvert{--c:var(--alerte)}
.chl-signe.capteur_ferme{--c:var(--vert)}
.chl-signe.capteur_inconnu{--c:var(--galet);border-style:dotted}
.chl-echelle{margin:12px 2px 0}
.chl-echelle:empty{display:none}
.chl-echelle-tete{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:2px 8px;font-size:var(--txt-xs);color:var(--texte-2)}
.chl-echelle-tete b{color:var(--texte)}
.chl-barre{display:block;height:10px;margin-top:6px;border-radius:5px;background-size:100% 100%}
.chl-graduations{position:relative;height:16px;margin-top:4px;font-size:var(--txt-micro);line-height:16px;color:var(--texte-2);font-variant-numeric:tabular-nums}
.chl-graduations span{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap}
.chl-graduations.chl-consignes{height:30px}
.chl-graduations small{display:block;line-height:12px;font-size:var(--txt-micro);text-align:center}
.chl-graduations.chl-consignes span{text-align:center}
.chl-graduations.chl-consignes span:first-child{transform:none;text-align:left}
/* moins d'animations : l'onde, jouée en un instant, reste posée autour du radiateur (une seule) */
@media (prefers-reduced-motion:reduce){
  .chl-onde{opacity:.45;transform:scale(2.6)}
  .chl-onde.deux{display:none}
}
/* fiche d'une pièce (toucher une pièce du plan) : nom, température, état, ce qui se passe, voisines, fiches des modules */
.dlg-piece .piece-corps{display:flex;flex-direction:column;gap:10px;padding:20px var(--esp-5) var(--esp-5)}
.piece-corps h3{padding:4px 46px 0 0;font-size:var(--txt-2xl)}
.piece-temp{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px;margin:0}
.piece-temp b{font-size:2.5rem;line-height:1;font-variant-numeric:tabular-nums}
.piece-temp span{font-size:var(--txt-s);color:var(--texte-2)}
.piece-temp b.piece-sans{font-weight:400;color:var(--texte-2)}
.piece-etat{--t:var(--galet);align-self:flex-start;padding:6px 12px;border-radius:var(--rayon-rond);font-weight:700;font-size:var(--txt-s);
  background:color-mix(in srgb,var(--t) 16%,var(--carte));color:color-mix(in srgb,var(--t) var(--mix-pastille),var(--texte))}
.piece-etat.chauffe{--t:var(--corail)}
.piece-etat.alerte{--t:var(--chaleur-alerte)}
.piece-etat.ok{--t:var(--ok)}
.piece-detail{margin:0;font-size:var(--txt-m);line-height:1.45}
.piece-alertes{margin:0;padding:0;list-style:none;display:grid;gap:6px}
.piece-alertes li{padding:8px 12px;border-radius:var(--rayon-m);border-left:4px solid var(--soleil);background:color-mix(in srgb,var(--soleil) 12%,var(--carte));
  font-size:var(--txt-s)}
.piece-infos{display:grid;grid-template-columns:5.6em minmax(0,1fr);gap:6px 12px;margin:2px 0 0;font-size:var(--txt-s);line-height:1.4}
.piece-infos dt{color:var(--texte-2)}
.piece-infos dd{margin:0;min-width:0;overflow-wrap:anywhere}
.piece-modules{display:grid;gap:2px;margin-top:2px;padding-top:10px;border-top:1px solid var(--trait)}
.piece-modules-tete{margin:0 0 2px;font-size:var(--txt-xs);font-weight:700;color:var(--texte-2)}
/* Stats : ce qui se passe au moment rejoué, en une phrase factuelle */
.chl-instant{margin:12px 0 0;padding:12px 14px;border-radius:var(--rayon-l);background:var(--fond);border:1px solid var(--trait)}
.chl-instant-tete{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 10px}
.chl-instant-tete b{font-family:var(--serif);font-size:var(--txt-l);font-variant-numeric:tabular-nums}
.chl-instant-tete span{font-size:var(--txt-s);color:var(--texte-2)}
.chl-instant p{margin:6px 0 0;font-size:var(--txt-s);line-height:1.45}
@media (max-width:639px){
  .dlg.plg-dlg{width:100%;height:100%;margin:0;border-radius:0}
  .plg-tete{padding:10px 12px}
  .plg-corps{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr) minmax(0,36%)}
  .plg-outils{flex-direction:row;overflow-x:auto;overflow-y:hidden;border-right:0;border-bottom:1px solid var(--trait);padding:6px 8px}
  .plg-outils .icone-plg{flex-direction:column;justify-content:center;gap:2px;width:auto;min-width:62px;height:auto;padding:6px 4px}
  .plg-outils .icone-plg span{font-size:var(--txt-micro)}
  .plg-panneau{border-left:0;border-top:1px solid var(--trait)}
  .plg-aide{font-size:var(--txt-xs);max-width:calc(100% - 70px);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;
    overflow:hidden;cursor:pointer;pointer-events:auto;padding-bottom:0;border-bottom:7px solid transparent}
  .plg-aide.ouverte{display:block}
  .plg-pied{padding:10px 12px calc(10px + env(safe-area-inset-bottom))}
  .plg-pied .btn{padding:8px 14px}
  .plg-modif{order:-1;flex-basis:100%}
  .plg-carte-corps{grid-template-columns:minmax(0,1fr)}
  .plg-mini{max-width:none}
  .plg-lecture{flex-wrap:wrap}
  .plg-lecture input[type=range]{flex:1 1 0;width:auto;min-width:0}
  .plg-lecture .plg-prev-quand{order:-1;flex-basis:100%;min-width:0;text-align:left}
  .periode.plg-mesure{display:grid;width:100%}
}

/* ===== Assistant d'accueil (3.5) : Réglages > Accueil et connaissances, carte « Questions des voyageurs » de
   Maintenant, Stats, bulle de l'assistant de l'hôte et carte QR imprimée (js/accueil.js, js/bulle.js) ===== */
/* pastille d'un libellé (visibilité, urgence, à revérifier, à approuver) : texte mêlé, fond teinté comme les pastilles d'état */
.acc-puce{--c:var(--galet);display:inline-flex;align-items:center;padding:1px 9px;border-radius:var(--rayon-rond);font-size:var(--txt-xs);font-weight:700;
  line-height:1.6;white-space:nowrap;background:color-mix(in srgb,var(--c) 14%,var(--carte));color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte))}
.acc-puce.vis-voyageurs{--c:var(--mer)}
.acc-puce.vis-hote{--c:var(--lilas)}
.acc-puce.revoir,.acc-puce.a-valider{--c:var(--soleil)}
.acc-puce.urgence{--c:var(--corail)}
.acc-note{margin:0;padding:10px 14px;border-radius:var(--rayon-m);font-size:var(--txt-m);
  background:color-mix(in srgb,var(--soleil) 12%,var(--carte));border:1px solid color-mix(in srgb,var(--soleil) 45%,transparent)}
/* --- Base de connaissance : onglets par état, filtres, fiches --- */
.acc-fiches{margin:0 0 20px}
.acc-barre{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 14px;margin:0 0 12px}
.acc-etats{max-width:100%;overflow-x:auto}
.acc-etats button{padding:6px 12px;font-size:var(--txt-s)}
.acc-compte{display:inline-block;margin-left:6px;min-width:1.7em;padding:0 6px;border-radius:var(--rayon-rond);font-size:var(--txt-xs);line-height:1.6;
  text-align:center;background:var(--fond);color:var(--texte-2);font-variant-numeric:tabular-nums}
.acc-compte:empty{display:none}
.acc-etats button[aria-checked="true"] .acc-compte{background:var(--voile-2);color:var(--creme)}
.acc-boutons{display:flex;flex-wrap:wrap;gap:8px}
.acc-import{display:grid;gap:4px;margin:0 0 12px}
.acc-import progress{width:100%;height:6px;accent-color:var(--fanal)}
.acc-import .resultat{margin:0}
/* recherche (dans la page, à chaque lettre, dans toutes les fiches de l'onglet) */
.acc-filtres{display:grid;gap:10px;margin:0 0 12px}
.acc-cherche{position:relative}
.acc-cherche > svg{position:absolute;left:15px;top:50%;width:19px;height:19px;margin-top:-9.5px;color:var(--texte-2);pointer-events:none}
.acc-cherche input[type=search]{padding:11px 46px 11px 44px;border-radius:var(--rayon-rond);background:var(--carte);font-size:var(--txt-l);-webkit-appearance:none;appearance:none}
.acc-cherche input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.acc-effacer{position:absolute;right:4px;top:50%;display:grid;place-items:center;width:40px;height:40px;margin-top:-20px;padding:0;border:0;border-radius:50%;
  background:none;color:var(--texte-2);cursor:pointer}
.acc-effacer:hover{background:var(--sable);color:var(--texte)}
.acc-effacer svg{width:18px;height:18px}
/* picto d'une catégorie (le même que le guide des voyageurs), sur un rond teinté de sa couleur */
.acc-pictos{position:absolute;width:0;height:0;overflow:hidden}
.cat-arrivee_depart{--c:var(--cat-arrivee_depart)} .cat-logement{--c:var(--cat-logement)} .cat-equipements{--c:var(--cat-equipements)}
.cat-chauffage{--c:var(--cat-chauffage)} .cat-dechets{--c:var(--cat-dechets)} .cat-regles{--c:var(--cat-regles)} .cat-securite{--c:var(--cat-securite)}
.cat-urgence{--c:var(--cat-urgence)} .cat-transports{--c:var(--cat-transports)} .cat-restaurants{--c:var(--cat-restaurants)}
.cat-activites{--c:var(--cat-activites)} .cat-alentours{--c:var(--cat-alentours)} .cat-autre{--c:var(--cat-autre)}
.acc-ico{display:inline-grid;flex:none;place-items:center;width:28px;height:28px;border-radius:50%;color:var(--c);background:color-mix(in srgb,var(--c) 14%,var(--carte))}
.acc-ico svg{width:16px;height:16px}
.acc-ico.grand{width:42px;height:42px;border-radius:13px}
.acc-ico.grand svg{width:22px;height:22px}
/* accueil de la base (onglet Validées) : les rubriques en tuiles, comme le guide des voyageurs */
.acc-liste{scroll-margin-top:72px}
.acc-tuiles-tete{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 -6px}
.acc-tuiles-tete h3{margin:0;font:700 var(--txt-m)/1.3 var(--sans);color:var(--texte)}
.acc-tuiles-tete .btn svg{width:16px;height:16px}
.acc-tuiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin:0;padding:0;list-style:none}
.acc-tuiles > li{display:flex;min-width:0}
.acc-tuile{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:6px;width:100%;min-height:128px;
  padding:12px 12px 11px;border:1px solid var(--trait);border-radius:var(--rayon-l);background:var(--carte);color:var(--texte);text-align:left;
  font:inherit;cursor:pointer;overflow:hidden;box-shadow:var(--ombre-s);transition:transform var(--duree-1),box-shadow var(--duree-2),border-color var(--duree-2)}
.acc-tuile::after{content:"";position:absolute;top:-34px;right:-34px;width:92px;height:92px;border-radius:50%;background:var(--c);opacity:.08;pointer-events:none}
.acc-tuile:hover{border-color:color-mix(in srgb,var(--c) 45%,var(--trait));box-shadow:var(--ombre)}
.acc-tuile:active{transform:scale(.98)}
.acc-tuile .acc-ico{margin-bottom:2px}
.acc-tuile-nom{font-weight:700;font-size:var(--txt-l);line-height:1.25;overflow-wrap:anywhere}
.acc-tuile-compte{font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.acc-tuile-etat{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:auto}
.acc-tuile-intro{display:inline-flex;align-items:center;gap:5px;font-size:var(--txt-xs);font-weight:700;color:var(--texte-2)}
.acc-tuile-intro::before{content:"";width:7px;height:7px;border-radius:50%;border:1.5px solid currentColor}
.acc-tuile-intro.ok{color:color-mix(in srgb,var(--ok) 80%,var(--texte))}
.acc-tuile-intro.ok::before{background:currentColor}
.acc-tuile.vide{background:var(--fond);box-shadow:none}
.acc-tuile.vide :is(.acc-tuile-nom,.acc-ico){opacity:.7}
/* fiches à revérifier : un bandeau au-dessus des rubriques */
.acc-revoir-bandeau{display:flex;align-items:center;gap:12px;width:100%;padding:11px 12px 11px 14px;border:1px solid color-mix(in srgb,var(--soleil) 45%,transparent);
  border-radius:var(--rayon-m);background:color-mix(in srgb,var(--soleil) 10%,var(--carte));color:var(--texte);font:inherit;text-align:left;cursor:pointer}
.acc-revoir-bandeau:hover{background:color-mix(in srgb,var(--soleil) 16%,var(--carte))}
.acc-revoir-point{flex:none;width:10px;height:10px;border-radius:50%;background:var(--soleil)}
.acc-revoir-txt{display:grid;flex:1;min-width:0;gap:1px}
.acc-revoir-txt small{font-size:var(--txt-xs);color:var(--texte-2)}
.acc-revoir-bandeau > svg{flex:none;width:18px;height:18px;color:var(--texte-2)}
/* une rubrique ouverte : retour, titre, introduction, fiches */
.acc-rub-tete{display:grid;gap:8px}
.acc-rub-tete.revoir{--c:var(--soleil)}
.acc-retour{display:inline-flex;align-items:center;gap:4px;justify-self:start;min-height:40px;margin:-6px 0 0 -8px;padding:4px 12px 4px 6px;border:0;
  border-radius:var(--rayon-rond);background:none;color:var(--lien);font:700 var(--txt-m)/1 var(--sans);cursor:pointer}
.acc-retour:hover{background:var(--sable)}
.acc-retour svg{width:20px;height:20px}
.acc-rub-titre{display:flex;align-items:center;gap:12px;min-width:0}
.acc-rub-titre h3{flex:1;min-width:0;margin:0;font:700 var(--txt-xl)/1.2 var(--serif);color:var(--texte);overflow-wrap:anywhere}
.acc-rub-compte{flex:none;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.acc-intro{position:relative;display:grid;gap:6px;padding:14px 16px 12px;border:1px solid color-mix(in srgb,var(--c) 30%,var(--trait));
  border-left:4px solid var(--c);border-radius:var(--rayon-l);background:color-mix(in srgb,var(--c) 5%,var(--carte))}
.acc-intro.vide{border-style:dashed;border-left-style:solid;background:var(--fond)}
.acc-intro-etiquette{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:0;font-size:var(--txt-xs);font-weight:700;letter-spacing:.02em;
  text-transform:uppercase;color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte))}
.acc-intro-etiquette .acc-puce{text-transform:none;letter-spacing:0}
.acc-intro-titre{margin:0;font:700 var(--txt-l)/1.3 var(--sans);color:var(--texte);overflow-wrap:anywhere}
.acc-intro-texte{max-height:9.6em;overflow:hidden;font-size:var(--txt-m);overflow-wrap:anywhere;
  -webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent)}
.acc-intro-texte .acc-image img{max-height:220px}
.acc-intro.deplie .acc-intro-texte,.acc-intro.courte .acc-intro-texte{max-height:none;-webkit-mask-image:none;mask-image:none}
.acc-intro-suite{justify-self:start;padding:2px 0;border:0;background:none;color:var(--lien);font:700 var(--txt-s)/1.4 var(--sans);cursor:pointer}
.acc-intro-aide{margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.acc-intro .actions{margin-top:4px;gap:6px}
/* « Réorganiser » : une ligne par rubrique, glissée par sa poignée (toute la ligne à la souris), montée ou descendue */
.acc-ordre-aide{margin:0}
.acc-ordre-liste{position:relative;display:grid;margin:0;padding:0;list-style:none;border:1px solid var(--trait);border-radius:var(--rayon-l);background:var(--carte);overflow:hidden}
.acc-ordre-ligne{display:flex;align-items:center;gap:10px;min-height:56px;padding:6px 8px 6px 4px;background:var(--carte)}
.acc-ordre-poignee{display:grid;flex:none;place-items:center;width:30px;height:44px;margin-right:-6px;padding:0;border:0;border-radius:var(--rayon-s);
  background:none;color:var(--texte-2);cursor:grab;touch-action:none}
.acc-ordre-poignee svg{width:10px;height:17px}
.acc-ordre-poignee:hover,.acc-ordre-poignee:focus-visible{background:var(--fond);color:var(--texte)}
@media (hover:hover) and (pointer:fine){ .acc-ordre-ligne{cursor:grab} }
.acc-ordre-ligne.soulevee{position:relative;z-index:2;border-radius:var(--rayon-m);box-shadow:var(--ombre-l)}
@media (max-width:499px){   /* au téléphone, la place du nom (la poignée en plus des flèches) */
  .acc-ordre-ligne{gap:6px;padding-right:6px}
  .acc-ordre-btn{width:38px;height:38px}
}
@media (max-width:379px){   /* petits téléphones : sans le rang (la place se voit), un nom sans coupure dans un mot */
  .acc-ordre-rang{display:none}
  .acc-ordre-btn{width:36px;height:36px}
}
@media (max-width:339px){ .acc-ordre-nom b{font-size:var(--txt-s)} }
.acc-ordre-ligne + .acc-ordre-ligne{border-top:1px solid var(--trait)}
.acc-ordre-rang{flex:none;min-width:1.6em;font-weight:700;color:var(--texte-2);text-align:right;font-variant-numeric:tabular-nums}
.acc-ordre-nom{display:grid;flex:1;min-width:0}
.acc-ordre-nom b{overflow-wrap:anywhere}
.acc-ordre-nom small{font-size:var(--txt-xs);color:var(--texte-2)}
.acc-ordre-btn{display:grid;flex:none;place-items:center;width:42px;height:42px;padding:0;border:1px solid var(--trait);border-radius:50%;background:var(--carte);
  color:var(--texte);cursor:pointer}
.acc-ordre-btn:hover:not(:disabled){border-color:var(--texte-2);background:var(--sable)}
.acc-ordre-btn:disabled{opacity:.3;cursor:default}
.acc-ordre-btn svg{width:20px;height:20px}
.acc-ordre-actions{margin:0}
/* lien d'une fiche vers une autre (dans le texte d'une fiche) */
.acc-lien-fiche{display:inline;padding:0;border:0;background:none;color:var(--lien);font:inherit;text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.acc-puce.intro{--c:var(--ok)}
.acc-puce.coeur{--c:var(--corail)}
.acc-af-intro{margin-top:14px}
.acc-resume{margin:0 0 10px;font-size:var(--txt-s);color:var(--texte-2)}
:is(.acc-resume,.acc-fiche-meta) span + span::before{content:" · "}
/* liste : un groupe par catégorie (titre, picto, nombre), une ligne par fiche, ouverte sur place */
.acc-liste{display:grid;gap:14px}
.acc-vide{display:grid;justify-items:start;gap:10px;margin:6px 0}
.acc-vide p{margin:0}
.acc-groupe-tete{display:flex;align-items:center;gap:10px;margin:0 0 8px;font:700 var(--txt-m)/1.3 var(--sans);color:var(--texte)}
.acc-groupe-nb{min-width:1.8em;padding:0 7px;border-radius:var(--rayon-rond);background:var(--fond);color:var(--texte-2);font-size:var(--txt-xs);
  line-height:1.7;text-align:center;font-variant-numeric:tabular-nums}
.acc-groupe-liste{border:1px solid var(--trait);border-radius:var(--rayon-l);background:var(--fond);overflow:hidden}
.acc-fiche + .acc-fiche{border-top:1px solid var(--trait)}
.acc-fiche.brouillon{background:color-mix(in srgb,var(--soleil) 6%,var(--fond))}
.acc-l{display:flex;align-items:center;gap:12px;min-height:56px;padding:10px 12px 10px 16px;list-style:none;cursor:pointer;transition:background var(--duree-1)}
.acc-l::-webkit-details-marker{display:none}
.acc-l:hover{background:color-mix(in srgb,var(--sable) 55%,transparent)}
.acc-l:focus-visible{outline-offset:-3px}
.acc-fiche[open] > .acc-l{background:var(--carte)}
.acc-l-txt{display:grid;flex:1;min-width:0;gap:1px}
.acc-l-tete{display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;min-width:0}
.acc-l-titre{min-width:0;font-weight:700;font-size:var(--txt-l);line-height:1.3;overflow-wrap:anywhere}
.acc-fiche.archivee .acc-l-titre{color:var(--texte-2)}
.acc-l-images{display:inline-flex;align-items:center;gap:2px;color:var(--texte-2);font-size:var(--txt-xs);font-weight:700}
.acc-l-images svg{width:16px;height:16px}
.acc-l-cat{font-size:var(--txt-xs);font-weight:700;color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte))}
.acc-l-apercu{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;line-clamp:1;overflow:hidden;font-size:var(--txt-s);color:var(--texte-2);overflow-wrap:anywhere}
.acc-l mark{padding:0 1px;border-radius:3px;background:color-mix(in srgb,var(--soleil) 38%,transparent);color:inherit}
.acc-l-chevron{flex:none;width:18px;height:18px;color:var(--texte-2);transition:transform var(--duree-2) var(--courbe)}
.acc-fiche[open] > .acc-l .acc-l-chevron{transform:rotate(90deg)}
/* fiche ouverte : le texte entier mis en forme, sa source et ses actions */
.acc-f-corps{padding:4px 16px 16px;background:var(--carte)}
.acc-fiche-meta{margin:0 0 8px;font-size:var(--txt-xs);color:var(--texte-2)}
.acc-fiche-texte{margin:0;font-size:var(--txt-m);overflow-wrap:anywhere}
.acc-fiche-texte .acc-image img{max-height:220px}
.acc-fiche-source{margin:8px 0 0;font-size:var(--txt-xs);color:var(--texte-2);overflow-wrap:anywhere}
.acc-f-corps .actions{margin-top:12px;gap:6px}
@media (max-width:720px){
  /* au téléphone, deux tuiles par ligne, comme le guide des voyageurs */
  .acc-tuiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .acc-tuile{min-height:132px}
  .acc-l{padding-left:14px}
  .acc-f-corps{padding:2px 14px 14px}
}
/* --- Page des voyageurs : état, essai de l'adresse, carte QR --- */
.acc-etat-page{display:grid;gap:4px;margin:12px 0 4px;padding:10px 14px;border-radius:var(--rayon-m);background:var(--fond);border:1px solid var(--trait);font-size:var(--txt-s)}
.acc-etat-page p{position:relative;margin:0;padding-left:18px}
.acc-etat-page p::before{content:"";position:absolute;left:2px;top:.55em;width:8px;height:8px;border-radius:50%;background:var(--galet)}
.acc-etat-page p.ok::before{background:var(--ok)}
.acc-etat-page p.ko{color:var(--alerte)}
.acc-etat-page p.ko::before{background:var(--alerte)}
.acc-ligne{display:flex;align-items:center;gap:8px}
.acc-ligne input{flex:1;min-width:0}
.acc-ligne .btn{flex:none;white-space:nowrap}
.acc-etapes{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:4px;font-size:var(--txt-s)}
.acc-etapes li{display:flex;align-items:baseline;gap:8px;overflow-wrap:anywhere}
.acc-etape-ico{flex:none;display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;font-size:var(--txt-xs);font-weight:800;
  color:var(--sur-couleur);background:var(--ok)}
.acc-etapes li.ko .acc-etape-ico{background:var(--alerte)}
.acc-qr-grille{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);gap:20px;align-items:start}
.acc-qr-cote p{margin:0 0 10px;font-size:var(--txt-m)}
.acc-qr-cote .actions{margin:4px 0 8px}
.acc-qr-adresse code{font-family:var(--mono);font-size:var(--txt-s);padding:1px 6px;border-radius:var(--rayon-xs);background:var(--fond);overflow-wrap:anywhere}
/* carte QR : papier blanc et encre marine, à l'écran (aperçu au format A6) comme imprimée ; ses textes suivent sa largeur */
.acc-carte{margin:0;aspect-ratio:105/148;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5%;padding:10% 8%;
  container-type:inline-size;background:var(--papier);color:var(--encre);border:1px solid var(--trait);border-radius:var(--rayon-s);box-shadow:var(--ombre);
  font-family:var(--sans);text-align:center}
.acc-carte-qr{width:80%}
.acc-carte-qr svg{display:block;width:100%;height:auto}
.acc-carte figcaption{display:grid;gap:.2em;line-height:1.2}
.acc-carte-fr{font-family:var(--serif);font-weight:700;font-size:9cqi}
.acc-carte-en,.acc-carte-nl,.acc-carte-de{font-size:6cqi}
.acc-carte-urgence{display:flex;align-items:center;gap:.3em;margin:0;font-weight:800;font-size:9cqi;letter-spacing:.04em}
.acc-carte-urgence svg{width:1em;height:1em}
.carte-qr{display:none}
@media print{
  @page carte{size:A6 portrait;margin:0}
  body.imprime-qr{background:var(--papier)}
  body.imprime-qr > :not(.carte-qr){display:none !important}
  body.imprime-qr .carte-qr{display:block;page:carte}
  .carte-qr .acc-carte{width:105mm;height:148mm;aspect-ratio:auto;padding:12mm 10mm;border:0;border-radius:0;box-shadow:none;
    print-color-adjust:exact;-webkit-print-color-adjust:exact}
  @page affiche{size:A4 portrait;margin:0}
  body.imprime-affiche{background:#fff}
  body.imprime-affiche > :not(.carte-qr){display:none !important}
  body.imprime-affiche .carte-qr{display:block;page:affiche}
}
/* --- affiche A4 des voyageurs (3.6.0) : couleurs fixes (ni thème sombre ni réglages de l'écran), mesures en mm --- */
.acc-affiche{--af-nuit:#13294B;--af-mer:#2C82C9;--af-corail:#E5533D;--af-soleil:#F2A41F;--af-vert:#5F7A22;--af-sable:#FBF4EA;
  box-sizing:border-box;width:210mm;height:297mm;display:flex;flex-direction:column;overflow:hidden;background:#fff;
  color:var(--af-nuit);font-family:var(--sans);line-height:1.25;print-color-adjust:exact;-webkit-print-color-adjust:exact}
.acc-affiche p,.acc-affiche h1,.acc-affiche ol,.acc-affiche ul,.acc-affiche figure{margin:0;padding:0}
.acc-affiche > *{zoom:var(--af-zoom,1)}   /* posé par ajusterAfficheAcc quand le contenu dépasse la page */
.acc-affiche :is(.af-en,.af-nl,.af-de){display:block}
.af-tete{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 60mm;gap:8mm;align-items:center;
  padding:10mm 14mm 14mm;color:#fff;background:linear-gradient(135deg,#13294B 0%,#1D4A80 55%,#2C82C9 100%)}
.af-bienvenue{font-size:8.5pt;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--af-soleil)}
.af-nom{margin-top:3mm !important;font-family:var(--serif);font-size:31pt;font-weight:700;line-height:1.05;color:#fff}
.af-nom::after{content:"";display:block;width:30mm;height:1.3mm;margin-top:4mm;border-radius:1mm;background:var(--af-corail)}
.af-accroche{margin-top:5mm !important;font-family:var(--serif);font-style:italic}
.af-accroche .af-fr{display:block;font-size:16pt;color:#fff}
.af-accroche :is(.af-en,.af-nl,.af-de){margin-top:1mm;font-size:11pt;color:rgba(255,255,255,.82)}
.af-qr{position:relative;display:grid;gap:3mm;padding:4.5mm;border-radius:6mm;background:#fff;color:var(--af-nuit);text-align:center;
  box-shadow:0 2mm 6mm rgba(0,0,0,.25)}
.af-qr-code svg{display:block;width:100%;height:auto}
.af-qr figcaption .af-fr{display:block;font-size:15pt;font-weight:800}
.af-qr figcaption :is(.af-en,.af-nl,.af-de){display:inline;font-size:8pt;color:#45597A}
.af-qr figcaption :is(.af-nl,.af-de)::before{content:" · "}
.af-pastille{position:absolute;left:-21mm;bottom:-7mm;display:grid;place-content:center;width:23mm;height:23mm;border-radius:50%;
  background:var(--af-soleil);color:var(--af-nuit);text-align:center;transform:rotate(-12deg);box-shadow:0 1mm 3mm rgba(0,0,0,.25)}
.af-pastille .af-fr{display:block;font-size:10.5pt;font-weight:800;text-transform:uppercase;letter-spacing:.04em}
.af-pastille :is(.af-en,.af-nl,.af-de){font-size:6.5pt;font-weight:600}
.af-vague{position:absolute;left:0;right:0;bottom:-1px;width:100%;height:9mm;fill:#fff}
.af-etapes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6mm;margin:2mm 14mm 0 !important;list-style:none}
.af-etapes li{display:grid;grid-template-columns:10mm minmax(0,1fr);gap:3mm;align-items:start}
.af-num{display:grid;place-content:center;width:10mm;height:10mm;border-radius:50%;background:var(--af-corail);color:#fff;
  font-size:14pt;font-weight:800}
.af-etapes .af-fr{display:block;font-size:10.5pt;font-weight:700}
.af-etapes :is(.af-en,.af-nl,.af-de){font-size:8pt;color:#45597A}
.af-gratuit{margin:3mm 14mm 0 !important;padding:1.6mm 4mm;border-radius:99px;background:#E8F2FB;color:var(--af-nuit);
  font-size:8pt;font-weight:700;text-align:center}
.af-atouts{flex:1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:center;gap:3.5mm 7mm;
  margin:4mm 14mm 0 !important;list-style:none}
.af-atouts li{display:grid;grid-template-columns:13mm minmax(0,1fr);gap:3.5mm;align-items:center}
.af-ico{display:grid;place-content:center;width:13mm;height:13mm;border-radius:4mm;color:var(--af-c);
  background:color-mix(in srgb,var(--af-c) 14%,#fff)}
.af-ico svg{width:8mm;height:8mm}
.af-c0{--af-c:var(--af-mer)} .af-c1{--af-c:var(--af-corail)} .af-c2{--af-c:#C27C00} .af-c3{--af-c:var(--af-vert)}
.af-atouts .af-fr{display:block;font-size:11pt;font-weight:700}
.af-atouts :is(.af-en,.af-nl,.af-de){font-size:8pt;color:#45597A}
.af-test{display:grid;gap:2mm;margin:4mm 14mm 0;padding:3.5mm 5mm;border-left:2mm solid var(--af-soleil);border-radius:2mm;
  background:var(--af-sable)}
.af-test p .af-fr{display:block;font-size:9.5pt;font-weight:700}
.af-test p :is(.af-en,.af-nl,.af-de){font-size:8pt}
.af-test .af-ia .af-fr{font-size:8pt;font-weight:600}
.af-test .af-ia :is(.af-en,.af-nl,.af-de){font-size:7pt;color:#45597A}
.af-bon{margin:3mm 14mm 2.5mm !important;font-family:var(--serif);font-style:italic;font-size:13pt;color:var(--af-corail);
  text-align:center}
.af-pied{display:grid;grid-template-columns:30mm repeat(4,minmax(0,1fr));gap:4mm;align-items:center;padding:4.5mm 14mm;
  background:var(--af-nuit);color:#fff;border-top:1.5mm solid var(--af-corail)}
.af-pied-titre .af-fr{display:block;font-size:9pt;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--af-soleil)}
.af-pied-titre :is(.af-en,.af-nl,.af-de){font-size:7pt}
.af-numero{display:grid;gap:.6mm}
.af-numero b{font-size:19pt;font-weight:800;line-height:1}
.af-numero span{display:block;font-size:6.8pt;color:rgba(255,255,255,.85)}
/* --- Moteur d'IA : clés, essais, derniers appels --- */
.acc-fournisseurs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px;margin:0 0 18px}
.acc-secret{display:flex;align-items:center;gap:6px}
.acc-secret input{flex:1;min-width:0}
.acc-secret .btn{flex:none}
.acc-test .resultat{margin-top:6px}
.acc-test .aide{margin-top:2px}
.acc-console{white-space:nowrap}
.acc-derniers{list-style:none;margin:16px 0 0;padding:10px 14px;display:grid;gap:4px;border-radius:var(--rayon-m);background:var(--fond);border:1px solid var(--trait);
  font-size:var(--txt-s);color:var(--texte-2)}
.acc-derniers b{color:var(--texte)}
.acc-derniers li.ko{color:var(--alerte)}
.acc-prix{margin-top:10px;gap:8px 16px}
.acc-budget{margin-top:18px}
.acc-depense{margin-top:6px;font-size:var(--txt-s);color:var(--texte-2)}
.acc-depense.ko{color:var(--alerte)}
/* quotas gratuits annoncés par les fournisseurs : une jauge par quota, ambre au-delà du seuil d'alerte */
.acc-quotas{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:10px}
.acc-quotas li{display:grid;gap:4px;font-size:var(--txt-s);color:var(--texte-2)}
.acc-quotas b{color:var(--texte);font-weight:600}
.acc-jauge{position:relative;height:8px;border-radius:99px;background:color-mix(in srgb,var(--trait) 70%,transparent);overflow:hidden}
.acc-jauge i{position:absolute;inset:0 auto 0 0;width:var(--p);border-radius:inherit;background:var(--mer);transition:width .6s cubic-bezier(.2,.8,.2,1)}
.acc-quotas li.proche .acc-jauge i{background:var(--soleil)}
.acc-quotas li.epuise .acc-jauge i{background:var(--alerte)}
.acc-quotas li.epuise{color:var(--alerte)}
/* accès invité : création, puis la liste des codes en cours (le dernier créé mis en avant) */
.acc-invite-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 14px;margin-top:10px}
.acc-invite-form > div{display:grid;gap:4px;min-width:150px;flex:1 1 150px}
.acc-invite-form .btn{flex:none}
.acc-invites{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:8px}
.acc-invites li{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:10px 14px;border-radius:var(--rayon-m);
  background:var(--fond);border:1px solid var(--trait);font-size:var(--txt-s);color:var(--texte-2)}
.acc-invites li.nouveau{border-color:var(--mer);background:color-mix(in srgb,var(--mer) 8%,var(--fond));animation:acc-invite-arrive .5s ease-out}
.acc-code{font:600 var(--txt-l)/1.2 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.08em;color:var(--texte);
  padding:4px 10px;border-radius:8px;background:var(--carte);border:1px dashed var(--trait);user-select:all}
.acc-invite-infos{display:grid;gap:2px;flex:1 1 180px;min-width:0}
.acc-invite-infos b{color:var(--texte)}
.acc-invites .actions{display:flex;gap:6px;margin-left:auto}
@keyframes acc-invite-arrive{from{transform:translateY(-4px);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){ .acc-invites li.nouveau{animation:none} .acc-jauge i{transition:none} }
/* moteurs : les choix des voyageurs à gauche, ceux de l'hôte à droite (dans cet ordre dans la page : une colonne les
   enchaîne, la tabulation aussi) ; « dense » remonte l'hôte en haut de sa colonne */
@media (min-width:721px){
  .acc-moteurs{grid-auto-flow:row dense}
  .acc-moteurs > div:has([data-ac^="ia.voyageurs"]){grid-column:1}
  .acc-moteurs > div:has([data-ac^="ia.hote"]){grid-column:2}
}
@container (max-width:600px){ .rg-rubriques :is(.acc-fournisseurs,.acc-qr-grille,.acc-filtres){grid-template-columns:minmax(0,1fr)} .rg-rubriques .acc-carte{max-width:240px}
  .rg-rubriques .acc-moteurs > div:has([data-ac]){grid-column:auto} }
/* --- fenêtre d'une fiche --- */
.acc-dlg-label{margin-top:12px}
.acc-dlg-deux{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px}
.acc-compteur{display:block;margin-top:2px;text-align:right;font-size:var(--txt-xs);color:var(--texte-2);font-variant-numeric:tabular-nums}
.acc-compteur.ko{color:var(--alerte)}
/* --- éditeur de fiche (3.5.1) : barre d'outils, zone mise en forme, texte brut, images --- */
.dlg.dlg-fiche{width:min(96vw,760px)}
.acc-ed-titre{display:block;font-weight:700;font-size:var(--txt-m);margin-bottom:6px}
.fiche-rendu{line-height:1.5}
.fiche-rendu > :first-child{margin-top:0}
.fiche-rendu > :last-child{margin-bottom:0}
.fiche-rendu :is(p,ul,ol){margin:0 0 .55em}
.fiche-rendu :is(ul,ol){padding-left:1.4em}
.fiche-rendu li + li{margin-top:.15em}
.fiche-rendu h3{margin:.85em 0 .3em;font-size:var(--txt-l);line-height:1.3}
.fiche-rendu a{color:var(--lien);text-decoration:underline;text-underline-offset:2px;overflow-wrap:anywhere}
.acc-image{display:grid;justify-items:start;gap:4px;margin:.6em 0}
.acc-image img{display:block;max-width:100%;height:auto;max-height:340px;border-radius:var(--rayon-s);border:1px solid var(--trait);background:var(--carte)}
.acc-image figcaption{font-size:var(--txt-s);color:var(--texte-2)}
.acc-image.absente img{min-width:120px;min-height:72px;background:repeating-linear-gradient(-45deg,var(--fond) 0 8px,var(--carte) 8px 16px)}
.acc-editeur{position:relative;border:1px solid var(--trait);border-radius:var(--rayon-m);background:var(--fond);overflow:hidden}
.acc-editeur:hover{border-color:color-mix(in srgb,var(--texte-2) 55%,var(--trait))}
.acc-editeur:focus-within{border-color:var(--focus)}
.acc-outils{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding:4px 6px;border-bottom:1px solid var(--trait);background:var(--carte)}
.acc-outil{display:inline-grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--rayon-s);background:none;color:var(--texte-2);cursor:pointer;
  transition:background-color var(--duree-1),color var(--duree-1)}
.acc-outil svg{width:18px;height:18px}
.acc-outil:hover{background:var(--fond);color:var(--texte)}
.acc-outil[aria-pressed="true"]{background:color-mix(in srgb,var(--lien) 14%,transparent);color:var(--lien)}
.acc-outil[disabled]{opacity:.35;cursor:not-allowed;background:none}
.acc-outils-sep{width:1px;height:20px;margin:0 4px;background:var(--trait)}
.acc-outils-fin{flex:1}
.acc-ed{position:relative;min-height:220px;max-height:min(52vh,480px);overflow:auto;padding:12px 14px;scroll-padding:12px 0;outline:none;font-size:var(--txt-m);overflow-wrap:anywhere}
.acc-ed:focus-visible{outline:none}
.acc-ed.vide::before{content:attr(data-vide);position:absolute;left:14px;top:12px;right:14px;color:var(--texte-2);opacity:.8;pointer-events:none}
.acc-ed.depot{background:color-mix(in srgb,var(--lien) 7%,var(--fond));box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--lien) 45%,transparent)}
.acc-editeur textarea.acc-ed-source{display:block;min-height:220px;border:0;border-radius:0;background:var(--fond);font-family:var(--mono);font-size:var(--txt-s);line-height:1.55}
.acc-editeur textarea.acc-ed-source:focus-visible{outline:none}
.acc-ed-envoi{margin:0;padding:6px 14px;border-top:1px solid var(--trait);background:var(--carte);font-size:var(--txt-s);color:var(--texte-2)}
.acc-ed-envoi.ko{color:var(--alerte)}
.acc-ed-image{position:relative;margin:.5em -6px;padding:6px;border-radius:var(--rayon-m);border:1px dashed transparent;user-select:none}
.acc-ed-image:is(:hover,:focus-within){border-color:var(--trait)}
.acc-ed-image img{max-height:280px;pointer-events:none}
.acc-ed-image figcaption{min-width:min(16em,100%);padding:2px 6px;border-radius:var(--rayon-xs);outline:none;user-select:text;cursor:text}
.acc-ed-image figcaption:empty::before{content:attr(data-vide);color:var(--texte-2);opacity:.75}
.acc-ed-image figcaption:focus{background:var(--carte);box-shadow:0 0 0 1px var(--focus)}
.acc-ed-image-outils{position:absolute;top:12px;left:12px;display:flex;gap:2px;padding:2px;border-radius:var(--rayon-s);background:var(--carte);box-shadow:var(--ombre-s);
  opacity:0;transition:opacity var(--duree-1)}
.acc-ed-image:is(:hover,:focus-within) .acc-ed-image-outils{opacity:1}
.acc-ed-image-outils .acc-outil{width:32px;height:32px}
.acc-ed-image-outils .acc-outil[data-fig="retirer"]:hover{color:var(--alerte)}
@media (hover:none){ .acc-ed-image-outils{opacity:1} }
@media (max-width:480px){ .acc-outils{gap:0;padding:4px} .acc-outil{width:32px} .acc-outils-sep{margin:0 2px} }
/* --- Maintenant > Questions des voyageurs : en attente d'abord (urgence en corail), réponse sur place --- */
.bloc-questions .tete-bloc small{color:var(--texte-2);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.bloc-questions.urgent .tete-bloc small{color:var(--alerte);font-weight:700}
.acc-q-liste{display:grid;gap:12px}
.acc-q{--c:var(--mer);padding:14px 16px;border-radius:var(--rayon-xl);background:var(--carte);box-shadow:var(--ombre);border-left:var(--lisere) solid var(--c)}
.acc-q.urgence{--c:var(--corail);background:color-mix(in srgb,var(--corail) 7%,var(--carte))}
.acc-q-tete{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;font-size:var(--txt-s);color:var(--texte-2)}
.acc-q-tete time{font-variant-numeric:tabular-nums}
.acc-q-texte{margin:8px 0 10px;padding:10px 14px;border-radius:var(--rayon-m);background:var(--fond);font-size:var(--txt-l);line-height:1.45;
  white-space:pre-line;overflow-wrap:anywhere}
.acc-q-form label{font-size:var(--txt-s);margin-bottom:4px}
.acc-q-form textarea{min-height:64px}
.acc-q-form .actions{margin-top:8px;gap:8px}
.acc-q-vide{margin:0}
.acc-q-recentes{margin-top:12px}
.acc-q-recentes summary{padding:6px 0;font-weight:700;font-size:var(--txt-m);cursor:pointer}
.acc-q-recentes ul{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:8px}
.acc-q-recentes li{padding:10px 12px;border-radius:var(--rayon-m);background:var(--carte);border:1px solid var(--trait)}
.acc-q-mini{margin:0;font-size:var(--txt-s);color:var(--texte-2);overflow-wrap:anywhere}
.acc-q-rep{margin:4px 0 0;font-size:var(--txt-m);white-space:pre-line;overflow-wrap:anywhere}
.acc-q-pied{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px;margin-top:6px}
.acc-q-pied small{font-size:var(--txt-xs);color:var(--texte-2)}
/* --- Sorties et bons plans (3.6.0) : sources lues, éléments montrés aux voyageurs, repères des idées du jour --- */
.acc-puce.so-evenement{--c:var(--mer)}
.acc-puce.so-bon_plan{--c:var(--corail)}
.acc-puce.so-info{--c:var(--soleil)}
.acc-puce.montre{--c:var(--ok)}
.acc-puce.pas-montre{--c:var(--texte-2)}      /* pas « cache » : cette classe cache l'élément partout */
.acc-puce.vedette{--c:var(--lilas)}
.acc-puce.doute{--c:var(--soleil)}
.acc-so-etat,.acc-so-decouverte{display:grid;gap:10px;margin:14px 0 4px}
.acc-so-etat:empty,.acc-so-decouverte:empty{display:none}
.acc-so-etat > .aide,.acc-so-etat > .actions,.acc-so-decouverte > .aide,.acc-so-decouverte > .acc-note{margin:0}
.acc-so-rejets summary{cursor:pointer;font-size:var(--txt-s);color:var(--texte-2)}
.acc-so-rejets ul{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:6px}
.acc-so-rejets li{display:grid;gap:2px;padding:8px 12px;border-radius:var(--rayon-m);background:var(--fond);font-size:var(--txt-s);color:var(--texte-2);overflow-wrap:anywhere}
.acc-so-rejet-raison{color:var(--texte);font-weight:700}
.acc-so-citation{margin:0;padding:2px 0 2px 10px;border-left:3px solid var(--trait);font-size:var(--txt-s);font-style:italic;color:var(--texte-2);overflow-wrap:anywhere}
.acc-so-sources{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.acc-so-sources li{--c:var(--galet);display:grid;gap:2px;padding:10px 14px;border-radius:var(--rayon-m);background:var(--fond);
  border:1px solid var(--trait);border-left:4px solid var(--c);font-size:var(--txt-s);color:var(--texte-2)}
.acc-so-sources li.ok{--c:var(--ok)}
.acc-so-sources li.ko{--c:var(--alerte)}
.acc-so-sources li.coupee{opacity:.7}
.acc-so-sources b{color:var(--texte);font-size:var(--txt-m)}
.acc-so-sources span.ko{color:var(--alerte);overflow-wrap:anywhere}
.acc-so-appels{font-size:var(--txt-xs);font-variant-numeric:tabular-nums}
.acc-so-ajout{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 12px}
.acc-so-filtres{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;margin:0 0 10px}
.acc-so-liste,.acc-so-idees{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.acc-so-l{--c:var(--mer);display:grid;gap:6px;padding:12px 14px 12px 16px;border-radius:var(--rayon-l);background:var(--carte);box-shadow:var(--ombre);
  border-left:var(--lisere) solid var(--c)}
.acc-so-l.so-bon_plan{--c:var(--corail)}
.acc-so-l.so-info{--c:var(--soleil)}
.acc-so-l.pas-montre{background:var(--fond);box-shadow:none;border:1px dashed var(--trait);border-left:var(--lisere) solid color-mix(in srgb,var(--c) 35%,var(--trait))}
.acc-so-l.pas-montre .acc-so-titre{color:var(--texte-2)}
.acc-so-tete{display:flex;flex-wrap:wrap;gap:4px 6px}
.acc-so-titre{margin:0;font-weight:700;font-size:var(--txt-l);line-height:1.3;overflow-wrap:anywhere}
.acc-so-avantage{margin:0;font-weight:700;color:color-mix(in srgb,var(--corail) var(--mix-pastille),var(--texte))}
.acc-so-infos{margin:0;font-size:var(--txt-s);color:var(--texte-2);overflow-wrap:anywhere}
.acc-so-verif{margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.acc-so-verif.ok{color:color-mix(in srgb,var(--ok) 80%,var(--texte))}
.acc-so-verif.ko{color:var(--alerte)}
.acc-so-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.acc-so-vide{padding:12px 14px;border-radius:var(--rayon-m);background:var(--fond);color:var(--texte-2);font-size:var(--txt-s)}
.acc-so-suite{display:flex;justify-content:center}
.acc-so-idees{gap:8px;margin-top:8px}
.acc-so-idees > li:not(.acc-so-vide){display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 14px;border-radius:var(--rayon-m);
  background:var(--fond);border:1px solid var(--trait)}
.acc-so-idees > li.exclue{background:transparent;border-style:dashed}
.acc-so-idees > li.exclue .acc-so-idee-titre{color:var(--texte-2);text-decoration:line-through}
.acc-so-idee-titre{flex:1 1 200px;min-width:0;font-weight:700;overflow-wrap:anywhere}
.acc-so-reperes{display:flex;flex-wrap:wrap;gap:6px}
.acc-so-repere{min-height:32px;padding:4px 12px;border:1px solid var(--trait);border-radius:var(--rayon-rond);background:var(--carte);color:var(--texte-2);
  font-size:var(--txt-xs);font-weight:700;cursor:pointer}
.acc-so-repere.oui{border-color:color-mix(in srgb,var(--mer) 50%,transparent);background:color-mix(in srgb,var(--mer) 14%,var(--carte));
  color:color-mix(in srgb,var(--mer) var(--mix-pastille),var(--texte))}
.acc-so-repere.choisi{box-shadow:inset 0 0 0 1.5px currentColor}
.acc-so-repere:disabled{opacity:.5;cursor:default}
.acc-so-lieu{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1.6fr) minmax(0,1fr);gap:8px}
.acc-so-jours{display:flex;flex-wrap:wrap;gap:4px 14px;margin:12px 0 0;padding:0;border:0}
.acc-so-jours legend{padding:0;margin-bottom:6px;font-weight:700;font-size:var(--txt-m)}
.acc-so-jours .case{margin-top:0;align-items:center}
.acc-so-jours .case input{margin-top:0}
/* --- Composer ma journée (3.7.0) : sources, liste à revoir, lieux (champs et leur statut, épingle, avis par profil) --- */
.acc-jn-etat{display:grid;gap:10px;margin:8px 0 0}
.acc-jn-etat:empty{display:none}
.acc-jn-etat > .aide,.acc-jn-etat > .acc-note{margin:0}
.acc-jn-sources{grid-template-columns:minmax(0,1fr)}
.acc-jn-sources > li{align-content:start}   /* côte à côte (bureau) : pas de lignes étirées */
.acc-jn-sources .acc-so-citation{margin-top:4px}
.acc-jn-actualiser{margin:10px 0 0}
.acc-jn-revoir,.acc-jn-lieux{list-style:none;margin:8px 0 0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
.acc-jn-revoir>li,.acc-jn-lieux>li{grid-template-columns:minmax(0,1fr)}   /* le tableau des avis défile dans sa carte */
.acc-so-l.acc-jn-r{--c:var(--soleil)}
.acc-so-l.acc-jn-r.etat-ferme{--c:var(--corail)}
.acc-so-l.acc-jn-l.etat-attente{--c:var(--soleil)}
.acc-so-l.acc-jn-l.etat-ecarte,.acc-so-l.acc-jn-l.etat-ferme{--c:var(--galet)}
.acc-puce.pas-propose{--c:var(--galet)}   /* ni « cache » ni « hors » : classes globales de la page */
.acc-jn-raisons{margin:0;padding:0 0 0 18px;display:grid;gap:4px;font-size:var(--txt-s);color:var(--texte-2);overflow-wrap:anywhere}
.acc-jn-champs{display:grid;gap:8px;margin:2px 0 0;padding:10px 12px;border-radius:var(--rayon-m);background:var(--fond);border:1px solid var(--trait)}
.acc-jn-champ{display:grid;gap:2px;min-width:0}
.acc-jn-champ dt{font-size:var(--txt-xs);font-weight:700;color:var(--texte-2);text-transform:uppercase;letter-spacing:.03em}
.acc-jn-champ dd{margin:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 8px;font-size:var(--txt-s);min-width:0}
.acc-jn-valeur{overflow-wrap:anywhere;color:var(--texte)}
.acc-jn-statut{--c:var(--galet);font-size:var(--txt-xs);font-weight:700;color:color-mix(in srgb,var(--c) var(--mix-pastille),var(--texte));white-space:nowrap}
.acc-jn-statut::before{content:"";display:inline-block;width:7px;height:7px;margin-right:5px;border-radius:50%;background:var(--c);vertical-align:1px}
.acc-jn-statut.verifie{--c:var(--ok)}
.acc-jn-statut.fiche{--c:var(--mer)}
.acc-jn-statut.a_confirmer{--c:var(--soleil)}
.acc-jn-lus{flex-basis:100%;font-size:var(--txt-xs);color:var(--texte-2);overflow-wrap:anywhere}
.acc-jn-lus.ko{color:var(--alerte)}
.acc-jn-corrige{margin:0;font-size:var(--txt-s);color:color-mix(in srgb,var(--lilas) var(--mix-pastille),var(--texte));overflow-wrap:anywhere}
.acc-jn-avis{display:grid;grid-template-columns:minmax(0,1fr);gap:6px}
.acc-jn-avis-vide{margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.acc-jn-chiffres{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.acc-jn-chiffres li{--c:var(--galet);display:inline-flex;align-items:baseline;gap:4px;padding:2px 10px;border-radius:var(--rayon-rond);font-size:var(--txt-xs);
  background:color-mix(in srgb,var(--c) 12%,var(--carte));color:var(--texte-2)}
.acc-jn-chiffres b{font-size:var(--txt-s);color:var(--texte);font-variant-numeric:tabular-nums}
.acc-jn-chiffres .av-aime{--c:var(--ok)}
.acc-jn-chiffres .av-pas_interesse{--c:var(--corail)}
.acc-jn-chiffres .av-deja_fait{--c:var(--mer)}
.acc-jn-profils summary{cursor:pointer;font-size:var(--txt-s);color:var(--texte-2)}
.acc-jn-defile{max-width:100%;overflow-x:auto;margin-top:6px}
.acc-jn-table{width:100%;border-collapse:collapse;font-size:var(--txt-xs);font-variant-numeric:tabular-nums}
.acc-jn-table th,.acc-jn-table td{padding:5px 4px;border-bottom:1px solid var(--trait);text-align:right}
.acc-jn-table thead th{font-weight:700;color:var(--texte-2);vertical-align:bottom;line-height:1.25}
.acc-jn-table th[scope="row"]{text-align:left;font-weight:400;color:var(--texte)}
.acc-jn-table tr.dim th{padding-top:10px;text-align:left;font-size:var(--txt-s);font-weight:700;color:var(--texte)}
.acc-jn-epingle{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.acc-jn-epingle-titre{font-size:var(--txt-xs);font-weight:700;color:var(--texte-2);text-transform:uppercase;letter-spacing:.03em;margin-right:2px;flex-basis:100%}
.acc-jn-epingle .acc-so-repere.oui{cursor:default}
.acc-jn-epingle .acc-so-repere.ep-toujours{border-color:color-mix(in srgb,var(--lilas) 50%,transparent);background:color-mix(in srgb,var(--lilas) 14%,var(--carte));
  color:color-mix(in srgb,var(--lilas) var(--mix-pastille),var(--texte))}
.acc-jn-epingle .acc-so-repere.ep-jamais{border-color:color-mix(in srgb,var(--corail) 50%,transparent);background:color-mix(in srgb,var(--corail) 14%,var(--carte));
  color:color-mix(in srgb,var(--corail) var(--mix-pastille),var(--texte))}
.acc-dlg-nom{margin:-4px 0 4px;font-weight:700;overflow-wrap:anywhere}
@media (min-width:700px){
  .acc-jn-sources{grid-template-columns:repeat(2,minmax(0,1fr))}
  .acc-jn-champ{grid-template-columns:9.5em minmax(0,1fr);gap:10px;align-items:baseline}
  .acc-jn-champ dt{text-transform:none;letter-spacing:0;font-size:var(--txt-s);font-weight:400}
  .acc-jn-table{width:auto;min-width:60%}
  .acc-jn-table th,.acc-jn-table td{padding:5px 8px}
  .acc-jn-table th[scope="row"]{white-space:nowrap}
  .acc-jn-epingle-titre{flex-basis:auto}
}
/* --- avis des voyageurs (note, ce qui manque, mots) et erreurs signalées (3.6.0) --- */
.acc-avis{display:grid;gap:10px;margin-top:8px}
.acc-avis:empty{display:none}
.acc-avis > .aide{margin:0}
.acc-avis-notes{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:10px 24px;padding:12px 16px;border-radius:var(--rayon-l);
  background:var(--fond);border:1px solid var(--trait)}
.acc-avis-notes:not(:has(ul)){grid-template-columns:minmax(0,1fr)}
.acc-avis-moyenne{margin:0;font-weight:700;font-size:var(--txt-l)}
.acc-avis-barres{list-style:none;margin:0;padding:0;display:grid;gap:4px;max-width:420px}
.acc-avis-barres li{display:grid;grid-template-columns:5.6em minmax(0,1fr) 2.2em;align-items:center;gap:8px;font-size:var(--txt-s)}
.acc-avis-barres i{height:8px;border-radius:99px;background:linear-gradient(90deg,var(--soleil) var(--p),color-mix(in srgb,var(--trait) 70%,transparent) var(--p))}
.acc-avis-barres b{text-align:right;font-variant-numeric:tabular-nums}
.acc-avis-barres span,.acc-avis-note{color:color-mix(in srgb,var(--soleil) 80%,var(--texte));letter-spacing:1px;white-space:nowrap}
.acc-avis-mots summary,.acc-avis-traites summary{padding:6px 0;font-weight:700;font-size:var(--txt-m);cursor:pointer}
.acc-avis-mots ul{list-style:none;margin:6px 0 0;padding:0;display:grid;gap:8px}
.acc-avis-mots li{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:10px 12px;border-radius:var(--rayon-m);background:var(--carte);
  border:1px solid var(--trait);font-size:var(--txt-s);color:var(--texte-2)}
.acc-avis-mots .acc-q-texte{flex-basis:100%;margin:2px 0 0}
.acc-avis-titre{margin:8px 0 0;font:700 var(--txt-m)/1.3 var(--sans);color:var(--texte)}
.acc-avis-sigs{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.acc-avis-traites .acc-avis-sigs{margin-top:6px}
.acc-avis-sigs li{display:grid;gap:4px;padding:10px 14px;border-radius:var(--rayon-m);background:var(--fond);border:1px solid var(--trait);font-size:var(--txt-s)}
.acc-avis-sigs li.nouveau{border-color:color-mix(in srgb,var(--corail) 50%,var(--trait));background:color-mix(in srgb,var(--corail) 6%,var(--carte))}
.acc-avis-sigs p,.acc-avis-sigs .actions{margin:0}
.acc-avis-sigs .acc-q-texte{margin:2px 0}
.acc-avis-tete{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.acc-avis-tete b{overflow-wrap:anywhere}
.acc-avis-tete time{margin-left:auto;color:var(--texte-2);font-variant-numeric:tabular-nums}
/* --- Stats > Assistant d'accueil --- */
.acc-graph{position:relative;margin:4px 0 8px}
.acc-stats-grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:4px 28px}
.acc-barres .bt-ligne{grid-template-columns:minmax(0,12em) minmax(0,1fr) 2.2em 3em}
.acc-barres .bt-barre i{background:var(--c)}
.acc-frequentes{list-style:none;margin:4px 0 10px;padding:0;display:grid;gap:6px;counter-reset:acc-q}
.acc-frequentes li{display:flex;align-items:center;gap:10px;padding:6px 10px;border-radius:var(--rayon-m);background:var(--fond);font-size:var(--txt-s)}
ol.acc-frequentes li::before{counter-increment:acc-q;content:counter(acc-q);flex:none;min-width:1.4em;color:var(--texte-2);font-weight:700;font-variant-numeric:tabular-nums}
.acc-frequentes li span{flex:1;min-width:0;overflow-wrap:anywhere}
.acc-frequentes li b{font-variant-numeric:tabular-nums}
.acc-moteurs-stats{margin:4px 0 10px;padding-left:18px;font-size:var(--txt-s)}
.stats-accueil .table-sejours td:first-child{white-space:nowrap}
/* --- proposition d'une fiche par l'assistant IA (MCP) : la fiche entière, avant / après --- */
.mcp-fiche{margin-top:10px;padding:10px 12px;border-radius:var(--rayon-m);background:var(--fond);border:1px solid var(--trait)}
.mcp-ordres{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 16px}
.mcp-ordres > .aide{grid-column:1 / -1}
.mcp-ordre{margin:4px 0 0;padding-left:1.6em;font-size:var(--txt-s)}
.mcp-ordre li.change{font-weight:700;color:var(--lien)}
.mcp-fiche .mcp-fiche-action{margin:0 0 6px}
.mcp-fiche dl{margin:0;display:grid;gap:6px}
.mcp-fiche-champ{display:grid;grid-template-columns:7em minmax(0,1fr);gap:8px;font-size:var(--txt-s)}
.mcp-fiche-champ dt{font-weight:700;color:var(--texte-2)}
.mcp-fiche-champ dd{margin:0;overflow-wrap:anywhere}
.mcp-fiche-champ.long dd{max-height:16em;overflow:auto;white-space:pre-line}
.mcp-fiche-champ del{display:block;color:var(--texte-2);text-decoration-color:var(--alerte)}
.mcp-fiche-champ ins{display:block;padding:0 3px;border-radius:var(--rayon-xs);text-decoration:none;background:color-mix(in srgb,var(--vert) 14%,transparent)}
.mcp-fiche-images{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.mcp-fiche-images .acc-image{margin:0;max-width:min(240px,100%)}
.mcp-fiche-images .acc-image img{max-height:200px}
/* --- bulle de l'assistant de l'hôte : bouton rond en bas à droite (au-dessus de la barre « Enregistrer » quand elle
   est là), panneau flottant à droite sur grand écran, plein écran au-dessus des onglets au téléphone --- */
.bulle-btn{position:fixed;right:max(20px,env(safe-area-inset-right));bottom:max(20px,env(safe-area-inset-bottom));z-index:var(--plan-assistant);
  width:56px;height:56px;padding:0;border:0;border-radius:50%;display:grid;place-items:center;cursor:pointer;
  background:var(--marine-plein);color:var(--creme);box-shadow:var(--ombre-l),inset 0 0 0 1px var(--marine-plein-trait);
  transition:translate var(--duree-2) var(--courbe),bottom var(--duree-3) var(--courbe)}
.bulle-btn:hover{translate:0 -2px}
.bulle-btn svg{width:26px;height:26px}
.bulle-ico-fermer{display:none}
.bulle-btn[aria-expanded="true"] .bulle-ico{display:none}
.bulle-btn[aria-expanded="true"] .bulle-ico-fermer{display:block}
.bulle-compte{position:absolute;top:-4px;right:-4px;min-width:22px;height:22px;padding:0 6px;display:grid;place-items:center;border-radius:var(--rayon-rond);
  background:var(--corail-plein);color:var(--sur-couleur);font:800 var(--txt-xs)/1 var(--sans);font-variant-numeric:tabular-nums;box-shadow:0 0 0 2px var(--fond)}
body:has(.barre-save.visible) .bulle-btn{bottom:92px}
.bulle-panneau{position:fixed;z-index:var(--plan-assistant);right:24px;bottom:92px;width:min(400px,calc(100vw - 48px));height:min(640px,calc(100dvh - 116px));
  display:flex;flex-direction:column;overflow:hidden;background:var(--carte);color:var(--texte);border:1px solid var(--trait);border-radius:var(--rayon-xl);box-shadow:var(--ombre-xl)}
body:has(.barre-save.visible) .bulle-panneau{bottom:160px;height:min(640px,calc(100dvh - 184px))}
.bulle-panneau:focus{outline:none}   /* focus donné à l'ouverture sur écran tactile (sans clavier) : pas de cadre */
.bulle-tete{display:flex;align-items:center;gap:10px;padding:10px 8px 10px 14px;background:var(--marine-plein);color:var(--creme)}
.bulle-logo{flex:none;display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--voile-2)}
.bulle-logo svg{width:20px;height:20px}
.bulle-titres{flex:1;min-width:0}
.bulle-titres h2{margin:0;font-size:var(--txt-l);color:var(--creme)}
.bulle-titres small{display:block;font-size:var(--txt-xs);color:var(--creme-doux)}
.bulle-outil{flex:none;display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:50%;background:none;color:var(--creme);cursor:pointer}
.bulle-outil:hover{background:var(--voile-1)}
.bulle-outil[disabled]{opacity:.4;cursor:default}
.bulle-outil svg{width:20px;height:20px}
.bulle-attente{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px 8px 14px;font-size:var(--txt-s);
  background:color-mix(in srgb,var(--corail) 12%,var(--carte));border-bottom:1px solid color-mix(in srgb,var(--corail) 35%,transparent)}
.bulle-attente .btn{flex:none}
.bulle-fil{flex:1;display:flex;flex-direction:column;gap:10px;padding:14px;overflow-y:auto;overscroll-behavior:contain;background:var(--fond)}
.bulle-fil:focus{outline:none}
.bulle-msg{max-width:88%;padding:9px 13px;border-radius:var(--rayon-l);font-size:var(--txt-m);line-height:1.5;overflow-wrap:anywhere}
.bulle-msg p{margin:0}
.bulle-msg :is(p,ul,ol) + :is(p,ul,ol){margin-top:6px}
.bulle-msg :is(ul,ol){margin:0;padding-left:20px}
.bulle-msg code{padding:0 4px;border-radius:var(--rayon-xs);background:var(--sable);font-family:var(--mono);font-size:.9em}
.bulle-msg.user{align-self:flex-end;background:var(--marine-plein);color:var(--creme);border-bottom-right-radius:var(--rayon-xs);white-space:pre-line}
.bulle-msg.assistant{align-self:flex-start;background:var(--carte);border:1px solid var(--trait);border-bottom-left-radius:var(--rayon-xs)}
.bulle-msg.erreur{align-self:stretch;max-width:none;background:color-mix(in srgb,var(--alerte) 9%,var(--carte));border:1px solid color-mix(in srgb,var(--alerte) 40%,transparent)}
.bulle-msg.erreur .btn{margin-top:8px}
.bulle-msg.attente{display:flex;align-items:center;gap:10px;font-size:var(--txt-s);color:var(--texte-2)}
.bulle-msg * + .bulle-titre{margin-top:10px}
.bulle-msg .bulle-sources{margin-top:8px;font-size:var(--txt-xs);color:var(--texte-2)}
.bulle-sources::before{content:"↳ " / ""}
.bulle-meta{display:block;margin-top:6px;text-align:right;font-size:var(--txt-micro);color:var(--texte-2)}
.bulle-fiche{display:grid;justify-items:start;gap:4px;margin-top:10px;padding:10px 12px;border-radius:var(--rayon-m);
  background:color-mix(in srgb,var(--soleil) 9%,var(--fond));border:1px solid color-mix(in srgb,var(--soleil) 45%,transparent)}
.bulle-fiche p{font-size:var(--txt-s);color:var(--texte-2)}
.bulle-points{display:inline-flex;gap:4px}
.bulle-points i{width:7px;height:7px;border-radius:50%;background:var(--texte-2);animation:souffle 1.2s ease-in-out infinite}
.bulle-points i:nth-child(2){animation-delay:.2s}
.bulle-points i:nth-child(3){animation-delay:.4s}
.bulle-accueil{display:grid;gap:12px;font-size:var(--txt-m);color:var(--texte-2)}
.bulle-accueil p{margin:0}
.bulle-idees{display:flex;flex-direction:column;align-items:flex-start;gap:8px}
.bulle-idee{padding:8px 12px;border:1px solid var(--trait);border-radius:var(--rayon-l);background:var(--carte);color:var(--texte);font-size:var(--txt-s);text-align:left;cursor:pointer}
.bulle-idee:hover{border-color:var(--mer);background:color-mix(in srgb,var(--mer) 7%,var(--carte))}
.bulle-saisie{display:flex;align-items:flex-end;gap:8px;padding:10px 12px;border-top:1px solid var(--trait);background:var(--carte)}
.bulle-saisie textarea{flex:1;min-height:44px;max-height:150px;padding:10px 12px;line-height:1.4;resize:none}
.bulle-envoyer{flex:none;display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:50%;background:var(--marine-plein);color:var(--creme);cursor:pointer}
.bulle-envoyer[disabled]{opacity:.45;cursor:wait}
.bulle-envoyer svg{width:20px;height:20px}
@media (max-width:639px){
  .acc-q{padding:12px 12px 12px 14px}
  .acc-q-texte{font-size:var(--txt-m)}
  .acc-dlg-deux{grid-template-columns:minmax(0,1fr)}
  .acc-so-lieu,.acc-so-filtres,.acc-avis-notes{grid-template-columns:minmax(0,1fr)}
  .mcp-fiche-champ{grid-template-columns:minmax(0,1fr);gap:0}
  .bulle-btn{right:14px;bottom:calc(76px + env(safe-area-inset-bottom));width:52px;height:52px}
  body:has(.barre-save.visible) .bulle-btn{bottom:calc(140px + env(safe-area-inset-bottom))}
  body:has(#bulle-btn:not([hidden])) main{padding-bottom:150px}
  body.bulle-ouverte{overflow:hidden}
  body.bulle-ouverte .bulle-btn{display:none}
  .bulle-panneau{inset:0 0 calc(64px + env(safe-area-inset-bottom)) 0;width:auto;height:auto;border:0;border-radius:0;box-shadow:none}
  body:has(.barre-save.visible) .bulle-panneau{bottom:calc(124px + env(safe-area-inset-bottom));height:auto}
  .bulle-tete{padding-top:max(10px,env(safe-area-inset-top))}
  .bulle-msg{max-width:92%}
}
/* Protection contre l'humidité (humidite.js) : bloc « Humidité » de Maintenant, historique d'une pièce, réglages par
   pièce ; la couleur de l'état de la pièce (--c) teinte son filet et son pourcentage */
.bloc-humidite .tete-bloc small{color:var(--texte-2);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.hum-carte{--accent:var(--eau);display:grid;gap:12px}
.hum-dehors{margin:0;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.hum-dehors .badge{margin:0 6px 0 0;--b:var(--galet-plein)}
.hum-dehors .badge[data-mode="auto"]{--b:var(--corail-plein)}
.hum-calme{margin:0;font-size:var(--txt-s)}
.hum-pieces{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.hum-piece{padding:10px 12px;border-radius:var(--rayon-m);border-left:3px solid var(--c);
  background:color-mix(in srgb,var(--c) 8%,var(--carte));min-width:0}
.hum-p-tete{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px}
.hum-p-tete b{font-size:var(--txt-m);overflow-wrap:anywhere}
.hum-etat{font-size:var(--txt-s);font-weight:700;color:color-mix(in srgb,var(--c) 75%,var(--texte))}
.hum-risque{margin-left:auto;font-size:var(--txt-xs);color:var(--texte-2)}
.hum-risque[data-risque="eleve"]{color:var(--alerte);font-weight:700}
.hum-mesures{margin:4px 0 0;font-variant-numeric:tabular-nums}
.hum-mesures small{color:var(--texte-2)}
.hum-hr{font-size:var(--txt-xl);font-weight:800;color:color-mix(in srgb,var(--c) 80%,var(--texte))}
.hum-suite,.hum-dernier,.hum-effet{margin:2px 0 0;font-size:var(--txt-s);color:var(--texte-2);font-variant-numeric:tabular-nums}
.hum-conseil{margin:8px 0 0;font-size:var(--txt-s)}
.hum-conseil b{display:block;font-size:var(--txt-m)}
.hum-action{margin-top:8px;padding:8px 10px;border-radius:var(--rayon-m);font-size:var(--txt-s);
  background:color-mix(in srgb,var(--corail) 12%,transparent)}
.hum-action p{margin:0}
.hum-action .aide{margin-top:4px}
.hum-acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:8px}
.hum-acts small{color:var(--texte-2);font-size:var(--txt-s)}
.hum-pourquoi{margin-top:6px;font-size:var(--txt-s)}
.hum-pourquoi summary{cursor:pointer;color:var(--texte-2);font-weight:600;min-height:32px;display:flex;align-items:center}
.hum-constats,.hum-autres{margin:4px 0 6px;padding:0;list-style:none;display:grid;gap:4px}
.hum-constats li{display:grid;grid-template-columns:7.5em minmax(0,1fr);gap:0 8px;align-items:baseline}
@media (max-width:480px){.hum-constats li{grid-template-columns:minmax(0,1fr)}}
.hum-constats .hum-type{display:inline-block;min-width:7.5em;font-size:var(--txt-xs);font-weight:800;text-transform:uppercase;
  letter-spacing:.05em;color:var(--texte-2)}
.hum-constats li[data-type="hypothese"] .hum-type{color:var(--lilas)}
.hum-constats li[data-type="risque"] .hum-type{color:var(--corail)}
.hum-constats li[data-type="limite"] .hum-type{color:color-mix(in srgb,var(--soleil) var(--mix-pastille),var(--texte))}
.hum-autres li{padding-left:12px;position:relative;color:var(--texte-2)}
.hum-autres li::before{content:"";position:absolute;left:2px;top:.6em;width:4px;height:4px;border-radius:50%;background:currentColor}
.hum-pied{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 12px}
.hum-pied small{color:var(--texte-2);font-size:var(--txt-s);font-variant-numeric:tabular-nums}
.cl-pic.humidite{--c:var(--eau)}     /* chauffage de protection contre l'humidité en cours */
.fiche-ouverture.fiche-humidite{background:color-mix(in srgb,var(--eau) 12%,transparent);border-left-color:var(--eau)}
.dlg-humidite{width:min(96vw,720px);max-height:calc(100dvh - 32px);overflow:auto}
.hum-h-choix{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:10px 16px;margin:10px 0 6px}
.hum-h-choix label{display:block;font-size:var(--txt-s);font-weight:600;margin-bottom:4px}
.hum-graph{min-height:120px}
.hum-graph[aria-busy="true"]{opacity:.55}
.hum-svg{display:block;width:100%;height:auto}
.hum-svg .hum-titre{font-size:12px;font-weight:700;fill:var(--texte-2)}
.hum-svg .hum-axe{font-size:11px;fill:var(--texte-2);font-variant-numeric:tabular-nums}
.hum-svg .hum-grille{stroke:var(--trait);stroke-width:1}
.hum-svg .hum-temps{stroke:var(--trait);stroke-width:1;stroke-dasharray:2 4;opacity:.6}
.hum-svg .hum-seuil{stroke:var(--soleil);stroke-width:1.2;stroke-dasharray:6 4}
.hum-svg .hum-seuil.fort{stroke:var(--alerte)}
.hum-svg .hum-ligne{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.hum-svg .hum-fond-ep{fill:color-mix(in srgb,var(--soleil) 16%,transparent)}
.hum-svg .hum-fond-ch{fill:color-mix(in srgb,var(--corail) 18%,transparent)}
.hum-svg .hum-chauffe{fill:var(--corail)}
.hum-h-evts{margin:10px 0 0;padding-left:18px;font-size:var(--txt-s);display:grid;gap:4px}
.hum-r-titre{margin:18px 0 2px;font-size:var(--txt-l)}
.hum-r-pieces{list-style:none;margin:6px 0 10px;padding:0;display:grid;gap:8px;transition:opacity var(--duree-2)}
.hum-r-pieces.off{opacity:.45;pointer-events:none}
.hum-r-piece{border:1px solid var(--trait);border-radius:var(--rayon-m);padding:8px 12px;background:var(--fond);min-width:0}
.hum-r-piece.hum-r-off .hum-r-seuils{opacity:.5}
.hum-r-tete{display:flex;flex-wrap:wrap;align-items:center;gap:2px 16px}
.hum-r-tete b{flex:1 1 9em;min-width:0;overflow-wrap:anywhere}
.hum-r-seuils{display:grid;grid-template-columns:repeat(auto-fit,minmax(14em,1fr));gap:6px 18px;margin-top:2px}
.hum-r-seuil{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--txt-s);margin:0}

/* ===== revue 3.7.0 (design) ===== */
/* bouton « Haut » (téléphone) : apparaît au-delà de deux écrans de défilement (js/maintenant.js), à gauche de la bulle
   de l'assistant, au-dessus de la barre d'onglets et de la barre Enregistrer */
.btn-haut{position:fixed;left:14px;bottom:calc(76px + env(safe-area-inset-bottom));z-index:var(--plan-assistant);display:none;align-items:center;gap:6px;
  min-height:44px;padding:0 16px 0 12px;border:1px solid var(--trait);border-radius:var(--rayon-rond);background:var(--carte);color:var(--texte);
  box-shadow:var(--ombre);font:700 var(--txt-s) var(--sans);cursor:pointer}
.btn-haut svg{width:18px;height:18px}
@media (max-width:639px){
  .btn-haut.visible{display:inline-flex}
  body:has(.barre-save.visible) .btn-haut{bottom:calc(140px + env(safe-area-inset-bottom))}
}
/* légende des graphiques : « l'an dernier » hachuré (barres) ou en tirets (courbe), en plus du gris (js/stats.js) */
.legende i.hachure{background:repeating-linear-gradient(135deg,var(--c,var(--galet)) 0 2px,color-mix(in srgb,var(--c,var(--galet)) 25%,transparent) 2px 4px)}
/* Réglages rapides : « Installer l'appli » proposé une fois (bandeau fermable, js/appli.js) */
.pr-installer{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 10px;align-items:center;padding:12px 10px 12px 14px;
  border-radius:var(--rayon-m);background:var(--sable);border:1px solid var(--trait)}
.pr-installer p{grid-column:1;margin:0;font-size:var(--txt-s);color:var(--texte-2)}
.pr-installer .btn{grid-column:1;justify-self:start}
.pr-installer .ed-fermer{grid-column:2;grid-row:1 / span 2;margin:0}
/* fenêtre de confirmation partagée (#dlg-confirmer, confirmer() de js/base.js) : le message garde ses paragraphes */
.dlg-cf-texte{margin:8px 0 0;white-space:pre-line;color:var(--texte)}
