/* ==========================================================================
   premier-theme.css — F1.1 tema Premier Healthcare Compliance
   --------------------------------------------------------------------------
   Port VERBATIM de premier-site/public/styles/main.css (fuente de verdad
   visual, NO modificar allí — sólo leer y portar). Objetivo: fidelidad
   pixel exacta con el sitio estático original.

   Únicas dos modificaciones permitidas respecto del original:

   1. El tono de marca rosa/magenta (ver valor en el :root de abajo)
      promovido a variable `--brand-pink` (+ `--brand-pink-rgb` para las
      apariciones en gradientes con alpha que en el original usan
      rgba(...) — mismo color, distinta notación). Todas las apariciones
      hardcoded del color (hex y rgb triplet) fueron reemplazadas por las
      variables.

   2. Scoping: los tokens de :root se duplican bajo el selector
      `[data-site-theme="premier"]`, y la regla base de `body` se mueve a
      `body[data-site-theme="premier"]`. Esto le da especificidad
      (0,1,1) — más que el `body { font-family: var(--font-brand); }`
      plano (0,0,1) que inyecta branding_renderer.py en el <head> — por lo
      que Premier gana el font-family solo por especificidad (sin recurrir
      al modificador de prioridad CSS) y sin importar el orden de
      inserción en el <head>. No se importa tokens.css del portal (su
      radius 8-16px colisiona con el radius 0 de Premier).
   ========================================================================== */

:root {
    --navy: var(--brand-primary, #0f1438);
    --navy-deep: #080b24;
    --indigo: var(--brand-accent, #4a36e0);
    --indigo-bright: #5b46ff;
    --indigo-soft: #ebe8ff;
    --cream: #f6f3ec;
    --cream-warm: #efeadc;
    --paper: #fbfaf6;
    --ink: var(--text-body-color, #131229);
    --ink-soft: var(--text-secondary-color, #4a4a63);
    --rule: #1a1d40;
    --rule-soft: #d8d2c1;
    --accent: #ffd24a;
    --brand-pink: var(--brand-secondary, #b711c4);
    --heading-color: var(--text-primary-color, #0f1438);
    --brand-pink-rgb: 183, 17, 196;

    --serif: var(--font-heading, 'Fraunces', 'Times New Roman', serif);
    --sans: var(--font-body, 'Inter Tight', system-ui, sans-serif);
    --mono: var(--font-mono, 'JetBrains Mono', monospace);
  }

  /* Duplicado de los tokens de :root bajo el scoping de Premier (F1.1 mod
     #2). En runtime ambos bloques matchean el mismo <html>/<body> (el
     seed ya trae data-site-theme="premier" en <body>), así que no hay
     diferencia de VALORES — la duplicación existe para que cualquier
     futura regla de body/base que se agregue bajo este selector gane por
     especificidad, sin depender del modificador de prioridad CSS. */
  [data-site-theme="premier"] {
    --navy: var(--brand-primary, #0f1438);
    --navy-deep: #080b24;
    --indigo: var(--brand-accent, #4a36e0);
    --indigo-bright: #5b46ff;
    --indigo-soft: #ebe8ff;
    --cream: #f6f3ec;
    --cream-warm: #efeadc;
    --paper: #fbfaf6;
    --ink: var(--text-body-color, #131229);
    --ink-soft: var(--text-secondary-color, #4a4a63);
    --rule: #1a1d40;
    --rule-soft: #d8d2c1;
    --accent: #ffd24a;
    --brand-pink: var(--brand-secondary, #b711c4);
    --heading-color: var(--text-primary-color, #0f1438);
    --brand-pink-rgb: 183, 17, 196;

    --serif: var(--font-heading, 'Fraunces', 'Times New Roman', serif);
    --sans: var(--font-body, 'Inter Tight', system-ui, sans-serif);
    --mono: var(--font-mono, 'JetBrains Mono', monospace);
  }

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

  html {
    scroll-behavior: smooth;
    /* F1.2 (2026-07-31): el navbar es `position: sticky; top: 0` y mide 80px.
       Sin esto, cualquier ancla (#why, #services, …) aterriza con el arranque
       de la sección tapado por la barra y se lee como que el menú "no lleva a
       ningún lado". Aplica tanto a la navegación nativa por hash como a los
       scrollIntoView de hydrate.js. 80px de nav + 16 de aire. */
    scroll-padding-top: 96px;
  }

  /* F1.1 mod #2 — scoped a body[data-site-theme="premier"] (specificity
     0,1,1) para ganar sobre el `body { font-family: var(--font-brand); }`
     plano (0,0,1) que branding_renderer.py inyecta en el <head>. */
  body[data-site-theme="premier"] {
    font-family: var(--sans);
    background: var(--paper);
    color: var(--ink);
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
    /* F1.2 (2026-07-31): este `overflow-x` hace que sea el BODY el que propaga
       su overflow al viewport, así que el navegador lee de acá — y no de
       `html` — el scroll-padding y el scroll-behavior. Se declaran en los dos
       lados a propósito: quitar el overflow-x devolvería la autoridad a html. */
    scroll-padding-top: 96px;
    scroll-behavior: smooth;
  }

  ::selection { background: var(--indigo); color: var(--paper); }

  a { color: inherit; text-decoration: none; }

  /* ============ TOP BAR ============ */
  .topbar {
    background: var(--navy);
    color: var(--cream);
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    padding: 10px 0;
    border-bottom: 1px solid rgba(255,255,255,0.08);
  }
  .topbar-inner {
    max-width: 1400px; margin: 0 auto; padding: 0 32px;
    display: flex; justify-content: flex-end; align-items: center;
  }
  .topbar-phone {
    display: inline-flex; align-items: center; gap: 8px;
    background: var(--indigo-bright); color: var(--cream);
    padding: 8px 16px; font-weight: 600;
    border: 1px solid transparent;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
  }
  .topbar-phone:hover, .topbar-phone:focus-visible {
    background: var(--cream); color: var(--heading-color);
  }
  .topbar-phone:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

  /* ============ NAV ============ */
  nav.main-nav {
    background: var(--paper);
    border-bottom: 1px solid var(--rule-soft);
    position: sticky; top: 0; z-index: 100;
    backdrop-filter: blur(8px);
  }
  .nav-inner {
    /* F1.2 (Lily 2026-07-28): el logo del header pasó de 44px a 56px (mismo
       tamaño que el del footer). El padding baja 18→12 para que el navbar
       conserve sus 80px de alto: .why-left y .faq-left tienen offsets sticky
       calibrados a ese alto y se meterían debajo del nav si creciera. */
    max-width: 1400px; margin: 0 auto; padding: 12px 32px;
    display: flex; align-items: center; justify-content: space-between;
  }
  .logo-wrap { display: inline-flex; align-items: center; }
  .logo-img { height: 56px; width: auto; display: block; }
  .logo-mark {
    width: 38px; height: 38px;
    display: flex; align-items: center; justify-content: center;
  }
  .logo-text { line-height: 1; }
  .logo-text .l1 {
    font-family: var(--sans); font-size: 9px; letter-spacing: 0.32em;
    color: var(--ink-soft); text-transform: uppercase; font-weight: 500;
  }
  .logo-text .l2 {
    font-family: var(--serif); font-style: italic; font-weight: 500;
    font-size: 22px; color: var(--heading-color); letter-spacing: -0.01em;
  }
  .logo-text .l3 {
    font-family: var(--sans); font-weight: 700; font-size: 14px;
    color: var(--indigo); letter-spacing: 0.06em; text-transform: uppercase;
    margin-top: -2px;
  }

  .nav-links { display: flex; gap: 36px; align-items: center; }
  .nav-links a {
    font-size: 13px; font-weight: 500; color: var(--ink);
    position: relative; padding: 6px 0;
    transition: color 0.2s;
  }
  .nav-links a::after {
    content: ""; position: absolute; bottom: 0; left: 0;
    width: 0; height: 1px; background: var(--indigo);
    transition: width 0.3s ease;
  }
  .nav-links a:hover { color: var(--indigo); }
  .nav-links a:hover::after { width: 100%; }

  /* .nav-cta y .nav-phone viven dentro de .nav-links en el markup (ver
     index.html), así que .nav-links a { color/font-size/... } (0,1,1)
     colisiona con estas reglas. En el original main.css se resolvía con
     el modificador de prioridad CSS; aquí se resuelve subiendo la
     especificidad con el prefijo .nav-links (0,2,x > 0,1,1) — mismo
     resultado visual, sin ese modificador. */
  .nav-links .nav-cta {
    background: var(--navy); color: var(--cream);
    padding: 10px 18px;
    font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase;
    font-weight: 600;
    transition: background 0.2s;
  }
  /* F1.2 (Lily 2026-07-28): forzar texto claro en hover. Sin esto,
     .nav-links a:hover { color: var(--indigo) } (0,2,1) le gana al color del
     CTA → texto índigo sobre fondo índigo = invisible. El estático lo evitaba
     con !important; acá se resuelve con la especificidad de .nav-links .nav-cta:hover. */
  .nav-links .nav-cta:hover { background: var(--indigo); color: var(--cream); }
  .nav-cta::after { display: none; }

  .nav-links .nav-phone {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--indigo-bright); color: var(--cream);
    padding: 10px 16px;
    font-family: var(--mono); font-size: 12px; font-weight: 600;
    letter-spacing: 0.06em;
    transition: background 0.2s, color 0.2s;
  }
  .nav-links .nav-phone:hover { background: var(--cream); color: var(--heading-color); }
  .nav-phone::after { display: none; }

  .menu-toggle { display: none; background: none; border: none; cursor: pointer; padding: 4px; }
  .menu-toggle span { display: block; width: 24px; height: 2px; background: var(--navy); margin: 5px 0; transition: 0.3s; }

  @media (max-width: 900px) {
    .nav-links { display: none; position: absolute; top: 100%; left: 0; right: 0;
      background: var(--paper); flex-direction: column; padding: 24px 32px;
      border-bottom: 1px solid var(--rule-soft); gap: 18px; align-items: flex-start; }
    .nav-links.open { display: flex; }
    .menu-toggle { display: block; }
  }

  /* ============ HERO ============ */
  .hero {
    background-color: var(--heading-color);
    color: var(--cream);
    padding: 100px 0 0;
    position: relative;
    overflow: hidden;
  }
  @keyframes hero-drift {
    0%   { transform: scale(1) translate(0, 0); }
    100% { transform: scale(1.08) translate(-1.5%, 1.5%); }
  }

  .hero-bg {
    position: absolute; inset: 0;
    /* La imagen la provee el CMS (campo "imagen de fondo" del hero) como
       style inline. NO hardcodear una url acá: la del sitio estático era
       relativa al CSS (/css/assets/…) y daba 404, así que el CMS es la
       única fuente. Sin imagen → transparente y se ve el navy de Marca. */
    background-image: none;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    z-index: 0;
    animation: hero-drift 28s ease-in-out infinite alternate;
    will-change: transform;
  }
  @media (prefers-reduced-motion: reduce) {
    .hero-bg { animation: none; }
  }
  .hero::before {
    content: ""; position: absolute; inset: 0;
    background:
      linear-gradient(180deg, rgba(15,20,56,0.55) 0%, rgba(15,20,56,0.78) 100%),
      radial-gradient(circle at 50% 30%, rgba(91, 70, 255, 0.18), transparent 65%);
    pointer-events: none;
    z-index: 1;
    /* F1.2 Premier: overlay oscuro graduable desde el CMS (campo overlay_strength
       del hero → --hero-overlay-opacity). Default 1 = look original de Premier;
       0 = imagen sin oscurecer. */
    opacity: var(--hero-overlay-opacity, 1);
  }
  .hero::after {
    content: ""; position: absolute; inset: 0;
    background-image:
      linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
    background-size: 56px 56px;
    pointer-events: none;
  }
  .hero-inner {
    max-width: 1400px; margin: 0 auto; padding: 0 32px;
    position: relative; z-index: 2;
    display: flex; flex-direction: column; align-items: center;
    text-align: center;
  }
  .hero-main { display: flex; flex-direction: column; align-items: center; max-width: 900px; }
  .hero-tag {
    display: inline-flex; align-items: center; align-self: center;
    padding: 9px 20px;
    background: rgba(251, 250, 246, 0.95);
    border-radius: 999px;
    box-shadow: 0 6px 24px -12px rgba(15, 20, 56, 0.4);
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--brand-pink);
    margin-bottom: 32px;
    animation: fadeUp 0.8s ease both;
  }
  .hero-tag span {
    display: inline-block;
    animation: tag-reveal 1s 0.35s cubic-bezier(0.65, 0.05, 0.36, 1) both;
    clip-path: inset(0 100% 0 0);
  }
  @keyframes tag-reveal {
    from { clip-path: inset(0 100% 0 0); }
    to   { clip-path: inset(0 0 0 0); }
  }
  @media (prefers-reduced-motion: reduce) {
    .hero-tag span { animation: none; clip-path: inset(0 0 0 0); }
  }
  .hero h1 {
    font-family: var(--serif);
    font-weight: 300;
    font-size: clamp(48px, 7vw, 96px);
    line-height: 0.96;
    letter-spacing: -0.03em;
    margin-bottom: 32px;
    animation: fadeUp 0.9s 0.1s ease both;
  }
  .hero h1 em {
    font-style: italic; font-weight: 400; color: var(--cream);
  }
  .hero-sub {
    font-size: 18px; line-height: 1.55; color: rgba(246, 243, 236, 0.7);
    max-width: 540px; margin-bottom: 48px;
    animation: fadeUp 1s 0.2s ease both;
  }
  .hero-actions {
    display: flex; gap: 16px; flex-wrap: wrap; justify-content: center;
    margin-bottom: 80px;
    animation: fadeUp 1.1s 0.3s ease both;
  }
  .btn {
    display: inline-flex; align-items: center; gap: 10px;
    padding: 16px 28px; font-size: 13px; font-weight: 600;
    letter-spacing: 0.08em; text-transform: uppercase;
    cursor: pointer; border: none; transition: all 0.3s;
    font-family: var(--sans);
  }
  .btn-primary {
    background: var(--btn-primary-color, var(--indigo-bright));
    color: var(--btn-primary-text-color, var(--cream));
  }
  .btn-primary:hover { background: var(--cream); color: var(--heading-color); }
  .btn-ghost {
    background: transparent; color: var(--cream);
    border: 1px solid rgba(246,243,236,0.3);
  }
  .btn-ghost:hover { border-color: var(--cream); background: rgba(246,243,236,0.05); }
  .btn .arr { transition: transform 0.3s; }
  .btn:hover .arr { transform: translateX(4px); }

  .hero-side {
    padding-bottom: 64px;
    animation: fadeUp 1.2s 0.4s ease both;
  }
  .hero-quote {
    font-family: var(--serif); font-style: italic; font-weight: 300;
    font-size: 22px; line-height: 1.4; color: var(--cream);
    border-left: 1px solid var(--indigo-bright);
    padding-left: 24px; margin-bottom: 24px;
  }
  .hero-cite {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: rgba(246,243,236,0.5); padding-left: 24px;
  }

  .hero-marquee {
    border-top: 1px solid rgba(255,255,255,0.08);
    border-bottom: 1px solid rgba(255,255,255,0.08);
    margin-top: 24px; padding: 22px 0;
    position: relative; z-index: 2;
    overflow: hidden;
    white-space: nowrap;
  }
  .marquee-track {
    display: inline-flex; gap: 60px;
    animation: scroll 40s linear infinite;
    font-family: var(--mono); font-size: 12px;
    letter-spacing: 0.18em; text-transform: uppercase;
    color: rgba(246,243,236,0.5);
  }
  .marquee-track span { display: inline-flex; align-items: center; gap: 60px; }
  .marquee-track span::after {
    content: "✦"; color: var(--indigo-bright); font-size: 10px;
  }
  @keyframes scroll {
    from { transform: translateX(0); }
    to { transform: translateX(-50%); }
  }
  @keyframes fadeUp {
    from { opacity: 0; transform: translateY(20px); }
    to { opacity: 1; transform: translateY(0); }
  }

  @media (max-width: 900px) {
    .hero-inner { grid-template-columns: 1fr; gap: 40px; }
    .hero { padding-top: 64px; }
    .hero-side { padding-bottom: 32px; }
  }

  /* ============ STATS BAND ============ */
  .stats-band {
    background: var(--cream);
    padding: 80px 0;
    border-bottom: 1px solid var(--rule-soft);
  }
  .stats-inner {
    max-width: 1400px; margin: 0 auto; padding: 0 32px;
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 48px;
  }
  .stat { border-top: 1px solid var(--navy); padding-top: 24px; }
  .stat-num {
    font-family: var(--serif); font-weight: 300; font-size: 64px;
    color: var(--heading-color); line-height: 1; letter-spacing: -0.03em;
    margin-bottom: 16px;
  }
  .stat-num em { font-style: italic; color: var(--indigo); }
  .stat-label {
    font-size: 13px; color: var(--ink-soft); line-height: 1.5;
    max-width: 240px;
  }
  .stat-source {
    font-family: var(--mono); font-size: 9px; letter-spacing: 0.16em;
    text-transform: uppercase; color: var(--ink-soft);
    opacity: 0.6; margin-top: 14px;
  }
  @media (max-width: 900px) {
    .stats-inner { grid-template-columns: repeat(2, 1fr); gap: 32px; }
  }
  @media (max-width: 540px) {
    .stats-inner { grid-template-columns: 1fr; }
  }

  /* ============ SECTION FRAMEWORK ============ */
  section { padding: 120px 0; }
  .container { max-width: 1400px; margin: 0 auto; padding: 0 32px; }
  @media (max-width: 900px) {
    section { padding: 72px 0; }
    .container { padding: 0 20px; }
    .topbar-inner, .nav-inner, .hero-inner, .stats-inner, .footer-inner, .footer-bottom { padding-left: 20px; padding-right: 20px; }
  }
  @media (max-width: 540px) {
    section { padding: 56px 0; }
  }
  .section-icon-top {
    width: 64px; height: 64px; display: block;
    margin-bottom: 28px; object-fit: contain;
  }
  .services .section-icon-top { filter: brightness(0) invert(1) opacity(0.85); }
  .section-label {
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--indigo);
    display: flex; align-items: center; gap: 12px; margin-bottom: 24px;
  }
  .section-label::before {
    content: ""; width: 28px; height: 1px; background: var(--indigo);
  }
  .section-title {
    font-family: var(--serif); font-weight: 300;
    font-size: clamp(36px, 5vw, 64px);
    line-height: 1.02; letter-spacing: -0.025em;
    color: var(--heading-color); max-width: 900px; margin-bottom: 32px;
  }
  .section-title em { font-style: italic; color: var(--indigo); }
  .section-intro {
    font-size: 17px; line-height: 1.6; color: var(--ink-soft);
    max-width: 640px;
  }

  /* ============ WHY US ============ */
  .why {
    background: var(--paper);
  }
  .why-grid {
    display: grid; grid-template-columns: 1fr 1.2fr; gap: 80px;
    margin-top: 64px; align-items: start;
  }
  .why-left { position: sticky; top: 120px; }
  .why-photo {
    aspect-ratio: 4/5; background: var(--navy);
    position: relative; overflow: hidden;
    display: flex; align-items: center; justify-content: center;
  }
  .why-photo svg {
    width: 70%; height: 70%; opacity: 0.4;
  }
  .why-photo img {
    width: 100%; height: 100%; object-fit: cover; display: block;
  }
  .why-photo::after {
    content: ""; position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(15,20,56,0) 40%, rgba(15,20,56,0.55) 100%);
    pointer-events: none;
  }
  .why-caption {
    margin-top: 20px;
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-soft);
    display: flex; justify-content: space-between;
  }

  .why-points {
    display: flex; flex-direction: column;
  }
  .why-point {
    border-top: 1px solid var(--rule-soft); padding: 36px 0;
    display: grid; grid-template-columns: 60px 1fr; gap: 24px;
  }
  .why-point:last-child { border-bottom: 1px solid var(--rule-soft); }
  .why-num {
    font-family: var(--serif); font-style: italic; font-weight: 300;
    font-size: 24px; color: var(--indigo);
  }
  .why-point h4 {
    font-family: var(--serif); font-weight: 400; font-size: 26px;
    color: var(--heading-color); margin-bottom: 12px; letter-spacing: -0.01em;
  }
  .why-point p {
    color: var(--ink-soft); line-height: 1.6; font-size: 15px;
  }

  @media (max-width: 900px) {
    .why-grid { grid-template-columns: 1fr; gap: 48px; }
    .why-left { position: static; }
  }

  /* ============ SERVICES ============ */
  .services {
    background: var(--navy);
    color: var(--cream);
  }
  .services .section-title { color: var(--cream); }
  .services .section-title em { color: var(--indigo-bright); }
  .services .section-label { color: var(--indigo-bright); }
  .services .section-label::before { background: var(--indigo-bright); }
  .services .section-intro { color: rgba(246,243,236,0.65); }

  .service-grid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
    margin-top: 80px; background: rgba(255,255,255,0.08);
    border: 1px solid rgba(255,255,255,0.08);
  }
  .service-card {
    background: var(--navy); padding: 36px 28px 32px;
    transition: background 0.4s;
    position: relative; cursor: pointer;
  }
  .service-card:hover { background: var(--navy-deep); }
  .service-icon {
    width: 44px; height: 44px; margin-bottom: 28px;
    color: var(--indigo-bright);
    transition: transform 0.4s;
  }
  .service-card:hover .service-icon { transform: translateY(-4px); }
  .service-card h3 {
    font-family: var(--serif); font-weight: 400; font-size: 24px;
    color: var(--cream); margin-bottom: 16px; letter-spacing: -0.01em;
    line-height: 1.15;
  }
  .service-card p {
    font-size: 14px; color: rgba(246,243,236,0.65);
    line-height: 1.6; margin-bottom: 24px;
  }
  .service-list {
    list-style: none; font-size: 13px; color: rgba(246,243,236,0.55);
  }
  .service-list li { padding: 7px 0; border-top: 1px solid rgba(255,255,255,0.06); }
  .service-list li:first-child { border-top: none; }
  .service-list li::before { content: "→ "; color: var(--indigo-bright); margin-right: 6px; }

  @media (max-width: 1200px) {
    .service-grid { grid-template-columns: repeat(2, 1fr); }
  }
  @media (max-width: 640px) {
    .service-grid { grid-template-columns: 1fr; }
  }

  /* ============ INDUSTRIES ============ */
  .industries { background: var(--cream); }
  .industries-grid {
    margin-top: 64px;
    display: grid; grid-template-columns: repeat(4, 1fr);
    border-top: 1px solid var(--navy);
    border-left: 1px solid var(--navy);
  }
  .industry-cell {
    border-right: 1px solid var(--navy);
    border-bottom: 1px solid var(--navy);
    padding: 36px 24px;
    background: var(--cream);
    transition: background 0.3s, color 0.3s;
    position: relative; min-height: 180px;
    display: flex; flex-direction: column; justify-content: space-between;
  }
  .industry-cell:hover { background: var(--navy); color: var(--cream); }
  .industry-cell:hover .industry-num { color: rgba(246,243,236,0.5); }
  .industry-num {
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em;
    color: var(--ink-soft); transition: color 0.3s;
  }
  .industry-name {
    font-family: var(--serif); font-weight: 400; font-size: 22px;
    letter-spacing: -0.01em; line-height: 1.15;
  }

  @media (max-width: 900px) {
    .industries-grid { grid-template-columns: repeat(2, 1fr); }
  }
  @media (max-width: 540px) {
    .industries-grid { grid-template-columns: 1fr; }
  }

  /* ============ COMPLIANCE FACTS ============ */
  .facts { background: var(--paper); }
  .facts-grid {
    margin-top: 64px;
    display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px;
  }
  .fact {
    background: var(--cream);
    padding: 48px 44px;
    border: 1px solid var(--rule-soft);
    position: relative;
    transition: transform 0.4s, box-shadow 0.4s;
  }
  .fact:hover {
    transform: translateY(-4px);
    box-shadow: 0 24px 60px -20px rgba(15, 20, 56, 0.15);
  }
  .fact-tag {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--indigo);
    margin-bottom: 24px;
  }
  .fact-big {
    font-family: var(--serif); font-weight: 300;
    font-size: 56px; line-height: 1; color: var(--heading-color);
    letter-spacing: -0.03em; margin-bottom: 20px;
  }
  .fact-big em { font-style: italic; color: var(--indigo); }
  .fact-desc {
    font-size: 15px; line-height: 1.6; color: var(--ink-soft);
    margin-bottom: 24px;
  }
  .fact-source {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-soft);
    padding-top: 20px; border-top: 1px solid var(--rule-soft);
    opacity: 0.7;
  }

  @media (max-width: 720px) {
    .facts-grid { grid-template-columns: 1fr; }
  }

  /* ============ BLOG ============ */
  .blog { background: var(--paper); }
  .blog-head {
    display: grid; grid-template-columns: 1.6fr 1fr;
    gap: 48px; align-items: end; margin-bottom: 56px;
  }
  .blog-head .section-intro { margin-top: 20px; }
  .blog-all {
    justify-self: end;
    font-family: var(--sans); font-size: 14px; font-weight: 500;
    color: var(--indigo);
    display: inline-flex; align-items: center; gap: 8px;
    padding-bottom: 4px; border-bottom: 1px solid var(--indigo);
    transition: gap 0.3s;
  }
  .blog-all:hover { gap: 14px; }
  .blog-grid {
    display: grid; grid-template-columns: 1fr 1fr; gap: 32px;
  }
  .blog-card--featured {
    grid-column: 1 / -1;
    display: grid; grid-template-columns: 1fr 1.4fr;
    padding: 0;
  }
  .blog-card--featured .blog-cover {
    padding: 40px 36px;
    display: flex; flex-direction: column; justify-content: space-between;
    background:
      linear-gradient(135deg, rgba(var(--brand-pink-rgb), 0.85) 0%, rgba(15, 20, 56, 0.95) 100%),
      radial-gradient(circle at 20% 80%, rgba(91, 70, 255, 0.35), transparent 60%);
    color: var(--cream);
    min-height: 320px;
    position: relative; overflow: hidden;
  }
  .blog-card--featured .blog-cover::before {
    content: ""; position: absolute; inset: 0;
    background-image:
      linear-gradient(rgba(255,255,255,0.05) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255,255,255,0.05) 1px, transparent 1px);
    background-size: 32px 32px; pointer-events: none;
  }
  .blog-cover-cat {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.24em;
    text-transform: uppercase; opacity: 0.85; position: relative;
  }
  .blog-cover-num {
    font-family: var(--serif); font-weight: 300; font-size: clamp(48px, 5vw, 76px);
    line-height: 1; letter-spacing: -0.03em;
    margin-top: auto; position: relative;
  }
  .blog-cover-caption {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; opacity: 0.75;
    margin-top: 12px; position: relative;
  }
  .blog-featured-body {
    padding: 40px 44px; display: flex; flex-direction: column;
  }
  .blog-card--featured .blog-title { font-size: 30px; }
  .blog-card--featured .blog-excerpt { font-size: 16px; }

  @media (max-width: 900px) {
    .blog-card--featured { grid-template-columns: 1fr; }
    .blog-card--featured .blog-cover { min-height: 220px; padding: 32px 28px; }
    .blog-featured-body { padding: 28px 28px 22px; }
    .blog-card--featured .blog-title { font-size: 24px; }
  }
  .blog-card {
    display: flex; flex-direction: column;
    background: var(--paper); padding: 36px 40px 28px;
    border: 1px solid var(--rule-soft);
    transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s;
  }
  .blog-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 20px 50px -22px rgba(15, 20, 56, 0.18);
    border-color: rgba(74, 54, 224, 0.35);
  }
  .blog-meta {
    display: flex; align-items: center; gap: 20px;
    margin-bottom: 18px;
    font-size: 12px;
  }
  .blog-tag {
    font-family: var(--sans); font-weight: 600;
    text-transform: uppercase; letter-spacing: 0.14em;
    color: var(--indigo); font-size: 11px;
  }
  .blog-date {
    color: var(--ink-soft); font-size: 12px;
  }
  .blog-title {
    font-family: var(--serif); font-weight: 400; font-size: 26px;
    line-height: 1.2; letter-spacing: -0.015em; color: var(--heading-color);
    margin-bottom: 18px;
  }
  .blog-title a { transition: color 0.2s; }
  .blog-title a:hover { color: var(--indigo); }
  .blog-excerpt {
    font-size: 15px; line-height: 1.6; color: var(--ink-soft);
    flex: 1; margin-bottom: 28px;
  }
  .blog-foot {
    display: flex; justify-content: space-between; align-items: center;
    gap: 16px; padding-top: 20px;
    border-top: 1px solid var(--rule-soft);
  }
  .blog-read {
    font-family: var(--sans); font-size: 14px; font-weight: 600;
    color: var(--heading-color);
    display: inline-flex; align-items: center; gap: 8px;
    transition: gap 0.3s, color 0.2s;
  }
  .blog-read:hover { gap: 14px; color: var(--indigo); }
  .blog-share { display: flex; gap: 6px; }
  .blog-share a, .blog-share button {
    width: 32px; height: 32px; border-radius: 50%;
    background: var(--indigo-soft); color: var(--indigo);
    display: inline-flex; align-items: center; justify-content: center;
    transition: background 0.2s, color 0.2s, transform 0.2s;
    border: none; padding: 0; cursor: pointer; /* reset del <button> copiar */
  }
  .blog-share a:hover, .blog-share button:hover {
    background: var(--indigo); color: var(--cream);
    transform: translateY(-2px);
  }
  .blog-share a:focus-visible, .blog-share button:focus-visible {
    outline: 2px solid var(--indigo); outline-offset: 2px;
  }
  /* Feedback breve al copiar el enlace (hydrate.js agrega .copied 1.2s). */
  .blog-share button.copied { background: var(--indigo); color: var(--cream); }
  .blog-share svg { width: 15px; height: 15px; display: block; }
  @media (max-width: 900px) {
    .blog-head { grid-template-columns: 1fr; }
    .blog-all { justify-self: start; }
    .blog-card { padding: 28px 24px 22px; }
  }
  @media (max-width: 640px) {
    .blog-grid { grid-template-columns: 1fr; }
  }

  /* ============ TESTIMONIALS ============ */
  .testimonials {
    background: var(--cream-warm);
  }
  .test-grid {
    margin-top: 64px;
    display: grid; grid-template-columns: 1fr 1fr; gap: 48px;
  }
  .test-card {
    background: var(--paper);
    padding: 56px 48px;
    border-left: 2px solid var(--indigo);
    position: relative;
  }
  .test-card::before {
    content: "\201C";
    position: absolute; top: 20px; right: 32px;
    font-family: var(--serif); font-size: 96px;
    color: var(--indigo); opacity: 0.15; line-height: 1;
  }
  .test-quote {
    font-family: var(--serif); font-style: italic; font-weight: 300;
    font-size: 21px; line-height: 1.5; color: var(--heading-color);
    margin-bottom: 32px; letter-spacing: -0.005em;
  }
  .test-author { display: flex; flex-direction: column; gap: 4px; }
  .test-name {
    font-weight: 600; font-size: 14px; color: var(--heading-color);
    letter-spacing: 0.02em;
  }
  .test-title {
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-soft);
  }
  @media (max-width: 900px) {
    .test-grid { grid-template-columns: 1fr; }
  }

  /* ============ CTA ============ */
  .cta {
    background: var(--navy);
    color: var(--cream);
    padding: 140px 0;
    position: relative; overflow: hidden;
  }
  .cta::before {
    content: ""; position: absolute; inset: 0;
    background: radial-gradient(circle at 70% 50%, rgba(91, 70, 255, 0.3), transparent 60%);
  }
  .cta-inner {
    max-width: 1100px; margin: 0 auto; padding: 0 32px;
    position: relative; text-align: center;
  }
  .cta h2 {
    font-family: var(--serif); font-weight: 300;
    font-size: clamp(40px, 6vw, 80px); line-height: 1;
    letter-spacing: -0.03em; margin-bottom: 32px;
  }
  .cta h2 em { font-style: italic; color: var(--indigo-bright); }
  .cta-sub {
    font-size: 18px; color: rgba(246,243,236,0.7);
    margin-bottom: 48px; max-width: 540px; margin-left: auto; margin-right: auto;
    line-height: 1.55;
  }

  /* ============ CONTACT FORM ============ */
  .contact { background: var(--paper); }
  .contact-grid {
    margin-top: 64px;
    display: grid; grid-template-columns: 1fr 1.4fr; gap: 80px;
  }
  .contact-info ul { list-style: none; }
  .contact-info li {
    border-top: 1px solid var(--rule-soft);
    padding: 24px 0;
  }
  .contact-info li:last-child { border-bottom: 1px solid var(--rule-soft); }
  .contact-label {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--ink-soft); margin-bottom: 6px;
  }
  .contact-value {
    font-family: var(--serif); font-weight: 400; font-size: 22px;
    color: var(--heading-color); letter-spacing: -0.01em;
  }

  form { display: grid; gap: 0; }
  .form-row {
    display: grid; grid-template-columns: 1fr 1fr; gap: 24px;
  }
  .field {
    border-bottom: 1px solid var(--rule-soft);
    padding: 16px 0; position: relative;
  }
  .field label {
    display: block;
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--ink-soft); margin-bottom: 8px;
  }
  .field input, .field select, .field textarea {
    width: 100%; border: none; background: transparent;
    font-family: var(--serif); font-size: 18px; color: var(--heading-color);
    padding: 4px 0; outline: none;
  }
  .field textarea { resize: vertical; min-height: 80px; }
  .field:focus-within { border-bottom-color: var(--indigo); }
  .form-submit { margin-top: 32px; }

  @media (max-width: 900px) {
    .contact-grid { grid-template-columns: 1fr; gap: 48px; }
    .form-row { grid-template-columns: 1fr; gap: 0; }
  }

  /* ============ FOOTER ============ */
  footer {
    /* F1.2 (Lily 2026-07-28): degradado VISIBLE — el tope es el navy de Marca
       aclarado ~12% (≈ #26294d), suficiente para ver el gradiente sin lastimar
       la lectura del texto crema; baja a navy → casi negro. Responde a Marca
       (deriva de --navy = Color Principal). */
    background: linear-gradient(160deg,
                  color-mix(in srgb, var(--navy) 88%, #ffffff 12%) 0%,
                  var(--navy) 55%,
                  var(--navy-deep) 100%);
    color: var(--cream);
    padding: 80px 0 32px;
  }
  .footer-inner {
    max-width: 1400px; margin: 0 auto; padding: 0 32px;
    display: grid; gap: 64px;
    /* F1.2 (2026-07-30): la cantidad de columnas sale del CMS
       (Pie de página → columnas). Sin --footer-cols cae al layout de Premier:
       marca ancha + 3 columnas de enlaces. */
    grid-template-columns: 1.5fr repeat(var(--footer-cols, 3), 1fr);
  }
  .footer-logo-img {
    /* F1.2 (Lily 2026-07-28): sin filtro blanco — el footer usa el logo CLARO
       real (logo_white = premier-logo-light.svg: texto crema + escudo a color),
       consistente con el chrome del admin. Regla: fondo oscuro → logo claro. */
    height: 56px; width: auto; display: block; margin-bottom: 20px;
  }
  .footer-tag {
    font-size: 14px; color: rgba(246,243,236,0.6); line-height: 1.6;
    max-width: 320px;
  }
  .footer-col h5 {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--indigo-bright);
    margin-bottom: 24px;
  }
  .footer-col ul { list-style: none; }
  .footer-col li { padding: 6px 0; }
  .footer-col a {
    font-size: 14px; color: rgba(246,243,236,0.7);
    transition: color 0.2s;
  }
  .footer-col a:hover { color: var(--cream); }
  .footer-bottom {
    max-width: 1400px; margin: 64px auto 0; padding: 32px 32px 0;
    border-top: 1px solid rgba(255,255,255,0.08);
    display: flex; justify-content: space-between;
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em;
    color: rgba(246,243,236,0.4); text-transform: uppercase;
  }
  @media (max-width: 900px) {
    .footer-inner { grid-template-columns: 1fr 1fr; gap: 40px; }
    .footer-bottom { flex-direction: column; gap: 16px; }
  }

  /* ============ HANDBOOKS TEASER ============ */
  .handbooks-teaser { background: var(--paper); }
  .handbooks-head {
    display: grid; grid-template-columns: 1.6fr 1fr;
    gap: 48px; align-items: end; margin-bottom: 56px;
  }
  .handbooks-head .section-intro { margin-top: 20px; }
  .handbooks-all {
    justify-self: end;
    font-family: var(--sans); font-size: 14px; font-weight: 500;
    color: var(--indigo);
    display: inline-flex; align-items: center; gap: 8px;
    padding-bottom: 4px; border-bottom: 1px solid var(--indigo);
    transition: gap 0.3s;
  }
  .handbooks-all:hover { gap: 14px; }
  .handbooks-grid {
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px;
  }
  .handbook-card {
    display: flex; flex-direction: column;
    background: var(--paper);
    border: 1px solid var(--rule-soft);
    transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s;
    overflow: hidden; color: inherit;
  }
  .handbook-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 24px 60px -22px rgba(15, 20, 56, 0.22);
    border-color: rgba(74, 54, 224, 0.4);
  }
  .handbook-cover {
    aspect-ratio: 4/3;
    display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-end;
    padding: 32px 28px;
    color: var(--cream);
    /* Color de respaldo cuando no hay imagen; la que se sube desde el panel
       llega como background-image en línea y va debajo del velo. */
    background-color: var(--navy);
    background-position: center; background-size: cover; background-repeat: no-repeat;
    position: relative; overflow: hidden;
  }
  .handbook-cover::before {
    content: ""; position: absolute; inset: 0; z-index: 0;
    background-image:
      linear-gradient(rgba(255,255,255,0.06) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255,255,255,0.06) 1px, transparent 1px);
    background-size: 32px 32px;
    pointer-events: none;
  }
  /* F1.2 (Lily 2026-08-02) — mismo tratamiento que en la tienda: el velo de
     marca es una capa aparte, para que la imagen que se suba desde el panel
     no lo pise y el texto siga legible. Se retiró la foto de stock externa
     que traía el estático (ver comentario en .product-cover). */
  .handbook-cover::after {
    content: ""; position: absolute; inset: 0; z-index: 0;
    background: linear-gradient(135deg,
      color-mix(in srgb, var(--velo, var(--brand-pink)) 82%, transparent) 0%,
      color-mix(in srgb, var(--navy) 92%, transparent) 100%);
    pointer-events: none;
  }

  .handbook-cover[data-velo="0"]::after {
    background: linear-gradient(to top, rgba(0,0,0,0.55) 0%,
                                        rgba(0,0,0,0.15) 42%,
                                        transparent 70%);
  }
  .handbook-cover-cat {
    position: relative; z-index: 1;
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.24em;
    text-transform: uppercase; opacity: 0.75; margin-bottom: 12px;
  }
  .handbook-cover-title {
    position: relative; z-index: 1;
    font-family: var(--serif); font-weight: 300; font-size: 26px;
    line-height: 1.1; letter-spacing: -0.01em;
  }
  .handbook-body {
    padding: 24px 28px; display: flex; flex-direction: column; flex: 1;
  }
  .handbook-meta {
    display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 14px;
  }
  .handbook-format {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-soft);
  }
  .handbook-price {
    font-family: var(--serif); font-size: 22px; color: var(--heading-color);
    letter-spacing: -0.01em;
  }
  .handbook-desc {
    font-size: 14px; line-height: 1.6; color: var(--ink-soft);
    flex: 1; margin-bottom: 20px;
  }
  .handbook-cta {
    font-family: var(--sans); font-size: 13px; font-weight: 600;
    color: var(--heading-color);
    display: inline-flex; align-items: center; gap: 8px;
    padding-top: 16px; border-top: 1px solid var(--rule-soft);
    transition: gap 0.3s, color 0.2s;
  }
  .handbook-card:hover .handbook-cta { color: var(--indigo); gap: 14px; }
  @media (max-width: 1100px) {
    .handbooks-grid { grid-template-columns: repeat(2, 1fr); }
  }
  @media (max-width: 900px) {
    .handbooks-head { grid-template-columns: 1fr; }
    .handbooks-all { justify-self: start; }
  }
  @media (max-width: 640px) {
    .handbooks-grid { grid-template-columns: 1fr; }
  }

  /* ============ FAQ ============ */
  .faq { background: var(--paper); }
  .faq-grid {
    display: grid; grid-template-columns: 1fr 1.6fr; gap: 64px;
    margin-top: 48px; align-items: start;
  }
  .faq-left { position: sticky; top: 100px; }
  .faq-left .section-intro { margin-top: 20px; max-width: 380px; }
  .faq-list { display: flex; flex-direction: column; }
  .faq-item {
    border-top: 1px solid var(--rule-soft);
    transition: border-color 0.3s ease;
  }
  .faq-item:last-of-type { border-bottom: 1px solid var(--rule-soft); }
  .faq-item[open] { border-top-color: var(--indigo); }
  .faq-item[open] + .faq-item { border-top-color: var(--indigo); }
  .faq-item summary {
    list-style: none; cursor: pointer;
    padding: 26px 8px 26px 0;
    display: grid; grid-template-columns: 42px 1fr 32px; gap: 20px;
    align-items: center;
    font-family: var(--serif); font-weight: 400; font-size: 22px;
    line-height: 1.3; letter-spacing: -0.01em; color: var(--heading-color);
    transition: color 0.25s ease;
  }
  .faq-item summary::-webkit-details-marker { display: none; }
  .faq-item summary::marker { content: ""; }
  .faq-item summary:hover { color: var(--indigo); }
  .faq-num {
    font-family: var(--mono); font-size: 12px; letter-spacing: 0.14em;
    color: var(--indigo); font-weight: 500;
  }
  .faq-toggle {
    width: 28px; height: 28px; position: relative;
    border-radius: 50%; border: 1px solid var(--rule-soft);
    justify-self: end;
    transition: border-color 0.3s ease, background 0.3s ease, transform 0.4s ease;
  }
  .faq-toggle::before,
  .faq-toggle::after {
    content: ""; position: absolute; top: 50%; left: 50%;
    background: var(--navy);
    transition: background 0.3s ease, transform 0.4s ease, opacity 0.3s ease;
  }
  .faq-toggle::before {
    width: 12px; height: 1.6px; transform: translate(-50%, -50%);
  }
  .faq-toggle::after {
    width: 1.6px; height: 12px; transform: translate(-50%, -50%);
  }
  .faq-item summary:hover .faq-toggle { border-color: var(--indigo); }
  .faq-item summary:hover .faq-toggle::before,
  .faq-item summary:hover .faq-toggle::after { background: var(--indigo); }
  .faq-item[open] .faq-toggle {
    background: var(--indigo); border-color: var(--indigo);
    transform: rotate(180deg);
  }
  .faq-item[open] .faq-toggle::before { background: var(--cream); }
  .faq-item[open] .faq-toggle::after {
    opacity: 0; transform: translate(-50%, -50%) rotate(90deg);
  }
  .faq-body-wrap {
    display: grid; grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s ease;
  }
  .faq-item[open] .faq-body-wrap { grid-template-rows: 1fr; }
  .faq-body {
    overflow: hidden;
    padding-left: 62px; padding-right: 32px;
  }
  .faq-body p {
    font-size: 15px; line-height: 1.7; color: var(--ink-soft);
    padding: 0 0 28px;
  }
  .faq-body ul {
    list-style: none; padding: 0 0 28px;
  }
  .faq-body ul li {
    font-size: 15px; line-height: 1.7; color: var(--ink-soft);
    padding: 4px 0 4px 20px; position: relative;
  }
  .faq-body ul li::before {
    content: "\00B7"; position: absolute; left: 6px;
    color: var(--indigo); font-weight: 700;
  }
  @media (max-width: 900px) {
    .faq-grid { grid-template-columns: 1fr; gap: 32px; }
    .faq-left { position: static; }
    .faq-item summary { grid-template-columns: 36px 1fr 28px; gap: 14px; font-size: 18px; padding: 22px 0; }
    .faq-body { padding-left: 50px; padding-right: 0; }
  }

  /* ============ CHECK DIVIDER ============ */
  .check-divider {
    display: flex; align-items: center; justify-content: center;
    width: 100%; padding: 40px 0;
    transition: opacity 0.5s ease;
  }
  .check-divider--cream-to-paper { background: linear-gradient(180deg, var(--cream) 0%, var(--paper) 100%); }
  .check-divider--paper           { background: var(--paper); }
  .check-divider--paper-to-warm   { background: linear-gradient(180deg, var(--paper) 0%, var(--cream-warm) 100%); }

  .check-divider .cd-flourish {
    flex: 1; height: 64px; display: block; overflow: visible;
    transition: transform 0.5s ease;
  }
  .check-divider .cd-flourish path {
    fill: none; stroke-width: 1.8;
    opacity: 0.95;
    stroke-linecap: round;
    vector-effect: non-scaling-stroke;
    transition: opacity 0.5s ease;
  }
  .check-divider .cd-stop-pink   { stop-color: var(--brand-pink); transition: stop-color 0.5s ease; }
  .check-divider .cd-stop-mid    { stop-color: #7e23d2; transition: stop-color 0.5s ease; }
  .check-divider .cd-stop-purple { stop-color: var(--indigo-bright); transition: stop-color 0.5s ease; }
  .check-divider:hover .cd-stop-pink   { stop-color: var(--indigo); }
  .check-divider:hover .cd-stop-mid    { stop-color: var(--indigo-bright); }
  .check-divider:hover .cd-stop-purple { stop-color: var(--indigo-bright); }

  .check-divider:hover .cd-flourish:first-of-type {
    animation: cd-wobble-left 1.8s ease-in-out infinite;
  }
  .check-divider:hover .cd-flourish:last-of-type {
    animation: cd-wobble-right 1.8s ease-in-out infinite;
  }

  .check-divider .cd-mark {
    flex: 0 0 auto; width: 92px; height: 60px;
    margin: 0 22px; overflow: visible;
  }
  .check-divider .cd-mark path {
    fill: var(--brand-pink);
    transform-origin: 82.65px 63.7px;
    animation: cd-breathe 3.6s ease-in-out infinite;
    transition: fill 0.5s ease;
  }
  .check-divider:hover .cd-mark path {
    animation-duration: 1.4s;
    fill: var(--indigo);
  }

  @keyframes cd-breathe {
    0%, 100% { transform: scale(1); opacity: 0.9; }
    50%      { transform: scale(1.16); opacity: 1; }
  }
  @keyframes cd-wobble-left {
    0%, 100% { transform: translateY(0) rotate(0); }
    25%      { transform: translateY(-2px) rotate(-0.3deg); }
    50%      { transform: translateY(0) rotate(0); }
    75%      { transform: translateY(2px) rotate(0.3deg); }
  }
  @keyframes cd-wobble-right {
    0%, 100% { transform: translateY(0) rotate(0); }
    25%      { transform: translateY(2px) rotate(0.3deg); }
    50%      { transform: translateY(0) rotate(0); }
    75%      { transform: translateY(-2px) rotate(-0.3deg); }
  }
  @media (prefers-reduced-motion: reduce) {
    .check-divider .cd-mark path,
    .check-divider:hover .cd-flourish { animation: none; }
  }

  /* ============ REVEAL ANIMATION (progressive enhancement) ============
     Por defecto los .reveal están VISIBLES: sin JS (bots, crawlers, o el
     fallback "API caída" del patrón de hidratación), el contenido siempre
     se ve — principio SSR del portal. El estado oculto+animado es opt-in:
     lo habilita `premier-reveal.js` agregando `.js-reveal` en <html>, y
     SOLO si el usuario no pidió menos movimiento (prefers-reduced-motion).
     Sin esto los .reveal quedaban en opacity:0 para siempre (no portamos
     el IntersectionObserver del main.js de Premier). */
  .reveal { opacity: 1; transform: none; }
  @media (prefers-reduced-motion: no-preference) {
    html.js-reveal .reveal { opacity: 0; transform: translateY(30px); transition: opacity 0.8s ease, transform 0.8s ease; }
    html.js-reveal .reveal.visible { opacity: 1; transform: translateY(0); }
  }

  /* ==========================================================================
     BLOG POST ARTICLE — F1.2 (Premier adaptation, Blog Etapa 1, 2026-07-24)
     --------------------------------------------------------------------------
     Port VERBATIM de premier-site/public/styles/blog-hipaa-violations.css
     (fuente de verdad visual — sólo leer, no modificar allí), MENOS:

       - :root / *,html,body / a / ::selection / nav.main-nav / footer:
         ya viven en este archivo (arriba) como chrome compartido de TODO
         el sitio (navbar_renderer.py / footer_renderer.py inyectan el
         mismo header/footer en cualquier página) — re-portarlos hubiera
         duplicado reglas y arriesgado pisar el nav/footer más completo
         (hamburguesa mobile, etc.) que ya vive acá.
       - Colores: la fuente ya usa var(--navy/--indigo/--brand-pink/...) —
         mismos nombres de token que este archivo ya declara arriba, así
         que no hace falta ningún mapeo.

     Único cambio real de contenido: `.container` / `.container-wide` de
     la fuente NO se portan como reglas globales (`.container` YA existe
     arriba con max-width:1400px para el resto del sitio — pisarlo global
     habría angostado TODAS las demás páginas a 900px, el bug de "regla
     de scope" documentado en las lecciones de QA de este proyecto).
     En su lugar, el max-width:900px del artículo se scopea a los
     contenedores propios del post (.article-header/.article-body/
     .sources/.article-cta), que son clases nuevas sin colisión.
     ========================================================================== */

  .article-header .container,
  .article-body .container,
  .sources .container,
  .article-cta .container {
    max-width: 900px; margin: 0 auto; padding: 0 32px;
  }
  .container-wide { max-width: 1200px; margin: 0 auto; padding: 0 32px; }

  .article-header {
    background: var(--cream); padding: 72px 0 60px;
    border-bottom: 1px solid var(--rule-soft);
    position: relative; overflow: hidden;
  }
  .article-header::before {
    content: ""; position: absolute; inset: 0;
    background: radial-gradient(ellipse at 90% 20%, rgba(var(--brand-pink-rgb), 0.12), transparent 60%);
    pointer-events: none;
  }
  .breadcrumb { font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 32px; position: relative; }
  .breadcrumb a { color: var(--indigo); }
  .article-cat {
    display: inline-flex; align-items: center; gap: 12px;
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--brand-pink); font-weight: 500;
    margin-bottom: 20px; position: relative;
  }
  .article-cat::before {
    content: ""; width: 28px; height: 1px; background: var(--brand-pink);
  }
  .article-header h1 {
    font-family: var(--serif); font-weight: 300;
    font-size: clamp(38px, 5.5vw, 68px); line-height: 1.02;
    letter-spacing: -0.03em; color: var(--heading-color);
    margin-bottom: 28px; position: relative;
  }
  .article-header h1 em { font-style: italic; color: var(--indigo); }
  .article-lead {
    font-size: 20px; line-height: 1.55; color: var(--ink-soft);
    max-width: 780px; position: relative;
  }
  .article-byline {
    display: flex; gap: 16px; align-items: center;
    margin-top: 32px; padding-top: 24px;
    border-top: 1px solid var(--rule-soft);
    font-family: var(--mono); font-size: 12px; letter-spacing: 0.08em;
    color: var(--ink-soft); position: relative;
  }
  .article-byline strong { color: var(--heading-color); font-weight: 600; }

  /* Stats bar */
  .stats-bar {
    background: var(--navy); color: var(--cream);
    padding: 48px 0;
  }
  .stats-bar-grid {
    display: grid; grid-template-columns: repeat(4, 1fr);
    gap: 32px; max-width: 1200px; margin: 0 auto; padding: 0 32px;
  }
  .stats-bar-item { border-left: 2px solid var(--brand-pink); padding-left: 20px; }
  .stats-bar-num {
    font-family: var(--serif); font-weight: 300; font-size: 40px;
    color: var(--cream); line-height: 1; letter-spacing: -0.02em;
    margin-bottom: 10px;
  }
  .stats-bar-label {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; color: rgba(246,243,236,0.65);
    line-height: 1.5;
  }
  @media (max-width: 900px) {
    .stats-bar-grid { grid-template-columns: repeat(2, 1fr); gap: 24px; }
  }
  @media (max-width: 540px) {
    .stats-bar-grid { grid-template-columns: 1fr; }
  }

  /* Article body */
  .article-body { padding: 72px 0 96px; }
  .article-body h2 {
    font-family: var(--serif); font-weight: 400;
    font-size: clamp(28px, 3.5vw, 40px);
    line-height: 1.15; letter-spacing: -0.02em;
    color: var(--heading-color); margin: 56px 0 24px;
  }
  .article-body h3 {
    font-family: var(--serif); font-weight: 500;
    font-size: 22px; line-height: 1.25;
    color: var(--heading-color); margin: 32px 0 14px;
    letter-spacing: -0.01em;
  }
  .article-body p {
    font-size: 17px; line-height: 1.75; color: var(--ink);
    margin-bottom: 24px;
  }
  .article-body p.dropcap::first-letter,
  /* F1.2 blog (Lily 2026-07-25): la capitular (letra inicial grande) se
     aplica AUTOMÁTICAMENTE al primer párrafo del artículo — estándar
     editorial, sin que Lily tenga que marcarlo. Cubre tanto el primer <p>
     hijo directo del .container como el primero cuando hay elementos antes. */
  .article-body .container > p:first-of-type::first-letter {
    font-family: var(--serif); font-weight: 400; font-size: 76px;
    float: left; line-height: 0.9; padding: 6px 12px 0 0;
    color: var(--brand-pink);
  }
  .article-body a { color: var(--indigo); border-bottom: 1px solid rgba(74, 54, 224, 0.3); }
  .article-body a:hover { border-bottom-color: var(--indigo); }
  .article-body sup { font-size: 11px; color: var(--indigo); font-weight: 500; padding: 0 1px; }
  /* Alineación por clase (F1.2, Lily 2026-07-25) — la elige el editor por
     párrafo/encabezado; "left" es el default (sin clase). */
  .article-body .align-center { text-align: center; }
  .article-body .align-right  { text-align: right; }
  .article-body .align-justify { text-align: justify; }

  /* Imágenes del artículo (F1.2, Lily 2026-07-25): tamaño por preset
     (img-sm/md/lg/full) o fino (atributo width px), y posición
     (izquierda/derecha flotan y el texto envuelve; centro = bloque centrado).
     max-width:100% asegura que nunca desborde el contenedor en móvil. */
  .article-body img {
    max-width: 100%; height: auto;
    border-radius: 10px; display: block; margin: 28px 0;
  }
  .article-body img.img-sm   { width: 35%; }
  .article-body img.img-md   { width: 55%; }
  .article-body img.img-lg   { width: 75%; }
  .article-body img.img-full { width: 100%; }
  .article-body img.img-left  { float: left;  margin: 6px 32px 18px 0; }
  .article-body img.img-right { float: right; margin: 6px 0 18px 32px; }
  .article-body img.img-center { display: block; float: none; margin-left: auto; margin-right: auto; }

  /* Pull quote */
  .pull-quote {
    border-left: 3px solid var(--brand-pink);
    padding: 8px 0 8px 32px;
    margin: 48px 0;
    font-family: var(--serif); font-style: italic; font-weight: 300;
    font-size: 24px; line-height: 1.4;
    color: var(--heading-color); letter-spacing: -0.005em;
  }

  /* Case cards grid */
  .case-grid {
    display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px;
    margin: 40px 0;
  }
  .case-card {
    border: 1px solid var(--rule-soft);
    background: var(--paper);
    overflow: hidden;
    transition: transform 0.3s, box-shadow 0.3s;
  }
  .case-card:hover { transform: translateY(-3px); box-shadow: 0 20px 50px -22px rgba(15, 20, 56, 0.2); }
  .case-header {
    background: var(--navy); color: var(--cream);
    padding: 14px 24px;
    display: flex; justify-content: space-between; align-items: center;
    font-size: 14px;
  }
  .case-name { font-weight: 600; letter-spacing: -0.005em; }
  .case-year { font-family: var(--mono); font-size: 12px; opacity: 0.75; }
  .case-body { padding: 24px 24px 20px; }
  .case-amount {
    font-family: var(--serif); font-weight: 300; font-size: 40px;
    color: var(--brand-pink); line-height: 1; letter-spacing: -0.02em;
    margin-bottom: 14px;
  }
  .case-desc { font-size: 14px; line-height: 1.6; color: var(--ink-soft); margin-bottom: 16px; }
  .case-tag {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--brand-pink); font-weight: 600;
    padding-top: 14px; border-top: 1px solid var(--rule-soft);
    display: block;
  }
  @media (max-width: 720px) { .case-grid { grid-template-columns: 1fr; } }

  /* Penalty table */
  .penalty-table {
    width: 100%; border-collapse: collapse;
    margin: 32px 0 48px;
    font-size: 14px;
  }
  .penalty-table thead th {
    background: var(--indigo-soft); color: var(--heading-color);
    padding: 14px 18px; text-align: left;
    font-family: var(--sans); font-weight: 600; font-size: 12px;
    letter-spacing: 0.06em; text-transform: uppercase;
    border-bottom: 1px solid var(--indigo);
  }
  .penalty-table tbody tr { border-bottom: 1px solid var(--rule-soft); }
  .penalty-table tbody tr:last-child {
    background: rgba(255, 210, 74, 0.12);
    border-bottom: 1px solid rgba(255, 178, 30, 0.4);
  }
  .penalty-table td {
    padding: 16px 18px;
    color: var(--ink); vertical-align: top;
    line-height: 1.55;
  }
  .penalty-table td:first-child { font-weight: 600; color: var(--heading-color); }

  /* Warning box */
  .warning-box {
    border-left: 3px solid #d84a3f;
    background: rgba(216, 74, 63, 0.06);
    padding: 22px 26px;
    margin: 40px 0;
  }
  .warning-box strong {
    display: block; margin-bottom: 8px;
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.2em;
    text-transform: uppercase; color: #b83a30;
  }
  .warning-box p { font-size: 15px; line-height: 1.65; color: var(--ink); margin: 0; }

  /* Info box */
  .info-box {
    background: var(--indigo-soft);
    border: 1px solid rgba(74, 54, 224, 0.2);
    padding: 24px 28px;
    margin: 32px 0;
  }
  .info-box strong {
    display: block; margin-bottom: 12px;
    font-family: var(--mono); font-size: 11px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--indigo);
  }
  .info-box ul { list-style: none; padding: 0; margin: 0; }
  .info-box li {
    font-size: 15px; line-height: 1.6; color: var(--ink);
    padding: 6px 0 6px 22px; position: relative;
  }
  .info-box li::before {
    content: "→"; position: absolute; left: 0;
    color: var(--indigo); font-weight: 600;
  }

  /* Sources */
  .sources {
    background: var(--cream); padding: 56px 0;
    border-top: 1px solid var(--rule-soft);
  }
  .sources h3 {
    font-family: var(--mono); font-size: 12px; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--indigo);
    margin-bottom: 24px;
  }
  .sources ol {
    list-style: none; padding: 0; counter-reset: srcs;
  }
  .sources li {
    counter-increment: srcs;
    font-size: 13px; line-height: 1.6; color: var(--ink-soft);
    padding: 8px 0 8px 32px; position: relative;
    border-top: 1px solid var(--rule-soft);
  }
  .sources li::before {
    content: counter(srcs); position: absolute; left: 0;
    font-family: var(--mono); font-size: 11px; font-weight: 600;
    color: var(--indigo); letter-spacing: 0.06em;
  }
  .sources .disclaimer {
    margin-top: 32px; padding-top: 20px; border-top: 1px solid var(--rule-soft);
    font-size: 12px; color: var(--ink-soft); font-style: italic;
    line-height: 1.6;
  }

  /* Article CTA */
  .article-cta {
    background: var(--navy); color: var(--cream);
    padding: 96px 0;
    text-align: center;
    position: relative; overflow: hidden;
  }
  .article-cta::before {
    content: ""; position: absolute; inset: 0;
    background: radial-gradient(circle at 70% 50%, rgba(91, 70, 255, 0.3), transparent 60%);
  }
  .article-cta h2 {
    font-family: var(--serif); font-weight: 300;
    font-size: clamp(32px, 4.5vw, 56px); line-height: 1;
    letter-spacing: -0.03em; margin-bottom: 24px;
    position: relative;
  }
  .article-cta h2 em { font-style: italic; color: var(--indigo-bright); }
  .article-cta p {
    font-size: 17px; color: rgba(246,243,236,0.75);
    max-width: 560px; margin: 0 auto 36px;
    line-height: 1.55; position: relative;
  }
  .btn-cta {
    display: inline-flex; align-items: center; gap: 10px;
    padding: 16px 28px;
    background: var(--btn-primary-color, var(--indigo-bright));
    color: var(--btn-primary-text-color, var(--cream));
    font-size: 13px; font-weight: 600; letter-spacing: 0.08em;
    text-transform: uppercase; font-family: var(--sans);
    transition: background 0.25s;
    position: relative;
  }
  .btn-cta:hover { background: var(--cream); color: var(--heading-color); }
  .btn-cta .arr { transition: transform 0.3s; }
  .btn-cta:hover .arr { transform: translateX(4px); }

  @media (max-width: 640px) {
    .article-header { padding: 48px 0 40px; }
    .article-body { padding: 48px 0 64px; }
    .article-header .container,
    .article-body .container,
    .sources .container,
    .article-cta .container,
    .container-wide { padding: 0 20px; }
    .pull-quote { padding-left: 20px; font-size: 20px; margin: 32px 0; }
  }

  /* ==========================================================================
     F1.2 (2026-07-30) — Funciones del CMS que el tema no cubría.

     El tema se portó tal cual del sitio estático, que sólo tiene un footer de
     3 columnas. Todo lo demás que el gestor sabe emitir —redes sociales,
     bandas, tarjetas de contacto y mapa, CTAs con variante, radio de botón—
     quedaba sin estilo o sin emitirse. Son funciones del CMS, no del tema:
     aunque Premier hoy no las use, tienen que responder si el cliente las
     activa (decisión de Lily 2026-07-30).

     Regla de diseño: con la configuración actual de Premier NADA de esto se
     activa, así que el sitio no cambia. Estos estilos sólo entran en juego
     cuando la función se enciende desde el panel.
     ========================================================================== */

  /* ---- Redes sociales del footer ---- */
  .footer__socials {
    display: flex; gap: 18px; align-items: center;
    max-width: 1400px; margin: 40px auto 0; padding: 0 32px;
  }
  .footer__social-link {
    display: inline-flex; align-items: center; justify-content: center;
    width: 36px; height: 36px;
    color: var(--footer-text-color, var(--cream));
    opacity: 0.75; transition: opacity 0.2s, color 0.2s;
  }
  .footer__social-link:hover { opacity: 1; color: var(--brand-pink); }
  .footer__social-link svg { width: 20px; height: 20px; fill: currentColor; }

  /* ---- Bandas superior/inferior del footer (3 slots) ---- */
  .footer__band {
    max-width: 1400px; margin: 0 auto; padding: 40px 32px;
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px;
    border-bottom: 1px solid var(--rule);
  }
  .footer__band--bottom { border-bottom: none; border-top: 1px solid var(--rule); }
  .footer__band-slot { display: flex; flex-direction: column; gap: 16px; }
  .footer__band-slot--center { align-items: center; text-align: center; }
  .footer__band-slot--right  { align-items: flex-end; text-align: right; }

  /* ---- Tarjeta de contacto ---- */
  .footer__contact-card {
    color: var(--footer-text-color, var(--cream));
    font-size: 14px; line-height: 1.7;
  }
  /* F1.2 (31-jul): mismo estilo que el encabezado de las columnas
     (.footer-col h5). Estaba en --brand-pink a 11px, un color elegido a ojo
     que hacía desentonar una tarjeta puesta en columna con las de al lado. */
  .footer__contact-card h3,
  .footer__map-card h3 {
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.24em;
    text-transform: uppercase; color: var(--indigo-bright);
    margin: 0 0 24px; font-weight: 600;
  }
  .footer__contact-card address { font-style: normal; margin: 0 0 8px; opacity: 0.85; }
  .footer__contact-card a { color: inherit; opacity: 0.85; }
  .footer__contact-card a:hover { opacity: 1; color: var(--brand-pink); }

  /* ---- Tarjeta de mapa ---- */
  .footer__map-card { width: 100%; }

  .footer__map-card iframe {
    width: 100%; min-height: 220px; border: 1px solid var(--rule); display: block;
  }

  /* ---- CTAs dentro de las tarjetas ---- */
  .footer__ctas { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 16px; }
  .footer__ctas .btn { padding: 12px 20px; font-size: 12px; }

  /* ---- Marca en texto cuando no hay logo ---- */
  .footer__brand-text {
    font-family: var(--serif); font-size: 26px; font-weight: 400;
    color: var(--footer-text-color, var(--cream)); display: block;
  }

  /* ---- Logo monocromo teñido con el color del footer ---- */
  .footer__logo--masked {
    background-color: var(--footer-text-color, var(--cream));
    -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
    -webkit-mask-size: contain;    mask-size: contain;
    display: block;
  }

  /* ---- Variantes de botón del CMS ----
     El diseño de Premier usa un solo estilo, pero el gestor ofrece cuatro.
     Se mapean sobre los colores de Marca para que respondan de verdad. */
  .btn--filled-primary {
    background: var(--btn-primary-color, var(--indigo-bright));
    color: var(--btn-primary-text-color, var(--cream));
    border: 1.5px solid transparent;
  }
  .btn--filled-accent {
    background: var(--btn-secondary-color, var(--brand-pink));
    color: var(--btn-secondary-text-color, var(--cream));
    border: 1.5px solid transparent;
  }
  .btn--outline-primary {
    background: transparent;
    color: var(--btn-primary-color, var(--indigo-bright));
    border: 1.5px solid var(--btn-primary-color, var(--indigo-bright));
  }
  .btn--outline-accent {
    background: transparent;
    color: var(--btn-secondary-color, var(--brand-pink));
    border: 1.5px solid var(--btn-secondary-color, var(--brand-pink));
  }
  .btn--filled-primary:hover, .btn--filled-accent:hover { filter: brightness(1.15); }
  .btn--outline-primary:hover {
    background: var(--btn-primary-color, var(--indigo-bright));
    color: var(--btn-primary-text-color, var(--cream));
  }
  .btn--outline-accent:hover {
    background: var(--btn-secondary-color, var(--brand-pink));
    color: var(--btn-secondary-text-color, var(--cream));
  }

  /* ---- Variantes del CTA del navbar ----
     Premier usa el relleno navy; las otras tres responden a Marca. */
  .nav-links .nav-cta--primary {
    background: var(--btn-primary-color, var(--navy));
    color: var(--btn-primary-text-color, var(--cream));
  }
  .nav-links .nav-cta--outline-primary {
    background: transparent;
    color: var(--btn-primary-color, var(--navy));
    box-shadow: inset 0 0 0 1.5px var(--btn-primary-color, var(--navy));
  }
  .nav-links .nav-cta--outline-accent {
    background: transparent;
    color: var(--btn-secondary-color, var(--brand-pink));
    box-shadow: inset 0 0 0 1.5px var(--btn-secondary-color, var(--brand-pink));
  }
  .nav-links .nav-cta--outline-primary:hover,
  .nav-links .nav-cta--outline-accent:hover {
    background: var(--indigo); color: var(--cream); box-shadow: none;
  }

  /* ---- Forma del botón (Marca → forma) ----
     Premier es de esquinas rectas, así que el default es 0. Si el cliente
     elige otra forma, --btn-radius llega desde Marca y los botones responden. */
  .btn, .nav-cta, .footer__ctas .btn { border-radius: var(--btn-radius, 0); }

  /* ---- Diseño de la barra superior (Barra Superior → Diseño) ----
     F1.2 (2026-07-30): la plantilla emitía siempre el mismo <nav> y descartaba
     la disposición y el fondo elegidos en el panel — dos controles muertos.
     El default `--bg-white` + `--inline` es el diseño de Premier, así que el
     sitio no cambia; las demás variantes sólo entran si se eligen. */

  /* Disposición */
  .nav-inner--stacked-center {
    flex-direction: column; gap: 14px; justify-content: center;
  }
  .nav-inner--stacked-center .nav-links { justify-content: center; }

  /* Los degradados que ofrece el panel vivían SÓLO en tokens.css, que carga
     el admin y NO el sitio público. Resultado: var(--gradient-deep) no
     resolvía, el fondo quedaba blanco y el texto —ya puesto en crema por la
     regla de fondo oscuro— se volvía ilegible. Se definen acá, derivados de
     Marca, para que el tema sea autosuficiente en el frontend. */
  nav.main-nav[class*="--bg-gradient"] {
    --gradient-primary: linear-gradient(180deg,
      var(--brand-accent, var(--indigo)) 0%, var(--navy) 100%);
    --gradient-accent: linear-gradient(180deg,
      var(--brand-secondary, var(--brand-pink)) 0%, var(--navy) 100%);
    --gradient-deep: linear-gradient(135deg,
      color-mix(in srgb, var(--navy) 70%, var(--brand-accent, var(--indigo)) 30%) 0%,
      var(--navy) 55%, var(--navy-deep) 100%);
    --gradient-band: linear-gradient(135deg,
      color-mix(in srgb, var(--navy) 70%, var(--brand-accent, var(--indigo)) 30%) 0%,
      var(--navy) 100%);
    --gradient-soft: linear-gradient(180deg, #FFFFFF 0%, var(--cream-warm) 100%);
    --gradient-trust: linear-gradient(135deg,
      var(--indigo-soft) 0%,
      color-mix(in srgb, var(--indigo-soft) 70%, var(--brand-accent, var(--indigo)) 30%) 100%);
  }

  /* Fondos sólidos y degradados. Los claros conservan el texto navy; los
     oscuros pasan a texto crema (regla brand-vs-bg del renderer). */
  /* Se califican con `nav` porque la regla base es `nav.main-nav` (0,1,1):
     sin eso las variantes pierden por especificidad y no se aplican. */
  nav.main-nav--bg-white          { background: var(--paper); }
  nav.main-nav--bg-gradient-soft  { background-image: var(--gradient-soft); }
  nav.main-nav--bg-gradient-trust { background-image: var(--gradient-trust); }
  nav.main-nav--bg-primary        { background: var(--brand-primary, var(--navy)); }
  nav.main-nav--bg-accent         { background: var(--brand-accent, var(--indigo)); }
  nav.main-nav--bg-gradient-primary { background-image: var(--gradient-primary); }
  nav.main-nav--bg-gradient-accent  { background-image: var(--gradient-accent); }
  nav.main-nav--bg-gradient-deep    { background-image: var(--gradient-deep); }
  nav.main-nav--bg-gradient-band    { background-image: var(--gradient-band); }

  /* Degradado radial: base sólida + dos manchas de color. El renderer inyecta
     --navbar-radial-base / -blob-a / -blob-b desde los colores del panel. */
  nav.main-nav--bg-gradient-radial {
    background-color: var(--navbar-radial-base, var(--navy));
    background-image:
      radial-gradient(ellipse 50% 120% at 15% 40%,
                      var(--navbar-radial-blob-a, transparent) 0%, transparent 70%),
      radial-gradient(ellipse 45% 110% at 85% 60%,
                      var(--navbar-radial-blob-b, transparent) 0%, transparent 70%);
  }

  /* Sobre fondo oscuro el texto de la barra pasa a crema. */
  .main-nav--bg-primary .nav-links a,
  .main-nav--bg-accent .nav-links a,
  .main-nav--bg-gradient-primary .nav-links a,
  .main-nav--bg-gradient-accent .nav-links a,
  .main-nav--bg-gradient-deep .nav-links a,
  .main-nav--bg-gradient-band .nav-links a,
  .main-nav--bg-gradient-radial .nav-links a { color: var(--cream); }
  /* ...salvo que la base radial elegida sea clara (lo decide el renderer). */
  .main-nav--radial-light .nav-links a { color: var(--heading-color); }

  /* ---- Banner superior (Banner Superior del panel) ----
     F1.2 (2026-07-31): el renderer lo inyecta en el frontend desde siempre,
     pero sus estilos vivían en style.css —la hoja del portal LTG— que el sitio
     de Premier NO carga, así que salía crudo. Se portan acá adaptados al tema:
     tipografía mono como el resto de las etiquetas de Premier y colores de
     Marca por defecto, que el banner puede sobrescribir con su style inline. */
  .top-banner {
    position: relative; z-index: 101;
    padding: 10px 0;
    background: var(--brand-primary, var(--navy));
    border-bottom: 1px solid var(--rule);
    font-family: var(--mono); font-size: 11px;
    letter-spacing: 0.12em; text-transform: uppercase;
  }
  .top-banner__inner {
    max-width: 1400px; margin: 0 auto; padding: 0 32px;
    display: flex; align-items: center; justify-content: center;
    gap: 12px; text-align: center; flex-wrap: wrap;
  }
  .top-banner__icon { flex-shrink: 0; font-size: 1.15em; line-height: 1; }
  .top-banner__text {
    margin: 0; min-width: 0; word-break: break-word;
    color: var(--cream);
  }
  .top-banner__text strong {
    font-weight: 700; margin-right: 0.25em;
    color: var(--brand-secondary, var(--brand-pink));
  }
  @media (max-width: 700px) {
    .top-banner { font-size: 10px; letter-spacing: 0.08em; }
    .top-banner__inner { padding: 0 20px; }
  }

  /* ==========================================================================
     Widget de Ayuda — F1.2 (2026-07-31)

     help-widget.js lo inyecta en el frontend desde siempre, pero sus reglas
     viven en style.css —la hoja del portal LTG— que el sitio de Premier NO
     carga. Se renderizaba crudo, sin forma, al pie de la página.

     Se portan acá en vez de cargar style.css entera, que traería todo el
     diseño de LTG. Las ~34 variables de las que dependen se definen ACOTADAS
     al widget (y al backdrop, que cuelga del body y no heredaría de él),
     mapeadas a los tokens de Premier: no se filtran al resto del sitio.

     Dos trampas del port, ambas encontradas midiendo el estilo computado:
       - Los @media se conservan como tales. Aplanados, las reglas de la
         variante móvil se aplicaban SIEMPRE y el botón quedaba `position:
         static` (invisible) en escritorio.
       - style.css documenta la estructura del widget en un comentario cuyas
         líneas parecen selectores: hay que quitar comentarios ANTES de
         extraer o se traga la regla base.
     ========================================================================== */

  .help-widget,
  .help-widget__backdrop {
    --color-primary-900: var(--navy);
    --color-primary-700: color-mix(in srgb, var(--navy) 70%, var(--indigo) 30%);
    --color-primary-50:  var(--indigo-soft);
    --color-accent-500:  var(--brand-secondary, var(--brand-pink));
    --color-neutral-50:  var(--paper);
    --color-neutral-500: var(--ink-soft);
    --color-neutral-700: var(--ink);
    --color-success-500: #16A34A;
    --color-white:       #FFFFFF;
    --text-primary-color:   var(--heading-color);
    --text-body-color:      var(--ink);
    --text-secondary-color: var(--ink-soft);
    --gradient-deep: linear-gradient(135deg,
      color-mix(in srgb, var(--navy) 70%, var(--indigo) 30%) 0%,
      var(--navy) 55%, var(--navy-deep) 100%);
    --font-body: var(--sans);
    --fs-h4: 18px; --fs-body-lg: 16px; --fs-body-sm: 14px; --fs-caption: 12px;
    --space-1: 4px;  --space-2: 8px;  --space-3: 12px; --space-4: 16px;
    --space-5: 20px; --space-6: 24px; --space-8: 32px;
    /* Premier es de esquinas rectas; el pill se conserva sólo en el botón
       flotante, patrón estándar que ya existe en el diseño (.hero-tag). */
    --radius-md: 0; --radius-lg: 0; --radius-pill: 999px;
    --shadow-md: 0 4px 12px rgba(11, 27, 38, 0.10);
    --shadow-lg: 0 12px 32px rgba(11, 27, 38, 0.14);
    --shadow-card-elevated: 0 12px 32px rgba(11, 27, 38, 0.10), 0 2px 8px rgba(11, 27, 38, 0.06);
    --shadow-card-glow-accent: 0 12px 32px rgba(11, 27, 38, 0.10),
                               0 0 0 1px color-mix(in srgb, var(--brand-pink) 12%, transparent);
    --t-fast: 0.15s; --t-base: 0.3s;
  }

  .help-widget {
  position: fixed;
  bottom: var(--space-6);
  right: var(--space-6);
  z-index: 500;
  font-family: var(--font-body);
  }
  .help-widget__btn {
  width: 56px;
  height: 56px;
  border-radius: var(--radius-pill);
  background: var(--color-primary-700);
  color: #fff;
  border: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-lg);
  transition: background var(--t-base), transform var(--t-fast);
  }
  .help-widget__btn:hover,
.help-widget__btn:focus-visible {
  background: var(--color-primary-900);
  transform: scale(1.05);
  }
  .help-widget__btn svg {
  width: 24px;
  height: 24px;
  }
  .help-widget__btn-label {
  position: absolute;
  right: 68px;
  top: 50%;
  transform: translateY(-50%);
  background: var(--color-white);
  color: var(--text-body-color, var(--color-neutral-700));
  font-size: var(--fs-body-sm);
  font-weight: 600;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-md);
  white-space: nowrap;
  max-width: 200px;
  overflow: hidden;
  text-overflow: ellipsis;
  pointer-events: none;
  opacity: 0;
  transition: opacity var(--t-fast);
  }
  .help-widget__btn:hover + .help-widget__btn-label,
.help-widget__btn-label--visible {
  opacity: 1;
  }
  .help-widget.is-open .help-widget__btn-label {
  display: none;
  }
  .help-widget__panel {
  position: fixed;
  bottom: calc(var(--space-6) + 56px + var(--space-4));
  right: var(--space-6);
  width: 360px;
  max-width: calc(100vw - var(--space-6) * 2);
  max-height: 70vh;
  background: var(--color-white);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  display: flex;
  flex-direction: column;
  z-index: 501;
  transform: translateY(10px) scale(0.95);
  opacity: 0;
  pointer-events: none;
  transition: transform var(--t-base), opacity var(--t-base);
  overflow: hidden;
  }
  .help-widget__panel.is-open {
  transform: translateY(0) scale(1);
  opacity: 1;
  pointer-events: auto;
  }
  .help-widget__panel-header {
  background-image: var(--gradient-deep);  
  padding: var(--space-5) var(--space-5) var(--space-4);
  position: relative;
  flex-shrink: 0;
  }
  .help-widget__panel-eyebrow {
  color: rgba(255, 255, 255, 0.55);
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 6px;
  }
  .help-widget__panel-title {
  color: #fff;
  font-size: var(--fs-h4);
  font-weight: 700;
  margin: 0 var(--space-8) var(--space-1) 0;
  overflow-wrap: break-word;
  word-break: break-word;
  }
  .help-widget__panel-subtitle {
  color: rgba(255, 255, 255, 0.75);
  font-size: var(--fs-body-sm);
  margin: 0 var(--space-8) 0 0;
  overflow-wrap: break-word;
  word-break: break-word;
  }
  .help-widget__panel-close {
  position: absolute;
  top: var(--space-3);
  right: var(--space-3);
  width: 32px;
  height: 32px;
  border-radius: var(--radius-pill);
  background: rgba(255, 255, 255, 0.15);
  border: none;
  color: #fff;
  font-size: var(--fs-h4);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background var(--t-fast);
  line-height: 1;
  }
  .help-widget__panel-close:hover,
.help-widget__panel-close:focus-visible {
  background: rgba(255, 255, 255, 0.3);
  }
  .help-widget__panel-body {
  padding: var(--space-4);
  overflow-y: auto;
  flex: 1;
  min-height: 0;
  background: var(--color-neutral-50);
  }
  .help-widget__card {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  background: var(--color-white);
  border-radius: var(--radius-md);
  padding: var(--space-4);
  margin-bottom: var(--space-3);
  text-decoration: none;
  color: var(--text-body-color, var(--color-neutral-700));
  box-shadow: var(--shadow-card-elevated);
  transition: box-shadow var(--t-fast), transform var(--t-fast);
  cursor: pointer;
  }
  .help-widget__card:last-child {
  margin-bottom: 0;
  }
  .help-widget__card:hover,
.help-widget__card:focus-visible {
  box-shadow: var(--shadow-card-glow-accent);
  transform: translateY(-2px);
  text-decoration: none;
  }
  .help-widget__card-icon {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  }
  .help-widget__card-icon svg {
  width: 20px;
  height: 20px;
  }
  .help-widget__card-icon--primary,
.help-widget__card-icon--contact {
  background: var(--color-primary-50);
  color: var(--text-primary-color, var(--color-primary-700));
  }
  .help-widget__card-icon--accent,
.help-widget__card-icon--faqs {
  background: rgba(183, 17, 196, 0.10);
  color: var(--color-accent-500);
  }
  .help-widget__card-icon--secondary {
  background: rgba(74, 54, 224, 0.10);  
  color: var(--color-primary-700);
  }
  .help-widget__card-icon--success,
.help-widget__card-icon--links {
  background: rgba(22, 163, 74, 0.10);
  color: var(--color-success-500);
  }
  .help-widget__card-icon--whatsapp {
  background: rgba(37, 211, 102, 0.10);
  color: #25D366;
  }
  .help-widget__card-body {
  flex: 1;
  min-width: 0;
  }
  .help-widget__card-title {
  font-size: var(--fs-body-sm);
  font-weight: 600;
  color: var(--text-primary-color, var(--color-primary-900));
  margin: 0;
  word-break: break-word;
  }
  .help-widget__card-desc {
  font-size: var(--fs-caption);
  color: var(--text-secondary-color, var(--color-neutral-500));
  margin: 2px 0 0 0;
  word-break: break-word;
  }
  .help-widget__card-arrow {
  flex-shrink: 0;
  color: var(--text-secondary-color, var(--color-neutral-500));
  font-size: var(--fs-body-lg);
  transition: transform var(--t-fast), color var(--t-fast);
  }
  .help-widget__card:hover .help-widget__card-arrow {
  transform: translateX(2px);
  color: var(--color-accent-500);
  }
  .help-widget__backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(11, 27, 38, 0.45);
  z-index: 499;
  }

  @media (max-width: 768px) {
    .help-widget {
    bottom: var(--space-4);
    right: var(--space-4);
    }
    .help-widget__btn {
    width: 48px;
    height: 48px;
    }
    .help-widget__btn svg {
    width: 20px;
    height: 20px;
    }
    .help-widget__btn-label {
    display: none;
    }
    .help-widget__panel {
    bottom: 0;
    right: 0;
    left: 0;
    width: 100%;
    max-height: 85vh;
    border-radius: var(--radius-lg) var(--radius-lg) 0 0;
    transform: translateY(100%);
    }
    .help-widget__panel.is-open {
    transform: translateY(0);
    }
    .help-widget__backdrop.is-open {
    display: block;
    }
  }


  /* ============ MENSAJES DEL FORMULARIO DE CONTACTO ============
     F1.2 (Lily 2026-07-31): al enviar "Send Request" el envío se guardaba y
     el correo salía, pero no se veía ninguna confirmación: contact.js rellena
     `.success-message` / `.error-message` y les quita `hidden`, pero sus
     estilos vivían SÓLO en style.css (portal LTG) y en tokens.css, y el
     frontend de Premier no carga ninguno de los dos. El texto aparecía sin
     formato y se perdía. Mismo patrón que ya pasó con el banner superior y el
     widget de ayuda: si algo se ve en LTG y no en Premier, revisar primero
     en qué hoja está escrito.
     Colores propios del tema (no variables de tokens.css). */
  .contact-form .form-messages:empty { display: none; }

  .contact-form .success-message,
  .contact-form .error-message {
    padding: 14px 18px;
    /* Sin border-radius: Premier es de esquinas rectas. El port original de
       style.css traía radius y hay un test del tema que lo prohíbe. */
    font-family: var(--sans);
    font-size: 0.9rem;
    line-height: 1.5;
    font-weight: 500;
    margin-bottom: 18px;
  }

  .contact-form .success-message {
    /* F1.2 (Lily 2026-07-31): era verde genérico; pasa al índigo de la marca.
       Se consume `--indigo`, que a su vez sale de `--brand-accent`, así que si
       se cambia el color de acento desde Marca el mensaje lo sigue solo.
       Contraste texto/fondo ≈ 6.6:1 (WCAG AA holgado). */
    background: var(--indigo-soft, #ebe8ff);
    color: var(--indigo, #4a36e0);
    border: 1px solid var(--indigo, #4a36e0);
    /* Se desvanece tras leerse — ver `is-fading` abajo. */
    transition: opacity 0.5s ease;
  }

  .contact-form .success-message.is-fading {
    opacity: 0;
  }

  .contact-form .error-message {
    background: #fdeeee;
    color: #8c2020;
    border: 1px solid #d99a9a;
  }

  .contact-form .error-message ul {
    margin: 8px 0 0;
    padding-left: 20px;
  }

  .contact-form .error-message li {
    font-weight: 400;
    margin: 4px 0;
  }

  /* Campo con error: el borde rojo tampoco estaba portado. */
  .contact-form .form-field--invalid input,
  .contact-form .form-field--invalid select,
  .contact-form .form-field--invalid textarea {
    border-color: #c0392b;
  }


  /* ============ TIENDA DE MANUALES (handbooks) ============
     F1.2 (2026-08-02): port de premier-site/public/styles/handbooks.css, la
     hoja propia de la página tienda del estático. El teaser del home ya tenía
     estilos (venían con el port del home), pero la TIENDA no: sus clases
     vivían en una hoja aparte que el frontend de Premier no carga.
     Mismo patrón que ya pasó con el banner superior, el widget de ayuda y los
     mensajes del formulario — si algo se ve en el estático y no acá, revisar
     primero en qué hoja está escrito.
     Se portan SÓLO las clases de la tienda: navbar, footer, container y logo
     ya estaban en este archivo y duplicarlos crearía dos fuentes de verdad. */
  .page-header {background: var(--cream); padding: 90px 0 70px;
    border-bottom: 1px solid var(--rule-soft);}

  .page-header h1 {font-family: var(--serif); font-weight: 300;
    font-size: clamp(40px, 6vw, 72px); line-height: 1;
    letter-spacing: -0.03em; color: var(--navy); margin-bottom: 24px;
    max-width: 900px;}

  .page-header h1 em {font-style: italic; color: var(--indigo);}

  .page-header p {font-size: 17px; line-height: 1.6; color: var(--ink-soft);
    max-width: 620px;}

  .filter-row {background: var(--paper); border-bottom: 1px solid var(--rule-soft);
    padding: 24px 0;
    display: flex; justify-content: center; gap: 12px; flex-wrap: wrap;
    position: sticky; top: 79px; z-index: 10;}

  .filter-chip {font-family: var(--mono); font-size: 11px; letter-spacing: 0.16em;
    text-transform: uppercase; padding: 8px 16px;
    border: 1px solid var(--rule-soft); border-radius: 999px;
    color: var(--ink-soft); background: transparent;
    cursor: pointer; transition: all 0.2s;}

  .filter-chip:hover {border-color: var(--indigo); color: var(--indigo);}

  .filter-chip.active {background: var(--navy); color: var(--cream); border-color: var(--navy);}

  .products {padding: 80px 0 120px;}

  .products-grid {display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px;}

  .product-card {display: flex; flex-direction: column;
    background: var(--paper);
    border: 1px solid var(--rule-soft);
    overflow: hidden;
    transition: transform 0.3s, box-shadow 0.3s, border-color 0.3s, opacity 0.3s;}

  .product-card.is-hidden {display: none;}

  .product-card.is-fading {opacity: 0; transform: translateY(6px);}

  .product-card:hover {transform: translateY(-4px);
    box-shadow: 0 24px 60px -22px rgba(15, 20, 56, 0.22);
    border-color: rgba(74, 54, 224, 0.4);}

  /* F1.2 (Lily 2026-08-02) — reestructurado. Antes el degradado iba en el
     `background` de la propia portada, así que al subir una imagen desde el
     panel (que llega como `background-image` en línea) el degradado se
     PERDÍA y el texto blanco quedaba sobre la foto, ilegible según la foto.
     Ahora la imagen va al fondo y el velo de color es una capa aparte, que
     se aplica igual haya foto o no.
     Los colores salen de --brand-secondary y --brand-accent, así que el velo
     sigue la marca configurada en el panel en vez de estar fijo. */
  .product-cover {aspect-ratio: 4/3;
    display: flex; flex-direction: column; align-items: flex-start; justify-content: flex-end;
    padding: 40px 32px;
    color: var(--cream);
    background-color: var(--navy);
    background-position: center; background-size: cover; background-repeat: no-repeat;
    position: relative; overflow: hidden;}

  /* Velo de marca: SIEMPRE encima de la imagen, debajo del texto. */
  .product-cover::after {content: ""; position: absolute; inset: 0; z-index: 0;
    background: linear-gradient(135deg,
      color-mix(in srgb, var(--velo, var(--brand-pink)) 82%, transparent) 0%,
      color-mix(in srgb, var(--navy) 92%, transparent) 100%);
    pointer-events: none;}

  /* Velo desactivado desde el panel: la imagen se ve tal cual. Se conserva un
     oscurecido mínimo abajo, donde va el texto, o el título blanco podría
     quedar ilegible sobre una foto clara. */
  .product-cover[data-velo="0"]::after {
    background: linear-gradient(to top, rgba(0,0,0,0.55) 0%,
                                        rgba(0,0,0,0.15) 42%,
                                        transparent 70%);}

  /* Rejilla decorativa, por encima del velo. */
  .product-cover::before {content: ""; position: absolute; inset: 0; z-index: 0;
    background-image:
      linear-gradient(rgba(255,255,255,0.06) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255,255,255,0.06) 1px, transparent 1px);
    background-size: 32px 32px; pointer-events: none;}

  .product-cover-cat {position: relative; z-index: 1;
    font-family: var(--mono); font-size: 10px; letter-spacing: 0.24em;
    text-transform: uppercase; opacity: 0.75; margin-bottom: 12px;}

  .product-cover-title {position: relative; z-index: 1;
    font-family: var(--serif); font-weight: 300; font-size: 30px;
    line-height: 1.1; letter-spacing: -0.01em;}

  .product-body {padding: 28px 32px; display: flex; flex-direction: column; flex: 1;}

  .product-meta {display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 14px;}

  .product-format {font-family: var(--mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-soft);}

  .product-price {font-family: var(--serif); font-size: 24px; color: var(--navy);
    letter-spacing: -0.01em;}

  .product-title {font-family: var(--serif); font-weight: 400; font-size: 24px;
    line-height: 1.2; letter-spacing: -0.01em; color: var(--navy);
    margin-bottom: 14px;}

  .product-desc {font-size: 14px; line-height: 1.65; color: var(--ink-soft);
    flex: 1; margin-bottom: 22px;}

  .product-includes {list-style: none; margin-bottom: 24px;}

  .product-includes li {font-size: 13px; color: var(--ink-soft);
    padding: 6px 0; border-top: 1px solid var(--rule-soft);
    display: flex; align-items: center; gap: 10px;}

  .product-includes li:first-child {border-top: none;}

  .product-includes li::before {content: "✓"; color: var(--indigo); font-weight: 600; font-size: 12px;}

  .btn-buy {display: inline-flex; align-items: center; justify-content: center; gap: 10px;
    padding: 14px 24px; font-size: 13px; font-weight: 600;
    letter-spacing: 0.08em; text-transform: uppercase;
    background: var(--indigo-bright); color: var(--cream);
    border: none; cursor: pointer; font-family: var(--sans);
    transition: all 0.25s;}

  .btn-buy:hover {background: var(--navy);}

  .btn-buy:focus-visible {outline: 2px solid var(--accent); outline-offset: 2px;}

  .btn-buy .arr {transition: transform 0.3s;}

  .btn-buy:hover .arr {transform: translateX(4px);}

@media (max-width: 1100px) {
  .products-grid {grid-template-columns: repeat(2, 1fr);}
}

@media (max-width: 720px)  {
  .products-grid {grid-template-columns: 1fr;}
}


  /* ============ FILTRO DE LA TIENDA ============
     F1.2 (Lily 2026-08-02). El estático tenía una fila de botones pegada al
     texto de arriba y sin aire entre botones y tarjetas; y no escalaba: con
     20 categorías sería un muro. Se rehace con espacio propio y dos
     presentaciones (botones hasta 6 categorías, desplegable a partir de ahí).
     Desviación deliberada del diseño original, acordada con Lily. */
  .products-filter {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    /* El aire que faltaba: separa del encabezado y de la grilla. */
    margin: 34px 0 40px;
    padding-top: 22px;
    border-top: 1px solid var(--rule-soft);
  }

  .products-filter .filter-chip {
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    padding: 9px 18px;
    border: 1px solid var(--rule-soft);
    background: transparent;
    color: var(--ink-soft);
    cursor: pointer;
    transition: color .2s, border-color .2s, background-color .2s;
  }

  .products-filter .filter-chip:hover {
    border-color: var(--indigo);
    color: var(--indigo);
  }

  .products-filter .filter-chip.is-active {
    background: var(--navy);
    border-color: var(--navy);
    color: var(--cream);
  }

  .products-filter .filter-chip:focus-visible {
    outline: 2px solid var(--indigo);
    outline-offset: 2px;
  }

  /* Variante desplegable (más de 6 categorías). */
  .products-filter--select {
    gap: 12px;
  }

  .products-filter__label {
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--ink-soft);
  }

  .products-filter__select {
    font-family: var(--sans);
    font-size: 15px;
    padding: 9px 14px;
    border: 1px solid var(--rule-soft);
    background: var(--paper);
    color: var(--ink);
    min-width: 220px;
    cursor: pointer;
  }

  .products-filter__select:focus-visible {
    outline: 2px solid var(--indigo);
    outline-offset: 2px;
  }

  .products-filter__count {
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.1em;
    color: var(--ink-soft);
    margin-left: auto;
  }

  /* Una tarjeta oculta por el filtro no debe dejar hueco en la grilla. */
  .products-grid .product-card[hidden] {
    display: none;
  }

  @media (max-width: 720px) {
    .products-filter {
      margin: 26px 0 30px;
    }
    .products-filter__count {
      margin-left: 0;
      width: 100%;
    }
  }


  /* ============ FICHA DE UN MANUAL ============
     F1.2 (Lily 2026-08-02). Vista propia de cada manual, a la que llevan las
     tarjetas del inicio y de la tienda. Reutiliza las clases de tarjeta que ya
     existen (.product-cover, .product-meta, .product-includes, .btn-buy) para
     no inventar un lenguaje visual nuevo. */
  .product-detail {
    padding: 70px 0 110px;
  }

  .product-detail__back {
    display: inline-block;
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--ink-soft);
    margin-bottom: 34px;
  }
  .product-detail__back:hover { color: var(--indigo); }

  .product-detail__grid {
    display: grid;
    grid-template-columns: minmax(0, 380px) minmax(0, 1fr);
    gap: 56px;
    align-items: start;
  }

  .product-detail__cover .product-cover {
    aspect-ratio: 3 / 4;
    position: sticky;
    top: 104px;   /* bajo el navbar, que mide 80 */
  }

  .product-detail__title {
    font-family: var(--serif);
    font-weight: 300;
    font-size: clamp(30px, 4vw, 46px);
    line-height: 1.1;
    letter-spacing: -0.02em;
    color: var(--navy);
    margin: 14px 0 18px;
  }

  .product-detail__desc {
    font-size: 17px;
    line-height: 1.65;
    color: var(--ink-soft);
    margin-bottom: 30px;
  }

  .product-detail__subtitle {
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ink-soft);
    margin-bottom: 14px;
  }

  .product-detail__sinpago {
    font-size: 15px;
    color: var(--ink-soft);
    padding: 14px 18px;
    background: var(--cream);
    border-left: 3px solid var(--rule-soft);
  }

  /* Enlace "ver detalles" de las tarjetas de la tienda. */
  .product-more {
    display: inline-block;
    font-family: var(--mono);
    font-size: 11px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--indigo);
    margin: 4px 0 14px;
  }
  .product-more:hover { text-decoration: underline; }

  .product-title a { color: inherit; }
  .product-title a:hover { color: var(--indigo); }

  @media (max-width: 860px) {
    .product-detail__grid {
      grid-template-columns: 1fr;
      gap: 32px;
    }
    .product-detail__cover .product-cover {
      position: static;
      max-width: 320px;
    }
  }
