/* ═══════════════════════════════════════════════════════════════════════
   Composition du texte du site public : justifié, sans ses défauts.

   - Tout paragraphe est justifié (accroche, chapeaux, introductions,
     textes des cartes), sur tous les écrans : des blocs nets, bords droits
     des deux côtés. LISTE NOIRE : il l'est d'office, seules les exceptions
     sont déclarées (titres, contrôles, légendes, métadonnées, composants
     alignés autrement).
   - Pas de trous entre les mots : césure stricte, réservée aux mots longs
     (11 lettres et plus, au moins 5 de chaque côté). Un mot court
     (« applique », « débit ») ou un nom de 10 lettres (« PostgreSQL »,
     « Kubernetes ») n'est jamais coupé.
   - Rien ne déborde : une chaîne insécable (adresse, lien) passe à la
     ligne au lieu de dépasser ; une colonne peut rétrécir sous la largeur
     de son mot le plus long.
   - Pas de `text-wrap: pretty` sur le texte justifié : dans Chrome, il
     rééquilibre les dernières lignes d'un texte en drapeau et, justifié,
     y ouvre des lignes lâches. Il sert aux seuls blocs alignés à gauche.
   ═══════════════════════════════════════════════════════════════════════ */

/* ─── 1. Règle par défaut ───────────────────────────────────────────────
   Volontairement SANS !important et à faible spécificité (0,0,2) : toute
   règle à base de classe (exceptions ci-dessous, composants) l'emporte.
   Sur un paragraphe d'une seule ligne, `justify` n'a aucun effet visible.
   Césure : Chrome et Firefox lisent hyphenate-limit-chars ; Safari, les
   limites -webkit- (5 lettres de chaque côté : rien sous 10 lettres). */
main p,
main li,
main dd,
main blockquote {
  text-align: justify;
  text-justify: inter-word;
  -webkit-hyphens: auto;
  hyphens: auto;
  hyphenate-limit-chars: 11 5 5;
  -webkit-hyphenate-limit-before: 5;
  -webkit-hyphenate-limit-after: 5;
  -webkit-hyphenate-limit-lines: 2;
  overflow-wrap: break-word;
}

/* Titres : jamais justifiés ni coupés ; lignes équilibrées. */
main h1, main h2, main h3, main h4, main h5, main h6 {
  hyphens: manual;
  overflow-wrap: break-word;
  text-wrap: balance;
}

/* Une colonne de grille peut rétrécir sous la largeur de son mot le plus
   long : c'est ce qui évite qu'un mot pousse la page hors cadre. */
.grid > *,
.case-hero__top > *,
.deck__card > * {
  min-width: 0;
}

/* ─── 2. Exceptions : alignés au début de ligne ─────────────────────────
   Ce qui n'est pas un paragraphe : titres, contrôles, étiquettes, légendes,
   métadonnées, listes de liens, et les composants alignés autrement (fin
   de ligne, centre). */
h1, h2, h3, h4, h5, h6,
.persona li,
.persona dd,
.hall__caption-title,
.showcase__links,
.tool,
.tour p,
.tour li,
.btn,
.filter,
.row,
.rows li,
.facts dd,
.contact__channels,
.form-actions p,
.field__hint,
.field__error,
.form-status,
.breadcrumb,
.case-meta dd,
.case-band,
.cover,
.toc,
.tags,
.pill-list li,
.edu-list li,
.proof__sources li,
.site-footer p,
.site-footer li,
.sitemap li,
figcaption,
label,
td, th {
  /* `start` et non `inherit` : le parent est souvent un <li> lui-même
     justifié par la règle par défaut, dont on hériterait. */
  text-align: start;
  -webkit-hyphens: manual;
  hyphens: manual;
}

/* Bloc centré (lecteur de document sur mobile) : ses paragraphes suivent
   l'alignement du bloc au lieu d'être justifiés. */
.doc-reader__info p {
  text-align: inherit;
}

/* Téléphone : sous ~40 signes par ligne (mesurés : grand corps, chapeaux et
   introductions en 19 px et plus, listes dans les cartes), justifier creuse
   des trous que la césure ne comble pas. Ces blocs s'alignent au début de
   ligne ; les autres restent justifiés. */
@media (max-width: 599.98px) {
  .manifesto__text,
  .lead,
  .section-head__intro,
  .about__bio,
  .deck__lead,
  .deck__org,
  .deck li,
  .pipeline__summary,
  .lifecycle__text,
  .parallax-slide p {
    text-align: start;
    -webkit-hyphens: manual;
    hyphens: manual;
    text-wrap: pretty;
  }
}

/* ─── 3. Contenu éditorial (pages de détail) ────────────────────────────
   !important indispensable : un contenu collé depuis un éditeur peut porter
   un `style="text-align:left"` en ligne, qui battrait une règle normale. */
.detail-content,
.detail-content p,
.detail-content li,
.prose p,
.prose li {
  text-align: justify !important;
  text-justify: inter-word;
}

/* ─── 4. RTL ────────────────────────────────────────────────────────────
   `justify` est valide en écriture droite-à-gauche et se combine avec
   `direction: rtl` ; `start` suit le sens de lecture : rien à redéclarer. */
