/* ─────────────────────────────────────────────────────────────────────────
   Feuille du document CV lui-même.
   Les dimensions sont en millimètres : ce que l'aperçu montre est ce que
   l'impression produit, au pixel près. Une page = 210 × 297 mm.
   ───────────────────────────────────────────────────────────────────────── */

.cv {
  --cv-accent: #1B4DFF;
  --cv-ink: #12151B;
  --cv-band: #12151B;
  --cv-soft: #EEF2FF;
  --cv-accent-line: #C8D2FF;
  --cv-muted: #5C6473;
  --cv-line: #E2E6EC;
  --cv-pad: 16mm;
  --cv-zoom: 1;
  --cv-lh: 1.5;

  width: 210mm;
  /* 296 et non 297 : à 297mm pile, l'arrondi sous-pixel du navigateur
     déborde d'un cheveu et fait sortir une deuxième page vide à l'impression. */
  min-height: 296mm;
  background: #fff;
  color: var(--cv-ink);
  font-family: "Inter", "IBM Plex Sans", Helvetica, Arial, "Noto Sans", "Noto Sans CJK SC", "Noto Sans CJK JP", "Noto Sans CJK KR", sans-serif;
  font-size: 10.2pt;
  line-height: var(--cv-lh);
  padding: var(--cv-pad);
  box-sizing: border-box;
  overflow-wrap: break-word;
}

/* « Tenir sur 1 page » : tout le contenu rétrécit d'un même facteur (texte,
   espacements, photo), la page, elle, reste un A4. Les deux seuls éléments qui
   touchent les bords de la page compensent le facteur plus bas. */
.cv-z { zoom: var(--cv-zoom); }

.cv--font-serif .cv-name,
.cv--font-serif .cv-h2,
.cv--font-serif .cv-item-role { font-family: "Newsreader", Georgia, "Times New Roman", "Noto Serif", "Noto Serif CJK SC", serif; }

.cv--compact { font-size: 9.5pt; }

/* ── En-tête ─────────────────────────────────────────────────────────────── */

.cv-header { margin-bottom: 7mm; }
.cv-header.has-photo, .cv-header.has-qr { display: flex; align-items: center; gap: 6mm; }
.cv-header__txt { flex: 1; min-width: 0; }
.cv-name { font-size: 22pt; font-weight: 600; letter-spacing: -0.02em; line-height: 1.05; }
.cv-title { color: var(--cv-accent); font-weight: 600; font-size: 11pt; margin-top: 1.5mm; }
.cv-contact {
  display: flex; flex-wrap: wrap; gap: 1mm 4mm;
  font-size: 8.6pt; color: var(--cv-muted); margin-top: 3mm;
}
/* Le séparateur est un vrai caractère écrit par le gabarit, pas un
   pseudo-élément : un pseudo-élément positionné en absolu se retrouve n'importe
   où dans la couche de texte du PDF, et le bloc contact atterrit en fin de
   document. Voir cv-render.js → SEP. */
.cv-sep { color: var(--cv-line); user-select: none; }

.cv-header--plain { border-bottom: 0.4mm solid var(--cv-line); padding-bottom: 5mm; }

/* Bandeau : l'en-tête déborde du padding de page pour toucher les bords. Le
   débord se divise par le facteur d'échelle : sans ça, en mode « 1 page », le
   bandeau s'arrêterait avant les bords. */
.cv-header--banner {
  background: var(--cv-band);
  color: #fff;
  margin: calc(-1 * var(--cv-pad) / var(--cv-zoom)) calc(-1 * var(--cv-pad) / var(--cv-zoom)) 8mm;
  padding: 13mm calc(var(--cv-pad) / var(--cv-zoom)) 11mm;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.cv-header--banner .cv-title { color: #fff; opacity: 0.82; }
.cv-header--banner .cv-contact { color: rgba(255, 255, 255, 0.72); }
.cv-header--banner .cv-sep { color: rgba(255, 255, 255, 0.35); }

/* ── Photo ───────────────────────────────────────────────────────────────── */

.cv-photo {
  flex: none;
  width: 30mm; height: 30mm;
  overflow: hidden;
  background: var(--cv-soft);
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.cv-photo img { display: block; width: 100%; height: 100%; object-fit: cover; }
.cv-photo--round { border-radius: 50%; }
.cv-photo--square { border-radius: 2.2mm; }
.cv--compact .cv-photo { width: 25mm; height: 25mm; }
.cv-header--banner .cv-photo { width: 28mm; height: 28mm; box-shadow: 0 0 0 0.9mm rgba(255, 255, 255, 0.85); }

/* ── Sections ────────────────────────────────────────────────────────────── */

.cv-section { margin-bottom: 6mm; }
.cv-section:last-child { margin-bottom: 0; }

.cv-h2 {
  font-size: 8.4pt;
  font-weight: 700;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--cv-accent);
  margin: 0 0 2.6mm;
  padding-bottom: 1.4mm;
  border-bottom: 0.3mm solid var(--cv-line);
}
/* Les écritures sans majuscules (chinois, japonais, coréen) n'ont pas besoin
   de l'espacement des capitales. */
.cv:lang(zh) .cv-h2, .cv:lang(ja) .cv-h2, .cv:lang(ko) .cv-h2 { letter-spacing: 0.04em; }

.cv-summary { margin: 0; color: var(--cv-muted); }

.cv-item { margin-bottom: 4.4mm; break-inside: avoid; }
.cv-item:last-child { margin-bottom: 0; }
.cv-item-head { display: flex; justify-content: space-between; gap: 4mm; align-items: baseline; }
.cv-item-role { font-weight: 600; font-size: 10.4pt; }
.cv-item-org { font-weight: 400; }
.cv-item-date { color: var(--cv-muted); font-size: 8.6pt; white-space: nowrap; }
.cv-item-loc, .cv-item-note { color: var(--cv-muted); font-size: 8.8pt; margin-top: 0.6mm; }

.cv-bullets { margin: 1.6mm 0 0; padding-left: 4.6mm; }
.cv-bullets li { margin-bottom: 1.1mm; color: var(--cv-muted); }
.cv-bullets li::marker { color: var(--cv-accent); }
.cv-bullets--free { margin-top: 0; }

.cv-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 1.8mm 1.2mm; }
.cv-tag {
  border: 0.3mm solid var(--cv-line);
  border-radius: 1mm;
  padding: 1mm 2.4mm;
  font-size: 8.8pt;
}
/* Le « · » entre deux étiquettes : petit, gris clair, sans cadre. Il reste
   un vrai caractère pour la couche de texte du PDF. */
.cv-tags > .cv-sep { font-size: 7pt; color: #C5CBD5; }
.cv-tags--stack { flex-direction: column; align-items: stretch; gap: 1.2mm; }
.cv-tags--stack > .cv-tag { border: 0; padding: 0; }

.cv-list { list-style: none; margin: 0; padding: 0; }
.cv-list li {
  display: flex; justify-content: space-between; gap: 3mm;
  font-size: 9.2pt; padding: 0.8mm 0;
  border-bottom: 0.2mm solid var(--cv-line);
}
.cv-list li:last-child { border-bottom: 0; }
.cv-list em { font-style: normal; color: var(--cv-muted); font-size: 8.6pt; text-align: right; }

/* ── QR code vers le CV en ligne ─────────────────────────────────────────── */

.cv-qr { flex: none; width: 19mm; height: 19mm; margin-left: auto; align-self: center; }
.cv-qr svg { display: block; width: 100%; height: 100%; }
.cv-qr--aside { margin: 7mm 0 0; }
.cv-header--banner .cv-qr { background: #fff; padding: 1.2mm; border-radius: 1mm; }

/* ── Chronologie ─────────────────────────────────────────────────────────── */

.cv-item--timeline { display: grid; grid-template-columns: 26mm 1fr; gap: 4mm; }
.cv-rail {
  font-size: 8.4pt; color: var(--cv-muted); padding-top: 0.8mm;
  border-right: 0.3mm solid var(--cv-line); padding-right: 3mm;
}
.cv--timeline .cv-item-head { display: block; }

/* ── Portrait : photo ronde au centre, nom en grand ──────────────────────── */

.cv-header--portrait {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  border-bottom: 0.4mm solid var(--cv-line); padding-bottom: 5mm;
}
.cv-header--portrait.has-photo { gap: 0; }
.cv-header--portrait .cv-photo { width: 34mm; height: 34mm; margin-bottom: 4mm; box-shadow: 0 0 0 1.4mm var(--cv-soft); }
.cv-header--portrait .cv-name { font-size: 24pt; }
.cv-header--portrait .cv-contact { justify-content: center; }
.cv-header--portrait .cv-qr { position: static; margin: 3mm 0 0; }
.cv--portrait .cv-h2 { display: flex; align-items: center; gap: 3mm; border-bottom: 0; padding-bottom: 0; }
.cv--portrait .cv-h2::after { content: ""; flex: 1; height: 0.3mm; background: var(--cv-accent-line); }

/* ── Deux colonnes / bande latérale ──────────────────────────────────────── */

.cv-cols { display: grid; grid-template-columns: 58mm 1fr; gap: 9mm; align-items: start; }
.cv--duo .cv-aside > .cv-photo { width: 34mm; height: 34mm; margin-bottom: 5mm; }
.cv--duo .cv-aside-name { font-size: 17pt; font-weight: 600; line-height: 1.1; margin-bottom: 1.5mm; }
.cv--duo .cv-aside-name span { display: block; font-size: 10pt; font-weight: 500; color: var(--cv-accent); margin-top: 1mm; }
.cv--duo .cv-aside .cv-contact { flex-direction: column; gap: 1mm; margin-bottom: 6mm; }
.cv--duo .cv-aside .cv-sep { display: none; }

.cv--sidebar { padding: 0; }
/* Hauteur d'une page entière, divisée par le facteur d'échelle pour rester un
   A4 plein en mode « 1 page ». */
.cv--sidebar .cv-cols { grid-template-columns: 62mm 1fr; gap: 0; min-height: calc(296mm / var(--cv-zoom)); }
.cv--sidebar .cv-aside {
  background: var(--cv-band);
  color: #fff;
  padding: 14mm 9mm;
  min-height: calc(296mm / var(--cv-zoom));
  box-sizing: border-box;
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
.cv--sidebar .cv-main { padding: 14mm 14mm 14mm 11mm; }
.cv--sidebar .cv-aside .cv-h2 { color: #fff; opacity: 0.6; border-bottom-color: rgba(255, 255, 255, 0.18); }
.cv--sidebar .cv-aside .cv-name { font-size: 18pt; }
.cv--sidebar .cv-aside .cv-title { color: #fff; opacity: 0.75; }
.cv--sidebar .cv-aside .cv-contact,
.cv--sidebar .cv-aside .cv-list li,
.cv--sidebar .cv-aside .cv-tags > .cv-tag { color: rgba(255, 255, 255, 0.85); }
.cv--sidebar .cv-aside .cv-sep { display: none; }
.cv--sidebar .cv-aside .cv-contact { flex-direction: column; gap: 1mm; }
.cv--sidebar .cv-aside .cv-list li { border-bottom-color: rgba(255, 255, 255, 0.15); }
.cv--sidebar .cv-aside .cv-list em { color: rgba(255, 255, 255, 0.55); }
.cv--sidebar .cv-header--aside { margin-bottom: 8mm; }
.cv--sidebar .cv-header--aside.has-photo, .cv--sidebar .cv-header--aside.has-qr { display: block; }
.cv--sidebar .cv-header--aside .cv-photo { width: 36mm; height: 36mm; margin: 0 0 6mm; box-shadow: 0 0 0 1mm rgba(255, 255, 255, 0.9); }
.cv--sidebar .cv-header--aside .cv-qr { margin: 6mm 0 0; background: #fff; padding: 1.2mm; border-radius: 1mm; }

/* Latérale claire : la colonne prend une teinte pâle de la couleur choisie. */
.cv--sidebar-light .cv-aside { background: var(--cv-soft); color: var(--cv-ink); }
.cv--sidebar-light .cv-aside .cv-h2 { color: var(--cv-accent); opacity: 1; border-bottom-color: var(--cv-accent-line); }
.cv--sidebar-light .cv-aside .cv-title { color: var(--cv-accent); opacity: 1; }
.cv--sidebar-light .cv-aside .cv-contact,
.cv--sidebar-light .cv-aside .cv-list li,
.cv--sidebar-light .cv-aside .cv-tags > .cv-tag { color: var(--cv-ink); }
.cv--sidebar-light .cv-aside .cv-contact { color: var(--cv-muted); }
.cv--sidebar-light .cv-aside .cv-list li { border-bottom-color: var(--cv-accent-line); }
.cv--sidebar-light .cv-aside .cv-list em { color: var(--cv-muted); }
.cv--sidebar-light .cv-header--aside .cv-photo { box-shadow: 0 0 0 1mm #fff; }
.cv--sidebar-light .cv-header--aside .cv-qr { background: transparent; padding: 0; }

/* ─────────────────────────────────────────────────────────────────────────
   Lettres (lettre de motivation, démission…) : une page A4 assortie au CV,
   même couleur (--lt-accent) et même police. Utilisée par l'aperçu et le PDF.
   ───────────────────────────────────────────────────────────────────────── */

.lt {
  --lt-accent: #1B4DFF;
  --lt-band: #12151B;
  width: 210mm;
  min-height: 296mm;
  padding: 20mm 22mm 18mm;
  box-sizing: border-box;
  background: #fff;
  color: #12151B;
  font-family: "Inter", "IBM Plex Sans", Helvetica, Arial, "Noto Sans", sans-serif;
  font-size: 10.6pt;
  line-height: 1.55;
  overflow-wrap: break-word;
}
.lt--font-serif .lt-name { font-family: "Newsreader", Georgia, "Times New Roman", serif; }

.lt-head { border-bottom: 0.4mm solid var(--lt-accent); padding-bottom: 5mm; margin-bottom: 10mm; }
.lt-name { font-size: 20pt; font-weight: 600; letter-spacing: -0.02em; line-height: 1.1; }
.lt-title { color: var(--lt-accent); font-weight: 600; font-size: 10.5pt; margin-top: 1.2mm; }
.lt-contact { display: flex; flex-wrap: wrap; gap: 0.8mm 2.5mm; font-size: 8.8pt; color: #5C6473; margin-top: 2.5mm; }
.lt-sep { color: #C9CFD8; }

/* En-tête en bandeau quand le CV en a un (bandeau, colonne latérale). */
.lt--band .lt-head {
  background: var(--lt-band); color: #fff; border: 0;
  margin: -20mm -22mm 11mm; padding: 15mm 22mm 10mm;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.lt--band .lt-title { color: #fff; opacity: 0.85; }
.lt--band .lt-contact { color: rgba(255, 255, 255, 0.78); }
.lt--band .lt-sep { color: rgba(255, 255, 255, 0.4); }

.lt-to { margin: 0 0 9mm auto; width: 78mm; font-size: 10.2pt; line-height: 1.45; }
.lt-to div:first-child { font-weight: 600; }
.lt-date { text-align: right; margin-bottom: 8mm; font-size: 10.2pt; }
.lt-mention { font-size: 8.8pt; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; margin-bottom: 4mm; color: #2C2F38; }
.lt-objet { margin-bottom: 8mm; }
.lt-objet b { color: var(--lt-accent); font-weight: 600; }
.lt-body p { margin: 0 0 4mm; text-align: justify; hyphens: auto; }
.lt-body .lt-appel { margin-bottom: 5mm; text-align: left; }
.lt-body .lt-formule { margin-top: 6mm; text-align: left; }
.lt-sign { margin: 6mm 0 0 auto; width: 70mm; }
.lt-sign__img { display: block; max-width: 58mm; max-height: 22mm; margin-bottom: 1.5mm; }
.lt-sign__nom { font-weight: 600; }

/* ── Impression ──────────────────────────────────────────────────────────── */

@page { size: A4; margin: 0; }

@media print {
  html, body { margin: 0; padding: 0; background: #fff; }
  .no-print { display: none !important; }
  .cv { box-shadow: none; margin: 0; }
}
