/* Motor de CV de Stilux para las maquetas: base.css + las 20 plantillas, generado desde
   backend/app/services/manual_cv_engine/css/ (13-10-2026). Lo global de base.css va acotado a .cvstage. */




















/* base.css (acotado a .cvstage) */
/* ============================================================
   CV SYSTEM — base.css
   Shared print foundation for all Stilux "Olympus" CV templates.
   Pairs with one per-template stylesheet (hestia.css, hera.css, …).
   Built for WeasyPrint (A4) and faithful in-browser preview.
   ============================================================ */


/* ---------- TOKENS ---------- */
.cvstage {
  --teal:#00B8A9; --teal-dark:#008B7D;
  --fg-1:#1D1D1F; --fg-2:#424245; --fg-3:#86868B; --fg-4:#9CA3AF;
  --hair:#E5E7EB;
  --font:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --display:'Plus Jakarta Sans', var(--font);

  /* default accent; each template overrides --accent */
  --accent:#2D3340;
  --accent-soft:rgba(45,51,64,.08);
  --accent-line:rgba(45,51,64,.16);

  /* editor-driven scaling: text scale + vertical density */
  --cv-fs:1; --cv-density:1;
}

.cvstage, .cvstage * { box-sizing:border-box; margin:0; padding:0; }

/* ---------- PAGE ---------- */

.cvstage { font-family:var(--font); color:var(--fg-1); }
.cvstage { font-size:calc(9.6pt * var(--cv-fs)); line-height:1.5; -webkit-font-smoothing:antialiased; }

@media screen {
  .cvstage { background:#e6e8ec; padding:34px 0; }
  .cv {
    width:210mm; min-height:297mm; margin:0 auto 34px;
    padding:13mm 15mm 14mm; background:#fff;
    box-shadow:0 4px 24px rgba(0,0,0,.10), 0 1px 4px rgba(0,0,0,.06);
  }
}
@media print { .cv { padding:0; } }

.cv { position:relative; font-family:var(--font); }

/* ---------- HEAD ---------- */
.cv__head { display:flex; align-items:center; gap:18px; }
.cv__photo {
  width:84px; height:84px; border-radius:50%;
  object-fit:cover; object-position:center top; flex:none;
}
/* B&W photo option (any template). On screen this CSS filter desaturates the photo; in the
   PDF WeasyPrint ignores filters, so the engine grayscales the image bytes (see engine.py). */
.cv--bw .cv__photo { filter:grayscale(100%); }
.cv__id { min-width:0; }
.cv__name {
  font-family:var(--display); font-weight:800;
  font-size:calc(27pt * var(--cv-fs)); line-height:1.02; letter-spacing:-.01em; color:var(--fg-1);
}
.cv__role {
  font-size:calc(11pt * var(--cv-fs)); font-weight:600; color:var(--accent);
  letter-spacing:.02em; margin-top:4px;
}
.cv__contact {
  list-style:none; display:flex; flex-wrap:wrap; gap:5px 16px;
  margin-top:9px; font-size:calc(8.8pt * var(--cv-fs)); color:var(--fg-2);
}
.cv__contact li { display:flex; align-items:center; gap:6px; white-space:nowrap; }
.cv__contact li::before {
  content:""; width:4px; height:4px; border-radius:50%;
  background:var(--accent); flex:none;
}

/* ---------- METRICS (hero band) ---------- */
.cv__metrics {
  display:grid; grid-template-columns:repeat(4,1fr); gap:1px;
  margin-top:calc(16px * var(--cv-density)); background:var(--accent-line);
  border:1px solid var(--accent-line); border-radius:8px; overflow:hidden;
}
.metric { background:#fff; padding:11px 13px; }
.metric__val {
  display:block; font-family:var(--display); font-weight:800;
  font-size:calc(17pt * var(--cv-fs)); line-height:1; color:var(--accent); letter-spacing:-.01em;
}
.metric__unit { font-size:calc(8pt * var(--cv-fs)); font-weight:600; color:var(--accent); opacity:.7; }
.metric__label {
  display:block; margin-top:5px; font-size:calc(7.4pt * var(--cv-fs)); line-height:1.3;
  color:var(--fg-3); text-transform:uppercase; letter-spacing:.04em;
}

/* ---------- COLUMNS ---------- */
.cv__cols {
  display:grid; grid-template-columns:1fr 33%; gap:26px;
  margin-top:calc(20px * var(--cv-density));
}
.cv__main { min-width:0; }
.cv__aside { min-width:0; }

/* ---------- BLOCK / SECTION TITLES ---------- */
.block + .block { margin-top:calc(16px * var(--cv-density)); }
.block__title {
  font-family:var(--display); font-weight:700; font-size:calc(10.5pt * var(--cv-fs));
  letter-spacing:.06em; text-transform:uppercase; color:var(--fg-1);
  padding-bottom:6px; margin-bottom:10px;
  border-bottom:1.5px solid var(--accent);
}
.cv__aside .block__title { font-size:calc(9.5pt * var(--cv-fs)); }

.summary { font-size:calc(9.4pt * var(--cv-fs)); line-height:calc(1.55 * var(--cv-density)); color:var(--fg-2); text-wrap:pretty; }

/* ---------- JOB ---------- */
.job { break-inside:avoid; }
.job + .job { margin-top:calc(13px * var(--cv-density)); }
.job__head { display:flex; justify-content:space-between; align-items:baseline; gap:12px; }
.job__role { font-size:calc(10pt * var(--cv-fs)); font-weight:700; color:var(--fg-1); }
.job__period {
  font-size:calc(8pt * var(--cv-fs)); font-weight:600; color:var(--fg-3);
  white-space:nowrap; flex:none; letter-spacing:.01em;
}
.job__company { font-size:calc(9pt * var(--cv-fs)); font-weight:600; color:var(--accent); margin-top:1px; }
/* location: shown to the right of the company name (Stilux overrides → its own line below) */
.job__location { color:var(--fg-3); font-weight:400; }
.job__location:not(:empty)::before { content:" · "; }
.job__bullets { list-style:none; margin-top:calc(6px * var(--cv-density)); display:flex; flex-direction:column; gap:calc(4px * var(--cv-density)); }
.job__bullets li {
  position:relative; padding-left:14px; font-size:calc(9pt * var(--cv-fs));
  line-height:calc(1.45 * var(--cv-density)); color:var(--fg-2); text-wrap:pretty;
}
.job__bullets li::before {
  content:""; position:absolute; left:2px; top:6.5px;
  width:4px; height:4px; border-radius:50%; background:var(--accent-line);
}
/* ---- per-template bullet markers: each fits its template's character + uses the accent ---- */
.cv--stilux   .job__bullets li::before { background:var(--accent); border:0; width:4px; height:4px; border-radius:50%; top:6.5px; left:2px; }                     /* clean accent dot */
.cv--hestia   .job__bullets li::before { background:var(--accent); border:0; width:8px; height:1.5px; border-radius:0; top:9px; left:0; }                        /* refined dash */
.cv--hera     .job__bullets li::before { background:var(--accent); border:0; width:4px; height:4px; border-radius:0; top:6.5px; left:2px; }                       /* editorial square */
.cv--zeus     .job__bullets li::before { background:var(--accent); border:0; width:5px; height:5px; border-radius:0; top:6px; left:1px; }                         /* bold square */
.cv--apolo    .job__bullets li::before { background:none; border:1px solid var(--accent); width:5px; height:5px; border-radius:50%; top:6px; left:1px; }          /* airy ring */
.cv--atenea   .job__bullets li::before { background:none; border:1px solid var(--accent); width:5px; height:5px; border-radius:0; top:6px; left:1px; }            /* hollow square */
.cv--demeter  .job__bullets li::before { background:var(--accent); border:0; width:5px; height:5px; border-radius:50%; top:6px; left:1px; }                       /* warm dot */
.cv--artemisa .job__bullets li::before { background:#fff; border:1.4px solid var(--accent); width:6px; height:6px; border-radius:50%; top:5px; left:0; }          /* timeline node */
.cv--poseidon .job__bullets li::before { background:var(--accent); border:0; width:7px; height:2.5px; border-radius:1px; top:8.5px; left:0; }                     /* tinted bar */
.cv--hefesto  .job__bullets li::before { background:none; border:1px solid var(--accent); width:4.5px; height:4.5px; border-radius:0; top:6.5px; left:1px; }      /* spec hollow square */
.cv--afrodita .job__bullets li::before { background:none; border:1px solid var(--accent); width:5px; height:5px; border-radius:50%; top:6px; left:1px; }          /* magazine ring */
.cv--dionisio .job__bullets li::before { background:var(--accent); border:0; width:9px; height:2px; border-radius:1px; top:9px; left:0; }                         /* expressive ribbon bar */

/* ---------- CHIPS ---------- */
.chips { list-style:none; display:flex; flex-wrap:wrap; gap:5px; }
.chips li {
  font-size:calc(8.2pt * var(--cv-fs)); font-weight:500; color:var(--fg-2);
  background:var(--accent-soft); border-radius:5px; padding:3.5px 8px;
  line-height:1.3;
}

/* ---------- ASIDE LISTS ---------- */
.aside-list { list-style:none; display:flex; flex-direction:column; gap:calc(9px * var(--cv-density)); }
.aside-item__line1 { font-size:calc(9pt * var(--cv-fs)); font-weight:600; color:var(--fg-1); line-height:1.3; }
.aside-item__line2 { font-size:calc(8.4pt * var(--cv-fs)); color:var(--fg-2); margin-top:1px; line-height:1.3; }
.aside-item__meta { font-size:calc(7.8pt * var(--cv-fs)); color:var(--fg-3); margin-top:2px; }

.lang { display:flex; flex-direction:column; gap:calc(7px * var(--cv-density)); list-style:none; }
.lang li { display:flex; justify-content:space-between; align-items:baseline; gap:8px; }
.lang__name { font-size:calc(9pt * var(--cv-fs)); font-weight:600; color:var(--fg-1); }
.lang__level { font-size:calc(8.2pt * var(--cv-fs)); color:var(--fg-3); }

/* ---------- UNA COLUMNA (13-10-2026: Suizo, Ejecutivo, Geométrico, Impacto, Clásico, Ma,
   Cronología y Sobrio, de design/cv-una-columna). cv-render.js les añade estas clases (GODS.cls).
   .cv--1col: de arriba abajo, en el orden en que lo lee un ATS; lo de la columna lateral va
   debajo, y cada formación, certificado o idioma ocupa una línea con su fecha al lado (nunca
   suelta en el margen, donde los lectores de PDF que leen por posición la separan). ---------- */
.cv--1col .cv__cols { grid-template-columns:1fr; gap:0; }
.cv--1col .cv__aside .block__title { font-size:inherit; }
.cv--1col .aside-list { gap:calc(4px * var(--cv-density)); }
.cv--1col .aside-list > li > div { display:inline; margin:0; }
.cv--1col .aside-item__line1 { font-size:calc(9.2pt * var(--cv-fs)); }
.cv--1col .aside-item__line2, .cv--1col .aside-item__meta { font-size:calc(9pt * var(--cv-fs)); color:var(--fg-2); }
.cv--1col .aside-item__line2:not(:empty)::before,
.cv--1col .aside-item__meta:not(:empty)::before { content:"  ·  "; white-space:pre; color:var(--fg-3); }
.cv--1col .lang { display:block; }
.cv--1col .lang li { display:inline; }
.cv--1col .lang li + li::before { content:"  ·  "; white-space:pre; color:var(--fg-3); }
.cv--1col .lang__level { font-size:calc(9pt * var(--cv-fs)); color:var(--fg-2); }
.cv--1col .lang__level::before { content:" "; }
/* .cv--tagtext: competencias y herramientas como texto separado por puntos, no como etiquetas */
.cv--tagtext .chips { display:block; font-size:calc(9pt * var(--cv-fs)); line-height:1.6; }
.cv--tagtext .chips li { display:inline; background:none; border:0; border-radius:0; padding:0; font-size:inherit; font-weight:400; color:var(--fg-2); }
/* el punto va al final de cada una (sin partirla), así una línea nueva nunca empieza por «·» */
.cv--tagtext .chips li { white-space:nowrap; }
.cv--tagtext .chips li:not(:last-child)::after { content:" ·"; font-size:inherit; color:var(--fg-3); }
/* .cv--kpiline: las cifras en una línea de texto entre filetes, sin cajas */
.cv--kpiline .cv__metrics {
  display:block; background:none; border:0; border-radius:0; overflow:visible;
  border-top:.6pt solid var(--accent-line); border-bottom:.6pt solid var(--accent-line);
  padding:7px 0; font-size:calc(9.6pt * var(--cv-fs)); line-height:1.5; color:var(--fg-2);
}
.cv--kpiline .metric { display:inline; background:none; padding:0; }
.cv--kpiline .metric + .metric::before { content:"·"; margin:0 7px 0 5px; color:var(--fg-3); }
.cv--kpiline .metric__val { display:inline; font-size:calc(11.5pt * var(--cv-fs)); letter-spacing:0; }
.cv--kpiline .metric__unit { font-size:inherit; }
.cv--kpiline .metric__label { display:inline; margin:0 0 0 4px; font-size:inherit; text-transform:none; letter-spacing:0; color:var(--fg-2); }

/* keep section headers with following content */
.block__title { break-after:avoid; }
.cv__head, .cv__metrics { break-inside:avoid; }

/* ── Carta de presentación (cabecera del CV + cuerpo de carta) ─────────────
   La carta reutiliza la cabecera .cv__head y el CSS del god activo; .cv--letter
   neutraliza cualquier layout de columnas del god para que el
   cuerpo fluya como documento. */
.cv--letter { display:block !important; }
.cv--letter .cv__metrics, .cv--letter .cv__cols, .cv--letter .cv__aside { display:none !important; }
.letter__body { margin-top:calc(26px * var(--cv-density)); font-size:calc(10pt * var(--cv-fs)); }
.letter__meta { display:flex; justify-content:space-between; gap:14px; margin:0 0 18px;
  font-size:calc(9pt * var(--cv-fs)); color:var(--fg-3); }
.letter__greeting { font-weight:600; margin:0 0 12px; }
.letter__body p { margin:0 0 11px; line-height:1.62; text-align:justify; }
.letter__closing { margin-top:16px; }
.letter__signature { font-weight:700; margin-top:2px; }

/* stilux.css */

/* ============================================================
   STILUX — la plantilla de marca. Réplica 1:1 del CV que genera
   el asistente de IA (pdf_generator._get_css_styles, variante con
   foto): cabecera a la IZQUIERDA con foto redonda, nombre ligero en
   mayúsculas, puesto en acento, contacto entre dos hairlines, banda
   de destacados en CAJA con borde redondeado, empresa en NEGRITA
   oscura (no en color), una sola columna y títulos de sección en
   acento sin subrayado, separados por hairlines entre secciones.
   ============================================================ */

.cv--stilux {
  --accent:#00b8a9;
  --accent-soft:rgba(0,184,169,.10);
  --accent-soft-border:rgba(0,184,169,.45);
  --hair-soft:#cccccc;
  --font:'Open Sans','Helvetica Neue',Arial,sans-serif;
  --display:'Open Sans','Helvetica Neue',Arial,sans-serif;
  --fg-1:#474747;
  --fg-2:#525252;
  --fg-3:#6b7280;
  /* tighter vertical rhythm to match the wizard's dense single page */
  --cv-density:.86;
}

.cv--stilux { color:#363636; }

/* ---------- HEAD: photo LEFT, text LEFT (wizard .cv-header--photo) ---------- */
.cv--stilux .cv__head {
  display:flex; flex-direction:row; align-items:flex-start;
  text-align:left; gap:22px;
}
.cv--stilux .cv__photo { width:3.8cm; height:3.8cm; object-position:center; filter:grayscale(100%); }
.cv--stilux .cv__id { flex:1; min-width:0; padding-top:4px; }
.cv--stilux .cv__name {
  font-size:calc(25pt * var(--cv-fs)); font-weight:300; letter-spacing:.05em;
  text-transform:uppercase; color:var(--fg-1); line-height:1.08;
}
.cv--stilux .cv__role {
  font-size:calc(9pt * var(--cv-fs)); font-weight:600; letter-spacing:.05em;
  text-transform:uppercase; color:var(--accent); margin-top:3px;
}
/* contact bracketed by two hairlines, like the wizard's header-line-left pair */
.cv--stilux .cv__contact {
  justify-content:flex-start; margin-top:9px; font-size:calc(9pt * var(--cv-fs));
  color:var(--fg-2); gap:5px 18px;
  border-top:.5px solid var(--hair-soft); border-bottom:.5px solid var(--hair-soft);
  padding:8px 0;
}
.cv--stilux .cv__contact li::before { background:var(--accent); }

/* ---------- METRICS: bordered rounded box (wizard .highlights-band) ---------- */
.cv--stilux .cv__metrics {
  display:flex; gap:0; overflow:visible;
  background:#fbfcfd; border:1px solid #e5e7eb; border-radius:12px;
  padding:12px 4px; margin-top:calc(14px * var(--cv-density));
}
.cv--stilux .metric {
  flex:1; background:transparent; text-align:left; padding:2px 16px;
  border-left:1px solid #eceef1;
}
.cv--stilux .metric:first-child { border-left:0; }
.cv--stilux .metric__val {
  color:var(--accent); font-weight:800; font-size:calc(15.5pt * var(--cv-fs)); line-height:1.1;
}
.cv--stilux .metric__unit { color:var(--accent); font-weight:600; font-size:calc(8pt * var(--cv-fs)); }
.cv--stilux .metric__label {
  color:var(--fg-3); font-size:calc(7.5pt * var(--cv-fs));
  text-transform:none; letter-spacing:normal; margin-top:3px; line-height:1.25;
}

/* ---------- single column body ---------- */
.cv--stilux .cv__cols { grid-template-columns:1fr; gap:0; margin-top:calc(16px * var(--cv-density)); }
.cv--stilux .cv__aside { display:block; }

/* ---------- section titles: accent, uppercase, NO underline (wizard h3.section-title)
   sections separated by a hairline ABOVE each block, except the very first ---------- */
.cv--stilux .block {
  border-top:.5px solid var(--hair-soft);
  padding-top:calc(12px * var(--cv-density));
  margin-top:calc(12px * var(--cv-density));
}
.cv--stilux .cv__main > .block:first-child { border-top:0; padding-top:0; margin-top:0; }
.cv--stilux .block + .block { margin-top:calc(12px * var(--cv-density)); }
.cv--stilux .block__title,
.cv--stilux .cv__aside .block__title {
  color:var(--accent); text-transform:uppercase; letter-spacing:.05em;
  font-size:calc(9.75pt * var(--cv-fs)); font-weight:300;
  border:0; padding-bottom:0; margin-bottom:calc(9px * var(--cv-density));
}

/* the wizard renders the profile as a bare lead paragraph (no "Perfil" heading) */
.cv--stilux .block--summary .block__title { display:none; }
.cv--stilux .summary {
  font-size:calc(9.75pt * var(--cv-fs)); line-height:1.6; color:var(--fg-2); text-align:justify;
}

/* ---------- experience: ONE line "Company | Location | Role" + date right (wizard) ----------
   Scoped to .job__head--line (experience + other_experience) so the separators don't leak
   into proyectos/voluntariado, which reuse .job__head with only name+date. */
.cv--stilux .job__head--line { display:flex; flex-wrap:wrap; align-items:baseline; gap:0; }
.cv--stilux .job__head--line .job__company { font-weight:700; color:var(--fg-1); font-size:calc(9.75pt * var(--cv-fs)); }
.cv--stilux .job__head--line .job__location { color:var(--fg-2); font-size:calc(9.75pt * var(--cv-fs)); }
.cv--stilux .job__head--line .job__role { font-weight:400; color:var(--fg-2); font-size:calc(9.75pt * var(--cv-fs)); }
.cv--stilux .job__head--line .job__location:not(:empty)::before,
.cv--stilux .job__head--line .job__role::before { content:"|"; color:#b9b9b9; margin:0 7px; font-weight:400; }
.cv--stilux .job__head--line .job__period {
  margin-left:auto; padding-left:10px; white-space:nowrap;
  font-size:calc(9pt * var(--cv-fs)); font-weight:400; color:#6d6d6d;
}
.cv--stilux .job__bullets li { font-size:calc(9.75pt * var(--cv-fs)); color:var(--fg-2); }
/* proyectos/voluntariado keep the project/role name as the bold dark lead (no separators) */
.cv--stilux .job__head:not(.job__head--line) .job__role { font-weight:600; color:var(--fg-1); font-size:calc(9.75pt * var(--cv-fs)); }
.cv--stilux .job__head:not(.job__head--line) .job__period { font-size:calc(9pt * var(--cv-fs)); font-weight:400; color:#6d6d6d; }
.cv--stilux .job__company { font-weight:600; color:var(--fg-1); font-size:calc(9.5pt * var(--cv-fs)); }

/* ---------- PILLS: wizard parity — professional = grey, technical = accent ----------
   Both rounded + bordered (a slightly darker outline than the fill), like pdf_generator's
   .skill-pill / .skill-pill--accent. Skills (Competencias profesionales) stay grey;
   tech (Competencias técnicas) follow the chosen accent via --accent-soft/-border. */
.cv--stilux .chips { gap:6px; }
.cv--stilux .chips li { border:1px solid transparent; border-radius:8px; padding:3px 10px; font-weight:500; line-height:1.3; }
.cv--stilux .block--skills .chips li { background:#f3f4f6; border-color:#d1d5db; color:#374151; }
.cv--stilux .block--tech .chips li { background:var(--accent-soft); border-color:var(--accent-soft-border); color:var(--accent); }

/* ---------- EDUCATION: wizard parity — ONE line "<strong>School</strong> | Degree … dates-right"
   Reflows the shared aside-list DOM (line1=degree, line2=school, meta=period) via flex+order,
   so the editor's in-situ add/delete tooling keeps working untouched. Scoped to education only
   (certifications keep the stacked aside-list). */
.cv--stilux .block--education .aside-list { gap:calc(5px * var(--cv-density)); }
.cv--stilux .block--education .aside-list > li { display:flex; flex-wrap:wrap; align-items:baseline; }
.cv--stilux .block--education .aside-item__line2 { order:1; font-weight:700; color:var(--fg-1); font-size:calc(9pt * var(--cv-fs)); margin-top:0; }
.cv--stilux .block--education .aside-item__line1 { order:2; font-weight:400; color:var(--fg-2); font-size:calc(9pt * var(--cv-fs)); }
.cv--stilux .block--education .aside-item__line1::before { content:"|"; color:#b9b9b9; margin:0 7px; }
.cv--stilux .block--education .aside-item__meta { order:3; margin-left:auto; margin-top:0; white-space:nowrap; font-size:calc(8.5pt * var(--cv-fs)); color:#6d6d6d; }

/* ---------- LANGUAGES: wizard parity — ONE inline line "<strong>Name</strong> - Level | …"
   Overrides the base .lang flex-column into an inline run; separators via pseudo-elements
   so the editable spans + delete tooling stay intact. */
.cv--stilux .lang--inline { display:block; font-size:calc(9pt * var(--cv-fs)); line-height:1.6; color:var(--fg-2); }
.cv--stilux .lang--inline li { display:inline; }
.cv--stilux .lang--inline .lang__name { font-weight:700; color:var(--fg-1); }
.cv--stilux .lang--inline .lang__level { color:var(--fg-2); }
.cv--stilux .lang--inline .lang__level::before { content:" - "; color:var(--fg-2); white-space:pre; }
.cv--stilux .lang--inline li:not(:last-child)::after { content:"|"; color:#b9b9b9; margin:0 7px; }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--stilux.cv--letter .letter__body { margin-top:calc(30px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); color:#363636; }
.cv--stilux.cv--letter .letter__meta { display:block; margin:0 0 22px; }
.cv--stilux.cv--letter .letter__meta > span { display:block; }
.cv--stilux.cv--letter .letter__meta > span:first-child { color:var(--accent); text-transform:uppercase; letter-spacing:.05em; font-size:calc(9.4pt * var(--cv-fs)); font-weight:600; }
.cv--stilux.cv--letter .letter__meta > span:last-child { color:#6d6d6d; font-size:calc(9pt * var(--cv-fs)); margin-top:2px; }
.cv--stilux.cv--letter .letter__body p { text-align:left; line-height:1.7; margin:0 0 12px; }
.cv--stilux.cv--letter p.letter__greeting { font-weight:600; font-size:calc(11pt * var(--cv-fs)); color:#1f1f1f; margin-bottom:14px; }
.cv--stilux.cv--letter p.letter__closing { margin-top:20px; }
.cv--stilux.cv--letter p.letter__signature::before { content:""; display:block; width:28px; height:2px; background:var(--accent); margin:16px 0 8px; }
.cv--stilux.cv--letter p.letter__signature { font-weight:300; text-transform:uppercase; letter-spacing:.02em; font-size:calc(16pt * var(--cv-fs)); color:#1f1f1f; }

/* hestia.css */

/* ============================================================
   HESTIA — cálida, literaria, centrada. Serif Spectral de
   principio a fin; rol en cursiva. Una columna. Neutro: taupe.
   ============================================================ */

.cv--hestia {
  --accent:#7A6A58;
  --accent-soft:rgba(122,106,88,.10);
  --accent-line:rgba(122,106,88,.22);
  --font:'Spectral', Georgia, serif;
  --display:'Spectral', Georgia, serif;
}

/* centered header, photo above name */
.cv--hestia .cv__head {
  flex-direction:column; text-align:center; gap:12px; align-items:center;
}
.cv--hestia .cv__photo { width:96px; height:96px; }
.cv--hestia .cv__name { font-size:calc(30pt * var(--cv-fs)); font-weight:600; letter-spacing:.005em; }
.cv--hestia .cv__role {
  font-style:italic; font-weight:500; font-size:calc(12pt * var(--cv-fs)); letter-spacing:.01em;
  text-transform:none; margin-top:8px;
}
.cv--hestia .cv__contact { justify-content:center; margin-top:11px; font-size:calc(9.4pt * var(--cv-fs)); }

/* a slim centered rule under the header */
.cv--hestia .cv__head::after {
  content:""; display:block; width:52px; height:1.5px;
  background:var(--accent); margin:6px auto 0; order:9;
}

/* metrics: borderless, divided by hairlines */
.cv--hestia .cv__metrics {
  background:transparent; border:0; border-top:1px solid var(--accent-line);
  border-bottom:1px solid var(--accent-line); border-radius:0; gap:0;
  margin-top:18px;
}
.cv--hestia .metric { text-align:center; padding:13px 10px; }
.cv--hestia .metric + .metric { border-left:1px solid var(--accent-line); }
.cv--hestia .metric__label { text-transform:none; letter-spacing:.01em; font-size:calc(8pt * var(--cv-fs)); font-style:italic; }

/* single column */
.cv--hestia .cv__cols { grid-template-columns:1fr; gap:18px; margin-top:22px; }

/* centered serif section titles, small caps feel */
.cv--hestia .block__title {
  text-align:center; border:0; padding-bottom:0; margin-bottom:13px;
  letter-spacing:.10em; font-size:calc(12pt * var(--cv-fs)); font-weight:600; text-transform:uppercase; position:relative;
}
.cv--hestia .block__title::after {
  content:""; display:block; width:34px; height:1.5px; background:var(--accent);
  margin:7px auto 0;
}
.cv--hestia .cv__aside .block__title { font-size:calc(12pt * var(--cv-fs)); }
.cv--hestia .summary { text-align:center; font-size:calc(10.2pt * var(--cv-fs)); line-height:1.6; }

.cv--hestia .job__role { font-size:calc(11pt * var(--cv-fs)); font-weight:600; }
.cv--hestia .job__company { font-style:italic; }
.cv--hestia .job__bullets li { font-size:calc(9.6pt * var(--cv-fs)); }

/* aside sections sit full width in two soft columns */
.cv--hestia .chips { justify-content:center; }
.cv--hestia .cv__aside {
  display:grid; grid-template-columns:1fr 1fr; gap:18px 30px; margin-top:2px;
}
.cv--hestia .cv__aside > .block:first-child { grid-column:1 / -1; }
.cv--hestia .cv__aside .block { margin-top:0; }
.cv--hestia .cv__aside .block + .block { margin-top:0; }
.cv--hestia .chips li { background:var(--accent-soft); font-size:calc(8.6pt * var(--cv-fs)); }

/* Pie a una columna (13-10-2026): en 2 columnas, los lectores de PDF que leen por posición
   (ATS) leían primero la fila de títulos y luego todo el contenido seguido, y metían las
   competencias en la sección equivocada. Los bloques del pie van uno debajo de otro. */
.cv--hestia .cv__aside { display:block; }
.cv--hestia .cv__aside .block + .block { margin-top:calc(18px * var(--cv-density)); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--hestia.cv--letter .letter__body { margin-top:calc(30px * var(--cv-density)); font-size:calc(11pt * var(--cv-fs)); }
.cv--hestia.cv--letter .letter__meta { display:block; text-align:center; margin:0 0 24px; }
.cv--hestia.cv--letter .letter__meta > span { display:block; }
.cv--hestia.cv--letter .letter__meta > span:first-child { text-transform:uppercase; letter-spacing:.08em; font-size:calc(9pt * var(--cv-fs)); font-weight:600; color:var(--fg-1); }
.cv--hestia.cv--letter .letter__meta > span:last-child { font-style:italic; color:var(--fg-3); margin-top:3px; }
.cv--hestia.cv--letter .letter__meta::after { content:""; display:block; width:34px; height:1.5px; background:var(--accent); margin:12px auto 0; }
.cv--hestia.cv--letter .letter__body p { text-align:justify; line-height:1.72; margin:0 0 12px; }
.cv--hestia.cv--letter p.letter__greeting { text-align:left; font-style:italic; font-weight:400; font-size:calc(12pt * var(--cv-fs)); margin-bottom:14px; }
.cv--hestia.cv--letter p.letter__closing { text-align:center; font-style:italic; margin-top:24px; }
.cv--hestia.cv--letter p.letter__signature { text-align:center; text-transform:uppercase; letter-spacing:.08em; font-weight:600; font-size:calc(11pt * var(--cv-fs)); }

/* hera.css */

/* ============================================================
   HERA — regia, editorial, alto contraste. Titulares Playfair
   Display, cuerpo Source Sans. Dos columnas, foto arriba-dcha.
   Neutro: pizarra profunda.
   ============================================================ */

.cv--hera {
  --accent:#2D3340;
  --accent-soft:rgba(45,51,64,.07);
  --accent-line:rgba(45,51,64,.18);
  --font:'Source Sans 3', sans-serif;
  --display:'Playfair Display', Georgia, serif;
}

/* header: name left, photo right, square-ish */
.cv--hera .cv__head { align-items:flex-start; justify-content:space-between; }
.cv--hera .cv__id { order:0; }
.cv--hera .cv__photo {
  order:1; width:96px; height:108px; border-radius:6px;
  box-shadow:0 0 0 1px var(--accent-line);
}
.cv--hera .cv__name { font-size:calc(34pt * var(--cv-fs)); font-weight:800; line-height:.98; letter-spacing:0; }
.cv--hera .cv__role {
  font-family:var(--font); text-transform:uppercase; letter-spacing:.2em;
  font-size:calc(9.5pt * var(--cv-fs)); font-weight:600; margin-top:8px;
}
.cv--hera .cv__head { padding-bottom:16px; border-bottom:2.5px solid var(--accent); }
.cv--hera .cv__contact { font-size:calc(9pt * var(--cv-fs)); }

/* metrics: clean outlined cells, serif numerals */
.cv--hera .cv__metrics { margin-top:18px; border-radius:6px; }
.cv--hera .metric__val { font-size:calc(19pt * var(--cv-fs)); font-weight:700; }

/* section titles: serif, accent bar to the left, no underline */
.cv--hera .block__title {
  font-family:var(--display); font-weight:700; text-transform:none;
  font-size:calc(14pt * var(--cv-fs)); letter-spacing:0;
  border:0; padding:0 0 0 13px; margin-bottom:11px; position:relative;
}
.cv--hera .block__title::before {
  content:""; position:absolute; left:0; top:3px; bottom:3px;
  width:4px; border-radius:2px; background:var(--accent);
}

.cv--hera .job__role { font-size:calc(11pt * var(--cv-fs)); font-weight:700; }
.cv--hera .cv__cols { gap:28px; }

/* aside blocks on a soft tinted card */
.cv--hera .cv__aside .block {
  background:var(--accent-soft); border-radius:8px; padding:13px 14px;
}
.cv--hera .cv__aside .block + .block { margin-top:12px; }
.cv--hera .cv__aside .block__title { padding-left:11px; font-size:calc(12.5pt * var(--cv-fs)); }
.cv--hera .chips li { background:#fff; }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--hera.cv--letter .letter__body { margin-top:calc(30px * var(--cv-density)); font-size:calc(10.8pt * var(--cv-fs)); }
.cv--hera.cv--letter .letter__meta { display:block; border-left:4px solid var(--accent); padding:2px 0 2px 12px; margin:0 0 24px; }
.cv--hera.cv--letter .letter__meta > span { display:block; }
.cv--hera.cv--letter .letter__meta > span:first-child { font-weight:700; color:var(--fg-1); }
.cv--hera.cv--letter .letter__meta > span:last-child { color:var(--fg-3); font-size:calc(9pt * var(--cv-fs)); margin-top:2px; }
.cv--hera.cv--letter .letter__body p { text-align:left; line-height:1.68; margin:0 0 12px; }
.cv--hera.cv--letter p.letter__greeting { font-family:var(--display); font-weight:700; font-size:calc(15pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:14px; }
.cv--hera.cv--letter p.letter__closing { margin-top:22px; }
.cv--hera.cv--letter p.letter__signature { font-family:var(--display); font-weight:700; font-size:calc(16pt * var(--cv-fs)); color:var(--fg-1); }

/* zeus.css */

/* ============================================================
   ZEUS — imponente. Nombre condensado Oswald en mayúsculas,
   cabecera oscura a sangre con las métricas dentro. Cuerpo
   Inter. Neutro: casi-negro.
   ============================================================ */

.cv--zeus {
  --accent:#1F2937;
  --accent-soft:rgba(31,41,55,.07);
  --accent-line:rgba(31,41,55,.16);
  --font:'Inter', sans-serif;
  --display:'Oswald', 'Arial Narrow', sans-serif;
}

/* full-bleed dark banner */
.cv--zeus .cv__head {
  background:var(--accent); color:#fff; align-items:center; gap:22px;
  margin:-13mm -15mm 0; padding:18mm 15mm 9mm;
}
/* keep the full-bleed in print too: the negative margins cancel @page's 13/15 margin so the
   banner reaches the page edge (matching the on-screen visor). No print override. */
.cv--zeus .cv__photo {
  width:96px; height:96px; box-shadow:0 0 0 3px rgba(255,255,255,.18);
}
.cv--zeus .cv__name {
  color:#fff; font-size:calc(38pt * var(--cv-fs)); font-weight:600; line-height:.95;
  text-transform:uppercase; letter-spacing:.01em;
}
.cv--zeus .cv__role {
  color:rgba(255,255,255,.74); font-family:var(--display); font-weight:500;
  font-size:calc(14pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.14em; margin-top:5px;
}
.cv--zeus .cv__contact { color:rgba(255,255,255,.82); font-size:calc(9pt * var(--cv-fs)); }
.cv--zeus .cv__contact li::before { background:rgba(255,255,255,.55); }

/* metrics ride the seam under the banner */
.cv--zeus .cv__metrics {
  margin:-13px -15mm 0; padding:0 15mm; background:transparent;
  border:0; border-radius:0; gap:14px; grid-template-columns:repeat(4,1fr);
}
.cv--zeus .metric {
  background:#fff; border:1px solid var(--accent-line); border-radius:8px;
  box-shadow:0 4px 14px rgba(0,0,0,.07); padding:12px 14px; text-align:center;
}
.cv--zeus .metric__val { font-size:calc(22pt * var(--cv-fs)); font-weight:600; }
.cv--zeus .metric__label { font-family:var(--font); }

/* heavy condensed section headers with a thick rule */
.cv--zeus .block__title {
  font-weight:600; font-size:calc(15pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.04em;
  border-bottom-width:3px; border-bottom-color:var(--accent); padding-bottom:4px;
}
.cv--zeus .cv__cols { margin-top:24px; }
.cv--zeus .job__role { font-size:calc(11pt * var(--cv-fs)); font-weight:700; }

/* Fecha pegada al puesto (13-10-2026): suelta en el margen derecho, los lectores de PDF que
   leen por posición (ATS) la separan de su puesto. */
.cv--zeus .job__head { display:block; }
.cv--zeus .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--zeus.cv--letter .letter__body { margin-top:calc(34px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); }
.cv--zeus.cv--letter .letter__meta { font-family:var(--display); text-transform:uppercase; letter-spacing:.04em; font-size:calc(10pt * var(--cv-fs)); color:var(--fg-1); padding-bottom:8px; border-bottom:3px solid var(--accent); margin:0 0 22px; }
.cv--zeus.cv--letter .letter__meta > span:last-child { color:var(--fg-3); }
.cv--zeus.cv--letter .letter__body p { text-align:left; line-height:1.68; margin:0 0 12px; }
.cv--zeus.cv--letter p.letter__greeting { font-family:var(--display); text-transform:uppercase; letter-spacing:.02em; font-weight:600; font-size:calc(14pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:14px; }
.cv--zeus.cv--letter p.letter__closing { margin-top:22px; }
.cv--zeus.cv--letter p.letter__signature { font-family:var(--display); text-transform:uppercase; letter-spacing:.03em; font-weight:600; font-size:calc(18pt * var(--cv-fs)); color:var(--accent); }

/* apolo.css */

/* ============================================================
   APOLO — ligera, geométrica, aireada. Jost de principio a
   fin, pesos finos y tracking amplio. Hairlines. Dos columnas.
   Neutro: gris frío.
   ============================================================ */

.cv--apolo {
  --accent:#5B6B7A;
  --accent-soft:rgba(91,107,122,.08);
  --accent-line:rgba(91,107,122,.20);
  --font:'Jost', sans-serif;
  --display:'Jost', sans-serif;
}

.cv--apolo .cv__name { font-weight:500; font-size:calc(30pt * var(--cv-fs)); letter-spacing:.02em; }
.cv--apolo .cv__photo { width:78px; height:78px; }
.cv--apolo .cv__role {
  text-transform:uppercase; letter-spacing:.34em; font-size:calc(8.8pt * var(--cv-fs)); font-weight:400; margin-top:8px;
}
.cv--apolo .cv__head { padding-bottom:16px; border-bottom:1px solid var(--hair); }
.cv--apolo .cv__contact { font-size:calc(9pt * var(--cv-fs)); }

/* metrics: open, no fills — divided by hairlines only */
.cv--apolo .cv__metrics {
  background:transparent; border:0; border-radius:0; gap:0;
  border-bottom:1px solid var(--hair); margin-top:18px;
}
.cv--apolo .metric { padding:14px; }
.cv--apolo .metric + .metric { border-left:1px solid var(--hair); }
.cv--apolo .metric__val { font-weight:500; font-size:calc(20pt * var(--cv-fs)); }
.cv--apolo .metric__label { letter-spacing:.08em; }

/* micro tracked titles with a long hairline */
.cv--apolo .block__title {
  border:0; padding:0; margin-bottom:13px; text-transform:uppercase;
  font-size:calc(9pt * var(--cv-fs)); font-weight:500; letter-spacing:.05em; color:var(--accent);
  display:flex; align-items:center; gap:12px;
}
.cv--apolo .block__title::after { content:""; flex:1; height:1px; background:var(--hair); }
.cv--apolo .cv__cols { gap:32px; margin-top:24px; }
.cv--apolo .block + .block { margin-top:22px; }

.cv--apolo .job + .job { margin-top:16px; }
.cv--apolo .job__role { font-weight:500; font-size:calc(11pt * var(--cv-fs)); }
.cv--apolo .job__company { font-weight:400; }

.cv--apolo .chips li {
  background:transparent; border:1px solid var(--accent-line); color:var(--fg-2);
  border-radius:980px; padding:4px 11px;
}

/* Fecha pegada al puesto (13-10-2026): suelta en el margen derecho, los lectores de PDF que
   leen por posición (ATS) la separan de su puesto. */
.cv--apolo .job__head { display:block; }
.cv--apolo .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--apolo.cv--letter .letter__body { margin-top:calc(36px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); color:var(--fg-2); }
.cv--apolo.cv--letter .letter__meta { text-transform:uppercase; letter-spacing:.05em; font-size:calc(8.6pt * var(--cv-fs)); color:var(--fg-3); padding-bottom:10px; border-bottom:1px solid var(--hair); margin:0 0 26px; }
.cv--apolo.cv--letter .letter__body p { text-align:left; line-height:1.85; margin:0 0 13px; }
.cv--apolo.cv--letter p.letter__greeting { font-weight:500; font-size:calc(12.5pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:16px; }
.cv--apolo.cv--letter p.letter__closing { margin-top:26px; }
.cv--apolo.cv--letter p.letter__signature { font-weight:300; font-size:calc(20pt * var(--cv-fs)); color:var(--fg-1); letter-spacing:-.01em; }

/* atenea.css */

/* ============================================================
   ATENEA — estratégica, técnica, estructurada. Titulares Space
   Grotesk, cuerpo IBM Plex Sans. Una columna con pie de 3.
   Neutro: tinta fría.
   ============================================================ */

.cv--atenea {
  --accent:#33384A;
  --accent-soft:rgba(51,56,74,.07);
  --accent-line:rgba(51,56,74,.16);
  --font:'IBM Plex Sans', sans-serif;
  --display:'Space Grotesk', sans-serif;
}

/* header: photo left, name + role grouped to its right, contact far right */
.cv--atenea .cv__head {
  align-items:center; gap:18px;
  padding-bottom:14px; border-bottom:2px solid var(--accent);
}
.cv--atenea .cv__photo { width:74px; height:74px; border-radius:6px; }
.cv--atenea .cv__id {
  flex:1; display:grid; grid-template-columns:1fr auto;
  align-items:center; column-gap:18px;
}
.cv--atenea .cv__name { grid-column:1; grid-row:1; font-size:calc(29pt * var(--cv-fs)); font-weight:700; letter-spacing:-.02em; }
.cv--atenea .cv__role {
  grid-column:1; grid-row:2;
  font-family:var(--display); text-transform:uppercase; letter-spacing:.1em;
  font-size:calc(9.5pt * var(--cv-fs)); font-weight:500;
}
.cv--atenea .cv__contact {
  grid-column:2; grid-row:1 / span 2; align-self:center;
  flex-direction:column; gap:4px; align-items:flex-end; text-align:right;
  flex:none; margin-top:0; font-size:calc(9pt * var(--cv-fs)); font-variant-numeric:tabular-nums;
}

/* single column */
.cv--atenea .cv__cols { grid-template-columns:1fr; gap:16px; margin-top:18px; }

/* section titles: full hairline with an accent tick at the start */
.cv--atenea .block__title {
  border-bottom:1px solid var(--accent-line); padding-bottom:6px;
  position:relative; letter-spacing:.02em; font-size:calc(12pt * var(--cv-fs)); font-weight:600;
  text-transform:uppercase;
}
.cv--atenea .block__title::before {
  content:""; position:absolute; left:0; bottom:-1px; width:42px; height:2px;
  background:var(--accent);
}
.cv--atenea .job__role { font-weight:600; font-size:calc(10.5pt * var(--cv-fs)); }
.cv--atenea .job__period { font-variant-numeric:tabular-nums; }

/* footer trio: educación · certificaciones · idiomas in 3 columns */
.cv--atenea .cv__aside {
  display:grid; grid-template-columns:repeat(3,1fr); gap:16px 24px;
}
.cv--atenea .cv__aside .block { margin-top:0; }
.cv--atenea .cv__aside > .block:nth-child(1),
.cv--atenea .cv__aside > .block:nth-child(2) { grid-column:1 / -1; }
.cv--atenea .chips li { border-radius:5px; }

/* Fecha pegada al puesto (13-10-2026): suelta en el margen derecho, los lectores de PDF que
   leen por posición (ATS) la separan de su puesto. */
.cv--atenea .job__head { display:block; }
.cv--atenea .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }

/* Pie a una columna (13-10-2026): en 3 columnas, los lectores de PDF que leen por posición
   (ATS) leían primero la fila de títulos y luego todo el contenido seguido, y metían las
   competencias en la sección equivocada. Los bloques del pie van uno debajo de otro. */
.cv--atenea .cv__aside { display:block; }
.cv--atenea .cv__aside .block + .block { margin-top:calc(16px * var(--cv-density)); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--atenea.cv--letter .letter__body { margin-top:calc(28px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); }
.cv--atenea.cv--letter .letter__meta { font-family:var(--display); font-size:calc(9.4pt * var(--cv-fs)); color:var(--fg-1); padding:8px 0; border-top:1px solid var(--accent-line); border-bottom:1px solid var(--accent-line); margin:0 0 22px; }
.cv--atenea.cv--letter .letter__meta > span:last-child { color:var(--fg-3); }
.cv--atenea.cv--letter .letter__body p { text-align:left; line-height:1.68; margin:0 0 12px; }
.cv--atenea.cv--letter p.letter__greeting { font-family:var(--display); font-weight:600; font-size:calc(12pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:14px; }
.cv--atenea.cv--letter p.letter__closing { margin-top:22px; }
.cv--atenea.cv--letter p.letter__signature::before { content:""; display:block; width:42px; height:2px; background:var(--accent); margin:14px 0 8px; }
.cv--atenea.cv--letter p.letter__signature { font-family:var(--display); font-weight:600; font-size:calc(14pt * var(--cv-fs)); color:var(--fg-1); }

/* demeter.css */

/* ============================================================
   DEMÉTER — cálida y orgánica. Titulares serif Lora, cuerpo
   Mulish. Híbrida: cuerpo a una columna + aside a dos.
   Neutro: oliva-arena.
   ============================================================ */

.cv--demeter {
  --accent:#6E7257;
  --accent-soft:rgba(110,114,87,.10);
  --accent-line:rgba(110,114,87,.24);
  --font:'Mulish', sans-serif;
  --display:'Lora', Georgia, serif;
}

.cv--demeter .cv__head { gap:20px; align-items:center; }
.cv--demeter .cv__photo { width:92px; height:92px; }
.cv--demeter .cv__name { font-size:calc(31pt * var(--cv-fs)); font-weight:600; letter-spacing:0; }
.cv--demeter .cv__role {
  font-family:var(--display); font-style:italic; font-weight:500;
  text-transform:none; letter-spacing:.01em; font-size:calc(12.5pt * var(--cv-fs)); margin-top:5px;
}
.cv--demeter .cv__head { padding-bottom:15px; border-bottom:1px solid var(--accent-line); }
.cv--demeter .cv__contact { font-size:calc(9pt * var(--cv-fs)); }

/* metrics: soft filled tiles */
.cv--demeter .cv__metrics {
  background:var(--accent-soft); border:1px solid var(--accent-line); gap:1px;
}
.cv--demeter .metric { background:var(--accent-soft); }
.cv--demeter .metric__val { font-size:calc(19pt * var(--cv-fs)); font-weight:700; }

/* single main column */
.cv--demeter .cv__cols { grid-template-columns:1fr; gap:18px; margin-top:20px; }

/* section titles: serif + leading dash + warm underline */
.cv--demeter .block__title {
  font-family:var(--display); font-weight:600; text-transform:none;
  font-size:calc(14pt * var(--cv-fs)); letter-spacing:0;
  border-bottom:1.5px solid var(--accent-line); padding-bottom:6px;
  display:flex; align-items:center; gap:10px;
}
.cv--demeter .block__title::before {
  content:""; width:20px; height:2px; background:var(--accent); flex:none;
}
.cv--demeter .summary { font-size:calc(9.8pt * var(--cv-fs)); line-height:1.6; }
.cv--demeter .job__role { font-size:calc(10.5pt * var(--cv-fs)); font-weight:700; }

/* aside competencias/herramientas/idiomas in 2 columns */
.cv--demeter .cv__aside {
  display:grid; grid-template-columns:1fr 1fr; gap:16px 26px;
}
.cv--demeter .cv__aside .block { margin-top:0; }
.cv--demeter .cv__aside > .block:nth-child(1) { grid-column:1 / -1; }
.cv--demeter .chips li { border-radius:980px; padding:4px 11px; }

/* Pie a una columna (13-10-2026): en 2 columnas, los lectores de PDF que leen por posición
   (ATS) leían primero la fila de títulos y luego todo el contenido seguido, y metían las
   competencias en la sección equivocada. Los bloques del pie van uno debajo de otro. */
.cv--demeter .cv__aside { display:block; }
.cv--demeter .cv__aside .block + .block { margin-top:calc(16px * var(--cv-density)); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--demeter.cv--letter .letter__body { margin-top:calc(28px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); }
.cv--demeter.cv--letter .letter__meta { background:var(--accent-soft); border-radius:10px; padding:10px 14px; margin:0 0 24px; font-size:calc(9.2pt * var(--cv-fs)); }
.cv--demeter.cv--letter .letter__meta > span:first-child { font-weight:700; color:var(--fg-1); }
.cv--demeter.cv--letter .letter__meta > span:last-child { color:var(--fg-2); }
.cv--demeter.cv--letter .letter__body p { text-align:left; line-height:1.72; margin:0 0 12px; }
.cv--demeter.cv--letter p.letter__greeting { font-family:var(--display); font-style:italic; font-weight:600; font-size:calc(14pt * var(--cv-fs)); color:var(--accent); margin-bottom:14px; }
.cv--demeter.cv--letter p.letter__closing { margin-top:22px; }
.cv--demeter.cv--letter p.letter__signature { font-family:var(--display); font-style:italic; font-weight:600; font-size:calc(17pt * var(--cv-fs)); color:var(--fg-1); }

/* artemisa.css */

/* ============================================================
   ARTEMISA — precisa y minimal. Manrope de principio a fin,
   pesos finos. Una columna con línea de tiempo en experiencia.
   Neutro: azul-plata.
   ============================================================ */

.cv--artemisa {
  --accent:#5A6470;
  --accent-soft:rgba(90,100,112,.08);
  --accent-line:rgba(90,100,112,.20);
  --font:'Manrope', sans-serif;
  --display:'Manrope', sans-serif;
}

.cv--artemisa .cv__name { font-weight:800; font-size:calc(28pt * var(--cv-fs)); letter-spacing:-.02em; }
.cv--artemisa .cv__photo { width:80px; height:80px; }
.cv--artemisa .cv__role { text-transform:uppercase; letter-spacing:.26em; font-size:calc(8.8pt * var(--cv-fs)); font-weight:600; margin-top:7px; }
.cv--artemisa .cv__head { padding-bottom:16px; border-bottom:1px solid var(--hair); }
.cv--artemisa .cv__contact { font-size:calc(9pt * var(--cv-fs)); }

/* metrics open, hairline divided */
.cv--artemisa .cv__metrics {
  background:transparent; border:0; border-radius:0; gap:0;
  border-bottom:1px solid var(--hair);
}
.cv--artemisa .metric + .metric { border-left:1px solid var(--hair); }
.cv--artemisa .metric__val { font-weight:800; font-size:calc(19pt * var(--cv-fs)); }

/* single column */
.cv--artemisa .cv__cols { grid-template-columns:1fr; gap:18px; margin-top:22px; }

/* tracked micro titles, dot marker */
.cv--artemisa .block__title {
  border:0; padding:0; margin-bottom:14px; text-transform:uppercase;
  font-size:calc(9.5pt * var(--cv-fs)); font-weight:700; letter-spacing:.11em; color:var(--accent);
  display:flex; align-items:center; gap:9px;
}
.cv--artemisa .block__title::before {
  content:""; width:6px; height:6px; border-radius:50%; background:var(--accent); flex:none;
}

/* timeline rail on the experience block */
.cv--artemisa .block--exp { position:relative; }
.cv--artemisa .block--exp .job {
  position:relative; padding-left:20px; border-left:1.5px solid var(--accent-line);
  padding-bottom:2px;
}
.cv--artemisa .block--exp .job + .job { margin-top:15px; }
.cv--artemisa .block--exp .job::before {
  content:""; position:absolute; left:-5.5px; top:4px;
  width:9px; height:9px; border-radius:50%;
  background:#fff; border:2px solid var(--accent);
}
.cv--artemisa .job__role { font-weight:700; }

/* aside: two airy columns */
.cv--artemisa .cv__aside { display:grid; grid-template-columns:1fr 1fr; gap:18px 28px; }
.cv--artemisa .cv__aside .block { margin-top:0; }
.cv--artemisa .cv__aside > .block:nth-child(1) { grid-column:1 / -1; }
.cv--artemisa .chips li { background:transparent; border:1px solid var(--accent-line); }

/* Fecha pegada al puesto (13-10-2026): suelta en el margen derecho, los lectores de PDF que
   leen por posición (ATS) la separan de su puesto. */
.cv--artemisa .job__head { display:block; }
.cv--artemisa .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }

/* Pie a una columna (13-10-2026): en 2 columnas, los lectores de PDF que leen por posición
   (ATS) leían primero la fila de títulos y luego todo el contenido seguido, y metían las
   competencias en la sección equivocada. Los bloques del pie van uno debajo de otro. */
.cv--artemisa .cv__aside { display:block; }
.cv--artemisa .cv__aside .block + .block { margin-top:calc(18px * var(--cv-density)); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
/* el cuerpo lleva el raíl de la línea de tiempo del CV */
.cv--artemisa.cv--letter .letter__body { margin-top:calc(30px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); border-left:1.5px solid var(--accent-line); padding-left:20px; }
.cv--artemisa.cv--letter .letter__meta { text-transform:uppercase; letter-spacing:.08em; font-size:calc(8.4pt * var(--cv-fs)); font-weight:700; color:var(--accent); margin:0 0 22px; }
.cv--artemisa.cv--letter .letter__meta > span:last-child { color:var(--fg-3); font-weight:600; }
.cv--artemisa.cv--letter .letter__meta > span:first-child::before { content:""; display:inline-block; width:6px; height:6px; border-radius:50%; background:var(--accent); margin-right:8px; vertical-align:1px; }
.cv--artemisa.cv--letter .letter__body p { text-align:left; line-height:1.7; margin:0 0 12px; }
.cv--artemisa.cv--letter p.letter__greeting { font-weight:700; font-size:calc(12pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:14px; }
.cv--artemisa.cv--letter p.letter__closing { margin-top:22px; }
.cv--artemisa.cv--letter p.letter__signature { font-weight:800; font-size:calc(14pt * var(--cv-fs)); color:var(--fg-1); }

/* poseidon.css */

/* ============================================================
   POSEIDÓN — sereno, con presencia editorial. Titulares serif
   Newsreader, cuerpo Inter. Banda de cabecera teñida a sangre;
   cuerpo a una columna. Neutro: pizarra marina.
   ============================================================ */

.cv--poseidon {
  --accent:#2E5266;
  --accent-soft:rgba(46,82,102,.08);
  --accent-line:rgba(46,82,102,.18);
  --font:'Inter', sans-serif;
  --display:'Newsreader', Georgia, serif;
}

/* tinted full-bleed header band */
.cv--poseidon .cv__head {
  background:var(--accent-soft); align-items:center; gap:20px;
  margin:-13mm -15mm 0; padding:13mm 15mm 18px;
  border-bottom:3px solid var(--accent);
}
/* keep the full-bleed band in print too (negative margins cancel @page's margin) */
.cv--poseidon .cv__photo { width:94px; height:94px; box-shadow:0 0 0 3px #fff, 0 0 0 4px var(--accent-line); }
.cv--poseidon .cv__name { font-size:calc(33pt * var(--cv-fs)); font-weight:600; letter-spacing:0; }
.cv--poseidon .cv__role {
  font-family:var(--display); font-style:italic; font-weight:500;
  text-transform:none; letter-spacing:.01em; font-size:calc(13pt * var(--cv-fs)); margin-top:3px;
}
.cv--poseidon .cv__contact { font-size:calc(9pt * var(--cv-fs)); }

/* metrics sit just under the band, soft tiles */
.cv--poseidon .cv__metrics {
  margin-top:18px; background:var(--accent-line);
  border:1px solid var(--accent-line); border-radius:8px;
}
.cv--poseidon .metric__val { font-size:calc(19pt * var(--cv-fs)); font-weight:700; }

/* single column */
.cv--poseidon .cv__cols { grid-template-columns:1fr; gap:18px; margin-top:20px; }

/* serif section titles: solid short underline */
.cv--poseidon .block__title {
  font-family:var(--display); font-weight:600; text-transform:none;
  font-size:calc(14.5pt * var(--cv-fs)); letter-spacing:0;
  border:0; padding-bottom:7px; margin-bottom:11px; position:relative;
  box-shadow:inset 0 -1px 0 var(--accent-line);
}
.cv--poseidon .block__title::after {
  content:""; position:absolute; left:0; bottom:0; width:46px; height:3px;
  background:var(--accent); border-radius:2px;
}
.cv--poseidon .job__role { font-size:calc(10.5pt * var(--cv-fs)); font-weight:700; }

/* aside in two columns */
.cv--poseidon .cv__aside { display:grid; grid-template-columns:1fr 1fr; gap:16px 26px; }
.cv--poseidon .cv__aside .block { margin-top:0; }
.cv--poseidon .cv__aside > .block:nth-child(1) { grid-column:1 / -1; }
.cv--poseidon .chips li { background:var(--accent-soft); }

/* Pie a una columna (13-10-2026): en 2 columnas, los lectores de PDF que leen por posición
   (ATS) leían primero la fila de títulos y luego todo el contenido seguido, y metían las
   competencias en la sección equivocada. Los bloques del pie van uno debajo de otro. */
.cv--poseidon .cv__aside { display:block; }
.cv--poseidon .cv__aside .block + .block { margin-top:calc(16px * var(--cv-density)); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--poseidon.cv--letter .letter__body { margin-top:calc(30px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); }
.cv--poseidon.cv--letter .letter__meta { display:block; font-size:calc(9.2pt * var(--cv-fs)); color:var(--fg-3); margin:0 0 22px; }
.cv--poseidon.cv--letter .letter__meta > span { display:block; }
.cv--poseidon.cv--letter .letter__meta > span:last-child { margin-top:2px; }
.cv--poseidon.cv--letter .letter__meta > span:first-child { color:var(--fg-1); font-weight:600; }
.cv--poseidon.cv--letter .letter__body p { text-align:left; line-height:1.7; margin:0 0 12px; }
.cv--poseidon.cv--letter p.letter__greeting { font-family:var(--display); font-weight:600; font-size:calc(15pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:16px; }
.cv--poseidon.cv--letter p.letter__greeting::after { content:""; display:block; width:46px; height:3px; border-radius:2px; background:var(--accent); margin-top:8px; }
.cv--poseidon.cv--letter p.letter__closing { margin-top:22px; }
.cv--poseidon.cv--letter p.letter__signature { font-family:var(--display); font-style:italic; font-weight:500; font-size:calc(17pt * var(--cv-fs)); color:var(--accent); }

/* hefesto.css */

/* ============================================================
   HEFESTO — técnica, de taller. Estética "ficha de specs":
   secciones numeradas, metadatos monoespaciados, destacados
   como tabla con líneas de puntos. Archivo + Space Mono.
   Neutro: grafito-acero.
   ============================================================ */

.cv--hefesto {
  --accent:#36404A;
  --accent-soft:rgba(54,64,74,.07);
  --accent-line:rgba(54,64,74,.22);
  --mono:'Space Mono', monospace;
  --font:'Archivo', sans-serif;
  --display:'Archivo', sans-serif;
  counter-reset:sec;
}

/* header: name left, mono "spec card" of contact right */
.cv--hefesto .cv__head {
  align-items:flex-start; justify-content:space-between; gap:20px;
  padding-bottom:14px; border-bottom:2px solid var(--accent);
}
.cv--hefesto .cv__photo { width:76px; height:76px; border-radius:6px; order:0; }
.cv--hefesto .cv__id { flex:1; }
.cv--hefesto .cv__name { font-size:calc(29pt * var(--cv-fs)); font-weight:800; letter-spacing:-.025em; }
.cv--hefesto .cv__role {
  font-family:var(--mono); text-transform:uppercase; letter-spacing:.04em;
  font-size:calc(9pt * var(--cv-fs)); font-weight:400; margin-top:6px;
}
.cv--hefesto .cv__contact {
  flex-direction:column; align-items:flex-end; text-align:right; gap:5px;
  margin-top:0; flex:none; font-family:var(--mono); font-size:calc(8.2pt * var(--cv-fs)); color:var(--fg-2);
}
.cv--hefesto .cv__contact li::before { display:none; }

/* DESTACADOS as a spec sheet */
.cv--hefesto .spec {
  margin-top:16px; border:1px solid var(--accent-line); border-radius:8px;
  overflow:hidden;
}
.cv--hefesto .spec__row {
  display:flex; align-items:baseline; gap:12px; padding:10px 16px;
}
.cv--hefesto .spec__row + .spec__row { border-top:1px dashed var(--accent-line); }
.cv--hefesto .spec__label {
  font-family:var(--mono); font-size:calc(8pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.03em;
  color:var(--fg-3); white-space:nowrap;
}
.cv--hefesto .spec__dots { flex:1; border-bottom:1.5px dotted var(--accent-line); transform:translateY(-3px); }
.cv--hefesto .spec__val {
  font-weight:800; font-size:calc(14pt * var(--cv-fs)); color:var(--accent); white-space:nowrap; letter-spacing:-.01em;
}
.cv--hefesto .spec__val small { font-family:var(--mono); font-size:calc(8pt * var(--cv-fs)); font-weight:400; }

/* single column, numbered sections */
.cv--hefesto .cv__cols { grid-template-columns:1fr; gap:18px; margin-top:20px; }
.cv--hefesto .block__title {
  border:0; box-shadow:inset 0 -1px 0 var(--accent-line);
  padding-bottom:6px; font-weight:700; font-size:calc(11pt * var(--cv-fs)); letter-spacing:.02em;
  text-transform:uppercase; display:flex; align-items:baseline; gap:11px;
}
.cv--hefesto .block__title::before {
  counter-increment:sec; content:counter(sec, decimal-leading-zero);
  font-family:var(--mono); font-weight:700; font-size:calc(10pt * var(--cv-fs)); color:var(--accent);
}

/* jobs: mono periods, company tag */
.cv--hefesto .job__period { font-family:var(--mono); font-size:calc(7.6pt * var(--cv-fs)); }
.cv--hefesto .job__company { font-family:var(--mono); font-size:calc(8.4pt * var(--cv-fs)); letter-spacing:.02em; }
.cv--hefesto .job__role { font-weight:700; }

/* footer: 3-up edu / cert / lang */
.cv--hefesto .cv__aside { display:grid; grid-template-columns:repeat(3,1fr); gap:16px 22px; }
.cv--hefesto .cv__aside .block { margin-top:0; }
.cv--hefesto .cv__aside > .block:nth-child(1),
.cv--hefesto .cv__aside > .block:nth-child(2) { grid-column:1 / -1; }
.cv--hefesto .chips li {
  background:transparent; border:1px solid var(--accent-line); border-radius:4px;
  font-family:var(--mono); font-size:calc(7.6pt * var(--cv-fs)); color:var(--fg-2);
}
.cv--hefesto .lang__level { font-family:var(--mono); font-size:calc(7.8pt * var(--cv-fs)); }

/* Fecha pegada al puesto (13-10-2026): suelta en el margen derecho, los lectores de PDF que
   leen por posición (ATS) la separan de su puesto. */
.cv--hefesto .job__head { display:block; }
.cv--hefesto .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }

/* Pie a una columna (13-10-2026): en 3 columnas, los lectores de PDF que leen por posición
   (ATS) leían primero la fila de títulos y luego todo el contenido seguido, y metían las
   competencias en la sección equivocada. Los bloques del pie van uno debajo de otro. */
.cv--hefesto .cv__aside { display:block; }
.cv--hefesto .cv__aside .block + .block { margin-top:calc(16px * var(--cv-density)); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--hefesto.cv--letter .letter__body { margin-top:calc(28px * var(--cv-density)); font-size:calc(10.4pt * var(--cv-fs)); }
.cv--hefesto.cv--letter .letter__meta { font-family:var(--mono); text-transform:uppercase; letter-spacing:.03em; font-size:calc(8pt * var(--cv-fs)); color:var(--fg-3); padding-bottom:8px; border-bottom:1.5px dotted var(--accent-line); margin:0 0 22px; }
.cv--hefesto.cv--letter .letter__meta > span:first-child { color:var(--accent); }
.cv--hefesto.cv--letter .letter__body p { text-align:left; line-height:1.68; margin:0 0 12px; }
.cv--hefesto.cv--letter p.letter__greeting { font-weight:700; font-size:calc(12pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:14px; }
.cv--hefesto.cv--letter p.letter__closing { margin-top:22px; }
.cv--hefesto.cv--letter p.letter__signature { font-weight:800; font-size:calc(15pt * var(--cv-fs)); color:var(--fg-1); letter-spacing:-.01em; }

/* afrodita.css */

/* ============================================================
   AFRODITA — editorial de revista. Display Cormorant Garamond
   a gran tamaño, cuerpo Mulish. Capitular en el perfil,
   destacados en línea elegante con separadores finos, columna
   asimétrica con filete vertical. Neutro: rosa-malva apagado.
   ============================================================ */

.cv--afrodita {
  --accent:#9A6A62;
  --accent-soft:rgba(154,106,98,.09);
  --accent-line:rgba(154,106,98,.26);
  --font:'Mulish', sans-serif;
  --display:'Cormorant Garamond', Georgia, serif;
}

/* centered masthead */
.cv--afrodita .cv__head { flex-direction:column; align-items:center; text-align:center; gap:12px; }
.cv--afrodita .cv__photo { width:92px; height:92px; }
.cv--afrodita .cv__name { font-size:calc(44pt * var(--cv-fs)); font-weight:600; letter-spacing:.01em; line-height:.95; }
.cv--afrodita .cv__role {
  font-family:var(--display); font-style:italic; font-weight:500; font-size:calc(15pt * var(--cv-fs));
  text-transform:none; letter-spacing:.02em; color:var(--accent); margin-top:2px;
}
.cv--afrodita .cv__contact { justify-content:center; font-size:calc(9pt * var(--cv-fs)); margin-top:8px; }
/* (removed the decorative 60px masthead underline: it read as a stray artifact in the PDF,
   sitting just above the stat-line's own top border) */

/* highlights: an elegant inline stat line, no boxes */
.cv--afrodita .statline {
  display:grid; grid-template-columns:repeat(4,1fr); margin-top:20px;
  border-top:1px solid var(--accent-line); border-bottom:1px solid var(--accent-line);
}
.cv--afrodita .sline { text-align:center; padding:14px 10px; }
.cv--afrodita .sline + .sline { border-left:1px solid var(--accent-line); }
.cv--afrodita .sline__val {
  font-family:var(--display); font-weight:600; font-size:calc(25pt * var(--cv-fs)); line-height:1; color:var(--accent);
}
.cv--afrodita .sline__val span { font-size:calc(11pt * var(--cv-fs)); font-style:italic; }
.cv--afrodita .sline__label {
  font-size:calc(7.4pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.13em; color:var(--fg-3);
  margin-top:6px; line-height:1.3;
}

/* asymmetric columns with a hairline divider */
.cv--afrodita .cv__cols { grid-template-columns:1fr 31%; gap:30px; margin-top:24px; }
.cv--afrodita .cv__aside { border-left:1px solid var(--accent-line); padding-left:26px; }

/* drop cap on the summary — WeasyPrint 68.1 ASSERTS on `float` in ::first-letter
   (browsers handle it fine). Use an enlarged coloured initial WITHOUT the float so
   it renders identically in the browser preview and the server PDF. */
.cv--afrodita .summary { font-size:calc(9.8pt * var(--cv-fs)); line-height:1.62; }
.cv--afrodita .block--summary .summary::first-letter {
  font-family:var(--display); font-weight:600; font-size:2.4em; line-height:1;
  color:var(--accent); padding-right:0; /* sin hueco: con él, los lectores de PDF leen «G erente» */
}

/* serif italic section titles */
.cv--afrodita .block__title {
  font-family:var(--display); font-weight:600; font-style:italic; text-transform:none;
  font-size:calc(18pt * var(--cv-fs)); letter-spacing:0; border:0; padding-bottom:4px; margin-bottom:11px;
  border-bottom:1px solid var(--accent-line);
}
.cv--afrodita .cv__aside .block__title { font-size:calc(15pt * var(--cv-fs)); }
.cv--afrodita .job__role { font-weight:700; font-size:calc(10.5pt * var(--cv-fs)); }
.cv--afrodita .job__company { font-style:italic; color:var(--accent); font-weight:600; }
.cv--afrodita .chips li { background:var(--accent-soft); }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
.cv--afrodita.cv--letter .letter__body { margin-top:calc(30px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); }
.cv--afrodita.cv--letter .letter__meta { font-family:var(--display); font-style:italic; font-size:calc(11.5pt * var(--cv-fs)); color:var(--fg-2); padding-bottom:10px; border-bottom:1px solid var(--accent-line); margin:0 0 24px; }
.cv--afrodita.cv--letter .letter__body p { text-align:justify; line-height:1.74; margin:0 0 12px; }
.cv--afrodita.cv--letter p.letter__greeting { text-align:left; font-family:var(--display); font-style:italic; font-weight:600; font-size:calc(18pt * var(--cv-fs)); color:var(--accent); margin-bottom:14px; }
/* la capital del primer párrafo, como el perfil del CV (sin hueco: con él se lee «L es») */
.cv--afrodita.cv--letter .letter__greeting + p::first-letter,
.cv--afrodita.cv--letter .letter__greeting + .le-para > p::first-letter { font-family:var(--display); font-weight:600; font-size:2.4em; line-height:1; color:var(--accent); padding-right:0; }
.cv--afrodita.cv--letter p.letter__closing { text-align:left; font-style:italic; margin-top:22px; }
.cv--afrodita.cv--letter p.letter__signature { text-align:left; font-family:var(--display); font-style:italic; font-weight:600; font-size:calc(22pt * var(--cv-fs)); color:var(--fg-1); }

/* dionisio.css */

/* ============================================================
   DIONISIO — expresiva y contemporánea. Display Bricolage
   Grotesque, cuerpo Inter. Destacados en una CINTA a sangre
   color vino con cifras grandes en negativo. Neutro: vino.
   ============================================================ */

.cv--dionisio {
  --accent:#7A2E4E;
  --accent-soft:rgba(122,46,78,.08);
  --accent-line:rgba(122,46,78,.20);
  --font:'Inter', sans-serif;
  --display:'Bricolage Grotesque', sans-serif;
}

/* header: photo left, bold name right */
.cv--dionisio .cv__head { align-items:center; gap:22px; padding-bottom:16px; }
.cv--dionisio .cv__photo { width:96px; height:96px; border-radius:14px; }
.cv--dionisio .cv__name { font-size:calc(34pt * var(--cv-fs)); font-weight:800; letter-spacing:-.025em; line-height:.98; }
.cv--dionisio .cv__role {
  color:var(--accent); font-weight:700; font-size:calc(11.5pt * var(--cv-fs));
  text-transform:uppercase; letter-spacing:.1em; margin-top:6px;
}
.cv--dionisio .cv__contact { font-size:calc(9pt * var(--cv-fs)); }

/* highlights: full-bleed wine ribbon, reversed-out figures */
.cv--dionisio .ribbon {
  background:var(--accent); color:#fff; margin:0 -15mm; padding:18px 15mm;
  display:grid; grid-template-columns:repeat(4,1fr);
}
/* keep the full-bleed ribbon in print too (negative margins cancel @page's margin) */
.cv--dionisio .rib { padding:0 18px; }
.cv--dionisio .rib + .rib { border-left:1px solid rgba(255,255,255,.24); }
.cv--dionisio .rib__val {
  font-family:var(--display); font-weight:800; font-size:calc(27pt * var(--cv-fs)); line-height:1; letter-spacing:-.02em;
}
.cv--dionisio .rib__val span { font-size:calc(11pt * var(--cv-fs)); font-weight:600; opacity:.78; }
.cv--dionisio .rib__label {
  font-size:calc(7.6pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.08em; opacity:.85;
  margin-top:7px; line-height:1.3;
}

/* body */
.cv--dionisio .cv__cols { grid-template-columns:1fr 33%; gap:28px; margin-top:22px; }

/* section titles with a filled wine tab */
.cv--dionisio .block__title {
  border:0; padding:0 0 0 13px; margin-bottom:11px; position:relative;
  font-family:var(--display); font-weight:700; text-transform:none;
  font-size:calc(14pt * var(--cv-fs)); letter-spacing:-.01em;
}
.cv--dionisio .block__title::before {
  content:""; position:absolute; left:0; top:2px; bottom:2px; width:5px;
  border-radius:3px; background:var(--accent);
}
.cv--dionisio .job__role { font-family:var(--display); font-weight:700; font-size:calc(11pt * var(--cv-fs)); }
.cv--dionisio .job__company { color:var(--accent); font-weight:600; }

/* aside */
.cv--dionisio .cv__aside .block { background:var(--accent-soft); border-radius:10px; padding:13px 14px; }
.cv--dionisio .cv__aside .block + .block { margin-top:12px; }
.cv--dionisio .cv__aside .block__title { font-size:calc(12.5pt * var(--cv-fs)); padding-left:11px; }
.cv--dionisio .chips li { background:#fff; }

/* Fecha pegada al puesto (13-10-2026): suelta en el margen derecho, los lectores de PDF que
   leen por posición (ATS) la separan de su puesto. */
.cv--dionisio .job__head { display:block; }
.cv--dionisio .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
/* destinatario y fecha en la cinta de color del CV, a sangre */
.cv--dionisio.cv--letter .letter__body { margin-top:0; font-size:calc(10.6pt * var(--cv-fs)); }
.cv--dionisio.cv--letter .letter__meta { margin:calc(24px * var(--cv-density)) -15mm 26px; padding:12px 15mm; background:var(--accent); color:#fff; font-weight:600; font-size:calc(9.6pt * var(--cv-fs)); }
.cv--dionisio.cv--letter .letter__meta > span:last-child { color:rgba(255,255,255,.85); font-weight:500; }
.cv--dionisio.cv--letter .letter__body p { text-align:left; line-height:1.7; margin:0 0 12px; }
.cv--dionisio.cv--letter p.letter__greeting { font-family:var(--display); font-weight:800; font-size:calc(15pt * var(--cv-fs)); color:var(--fg-1); margin-bottom:14px; }
.cv--dionisio.cv--letter p.letter__closing { margin-top:22px; }
.cv--dionisio.cv--letter p.letter__signature { font-family:var(--display); font-weight:800; font-size:calc(17pt * var(--cv-fs)); color:var(--accent); }

/* suizo.css */

/* ============================================================
   SUIZO — una columna. Nombre enorme, filetes negros y la página
   leída por bloques; el rojo solo marca la estructura (puesto,
   títulos y etiquetas de las cifras). Archivo de principio a fin.
   De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--suizo {
  --accent:#E2231A;
  --accent-soft:rgba(226,35,26,.08);
  --accent-line:rgba(17,17,17,.2);
  --font:'Archivo', 'Helvetica Neue', Arial, sans-serif;
  --display:'Archivo', 'Helvetica Neue', Arial, sans-serif;
  --fg-1:#111111; --fg-2:#2E2E2E; --fg-3:#767676;
}

.cv--suizo .cv__head { align-items:flex-end; gap:16px; padding-bottom:14px; border-bottom:2.6pt solid #111; }
.cv--suizo .cv__photo { width:76px; height:76px; border-radius:0; }
.cv--suizo .cv__name { font-size:calc(36pt * var(--cv-fs)); font-weight:800; letter-spacing:-.04em; line-height:.95; }
.cv--suizo .cv__role { font-size:calc(12.5pt * var(--cv-fs)); font-weight:500; letter-spacing:0; margin-top:8px; }
.cv--suizo .cv__contact { color:#111; font-weight:500; margin-top:8px; }
.cv--suizo .cv__contact li::before { background:#111; }

/* cifras: sin cajas, enormes en negro con su etiqueta en rojo */
.cv--suizo .cv__metrics {
  background:transparent; border:0; border-radius:0; gap:0 14px;
  margin-top:calc(14px * var(--cv-density));
}
.cv--suizo .metric { background:transparent; padding:0; }
.cv--suizo .metric__val { font-size:calc(22pt * var(--cv-fs)); font-weight:800; letter-spacing:-.04em; color:#111; }
.cv--suizo .metric__unit { color:#111; }
.cv--suizo .metric__label { color:var(--accent); font-weight:700; letter-spacing:.08em; font-size:calc(6.8pt * var(--cv-fs)); }

/* cada sección, con su filete negro arriba */
.cv--suizo .cv__cols { margin-top:calc(14px * var(--cv-density)); }
.cv--suizo .block { border-top:.8pt solid #111; padding-top:7px; }
.cv--suizo .block + .block, .cv--suizo .cv__aside { margin-top:calc(13px * var(--cv-density)); }
.cv--suizo .block__title {
  font-size:calc(8.4pt * var(--cv-fs)); font-weight:700; letter-spacing:.05em; text-transform:uppercase;
  color:var(--accent); border:0; padding:0; margin-bottom:7px;
}
.cv--suizo .job__role { font-size:calc(10.4pt * var(--cv-fs)); }
.cv--suizo .job__company { color:#111; font-weight:500; }
.cv--suizo .job__period { color:#111; font-weight:500; font-size:calc(8.8pt * var(--cv-fs)); }
.cv--suizo .job__bullets li::before { background:#111; border:0; width:8px; height:1.2px; border-radius:0; top:8px; left:0; }
.cv--suizo .chips li { color:#111; }

/* ejecutivo.css */

/* ============================================================
   EJECUTIVO — una columna, serena. Cabecera centrada con un
   filete dorado, cifras en una sola línea entre filetes. Playfair
   Display + Lato. Verde bosque; el oro, solo en detalles.
   De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--ejecutivo {
  --accent:#1E4D3A;
  --accent-soft:rgba(30,77,58,.08);
  --accent-line:#DDD0BA;
  --gold:#A88350;
  --font:'Lato', 'Helvetica Neue', Arial, sans-serif;
  --display:'Playfair Display', Georgia, serif;
  --fg-1:#202322; --fg-2:#444947; --fg-3:#868B88;
}

.cv--ejecutivo .cv__head { flex-direction:column; align-items:center; text-align:center; gap:8px; }
.cv--ejecutivo .cv__head::after { content:""; display:block; width:26mm; margin:2px auto 0; border-top:1pt solid var(--gold); }
.cv--ejecutivo .cv__photo { width:70px; height:70px; }
.cv--ejecutivo .cv__name { font-weight:600; font-size:calc(27pt * var(--cv-fs)); color:var(--accent); letter-spacing:.005em; }
.cv--ejecutivo .cv__role {
  color:var(--gold); font-weight:700; font-size:calc(9.2pt * var(--cv-fs));
  letter-spacing:.1em; text-transform:uppercase; margin-top:8px;
}
.cv--ejecutivo .cv__contact { justify-content:center; }
.cv--ejecutivo .cv__contact li::before { background:var(--gold); }

/* las cifras, en una línea entre filetes (ver .cv--kpiline en base.css) */
.cv--ejecutivo .cv__metrics { text-align:center; }
.cv--ejecutivo .metric__val { font-family:var(--display); color:var(--accent); }
.cv--ejecutivo .metric + .metric::before { color:var(--gold); }

.cv--ejecutivo .cv__cols { margin-top:calc(14px * var(--cv-density)); }
.cv--ejecutivo .block + .block, .cv--ejecutivo .cv__aside { margin-top:calc(11px * var(--cv-density)); }
.cv--ejecutivo .block__title {
  font-weight:600; font-size:calc(12pt * var(--cv-fs)); color:var(--accent); letter-spacing:0; text-transform:none;
  padding-bottom:2px; border-bottom:.6pt solid var(--accent-line); margin-bottom:6px;
}
.cv--ejecutivo .job__role { font-size:calc(10.3pt * var(--cv-fs)); }
.cv--ejecutivo .job__company { font-style:italic; font-weight:400; color:var(--fg-2); }
.cv--ejecutivo .job__bullets li::before { background:var(--gold); border:0; width:4.5px; height:4.5px; border-radius:0; top:6.5px; left:1px; }

/* geometrico.css */

/* ============================================================
   GEOMÉTRICO — una columna. Cifras en tarjetas suaves y
   competencias como etiquetas: se escanea rápido. Un cuadradito
   de color delante de cada título marca el ritmo. Manrope.
   Violeta. De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--geometrico {
  --accent:#5B3FD1;
  --accent-soft:#F2EFFD;
  --accent-line:#E2DDF5;
  --font:'Manrope', 'Helvetica Neue', Arial, sans-serif;
  --display:'Manrope', 'Helvetica Neue', Arial, sans-serif;
  --fg-1:#1E1B2E; --fg-2:#47435C; --fg-3:#8A86A0;
}

.cv--geometrico .cv__head { gap:20px; }
.cv--geometrico .cv__photo { width:96px; height:96px; }
.cv--geometrico .cv__name { font-size:calc(28pt * var(--cv-fs)); font-weight:800; letter-spacing:-.03em; }
.cv--geometrico .cv__role { font-size:calc(11pt * var(--cv-fs)); letter-spacing:0; }

/* cifras en tarjetas */
.cv--geometrico .cv__metrics {
  background:transparent; border:0; border-radius:0; gap:8px;
  margin-top:calc(16px * var(--cv-density));
}
.cv--geometrico .metric { background:var(--accent-soft); border-radius:9px; padding:10px 12px; }
.cv--geometrico .metric__val { font-weight:800; font-size:calc(16.5pt * var(--cv-fs)); letter-spacing:-.02em; }
.cv--geometrico .metric__label { text-transform:none; letter-spacing:0; font-size:calc(7.8pt * var(--cv-fs)); color:var(--fg-2); }

.cv--geometrico .cv__cols { margin-top:calc(18px * var(--cv-density)); }
.cv--geometrico .block + .block, .cv--geometrico .cv__aside { margin-top:calc(15px * var(--cv-density)); }
.cv--geometrico .block__title {
  border:0; padding:0; margin-bottom:8px;
  font-size:calc(8.8pt * var(--cv-fs)); font-weight:800; letter-spacing:.08em; text-transform:uppercase;
}
.cv--geometrico .block__title::before {
  content:""; display:inline-block; width:2.3mm; height:2.3mm; border-radius:.7mm;
  background:var(--accent); margin-right:2.4mm; vertical-align:.15mm;
}
.cv--geometrico .job__role { font-weight:800; }
.cv--geometrico .job__bullets li::before { background:var(--accent); border:0; width:5px; height:5px; border-radius:1.5px; top:6px; left:1px; }
.cv--geometrico .chips li { background:var(--accent-soft); color:var(--accent); font-weight:600; border-radius:99px; padding:3px 10px; }

/* impacto.css */

/* ============================================================
   IMPACTO — una columna. Banda oscura a sangre con el nombre en
   mayúsculas, títulos con subrayado de rotulador y una letra
   condensada en títulos, cifras y fechas. Barlow Condensed +
   Barlow. Negro y amarillo. De design/cv-una-columna (13-10-2026).
   El acento (amarillo por defecto) es el color de los detalles: filete de
   la banda, rayas de las cifras, viñetas y rotulador. La banda y el texto
   no cambian: con cualquier acento queda banda oscura + un color.
   ============================================================ */

.cv--impacto {
  --accent:#F2B705;
  --accent-soft:rgba(242,183,5,.12);
  --accent-soft-border:rgba(242,183,5,.55);   /* el rotulador de los títulos (cv-render.js lo rehace con el acento elegido) */
  --accent-line:rgba(17,24,39,.18);
  --yel:var(--accent);
  --ink:#111827;
  --band:#111827;   /* la banda, siempre oscura: el acento del usuario no la tiñe */
  --font:'Barlow', 'Helvetica Neue', Arial, sans-serif;
  --display:'Barlow Condensed', 'Arial Narrow', sans-serif;
  --fg-1:#1F2328; --fg-2:#41474F; --fg-3:#7B828B;
}

/* banda oscura a sangre (como Zeus: los márgenes negativos anulan los del @page) */
.cv--impacto .cv__head {
  background:var(--band); align-items:center; gap:20px;
  margin:-13mm -15mm 0; padding:11mm 15mm 8mm; border-bottom:1.6mm solid var(--yel);
}
.cv--impacto .cv__photo { width:84px; height:84px; box-shadow:0 0 0 3px rgba(255,255,255,.16); }
.cv--impacto .cv__name {
  color:#fff; font-weight:700; font-size:calc(34pt * var(--cv-fs)); line-height:.95;
  text-transform:uppercase; letter-spacing:.01em;
}
.cv--impacto .cv__role { color:rgba(255,255,255,.9); font-weight:600; font-size:calc(12pt * var(--cv-fs)); letter-spacing:0; margin-top:6px; }
.cv--impacto .cv__contact { color:#C9CED6; }
.cv--impacto .cv__contact li::before { background:#6B7280; }

/* cifras con su raya de acento arriba */
.cv--impacto .cv__metrics {
  background:transparent; border:0; border-radius:0; gap:14px;
  margin-top:calc(16px * var(--cv-density));
}
.cv--impacto .metric { background:transparent; border-top:1.1mm solid var(--yel); padding:7px 0 0; }
.cv--impacto .metric__val { font-weight:700; font-size:calc(22pt * var(--cv-fs)); color:var(--fg-1); }
.cv--impacto .metric__unit { color:var(--fg-2)!important; }   /* !important: en el PDF la unidad iría en el acento (engine._unit_color_css) */
.cv--impacto .metric__label { text-transform:none; letter-spacing:0; font-weight:600; color:var(--fg-2); font-size:calc(8pt * var(--cv-fs)); }

.cv--impacto .cv__cols { margin-top:calc(18px * var(--cv-density)); }
.cv--impacto .block + .block, .cv--impacto .cv__aside { margin-top:calc(14px * var(--cv-density)); }
/* título con subrayado de rotulador */
.cv--impacto .block__title {
  display:inline-block; border:0; padding:0 3px; margin-bottom:8px;
  font-weight:700; font-size:calc(13pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.02em; line-height:1.2;
  background-image:linear-gradient(var(--accent-soft-border),var(--accent-soft-border)); background-repeat:no-repeat; background-size:100% 40%; background-position:0 100%;
}
.cv--impacto .job__role { font-size:calc(11pt * var(--cv-fs)); }
.cv--impacto .job__company { color:var(--fg-1); }
.cv--impacto .job__period { font-family:var(--display); font-weight:600; font-size:calc(10.2pt * var(--cv-fs)); color:var(--fg-1); }
.cv--impacto .job__bullets li::before { background:var(--yel); border:0; width:6px; height:6px; border-radius:0; top:5.5px; left:1px; }
.cv--impacto .chips li { background:#fff; border:.8pt solid var(--ink); border-radius:0; color:var(--ink); font-weight:500; }

/* ---------- Carta de presentación (13-10-2026) ---------- */
/* La carta hereda la cabecera de este CV (letter.html.j2 / letter-editor.js) y aquí toma su
   carácter. Sin texto posicionado ni letras muy espaciadas: los lectores de PDF la leen en orden
   (tests/test_pdf_orden_texto.py). Los párrafos del editor van dentro de .le-para. */
/* el subrayado de rotulador de los títulos, en el saludo; firma condensada con la raya amarilla */
.cv--impacto.cv--letter .letter__body { margin-top:calc(26px * var(--cv-density)); font-size:calc(10.6pt * var(--cv-fs)); color:var(--fg-2); }
.cv--impacto.cv--letter .letter__meta { display:block; margin:0 0 22px; }
.cv--impacto.cv--letter .letter__meta > span { display:block; }
.cv--impacto.cv--letter .letter__meta > span:first-child { font-weight:700; font-size:calc(10.4pt * var(--cv-fs)); color:var(--fg-1); }
.cv--impacto.cv--letter .letter__meta > span:last-child { font-family:var(--display); font-weight:600; font-size:calc(10.4pt * var(--cv-fs)); color:var(--fg-3); margin-top:1px; }
.cv--impacto.cv--letter .letter__body p { text-align:left; line-height:1.66; margin:0 0 12px; }
.cv--impacto.cv--letter p.letter__greeting {
  display:inline-block; padding:0 3px; margin:0 0 14px -3px;
  font-family:var(--display); font-weight:700; font-size:calc(15pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.02em; line-height:1.2; color:var(--fg-1);
  background-image:linear-gradient(var(--accent-soft-border),var(--accent-soft-border)); background-repeat:no-repeat; background-size:100% 40%; background-position:0 100%;
}
.cv--impacto.cv--letter p.letter__closing { margin-top:22px; }
.cv--impacto.cv--letter p.letter__signature::before { content:""; display:block; width:16mm; border-top:1.1mm solid var(--yel); margin:12px 0 7px; }
.cv--impacto.cv--letter p.letter__signature { font-family:var(--display); font-weight:700; font-size:calc(22pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:.01em; line-height:1; color:var(--fg-1); }

/* clasico.css */

/* ============================================================
   CLÁSICO — una columna. Una sola tipografía clásica a tamaño
   generoso, versalitas en el nombre y doble filete debajo; sin
   cajas de cifras. EB Garamond. Burdeos.
   De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--clasico {
  --accent:#7A1F3D;
  --accent-soft:rgba(122,31,61,.07);
  --accent-line:#DCC8CF;
  --font:'EB Garamond', Garamond, Georgia, serif;
  --display:'EB Garamond', Garamond, Georgia, serif;
  --fg-1:#262020; --fg-2:#3F3636; --fg-3:#857979;
}

.cv--clasico .cv__head {
  flex-direction:column; align-items:center; text-align:center; gap:6px;
  padding-bottom:10px; border-bottom:2.6pt double var(--accent);
}
.cv--clasico .cv__photo { width:68px; height:68px; }
.cv--clasico .cv__name { font-weight:500; font-size:calc(28pt * var(--cv-fs)); font-variant:small-caps; letter-spacing:.06em; }
.cv--clasico .cv__role { font-style:italic; font-weight:400; font-size:calc(12.5pt * var(--cv-fs)); color:var(--fg-1); letter-spacing:0; margin-top:2px; }
.cv--clasico .cv__contact { justify-content:center; font-size:calc(9.8pt * var(--cv-fs)); margin-top:6px; }

/* sin cajas: las cifras, una línea de texto (.cv--kpiline en base.css) */
.cv--clasico .cv__metrics { text-align:center; font-size:calc(10.4pt * var(--cv-fs)); }
.cv--clasico .metric__val { font-weight:600; color:var(--accent); }

.cv--clasico .cv__cols { margin-top:calc(12px * var(--cv-density)); }
.cv--clasico .block + .block, .cv--clasico .cv__aside { margin-top:calc(10px * var(--cv-density)); }
.cv--clasico .block__title {
  font-weight:600; font-size:calc(11pt * var(--cv-fs)); text-transform:uppercase; letter-spacing:0; word-spacing:.08em;
  color:var(--accent); border-bottom:.6pt solid var(--accent-line); padding-bottom:1px; margin-bottom:7px;
}
.cv--clasico .summary { font-size:calc(10.4pt * var(--cv-fs)); line-height:1.36; }
.cv--clasico .job__role { font-size:calc(11.4pt * var(--cv-fs)); font-weight:600; }
.cv--clasico .job__period { font-style:italic; font-weight:400; font-size:calc(10.4pt * var(--cv-fs)); color:var(--fg-3); }
.cv--clasico .job__company { font-size:calc(10.6pt * var(--cv-fs)); font-style:italic; font-weight:400; color:var(--fg-2); }
.cv--clasico .job__bullets li { font-size:calc(10.2pt * var(--cv-fs)); line-height:calc(1.3 * var(--cv-density)); }
.cv--clasico .job__bullets li::before { background:var(--fg-2); border:0; width:6px; height:1px; border-radius:0; top:9px; left:0; }
.cv--clasico .chips, .cv--clasico .aside-item__line1, .cv--clasico .lang__name { font-size:calc(10.4pt * var(--cv-fs)); }
.cv--clasico .chips li, .cv--clasico .aside-item__line2, .cv--clasico .aside-item__meta, .cv--clasico .lang__level { font-size:calc(10.2pt * var(--cv-fs)); }

/* ma.css */

/* ============================================================
   MA (間) — una columna, la de la marca. Espacio, una tipografía
   y color solo donde importa: el punto teal tras el nombre.
   Títulos pequeños y grises; el contenido manda. Plus Jakarta
   Sans. Teal. De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--ma {
  --accent:#087F75;
  --accent-soft:rgba(0,184,169,.08);
  --accent-line:#DCE4E3;
  --font:'Plus Jakarta Sans', 'Helvetica Neue', Arial, sans-serif;
  --display:'Plus Jakarta Sans', 'Helvetica Neue', Arial, sans-serif;
  --fg-1:#16201F; --fg-2:#4A5654; --fg-3:#86918F;
}

.cv--ma .cv__head { gap:20px; }
.cv--ma .cv__photo { width:84px; height:84px; filter:grayscale(100%); }
.cv--ma .cv__name { font-weight:300; font-size:calc(29pt * var(--cv-fs)); letter-spacing:-.03em; }
/* el punto de la marca: siempre teal, aunque se cambie el acento */
.cv--ma .cv__name::after {
  content:""; display:inline-block; width:2.4mm; height:2.4mm; border-radius:50%;
  background:#00B8A9; margin-left:1.3mm; vertical-align:baseline;
}
.cv--ma .cv__role { color:var(--fg-2); font-weight:500; letter-spacing:0; margin-top:5px; }
.cv--ma .cv__contact { color:var(--fg-3); }
.cv--ma .cv__contact li::before { background:var(--accent-line); }

/* cifras ligeras, sin cajas */
.cv--ma .cv__metrics {
  background:transparent; border:0; border-radius:0; gap:0 22px;
  margin-top:calc(20px * var(--cv-density));
}
.cv--ma .metric { background:transparent; padding:0; }
.cv--ma .metric__val { font-weight:300; font-size:calc(22pt * var(--cv-fs)); letter-spacing:-.03em; }
.cv--ma .metric__unit { font-weight:500; }
.cv--ma .metric__label { text-transform:none; letter-spacing:0; font-size:calc(7.8pt * var(--cv-fs)); }

.cv--ma .cv__cols { margin-top:calc(22px * var(--cv-density)); }
.cv--ma .block + .block, .cv--ma .cv__aside { margin-top:calc(18px * var(--cv-density)); }
.cv--ma .block__title {
  border:0; padding:0; margin-bottom:9px;
  font-size:calc(8pt * var(--cv-fs)); font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--fg-3);
}
.cv--ma .summary { line-height:calc(1.6 * var(--cv-density)); }
.cv--ma .job__company { color:var(--fg-2); font-weight:500; }
.cv--ma .job__bullets li::before { background:var(--fg-3); border:0; width:7px; height:1.2px; border-radius:0; top:8px; left:0; }

/* cronologia.css */

/* ============================================================
   CRONOLOGÍA — una columna. Cada puesto empieza por sus fechas,
   grandes: la trayectoria se lee de arriba abajo de un vistazo
   (cv-render.js pinta la fecha antes del puesto). Sin cajas.
   Instrument Serif + Instrument Sans. Coral sobre azul noche.
   De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--cronologia {
  --accent:#C2451E;
  --accent-soft:rgba(194,69,30,.07);
  --accent-line:rgba(20,33,61,.16);
  --navy:#14213D;
  --font:'Instrument Sans', 'Helvetica Neue', Arial, sans-serif;
  --display:'Instrument Serif', Georgia, serif;
  --fg-1:#14213D; --fg-2:#3D4760; --fg-3:#7C8499;
}

.cv--cronologia .cv__head { align-items:flex-end; padding-bottom:12px; border-bottom:.8pt solid var(--navy); }
.cv--cronologia .cv__name { font-weight:400; font-size:calc(38pt * var(--cv-fs)); letter-spacing:-.01em; line-height:1; }
.cv--cronologia .cv__role {
  font-weight:600; font-size:calc(10pt * var(--cv-fs)); letter-spacing:.06em; text-transform:uppercase;
  color:var(--navy); margin-top:7px;
}
.cv--cronologia .cv__contact li::before { background:var(--accent); }

/* las cifras, una línea de texto (.cv--kpiline en base.css) */
.cv--cronologia .metric__val { font-family:var(--display); font-size:calc(13pt * var(--cv-fs)); font-weight:400; color:var(--accent); }

.cv--cronologia .cv__cols { margin-top:calc(16px * var(--cv-density)); }
.cv--cronologia .block + .block, .cv--cronologia .cv__aside { margin-top:calc(15px * var(--cv-density)); }
.cv--cronologia .block__title {
  font-family:var(--font); border:0; padding:0; margin-bottom:8px;
  font-size:calc(8.6pt * var(--cv-fs)); font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--accent);
}
/* la fecha delante, grande, y debajo el puesto */
.cv--cronologia .job + .job { margin-top:calc(15px * var(--cv-density)); }
.cv--cronologia .job__head { display:block; }
.cv--cronologia .job__period {
  display:block; font-family:var(--display); font-weight:400; font-size:calc(15pt * var(--cv-fs));
  line-height:1.1; color:var(--accent); letter-spacing:0;
}
.cv--cronologia .job__role { display:block; font-size:calc(10.8pt * var(--cv-fs)); margin-top:2px; }
.cv--cronologia .job__company { color:var(--navy); }
.cv--cronologia .job__bullets li::before { background:var(--accent); border:0; width:7px; height:1.2px; border-radius:0; top:8px; left:0; }

/* sobrio.css */

/* ============================================================
   SOBRIO — una columna, solo texto y solo negro: nada que pueda
   confundir a un lector de PDF. Lexend, una letra pensada para
   leerse con fluidez. Sin cajas ni etiquetas.
   De design/cv-una-columna (13-10-2026).
   ============================================================ */

.cv--sobrio {
  --accent:#111111;
  --accent-soft:rgba(17,17,17,.05);
  --accent-line:rgba(17,17,17,.2);
  --font:'Lexend', 'Helvetica Neue', Arial, sans-serif;
  --display:'Lexend', 'Helvetica Neue', Arial, sans-serif;
  --fg-1:#111111; --fg-2:#2E2E2E; --fg-3:#5C5C5C;
}

.cv--sobrio { font-weight:300; }
.cv--sobrio .cv__name { font-size:calc(24pt * var(--cv-fs)); font-weight:600; letter-spacing:-.01em; }
.cv--sobrio .cv__role { font-size:calc(11.5pt * var(--cv-fs)); font-weight:400; color:var(--fg-1); letter-spacing:0; margin-top:3px; }
.cv--sobrio .cv__contact { color:var(--fg-2); font-size:calc(9.4pt * var(--cv-fs)); }
.cv--sobrio .cv__contact li::before { background:#111; }

/* las cifras, una línea de texto (.cv--kpiline en base.css) */
.cv--sobrio .metric__val { font-weight:600; }

.cv--sobrio .cv__cols { margin-top:calc(16px * var(--cv-density)); }
.cv--sobrio .block + .block, .cv--sobrio .cv__aside { margin-top:calc(14px * var(--cv-density)); }
.cv--sobrio .block__title {
  font-size:calc(11pt * var(--cv-fs)); font-weight:600; letter-spacing:0; text-transform:none;
  padding-bottom:3px; border-bottom:1pt solid #111; margin-bottom:7px;
}
.cv--sobrio .job__role { font-weight:600; }
.cv--sobrio .job__company { font-weight:500; color:var(--fg-1); }
.cv--sobrio .job__period, .cv--sobrio .job__location { color:var(--fg-2); font-weight:400; }
.cv--sobrio .job__bullets li::before { background:#111; border:0; width:3.5px; height:3.5px; border-radius:50%; top:7px; left:2px; }
.cv--sobrio .summary, .cv--sobrio .job__bullets li, .cv--sobrio .chips li { font-weight:300; }
.cv--sobrio strong, .cv--sobrio .aside-item__line1, .cv--sobrio .lang__name { font-weight:600; }

/* fecha pegada al puesto, en la misma línea */
.cv--sobrio .job__head { display:block; }
.cv--sobrio .job__head.has-period .job__period::before { content:"  ·  "; white-space:pre; }
