/* L'écran du dépôt de rapport d'inspection. Feuille à part, comme
   maTournee.css et avisSuivi.css : main.css est encodé en Windows-1252 et toute
   réécriture en modifierait tous les octets non ASCII.

   Rien ici ne redéfinit une classe de main.css. Les sous-onglets, les
   compteurs, la barre de filtres, les tableaux, les pastilles d'état, les
   boutons, les champs, les fenêtres et les blocs repliables en viennent tous —
   .sous-onglets, .stats-strip, .stat-card, .filters-bar, .table,
   .pastille-etape, .btn, .input, .select, .form-label, .modal,
   .bloc-repliable. Tous les sélecteurs de cette feuille sont en « rd- ».

   ── Ce que ces styles servent, et c'est un seul sujet ──────────────────────

   FAIRE VOIR CE QU'UN CLIC VA PRODUIRE. Trois méprises coûtent cher sur cet
   écran, et aucune ne se dissipe par le texte seul :

     · croire qu'un type de non-conformité coché fait UNE ligne de suivi, alors
       qu'il en fait une PAR POINT — donc une contre-visite par point, donc
       autant d'échéances opposables à un établissement de santé ;
     · croire qu'une sélection multiple fera partir un courriel par ligne, alors
       qu'un SEUL message part pour tout le lot ;
     · prendre une liste de points vide pour une panne, et aller cocher au
       hasard le point d'une autre installation.

   ── Et une chose qu'ils ne font JAMAIS ─────────────────────────────────────

   Colorer une non-conformité. La typologie du référentiel — `categorie`,
   `type_nc` — est rendue en texte ordinaire, sans fond, sans teinte et sans
   pastille : LISA ne qualifie pas une non-conformité de sa propre autorité, et
   une couleur est un jugement que personne ici n'a prononcé.

   Les seules teintes qui portent un jugement sont celles de l'ÉCHÉANCE, par
   .pastille-etape de main.css, sur la foi du `niveau_urgence` que la vue
   calcule. Elles ne parlent que du calendrier. */

/* ── La vue et ses sous-onglets ───────────────────────────────────────────── */

.rd-onglets { margin-bottom: 14px; }
.rd-vue { max-width: 1400px; }

/* Le chapeau d'une vue : la phrase qui dit la maille, avant toute commande.
   En tête et jamais repliée — c'est elle qui empêche de lire « une ligne cochée,
   un courriel » sur l'écran des contre-visites. */
.rd-chapeau {
  border: 1px solid var(--color-border);
  border-left: 4px solid var(--color-primary);
  border-radius: 6px;
  padding: 10px 14px; margin: 0 0 14px;
  background: var(--color-surface, #fff);
  font-size: 13px; line-height: 1.5;
}

/* Les lectures en échec, dépliées d'office. Un comptage en échec n'est pas un
   zéro, et une liste vide pour cause de refus n'est pas « rien à faire ». */
.rd-pannes { margin-bottom: 14px; }
.rd-pannes summary { color: #6b5415; }
.rd-pannes li { font-size: 12px; line-height: 1.5; }

/* ── Les textes de service ────────────────────────────────────────────────── */

/* La note explique une RÈGLE du serveur, pas une préférence d'affichage : elle
   est discrète mais encadrée à gauche, pour qu'on la distingue d'un libellé. */
.rd-note {
  margin: 6px 0; padding: 7px 10px;
  border-left: 3px solid var(--color-border);
  background: #f6f7f9;
  font-size: 12px; line-height: 1.5;
}

.rd-aide { margin: 4px 0 0; font-size: 11.5px; line-height: 1.45;
  color: var(--color-text-3, #7b8794); }

.rd-vide {
  border: 1px dashed var(--color-border);
  border-radius: 6px; padding: 16px;
  font-size: 13px; line-height: 1.55;
  color: var(--color-text-2, #52606d);
}

/* ── Les alertes et les refus ─────────────────────────────────────────────── */

/* Deux tons, et deux sens distincts. Le REFUS dit qu'une règle s'y oppose — le
   doublon d'empreinte, la contre-visite déjà annoncée : c'est un fonctionnement
   normal, et il se lit en ambre. Le CRITIQUE dit que rien ne pourra partir —
   gabarit absent, migration non passée, droit manquant. Les confondre ferait
   chercher une panne là où il n'y a qu'une règle. */
.rd-alerte {
  border-radius: 6px; padding: 12px 14px; margin: 10px 0;
  font-size: 13px; line-height: 1.5;
}
.rd-alerte strong { display: block; margin-bottom: 4px; }
.rd-alerte--refus    { background: #fdf9ef; border: 1px solid #f0dcaa; color: #6b5415; }
.rd-alerte--critique { background: #fdf3f3; border: 1px solid #f3c6d4; color: var(--color-danger); }

/* Le message du serveur, repris tel quel. Il nomme souvent un fichier, un
   chemin de gabarit ou un code de point : il ne doit pas être recoupé. */
.rd-refus-texte { overflow-wrap: anywhere; }

/* ── Les champs ───────────────────────────────────────────────────────────── */

.rd-champ { margin-bottom: 14px; max-width: 760px; }
.rd-champ .input, .rd-champ .select, .rd-champ textarea { width: 100%; }
.rd-exige { color: var(--color-danger); }

/* Les deux formes qui désignent une intervention, empilées : la liste est
   bornée par le serveur aux affectations du demandeur, et le champ libre n'est
   donc pas un repli de confort mais le seul chemin pour une intervention hors
   fenêtre. Les deux se voient ensemble. */
.rd-designation { display: flex; flex-direction: column; gap: 6px; }
.rd-uuid { font-family: var(--font-mono, ui-monospace, Consolas, monospace); font-size: 12px; }

.rd-fichier-choisi {
  margin: 6px 0 0; padding: 7px 10px; border-radius: 4px;
  background: #e8f0fe; color: #1a4b8c;
  font-size: 12px; overflow-wrap: anywhere;
}

/* La conformité est un choix à deux valeurs, et un seul des deux ouvre le
   relevé des points. Les boutons de .sous-onglets le montrent mieux qu'une
   liste déroulante, où le choix se fait sans voir l'autre. */
.rd-conformite { margin-bottom: 0; }

/* ── Le relevé des non-conformités ────────────────────────────────────────── */

.rd-nc-liste { margin: 10px 0; }
.rd-nc-groupe { margin-bottom: 18px; }

/* L'installation en tête de groupe : c'est elle qui commande l'offre des points
   — par égalité de `type_installation`, et par rien d'autre. Un type coché sous
   la mauvaise installation est refusé par la base. */
.rd-nc-installation {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px;
  margin: 0 0 8px; padding-bottom: 5px;
  border-bottom: 1px solid var(--color-border);
  font-size: 13px; font-weight: 600;
}

.rd-nc-type {
  border: 1px solid var(--color-border);
  border-radius: 6px; padding: 10px 12px; margin-bottom: 8px;
  background: var(--color-surface, #fff);
}

/* Un type coché se détache, parce que c'est lui qui va produire des lignes.
   Le filet est à gauche, comme sur le chapeau : il rattache le bloc sans en
   faire une alerte — cocher est le fonctionnement normal de cet écran. */
.rd-nc-type--coche {
  border-left: 4px solid var(--color-primary);
  background: #fbfcfe;
}

.rd-nc-tete { display: flex; align-items: flex-start; gap: 9px; }
.rd-nc-libelle {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px;
  cursor: pointer; font-size: 13px; line-height: 1.4;
}
.rd-nc-type .stat-note { display: block; margin: 5px 0 0 31px; line-height: 1.45; }

/* Les deux axes du référentiel. Texte ordinaire, AUCUNE teinte, aucune
   pastille : ce sont les mots de la base, et les mettre en couleur reviendrait
   à les classer — ce que LISA ne fait pas. */
.rd-nc-faits {
  margin: 5px 0 0 31px;
  font-size: 12px; color: var(--color-text-2, #52606d);
}

.rd-nc-consequences {
  display: flex; flex-wrap: wrap; gap: 6px;
  margin: 7px 0 0 31px;
}

/* ── Les marques ──────────────────────────────────────────────────────────── */

/* Elles portent un FAIT du référentiel ou de la vue — « contre-visite exigée »,
   « signalement ANSM dû » — et jamais un jugement de gravité. Chacune écrit son
   libellé en toutes lettres : la couleur seule ne dit rien à qui imprime, et un
   contrôleur imprime. */
.rd-marque {
  display: inline-block;
  padding: 1px 7px; border-radius: 10px;
  background: #eef1f4; color: var(--color-text-2, #52606d);
  font-size: 11px; font-weight: 600; white-space: nowrap;
}
.rd-marque--attention { background: #fdf9ef; color: #6b5415; }
.rd-marque--alerte    { background: #fdf3f3; color: var(--color-danger); }
/* Le trou du référentiel : ni une alerte, ni un fonctionnement ordinaire. Il est
   DÉCLARÉ par le serveur, et il se voit sans crier. */
.rd-marque--trou      { background: #f5f3ff; color: #4c3f8f; }

.rd-marques { display: flex; flex-wrap: wrap; gap: 5px; }

/* ── Les points de contrôle ───────────────────────────────────────────────── */

.rd-points {
  margin: 10px 0 0 31px; padding: 10px 12px;
  border-left: 2px solid var(--color-border);
  background: #f8fafc; border-radius: 0 4px 4px 0;
}
.rd-points-tete { margin: 0 0 8px; font-size: 12px; font-weight: 600; }

.rd-point { display: flex; align-items: flex-start; gap: 9px; padding: 4px 0; }
.rd-point-libelle {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px;
  cursor: pointer; font-size: 12.5px; line-height: 1.4;
}
.rd-point-libelle .stat-note { flex-basis: 100%; }

/* La phrase que le serveur sert à la place d'une liste de points vide. Elle est
   affichée TELLE QUELLE, et elle occupe la place qu'aurait prise la liste : une
   liste vide sans un mot se lit comme une panne, et qui la lit comme une panne
   finit par cocher le point d'une autre installation. */
.rd-explication {
  margin: 0 0 8px; padding: 10px 12px;
  background: #f5f3ff; border: 1px solid #ddd6fe; border-radius: 4px;
  color: #3f3576;
  font-size: 12.5px; line-height: 1.55;
}

.rd-constat { font-size: 12.5px; }

/* Les cases à cocher sont la commande principale de cet écran : elles sont
   agrandies, parce qu'on les coche au retour d'une visite, parfois sur un
   portable posé sur un coin de bureau. */
.rd-case { width: 17px; height: 17px; margin-top: 1px; flex: 0 0 auto; cursor: pointer; }
.rd-case:disabled { cursor: not-allowed; }
.rd-case-libelle {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; cursor: pointer;
}
.rd-case-cellule { display: flex; flex-direction: column; gap: 4px; }

/* ── Le compte des conséquences ───────────────────────────────────────────── */

/* LE BLOC LE PLUS IMPORTANT DE L'ÉCRAN. Il dit, avant le dépôt, combien de
   lignes de suivi et combien de contre-visites le panier va produire. Il est
   donc encadré et toujours visible, même à zéro : un compte qui n'apparaît qu'au
   premier clic se découvre trop tard. */
.rd-compte {
  border: 1px solid var(--color-border);
  border-radius: 6px; padding: 12px 14px; margin: 14px 0;
  background: var(--color-surface, #fff);
}
.rd-compte-chiffres {
  display: flex; flex-wrap: wrap; gap: 18px;
  margin-bottom: 6px; font-size: 13px;
}
.rd-compte-chiffres strong { font-size: 19px; margin-right: 5px; }

/* Le chiffre des contre-visites quand il n'est pas nul : c'est lui qui engage
   des échéances opposables, et il ne doit pas se lire comme les deux autres. */
.rd-compte-cv strong { color: var(--color-primary); }

/* Ce qui ne naîtra PAS, et ce que l'écran ne peut pas savoir. Deux cas
   différents, deux tons : « écartée » est une certitude annoncée par le
   référentiel, « indéterminée » est un aveu de cet écran. Les confondre
   donnerait à l'aveu l'autorité d'une règle. */
.rd-ecartee, .rd-indeterminee {
  margin: 6px 0 0; padding: 7px 10px; border-radius: 4px;
  font-size: 12px; line-height: 1.5;
}
.rd-ecartee      { background: #fdf9ef; color: #6b5415; }
.rd-indeterminee { background: #eef1f4; color: var(--color-text-2, #52606d); }
.rd-ecartee-tete { margin: 10px 0 2px; font-size: 12px; font-weight: 600; color: #6b5415; }

/* ── Les codes, les pièces, les empreintes ────────────────────────────────── */

/* Un code de type de NC ou de point de contrôle s'épelle au téléphone, et se
   recopie dans une décision ANSM : chasse fixe, sinon on confond le 0 et le O
   en le dictant à un service d'imagerie. */
.rd-code {
  font-family: var(--font-mono, ui-monospace, "Cascadia Mono", Consolas, monospace);
  font-size: 11.5px; font-weight: 600;
  padding: 1px 5px; border-radius: 3px;
  background: #eef1f4; color: var(--color-text, #1f2933);
  white-space: nowrap;
}

.rd-fichier { font-size: 12.5px; overflow-wrap: anywhere; }

/* L'empreinte en entier sur la fiche : c'est elle que le serveur oppose au
   second dépôt du même fichier, et c'est par elle qu'on retrouve la pièce au
   magasin. Elle se coupe donc n'importe où plutôt que de déborder. */
.rd-sha {
  font-family: var(--font-mono, ui-monospace, Consolas, monospace);
  font-size: 10.5px; color: var(--color-text-3, #7b8794);
  overflow-wrap: anywhere; line-height: 1.4;
}

/* ── Les blocs d'une fiche ────────────────────────────────────────────────── */

.rd-bloc {
  border: 1px solid var(--color-border);
  border-radius: 6px; margin-bottom: 14px;
  background: var(--color-surface, #fff);
}
.rd-bloc-tete {
  display: flex; flex-wrap: wrap; align-items: flex-start;
  justify-content: space-between; gap: 10px;
  padding: 10px 14px; border-bottom: 1px solid var(--color-border);
}
.rd-bloc-titre { margin: 0; font-size: 13px; font-weight: 600; }
.rd-bloc-sous { margin: 3px 0 0; font-size: 11.5px; line-height: 1.45;
  color: var(--color-text-3, #7b8794); }
.rd-bloc-corps { padding: 12px 14px; }

.rd-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.rd-resultat:empty { display: none; }
.rd-resultat { margin-top: 10px; }

/* Le reçu d'un dépôt : ce qui a réellement été posé, et ce qui ne l'a pas été.
   Il tient à l'écran après le dépôt parce que c'est le seul endroit où se lisent
   l'empreinte du fichier et le nombre de lignes effectivement créées. */
.rd-recu {
  border: 1px solid #b8d3e8; border-left: 4px solid var(--color-primary);
  border-radius: 6px; padding: 12px 14px;
  background: #f5f9fd;
  font-size: 13px; line-height: 1.5;
}
.rd-recu strong { display: block; margin-bottom: 4px; overflow-wrap: anywhere; }
.rd-recu p { margin: 4px 0; }

.rd-fiche-identite {
  display: flex; flex-wrap: wrap; gap: 18px;
  margin-bottom: 14px;
}
.rd-fiche-identite > div { flex: 1 1 220px; min-width: 0; font-size: 12.5px; }
.rd-fiche-identite .stat-label { display: block; margin-bottom: 3px; }

.rd-panel { max-width: 70rem; }

/* ── Les tableaux ─────────────────────────────────────────────────────────── */

.rd-table td { vertical-align: top; }
.rd-table .stat-note { display: block; line-height: 1.4; }
.rd-cliquable { cursor: pointer; }
.rd-cliquable:focus-visible { outline: 2px solid var(--color-primary); outline-offset: -2px; }

.rd-strip { margin-bottom: 12px; }

/* ── Le lot du courriel ───────────────────────────────────────────────────── */

/* LA MAILLE DU MESSAGE EST LE LOT. Ce bandeau existe pour une seule raison :
   une table à cases à cocher se lit spontanément comme « un envoi par ligne »,
   et il faut donc que le contraire soit écrit en gras, en haut, et impossible à
   manquer avant de composer. Il colle sous la barre de filtres pour rester
   visible pendant qu'on coche en bas d'une longue liste. */
.rd-lot {
  position: sticky; top: 0; z-index: 5;
  display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 12px;
  border: 1px solid var(--color-primary);
  border-radius: 6px; padding: 10px 14px; margin-bottom: 12px;
  background: #e8f0fe;
}
.rd-lot-texte { flex: 1 1 320px; min-width: 0; }
.rd-lot strong { font-size: 13px; color: #1a4b8c; }
.rd-lot .rd-actions { margin-top: 0; }
.rd-lot .rd-ecartee, .rd-lot .rd-note { flex-basis: 100%; margin-top: 0; }

/* ── Le gabarit et la composition ─────────────────────────────────────────── */

/* Replié quand le gabarit est prêt — on ne relit pas tous les jours le chemin
   d'un fichier de configuration. Quand il ne l'est pas, ce n'est plus ce bloc
   qui s'affiche mais une alerte critique : l'envoi est fermé, et la liste des
   manques est ce qu'il faut lire. */
.rd-gabarit { margin-bottom: 12px; }
.rd-gabarit summary { color: var(--color-text-2, #52606d); }

.rd-courriel-tete {
  display: flex; flex-wrap: wrap; gap: 18px;
  padding: 12px 14px; margin-bottom: 14px;
  border-radius: 6px; background: #f6f7f9;
}
.rd-courriel-tete > div { flex: 1 1 200px; min-width: 0; font-size: 13px; }
.rd-courriel-tete .stat-label { display: block; margin-bottom: 3px; }

/* Une ligne déjà annoncée au client : le serveur refusera le lot entier. Dit
   AVANT le clic, et dans le ton du refus et non de l'alerte — c'est une règle
   qui protège l'établissement du doublon, pas un incident. */
.rd-deja { font-size: 11.5px; font-weight: 600; color: #6b5415; }

/* ── Messages fugaces ─────────────────────────────────────────────────────── */

.rd-toast {
  position: fixed; right: 1rem; bottom: 1rem; z-index: 3000;
  display: flex; flex-direction: column; gap: .4rem;
  max-width: 30rem;
}
.rd-toast-msg {
  padding: .6rem .8rem; border-radius: 6px;
  border: 1px solid var(--color-border, #d9dce3);
  border-left-width: 4px;
  background: var(--color-surface, #fff);
  box-shadow: 0 2px 10px rgb(0 0 0 / 12%);
  font-size: .82rem; line-height: 1.45;
}
.rd-toast-msg--ok     { border-left-color: var(--color-success, #1a7f44); }
.rd-toast-msg--erreur { border-left-color: var(--color-danger, #b3261e); }

/* ── Écrans étroits ───────────────────────────────────────────────────────── */

@media (max-width: 640px) {
  .rd-toast { left: 1rem; right: 1rem; max-width: none; }
  .rd-fiche-identite, .rd-courriel-tete { flex-direction: column; }
  /* Le retrait des points sous leur type disparaît : sur un téléphone il mange
     la moitié de la largeur du libellé du point, qui est ce qu'on doit lire. */
  .rd-points { margin-left: 0; }
  .rd-nc-faits, .rd-nc-consequences, .rd-nc-type .stat-note { margin-left: 0; }
  /* Le bandeau du lot ne colle plus : sur un petit écran il couvrirait les
     premières lignes de la table qu'il sert à compter. */
  .rd-lot { position: static; }
}

/* ── Impression ───────────────────────────────────────────────────────────── */

/* Le suivi des contre-visites s'imprime : on le relit en réunion de revue, et
   l'échéance d'un établissement de santé se discute sur papier. Tout ce qui ne
   sert qu'à cliquer disparaît, mais le compte des conséquences et les phrases du
   serveur restent — ce sont elles qui portent l'information. */
@media print {
  .rd-onglets, .filters-bar, .rd-actions, .rd-lot, .rd-toast,
  .rd-case, .rd-designation { display: none !important; }
  .rd-bloc, .rd-nc-type, .rd-compte { break-inside: avoid; border-color: #000; }
  .rd-chapeau, .rd-explication { border-color: #000; }
  .rd-gabarit[open] { display: block; }
}
