/* ============================================================
   CV Generator — editor (izquierda) + vista previa imprimible
   (derecha, ".cv-pagina"). El editor nunca se imprime; sólo
   ".cv-pagina" se ve en el PDF final (ver @media print al final).
   ============================================================ */

:root {
  /* paleta del editor (chrome de la app, sólo en pantalla) */
  --app-fondo: #0d0f12;
  --app-panel: #14171c;
  --app-panel-2: #191d23;
  --app-borde: #262b33;
  --app-texto: #e8e9ec;
  --app-tenue: #8a8f99;
  --app-acento: #29b6d8;
  --app-acento-oscuro: #1b8aa6;
  --app-peligro: #d9534f;

  /* paleta del CV en sí (esto sí se imprime — respeta el diseño original:
     franja lateral casi negra, textos blancos, acento turquesa en
     títulos/fechas/línea de tiempo, columna principal blanca). --cv-acento
     es el color "de la casa" (título, línea de tiempo, bullets, íconos);
     --cv-acento-2 es el metálico secundario (apellido, badge de fecha) —
     en el tema original (turquesa) son el mismo color a propósito, así
     ese tema queda EXACTO a como estaba ("dejalo como está"). Los otros
     temas (ver .cv-pagina[data-tema=...] más abajo) sí usan un dorado de
     verdad como --cv-acento-2, al estilo de un escudo con color+metal. */
  --cv-lateral-fondo: #16191e;
  --cv-lateral-texto: #f2f3f5;
  --cv-lateral-tenue: #b6bac2;
  --cv-acento: #2bb0d6;
  --cv-acento-2: var(--cv-acento);
  --cv-badge-texto: #ffffff;
  /* texto legible sobre un círculo/chip relleno con --cv-acento (íconos
     de sección, etc.) — blanco funciona con casi todos los acentos
     (son oscuros/saturados), pero algunos temas nuevos tienen un acento
     bien claro (limón, ámbar) donde el texto blanco se pierde: esos temas
     pisan esta variable a un tono oscuro (ver .cv-pagina[data-tema=...]). */
  --cv-acento-texto: #ffffff;
  --cv-fondo-cuerpo: #ffffff;
  --cv-texto: #1c1e22;
  --cv-tenue: #5b5e66;
  --cv-linea: #e4e6ea;

  /* tipografía del CV: título/nombres en Plus Jakarta Sans (geométrica,
     segura y "de diseño" sin ser estridente), cuerpo en Inter (el
     estándar de facto para texto de UI/documento, muy legible incluso
     chico e impreso) — la combinación que elegiría alguien que arma
     material profesional a diario, no una fuente default del sistema. */
  --cv-font-titulos: "Plus Jakarta Sans", "Montserrat", sans-serif;
  --cv-font-cuerpo: "Inter", sans-serif;
}

/* ---- temas de color, inspirados en las combinaciones clásicas de
   "casa" (color + dorado + base oscura) — mismo layout/formato para
   todos, sólo cambian estas variables. El turquesa (sin atributo, o
   data-tema="turquesa") es el original y queda intacto. ---- */
.cv-pagina[data-tema="azul"]    { --cv-acento: #2f5fd6; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="verde"]   { --cv-acento: #1f8f5c; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="bordo"]   { --cv-acento: #8a1f30; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="violeta"] { --cv-acento: #6a2fa0; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
/* coral + turquesa/teal: complementarios en la rueda de color (cálido vs.
   frío), combinación clásica de diseño — más armónica acá que el dorado,
   que compite en calidez con el coral en vez de contrastar. */
.cv-pagina[data-tema="coral"]   { --cv-acento: #e8613f; --cv-acento-2: #2a9d8f; --cv-badge-texto: #ffffff; }

/* ---- 50 temas más, agrupados por familia (ver <optgroup> en index.html).
   Mismo mecanismo de siempre: sólo pisan --cv-acento/--cv-acento-2/
   --cv-badge-texto, así que aplican tal cual a los 20 modelos sin tocar
   ninguno. En los modelos que ya arman un degradé propio con
   linear-gradient(var(--cv-acento), var(--cv-acento-2)) (banners,
   diagonales, marcadores de línea de tiempo), elegir un --cv-acento-2
   bien distinto de --cv-acento (en vez de repetir el mismo o un dorado
   fijo) hace que ESE degradé ya construido se vea a pleno con el tema
   nuevo, sin tener que tocar los 20 renders. */

/* Metálicos (color + dorado, mismo "escudo" que azul/verde/bordo/violeta) */
.cv-pagina[data-tema="grafito-dorado"] { --cv-acento: #33383f; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="rosa-dorado"]    { --cv-acento: #c2185b; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="cian-dorado"]    { --cv-acento: #0891b2; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="oliva-dorado"]   { --cv-acento: #6b7a2e; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="granate-dorado"] { --cv-acento: #6e1423; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="marino-dorado"]  { --cv-acento: #1b2a4a; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }

/* Duotono contrastante (dos colores reales, no color+metal) */
.cv-pagina[data-tema="lima-violeta"]    { --cv-acento: #7cb518; --cv-acento-2: #6a2fa0; --cv-badge-texto: #ffffff; --cv-acento-texto: #12200a; }
.cv-pagina[data-tema="mandarina-azul"]  { --cv-acento: #f2760c; --cv-acento-2: #1f4e8c; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="fucsia-verde"]    { --cv-acento: #d6249f; --cv-acento-2: #1f8f5c; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="amarillo-morado"] { --cv-acento: #e0b400; --cv-acento-2: #4b2e83; --cv-badge-texto: #ffffff; --cv-acento-texto: #241c04; }
.cv-pagina[data-tema="rojo-cian"]       { --cv-acento: #d7263d; --cv-acento-2: #0a9396; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="rosa-azul"]       { --cv-acento: #ef476f; --cv-acento-2: #118ab2; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="naranja-verde"]   { --cv-acento: #f4a300; --cv-acento-2: #2a9134; --cv-badge-texto: #ffffff; --cv-acento-texto: #1f1206; }

/* Degradé cálido — pensados para que el linear-gradient(acento, acento-2)
   que ya arman algunos modelos quede tipo atardecer/fuego. */
.cv-pagina[data-tema="atardecer"] { --cv-acento: #ff6b35; --cv-acento-2: #f72585; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="fuego"]     { --cv-acento: #ff4d00; --cv-acento-2: #e09400; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="mango"]     { --cv-acento: #ff9f1c; --cv-acento-2: #e63946; --cv-badge-texto: #ffffff; --cv-acento-texto: #1f0f04; }
.cv-pagina[data-tema="lava"]      { --cv-acento: #9d0208; --cv-acento-2: #f48c06; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="brasa"]     { --cv-acento: #7f0000; --cv-acento-2: #ff9505; --cv-badge-texto: #1c1e22; }

/* Degradé frío */
.cv-pagina[data-tema="glaciar"]    { --cv-acento: #023e8a; --cv-acento-2: #1b8fa8; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="abismo"]     { --cv-acento: #03045e; --cv-acento-2: #0077b6; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="menta-azul"] { --cv-acento: #007f5f; --cv-acento-2: #2ec4b6; --cv-badge-texto: #06342c; }
.cv-pagina[data-tema="aurora"]     { --cv-acento: #4361ee; --cv-acento-2: #1f9bc7; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="nocturno"]   { --cv-acento: #240046; --cv-acento-2: #5a189a; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="polar"]      { --cv-acento: #14213d; --cv-acento-2: #4895ef; --cv-badge-texto: #ffffff; }

/* Joya (piedra preciosa + dorado, o + grafito/verde para las que ya usan dorado como acento) */
.cv-pagina[data-tema="esmeralda"] { --cv-acento: #0b6e4f; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="rubi"]      { --cv-acento: #9b111e; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="zafiro"]    { --cv-acento: #0f52ba; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="amatista"]  { --cv-acento: #6f2da8; --cv-acento-2: #d4af37; --cv-badge-texto: #1c1e22; }
.cv-pagina[data-tema="topacio"]   { --cv-acento: #d99a2b; --cv-acento-2: #1b1b1b; --cv-badge-texto: #ffffff; --cv-acento-texto: #1c1608; }
.cv-pagina[data-tema="peridoto"]  { --cv-acento: #a4c639; --cv-acento-2: #355e3b; --cv-badge-texto: #ffffff; --cv-acento-texto: #141c0a; }

/* Pastel — tonos suaves, pensados para modelos minimalistas/editoriales */
.cv-pagina[data-tema="lavanda"]        { --cv-acento: #8e7cc3; --cv-acento-2: #8f6fc9; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="durazno-suave"]  { --cv-acento: #e08e79; --cv-acento-2: #d98f3a; --cv-badge-texto: #3a2317; --cv-acento-texto: #3a2317; }
.cv-pagina[data-tema="cielo-suave"]    { --cv-acento: #6fa8dc; --cv-acento-2: #3a7ca8; --cv-badge-texto: #ffffff; --cv-acento-texto: #103048; }
.cv-pagina[data-tema="menta-suave"]    { --cv-acento: #6fbf9c; --cv-acento-2: #4f9c86; --cv-badge-texto: #ffffff; --cv-acento-texto: #123528; }
.cv-pagina[data-tema="rosa-polvo"]     { --cv-acento: #c98ea3; --cv-acento-2: #c76b85; --cv-badge-texto: #ffffff; --cv-acento-texto: #4a1f2c; }
.cv-pagina[data-tema="arena"]          { --cv-acento: #c9a876; --cv-acento-2: #b8895a; --cv-badge-texto: #ffffff; --cv-acento-texto: #3e2f1c; }

/* Neón — DOS colores vivos que combinan entre sí (no un acento-2 casi
   negro): --cv-acento-2 pinta cosas como el apellido en negrita
   (.cv-nombre-acento) y el fondo del badge de fecha — si fuera gris/negro
   ahí se pierde el efecto "neón" (queda un texto opaco en vez de un
   segundo color que resalte). El panel oscuro de la franja lateral ya
   tiene su propio degradé bien oscuro (ver TEMAS_FONDOS en app.js), así
   que no depende de este color. */
.cv-pagina[data-tema="neon-lima"]    { --cv-acento: #b6ff00; --cv-acento-2: #ff2fb6; --cv-badge-texto: #ffffff; --cv-acento-texto: #14200a; }
.cv-pagina[data-tema="neon-fucsia"]  { --cv-acento: #ff006e; --cv-acento-2: #00b4d8; --cv-badge-texto: #062529; }
.cv-pagina[data-tema="neon-cian"]    { --cv-acento: #00c2d1; --cv-acento-2: #ff2fb6; --cv-badge-texto: #ffffff; --cv-acento-texto: #062529; }
.cv-pagina[data-tema="neon-violeta"] { --cv-acento: #b537f2; --cv-acento-2: #7cb518; --cv-badge-texto: #14200a; }
.cv-pagina[data-tema="neon-naranja"] { --cv-acento: #ff5400; --cv-acento-2: #00b4d8; --cv-badge-texto: #062529; }

/* Neutros — look más corporativo/serio, sin color "de fantasía" */
.cv-pagina[data-tema="grafito"] { --cv-acento: #37474f; --cv-acento-2: #78909c; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="pizarra"] { --cv-acento: #4a5568; --cv-acento-2: #a0aec0; --cv-badge-texto: #1a202c; }
.cv-pagina[data-tema="carbon"]  { --cv-acento: #212529; --cv-acento-2: #6c757d; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="plata"]   { --cv-acento: #708090; --cv-acento-2: #8a8f96; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="acero"]   { --cv-acento: #2f3e46; --cv-acento-2: #84a98c; --cv-badge-texto: #16261f; }

/* Tierra — tonos cálidos/naturales */
.cv-pagina[data-tema="terracota"] { --cv-acento: #b5533c; --cv-acento-2: #e0a458; --cv-badge-texto: #3a2313; }
.cv-pagina[data-tema="bosque"]    { --cv-acento: #344e41; --cv-acento-2: #a3b18a; --cv-badge-texto: #2b331e; }
.cv-pagina[data-tema="cafe"]      { --cv-acento: #4b3621; --cv-acento-2: #a47148; --cv-badge-texto: #ffffff; }
.cv-pagina[data-tema="arcilla"]   { --cv-acento: #a44a3f; --cv-acento-2: #d68c45; --cv-badge-texto: #3a2211; }

* { box-sizing: border-box; }
.oculto { display: none !important; }
html, body {
  margin: 0; padding: 0;
  background: var(--app-fondo);
  color: var(--app-texto);
  font-family: "Inter", sans-serif;
}

button { font-family: inherit; cursor: pointer; }
input, textarea { font-family: inherit; }

/* ---------------- barra superior ---------------- */
.app-header {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 20px;
  background: rgba(13, 15, 18, 0.92);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--app-borde);
}
.app-header-marca { display: flex; align-items: center; gap: 10px; }
.app-header-icono { font-size: 1.3rem; }
.app-header-titulo { font-family: var(--cv-font-titulos); font-weight: 700; font-size: 1.05rem; letter-spacing: 0.3px; }
.app-header-acciones { display: flex; align-items: center; gap: 10px; }

.autoguardado {
  font-size: 0.76rem; color: var(--app-tenue);
  display: flex; align-items: center; gap: 5px;
}
.autoguardado::before {
  content: ""; width: 6px; height: 6px; border-radius: 50%;
  background: #45c97a; box-shadow: 0 0 6px #45c97a;
}
.autoguardado.guardando::before { background: var(--app-acento); box-shadow: 0 0 6px var(--app-acento); }

.btn {
  border-radius: 9px; border: 1px solid var(--app-borde);
  padding: 9px 16px; font-size: 0.85rem; font-weight: 600;
  transition: all 150ms ease; background: var(--app-panel-2); color: var(--app-texto);
}
a.btn { display: inline-block; text-decoration: none; }
.btn-fantasma { background: transparent; color: var(--app-tenue); }
.btn-fantasma:hover { color: var(--app-texto); border-color: var(--app-tenue); }
.btn-acento { background: linear-gradient(135deg, var(--app-acento), var(--app-acento-oscuro)); color: #06161a; border: none; }
.btn-acento:hover { filter: brightness(1.1); }
.btn-chico { padding: 5px 10px; font-size: 0.74rem; }
.btn-linea {
  display: block; width: 100%; margin-top: 10px;
  background: transparent; border: 1px dashed var(--app-borde); color: var(--app-acento);
  padding: 9px; border-radius: 8px; font-size: 0.82rem; font-weight: 600;
}
.btn-linea:hover { border-color: var(--app-acento); background: rgba(41, 182, 216, 0.08); }

/* ---- ajustador +/- (tamaño de foto, tamaño de íconos) ---- */
.ajustador { display: flex; align-items: center; gap: 10px; }
.ajustador button {
  width: 32px; height: 32px; flex: 0 0 auto; padding: 0;
  font-size: 1.05rem; font-weight: 700; line-height: 1; border-radius: 8px;
}
.ajustador-valor { min-width: 42px; text-align: center; font-size: 0.82rem; color: var(--app-tenue); font-weight: 600; }

/* ---------------- layout general ---------------- */
.app-layout { display: flex; align-items: flex-start; }

/* ---------------- panel editor ---------------- */
.editor {
  width: 400px; flex: 0 0 400px;
  height: calc(100vh - 57px);
  overflow-y: auto;
  border-right: 1px solid var(--app-borde);
  padding: 14px 16px 60px;
}
.editor::-webkit-scrollbar { width: 9px; }
.editor::-webkit-scrollbar-thumb { background: var(--app-borde); border-radius: 8px; }

.editor-seccion {
  background: var(--app-panel);
  border: 1px solid var(--app-borde);
  border-radius: 12px;
  margin-bottom: 10px;
  overflow: hidden;
}
.editor-seccion summary {
  padding: 13px 16px;
  font-weight: 700; font-size: 0.88rem;
  cursor: pointer; list-style: none;
  display: flex; align-items: center; justify-content: space-between;
  color: var(--app-texto);
}
.editor-seccion summary::-webkit-details-marker { display: none; }
.editor-seccion summary::after {
  content: "＋"; color: var(--app-tenue); font-size: 0.9rem; transition: transform 200ms ease;
}
.editor-seccion[open] summary::after { content: "－"; }
.editor-seccion summary:hover { color: var(--app-acento); }

.editor-cuerpo { padding: 4px 16px 16px; }
.editor-ayuda { font-size: 0.76rem; color: var(--app-tenue); margin: 0 0 10px; line-height: 1.45; }

.campo { margin-bottom: 12px; }
.campo label { display: block; font-size: 0.76rem; color: var(--app-tenue); margin-bottom: 5px; font-weight: 600; }
.campo input, .campo textarea, .campo select {
  width: 100%; background: var(--app-panel-2); border: 1px solid var(--app-borde);
  border-radius: 8px; padding: 9px 11px; color: var(--app-texto); font-size: 0.86rem;
  resize: vertical;
}
.campo input:focus, .campo textarea:focus, .campo select:focus {
  outline: none; border-color: var(--app-acento);
}
.campo-fila { display: flex; gap: 8px; }
.campo-fila .campo { flex: 1; }
.campo-fila-con-boton { display: flex; gap: 8px; }
.campo-fila-con-boton select { flex: 1; min-width: 0; }
.campo-fila-con-boton .btn { flex: 0 0 auto; padding: 9px 12px; }

/* ---- dropzone de la foto ---- */
.campo-dropzone {
  display: flex; align-items: center; gap: 12px;
  border: 1.5px dashed var(--app-borde); border-radius: 12px;
  padding: 12px; margin-bottom: 8px; cursor: pointer;
  transition: border-color 150ms ease, background 150ms ease;
}
.campo-dropzone:hover, .campo-dropzone.sobre-arrastre {
  border-color: var(--app-acento); background: rgba(41, 182, 216, 0.07);
}
.campo-dropzone-vista {
  width: 52px; height: 52px; border-radius: 50%; flex: 0 0 auto;
  background: var(--app-panel-2); display: grid; place-items: center;
  overflow: hidden; border: 1px solid var(--app-borde);
}
.campo-dropzone-vista img { width: 100%; height: 100%; object-fit: cover; }
.campo-dropzone-icono { font-size: 1.4rem; opacity: 0.6; }
.campo-dropzone-texto { font-size: 0.78rem; color: var(--app-tenue); line-height: 1.4; }
.campo-dropzone-texto strong { color: var(--app-texto); }

/* ---- listas editables (filas de texto simples) ---- */
.editor-lista { display: flex; flex-direction: column; gap: 6px; }
.fila-editable { display: flex; align-items: center; gap: 6px; }
.fila-editable input {
  flex: 1; background: var(--app-panel-2); border: 1px solid var(--app-borde);
  border-radius: 7px; padding: 7px 10px; color: var(--app-texto); font-size: 0.83rem;
}
.fila-editable input:focus { outline: none; border-color: var(--app-acento); }
/* fila de contacto: la línea principal (tipo/etiqueta/valor/quitar) +
   el link de LinkedIn debajo, sólo visible para ese tipo de contacto. */
.fila-editable-envoltorio { display: flex; flex-direction: column; gap: 6px; }
.fila-editable-linea { display: flex; align-items: center; gap: 6px; }
.fila-editable-envoltorio .c-url {
  background: var(--app-panel-2); border: 1px solid var(--app-borde);
  border-radius: 7px; padding: 7px 10px; color: var(--app-texto); font-size: 0.83rem;
}
.fila-editable-envoltorio .c-url:focus { outline: none; border-color: var(--app-acento); }

/* ---- links dentro del CV impreso (nombre de empresa / LinkedIn) — sólo
   aparecen como tales cuando cargaste una URL; heredan el color del
   texto que reemplazan para no romper la paleta de cada modelo. ---- */
.cv-enlace { color: inherit; text-decoration: none; border-bottom: 1px dotted currentColor; }
.cv-enlace:hover { opacity: 0.8; }
/* ciudad/país junto al nombre de la empresa en cada experiencia — hereda
   el color de línea donde cae (mismo criterio que .cv-enlace), sólo un
   poco más liviana para que no compita con el nombre de la empresa. */
.cv-ubicacion { font-weight: 400; opacity: 0.75; }
.fila-editable select {
  background: var(--app-panel-2); border: 1px solid var(--app-borde); color: var(--app-texto);
  border-radius: 7px; padding: 7px 6px; font-size: 0.8rem;
}
.fila-quitar {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%;
  border: 1px solid var(--app-borde); background: transparent; color: var(--app-tenue);
  font-size: 0.7rem; display: grid; place-items: center;
}
.fila-quitar:hover { color: var(--app-peligro); border-color: var(--app-peligro); }

/* ---- tarjetas de entradas complejas (experiencia, educación, etc.) ---- */
.editor-lista-tarjetas { gap: 10px; }
.tarjeta-entrada {
  background: var(--app-panel-2); border: 1px solid var(--app-borde);
  border-radius: 10px; padding: 12px;
}
.tarjeta-entrada-cabecera {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 10px; gap: 6px;
}
.tarjeta-entrada-titulo { font-size: 0.78rem; font-weight: 700; color: var(--app-acento); }
.tarjeta-entrada-acciones { display: flex; gap: 4px; }
.tarjeta-entrada-acciones button {
  width: 24px; height: 24px; border-radius: 6px; border: 1px solid var(--app-borde);
  background: transparent; color: var(--app-tenue); font-size: 0.7rem; display: grid; place-items: center;
}
.tarjeta-entrada-acciones button:hover { color: var(--app-texto); border-color: var(--app-tenue); }
.tarjeta-entrada-acciones .quitar:hover { color: var(--app-peligro); border-color: var(--app-peligro); }

.sublista-etiqueta {
  font-size: 0.72rem; color: var(--app-tenue); font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.4px;
  margin: 10px 0 6px;
}
.sublista-etiqueta:first-child { margin-top: 0; }

/* ============================================================
   VISTA PREVIA DEL CV — lo único que se imprime
   ============================================================ */
.vista-envoltorio {
  flex: 1 1 auto;
  min-height: calc(100vh - 57px);
  padding: 34px 34px 80px;
  display: flex; justify-content: center;
  background:
    radial-gradient(circle at 50% 0%, rgba(41,182,216,0.05), transparent 60%),
    var(--app-fondo);
}

.cv-pagina {
  width: 210mm;
  min-height: 297mm;
  background: var(--cv-fondo-cuerpo);
  box-shadow: 0 20px 60px rgba(0,0,0,0.55), 0 0 0 1px rgba(255,255,255,0.04);
  font-family: var(--cv-font-cuerpo);
  color: var(--cv-texto);
  /* el resto de las reglas visuales del CV van abajo, con el prefijo .cv- */
}
/* el grid de dos columnas (franja lateral + columna principal) es
   específico del Modelo 1 — si viviera en .cv-pagina sin este filtro,
   cualquier otro modelo con una estructura distinta (como el banner de
   arriba del Modelo 2) quedaría metido a la fuerza en esas mismas dos
   columnas en vez de apilarse verticalmente como corresponde. */
.cv-pagina[data-modelo="modelo1"],
.cv-pagina[data-modelo="modelo3"] { display: grid; grid-template-columns: 70mm 1fr; }
.cv-pagina[data-modelo="modelo4"] { display: grid; grid-template-columns: 68mm 1fr; }

/* Las combinaciones de fuente ya NO van acá — con 30 opciones (ver
   FUENTES en app.js), escribir una regla CSS por cada una sería un
   quilombo de mantener. En vez de eso, app.js pisa --cv-font-titulos/
   --cv-font-cuerpo directo por JS (mismo mecanismo que los colores
   libres de fondo) — una sola fuente de verdad, en el registro. */

/* ---- columna lateral oscura ---- */
.cv-columna-lateral {
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 11mm 8mm 11mm;
}
.cv-foto-marco {
  width: calc(34mm * var(--cv-escala-foto, 1)); height: calc(34mm * var(--cv-escala-foto, 1)); border-radius: 50%;
  margin: 0 auto 8mm; overflow: hidden;
  border: 2.4px solid #ffffff;
  background: #23262c;
  display: grid; place-items: center;
  box-shadow: 0 4px 14px rgba(0,0,0,0.35);
}
.cv-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-foto-placeholder { font-size: 2.4rem; opacity: 0.5; }

.cv-lateral-bloque { margin-bottom: 7mm; }
.cv-lateral-titulo {
  font-family: var(--cv-font-titulos); font-weight: 700; font-size: 10.5pt;
  letter-spacing: 1.2px; text-transform: uppercase;
  color: #ffffff; margin: 0 0 2mm;
  position: relative; padding-bottom: 2.6mm;
}
.cv-lateral-titulo::after {
  content: ""; position: absolute; left: 0; bottom: 0;
  width: 9mm; height: 2px; background: var(--cv-acento);
}

.cv-lista-simple { list-style: none; margin: 0; padding: 0; }
.cv-lista-simple li {
  font-size: 8.6pt; line-height: 1.55; color: var(--cv-lateral-tenue);
  padding-left: 3.4mm; position: relative; margin-bottom: 1mm;
  word-break: break-word;
}
.cv-lista-simple li::before {
  content: ""; position: absolute; left: 0; top: 0.85em;
  width: 3.4px; height: 3.4px; border-radius: 50%; background: var(--cv-acento);
}

.cv-contacto-lista { list-style: none; margin: 0; padding: 0; }
.cv-contacto-fila {
  display: flex; align-items: flex-start; gap: 2.6mm;
  font-size: 8.4pt; line-height: 1.4; color: var(--cv-lateral-tenue);
  margin-bottom: 2.4mm; word-break: break-word;
}
.cv-contacto-icono { color: var(--cv-acento); flex: 0 0 auto; margin-top: 0.1em; font-size: calc(1em * var(--cv-escala-iconos, 1)); }

/* Material Symbols (packs "Material — contorno/redondeado/angular", ver
   PAQUETES_ICONOS en app.js) — el navegador dibuja la ligadura como ícono
   sólo con estas propiedades puestas; el color/tamaño lo sigue heredando
   normal del contenedor de cada modelo (cv-contacto-icono y equivalentes). */
.cv-icono-material {
  font-weight: normal; font-style: normal; line-height: 1; letter-spacing: normal;
  text-transform: none; white-space: nowrap; word-wrap: normal; direction: ltr;
  vertical-align: -0.15em; display: inline-block;
}
.cv-contacto-fila a { color: var(--cv-lateral-tenue); text-decoration: none; }

.cv-idioma-fila, .cv-cert-item, .cv-edu-item, .cv-ref-item { margin-bottom: 4mm; }
.cv-idioma-fila { display: flex; justify-content: space-between; font-size: 8.6pt; color: var(--cv-lateral-tenue); }
.cv-idioma-nombre { color: var(--cv-lateral-texto); font-weight: 600; }

.cv-edu-item, .cv-cert-item, .cv-ref-item { position: relative; padding-left: 3mm; }
.cv-edu-item::before, .cv-cert-item::before, .cv-ref-item::before {
  content: ""; position: absolute; left: 0; top: 1.4mm;
  width: 5px; height: 5px; border-radius: 50%; background: var(--cv-acento);
}
.cv-edu-titulo, .cv-cert-titulo, .cv-ref-nombre {
  font-size: 8.8pt; font-weight: 700; color: var(--cv-lateral-texto);
  text-decoration: underline; text-underline-offset: 2px; text-decoration-color: rgba(255,255,255,0.35);
  display: block; margin-bottom: 0.6mm;
}
.cv-edu-fecha, .cv-ref-rol { font-size: 7.8pt; color: var(--cv-acento); font-weight: 600; display: block; margin-bottom: 1.2mm; }
.cv-ref-rol { color: var(--cv-lateral-tenue); font-weight: 400; }
.cv-cert-sub { font-size: 8pt; color: var(--cv-tenue); display: block; }

/* ---- columna principal clara ---- */
/* filete dorado entre la franja oscura y la hoja blanca — el detalle que
   separa "dos bloques de color pegados" de "una carpeta con costura" —
   pedido explícito para que se lea más armado/profesional. */
.cv-columna-principal {
  padding: 13mm 12mm 13mm 12mm; position: relative;
  border-left: 1mm solid var(--cv-acento-2);
}

.cv-encabezado { margin-bottom: 8mm; }
.cv-nombre {
  font-family: var(--cv-font-titulos); font-weight: 800; font-size: 23pt;
  letter-spacing: 0.4px; margin: 0; color: var(--cv-texto); line-height: 1.05;
  text-transform: uppercase;
}
.cv-nombre-acento { color: var(--cv-acento-2); font-weight: 600; }
.cv-puesto { margin: 2.4mm 0 0; font-size: 10.5pt; letter-spacing: 0.6px; color: var(--cv-tenue); text-transform: uppercase; }

.cv-bloque-principal { margin-bottom: 8mm; }
.cv-titulo-seccion {
  font-family: var(--cv-font-titulos); font-weight: 700; font-size: 12.5pt;
  letter-spacing: 0.6px; text-transform: uppercase; color: var(--cv-texto);
  margin: 0 0 4mm; position: relative; padding-bottom: 2.6mm;
}
.cv-titulo-seccion::after {
  content: ""; position: absolute; left: 0; bottom: 0; width: 11mm; height: 2.4px;
  /* degradé real cuando el tema tiene dos acentos distintos (la mayoría de
     los temas nuevos) — en el tema turquesa original --cv-acento-2 es
     igual a --cv-acento, así que ahí se sigue viendo como color sólido,
     sin cambiar nada. */
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
}

.cv-perfil-texto { font-size: 9pt; line-height: 1.65; color: var(--cv-tenue); text-align: left; margin: 0; }

/* línea de tiempo de experiencia: una línea vertical acento + un punto
   por entrada, alineado a la fila de empresa/fecha — mismo lenguaje
   visual que el CV original. */
.cv-lista-experiencia, .cv-lista-educ-principal { position: relative; padding-left: 4.4mm; }
/* la línea tiene que pasar por el CENTRO del punto (radio 1.3mm), no por
   su borde izquierdo — antes ambos usaban left:0 en marcos de referencia
   distintos (la línea relativa a la lista completa, el punto relativo a
   cada entrada), y coincidían por el borde del punto en vez del centro,
   así que la línea se veía pegada a un costado de cada círculo en vez de
   atravesarlos prolijamente. */
.cv-lista-experiencia::before, .cv-lista-educ-principal::before {
  content: ""; position: absolute; left: 1.3mm; top: 1.6mm; bottom: 4mm; width: 1.4px;
  background: var(--cv-acento); opacity: 0.4;
}
.cv-experiencia, .cv-educ-principal-item { position: relative; margin-bottom: 6.5mm; }
.cv-experiencia:last-child, .cv-educ-principal-item:last-child { margin-bottom: 0; }
.cv-experiencia::before, .cv-educ-principal-item::before {
  content: ""; position: absolute; left: -4.4mm; top: 1.6mm;
  width: 2.6mm; height: 2.6mm; border-radius: 50%;
  background: var(--cv-acento); border: 1.6px solid #ffffff;
  box-shadow: 0 0 0 1.4px var(--cv-acento);
}

.cv-experiencia-fila { display: flex; align-items: baseline; justify-content: space-between; gap: 4mm; flex-wrap: wrap; }
.cv-experiencia-empresa {
  font-size: 10.5pt; font-weight: 700; text-decoration: underline; text-underline-offset: 2px;
  text-decoration-color: rgba(0,0,0,0.25);
}
.cv-experiencia-fecha {
  font-size: 7.6pt; font-weight: 700; letter-spacing: 0.3px; white-space: nowrap;
  background: var(--cv-acento-2); color: var(--cv-badge-texto); padding: 1.3mm 3mm; border-radius: 20px;
}
.cv-experiencia-rol { font-size: 8.6pt; color: var(--cv-tenue); margin: 1mm 0 2mm; }
.cv-experiencia-desc { font-size: 8.8pt; line-height: 1.6; color: var(--cv-tenue); text-align: left; margin: 0 0 2.4mm; }

.cv-subetiqueta { font-size: 9pt; font-weight: 700; color: var(--cv-texto); margin: 3mm 0 1.4mm; }
.cv-bullets { list-style: none; margin: 0; padding: 0; }
.cv-bullets li {
  font-size: 8.6pt; line-height: 1.6; color: var(--cv-tenue);
  padding-left: 3.4mm; position: relative; margin-bottom: 1.4mm; text-align: left;
}
.cv-bullets li::before {
  content: ""; position: absolute; left: 0; top: 0.75em;
  width: 3.4px; height: 3.4px; border-radius: 50%; background: var(--cv-acento);
}
.cv-bullets li strong { color: var(--cv-texto); }
.cv-bullets.cv-bullets-tools li strong { color: var(--cv-texto); }

.cv-educ-titulo { font-size: 10pt; font-weight: 700; margin: 0; }
.cv-educ-sub { font-size: 8.6pt; color: var(--cv-tenue); margin: 1mm 0 1.6mm; }

/* estado vacío (sección sin entradas: no se muestra en absoluto) */
.cv-oculto { display: none !important; }

/* ---------------- responsive liviano del editor ---------------- */
@media (max-width: 980px) {
  .app-layout { flex-direction: column; }
  .editor { width: 100%; flex-basis: auto; height: auto; border-right: none; border-bottom: 1px solid var(--app-borde); }
  .vista-envoltorio { min-height: auto; padding: 24px 14px 60px; }
}

/* ============================================================
   IMPRESIÓN — sólo .cv-pagina sobrevive; tamaño A4 exacto, sin
   sombras ni fondo de pantalla, con saltos de página prolijos.
   ============================================================ */
@page { size: A4; margin: 0; }

@media print {
  html, body { background: #ffffff; }
  .app-header, .editor { display: none !important; }
  .vista-envoltorio { padding: 0; min-height: 0; background: none; display: block; }
  .cv-pagina { box-shadow: none; margin: 0; width: 210mm; min-height: 297mm; }

  /* Por defecto, al imprimir/guardar como PDF el navegador descarta
     colores y degradados de fondo salvo que el usuario tilde a mano
     "Gráficos de fondo" en el diálogo de impresión — algo que casi nadie
     hace. Esto fuerza a respetarlos siempre, sin depender de esa opción. */
  * { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; color-adjust: exact !important; }

  /* evita que un bloque CHICO (una certificación, un título de sección)
     se corte a la mitad justo en el salto de página. IMPORTANTE: acá NO
     van los contenedores de SECCIÓN COMPLETA (como .cv-bloque-principal o
     .cv-lateral-bloque, que agrupan TODAS las experiencias/certificaciones
     juntas) ni los ítems de experiencia (que con varios bullets pueden ser
     más altos que una página entera) — si esos tuvieran "avoid" y no
     entraran en el espacio que queda de la página actual, el motor de
     impresión empuja el bloque ENTERO a la siguiente hoja, dejando un
     espacio en blanco enorme en la página anterior (el bug reportado:
     "se ve cortado en secciones con muchos espacios en blanco"). Esos
     bloques grandes se dejan con el comportamiento por defecto (pueden
     partirse entre líneas) y en cambio se protege sólo lo chico: que no
     se corte un bullet a la mitad ni quede un título de sección solo al
     pie de la página (ver .cv-bullets li y break-after más abajo). */
  .cv-educ-principal-item, .cv-titulo-seccion, .cv-m2-header { break-inside: avoid; }
  .cv-bullets li { break-inside: avoid; }
  .cv-titulo-seccion, .cv-experiencia-fila, .cv-m2-item-titulo { break-after: avoid-page; }
}

/* ============================================================
   MODELO 2 — banner oscuro arriba (foto + nombre + contacto) con un
   borde ondulado, dos columnas blancas debajo (skills/idiomas a la
   izquierda, experiencia/educación con título en cápsula de color a la
   derecha). Reusa las variables de tema/fuente (--cv-acento, etc.) igual
   que el Modelo 1, así el selector de Tema/Fuente le pega a los dos por
   igual sin duplicar nada.
   ============================================================ */
.cv-m2-header {
  position: relative; overflow: visible;
  display: flex; align-items: flex-start; justify-content: space-between; gap: 8mm;
  background: var(--cv-lateral-fondo); color: var(--cv-lateral-texto);
  padding: 12mm 12mm 15mm;
}
.cv-m2-foto-marco {
  width: calc(30mm * var(--cv-escala-foto, 1)); height: calc(30mm * var(--cv-escala-foto, 1)); border-radius: 50%; flex: 0 0 auto;
  overflow: hidden; background: #23262c;
  border: 1.2mm solid #ffffff;
  box-shadow: 0 0 0 1.4mm var(--cv-acento);
  display: grid; place-items: center;
}
.cv-m2-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m2-foto-placeholder { font-size: 2.2rem; opacity: 0.5; }

.cv-m2-nombre-bloque { flex: 1 1 auto; padding-top: 2mm; min-width: 0; }
.cv-m2-nombre {
  font-family: var(--cv-font-titulos); margin: 0; line-height: 1.12;
  font-size: 17pt; font-weight: 800; letter-spacing: 0.4px; text-transform: uppercase;
}
.cv-m2-nombre-1 { color: #ffffff; }
.cv-m2-nombre-2 { color: var(--cv-acento-2); }
.cv-m2-puesto { margin: 2mm 0 0; font-size: 8.6pt; letter-spacing: 1px; color: var(--cv-lateral-tenue); text-transform: uppercase; }

.cv-m2-contacto { list-style: none; margin: 2mm 0 0; padding: 0; flex: 0 0 auto; max-width: 55mm; }
.cv-m2-contacto li {
  display: flex; align-items: center; gap: 2.4mm; justify-content: flex-end;
  font-size: 7.6pt; color: var(--cv-lateral-texto); margin-bottom: 2.2mm; white-space: nowrap;
}
.cv-m2-contacto-icono {
  min-width: calc(5mm * var(--cv-escala-iconos, 1)); height: calc(5mm * var(--cv-escala-iconos, 1)); border-radius: 2.5mm; background: var(--cv-acento);
  display: grid; place-items: center; font-size: calc(6pt * var(--cv-escala-iconos, 1)); flex: 0 0 auto;
  padding: 0 0.8mm; color: #ffffff; line-height: 1;
}

/* la onda en sí (relleno del color del cuerpo + una línea fina de acento
   encima) va con estilos inline en el propio <path> — ver
   asegurarEsqueletoModelo2() en app.js — así no hay dudas de que el color
   pega bien. Ahora vive DENTRO de .cv-m2-col-der-envoltorio (ver abajo),
   no del header entero — pedido explícito: la columna de la izquierda
   tiene que seguir oscura como el header, sin blanco de por medio; la
   ola separa nada más el header de la columna blanca de la derecha. */
/* top más corto que el padding-bottom del header (11mm contra 15mm de
   arriba): deja aire de sobra para que la ola no le pise el último renglón
   de contacto (el ícono de LinkedIn). height 1mm más que ese "-11mm" para
   que el borde de abajo se meta un pelo DENTRO de .cv-m2-col-der (mismo
   color de fondo en los dos) — sin ese solape quedaba un hairline gris
   entre el SVG y el div de abajo por redondeo de subpíxel. */
.cv-m2-ola { position: absolute; left: 0; right: 0; top: -11mm; width: 100%; height: 12mm; display: block; }

.cv-m2-cuerpo { display: grid; grid-template-columns: 62mm 1fr; }
/* misma franja oscura que el header, sin costura — no es una columna
   nueva de otro color, es la continuación visual de la misma franja. */
.cv-m2-col-izq {
  background: var(--cv-lateral-fondo); color: var(--cv-lateral-texto);
  padding: 6mm 8mm 12mm 12mm;
}
.cv-m2-col-der-envoltorio { position: relative; overflow: visible; }
.cv-m2-col-der { background: var(--cv-fondo-cuerpo); height: 100%; padding: 10mm 12mm 12mm 8mm; }

.cv-m2-intro { font-size: 8.6pt; line-height: 1.6; color: var(--cv-lateral-tenue); margin: 0 0 8mm; }

.cv-m2-bloque { margin-bottom: 7mm; }
.cv-m2-bloque:last-child { margin-bottom: 0; }
.cv-m2-banner {
  font-family: var(--cv-font-titulos); font-weight: 700; font-size: 9.5pt;
  letter-spacing: 0.6px; text-transform: uppercase; color: var(--cv-acento-texto);
  background: var(--cv-acento); margin: 0 0 4mm; padding: 2.4mm 4mm;
  border-radius: 1.5mm;
}
.cv-m2-banner-ancho { text-align: center; }

.cv-m2-item { margin-bottom: 5mm; }
.cv-m2-item:last-child { margin-bottom: 0; }
.cv-m2-item-titulo { font-size: 9.5pt; font-weight: 700; color: var(--cv-texto); margin: 0; }
/* antes 8pt/gris tenue/normal — al lado del título en negrita quedaba
   casi invisible y "opacaba" el nombre de la empresa (pedido explícito
   de arreglarlo): más grande, semi-negrita y con el acento de color en
   vez de gris parejo, para que compita mejor por la atención. */
.cv-m2-item-sub { font-size: 8.8pt; font-weight: 600; color: var(--cv-acento); margin: 1mm 0 2.2mm; }

@media (max-width: 980px) {
  .cv-m2-header { flex-wrap: wrap; }
  .cv-m2-cuerpo { grid-template-columns: 1fr; }
}

/* ============================================================
   MODELO 3 — foto en arco, barras de progreso en Skills/Languages,
   línea de tiempo (fecha + título + texto) en la columna principal.
   Reusa el mismo grid de dos columnas que el Modelo 1 (ver
   .cv-pagina[data-modelo] más arriba) — acá sólo van las diferencias.
   ============================================================ */
.cv-m3-lateral { background: var(--cv-lateral-fondo); color: var(--cv-lateral-texto); padding: 11mm 8mm; }

/* la "forma de arco": arriba bien redondeado (casi un semicírculo),
   abajo apenas — no es un círculo como el Modelo 1 ni el óvalo con anillo
   del Modelo 2, es su propia silueta. 999px fuerza el redondeo máximo
   posible arriba (el navegador lo recorta solo al máximo real, la mitad
   del ancho) sin tener que calcular a mano el radio justo. Borde de
   COLOR completo alrededor — antes sólo tenía un filete abajo, y en la
   referencia el borde le da toda la vuelta. */
.cv-m3-foto-marco {
  width: calc(38mm * var(--cv-escala-foto, 1)); height: calc(46mm * var(--cv-escala-foto, 1));
  margin: 0 auto 6mm; overflow: hidden; background: #23262c;
  border-radius: 999px 999px 10px 10px;
  border: 1mm solid var(--cv-acento);
  display: grid; place-items: center;
}
.cv-m3-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m3-foto-placeholder { font-size: 2.4rem; opacity: 0.5; }

.cv-m3-bloque { margin-bottom: 7mm; }
.cv-m3-bloque:last-child { margin-bottom: 0; }
.cv-m3-seccion-titulo { display: flex; align-items: center; gap: 2.6mm; margin-bottom: 3.4mm; }
.cv-m3-seccion-icono {
  width: calc(6mm * var(--cv-escala-iconos, 1)); height: calc(6mm * var(--cv-escala-iconos, 1));
  border-radius: 50%; background: var(--cv-acento); color: var(--cv-acento-texto);
  display: grid; place-items: center; font-size: calc(7pt * var(--cv-escala-iconos, 1)); flex: 0 0 auto;
}
.cv-m3-seccion-titulo span:last-child {
  font-family: var(--cv-font-titulos); font-weight: 700; font-size: 9pt;
  letter-spacing: 0.5px; text-transform: uppercase; color: var(--cv-lateral-texto);
}
/* misma cabecera de sección, pero para cuando aparece en la columna
   blanca (Education/Work Experience/Personal Achievement): el texto es
   oscuro en vez de claro, y le sigue una línea fina gris que separa el
   título del contenido — pedido explícito, faltaba esa línea. */
.cv-m3-seccion-titulo-oscura { padding-bottom: 2.4mm; border-bottom: 1px solid var(--cv-linea); margin-bottom: 5mm; }
.cv-m3-seccion-titulo-oscura span:last-child { color: var(--cv-texto); }

.cv-m3-barra-fila { margin-bottom: 3mm; }
.cv-m3-barra-fila:last-child { margin-bottom: 0; }
.cv-m3-barra-etiqueta { font-size: 8pt; color: var(--cv-lateral-texto); margin-bottom: 1.2mm; }
.cv-m3-barra-linea { display: flex; align-items: center; gap: 2mm; }
.cv-m3-barra-pista { flex: 1 1 auto; height: 1.4mm; background: rgba(255, 255, 255, 0.18); border-radius: 2mm; overflow: hidden; }
.cv-m3-barra-relleno { height: 100%; background: var(--cv-acento); border-radius: 2mm; }
.cv-m3-barra-pct { flex: 0 0 auto; font-size: 7pt; color: var(--cv-lateral-tenue); min-width: 7mm; text-align: right; }

.cv-m3-principal { padding: 13mm 12mm; }
.cv-m3-encabezado { margin-bottom: 8mm; }
.cv-m3-nombre {
  font-family: var(--cv-font-titulos); font-weight: 800; font-size: 18pt;
  margin: 0; color: var(--cv-texto); text-transform: uppercase; line-height: 1.05;
}
.cv-m3-punto { color: var(--cv-acento); }
.cv-m3-puesto { font-size: 9pt; letter-spacing: 1px; color: var(--cv-tenue); text-transform: uppercase; margin: 1.6mm 0 0; }
.cv-m3-intro { font-size: 8.6pt; line-height: 1.6; color: var(--cv-tenue); margin: 0 0 8mm; }

.cv-m3-bloque-principal { margin-bottom: 8mm; }
.cv-m3-bloque-principal:last-child { margin-bottom: 0; }
/* cada entrada es una fila de dos columnas — fecha angosta a la
   izquierda, contenido a la derecha — en vez de la línea de tiempo
   vertical con línea+punto en el margen del Modelo 1 (pedido explícito:
   "las líneas temporales... son diferentes" en la referencia). */
.cv-m3-timeline-item { display: grid; grid-template-columns: 20mm 1fr; column-gap: 3mm; margin-bottom: 5.5mm; }
.cv-m3-timeline-item:last-child { margin-bottom: 0; }
.cv-m3-timeline-fecha { font-size: 8pt; font-weight: 700; color: var(--cv-tenue); }
.cv-m3-timeline-titulo-fila { display: flex; align-items: center; gap: 2.2mm; margin: 0; }
.cv-m3-timeline-punto {
  width: 2.6mm; height: 2.6mm; border-radius: 50%; flex: 0 0 auto;
  border: 1.4px solid var(--cv-acento); background: #ffffff;
}
.cv-m3-timeline-titulo-fila { font-size: 9.4pt; font-weight: 700; color: var(--cv-texto); }
.cv-m3-timeline-sub { font-size: 8.2pt; color: var(--cv-tenue); margin: 0.8mm 0 1mm 4.8mm; }
.cv-m3-timeline-desc { font-size: 8.6pt; line-height: 1.55; color: var(--cv-tenue); margin: 0 0 0 4.8mm; }

@media print {
  /* .cv-m3-bloque y .cv-m3-bloque-principal envuelven la SECCIÓN entera
     (todas las experiencias/certificaciones juntas) — con "avoid" ahí, si
     la sección no entra en lo que queda de página se empuja entera a la
     siguiente, dejando un espacio en blanco enorme (ver el comentario
     largo del primer @media print, arriba). Se protege sólo el título
     para que no quede solo al pie de página. */
  .cv-m3-timeline-titulo-fila { break-after: avoid-page; }
}

/* ---- Modelo 4: blanco y negro, franja lateral con dos rectángulos ---- */
/* La franja lateral NO es un único rectángulo oscuro parejo con una
   textura ondulada en el borde (primer y segundo intento, corregidos
   después de que no se pareciera en nada a la referencia), y tampoco son
   dos bloques pegados uno arriba del otro (tercer intento: quedaban los
   dos "apretados" cerca del medio de la página, sin aire entre ellos, y
   la curva de arriba aparecía recién después de Educación en vez de al
   lado de la foto). Versión final: el bloque de arriba es SÓLO la
   foto+nombre — termina en curva justo debajo, pegada a la foto — y
   después de un espacio en blanco real (margin-bottom, ver más abajo)
   viene el segundo bloque (contacto+educación+referencias juntos) que
   empieza en curva y crece (flex:1) para seguir llenando de oscuro hasta
   el final de la página, incluso en una impresión de varias hojas donde
   la columna principal es más larga que el contenido real de la franja. */
.cv-m4-lateral {
  position: relative; z-index: 1; overflow: visible;
  display: flex; flex-direction: column;
  color: var(--cv-lateral-texto);
}
.cv-m4-header-panel {
  background: var(--cv-lateral-fondo); text-align: center;
  padding: 14mm 9mm 10mm 11mm;
  border-bottom-right-radius: 22mm;
  margin-bottom: 8mm;
}
.cv-m4-encabezado { margin-bottom: 7mm; }
.cv-m4-nombre {
  font-family: var(--cv-font-titulos); font-weight: 800; font-size: 15pt;
  letter-spacing: 0.5px; text-transform: uppercase; color: #ffffff; margin: 0; line-height: 1.15;
}
.cv-m4-puesto { font-size: 7.6pt; letter-spacing: 1.6px; text-transform: uppercase; color: var(--cv-lateral-tenue); margin: 2mm 0 0; }
/* centrada normal, igual que en el Modelo 1/3 — no corrida hacia la
   derecha (un intento anterior la corría con un right negativo para que
   "montara" sobre el borde, pero se veía descentrada, no como se pidió). */
.cv-m4-foto-marco {
  width: calc(34mm * var(--cv-escala-foto, 1)); height: calc(34mm * var(--cv-escala-foto, 1)); border-radius: 50%;
  margin: 0 auto; overflow: hidden; background: #23262c;
  border: 2.8px solid #ffffff; box-shadow: 0 4px 14px rgba(0,0,0,0.4);
  display: grid; place-items: center;
}
.cv-m4-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m4-foto-placeholder { font-size: 2.4rem; opacity: 0.5; }

.cv-m4-panel-b {
  background: var(--cv-lateral-fondo); text-align: left;
  padding: 10mm 9mm 12mm 11mm;
  border-top-right-radius: 22mm;
  flex: 1 1 auto;
}
.cv-m4-bloque { margin-bottom: 7mm; }
.cv-m4-bloque:last-child { margin-bottom: 0; }

/* título con ícono en cápsula circular — se usa tal cual en la franja
   oscura (texto claro por defecto) y con el modificador -oscura en la
   columna blanca (texto oscuro), mismo mecanismo que tituloIconoM3(). */
.cv-m4-titulo { display: flex; align-items: center; gap: 2.6mm; margin-bottom: 3.4mm; }
.cv-m4-titulo-icono {
  width: calc(6mm * var(--cv-escala-iconos, 1)); height: calc(6mm * var(--cv-escala-iconos, 1));
  border-radius: 50%; background: var(--cv-acento); color: var(--cv-acento-texto);
  display: grid; place-items: center; font-size: calc(7pt * var(--cv-escala-iconos, 1)); flex: 0 0 auto;
}
.cv-m4-titulo span:last-child {
  font-family: var(--cv-font-titulos); font-weight: 700; font-size: 9pt;
  letter-spacing: 0.5px; text-transform: uppercase; color: #ffffff;
}
.cv-m4-titulo-oscura span:last-child { color: var(--cv-texto); }

.cv-m4-principal { position: relative; z-index: 0; padding: 13mm 12mm; }
.cv-m4-bloque-principal { margin-bottom: 8mm; }
.cv-m4-bloque-principal:last-child { margin-bottom: 0; }
.cv-m4-about-texto { font-size: 8.8pt; line-height: 1.65; color: var(--cv-tenue); margin: 0; }

.cv-m4-exp-item { margin-bottom: 6mm; }
.cv-m4-exp-item:last-child { margin-bottom: 0; }
.cv-m4-exp-fila { display: flex; align-items: baseline; justify-content: space-between; gap: 4mm; flex-wrap: wrap; }
.cv-m4-exp-titulo { font-size: 9.6pt; font-weight: 700; color: var(--cv-texto); }
.cv-m4-exp-fecha { font-size: 7.8pt; font-weight: 600; color: var(--cv-acento); white-space: nowrap; }
.cv-m4-exp-empresa { font-size: 8.4pt; color: var(--cv-tenue); margin: 0.8mm 0 1.6mm; font-style: italic; }
.cv-m4-exp-desc { font-size: 8.6pt; line-height: 1.6; color: var(--cv-tenue); margin: 0 0 1.6mm; }

/* barras finas y minimalistas, sin número de porcentaje — la referencia
   sólo muestra una línea corta debajo de cada skill, sin dato numérico. */
.cv-m4-skills-grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: 8mm; row-gap: 4mm; }
.cv-m4-skill-nombre { display: block; font-size: 8.2pt; color: var(--cv-texto); margin-bottom: 1.4mm; }
.cv-m4-skill-linea { height: 1.2mm; background: var(--cv-linea); border-radius: 2mm; overflow: hidden; }
.cv-m4-skill-relleno { height: 100%; background: var(--cv-acento); border-radius: 2mm; }

.cv-m4-fila-dos { display: grid; grid-template-columns: 1fr 1fr; column-gap: 8mm; }
.cv-m4-lista-clara li { color: var(--cv-tenue); }
.cv-m4-lista-clara li::before { background: var(--cv-acento); }

@media print {
  /* .cv-m4-bloque/.cv-m4-bloque-principal envuelven la sección entera y
     .cv-m4-exp-item puede ser más alto que una página con varios bullets
     — ver el comentario largo del primer @media print sobre por qué NO
     llevan "avoid" (causaría el espacio en blanco grande al saltar de
     página). Sólo se protege el título de cada experiencia. */
  .cv-m4-exp-fila { break-after: avoid-page; }
}

/* ---- Modelo 5 "Atelier": una sola columna editorial, sin franja
   lateral — pensado para un perfil creativo. La foto va en un "blob"
   orgánico (border-radius asimétrico, no un círculo ni un polígono con
   esquinas rectas) y las secciones usan chips/listas livianas en vez de
   barras de progreso o íconos en cápsula, para que se sienta más
   editorial que "currículum corporativo". ---- */
.cv-pagina[data-modelo="modelo5"] { padding: 16mm 16mm 14mm; }
.cv-m5-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 8mm; }
.cv-m5-eyebrow {
  font-size: 8pt; letter-spacing: 2px; text-transform: uppercase; color: var(--cv-acento);
  font-weight: 700; margin: 0 0 2mm;
}
.cv-m5-nombre {
  font-family: var(--cv-font-titulos); font-weight: 400; font-size: 26pt;
  line-height: 1.12; margin: 0; color: var(--cv-texto);
}
.cv-m5-nombre .cv-nombre-acento { font-weight: 700; font-size: 1.02em; }
/* el blob: cuatro radios distintos por esquina describen una forma
   orgánica asimétrica — la misma receta clásica de "CSS blob shape",
   nada de un círculo ni de un polígono con lados rectos. */
.cv-m5-foto-marco {
  width: calc(38mm * var(--cv-escala-foto, 1)); height: calc(44mm * var(--cv-escala-foto, 1));
  border-radius: 62% 38% 55% 45% / 45% 40% 60% 55%;
  overflow: hidden; background: #ece4d8; flex: 0 0 auto;
  border: 2px solid var(--cv-acento);
  display: grid; place-items: center;
  box-shadow: 0 6px 18px rgba(0,0,0,0.12);
}
.cv-m5-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m5-foto-placeholder { font-size: 2.2rem; opacity: 0.5; }

.cv-m5-divisor { width: 100%; height: 5mm; display: block; margin: 6mm 0 8mm; }

.cv-m5-titulo {
  font-family: var(--cv-font-titulos); font-size: 8.6pt; font-weight: 700;
  letter-spacing: 1.6px; text-transform: uppercase; color: var(--cv-acento);
  margin: 0 0 3mm;
}
.cv-m5-perfil-texto {
  font-size: 10pt; line-height: 1.7; color: var(--cv-tenue); margin: 0 0 10mm;
  font-style: italic; position: relative; padding-left: 7mm;
}
.cv-m5-perfil-texto::before {
  content: "“"; position: absolute; left: 0; top: -0.25em;
  font-family: var(--cv-font-titulos); font-style: normal; font-size: 2.2em;
  color: var(--cv-acento); line-height: 1;
}

.cv-m5-meta-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(42mm, 1fr));
  gap: 7mm 8mm; margin-bottom: 10mm;
}
.cv-m5-chips { display: flex; flex-wrap: wrap; gap: 1.6mm; }
.cv-m5-chip {
  font-size: 7.6pt; color: var(--cv-texto); border: 1px solid var(--cv-linea);
  border-radius: 20px; padding: 1.2mm 3mm; max-width: 100%; word-break: break-word;
}
.cv-m5-lista-clara { list-style: none; margin: 0; padding: 0; }
.cv-m5-lista-clara li {
  font-size: 8.4pt; line-height: 1.55; color: var(--cv-tenue);
  padding: 1.4mm 0; border-bottom: 1px solid var(--cv-linea);
}
.cv-m5-lista-clara li:last-child { border-bottom: none; }

.cv-m5-experiencia-lista { display: flex; flex-direction: column; gap: 6.5mm; margin-bottom: 10mm; }
.cv-m5-experiencia-item { display: flex; gap: 5mm; }
.cv-m5-experiencia-num {
  font-family: var(--cv-font-titulos); font-size: 18pt; font-weight: 700;
  color: var(--cv-acento); opacity: 0.32; line-height: 1; flex: 0 0 auto;
}
.cv-m5-experiencia-contenido { flex: 1 1 auto; min-width: 0; }
.cv-m5-experiencia-fila { display: flex; align-items: baseline; justify-content: space-between; gap: 4mm; flex-wrap: wrap; }
.cv-m5-experiencia-rol { font-size: 10pt; font-weight: 700; color: var(--cv-texto); }
.cv-m5-experiencia-fecha { font-size: 7.8pt; color: var(--cv-acento); font-weight: 600; white-space: nowrap; }
.cv-m5-experiencia-empresa { font-size: 8.6pt; color: var(--cv-tenue); font-style: italic; margin: 0.8mm 0 1.6mm; }
.cv-m5-experiencia-desc { font-size: 8.6pt; line-height: 1.6; color: var(--cv-tenue); margin: 0 0 1.6mm; }

.cv-m5-cierre-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; }
.cv-m5-ref-item { font-size: 8.4pt; line-height: 1.6; color: var(--cv-tenue); margin-bottom: 3mm; }
.cv-m5-ref-nombre { color: var(--cv-texto); font-weight: 700; }

@media print {
  /* .cv-m5-meta-col envuelve la sección lateral entera y
     .cv-m5-experiencia-item puede ser alto — sin "avoid" ahí, ver el
     comentario largo del primer @media print. .cv-m5-ref-item sí es
     chico y fijo, se protege entero. */
  .cv-m5-ref-item { break-inside: avoid; }
  .cv-m5-experiencia-fila { break-after: avoid-page; }
}

/* ============================================================
   Modelo 6 "Pulse" — estética de editor de código: franja angosta con
   etiqueta vertical, foto chica como badge, skills como tags <Texto/>,
   bullets con numeración de línea.
   ============================================================ */
.cv-m6-wrap { display: flex; min-height: 297mm; background: #0b0f14; color: #d6e2ea; font-family: var(--cv-font-cuerpo); }
.cv-m6-rail { width: 8mm; flex: 0 0 8mm; background: linear-gradient(180deg, #0f1a20, #0b0f14); border-right: 0.4mm solid #1c2a33; display: flex; align-items: flex-end; justify-content: center; padding-block: 8mm; }
.cv-m6-rail-label { writing-mode: vertical-rl; transform: rotate(180deg); font-family: "Courier New", var(--cv-font-cuerpo), monospace; font-size: 7pt; letter-spacing: 0.15em; color: var(--cv-acento); opacity: 0.75; white-space: nowrap; }
.cv-m6-main { flex: 1; min-width: 0; padding: 10mm 12mm 12mm 10mm; }
.cv-m6-header { display: flex; align-items: center; gap: 5mm; margin-bottom: 4mm; }
.cv-m6-badge-wrap { flex: 0 0 auto; }
.cv-m6-foto { width: calc(18mm * var(--cv-escala-foto, 1)); height: calc(18mm * var(--cv-escala-foto, 1)); object-fit: cover; border-radius: 4mm; border: 0.5mm solid var(--cv-acento); box-shadow: 0 0 0 1.5mm rgba(67, 229, 255, 0.12); }
.cv-m6-nombre { font-family: var(--cv-font-titulos); font-size: 22pt; font-weight: 700; color: #f2f7fa; margin: 0; line-height: 1.1; }
.cv-m6-puesto { font-family: "Courier New", monospace; font-size: 11pt; color: var(--cv-acento); margin-top: 1mm; }
.cv-m6-subtitulo { font-size: 9pt; color: #8fa3af; margin-top: 0.5mm; }
.cv-m6-contacto { display: flex; flex-wrap: wrap; gap: 3mm; font-size: 8.5pt; color: #9db2bd; padding-bottom: 4mm; border-bottom: 0.3mm solid #1c2a33; margin-bottom: 5mm; }
.cv-m6-contacto-item { display: inline-flex; align-items: center; gap: 1.2mm; }
.cv-m6-contacto-icono { font-size: calc(9pt * var(--cv-escala-iconos, 1)); color: var(--cv-acento); }
.cv-m6-section { margin-bottom: 6mm; }
.cv-m6-h2 { font-family: "Courier New", monospace; font-size: 9.5pt; color: var(--cv-acento); letter-spacing: 0.04em; margin: 0 0 2.5mm; text-transform: lowercase; }
.cv-m6-perfil { font-size: 9.5pt; line-height: 1.6; color: #c3d2da; margin: 0; }
.cv-m6-chips { display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m6-chip { font-family: "Courier New", monospace; font-size: 8pt; background: #101820; border: 0.3mm solid #1c2a33; color: var(--cv-acento); border-radius: 1mm; padding: 1mm 2mm; }
.cv-m6-chip-soft { color: #d6e2ea; border-color: #26333d; }
.cv-m6-idiomas { display: flex; flex-wrap: wrap; gap: 4mm; }
.cv-m6-idioma { display: flex; gap: 1.5mm; font-size: 9pt; }
.cv-m6-idioma-nivel { color: var(--cv-acento); }
.cv-m6-job { margin-bottom: 5mm; padding-bottom: 4mm; border-bottom: 0.3mm solid #161f26; }
.cv-m6-job:last-child { border-bottom: none; }
.cv-m6-job-head { display: flex; justify-content: space-between; font-size: 10.5pt; }
.cv-m6-job-rol { font-weight: 700; color: #f2f7fa; }
.cv-m6-job-fecha { font-family: "Courier New", monospace; font-size: 8pt; color: var(--cv-acento); }
.cv-m6-job-empresa { color: var(--cv-acento); font-size: 9pt; margin-bottom: 1.5mm; }
.cv-m6-job-desc { font-size: 9pt; color: #b7c6ce; line-height: 1.55; margin: 0 0 2mm; }
.cv-m6-bullets { border-left: 0.3mm solid #1c2a33; margin-left: 1mm; }
.cv-m6-bullet-row { display: flex; gap: 3mm; font-size: 8.8pt; padding: 0.6mm 0 0.6mm 2.5mm; }
.cv-m6-linenum { font-family: "Courier New", monospace; color: var(--cv-acento); min-width: 5mm; text-align: right; opacity: 0.75; }
.cv-m6-bullet-text { color: #cdd9e0; }
.cv-m6-tools { display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m6-tool { font-size: 7.5pt; background: #101820; color: #8fa3af; border-radius: 1mm; padding: 0.8mm 1.8mm; }
.cv-m6-edu { margin-bottom: 3mm; }
.cv-m6-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m6-edu-inst { font-weight: 700; color: #f2f7fa; }
.cv-m6-edu-fecha { font-family: "Courier New", monospace; font-size: 8pt; color: var(--cv-acento); }
.cv-m6-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 8.5pt; color: #b7c6ce; }
.cv-m6-certs { display: flex; flex-direction: column; gap: 1.5mm; }
.cv-m6-cert { font-size: 9pt; display: flex; gap: 2mm; }
.cv-m6-cert-titulo { color: #f2f7fa; font-weight: 600; }
.cv-m6-cert-sub { color: #8fa3af; }
.cv-m6-logros { margin: 0; padding-left: 4mm; font-size: 9pt; color: #c3d2da; }
.cv-m6-referencias { display: flex; flex-wrap: wrap; gap: 5mm; }
.cv-m6-referencia { display: flex; flex-direction: column; font-size: 8.5pt; color: #b7c6ce; }
.cv-m6-ref-nombre { font-weight: 700; color: #f2f7fa; }
.cv-m6-ref-rol { color: var(--cv-acento); font-size: 8pt; }
@media print {
  .cv-m6-edu, .cv-m6-cert, .cv-m6-referencia { break-inside: avoid; }
  .cv-m6-bullet-row { break-inside: avoid; }
  .cv-m6-job-head { break-after: avoid-page; }
}

/* ============================================================
   Modelo 7 "Meridian" — masthead centrado y simétrico, foto chica tipo
   sello, columna única ancha, serif, casi monocromo — perfil ejecutivo.
   ============================================================ */
.cv-m7-page { max-width: 160mm; margin: 0 auto; padding: 14mm 0 12mm; text-align: center; color: #1b2430; background: #fbf8f2; font-family: var(--cv-font-cuerpo); }
.cv-m7-photowrap { margin-bottom: 4mm; }
.cv-m7-foto { width: calc(20mm * var(--cv-escala-foto, 1)); height: calc(20mm * var(--cv-escala-foto, 1)); border-radius: 50%; object-fit: cover; border: 0.4mm solid var(--cv-acento); box-shadow: 0 0 0 1.4mm #fbf8f2, 0 0 0 1.7mm color-mix(in srgb, var(--cv-acento) 13%, transparent); }
.cv-m7-rule { height: 0; border-top: 0.25mm solid var(--cv-acento); margin: 2mm auto; width: 70mm; }
.cv-m7-nombre { font-family: Georgia, "Times New Roman", var(--cv-font-titulos), serif; font-size: 24pt; font-weight: 400; letter-spacing: 0.12em; text-transform: uppercase; color: var(--cv-acento); margin: 1mm 0; }
.cv-m7-puesto { font-family: Georgia, "Times New Roman", var(--cv-font-titulos), serif; font-style: italic; font-size: 11pt; color: #4a5568; margin-top: 2mm; }
.cv-m7-subtitulo { font-size: 9pt; color: #6b7686; margin-top: 1mm; }
.cv-m7-contacto { font-size: 8.5pt; color: #55617a; margin: 3mm 0 8mm; }
.cv-m7-dot { margin: 0 2mm; color: var(--cv-acento-2); }
.cv-m7-section { margin-bottom: 7mm; text-align: left; }
.cv-m7-h2 { font-family: Georgia, "Times New Roman", var(--cv-font-titulos), serif; font-size: 10.5pt; letter-spacing: 0.18em; text-transform: uppercase; text-align: center; color: var(--cv-acento); margin: 0 0 4mm; padding-bottom: 1.5mm; border-bottom: 0.2mm solid var(--cv-acento-2); }
.cv-m7-perfil { font-size: 9.5pt; line-height: 1.7; text-align: center; color: #333e4d; margin: 0; }
.cv-m7-job { margin-bottom: 5mm; }
.cv-m7-job-head { display: flex; justify-content: space-between; font-size: 10.5pt; }
.cv-m7-job-rol { font-weight: 700; color: var(--cv-acento); }
.cv-m7-job-fecha { font-style: italic; color: #7a8496; font-size: 9pt; }
.cv-m7-job-empresa { font-size: 9pt; color: #6b7686; margin-bottom: 1.5mm; }
.cv-m7-job-desc { font-size: 9pt; line-height: 1.55; color: #333e4d; margin: 0 0 2mm; }
.cv-m7-job-bullets { margin: 0 0 2mm; padding-left: 4.5mm; font-size: 8.8pt; color: #333e4d; }
.cv-m7-job-tools { font-size: 8pt; color: #8a94a6; }
.cv-m7-edu { margin-bottom: 3mm; }
.cv-m7-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m7-edu-inst { font-weight: 700; color: var(--cv-acento); }
.cv-m7-edu-fecha { font-style: italic; color: #7a8496; font-size: 8.5pt; }
.cv-m7-edu-bullets { margin: 1mm 0 0; padding-left: 4.5mm; font-size: 8.5pt; color: #333e4d; }
.cv-m7-cert { font-size: 9pt; margin-bottom: 1.5mm; }
.cv-m7-cert-titulo { font-weight: 700; color: var(--cv-acento); }
.cv-m7-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; }
.cv-m7-inline-list { font-size: 9pt; color: #333e4d; margin: 0 0 2mm; text-align: center; }
.cv-m7-idioma { display: flex; justify-content: space-between; font-size: 9pt; padding: 0.6mm 0; }
.cv-m7-idioma-nivel { color: #7a8496; }
.cv-m7-page ul#cv-m7-logros { list-style: none; padding: 0; margin: 0; text-align: center; }
.cv-m7-page ul#cv-m7-logros li { font-size: 9pt; padding: 1mm 0; }
.cv-m7-referencia { font-size: 8.8pt; text-align: center; margin-bottom: 2.5mm; color: #333e4d; }
.cv-m7-ref-nombre { font-weight: 700; color: var(--cv-acento); }
@media print {
  .cv-m7-edu, .cv-m7-cert, .cv-m7-referencia { break-inside: avoid; }
  .cv-m7-job-bullets li { break-inside: avoid; }
  .cv-m7-job-head { break-after: avoid-page; }
}

/* ============================================================
   Modelo 8 "Nova" — bloque diagonal de color detrás de nombre+foto,
   grid asimétrico tipo revista con tarjetas "recortadas" a la derecha.
   ============================================================ */
.cv-m8-page { position: relative; background: #fffdf9; font-family: var(--cv-font-cuerpo); color: #2a2733; overflow: hidden; padding-bottom: 12mm; }
/* el bloque diagonal ya NO tiene una altura fija en mm — antes (62mm)
   quedaba más alto que el header real cuando el nombre era corto o la
   foto chica, y el sobrante invadía la fila de contacto de abajo con
   texto oscuro sobre fondo de color (ilegible). Ahora ocupa el 100% del
   contenedor (.cv-m8-header-wrap), cuya altura la define el propio
   header — así el diagonal SIEMPRE termina exactamente donde termina el
   header, sea cual sea el largo del nombre o la escala de la foto. */
.cv-m8-header-wrap { position: relative; }
.cv-m8-diagonal { position: absolute; top: 0; left: 0; bottom: 0; width: 140mm; height: 100%; background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2)); clip-path: polygon(0 0, 100% 0, 78% 100%, 0 100%); z-index: 0; }
.cv-m8-header { position: relative; z-index: 1; display: flex; align-items: flex-end; gap: 6mm; padding: 12mm 12mm 8mm 12mm; }
.cv-m8-photo-wrap {
  flex: 0 0 auto; transform: translateY(4mm);
  width: calc(30mm * var(--cv-escala-foto, 1)); height: calc(30mm * var(--cv-escala-foto, 1));
  border-radius: 50%; overflow: hidden; background: #23262c;
  border: 1.2mm solid #fffdf9; box-shadow: 0 1mm 3mm rgba(0,0,0,0.18);
  display: grid; place-items: center;
}
.cv-m8-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m8-foto-placeholder { font-size: 2.2rem; opacity: 0.5; }
.cv-m8-heading { padding-bottom: 2mm; }
.cv-m8-nombre { font-family: var(--cv-font-titulos); font-size: 23pt; font-weight: 800; color: #fff; margin: 0; line-height: 1.05; text-shadow: 0 0.5mm 2mm rgba(0,0,0,0.25); }
.cv-m8-apellido { color: #1a1620; text-shadow: none; }
.cv-m8-puesto { font-size: 11pt; font-weight: 600; color: #fff2ee; margin-top: 1mm; }
.cv-m8-subtitulo { font-size: 8.5pt; color: #fff2ee; opacity: 0.9; margin-top: 0.5mm; }
.cv-m8-contacto { position: relative; z-index: 1; display: flex; flex-wrap: wrap; gap: 4mm; font-size: 8.5pt; color: #57506a; padding: 0 12mm 4mm; }
.cv-m8-contacto-item { display: inline-flex; align-items: center; gap: 1.2mm; }
.cv-m8-contacto-icono { font-size: calc(9pt * var(--cv-escala-iconos, 1)); color: var(--cv-acento); }
.cv-m8-section-perfil { position: relative; z-index: 1; padding: 0 12mm 6mm; }
.cv-m8-section-perfil p { font-size: 9.5pt; line-height: 1.6; color: #423d52; margin: 0; }
.cv-m8-h2 { font-family: var(--cv-font-titulos); font-size: 12pt; font-weight: 800; color: #2a2733; margin: 0 0 3mm; }
.cv-m8-h2::after { content: ""; display: block; width: 10mm; height: 1mm; background: var(--cv-acento); border-radius: 1mm; margin-top: 1.5mm; }
.cv-m8-grid { position: relative; z-index: 1; display: grid; grid-template-columns: 1.65fr 1fr; gap: 8mm; padding: 0 12mm; align-items: start; }
.cv-m8-job { margin-bottom: 5mm; padding-bottom: 4mm; border-bottom: 0.25mm solid #ece6da; }
.cv-m8-job:last-child { border-bottom: none; }
.cv-m8-job-head { display: flex; justify-content: space-between; font-size: 10.5pt; }
.cv-m8-job-rol { font-weight: 700; color: #2a2733; }
.cv-m8-job-fecha { font-size: 8pt; color: var(--cv-acento-2); font-weight: 600; }
.cv-m8-job-empresa { font-size: 9pt; color: var(--cv-acento); font-weight: 600; margin-bottom: 1.5mm; }
.cv-m8-job-desc { font-size: 9pt; line-height: 1.55; color: #423d52; margin: 0 0 2mm; }
.cv-m8-job-bullets { margin: 0 0 2mm; padding-left: 4.5mm; font-size: 8.8pt; color: #423d52; }
.cv-m8-tools { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m8-tool { font-size: 7.5pt; background: #f4efe6; color: #57506a; border-radius: 1mm; padding: 0.7mm 1.8mm; }
.cv-m8-page ul#cv-m8-logros { list-style: none; padding: 0; margin: 0; }
.cv-m8-page ul#cv-m8-logros li { font-size: 9pt; padding: 1mm 0; border-bottom: 0.2mm dashed #ece6da; }
.cv-m8-referencia { font-size: 8.8pt; margin-bottom: 3mm; display: flex; flex-direction: column; }
.cv-m8-ref-nombre { font-weight: 700; }
.cv-m8-ref-rol { color: var(--cv-acento); font-size: 8pt; }
.cv-m8-ref-dato { color: var(--cv-acento-2); font-size: 8pt; }
.cv-m8-card { position: relative; background: #fbf6ee; border-radius: 2mm; padding: 5mm; margin-bottom: 5mm; }
.cv-m8-card::after { content: ""; position: absolute; top: 0; right: 0; width: 6mm; height: 6mm; background: rgba(0,0,0,0.06); clip-path: polygon(100% 0, 0 0, 100% 100%); }
.cv-m8-card-coral { border-left: 1mm solid var(--cv-acento); }
.cv-m8-card-violet { border-left: 1mm solid var(--cv-acento-2); }
.cv-m8-h3 { font-family: var(--cv-font-titulos); font-size: 10pt; font-weight: 800; margin: 0 0 2.5mm; color: #2a2733; }
.cv-m8-chip { display: inline-block; font-size: 7.8pt; background: #fff; border: 0.25mm solid #ece6da; color: #423d52; border-radius: 6mm; padding: 0.9mm 2.4mm; margin: 0 1.2mm 1.2mm 0; }
.cv-m8-chip-soft { background: #f4efe6; }
.cv-m8-idioma { display: flex; justify-content: space-between; font-size: 8.8pt; padding: 0.8mm 0; }
.cv-m8-idioma-nivel { color: var(--cv-acento-2); font-weight: 600; }
.cv-m8-edu { margin-bottom: 3mm; }
.cv-m8-edu-inst { font-weight: 700; font-size: 9pt; }
.cv-m8-edu-fecha { font-size: 7.8pt; color: var(--cv-acento-2); margin-bottom: 1mm; }
.cv-m8-edu-bullets { margin: 0.5mm 0 0; padding-left: 4mm; font-size: 8.2pt; color: #423d52; }
.cv-m8-cert { font-size: 8.8pt; margin-bottom: 2mm; display: flex; flex-direction: column; }
.cv-m8-cert-titulo { font-weight: 700; }
.cv-m8-cert-sub { color: #7a7488; font-size: 8pt; }
@media print {
  /* .cv-m8-card envuelve la sección entera (todas las certificaciones o
     toda la educación juntas) — sin "avoid" ahí, ver el comentario largo
     del primer @media print. .cv-m8-edu/.cv-m8-cert/.cv-m8-referencia son
     por ítem individual, esos sí quedan protegidos. */
  .cv-m8-edu, .cv-m8-cert, .cv-m8-referencia { break-inside: avoid; }
  .cv-m8-job-bullets li { break-inside: avoid; }
  .cv-m8-job-head { break-after: avoid-page; }
}

/* ---- Modelo 9 "Ignite" ---- */
.cv-m9-page {
  --cv-m9-punch: var(--cv-acento); --cv-m9-black: #0a0a0a;
  font-family: var(--cv-font-cuerpo); color: var(--cv-m9-black); background: #fff;
}
.cv-m9-header { display: flex; align-items: center; gap: 6mm; padding: 10mm 10mm 4mm; }
.cv-m9-fotowrap { flex: none; width: calc(28mm * var(--cv-escala-foto, 1)); height: calc(28mm * var(--cv-escala-foto, 1)); }
.cv-m9-foto { width: 100%; height: 100%; object-fit: cover; clip-path: polygon(50% 0%, 100% 15%, 100% 75%, 50% 100%, 0% 75%, 0% 15%); background: #ddd; }
.cv-m9-titlewrap { flex: 1; }
.cv-m9-nombretitulo { font-family: var(--cv-font-titulos); font-weight: 900; text-transform: uppercase; letter-spacing: -0.02em; font-size: 28pt; line-height: 1; margin: 0; }
.cv-m9-apellido { color: var(--cv-m9-punch); -webkit-text-stroke: 0.5px var(--cv-m9-black); }
.cv-m9-puesto { font-family: var(--cv-font-titulos); font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; font-size: 11pt; margin-top: 1mm; }
.cv-m9-subtitulo { font-size: 9pt; opacity: 0.75; margin-top: 0.5mm; }
.cv-m9-contacto { list-style: none; display: flex; flex-wrap: wrap; gap: 3mm 6mm; margin: 0; padding: 3mm 10mm 5mm; background: var(--cv-m9-black); }
.cv-m9-contacto-item { display: flex; align-items: center; gap: 1.5mm; color: #fff; font-size: 8.5pt; }
.cv-m9-contacto-icono { color: var(--cv-m9-punch); font-size: calc(11pt * var(--cv-escala-iconos, 1)); line-height: 1; }
.cv-m9-seccion { padding: 0 10mm 6mm; }
.cv-m9-banda { position: relative; background: var(--cv-m9-black); padding: 3mm 0; margin: 0 -10mm 5mm; padding-left: 10mm; display: flex; align-items: center; gap: 4mm; }
.cv-m9-num { font-family: var(--cv-font-titulos); font-weight: 900; font-size: 30pt; line-height: 1; color: var(--cv-m9-punch); letter-spacing: -0.05em; margin-top: -2mm; margin-bottom: -2mm; }
.cv-m9-tituloseccion { font-family: var(--cv-font-titulos); color: #fff; font-weight: 800; text-transform: uppercase; letter-spacing: 0.06em; font-size: 13pt; margin: 0; }
.cv-m9-perfil { font-size: 9.5pt; line-height: 1.5; }
.cv-m9-habilidades { display: flex; flex-direction: column; gap: 2.5mm; }
.cv-m9-skill-texto { font-weight: 700; text-transform: uppercase; font-size: 8.5pt; letter-spacing: 0.03em; margin-bottom: 0.8mm; }
.cv-m9-skill-bar { height: 3mm; background: repeating-linear-gradient(to right, var(--cv-m9-punch) 0 6mm, var(--cv-m9-black) 6mm 6.8mm); border: 1px solid var(--cv-m9-black); }
.cv-m9-blandas, .cv-m9-idiomas { display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m9-chip { background: var(--cv-m9-black); color: #fff; font-size: 8pt; font-weight: 700; text-transform: uppercase; padding: 1.5mm 3mm; clip-path: polygon(4% 0, 100% 0, 96% 100%, 0% 100%); }
.cv-m9-idioma { display: flex; gap: 2mm; align-items: baseline; border-bottom: 2px solid var(--cv-m9-black); padding: 1mm 0; min-width: 40mm; }
.cv-m9-idioma-nombre { font-weight: 700; text-transform: uppercase; font-size: 8.5pt; }
.cv-m9-idioma-nivel { font-size: 8pt; color: var(--cv-m9-punch); background: var(--cv-m9-black); padding: 0 1.5mm; font-weight: 700; }
.cv-m9-experiencia { display: flex; flex-direction: column; gap: 5mm; }
.cv-m9-exp-item { border-left: 3px solid var(--cv-m9-punch); padding-left: 3mm; }
.cv-m9-exp-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m9-exp-rol { font-family: var(--cv-font-titulos); font-weight: 800; text-transform: uppercase; font-size: 11pt; margin: 0; }
.cv-m9-exp-fecha { font-size: 8pt; font-weight: 700; color: var(--cv-m9-black); background: var(--cv-m9-punch); padding: 0.5mm 2mm; white-space: nowrap; }
.cv-m9-exp-empresa { font-size: 9pt; font-weight: 700; opacity: 0.8; margin-bottom: 1mm; }
.cv-m9-exp-desc { font-size: 9pt; line-height: 1.45; margin-bottom: 1mm; }
.cv-m9-exp-bullets { margin: 1mm 0; padding-left: 4mm; font-size: 9pt; line-height: 1.4; }
.cv-m9-exp-tools { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-top: 1.5mm; }
.cv-m9-tool { font-size: 7.5pt; font-weight: 700; border: 1px solid var(--cv-m9-black); padding: 0.5mm 1.5mm; text-transform: uppercase; }
.cv-m9-educacion, .cv-m9-certificaciones, .cv-m9-referencias { display: flex; flex-direction: column; gap: 3mm; }
.cv-m9-edu-head { display: flex; justify-content: space-between; align-items: baseline; }
.cv-m9-edu-institucion { font-weight: 800; text-transform: uppercase; font-size: 10pt; margin: 0; }
.cv-m9-edu-fecha { font-size: 8pt; font-weight: 700; }
.cv-m9-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 8.5pt; }
.cv-m9-cert-titulo { font-weight: 800; font-size: 9.5pt; }
.cv-m9-cert-sub { font-size: 8.5pt; opacity: 0.75; }
.cv-m9-logros { margin: 0; padding-left: 4mm; font-size: 9pt; line-height: 1.5; }
.cv-m9-ref-nombre { font-weight: 800; font-size: 9.5pt; }
.cv-m9-ref-detalle { font-size: 8.5pt; opacity: 0.75; }
@media print {
  .cv-m9-edu-item, .cv-m9-cert-item, .cv-m9-ref-item, .cv-m9-skill, .cv-m9-banda { break-inside: avoid; }
  .cv-m9-exp-bullets li { break-inside: avoid; }
  .cv-m9-exp-head { break-after: avoid-page; }
}

/* ---- Modelo 10 "Halcyon" ---- */
.cv-m10-page {
  --cv-m10-sage: #e4ede4; --cv-m10-sage-deep: var(--cv-acento); --cv-m10-blush: #f5e2df; --cv-m10-blush-deep: var(--cv-acento-2); --cv-m10-ink: #4a4540;
  font-family: var(--cv-font-cuerpo); color: var(--cv-m10-ink); background: #fbf9f6; padding: 8mm;
}
.cv-m10-flow { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 5mm; }
.cv-m10-flow-inject { display: contents; }
.cv-m10-card { background: #fff; border-radius: 6mm; padding: 6mm; box-shadow: 0 3mm 6mm -2mm rgba(120, 110, 100, 0.18); }
.cv-m10-card-header { flex: 1 1 100%; display: flex; align-items: center; gap: 6mm; background: var(--cv-m10-sage); border-radius: 10mm; }
.cv-m10-fotowrap { flex: none; width: calc(26mm * var(--cv-escala-foto, 1)); height: calc(26mm * var(--cv-escala-foto, 1)); border-radius: 50%; border: 2px solid var(--cv-m10-sage-deep); padding: 1.5mm; }
.cv-m10-foto { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; background: #eee; }
.cv-m10-nombretitulo { font-family: var(--cv-font-titulos); font-weight: 700; font-size: 22pt; margin: 0; color: var(--cv-m10-ink); }
.cv-m10-apellido { color: var(--cv-m10-blush-deep); }
.cv-m10-puesto { font-size: 10.5pt; font-weight: 600; color: var(--cv-m10-sage-deep); margin-top: 1mm; }
.cv-m10-subtitulo { font-size: 9pt; opacity: 0.8; margin-top: 0.5mm; }
.cv-m10-tituloseccion { font-family: var(--cv-font-titulos); font-size: 11pt; font-weight: 700; color: var(--cv-m10-sage-deep); margin: 0 0 3mm; }
.cv-m10-card-contacto, .cv-m10-card-habilidades, .cv-m10-card-blandas, .cv-m10-card-idiomas { flex: 1 1 78mm; }
.cv-m10-card-perfil { flex: 1 1 100%; background: var(--cv-m10-blush); }
.cv-m10-card-perfil .cv-m10-tituloseccion { color: var(--cv-m10-blush-deep); }
.cv-m10-perfil { font-size: 9.5pt; line-height: 1.55; margin: 0; }
.cv-m10-contacto { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2mm; }
.cv-m10-contacto-item { display: flex; align-items: center; gap: 2mm; font-size: 8.5pt; }
.cv-m10-contacto-icono { color: var(--cv-m10-sage-deep); font-size: calc(11pt * var(--cv-escala-iconos, 1)); line-height: 1; }
.cv-m10-habilidades, .cv-m10-blandas { display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m10-pill { display: inline-block; background: var(--cv-m10-sage); color: var(--cv-m10-ink); border-radius: 20mm; padding: 1.5mm 3.5mm; font-size: 8pt; font-weight: 600; }
.cv-m10-card-blandas .cv-m10-pill { background: var(--cv-m10-blush); }
.cv-m10-idioma { display: flex; justify-content: space-between; gap: 2mm; padding: 1.5mm 3mm; border-radius: 20mm; background: var(--cv-m10-sage); font-size: 8.5pt; margin-bottom: 2mm; }
.cv-m10-idioma-nombre { font-weight: 700; }
.cv-m10-idioma-nivel { color: var(--cv-m10-sage-deep); font-weight: 600; }
.cv-m10-card-experiencia { flex: 1 1 100%; border: 1px solid var(--cv-m10-sage); }
.cv-m10-exp-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; flex-wrap: wrap; }
.cv-m10-exp-rol { font-family: var(--cv-font-titulos); font-weight: 700; font-size: 11pt; margin: 0; }
.cv-m10-exp-fecha { font-size: 8pt; font-weight: 600; color: var(--cv-m10-blush-deep); background: var(--cv-m10-blush); border-radius: 20mm; padding: 0.8mm 3mm; white-space: nowrap; }
.cv-m10-exp-empresa { font-size: 9pt; font-weight: 600; color: var(--cv-m10-sage-deep); margin-bottom: 1.5mm; }
.cv-m10-exp-desc { font-size: 9pt; line-height: 1.5; margin-bottom: 1.5mm; }
.cv-m10-exp-bullets { margin: 1.5mm 0; padding-left: 4.5mm; font-size: 9pt; line-height: 1.45; }
.cv-m10-exp-tools { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-top: 2mm; }
.cv-m10-tool { font-size: 7.5pt; font-weight: 600; background: var(--cv-m10-sage); border-radius: 20mm; padding: 0.8mm 2.5mm; }
.cv-m10-card-educacion, .cv-m10-card-certificaciones, .cv-m10-card-logros { flex: 1 1 78mm; }
.cv-m10-edu-item, .cv-m10-cert-item { margin-bottom: 3mm; padding-bottom: 3mm; border-bottom: 1px dashed var(--cv-m10-sage); }
.cv-m10-edu-item:last-child, .cv-m10-cert-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.cv-m10-edu-head { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 2mm; }
.cv-m10-edu-institucion { font-weight: 700; font-size: 9.5pt; margin: 0; }
.cv-m10-edu-fecha { font-size: 8pt; color: var(--cv-m10-sage-deep); font-weight: 600; }
.cv-m10-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 8.5pt; }
.cv-m10-cert-titulo { font-weight: 700; font-size: 9.5pt; }
.cv-m10-cert-sub { font-size: 8.5pt; opacity: 0.8; }
.cv-m10-logros { margin: 0; padding-left: 4mm; font-size: 9pt; line-height: 1.55; }
.cv-m10-card-referencia { flex: 1 1 78mm; background: var(--cv-m10-blush); }
.cv-m10-ref-nombre { font-weight: 700; font-size: 9.5pt; }
.cv-m10-ref-detalle { font-size: 8.5pt; opacity: 0.8; }
@media print {
  /* .cv-m10-card es la envoltura de CADA sección completa (todas las
     certificaciones/educación juntas) y .cv-m10-card-experiencia puede
     ser alto con varios bullets — ninguno lleva "avoid", ver el
     comentario largo del primer @media print. */
  .cv-m10-edu-item, .cv-m10-cert-item, .cv-m10-card-referencia { break-inside: avoid; }
  .cv-m10-exp-bullets li { break-inside: avoid; }
  .cv-m10-exp-head { break-after: avoid-page; }
}

/* ---- Modelo 11 "Vertex" ---- */
.cv-m11-page { font-family: var(--cv-font-cuerpo); color: #cfe3f2; background: #0b1524; padding-bottom: 10mm; }
.cv-m11-header { position: relative; display: flex; align-items: center; gap: 7mm; padding: 12mm 12mm 8mm; overflow: hidden; }
.cv-m11-crosshatch {
  position: absolute; inset: 0; z-index: 0; opacity: 0.10;
  background:
    repeating-linear-gradient(45deg, var(--cv-acento) 0, var(--cv-acento) 0.3mm, transparent 0.3mm, transparent 6mm),
    repeating-linear-gradient(-45deg, var(--cv-acento) 0, var(--cv-acento) 0.3mm, transparent 0.3mm, transparent 6mm);
}
.cv-m11-foto-wrap { position: relative; z-index: 1; flex: 0 0 auto; }
.cv-m11-foto {
  width: calc(34mm * var(--cv-escala-foto, 1)); height: calc(38mm * var(--cv-escala-foto, 1));
  object-fit: cover; background: #17263a;
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  filter: drop-shadow(0 0 3mm color-mix(in srgb, var(--cv-acento) 35%, transparent));
}
.cv-m11-heading { position: relative; z-index: 1; min-width: 0; }
.cv-m11-nombre { font-family: var(--cv-font-titulos); font-weight: 800; font-size: 24pt; color: #f2f8fd; margin: 0; line-height: 1.05; }
.cv-m11-apellido { color: var(--cv-acento); }
.cv-m11-puesto { font-size: 11pt; font-weight: 600; color: var(--cv-acento); margin-top: 1.5mm; letter-spacing: 0.5pt; }
.cv-m11-subtitulo { font-size: 8.5pt; color: #9fb4c8; margin-top: 0.5mm; }
.cv-m11-contacto { display: flex; flex-wrap: wrap; gap: 3.5mm; margin-top: 3mm; font-size: 8pt; color: #cfe3f2; }
.cv-m11-contacto-item { display: inline-flex; align-items: center; gap: 1.2mm; }
.cv-m11-contacto-icono { font-size: calc(9pt * var(--cv-escala-iconos, 1)); color: var(--cv-acento); }
.cv-m11-section { padding: 0 12mm 6mm; }
.cv-m11-h2 { font-family: var(--cv-font-titulos); font-size: 11.5pt; font-weight: 700; color: var(--cv-acento); text-transform: uppercase; letter-spacing: 1pt; margin: 0 0 3.5mm; }
.cv-m11-perfil-texto { font-size: 9.3pt; line-height: 1.6; margin: 0; color: #dbe9f4; }
.cv-m11-hive { display: flex; flex-direction: column; }
.cv-m11-hive-fila { display: flex; }
.cv-m11-hive-fila-offset { margin-left: 11mm; }
/* el "panal" no se superpone de verdad entre filas (margin-top negativo
   original) — con textos largos que envuelven a varias líneas eso hacía
   que una fila tapara el texto de la fila de arriba. En cambio, un
   espacio chico positivo entre filas + celdas que crecen con su propio
   contenido (min-height, no height fijo) evita el choque sea cual sea el
   largo del texto, a costa de perder el encastre geométrico perfecto. */
.cv-m11-hive-fila-solapada { margin-top: 2mm; }
.cv-m11-hex {
  width: 24mm; min-height: 20mm; margin: 0 1.2mm 2mm;
  clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
  background: linear-gradient(150deg, #143351, #0e2338);
  border: 0.25mm solid color-mix(in srgb, var(--cv-acento) 40%, transparent);
  display: flex; align-items: center; justify-content: center;
  text-align: center; flex: 0 0 auto; padding: 3mm 0;
}
.cv-m11-hex-texto { font-size: 7pt; font-weight: 600; color: #cfe3f2; padding: 0 3mm; line-height: 1.2; }
.cv-m11-hive-small .cv-m11-hex { width: 20mm; min-height: 17mm; }
.cv-m11-hive-small .cv-m11-hex .cv-m11-hex-texto { font-size: 6.6pt; }
.cv-m11-grid { display: grid; grid-template-columns: 1.6fr 1fr; gap: 8mm; padding: 0 12mm; align-items: start; }
.cv-m11-job { margin-bottom: 5.5mm; padding-bottom: 4mm; border-bottom: 0.25mm solid color-mix(in srgb, var(--cv-acento) 15%, transparent); }
.cv-m11-job:last-child { border-bottom: none; }
.cv-m11-job-head { display: flex; justify-content: space-between; font-size: 10.3pt; }
.cv-m11-job-rol { font-weight: 700; color: #f2f8fd; }
.cv-m11-job-fecha { font-size: 8pt; color: var(--cv-acento); font-weight: 600; }
.cv-m11-job-empresa { font-size: 9pt; color: #9fb4c8; font-weight: 600; margin-bottom: 1.5mm; }
.cv-m11-job-desc { font-size: 8.8pt; line-height: 1.55; margin: 0 0 2mm; color: #cfe3f2; }
.cv-m11-job-bullets { margin: 0 0 2mm; padding-left: 4.5mm; font-size: 8.5pt; line-height: 1.5; color: #cfe3f2; }
.cv-m11-tools { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m11-tool { font-size: 7.3pt; background: color-mix(in srgb, var(--cv-acento) 10%, transparent); color: var(--cv-acento); border-radius: 0.5mm; padding: 0.6mm 1.8mm; }
.cv-m11-logros-list { list-style: none; margin: 0; padding: 0; }
.cv-m11-logros-list li { font-size: 8.9pt; padding: 1.2mm 0; border-bottom: 0.25mm dashed color-mix(in srgb, var(--cv-acento) 15%, transparent); }
.cv-m11-logros-list li:last-child { border-bottom: none; }
.cv-m11-idioma { display: flex; justify-content: space-between; font-size: 8.7pt; padding: 0.9mm 0; }
.cv-m11-idioma-nivel { color: var(--cv-acento); font-weight: 600; }
.cv-m11-edu, .cv-m11-cert { margin-bottom: 3.5mm; }
.cv-m11-edu-inst, .cv-m11-cert-titulo { font-weight: 700; font-size: 9pt; color: #f2f8fd; }
.cv-m11-edu-fecha { font-size: 7.8pt; color: var(--cv-acento); margin-bottom: 1mm; }
.cv-m11-edu-bullets { margin: 0.5mm 0 0; padding-left: 4mm; font-size: 8.2pt; }
.cv-m11-cert-sub { display: block; font-size: 8pt; color: #9fb4c8; }
.cv-m11-referencia { font-size: 8.7pt; margin-bottom: 3mm; display: flex; flex-direction: column; }
.cv-m11-ref-nombre { font-weight: 700; color: #f2f8fd; }
.cv-m11-ref-rol { color: var(--cv-acento); font-size: 8pt; }
.cv-m11-ref-dato { color: #9fb4c8; font-size: 8pt; }
@media print {
  .cv-m11-edu, .cv-m11-cert, .cv-m11-referencia { break-inside: avoid; }
  .cv-m11-job-bullets li { break-inside: avoid; }
  .cv-m11-job-head { break-after: avoid-page; }
}

/* ---- Modelo 12 "Ledger" ---- */
.cv-m12-page {
  position: relative;
  background-color: #f6f1e3;
  background-image: repeating-linear-gradient(
    to bottom, color-mix(in srgb, var(--cv-acento) 18%, transparent) 0, color-mix(in srgb, var(--cv-acento) 18%, transparent) 0.28mm, transparent 0.28mm, transparent 6mm
  );
  color: #1c2a22;
  font-family: var(--cv-font-cuerpo);
  padding: 14mm 14mm 16mm;
}
.cv-m12-header { display: flex; align-items: flex-start; gap: 7mm; margin-bottom: 6mm; }
.cv-m12-folio { font-family: "Courier New", Consolas, monospace; font-size: 7.6pt; letter-spacing: .12em; color: #4f6a5a; margin-bottom: 2mm; }
.cv-m12-nombre { font-family: var(--cv-font-titulos); font-size: 23pt; font-weight: 700; color: var(--cv-acento); margin: 0; line-height: 1.05; }
.cv-m12-puesto { font-size: 11pt; font-weight: 600; color: var(--cv-acento); margin-top: 1.4mm; }
.cv-m12-subtitulo { font-size: 9.4pt; color: #4f6a5a; margin-top: 0.6mm; }
.cv-m12-foto-marco { position: relative; flex: 0 0 auto; width: calc(26mm * var(--cv-escala-foto, 1)); height: calc(26mm * var(--cv-escala-foto, 1)); }
.cv-m12-foto { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 0; }
.cv-m12-tick { position: absolute; width: 4mm; height: 4mm; }
.cv-m12-tick-tl { top: -1.6mm; left: -1.6mm; border-top: 0.5mm solid var(--cv-acento); border-left: 0.5mm solid var(--cv-acento); }
.cv-m12-tick-tr { top: -1.6mm; right: -1.6mm; border-top: 0.5mm solid var(--cv-acento); border-right: 0.5mm solid var(--cv-acento); }
.cv-m12-tick-bl { bottom: -1.6mm; left: -1.6mm; border-bottom: 0.5mm solid var(--cv-acento); border-left: 0.5mm solid var(--cv-acento); }
.cv-m12-tick-br { bottom: -1.6mm; right: -1.6mm; border-bottom: 0.5mm solid var(--cv-acento); border-right: 0.5mm solid var(--cv-acento); }
.cv-m12-contacto { display: flex; flex-wrap: wrap; gap: 0 8mm; margin-bottom: 6mm; padding-bottom: 3mm; border-bottom: 0.5mm solid var(--cv-acento); }
.cv-m12-contacto .cv-m12-linea { flex: 0 0 auto; padding: 0; border: none; }
.cv-m12-titulo {
  font-family: var(--cv-font-titulos); font-size: 10.6pt; font-weight: 700; text-transform: uppercase;
  letter-spacing: .1em; color: var(--cv-acento); margin: 0 0 3mm;
  padding-bottom: 1.2mm; border-bottom: 0.6mm solid var(--cv-acento); box-shadow: 0 1.4mm 0 -1mm color-mix(in srgb, var(--cv-acento) 55%, transparent);
}
.cv-m12-seccion { margin-bottom: 6.5mm; }
.cv-m12-perfil { font-size: 9.6pt; line-height: 1.55; margin: 0; }
.cv-m12-tabla-cab {
  display: grid; grid-template-columns: 24mm 1fr; font-family: "Courier New", Consolas, monospace;
  font-size: 7.6pt; letter-spacing: .06em; text-transform: uppercase; color: #4f6a5a; margin-bottom: 1.5mm;
}
.cv-m12-fila { display: grid; grid-template-columns: 24mm 1fr; gap: 3mm; padding: 3mm 0; border-top: 0.28mm solid color-mix(in srgb, var(--cv-acento) 35%, transparent); }
.cv-m12-fila:first-child { border-top: none; }
.cv-m12-fila-fecha { font-family: "Courier New", Consolas, monospace; font-variant-numeric: tabular-nums; font-size: 8.6pt; font-weight: 700; color: var(--cv-acento); white-space: nowrap; }
.cv-m12-fila-head { display: flex; flex-wrap: wrap; gap: 0 3mm; align-items: baseline; }
.cv-m12-fila-rol { font-weight: 700; font-size: 10pt; color: var(--cv-acento); }
.cv-m12-fila-empresa { font-size: 9pt; color: #4f6a5a; }
.cv-m12-fila-desc { font-size: 9pt; line-height: 1.5; margin: 1.6mm 0; }
.cv-m12-fila-bullets { margin: 1.4mm 0 1.4mm 4mm; padding: 0; font-size: 8.8pt; line-height: 1.5; }
.cv-m12-fila-bullets li { margin-bottom: 0.6mm; }
.cv-m12-fila-tools { display: flex; flex-wrap: wrap; gap: 1.4mm; margin-top: 1.6mm; }
.cv-m12-tool { font-family: "Courier New", Consolas, monospace; font-size: 7.4pt; color: var(--cv-acento); border: 0.28mm solid var(--cv-acento); padding: 0.4mm 1.6mm; border-radius: 0; }
.cv-m12-cert { display: flex; gap: 3mm; padding: 2mm 0; border-top: 0.28mm solid color-mix(in srgb, var(--cv-acento) 35%, transparent); }
.cv-m12-cert:first-child { border-top: none; }
.cv-m12-cert-num { font-family: "Courier New", Consolas, monospace; font-size: 8.4pt; font-weight: 700; color: var(--cv-acento); }
.cv-m12-cert-titulo { font-weight: 700; font-size: 9.4pt; color: var(--cv-acento); }
.cv-m12-cert-sub { font-size: 8.6pt; color: #4f6a5a; }
.cv-m12-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; margin-bottom: 6.5mm; }
.cv-m12-sublista { font-size: 8pt; text-transform: uppercase; letter-spacing: .08em; color: #4f6a5a; margin: 3mm 0 1.2mm; }
.cv-m12-linea { display: flex; align-items: baseline; gap: 2mm; padding: 1mm 0; font-size: 9pt; }
.cv-m12-linea-marca { font-family: "Courier New", Consolas, monospace; font-size: 8pt; font-weight: 700; color: var(--cv-acento); flex: 0 0 auto; }
.cv-m12-linea-icono { color: var(--cv-acento); flex: 0 0 auto; font-size: calc(9pt * var(--cv-escala-iconos, 1)); }
.cv-m12-linea-txt { flex: 0 1 auto; }
.cv-m12-leader { flex: 1 1 auto; border-bottom: 0.25mm dotted #4f6a5a; margin: 0 1.6mm; height: 0.5em; }
.cv-m12-linea-val { flex: 0 0 auto; font-family: "Courier New", Consolas, monospace; font-size: 8.4pt; color: #4f6a5a; }
.cv-m12-ref { display: flex; gap: 3mm; padding: 2mm 0; border-top: 0.28mm solid color-mix(in srgb, var(--cv-acento) 35%, transparent); font-size: 9pt; }
.cv-m12-ref:first-child { border-top: none; }
.cv-m12-ref-num { font-family: "Courier New", Consolas, monospace; font-size: 8.4pt; font-weight: 700; color: var(--cv-acento); }
.cv-m12-ref-nombre { font-weight: 700; }
.cv-m12-ref-datos { font-family: "Courier New", Consolas, monospace; font-size: 8pt; color: #4f6a5a; margin-top: 0.5mm; }
@media print {
  /* .cv-m12-fila se reusa tanto para experiencia (puede ser alta) como
     para educación — no lleva "avoid" para ninguna de las dos, ver el
     comentario largo del primer @media print. */
  .cv-m12-cert, .cv-m12-ref { break-inside: avoid; }
  .cv-m12-fila-bullets li { break-inside: avoid; }
  .cv-m12-fila-head { break-after: avoid-page; }
}

/* ---- Modelo 13 "Prism" ---- */
.cv-m13-page { background: #fbfaf8; color: #241b2e; font-family: var(--cv-font-cuerpo); }
.cv-m13-header { display: flex; align-items: center; gap: 8mm; }
.cv-m13-facets { position: relative; flex: 0 0 auto; width: 78mm; height: 58mm; overflow: hidden; display: flex; align-items: center; justify-content: center; }
.cv-m13-facet { position: absolute; inset: 0; }
.cv-m13-facet-a { background: var(--cv-acento); opacity: .82; clip-path: polygon(0 0, 62% 0, 0 78%); }
.cv-m13-facet-b { background: var(--cv-acento-2); opacity: .78; clip-path: polygon(100% 0, 100% 66%, 34% 0); }
.cv-m13-facet-c { background: #f76707; opacity: .55; clip-path: polygon(0 100%, 55% 100%, 100% 42%, 100% 100%); }
.cv-m13-facet-d { background: #ffd43b; opacity: .35; clip-path: polygon(18% 22%, 70% 8%, 84% 60%, 30% 76%); }
.cv-m13-foto-marco { position: relative; z-index: 2; width: calc(32mm * var(--cv-escala-foto, 1)); height: calc(32mm * var(--cv-escala-foto, 1)); }
.cv-m13-foto { width: 100%; height: 100%; object-fit: cover; clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); filter: drop-shadow(0 1mm 2mm rgba(0,0,0,0.2)); }
.cv-m13-heading { flex: 1 1 auto; padding: 4mm 12mm 4mm 0; }
.cv-m13-nombre { font-family: var(--cv-font-titulos); font-size: 25pt; font-weight: 800; margin: 0; line-height: 1.05; color: #241b2e; }
.cv-m13-puesto { font-size: 11.5pt; font-weight: 600; color: var(--cv-acento-2); margin-top: 1.4mm; }
.cv-m13-subtitulo { font-size: 9.4pt; color: #6b6376; margin-top: 0.6mm; }
.cv-m13-contacto { display: flex; flex-wrap: wrap; gap: 1.2mm 4mm; margin-top: 3.4mm; }
.cv-m13-contacto-item { display: inline-flex; align-items: center; gap: 1.2mm; font-size: 8.4pt; color: #4b4356; }
.cv-m13-contacto-icono { color: var(--cv-acento); font-size: calc(9pt * var(--cv-escala-iconos, 1)); }
.cv-m13-body { display: grid; grid-template-columns: 1fr 60mm; gap: 0; padding: 10mm 12mm 14mm; }
.cv-m13-col-main { padding-right: 8mm; }
.cv-m13-col-side { padding-left: 8mm; border-left: 0.3mm solid #e7e2ea; }
.cv-m13-seccion { margin-bottom: 7mm; }
.cv-m13-titulo {
  display: flex; align-items: center; gap: 2.4mm; font-family: var(--cv-font-titulos); font-weight: 700;
  font-size: 11.5pt; text-transform: uppercase; letter-spacing: .05em; color: #241b2e; margin: 0 0 3mm;
}
.cv-m13-titulo::before {
  content: ""; width: 0; height: 0; flex: 0 0 auto;
  border-left: 1.8mm solid transparent; border-right: 1.8mm solid transparent; border-bottom: 3mm solid var(--cv-acento);
}
#cv-m13-perfil { font-size: 9.6pt; line-height: 1.6; margin: 0; }
.cv-m13-job, .cv-m13-edu { margin-bottom: 5mm; padding-left: 3mm; border-left: 0.7mm solid var(--cv-acento); }
.cv-m13-job:nth-child(2n), .cv-m13-edu:nth-child(2n) { border-left-color: var(--cv-acento-2); }
.cv-m13-job:nth-child(3n), .cv-m13-edu:nth-child(3n) { border-left-color: #f76707; }
.cv-m13-job-head, .cv-m13-edu-head { display: flex; justify-content: space-between; gap: 3mm; font-size: 10pt; }
.cv-m13-job-rol, .cv-m13-edu-inst { font-weight: 700; }
.cv-m13-job-fecha, .cv-m13-edu-fecha { font-size: 8.6pt; color: #6b6376; white-space: nowrap; }
.cv-m13-job-empresa { font-size: 9pt; color: var(--cv-acento-2); font-weight: 600; margin-bottom: 0.8mm; }
.cv-m13-job-desc { font-size: 9pt; line-height: 1.5; margin: 1.4mm 0; }
.cv-m13-job-bullets, .cv-m13-edu-bullets { margin: 1.2mm 0 0 4mm; padding: 0; font-size: 8.8pt; line-height: 1.5; }
.cv-m13-job-bullets li, .cv-m13-edu-bullets li { margin-bottom: 0.6mm; }
.cv-m13-job-tools { display: flex; flex-wrap: wrap; gap: 1.4mm; margin-top: 1.6mm; }
.cv-m13-tool { font-size: 7.6pt; background: #f3eef7; color: var(--cv-acento-2); padding: 0.6mm 2mm; border-radius: 3mm; }
.cv-m13-chip { display: inline-block; font-size: 8.2pt; padding: 1mm 2.6mm; margin: 0 1.2mm 1.6mm 0; border-radius: 3mm; background: #fbe8ee; color: #a5265a; }
.cv-m13-chip:nth-of-type(3n+2) { background: #ece6fb; color: #4a2ea6; }
.cv-m13-chip:nth-of-type(3n) { background: #fdece0; color: #b04e0a; }
.cv-m13-chip-soft { background: #f3f1ee; color: #5b5560; }
.cv-m13-idioma { display: flex; justify-content: space-between; font-size: 9pt; padding: 1mm 0; }
.cv-m13-idioma-nivel { color: #6b6376; }
.cv-m13-cert { padding: 1.8mm 0; border-top: 0.28mm solid #e7e2ea; font-size: 8.8pt; }
.cv-m13-cert:first-child { border-top: none; }
.cv-m13-cert-titulo { display: block; font-weight: 700; }
.cv-m13-cert-sub { color: #6b6376; font-size: 8.2pt; }
#cv-m13-logros { margin: 0; padding-left: 4mm; font-size: 8.8pt; line-height: 1.6; }
#cv-m13-logros li { margin-bottom: 1mm; }
.cv-m13-ref { padding: 1.8mm 0; border-top: 0.28mm solid #e7e2ea; font-size: 8.8pt; }
.cv-m13-ref:first-child { border-top: none; }
.cv-m13-ref-nombre { font-weight: 700; }
.cv-m13-ref-rol { color: var(--cv-acento-2); }
.cv-m13-ref-dato { color: #6b6376; font-size: 8.2pt; }
@media print {
  .cv-m13-edu, .cv-m13-cert, .cv-m13-ref { break-inside: avoid; }
  .cv-m13-job-bullets li { break-inside: avoid; }
  .cv-m13-job-head { break-after: avoid-page; }
}

/* ---- Modelo 14 "Circuit" ---- */
.cv-m14-outer { background: #05070a; min-height: 297mm; padding: 9mm; box-sizing: border-box; }
.cv-m14-page {
  background: #0b1114; border-radius: 4mm; overflow: hidden;
  box-shadow: 0 0 0 0.3mm #16323a, 0 4mm 10mm rgba(0,0,0,0.5);
  font-family: var(--cv-font-cuerpo); color: #d7f7fb;
}
.cv-m14-titlebar { display: flex; align-items: center; gap: 2.4mm; padding: 4mm 6mm; background: #0d1a1e; border-bottom: 0.3mm solid #16323a; }
.cv-m14-dot { width: 2.6mm; height: 2.6mm; border-radius: 50%; display: inline-block; }
.cv-m14-dot-r { background: #ff5f56; } .cv-m14-dot-y { background: #ffbd2e; margin-right: 4mm; } .cv-m14-dot-g { background: #27c93f; margin-right: 4mm; }
.cv-m14-avatar { width: 8mm; height: 8mm; border-radius: 1.6mm; overflow: hidden; border: 0.3mm solid var(--cv-acento); flex: 0 0 auto; }
.cv-m14-foto { width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-m14-titlebar-text { display: flex; flex-direction: column; line-height: 1.15; }
.cv-m14-titlebar-nombre { font-weight: 700; font-size: 9.6pt; color: #eafcff; }
.cv-m14-titlebar-puesto { font-size: 7.6pt; color: #6b8b90; }
.cv-m14-body { padding: 7mm 8mm 10mm; }
.cv-m14-subtitulo { font-family: "Consolas", "Courier New", monospace; font-size: 8pt; color: var(--cv-acento); margin-bottom: 5mm; }
.cv-m14-panel { position: relative; border: 0.3mm solid #1c3a3f; border-radius: 2mm; margin: 8mm 0 0; padding: 6mm; background: #0f1a1d; }
.cv-m14-panel:first-of-type { margin-top: 0; }
.cv-m14-panel::before {
  content: attr(data-tab); position: absolute; top: -3.4mm; left: 5mm;
  background: #0b2226; color: var(--cv-acento); border: 0.3mm solid #1c3a3f;
  font-family: "Consolas", "Courier New", monospace; font-size: 6.6pt; letter-spacing: .04em;
  padding: 0.6mm 2.4mm; border-radius: 1mm;
}
.cv-m14-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 6mm; margin-top: 8mm; align-items: stretch; }
.cv-m14-grid2 .cv-m14-panel { margin-top: 0; }
#cv-m14-perfil { font-size: 9.4pt; line-height: 1.6; margin: 0; color: #cdeff2; }
.cv-m14-row { display: flex; align-items: center; gap: 2mm; font-size: 8.8pt; padding: 1mm 0; color: #cdeff2; }
.cv-m14-row-icono { color: var(--cv-acento); font-size: calc(9pt * var(--cv-escala-iconos, 1)); }
.cv-m14-row-txt { flex: 1 1 auto; }
.cv-m14-tag {
  font-family: "Consolas", "Courier New", monospace; font-size: 7.2pt; color: var(--cv-acento);
  border: 0.28mm solid #245a62; background: #0b2226; padding: 0.4mm 1.8mm; border-radius: 1mm; white-space: nowrap;
}
.cv-m14-tag-fecha { color: var(--cv-acento-2); border-color: #4a3a1c; background: #1a1408; }
.cv-m14-job { margin-bottom: 5mm; padding-bottom: 4mm; border-bottom: 0.28mm solid #16323a; }
.cv-m14-job:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; }
.cv-m14-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m14-job-rol { font-weight: 700; font-size: 10pt; color: #eafcff; }
.cv-m14-job-empresa { font-size: 8.8pt; color: #6b8b90; margin: 0.6mm 0 1.4mm; }
.cv-m14-job-desc { font-size: 8.8pt; line-height: 1.55; color: #b9dde1; margin: 0 0 1.6mm; }
.cv-m14-job-bullets { list-style: none; margin: 0 0 1.6mm; padding: 0; font-size: 8.6pt; line-height: 1.55; color: #cdeff2; }
.cv-m14-job-bullets li { position: relative; padding-left: 4mm; margin-bottom: 0.7mm; }
.cv-m14-job-bullets li::before { content: "›"; position: absolute; left: 0; color: var(--cv-acento); font-family: "Consolas", "Courier New", monospace; }
.cv-m14-job-tools { display: flex; flex-wrap: wrap; gap: 1.4mm; }
.cv-m14-cert { display: flex; flex-direction: column; padding: 1.6mm 0; border-bottom: 0.28mm solid #16323a; font-size: 8.8pt; }
.cv-m14-cert:last-child { border-bottom: none; }
.cv-m14-cert-titulo { font-weight: 700; color: #eafcff; }
.cv-m14-cert-sub { color: #6b8b90; font-size: 8pt; }
.cv-m14-chip { display: inline-block; font-size: 8pt; padding: 1mm 2.6mm; margin: 0 1.2mm 1.6mm 0; border-radius: 1mm; background: #0b2226; border: 0.28mm solid #245a62; color: #9fe8ee; }
.cv-m14-chip-soft { border-color: #2a2a45; color: #b7b8e0; background: #101020; }
.cv-m14-panel-sub { font-family: "Consolas", "Courier New", monospace; font-size: 7pt; letter-spacing: .06em; color: #6b8b90; margin: 3mm 0 1.4mm; }
#cv-m14-logros { list-style: none; margin: 0; padding: 0; font-size: 8.8pt; line-height: 1.6; color: #cdeff2; }
#cv-m14-logros li { position: relative; padding-left: 4mm; margin-bottom: 1mm; }
#cv-m14-logros li::before { content: "$"; position: absolute; left: 0; color: var(--cv-acento); font-family: "Consolas", "Courier New", monospace; }
.cv-m14-ref { padding: 1.6mm 0; border-bottom: 0.28mm solid #16323a; font-size: 8.8pt; display: flex; flex-wrap: wrap; gap: 1.6mm 2.4mm; align-items: baseline; }
.cv-m14-ref:last-child { border-bottom: none; }
.cv-m14-ref-nombre { font-weight: 700; color: #eafcff; }
.cv-m14-ref-rol { color: #6b8b90; }
@media print {
  /* .cv-m14-panel envuelve cada sección/pestaña ENTERA (todas las
     experiencias, toda la educación) y .cv-m14-job se reusa para
     experiencia (puede ser alta) y educación — ninguno de los dos lleva
     "avoid", ver el comentario largo del primer @media print. */
  .cv-m14-cert, .cv-m14-ref { break-inside: avoid; }
  .cv-m14-job-bullets li { break-inside: avoid; }
  .cv-m14-job-head { break-after: avoid-page; }
}

/* ---- Modelo 15 "Solstice" ---- */
.cv-m15-page { position: relative; background: #fbf6ee; color: #3a2f28; font-family: var(--cv-font-cuerpo); overflow: hidden; }
.cv-m15-sky {
  position: relative; z-index: 2; text-align: center;
  padding: 11mm 14mm 15mm;
  background: linear-gradient(178deg, #f6b64d 0%, #e37c3f 32%, #c85a4a 55%, #8c4a63 75%, #4c3a5e 100%);
  border-bottom: 0.6mm solid rgba(255,246,230,0.55);
}
.cv-m15-nombre { margin: 0; font-family: var(--cv-font-titulos); font-size: 27pt; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; color: #fff6e8; text-shadow: 0 1.5px 5px rgba(60,20,10,0.35); }
.cv-m15-puesto { margin-top: 2mm; font-size: 11.5pt; font-weight: 600; letter-spacing: 0.03em; color: #ffe9c7; }
.cv-m15-subtitulo { margin-top: 1mm; font-size: 9pt; color: #f4d9b8; }
.cv-m15-photowrap { position: relative; z-index: 3; width: calc(26mm * var(--cv-escala-foto, 1)); margin: calc(-13mm * var(--cv-escala-foto, 1)) auto 5mm; }
.cv-m15-foto { display: block; width: 100%; height: calc(26mm * var(--cv-escala-foto, 1)); border-radius: 50%; object-fit: cover; border: 1mm solid #fbf6ee; box-shadow: 0 0 0 0.5mm var(--cv-acento-2), 0 3px 10px rgba(60,30,10,0.35); }
.cv-m15-contacto { text-align: center; font-size: 8.6pt; color: #5c4b3c; margin: 0 0 6mm; display: flex; justify-content: center; gap: 4mm; flex-wrap: wrap; }
.cv-m15-contacto-item { display: inline-flex; align-items: center; gap: 1.2mm; }
.cv-m15-contacto-icono { color: var(--cv-acento); }
.cv-m15-body { position: relative; padding: 0 0 12mm; }
.cv-m15-body::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image:
    repeating-radial-gradient(circle at 12% 6%, transparent 0 8mm, rgba(74,92,66,0.05) 8mm 8.4mm, transparent 8.4mm 16mm),
    repeating-radial-gradient(circle at 90% 40%, transparent 0 10mm, rgba(74,92,66,0.045) 10mm 10.4mm, transparent 10.4mm 20mm),
    repeating-radial-gradient(circle at 35% 95%, transparent 0 12mm, rgba(74,92,66,0.04) 12mm 12.4mm, transparent 12.4mm 24mm);
}
.cv-m15-inner { position: relative; z-index: 1; padding: 0 14mm; }
.cv-m15-section { margin-bottom: 7mm; }
.cv-m15-h2 { font-family: var(--cv-font-titulos); font-size: 12.5pt; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: var(--cv-acento); margin: 0 0 3.5mm; padding-bottom: 1.5mm; border-bottom: 0.3mm solid #dcc49a; }
.cv-m15-h3 { font-family: var(--cv-font-titulos); font-size: 9pt; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; color: var(--cv-acento-2); margin: 0 0 2mm; }
.cv-m15-perfil { font-size: 9.6pt; line-height: 1.65; margin: 0; color: #3a2f28; }
.cv-m15-strip { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 6mm; padding: 4mm 0; border-top: 0.25mm solid var(--cv-linea, #e4e6ea); border-bottom: 0.25mm solid var(--cv-linea, #e4e6ea); }
.cv-m15-chip { display: inline-block; font-size: 8.2pt; padding: 1mm 2.6mm; margin: 0 1mm 1mm 0; border-radius: 2mm; background: #f0e3cd; color: #6b4a2e; }
.cv-m15-chip-soft { background: #e3ede9; color: var(--cv-acento-2); }
.cv-m15-idioma { display: flex; justify-content: space-between; font-size: 8.6pt; padding: 0.6mm 0; }
.cv-m15-idioma-nivel { color: #8c6a4a; }
.cv-m15-trail { position: relative; padding-left: 6mm; }
.cv-m15-trail::before { content: ""; position: absolute; left: 1.1mm; top: 1mm; bottom: 1mm; width: 0; border-left: 0.3mm dashed #c1a583; }
.cv-m15-job { position: relative; margin-bottom: 6mm; }
.cv-m15-job::before { content: ""; position: absolute; left: -6mm; top: 1mm; width: 2.6mm; height: 2.6mm; background: var(--cv-acento); clip-path: polygon(50% 0, 100% 100%, 0 100%); }
.cv-m15-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; font-size: 10.5pt; }
.cv-m15-job-rol { font-weight: 800; color: #3a2f28; }
.cv-m15-job-fecha { font-size: 8.4pt; color: #8c6a4a; font-style: italic; white-space: nowrap; }
.cv-m15-job-empresa { font-size: 9pt; color: var(--cv-acento-2); font-weight: 600; margin-bottom: 1.2mm; }
.cv-m15-job-desc { font-size: 8.9pt; line-height: 1.55; color: #4a3d33; margin: 0 0 1.8mm; }
.cv-m15-job-bullets { margin: 0 0 1.8mm; padding-left: 4mm; font-size: 8.6pt; color: #4a3d33; }
.cv-m15-job-bullets li { margin-bottom: 0.6mm; }
.cv-m15-job-tools { font-size: 7.8pt; color: #8c6a4a; }
.cv-m15-edu { margin-bottom: 3mm; }
.cv-m15-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m15-edu-inst { font-weight: 700; color: #3a2f28; }
.cv-m15-edu-fecha { font-size: 8.4pt; color: #8c6a4a; font-style: italic; }
.cv-m15-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 8.4pt; color: #4a3d33; }
.cv-m15-cert { font-size: 8.8pt; margin-bottom: 1.4mm; }
.cv-m15-cert-titulo { font-weight: 700; color: #3a2f28; }
.cv-m15-cert-sub { color: #8c6a4a; }
.cv-m15-logros { list-style: none; margin: 0; padding: 0; }
.cv-m15-logros li { position: relative; padding-left: 4.5mm; font-size: 8.8pt; margin-bottom: 1.4mm; color: #4a3d33; }
.cv-m15-logros li::before { content: "▲"; position: absolute; left: 0; top: 0; font-size: 6.5pt; color: var(--cv-acento-2); }
.cv-m15-referencia { font-size: 8.6pt; margin-bottom: 2.6mm; color: #4a3d33; }
.cv-m15-ref-nombre { font-weight: 700; color: #3a2f28; }
.cv-m15-ref-rol { color: #8c6a4a; }
.cv-m15-ref-dato { color: #8c6a4a; }
@media print {
  .cv-m15-edu, .cv-m15-cert, .cv-m15-referencia { break-inside: avoid; }
  .cv-m15-job-bullets li { break-inside: avoid; }
  .cv-m15-job-head { break-after: avoid-page; }
}

/* ---- Modelo 16 "Aperture" ---- */
.cv-m16-page { background: #f7f5f0; color: #141414; font-family: var(--cv-font-cuerpo); }
.cv-m16-header { display: flex; align-items: center; gap: 8mm; padding: 12mm 14mm; background: #0a0a0a; color: #f5f2ea; }
.cv-m16-photoblock { flex-shrink: 0; }
.cv-m16-aperture { position: relative; width: calc(30mm * var(--cv-escala-foto, 1)); height: calc(30mm * var(--cv-escala-foto, 1)); display: flex; align-items: center; justify-content: center; }
.cv-m16-ticks { position: absolute; inset: 0; }
.cv-m16-tick { position: absolute; top: 50%; left: 50%; width: 0.35mm; height: 2.4mm; background: var(--cv-acento); margin: -1.2mm 0 0 -0.175mm; }
.cv-m16-foto {
  width: calc(24mm * var(--cv-escala-foto, 1)); height: calc(24mm * var(--cv-escala-foto, 1)); border-radius: 50%; object-fit: cover;
  box-shadow: 0 0 0 0.8mm #0a0a0a, 0 0 0 1.6mm var(--cv-acento), 0 0 0 2mm #0a0a0a;
}
.cv-m16-heading { flex: 1; }
.cv-m16-nombre { font-family: var(--cv-font-titulos); font-size: 25pt; font-weight: 800; letter-spacing: 0.02em; margin: 0; color: #fff; }
.cv-m16-puesto { font-family: var(--cv-font-cuerpo); font-size: 11pt; color: var(--cv-acento); font-weight: 600; margin-top: 1.5mm; letter-spacing: 0.03em; text-transform: uppercase; }
.cv-m16-subtitulo { font-size: 8.8pt; color: #b8b4a8; margin-top: 1mm; }
.cv-m16-contacto { margin-top: 4mm; font-size: 8.2pt; color: #cfcac0; display: flex; flex-wrap: wrap; gap: 3.5mm; font-family: "Courier New", monospace; }
.cv-m16-filmstrip { height: 4.4mm; margin: 0; background: repeating-linear-gradient(90deg, #111 0 6mm, #2a2a2a 6mm 6.6mm); position: relative; }
.cv-m16-filmstrip::before, .cv-m16-filmstrip::after {
  content: ""; position: absolute; left: 2mm; right: 2mm; height: 1mm;
  background-image: repeating-linear-gradient(90deg, #f7f5f0 0 1.2mm, transparent 1.2mm 4mm);
}
.cv-m16-filmstrip::before { top: 0.4mm; }
.cv-m16-filmstrip::after { bottom: 0.4mm; }
.cv-m16-section { padding: 6mm 14mm 0; }
.cv-m16-h2 { display: flex; align-items: baseline; gap: 2.5mm; font-family: var(--cv-font-titulos); font-size: 12pt; font-weight: 800; letter-spacing: 0.03em; text-transform: uppercase; color: #141414; margin: 0 0 3.5mm; }
.cv-m16-tag { font-family: "Courier New", monospace; font-size: 8pt; font-weight: 700; color: #0a0a0a; background: var(--cv-acento); padding: 0.6mm 1.6mm; border-radius: 1mm; }
.cv-m16-perfil { font-size: 9.5pt; line-height: 1.6; margin: 0; color: #2b2b2b; }
.cv-m16-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; }
.cv-m16-job { margin-bottom: 5.5mm; }
.cv-m16-job-head { display: flex; justify-content: space-between; align-items: baseline; font-size: 10.5pt; }
.cv-m16-job-rol { font-weight: 800; }
.cv-m16-job-fecha { font-family: "Courier New", monospace; font-size: 8.4pt; color: #8a8a8a; }
.cv-m16-job-empresa { font-size: 9pt; color: var(--cv-acento-2); font-weight: 700; margin-bottom: 1.4mm; text-transform: uppercase; letter-spacing: 0.02em; }
.cv-m16-job-desc { font-size: 8.9pt; line-height: 1.55; margin: 0 0 1.8mm; color: #2b2b2b; }
.cv-m16-job-bullets { margin: 0 0 1.8mm; padding-left: 4mm; font-size: 8.6pt; color: #2b2b2b; }
.cv-m16-job-tools { font-family: "Courier New", monospace; font-size: 7.6pt; color: #8a8a8a; }
.cv-m16-edu { margin-bottom: 3mm; }
.cv-m16-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m16-edu-inst { font-weight: 700; color: #141414; }
.cv-m16-edu-fecha { font-family: "Courier New", monospace; font-size: 8.2pt; color: #8a8a8a; }
.cv-m16-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 8.4pt; color: #2b2b2b; }
.cv-m16-cert { font-size: 8.8pt; margin-bottom: 1.4mm; }
.cv-m16-cert-titulo { font-weight: 700; color: #141414; }
.cv-m16-cert-sub { color: #8a8a8a; }
.cv-m16-chip { display: inline-block; font-size: 8.2pt; padding: 1mm 2.6mm; margin: 0 1mm 1mm 0; border: 0.2mm solid #141414; }
.cv-m16-chip-soft { border-color: var(--cv-acento); color: #8a5f16; }
.cv-m16-idioma { display: flex; justify-content: space-between; font-size: 8.8pt; padding: 0.6mm 0; }
.cv-m16-idioma-nivel { color: #8a8a8a; }
.cv-m16-logros { list-style: none; margin: 0; padding: 0; }
.cv-m16-logros li { position: relative; padding-left: 4.5mm; font-size: 8.8pt; margin-bottom: 1.4mm; color: #2b2b2b; }
.cv-m16-logros li::before { content: "◍"; position: absolute; left: 0; top: 0; font-size: 7pt; color: var(--cv-acento); }
.cv-m16-referencia { font-size: 8.6pt; margin-bottom: 2.6mm; color: #2b2b2b; }
.cv-m16-ref-nombre { font-weight: 700; color: #141414; }
.cv-m16-ref-rol { color: #8a8a8a; }
.cv-m16-ref-dato { color: #8a8a8a; }
.cv-m16-page .cv-m16-section:last-of-type { padding-bottom: 12mm; }
@media print {
  .cv-m16-edu, .cv-m16-cert, .cv-m16-referencia { break-inside: avoid; }
  .cv-m16-job-bullets li { break-inside: avoid; }
  .cv-m16-job-head { break-after: avoid-page; }
}

/* ---- Modelo 17 "Lattice" ---- */
.cv-m17-page {
  position: relative;
  background-color: #ffffff;
  background-image:
    repeating-linear-gradient(0deg, color-mix(in srgb, var(--cv-acento-2) 7%, transparent) 0 0.15mm, transparent 0.15mm 6mm),
    repeating-linear-gradient(90deg, color-mix(in srgb, var(--cv-acento-2) 7%, transparent) 0 0.15mm, transparent 0.15mm 6mm);
  color: var(--cv-acento-2);
  font-family: var(--cv-font-cuerpo);
  padding: 14mm 14mm 14mm 26mm;
}
.cv-m17-header { display: flex; align-items: flex-start; gap: 7mm; margin-bottom: 8mm; padding-bottom: 5mm; border-bottom: 0.3mm solid var(--cv-acento-2); }
.cv-m17-photo-ring {
  position: relative; flex-shrink: 0;
  width: calc(24mm * var(--cv-escala-foto, 1)); height: calc(24mm * var(--cv-escala-foto, 1));
  clip-path: polygon(29% 0, 71% 0, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0 71%, 0 29%);
  background: #fff;
}
.cv-m17-photo-ring::after {
  content: ""; position: absolute; inset: 0;
  clip-path: polygon(29% 0, 71% 0, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0 71%, 0 29%);
  border: 0.35mm dashed var(--cv-acento); pointer-events: none;
}
.cv-m17-foto { display: block; width: 100%; height: 100%; object-fit: cover; clip-path: polygon(29% 0, 71% 0, 100% 29%, 100% 71%, 71% 100%, 29% 100%, 0 71%, 0 29%); }
.cv-m17-heading { flex: 1; padding-top: 1mm; }
.cv-m17-kicker { font-family: "Courier New", monospace; font-size: 7.5pt; letter-spacing: 0.18em; text-transform: uppercase; color: var(--cv-acento); margin-bottom: 1.5mm; }
.cv-m17-nombre { margin: 0; font-family: var(--cv-font-titulos); font-size: 23pt; font-weight: 800; letter-spacing: -0.01em; color: var(--cv-acento-2); }
.cv-m17-puesto { font-size: 10.5pt; font-weight: 600; letter-spacing: 0.02em; color: var(--cv-acento); margin-top: 1.5mm; text-transform: uppercase; }
.cv-m17-subtitulo { font-size: 8.6pt; color: #5a6b85; margin-top: 1mm; }
.cv-m17-contacto { margin-top: 3mm; font-size: 8pt; color: #334a6b; display: flex; flex-wrap: wrap; gap: 3.5mm; font-family: "Courier New", monospace; }
.cv-m17-section { position: relative; margin-bottom: 7mm; }
.cv-m17-tag {
  position: absolute; left: -15mm; top: 0.5mm; width: 9mm;
  font-family: "Courier New", monospace; font-size: 8pt; font-weight: 700; color: var(--cv-acento); text-align: right;
}
.cv-m17-tag-line { position: absolute; top: 50%; left: calc(100% + 1mm); width: 3mm; height: 0; border-top: 0.3mm solid var(--cv-acento); }
.cv-m17-h2 { font-family: var(--cv-font-titulos); font-size: 11.5pt; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; color: var(--cv-acento-2); margin: 0 0 3.5mm; }
.cv-m17-perfil { font-size: 9.4pt; line-height: 1.6; margin: 0; color: #233855; }
.cv-m17-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; }
.cv-m17-job { margin-bottom: 5.5mm; }
.cv-m17-job-head { display: flex; justify-content: space-between; align-items: baseline; font-size: 10.5pt; }
.cv-m17-job-rol { font-weight: 800; color: var(--cv-acento-2); letter-spacing: -0.01em; }
.cv-m17-job-fecha { font-family: "Courier New", monospace; font-size: 8.2pt; color: #5a6b85; }
.cv-m17-job-empresa { font-size: 9pt; color: var(--cv-acento); font-weight: 700; margin-bottom: 1.4mm; text-transform: uppercase; letter-spacing: 0.03em; }
.cv-m17-job-desc { font-size: 8.8pt; line-height: 1.55; margin: 0 0 1.8mm; color: #233855; }
.cv-m17-job-bullets { margin: 0 0 1.8mm; padding-left: 4mm; font-size: 8.5pt; color: #233855; }
.cv-m17-job-tools { font-family: "Courier New", monospace; font-size: 7.6pt; color: #5a6b85; }
.cv-m17-edu { margin-bottom: 3mm; }
.cv-m17-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m17-edu-inst { font-weight: 700; color: var(--cv-acento-2); }
.cv-m17-edu-fecha { font-family: "Courier New", monospace; font-size: 8.2pt; color: #5a6b85; }
.cv-m17-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 8.4pt; color: #233855; }
.cv-m17-cert { font-size: 8.8pt; margin-bottom: 1.4mm; }
.cv-m17-cert-titulo { font-weight: 700; color: var(--cv-acento-2); }
.cv-m17-cert-sub { color: #5a6b85; }
.cv-m17-chip { display: inline-block; font-size: 8.2pt; padding: 1mm 2.6mm; margin: 0 1mm 1mm 0; border: 0.2mm solid var(--cv-acento-2); color: var(--cv-acento-2); }
.cv-m17-chip-soft { border-color: var(--cv-acento); color: var(--cv-acento); }
.cv-m17-idioma { display: flex; justify-content: space-between; font-size: 8.8pt; padding: 0.6mm 0; }
.cv-m17-idioma-nivel { color: #5a6b85; }
.cv-m17-logros { list-style: none; margin: 0; padding: 0; }
.cv-m17-logros li { position: relative; padding-left: 4.5mm; font-size: 8.8pt; margin-bottom: 1.4mm; color: #233855; }
.cv-m17-logros li::before { content: ""; position: absolute; left: 0; top: 1.2mm; width: 1.6mm; height: 1.6mm; border: 0.3mm solid var(--cv-acento); }
.cv-m17-referencia { font-size: 8.6pt; margin-bottom: 2.6mm; color: #233855; }
.cv-m17-ref-nombre { font-weight: 700; color: var(--cv-acento-2); }
.cv-m17-ref-rol { color: #5a6b85; }
.cv-m17-ref-dato { color: #5a6b85; }
@media print {
  .cv-m17-edu, .cv-m17-cert, .cv-m17-referencia { break-inside: avoid; }
  .cv-m17-job-bullets li { break-inside: avoid; }
  .cv-m17-job-head { break-after: avoid-page; }
}

/* ---- Modelo 18 "Bloom" ---- */
.cv-m18-page { font-family: var(--cv-font-cuerpo); color: #4a3229; background: #fffaf5; padding: 14mm 16mm 18mm; }
.cv-m18-header { display: flex; align-items: center; gap: 8mm; margin-bottom: 10mm; }
.cv-m18-halo-wrap { position: relative; width: calc(32mm * var(--cv-escala-foto, 1)); height: calc(32mm * var(--cv-escala-foto, 1)); flex: none; display: grid; place-items: center; }
.cv-m18-halo { position: absolute; inset: -6mm; background: linear-gradient(135deg, #ffb199, #ffe0c7 60%, #fff0e6); border-radius: 62% 38% 55% 45% / 45% 40% 60% 55%; opacity: 0.85; z-index: 0; }
.cv-m18-foto { position: relative; z-index: 1; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; border: 3pt solid #fffaf5; box-shadow: 0 2mm 4mm rgba(200, 110, 80, 0.18); }
.cv-m18-heading { flex: 1; min-width: 0; }
.cv-m18-nombre { font-family: var(--cv-font-titulos); font-size: 26pt; font-weight: 700; margin: 0 0 1mm; color: var(--cv-acento); }
.cv-m18-puesto { font-size: 13pt; font-weight: 600; color: var(--cv-acento-2); margin-bottom: 1mm; }
.cv-m18-subtitulo { font-size: 10pt; color: #8a6a5c; margin-bottom: 2mm; }
.cv-m18-contacto { display: flex; flex-wrap: wrap; gap: 3mm; font-size: 9pt; }
.cv-m18-contacto-item { display: inline-flex; align-items: center; gap: 1.2mm; color: #7a5b4d; }
.cv-m18-contacto-icono { font-size: calc(9pt * var(--cv-escala-iconos, 1)); color: #e08a63; }
.cv-m18-section { margin-bottom: 7mm; }
.cv-m18-h2 { position: relative; font-family: var(--cv-font-titulos); font-size: 13pt; font-weight: 700; color: var(--cv-acento); margin: 0 0 4mm 6mm; }
.cv-m18-h2::before, .cv-m18-h2::after { content: ""; position: absolute; left: -6mm; border-radius: 50%; background: #ffb199; }
.cv-m18-h2::before { width: 3mm; height: 3mm; top: 0.5mm; opacity: 0.9; }
.cv-m18-h2::after { width: 2mm; height: 2mm; top: -1mm; left: -4.2mm; background: #f7d9c4; opacity: 0.85; }
.cv-m18-perfil { font-size: 10pt; line-height: 1.55; color: #5c4238; margin: 0; }
.cv-m18-job { background: #fff3ea; border-radius: 4mm; padding: 5mm 6mm; margin-bottom: 4mm; }
.cv-m18-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m18-job-rol { font-weight: 700; font-size: 11pt; color: #4a3229; }
.cv-m18-job-fecha { font-size: 8.5pt; color: #b5806a; white-space: nowrap; }
.cv-m18-job-empresa { font-size: 9.5pt; font-weight: 600; color: var(--cv-acento-2); margin-bottom: 1.5mm; }
.cv-m18-job-desc { font-size: 9.5pt; color: #5c4238; margin: 0 0 2mm; line-height: 1.5; }
.cv-m18-job-bullets { margin: 0 0 2mm; padding-left: 4mm; font-size: 9.5pt; color: #5c4238; line-height: 1.45; }
.cv-m18-job-bullets li { margin-bottom: 0.8mm; }
.cv-m18-tools { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m18-tool { font-size: 8pt; background: #ffe0c7; color: #a3502f; border-radius: 3mm; padding: 0.6mm 2.4mm; }
.cv-m18-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 8mm; }
.cv-m18-col { display: flex; flex-direction: column; }
.cv-m18-edu, .cv-m18-cert { margin-bottom: 3mm; }
.cv-m18-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m18-edu-inst { font-weight: 700; color: #4a3229; }
.cv-m18-edu-fecha { color: #b5806a; font-size: 8.5pt; }
.cv-m18-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 9pt; color: #5c4238; }
.cv-m18-cert-titulo { font-weight: 700; font-size: 9.5pt; color: #4a3229; }
.cv-m18-cert-sub { font-size: 8.5pt; color: #8a6a5c; }
.cv-m18-logros { margin: 0 0 5mm; padding-left: 4mm; font-size: 9.5pt; color: #5c4238; line-height: 1.5; }
.cv-m18-logros li { margin-bottom: 1mm; }
.cv-m18-chips { display: flex; flex-wrap: wrap; gap: 1.8mm; margin-bottom: 5mm; }
.cv-m18-chip { font-size: 8.5pt; background: #ffe0c7; color: #a3502f; border-radius: 4mm; padding: 1mm 3.2mm; }
.cv-m18-chip-soft { background: #fbe4e0; color: #b25a4a; }
.cv-m18-idioma { display: flex; justify-content: space-between; font-size: 9.5pt; margin-bottom: 1.5mm; }
.cv-m18-idioma-nivel { color: #b5806a; }
.cv-m18-referencia { font-size: 9pt; margin-bottom: 3mm; color: #5c4238; }
.cv-m18-ref-nombre { font-weight: 700; color: #4a3229; }
.cv-m18-ref-rol { color: #8a6a5c; }
.cv-m18-ref-dato { color: #b5806a; }
@media print {
  .cv-m18-edu, .cv-m18-cert { break-inside: avoid; }
  .cv-m18-job-bullets li { break-inside: avoid; }
  .cv-m18-job-head { break-after: avoid-page; }
}

/* ---- Modelo 19 "Monolith" ---- */
.cv-m19-page { font-family: var(--cv-font-cuerpo); color: #111; background: #fff; padding: 20mm 18mm 20mm; }
.cv-m19-hero { padding: 18mm 0 20mm; margin-bottom: 10mm; }
.cv-m19-nombre { font-family: var(--cv-font-titulos); font-weight: 200; font-size: 52pt; line-height: 1.02; letter-spacing: -0.01em; margin: 0; color: #0a0a0a; }
.cv-m19-puesto { font-size: 11pt; font-weight: 400; letter-spacing: 0.12em; text-transform: uppercase; color: #6b6b6b; margin-top: 4mm; }
.cv-m19-body { display: grid; grid-template-columns: 46mm 1px 1fr; gap: 0 8mm; align-items: start; }
.cv-m19-rule { background: color-mix(in srgb, var(--cv-acento) 35%, #d8d8d8); width: 1px; height: 100%; align-self: stretch; }
.cv-m19-identity { display: flex; flex-direction: column; gap: 6mm; }
.cv-m19-foto-wrap { width: calc(24mm * var(--cv-escala-foto, 1)); height: calc(24mm * var(--cv-escala-foto, 1)); }
.cv-m19-foto { width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-m19-subtitulo { font-size: 8.5pt; color: #6b6b6b; line-height: 1.4; }
.cv-m19-contacto { display: flex; flex-direction: column; gap: 1mm; font-size: 8.5pt; color: #333; }
.cv-m19-h3 { font-size: 8pt; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: #9a9a9a; margin: 0 0 2.5mm; }
.cv-m19-tag { font-size: 8.5pt; color: #222; margin-bottom: 1mm; }
.cv-m19-idioma { display: flex; justify-content: space-between; font-size: 8.5pt; color: #222; margin-bottom: 1mm; }
.cv-m19-idioma-nivel { color: #8a8a8a; }
.cv-m19-edu { margin-bottom: 3mm; font-size: 8.5pt; }
.cv-m19-edu-inst { font-weight: 600; color: #111; }
.cv-m19-edu-fecha { color: #9a9a9a; font-size: 8pt; }
.cv-m19-edu-bullets { margin: 1mm 0 0; padding-left: 3.5mm; color: #444; }
.cv-m19-cert { font-size: 8.5pt; margin-bottom: 2.5mm; color: #111; }
.cv-m19-cert-sub { color: #8a8a8a; font-size: 8pt; }
.cv-m19-referencia { font-size: 8.5pt; margin-bottom: 3mm; }
.cv-m19-ref-nombre { font-weight: 600; color: #111; }
.cv-m19-ref-rol, .cv-m19-ref-dato { color: #8a8a8a; }
.cv-m19-content { min-width: 0; }
.cv-m19-h2 { font-family: var(--cv-font-titulos); font-size: 10pt; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: #111; border-bottom: 1px solid color-mix(in srgb, var(--cv-acento) 35%, #e2e2e2); padding-bottom: 2mm; margin: 0 0 5mm; }
.cv-m19-content section { margin-bottom: 10mm; }
.cv-m19-content p#cv-m19-perfil { font-size: 10pt; line-height: 1.65; color: #2a2a2a; margin: 0; }
.cv-m19-job { margin-bottom: 6mm; }
.cv-m19-job-head { display: flex; justify-content: space-between; align-items: baseline; }
.cv-m19-job-rol { font-weight: 600; font-size: 11pt; color: #111; }
.cv-m19-job-fecha { font-size: 8.5pt; color: #9a9a9a; }
.cv-m19-job-empresa { font-size: 9.5pt; color: #6b6b6b; margin-bottom: 2mm; }
.cv-m19-job-desc { font-size: 9.5pt; line-height: 1.55; color: #333; margin: 0 0 2mm; }
.cv-m19-job-bullets { margin: 0 0 2mm; padding-left: 4mm; font-size: 9.5pt; color: #333; line-height: 1.5; }
.cv-m19-job-bullets li { margin-bottom: 1mm; }
.cv-m19-tools { font-size: 8pt; color: #9a9a9a; }
.cv-m19-content ul#cv-m19-logros { margin: 0; padding-left: 4mm; font-size: 9.5pt; color: #333; line-height: 1.6; }
@media print {
  /* .cv-m19-aside-block envuelve cada sección lateral ENTERA (toda la
     educación, todas las referencias juntas) — no lleva "avoid", ver el
     comentario largo del primer @media print. */
  .cv-m19-job-bullets li { break-inside: avoid; }
  .cv-m19-job-head { break-after: avoid-page; }
}
@media (max-width: 480px) {
  .cv-m19-body { grid-template-columns: 1fr; }
  .cv-m19-rule { display: none; }
  .cv-m19-nombre { font-size: 34pt; }
}

/* ---- Modelo 20 "Odyssey" ---- */
.cv-m20-page { font-family: var(--cv-font-cuerpo); color: #2e2418; background: #faf3e7; padding: 16mm 16mm 20mm; }
.cv-m20-title-block { text-align: center; margin-bottom: 8mm; }
.cv-m20-nombre { font-family: var(--cv-font-titulos); font-size: 30pt; font-weight: 700; color: var(--cv-acento-2); margin: 0; letter-spacing: 0.01em; }
.cv-m20-puesto { font-size: 11pt; font-style: italic; color: #6b5a44; margin-top: 1.5mm; }
.cv-m20-bio { display: flex; gap: 6mm; align-items: flex-start; background: #f2e6d3; border-radius: 2mm; padding: 6mm 7mm; margin-bottom: 9mm; border: 1px solid #e3d2b3; }
.cv-m20-bio-foto-wrap { flex: none; width: calc(26mm * var(--cv-escala-foto, 1)); height: calc(26mm * var(--cv-escala-foto, 1)); }
.cv-m20-bio-foto { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; border: 2pt solid #faf3e7; }
.cv-m20-bio-text { flex: 1; min-width: 0; }
.cv-m20-bio-label { font-family: var(--cv-font-titulos); font-size: 9pt; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--cv-acento); margin-bottom: 1.5mm; }
.cv-m20-subtitulo { font-size: 9.5pt; color: #6b5a44; margin-bottom: 2mm; }
.cv-m20-perfil { font-size: 10pt; line-height: 1.6; margin: 0 0 3mm; color: #2e2418; }
.cv-m20-contacto { display: flex; flex-wrap: wrap; gap: 3mm; font-size: 8.5pt; color: #6b5a44; }
.cv-m20-contacto-icono { color: var(--cv-acento); margin-right: 1mm; font-size: calc(8.5pt * var(--cv-escala-iconos, 1)); }
.cv-m20-h2 { font-family: var(--cv-font-titulos); font-size: 14pt; font-weight: 700; color: var(--cv-acento-2); border-bottom: 1px solid var(--cv-linea, #d8c9a8); padding-bottom: 2mm; margin: 0 0 5mm; }
.cv-m20-chapters-section { margin-bottom: 9mm; }
.cv-m20-chapters-wrap { position: relative; }
.cv-m20-journey { position: absolute; left: -3mm; top: 2mm; width: 10mm; height: 100%; overflow: visible; z-index: 0; }
.cv-m20-journey-path { fill: none; stroke: var(--cv-acento); stroke-width: 1.6; stroke-linecap: round; opacity: 0.6; }
.cv-m20-chapter { position: relative; padding-left: 10mm; margin-bottom: 8mm; }
.cv-m20-chapter-marker { position: absolute; left: 1.5mm; top: 1mm; width: 4mm; height: 4mm; border-radius: 50%; background: #faf3e7; border: 1.6pt solid var(--cv-acento); z-index: 1; }
.cv-m20-chapter-head { display: flex; align-items: baseline; gap: 3mm; flex-wrap: wrap; margin-bottom: 2mm; }
.cv-m20-chapter-num { font-family: var(--cv-font-titulos); font-size: 20pt; font-weight: 700; color: var(--cv-acento); line-height: 1; }
.cv-m20-chapter-titles { flex: 1; min-width: 0; }
.cv-m20-chapter-empresa { font-family: var(--cv-font-titulos); font-size: 13pt; font-weight: 700; color: var(--cv-acento-2); }
.cv-m20-chapter-rol { font-size: 9.5pt; font-style: italic; color: #6b5a44; }
.cv-m20-chapter-fecha { font-size: 8.5pt; color: var(--cv-acento); white-space: nowrap; }
.cv-m20-chapter-desc { font-size: 9.5pt; line-height: 1.55; color: #3a2f22; margin: 0 0 2mm; }
.cv-m20-chapter-bullets { margin: 0 0 2mm; padding-left: 4mm; font-size: 9.5pt; color: #3a2f22; line-height: 1.5; }
.cv-m20-chapter-bullets li { margin-bottom: 1mm; }
.cv-m20-tools { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m20-tool { font-size: 8pt; background: #ecdcb8; color: #6b5a2f; border-radius: 1mm; padding: 0.6mm 2.2mm; }
.cv-m20-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 8mm; }
.cv-m20-col { display: flex; flex-direction: column; }
.cv-m20-col section { margin-bottom: 7mm; }
.cv-m20-edu, .cv-m20-cert { margin-bottom: 3mm; }
.cv-m20-edu-head { display: flex; justify-content: space-between; font-size: 9.5pt; }
.cv-m20-edu-inst { font-weight: 700; color: var(--cv-acento-2); }
.cv-m20-edu-fecha { color: var(--cv-acento); font-size: 8.5pt; }
.cv-m20-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; font-size: 9pt; color: #3a2f22; }
.cv-m20-cert-titulo { font-weight: 700; font-size: 9.5pt; color: var(--cv-acento-2); }
.cv-m20-cert-sub { font-size: 8.5pt; color: #6b5a44; }
.cv-m20-inline-list { font-size: 9.5pt; color: #3a2f22; margin: 0 0 4mm; line-height: 1.6; }
.cv-m20-idioma { display: flex; justify-content: space-between; font-size: 9.5pt; margin-bottom: 1.5mm; }
.cv-m20-idioma-nivel { color: var(--cv-acento); }
.cv-m20-referencia { font-size: 9pt; margin-bottom: 3mm; color: #3a2f22; }
.cv-m20-ref-nombre { font-weight: 700; color: var(--cv-acento-2); }
.cv-m20-ref-rol { color: #6b5a44; }
.cv-m20-ref-dato { color: var(--cv-acento); }
@media print {
  .cv-m20-bio, .cv-m20-edu, .cv-m20-cert { break-inside: avoid; }
  .cv-m20-chapter-bullets li { break-inside: avoid; }
  .cv-m20-chapter-head { break-after: avoid-page; }
}
@media (max-width: 480px) {
  .cv-m20-bio { flex-direction: column; align-items: center; text-align: center; }
  .cv-m20-grid { grid-template-columns: 1fr; }
  .cv-m20-journey { display: none; }
  .cv-m20-chapter { padding-left: 0; }
  .cv-m20-chapter-marker { display: none; }
}

/* ============================================================
   CARTAS DE PRESENTACIÓN — 6 modelos. Reusan las mismas variables
   --cv-* (tema/colores libres/fuentes) que los 20 CV, así que el
   selector de tema y los colores libres también recolorean la carta.
   ============================================================ */
.cv-carta { padding: 20mm 22mm; box-sizing: border-box; }
.cv-carta p { margin: 0 0 4mm; line-height: 1.55; font-size: 10pt; }
.cv-carta-punto { opacity: 0.5; margin: 0 1.5mm; }

/* ---- Carta 1 — Clásica ---- */
.cv-carta1 { font-family: var(--cv-font-cuerpo); }
.cv-carta1-remitente { margin-bottom: 10mm; }
.cv-carta1-nombre { font-family: var(--cv-font-titulos); font-size: 17pt; margin: 0 0 1mm; color: var(--cv-acento); }
.cv-carta1-puesto { margin: 0 0 2mm; font-size: 10pt; color: var(--cv-tenue); }
.cv-carta1-contacto { margin: 0; font-size: 9pt; color: var(--cv-tenue); }
.cv-carta1-fecha { color: var(--cv-tenue); font-size: 9.5pt; margin-bottom: 6mm; }
.cv-carta1-destinatario { margin-bottom: 6mm; font-size: 10pt; }
.cv-carta1-destinatario span { display: block; }
.cv-carta1-saludo { font-weight: 600; margin-bottom: 4mm; }
.cv-carta1-cuerpo p { text-align: justify; }
.cv-carta1-despedida { margin-top: 6mm; margin-bottom: 10mm; }
.cv-carta1-firma { font-weight: 700; color: var(--cv-acento); margin: 0; }

/* ---- Carta 2 — A juego con el CV: franja lateral + columna carta ---- */
.cv-pagina[data-modelo="carta2"] { display: grid; grid-template-columns: 70mm 1fr; padding: 0; }
.cv-carta2-lateral { background: var(--cv-lateral-fondo); color: var(--cv-lateral-texto); padding: 11mm 8mm; text-align: center; }
.cv-carta2-nombre { font-family: var(--cv-font-titulos); font-size: 14pt; margin: 0 0 3mm; line-height: 1.25; }
.cv-carta2-puesto { font-size: 9pt; opacity: 0.85; margin: 0 0 6mm; }
.cv-carta2-contacto { text-align: left; font-size: 8.3pt; }
.cv-carta2-contacto-fila { display: flex; gap: 2mm; align-items: flex-start; margin-bottom: 2.5mm; }
.cv-carta2-principal { padding: 16mm 14mm; }
.cv-carta2-fecha { color: var(--cv-tenue); font-size: 9.5pt; margin-bottom: 6mm; }
.cv-carta2-destinatario { margin-bottom: 6mm; font-size: 10pt; }
.cv-carta2-destinatario span { display: block; }
.cv-carta2-saludo { font-weight: 600; margin-bottom: 4mm; }
.cv-carta2-cuerpo p { text-align: justify; }
.cv-carta2-despedida { margin-top: 6mm; margin-bottom: 10mm; }
.cv-carta2-firma { font-weight: 700; color: var(--cv-acento); margin: 0; }

/* ---- Carta 3 — Encabezado moderno: banner sólido arriba ---- */
.cv-carta3 { padding: 0; }
.cv-carta3-banner {
  background: linear-gradient(120deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-badge-texto, #fff);
  padding: 16mm 22mm;
}
.cv-carta3-nombre { font-family: var(--cv-font-titulos); font-size: 19pt; margin: 0 0 1mm; }
.cv-carta3-puesto { margin: 0 0 3mm; font-size: 10.5pt; opacity: 0.9; }
.cv-carta3-contacto { margin: 0; font-size: 9pt; opacity: 0.85; }
.cv-carta3-cuerpo-envoltorio { padding: 14mm 22mm; }
.cv-carta3-fecha { color: var(--cv-tenue); font-size: 9.5pt; margin-bottom: 6mm; }
.cv-carta3-destinatario { margin-bottom: 6mm; font-size: 10pt; }
.cv-carta3-destinatario span { display: block; }
.cv-carta3-saludo { font-weight: 600; margin-bottom: 4mm; }
.cv-carta3-cuerpo p { text-align: justify; }
.cv-carta3-despedida { margin-top: 6mm; margin-bottom: 10mm; }
.cv-carta3-firma { font-weight: 700; color: var(--cv-acento); margin: 0; }

/* ---- Carta 4 — Minimalista ---- */
.cv-carta4 { padding: 26mm 24mm; }
.cv-carta4-header { margin-bottom: 12mm; }
.cv-carta4-nombre {
  font-family: var(--cv-font-titulos); font-size: 12pt; font-weight: 700;
  letter-spacing: 0.12em; text-transform: uppercase; margin: 0 0 2mm;
}
.cv-carta4-contacto { font-size: 8.5pt; color: var(--cv-tenue); margin: 0; padding-bottom: 4mm; border-bottom: 0.4mm solid var(--cv-linea); }
.cv-carta4-fecha { color: var(--cv-tenue); font-size: 9pt; margin-bottom: 8mm; }
.cv-carta4-destinatario { margin-bottom: 8mm; font-size: 9.5pt; }
.cv-carta4-destinatario span { display: block; }
.cv-carta4-saludo { margin-bottom: 5mm; }
.cv-carta4-cuerpo p { font-size: 9.5pt; }
.cv-carta4-despedida { margin-top: 8mm; margin-bottom: 12mm; }
.cv-carta4-firma { font-weight: 600; margin: 0; }

/* ---- Carta 5 — Editorial: masthead grande + columna angosta ---- */
.cv-carta5 { padding: 18mm 30mm; }
.cv-carta5-masthead { text-align: center; margin-bottom: 10mm; }
.cv-carta5-nombre { font-family: var(--cv-font-titulos); font-size: 24pt; margin: 0; letter-spacing: 0.02em; }
.cv-carta5-linea { width: 16mm; height: 0.6mm; background: var(--cv-acento); margin: 3mm auto; }
.cv-carta5-puesto { font-size: 10pt; text-transform: uppercase; letter-spacing: 0.08em; color: var(--cv-acento); margin: 0 0 2mm; }
.cv-carta5-contacto { font-size: 8.5pt; color: var(--cv-tenue); margin: 0; }
.cv-carta5-fecha { color: var(--cv-tenue); font-size: 9pt; text-align: center; margin-bottom: 6mm; }
.cv-carta5-destinatario { margin-bottom: 6mm; font-size: 9.5pt; text-align: center; }
.cv-carta5-destinatario span { display: block; }
.cv-carta5-saludo { font-weight: 600; margin-bottom: 4mm; }
.cv-carta5-cuerpo p { text-align: justify; font-size: 9.5pt; }
.cv-carta5-primer-parrafo::first-letter {
  font-family: var(--cv-font-titulos); font-size: 26pt; font-weight: 700;
  color: var(--cv-acento); float: left; line-height: 0.8; margin: 1mm 1.5mm 0 0;
}
.cv-carta5-despedida { margin-top: 6mm; margin-bottom: 10mm; text-align: center; }
.cv-carta5-firma { font-weight: 700; text-align: center; color: var(--cv-acento); margin: 0; }

/* ---- Carta 6 — Ejecutiva: barra oscura de ancho completo ---- */
.cv-carta6 { padding: 0; }
.cv-carta6-barra {
  background: var(--cv-lateral-fondo); color: var(--cv-lateral-texto);
  padding: 14mm 22mm; display: flex; justify-content: space-between; align-items: flex-end; gap: 6mm;
}
.cv-carta6-nombre { font-family: var(--cv-font-titulos); font-size: 17pt; margin: 0 0 1mm; }
.cv-carta6-puesto { margin: 0; font-size: 10pt; opacity: 0.8; }
.cv-carta6-contacto { margin: 0; font-size: 8.5pt; opacity: 0.8; text-align: right; white-space: nowrap; }
.cv-carta6-cuerpo-envoltorio { padding: 14mm 22mm; }
.cv-carta6-fecha { color: var(--cv-tenue); font-size: 9.5pt; margin-bottom: 6mm; }
.cv-carta6-destinatario { margin-bottom: 6mm; font-size: 10pt; }
.cv-carta6-destinatario span { display: block; }
.cv-carta6-saludo { font-weight: 600; margin-bottom: 4mm; }
.cv-carta6-cuerpo p { text-align: justify; }
.cv-carta6-despedida { margin-top: 6mm; margin-bottom: 1mm; }
.cv-carta6-firma { font-weight: 700; color: var(--cv-acento); margin: 0; }
.cv-carta6-firma-cargo { font-size: 9pt; color: var(--cv-tenue); margin: 0 0 10mm; }

/* ============================================================
   MODAL "Plantilla JSON" — pantalla completa, chrome de la app (no se
   imprime, no tiene nada que ver con .cv-pagina).
   ============================================================ */
.modal-fondo {
  position: fixed; inset: 0; z-index: 100;
  background: rgba(6, 8, 10, 0.72); backdrop-filter: blur(2px);
  display: flex; align-items: center; justify-content: center; padding: 24px;
}
.modal-caja {
  position: relative; width: min(720px, 100%); max-height: 88vh;
  background: var(--app-panel); border: 1px solid var(--app-borde); border-radius: 14px;
  padding: 28px 28px 22px; box-shadow: 0 24px 70px rgba(0,0,0,0.55);
  display: flex; flex-direction: column; gap: 12px;
}
.modal-caja h2 { margin: 0; font-size: 1.15rem; color: var(--app-texto); padding-right: 28px; }
.modal-ayuda { margin: 0; font-size: 0.86rem; line-height: 1.55; color: var(--app-tenue); }
.modal-ayuda strong { color: var(--app-texto); }
.modal-cerrar {
  position: absolute; top: 18px; right: 18px; width: 30px; height: 30px;
  border-radius: 8px; border: 1px solid var(--app-borde); background: var(--app-panel-2);
  color: var(--app-tenue); font-size: 0.9rem; cursor: pointer; line-height: 1;
}
.modal-cerrar:hover { color: var(--app-texto); }
#modal-plantilla-json-texto, #modal-vista-ats-texto {
  width: 100%; min-height: 280px; max-height: 42vh; resize: vertical;
  background: #0d0f12; border: 1px solid var(--app-borde); border-radius: 10px;
  color: #cfd3da; font-family: "Courier New", monospace; font-size: 0.78rem; line-height: 1.5;
  padding: 12px; box-sizing: border-box;
}
.modal-acciones { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.modal-copiado { font-size: 0.82rem; color: #45c97a; font-weight: 600; }
.modal-tabs { display: flex; gap: 8px; margin: -2px 0 2px; }
.modal-tab {
  flex: 1; border-radius: 9px; border: 1px solid var(--app-borde); background: var(--app-panel-2);
  color: var(--app-tenue); padding: 8px 10px; font-size: 0.82rem; font-weight: 600; cursor: pointer;
}
.modal-tab.activo { background: linear-gradient(135deg, var(--app-acento), var(--app-acento-oscuro)); color: #06161a; border-color: transparent; }

.modal-caja-ancha { width: min(920px, 100%); }
.galeria-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 10px;
  max-height: 62vh; overflow-y: auto; padding-right: 2px;
}
.galeria-item {
  border: 1.5px solid var(--app-borde); border-radius: 10px; overflow: hidden; cursor: pointer;
  background: var(--app-panel-2); transition: border-color 150ms ease, transform 150ms ease; text-align: left;
}
.galeria-item:hover { border-color: var(--app-acento); transform: translateY(-2px); }
.galeria-item.activo { border-color: var(--app-acento); box-shadow: 0 0 0 2px var(--app-acento); }
.galeria-item img { width: 100%; aspect-ratio: 260 / 356; object-fit: cover; display: block; }
.galeria-item span { display: block; padding: 6px 8px; font-size: 0.74rem; font-weight: 600; color: var(--app-texto); }
.modal-ejemplo { width: 100%; border-radius: 10px; border: 1px solid var(--app-borde); display: block; }
.modal-ejemplo-caption { margin: 0; font-size: 0.78rem; color: var(--app-tenue); text-align: center; }
#modal-importar-json .modal-caja { width: min(620px, 100%); }
.modal-separador { display: flex; align-items: center; gap: 10px; margin: 4px 0; color: var(--app-tenue); font-size: 0.78rem; }
.modal-separador::before, .modal-separador::after { content: ""; flex: 1; height: 1px; background: var(--app-borde); }
#modal-importar-json-pegar-texto {
  width: 100%; min-height: 110px; max-height: 26vh; resize: vertical;
  background: #0d0f12; border: 1px solid var(--app-borde); border-radius: 10px;
  color: #cfd3da; font-family: "Courier New", monospace; font-size: 0.78rem; line-height: 1.5;
  padding: 12px; box-sizing: border-box;
}


/* ---- Modelos 25-28 ---- */
.cv-m25-shell {
  display: grid;
  grid-template-columns: 66mm 1fr;
  min-height: 100%;
  font-family: var(--cv-font-cuerpo);
}
.cv-m25-sidebar {
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 8mm 6mm;
}
.cv-m25-main {
  background: var(--cv-fondo-cuerpo);
  color: var(--cv-texto);
  padding: 8mm 8mm 8mm 7mm;
}
.cv-m25-foto-marco {
  position: relative;
  width: calc(30mm * var(--cv-escala-foto, 1));
  height: calc(30mm * var(--cv-escala-foto, 1));
  margin: 0 auto 6mm;
}
.cv-m25-foto, .cv-m25-foto-placeholder {
  width: 100%; height: 100%;
  border-radius: 50%;
  object-fit: cover;
  border: 3px solid var(--cv-lateral-texto);
  display: flex; align-items: center; justify-content: center;
  font-size: calc(9mm * var(--cv-escala-foto, 1));
  background: rgba(255,255,255,0.15);
}
.cv-m25-foto-badge {
  position: absolute; right: -2px; bottom: -2px;
  width: calc(8mm * var(--cv-escala-foto, 1));
  height: calc(8mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  background: var(--cv-acento);
  color: var(--cv-acento-texto);
  display: flex; align-items: center; justify-content: center;
  font-weight: 700;
  border: 2px solid var(--cv-lateral-fondo);
}
.cv-m25-side-sec { margin-bottom: 6mm; }
.cv-m25-side-titulo {
  font-family: var(--cv-font-titulos);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 10.5px;
  color: var(--cv-lateral-texto);
  border-bottom: 1px solid rgba(255,255,255,0.3);
  padding-bottom: 2mm;
  margin: 0 0 3mm;
}
.cv-m25-contacto-item { display: flex; gap: 2mm; align-items: flex-start; font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 2mm; }
.cv-m25-ico { font-size: calc(12px * var(--cv-escala-iconos, 1)); color: var(--cv-lateral-texto); }
.cv-m25-chips { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m25-chip {
  font-size: 9.5px;
  padding: 1.2mm 2.5mm;
  border-radius: 999px;
  background: rgba(255,255,255,0.16);
  color: var(--cv-lateral-texto);
  border: 1px solid rgba(255,255,255,0.35);
}
.cv-m25-chip-alt { background: rgba(255,255,255,0.08); }
.cv-m25-idioma { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 1.5mm; }
.cv-m25-idioma-nivel { color: var(--cv-lateral-texto); font-weight: 600; }
.cv-m25-cert { font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 2.5mm; display: flex; flex-direction: column; }
.cv-m25-cert strong { color: var(--cv-lateral-texto); }

.cv-m25-header { position: relative; margin-bottom: 6mm; }
.cv-m25-nombre { font-family: var(--cv-font-titulos); font-size: 24px; margin: 0; color: var(--cv-texto); }
.cv-m25-apellido { color: var(--cv-acento); }
.cv-m25-puesto { font-size: 13px; color: var(--cv-acento); font-weight: 600; margin: 1mm 0; }
.cv-m25-subtitulo { font-size: 11px; color: var(--cv-tenue); margin: 0; }
.cv-m25-ekg { width: 100%; height: 10mm; margin-top: 3mm; }
.cv-m25-ekg polyline { fill: none; stroke: var(--cv-acento); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }

.cv-m25-card {
  background: var(--cv-fondo-cuerpo);
  border: 1px solid var(--cv-linea);
  border-left: 4px solid var(--cv-acento);
  border-radius: 10px;
  padding: 5mm 6mm;
  margin-bottom: 5mm;
  box-shadow: 0 1px 3px rgba(0,0,0,0.05);
}
.cv-m25-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--cv-acento);
  margin: 0 0 3mm;
}
.cv-m25-perfil { font-size: 11px; line-height: 1.55; margin: 0; color: var(--cv-texto); }

.cv-m25-job { padding-bottom: 4mm; margin-bottom: 4mm; border-bottom: 1px dashed var(--cv-linea); }
.cv-m25-job:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.cv-m25-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m25-job-rol { font-size: 12.5px; margin: 0; color: var(--cv-texto); }
.cv-m25-job-empresa { font-size: 10.5px; color: var(--cv-acento); font-weight: 600; }
.cv-m25-job-fecha {
  font-size: 9.5px; font-weight: 700; white-space: nowrap;
  color: var(--cv-badge-texto); background: var(--cv-acento-2);
  padding: 1mm 2.5mm; border-radius: 999px;
}
.cv-m25-job-desc { font-size: 10.5px; color: var(--cv-tenue); margin: 2mm 0; line-height: 1.5; }
.cv-m25-job-bullets { margin: 2mm 0 0; padding-left: 4mm; font-size: 10.5px; line-height: 1.5; }
.cv-m25-job-tools { margin-top: 2mm; display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m25-tool-grupo { font-size: 9.5px; color: var(--cv-tenue); }
.cv-m25-tool-grupo strong { color: var(--cv-acento); }

.cv-m25-edu { margin-bottom: 3mm; }
.cv-m25-edu-head { display: flex; justify-content: space-between; font-size: 11px; }
.cv-m25-edu-fecha { color: var(--cv-tenue); font-size: 10px; }
.cv-m25-edu ul { margin: 1mm 0 0; padding-left: 4mm; font-size: 10.5px; }

.cv-m25-logros { margin: 0; padding-left: 4mm; font-size: 10.5px; line-height: 1.6; }

.cv-m25-refs { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m25-ref { display: flex; flex-direction: column; font-size: 10px; gap: 0.5mm; }
.cv-m25-ref strong { font-size: 11px; }
.cv-m25-ref a { color: var(--cv-acento); }

@media print {
  .cv-m25-edu, .cv-m25-cert, .cv-m25-ref { break-inside: avoid; }
  .cv-m25-job-bullets li { break-inside: avoid; }
  .cv-m25-job-head { break-after: avoid-page; }
}

.cv-m26-shell { font-family: var(--cv-font-cuerpo); }
.cv-m26-banner {
  position: relative;
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 8mm;
  overflow: hidden;
}
.cv-m26-stripes {
  position: absolute; left: 0; right: 0; bottom: 0; height: 5mm;
  background: repeating-linear-gradient(
    135deg,
    var(--cv-acento) 0 10mm,
    var(--cv-acento-2) 10mm 20mm
  );
}
.cv-m26-banner-inner { display: flex; align-items: center; gap: 6mm; position: relative; z-index: 1; }
.cv-m26-foto-marco {
  position: relative;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(31mm * var(--cv-escala-foto, 1));
  flex-shrink: 0;
}
.cv-m26-foto, .cv-m26-foto-placeholder {
  width: 100%; height: 100%;
  object-fit: cover;
  clip-path: polygon(50% 0%, 100% 15%, 100% 70%, 50% 100%, 0% 70%, 0% 15%);
  background: linear-gradient(var(--cv-acento), var(--cv-acento-2));
  display: flex; align-items: center; justify-content: center;
  font-size: calc(9mm * var(--cv-escala-foto, 1));
  color: var(--cv-acento-texto);
}
.cv-m26-nombre { font-family: var(--cv-font-titulos); font-size: 26px; text-transform: uppercase; letter-spacing: 0.03em; margin: 0; color: var(--cv-lateral-texto); }
.cv-m26-puesto {
  display: inline-block;
  margin: 1.5mm 0;
  font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  padding: 1mm 3mm;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  border-radius: 3px;
}
.cv-m26-subtitulo { font-size: 10.5px; color: var(--cv-lateral-tenue); margin: 1mm 0 0; }

.cv-m26-body { display: grid; grid-template-columns: 1fr 60mm; }
.cv-m26-main { padding: 6mm 6mm 6mm 8mm; background: var(--cv-fondo-cuerpo); color: var(--cv-texto); }
.cv-m26-side { padding: 6mm; background: var(--cv-lateral-fondo); color: var(--cv-lateral-texto); }

.cv-m26-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 13px; text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--cv-texto);
  margin: 0 0 3mm;
  padding-left: 3mm;
  border-left: 4px solid var(--cv-acento);
}
.cv-m26-sec { margin-bottom: 6mm; }
.cv-m26-perfil { font-size: 11px; line-height: 1.55; margin: 0; }

.cv-m26-timeline { position: relative; padding-left: 5mm; border-left: 2px solid var(--cv-acento); }
.cv-m26-job { position: relative; padding-bottom: 5mm; margin-bottom: 5mm; }
.cv-m26-job:last-child { padding-bottom: 0; margin-bottom: 0; }
.cv-m26-job-marker {
  position: absolute; left: -8.2mm; top: 1mm;
  width: 4.5mm; height: 4.5mm;
  background: var(--cv-acento-2);
  transform: rotate(45deg);
  border: 2px solid var(--cv-fondo-cuerpo);
}
.cv-m26-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m26-job-rol { font-size: 12.5px; margin: 0; text-transform: uppercase; letter-spacing: 0.02em; }
.cv-m26-job-empresa { font-size: 10.5px; color: var(--cv-acento); font-weight: 700; }
.cv-m26-job-fecha {
  font-size: 9.5px; font-weight: 700; white-space: nowrap;
  color: var(--cv-acento-texto); background: var(--cv-acento);
  padding: 1mm 2.5mm; border-radius: 2px;
}
.cv-m26-job-desc { font-size: 10.5px; color: var(--cv-tenue); margin: 2mm 0; line-height: 1.5; }
.cv-m26-job-bullets { margin: 2mm 0 0; padding-left: 4mm; font-size: 10.5px; line-height: 1.5; }
.cv-m26-job-tools { margin-top: 2mm; display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m26-tool-grupo { font-size: 9.5px; color: var(--cv-tenue); }
.cv-m26-tool-grupo strong { color: var(--cv-acento); }

.cv-m26-logros { margin: 0; padding-left: 4mm; font-size: 10.5px; line-height: 1.6; }
.cv-m26-refs { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m26-ref { display: flex; flex-direction: column; font-size: 10px; gap: 0.5mm; }
.cv-m26-ref strong { font-size: 11px; }
.cv-m26-ref a { color: var(--cv-acento); }

.cv-m26-side-titulo {
  font-family: var(--cv-font-titulos);
  text-transform: uppercase; letter-spacing: 0.08em; font-size: 10.5px;
  color: var(--cv-lateral-texto);
  border-bottom: 1px solid rgba(255,255,255,0.3);
  padding-bottom: 2mm; margin: 0 0 3mm;
}
.cv-m26-side-sec { margin-bottom: 6mm; }
.cv-m26-contacto-item { display: flex; gap: 2mm; font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 2mm; }
.cv-m26-ico { font-size: calc(12px * var(--cv-escala-iconos, 1)); color: var(--cv-lateral-texto); }
.cv-m26-badges { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m26-badge {
  font-size: 9.5px; padding: 1.2mm 2.5mm;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  border-radius: 2px; font-weight: 600;
}
.cv-m26-badge-alt { background: rgba(255,255,255,0.14); color: var(--cv-lateral-texto); }
.cv-m26-idioma { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 1.5mm; }
.cv-m26-idioma-nivel { color: var(--cv-lateral-texto); font-weight: 700; }
.cv-m26-edu { font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 3mm; display: flex; flex-direction: column; }
.cv-m26-edu strong { color: var(--cv-lateral-texto); }
.cv-m26-edu-fecha { font-size: 9.5px; }
.cv-m26-edu ul { margin: 1mm 0 0; padding-left: 4mm; }
.cv-m26-cert { font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 2.5mm; display: flex; flex-direction: column; }
.cv-m26-cert strong { color: var(--cv-lateral-texto); }

@media print {
  .cv-m26-edu, .cv-m26-cert, .cv-m26-ref { break-inside: avoid; }
  .cv-m26-job-bullets li { break-inside: avoid; }
  .cv-m26-job-head { break-after: avoid-page; }
}

.cv-m27-shell {
  display: grid;
  grid-template-columns: 70mm 1fr;
  min-height: 100%;
  background: var(--cv-lateral-fondo);
  font-family: var(--cv-font-cuerpo);
}
.cv-m27-cover {
  padding: 10mm 6mm;
  color: var(--cv-lateral-texto);
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  border-right: 1px solid rgba(255,255,255,0.1);
}
.cv-m27-aperture {
  position: relative;
  width: calc(34mm * var(--cv-escala-foto, 1));
  height: calc(34mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  margin-bottom: 6mm;
  box-shadow:
    0 0 0 2px var(--cv-acento),
    0 0 0 5px transparent,
    0 0 0 7px rgba(255,255,255,0.25),
    0 0 0 9px transparent,
    0 0 0 10px rgba(255,255,255,0.12);
}
.cv-m27-foto, .cv-m27-foto-placeholder {
  width: 100%; height: 100%;
  border-radius: 50%;
  object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(10mm * var(--cv-escala-foto, 1));
  background: rgba(255,255,255,0.08);
}
.cv-m27-nombre {
  font-family: var(--cv-font-titulos);
  font-size: 20px;
  line-height: 1.25;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 0;
  color: var(--cv-lateral-texto);
}
.cv-m27-puesto { font-size: 11.5px; color: var(--cv-acento); font-weight: 700; margin: 2mm 0 1mm; letter-spacing: 0.04em; }
.cv-m27-subtitulo { font-size: 10px; color: var(--cv-lateral-tenue); margin: 0 0 5mm; }
.cv-m27-contacto { display: flex; flex-direction: column; gap: 1.8mm; margin-top: 3mm; width: 100%; }
.cv-m27-contacto-item { display: flex; gap: 2mm; align-items: center; justify-content: center; font-size: 9.5px; color: var(--cv-lateral-tenue); }
.cv-m27-ico { font-size: calc(11px * var(--cv-escala-iconos, 1)); color: var(--cv-acento); }
.cv-m27-filmstrip { display: flex; gap: 1.5mm; margin-top: auto; padding-top: 8mm; }
.cv-m27-filmstrip span {
  width: 4mm; height: 4mm;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  opacity: 0.85;
}
.cv-m27-filmstrip span:nth-child(even) { opacity: 0.45; }

.cv-m27-gallery { padding: 10mm 9mm; color: var(--cv-lateral-texto); }
.cv-m27-sec { margin-bottom: 7mm; }
.cv-m27-titulo {
  display: flex; align-items: baseline; gap: 3mm;
  font-family: var(--cv-font-titulos);
  font-size: 13px; text-transform: uppercase; letter-spacing: 0.14em;
  color: var(--cv-lateral-texto);
  margin: 0 0 3.5mm;
  padding-bottom: 2mm;
  border-bottom: 1px solid transparent;
  border-image: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2)) 1;
}
.cv-m27-num { font-size: 10px; color: var(--cv-acento); font-weight: 700; }
.cv-m27-perfil { font-size: 11px; line-height: 1.6; color: var(--cv-lateral-tenue); margin: 0; font-style: italic; }

.cv-m27-job { margin-bottom: 5mm; }
.cv-m27-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m27-job-rol { font-size: 12.5px; margin: 0; color: var(--cv-lateral-texto); }
.cv-m27-job-empresa { font-size: 10.5px; color: var(--cv-acento); }
.cv-m27-job-fecha { font-size: 9.5px; color: var(--cv-lateral-tenue); white-space: nowrap; letter-spacing: 0.04em; }
.cv-m27-job-desc { font-size: 10.5px; color: var(--cv-lateral-tenue); margin: 2mm 0; line-height: 1.5; font-style: italic; }
.cv-m27-job-bullets { margin: 2mm 0 0; padding-left: 4mm; font-size: 10.5px; color: var(--cv-lateral-tenue); line-height: 1.5; }
.cv-m27-job-tools { margin-top: 2mm; display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m27-tool-grupo { font-size: 9.5px; color: var(--cv-lateral-tenue); }
.cv-m27-tool-grupo strong { color: var(--cv-acento); }

.cv-m27-edu { margin-bottom: 3mm; }
.cv-m27-edu-head { display: flex; justify-content: space-between; font-size: 11px; color: var(--cv-lateral-texto); }
.cv-m27-edu-fecha { color: var(--cv-lateral-tenue); font-size: 10px; }
.cv-m27-edu ul { margin: 1mm 0 0; padding-left: 4mm; font-size: 10.5px; color: var(--cv-lateral-tenue); }
.cv-m27-cert { margin-bottom: 2.5mm; display: flex; flex-direction: column; font-size: 10.5px; color: var(--cv-lateral-tenue); }
.cv-m27-cert strong { color: var(--cv-lateral-texto); }

.cv-m27-chips { display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m27-chip {
  font-size: 9.5px; padding: 1.2mm 3mm;
  border: 1px solid var(--cv-acento);
  color: var(--cv-lateral-texto);
  border-radius: 999px;
}
.cv-m27-chip-alt { border-color: var(--cv-acento-2); }
.cv-m27-idioma { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--cv-lateral-tenue); margin-bottom: 1.5mm; max-width: 70mm; }
.cv-m27-idioma-nivel { color: var(--cv-acento); font-weight: 700; }
.cv-m27-logros { margin: 0; padding-left: 4mm; font-size: 10.5px; color: var(--cv-lateral-tenue); line-height: 1.6; }
.cv-m27-refs { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m27-ref { display: flex; flex-direction: column; font-size: 10px; color: var(--cv-lateral-tenue); gap: 0.5mm; }
.cv-m27-ref strong { font-size: 11px; color: var(--cv-lateral-texto); }
.cv-m27-ref a { color: var(--cv-acento); }

@media print {
  .cv-m27-edu, .cv-m27-cert, .cv-m27-ref { break-inside: avoid; }
  .cv-m27-job-bullets li { break-inside: avoid; }
  .cv-m27-job-head { break-after: avoid-page; }
}

.cv-m28-shell {
  font-family: var(--cv-font-cuerpo);
  background: var(--cv-fondo-cuerpo);
  color: var(--cv-texto);
}
.cv-m28-header {
  display: flex; align-items: center; gap: 7mm;
  padding: 9mm 9mm 4mm;
}
.cv-m28-vinilo {
  position: relative;
  width: calc(36mm * var(--cv-escala-foto, 1));
  height: calc(36mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  flex-shrink: 0;
  background: repeating-radial-gradient(circle at center, #16121c 0 2.4mm, #221c2c 2.4mm 4.8mm);
  box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  display: flex; align-items: center; justify-content: center;
}
.cv-m28-foto, .cv-m28-foto-placeholder {
  position: relative;
  width: 82%; height: 82%;
  border-radius: 50%;
  object-fit: cover;
  z-index: 1;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(8mm * var(--cv-escala-foto, 1));
  background: #2a2333;
  color: var(--cv-lateral-texto, #fff);
  border: 2px solid rgba(255,255,255,0.15);
}
.cv-m28-nombre {
  font-family: var(--cv-font-titulos);
  font-size: 28px;
  font-weight: 800;
  font-style: italic;
  letter-spacing: -0.01em;
  margin: 0;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.cv-m28-puesto { font-size: 12.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--cv-acento-2); margin: 1.5mm 0; }
.cv-m28-subtitulo { font-size: 10.5px; color: var(--cv-tenue); margin: 0 0 2mm; }
.cv-m28-contacto { display: flex; flex-wrap: wrap; gap: 3mm; }
.cv-m28-contacto-item { display: flex; gap: 1.5mm; align-items: center; font-size: 9.5px; color: var(--cv-tenue); }
.cv-m28-ico { font-size: calc(11px * var(--cv-escala-iconos, 1)); color: var(--cv-acento); }

.cv-m28-eq {
  display: flex; align-items: flex-end; gap: 1.2mm;
  height: 8mm;
  padding: 0 9mm;
  margin-bottom: 5mm;
}
.cv-m28-eq span {
  flex: 1;
  border-radius: 1px;
  background: linear-gradient(180deg, var(--cv-acento), var(--cv-acento-2));
}
.cv-m28-eq span:nth-child(1) { height: 40%; } .cv-m28-eq span:nth-child(2) { height: 75%; }
.cv-m28-eq span:nth-child(3) { height: 55%; } .cv-m28-eq span:nth-child(4) { height: 100%; }
.cv-m28-eq span:nth-child(5) { height: 30%; } .cv-m28-eq span:nth-child(6) { height: 65%; }
.cv-m28-eq span:nth-child(7) { height: 85%; } .cv-m28-eq span:nth-child(8) { height: 45%; }
.cv-m28-eq span:nth-child(9) { height: 70%; } .cv-m28-eq span:nth-child(10) { height: 35%; }
.cv-m28-eq span:nth-child(11) { height: 90%; } .cv-m28-eq span:nth-child(12) { height: 50%; }

.cv-m28-body { padding: 0 9mm 9mm; }
.cv-m28-sec { margin-bottom: 6mm; }
.cv-m28-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 6mm; }
.cv-m28-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em;
  margin: 0 0 3mm;
  color: var(--cv-texto);
  position: relative;
  padding-bottom: 2mm;
}
.cv-m28-titulo::after {
  content: "";
  position: absolute; left: 0; bottom: 0;
  width: 14mm; height: 2px;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  border-radius: 2px;
}
.cv-m28-perfil { font-size: 11px; line-height: 1.55; margin: 0; }

.cv-m28-tracklist { list-style: none; margin: 0; padding: 0; counter-reset: none; }
.cv-m28-track { display: flex; gap: 4mm; padding: 3mm 0; border-bottom: 1px solid var(--cv-linea); }
.cv-m28-track:last-child { border-bottom: none; }
.cv-m28-track-num {
  font-family: var(--cv-font-titulos);
  font-size: 14px; font-weight: 800;
  color: var(--cv-acento);
  min-width: 8mm;
}
.cv-m28-track-body { flex: 1; }
.cv-m28-track-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m28-track-title { font-size: 12.5px; margin: 0; font-weight: 700; }
.cv-m28-track-artist { font-size: 10.5px; color: var(--cv-acento-2); font-weight: 600; }
.cv-m28-track-dur {
  font-size: 9.5px; font-weight: 700; white-space: nowrap; font-variant-numeric: tabular-nums;
  color: var(--cv-badge-texto); background: var(--cv-acento-2);
  padding: 1mm 2.5mm; border-radius: 999px;
}
.cv-m28-track-desc { font-size: 10.5px; color: var(--cv-tenue); margin: 2mm 0; line-height: 1.5; }
.cv-m28-track-bullets { margin: 2mm 0 0; padding-left: 4mm; font-size: 10.5px; line-height: 1.5; }
.cv-m28-job-tools { margin-top: 2mm; display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m28-tool-grupo { font-size: 9.5px; color: var(--cv-tenue); }
.cv-m28-tool-grupo strong { color: var(--cv-acento); }

.cv-m28-edu { margin-bottom: 3mm; }
.cv-m28-edu-head { display: flex; justify-content: space-between; font-size: 11px; }
.cv-m28-edu-fecha { color: var(--cv-tenue); font-size: 10px; }
.cv-m28-edu ul { margin: 1mm 0 0; padding-left: 4mm; font-size: 10.5px; }
.cv-m28-cert { margin-bottom: 2.5mm; display: flex; flex-direction: column; font-size: 10.5px; }
.cv-m28-cert strong { font-size: 11px; }

.cv-m28-chips { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m28-chip {
  font-size: 9.5px; padding: 1.2mm 2.8mm; border-radius: 999px;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  font-weight: 600;
}
.cv-m28-chip-alt { background: none; border: 1px solid var(--cv-acento-2); color: var(--cv-texto); }
.cv-m28-idioma { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--cv-tenue); margin-bottom: 1.5mm; }
.cv-m28-idioma-nivel { color: var(--cv-acento); font-weight: 700; }
.cv-m28-logros { margin: 0; padding-left: 4mm; font-size: 10.5px; line-height: 1.6; }
.cv-m28-refs { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m28-ref { display: flex; flex-direction: column; font-size: 10px; gap: 0.5mm; }
.cv-m28-ref strong { font-size: 11px; }
.cv-m28-ref a { color: var(--cv-acento); }

@media print {
  .cv-m28-edu, .cv-m28-cert, .cv-m28-ref { break-inside: avoid; }
  .cv-m28-track-bullets li { break-inside: avoid; }
  .cv-m28-track-head { break-after: avoid-page; }
}

/* ---- Modelos 29-32 ---- */
.cv-pagina[data-modelo="modelo29"]{
  font-family: var(--cv-font-cuerpo);
  color: var(--cv-texto);
  background: var(--cv-fondo-cuerpo);
}

.cv-m29-banner{
  position: relative;
  background: linear-gradient(120deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  padding: 12mm 14mm 16mm;
  clip-path: polygon(0 0, 100% 0, 100% 88%, 0 100%);
  display: flex;
  align-items: center;
  gap: 8mm;
}
.cv-m29-foto-marco{
  width: calc(34mm * var(--cv-escala-foto, 1));
  height: calc(34mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  border: 3mm solid rgba(255,255,255,.35);
  overflow: hidden;
  flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,.15);
  font-size: 16mm;
}
.cv-m29-foto{ width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-m29-nombre{ font-family: var(--cv-font-titulos); font-weight: 900; font-size: 22pt; text-transform: uppercase; letter-spacing: .03em; margin: 0; line-height: 1.05; }
.cv-m29-apellido{ opacity: .85; }
.cv-m29-puesto{ font-size: 12pt; font-weight: 700; margin: 2mm 0 0; text-transform: uppercase; letter-spacing: .08em; }
.cv-m29-subtitulo{ font-size: 9.5pt; margin: 1.5mm 0 0; opacity: .9; }
.cv-m29-subtitulo[hidden]{ display: none; }

.cv-m29-contacto{
  display: flex; flex-wrap: wrap; gap: 3mm;
  padding: 0 14mm; margin-top: -6mm; position: relative; z-index: 2;
}
.cv-m29-contacto-item{
  background: var(--cv-fondo-cuerpo);
  border: .3mm solid var(--cv-linea);
  border-radius: 20mm;
  padding: 2mm 4mm;
  font-size: calc(8.5pt * var(--cv-escala-iconos, 1));
  color: var(--cv-texto);
  box-shadow: 0 1mm 2mm rgba(0,0,0,.08);
  display: flex; align-items: center; gap: 1.5mm;
}

.cv-m29-cuerpo{ padding: 8mm 14mm 12mm; }
.cv-m29-seccion{ margin-bottom: 7mm; }
.cv-m29-seccion[hidden]{ display: none; }

.cv-m29-titulo{
  position: relative;
  font-family: var(--cv-font-titulos);
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: .05em;
  font-size: 13pt;
  color: var(--cv-texto);
  margin: 0 0 3mm;
  padding-bottom: 2mm;
}
.cv-m29-titulo::after{
  content: "";
  display: block;
  margin-top: 1.5mm;
  height: 2mm;
  width: 26mm;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  clip-path: polygon(0 50%, 8% 0, 16% 100%, 24% 0, 32% 100%, 40% 0, 48% 100%, 56% 0, 64% 100%, 72% 0, 80% 100%, 88% 0, 96% 100%, 100% 50%, 100% 100%, 0 100%);
}

.cv-m29-perfil{ font-size: 9.5pt; line-height: 1.5; color: var(--cv-texto); }

.cv-m29-stats-grid{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 3mm; }
.cv-m29-stat-card{
  background: var(--cv-fondo-cuerpo);
  border-left: 1.2mm solid var(--cv-acento);
  border-radius: 2mm;
  padding: 3mm;
  font-weight: 700;
  font-size: 9.5pt;
  box-shadow: 0 1mm 2mm rgba(0,0,0,.06);
}

.cv-m29-tags{ display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m29-tag{
  background: var(--cv-acento-2);
  color: var(--cv-badge-texto);
  padding: 1.5mm 3.5mm;
  border-radius: 20mm;
  font-size: 8.5pt;
  font-weight: 600;
}

.cv-m29-idiomas{ display: flex; flex-direction: column; gap: 2mm; }
.cv-m29-idioma{ display: flex; justify-content: space-between; border-bottom: .2mm solid var(--cv-linea); padding-bottom: 1.5mm; font-size: 9.5pt; }
.cv-m29-idioma-nivel{ color: var(--cv-tenue); font-weight: 600; }

.cv-m29-logros{ margin: 0; padding-left: 5mm; }
.cv-m29-logros li{ margin-bottom: 1.5mm; font-size: 9.5pt; }
.cv-m29-logros li::marker{ color: var(--cv-acento-2); }

.cv-m29-timeline{ position: relative; padding-left: 6mm; border-left: 1mm solid var(--cv-acento); }
.cv-m29-job{ position: relative; margin-bottom: 6mm; }
.cv-m29-job::before{
  content: "";
  position: absolute; left: -8.3mm; top: 1mm;
  width: 4mm; height: 4mm; border-radius: 50%;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
}
.cv-m29-job-head{ display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 2mm; }
.cv-m29-job-empresa{ font-weight: 800; font-family: var(--cv-font-titulos); color: var(--cv-texto); }
.cv-m29-enlace-empresa{ color: var(--cv-acento); text-decoration: none; }
.cv-m29-job-fecha{ background: var(--cv-acento-2); color: var(--cv-badge-texto); border-radius: 20mm; padding: .8mm 3mm; font-size: 8pt; font-weight: 700; }
.cv-m29-job-rol{ font-weight: 600; color: var(--cv-acento); font-size: 9.5pt; margin-top: .5mm; }
.cv-m29-job-desc{ font-size: 9pt; color: var(--cv-texto); margin: 1.5mm 0; }
.cv-m29-job-bullets{ margin: 1.5mm 0 0; padding-left: 4.5mm; }
.cv-m29-job-bullets li{ font-size: 9pt; margin-bottom: 1mm; }
.cv-m29-tools{ display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m29-tool{ background: var(--cv-fondo-cuerpo); border: .2mm solid var(--cv-linea); border-radius: 1.5mm; padding: 1mm 2mm; font-size: 8pt; }

.cv-m29-edu, .cv-m29-cert, .cv-m29-ref{
  background: var(--cv-fondo-cuerpo);
  border-radius: 2mm;
  border-left: 1mm solid var(--cv-acento-2);
  padding: 3mm;
  margin-bottom: 3mm;
}
.cv-m29-edu-head{ display: flex; justify-content: space-between; font-weight: 700; font-size: 9.5pt; }
.cv-m29-edu-fecha{ color: var(--cv-tenue); font-weight: 600; font-size: 8.5pt; }
.cv-m29-edu-bullets{ margin: 1.5mm 0 0; padding-left: 4.5mm; }
.cv-m29-edu-bullets li{ font-size: 8.5pt; }
.cv-m29-cert-titulo{ font-weight: 700; font-size: 9.5pt; }
.cv-m29-cert-sub{ color: var(--cv-tenue); font-size: 8.5pt; }
.cv-m29-ref-nombre{ font-weight: 700; font-size: 9.5pt; }
.cv-m29-ref-rol{ color: var(--cv-acento); font-size: 8.5pt; font-weight: 600; }
.cv-m29-ref-linea{ font-size: 8.5pt; color: var(--cv-texto); }

@media print{
  .cv-m29-edu, .cv-m29-cert, .cv-m29-ref{ break-inside: avoid; }
  .cv-m29-job-bullets li{ break-inside: avoid; }
  .cv-m29-job-head{ break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo30"]{
  position: relative;
  background: var(--cv-fondo-cuerpo);
  font-family: var(--cv-font-cuerpo);
  color: var(--cv-texto);
  padding: 0 10mm;
}
.cv-pagina[data-modelo="modelo30"]::before,
.cv-pagina[data-modelo="modelo30"]::after{
  content: "";
  position: absolute; top: 0; bottom: 0;
  width: 4mm;
  background: repeating-linear-gradient(90deg, var(--cv-acento) 0, var(--cv-acento) .6mm, transparent .6mm, transparent 1.4mm);
  opacity: .5;
  pointer-events: none;
}
.cv-pagina[data-modelo="modelo30"]::before{ left: 0; }
.cv-pagina[data-modelo="modelo30"]::after{ right: 0; }

.cv-m30-letterhead{ position: relative; text-align: center; padding: 14mm 10mm 6mm; }
.cv-m30-letterhead::before{
  content: "⚖";
  position: absolute; top: 4mm; left: 50%; transform: translateX(-50%);
  font-size: 34mm; opacity: .05; color: var(--cv-acento); pointer-events: none;
}
.cv-m30-foto-marco{
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  margin: 0 auto 4mm;
  border-radius: 2mm;
  border: .6mm solid var(--cv-acento-2);
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  background: var(--cv-acento);
  font-size: 13mm;
  position: relative; z-index: 1;
}
.cv-m30-foto{ width: 100%; height: 100%; object-fit: cover; }
.cv-m30-nombre{ font-family: var(--cv-font-titulos); font-weight: 700; font-size: 20pt; letter-spacing: .06em; text-transform: uppercase; color: var(--cv-acento); margin: 0; position: relative; z-index: 1; }
.cv-m30-puesto{ font-family: var(--cv-font-titulos); font-size: 11pt; color: var(--cv-acento-2); letter-spacing: .12em; text-transform: uppercase; margin: 1.5mm 0 0; font-weight: 600; position: relative; z-index: 1; }
.cv-m30-subtitulo{ font-size: 9.5pt; color: var(--cv-tenue); margin: 1.5mm 0 0; font-style: italic; position: relative; z-index: 1; }
.cv-m30-subtitulo[hidden]{ display: none; }
.cv-m30-regla{ height: .6mm; margin: 5mm auto; width: 60mm; background: linear-gradient(90deg, transparent, var(--cv-acento-2), transparent); }
.cv-m30-contacto{ display: flex; justify-content: center; flex-wrap: wrap; gap: 5mm; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m30-contacto[hidden]{ display: none; }
.cv-m30-contacto-item{ display: flex; align-items: center; gap: 1.5mm; }

.cv-m30-cuerpo{ padding: 2mm 6mm 10mm; counter-reset: articulo; }
.cv-m30-articulo{ counter-increment: articulo; margin-bottom: 7mm; }
.cv-m30-articulo[hidden]{ display: none; }
.cv-m30-titulo{
  font-family: var(--cv-font-titulos);
  font-size: 11.5pt; font-weight: 700; color: var(--cv-acento);
  text-transform: uppercase; letter-spacing: .08em;
  border-bottom: .4mm solid var(--cv-acento-2);
  padding-bottom: 1.5mm; margin: 0 0 3mm;
}
.cv-m30-titulo::before{ content: counter(articulo, upper-roman) ". "; color: var(--cv-acento-2); }

.cv-m30-perfil{ font-size: 9.5pt; line-height: 1.6; text-align: justify; }

.cv-m30-lista-skills{ margin: 0; padding-left: 0; list-style: none; columns: 2; column-gap: 6mm; }
.cv-m30-lista-skills li{ font-size: 9pt; margin-bottom: 1.5mm; padding-left: 3.5mm; position: relative; break-inside: avoid; }
.cv-m30-lista-skills li::before{ content: "§"; position: absolute; left: 0; color: var(--cv-acento-2); font-weight: 700; }

.cv-m30-idioma{ display: flex; align-items: baseline; gap: 2mm; font-size: 9pt; margin-bottom: 1.5mm; }
.cv-m30-idioma-leader{ flex: 1; border-bottom: .2mm dotted var(--cv-tenue); margin-bottom: 1mm; }
.cv-m30-idioma-nivel{ color: var(--cv-acento-2); font-weight: 600; }

.cv-m30-job{ margin-bottom: 5mm; }
.cv-m30-job-head{ display: flex; justify-content: space-between; flex-wrap: wrap; gap: 2mm; align-items: baseline; border-bottom: .2mm dotted var(--cv-linea); padding-bottom: 1mm; }
.cv-m30-job-empresa{ font-weight: 700; font-family: var(--cv-font-titulos); color: var(--cv-texto); }
.cv-m30-enlace-empresa{ color: var(--cv-acento); text-decoration: none; }
.cv-m30-job-fecha{ font-size: 8.5pt; color: var(--cv-tenue); font-style: italic; }
.cv-m30-job-rol{ font-weight: 600; font-size: 9.5pt; color: var(--cv-acento-2); margin-top: 1mm; }
.cv-m30-job-desc{ font-size: 9pt; margin: 1.5mm 0; text-align: justify; }
.cv-m30-job-bullets{ list-style: lower-alpha; margin: 1.5mm 0 0; padding-left: 6mm; }
.cv-m30-job-bullets li{ font-size: 9pt; margin-bottom: 1mm; }
.cv-m30-tools{ margin-top: 2mm; font-size: 8pt; color: var(--cv-tenue); }
.cv-m30-tools strong{ color: var(--cv-texto); }

.cv-m30-edu{ margin-bottom: 3mm; padding-bottom: 2mm; border-bottom: .2mm dotted var(--cv-linea); }
.cv-m30-edu-head{ display: flex; justify-content: space-between; font-weight: 700; font-size: 9.5pt; }
.cv-m30-edu-fecha{ font-size: 8.5pt; color: var(--cv-tenue); font-style: italic; }
.cv-m30-edu-bullets{ list-style: lower-alpha; padding-left: 6mm; margin: 1.5mm 0 0; }
.cv-m30-edu-bullets li{ font-size: 8.5pt; }

.cv-m30-cert{ display: flex; justify-content: space-between; margin-bottom: 2mm; font-size: 9pt; }
.cv-m30-cert-titulo{ font-weight: 700; }
.cv-m30-cert-sub{ color: var(--cv-tenue); }

.cv-m30-logros{ margin: 0; padding-left: 6mm; }
.cv-m30-logros li{ font-size: 9pt; margin-bottom: 1.5mm; }
.cv-m30-logros li::marker{ color: var(--cv-acento-2); font-weight: 700; }

.cv-m30-referencias-grid{ display: grid; grid-template-columns: 1fr 1fr; gap: 4mm; }
.cv-m30-ref{ border-left: .6mm solid var(--cv-acento-2); padding-left: 3mm; }
.cv-m30-ref-nombre{ font-weight: 700; font-size: 9pt; }
.cv-m30-ref-rol{ color: var(--cv-acento); font-size: 8.5pt; }
.cv-m30-ref-linea{ font-size: 8.5pt; color: var(--cv-tenue); }

@media print{
  .cv-m30-edu, .cv-m30-cert, .cv-m30-ref{ break-inside: avoid; }
  .cv-m30-job-bullets li{ break-inside: avoid; }
  .cv-m30-job-head{ break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo31"]{
  display: grid;
  grid-template-columns: 65mm 1fr;
  font-family: var(--cv-font-cuerpo);
  color: var(--cv-texto);
}

.cv-m31-pizarra{
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 10mm 7mm;
  position: relative;
  overflow: hidden;
}
.cv-m31-pizarra::before{
  content: "";
  position: absolute; inset: 0;
  background:
    radial-gradient(circle at 20% 15%, rgba(255,255,255,.08), transparent 35%),
    radial-gradient(circle at 80% 70%, rgba(255,255,255,.06), transparent 40%);
  pointer-events: none;
}
.cv-m31-foto-marco{
  width: calc(30mm * var(--cv-escala-foto, 1));
  height: calc(30mm * var(--cv-escala-foto, 1));
  margin: 0 auto 5mm;
  border-radius: 50%;
  border: .8mm dashed var(--cv-lateral-texto);
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  font-size: 14mm;
  position: relative; z-index: 1;
}
.cv-m31-foto{ width: 100%; height: 100%; object-fit: cover; }
.cv-m31-nombre{ font-family: var(--cv-font-titulos); text-align: center; font-size: 16pt; font-weight: 700; margin: 0 0 2mm; position: relative; z-index: 1; }
.cv-m31-puesto{ text-align: center; font-size: 10pt; font-weight: 600; color: var(--cv-lateral-texto); margin: 0; position: relative; z-index: 1; }
.cv-m31-subtitulo{ text-align: center; font-size: 8.5pt; color: var(--cv-lateral-tenue); margin: 1.5mm 0 0; position: relative; z-index: 1; }
.cv-m31-subtitulo[hidden]{ display: none; }

.cv-m31-pizarra-sec{ margin-top: 7mm; position: relative; z-index: 1; }
.cv-m31-pizarra-sec[hidden]{ display: none; }
.cv-m31-pizarra-titulo{
  font-family: var(--cv-font-titulos);
  font-size: 9.5pt; text-transform: uppercase; letter-spacing: .06em;
  border-bottom: .3mm dashed var(--cv-lateral-tenue);
  padding-bottom: 1.5mm; margin: 0 0 2.5mm;
  display: flex; align-items: center; gap: 1.5mm;
}
.cv-m31-pizarra-titulo::before{ content: "🍎"; font-size: calc(9pt * var(--cv-escala-iconos, 1)); }

.cv-m31-contacto-item{ display: flex; gap: 1.5mm; align-items: center; font-size: 8.3pt; margin-bottom: 1.5mm; color: var(--cv-lateral-texto); }

.cv-m31-chalk-list{ list-style: none; margin: 0; padding: 0; }
.cv-m31-chalk-list li{ font-size: 8.5pt; margin-bottom: 1.5mm; padding-left: 3.5mm; position: relative; }
.cv-m31-chalk-list li::before{ content: "✎"; position: absolute; left: 0; opacity: .8; }

.cv-m31-idioma{ display: flex; justify-content: space-between; font-size: 8.3pt; margin-bottom: 1.2mm; color: var(--cv-lateral-texto); }
.cv-m31-idioma-nivel{ opacity: .75; }

.cv-m31-cert{ margin-bottom: 2mm; font-size: 8.3pt; }
.cv-m31-cert-titulo{ font-weight: 700; }
.cv-m31-cert-sub{ opacity: .75; font-size: 8pt; }

.cv-m31-cuaderno{ background: var(--cv-fondo-cuerpo); padding: 10mm 12mm 10mm 18mm; position: relative; }
.cv-m31-cuaderno::before{
  content: "";
  position: absolute; inset: 0;
  background-image: repeating-linear-gradient(to bottom, transparent 0, transparent 7.9mm, rgba(0,0,0,.06) 7.9mm, rgba(0,0,0,.06) 8.1mm);
  background-position: 0 22mm;
  pointer-events: none;
}
.cv-m31-cuaderno::after{
  content: "";
  position: absolute; top: 0; bottom: 0; left: 14mm;
  width: .3mm; background: var(--cv-acento); opacity: .4;
  pointer-events: none;
}

.cv-m31-leccion{ position: relative; z-index: 1; margin-bottom: 6mm; }
.cv-m31-leccion[hidden]{ display: none; }
.cv-m31-leccion-titulo{
  font-family: var(--cv-font-titulos);
  display: inline-flex; align-items: center; gap: 2mm;
  background: linear-gradient(120deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  padding: 2mm 5mm;
  border-radius: 2mm 2mm 2mm 0;
  font-size: 10.5pt; font-weight: 700;
  margin: 0 0 3mm;
  box-shadow: 0 1mm 2mm rgba(0,0,0,.1);
}
.cv-m31-perfil{ font-size: 9.5pt; line-height: 1.6; }

.cv-m31-job{ border-left: 1mm solid var(--cv-acento-2); padding: 2mm 0 2mm 3mm; margin-bottom: 4mm; }
.cv-m31-job-head{ display: flex; justify-content: space-between; flex-wrap: wrap; gap: 2mm; align-items: baseline; }
.cv-m31-job-empresa{ font-weight: 700; font-family: var(--cv-font-titulos); }
.cv-m31-enlace-empresa{ color: var(--cv-acento); text-decoration: none; }
.cv-m31-job-fecha{ font-size: 8.5pt; color: var(--cv-tenue); background: var(--cv-fondo-cuerpo); padding: .5mm 2mm; border-radius: 10mm; border: .2mm solid var(--cv-linea); }
.cv-m31-job-rol{ font-weight: 600; color: var(--cv-acento-2); font-size: 9.5pt; margin-top: .5mm; }
.cv-m31-job-desc{ font-size: 9pt; margin: 1.5mm 0; }
.cv-m31-job-bullets{ margin: 1.5mm 0 0; padding-left: 4.5mm; }
.cv-m31-job-bullets li{ font-size: 9pt; margin-bottom: 1mm; }
.cv-m31-job-bullets li::marker{ color: var(--cv-acento); }
.cv-m31-tools{ display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m31-tool{ background: rgba(0,0,0,.04); border-radius: 1.5mm; padding: 1mm 2mm; font-size: 8pt; }

.cv-m31-edu{ display: flex; gap: 3mm; margin-bottom: 3mm; align-items: flex-start; }
.cv-m31-edu::before{ content: "📘"; font-size: calc(9pt * var(--cv-escala-iconos, 1)); flex-shrink: 0; }
.cv-m31-edu-body{ flex: 1; }
.cv-m31-edu-head{ display: flex; justify-content: space-between; font-weight: 700; font-size: 9.5pt; }
.cv-m31-edu-fecha{ color: var(--cv-tenue); font-size: 8.5pt; font-weight: 500; }
.cv-m31-edu-bullets{ margin: 1mm 0 0; padding-left: 4.5mm; }
.cv-m31-edu-bullets li{ font-size: 8.5pt; }

.cv-m31-logros{ margin: 0; padding-left: 5mm; }
.cv-m31-logros li{ font-size: 9pt; margin-bottom: 1.5mm; }
.cv-m31-logros li::marker{ color: var(--cv-acento-2); }

.cv-m31-referencias-grid{ display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m31-ref{ background: rgba(0,0,0,.03); border-radius: 2mm; padding: 2.5mm; }
.cv-m31-ref-nombre{ font-weight: 700; font-size: 9pt; }
.cv-m31-ref-rol{ color: var(--cv-acento); font-size: 8.5pt; }
.cv-m31-ref-linea{ font-size: 8.2pt; color: var(--cv-tenue); }

@media print{
  .cv-m31-cert, .cv-m31-ref, .cv-m31-edu{ break-inside: avoid; }
  .cv-m31-job-bullets li{ break-inside: avoid; }
  .cv-m31-job-head{ break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo32"]{
  font-family: var(--cv-font-cuerpo);
  color: var(--cv-texto);
  background: var(--cv-fondo-cuerpo);
}

.cv-m32-banner{
  position: relative;
  overflow: hidden;
  background: linear-gradient(180deg, var(--cv-acento) 0%, var(--cv-acento-2) 100%);
  color: var(--cv-acento-texto);
  padding: 14mm 14mm 20mm;
  display: flex;
  align-items: center;
  gap: 8mm;
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 86%);
}
.cv-m32-compass{
  position: absolute; right: -20mm; top: -20mm;
  width: 80mm; height: 80mm;
  border-radius: 50%;
  border: .5mm solid rgba(255,255,255,.25);
  background: repeating-conic-gradient(rgba(255,255,255,.08) 0deg 2deg, transparent 2deg 15deg);
  opacity: .6;
  pointer-events: none;
}
.cv-m32-foto-marco{
  width: calc(32mm * var(--cv-escala-foto, 1));
  height: calc(32mm * var(--cv-escala-foto, 1));
  flex-shrink: 0;
  border-radius: 50%;
  background: repeating-conic-gradient(rgba(255,255,255,.9) 0deg 1.5deg, rgba(255,255,255,.25) 1.5deg 30deg);
  padding: 2mm;
  display: flex; align-items: center; justify-content: center;
  position: relative; z-index: 1;
}
.cv-m32-foto-inner{
  width: 100%; height: 100%;
  border-radius: 50%;
  overflow: hidden;
  background: rgba(255,255,255,.2);
  display: flex; align-items: center; justify-content: center;
  font-size: 14mm;
}
.cv-m32-foto{ width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-m32-banner-texto{ position: relative; z-index: 1; }
.cv-m32-nombre{ font-family: var(--cv-font-titulos); font-weight: 800; font-size: 21pt; margin: 0; letter-spacing: .02em; }
.cv-m32-puesto{ font-size: 11.5pt; font-weight: 600; margin: 2mm 0 0; text-transform: uppercase; letter-spacing: .1em; opacity: .95; }
.cv-m32-subtitulo{ font-size: 9pt; margin: 1.5mm 0 0; opacity: .85; }
.cv-m32-subtitulo[hidden]{ display: none; }

.cv-m32-cuerpo{
  display: grid;
  grid-template-columns: 1fr 58mm;
  margin-top: -8mm;
  position: relative;
  z-index: 1;
}
.cv-m32-principal{ padding: 6mm 8mm 10mm 14mm; }
.cv-m32-panel{
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 8mm 7mm 10mm;
}

.cv-m32-seccion{ margin-bottom: 6mm; }
.cv-m32-seccion[hidden]{ display: none; }
.cv-m32-titulo{
  font-family: var(--cv-font-titulos);
  font-size: 12pt; font-weight: 700; color: var(--cv-texto);
  margin: 0 0 3mm; padding-bottom: 1.5mm; position: relative;
}
.cv-m32-titulo::after{
  content: "";
  display: block; margin-top: 1.5mm; height: 1mm;
  background: repeating-linear-gradient(90deg, var(--cv-acento) 0 3mm, var(--cv-acento-2) 3mm 6mm);
}
.cv-m32-perfil{ font-size: 9.5pt; line-height: 1.55; }

.cv-m32-panel-sec{ margin-bottom: 6mm; }
.cv-m32-panel-sec[hidden]{ display: none; }
.cv-m32-panel-titulo{
  font-family: var(--cv-font-titulos);
  font-size: 9.5pt; text-transform: uppercase; letter-spacing: .08em;
  border-bottom: .3mm solid var(--cv-lateral-tenue);
  padding-bottom: 1.5mm; margin: 0 0 2.5mm;
}
.cv-m32-contacto-item{ display: flex; gap: 1.5mm; align-items: center; font-size: 8.3pt; margin-bottom: 1.5mm; color: var(--cv-lateral-texto); }

.cv-m32-gauges{ display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m32-gauge{
  background: rgba(255,255,255,.08);
  border: .2mm solid var(--cv-lateral-tenue);
  border-radius: 2mm;
  padding: 1.5mm 3mm;
  font-size: 8pt;
  color: var(--cv-lateral-texto);
}
.cv-m32-tags{ display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m32-tag{ background: var(--cv-acento-2); color: var(--cv-badge-texto); border-radius: 20mm; padding: 1mm 3mm; font-size: 8pt; font-weight: 600; }

.cv-m32-idioma{ display: flex; justify-content: space-between; font-size: 8.3pt; margin-bottom: 1.2mm; color: var(--cv-lateral-texto); }
.cv-m32-idioma-nivel{ opacity: .75; }

.cv-m32-cert{ margin-bottom: 2mm; font-size: 8.3pt; color: var(--cv-lateral-texto); }
.cv-m32-cert-titulo{ font-weight: 700; }
.cv-m32-cert-sub{ opacity: .75; font-size: 8pt; }

.cv-m32-ref{ margin-bottom: 2.5mm; font-size: 8.3pt; color: var(--cv-lateral-texto); }
.cv-m32-ref-nombre{ font-weight: 700; }
.cv-m32-ref-rol{ opacity: .85; }
.cv-m32-ref-linea{ opacity: .7; font-size: 8pt; }

.cv-m32-ruta{ position: relative; padding-left: 7mm; }
.cv-m32-ruta::before{
  content: "";
  position: absolute; left: 2.6mm; top: 2mm; bottom: 2mm; width: 0;
  border-left: .4mm dashed var(--cv-acento);
}
.cv-m32-job{ position: relative; margin-bottom: 6mm; }
.cv-m32-job::before{
  content: "✈";
  position: absolute; left: -7.4mm; top: 0;
  font-size: 8pt; color: var(--cv-acento-2);
  transform: rotate(90deg);
}
.cv-m32-job-head{ display: flex; justify-content: space-between; flex-wrap: wrap; gap: 2mm; align-items: baseline; }
.cv-m32-job-empresa{ font-weight: 700; font-family: var(--cv-font-titulos); color: var(--cv-texto); }
.cv-m32-enlace-empresa{ color: var(--cv-acento); text-decoration: none; }
.cv-m32-job-fecha{ background: var(--cv-acento); color: var(--cv-acento-texto); border-radius: 1.5mm; padding: .6mm 2.5mm; font-size: 8pt; font-weight: 700; }
.cv-m32-job-rol{ font-weight: 600; color: var(--cv-acento-2); font-size: 9.5pt; margin-top: .5mm; }
.cv-m32-job-desc{ font-size: 9pt; margin: 1.5mm 0; }
.cv-m32-job-bullets{ margin: 1.5mm 0 0; padding-left: 4.5mm; }
.cv-m32-job-bullets li{ font-size: 9pt; margin-bottom: 1mm; }
.cv-m32-tools{ display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m32-tool{ background: var(--cv-fondo-cuerpo); border: .2mm solid var(--cv-linea); border-radius: 1.5mm; padding: 1mm 2mm; font-size: 8pt; }

.cv-m32-edu{ margin-bottom: 3mm; padding-bottom: 2mm; border-bottom: .2mm solid var(--cv-linea); }
.cv-m32-edu-head{ display: flex; justify-content: space-between; font-weight: 700; font-size: 9.5pt; }
.cv-m32-edu-fecha{ color: var(--cv-tenue); font-size: 8.5pt; }
.cv-m32-edu-bullets{ margin: 1mm 0 0; padding-left: 4.5mm; }
.cv-m32-edu-bullets li{ font-size: 8.5pt; }

.cv-m32-logros{ margin: 0; padding-left: 5mm; }
.cv-m32-logros li{ font-size: 9pt; margin-bottom: 1.5mm; }
.cv-m32-logros li::marker{ color: var(--cv-acento); }

@media print{
  .cv-m32-edu, .cv-m32-cert, .cv-m32-ref{ break-inside: avoid; }
  .cv-m32-job-bullets li{ break-inside: avoid; }
  .cv-m32-job-head{ break-after: avoid-page; }
}

/* ---- Modelos 33-36 ---- */
.cv-pagina[data-modelo="modelo33"] {
  display: grid;
  grid-template-columns: 65mm 1fr;
  background: var(--cv-fondo-cuerpo);
}

.cv-m33-sidebar {
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 10mm 7mm;
  position: relative;
  border-radius: 0 38% 0 0 / 0 6% 0 0;
}
.cv-m33-sidebar::after {
  content: "";
  position: absolute;
  top: 0; right: -6mm; bottom: 0;
  width: 12mm;
  background: repeating-linear-gradient(180deg,
    transparent 0 6mm,
    color-mix(in srgb, var(--cv-acento-2) 55%, transparent) 6mm 7mm);
  border-radius: 60% 40% 55% 45% / 50% 60% 40% 50%;
  opacity: .55;
  pointer-events: none;
}

.cv-m33-foto-marco {
  width: calc(32mm * var(--cv-escala-foto, 1));
  height: calc(32mm * var(--cv-escala-foto, 1));
  margin: 0 auto 6mm;
  border-radius: 63% 37% 54% 46% / 43% 47% 53% 57%;
  overflow: hidden;
  background: linear-gradient(145deg, var(--cv-acento), var(--cv-acento-2));
  display: flex; align-items: center; justify-content: center;
  border: 2px solid color-mix(in srgb, var(--cv-lateral-texto) 30%, transparent);
}
.cv-m33-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m33-foto-placeholder { font-size: calc(14mm * var(--cv-escala-foto, 1)); color: var(--cv-acento-texto); }

.cv-m33-nombre { font-family: var(--cv-font-titulos); font-size: 15pt; text-align: center; line-height: 1.15; margin: 0; }
.cv-m33-apellido { color: var(--cv-acento-2); }
.cv-m33-puesto { text-align: center; font-weight: 600; margin: 2mm 0 0; color: var(--cv-lateral-texto); }
.cv-m33-subtitulo { text-align: center; font-size: 9pt; color: var(--cv-lateral-tenue); margin: 1mm 0 6mm; }

.cv-m33-side-sec { margin-top: 6mm; }
.cv-m33-side-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 10pt; text-transform: uppercase; letter-spacing: .5px;
  margin: 0 0 3mm; padding-left: 4mm; position: relative;
  color: var(--cv-lateral-texto);
}
.cv-m33-side-titulo::before {
  content: "🌿";
  position: absolute; left: -1mm; top: -1mm; font-size: 9pt;
}

.cv-m33-contacto { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2mm; }
.cv-m33-contacto-item { display: flex; align-items: center; gap: 2mm; font-size: 8.5pt; color: var(--cv-lateral-tenue); }
.cv-m33-contacto-icono { flex: none; color: var(--cv-acento); font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m33-contacto-valor a { color: inherit; }

.cv-m33-pills { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m33-pill {
  font-size: 8pt; padding: 1.3mm 3mm;
  background: linear-gradient(120deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  border-radius: 999px;
}
.cv-m33-pill-alt { background: color-mix(in srgb, var(--cv-lateral-texto) 12%, transparent); color: var(--cv-lateral-texto); }

.cv-m33-idioma { display: flex; justify-content: space-between; font-size: 8.5pt; color: var(--cv-lateral-tenue); margin-bottom: 1.5mm; }
.cv-m33-idioma-nombre { color: var(--cv-lateral-texto); }

.cv-m33-logros { margin: 0; padding-left: 4mm; font-size: 8.5pt; color: var(--cv-lateral-tenue); }
.cv-m33-logros li { margin-bottom: 1.5mm; }

.cv-m33-main { padding: 10mm 9mm 10mm 12mm; }
.cv-m33-seccion { margin-bottom: 7mm; }
.cv-m33-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 12.5pt; color: var(--cv-acento);
  margin: 0 0 4mm; padding-bottom: 1.5mm;
  position: relative;
  border-bottom: 2px solid transparent;
  border-image: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2), transparent) 1;
}
.cv-m33-titulo::before { content: "🍃"; margin-right: 2mm; }

.cv-m33-perfil-texto { color: var(--cv-texto); font-size: 9.5pt; line-height: 1.5; }

.cv-m33-job { margin-bottom: 5mm; padding-left: 4mm; border-left: 2px dashed color-mix(in srgb, var(--cv-acento) 55%, transparent); }
.cv-m33-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; flex-wrap: wrap; }
.cv-m33-job-empresa-wrap { display: flex; flex-direction: column; }
.cv-m33-job-empresa { font-weight: 700; color: var(--cv-texto); }
.cv-m33-job-empresa .cv-ubicacion { color: var(--cv-tenue); font-weight: 400; }
.cv-m33-job-rol { font-size: 9pt; color: var(--cv-acento-2); font-weight: 600; }
.cv-m33-job-fecha {
  font-size: 8pt; padding: 1mm 3mm; border-radius: 999px;
  background: var(--cv-acento-2); color: var(--cv-badge-texto); white-space: nowrap;
}
.cv-m33-job-desc { font-size: 9pt; color: var(--cv-texto); margin: 2mm 0; }
.cv-m33-job-bullets { margin: 2mm 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m33-job-bullets li { margin-bottom: 1mm; }
.cv-m33-job-tools { display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m33-tool { font-size: 8pt; color: var(--cv-tenue); background: color-mix(in srgb, var(--cv-acento) 10%, transparent); padding: 1mm 2.5mm; border-radius: 3mm; }

.cv-m33-edu, .cv-m33-cert { margin-bottom: 4mm; padding: 3mm 4mm; border-radius: 3mm 8mm 3mm 8mm; background: color-mix(in srgb, var(--cv-acento) 7%, transparent); }
.cv-m33-edu-head, .cv-m33-cert { display: flex; justify-content: space-between; gap: 3mm; flex-wrap: wrap; }
.cv-m33-edu-inst, .cv-m33-cert-titulo { font-weight: 700; color: var(--cv-texto); }
.cv-m33-edu-fecha { font-size: 8pt; color: var(--cv-tenue); }
.cv-m33-edu-bullets { margin: 2mm 0 0; padding-left: 4mm; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m33-cert-sub { font-size: 8.5pt; color: var(--cv-tenue); }

.cv-m33-ref { margin-bottom: 3mm; padding-bottom: 3mm; border-bottom: 1px solid var(--cv-linea); display: flex; flex-direction: column; }
.cv-m33-ref-nombre { font-weight: 700; color: var(--cv-texto); }
.cv-m33-ref-rol { font-size: 8.5pt; color: var(--cv-acento-2); }
.cv-m33-ref-dato { font-size: 8pt; color: var(--cv-tenue); }

@media print {
  .cv-m33-edu, .cv-m33-cert, .cv-m33-ref { break-inside: avoid; }
  .cv-m33-job-bullets li { break-inside: avoid; }
  .cv-m33-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo34"] { background: var(--cv-fondo-cuerpo); }

.cv-m34-banner {
  position: relative;
  display: flex; align-items: center; gap: 6mm;
  padding: 10mm 12mm;
  background: linear-gradient(120deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  overflow: hidden;
}
.cv-m34-banner::before, .cv-m34-banner::after {
  content: "";
  position: absolute; border-radius: 50%;
  border: 3px solid color-mix(in srgb, var(--cv-acento-texto) 25%, transparent);
}
.cv-m34-banner::before { width: 40mm; height: 40mm; right: -14mm; top: -18mm; }
.cv-m34-banner::after { width: 24mm; height: 24mm; right: 10mm; bottom: -14mm; border-width: 2px; }

.cv-m34-foto-marco {
  position: relative; z-index: 1;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  flex: none;
  background: var(--cv-fondo-cuerpo);
  padding: 1.5mm;
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--cv-acento-texto) 55%, transparent);
}
.cv-m34-foto { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; display: block; }
.cv-m34-foto-placeholder { width: 100%; height: 100%; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: calc(12mm * var(--cv-escala-foto, 1)); background: color-mix(in srgb, var(--cv-acento) 15%, var(--cv-fondo-cuerpo)); }

.cv-m34-banner-texto { position: relative; z-index: 1; }
.cv-m34-nombre { font-family: var(--cv-font-titulos); font-size: 17pt; margin: 0; }
.cv-m34-apellido { font-weight: 300; opacity: .9; }
.cv-m34-puesto { font-weight: 700; margin: 1.5mm 0 0; text-transform: uppercase; letter-spacing: 1px; font-size: 10pt; }
.cv-m34-subtitulo { font-size: 9pt; opacity: .9; margin: 1mm 0 0; }

.cv-m34-cuerpo { display: grid; grid-template-columns: 62mm 1fr; gap: 8mm; padding: 8mm 12mm; }

.cv-m34-chalk {
  font-family: var(--cv-font-titulos);
  display: inline-block;
  background: color-mix(in srgb, var(--cv-acento) 88%, black 10%);
  color: var(--cv-acento-texto);
  padding: 1.8mm 4mm;
  border-radius: 2mm;
  font-size: 10pt;
  letter-spacing: .5px;
  margin: 0 0 3mm;
  transform: rotate(-0.6deg);
}

.cv-m34-sec { margin-bottom: 6mm; }

.cv-m34-contacto { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2mm; }
.cv-m34-contacto-item { display: flex; gap: 2mm; align-items: center; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m34-contacto-icono { color: var(--cv-acento); flex-shrink: 0; font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m34-contacto-valor a { color: inherit; }

.cv-m34-pills { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m34-pill { font-size: 8pt; padding: 1.3mm 3mm; border-radius: 5mm; background: var(--cv-acento-2); color: var(--cv-badge-texto); }
.cv-m34-pill-alt { background: color-mix(in srgb, var(--cv-acento) 15%, transparent); color: var(--cv-texto); border: 1px solid color-mix(in srgb, var(--cv-acento) 40%, transparent); }

.cv-m34-idioma { display: flex; justify-content: space-between; font-size: 8.5pt; color: var(--cv-texto); margin-bottom: 1.5mm; }
.cv-m34-idioma-nivel { color: var(--cv-tenue); }

.cv-m34-cert { margin-bottom: 3mm; padding: 2.5mm 3mm; border: 1px dashed color-mix(in srgb, var(--cv-acento) 45%, transparent); border-radius: 2mm; }
.cv-m34-cert-titulo { display: block; font-weight: 700; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m34-cert-sub { display: block; font-size: 8pt; color: var(--cv-tenue); }

.cv-m34-ref { margin-bottom: 3mm; padding-bottom: 2.5mm; border-bottom: 1px solid var(--cv-linea); display: flex; flex-direction: column; }
.cv-m34-ref-nombre { font-weight: 700; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m34-ref-rol { font-size: 8pt; color: var(--cv-acento-2); }
.cv-m34-ref-dato { font-size: 7.5pt; color: var(--cv-tenue); }

.cv-m34-perfil-texto { font-size: 9.5pt; line-height: 1.5; color: var(--cv-texto); }

.cv-m34-job { margin-bottom: 5mm; padding: 3mm 4mm; border-radius: 2mm; background: color-mix(in srgb, var(--cv-acento) 6%, transparent); border-left: 3px solid var(--cv-acento-2); }
.cv-m34-job-head { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 2mm; }
.cv-m34-job-empresa { font-weight: 700; color: var(--cv-texto); display: block; }
.cv-m34-job-empresa .cv-ubicacion { color: var(--cv-tenue); font-weight: 400; }
.cv-m34-job-rol { font-size: 8.5pt; color: var(--cv-acento-2); font-weight: 600; }
.cv-m34-job-fecha { font-size: 8pt; color: var(--cv-tenue); white-space: nowrap; }
.cv-m34-job-desc { font-size: 9pt; color: var(--cv-texto); margin: 2mm 0; }
.cv-m34-job-bullets { margin: 2mm 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m34-job-tools { display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m34-tool { font-size: 8pt; color: var(--cv-tenue); background: color-mix(in srgb, var(--cv-acento) 10%, transparent); padding: 1mm 2.5mm; border-radius: 3mm; }

.cv-m34-edu { margin-bottom: 4mm; }
.cv-m34-edu-head { display: flex; justify-content: space-between; gap: 2mm; flex-wrap: wrap; }
.cv-m34-edu-inst { font-weight: 700; color: var(--cv-texto); }
.cv-m34-edu-fecha { font-size: 8pt; color: var(--cv-tenue); }
.cv-m34-edu-bullets { margin: 1.5mm 0 0; padding-left: 4mm; font-size: 8.5pt; color: var(--cv-texto); }

.cv-m34-logros { margin: 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m34-logros li { margin-bottom: 1.5mm; }

@media print {
  .cv-m34-edu, .cv-m34-cert, .cv-m34-ref { break-inside: avoid; }
  .cv-m34-job-bullets li { break-inside: avoid; }
  .cv-m34-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo35"] { background: #0c0c0c; color: var(--cv-texto); }

.cv-m35-header {
  position: relative;
  background: #0c0c0c;
  padding: 14mm 12mm 8mm;
  overflow: hidden;
}
.cv-m35-header-top { display: flex; align-items: flex-end; gap: 6mm; justify-content: flex-end; text-align: right; }
.cv-m35-foto-marco {
  width: calc(26mm * var(--cv-escala-foto, 1));
  height: calc(34mm * var(--cv-escala-foto, 1));
  flex: none;
  border: 1px solid var(--cv-acento-2);
  padding: 1mm;
  order: -1;
}
.cv-m35-foto { width: 100%; height: 100%; object-fit: cover; display: block; filter: grayscale(15%); }
.cv-m35-foto-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 10mm; background: #1a1a1a; color: var(--cv-acento-2); }

.cv-m35-nombre-wrap { flex: 1; }
.cv-m35-nombre {
  font-family: var(--cv-font-titulos);
  font-size: 30pt;
  line-height: .95;
  margin: 0;
  letter-spacing: -1px;
  text-transform: uppercase;
  color: #f5f5f5;
}
.cv-m35-apellido {
  background: linear-gradient(100deg, var(--cv-acento), var(--cv-acento-2));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.cv-m35-puesto {
  font-size: 10pt;
  letter-spacing: 4px;
  text-transform: uppercase;
  color: var(--cv-acento-2);
  margin: 2mm 0 0;
}
.cv-m35-subtitulo { text-align: right; font-size: 9pt; color: #bbb; margin: 4mm 0 0; max-width: 100mm; margin-left: auto; }

.cv-m35-runway {
  height: 2mm;
  margin-top: 8mm;
  background: linear-gradient(90deg, transparent, var(--cv-acento) 30%, var(--cv-acento-2) 70%, transparent);
  transform: skewY(-1deg);
}

.cv-m35-cuerpo { background: var(--cv-fondo-cuerpo); padding: 10mm 14mm; }
.cv-m35-sec { margin-bottom: 8mm; }
.cv-m35-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; }

.cv-m35-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 10pt;
  text-transform: uppercase;
  letter-spacing: 3px;
  color: var(--cv-texto);
  margin: 0 0 4mm;
  display: flex; align-items: center; gap: 3mm;
}
.cv-m35-titulo::before { content: ""; width: 8mm; height: 2px; background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2)); display: inline-block; }

.cv-m35-contacto { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4mm; }
.cv-m35-contacto-item { display: flex; align-items: center; gap: 1.5mm; font-size: 8.5pt; color: var(--cv-tenue); }
.cv-m35-contacto-icono { color: var(--cv-acento); flex-shrink: 0; font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m35-contacto-valor a { color: inherit; }

.cv-m35-perfil-texto { font-size: 10pt; line-height: 1.6; color: var(--cv-texto); max-width: 140mm; }

.cv-m35-job { margin-bottom: 6mm; position: relative; padding-left: 6mm; }
.cv-m35-job::before { content: ""; position: absolute; left: 0; top: 1mm; width: 3mm; height: 3mm; background: var(--cv-acento-2); transform: rotate(45deg); }
.cv-m35-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; flex-wrap: wrap; }
.cv-m35-job-empresa { font-weight: 700; font-size: 11pt; color: var(--cv-texto); text-transform: uppercase; letter-spacing: .5px; }
.cv-m35-job-empresa .cv-ubicacion { color: var(--cv-tenue); font-weight: 400; text-transform: none; }
.cv-m35-job-rol { display: block; font-size: 9pt; color: var(--cv-acento); font-style: italic; }
.cv-m35-job-fecha { font-size: 8pt; letter-spacing: 1px; color: var(--cv-tenue); white-space: nowrap; }
.cv-m35-job-desc { font-size: 9pt; color: var(--cv-texto); margin: 2mm 0; }
.cv-m35-job-bullets { margin: 2mm 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m35-job-tools { display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m35-tool { font-size: 8pt; color: var(--cv-tenue); border: 1px solid var(--cv-linea); padding: 1mm 2.5mm; }

.cv-m35-pills { display: flex; flex-wrap: wrap; gap: 2mm; }
.cv-m35-pill { font-size: 8pt; padding: 1.3mm 3mm; background: var(--cv-acento); color: var(--cv-acento-texto); text-transform: uppercase; letter-spacing: .5px; }
.cv-m35-pill-alt { background: transparent; border: 1px solid var(--cv-acento-2); color: var(--cv-texto); }

.cv-m35-edu { margin-bottom: 4mm; }
.cv-m35-edu-head { display: flex; justify-content: space-between; gap: 2mm; flex-wrap: wrap; }
.cv-m35-edu-inst { font-weight: 700; text-transform: uppercase; font-size: 9.5pt; color: var(--cv-texto); }
.cv-m35-edu-fecha { font-size: 8pt; color: var(--cv-tenue); }
.cv-m35-edu-bullets { margin: 1.5mm 0 0; padding-left: 4mm; font-size: 8.5pt; color: var(--cv-texto); }

.cv-m35-cert { margin-bottom: 3mm; }
.cv-m35-cert-titulo { display: block; font-weight: 700; font-size: 9pt; color: var(--cv-texto); }
.cv-m35-cert-sub { display: block; font-size: 8pt; color: var(--cv-tenue); }

.cv-m35-idioma { display: flex; justify-content: space-between; font-size: 8.5pt; color: var(--cv-texto); margin-bottom: 1.5mm; }
.cv-m35-idioma-nivel { color: var(--cv-tenue); }

.cv-m35-logros { margin: 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m35-logros li { margin-bottom: 1.5mm; }

.cv-m35-ref { margin-bottom: 3mm; padding-bottom: 2.5mm; border-bottom: 1px solid var(--cv-linea); display: flex; flex-direction: column; }
.cv-m35-ref-nombre { font-weight: 700; font-size: 9pt; color: var(--cv-texto); }
.cv-m35-ref-rol { font-size: 8pt; color: var(--cv-acento); }
.cv-m35-ref-dato { font-size: 7.5pt; color: var(--cv-tenue); }

@media print {
  .cv-m35-edu, .cv-m35-cert, .cv-m35-ref { break-inside: avoid; }
  .cv-m35-job-bullets li { break-inside: avoid; }
  .cv-m35-job-head { break-after: avoid-page; }
  .cv-m35-header { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo36"] { background: var(--cv-fondo-cuerpo); }

.cv-m36-header {
  display: flex; align-items: center; gap: 6mm;
  padding: 10mm 12mm;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  border-radius: 0 0 8mm 8mm;
  position: relative;
  overflow: hidden;
}
.cv-m36-header::after {
  content: "";
  position: absolute; right: 10mm; top: 6mm;
  width: 14mm; height: 14mm;
  background:
    radial-gradient(circle at 30% 30%, color-mix(in srgb, var(--cv-acento-texto) 30%, transparent) 2.2mm, transparent 2.3mm),
    radial-gradient(circle at 70% 25%, color-mix(in srgb, var(--cv-acento-texto) 30%, transparent) 2.2mm, transparent 2.3mm),
    radial-gradient(circle at 20% 60%, color-mix(in srgb, var(--cv-acento-texto) 30%, transparent) 2mm, transparent 2.1mm),
    radial-gradient(circle at 78% 62%, color-mix(in srgb, var(--cv-acento-texto) 30%, transparent) 2mm, transparent 2.1mm),
    radial-gradient(ellipse at 50% 85%, color-mix(in srgb, var(--cv-acento-texto) 30%, transparent) 3.4mm 2.6mm, transparent 60%);
  pointer-events: none;
}

.cv-m36-foto-marco {
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 30%;
  overflow: hidden;
  flex: none;
  border: 2px solid color-mix(in srgb, var(--cv-acento-texto) 60%, transparent);
  background: color-mix(in srgb, var(--cv-acento-texto) 15%, transparent);
}
.cv-m36-foto { width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-m36-foto-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: calc(12mm * var(--cv-escala-foto, 1)); }

.cv-m36-nombre { font-family: var(--cv-font-titulos); font-size: 16pt; margin: 0; }
.cv-m36-apellido { font-weight: 300; }
.cv-m36-puesto { font-weight: 700; margin: 1.5mm 0 0; font-size: 10pt; }
.cv-m36-subtitulo { font-size: 8.5pt; opacity: .92; margin: 1mm 0 0; }

.cv-m36-cuerpo { display: grid; grid-template-columns: 62mm 1fr; gap: 6mm; padding: 8mm 10mm; }

.cv-m36-card {
  background: color-mix(in srgb, var(--cv-acento) 5%, white 0%);
  background: var(--cv-fondo-cuerpo);
  border: 1px solid var(--cv-linea);
  border-radius: 4mm;
  padding: 4mm 4.5mm;
  margin-bottom: 4.5mm;
  box-shadow: 0 1px 3px color-mix(in srgb, var(--cv-acento) 12%, transparent);
}

.cv-m36-titulo {
  font-family: var(--cv-font-titulos);
  font-size: 10pt;
  color: var(--cv-acento);
  margin: 0 0 3mm;
  padding-bottom: 1.5mm;
  border-bottom: 1px solid var(--cv-linea);
  display: flex; align-items: center; gap: 2mm;
}
.cv-m36-titulo::before {
  content: "";
  width: 3mm; height: 3mm; border-radius: 50%;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  display: inline-block;
}

.cv-m36-contacto { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2mm; }
.cv-m36-contacto-item { display: flex; align-items: center; gap: 2mm; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m36-contacto-icono { color: var(--cv-acento); flex-shrink: 0; font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m36-contacto-valor a { color: inherit; }

.cv-m36-pills { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m36-pill { font-size: 8pt; padding: 1.3mm 3mm; border-radius: 4mm; background: var(--cv-acento); color: var(--cv-acento-texto); }
.cv-m36-pill-alt { background: color-mix(in srgb, var(--cv-acento-2) 20%, transparent); color: var(--cv-texto); }

.cv-m36-idioma { display: flex; justify-content: space-between; font-size: 8.5pt; color: var(--cv-texto); margin-bottom: 1.5mm; }
.cv-m36-idioma-nivel { color: var(--cv-tenue); }

.cv-m36-cert { margin-bottom: 3mm; }
.cv-m36-cert-titulo { display: block; font-weight: 700; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m36-cert-sub { display: block; font-size: 8pt; color: var(--cv-tenue); }

.cv-m36-ref { margin-bottom: 3mm; padding-bottom: 2.5mm; border-bottom: 1px dashed var(--cv-linea); display: flex; flex-direction: column; }
.cv-m36-ref-nombre { font-weight: 700; font-size: 8.5pt; color: var(--cv-texto); }
.cv-m36-ref-rol { font-size: 8pt; color: var(--cv-acento-2); }
.cv-m36-ref-dato { font-size: 7.5pt; color: var(--cv-tenue); }

.cv-m36-perfil-texto { font-size: 9.5pt; line-height: 1.55; color: var(--cv-texto); }

.cv-m36-job { margin-bottom: 5mm; padding-bottom: 4mm; border-bottom: 1px solid var(--cv-linea); }
.cv-m36-job:last-child { border-bottom: none; }
.cv-m36-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; flex-wrap: wrap; }
.cv-m36-job-empresa { font-weight: 700; color: var(--cv-texto); }
.cv-m36-job-empresa .cv-ubicacion { color: var(--cv-tenue); font-weight: 400; }
.cv-m36-job-rol { display: block; font-size: 9pt; color: var(--cv-acento-2); font-weight: 600; }
.cv-m36-job-fecha {
  font-size: 8pt; padding: 1mm 3mm; border-radius: 4mm;
  background: var(--cv-acento-2); color: var(--cv-badge-texto); white-space: nowrap;
}
.cv-m36-job-desc { font-size: 9pt; color: var(--cv-texto); margin: 2mm 0; }
.cv-m36-job-bullets { margin: 2mm 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m36-job-tools { display: flex; flex-wrap: wrap; gap: 2mm; margin-top: 2mm; }
.cv-m36-tool { font-size: 8pt; color: var(--cv-tenue); background: color-mix(in srgb, var(--cv-acento) 10%, transparent); padding: 1mm 2.5mm; border-radius: 3mm; }

.cv-m36-edu { margin-bottom: 3.5mm; }
.cv-m36-edu-head { display: flex; justify-content: space-between; gap: 2mm; flex-wrap: wrap; }
.cv-m36-edu-inst { font-weight: 700; color: var(--cv-texto); }
.cv-m36-edu-fecha { font-size: 8pt; color: var(--cv-tenue); }
.cv-m36-edu-bullets { margin: 1.5mm 0 0; padding-left: 4mm; font-size: 8.5pt; color: var(--cv-texto); }

.cv-m36-logros { margin: 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m36-logros li { margin-bottom: 1.5mm; }

@media print {
  .cv-m36-edu, .cv-m36-cert, .cv-m36-ref { break-inside: avoid; }
  .cv-m36-job-bullets li { break-inside: avoid; }
  .cv-m36-job-head { break-after: avoid-page; }
  .cv-m36-card { break-inside: auto; }
}

/* ---- Modelos 37-40 ---- */
.cv-pagina[data-modelo="modelo37"] {
  display: grid;
  grid-template-columns: 62mm 1fr;
  background: #101215;
}

/* ===== Sidebar rail ===== */
.cv-m37-riel {
  background: #17191d;
  background-image:
    linear-gradient(180deg, #17191d, #101215),
    repeating-linear-gradient(0deg, transparent, transparent 11mm, rgba(0,225,255,0.07) 11mm, rgba(0,225,255,0.07) 11.4mm),
    repeating-linear-gradient(90deg, transparent, transparent 11mm, rgba(255,209,0,0.05) 11mm, rgba(255,209,0,0.05) 11.4mm);
  color: var(--cv-lateral-texto, #f4f4f4);
  padding: 8mm 6mm;
  border-right: 1mm solid var(--cv-acento);
}
.cv-m37-foto-marco {
  width: calc(30mm * var(--cv-escala-foto, 1));
  height: calc(30mm * var(--cv-escala-foto, 1));
  margin: 0 auto 6mm;
  position: relative;
  clip-path: polygon(15% 0, 85% 0, 100% 15%, 100% 85%, 85% 100%, 15% 100%, 0 85%, 0 15%);
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  padding: 1mm;
}
.cv-m37-foto, .cv-m37-foto-placeholder {
  width: 100%; height: 100%;
  clip-path: polygon(15% 0, 85% 0, 100% 15%, 100% 85%, 85% 100%, 15% 100%, 0 85%, 0 15%);
  object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  background: #17191d;
  font-size: calc(13mm * var(--cv-escala-foto, 1));
}
.cv-m37-contacto { margin-bottom: 6mm; font-size: 9pt; }
.cv-m37-contacto-item { display: flex; gap: 2mm; align-items: center; padding: 1.3mm 0; border-bottom: 0.2mm dashed rgba(255,255,255,0.15); }
.cv-m37-contacto-ico { color: var(--cv-acento); width: calc(4mm * var(--cv-escala-iconos, 1)); text-align: center; flex-shrink: 0; }
.cv-m37-contacto-val { color: var(--cv-lateral-texto, #eee); word-break: break-word; }
.cv-m37-contacto-val a { color: inherit; }

.cv-m37-bloque { margin-bottom: 6mm; }
.cv-m37-subtitulo {
  font-family: var(--cv-font-titulos);
  font-size: 9.5pt; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--cv-acento-texto); background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  padding: 1.3mm 2.5mm; margin: 0 0 3mm; display: inline-block;
  clip-path: polygon(0 0, 100% 0, 96% 100%, 0% 100%);
}
.cv-m37-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m37-tag {
  font-size: 8pt; padding: 1mm 2.2mm; border: 0.3mm solid var(--cv-acento);
  color: var(--cv-acento); border-radius: 1mm;
}
.cv-m37-tag-alt { border-color: var(--cv-acento-2); color: var(--cv-acento-2); }
.cv-m37-idiomas { list-style: none; margin: 0; padding: 0; font-size: 9pt; }
.cv-m37-idiomas li { display: flex; justify-content: space-between; padding: 1mm 0; border-bottom: 0.2mm dashed rgba(255,255,255,0.15); }
.cv-m37-nivel { color: var(--cv-acento); }

.cv-m37-edu, .cv-m37-cert, .cv-m37-ref { margin-bottom: 3mm; font-size: 9pt; }
.cv-m37-edu-fecha, .cv-m37-cert-sub, .cv-m37-ref-rol, .cv-m37-ref-dato { color: var(--cv-lateral-tenue, #999); font-size: 8pt; }
.cv-m37-edu-inst, .cv-m37-cert-titulo, .cv-m37-ref-nombre { font-weight: 700; }
.cv-m37-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; }

/* ===== Main panel ===== */
.cv-m37-panel {
  background: var(--cv-fondo-cuerpo, #fdfdfb);
  color: var(--cv-texto, #1a1a1a);
  padding: 10mm 9mm;
}
.cv-m37-header { position: relative; padding-bottom: 5mm; margin-bottom: 6mm; border-bottom: 1mm solid #101215; }
.cv-m37-rayo { position: absolute; right: 0; top: 0; font-size: 16pt; color: var(--cv-acento-2); filter: drop-shadow(0 0 2mm var(--cv-acento)); }
.cv-m37-nombre { font-family: var(--cv-font-titulos); font-size: 24pt; margin: 0; text-transform: uppercase; letter-spacing: 0.03em; }
.cv-m37-puesto { font-size: 12pt; font-weight: 700; color: var(--cv-acento-2); margin-top: 1mm; }
.cv-m37-subtit { font-size: 9.5pt; color: var(--cv-tenue); margin-top: 1mm; }

.cv-m37-titulo {
  font-family: var(--cv-font-titulos); font-size: 12pt; text-transform: uppercase; letter-spacing: 0.1em;
  display: flex; align-items: center; gap: 2.5mm; margin: 0 0 3mm;
  border-bottom: 0.4mm solid var(--cv-linea);
  padding-bottom: 1.5mm;
}
.cv-m37-nodo { width: 3mm; height: 3mm; border-radius: 50%; background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2)); flex-shrink: 0; box-shadow: 0 0 1.5mm var(--cv-acento); }
.cv-m37-perfil { font-size: 9.5pt; line-height: 1.5; }

.cv-m37-job { position: relative; padding-left: 4mm; margin-bottom: 5mm; border-left: 0.4mm solid var(--cv-linea); }
.cv-m37-job::before { content: ""; position: absolute; left: -1.1mm; top: 1mm; width: 2.2mm; height: 2.2mm; border-radius: 50%; background: var(--cv-acento); }
.cv-m37-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; flex-wrap: wrap; }
.cv-m37-job-empresa { font-weight: 700; font-size: 10.5pt; }
.cv-m37-job-empresa a { color: inherit; }
.cv-m37-job-rol { font-size: 9.5pt; color: var(--cv-acento-2); font-weight: 600; }
.cv-m37-job-fecha { font-size: 8.5pt; color: var(--cv-acento-texto); background: var(--cv-acento); padding: 0.8mm 2mm; border-radius: 1mm; white-space: nowrap; }
.cv-m37-job-desc { font-size: 9pt; margin: 1.5mm 0; }
.cv-m37-job-bullets { margin: 1.5mm 0; padding-left: 4mm; font-size: 9pt; }
.cv-m37-job-herramientas { margin-top: 1.5mm; font-size: 8pt; }
.cv-m37-herr-grupo { display: inline; margin-right: 3mm; }
.cv-m37-herr-etq { color: var(--cv-acento); font-weight: 700; }

.cv-m37-logros { margin: 0; padding-left: 4mm; font-size: 9.5pt; }

@media print {
  .cv-m37-edu, .cv-m37-cert, .cv-m37-ref { break-inside: avoid; }
  .cv-m37-job-bullets li { break-inside: avoid; }
  .cv-m37-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo38"] { background: var(--cv-fondo-cuerpo, #fff); }

.cv-m38-banner {
  position: relative;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  padding: 10mm 12mm 14mm;
  display: flex; align-items: center; gap: 6mm;
  overflow: hidden;
}
.cv-m38-skyline {
  position: absolute; left: 0; right: 0; bottom: 0; height: 9mm;
  background: rgba(0,0,0,0.18);
  clip-path: polygon(
    0 100%, 0 40%, 4% 40%, 4% 20%, 8% 20%, 8% 45%, 13% 45%, 13% 10%, 17% 10%, 17% 45%,
    23% 45%, 23% 25%, 28% 25%, 28% 50%, 34% 50%, 34% 15%, 39% 15%, 39% 50%,
    45% 50%, 45% 30%, 50% 30%, 50% 55%, 56% 55%, 56% 5%, 61% 5%, 61% 55%,
    67% 55%, 67% 35%, 72% 35%, 72% 50%, 78% 50%, 78% 20%, 83% 20%, 83% 55%,
    89% 55%, 89% 40%, 94% 40%, 94% 55%, 100% 55%, 100% 100%
  );
}
.cv-m38-foto-marco {
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  border: 1mm solid var(--cv-acento-texto);
  background: #fff;
  flex-shrink: 0;
  position: relative; z-index: 1;
}
.cv-m38-foto, .cv-m38-foto-placeholder {
  width: 100%; height: 100%; border-radius: 50%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(12mm * var(--cv-escala-foto, 1));
}
.cv-m38-banner-texto { position: relative; z-index: 1; }
.cv-m38-nombre { font-family: var(--cv-font-titulos); font-size: 23pt; margin: 0; }
.cv-m38-puesto { font-size: 12pt; font-weight: 600; opacity: 0.95; margin-top: 1mm; }
.cv-m38-subtitulo { font-size: 9.5pt; opacity: 0.85; margin-top: 1mm; }
.cv-m38-llave { position: absolute; right: 8mm; top: 6mm; font-size: 18pt; opacity: 0.5; z-index: 1; }

.cv-m38-cuerpo { display: grid; grid-template-columns: 1fr 62mm; gap: 8mm; padding: 8mm 12mm 10mm; }

.cv-m38-titulo {
  font-family: var(--cv-font-titulos); font-size: 13pt; color: var(--cv-texto);
  margin: 0 0 3.5mm; padding-bottom: 1.5mm;
  border-bottom: 0.6mm solid var(--cv-acento-2);
}
.cv-m38-perfil { font-size: 9.5pt; line-height: 1.55; color: var(--cv-texto); }

.cv-m38-listing {
  position: relative; border: 0.25mm solid var(--cv-linea); border-radius: 2mm;
  padding: 4mm 4mm 3mm; margin-bottom: 4.5mm; box-shadow: 0 0.5mm 1.5mm rgba(0,0,0,0.06);
}
.cv-m38-listing-precio {
  position: absolute; top: -2.5mm; right: 4mm;
  background: var(--cv-acento-2); color: var(--cv-badge-texto);
  font-weight: 700; font-size: 8.5pt; padding: 1mm 3mm; border-radius: 1mm;
  box-shadow: 0 0.5mm 1mm rgba(0,0,0,0.2);
}
.cv-m38-listing-empresa { font-weight: 700; font-size: 11pt; color: var(--cv-texto); }
.cv-m38-listing-empresa a { color: inherit; }
.cv-m38-listing-rol { font-size: 9.5pt; color: var(--cv-acento); font-weight: 600; margin-top: 0.5mm; }
.cv-m38-listing-desc { font-size: 9pt; color: var(--cv-texto); margin: 2mm 0; }
.cv-m38-listing-bullets { margin: 1.5mm 0; padding-left: 4mm; font-size: 9pt; color: var(--cv-texto); }
.cv-m38-listing-herramientas { font-size: 8pt; color: var(--cv-tenue); margin-top: 1.5mm; }
.cv-m38-herr-grupo { margin-right: 3mm; }
.cv-m38-herr-grupo b { color: var(--cv-acento); }

.cv-m38-logros { margin: 0; padding-left: 4mm; font-size: 9.5pt; color: var(--cv-texto); }

.cv-m38-lateral { border-left: 0.3mm solid var(--cv-linea); padding-left: 6mm; }
.cv-m38-bloque { margin-bottom: 5.5mm; }
.cv-m38-sub {
  font-family: var(--cv-font-titulos); font-size: 9.5pt; text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--cv-acento); margin: 0 0 2.5mm;
}
.cv-m38-contacto-item { display: flex; gap: 2mm; align-items: center; font-size: 8.5pt; padding: 1mm 0; color: var(--cv-texto); }
.cv-m38-contacto-ico { color: var(--cv-acento-2); width: calc(4mm * var(--cv-escala-iconos, 1)); text-align: center; }
.cv-m38-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m38-tag { font-size: 8pt; background: var(--cv-acento); color: var(--cv-acento-texto); padding: 1mm 2.5mm; border-radius: 3mm; }
.cv-m38-tag-alt { background: var(--cv-acento-2); color: var(--cv-badge-texto); }
.cv-m38-idiomas { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; }
.cv-m38-idiomas li { display: flex; justify-content: space-between; padding: 1mm 0; border-bottom: 0.2mm dotted var(--cv-linea); }
.cv-m38-nivel { color: var(--cv-acento); }
.cv-m38-edu, .cv-m38-cert, .cv-m38-ref { margin-bottom: 3mm; font-size: 8.5pt; }
.cv-m38-edu-inst, .cv-m38-cert-titulo, .cv-m38-ref-nombre { font-weight: 700; color: var(--cv-texto); }
.cv-m38-edu-fecha, .cv-m38-cert-sub, .cv-m38-ref-rol, .cv-m38-ref-dato { color: var(--cv-tenue); font-size: 8pt; }
.cv-m38-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; }

@media print {
  .cv-m38-edu, .cv-m38-cert, .cv-m38-ref { break-inside: avoid; }
  .cv-m38-listing-bullets li { break-inside: avoid; }
  .cv-m38-listing-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo39"] {
  background: #0b0714;
  background-image: radial-gradient(circle at 15% 10%, rgba(255,0,200,0.18), transparent 45%),
                     radial-gradient(circle at 85% 5%, rgba(0,225,255,0.16), transparent 40%),
                     linear-gradient(180deg, #0b0714, #100a1c);
  color: #f0eef7;
}

.cv-m39-header { text-align: center; padding: 10mm 12mm 6mm; position: relative; }
.cv-m39-vinilo {
  width: calc(36mm * var(--cv-escala-foto, 1));
  height: calc(36mm * var(--cv-escala-foto, 1));
  margin: 0 auto 4mm;
  border-radius: 50%;
  background: radial-gradient(circle, #1a1a1a 0 78%, #0b0714 79% 82%, #1a1a1a 83% 92%, #0b0714 93% 96%, #1a1a1a 97%);
  position: relative;
  box-shadow: 0 0 6mm rgba(200,0,255,0.45), 0 0 2mm rgba(0,225,255,0.4);
  display: flex; align-items: center; justify-content: center;
}
.cv-m39-foto, .cv-m39-foto-placeholder {
  width: 76%; height: 76%; border-radius: 50%; object-fit: cover; position: relative; z-index: 2;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(8mm * var(--cv-escala-foto, 1));
  background: #0b0714;
}
.cv-m39-nombre {
  font-family: var(--cv-font-titulos); font-size: 25pt; margin: 0; text-transform: uppercase; letter-spacing: 0.05em;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 0 2mm rgba(200,0,255,0.35));
}
.cv-m39-puesto { font-size: 12pt; font-weight: 700; color: #fff; margin-top: 1mm; }
.cv-m39-subtitulo { font-size: 9.5pt; color: #b9b0d6; margin-top: 1mm; }
.cv-m39-eq { display: flex; justify-content: center; align-items: flex-end; gap: 1.2mm; height: 8mm; margin: 4mm 0; }
.cv-m39-eq span {
  width: 2.2mm; border-radius: 1mm 1mm 0 0;
  background: linear-gradient(180deg, var(--cv-acento), var(--cv-acento-2));
  box-shadow: 0 0 1.5mm rgba(200,0,255,0.5);
}
.cv-m39-eq span:nth-child(1) { height: 35%; } .cv-m39-eq span:nth-child(2) { height: 70%; }
.cv-m39-eq span:nth-child(3) { height: 45%; } .cv-m39-eq span:nth-child(4) { height: 100%; }
.cv-m39-eq span:nth-child(5) { height: 55%; } .cv-m39-eq span:nth-child(6) { height: 80%; }
.cv-m39-eq span:nth-child(7) { height: 40%; }
.cv-m39-contacto { display: flex; flex-wrap: wrap; justify-content: center; gap: 4mm; font-size: 8.5pt; }
.cv-m39-contacto-item { display: flex; gap: 1.5mm; align-items: center; color: #d9d3ec; }
.cv-m39-contacto-ico { color: var(--cv-acento-2); width: calc(4mm * var(--cv-escala-iconos, 1)); text-align: center; }
.cv-m39-contacto-item a { color: inherit; }

.cv-m39-cuerpo { display: grid; grid-template-columns: 1fr 58mm; gap: 7mm; padding: 4mm 12mm 10mm; }

.cv-m39-titulo {
  font-family: var(--cv-font-titulos); font-size: 12.5pt; text-transform: uppercase; letter-spacing: 0.1em;
  margin: 0 0 3mm; padding-bottom: 1.5mm; color: #fff;
  border-bottom: 0.5mm solid transparent;
  border-image: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2)) 1;
}
.cv-m39-perfil { font-size: 9.5pt; line-height: 1.55; color: #d9d3ec; }

.cv-m39-job {
  border: 0.25mm solid rgba(255,255,255,0.12); border-radius: 2mm; padding: 4mm;
  margin-bottom: 4.5mm; background: rgba(255,255,255,0.03);
}
.cv-m39-job-head { display: flex; justify-content: space-between; gap: 3mm; flex-wrap: wrap; align-items: baseline; }
.cv-m39-job-empresa { font-weight: 700; font-size: 10.5pt; color: #fff; }
.cv-m39-job-empresa a { color: inherit; }
.cv-m39-job-rol { font-size: 9.5pt; color: var(--cv-acento-2); font-weight: 600; }
.cv-m39-job-fecha {
  font-size: 8.5pt; padding: 0.8mm 2.2mm; border-radius: 3mm; white-space: nowrap;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2)); color: var(--cv-acento-texto);
}
.cv-m39-job-desc { font-size: 9pt; margin: 2mm 0; color: #d9d3ec; }
.cv-m39-job-bullets { margin: 1.5mm 0; padding-left: 4mm; font-size: 9pt; color: #d9d3ec; }
.cv-m39-job-herramientas { font-size: 8pt; color: #a89bd1; margin-top: 1.5mm; }
.cv-m39-herr-grupo { margin-right: 3mm; }
.cv-m39-herr-grupo b { color: var(--cv-acento-2); }

.cv-m39-logros { margin: 0; padding-left: 4mm; font-size: 9.5pt; color: #d9d3ec; }

.cv-m39-lateral { border-left: 0.3mm solid rgba(255,255,255,0.12); padding-left: 6mm; }
.cv-m39-bloque { margin-bottom: 5.5mm; }
.cv-m39-sub { font-family: var(--cv-font-titulos); font-size: 9.5pt; text-transform: uppercase; letter-spacing: 0.08em; color: var(--cv-acento-2); margin: 0 0 2.5mm; }
.cv-m39-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m39-tag { font-size: 8pt; padding: 1mm 2.5mm; border-radius: 3mm; border: 0.3mm solid var(--cv-acento); color: #fff; box-shadow: 0 0 1.5mm rgba(200,0,255,0.3); }
.cv-m39-tag-alt { border-color: var(--cv-acento-2); }
.cv-m39-idiomas { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; color: #d9d3ec; }
.cv-m39-idiomas li { display: flex; justify-content: space-between; padding: 1mm 0; border-bottom: 0.2mm dotted rgba(255,255,255,0.12); }
.cv-m39-nivel { color: var(--cv-acento-2); }
.cv-m39-edu, .cv-m39-cert, .cv-m39-ref { margin-bottom: 3mm; font-size: 8.5pt; }
.cv-m39-edu-inst, .cv-m39-cert-titulo, .cv-m39-ref-nombre { font-weight: 700; color: #fff; }
.cv-m39-edu-fecha, .cv-m39-cert-sub, .cv-m39-ref-rol, .cv-m39-ref-dato { color: #a89bd1; font-size: 8pt; }
.cv-m39-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; color: #d9d3ec; }

@media print {
  .cv-m39-edu, .cv-m39-cert, .cv-m39-ref { break-inside: avoid; }
  .cv-m39-job-bullets li { break-inside: avoid; }
  .cv-m39-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo40"] {
  background: var(--cv-fondo-cuerpo, #fbf5e6);
  color: var(--cv-texto, #3a2c1a);
}

.cv-m40-header { position: relative; padding: 10mm 12mm 8mm; overflow: hidden; display: flex; align-items: flex-end; gap: 6mm; min-height: 34mm; }
.cv-m40-horizonte { position: absolute; inset: 0; z-index: 0; background: linear-gradient(180deg, #fff7e0, #f6e3b4); }
.cv-m40-loma {
  position: absolute; left: -10%; width: 120%; border-radius: 50% 50% 0 0 / 100% 100% 0 0;
}
.cv-m40-loma-1 { bottom: -6mm; height: 16mm; background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2)); opacity: 0.85; }
.cv-m40-loma-2 { bottom: -10mm; height: 12mm; background: var(--cv-acento-2); opacity: 0.55; }
.cv-m40-foto-marco {
  position: relative; z-index: 1;
  width: calc(26mm * var(--cv-escala-foto, 1));
  height: calc(26mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  border: 1mm solid #fff;
  box-shadow: 0 0.5mm 2mm rgba(58,44,26,0.3);
  flex-shrink: 0;
}
.cv-m40-foto, .cv-m40-foto-placeholder {
  width: 100%; height: 100%; border-radius: 50%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(11mm * var(--cv-escala-foto, 1)); background: #fff;
}
.cv-m40-header-texto { position: relative; z-index: 1; padding-bottom: 1mm; }
.cv-m40-nombre { font-family: var(--cv-font-titulos); font-size: 23pt; margin: 0; color: #3a2c1a; }
.cv-m40-puesto { font-size: 11.5pt; font-weight: 700; color: #6b4423; margin-top: 1mm; }
.cv-m40-subtitulo { font-size: 9.5pt; color: #7a6a4f; margin-top: 1mm; }

.cv-m40-contacto {
  display: flex; flex-wrap: wrap; gap: 5mm; padding: 3mm 12mm;
  border-bottom: 0.4mm dashed #c9a969; font-size: 8.5pt;
}
.cv-m40-contacto-item { display: flex; gap: 1.5mm; align-items: center; color: var(--cv-texto); }
.cv-m40-contacto-ico { color: var(--cv-acento); width: calc(4mm * var(--cv-escala-iconos, 1)); text-align: center; }
.cv-m40-contacto-item a { color: inherit; }

.cv-m40-cuerpo { padding: 6mm 12mm 10mm; }
.cv-m40-titulo {
  font-family: var(--cv-font-titulos); font-size: 12.5pt; letter-spacing: 0.04em;
  color: #4a3a22; margin: 0 0 3mm; padding-bottom: 1.5mm;
  border-bottom: 0.5mm solid var(--cv-acento);
  display: flex; align-items: center; gap: 2mm;
}
.cv-m40-titulo::before { content: "🌾"; font-size: 10pt; }
.cv-m40-perfil { font-size: 9.5pt; line-height: 1.55; margin-bottom: 4mm; }

.cv-m40-entrada {
  position: relative; padding: 3mm 0 3mm 3mm; margin-bottom: 3.5mm;
  border-left: 0.6mm dashed #c9a969;
}
.cv-m40-entrada-head { display: flex; gap: 4mm; align-items: baseline; }
.cv-m40-entrada-fecha {
  font-weight: 700; font-size: 8.5pt; color: var(--cv-acento-texto);
  background: var(--cv-acento); padding: 0.8mm 2.2mm; border-radius: 1mm; white-space: nowrap;
}
.cv-m40-entrada-empresa { font-weight: 700; font-size: 10.5pt; color: #3a2c1a; }
.cv-m40-entrada-empresa a { color: inherit; }
.cv-m40-entrada-rol { font-size: 9.5pt; color: #6b4423; font-weight: 600; }
.cv-m40-entrada-desc { font-size: 9pt; margin: 1.5mm 0 0; }
.cv-m40-entrada-bullets { margin: 1.5mm 0 0; padding-left: 4mm; font-size: 9pt; }
.cv-m40-entrada-herramientas { font-size: 8pt; color: #7a6a4f; margin-top: 1.5mm; }
.cv-m40-herr-grupo { margin-right: 3mm; }
.cv-m40-herr-grupo b { color: var(--cv-acento); }

.cv-m40-columnas { display: grid; grid-template-columns: 1fr 1fr; gap: 8mm; margin-top: 4mm; }
.cv-m40-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-bottom: 4mm; }
.cv-m40-tag { font-size: 8pt; padding: 1mm 2.5mm; border-radius: 1mm; background: var(--cv-acento); color: var(--cv-acento-texto); }
.cv-m40-tag-alt { background: var(--cv-acento-2); color: var(--cv-badge-texto); }
.cv-m40-idiomas { list-style: none; margin: 0 0 4mm; padding: 0; font-size: 8.5pt; }
.cv-m40-idiomas li { display: flex; justify-content: space-between; padding: 1mm 0; border-bottom: 0.2mm dotted #c9a969; }
.cv-m40-nivel { color: var(--cv-acento); }
.cv-m40-edu, .cv-m40-cert, .cv-m40-ref { margin-bottom: 3mm; font-size: 8.5pt; }
.cv-m40-edu-inst, .cv-m40-cert-titulo, .cv-m40-ref-nombre { font-weight: 700; color: #3a2c1a; }
.cv-m40-edu-fecha, .cv-m40-cert-sub, .cv-m40-ref-rol, .cv-m40-ref-dato { color: #7a6a4f; font-size: 8pt; }
.cv-m40-edu-bullets { margin: 1mm 0 0; padding-left: 4mm; }
.cv-m40-logros { margin: 0; padding-left: 4mm; font-size: 9.5pt; }

@media print {
  .cv-m40-edu, .cv-m40-cert, .cv-m40-ref { break-inside: avoid; }
  .cv-m40-entrada-bullets li { break-inside: avoid; }
  .cv-m40-entrada-head { break-after: avoid-page; }
}

/* ---- Modelos 21-24 ---- */
.cv-pagina[data-modelo="modelo21"] {
  display: grid;
  grid-template-columns: 65mm 1fr;
  font-family: var(--cv-font-cuerpo);
}

/* Sidebar */
.cv-m21-sidebar {
  background: var(--cv-lateral-fondo);
  color: var(--cv-lateral-texto);
  padding: 8mm 6mm;
  background-image:
    linear-gradient(var(--cv-lateral-fondo), var(--cv-lateral-fondo)),
    repeating-linear-gradient(0deg, rgba(255,255,255,.06) 0 1px, transparent 1px 8mm),
    repeating-linear-gradient(90deg, rgba(255,255,255,.06) 0 1px, transparent 1px 8mm);
}
.cv-m21-foto-marco {
  width: calc(30mm * var(--cv-escala-foto, 1));
  height: calc(30mm * var(--cv-escala-foto, 1));
  margin: 0 auto 3mm;
  position: relative;
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  background: rgba(255,255,255,.08);
  display: flex; align-items: center; justify-content: center;
  outline: 1px dashed rgba(255,255,255,.5);
  outline-offset: 3px;
}
.cv-m21-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m21-foto-placeholder { font-size: calc(28px * var(--cv-escala-foto, 1)); }
.cv-m21-sello {
  text-align: center;
  font-family: var(--cv-font-titulos);
  font-size: 8px;
  letter-spacing: .12em;
  color: var(--cv-lateral-tenue);
  border: 1px solid var(--cv-lateral-tenue);
  padding: 2px 4px;
  margin-bottom: 6mm;
}
.cv-m21-tit-lateral {
  font-family: var(--cv-font-titulos);
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--cv-lateral-texto);
  margin: 0 0 2mm;
  padding-bottom: 1mm;
  border-bottom: 1px solid var(--cv-lateral-tenue);
}
.cv-m21-bloque { margin-bottom: 6mm; }
.cv-m21-bloque[hidden] { display: none; }
.cv-m21-contacto { list-style: none; margin: 0; padding: 0; }
.cv-m21-contacto-item { display: flex; gap: 2mm; align-items: flex-start; font-size: 9.5px; color: var(--cv-lateral-tenue); margin-bottom: 1.5mm; word-break: break-word; }
.cv-m21-ico { color: var(--cv-acento-2); flex-shrink: 0; font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m21-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m21-chip {
  font-size: 8.5px;
  padding: 1mm 2mm;
  border: 1px solid var(--cv-acento-2);
  color: var(--cv-lateral-texto);
  font-family: var(--cv-font-titulos);
}
.cv-m21-chip-alt { border-style: dashed; }
.cv-m21-idiomas { list-style: none; margin: 0; padding: 0; }
.cv-m21-idioma { margin-bottom: 3mm; font-size: 9.5px; color: var(--cv-lateral-texto); }
.cv-m21-idioma-cab { display: flex; justify-content: space-between; margin-bottom: 1mm; }
.cv-m21-idioma-nivel { color: var(--cv-acento-2); font-family: var(--cv-font-titulos); font-size: 8px; letter-spacing: .08em; }
.cv-m21-regla-mini { height: 3px; background: repeating-linear-gradient(90deg, var(--cv-acento) 0 2px, transparent 2px 4px); }
.cv-m21-edu { margin-bottom: 3mm; font-size: 9.5px; }
.cv-m21-edu-inst { font-weight: 700; color: var(--cv-lateral-texto); }
.cv-m21-edu-fecha { color: var(--cv-lateral-tenue); font-size: 8.5px; margin-bottom: 1mm; }
.cv-m21-edu-bullets { margin: 0; padding-left: 4mm; color: var(--cv-lateral-tenue); }
.cv-m21-edu-bullets li { margin-bottom: .5mm; }

/* Main */
.cv-m21-main {
  background: var(--cv-fondo-cuerpo);
  color: var(--cv-texto);
  padding: 10mm 10mm 10mm 8mm;
  background-image: repeating-linear-gradient(0deg, var(--cv-linea) 0 1px, transparent 1px 6mm), repeating-linear-gradient(90deg, var(--cv-linea) 0 1px, transparent 1px 6mm);
}
.cv-m21-titleblock { margin-bottom: 8mm; }
.cv-m21-tb-etiqueta { font-family: var(--cv-font-titulos); font-size: 8.5px; letter-spacing: .18em; color: var(--cv-tenue); margin-top: 2mm; }
.cv-m21-nombre {
  margin: 0;
  font-family: var(--cv-font-titulos);
  font-size: 28px;
  font-weight: 800;
  letter-spacing: .02em;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.cv-m21-puesto { font-size: 13px; font-weight: 700; color: var(--cv-texto); }
.cv-m21-subtitulo { font-size: 10.5px; color: var(--cv-tenue); margin-top: 1mm; }
.cv-m21-regla {
  margin-top: 5mm;
  height: 6px;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  position: relative;
}
.cv-m21-regla::after {
  content: "";
  position: absolute; left: 0; right: 0; top: 100%;
  height: 3mm;
  background: repeating-linear-gradient(90deg, var(--cv-linea) 0 1px, transparent 1px 4mm);
}
.cv-m21-tit {
  font-family: var(--cv-font-titulos);
  font-size: 13px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--cv-acento);
  border-bottom: 2px solid var(--cv-acento);
  padding-bottom: 1.5mm;
  margin: 0 0 3mm;
}
.cv-m21-nota { font-size: 10.5px; line-height: 1.55; border-left: 2px dashed var(--cv-acento-2); padding-left: 4mm; }
.cv-m21-exp-list { counter-reset: hoja; }
.cv-m21-exp-item { display: flex; gap: 4mm; margin-bottom: 6mm; }
.cv-m21-exp-sheet {
  flex-shrink: 0;
  width: 10mm; height: 10mm;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--cv-font-titulos);
  font-size: 9px; font-weight: 700;
  counter-increment: hoja;
}
.cv-m21-exp-sheet::before { content: "A-" counter(hoja, decimal-leading-zero); }
.cv-m21-exp-body { flex: 1; min-width: 0; }
.cv-m21-job-head { display: flex; justify-content: space-between; gap: 3mm; align-items: baseline; }
.cv-m21-exp-empresa { font-weight: 700; font-size: 11.5px; }
.cv-m21-exp-rol { font-size: 10px; color: var(--cv-acento); font-weight: 600; }
.cv-m21-exp-fecha { font-size: 9px; font-family: var(--cv-font-titulos); color: var(--cv-tenue); white-space: nowrap; }
.cv-m21-exp-desc { font-size: 10px; color: var(--cv-texto); margin: 2mm 0; }
.cv-m21-job-bullets { margin: 2mm 0; padding: 0; list-style: none; }
.cv-m21-job-bullets li { position: relative; padding-left: 4mm; font-size: 9.8px; margin-bottom: 1mm; }
.cv-m21-job-bullets li::before { content: ""; position: absolute; left: 0; top: 4px; width: 2mm; height: 2mm; background: var(--cv-acento-2); }
.cv-m21-herramientas { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-top: 2mm; }
.cv-m21-chip-tool { border-color: var(--cv-tenue); color: var(--cv-texto); }
.cv-m21-logros { margin: 0; padding-left: 4mm; }
.cv-m21-logros li { font-size: 10px; margin-bottom: 1.5mm; }
.cv-m21-cert-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m21-cert { border: 1px solid var(--cv-linea); padding: 2.5mm 3mm; }
.cv-m21-cert-tit { font-weight: 700; font-size: 10px; }
.cv-m21-cert-sub { font-size: 9px; color: var(--cv-tenue); }
.cv-m21-referencias { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m21-ref { border-top: 2px solid var(--cv-acento-2); padding-top: 1.5mm; }
.cv-m21-ref-nombre { font-weight: 700; font-size: 10px; }
.cv-m21-ref-rol { font-size: 9px; color: var(--cv-tenue); }
.cv-m21-ref-dato { font-size: 8.5px; color: var(--cv-tenue); }

@media print {
  .cv-m21-edu, .cv-m21-cert, .cv-m21-ref { break-inside: avoid; }
  .cv-m21-job-bullets li { break-inside: avoid; }
  .cv-m21-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo22"] {
  background: var(--cv-fondo-cuerpo);
  color: var(--cv-texto);
  font-family: var(--cv-font-cuerpo);
}
.cv-m22-banner {
  position: relative;
  display: flex;
  align-items: center;
  gap: 6mm;
  padding: 9mm 10mm 12mm;
  background: linear-gradient(120deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
}
.cv-m22-foto-marco {
  flex-shrink: 0;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  background: rgba(255,255,255,.25);
  border: 3px dashed rgba(255,255,255,.7);
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
.cv-m22-foto { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
.cv-m22-foto-placeholder { font-size: calc(30px * var(--cv-escala-foto, 1)); }
.cv-m22-nombre { margin: 0; font-family: var(--cv-font-titulos); font-size: 26px; font-weight: 800; color: var(--cv-acento-texto); }
.cv-m22-puesto { font-size: 12.5px; font-weight: 600; opacity: .95; }
.cv-m22-subtitulo { font-size: 10px; opacity: .85; margin-top: 1mm; }
.cv-m22-scallop {
  position: absolute; left: 0; right: 0; bottom: -1px; height: 5mm;
  background-image: radial-gradient(circle at 10px 0, transparent 9px, var(--cv-fondo-cuerpo) 10px);
  background-size: 20px 10px;
  background-repeat: repeat-x;
}
.cv-m22-cuerpo { display: grid; grid-template-columns: 58mm 1fr; gap: 6mm; padding: 6mm 10mm 10mm; }
.cv-m22-tarjeta {
  background: color-mix(in srgb, var(--cv-fondo-cuerpo) 60%, white 40%);
  border: 1px dashed var(--cv-acento-2);
  border-radius: 4mm;
  padding: 4mm;
  margin-bottom: 5mm;
}
.cv-m22-tit-tarjeta { margin: 0 0 2mm; font-family: var(--cv-font-titulos); font-size: 11px; color: var(--cv-acento); }
.cv-m22-contacto, .cv-m22-ingredientes { list-style: none; margin: 0; padding: 0; }
.cv-m22-contacto li { display: flex; gap: 2mm; font-size: 9.5px; margin-bottom: 1.5mm; word-break: break-word; }
.cv-m22-ico { color: var(--cv-acento-2); font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m22-ingredientes li { position: relative; padding-left: 4mm; font-size: 9.8px; margin-bottom: 1.5mm; }
.cv-m22-ingredientes li::before { content: "●"; position: absolute; left: 0; color: var(--cv-acento-2); font-size: 7px; top: 2px; }
.cv-m22-nivel { color: var(--cv-tenue); font-size: 8.5px; }
.cv-m22-edu { margin-bottom: 3mm; font-size: 9.5px; }
.cv-m22-edu-inst { font-weight: 700; }
.cv-m22-edu-fecha { color: var(--cv-tenue); font-size: 8.5px; margin-bottom: 1mm; }
.cv-m22-edu-bullets { margin: 0; padding-left: 4mm; }
.cv-m22-cert { margin-bottom: 3mm; }
.cv-m22-cert-tit { font-weight: 700; font-size: 10px; }
.cv-m22-cert-sub { font-size: 9px; color: var(--cv-tenue); }
.cv-m22-tit-receta {
  font-family: var(--cv-font-titulos);
  font-size: 14px;
  color: var(--cv-acento);
  display: flex; align-items: center; gap: 2mm;
  margin: 0 0 3mm;
}
.cv-m22-tit-receta::after { content: ""; flex: 1; height: 2px; background: repeating-linear-gradient(90deg, var(--cv-acento-2) 0 3px, transparent 3px 6px); }
.cv-m22-perfil { font-size: 10.5px; line-height: 1.6; margin: 0; }
.cv-m22-paso { display: flex; gap: 3mm; margin-bottom: 5mm; }
.cv-m22-paso-num {
  flex-shrink: 0;
  width: 8mm; height: 8mm;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--cv-font-titulos); font-weight: 800; font-size: 11px;
}
.cv-m22-paso-tarjeta {
  flex: 1; min-width: 0;
  background: color-mix(in srgb, var(--cv-fondo-cuerpo) 55%, white 45%);
  border-radius: 3mm;
  padding: 3.5mm 4mm;
  box-shadow: 0 1px 3px rgba(0,0,0,.08);
}
.cv-m22-job-head { display: flex; justify-content: space-between; gap: 3mm; align-items: baseline; }
.cv-m22-exp-empresa { font-weight: 700; font-size: 11.5px; }
.cv-m22-exp-rol { font-size: 10px; color: var(--cv-acento); font-weight: 600; }
.cv-m22-exp-fecha {
  font-size: 8.5px; white-space: nowrap;
  background: var(--cv-acento-2); color: var(--cv-badge-texto);
  padding: 1mm 2.5mm; border-radius: 8px;
}
.cv-m22-exp-desc { font-size: 10px; margin: 2mm 0; }
.cv-m22-job-bullets { margin: 2mm 0; padding-left: 4mm; }
.cv-m22-job-bullets li { font-size: 9.8px; margin-bottom: 1mm; }
.cv-m22-herramientas { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-top: 2mm; }
.cv-m22-chip { font-size: 8.5px; background: rgba(0,0,0,.05); padding: 1mm 2mm; border-radius: 6px; }
.cv-m22-logros { margin: 0; padding-left: 4mm; }
.cv-m22-logros li { font-size: 10px; margin-bottom: 1.5mm; }
.cv-m22-referencias { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m22-ref { border-left: 3px solid var(--cv-acento-2); padding-left: 2.5mm; }
.cv-m22-ref-nombre { font-weight: 700; font-size: 10px; }
.cv-m22-ref-rol { font-size: 9px; color: var(--cv-tenue); }
.cv-m22-ref-dato { font-size: 8.5px; color: var(--cv-tenue); }

@media print {
  .cv-m22-edu, .cv-m22-cert, .cv-m22-ref { break-inside: avoid; }
  .cv-m22-job-bullets li { break-inside: avoid; }
  .cv-m22-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo23"] {
  background: var(--cv-fondo-cuerpo);
  color: var(--cv-texto);
  font-family: var(--cv-font-cuerpo);
  padding: 0 10mm 10mm;
}
.cv-m23-franja {
  height: 4mm;
  margin: 0 -10mm;
  background: repeating-linear-gradient(45deg, var(--cv-acento) 0 8mm, var(--cv-acento-2) 8mm 16mm);
}
.cv-m23-header {
  display: flex;
  align-items: center;
  gap: 6mm;
  padding: 7mm 0;
  background: var(--cv-lateral-fondo);
  margin: 0 -10mm;
  padding-left: 10mm; padding-right: 10mm;
  color: var(--cv-lateral-texto);
}
.cv-m23-foto-marco {
  flex-shrink: 0;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(32mm * var(--cv-escala-foto, 1));
  clip-path: polygon(50% 0%, 100% 15%, 100% 70%, 50% 100%, 0% 70%, 0% 15%);
  background: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2));
  padding: 2px;
}
.cv-m23-foto-marco::before {
  content: "";
}
.cv-m23-foto {
  width: 100%; height: 100%; object-fit: cover;
  clip-path: polygon(50% 0%, 100% 15%, 100% 70%, 50% 100%, 0% 70%, 0% 15%);
}
.cv-m23-foto-placeholder {
  width: 100%; height: 100%;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(28px * var(--cv-escala-foto, 1));
  background: var(--cv-lateral-fondo);
  clip-path: polygon(50% 0%, 100% 15%, 100% 70%, 50% 100%, 0% 70%, 0% 15%);
}
.cv-m23-credencial {
  font-family: var(--cv-font-titulos);
  font-size: 9px; letter-spacing: .2em;
  color: var(--cv-acento-2);
  margin-bottom: 1mm;
}
.cv-m23-nombre { margin: 0; font-family: var(--cv-font-titulos); font-size: 26px; font-weight: 800; color: var(--cv-lateral-texto); letter-spacing: .01em; }
.cv-m23-puesto { font-size: 12.5px; font-weight: 700; color: var(--cv-acento-2); text-transform: uppercase; letter-spacing: .05em; }
.cv-m23-subtitulo { font-size: 10px; color: var(--cv-lateral-tenue); margin-top: 1mm; }

.cv-m23-bloque { margin-top: 6mm; }
.cv-m23-bloque[hidden] { display: none; }
.cv-m23-tit {
  font-family: var(--cv-font-titulos);
  font-size: 12.5px;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: var(--cv-acento-texto);
  background: var(--cv-acento);
  padding: 1.5mm 3mm;
  margin: 0 0 3mm;
  display: inline-block;
}
.cv-m23-contacto { list-style: none; display: flex; flex-wrap: wrap; gap: 4mm; margin: 0; padding: 0; }
.cv-m23-contacto li { display: flex; gap: 1.5mm; font-size: 9.5px; }
.cv-m23-ico { color: var(--cv-acento); font-size: calc(1em * var(--cv-escala-iconos, 1)); }
.cv-m23-perfil { font-size: 10.5px; line-height: 1.6; margin: 0; border-left: 3px solid var(--cv-acento-2); padding-left: 4mm; }
.cv-m23-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 6mm; }
.cv-m23-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; }
.cv-m23-chip { font-size: 8.5px; padding: 1mm 2.5mm; background: var(--cv-acento); color: var(--cv-acento-texto); font-weight: 700; border-radius: 2px; }
.cv-m23-chip-alt { background: var(--cv-acento-2); color: var(--cv-badge-texto); }
.cv-m23-chip-tool { background: transparent; color: var(--cv-texto); border: 1px solid var(--cv-tenue); }
.cv-m23-item { margin-bottom: 4mm; }
.cv-m23-item-caso { font-family: var(--cv-font-titulos); font-size: 8px; letter-spacing: .12em; color: var(--cv-acento-2); font-weight: 700; margin-bottom: 1mm; }
.cv-m23-job-head { display: flex; justify-content: space-between; gap: 3mm; align-items: baseline; }
.cv-m23-exp-empresa { font-weight: 700; font-size: 11.5px; }
.cv-m23-exp-rol { font-size: 10px; color: var(--cv-acento); font-weight: 700; text-transform: uppercase; letter-spacing: .03em; }
.cv-m23-exp-fecha { font-size: 9px; font-weight: 700; color: var(--cv-tenue); white-space: nowrap; }
.cv-m23-exp-desc { font-size: 10px; margin: 2mm 0; }
.cv-m23-job-bullets { margin: 2mm 0; padding-left: 4mm; }
.cv-m23-job-bullets li { font-size: 9.8px; margin-bottom: 1mm; }
.cv-m23-herramientas { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-top: 2mm; }
.cv-m23-divisor { height: 1px; background: var(--cv-linea); margin-top: 4mm; }
.cv-m23-logros { margin: 0; padding-left: 4mm; }
.cv-m23-logros li { font-size: 10px; margin-bottom: 1.5mm; }
.cv-m23-edu { margin-bottom: 3mm; font-size: 9.5px; }
.cv-m23-edu-inst { font-weight: 700; }
.cv-m23-edu-fecha { color: var(--cv-tenue); font-size: 8.5px; margin-bottom: 1mm; }
.cv-m23-edu-bullets { margin: 0; padding-left: 4mm; }
.cv-m23-cert { margin-bottom: 3mm; }
.cv-m23-cert-tit { font-weight: 700; font-size: 10px; }
.cv-m23-cert-sub { font-size: 9px; color: var(--cv-tenue); }
.cv-m23-idiomas { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4mm; }
.cv-m23-idiomas li { font-size: 9.5px; display: flex; gap: 1.5mm; }
.cv-m23-nivel { color: var(--cv-acento-2); font-weight: 700; }
.cv-m23-referencias { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m23-ref { border-top: 3px solid var(--cv-acento); padding-top: 1.5mm; }
.cv-m23-ref-nombre { font-weight: 700; font-size: 10px; }
.cv-m23-ref-rol { font-size: 9px; color: var(--cv-tenue); }
.cv-m23-ref-dato { font-size: 8.5px; color: var(--cv-tenue); }

@media print {
  .cv-m23-edu, .cv-m23-cert, .cv-m23-ref { break-inside: avoid; }
  .cv-m23-job-bullets li { break-inside: avoid; }
  .cv-m23-job-head { break-after: avoid-page; }
}

.cv-pagina[data-modelo="modelo24"] {
  background: var(--cv-fondo-cuerpo);
  color: var(--cv-texto);
  font-family: var(--cv-font-cuerpo);
}
.cv-m24-header {
  text-align: center;
  padding: 9mm 10mm 6mm;
  background: linear-gradient(160deg, #1a1210, #2b1a16);
  color: #f4ece0;
  position: relative;
}
.cv-m24-foto-marco {
  width: calc(26mm * var(--cv-escala-foto, 1));
  height: calc(26mm * var(--cv-escala-foto, 1));
  margin: 0 auto 3mm;
  border-radius: 50%;
  border: 3px solid;
  border-image: linear-gradient(135deg, var(--cv-acento), var(--cv-acento-2)) 1;
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,.05);
}
.cv-m24-foto { width: 100%; height: 100%; object-fit: cover; }
.cv-m24-foto-placeholder { font-size: calc(26px * var(--cv-escala-foto, 1)); }
.cv-m24-flourish-top, .cv-m24-flourish-bottom {
  font-size: 9px; letter-spacing: .15em;
  color: var(--cv-acento-2);
  margin: 1mm 0;
}
.cv-m24-nombre {
  margin: 1mm 0 0;
  font-family: var(--cv-font-titulos);
  font-size: 28px;
  font-weight: 800;
  letter-spacing: .04em;
  text-transform: uppercase;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.cv-m24-puesto { font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: #f4ece0; }
.cv-m24-subtitulo { font-size: 9.5px; color: #c9b8a8; margin-top: 1mm; }
.cv-m24-contacto {
  list-style: none; margin: 3mm 0 0; padding: 0;
  display: flex; justify-content: center; flex-wrap: wrap; gap: 4mm;
}
.cv-m24-contacto li { display: flex; gap: 1.5mm; font-size: 9px; color: #d8cabb; }
.cv-m24-ico { color: var(--cv-acento-2); font-size: calc(1em * var(--cv-escala-iconos, 1)); }

.cv-m24-cuerpo { padding: 8mm 10mm 10mm; }
.cv-m24-bloque { margin-bottom: 7mm; }
.cv-m24-bloque[hidden] { display: none; }
.cv-m24-tit-menu {
  text-align: center;
  font-family: var(--cv-font-titulos);
  font-size: 13px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--cv-acento);
  margin: 0 0 4mm;
  position: relative;
}
.cv-m24-tit-menu::before {
  content: "❖";
  display: block;
  font-size: 9px;
  color: var(--cv-acento-2);
  margin-bottom: 1mm;
}
.cv-m24-perfil { font-size: 10.5px; line-height: 1.6; text-align: center; max-width: 150mm; margin: 0 auto; font-style: italic; }
.cv-m24-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 6mm; }
.cv-m24-tags { display: flex; flex-wrap: wrap; gap: 1.5mm; justify-content: center; }
.cv-m24-chip { font-size: 8.5px; padding: 1mm 2.5mm; border: 1px solid var(--cv-acento); color: var(--cv-texto); border-radius: 2px; }
.cv-m24-chip-alt { border-color: var(--cv-acento-2); }
.cv-m24-plato { margin-bottom: 5mm; padding-bottom: 4mm; border-bottom: 1px dashed var(--cv-linea); }
.cv-m24-job-head { display: flex; justify-content: space-between; align-items: baseline; gap: 3mm; }
.cv-m24-plato-nombre { display: flex; align-items: baseline; gap: 2mm; flex: 1; min-width: 0; }
.cv-m24-exp-rol { font-family: var(--cv-font-titulos); font-weight: 700; font-size: 12.5px; white-space: nowrap; }
.cv-m24-puntos { flex: 1; border-bottom: 2px dotted var(--cv-tenue); margin-bottom: 2px; }
.cv-m24-precio {
  flex-shrink: 0;
  font-size: 9px; font-weight: 700;
  background: var(--cv-acento-2); color: var(--cv-badge-texto);
  padding: 1mm 3mm; border-radius: 10px 2px 10px 2px;
  white-space: nowrap;
}
.cv-m24-exp-empresa { font-size: 10.5px; color: var(--cv-acento); font-weight: 600; margin-top: .5mm; }
.cv-m24-exp-desc { font-size: 10px; margin: 2mm 0; }
.cv-m24-job-bullets { margin: 2mm 0; padding-left: 4mm; }
.cv-m24-job-bullets li { font-size: 9.8px; margin-bottom: 1mm; }
.cv-m24-herramientas { display: flex; flex-wrap: wrap; gap: 1.5mm; margin-top: 2mm; }
.cv-m24-logros { margin: 0; padding-left: 4mm; }
.cv-m24-logros li { font-size: 10px; margin-bottom: 1.5mm; }
.cv-m24-edu { margin-bottom: 3mm; font-size: 9.5px; }
.cv-m24-edu-inst { font-weight: 700; }
.cv-m24-edu-fecha { color: var(--cv-tenue); font-size: 8.5px; margin-bottom: 1mm; }
.cv-m24-edu-bullets { margin: 0; padding-left: 4mm; }
.cv-m24-cert { margin-bottom: 3mm; }
.cv-m24-cert-tit { font-weight: 700; font-size: 10px; }
.cv-m24-cert-sub { font-size: 9px; color: var(--cv-tenue); }
.cv-m24-idiomas { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 5mm; }
.cv-m24-idiomas li { font-size: 9.5px; display: flex; gap: 1.5mm; }
.cv-m24-nivel { color: var(--cv-acento-2); font-weight: 700; }
.cv-m24-referencias { display: grid; grid-template-columns: 1fr 1fr; gap: 3mm; }
.cv-m24-ref { border-top: 2px solid var(--cv-acento); padding-top: 1.5mm; }
.cv-m24-ref-nombre { font-weight: 700; font-size: 10px; }
.cv-m24-ref-rol { font-size: 9px; color: var(--cv-tenue); }
.cv-m24-ref-dato { font-size: 8.5px; color: var(--cv-tenue); }

@media print {
  .cv-m24-edu, .cv-m24-cert, .cv-m24-ref { break-inside: avoid; }
  .cv-m24-job-bullets li { break-inside: avoid; }
  .cv-m24-job-head { break-after: avoid-page; }
}

/* ---- fix: en los modelos 21-40, varios elementos ponen "display: flex"
   directo en la misma clase que después se oculta con el atributo
   [hidden] (JS hace foto.hidden=true / bloque.hidden=true) — como ambas
   reglas tienen la misma especificidad, gana la que está declarada
   después en la hoja de estilos y el elemento queda visible igual. El
   resto de los modelos ya agrega un "[hidden]{display:none}" específico
   para evitar justo esto (ver .cv-m21-bloque[hidden] más arriba, por
   ejemplo) — acá se completa para los que faltaban. */
.cv-m23-foto-placeholder[hidden],
.cv-m24-contacto[hidden],
.cv-m25-foto-placeholder[hidden],
.cv-m26-foto-placeholder[hidden],
.cv-m27-foto-placeholder[hidden],
.cv-m28-foto-placeholder[hidden],
.cv-m29-contacto[hidden],
.cv-m34-foto-placeholder[hidden],
.cv-m35-foto-placeholder[hidden],
.cv-m36-foto-placeholder[hidden],
.cv-m37-foto-placeholder[hidden],
.cv-m38-foto-placeholder[hidden],
.cv-m39-foto-placeholder[hidden],
.cv-m40-foto-placeholder[hidden] { display: none; }

/* ============================================================
   Modelos 41-45 — gimnasio / entrenamiento personal
   Tipografía en mayúsculas y condensada, mucho contraste y
   bloques macizos: el lenguaje visual de un gym.
   ============================================================ */

/* ---- Modelo 41 — Personal Trainer (ficha de rutina) ---- */
.cv-m41-header {
  position: relative; display: flex; align-items: center; gap: 6mm;
  padding: 9mm 12mm; overflow: hidden;
}
.cv-m41-header-fondo {
  position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(115deg, #15161c 0%, #1e2029 55%, var(--cv-acento) 300%);
}
.cv-m41-header-fondo::after {
  content: ""; position: absolute; inset: 0;
  background: repeating-linear-gradient(115deg, transparent 0 9mm, rgba(255,255,255,0.03) 9mm 10mm);
}
.cv-m41-foto-aro {
  position: relative; z-index: 1; flex: none;
  width: calc(31mm * var(--cv-escala-foto, 1));
  height: calc(31mm * var(--cv-escala-foto, 1));
  border-radius: 50%;
  padding: 1.6mm;
  background: conic-gradient(from 210deg, var(--cv-acento), var(--cv-acento-2), var(--cv-acento));
  display: flex; align-items: center; justify-content: center;
}
.cv-m41-foto, .cv-m41-foto-placeholder {
  width: 100%; height: 100%; border-radius: 50%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(11mm * var(--cv-escala-foto, 1));
  background: #0f1015;
}
.cv-m41-foto[hidden], .cv-m41-foto-placeholder[hidden] { display: none; }
.cv-m41-header-texto { position: relative; z-index: 1; min-width: 0; }
.cv-m41-nombre {
  font-family: var(--cv-font-titulos); font-size: 27pt; line-height: 1;
  margin: 0; text-transform: uppercase; letter-spacing: 0.01em; color: #fff;
}
.cv-m41-puesto {
  margin-top: 1.5mm; font-size: 10.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.16em; color: var(--cv-acento);
}
.cv-m41-subtitulo { margin-top: 0.8mm; font-size: 8.5pt; color: #b9bdc9; }
.cv-m41-subtitulo[hidden] { display: none; }
.cv-m41-contacto {
  margin-top: 3mm; display: flex; flex-wrap: wrap; gap: 2mm 5mm;
  font-size: 8pt; color: #d6d9e2;
}
.cv-m41-contacto-item { display: inline-flex; align-items: center; gap: 1.4mm; }
.cv-m41-contacto-ico {
  color: var(--cv-acento); flex-shrink: 0;
  font-size: calc(1em * var(--cv-escala-iconos, 1));
}

.cv-m41-destacados { padding: 5mm 12mm; background: var(--cv-acento); }
.cv-m41-destacados[hidden] { display: none; }
.cv-m41-destacados-rotulo {
  font-family: var(--cv-font-titulos); font-size: 8pt; text-transform: uppercase;
  letter-spacing: 0.22em; color: var(--cv-acento-texto); opacity: 0.75; margin-bottom: 2mm;
}
.cv-m41-destacados-grilla { display: grid; grid-template-columns: repeat(3, 1fr); gap: 3mm 5mm; }
.cv-m41-destacado {
  font-size: 8pt; line-height: 1.35; font-weight: 600;
  color: var(--cv-acento-texto); position: relative; padding-left: 4mm;
}
.cv-m41-destacado-marca {
  position: absolute; left: 0; top: 1.4mm; width: 2.2mm; height: 2.2mm;
  background: var(--cv-acento-texto); transform: rotate(45deg); opacity: 0.8;
}

.cv-m41-cuerpo { display: grid; grid-template-columns: 1fr 62mm; gap: 8mm; padding: 8mm 12mm 10mm; }
.cv-m41-titulo {
  font-family: var(--cv-font-titulos); font-size: 12pt; text-transform: uppercase;
  letter-spacing: 0.1em; margin: 0 0 3mm; color: var(--cv-texto);
  display: flex; align-items: center; gap: 2.5mm;
}
.cv-m41-titulo-barra {
  width: 6mm; height: 1.6mm; background: var(--cv-acento); flex: none;
}
.cv-m41-titulo-lat {
  font-family: var(--cv-font-titulos); font-size: 9.5pt; text-transform: uppercase;
  letter-spacing: 0.14em; margin: 0 0 2.5mm; color: var(--cv-texto);
  border-bottom: 1.4mm solid var(--cv-acento); padding-bottom: 1.5mm;
}
.cv-m41-principal section, .cv-m41-lateral section { margin-bottom: 6mm; }
.cv-m41-principal section:last-child, .cv-m41-lateral section:last-child { margin-bottom: 0; }
.cv-m41-perfil { font-size: 9pt; line-height: 1.55; color: var(--cv-texto); margin: 0; }

.cv-m41-bloque { display: flex; gap: 4mm; margin-bottom: 5mm; }
.cv-m41-bloque:last-child { margin-bottom: 0; }
.cv-m41-bloque-num {
  font-family: var(--cv-font-titulos); font-size: 15pt; line-height: 1;
  color: var(--cv-acento); flex: none; width: 9mm; padding-top: 0.5mm;
}
.cv-m41-bloque-cont { min-width: 0; flex: 1; border-left: 0.5mm solid var(--cv-linea); padding-left: 4mm; }
.cv-m41-job-rol {
  font-family: var(--cv-font-titulos); font-size: 11pt; text-transform: uppercase;
  letter-spacing: 0.03em; color: var(--cv-texto); line-height: 1.15;
}
.cv-m41-job-meta {
  display: flex; flex-wrap: wrap; gap: 1mm 3mm; align-items: baseline;
  font-size: 8.5pt; margin-top: 0.8mm;
}
.cv-m41-job-empresa { color: var(--cv-acento); font-weight: 700; }
.cv-m41-job-fecha {
  color: var(--cv-tenue); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em;
}
.cv-m41-job-desc { font-size: 8.5pt; line-height: 1.5; color: var(--cv-texto); margin: 1.5mm 0 0; }
.cv-m41-job-bullets { margin: 1.5mm 0 0; padding-left: 4.5mm; font-size: 8.5pt; line-height: 1.5; }
.cv-m41-job-bullets li { margin-bottom: 0.8mm; }
.cv-m41-job-bullets li::marker { color: var(--cv-acento); }
.cv-m41-job-herr { margin-top: 1.8mm; display: flex; flex-wrap: wrap; gap: 1.5mm 3mm; font-size: 7.5pt; color: var(--cv-tenue); }
.cv-m41-herr-grupo b { color: var(--cv-texto); }

.cv-m41-discos { display: flex; flex-wrap: wrap; gap: 1.8mm; }
.cv-m41-disco {
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  padding: 1.4mm 3mm; border-radius: 999px;
  background: var(--cv-acento); color: var(--cv-acento-texto);
}
.cv-m41-disco-alt {
  background: transparent; color: var(--cv-texto);
  border: 0.4mm solid var(--cv-acento-2);
}
.cv-m41-idiomas { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; }
.cv-m41-idiomas li {
  display: flex; justify-content: space-between; gap: 2mm;
  padding: 1.2mm 0; border-bottom: 0.2mm dashed var(--cv-linea);
}
.cv-m41-idiomas li:last-child { border-bottom: 0; }
.cv-m41-nivel { color: var(--cv-acento); font-weight: 700; }

.cv-m41-edu { margin-bottom: 3mm; }
.cv-m41-edu:last-child { margin-bottom: 0; }
.cv-m41-edu-head { display: flex; justify-content: space-between; gap: 3mm; align-items: baseline; }
.cv-m41-edu-inst { font-weight: 700; font-size: 9pt; color: var(--cv-texto); }
.cv-m41-edu-fecha { font-size: 7.5pt; color: var(--cv-tenue); white-space: nowrap; }
.cv-m41-edu-bullets { margin: 1mm 0 0; padding-left: 4.5mm; font-size: 8pt; line-height: 1.45; color: var(--cv-tenue); }
.cv-m41-cert, .cv-m41-ref { margin-bottom: 2.5mm; font-size: 8pt; }
.cv-m41-cert:last-child, .cv-m41-ref:last-child { margin-bottom: 0; }
.cv-m41-cert-titulo, .cv-m41-ref-nombre { font-weight: 700; color: var(--cv-texto); }
.cv-m41-cert-sub, .cv-m41-ref-rol, .cv-m41-ref-dato { color: var(--cv-tenue); font-size: 7.5pt; }

@media print {
  /* sólo piezas chicas: un wrapper de sección o un job entero con muchos
     bullets es más alto que una página y deja un hueco enorme */
  .cv-m41-edu, .cv-m41-cert, .cv-m41-ref { break-inside: avoid; }
  .cv-m41-job-bullets li, .cv-m41-destacado { break-inside: avoid; }
  .cv-m41-job-head { break-after: avoid-page; }
}

/* ---- Modelo 42 — Dorsal de competencia ---- */
.cv-m42-header {
  display: flex; align-items: center; gap: 6mm;
  padding: 10mm 12mm 7mm; background: var(--cv-fondo-cuerpo);
}
.cv-m42-dorsal {
  flex: none; width: 34mm; padding: 3mm 2mm;
  border: 0.9mm solid var(--cv-texto); border-radius: 2mm;
  text-align: center; background: #fff;
}
.cv-m42-dorsal-marca {
  font-size: 6.5pt; font-weight: 700; letter-spacing: 0.3em;
  text-transform: uppercase; color: var(--cv-tenue);
}
.cv-m42-dorsal-num {
  font-family: var(--cv-font-titulos); font-size: 30pt; line-height: 1;
  letter-spacing: 0.02em; color: var(--cv-texto); margin: 1mm 0;
}
.cv-m42-dorsal-pie {
  font-size: 6.5pt; text-transform: uppercase; letter-spacing: 0.12em;
  color: var(--cv-acento); font-weight: 700;
  border-top: 0.3mm solid var(--cv-linea); padding-top: 1.2mm;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cv-m42-header-texto { flex: 1; min-width: 0; }
.cv-m42-nombre {
  font-family: var(--cv-font-titulos); font-size: 29pt; line-height: 0.98;
  margin: 0; text-transform: uppercase; color: var(--cv-texto);
}
.cv-m42-puesto {
  margin-top: 1.5mm; font-size: 10pt; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.14em; color: var(--cv-acento);
}
.cv-m42-subtitulo { margin-top: 0.8mm; font-size: 8.5pt; color: var(--cv-tenue); }
.cv-m42-subtitulo[hidden] { display: none; }
.cv-m42-foto-marco {
  flex: none;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 1.5mm; overflow: hidden;
  border: 0.8mm solid var(--cv-texto);
  display: flex; align-items: center; justify-content: center;
  background: #eceef2;
}
.cv-m42-foto, .cv-m42-foto-placeholder {
  width: 100%; height: 100%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(10mm * var(--cv-escala-foto, 1));
}
.cv-m42-foto[hidden], .cv-m42-foto-placeholder[hidden] { display: none; }

/* la banda a cuadros de la línea de meta */
.cv-m42-meta {
  height: 5mm;
  background:
    repeating-conic-gradient(var(--cv-texto) 0% 25%, #ffffff 0% 50%) 0 0 / 5mm 5mm;
}
.cv-m42-contacto {
  display: flex; flex-wrap: wrap; gap: 1.5mm 5mm;
  padding: 3mm 12mm; font-size: 8pt;
  background: var(--cv-texto); color: #fff;
}
.cv-m42-contacto-item { display: inline-flex; align-items: center; gap: 1.4mm; }
.cv-m42-contacto-ico {
  color: var(--cv-acento); flex-shrink: 0;
  font-size: calc(1em * var(--cv-escala-iconos, 1));
}

.cv-m42-cuerpo { padding: 7mm 12mm 10mm; }
.cv-m42-cuerpo section { margin-bottom: 6mm; }
.cv-m42-cuerpo section:last-child { margin-bottom: 0; }
.cv-m42-titulo {
  font-family: var(--cv-font-titulos); font-size: 11.5pt; text-transform: uppercase;
  letter-spacing: 0.12em; margin: 0 0 3mm; color: var(--cv-texto);
  padding-bottom: 1.5mm; position: relative;
}
.cv-m42-titulo::after {
  content: ""; position: absolute; left: 0; bottom: 0; width: 100%; height: 1.2mm;
  background: repeating-conic-gradient(var(--cv-acento) 0% 25%, transparent 0% 50%) 0 0 / 2.4mm 2.4mm;
}
.cv-m42-perfil { font-size: 9pt; line-height: 1.55; color: var(--cv-texto); margin: 0; }
.cv-m42-columnas { display: grid; grid-template-columns: 1fr 1fr; gap: 6mm; }

.cv-m42-vuelta {
  padding: 3mm 0 3mm 4mm; margin-bottom: 4mm;
  border-left: 1.2mm solid var(--cv-acento);
}
.cv-m42-vuelta:last-child { margin-bottom: 0; }
.cv-m42-job-head { display: flex; justify-content: space-between; gap: 3mm; align-items: baseline; }
.cv-m42-job-rol {
  font-family: var(--cv-font-titulos); font-size: 11pt; text-transform: uppercase;
  color: var(--cv-texto); line-height: 1.15;
}
.cv-m42-job-fecha {
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--cv-acento-texto); background: var(--cv-acento);
  padding: 0.8mm 2mm; border-radius: 999px; white-space: nowrap;
}
.cv-m42-job-empresa { font-size: 8.5pt; font-weight: 600; color: var(--cv-tenue); margin-top: 0.8mm; }
.cv-m42-job-desc { font-size: 8.5pt; line-height: 1.5; margin: 1.5mm 0 0; color: var(--cv-texto); }
.cv-m42-job-bullets { margin: 1.5mm 0 0; padding-left: 4.5mm; font-size: 8.5pt; line-height: 1.5; }
.cv-m42-job-bullets li { margin-bottom: 0.8mm; }
.cv-m42-job-bullets li::marker { color: var(--cv-acento); }
.cv-m42-job-herr { margin-top: 1.8mm; display: flex; flex-wrap: wrap; gap: 1.5mm 3mm; font-size: 7.5pt; color: var(--cv-tenue); }
.cv-m42-herr-grupo b { color: var(--cv-texto); }

.cv-m42-tags { display: flex; flex-wrap: wrap; gap: 1.8mm; }
.cv-m42-tag {
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  padding: 1.3mm 2.8mm; background: var(--cv-texto); color: #fff; border-radius: 1mm;
}
.cv-m42-tag-alt { background: transparent; color: var(--cv-texto); border: 0.4mm solid var(--cv-texto); }
.cv-m42-idiomas, .cv-m42-logros { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; }
.cv-m42-idiomas li {
  display: flex; justify-content: space-between; gap: 2mm;
  padding: 1.2mm 0; border-bottom: 0.2mm dashed var(--cv-linea);
}
.cv-m42-idiomas li:last-child { border-bottom: 0; }
.cv-m42-nivel { color: var(--cv-acento); font-weight: 700; }
.cv-m42-logros { padding-left: 4.5mm; list-style: disc; line-height: 1.5; }
.cv-m42-logros li::marker { color: var(--cv-acento); }
.cv-m42-edu { margin-bottom: 3mm; }
.cv-m42-edu:last-child { margin-bottom: 0; }
.cv-m42-edu-inst { font-weight: 700; font-size: 9pt; color: var(--cv-texto); }
.cv-m42-edu-fecha { font-size: 7.5pt; color: var(--cv-tenue); }
.cv-m42-edu-bullets { margin: 1mm 0 0; padding-left: 4.5mm; font-size: 8pt; line-height: 1.45; color: var(--cv-tenue); }
.cv-m42-cert, .cv-m42-ref { margin-bottom: 2.5mm; font-size: 8pt; }
.cv-m42-cert:last-child, .cv-m42-ref:last-child { margin-bottom: 0; }
.cv-m42-cert-titulo, .cv-m42-ref-nombre { font-weight: 700; color: var(--cv-texto); }
.cv-m42-cert-sub, .cv-m42-ref-rol, .cv-m42-ref-dato { color: var(--cv-tenue); font-size: 7.5pt; }

@media print {
  .cv-m42-edu, .cv-m42-cert, .cv-m42-ref { break-inside: avoid; }
  .cv-m42-job-bullets li, .cv-m42-logros li { break-inside: avoid; }
  .cv-m42-job-head { break-after: avoid-page; }
}

/* ---- Modelo 43 — Panel de métricas (app de fitness) ---- */
.cv-pagina[data-modelo="modelo43"] { background: #0e1014; }
.cv-m43-header {
  position: relative; padding: 10mm 11mm 8mm; overflow: hidden;
  background: radial-gradient(120% 90% at 82% 0%, rgba(255,255,255,0.07), transparent 60%), #14161d;
  display: grid; grid-template-columns: auto 1fr; gap: 2mm 6mm; align-items: center;
}
.cv-m43-anillos { position: absolute; right: -14mm; top: -16mm; width: 58mm; height: 58mm; z-index: 0; }
.cv-m43-anillo { position: absolute; inset: 0; border-radius: 50%; border: 2.4mm solid; }
.cv-m43-anillo-1 { border-color: var(--cv-acento); opacity: 0.5; }
.cv-m43-anillo-2 { inset: 8mm; border-color: var(--cv-acento-2); opacity: 0.38; }
.cv-m43-foto-marco {
  position: relative; z-index: 1; grid-row: span 1;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 50%; overflow: hidden;
  border: 0.8mm solid var(--cv-acento);
  display: flex; align-items: center; justify-content: center;
  background: #1c1f28;
}
.cv-m43-foto, .cv-m43-foto-placeholder {
  width: 100%; height: 100%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(10mm * var(--cv-escala-foto, 1));
}
.cv-m43-foto[hidden], .cv-m43-foto-placeholder[hidden] { display: none; }
.cv-m43-header-texto { position: relative; z-index: 1; min-width: 0; }
.cv-m43-nombre {
  font-family: var(--cv-font-titulos); font-size: 24pt; line-height: 1.02;
  margin: 0; color: #fff; text-transform: uppercase;
}
.cv-m43-puesto {
  margin-top: 1.2mm; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.14em; color: var(--cv-acento);
}
.cv-m43-subtitulo { margin-top: 0.8mm; font-size: 8.5pt; color: #9aa0ad; }
.cv-m43-subtitulo[hidden] { display: none; }
.cv-m43-contacto {
  position: relative; z-index: 1; grid-column: 1 / -1;
  display: flex; flex-wrap: wrap; gap: 1.5mm 4.5mm; font-size: 8pt; color: #c6cad3;
}
.cv-m43-contacto-item { display: inline-flex; align-items: center; gap: 1.4mm; }
.cv-m43-contacto-ico {
  color: var(--cv-acento); flex-shrink: 0;
  font-size: calc(1em * var(--cv-escala-iconos, 1));
}

.cv-m43-cuerpo {
  display: grid; grid-template-columns: 1fr 1fr; gap: 4mm;
  padding: 7mm 11mm 10mm; background: #0e1014;
}
.cv-m43-tarjeta {
  background: #171a22; border: 0.3mm solid #262a35; border-radius: 3mm;
  padding: 4mm 4.5mm;
}
.cv-m43-tarjeta[hidden] { display: none; }
.cv-m43-ancha { grid-column: 1 / -1; }
.cv-m43-tarjeta-rotulo {
  font-family: var(--cv-font-titulos); font-size: 8pt; text-transform: uppercase;
  letter-spacing: 0.2em; color: var(--cv-acento); margin-bottom: 2.5mm;
}
.cv-m43-perfil { font-size: 9pt; line-height: 1.55; color: #d7dae2; margin: 0; }

.cv-m43-sesion { padding: 3mm 0; border-bottom: 0.3mm solid #262a35; }
.cv-m43-sesion:first-child { padding-top: 0; }
.cv-m43-sesion:last-child { border-bottom: 0; padding-bottom: 0; }
.cv-m43-job-head { display: flex; justify-content: space-between; gap: 3mm; align-items: center; }
.cv-m43-job-rol {
  font-family: var(--cv-font-titulos); font-size: 11pt; color: #fff;
  text-transform: uppercase; line-height: 1.15;
}
.cv-m43-job-pill {
  font-size: 7pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em;
  padding: 0.9mm 2.4mm; border-radius: 999px; white-space: nowrap;
  background: rgba(255,255,255,0.08); color: var(--cv-acento);
  border: 0.25mm solid var(--cv-acento);
}
.cv-m43-job-empresa { font-size: 8.5pt; font-weight: 600; color: var(--cv-acento-2); margin-top: 0.8mm; }
.cv-m43-job-desc { font-size: 8.5pt; line-height: 1.5; margin: 1.5mm 0 0; color: #c2c7d1; }
.cv-m43-job-bullets { margin: 1.5mm 0 0; padding-left: 4.5mm; font-size: 8.5pt; line-height: 1.5; color: #c2c7d1; }
.cv-m43-job-bullets li { margin-bottom: 0.8mm; }
.cv-m43-job-bullets li::marker { color: var(--cv-acento); }
.cv-m43-job-herr { margin-top: 1.8mm; display: flex; flex-wrap: wrap; gap: 1.5mm 3mm; font-size: 7.5pt; color: #8e94a1; }
.cv-m43-herr-grupo b { color: #d7dae2; }

.cv-m43-chips { display: flex; flex-wrap: wrap; gap: 1.6mm; }
.cv-m43-chip {
  font-size: 7.5pt; font-weight: 600; padding: 1.3mm 2.8mm; border-radius: 999px;
  background: rgba(255,255,255,0.07); color: #e3e6ec;
  border: 0.25mm solid rgba(255,255,255,0.14);
}
.cv-m43-chip-alt { border-color: var(--cv-acento-2); color: var(--cv-acento-2); }
.cv-m43-idiomas, .cv-m43-logros { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; color: #d7dae2; }
.cv-m43-idiomas li {
  display: flex; justify-content: space-between; gap: 2mm;
  padding: 1.2mm 0; border-bottom: 0.25mm solid #262a35;
}
.cv-m43-idiomas li:last-child { border-bottom: 0; }
.cv-m43-nivel { color: var(--cv-acento); font-weight: 700; }
.cv-m43-logros { padding-left: 4.5mm; list-style: disc; line-height: 1.5; }
.cv-m43-logros li::marker { color: var(--cv-acento); }
.cv-m43-edu { margin-bottom: 3mm; }
.cv-m43-edu:last-child { margin-bottom: 0; }
.cv-m43-edu-inst { font-weight: 700; font-size: 9pt; color: #fff; }
.cv-m43-edu-fecha { font-size: 7.5pt; color: #8e94a1; }
.cv-m43-edu-bullets { margin: 1mm 0 0; padding-left: 4.5mm; font-size: 8pt; line-height: 1.45; color: #a8aeba; }
.cv-m43-cert { margin-bottom: 2.5mm; font-size: 8pt; }
.cv-m43-cert:last-child { margin-bottom: 0; }
.cv-m43-cert-titulo { font-weight: 700; color: #fff; }
.cv-m43-cert-sub { color: #8e94a1; font-size: 7.5pt; }
.cv-m43-refs { display: grid; grid-template-columns: repeat(2, 1fr); gap: 3mm; }
.cv-m43-ref { font-size: 8pt; }
.cv-m43-ref-nombre { font-weight: 700; color: #fff; }
.cv-m43-ref-rol, .cv-m43-ref-dato { color: #8e94a1; font-size: 7.5pt; }

@media print {
  .cv-m43-edu, .cv-m43-cert, .cv-m43-ref { break-inside: avoid; }
  .cv-m43-job-bullets li, .cv-m43-logros li { break-inside: avoid; }
  .cv-m43-job-head { break-after: avoid-page; }
  /* las tarjetas chicas sí pueden viajar enteras; las anchas no, que son
     las que llevan la experiencia larga */
  .cv-m43-tarjeta:not(.cv-m43-ancha) { break-inside: avoid; }
}

/* ---- Modelo 44 — Sala de hierro (discos y placas) ---- */
.cv-m44-header {
  position: relative; display: flex; align-items: center; gap: 5mm;
  padding: 8mm 12mm 7mm; background: #17181c; overflow: hidden;
}
.cv-m44-barra {
  position: absolute; left: 0; right: 0; top: 50%; transform: translateY(-50%);
  height: 12mm; display: flex; align-items: center; z-index: 0; opacity: 0.22;
}
.cv-m44-eje { flex: 1; height: 2.2mm; background: linear-gradient(180deg, #8d93a1, #4c505a); }
.cv-m44-disco-deco {
  width: 7mm; height: 12mm; border-radius: 1.2mm; flex: none;
  background: linear-gradient(180deg, var(--cv-acento), var(--cv-acento-2));
}
.cv-m44-placa {
  position: relative; z-index: 1; flex: 1; min-width: 0;
  background: #101114; border: 0.7mm solid var(--cv-acento);
  padding: 4mm 5mm; border-radius: 1.5mm;
}
.cv-m44-nombre {
  font-family: var(--cv-font-titulos); font-size: 25pt; line-height: 1;
  margin: 0; text-transform: uppercase; color: #fff; letter-spacing: 0.02em;
}
.cv-m44-puesto {
  margin-top: 1.4mm; font-size: 9.5pt; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.18em; color: var(--cv-acento);
}
.cv-m44-subtitulo { margin-top: 0.8mm; font-size: 8.5pt; color: #a7abb6; }
.cv-m44-subtitulo[hidden] { display: none; }
.cv-m44-foto-marco {
  position: relative; z-index: 1; flex: none;
  width: calc(29mm * var(--cv-escala-foto, 1));
  height: calc(29mm * var(--cv-escala-foto, 1));
  border-radius: 50%; overflow: hidden;
  border: 1mm solid #3a3e48;
  box-shadow: 0 0 0 0.6mm var(--cv-acento);
  display: flex; align-items: center; justify-content: center;
  background: #22242b;
}
.cv-m44-foto, .cv-m44-foto-placeholder {
  width: 100%; height: 100%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(10mm * var(--cv-escala-foto, 1));
}
.cv-m44-foto[hidden], .cv-m44-foto-placeholder[hidden] { display: none; }

.cv-m44-contacto {
  display: flex; flex-wrap: wrap; gap: 1.5mm 5mm;
  padding: 3mm 12mm; font-size: 8pt;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
}
.cv-m44-contacto-item { display: inline-flex; align-items: center; gap: 1.4mm; }
.cv-m44-contacto-ico {
  flex-shrink: 0; opacity: 0.85;
  font-size: calc(1em * var(--cv-escala-iconos, 1));
}

.cv-m44-cuerpo { padding: 7mm 12mm 10mm; }
.cv-m44-cuerpo section { margin-bottom: 6mm; }
.cv-m44-cuerpo section:last-child { margin-bottom: 0; }
.cv-m44-titulo {
  font-family: var(--cv-font-titulos); font-size: 11.5pt; text-transform: uppercase;
  letter-spacing: 0.12em; margin: 0 0 3mm; color: var(--cv-texto);
  border-left: 1.8mm solid var(--cv-acento); padding-left: 3mm;
}
.cv-m44-perfil { font-size: 9pt; line-height: 1.55; color: var(--cv-texto); margin: 0; }
.cv-m44-columnas { display: grid; grid-template-columns: 1fr 1fr; gap: 6mm; }

/* el rack: cada skill es un disco con su agujero al medio */
.cv-m44-rack { display: flex; flex-wrap: wrap; gap: 2mm; align-items: center; }
.cv-m44-placa-skill {
  display: inline-flex; align-items: center; gap: 1.6mm;
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  padding: 1.5mm 3mm 1.5mm 2mm; border-radius: 1mm;
  background: linear-gradient(180deg, #2c2f37, #1b1d23); color: #fff;
  border: 0.3mm solid #444955;
}
.cv-m44-placa-hueco {
  width: 2.2mm; height: 2.2mm; border-radius: 50%; flex: none;
  background: var(--cv-acento);
}
.cv-m44-placa-alt { background: linear-gradient(180deg, #f2f3f6, #dfe2e8); color: #1b1d23; border-color: #c3c7d0; }
.cv-m44-placa-alt .cv-m44-placa-hueco { background: var(--cv-acento-2); }

.cv-m44-serie {
  margin-bottom: 4.5mm; padding-bottom: 4.5mm;
  border-bottom: 0.3mm solid var(--cv-linea);
}
.cv-m44-serie:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: 0; }
.cv-m44-job-head { display: flex; justify-content: space-between; gap: 3mm; align-items: flex-start; }
.cv-m44-job-rol {
  font-family: var(--cv-font-titulos); font-size: 11pt; text-transform: uppercase;
  color: var(--cv-texto); line-height: 1.15;
}
.cv-m44-job-empresa { font-size: 8.5pt; font-weight: 600; color: var(--cv-acento); margin-top: 0.6mm; }
.cv-m44-job-fecha {
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--cv-tenue); white-space: nowrap; padding-top: 0.8mm;
}
.cv-m44-job-desc { font-size: 8.5pt; line-height: 1.5; margin: 1.5mm 0 0; color: var(--cv-texto); }
.cv-m44-job-bullets { margin: 1.5mm 0 0; padding-left: 4.5mm; font-size: 8.5pt; line-height: 1.5; }
.cv-m44-job-bullets li { margin-bottom: 0.8mm; }
.cv-m44-job-bullets li::marker { color: var(--cv-acento); }
.cv-m44-job-herr { margin-top: 1.8mm; display: flex; flex-wrap: wrap; gap: 1.5mm 3mm; font-size: 7.5pt; color: var(--cv-tenue); }
.cv-m44-herr-grupo b { color: var(--cv-texto); }

.cv-m44-idiomas, .cv-m44-logros { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; }
.cv-m44-idiomas li {
  display: flex; justify-content: space-between; gap: 2mm;
  padding: 1.2mm 0; border-bottom: 0.2mm dashed var(--cv-linea);
}
.cv-m44-idiomas li:last-child { border-bottom: 0; }
.cv-m44-nivel { color: var(--cv-acento); font-weight: 700; }
.cv-m44-logros { padding-left: 4.5mm; list-style: square; line-height: 1.5; }
.cv-m44-logros li::marker { color: var(--cv-acento); }
.cv-m44-edu { margin-bottom: 3mm; }
.cv-m44-edu:last-child { margin-bottom: 0; }
.cv-m44-edu-inst { font-weight: 700; font-size: 9pt; color: var(--cv-texto); }
.cv-m44-edu-fecha { font-size: 7.5pt; color: var(--cv-tenue); }
.cv-m44-edu-bullets { margin: 1mm 0 0; padding-left: 4.5mm; font-size: 8pt; line-height: 1.45; color: var(--cv-tenue); }
.cv-m44-cert, .cv-m44-ref { margin-bottom: 2.5mm; font-size: 8pt; }
.cv-m44-cert:last-child, .cv-m44-ref:last-child { margin-bottom: 0; }
.cv-m44-cert-titulo, .cv-m44-ref-nombre { font-weight: 700; color: var(--cv-texto); }
.cv-m44-cert-sub, .cv-m44-ref-rol, .cv-m44-ref-dato { color: var(--cv-tenue); font-size: 7.5pt; }

@media print {
  .cv-m44-edu, .cv-m44-cert, .cv-m44-ref { break-inside: avoid; }
  .cv-m44-job-bullets li, .cv-m44-logros li { break-inside: avoid; }
  .cv-m44-job-head { break-after: avoid-page; }
}

/* ---- Modelo 45 — Pizarra de clases (bootcamp) ---- */
.cv-pagina[data-modelo="modelo45"] { background: #12211c; }
.cv-m45-header {
  display: flex; align-items: center; justify-content: space-between; gap: 5mm;
  padding: 9mm 12mm 6mm;
  background: #13231d;
  background-image: radial-gradient(60% 40% at 20% 10%, rgba(255,255,255,0.05), transparent 70%);
}
.cv-m45-header-izq { min-width: 0; }
.cv-m45-rotulo {
  display: inline-block; font-size: 7pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.3em;
  color: var(--cv-acento-texto); background: var(--cv-acento);
  padding: 1mm 2.5mm; border-radius: 0.8mm; margin-bottom: 2mm;
}
.cv-m45-nombre {
  font-family: var(--cv-font-titulos); font-size: 26pt; line-height: 1;
  margin: 0; color: #f4f6f3; text-transform: uppercase;
}
.cv-m45-puesto {
  margin-top: 1.4mm; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.15em; color: var(--cv-acento-2);
}
.cv-m45-subtitulo { margin-top: 0.8mm; font-size: 8.5pt; color: #9fb0a8; }
.cv-m45-subtitulo[hidden] { display: none; }
.cv-m45-foto-marco {
  flex: none;
  width: calc(28mm * var(--cv-escala-foto, 1));
  height: calc(28mm * var(--cv-escala-foto, 1));
  border-radius: 1.5mm; overflow: hidden;
  border: 0.6mm dashed rgba(255,255,255,0.35);
  padding: 1.2mm; background: rgba(255,255,255,0.05);
  display: flex; align-items: center; justify-content: center;
}
.cv-m45-foto, .cv-m45-foto-placeholder {
  width: 100%; height: 100%; object-fit: cover; border-radius: 1mm;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(9mm * var(--cv-escala-foto, 1));
  background: rgba(0,0,0,0.25);
}
.cv-m45-foto[hidden], .cv-m45-foto-placeholder[hidden] { display: none; }

/* el trazo de tiza que separa la cabecera del cuerpo */
.cv-m45-tiza {
  height: 0.8mm; margin: 0 12mm;
  background: repeating-linear-gradient(90deg,
    rgba(255,255,255,0.45) 0 6mm, rgba(255,255,255,0.12) 6mm 8mm);
}
.cv-m45-contacto {
  display: flex; flex-wrap: wrap; gap: 1.5mm 5mm;
  padding: 3mm 12mm 0; font-size: 8pt; color: #cfdbd5;
}
.cv-m45-contacto-item { display: inline-flex; align-items: center; gap: 1.4mm; }
.cv-m45-contacto-ico {
  color: var(--cv-acento); flex-shrink: 0;
  font-size: calc(1em * var(--cv-escala-iconos, 1));
}

.cv-m45-cuerpo { padding: 5mm 12mm 10mm; }
.cv-m45-panel {
  position: relative; margin-bottom: 5mm;
  border: 0.3mm solid rgba(255,255,255,0.16); border-radius: 2mm;
  padding: 5mm 4.5mm 4mm;
  background: rgba(255,255,255,0.035);
}
.cv-m45-panel[hidden] { display: none; }
.cv-m45-panel:last-child { margin-bottom: 0; }
.cv-m45-panel-tab {
  position: absolute; top: -2.2mm; left: 4mm;
  font-family: var(--cv-font-titulos); font-size: 7.5pt;
  text-transform: uppercase; letter-spacing: 0.18em;
  background: var(--cv-acento); color: var(--cv-acento-texto);
  padding: 0.8mm 2.5mm; border-radius: 0.8mm;
}
.cv-m45-perfil { font-size: 9pt; line-height: 1.55; color: #dce5e0; margin: 0; }
.cv-m45-columnas { display: grid; grid-template-columns: 1fr 1fr; gap: 5mm; }
.cv-m45-columnas .cv-m45-panel { margin-bottom: 0; }
.cv-m45-panel-ancho { grid-column: 1 / -1; }

/* la agenda: la fecha a la izquierda como el horario de una clase */
.cv-m45-turno { display: flex; gap: 4mm; padding: 2.5mm 0; border-top: 0.25mm dashed rgba(255,255,255,0.18); }
.cv-m45-turno:first-child { border-top: 0; padding-top: 0; }
.cv-m45-turno-hora {
  flex: none; width: 26mm; font-size: 7.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.06em; color: var(--cv-acento);
  padding-top: 0.6mm;
}
.cv-m45-turno-cont { min-width: 0; flex: 1; }
.cv-m45-job-rol {
  font-family: var(--cv-font-titulos); font-size: 10.5pt; text-transform: uppercase;
  color: #f4f6f3; line-height: 1.15;
}
.cv-m45-job-empresa { font-size: 8.5pt; font-weight: 600; color: var(--cv-acento-2); margin-top: 0.5mm; }
.cv-m45-job-desc { font-size: 8.5pt; line-height: 1.5; margin: 1.5mm 0 0; color: #c8d4ce; }
.cv-m45-job-bullets { margin: 1.5mm 0 0; padding-left: 4.5mm; font-size: 8.5pt; line-height: 1.5; color: #c8d4ce; }
.cv-m45-job-bullets li { margin-bottom: 0.8mm; }
.cv-m45-job-bullets li::marker { color: var(--cv-acento); }
.cv-m45-job-herr { margin-top: 1.8mm; display: flex; flex-wrap: wrap; gap: 1.5mm 3mm; font-size: 7.5pt; color: #93a49c; }
.cv-m45-herr-grupo b { color: #dce5e0; }

.cv-m45-clases { display: flex; flex-wrap: wrap; gap: 1.8mm; }
.cv-m45-clase {
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em;
  padding: 1.3mm 2.8mm; border-radius: 0.8mm;
  background: var(--cv-acento); color: var(--cv-acento-texto);
}
.cv-m45-clase-alt {
  background: transparent; color: #dce5e0;
  border: 0.3mm dashed rgba(255,255,255,0.4);
}
.cv-m45-idiomas, .cv-m45-logros { list-style: none; margin: 0; padding: 0; font-size: 8.5pt; color: #dce5e0; }
.cv-m45-idiomas li {
  display: flex; justify-content: space-between; gap: 2mm;
  padding: 1.2mm 0; border-bottom: 0.25mm dashed rgba(255,255,255,0.15);
}
.cv-m45-idiomas li:last-child { border-bottom: 0; }
.cv-m45-nivel { color: var(--cv-acento); font-weight: 700; }
.cv-m45-logros { padding-left: 4.5mm; list-style: disc; line-height: 1.5; }
.cv-m45-logros li::marker { color: var(--cv-acento); }
.cv-m45-edu { margin-bottom: 3mm; }
.cv-m45-edu:last-child { margin-bottom: 0; }
.cv-m45-edu-inst { font-weight: 700; font-size: 9pt; color: #f4f6f3; }
.cv-m45-edu-fecha { font-size: 7.5pt; color: #93a49c; }
.cv-m45-edu-bullets { margin: 1mm 0 0; padding-left: 4.5mm; font-size: 8pt; line-height: 1.45; color: #b3c2bb; }
.cv-m45-cert { margin-bottom: 2.5mm; font-size: 8pt; }
.cv-m45-cert:last-child { margin-bottom: 0; }
.cv-m45-cert-titulo { font-weight: 700; color: #f4f6f3; }
.cv-m45-cert-sub { color: #93a49c; font-size: 7.5pt; }
.cv-m45-refs { display: grid; grid-template-columns: repeat(2, 1fr); gap: 3mm; }
.cv-m45-ref { font-size: 8pt; }
.cv-m45-ref-nombre { font-weight: 700; color: #f4f6f3; }
.cv-m45-ref-rol, .cv-m45-ref-dato { color: #93a49c; font-size: 7.5pt; }

@media print {
  .cv-m45-edu, .cv-m45-cert, .cv-m45-ref { break-inside: avoid; }
  .cv-m45-job-bullets li, .cv-m45-logros li { break-inside: avoid; }
  .cv-m45-job-rol { break-after: avoid-page; }
  /* los paneles de la grilla son chicos y entran enteros; el de
     experiencia no, que es el que crece */
  .cv-m45-columnas .cv-m45-panel { break-inside: avoid; }
}

/* ---------------- reencuadre de la foto ----------------
   Todas las fotos de los 45 modelos van con object-fit: cover, así que
   moviendo object-position se elige qué parte de la foto entra en el
   marco. Una sola regla acá evita tener que tocar las ~45 reglas de foto
   por separado. Las otras <img> de la app (el preview del uploader, las
   miniaturas de la galería) viven fuera de #cv-pagina, no las alcanza. */
#cv-pagina img[id$="-foto"] {
  object-position: var(--cv-foto-pos, 50% 50%);
}
/* Se arrastra directo sobre la vista previa. El cursor lo dice. */
#cv-pagina img[id$="-foto"]:not([hidden]) { cursor: grab; }
#cv-pagina.reencuadrando img[id$="-foto"] { cursor: grabbing; }
#cv-pagina.reencuadrando { user-select: none; }

@media print {
  /* el cursor no se imprime, pero por las dudas no dejamos rastros */
  #cv-pagina img[id$="-foto"] { cursor: default; }
}
.ajuste-pista { font-size: 0.72rem; color: var(--tenue); flex: 1; line-height: 1.3; }

/* ============================================================
   Cartas 7-11 — a juego con los modelos de gimnasio (41-45)
   ============================================================ */

/* ---- Carta 7 — Coach Studio (modelo 41) ---- */
.cv-c7-header {
  position: relative; display: flex; align-items: center; gap: 6mm;
  padding: 11mm 16mm; overflow: hidden;
}
.cv-c7-header-fondo {
  position: absolute; inset: 0; z-index: 0;
  background: linear-gradient(115deg, #15161c 0%, #1e2029 60%);
}
.cv-c7-header-fondo::after {
  content: ""; position: absolute; inset: 0;
  background: repeating-linear-gradient(115deg, transparent 0 9mm, rgba(255,255,255,0.03) 9mm 10mm);
}
.cv-c7-foto-aro {
  position: relative; z-index: 1; flex: none;
  width: calc(26mm * var(--cv-escala-foto, 1));
  height: calc(26mm * var(--cv-escala-foto, 1));
  border-radius: 50%; padding: 1.4mm;
  background: conic-gradient(from 210deg, var(--cv-acento), var(--cv-acento-2), var(--cv-acento));
  display: flex; align-items: center; justify-content: center;
}
.cv-c7-foto, .cv-c7-foto-placeholder {
  width: 100%; height: 100%; border-radius: 50%; object-fit: cover;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(9mm * var(--cv-escala-foto, 1));
  background: #0f1015;
}
.cv-c7-foto[hidden], .cv-c7-foto-placeholder[hidden] { display: none; }
.cv-c7-header-texto { position: relative; z-index: 1; min-width: 0; }
.cv-c7-nombre {
  font-family: var(--cv-font-titulos); font-size: 24pt; line-height: 1;
  margin: 0; text-transform: uppercase; color: #fff;
}
.cv-c7-puesto {
  margin: 1.5mm 0 0; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.16em; color: var(--cv-acento);
}
.cv-c7-contacto { margin: 2.5mm 0 0; font-size: 8.5pt; color: #cbd0da; }
.cv-c7-cuerpo-envoltorio { padding: 10mm 16mm 16mm; }
.cv-c7-meta {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 6mm;
  padding-bottom: 5mm; margin-bottom: 6mm;
  border-bottom: 1.4mm solid var(--cv-acento);
}
.cv-c7-destinatario { display: flex; flex-direction: column; gap: 0.6mm; font-size: 9.5pt; }
.cv-c7-destinatario span:first-child { font-weight: 700; color: var(--cv-texto); }
.cv-c7-destinatario span { color: var(--cv-tenue); }
.cv-c7-fecha {
  margin: 0; font-size: 8pt; font-weight: 700; white-space: nowrap;
  text-transform: uppercase; letter-spacing: 0.1em; color: var(--cv-tenue);
}
.cv-c7-saludo { margin: 0 0 4mm; font-size: 10.5pt; font-weight: 700; color: var(--cv-texto); }
.cv-c7-cuerpo { font-size: 10pt; line-height: 1.7; color: var(--cv-texto); }
.cv-c7-cuerpo p { margin: 0 0 4mm; }
.cv-c7-cuerpo p:last-child { margin-bottom: 0; }
.cv-c7-despedida { margin: 7mm 0 0; font-size: 10pt; color: var(--cv-texto); }
.cv-c7-firma {
  margin: 6mm 0 0; font-family: var(--cv-font-titulos); font-size: 13pt;
  text-transform: uppercase; color: var(--cv-texto);
}
.cv-c7-firma-cargo { margin: 0.5mm 0 0; font-size: 8.5pt; color: var(--cv-acento); font-weight: 700; }

/* ---- Carta 8 — Race Bib (modelo 42) ---- */
.cv-c8-header { display: flex; align-items: center; gap: 6mm; padding: 13mm 16mm 7mm; }
.cv-c8-dorsal {
  flex: none; width: 30mm; padding: 2.5mm 2mm;
  border: 0.9mm solid var(--cv-texto); border-radius: 2mm; text-align: center;
}
.cv-c8-dorsal-marca {
  font-size: 6.5pt; font-weight: 700; letter-spacing: 0.3em;
  text-transform: uppercase; color: var(--cv-tenue);
}
.cv-c8-dorsal-num {
  font-family: var(--cv-font-titulos); font-size: 26pt; line-height: 1;
  color: var(--cv-texto); margin-top: 1mm;
}
.cv-c8-header-texto { min-width: 0; }
.cv-c8-nombre {
  font-family: var(--cv-font-titulos); font-size: 26pt; line-height: 1;
  margin: 0; text-transform: uppercase; color: var(--cv-texto);
}
.cv-c8-puesto {
  margin: 1.5mm 0 0; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.14em; color: var(--cv-acento);
}
.cv-c8-meta-banda {
  height: 4.5mm;
  background: repeating-conic-gradient(var(--cv-texto) 0% 25%, #ffffff 0% 50%) 0 0 / 4.5mm 4.5mm;
}
.cv-c8-contacto {
  margin: 0; padding: 3mm 16mm; font-size: 8.5pt;
  background: var(--cv-texto); color: #fff;
}
.cv-c8-cuerpo-envoltorio { padding: 9mm 16mm 16mm; }
.cv-c8-fecha {
  margin: 0 0 5mm; font-size: 8pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.1em; color: var(--cv-tenue);
}
.cv-c8-destinatario { display: flex; flex-direction: column; gap: 0.6mm; font-size: 9.5pt; margin-bottom: 6mm; }
.cv-c8-destinatario span:first-child { font-weight: 700; color: var(--cv-texto); }
.cv-c8-destinatario span { color: var(--cv-tenue); }
.cv-c8-saludo { margin: 0 0 4mm; font-size: 10.5pt; font-weight: 700; color: var(--cv-texto); }
.cv-c8-cuerpo { font-size: 10pt; line-height: 1.7; color: var(--cv-texto); }
.cv-c8-cuerpo p { margin: 0 0 4mm; }
.cv-c8-cuerpo p:last-child { margin-bottom: 0; }
.cv-c8-despedida { margin: 7mm 0 0; font-size: 10pt; color: var(--cv-texto); }
.cv-c8-firma {
  margin: 6mm 0 0; font-family: var(--cv-font-titulos); font-size: 13pt;
  text-transform: uppercase; color: var(--cv-texto);
}
.cv-c8-firma-cargo { margin: 0.5mm 0 0; font-size: 8.5pt; color: var(--cv-acento); font-weight: 700; }

/* ---- Carta 9 — Fitness App (modelo 43) ---- */
.cv-pagina[data-modelo="carta9"] { background: #0e1014; }
.cv-c9-header {
  position: relative; padding: 13mm 16mm 9mm; overflow: hidden;
  background: radial-gradient(120% 90% at 82% 0%, rgba(255,255,255,0.07), transparent 60%), #14161d;
}
.cv-c9-anillos { position: absolute; right: -12mm; top: -14mm; width: 52mm; height: 52mm; z-index: 0; }
.cv-c9-anillo { position: absolute; inset: 0; border-radius: 50%; border: 2.2mm solid; }
.cv-c9-anillo-1 { border-color: var(--cv-acento); opacity: 0.5; }
.cv-c9-anillo-2 { inset: 7mm; border-color: var(--cv-acento-2); opacity: 0.38; }
.cv-c9-nombre {
  position: relative; z-index: 1;
  font-family: var(--cv-font-titulos); font-size: 24pt; line-height: 1.02;
  margin: 0; color: #fff; text-transform: uppercase;
}
.cv-c9-puesto {
  position: relative; z-index: 1; margin: 1.4mm 0 0; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.14em; color: var(--cv-acento);
}
.cv-c9-contacto { position: relative; z-index: 1; margin: 2.5mm 0 0; font-size: 8.5pt; color: #c6cad3; }
.cv-c9-tarjeta {
  margin: 8mm 14mm 14mm;
  background: #171a22; border: 0.3mm solid #262a35; border-radius: 4mm;
  padding: 8mm 9mm 9mm;
}
.cv-c9-tarjeta-cima {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 5mm;
  padding-bottom: 5mm; margin-bottom: 6mm; border-bottom: 0.3mm solid #262a35;
}
.cv-c9-destinatario { display: flex; flex-direction: column; gap: 0.6mm; font-size: 9.5pt; }
.cv-c9-destinatario span:first-child { font-weight: 700; color: #fff; }
.cv-c9-destinatario span { color: #9aa0ad; }
.cv-c9-fecha-pill {
  font-size: 7.5pt; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em;
  padding: 1mm 2.6mm; border-radius: 999px; white-space: nowrap;
  background: rgba(255,255,255,0.08); color: var(--cv-acento);
  border: 0.25mm solid var(--cv-acento);
}
.cv-c9-saludo { margin: 0 0 4mm; font-size: 10.5pt; font-weight: 700; color: #fff; }
.cv-c9-cuerpo { font-size: 10pt; line-height: 1.7; color: #d7dae2; }
.cv-c9-cuerpo p { margin: 0 0 4mm; }
.cv-c9-cuerpo p:last-child { margin-bottom: 0; }
.cv-c9-despedida { margin: 7mm 0 0; font-size: 10pt; color: #d7dae2; }
.cv-c9-firma {
  margin: 6mm 0 0; font-family: var(--cv-font-titulos); font-size: 13pt;
  text-transform: uppercase; color: #fff;
}
.cv-c9-firma-cargo { margin: 0.5mm 0 0; font-size: 8.5pt; color: var(--cv-acento); font-weight: 700; }

/* ---- Carta 10 — Iron Room (modelo 44) ---- */
.cv-c10-header {
  position: relative; padding: 11mm 16mm 9mm; background: #17181c; overflow: hidden;
}
.cv-c10-barra {
  position: absolute; left: 0; right: 0; top: 50%; transform: translateY(-50%);
  height: 11mm; display: flex; align-items: center; z-index: 0; opacity: 0.22;
}
.cv-c10-eje { flex: 1; height: 2mm; background: linear-gradient(180deg, #8d93a1, #4c505a); }
.cv-c10-disco {
  width: 6.5mm; height: 11mm; border-radius: 1.2mm; flex: none;
  background: linear-gradient(180deg, var(--cv-acento), var(--cv-acento-2));
}
.cv-c10-placa {
  position: relative; z-index: 1;
  background: #101114; border: 0.7mm solid var(--cv-acento);
  padding: 4mm 5mm; border-radius: 1.5mm;
}
.cv-c10-nombre {
  font-family: var(--cv-font-titulos); font-size: 23pt; line-height: 1;
  margin: 0; text-transform: uppercase; color: #fff;
}
.cv-c10-puesto {
  margin: 1.4mm 0 0; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.18em; color: var(--cv-acento);
}
.cv-c10-contacto {
  margin: 0; padding: 3mm 16mm; font-size: 8.5pt;
  background: linear-gradient(90deg, var(--cv-acento), var(--cv-acento-2));
  color: var(--cv-acento-texto);
}
.cv-c10-cuerpo-envoltorio { padding: 9mm 16mm 16mm; }
.cv-c10-meta {
  display: flex; justify-content: space-between; align-items: flex-start; gap: 6mm;
  padding-bottom: 5mm; margin-bottom: 6mm;
  border-bottom: 0.4mm solid var(--cv-linea);
}
.cv-c10-destinatario { display: flex; flex-direction: column; gap: 0.6mm; font-size: 9.5pt; }
.cv-c10-destinatario span:first-child { font-weight: 700; color: var(--cv-texto); }
.cv-c10-destinatario span { color: var(--cv-tenue); }
.cv-c10-fecha {
  margin: 0; font-size: 8pt; font-weight: 700; white-space: nowrap;
  text-transform: uppercase; letter-spacing: 0.1em; color: var(--cv-tenue);
}
.cv-c10-saludo { margin: 0 0 4mm; font-size: 10.5pt; font-weight: 700; color: var(--cv-texto); }
.cv-c10-cuerpo { font-size: 10pt; line-height: 1.7; color: var(--cv-texto); }
.cv-c10-cuerpo p { margin: 0 0 4mm; }
.cv-c10-cuerpo p:last-child { margin-bottom: 0; }
.cv-c10-despedida { margin: 7mm 0 0; font-size: 10pt; color: var(--cv-texto); }
.cv-c10-firma {
  margin: 6mm 0 0; font-family: var(--cv-font-titulos); font-size: 13pt;
  text-transform: uppercase; color: var(--cv-texto);
}
.cv-c10-firma-cargo { margin: 0.5mm 0 0; font-size: 8.5pt; color: var(--cv-acento); font-weight: 700; }

/* ---- Carta 11 — Class Board (modelo 45) ---- */
.cv-pagina[data-modelo="carta11"] { background: #12211c; }
.cv-c11-header {
  display: flex; align-items: center; justify-content: space-between; gap: 5mm;
  padding: 12mm 16mm 7mm;
  background: #13231d;
  background-image: radial-gradient(60% 40% at 20% 10%, rgba(255,255,255,0.05), transparent 70%);
}
.cv-c11-header-izq { min-width: 0; }
.cv-c11-rotulo {
  display: inline-block; font-size: 7pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.3em;
  color: var(--cv-acento-texto); background: var(--cv-acento);
  padding: 1mm 2.5mm; border-radius: 0.8mm; margin-bottom: 2mm;
}
.cv-c11-nombre {
  font-family: var(--cv-font-titulos); font-size: 24pt; line-height: 1;
  margin: 0; color: #f4f6f3; text-transform: uppercase;
}
.cv-c11-puesto {
  margin: 1.4mm 0 0; font-size: 9.5pt; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.15em; color: var(--cv-acento-2);
}
.cv-c11-foto-marco {
  flex: none;
  width: calc(24mm * var(--cv-escala-foto, 1));
  height: calc(24mm * var(--cv-escala-foto, 1));
  border-radius: 1.5mm; overflow: hidden;
  border: 0.6mm dashed rgba(255,255,255,0.35);
  padding: 1.1mm; background: rgba(255,255,255,0.05);
  display: flex; align-items: center; justify-content: center;
}
.cv-c11-foto, .cv-c11-foto-placeholder {
  width: 100%; height: 100%; object-fit: cover; border-radius: 1mm;
  display: flex; align-items: center; justify-content: center;
  font-size: calc(8mm * var(--cv-escala-foto, 1));
  background: rgba(0,0,0,0.25);
}
.cv-c11-foto[hidden], .cv-c11-foto-placeholder[hidden] { display: none; }
.cv-c11-tiza {
  height: 0.8mm; margin: 0 16mm;
  background: repeating-linear-gradient(90deg,
    rgba(255,255,255,0.45) 0 6mm, rgba(255,255,255,0.12) 6mm 8mm);
}
.cv-c11-contacto { margin: 3mm 0 0; padding: 0 16mm; font-size: 8.5pt; color: #cfdbd5; }
.cv-c11-panel {
  position: relative; margin: 8mm 14mm 14mm;
  border: 0.3mm solid rgba(255,255,255,0.16); border-radius: 2mm;
  padding: 8mm 8mm 9mm; background: rgba(255,255,255,0.035);
}
.cv-c11-panel-tab {
  position: absolute; top: -2.2mm; left: 5mm;
  font-family: var(--cv-font-titulos); font-size: 7.5pt;
  text-transform: uppercase; letter-spacing: 0.14em;
  background: var(--cv-acento); color: var(--cv-acento-texto);
  padding: 0.9mm 2.5mm; border-radius: 0.8mm;
}
.cv-c11-destinatario { display: flex; flex-direction: column; gap: 0.6mm; font-size: 9.5pt; margin-bottom: 6mm; }
.cv-c11-destinatario span:first-child { font-weight: 700; color: #f4f6f3; }
.cv-c11-destinatario span { color: #9fb0a8; }
.cv-c11-saludo { margin: 0 0 4mm; font-size: 10.5pt; font-weight: 700; color: #f4f6f3; }
.cv-c11-cuerpo { font-size: 10pt; line-height: 1.7; color: #dce5e0; }
.cv-c11-cuerpo p { margin: 0 0 4mm; }
.cv-c11-cuerpo p:last-child { margin-bottom: 0; }
.cv-c11-despedida { margin: 7mm 0 0; font-size: 10pt; color: #dce5e0; }
.cv-c11-firma {
  margin: 6mm 0 0; font-family: var(--cv-font-titulos); font-size: 13pt;
  text-transform: uppercase; color: #f4f6f3;
}
.cv-c11-firma-cargo { margin: 0.5mm 0 0; font-size: 8.5pt; color: var(--cv-acento); font-weight: 700; }

@media print {
  /* la carta entra en una carilla; lo único que no conviene partir es el
     cierre (despedida + firma), que separado del cuerpo queda huérfano */
  .cv-c7-despedida, .cv-c7-firma, .cv-c8-despedida, .cv-c8-firma,
  .cv-c9-despedida, .cv-c9-firma, .cv-c10-despedida, .cv-c10-firma,
  .cv-c11-despedida, .cv-c11-firma { break-inside: avoid; }
  .cv-c7-despedida, .cv-c8-despedida, .cv-c9-despedida,
  .cv-c10-despedida, .cv-c11-despedida { break-after: avoid-page; }
}

/* Las cartas 7-11 manejan sus propios márgenes (headers a sangre, bandas
   que cruzan la hoja), así que anulan el padding del contenedor común —
   si no, quedaba doble margen y el header no llegaba a los bordes. */
.cv-carta7, .cv-carta8, .cv-carta9, .cv-carta10, .cv-carta11 { padding: 0; }
