/* ═══ Rapport avant de signer — V2 ═══ */

.rapport {
  margin-top: 1.1rem;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 18px;
  padding: 1.8rem;
  box-shadow: var(--shadow-md);
}
.rapport[hidden] { display: none; }
.rapport .rhead {
  display: flex; justify-content: space-between; align-items: baseline; gap: 1rem;
  flex-wrap: wrap; margin-bottom: 1.2rem;
}
.rapport .rhead h3 {
  font-family: "General Sans", system-ui, sans-serif; font-weight: 700;
  font-size: 1.5rem; letter-spacing: -.02em; margin: 0;
}
.rapport .rhead .radresse { font-size: .85rem; color: var(--ink-soft); }
.rapport .rprint {
  font: 500 .82rem "General Sans", sans-serif; color: var(--ink);
  background: none; border: 1px solid var(--line); border-radius: 8px;
  padding: .32rem .85rem; cursor: pointer; transition: border-color .2s;
}
.rapport .rprint:hover { border-color: var(--accent); }

/* Le dossier PDF : action principale du rapport ; « Imprimer » reste à côté,
   en second recours (il marche même quand le moteur de rendu manque). */
.rapport .ractions { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.rapport .rpdf {
  font: 600 .85rem "General Sans", sans-serif; color: #17181c;
  background: var(--accent); border: 1px solid rgba(184, 71, 0, .55); border-radius: 8px;
  padding: .42rem 1rem; cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), var(--shadow-sm);
  transition: box-shadow .2s;
}
.rapport .rpdf:hover { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), 0 8px 24px rgba(255, 107, 26, .25); }
.rapport .rpdf[disabled] { cursor: progress; opacity: .65; box-shadow: none; }
.rapport .rpdfmsg {
  flex-basis: 100%; margin: .35rem 0 0; font-size: .85rem; color: var(--ink-soft);
}
.rapport .rpdfmsg[hidden] { display: none; }
.rapport .rpdfmsg.rpdfko { color: var(--accent-ink); }
@media (prefers-reduced-motion: reduce) { .rapport .rpdf { transition: none; } }

/* Bandeau des sources en échec */
.rfail {
  border: 1px solid rgba(184, 71, 0, .35);
  background: rgba(255, 107, 26, .07);
  border-radius: 11px; padding: .75rem 1rem; margin-bottom: 1.1rem;
  font-size: .95rem; color: var(--accent-ink);
}
.rfail b { display: block; margin-bottom: .2rem; font-size: 1rem; }
.rfail ul { margin: 0; padding-inline-start: 1.1rem; }

/* Sections */
.rsec { border-top: 1px solid var(--line); padding: 1.1rem 0; }
.rsec:last-of-type { padding-bottom: .3rem; }
.rsec .rtag {
  font-family: var(--mono); font-size: .68rem; font-weight: 600;
  letter-spacing: .2em; text-transform: uppercase; color: var(--accent-ink);
  margin-bottom: .55rem;
}
.rsec p { font-size: 1rem; margin: .3rem 0; }
.rsec .rmuted { color: var(--ink-soft); font-size: .92rem; }
.rkv { display: flex; flex-wrap: wrap; gap: .4rem .5rem; margin: .4rem 0 .6rem; }
.rkv span {
  font-family: var(--mono); font-size: .78rem;
  border: 1px solid var(--line); border-radius: 8px; padding: .28rem .7rem; background: var(--paper);
}
.rkv span b { color: var(--accent-ink); font-weight: 600; }
.rbig {
  font-family: "General Sans", system-ui, sans-serif; font-weight: 700; font-size: 2rem;
  letter-spacing: -.02em; font-variant-numeric: tabular-nums;
}
.rbig small { font-size: .85rem; font-weight: 500; color: var(--ink-soft); letter-spacing: 0; }
.rlinks { display: flex; flex-wrap: wrap; gap: .45rem; margin-top: .55rem; }
.rlinks a {
  font-size: .82rem; font-weight: 500; text-decoration: none; color: var(--accent-ink);
  border: 1px solid var(--line); border-radius: 8px; padding: .3rem .8rem;
  transition: border-color .2s, background .2s;
}
.rlinks a:hover { border-color: var(--accent); background: rgba(255, 107, 26, .08); }

/* Tableau des ventes */
.rtablewrap { overflow-x: auto; margin-top: .5rem; }
.rtable { width: 100%; border-collapse: collapse; font-size: .92rem; }
.rtable th {
  text-align: left; font-family: var(--mono); font-size: .66rem; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink-soft);
  padding: .4rem .6rem; border-bottom: 1px solid var(--line-strong);
}
.rtable td {
  padding: .42rem .6rem; border-bottom: 1px solid var(--line);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.rtable td.he { text-align: right; }
.rtable td.num { text-align: right; }
.rtable tr:last-child td { border-bottom: none; }

/* Liste des plans */
.rplans { margin: .4rem 0 0; padding: 0; list-style: none; }
.rplans li {
  display: flex; flex-wrap: wrap; gap: .3rem .7rem; align-items: baseline;
  padding: .45rem 0; border-bottom: 1px solid var(--line); font-size: .86rem;
}
.rplans li:last-child { border-bottom: none; }
.rplans .pnum { font-family: var(--mono); font-size: .76rem; color: var(--accent-ink); }
.rplans .pstat { font-family: var(--mono); font-size: .72rem; color: var(--ink-soft); }
.rplans a { font-size: .78rem; color: var(--accent-ink); }

.rfoot {
  border-top: 1px solid var(--line); margin-top: 1rem; padding-top: .8rem;
  font-family: var(--mono); font-size: .72rem; color: var(--ink-soft);
}

/* Chargement animé */
.rloading { display: flex; align-items: center; gap: .8rem; padding: 1.4rem 0; font-size: .9rem; color: var(--ink-soft); }
.rloading .dot {
  width: 9px; height: 9px; border-radius: 50%; background: var(--accent);
  animation: rpulse 1s ease-in-out infinite;
}
.rloading .dot:nth-child(2) { animation-delay: .18s; }
.rloading .dot:nth-child(3) { animation-delay: .36s; }
@keyframes rpulse { 0%, 100% { transform: scale(.7); opacity: .4; } 50% { transform: scale(1.15); opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .rloading .dot { animation: none; } }

/* Bouton primaire du rapport dans la barre de recherche */
.searchrow button.primary {
  background: var(--accent); color: #17181c; border-color: rgba(184, 71, 0, .55);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), var(--shadow-sm);
}
.searchrow button.primary:hover { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), 0 8px 24px rgba(255, 107, 26, .25); }
.searchrow button[disabled] { opacity: .6; cursor: wait; }

/* Mini-calculateur mashkanta (carte 05) — local, aucun appel réseau */
.mashcalc { border-top: 1px solid var(--line); margin-top: .9rem; padding-top: .8rem; }
.mashcalc .mrow { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: .4rem; }
.mashcalc label { display: block; font-family: var(--mono); font-size: .62rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: .2rem; }
.mashcalc input {
  width: 100%; font: 500 .86rem "General Sans", sans-serif; color: var(--ink);
  background: var(--paper); border: 1px solid var(--line-strong); border-radius: 8px;
  padding: .4rem .55rem; outline: none;
}
.mashcalc input:focus { border-color: var(--accent); }
.mashcalc .mres { margin-top: .6rem; font-size: .86rem; }
.mashcalc .mres b { font-family: "General Sans", system-ui, sans-serif; font-size: 1.05rem; font-variant-numeric: tabular-nums; color: var(--accent-ink); }
.mashcalc .mnote { font-family: var(--mono); font-size: .66rem; color: var(--ink-soft); margin-top: .3rem; }

/* ═══ Rapport 100 % français : hébreu en petit, boutons copier, guides, manuel ═══ */

/* L'hébreu original en petit À CÔTÉ du français — jamais l'inverse */
.hesmall { font-size: .78em; color: var(--ink-soft); }
.nontrad { font-size: .74em; color: var(--ink-soft); font-style: italic; }

/* Encart « Relevé manuel » — ce n'est PAS un échec, pas de rouge */
.rmanual {
  border: 1px solid var(--line-strong);
  background: var(--paper);
  border-radius: 11px; padding: .8rem 1rem; font-size: .95rem;
}
.rmanual > b { display: block; margin-bottom: .25rem; }
.rmanual ol { margin: .4rem 0 .2rem; padding-inline-start: 1.2rem; }
.rmanual ol li { margin: .25rem 0; }

/* Guides français dépliables sous les liens externes */
.rguide { margin-top: .5rem; font-size: .95rem; }
.rguide summary {
  cursor: pointer; color: var(--accent-ink); font-weight: 500;
  list-style-position: inside;
}
.rguide summary:hover { text-decoration: underline; }
.rguide ol { margin: .4rem 0 .2rem; padding-inline-start: 1.4rem; }
.rguide ol li { margin: .25rem 0; color: var(--ink); }

/* ═══ Suggestions d'adresses (phonétique française → hébreu) ═══ */
.searchrow { position: relative; }
.suggbox {
  position: absolute; z-index: 40;
  background: #fff; border: 1px solid var(--line); border-radius: 12px;
  box-shadow: var(--shadow-md); overflow: hidden auto; max-height: 21rem;
  animation: sugg-in .16s ease-out;
}
.suggbox[hidden] { display: none; }
@keyframes sugg-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .suggbox { animation: none; } }
.sugg-etat { padding: .8rem 1rem; font-size: .88rem; color: var(--ink-soft); }
/* L'aveu de panne : le titre d'abord, puis pourquoi ce n'est pas la faute du
   visiteur, puis ce qu'il peut faire, puis depuis quand ça dure. */
.sugg-aveu { display: flex; flex-direction: column; gap: .3rem; line-height: 1.45; }
.sugg-aveu b { color: var(--ink); font-weight: 600; }
.sugg-depuis { font-size: .8rem; font-family: var(--mono); }
/* Le français reste sous les yeux : les libellés officiels sont souvent en hébreu. */
.sugg-tape {
  padding: .5rem 1rem; font-size: .82rem; color: var(--ink-soft);
  background: var(--paper-soft); border-bottom: 1px solid var(--line);
}
.sugg-tape b { color: var(--ink); font-weight: 600; }
/* Consigne des lignes « orthographe proche » : écrite une fois, en tête de la boîte. */
.sugg-avert {
  padding: .5rem 1rem; font-size: .8rem; line-height: 1.45; color: var(--accent-ink);
  background: var(--paper-soft); border-bottom: 1px solid var(--line);
}
.sugg-opt {
  display: flex; justify-content: space-between; align-items: center; gap: 1rem;
  padding: .6rem 1rem; cursor: pointer; border-bottom: 1px solid var(--line);
}
.sugg-opt:last-child { border-bottom: none; }
.sugg-opt:hover, .sugg-opt.actif { background: rgba(255, 107, 26, .07); }
.sugg-meta { display: flex; flex-direction: column; gap: .18rem; align-items: flex-start; flex-shrink: 0; }
.sugg-badge {
  font-family: var(--mono); font-size: .62rem; font-weight: 600; letter-spacing: .1em;
  text-transform: uppercase; color: var(--accent-ink);
  border: 1px solid var(--line-strong); border-radius: 6px; padding: .12rem .45rem; background: var(--paper);
}
.sugg-badge-rue, .sugg-badge-ville { color: var(--ink-soft); }
.sugg-badge-proche { color: var(--ink-soft); } /* « orthographe proche » : la graphie tapée diffère du libellé officiel */
.sugg-he { font-size: 1.15rem; font-weight: 600; text-align: right; direction: rtl; }
/* Suggestion latine (« Sderot Rothschild 12 Hadera ») : la règle auteur ci-dessus
   l'emporterait sur l'attribut dir="ltr" posé par suggest.js → on la lève ici. */
.sugg-he[dir="ltr"] { direction: ltr; text-align: left; }

/* ═══ « Ce que ça veut dire pour vous » — la ligne novice de chaque section ═══ */
.rpourvous {
  border-inline-start: 3px solid var(--accent);
  padding-inline-start: .7rem;
  font-size: .92rem; color: var(--ink-soft); margin: .35rem 0 .6rem;
}
.rpourvous b { color: var(--ink); font-weight: 600; }

/* ═══ « Votre budget complet » — bloc local en fin de rapport ═══ */
.rbudget .bsaisie {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
  gap: .6rem; max-width: 32rem; margin: .5rem 0 .7rem;
}
/* Étiquette courte ou repliée sur deux lignes, les deux champs gardent la même
   ligne de base : le libellé pousse, l'input reste collé au bas de la case. */
.rbudget .bprix { margin: 0; max-width: 18rem; display: flex; flex-direction: column; }
.rbudget .bsaisie .bprix input { margin-top: auto; }
.rbudget .bprix label {
  display: block; font-family: var(--mono); font-size: .62rem;
  letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft);
  margin-bottom: .25rem;
}
.rbudget .bprix input {
  width: 100%; font: 500 1rem "General Sans", sans-serif; color: var(--ink);
  background: var(--paper); border: 1px solid var(--line-strong); border-radius: 10px;
  padding: .55rem .75rem; outline: none;
  transition: border-color .2s, box-shadow .2s;
}
.rbudget .bprix input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(255, 107, 26, .15); }
.rbudget .baide { margin: -.3rem 0 .8rem; color: var(--ink-soft); font-size: .82rem; }
.bkpis {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
  gap: .6rem; margin: .4rem 0 .8rem;
}
.bkpis[hidden] { display: none; }
.bkpi { border: 1px solid var(--line); border-radius: 11px; background: var(--paper); padding: .7rem .9rem; }
.bkpi b {
  display: block; font-family: "General Sans", system-ui, sans-serif; font-weight: 700;
  font-size: 1.5rem; letter-spacing: -.02em; font-variant-numeric: tabular-nums; color: var(--ink);
}
.bkpi b.bplus { color: var(--accent-ink); }
.bkpi small { display: block; color: var(--ink-soft); font-size: .8rem; margin-top: .15rem; }
.bpostes { margin: .3rem 0 .2rem; padding-inline-start: 1.2rem; font-size: .95rem; }
.bpostes li { margin: .2rem 0; }
@media (prefers-reduced-motion: reduce) { .rbudget .bprix input { transition: none; } }

/* ═══ « En un coup d'œil » — l'état de chaque vérification, jamais un jugement ═══
   Trois états, trois tokens EXISTANTS (aucune couleur nouvelle) : bleu d'identité =
   fait, orange = à faire, gris = pas de réponse. Le libellé (.fetat) porte le sens
   tout seul : la couleur ne fait que doubler, à l'écran comme à l'impression. */
.rsynth {
  border: 1px solid var(--line-strong); background: var(--paper-soft);
  border-radius: 14px; padding: .95rem 1.1rem; margin-bottom: 1.1rem;
}
.rsynth-t {
  font-family: "General Sans", system-ui, sans-serif; font-weight: 700;
  font-size: 1.05rem; letter-spacing: -.01em; margin-bottom: .55rem;
}
.rfeux { list-style: none; margin: 0 0 .5rem; padding: 0; }
.feu {
  --feu: var(--ink-soft);
  display: grid; grid-template-columns: auto 6.2rem 1fr; align-items: baseline;
  gap: .2rem .6rem; padding: .38rem 0; border-bottom: 1px solid var(--line);
  font-size: .92rem;
}
.feu:last-child { border-bottom: none; }
.feu-ok { --feu: var(--blue); } /* « Vérifié » : bleu de la charte, aucune couleur nouvelle */
.feu-orange { --feu: var(--accent-ink); }
.feu-gris, .feu-attente, .feu-suspendu { --feu: var(--ink-soft); }
.fdot {
  width: 9px; height: 9px; border-radius: 50%; background: var(--feu);
  transform: translateY(-1px);
}
.feu-gris .fdot, .feu-suspendu .fdot { background: none; border: 2px solid var(--ink-soft); }
.feu-attente .fdot { animation: rpulse 1s ease-in-out infinite; }
.fetat {
  font-family: var(--mono); font-size: .62rem; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase; color: var(--feu);
}
.ftxt b { font-weight: 600; }
@media (max-width: 560px) {
  .feu { grid-template-columns: auto 1fr; }
  .ftxt { grid-column: 1 / -1; }
}
@media (prefers-reduced-motion: reduce) { .feu-attente .fdot { animation: none; } }

/* ═══ Confirmation d'adresse — ce que vous avez tapé, ce que l'État en a compris ═══ */
.rconfirm {
  border-inline-start: 3px solid var(--line-strong);
  padding: .1rem 0 .1rem .8rem; margin-bottom: .4rem;
}
.rconfirm p { font-size: .98rem; margin: .22rem 0; }
.rlab {
  font-family: var(--mono); font-size: .62rem; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft);
  display: block;
}
.rcorriger {
  font: 500 .92rem "General Sans", sans-serif; color: var(--accent-ink);
  background: none; border: none; padding: 0; cursor: pointer;
  text-decoration: underline; text-underline-offset: 2px;
}
.rcorriger:hover { color: var(--accent); }

/* Le gris « discret » sert aussi hors des sections (synthèse, confirmation) */
.rapport .rmuted { color: var(--ink-soft); font-size: .92rem; }

/* ═══ Détails techniques — la mécanique reste disponible, jamais en clair ═══ */
.rtech { margin-top: .55rem; }
.rtech summary {
  cursor: pointer; font-family: var(--mono); font-size: .66rem;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-soft);
  list-style-position: inside;
}
.rtech summary:hover { color: var(--ink); }
.rtech ul { margin: .35rem 0 .1rem; padding-inline-start: 1.2rem; }
.rtech li { font-size: .82rem; color: var(--ink-soft); margin: .18rem 0; }

/* ═══ Issue humaine : « Faites-le pour moi » → WhatsApp ═══ */
a.rwa {
  display: inline-block; font-size: .82rem; font-weight: 600; text-decoration: none;
  color: var(--accent-ink); background: rgba(255, 107, 26, .08);
  border: 1px solid rgba(184, 71, 0, .35); border-radius: 8px; padding: .3rem .8rem;
  transition: border-color .2s, background .2s;
}
a.rwa:hover { border-color: var(--accent); background: rgba(255, 107, 26, .16); }
a.rwa-main {
  color: #17181c; background: var(--accent); border-color: rgba(184, 71, 0, .55);
  font-size: .9rem; padding: .45rem 1.1rem;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), var(--shadow-sm);
}
a.rwa-main:hover { background: var(--accent); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), 0 8px 24px rgba(255, 107, 26, .25); }
@media (prefers-reduced-motion: reduce) { a.rwa { transition: none; } }

/* ═══ Barre d'attente à 3 crans — Adresse · Ventes · Plans ═══ */
.rprog {
  display: flex; gap: .4rem; list-style: none; margin: 0 0 .4rem; padding: 0;
  max-width: 26rem;
}
.rprog li {
  flex: 1; border-top: 3px solid var(--line); padding-top: .3rem;
  font-family: var(--mono); font-size: .6rem; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink-soft);
}
.rprog li.fait { border-top-color: var(--accent-ink); }
.rprog li.encours { border-top-color: var(--accent); color: var(--accent-ink); }

/* ═══ « Vos démarches » — le processus listé sous le rapport ═══════════════════
   Même grammaire que « En un coup d'œil » : une ligne, une pastille, un libellé
   d'état en majuscules et une phrase. Le LIBELLÉ porte le sens ; la couleur ne
   fait que doubler — la liste reste lisible en noir et blanc et à l'impression.
   Quatre familles seulement : fait · en cours · à vous de jouer · problème
   (« à la main »), plus deux états neutres (en attente, bientôt).
   Aucune couleur nouvelle : bleu d'identité, orange, gris de la charte. */
.rdemarches {
  border: 1px solid var(--line-strong); background: var(--paper-soft);
  border-radius: 14px; padding: .95rem 1.1rem; margin-top: 1.3rem;
}
.rdem-t {
  font-family: "General Sans", system-ui, sans-serif; font-weight: 700;
  font-size: 1.05rem; letter-spacing: -.01em; margin-bottom: .55rem;
}
.rdem-liste { list-style: none; margin: 0; padding: 0; }
.rdem {
  --dem: var(--ink-soft);
  display: grid; grid-template-columns: auto 1fr auto;
  align-items: baseline; gap: .1rem .6rem;
  padding: .5rem 0; border-bottom: 1px solid var(--line);
}
.rdem:last-child { border-bottom: none; }
/* L'état est écrit AVANT le libellé dans le HTML : c'est lui que l'œil doit
   trouver en premier dans la liste des pièces. Les colonnes sont posées
   explicitement pour que l'ancien bloc (trois démarches) garde son dessin —
   libellé à gauche, état à droite — malgré cet ordre de lecture. */
.rdem-nom { grid-column: 2; font-size: .98rem; font-weight: 600; color: var(--ink); }
.rdem-prec { font-weight: 400; font-size: .82em; color: var(--ink-soft); }
.rdem-etat {
  grid-column: 3;
  font-family: var(--mono); font-size: .78rem; font-weight: 700;
  letter-spacing: .06em; text-transform: uppercase; color: var(--dem); white-space: nowrap;
}
.rdem-txt { grid-column: 2 / -1; margin: .1rem 0 0; font-size: .92rem; color: var(--ink-soft); }
.rdem-act { grid-column: 2 / -1; margin-top: .4rem; }

/* ─── la liste des pièces : l'état d'abord, puis la pièce ───
   Une ligne = une pièce du dossier. Prix, délai, portée et site officiel sont
   des VALEURS du module, séparées par un point médian ; le paragraphe qui
   explique la pièce est replié — la liste doit rester lisible d'un trait. */
.rdemarches-pieces .rdem { grid-template-columns: auto auto 1fr; }
.rdemarches-pieces .rdem-etat { grid-column: 2; }
.rdemarches-pieces .rdem-nom { grid-column: 3; }
.rdem-meta {
  grid-column: 2 / -1; margin-top: .25rem;
  display: flex; flex-wrap: wrap; align-items: baseline; gap: .15rem .55rem;
  font-size: .82rem; color: var(--ink-soft); line-height: 1.5;
}
.rdem-meta a { color: var(--blue); }
.rdem-prix { font-family: var(--mono); font-weight: 600; color: var(--ink); white-space: nowrap; }
.rdem-etatp {
  font-family: var(--mono); font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: var(--dem);
}
.rdem-portee {
  display: inline-block; border: 1px solid var(--line); border-radius: 6px;
  padding: 0 .35rem; font-size: .92em;
}
.rdem-pourquoi { grid-column: 2 / -1; margin-top: .25rem; font-size: .88rem; }
.rdem-pourquoi summary { cursor: pointer; color: var(--ink-soft); }
.rdem-pourquoi p { margin: .3rem 0 0; color: var(--ink-soft); max-width: 62ch; }
/* Sous 520 px, l'état prend sa propre ligne : « Nous ne pouvons pas l'obtenir »
   et un libellé de pièce ne tiennent pas côte à côte sur un téléphone. */
@media (max-width: 520px) {
  .rdemarches-pieces .rdem { grid-template-columns: auto 1fr; }
  .rdemarches-pieces .rdem-etat { grid-column: 2; white-space: normal; }
  .rdemarches-pieces .rdem-nom { grid-column: 2; }
}
.rdot {
  width: 9px; height: 9px; border-radius: 50%; background: var(--dem);
  transform: translateY(-1px);
}
.dem-fait { --dem: var(--blue); }
.dem-cours { --dem: var(--accent); }
.dem-vous { --dem: var(--accent-ink); }
.dem-souci, .dem-attente, .dem-bientot { --dem: var(--ink-soft); }
.dem-souci .rdot, .dem-attente .rdot, .dem-bientot .rdot { background: none; border: 2px solid var(--ink-soft); }
.dem-cours .rdot { animation: rpulse 1s ease-in-out infinite; }
.rdem-avant {
  margin: .1rem 0 .8rem; font-size: .9rem; color: var(--ink-soft); max-width: 60ch;
}
.rdem-note { margin: .6rem 0 0; font-size: .82rem; color: var(--ink-soft); }
.rdem-pied { margin-top: .7rem; }
.rdem-pied[hidden] { display: none; }
.rdem-btn {
  font: 500 .82rem "General Sans", sans-serif; color: var(--accent-ink);
  background: none; border: 1px solid var(--line); border-radius: 8px;
  padding: .3rem .8rem; cursor: pointer; transition: border-color .2s, background .2s;
}
.rdem-btn:hover { border-color: var(--accent); background: rgba(255, 107, 26, .08); }
.rdem-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.rdem-btn-main {
  color: #17181c; background: var(--accent); border-color: rgba(184, 71, 0, .55);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .28), var(--shadow-sm);
}
.rdem-btn-main:hover { background: var(--accent); border-color: var(--accent-ink); }
@media (prefers-reduced-motion: reduce) {
  .dem-cours .rdot { animation: none; }
  .rdem-btn { transition: none; }
}

/* ═══ 04 · Renouvellement urbain — jauge, frise, badges, registres ═══════════
   Même grammaire que « En un coup d'œil » : le LIBELLÉ porte le sens, la couleur
   ne fait que doubler. Aucune couleur nouvelle : bleu d'identité = vérifié,
   orange = à vérifier / incomplet, gris = non trouvé, hors portée, hors barème.
   Tout tient en 320 px : les grilles se replient, les valeurs longues (URL,
   noms hébreux) se coupent au lieu de déborder. */
.rrenouv { overflow-wrap: break-word; }
.rnv-tete { display: flex; flex-wrap: wrap; align-items: baseline; gap: .2rem .6rem; margin-bottom: .4rem; }
.rnv-titre { font-family: "General Sans", system-ui, sans-serif; font-weight: 700; font-size: 1.15rem; letter-spacing: -.01em; }
.rnv-sous { font-size: .86rem; color: var(--ink-soft); }
.rnv-h {
  font-family: var(--mono); font-size: .64rem; font-weight: 600; letter-spacing: .14em;
  text-transform: uppercase; color: var(--ink-soft); margin: 1rem 0 .4rem;
}

/* Jauge 0–100 : quatre bandes proportionnelles (0 · 1-39 · 40-89 · 90-100), un curseur.
   Le niveau ne s'affiche QUE s'il est rendu par le bloc : la jauge ne porte
   aucun libellé de niveau par elle-même. */
.rnv-jauge { position: relative; margin: .5rem 0 0; max-width: 34rem; }
/* 2 px de marge de part et d'autre : à 100, le curseur (3 px, centré sur le
   repère) dépassait la colonne d'un pixel et la section défilait à 320 px. */
.rnv-bandes {
  position: relative; display: flex; height: 14px; border-radius: 7px; overflow: visible; margin-inline: 2px;
  border: 1px solid var(--line-strong); background: var(--paper-soft);
}
.rnv-b { display: block; height: 100%; }
.rnv-b0 { flex: 0 0 1%; background: var(--paper-soft); border-radius: 7px 0 0 7px; }
.rnv-b1 { flex: 0 0 39%; background: rgba(255, 107, 26, .16); }
.rnv-b2 { flex: 0 0 50%; background: rgba(255, 107, 26, .42); }
.rnv-b3 { flex: 0 0 10%; background: var(--accent); border-radius: 0 7px 7px 0; }
.rnv-curseur {
  position: absolute; top: -5px; bottom: -5px; width: 3px; border-radius: 2px;
  background: var(--ink); transform: translateX(-50%);
  box-shadow: 0 0 0 2px #fff;
}
.rnv-bornes { position: relative; height: 1rem; margin: .2rem 2px 0; font-family: var(--mono); font-size: .6rem; color: var(--ink-soft); }
.rnv-bornes span { position: absolute; top: 0; transform: translateX(-50%); }
.rnv-bornes span:nth-child(1) { left: 0; transform: none; }
.rnv-bornes span:nth-child(2) { left: 40%; }
.rnv-bornes span:nth-child(3) { left: 90%; }
.rnv-bornes span:nth-child(4) { left: auto; right: 0; transform: none; }
/* Barre de 212 px à 320 px : « 90 » et « 100 » se touchaient. Le « 90 » se cale à gauche de son repère. */
@media (max-width: 400px) { .rnv-bornes span:nth-child(3) { transform: translateX(-100%); } }
.rnv-val { display: flex; flex-wrap: wrap; align-items: baseline; gap: .3rem .6rem; margin: .3rem 0 .5rem; }
.rnv-n {
  font-family: "General Sans", system-ui, sans-serif; font-weight: 700; font-size: 2rem;
  letter-spacing: -.02em; font-variant-numeric: tabular-nums; line-height: 1;
}
.rnv-val small { font-size: .85rem; color: var(--ink-soft); }
/* La place du niveau : son libellé, ou — sans niveau — la mention / la phrase
   plan_cadre au même gabarit ; la valeur passe alors en corps réduit (.rnv-releve). */
.rnv-niveau {
  font-family: "General Sans", system-ui, sans-serif; font-weight: 600; font-size: 1rem; min-width: 0;
  color: var(--accent-ink); border-inline-start: 3px solid var(--accent); padding-inline-start: .5rem;
}
.rnv-val .rnv-releve { flex-basis: 100%; font-size: .8rem; color: var(--ink-soft); }
.rnv-mesure, .rapport .rnv-mesure { font-size: .82rem; }

/* La seule phrase du flux : celle du niveau. Les autres sont repliées dans
   « Ce que cela veut dire », avec le corpus. */
.rnv-phrase { font-size: .98rem; margin: .45rem 0; }
.rnv-phrase-niveau { font-weight: 500; }
.rnv-phrase-non_verifie {
  border-inline-start: 3px solid var(--accent); padding-inline-start: .7rem;
  color: var(--ink-soft); font-size: .92rem;
}
.rnv-plus { margin: .6rem 0 .3rem; }
.rnv-plus > summary, .rnv-det > summary {
  cursor: pointer; font-family: var(--mono); font-size: .64rem; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase; color: var(--accent-ink);
}
.rnv-plus[open] > summary { margin-bottom: .3rem; }
.rnv-corpus { font-size: .9rem; color: var(--ink-soft); margin: .45rem 0; }
.rnv-corpus b { color: var(--ink); }

/* Badges d'état : cinq états, jamais un « non » nu. */
.rnv-badge {
  display: inline-block; font-family: var(--mono); font-size: .6rem; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase; white-space: nowrap; vertical-align: middle;
  border: 1px solid var(--line-strong); border-radius: 6px; padding: .12rem .45rem; background: var(--paper);
  color: var(--ink-soft);
}
.rnv-badge-retenu, .rnv-badge-declare { color: var(--blue); border-color: var(--blue); }
.rnv-badge-non_verifie, .rnv-badge-suivi {
  color: var(--accent-ink); border-color: rgba(184, 71, 0, .45); background: rgba(255, 107, 26, .08);
}
.rnv-badge-hors_portee, .rnv-badge-hors_bareme, .rnv-badge-non_renseignee { border-style: dashed; }

/* Frise d'avancement à six étapes : l'étape réelle du périmètre mise en avant. */
.rnv-frise {
  list-style: none; margin: .4rem 0 .7rem; padding: 0;
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: .35rem;
}
.rnv-etape {
  border-top: 3px solid var(--line); padding-top: .35rem;
  font-size: .76rem; line-height: 1.3; color: var(--ink-soft);
}
.rnv-etnum { font-family: var(--mono); font-size: .62rem; color: var(--ink-soft); }
.rnv-etape-faite { border-top-color: var(--accent-ink); }
.rnv-etape-actuelle { border-top-color: var(--accent); color: var(--ink); font-weight: 600; }
.rnv-ici {
  display: block; font-family: var(--mono); font-size: .58rem; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase; color: var(--accent-ink);
}
/* min(14rem, 100 %) : à 320 px la colonne utile fait 212 px, une case de 14 rem débordait de 12 px. */
.rnv-cases { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr)); gap: .6rem; }
.rnv-case { border: 1px solid var(--line); border-radius: 11px; background: var(--paper-soft); padding: .7rem .9rem; font-size: .92rem; }
.rnv-case > b { display: block; margin-bottom: .3rem; }
.rnv-case ul { margin: 0; padding-inline-start: 1.1rem; }
.rnv-case li { margin: .2rem 0; }
.rnv-case p { margin: 0; font-size: .92rem; }
@media (max-width: 560px) {
  .rnv-frise { grid-template-columns: 1fr; gap: 0; }
  .rnv-etape { border-top: none; border-inline-start: 3px solid var(--line); padding: .25rem 0 .25rem .6rem; }
  .rnv-etape-faite { border-inline-start-color: var(--accent-ink); }
  .rnv-etape-actuelle { border-inline-start-color: var(--accent); }
}

/* Liste des indicateurs : badge · libellé · points, puis relevé et source dessous. */
.rnv-ind, .rnv-reste, .rnv-per { list-style: none; margin: 0; padding: 0; }
.rnv-i {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: baseline;
  gap: .15rem .6rem; padding: .45rem 0; border-bottom: 1px solid var(--line); font-size: .9rem;
}
.rnv-i:last-child { border-bottom: none; }
.rnv-pts { font-family: var(--mono); font-size: .7rem; color: var(--ink-soft); white-space: nowrap; }
.rnv-i-retenu .rnv-pts { color: var(--accent-ink); font-weight: 600; }
.rnv-det, .rnv-src { grid-column: 1 / -1; font-size: .82rem; color: var(--ink-soft); overflow-wrap: anywhere; }
.rnv-det > summary { font-size: .6rem; }
.rnv-src a { color: var(--accent-ink); }
@media (max-width: 560px) {
  /* Étroit : badge et points sur la première ligne, le libellé en pleine largeur dessous. */
  .rnv-i { grid-template-columns: minmax(0, 1fr) auto; }
  .rnv-i .rnv-badge { grid-column: 1; grid-row: 1; justify-self: start; }
  .rnv-i .rnv-pts { grid-column: 2; grid-row: 1; }
  .rnv-i .rnv-lib { grid-column: 1 / -1; grid-row: 2; }
}
.rnv-reste li { padding: .35rem 0; border-bottom: 1px solid var(--line); font-size: .92rem; }
.rnv-reste li:last-child { border-bottom: none; }

/* Cartes de périmètres. minmax(0, 1fr) : la colonne ne s'élargit jamais au
   min-content d'une carte (à 320 px, deux cartes débordaient de 3 px). */
.rnv-per { display: grid; grid-template-columns: minmax(0, 1fr); gap: .6rem; }
.rnv-p { border: 1px solid var(--line); border-radius: 11px; background: var(--paper); padding: .7rem .9rem; font-size: .92rem; }
.rnv-p-h { display: flex; flex-wrap: wrap; align-items: baseline; gap: .3rem .5rem; margin-bottom: .35rem; }
.rnv-p-h .pnum { font-family: var(--mono); font-size: .76rem; color: var(--accent-ink); }
.rnv-kv { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .15rem .7rem; margin: 0; }
.rnv-kv dt { font-family: var(--mono); font-size: .62rem; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft); padding-top: .2rem; }
.rnv-kv dd { margin: 0; overflow-wrap: anywhere; }
/* Étroit : le libellé au-dessus de la valeur (les deux chiffres de logements tenaient sur 12 lignes). */
@media (max-width: 560px) {
  .rnv-kv { grid-template-columns: 1fr; }
  .rnv-kv dt { padding-top: .45rem; }
}
.rnv-p .rmuted { font-size: .84rem; }
.rplans .pstat.he { direction: rtl; unicode-bidi: isolate; }

/* ═══ 06 · Ce qui entoure le bien ═══
   Quatre familles, une ligne par fait. La même grammaire visuelle que la
   section 04 : le badge donne l'état, le filet d'accent tient la ligne, la
   valeur d'origine du registre reste en hébreu, en second plan. Les listes ne
   sont jamais à puces : la puce se lisait comme un « il y a », alors que
   certaines lignes disent « il n'y a pas ». */
.ent-l, .ent-f { list-style: none; margin: 0; padding: 0; }
.ent-b { padding: .55rem 0; border-bottom: 1px solid var(--line); }
.ent-l > .ent-b:last-child { border-bottom: none; }
.ent-dit { font-weight: 600; }
/* Le fait lui-même : décalé sous son état, jamais sur la même ligne — à 320 px,
   « relevé à 233 m du point » revenait à la ligne au milieu du nombre. */
.ent-f { margin-top: .35rem; }
.ent-f > li {
  position: relative; padding: .18rem 0 .18rem .75rem; font-size: .9rem; line-height: 1.35;
  overflow-wrap: anywhere;
}
.ent-f > li::before {
  content: ""; position: absolute; inset-inline-start: 0; top: .62rem;
  width: .45rem; height: 2px; background: var(--accent);
}
.ent-f .hesmall { color: var(--ink-soft); }
/* La fiche cadastrale de la section 01 : une phrase par fait, à la suite. */
.ent-cad { margin: .5rem 0 .2rem; font-size: .95rem; }

/* La redevance officielle posée à côté de la pièce, dans le bloc d'offre : le
   client lit la décomposition du prix avant de cliquer. La règle vit ici et non
   dans commande.css parce que c'est ce chantier-ci qui l'introduit — les deux
   feuilles sont chargées ensemble par index.html. */
.dc-redevance { font-family: var(--mono); font-size: .88em; color: var(--ink-soft); white-space: nowrap; }

/* En-tête du dossier imprimé — invisible à l'écran */
.rprinthead { display: none; }

/* ═══ Impression : seul le rapport sort ═══ */
@media print {
  nav, .hero, #verifications, .cta, footer,
  .searchrow, .search .hint, .sechead, .rprint, .ractions, .rpdfmsg,
  .rloading, .rcorrigerligne, a.rwa,
  .rprog, .fdot, .rdot, .rdem-act, .rdem-pied { display: none !important; }
  /* L'en-tête d'impression porte déjà l'adresse : ne pas la répéter juste dessous. */
  .rapport .rhead h3 { display: none; }
  .rguide, .rtech { display: none; } /* écran uniquement ; repliés, ils n'impriment rien d'utile */
  .rsynth, .rdemarches { background: none; border-color: #000; }
  .rsynth, .feu, .rdemarches, .rdem { break-inside: avoid; }
  /* Sur papier, la grille ne sert plus (la pastille et les boutons sont partis) :
     l'état, le nom à la suite, puis la phrase en dessous, sur toute la largeur.
     Le paragraphe replié s'ouvre à l'impression : le dossier papier doit dire
     à quoi sert chaque pièce, sans clic possible. */
  .rdem { display: block; }
  .rdem-etat { margin-inline-end: .6rem; }
  .rdem-pourquoi summary { list-style: none; }
  /* Chrome n'a pas toujours caché le contenu d'un <details> fermé de la même
     façon : display:none sur les enfants hier, content-visibility sur
     ::details-content aujourd'hui. Les deux sont levés, sinon le papier perd
     ce que chaque pièce sert à savoir. */
  .rdem-pourquoi > p { display: block !important; }
  .rdem-pourquoi::details-content { content-visibility: visible !important; }
  .feu { grid-template-columns: 6.2rem 1fr; } /* la pastille sort : le libellé porte l'état */
  .rprinthead {
    display: flex; align-items: center; gap: .8rem;
    border-bottom: 1px solid #000; padding-bottom: .5rem; margin-bottom: .8rem;
  }
  .rprinthead img { width: 42px; height: auto; }
  .rprinthead b { font-size: 1.05rem; }
  .rapport .radresse { display: none; } /* l'adresse est déjà dans l'en-tête imprimé */
  body { background: #fff; font-size: 12px; }
  section { padding: 0; }
  .search { border: none; box-shadow: none; padding: 0; }
  .rapport { border: none; box-shadow: none; padding: 0; }
  .rtable td, .rtable th { white-space: normal; }
  .rsec, .rtable tr { break-inside: avoid; }
  /* La section 04 est longue : elle se coupe entre ses blocs, jamais dedans.
     La 06 suit la même règle : un fait ne se coupe pas de son état. */
  .rrenouv, .rent { break-inside: auto; }
  .ent-b { break-inside: avoid; }
  .rnv-jauge, .rnv-val, .rnv-frise, .rnv-cases, .rnv-i, .rnv-p, .rnv-reste li { break-inside: avoid; }
  .rnv-case, .rnv-p { background: none; }
  .rnv-curseur { box-shadow: none; }
}
