  @font-face {
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('/assets/fonts/oswald-600.5f49329007.woff2') format('woff2');
  }
  @font-face {
    font-family: 'Oswald';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('/assets/fonts/oswald-600.5f49329007.woff2') format('woff2');
  }
  @font-face {
    font-family: 'Barlow';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('/assets/fonts/barlow-400.81419bf5ab.woff2') format('woff2');
  }
  @font-face {
    font-family: 'Barlow';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('/assets/fonts/barlow-600.a1e2a2d7d4.woff2') format('woff2');
  }
  @font-face {
    font-family: 'Barlow';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('/assets/fonts/barlow-700.15481e4eab.woff2') format('woff2');
  }

  :root {
    --bg: #f3f6f1;
    --bg-raised: #ffffff;
    --bg-sunken: #e6ece2;
    --text: #13211a;
    --text-soft: #43554a;
    --text-muted: #78857c;
    --line: #d7e0d3;
    --accent: #0b6e3b;
    --accent-strong: #084f2a;
    --accent-tint: #dcebe0;
    --verde: #0b6e3b;
    --verde-tint: #dcebe0;
    --gold: #97730a;
    --gold-tint: #fbeeb6;
    --yellow: #f5c518;
    --down: #b23a2e;
    --shadow: 0 1px 0 rgba(19,33,26,0.05);

    --font-display: 'Oswald', 'Arial Narrow', 'Segoe UI', system-ui, sans-serif;
    --font-body: 'Barlow', 'Segoe UI', system-ui, -apple-system, sans-serif;
    --font-mono: 'Barlow', 'Segoe UI', system-ui, sans-serif;
  }

  @media (prefers-color-scheme: dark) {
    :root {
      --bg: #0c130e;
      --bg-raised: #131c15;
      --bg-sunken: #080d09;
      --text: #ebf2ea;
      --text-soft: #b7c4b8;
      --text-muted: #7e8b7f;
      --line: #29352b;
      --accent: #35b368;
      --accent-strong: #55c982;
      --accent-tint: #123020;
      --verde: #35b368;
      --verde-tint: #12251a;
      --gold: #e4c24e;
      --gold-tint: #33290c;
      --yellow: #f5c518;
      --down: #e27a6e;
      --shadow: 0 1px 0 rgba(0,0,0,0.35);
    }
  }
  :root[data-theme="dark"] {
    --bg: #0c130e;
    --bg-raised: #131c15;
    --bg-sunken: #080d09;
    --text: #ebf2ea;
    --text-soft: #b7c4b8;
    --text-muted: #7e8b7f;
    --line: #29352b;
    --accent: #35b368;
    --accent-strong: #55c982;
    --accent-tint: #123020;
    --verde: #35b368;
    --verde-tint: #12251a;
    --gold: #e4c24e;
    --gold-tint: #33290c;
    --yellow: #f5c518;
    --down: #e27a6e;
    --shadow: 0 1px 0 rgba(0,0,0,0.35);
  }
  :root[data-theme="light"] {
    --bg: #f3f6f1;
    --bg-raised: #ffffff;
    --bg-sunken: #e6ece2;
    --text: #13211a;
    --text-soft: #43554a;
    --text-muted: #78857c;
    --line: #d7e0d3;
    --accent: #0b6e3b;
    --accent-strong: #084f2a;
    --accent-tint: #dcebe0;
    --verde: #0b6e3b;
    --verde-tint: #dcebe0;
    --gold: #97730a;
    --gold-tint: #fbeeb6;
    --yellow: #f5c518;
    --down: #b23a2e;
    --shadow: 0 1px 0 rgba(19,33,26,0.05);
  }

  * { box-sizing: border-box; }
  html { color-scheme: light dark; }
  body {
    margin: 0;
    background: var(--bg);
    color: var(--text);
    font-family: var(--font-body);
    font-size: 16px;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
  }
  a { color: inherit; }
  h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 600; margin: 0; text-wrap: balance; letter-spacing: 0.005em; }
  p { margin: 0; }
  img, svg { display: block; max-width: 100%; }
  .wrap { max-width: 1180px; margin: 0 auto; padding: 0 clamp(16px, 4vw, 40px); }
  .visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

  @media (prefers-reduced-motion: reduce) {
    * { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; }
  }

  /* ---------- franja de pico y placa ---------- */
  .pico-ribbon {
    background: #0f1712;
    color: #e9f0e8;
  }
  .pico-inner {
    display: flex;
    align-items: center;
    gap: 8px 20px;
    padding: 8px 0;
    flex-wrap: wrap;
  }
  .pico-title {
    font-family: var(--font-display);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--yellow);
    white-space: nowrap;
  }
  .pico-cities { display: flex; gap: 8px 20px; flex-wrap: wrap; align-items: center; }
  .pico-city { display: flex; align-items: baseline; gap: 7px; font-size: 12.5px; white-space: nowrap; }
  .pico-city b { color: #fff; font-weight: 700; }
  .pico-digits {
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 14px;
    color: #16220f;
    background: var(--yellow);
    padding: 1px 8px;
    border-radius: 3px;
    letter-spacing: 0.03em;
  }
  .pico-digits.libre { background: rgba(255,255,255,0.14); color: #cfe0cd; }
  .pico-time { color: rgba(233,240,232,0.6); font-size: 11.5px; }

  /* ---------- utility bar ---------- */
  .utility-bar {
    background: var(--accent);
    color: #fff;
  }
  .utility-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    padding: 9px 0;
    flex-wrap: wrap;
  }
  .utility-date {
    font-size: 13px;
    color: rgba(255,255,255,0.82);
    white-space: nowrap;
  }
  .ticker-label {
    font-size: 10.5px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    font-weight: 600;
    color: var(--yellow);
    white-space: nowrap;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 7px;
  }
  /* Botón de la barra: reemplaza al viejo sello "EN VIVO", que invitaba
     al clic y no llevaba a ninguna parte. Ahora muestra el dólar del día
     y abre el convertidor. */
  .dolar-cta {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.02em;
    text-decoration: none;
    color: #15200f;
    background: var(--yellow);
    padding: 4px 11px;
    border-radius: 999px;
    white-space: nowrap;
    transition: filter 160ms ease, transform 160ms ease;
  }
  .dolar-cta:hover, .dolar-cta:focus-visible { filter: brightness(1.08); transform: translateY(-1px); }
  .dolar-cta .dot {
    width: 6px; height: 6px; border-radius: 50%;
    background: #0b6e3b;
    animation: pulse 1.8s ease-in-out infinite;
  }
  .dolar-cta b { font-variant-numeric: tabular-nums; }
  .dolar-cta .flecha { font-weight: 700; }
  @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.35; } }

  /* ---------- cinta bursátil deslizante ---------- */
  .ticker-viewport {
    overflow: hidden;
    border-top: 1px solid rgba(255,255,255,0.16);
    position: relative;
  }
  .ticker-viewport::before,
  .ticker-viewport::after {
    content: '';
    position: absolute;
    top: 0; bottom: 0;
    width: 46px;
    z-index: 2;
    pointer-events: none;
  }
  .ticker-viewport::before { left: 0; background: linear-gradient(90deg, var(--accent), rgba(11,110,59,0)); }
  .ticker-viewport::after { right: 0; background: linear-gradient(270deg, var(--accent), rgba(11,110,59,0)); }
  .ticker-track {
    display: flex;
    width: max-content;
    animation: marquee 120s linear infinite;
    font-family: var(--font-mono);
    font-size: 13px;
    font-variant-numeric: tabular-nums;
  }
  .ticker-viewport:hover .ticker-track,
  .ticker-viewport:focus-within .ticker-track { animation-play-state: paused; }
  .ticker-set { display: flex; }
  @keyframes marquee {
    from { transform: translateX(0); }
    to { transform: translateX(-50%); }
  }
  .ticker-item {
    display: flex;
    align-items: baseline;
    gap: 7px;
    white-space: nowrap;
    padding: 9px 18px;
    border-right: 1px solid rgba(255,255,255,0.14);
  }
  .ticker-item[title] { cursor: help; }
  .ticker-item .name { color: rgba(255,255,255,0.74); }
  .ticker-item .val { color: #fff; font-weight: 700; }
  .ticker-item.live .name::before {
    content: ''; display: inline-block;
    width: 5px; height: 5px; border-radius: 50%;
    background: #7df0a6; margin-right: 6px; vertical-align: middle;
    animation: pulse 1.8s ease-in-out infinite;
  }
  .ticker-item .delta.up { color: #b9f5cf; font-weight: 600; }
  .ticker-item .delta.down { color: #ffd0c6; font-weight: 600; }
  .ticker-item .delta.flat { color: rgba(255,255,255,0.6); }
  @media (prefers-reduced-motion: reduce) {
    .ticker-track { animation: none; width: auto; overflow-x: auto; scrollbar-width: none; }
    .ticker-track::-webkit-scrollbar { display: none; }
  }

  /* ---------- espacios publicitarios ---------- */
  .ad-slot {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    background: var(--bg-sunken);
    border: 1px dashed var(--line);
    border-radius: 6px;
    padding: 16px;
    text-align: center;
  }
  .ad-label {
    font-family: var(--font-body);
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text-muted);
  }
  .ad-size { font-family: var(--font-display); font-size: 13px; font-weight: 600; color: var(--text-soft); letter-spacing: 0.04em; }
  .ad-hint { font-size: 11px; color: var(--text-muted); }
  .ad-billboard { min-height: 132px; }
  .ad-leaderboard { min-height: 106px; }
  .ad-rectangle { min-height: 258px; }
  .ad-wrap { padding: 26px 0; }
  .ad-wrap.tight { padding: 0 0 26px; }

  /* ---------- anuncios vendidos ---------- */
  .ad-unit { position: relative; border-radius: 8px; overflow: hidden; }
  .ad-unit .ad-tag {
    position: absolute;
    top: 10px; right: 12px;
    font-size: 9px;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    padding: 3px 8px;
    border-radius: 3px;
    z-index: 3;
  }
  .ad-body { display: flex; align-items: center; gap: 26px; padding: 26px 28px; flex-wrap: wrap; position: relative; z-index: 2; }

  /* Foto del anunciante. Capa absoluta: se funde con el degradado del aviso
     mediante mask-image y no participa del layout, así el alto no cambia. */
  .ad-media {
    position: absolute;
    top: 0; right: 0; bottom: 0;
    width: 46%;
    overflow: hidden;
    z-index: 0;
    pointer-events: none;
  }
  .ad-media img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    -webkit-mask-image: linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.3) 28%, rgba(0,0,0,0.82) 66%, #000 100%);
    mask-image: linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.3) 28%, rgba(0,0,0,0.82) 66%, #000 100%);
  }
  .ad-brand { font-family: var(--font-display); font-size: 13px; font-weight: 600; letter-spacing: 0.14em; text-transform: uppercase; }
  .ad-headline { font-family: var(--font-display); font-size: clamp(24px, 3vw, 34px); font-weight: 700; line-height: 1.05; text-transform: uppercase; letter-spacing: 0.01em; margin: 6px 0 8px; }
  .ad-text { font-size: 14px; max-width: 46ch; }
  .ad-actions { display: flex; gap: 12px; margin-top: 16px; flex-wrap: wrap; }
  .ad-cta {
    display: inline-block;
    font-family: var(--font-display);
    font-size: 14px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    text-decoration: none;
    padding: 10px 20px;
    border-radius: 4px;
    cursor: pointer;
    border: 2px solid transparent;
  }

  /* Tienda Sin Estrés — café */
  .ad-cafe { background: linear-gradient(120deg, #2a1a10 0%, #3d2617 55%, #5a3a20 100%); color: #f6ece0; }
  .ad-cafe .ad-tag { background: rgba(246,236,224,0.18); color: #f6ece0; }
  .ad-cafe .ad-brand { color: #f0b96a; }
  .ad-cafe .ad-headline { color: #fff8ef; }
  .ad-cafe .ad-text { color: rgba(246,236,224,0.82); }
  .ad-cafe .ad-cta.primary { background: #f0b96a; color: #2a1a10; }
  .ad-cafe .ad-cta.primary:hover { background: #ffd196; }
  .ad-cafe .ad-cta.ghost { background: transparent; color: #f6ece0; border-color: rgba(246,236,224,0.45); font-family: var(--font-display); }
  .ad-cafe .ad-cta.ghost:hover { border-color: #f0b96a; color: #f0b96a; }
  .ad-copy { flex: 1 1 320px; min-width: 0; }

  .ad-coupon {
    display: flex;
    align-items: center;
    gap: 16px;
    background: #fffaf3;
    color: #2a1a10;
    border-radius: 8px;
    padding: 14px 16px;
    flex: 0 1 330px;
  }
  .ad-coupon[hidden] { display: none; }
  .ad-coupon img { width: 108px; height: 108px; border-radius: 4px; flex-shrink: 0; }
  .coupon-title { font-family: var(--font-display); font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: #7a4a1e; }
  .coupon-code {
    font-family: var(--font-display);
    font-size: 25px;
    font-weight: 700;
    letter-spacing: 0.06em;
    margin: 3px 0;
    font-variant-numeric: tabular-nums;
  }
  .coupon-valid { font-size: 11.5px; color: #6b5341; line-height: 1.45; }

  /* Pirotecnia El Vaquero — nocturno */
  .ad-piro {
    background:
      radial-gradient(circle at 16% 26%, rgba(255,214,120,0.5) 0 2px, transparent 3px),
      radial-gradient(circle at 24% 16%, rgba(255,150,120,0.45) 0 2px, transparent 3px),
      radial-gradient(circle at 82% 30%, rgba(140,205,255,0.45) 0 2px, transparent 3px),
      radial-gradient(circle at 90% 62%, rgba(255,214,120,0.4) 0 2px, transparent 3px),
      radial-gradient(circle at 70% 18%, rgba(255,255,255,0.35) 0 1.5px, transparent 3px),
      radial-gradient(circle at 40% 78%, rgba(255,180,110,0.3) 0 2px, transparent 3px),
      radial-gradient(ellipse at 20% 20%, rgba(255,170,80,0.22), transparent 55%),
      radial-gradient(ellipse at 85% 45%, rgba(90,170,255,0.20), transparent 55%),
      linear-gradient(120deg, #0a1024 0%, #131c3a 60%, #1d1436 100%);
    color: #eef2ff;
    text-decoration: none;
    display: block;
  }
  .ad-piro .ad-tag { background: rgba(238,242,255,0.16); color: #eef2ff; }
  .ad-piro .ad-body { padding: 22px 28px; gap: 20px; }
  .ad-piro .ad-brand { color: #ffd166; }
  .ad-piro .ad-headline { color: #fff; font-size: clamp(21px, 2.6vw, 29px); }
  .ad-piro .ad-text { color: rgba(238,242,255,0.8); }
  .ad-piro .ad-cta { background: #ffd166; color: #16112b; margin-top: 4px; }
  .ad-piro:hover .ad-cta { background: #ffe1a0; }
  .ad-piro .ad-copy { flex: 1 1 340px; }
  .ad-piro-side { display: flex; flex-direction: column; gap: 4px; text-align: right; margin-left: auto; }
  .ad-piro-side .site { font-family: var(--font-display); font-size: 17px; font-weight: 600; color: #ffd166; letter-spacing: 0.03em; }
  .ad-piro-side .note { font-size: 11.5px; color: rgba(238,242,255,0.6); }

  @media (max-width: 640px) {
    .ad-body { padding: 20px; gap: 18px; }
    .ad-coupon { flex-basis: 100%; }
    .ad-piro-side { text-align: left; margin-left: 0; }
    /* En móvil el texto ocupa todo el ancho: la foto baja de intensidad
       para no competir con la lectura. */
    .ad-media { width: 62%; opacity: 0.5; }
  }

  /* ---------- masthead ---------- */
  .masthead { padding: 15px 0 12px; text-align: center; border-bottom: 4px solid var(--accent); position: relative; }
  .masthead::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: -4px;
    height: 4px;
    background: repeating-linear-gradient(90deg, var(--accent) 0 40px, var(--yellow) 40px 80px);
  }
  .masthead .kicker {
    display: inline-block;
    font-family: var(--font-body);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--accent-strong);
    background: var(--yellow);
    padding: 3px 10px;
    border-radius: 3px;
    margin: 0 0 8px;
  }
  .masthead h1, .masthead .marca {
    font-family: var(--font-display);
    font-size: clamp(28px, 4.2vw, 48px);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.01em;
    line-height: 0.94;
    color: var(--accent);
    margin: 0;
  }
  .masthead h1 .leo, .masthead .marca .leo { color: var(--gold); }
  .masthead .tagline {
    margin-top: 6px;
    font-size: 13px;
    color: var(--text-soft);
    max-width: 68ch;
    margin-left: auto;
    margin-right: auto;
  }

  /* ---------- nav ---------- */
  nav.primary {
    border-bottom: 1px solid var(--line);
    background: var(--bg-raised);
    position: sticky;
    top: 0;
    z-index: 20;
  }
  .nav-inner {
    display: flex;
    gap: 2px;
    flex-wrap: wrap;
    /* Debe quedar visible: con overflow, el navegador recorta el submenú
       desplegable de Secciones. Antes hacía falta scroll porque el menú
       tenía catorce enlaces; ahora son seis destinos y caben. */
    overflow: visible;
  }
  .nav-inner a {
    flex-shrink: 0;
    text-decoration: none;
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    color: var(--text-soft);
    padding: 13px 14px;
    border-bottom: 3px solid transparent;
    white-space: nowrap;
  }
  .nav-inner a:hover, .nav-inner a:focus-visible { color: var(--accent); border-bottom-color: var(--yellow); }
  .nav-inner a.current { color: var(--accent); border-bottom-color: var(--accent); }
  a:focus-visible, button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

  /* ---------- submenú de Secciones ---------- */
  .nav-grupo { position: relative; flex-shrink: 0; }
  .nav-sub-toggle {
    display: flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    color: var(--text-soft);
    background: none;
    border: none;
    border-bottom: 3px solid transparent;
    padding: 13px 14px;
    cursor: pointer;
    white-space: nowrap;
  }
  .nav-sub-toggle:hover, .nav-sub-toggle:focus-visible { color: var(--accent); border-bottom-color: var(--yellow); }
  .nav-caret {
    width: 0; height: 0;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 5px solid currentColor;
    transition: transform 200ms ease;
  }
  .nav-grupo.abierto .nav-sub-toggle { color: var(--accent); border-bottom-color: var(--accent); }
  .nav-grupo.abierto .nav-caret { transform: rotate(180deg); }
  .nav-sub {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    min-width: 232px;
    flex-direction: column;
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-top: 3px solid var(--accent);
    border-radius: 0 0 8px 8px;
    box-shadow: 0 14px 30px rgba(19,33,26,0.16);
    padding: 6px;
    z-index: 30;
  }
  .nav-grupo.abierto .nav-sub { display: flex; }
  .nav-inner .nav-sub a {
    font-size: 14px;
    padding: 9px 12px;
    border-bottom: 0;
    border-radius: 6px;
    white-space: nowrap;
  }
  .nav-inner .nav-sub a:hover, .nav-inner .nav-sub a:focus-visible {
    background: var(--accent-tint);
    color: var(--accent);
    border-bottom-color: transparent;
  }

  .nav-toggle {
    display: none;
    align-items: center;
    gap: 10px;
    width: 100%;
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--text);
    background: none;
    border: none;
    padding: 13px 0;
    cursor: pointer;
  }
  .nav-burger { position: relative; width: 20px; height: 2px; background: var(--accent); flex-shrink: 0; transition: background 0.2s; }
  .nav-burger::before, .nav-burger::after {
    content: '';
    position: absolute;
    left: 0;
    width: 20px;
    height: 2px;
    background: var(--accent);
    transition: transform 0.25s ease, top 0.25s ease;
  }
  .nav-burger::before { top: -6px; }
  .nav-burger::after { top: 6px; }
  .nav-toggle[aria-expanded="true"] .nav-burger { background: transparent; }
  .nav-toggle[aria-expanded="true"] .nav-burger::before { top: 0; transform: rotate(45deg); }
  .nav-toggle[aria-expanded="true"] .nav-burger::after { top: 0; transform: rotate(-45deg); }
  .nav-toggle .nav-toggle-hint { margin-left: auto; font-size: 11px; letter-spacing: 0.06em; color: var(--text-muted); }

  /* ---------- origin chip ---------- */
  .chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-family: var(--font-body);
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    padding: 3px 8px;
    border-radius: 3px;
    white-space: nowrap;
  }
  .chip.propio { background: var(--accent-tint); color: var(--accent-strong); }
  .chip.recirc { background: var(--gold-tint); color: var(--gold); }
  .chip::before { content: ''; width: 5px; height: 5px; border-radius: 50%; background: currentColor; flex-shrink: 0; }

  .tag {
    font-family: var(--font-display);
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--accent);
  }

  /* ---------- hero ---------- */
  .hero-section { padding: 40px 0 20px; }
  .hero-grid {
    display: grid;
    grid-template-columns: 1.3fr 1fr;
    gap: 44px;
  }
  .hero-art {
    aspect-ratio: 12 / 7;
    border-radius: 5px;
    background:
      linear-gradient(125deg, var(--accent) 0%, var(--accent) 46%, var(--yellow) 46%, var(--yellow) 54%, var(--accent-strong) 54%, var(--accent-strong) 100%);
    position: relative;
    margin-bottom: 10px;
    overflow: hidden;
  }
  .hero-art::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image:
      radial-gradient(circle at 20% 30%, rgba(0,0,0,0.16) 0 7px, transparent 8px),
      radial-gradient(circle at 72% 22%, rgba(0,0,0,0.14) 0 9px, transparent 10px),
      radial-gradient(circle at 85% 68%, rgba(0,0,0,0.14) 0 6px, transparent 7px),
      radial-gradient(circle at 38% 78%, rgba(0,0,0,0.12) 0 8px, transparent 9px),
      radial-gradient(circle at 55% 50%, rgba(0,0,0,0.10) 0 5px, transparent 6px);
    opacity: 0.7;
  }
  .hero-art::after {
    content: 'EL LEOPARDO ECONÓMICO';
    position: absolute;
    left: 18px; bottom: 14px;
    font-family: var(--font-display);
    font-weight: 700;
    font-size: 13px;
    letter-spacing: 0.14em;
    color: rgba(255,255,255,0.9);
  }
  .hero-figure { margin: 0; }
  .hero-art-img {
    width: 100%;
    height: auto;
    aspect-ratio: 12 / 7;
    object-fit: cover;
    border-radius: 5px;
    background: var(--bg-sunken);
    margin-bottom: 9px;
    display: block;
  }
  .hero-art-credit {
    font-size: 11.5px;
    line-height: 1.5;
    color: var(--text-soft);
  }
  .hero-art-credit span { color: var(--text-muted); font-style: italic; }
  .hero-eyebrow { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
  .hero-headline {
    font-size: clamp(28px, 3.8vw, 44px);
    line-height: 1.05;
    font-weight: 600;
    margin-bottom: 14px;
    letter-spacing: 0.003em;
  }
  .hero-headline a { text-decoration: none; }
  .hero-headline a:hover { color: var(--accent); }
  .hero-dek { font-size: 16.5px; color: var(--text-soft); max-width: 62ch; margin-bottom: 14px; }
  .hero-dek a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; font-weight: 600; }
  .hero-dek strong { color: var(--text); font-weight: 700; }
  .byline { font-size: 12.5px; color: var(--text-muted); }
  .byline b { color: var(--text-soft); font-weight: 600; }

  .secondary-list { display: flex; flex-direction: column; gap: 20px; }
  .secondary-item { padding-bottom: 20px; border-bottom: 1px solid var(--line); }
  .secondary-item:last-child { border-bottom: none; }
  /* `wrap` porque el chip lo escribe la redacción y puede ser largo: "Fuente:
     Cámara de Comercio de Bucaramanga" mide 281 px y no se encoge (lleva
     white-space: nowrap). En una fila que no envuelve, empujaba al titular
     fuera de la pantalla y hacía que la PORTADA ENTERA se deslizara de lado en
     el celular: 12 px medidos a 375 px de ancho. Envolver no cambia nada
     cuando sí caben. */
  .secondary-eyebrow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 8px; }
  .secondary-item h3 { font-size: 20px; line-height: 1.15; font-weight: 600; }
  .secondary-item h3 a { text-decoration: none; }
  .secondary-item h3 a:hover { color: var(--accent); }

  /* ---------- section grid ---------- */
  .section-block { padding: 44px 0; border-top: 1px solid var(--line); }
  .section-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 22px; gap: 16px; flex-wrap: wrap; }
  /* h1 y h2 comparten estilo: en /indicadores/ y /multimedia/ el titulo de la
     seccion es el H1 de la pagina, porque el del cabezote solo existe en la
     portada. Se ven igual, pero la jerarquia queda correcta. */
  .section-head h1, .section-head h2 { font-size: 28px; text-transform: uppercase; letter-spacing: 0.01em; position: relative; padding-left: 16px; }
  .section-head h1::before, .section-head h2::before { content: ''; position: absolute; left: 0; top: 4px; bottom: 4px; width: 5px; background: var(--yellow); border-radius: 2px; }
  .section-head .sub { font-size: 13px; color: var(--text-muted); }

  .core-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    gap: 20px;
  }
  .core-card {
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-top: 3px solid var(--accent);
    border-radius: 6px;
    padding: 20px;
    display: flex;
    flex-direction: column;
    gap: 12px;
  }
  .core-card h3 { font-size: 20px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.01em; }
  .core-card .desc { font-size: 13px; color: var(--text-soft); }
  .core-card .headlines { display: flex; flex-direction: column; gap: 8px; margin-top: 4px; }
  .core-card .headlines a {
    font-size: 13px;
    text-decoration: none;
    color: var(--text);
    display: block;
  }
  .core-card .headlines a:hover { color: var(--accent); }
  /* Mismo caso que .secondary-eyebrow: el chip no se encoge y aquí llegó a
     medir 281 px en una fila de 297, dejando el titular en 58 px y con su caja
     12 px por fuera de la pantalla. */
  .core-card .headlines .row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px; }
  .core-card .headlines .row .chip { margin-top: 2px; }
  /* Último cortafuegos, para un rótulo de fuente absurdamente largo: el chip no
     puede pasar del ancho de su fila. Con los de hoy no se nota —caben en su
     propia línea—, pero deja de ser posible que un texto del CMS deslice la
     página entera. */
  .secondary-eyebrow .chip,
  .core-card .headlines .row .chip { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }

  .comp-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
  }
  .comp-row a {
    text-decoration: none;
    font-family: var(--font-display);
    font-size: 14px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    color: var(--text-soft);
    background: var(--bg-sunken);
    border: 1px solid var(--line);
    border-radius: 3px;
    padding: 8px 16px;
  }
  .comp-row a:hover { color: #fff; background: var(--accent); border-color: var(--accent); }

  /* ---------- opinion spotlight ---------- */
  .opinion-block {
    background: var(--accent);
    color: #fff;
    padding: 50px 0;
    position: relative;
    overflow: hidden;
  }
  .opinion-block::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 5px;
    background: repeating-linear-gradient(90deg, var(--yellow) 0 40px, transparent 40px 80px);
  }
  .opinion-inner { max-width: 760px; margin: 0 auto; text-align: center; position: relative; }
  .opinion-inner .tag { display: block; margin-bottom: 16px; color: var(--yellow); }
  .opinion-quote {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: clamp(24px, 3.2vw, 34px);
    line-height: 1.18;
    color: #fff;
  }
  .opinion-quote::before { content: '\201C'; color: var(--yellow); }
  .opinion-quote::after { content: '\201D'; color: var(--yellow); }
  .opinion-attr { margin-top: 18px; font-size: 13.5px; color: rgba(255,255,255,0.85); }
  .opinion-attr b { color: #fff; }
  .opinion-link { display: inline-block; margin-top: 16px; font-family: var(--font-display); font-size: 14px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.03em; color: #fff; text-decoration: none; border-bottom: 2px solid var(--yellow); padding-bottom: 2px; }

  /* ---------- entrevistas ---------- */
  .interview-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 20px; }
  .interview-card { border: 1px solid var(--line); border-left: 4px solid var(--yellow); border-radius: 5px; padding: 20px; background: var(--bg-raised); }
  .interview-org { font-family: var(--font-display); font-size: 13px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--accent); margin-bottom: 10px; }
  .interview-card p { font-size: 17px; font-family: var(--font-display); font-weight: 600; line-height: 1.2; }

  /* ---------- evergreen ---------- */
  .evergreen-block {
    background: var(--verde-tint);
    border: 1px solid var(--line);
    border-radius: 8px;
    padding: 28px 30px;
    display: grid;
    grid-template-columns: 1fr 1.4fr;
    gap: 30px;
    align-items: center;
  }
  .evergreen-block h2 { font-size: 24px; text-transform: uppercase; letter-spacing: 0.01em; color: var(--text); margin-bottom: 8px; }
  .evergreen-block .sub { font-size: 13px; color: var(--text-soft); }
  .evergreen-list { display: flex; flex-direction: column; gap: 10px; }
  .evergreen-list a {
    text-decoration: none;
    font-size: 14px;
    font-weight: 600;
    color: var(--text);
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-radius: 5px;
    padding: 11px 14px;
    display: flex;
    justify-content: space-between;
    gap: 10px;
  }
  .evergreen-list a:hover { border-color: var(--accent); color: var(--accent); }
  .evergreen-list a .arrow { color: var(--text-muted); }

  /* ---------- tarjetas flip (tasas) ---------- */
  .flip-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(268px, 1fr)); gap: 20px; }
  .flip-card { perspective: 1400px; min-height: 322px; }
  .flip-inner {
    position: relative;
    width: 100%;
    height: 100%;
    min-height: 322px;
    transform-style: preserve-3d;
    transition: transform 0.6s cubic-bezier(0.2, 0.7, 0.3, 1);
  }
  .flip-card.is-flipped .flip-inner { transform: rotateY(180deg); }
  .flip-face {
    position: absolute;
    inset: 0;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-radius: 8px;
    padding: 22px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
  }
  .flip-front { border-top: 3px solid var(--accent); }
  .flip-card.best .flip-front { border-top-color: var(--yellow); box-shadow: inset 0 0 0 1px var(--yellow); }
  .flip-back {
    transform: rotateY(180deg);
    border-top: 3px solid var(--yellow);
    visibility: hidden;
    transition: visibility 0s linear 0.3s;
  }
  .flip-card.is-flipped .flip-back { visibility: visible; transition-delay: 0.3s; }
  .flip-card.is-flipped .flip-front { visibility: hidden; transition: visibility 0s linear 0.3s; }

  .flip-term { font-family: var(--font-display); font-size: 15px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-muted); }
  .flip-rate {
    font-family: var(--font-display);
    font-size: 42px;
    font-weight: 700;
    color: var(--accent);
    line-height: 1.02;
    margin: 8px 0 2px;
    letter-spacing: 0.01em;
    font-variant-numeric: tabular-nums;
    display: flex;
    align-items: baseline;
    gap: 7px;
    flex-wrap: wrap;
  }
  .flip-rate i { font-style: normal; font-size: 13px; font-weight: 600; color: var(--text-muted); }
  .flip-entity { font-family: var(--font-body); font-size: 14px; font-weight: 700; color: var(--text); margin-bottom: 4px; }
  .flip-note { font-size: 12.5px; color: var(--text-soft); }
  .flip-badge {
    align-self: flex-start;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    background: var(--accent-tint);
    color: var(--accent-strong);
    padding: 3px 8px;
    border-radius: 3px;
    margin-bottom: 10px;
  }
  .flip-back-title { font-family: var(--font-display); font-size: 15px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text); margin-bottom: 10px; }
  .flip-list {
    list-style: none;
    margin: 0;
    padding: 0 8px 0 0;
    display: flex;
    flex-direction: column;
    gap: 7px;
    overflow-y: auto;
    flex: 1 1 auto;
    min-height: 0;
    scrollbar-width: thin;
    scrollbar-color: var(--accent) transparent;
    overscroll-behavior: contain;
  }
  .flip-list::-webkit-scrollbar { width: 6px; }
  .flip-list::-webkit-scrollbar-track { background: transparent; }
  .flip-list::-webkit-scrollbar-thumb { background: var(--line); border-radius: 3px; }
  .flip-list::-webkit-scrollbar-thumb:hover { background: var(--accent); }
  .flip-source {
    font-size: 10.5px;
    line-height: 1.45;
    color: var(--text-muted);
    border-top: 1px solid var(--line);
    margin-top: 10px;
    padding-top: 8px;
  }
  .flip-ast { color: var(--accent); font-weight: 700; }

  /* ---------- tablas dentro de una noticia ---------- */
  /* La tabla scrollea dentro de su caja para que la página nunca
     se desborde de lado en el celular. */
  .tabla-wrap {
    overflow-x: auto;
    margin: 22px 0;
    border: 1px solid var(--line);
    border-radius: 6px;
    -webkit-overflow-scrolling: touch;
  }
  /* Una tabla del cuerpo lleva min-width: 420px, asi que en un telefono no
     cabe. Si va dentro de .tabla-wrap, ese envoltorio le da su propio scroll.
     Pero el envoltorio es HTML crudo dentro del markdown y se pierde con
     facilidad al reformatear la nota desde el CMS: paso dos veces, y sin el
     la tabla empujaba la PAGINA ENTERA fuera del ancho de la pantalla.
     Con esto la tabla se defiende sola y da igual si el envoltorio esta o no. */
  @media (max-width: 720px) {
    .noticia-cuerpo table {
      display: block;
      overflow-x: auto;
      -webkit-overflow-scrolling: touch;
    }
  }

  .noticia-cuerpo table, .tabla-wrap table {
    width: 100%;
    border-collapse: collapse;
    font-size: 15px;
    min-width: 420px;
  }
  .noticia-cuerpo th, .tabla-wrap th {
    background: var(--bg-sunken);
    font-family: var(--font-display);
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--text);
    text-align: left;
    padding: 11px 14px;
    border-bottom: 2px solid var(--line);
    white-space: nowrap;
  }
  .noticia-cuerpo td, .tabla-wrap td {
    padding: 10px 14px;
    border-bottom: 1px solid var(--line);
    color: var(--text-soft);
    font-variant-numeric: tabular-nums;
  }
  .noticia-cuerpo tr:last-child td, .tabla-wrap tr:last-child td { border-bottom: none; }
  .noticia-cuerpo tbody tr:hover, .tabla-wrap tbody tr:hover { background: var(--bg-sunken); }
  .noticia-cuerpo td:first-child, .tabla-wrap td:first-child { color: var(--text); font-weight: 600; }

  /* ---------- pestañas de tasas ---------- */
  .tabs {
    display: flex;
    gap: 4px;
    border-bottom: 2px solid var(--line);
    margin-bottom: 22px;
    overflow-x: auto;
    scrollbar-width: none;
  }
  .tabs::-webkit-scrollbar { display: none; }
  .tab-btn {
    flex-shrink: 0;
    font-family: var(--font-display);
    font-size: 15px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--text-muted);
    background: none;
    border: none;
    border-bottom: 3px solid transparent;
    margin-bottom: -2px;
    padding: 10px 16px;
    cursor: pointer;
    white-space: nowrap;
  }
  .tab-btn:hover { color: var(--accent); }
  .tab-btn[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); }
  .tab-panel[hidden] { display: none; }
  .flip-list li {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    font-size: 13px;
    color: var(--text-soft);
    border-bottom: 1px dashed var(--line);
    padding-bottom: 6px;
  }
  .flip-list li:last-child { border-bottom: none; }
  .flip-list li b { color: var(--text); font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
  .flip-list.plain li { display: block; }
  .flip-btn {
    margin-top: auto;
    align-self: flex-start;
    font-family: var(--font-display);
    font-size: 13px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--accent);
    background: none;
    border: none;
    border-bottom: 2px solid var(--yellow);
    padding: 6px 0 3px;
    cursor: pointer;
  }
  .flip-btn:hover { color: var(--accent-strong); }
  .rate-disclaimer { margin-top: 18px; font-size: 11.5px; color: var(--text-muted); line-height: 1.6; }
  @media (prefers-reduced-motion: reduce) {
    .flip-inner { transition: none; }
  }

  /* ---------- footer ---------- */
  footer { border-top: 4px solid var(--accent); padding: 44px 0 30px; background: var(--bg-sunken); position: relative; }
  footer::before {
    content: '';
    position: absolute;
    top: -4px; left: 0; right: 0;
    height: 4px;
    background: repeating-linear-gradient(90deg, var(--accent) 0 40px, var(--yellow) 40px 80px);
  }
  .footer-grid {
    display: grid;
    grid-template-columns: 1.4fr 1fr 1fr 1fr;
    gap: 36px;
    margin-bottom: 36px;
  }
  .author-block h3 { font-family: var(--font-display); font-size: 18px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.01em; margin-bottom: 8px; }
  .author-block p { font-size: 13px; color: var(--text-soft); margin-bottom: 10px; line-height: 1.55; }
  .author-cabeza { display: flex; gap: 14px; align-items: flex-start; }
  /* El plugin de imágenes envuelve cada <img> en un <picture>. El ítem flex
     pasó a ser ese <picture>, que no heredaba ni el ancho ni el flex-shrink
     —seguían apuntando a la <img>—, así que se encogía a su mínimo y la foto,
     limitada por el `max-width: 100%` del reset, se iba con él: el retrato
     quedaba en 14 px, un punto. Se dimensiona el ENVOLTORIO y la foto lo
     llena. El segundo selector cubre el caso sin <picture>. */
  /* El ancho lo manda SIEMPRE el hijo directo de .author-cabeza, sea cual sea:
     el enlace al perfil, el <picture> del plugin, o la <img> pelada. Tenerlos
     los tres listados es lo que evita repetir el fallo del retrato de 14 px
     cada vez que algo envuelve la foto. */
  .author-cabeza > .author-foto-enlace,
  .author-cabeza > picture,
  .author-cabeza > .author-foto {
    flex: 0 0 auto;
    display: block;
    width: clamp(92px, 26vw, 124px);
    aspect-ratio: 1 / 1;
  }
  /* Dentro del enlace, el <picture> y la foto llenan el hueco por completo. */
  .author-foto-enlace picture { display: block; width: 100%; height: 100%; }
  .author-foto {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    /* La foto de estudio es vertical: se encuadra hacia el rostro */
    object-position: 50% 12%;
    border: 2px solid var(--accent);
    background: #0d0d0d;
  }

  /* Señales de que la foto y el nombre llevan a algún lado. Sin esto no hay
     forma de adivinar que se puede hacer clic: el cursor cambia, pero solo
     cuando ya estás encima. */
  .author-foto-enlace .author-foto {
    transition: border-color 180ms ease, transform 180ms ease;
  }
  .author-foto-enlace:hover .author-foto,
  .author-foto-enlace:focus-visible .author-foto {
    border-color: var(--yellow);
    transform: scale(1.04);
  }
  .author-nombre {
    color: inherit;
    text-decoration: none;
    transition: color 160ms ease;
  }
  .author-nombre:hover,
  .author-nombre:focus-visible {
    color: var(--accent);
    text-decoration: underline;
    text-underline-offset: 4px;
    text-decoration-thickness: 2px;
  }
  @media (prefers-reduced-motion: reduce) {
    .author-foto-enlace .author-foto { transition: none; }
    .author-foto-enlace:hover .author-foto { transform: none; }
  }
  /* Dos filas etiquetadas: la etiqueta con ancho fijo alinea las dos filas en
     columnas y cada enlace es indivisible — si falta espacio, baja COMPLETO. */
  .author-links { display: flex; flex-direction: column; gap: 8px; }
  .author-links-fila { display: flex; align-items: baseline; gap: 6px 14px; flex-wrap: wrap; }
  .author-links-etiqueta {
    min-width: 68px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text-muted);
  }
  .author-links a { font-size: 12.5px; font-weight: 700; color: var(--accent); text-decoration: none; white-space: nowrap; }
  .author-links a:hover { text-decoration: underline; }
  .footer-col h4 { font-family: var(--font-display); font-size: 14px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-muted); margin-bottom: 12px; }
  .footer-col ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
  .footer-col a { font-size: 13px; color: var(--text-soft); text-decoration: none; }
  .footer-col a:hover { color: var(--accent); }

  /* Enlace de regreso al pie de cada noticia */
  .volver-portada { font-size: 11.5px; color: var(--text-muted); }

  @media (max-width: 860px) {
    .hero-grid, .evergreen-block { grid-template-columns: 1fr; }
    .footer-grid { grid-template-columns: 1fr 1fr; }
  }

  /* ---------- menú hamburguesa ---------- */
  @media (max-width: 780px) {
    .nav-toggle { display: flex; }
    .nav-inner {
      display: none;
      flex-direction: column;
      overflow: visible;
      padding-bottom: 10px;
    }
    .nav-inner.is-open { display: flex; }
    .nav-inner a {
      padding: 12px 4px;
      border-bottom: 1px solid var(--line);
      border-left: 3px solid transparent;
      font-size: 16px;
    }
    .nav-inner a:hover, .nav-inner a:focus-visible { border-bottom-color: var(--line); border-left-color: var(--yellow); }
    .nav-inner a.current { border-bottom-color: var(--line); border-left-color: var(--accent); }
    nav.primary { position: static; }

    /* En el celular el submenú no flota: se despliega dentro de la lista */
    .nav-grupo { width: 100%; }
    .nav-sub-toggle {
      width: 100%;
      justify-content: space-between;
      font-size: 16px;
      padding: 12px 4px;
      border-bottom: 1px solid var(--line);
      border-left: 3px solid transparent;
    }
    .nav-sub-toggle:hover, .nav-sub-toggle:focus-visible { border-bottom-color: var(--line); border-left-color: var(--yellow); }
    .nav-grupo.abierto .nav-sub-toggle { border-bottom-color: var(--line); border-left-color: var(--accent); }
    .nav-sub {
      position: static;
      min-width: 0;
      padding: 0;
      border: 0;
      border-radius: 0;
      box-shadow: none;
      background: var(--bg-sunken);
    }
    .nav-inner .nav-sub a {
      font-size: 15px;
      padding: 11px 4px 11px 22px;
      border-radius: 0;
      border-bottom: 1px solid var(--line);
      border-left: 3px solid transparent;
    }
  }

  @media (max-width: 640px) {
    .utility-inner { gap: 4px 14px; padding: 8px 0; }
    .utility-date { font-size: 12px; white-space: normal; }
    .ticker-track { font-size: 12px; animation-duration: 90s; }
    .ticker-item { padding: 8px 14px; }
    .pico-inner { gap: 6px 14px; }
    .pico-cities { gap: 6px 14px; }
    .pico-city { font-size: 12px; }
    .pico-time { display: none; }
    .section-head h1, .section-head h2 { font-size: 23px; }
    .hero-headline { font-size: 27px; }
    .flip-card, .flip-inner { min-height: 348px; }
    .flip-rate { font-size: 36px; }
    .ad-wrap { padding: 20px 0; }
  }

  @media (max-width: 560px) {
    .footer-grid { grid-template-columns: 1fr; }
    .masthead { padding: 12px 0 10px; }
    .masthead h1 { font-size: 28px; }
    .masthead .tagline { font-size: 12.5px; }
    .opinion-block { padding: 36px 0; }
    .section-block { padding: 34px 0; }
    .evergreen-block { padding: 22px 20px; }
    .interview-card, .core-card { padding: 18px; }
  }

  /* ==========================================================
     Bandera y fecha compacta (dd/mmm/yyyy) en la barra superior
     ========================================================== */
  .flag-co {
    display: inline-block;
    width: 18px;
    height: 12px;
    border-radius: 2px;
    vertical-align: -1px;
    box-shadow: 0 0 0 1px rgba(255,255,255,0.25);
  }

  /* ==========================================================
     Pico y placa en una sola fila
     ========================================================== */
  .pico-inner { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .pico-inner::-webkit-scrollbar { display: none; }
  .pico-cities { flex-wrap: nowrap; }
  @media (max-width: 640px) {
    .pico-inner { gap: 10px; padding-top: 6px; padding-bottom: 6px; }
    .pico-title { font-size: 10px; letter-spacing: 0.08em; }
    .pico-cities { gap: 10px; }
    .pico-city { font-size: 11.5px; gap: 5px; }
    .pico-digits { font-size: 11.5px; padding: 1px 6px; }
  }

  /* ==========================================================
     Cinta bursátil: cada valor es un enlace a /indicadores/
     ========================================================== */
  a.ticker-item { text-decoration: none; cursor: pointer; }
  a.ticker-item:hover .name, a.ticker-item:focus-visible .name { color: #fff; text-decoration: underline; text-underline-offset: 3px; }

  /* ==========================================================
     Anuncios: variante compacta y menos alto en móvil
     ========================================================== */
  .ad-unit.ad-compacto .ad-body { padding: 14px 18px; gap: 12px; }
  .ad-unit.ad-compacto .ad-brand { font-size: 11px; }
  .ad-unit.ad-compacto .ad-headline { font-size: clamp(17px, 2vw, 22px); margin: 3px 0 4px; }
  .ad-unit.ad-compacto .ad-text { font-size: 12.5px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .ad-unit.ad-compacto .ad-actions { margin-top: 8px; gap: 8px; }
  .ad-unit.ad-compacto .ad-cta { font-size: 12px; padding: 7px 12px; }
  .ad-unit.ad-compacto .ad-coupon { padding: 10px 12px; }
  .ad-unit.ad-compacto .ad-coupon img { width: 84px; height: 84px; }
  @media (max-width: 640px) {
    .ad-wrap { padding: 14px 0; }
    .ad-wrap.tight { padding: 0 0 14px; }
    .ad-body { padding: 14px 16px; gap: 10px; }
    .ad-headline { font-size: 19px; margin: 3px 0 4px; }
    .ad-text { font-size: 12.5px; }
    .ad-actions { margin-top: 8px; gap: 8px; }
    .ad-cta { font-size: 12px; padding: 8px 12px; }
    .ad-piro .ad-body { padding: 14px 16px; }
    .ad-piro-side .site { font-size: 14px; }
  }

  /* ==========================================================
     Multimedia
     ========================================================== */
  .mm-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
    gap: 22px;
  }
  .mm-card { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
  .mm-thumb {
    position: relative;
    border-radius: 8px;
    overflow: hidden;
    background: var(--bg-sunken);
    aspect-ratio: 16 / 9;
  }
  /* El plugin de imágenes envuelve cada <img> en un <picture>. Ese envoltorio
     es una caja más entre la foto y su hueco, y con ella el 100% de la foto se
     medía contra la nada. `display: contents` lo saca del medio sin tocar la
     elección de formato, que la hacen los <source> de dentro. */
  .mm-thumb picture { display: contents; }
  .mm-thumb > img, .mm-thumb picture img, .mm-thumb .mm-open-galeria img {
    width: 100%; height: 100%; object-fit: cover; display: block;
  }
  .mm-open-galeria {
    display: block;
    width: 100%; height: 100%;
    padding: 0; margin: 0;
    border: 0; background: none;
    cursor: pointer;
  }
  .mm-play-btn {
    position: absolute;
    left: 50%; top: 50%;
    transform: translate(-50%, -50%);
    width: 54px; height: 54px;
    border-radius: 50%;
    background: rgba(11,110,59,0.92);
    box-shadow: 0 4px 18px rgba(0,0,0,0.35);
    transition: transform 160ms ease, background 160ms ease;
  }
  .mm-play-btn::after {
    content: '';
    position: absolute;
    left: 55%; top: 50%;
    transform: translate(-50%, -50%);
    border-style: solid;
    border-width: 10px 0 10px 17px;
    border-color: transparent transparent transparent #fff;
  }
  /* Aquí vivían .mm-frame, .mm-video, .mm-spotify y .mm-audio: los
     reproductores que la tarjeta montaba dentro de sí misma. Ya no reproduce
     nadie en la tarjeta, así que se fueron con ellos. */
  .mm-tipo {
    position: absolute;
    left: 10px; top: 10px;
    font-family: var(--font-display);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #fff;
    background: rgba(15,23,18,0.78);
    padding: 3px 8px;
    border-radius: 3px;
    pointer-events: none;
  }
  .mm-tipo-video { background: rgba(11,110,59,0.9); }
  .mm-tipo-podcast { background: rgba(122,74,30,0.9); }
  .mm-tipo-galeria, .mm-tipo-foto { background: rgba(151,115,10,0.92); }
  .mm-count {
    position: absolute;
    right: 10px; bottom: 10px;
    font-size: 11.5px;
    font-weight: 700;
    color: #fff;
    background: rgba(15,23,18,0.78);
    padding: 3px 8px;
    border-radius: 3px;
    pointer-events: none;
  }
  .mm-title { font-size: 16.5px; line-height: 1.25; }
  .mm-title a { text-decoration: none; }
  .mm-desc { font-size: 13px; color: var(--text-soft); line-height: 1.5; }
  .mm-fuente { font-size: 11px; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.06em; }
  .mm-ver-todo { color: var(--accent); font-weight: 700; text-decoration: none; }
  .mm-ver-todo:hover { text-decoration: underline; }
  .mm-vacio { color: var(--text-soft); }

  .mm-lightbox {
    border: 0;
    padding: 0;
    background: transparent;
    width: min(94vw, 1000px);
  }
  .mm-lightbox::backdrop { background: rgba(5,9,6,0.88); }
  /* Respaldo para navegadores sin <dialog>: sin estas reglas el visor
     quedaría pegado al final del body y sin forma de ocultarse. */
  .mm-lightbox:not([open]) { display: none; }
  .mm-lightbox[open] {
    display: block;
    position: fixed;
    inset: 0;
    margin: auto;
    height: fit-content;
    max-height: 92vh;
    z-index: 90;
  }
  .mm-lb-stage { display: flex; align-items: center; justify-content: center; }
  .mm-lb-stage img { max-width: 100%; max-height: 82vh; border-radius: 6px; }
  .mm-lb-close, .mm-lb-prev, .mm-lb-next {
    position: fixed;
    z-index: 2;
    border: 0;
    border-radius: 50%;
    width: 42px; height: 42px;
    font-size: 24px;
    line-height: 1;
    color: #fff;
    background: rgba(15,23,18,0.7);
    cursor: pointer;
  }
  .mm-lb-close { top: 14px; right: 14px; }
  .mm-lb-prev { left: 10px; top: 50%; transform: translateY(-50%); }
  .mm-lb-next { right: 10px; top: 50%; transform: translateY(-50%); }
  .mm-lb-count { text-align: center; color: #fff; font-size: 12.5px; margin-top: 10px; }

  /* ==========================================================
     Quién soy
     ========================================================== */
  .qs-hero { padding-top: 34px; padding-bottom: 8px; }
  .qs-hero-grid {
    display: grid;
    grid-template-columns: 250px 1fr;
    gap: 34px;
    align-items: center;
  }
  .qs-retrato { margin: 0; }
  .qs-retrato img {
    width: 100%;
    height: auto;
    border-radius: 10px;
    border: 1px solid var(--line);
    background: #0d0d0d;
    box-shadow: 0 10px 30px rgba(19,33,26,0.12);
  }
  .qs-retrato figcaption { font-size: 10.5px; color: var(--text-muted); margin-top: 6px; }
  .qs-nombre { font-size: clamp(30px, 4.6vw, 46px); line-height: 1.02; text-transform: uppercase; }
  .qs-lead { font-size: 16.5px; line-height: 1.6; color: var(--text-soft); margin-top: 12px; max-width: 62ch; }
  .qs-meta {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 10px 22px;
    margin-top: 20px;
  }
  .qs-meta-item { border-left: 3px solid var(--yellow); padding-left: 10px; }
  .qs-meta-item b { display: block; font-family: var(--font-display); font-size: 21px; font-weight: 700; color: var(--text); }
  .qs-meta-item span { font-size: 12px; color: var(--text-muted); line-height: 1.3; display: block; }

  /* ---------- muro de medios: los logos se alternan ---------- */
  .qs-medios { padding: 22px 0 4px; }
  .qs-medios-titulo {
    font-family: var(--font-display);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--text-muted);
    margin-bottom: 12px;
  }
  .qs-muro {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
    gap: 10px;
  }
  /* Cuando el JS toma el control quedan pocas fichas, siempre del mismo alto */
  .qs-muro.rota { grid-template-columns: repeat(5, 1fr); }
  .qs-medio {
    display: flex;
    align-items: center;
    gap: 10px;
    min-height: 58px;
    padding: 9px 12px;
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-radius: 8px;
    min-width: 0;
  }
  /* La tarjeta se queda quieta y solo cambia su contenido: si se desvaneciera
     entera, la cuadrícula mostraría un hueco y parecería un error. */
  .qs-medio img, .qs-medio .qs-medio-nombre {
    transition: opacity 300ms ease, transform 300ms ease;
  }
  .qs-medio img {
    width: 30px;
    height: 30px;
    object-fit: contain;
    flex-shrink: 0;
    /* Los logos vienen de fuentes distintas: este filtro suave los empareja */
    filter: saturate(0.92);
  }
  .qs-medio-nombre {
    font-family: var(--font-display);
    font-size: 13.5px;
    font-weight: 600;
    line-height: 1.15;
    letter-spacing: 0.01em;
    color: var(--text);
    overflow-wrap: anywhere;
  }
  .qs-medio.saliendo img, .qs-medio.saliendo .qs-medio-nombre { opacity: 0; transform: translateY(-7px); }
  .qs-medio.entrando img, .qs-medio.entrando .qs-medio-nombre { animation: medioEntra 400ms ease both; }
  @keyframes medioEntra {
    from { opacity: 0; transform: translateY(9px); }
    to { opacity: 1; transform: none; }
  }
  @media (max-width: 700px) {
    .qs-muro.rota { grid-template-columns: repeat(3, 1fr); gap: 8px; }
    .qs-medio { flex-direction: column; text-align: center; gap: 6px; padding: 10px 6px; min-height: 84px; justify-content: center; }
    .qs-medio-nombre { font-size: 11.5px; }
  }
  @media (prefers-reduced-motion: reduce) {
    .qs-medio img, .qs-medio .qs-medio-nombre { transition: none; }
    .qs-medio.entrando img, .qs-medio.entrando .qs-medio-nombre { animation: none; }
  }
  .qs-bio { max-width: 760px; display: flex; flex-direction: column; gap: 14px; }
  .qs-bio p { font-size: 16px; line-height: 1.7; color: var(--text-soft); }
  .qs-bio b { color: var(--text); }
  .qs-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
  .qs-flip-titulo { font-size: clamp(26px, 3vw, 34px); }
  .qs-logros { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px; }
  .qs-logro {
    display: block;
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-top: 3px solid var(--yellow);
    border-radius: 8px;
    padding: 18px;
    text-decoration: none;
    transition: transform 160ms ease, box-shadow 160ms ease;
  }
  .qs-logro:hover { transform: translateY(-2px); box-shadow: 0 8px 22px rgba(19,33,26,0.1); }
  .qs-logro-anio { font-family: var(--font-display); font-size: 12px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--gold); }
  .qs-logro h3 { font-size: 17px; margin: 6px 0 8px; line-height: 1.25; }
  .qs-logro p { font-size: 13px; color: var(--text-soft); line-height: 1.5; }
  .qs-logro-link { color: var(--accent); font-weight: 700; white-space: nowrap; }
  .qs-contacto-acciones { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 18px; }
  .qs-btn {
    display: inline-block;
    font-family: var(--font-display);
    font-size: 14px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    text-decoration: none;
    padding: 11px 20px;
    border-radius: 4px;
    background: var(--yellow);
    color: #15200f;
    border: 2px solid transparent;
  }
  .qs-btn:hover { filter: brightness(1.06); }
  .qs-btn.ghost { background: transparent; color: #fff; border-color: rgba(255,255,255,0.5); text-transform: none; letter-spacing: 0.01em; }
  .qs-btn.ghost:hover { border-color: var(--yellow); color: var(--yellow); }
  @media (max-width: 700px) {
    .qs-hero { padding-top: 22px; padding-bottom: 4px; }
    .qs-hero-grid { grid-template-columns: 1fr; gap: 18px; }
    /* En el celular el retrato vertical de 210px quedaba pegado a la izquierda,
       con un hueco muerto al lado y la cara diminuta. Ahora ocupa todo el ancho
       con un recorte 5:4 encuadrado en el rostro. El object-fit es lo que
       impide que se deforme: el marco cambia de tamaño, la foto se recorta,
       nunca se estira ni se vuelve un óvalo. */
    .qs-retrato { max-width: none; }
    .qs-retrato img {
      width: 100%;
      aspect-ratio: 5 / 4;
      height: auto;
      object-fit: cover;
      object-position: 50% 26%;
    }
    .qs-lead { font-size: 15px; }
    .qs-meta { grid-template-columns: 1fr 1fr; }
  }

  /* ==========================================================
     Indicadores y mercados
     ========================================================== */
  .ind-nota { font-size: 13.5px; color: var(--text-soft); max-width: 78ch; line-height: 1.6; margin-bottom: 24px; }
  .ind-nota-fecha { color: var(--text-muted); }
  .ind-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
    gap: 18px;
  }
  .ind-card {
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-radius: 8px;
    padding: 16px 16px 14px;
    scroll-margin-top: 90px;
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-width: 0;
  }
  .ind-card.con-grafica { grid-column: span 2; }
  .ind-card.destacada { border-color: var(--gold); box-shadow: 0 0 0 3px var(--gold-tint); }
  .ind-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
  .ind-head h3 { font-size: 17px; }
  .ind-grupo { font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); white-space: nowrap; }
  .ind-valor { font-family: var(--font-display); font-size: 30px; font-weight: 700; line-height: 1; }
  .ind-delta { font-size: 13px; font-weight: 600; margin-left: 6px; font-family: var(--font-body); }
  .ind-delta.up { color: var(--accent); }
  .ind-delta.down { color: var(--down); }
  .ind-delta.flat { color: var(--text-muted); font-weight: 500; }
  .ind-puntas { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
  .ind-punta {
    font-size: 12px;
    background: var(--accent-tint);
    color: var(--text);
    border-radius: 4px;
    padding: 4px 8px;
  }
  .ind-punta b { color: var(--accent-strong); font-weight: 700; }
  .ind-punta.cierre { background: var(--gold-tint); }
  .ind-punta.cierre b { color: var(--gold); }
  .ind-punta-fuente { font-size: 10.5px; color: var(--text-muted); }
  .ind-chart { border-radius: 6px; overflow: hidden; }
  .ind-chart svg { width: 100%; height: auto; display: block; background: var(--bg-sunken); border-radius: 6px; }
  .ind-linea { fill: none; stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; }
  .ind-linea.sube { stroke: var(--accent); }
  .ind-linea.baja { stroke: var(--down); }
  .ind-area.sube { fill: var(--accent); opacity: 0.12; }
  .ind-area.baja { fill: var(--down); opacity: 0.10; }
  .ind-punto { fill: var(--gold); }
  .ind-txt { font-family: var(--font-body); font-size: 12px; fill: var(--text-muted); }
  .ind-txt.fuerte { fill: var(--text); font-weight: 700; }
  .ind-chart-cargando, .ind-chart-vacia { font-size: 12.5px; color: var(--text-muted); padding: 14px; background: var(--bg-sunken); border-radius: 6px; }
  .ind-chart-leyenda { font-size: 11px; color: var(--text-muted); margin-top: 6px; }
  .ind-desc { font-size: 12.5px; color: var(--text-soft); line-height: 1.5; }
  .ind-fuente { font-size: 11px; color: var(--text-muted); line-height: 1.45; }
  @media (max-width: 700px) {
    .ind-card.con-grafica { grid-column: auto; }
    .ind-grid { grid-template-columns: 1fr; gap: 12px; }
    .ind-card { padding: 14px; }
    .ind-valor { font-size: 26px; }
  }

  /* ---------- tarjetas de declaraciones de gremios ---------- */
  .interview-cita { font-family: var(--font-display); font-weight: 600; font-size: 17px; line-height: 1.25; }
  .interview-quien { font-size: 12.5px; color: var(--text-soft); margin-top: 10px; font-weight: 600; }
  .interview-quien span { display: block; font-weight: 400; color: var(--text-muted); font-size: 11.5px; }
  .interview-fuente {
    display: inline-block;
    margin-top: 10px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.03em;
    color: var(--accent);
    text-decoration: none;
  }
  .interview-fuente:hover { text-decoration: underline; }

  /* ==========================================================
     Páginas de sección
     ========================================================== */
  .seccion-titulo { font-size: clamp(26px, 4vw, 38px); text-transform: uppercase; }
  .seccion-desc { color: var(--text-soft); max-width: 70ch; margin-bottom: 26px; }
  .seccion-lista { display: flex; flex-direction: column; gap: 24px; }
  .seccion-item {
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 20px;
    align-items: start;
    padding-bottom: 24px;
    border-bottom: 1px solid var(--line);
  }
  .seccion-item:last-child { border-bottom: 0; padding-bottom: 0; }
  .seccion-foto {
    position: relative;
    display: block;
    border-radius: 8px;
    overflow: hidden;
    aspect-ratio: 16 / 10;
    background: var(--bg-sunken);
  }
  .seccion-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
  .seccion-texto { min-width: 0; }
  .seccion-fecha { font-size: 11.5px; color: var(--text-muted); }
  .seccion-texto h2 { font-size: clamp(19px, 2.4vw, 25px); line-height: 1.2; margin: 8px 0 8px; }
  .seccion-texto h2 a { text-decoration: none; }
  .seccion-texto h2 a:hover { color: var(--accent); }
  .seccion-resumen { font-size: 14.5px; color: var(--text-soft); line-height: 1.6; max-width: 68ch; }
  .seccion-vacia {
    background: var(--bg-raised);
    border: 1px dashed var(--line);
    border-radius: 8px;
    padding: 26px;
    color: var(--text-soft);
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .seccion-vacia a { color: var(--accent); font-weight: 600; }
  .comp-row a b { font-variant-numeric: tabular-nums; opacity: 0.72; font-weight: 700; }
  .core-card h3 a { text-decoration: none; }
  .core-card h3 a:hover { color: var(--accent); }
  @media (max-width: 640px) {
    .seccion-item { grid-template-columns: 116px 1fr; gap: 12px; padding-bottom: 18px; }
    .seccion-foto { aspect-ratio: 4 / 3; }
    .seccion-texto h2 { font-size: 16.5px; margin: 6px 0 5px; }
    .seccion-resumen { display: none; }
    .seccion-lista { gap: 18px; }
  }

  /* ==========================================================
     "Sigue leyendo": tres notas al final de cada artículo
     ========================================================== */
  .sigue-leyendo { border-top: 1px solid var(--line); }
  .sigue-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 20px;
  }
  .sigue-card {
    display: flex;
    flex-direction: column;
    gap: 9px;
    text-decoration: none;
    min-width: 0;
  }
  .sigue-foto {
    position: relative;
    border-radius: 8px;
    overflow: hidden;
    aspect-ratio: 16 / 9;
    background: var(--bg-sunken);
  }
  .sigue-foto img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 260ms ease;
  }
  .sigue-card:hover .sigue-foto img { transform: scale(1.04); }
  /* Sin foto, el hueco se llena con el motivo cromático del portal */
  .sigue-foto-vacia {
    position: absolute;
    inset: 0;
    background: linear-gradient(125deg, var(--accent) 0%, var(--accent) 46%, var(--yellow) 46%, var(--yellow) 54%, var(--accent-strong) 54%, var(--accent-strong) 100%);
  }
  .sigue-cat {
    position: absolute;
    left: 8px; bottom: 8px;
    font-family: var(--font-display);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #fff;
    background: rgba(15,23,18,0.82);
    padding: 3px 8px;
    border-radius: 3px;
  }
  .sigue-card h3 {
    font-size: 17.5px;
    line-height: 1.22;
    color: var(--text);
    transition: color 160ms ease;
  }
  .sigue-card:hover h3, .sigue-card:focus-visible h3 { color: var(--accent); }
  .sigue-fecha { font-size: 11.5px; color: var(--text-muted); }
  @media (max-width: 640px) {
    .sigue-grid { grid-template-columns: 1fr; gap: 16px; }
    /* Rejilla y no fila: en fila, el título y la fecha quedaban como dos
       columnas más y la fecha se partía letra por letra. */
    .sigue-card {
      display: grid;
      grid-template-columns: 116px 1fr;
      grid-template-rows: auto auto;
      column-gap: 12px;
      row-gap: 3px;
      align-items: start;
    }
    .sigue-foto { grid-column: 1; grid-row: 1 / span 2; aspect-ratio: 4 / 3; }
    .sigue-card h3 { grid-column: 2; grid-row: 1; font-size: 15.5px; }
    .sigue-fecha { grid-column: 2; grid-row: 2; }
    .sigue-cat { display: none; }
  }

  /* ==========================================================
     Página del dólar: convertidor, puntas y gráfica
     ========================================================== */
  .dolar-hero { padding-top: 28px; }
  .dolar-titulo { font-size: clamp(28px, 4.4vw, 42px); text-transform: uppercase; line-height: 1.03; margin-bottom: 16px; }
  .dolar-tarjetas { display: grid; grid-template-columns: 1.15fr 1fr; gap: 16px; }
  .dolar-principal, .dolar-puntas {
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-top: 3px solid var(--accent);
    border-radius: 8px;
    padding: 16px 18px;
  }
  .dolar-puntas { border-top-color: var(--gold); }
  .dolar-etiqueta {
    font-family: var(--font-display);
    font-size: 11px; font-weight: 600;
    letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--text-muted);
    display: block;
  }
  .dolar-valor {
    font-family: var(--font-display);
    font-size: clamp(34px, 5.6vw, 52px);
    font-weight: 700; line-height: 1;
    margin: 6px 0 4px;
    font-variant-numeric: tabular-nums;
  }
  .dolar-fecha { font-size: 12px; color: var(--text-soft); line-height: 1.4; }
  .dolar-variacion { font-size: 13px; font-weight: 700; margin-top: 6px; }
  .dolar-variacion.up { color: var(--accent); }
  .dolar-variacion.down { color: var(--down); }
  .dolar-punta-fila { display: flex; gap: 10px; margin: 10px 0 8px; flex-wrap: wrap; }
  .dolar-punta {
    flex: 1 1 120px;
    background: var(--bg-sunken);
    border-radius: 6px;
    padding: 8px 10px;
    display: flex; flex-direction: column; gap: 2px;
  }
  .dolar-punta b {
    font-family: var(--font-display);
    font-size: 10.5px; font-weight: 600;
    letter-spacing: 0.1em; text-transform: uppercase;
    color: var(--text-muted);
  }
  .dolar-punta span {
    font-family: var(--font-display);
    font-size: 21px; font-weight: 700;
    font-variant-numeric: tabular-nums;
  }
  .dolar-nota { font-size: 11.5px; color: var(--text-muted); line-height: 1.45; }

  .conv {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    gap: 14px;
    align-items: end;
  }
  .conv-campo { min-width: 0; }
  .conv-campo label {
    display: block;
    font-family: var(--font-display);
    font-size: 11.5px; font-weight: 600;
    letter-spacing: 0.08em; text-transform: uppercase;
    color: var(--text-muted);
    margin-bottom: 6px;
  }
  .conv-input {
    display: flex; align-items: center; gap: 8px;
    background: var(--bg-raised);
    border: 2px solid var(--line);
    border-radius: 8px;
    padding: 10px 14px;
    transition: border-color 160ms ease;
  }
  .conv-input:focus-within { border-color: var(--accent); }
  .conv-simbolo {
    font-family: var(--font-display);
    font-size: 17px; font-weight: 700;
    color: var(--text-muted);
    flex-shrink: 0;
  }
  .conv-input input {
    flex: 1;
    min-width: 0;
    border: 0;
    background: transparent;
    color: var(--text);
    font-family: var(--font-display);
    font-size: clamp(22px, 3.4vw, 30px);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    padding: 0;
  }
  .conv-input input:focus { outline: none; }
  .conv-igual {
    font-family: var(--font-display);
    font-size: 26px; font-weight: 700;
    color: var(--accent);
    padding-bottom: 12px;
  }
  .conv-rapidos { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
  .conv-chip {
    font-family: var(--font-display);
    font-size: 13px; font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--text);
    background: var(--bg-sunken);
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 7px 14px;
    cursor: pointer;
    transition: background 160ms ease, border-color 160ms ease;
  }
  .conv-chip:hover, .conv-chip:focus-visible { background: var(--accent-tint); border-color: var(--accent); }
  .conv-pie { font-size: 12.5px; color: var(--text-soft); line-height: 1.55; margin-top: 14px; max-width: 76ch; }

  .dolar-chart { border-radius: 6px; overflow: hidden; }
  .dolar-chart svg { width: 100%; height: auto; display: block; background: var(--bg-sunken); border-radius: 6px; }
  .dolar-comparativos {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 12px;
    margin-top: 14px;
  }
  .dolar-comp {
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-left: 3px solid var(--yellow);
    border-radius: 0 8px 8px 0;
    padding: 10px 12px;
  }
  .dolar-comp b {
    display: block;
    font-family: var(--font-display);
    font-size: 20px; font-weight: 700;
    font-variant-numeric: tabular-nums;
  }
  .dolar-comp span { font-size: 11.5px; color: var(--text-muted); line-height: 1.3; }

  .dolar-tabla td { font-variant-numeric: tabular-nums; }
  .dolar-tabla td:first-child { white-space: nowrap; }
  .dolar-faq { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px; }
  .faq-item {
    background: var(--bg-raised);
    border: 1px solid var(--line);
    border-radius: 8px;
    padding: 14px 16px;
  }
  .faq-item h3 { font-size: 16px; margin-bottom: 6px; line-height: 1.2; }
  .faq-item p { font-size: 13.5px; color: var(--text-soft); line-height: 1.6; }

  @media (max-width: 720px) {
    .dolar-tarjetas { grid-template-columns: 1fr; gap: 12px; }
    .conv { grid-template-columns: 1fr; gap: 10px; }
    .conv-igual { display: none; }
    .dolar-hero { padding-top: 18px; }
  }

  /* ==========================================================
     Repaso móvil: menos aire, más contenido por pantalla
     ========================================================== */
  @media (max-width: 640px) {
    .masthead .kicker { display: none; }
    .masthead .tagline { display: none; }
    .masthead { padding: 10px 0 9px; }
    .hero-section { padding-top: 4px; }
    .hero-art { aspect-ratio: 21/9; }
    .hero-art-img { max-height: 210px; object-fit: cover; }
    .hero-art-credit { display: none; }
    .hero-grid { gap: 14px; }
    .hero-dek { font-size: 14.5px; }
    .byline { font-size: 12px; }
    .secondary-item h3 { font-size: 16.5px; }
    .section-block { padding: 26px 0; }
    .section-head { margin-bottom: 14px; }
    .core-card .desc { font-size: 13px; }
    .rate-disclaimer { font-size: 11px; }
    .mm-grid { grid-template-columns: 1fr; gap: 16px; }
    .opinion-quote { font-size: 19px; }
  }

  /* ---------- pagina de noticia ---------- */
  /* Ojo: aqui solo padding vertical. El horizontal lo pone .wrap y no se
     debe pisar con el atajo `padding`, porque entonces se anula y el texto
     queda pegado a los bordes en pantallas estrechas. */
  .noticia-articulo {
    padding-top: 36px;
    padding-bottom: 50px;
  }
  .noticia-cuerpo {
    margin-top: 24px;
    font-size: 17px;
    line-height: 1.75;
    max-width: 760px;
  }

  @media (max-width: 640px) {
    .noticia-articulo { padding-top: 24px; padding-bottom: 36px; }
    .noticia-cuerpo { font-size: 16.5px; line-height: 1.7; }
  }

  /* ==========================================================
     Botón flotante de WhatsApp
     ========================================================== */
  .wa-flotante {
    position: fixed;
    right: 16px;
    bottom: 16px;
    z-index: 60;
    width: 54px;
    height: 54px;
    border-radius: 50%;
    background: #25d366;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 6px 18px rgba(0,0,0,0.30);
    transition: transform 160ms ease, box-shadow 160ms ease;
  }
  .wa-flotante svg { width: 28px; height: 28px; display: block; }
  .wa-flotante:hover, .wa-flotante:focus-visible { transform: scale(1.07); box-shadow: 0 8px 24px rgba(0,0,0,0.35); }
  @media print { .wa-flotante { display: none; } }

  /* ==========================================================
     El padding lateral de .wrap es sagrado.
     Varias clases hermanas (.section-block, .ad-wrap, .utility-inner,
     .qs-hero…) van sobre el MISMO elemento que .wrap y, al declararse
     después, su atajo `padding: X 0` anulaba el padding horizontal y el
     texto quedaba pegado al borde en el celular. Esta regla cierra la
     cascada restituyendo SOLO el padding lateral para cualquier
     combinación, presente o futura. Mínimo 20px en pantallas angostas.
     ========================================================== */
  .wrap {
    padding-left: clamp(20px, 5vw, 40px);
    padding-right: clamp(20px, 5vw, 40px);
  }

/* ============================================================
   PAGINAS LEGALES, PIE LEGAL Y AVISO DE COOKIES
   ============================================================ */

.legal { max-width: 760px; padding-top: 26px; padding-bottom: 60px; }

.legal-head { border-bottom: 3px solid var(--accent); padding-bottom: 18px; margin-bottom: 30px; }
.legal-kicker {
  font-family: var(--font-display); font-size: 12px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.12em; color: var(--accent);
  margin: 0 0 8px;
}
.legal-head h1 {
  font-family: var(--font-display); font-size: clamp(26px, 5vw, 38px);
  line-height: 1.12; font-weight: 600; color: var(--text); margin: 0;
}
.legal-resumen { font-size: 17px; line-height: 1.55; color: var(--text-soft); margin: 14px 0 0; }
.legal-fecha {
  font-family: var(--font-display); font-size: 12px; text-transform: uppercase;
  letter-spacing: 0.06em; color: var(--text-muted); margin: 12px 0 0;
}

.legal-cuerpo { font-size: 16.5px; line-height: 1.68; color: var(--text-soft); }
.legal-cuerpo h2 {
  font-family: var(--font-display); font-size: 21px; font-weight: 600;
  color: var(--text); line-height: 1.25; margin: 40px 0 12px;
  padding-top: 18px; border-top: 1px solid var(--line);
}
.legal-cuerpo h3 {
  font-family: var(--font-display); font-size: 17px; font-weight: 600;
  color: var(--text); margin: 26px 0 8px;
}
.legal-cuerpo p { margin: 0 0 14px; }
.legal-cuerpo ul, .legal-cuerpo ol { margin: 0 0 16px; padding-left: 22px; }
.legal-cuerpo li { margin-bottom: 7px; }
.legal-cuerpo strong { color: var(--text); font-weight: 600; }
.legal-cuerpo a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
.legal-cuerpo hr { border: 0; border-top: 3px solid var(--line); margin: 44px 0; }
.legal-cuerpo code {
  font-family: var(--font-mono); font-size: 0.88em; background: var(--gold-tint);
  color: var(--gold); padding: 2px 7px; border-radius: 3px; font-weight: 600;
}
.legal-cuerpo blockquote {
  margin: 20px 0; padding: 16px 20px; background: var(--accent-tint);
  border-left: 4px solid var(--accent); border-radius: 0 5px 5px 0;
}
.legal-cuerpo blockquote p { margin: 0; color: var(--text); font-size: 17px; }
.legal-cuerpo table {
  width: 100%; border-collapse: collapse; font-size: 15px; margin: 18px 0;
}
.legal-cuerpo th {
  background: var(--bg-sunken); font-family: var(--font-display); font-size: 12px;
  font-weight: 600; text-transform: uppercase; letter-spacing: 0.03em;
  color: var(--text); text-align: left; padding: 10px 13px;
  border-bottom: 2px solid var(--line);
}
.legal-cuerpo td {
  padding: 10px 13px; border-bottom: 1px solid var(--line); vertical-align: top;
}
.legal-cuerpo td:first-child { color: var(--text); font-weight: 500; }

.legal-nav { margin-top: 52px; padding: 22px 24px; background: var(--bg-sunken); border-radius: 8px; }
.legal-nav h2 {
  font-family: var(--font-display); font-size: 13px; font-weight: 600;
  text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted);
  margin: 0 0 12px;
}
.legal-nav ul { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 22px; }
.legal-nav a { color: var(--accent); font-size: 15px; text-decoration: none; font-weight: 500; }
.legal-nav a:hover { text-decoration: underline; }

.btn-cookies {
  font-family: var(--font-display); font-size: 14px; font-weight: 600;
  background: var(--accent); color: #fff; border: 0; border-radius: 5px;
  padding: 11px 20px; cursor: pointer;
}
.btn-cookies:hover { background: var(--accent-strong); }

/* ---------- franja legal del pie ---------- */
.footer-legal { border-top: 1px solid var(--line); margin-top: 30px; padding-top: 22px; }
.footer-legal-marca { font-size: 13px; color: var(--text-muted); margin: 0 0 12px; }
.footer-legal-links {
  list-style: none; margin: 0 0 16px; padding: 0;
  display: flex; flex-wrap: wrap; gap: 6px 20px; align-items: center;
}
.footer-legal-links a, .footer-legal-btn {
  font-size: 13.5px; color: var(--text-soft); text-decoration: none;
}
.footer-legal-links a:hover, .footer-legal-btn:hover { color: var(--accent); text-decoration: underline; }
.footer-legal-btn {
  background: none; border: 0; padding: 0; cursor: pointer;
  font-family: var(--font-body); font-size: 13.5px;
}
.footer-legal-aviso {
  font-size: 12.5px; line-height: 1.6; color: var(--text-muted);
  margin: 0; padding: 13px 16px; background: var(--bg-sunken);
  border-left: 3px solid var(--gold); border-radius: 0 5px 5px 0;
}
.footer-legal-aviso strong { color: var(--text-soft); }
.footer-legal-aviso a { color: var(--accent); }

/* ---------- aviso de cookies ---------- */
.cookie-aviso {
  position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 9000;
  max-width: 620px; margin: 0 auto;
  background: var(--bg-raised); border: 1px solid var(--line);
  border-radius: 10px; padding: 18px 20px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.22);
  display: flex; flex-wrap: wrap; gap: 14px 18px;
  align-items: center; justify-content: space-between;
}
.cookie-aviso[hidden] { display: none; }
.cookie-aviso-texto { flex: 1 1 300px; }
.cookie-aviso-texto p { margin: 0 0 5px; font-size: 13.5px; line-height: 1.55; color: var(--text-soft); }
.cookie-aviso-texto p:last-child { margin-bottom: 0; }
.cookie-aviso-texto strong { color: var(--text); }
.cookie-aviso-texto a { color: var(--accent); }
/* Fotos dentro del cuerpo de una nota. El "height: auto" es lo que permite
   declarar width/height en el HTML sin deformar la imagen al reducirse: el
   navegador reserva el espacio (protege el CLS) y luego escala proporcional. */
.noticia-cuerpo img {
  height: auto;
  margin: 24px 0 6px;
  border-radius: 6px;
}

.cookie-aviso-pregunta {
  font-family: var(--font-display); font-size: 16px; font-weight: 600;
  color: var(--text); line-height: 1.3; margin: 0 0 7px;
}
.cookie-aviso-botones { display: flex; gap: 10px; flex: 0 0 auto; }
/* Las dos opciones pesan igual: es una elección, no un empujón. */
.cookie-btn {
  font-family: var(--font-display); font-size: 14.5px; font-weight: 600;
  border-radius: 5px; padding: 11px 24px; cursor: pointer; white-space: nowrap;
  border: 1.5px solid transparent;
}
.cookie-btn-si { background: var(--accent); color: #fff; border-color: var(--accent); }
.cookie-btn-si:hover { background: var(--accent-strong); border-color: var(--accent-strong); }
.cookie-btn-no { background: var(--bg-raised); color: var(--text); border-color: var(--text-muted); }
.cookie-btn-no:hover { background: var(--bg-sunken); border-color: var(--text); }

@media (max-width: 560px) {
  .cookie-aviso { left: 10px; right: 10px; bottom: 10px; padding: 16px; }
  .cookie-aviso-botones { width: 100%; }
  .cookie-btn { flex: 1; }
  .legal-cuerpo { font-size: 16px; }
  .legal-cuerpo table { font-size: 14px; display: block; overflow-x: auto; }
}

  /* ==========================================================
     Página 404
     ========================================================== */
  .error-404 { max-width: 780px; }
  .error-titulo {
    font-size: clamp(30px, 5vw, 46px);
    text-transform: uppercase;
    line-height: 1.03;
    margin: 6px 0 12px;
  }
  .error-texto { color: var(--text-soft); font-size: 16.5px; line-height: 1.6; max-width: 62ch; }
  .error-accesos { display: flex; flex-wrap: wrap; gap: 10px; margin: 22px 0 30px; }
  .error-boton {
    display: inline-block;
    font-family: var(--font-display);
    font-size: 14px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    text-decoration: none;
    padding: 11px 20px;
    border-radius: 4px;
    background: var(--yellow);
    color: #15200f;
    border: 2px solid transparent;
  }
  .error-boton:hover { filter: brightness(1.06); }
  .error-boton.ghost { background: transparent; color: var(--accent); border-color: var(--line); }
  .error-boton.ghost:hover { border-color: var(--accent); }
  .error-recientes {
    border-top: 1px solid var(--line);
    padding-top: 20px;
  }
  .error-recientes h2 {
    font-size: 15px;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--text-muted);
    margin-bottom: 14px;
  }
  .error-recientes ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
  .error-recientes li { display: flex; flex-direction: column; gap: 3px; }
  .error-recientes a {
    font-family: var(--font-display);
    font-size: 17px;
    font-weight: 600;
    line-height: 1.25;
    text-decoration: none;
    color: var(--text);
  }
  .error-recientes a:hover { color: var(--accent); }
  .error-secciones { margin-top: 26px; font-size: 12.5px; color: var(--text-muted); line-height: 1.9; }
  .error-secciones a { color: var(--accent); text-decoration: none; }
  .error-secciones a:hover { text-decoration: underline; }

  /* ==========================================================
     Compartir la nota
     Instagram y TikTok no tienen dirección web para compartir un enlace,
     así que son botones y usan el menú del teléfono (o copian el enlace).
     ========================================================== */
  .compartir {
    margin-top: 34px;
    padding-top: 22px;
    border-top: 1px solid var(--line);
  }
  .compartir-titulo {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--text-muted);
    margin: 0 0 12px;
  }
  .compartir-lista {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }
  .compartir-btn {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 8px 13px;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--bg);
    color: var(--text-soft);
    font: inherit;
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: none;
    cursor: pointer;
    transition: color .16s ease, border-color .16s ease, background-color .16s ease;
  }
  .compartir-btn svg { width: 15px; height: 15px; flex-shrink: 0; }
  /* El color de cada marca solo aparece al apuntar: en reposo la fila se ve
     ordenada y no compite con el texto de la noticia. */
  .compartir-btn:hover, .compartir-btn:focus-visible {
    color: var(--marca, var(--accent));
    border-color: currentColor;
    background: var(--bg-sunken);
  }
  .compartir-btn.es-whatsapp  { --marca: #1FA855; }
  .compartir-btn.es-facebook  { --marca: #1877F2; }
  .compartir-btn.es-linkedin  { --marca: #0A66C2; }
  .compartir-btn.es-gmail     { --marca: #C5221F; }
  .compartir-btn.es-instagram { --marca: #C13584; }
  .compartir-btn.es-tiktok    { --marca: #111; }
  .compartir-aviso {
    margin: 12px 0 0;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--accent);
  }
  @media (prefers-color-scheme: dark) {
    .compartir-btn.es-whatsapp  { --marca: #25D366; }
    .compartir-btn.es-gmail     { --marca: #EA4335; }
    .compartir-btn.es-tiktok    { --marca: #FE2C55; }
    .compartir-btn.es-instagram { --marca: #E4638F; }
  }
  :root[data-theme="dark"] .compartir-btn.es-whatsapp  { --marca: #25D366; }
  :root[data-theme="dark"] .compartir-btn.es-gmail     { --marca: #EA4335; }
  :root[data-theme="dark"] .compartir-btn.es-tiktok    { --marca: #FE2C55; }
  :root[data-theme="dark"] .compartir-btn.es-instagram { --marca: #E4638F; }
  :root[data-theme="light"] .compartir-btn.es-tiktok   { --marca: #111; }

  /* En pantallas angostas el nombre estorba: quedan solo los iconos, más
     grandes y con área de toque cómoda. Copiar enlace conserva su texto
     porque el icono de cadena solo no se entiende. */
  @media (max-width: 460px) {
    .compartir-lista { gap: 9px; }
    .compartir-btn { padding: 0; width: 42px; height: 42px; justify-content: center; }
    .compartir-btn svg { width: 18px; height: 18px; }
    .compartir-btn span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
    .compartir-btn.es-copiar { width: auto; padding: 0 15px; gap: 7px; }
    .compartir-btn.es-copiar span { position: static; width: auto; height: auto; overflow: visible; clip: auto; }
  }

  /* ==========================================================
     Pie de página en el teléfono
     Con una sola columna el pie medía 1320 px en una pantalla de 844: más de
     una pantalla y media de enlaces cortos, uno debajo de otro, con la mitad
     del ancho vacío a la derecha. Se reparte en dos columnas y las secciones
     pasan a fichas que fluyen.
     ========================================================== */
  @media (max-width: 560px) {
    .footer-grid {
      grid-template-columns: 1fr 1fr;
      gap: 26px 18px;
      margin-bottom: 28px;
    }
    /* La ficha del director y las secciones ocupan el ancho completo; las
       otras dos listas van lado a lado porque son cortas. */
    .author-block, .footer-col-secciones { grid-column: 1 / -1; }

    .footer-col-secciones ul {
      flex-direction: row;
      flex-wrap: wrap;
      gap: 8px;
    }
    .footer-col-secciones li { display: flex; }
    .footer-col-secciones a {
      display: inline-block;
      padding: 7px 13px;
      border: 1px solid var(--line);
      border-radius: 999px;
      background: var(--bg);
      font-size: 12.5px;
      font-weight: 600;
      line-height: 1;
    }
    .footer-col-medio ul, .footer-col-redes ul { gap: 11px; }
    .footer-col-medio a, .footer-col-redes a { font-size: 12.5px; line-height: 1.35; display: inline-block; }

    /* La foto pierde 20 px y la biografía gana el ancho que necesita para no
       partirse en tiras de tres palabras. */
    .author-cabeza > .author-foto-enlace,
    .author-cabeza > picture,
    .author-cabeza > .author-foto { width: clamp(84px, 24vw, 104px); }
    .author-cabeza { gap: 12px; }
    .author-block h3 { font-size: 16.5px; }
    .author-block p { font-size: 12.5px; }
    .author-links-etiqueta { min-width: 0; }
    .author-links-fila { gap: 4px 12px; }

    .footer-legal { margin-top: 22px; padding-top: 18px; }
    .footer-legal-links { gap: 8px 14px; }
  }

  /* La barra de arriba: compacta, sin borde ni encabezado propio, para que no
     empuje el arranque de la lectura. Solo iconos, incluido copiar. */
  .compartir-arriba {
    margin: 14px 0 0;
    padding-top: 0;
    border-top: 0;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
  }
  .compartir-arriba .compartir-titulo { margin: 0; font-size: 10.5px; }
  .compartir-arriba .compartir-lista { gap: 6px; }
  .compartir-arriba .compartir-btn { width: 34px; height: 34px; padding: 0; justify-content: center; }
  .compartir-arriba .compartir-btn svg { width: 15px; height: 15px; }
  .compartir-arriba .compartir-btn span {
    position: absolute; width: 1px; height: 1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
  }
  /* Arriba tampoco lleva texto el de copiar: la fila debe caber de un vistazo. */
  .compartir-arriba .compartir-btn.es-copiar { width: 34px; padding: 0; }
  .compartir-arriba .compartir-btn.es-copiar span {
    position: absolute; width: 1px; height: 1px;
    overflow: hidden; clip: rect(0 0 0 0);
  }
  .compartir-arriba .compartir-aviso { flex-basis: 100%; margin: 0; font-size: 12px; }

  /* Ruta de navegación al principio de cada nota */
  .miga {
    font-size: 12px;
    color: var(--text-muted);
    margin-bottom: 14px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 7px;
  }
  .miga a { color: var(--text-muted); text-decoration: none; }
  .miga a:hover { color: var(--accent); text-decoration: underline; }
  .miga span { opacity: .55; }

  /* Aviso de la TRM de mañana, cuando el Banco de la República ya la publicó */
  .dolar-manana {
    margin-top: 10px;
    font-size: 12.5px;
    color: var(--text-muted);
    line-height: 1.45;
  }
  .dolar-manana b { color: var(--text); }

  /* ==========================================================
     Página de pico y placa
     ========================================================== */
  .pyp { max-width: 860px; padding-top: 34px; padding-bottom: 50px; }
  .pyp-titulo {
    font-size: clamp(30px, 5vw, 44px);
    text-transform: uppercase;
    line-height: 1.05;
    margin: 6px 0 12px;
  }
  .pyp h2 { font-size: 21px; margin: 34px 0 10px; }
  .pyp p { line-height: 1.65; color: var(--text-soft); }
  .pyp-hoy {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 8px 12px;
    margin: 18px 0 6px;
    padding: 14px 18px;
    background: var(--bg-sunken);
    border-left: 4px solid var(--accent);
    border-radius: 6px;
  }
  .pyp-hoy-dia { font-weight: 600; color: var(--text); }
  .pyp-hoy-digitos { font-family: var(--font-display); font-size: 30px; font-weight: 700; color: var(--accent); line-height: 1; }
  .pyp-hoy-horario { font-size: 13px; color: var(--text-muted); }
  .pyp-tabla {
    width: 100%;
    border-collapse: collapse;
    margin: 8px 0 4px;
    font-size: 15px;
  }
  .pyp-tabla th {
    text-align: left;
    font-size: 11.5px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--text-muted);
    padding: 8px 12px;
    border-bottom: 2px solid var(--line);
  }
  .pyp-tabla td { padding: 9px 12px; border-bottom: 1px solid var(--line); }
  .pyp-tabla b { font-size: 17px; }
  .pyp-tabla tr.es-hoy { background: var(--bg-sunken); }
  .pyp-tabla tr.es-hoy td:first-child::after {
    content: ' · hoy';
    color: var(--accent);
    font-weight: 700;
    font-size: 12px;
  }
  .pyp-tabla tr.ya-paso { opacity: .45; }
  .pyp-nota { font-size: 13.5px; color: var(--text-muted); margin: 8px 0 0; line-height: 1.55; }
  .pyp-lista { margin: 10px 0; padding-left: 20px; }
  .pyp-lista li { margin-bottom: 10px; line-height: 1.6; color: var(--text-soft); }
  .pyp-aviso {
    margin-top: 38px;
    padding: 16px 20px;
    border-left: 4px solid var(--yellow, #d7a500);
    background: var(--bg-sunken);
    border-radius: 6px;
  }
  .pyp-aviso p { font-size: 13px; line-height: 1.6; color: var(--text-muted); margin: 0 0 10px; }
  .pyp-aviso p:last-child { margin-bottom: 0; }

  /* La etiqueta del pico y placa ahora es un enlace a la página completa */
  a.pico-title { text-decoration: none; }
  a.pico-title:hover { text-decoration: underline; text-underline-offset: 3px; }

  /* ==========================================================
     Multimedia: la tarjeta lleva a la ficha, y la ficha reproduce
     ========================================================== */
  a.mm-thumb { display: block; }
  .mm-title a { color: inherit; }
  .mm-title a:hover { text-decoration: underline; text-underline-offset: 3px; }
  /* Pasar por la miniatura o por el titular enciende el botón: son el mismo
     enlace para el lector. La segunda mitad estaba escrita como
     `.mm-title a:hover ~ .mm-play-btn`, que no podía seleccionar nada — el
     botón no es hermano del titular, vive dentro del enlace de la foto—, así
     que hay que subir a la tarjeta con `:has()`. */
  a.mm-thumb:hover .mm-play-btn,
  .mm-card:has(.mm-title a:hover) .mm-play-btn { transform: translate(-50%, -50%) scale(1.08); background: var(--accent-strong); }
  .mm-sin-foto {
    position: absolute;
    inset: 0;
    display: flex; align-items: center; justify-content: center;
    font-family: var(--font-display);
    font-size: 13px; letter-spacing: 0.08em; text-transform: uppercase;
    color: var(--text-muted);
  }
  .mm-ficha-medio { margin: 20px 0 4px; }
  .mm-ficha-medio .incrusta { margin-left: 0; margin-right: 0; }
  .mm-ficha-fuente { margin-top: 10px; }
  .mm-ficha-unica { width: 100%; height: auto; display: block; border-radius: 10px; }
  .mm-ficha-galeria {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
    gap: 10px;
  }
  .mm-ficha-foto {
    aspect-ratio: 1 / 1;
    padding: 0; border: 0; background: none; cursor: pointer;
    border-radius: 8px; overflow: hidden;
  }
  .mm-ficha-foto picture { display: contents; }
  .mm-ficha-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
  .mm-mas { padding-top: 12px; }

  /* ==========================================================
     Incrustaciones (YouTube, TikTok, Instagram, X, Facebook…)

     Lo que se ve de entrada es una TAPA con la medida ya reservada, no el
     contenido de la red. El marco real lo crea el script del pie cuando el
     lector toca, así que la página no se conecta con nadie hasta entonces.
     De ahí que la caja y el marco compartan exactamente el mismo tamaño: al
     cambiar uno por otro no se mueve ni una línea de texto.
     ========================================================== */
  .incrusta { margin: 26px auto; max-width: min(100%, var(--inc-ancho, 100%)); }
  .incrusta-caja {
    position: relative;
    overflow: hidden;
    border-radius: 10px;
    border: 1px solid var(--line);
    background: linear-gradient(160deg, var(--bg-raised), var(--bg-sunken));
  }
  .incrusta-video .incrusta-caja { aspect-ratio: var(--inc-ratio, 16 / 9); }
  /* Una publicación de TikTok o de X pide 580 px de alto. Reservarlos de
     entrada dejaría medio celular en gris en mitad de la nota, y sin foto de
     tapa no hay nada que enseñar ahí. Así que la tapa mide lo justo y la caja
     crece al tocar: ese salto sí lo pidió el lector, y por eso no cuenta como
     CLS (Google no mide los movimientos de los 500 ms siguientes a un toque). */
  /* `min()` porque hay reproductores más bajos que la tapa: una canción de
     Spotify pide 152 px y SoundCloud 166, así que reservar 200 hacía que la
     caja ENCOGIERA al tocar, que es el salto que se quería evitar. */
  .incrusta-fijo .incrusta-caja { height: min(200px, var(--inc-alto, 200px)); }
  .incrusta-fijo.incrusta-con-foto .incrusta-caja,
  .incrusta-fijo .incrusta-caja.incrusta-abierta { height: var(--inc-alto, 560px); }
  /* La tapa y el marco se colocan CONTRA la caja, no dentro del flujo: es la
     caja la que tiene la medida buena (la del aspecto o la del alto fijo). Con
     `height: 100%` a secas, el botón medía lo que midiera su contenido y la
     miniatura de 4:3 de YouTube se salía por abajo del hueco de 16:9. */
  .incrusta-caja > iframe,
  .incrusta-caja > .incrusta-abrir {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    display: block; border: 0;
  }
  .incrusta-abrir { padding: 0; margin: 0; background: none; cursor: pointer; }
  /* Foco por dentro: la caja recorta lo que se salga (overflow: hidden), así
     que un anillo por fuera no se vería y quien navega con teclado no sabría
     dónde está parado. */
  .incrusta-abrir:focus-visible { outline: 3px solid var(--accent); outline-offset: -3px; }
  .incrusta-abrir picture { display: contents; }
  /* Dos clases a propósito: dentro de una nota manda `.noticia-cuerpo img`,
     que le pone alto automático, margen y esquinas redondeadas a toda foto del
     texto. Con una sola clase ganaba esa y la tapa se salía de su caja. */
  .incrusta .incrusta-foto {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    margin: 0; border-radius: 0;
    object-fit: cover; display: block;
  }
  /* Velo para que el nombre de la red y el aviso se lean sobre la miniatura */
  .incrusta-con-foto .incrusta-abrir::after {
    content: '';
    position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(5,9,6,0.45) 0%, rgba(5,9,6,0.05) 38%, rgba(5,9,6,0.55) 100%);
  }
  .incrusta-play {
    position: absolute;
    left: 50%; top: 50%;
    transform: translate(-50%, -50%);
    z-index: 2;
    width: 54px; height: 54px;
    border-radius: 50%;
    background: rgba(11,110,59,0.92);
    box-shadow: 0 4px 18px rgba(0,0,0,0.35);
    transition: transform 160ms ease, background 160ms ease;
  }
  .incrusta-play::after {
    content: '';
    position: absolute;
    left: 55%; top: 50%;
    transform: translate(-50%, -50%);
    border-style: solid;
    border-width: 9px 0 9px 15px;
    border-color: transparent transparent transparent #fff;
  }
  /* Publicación que no se reproduce (Instagram, X, LinkedIn, Threads, un post
     de Facebook): el mismo círculo, pero con una punta de flecha en vez del
     triángulo de reproducir. Se abre, no suena. */
  .incrusta-abre {
    position: absolute;
    left: 50%; top: 50%;
    transform: translate(-50%, -50%);
    z-index: 2;
    width: 54px; height: 54px;
    border-radius: 50%;
    background: rgba(11,110,59,0.92);
    box-shadow: 0 4px 18px rgba(0,0,0,0.35);
    transition: transform 160ms ease, background 160ms ease;
  }
  .incrusta-abre::after {
    content: '';
    position: absolute;
    left: 45%; top: 50%;
    width: 13px; height: 13px;
    border-top: 3px solid #fff;
    border-right: 3px solid #fff;
    transform: translate(-50%, -50%) rotate(45deg);
  }
  .incrusta-abrir:hover .incrusta-play,
  .incrusta-abrir:focus-visible .incrusta-play,
  .incrusta-abrir:hover .incrusta-abre,
  .incrusta-abrir:focus-visible .incrusta-abre { transform: translate(-50%, -50%) scale(1.08); background: var(--accent-strong); }
  .incrusta-marca {
    position: absolute; top: 10px; left: 10px; z-index: 2;
    padding: 4px 9px;
    border-radius: 999px;
    background: rgba(11,110,59,0.92);
    color: #fff;
    font-family: var(--font-display);
    font-size: 11px; font-weight: 600;
    letter-spacing: 0.06em; text-transform: uppercase;
  }
  .incrusta-aviso {
    position: absolute; left: 0; right: 0; bottom: 10px; z-index: 2;
    text-align: center;
    color: #fff;
    font-size: 11.5px;
    letter-spacing: 0.04em;
    text-shadow: 0 1px 3px rgba(0,0,0,0.6);
  }
  /* Sin miniatura —TikTok, X, Instagram y demás no dan una foto de tapa sin
     pedirle permiso a su servidor— la caja se queda vacía y muy alta. En ese
     caso todo se apila en el centro: botón, nombre de la red y aviso. */
  .incrusta:not(.incrusta-con-foto) .incrusta-abrir {
    display: flex; flex-direction: column;
    align-items: center; justify-content: center;
    gap: 12px;
  }
  .incrusta:not(.incrusta-con-foto) .incrusta-play,
  .incrusta:not(.incrusta-con-foto) .incrusta-abre,
  .incrusta:not(.incrusta-con-foto) .incrusta-marca,
  .incrusta:not(.incrusta-con-foto) .incrusta-aviso {
    position: relative; left: auto; right: auto; top: auto; bottom: auto;
    transform: none;
  }
  .incrusta:not(.incrusta-con-foto) .incrusta-abrir:hover .incrusta-play,
  .incrusta:not(.incrusta-con-foto) .incrusta-abrir:focus-visible .incrusta-play,
  .incrusta:not(.incrusta-con-foto) .incrusta-abrir:hover .incrusta-abre,
  .incrusta:not(.incrusta-con-foto) .incrusta-abrir:focus-visible .incrusta-abre { transform: scale(1.08); }
  .incrusta:not(.incrusta-con-foto) .incrusta-aviso { color: var(--text-muted); text-shadow: none; }
  .incrusta-pie { margin-top: 8px; font-size: 12px; color: var(--text-muted); text-align: right; }
  .incrusta-fuente { color: var(--accent); font-weight: 600; text-decoration: none; }
  .incrusta-fuente:hover { text-decoration: underline; text-underline-offset: 3px; }
  .incrusta-propio video,
  .incrusta-propio audio { width: 100%; display: block; border-radius: 10px; background: #000; }
  /* Con póster no hace falta nada: medido en Chrome, el navegador reserva la
     caja con la proporción del póster aunque el video no se haya cargado
     (preload="none", readyState 0). SIN póster sí colapsa a 300x150 y el texto
     salta cuando llegan los metadatos, así que a esos —y solo a esos— se les
     reserva una caja apaisada. */
  .incrusta-propio video:not([poster]) { aspect-ratio: 16 / 9; height: auto; }
  .incrusta-propio audio { background: none; }

  /* Red conocida de la que no se puede sacar el identificador (los enlaces
     cortos de la app de TikTok, por ejemplo): tarjeta con el enlace, nunca un
     marco en blanco. */
  .incrusta-tarjeta-caja {
    display: block;
    padding: 16px 18px;
    border: 1px solid var(--line);
    border-radius: 10px;
    background: var(--bg-raised);
    text-decoration: none;
    color: var(--text);
  }
  .incrusta-tarjeta-caja:hover { border-color: var(--accent); }
  .incrusta-tarjeta .incrusta-marca { position: static; display: inline-block; margin-bottom: 8px; }
  .incrusta-titular { display: block; font-family: var(--font-display); font-size: 17px; line-height: 1.25; }
  .incrusta-url { display: block; margin-top: 4px; font-size: 12px; color: var(--text-muted); word-break: break-all; }

  /* Cada red con su color, que es como el lector la reconoce de un vistazo */
  .incrusta-red-youtube .incrusta-marca { background: #ff0000; }
  .incrusta-red-vimeo .incrusta-marca { background: #1ab7ea; }
  /* Las tres marcas casi negras llevan un filo claro: sin él, sobre el fondo
     oscuro del sitio la píldora desaparece y solo se lee el texto flotando. */
  .incrusta-red-tiktok .incrusta-marca,
  .incrusta-red-x .incrusta-marca,
  .incrusta-red-threads .incrusta-marca { border: 1px solid rgba(255,255,255,0.3); }
  .incrusta-red-tiktok .incrusta-marca { background: #010101; }
  .incrusta-red-instagram .incrusta-marca { background: #c13584; }
  .incrusta-red-threads .incrusta-marca { background: #101010; }
  .incrusta-red-facebook .incrusta-marca { background: #1877f2; }
  .incrusta-red-x .incrusta-marca { background: #0f1419; }
  .incrusta-red-linkedin .incrusta-marca { background: #0a66c2; }
  .incrusta-red-spotify .incrusta-marca { background: #1db954; }
  .incrusta-red-soundcloud .incrusta-marca { background: #ff5500; }

  @media (max-width: 640px) {
    .incrusta { margin: 20px auto; }
    /* En el celular ninguna incrustación puede pasarse del alto de la pantalla.
       OJO con a quién se le aplica: escrito como `.incrusta-fijo .incrusta-caja`
       a secas hacía lo contrario de lo que dice, porque también alcanzaba a la
       tapa cerrada —que mide 200px a propósito— y la inflaba a 560. Solo se
       acota lo que de verdad está abierto o lleva foto. */
    .incrusta-fijo.incrusta-con-foto .incrusta-caja,
    .incrusta-fijo .incrusta-caja.incrusta-abierta { height: min(var(--inc-alto, 560px), 78vh); }
    .mm-ficha-galeria { grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 8px; }
  }
