/* ============================================================================
   LES REPÈRES — feuille de style du dispositif d'accompagnement
   2026-08-24. Compagnon de `reperes.js`, qui porte le pourquoi de l'ensemble.

   ⚠️ CETTE FEUILLE SE LIE APRÈS `styles.css`, ET CE N'EST PAS UN DÉTAIL DE
   GOÛT. `charte-visuelle.mjs` vérifie la symétrie des deux thèmes en lisant
   `document.styleSheets[0]` — la PREMIÈRE feuille de la page. Passée devant,
   celle-ci deviendrait `styleSheets[0]` et le contrôle mesurerait le mauvais
   fichier : il chercherait les jetons du produit dans une feuille qui ne les
   porte pas. Vérifié le 2026-08-24 dans `charte-visuelle.mjs`, fonction
   `symetrie`.

   ── CE QUI SE POSE SUR LE VOILE NE SUIT PAS LE THÈME ──────────────────────
   Le voile est sombre dans les DEUX thèmes : de jour aussi, c'est lui qui
   éteint l'écran pour ne laisser qu'une chose allumée. Ce qui se pose DESSUS
   (les étiquettes, les traits, l'anneau) garde donc les mêmes valeurs des deux
   côtés — l'orange vif en aplat, l'encre sombre dessus, exactement la
   combinaison mesurée à 6,84:1 par la charte du produit. Les jetons sont quand
   même écrits DANS LES DEUX BLOCS DE THÈME, à la même place et dans le même
   ordre : c'est la règle de styles.css (« tout jeton défini dans l'un l'est
   dans l'autre »), et un jeton présent d'un seul côté tomberait en silence.

   La BULLE, elle, suit le thème : elle appartient à l'application, pas au
   voile. Nuit : `--surface-2` (#17303A) sous `--text` (#E6F0F2). Jour : blanc
   sous `--text` (#0A181C), soit plus de 15:1 — la valeur qu'il faut pour lire
   à bout de bras en plein soleil.

   ── AUCUN `backdrop-filter`, NULLE PART ───────────────────────────────────
   Le corpus `barres-fixes.mjs` le refuse déjà sur les barres qui recouvrent du
   contenu, et pour une bonne raison : une couche de composition de plus à
   chaque défilement sur un téléphone d'entrée de gamme. Un voile opaque coûte
   zéro et se lit mieux au soleil.
   ============================================================================ */

[data-theme="nuit"] {
  /* Le voile. Un peu plus dense de nuit : le fond de l'application est déjà
     sombre, il faut plus d'écart pour que la séparation se voie. */
  --rep-voile:      rgba(2, 6, 8, .82);
  --rep-anneau:     #FF7A18;   /* l'aplat historique — identique dans les deux thèmes */
  --rep-halo:       rgba(255, 122, 24, .34);
  --rep-etiq-fond:  #FF7A18;
  --rep-etiq-encre: #14181C;   /* 6,84:1 sur le vif — la paire mesurée du produit */
  --rep-trait:      #FF7A18;
  --rep-bulle:      #17303A;   /* = --surface-2 côté nuit */
  --rep-bulle-bord: #2E5866;
}
[data-theme="jour"] {
  --rep-voile:      rgba(3, 12, 16, .80);
  --rep-anneau:     #FF7A18;
  --rep-halo:       rgba(255, 122, 24, .38);
  --rep-etiq-fond:  #FF7A18;
  --rep-etiq-encre: #14181C;
  --rep-trait:      #FF7A18;
  --rep-bulle:      #FFFFFF;   /* = --surface côté jour */
  --rep-bulle-bord: #C6D3D6;
}

/* ── LE DISPOSITIF ──────────────────────────────────────────────────────────
   `z-index: 110`. La hiérarchie du produit, relevée dans styles.css :
     · 25  la barre collante des actions du devis
     · 40  la barre du haut
     · 50  la barre du bas
     · 100 les modales — dont `#modaleCatalogue`, où vit le repère 6 : le voile
           doit donc pouvoir passer DEVANT
     · 150 `#modaleDemande`, la question qui attend une réponse
     · 200 le bandeau de confirmation
   Un repère passe devant l'application, jamais devant une question posée à
   l'artisan ni devant un message qui lui répond.
   `#reperes` lui-même n'intercepte rien : ce sont les quatre panneaux qui
   prennent les clics, et le rectangle de la cible reste LIBRE.               */
#reperes {
  position: fixed; inset: 0; z-index: 110;
  pointer-events: none;
}
#reperes[hidden] { display: none; }

/* ── LES QUATRE PANNEAUX ───────────────────────────────────────────────────
   Le voile est découpé en quatre plutôt que creusé d'un `box-shadow` : un
   élément qui porte le trou occuperait le rectangle de la cible et avalerait
   le clic. Ici, rien ne couvre la cible — c'est ce que `reperes.mjs` vérifie
   avec `elementFromPoint`.
   Ils sont cliquables : un appui dessus ferme le repère. C'est le geste
   naturel de quelqu'un qui a compris et veut continuer.                     */
.rep-voile {
  position: fixed;
  background: var(--rep-voile);
  pointer-events: auto;
  animation: rep-entree .18s ease both;
}

/* ── L'ANNEAU ──────────────────────────────────────────────────────────────
   Il ne fait que cercler le trou, il ne le recouvre pas : `pointer-events:
   none` est ce qui garde la cible touchable. Le halo extérieur lui donne son
   épaisseur sans mordre à l'intérieur (`box-shadow` posé vers l'extérieur).  */
.rep-anneau {
  position: fixed;
  /* ⚠️ ÉCRIT ICI, ALORS QUE styles.css POSE DÉJÀ `* { box-sizing: border-box }`.
     Sans lui, la bordure de 3 px s'ajoute AU DEHORS et l'anneau déborde le trou
     de 6 px — mesuré au banc d'essai du 2026-08-24, sur une page où la règle
     globale n'était pas là. Une feuille qui dépend d'un réglage écrit ailleurs
     se casse le jour où on la lit seule. */
  box-sizing: border-box;
  border: 3px solid var(--rep-anneau);
  box-shadow: 0 0 0 5px var(--rep-halo);
  pointer-events: none;
  animation: rep-battement 2.4s ease-out infinite;
}

/* ⛔ IL N'Y A PAS DE MAIN DESSINÉE. B.6 en prévoyait une ; elle a été écrite,
   photographiée au banc du 2026-08-24 à quatre fois la résolution, et retirée :
   à 34 px, entre l'anneau et la bulle, elle se lisait comme un petit peigne, et
   son trait de 1,7 px est le premier à disparaître au soleil. Le voile, l'anneau
   qui bat et la bulle posée juste dessous désignent déjà sans ambiguïté.
   Écart argumenté, capture à l'appui — voir la note dans reperes.js. */

/* ── LA BULLE ──────────────────────────────────────────────────────────────
   ⚠️ C'EST UN `<button>`, ET IL Y A DEUX RAISONS.
   1. Le gant. Viser un « J'ai compris » de 30 px debout sur un chantier, une
      main occupée, c'est le rater. Toute la bulle ferme le repère : la cible
      tactile fait la taille du texte.
   2. La règle du dépôt. `verifierFamilleFermee()` (tous-les-boutons.mjs)
      rougit sur tout texte qui porte « cliquez » sans être dans un bouton —
      et les repères disent « cliquez », puisque l'application le dit.
   `min-height: 56px` : la cible de la charte (`--cible`), écrite ici parce que
   cette feuille peut être lue sans styles.css lors d'un contrôle isolé.      */
.rep-bulle {
  position: fixed;
  display: block; text-align: left;
  min-height: 56px;
  max-width: calc(100vw - 24px);
  background: var(--rep-bulle);
  color: var(--text);
  border: 1px solid var(--rep-bulle-bord);
  border-radius: var(--r, 20px);
  padding: 14px 16px 12px;
  box-shadow: 0 10px 34px rgba(0, 0, 0, .48);
  font-family: inherit;
  pointer-events: auto;
  cursor: pointer;
  animation: rep-entree .22s ease both;
}
.rep-bulle:active { transform: scale(.995); }

.rep-titre {
  display: block;
  font-size: 18px; font-weight: 800; line-height: 1.25;
  color: var(--text);
}
.rep-detail {
  display: block;
  margin-top: 5px;
  font-size: 15px; line-height: 1.4;
  color: var(--text-2);
}
/* « J'ai compris » n'est PAS un bouton imbriqué — un `<button>` dans un
   `<button>` est du HTML invalide et le navigateur le déplace ; le piège a
   déjà été payé sur `#btnJeterDictee`. C'est un `<span>` qui en a l'allure, et
   c'est le bouton parent qui reçoit l'appui. */
.rep-ok {
  display: inline-block;
  margin-top: 12px;
  background: var(--accent-vif);
  color: var(--sur-accent);
  border-radius: var(--r-s, 13px);
  padding: 9px 16px;
  font-size: 15px; font-weight: 700;
}

/* ── LES DEUX ÉTIQUETTES DU REPÈRE 4 ───────────────────────────────────────
   Demande de Cédric le 2026-08-24 : deux chemins d'écriture montrés côte à
   côte, chacun relié par un trait à sa cible. Aplat orange, encre sombre : la
   paire du produit, lisible sur le voile comme au soleil.                    */
.rep-etiq {
  position: fixed;
  background: var(--rep-etiq-fond);
  color: var(--rep-etiq-encre);
  border-radius: var(--r-s, 13px);
  padding: 8px 12px;
  font-size: 15px; font-weight: 800; white-space: nowrap;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .45);
  pointer-events: none;
  animation: rep-entree .22s ease both;
}
.rep-etiq[hidden] { display: none; }

.rep-traits {
  position: fixed; inset: 0;
  pointer-events: none;
  overflow: visible;
}
.rep-traits line {
  stroke: var(--rep-trait); stroke-width: 2.5; stroke-linecap: round;
}

/* ── LES ANIMATIONS ────────────────────────────────────────────────────────
   Discrètes, et coupées net pour qui a demandé moins de mouvement : un artisan
   sujet au mal des transports n'a pas à subir une pulsation pour apprendre où
   se trouve un bouton.                                                       */
@keyframes rep-entree {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}
@keyframes rep-battement {
  0%, 100% { box-shadow: 0 0 0 5px var(--rep-halo); }
  50%      { box-shadow: 0 0 0 11px transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .rep-voile, .rep-bulle, .rep-etiq, .rep-anneau { animation: none; }
}

/* ============================================================================
   LA LISTE DE PRISE EN MAIN — sur l'accueil
   ============================================================================
   Deux formes, deux natures, et la différence se voit sans qu'un mot
   l'explique :
     · `.pem-va`    — une carte pleine : ça se passe AILLEURS, on y va.
     · `.pem-geste` — un filet à gauche, pas de fond : ça se passe LÀ OÙ ON EST,
                      c'est un geste à faire. C'est là que vivent les deux
                      révélations (appui long, glissement), dont le détail EST
                      la consigne tant qu'elles ne sont pas cochées.
     · `.fait`      — plus basse, barrée, muette. Une trace, plus une
                      invitation. Le bloc RÉTRÉCIT à mesure que l'artisan
                      avance : ce qui reste à faire est toujours plus gros que
                      ce qui est fait.
   ============================================================================ */

#listePriseEnMain[hidden] { display: none; }

.pem-lignes { display: grid; gap: var(--e2, 8px); }

.pem-l {
  display: flex; align-items: center; gap: var(--e3, 12px);
  /* Écrit ici pour la même raison que sur `.rep-anneau` : sans lui, le filet de
     4 px de `.pem-geste` s'ajoute à la largeur et la ligne déborde de l'écran à
     droite. Vu au banc du 2026-08-24, sur une page sans la règle globale. */
  box-sizing: border-box;
  width: 100%;
  border-radius: var(--r-s, 13px);
  font-family: inherit;
  text-align: left;
}

/* Les deux formes « à faire » tiennent la cible tactile de la charte. */
.pem-va, .pem-geste { min-height: 56px; padding: 10px var(--e4, 16px); }

.pem-va {
  background: var(--surface);
  border: 1px solid var(--line);
  color: var(--text);
  box-shadow: var(--shadow-s);
  cursor: pointer;
}
.pem-va:active { transform: scale(.995); }

/* La puce : un rond vide, qui dit « pas encore » sans écrire un mot. */
.pem-puce {
  flex: 0 0 auto; width: 20px; height: 20px; border-radius: 50%;
  border: 2px solid var(--accent);
}

.pem-geste {
  background: transparent;
  border: 1px solid var(--line);
  border-left: 4px solid var(--accent-vif);
  color: var(--text);
}

.pem-txt { display: block; min-width: 0; }
.pem-t { display: block; font-size: 16px; font-weight: 700; line-height: 1.3; }
/* Le détail respire sur deux lignes s'il le faut : la consigne de l'appui long
   est la seule chose qui apprend ce geste, elle ne se tronque pas. */
.pem-d { display: block; margin-top: 2px; font-size: 14px; line-height: 1.35;
  color: var(--text-2); }

.pem-l.fait {
  min-height: 40px; padding: 6px var(--e4, 16px);
  color: var(--text-2);
  background: transparent; border: 0;
}
.pem-l.fait .pem-t { font-size: 15px; font-weight: 600; text-decoration: line-through; }
/* ⚠️ L'ENCRE SECONDAIRE, PAS `--ok`. Le vert du produit est un FOND, un filet
   ou une barre — jamais une encre : styles.css le dit en toutes lettres, et
   #2ECC71 sur le fond clair du thème jour ne pèse pas 4,5:1. Le pictogramme
   est de toute façon redondant, le texte barré dit déjà « c'est fait ». */
.pem-l.fait .ic { color: var(--text-2); flex: 0 0 auto; }

/* ── GRAND ÉCRAN ───────────────────────────────────────────────────────────
   Sur ordinateur, la liste se met en deux colonnes : six lignes empilées sur
   1 200 px de large font une colonne maigre au milieu d'un désert. */
@media (min-width: 1024px) {
  .pem-lignes { grid-template-columns: 1fr 1fr; }
  .pem-l.fait { grid-column: auto; }
}
