/* ============================================================
   style-fr-common.css — Shared French typography foundation
   ------------------------------------------------------------
   Loaded on EVERY French page (top + all sub-pages), AFTER the
   Japanese stylesheets so it wins on the cascade.

   Why this exists:
   The Japanese CSS (style.css / assets/css/style.css) applies
   `line-break: anywhere` to p/li and related text blocks to pull
   Japanese lines flush to the right edge. That rule is correct for
   Japanese, but for French it breaks words at arbitrary points
   ("stor / es", "representa / tives"). Here we restore proper
   French line-breaking site-wide: never split inside a word, never
   hyphenate; only wrap between whole words.

   Scope: everything is under html[lang="fr"], so Japanese and other
   languages are completely unaffected. To reuse for another Latin
   language, copy this file and swap html[lang="fr"].
   ============================================================ */

/* --- Core rule: never break inside a word (overrides line-break:anywhere) --- */
html[lang="fr"] body,
html[lang="fr"] p,
html[lang="fr"] li,
html[lang="fr"] dd,
html[lang="fr"] dt,
html[lang="fr"] td,
html[lang="fr"] th,
html[lang="fr"] a,
html[lang="fr"] span,
html[lang="fr"] em,
html[lang="fr"] b,
html[lang="fr"] strong,
html[lang="fr"] small,
html[lang="fr"] h1,
html[lang="fr"] h2,
html[lang="fr"] h3,
html[lang="fr"] h4,
html[lang="fr"] blockquote,
html[lang="fr"] figcaption {
  word-break: normal !important;   /* not break-all / keep-all */
  overflow-wrap: break-word;       /* wrap between words; break only unbreakable tokens */
  word-wrap: break-word;
  -webkit-hyphens: none;
  hyphens: none;                   /* never hyphenate */
  line-break: auto !important;     /* cancel the JA `line-break: anywhere` */
}

/* --- Long single tokens (e.g. long URLs) may still need a soft break,
       but normal English words must not. anywhere -> normal everywhere. --- */
html[lang="fr"] .info-section p,
html[lang="fr"] .info-section td,
html[lang="fr"] .info-section li,
html[lang="fr"] .news-article p,
html[lang="fr"] .news-article__body p,
html[lang="fr"] .cannes-lead__catch,
html[lang="fr"] .cannes-lead__sub,
html[lang="fr"] .cannes-lead__body,
html[lang="fr"] .cannes-quote__lead,
html[lang="fr"] .cannes-founder__text p,
html[lang="fr"] .cannes-founder__pull,
html[lang="fr"] .cannes-lead-line,
html[lang="fr"] .cannes-next p,
html[lang="fr"] .cannes-voices__note,
html[lang="fr"] .cannes-summary__row dd,
html[lang="fr"] .site-footer__notes p,
html[lang="fr"] .channel-card-large__title-ja,
html[lang="fr"] .channel-card-large__sub,
html[lang="fr"] .channel-card-large__desc,
html[lang="fr"] .channel-card-large__list,
html[lang="fr"] .why-card__text,
html[lang="fr"] .event-card__desc,
html[lang="fr"] .event-card__meta,
html[lang="fr"] .process-step__desc {
  line-break: auto !important;
  word-break: normal !important;
  overflow-wrap: break-word;
}

/* The "full ingredient list" is one very long comma-separated string of
   INCI names. Allow it to wrap naturally between names/commas without
   splitting an individual INCI name across lines where avoidable. */
html[lang="fr"] .info-section p {
  overflow-wrap: break-word;
}
