/* Generado desde views/layout/news-styles.php (2026-09-29): antes iba en línea en cada página (~200 KB por HTML). */
  /* ===== VÍA [MEDIO] (Plan 360 Bloque 14 — 2026-05-21) =====
     Atribución visual prominente al medio fuente con favicon. Se muestra
     antes de la encuesta para que el lector vea inmediatamente de dónde viene. */
  .news-via {
    display: inline-flex; align-items: center; gap: 8px;
    margin: 1rem 0;
    padding: 6px 12px;
    background: rgba(0,212,255,0.06);
    border: 1px solid rgba(0,212,255,0.15);
    border-radius: 999px;
    font-size: 0.82rem;
    color: #aaa;
  }
  .news-via-favicon { width: 18px; height: 18px; border-radius: 3px; }
  .news-via-text strong, .news-via-text a { color: var(--cyan, #00d4ff); text-decoration: none; font-weight: 600; }
  .news-via-text a:hover { text-decoration: underline; }

  /* ===== AI DISCLOSURE (Plan 360 Bloque 8 — 2026-05-21) =====
     Cumple Google E-E-A-T Helpful Content Update: transparencia sobre uso de IA
     + atribución real al supervisor humano. Mejor SEO que ocultar uso de IA. */
  .news-ai-disclosure {
    margin: 2rem 0 1rem;
    padding: 1rem 1.25rem;
    background: rgba(255,255,255,0.025);
    border: 1px solid rgba(255,255,255,0.05);
    border-left: 3px solid rgba(0,212,255,0.4);
    border-radius: 8px;
    font-size: 0.85rem;
    color: #999;
    line-height: 1.5;
  }
  .news-ai-disclosure-inner { display: flex; gap: 0.8rem; align-items: flex-start; }
  .news-ai-disclosure-icon { font-size: 1.2rem; color: var(--cyan, #00d4ff); flex-shrink: 0; line-height: 1; padding-top: 1px; }
  .news-ai-disclosure p { margin: 0; }
  .news-ai-disclosure strong { color: #ccc; font-weight: 600; }
  .news-ai-disclosure a { color: var(--cyan, #00d4ff); text-decoration: none; }
  .news-ai-disclosure a:hover { text-decoration: underline; }

  /* ===== GAME CARD (Plan 360 Bloque 6 — 2026-05-21) ===== */
  /* Tarjeta de datos inyectada por el servidor en noticias cuyas etiquetas
     coinciden con un juego de la BD. Diferenciador: nadie más en el nicho lo hace. */
  .gp-game-card {
    background: linear-gradient(160deg, rgba(0,30,40,0.45), rgba(10,12,16,0.85));
    border: 1px solid rgba(0,212,255,0.22);
    border-radius: 14px;
    padding: 16px 20px;
    margin: 1.5rem 0;
    box-shadow: 0 8px 24px rgba(0,0,0,0.4), 0 0 18px rgba(0,212,255,0.08);
    position: relative;
    overflow: hidden;
  }
  .gp-game-card::before {
    content: '';
    position: absolute;
    top: -40px; right: -40px;
    width: 140px; height: 140px;
    background: radial-gradient(circle, rgba(0,212,255,0.18), transparent 60%);
    pointer-events: none;
  }
  .gp-card-head {
    display: flex; align-items: center; justify-content: space-between; gap: 1rem;
    margin-bottom: 0.75rem; position: relative; z-index: 1;
  }
  .gp-card-head h4 {
    margin: 0; font-family: 'Bebas Neue', sans-serif; font-size: 1.4rem; letter-spacing: 1px; color: #f0f0f0;
  }
  .gp-card-head h4 a { color: inherit; text-decoration: none; }
  .gp-card-head h4 a:hover { color: var(--cyan, #00d4ff); }
  .gp-card-eyebrow {
    font-family: 'Bebas Neue', sans-serif; font-size: 10px; letter-spacing: 2px;
    color: var(--cyan, #00d4ff); background: rgba(0,212,255,0.12);
    border: 1px solid rgba(0,212,255,0.3); padding: 3px 8px; border-radius: 4px; font-weight: 700;
  }
  .gp-card-data { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; position: relative; z-index: 1; }
  .gp-card-data li { font-size: 0.95rem; color: #d8d8d8; padding: 4px 0; }
  .gp-card-data li strong { color: #f8f8f8; font-weight: 700; }
  .gp-card-gp-si strong { color: #00ff88; }
  .gp-card-gp-anunciado strong { color: #ffb74d; }
  .gp-card-gp-no strong { color: #888; }
  .gp-card-oferta a { color: var(--cyan, #00d4ff); font-weight: 700; text-decoration: none; }
  .gp-card-oferta a:hover { text-decoration: underline; }
  .gp-card-desc { background: #00ff88; color: #002818; font-size: 11px; font-weight: 800; padding: 2px 6px; border-radius: 4px; margin-left: 6px; }
  .gp-card-oferta-vacia { color: #888; font-size: 0.85rem; }
  @media (max-width: 600px) {
    .gp-game-card { padding: 12px 14px; }
    .gp-card-head h4 { font-size: 1.15rem; }
  }

  /* ===== NOTICIAS — SISTEMA PREMIUM ===== */
  
  /* Variables locales de diseño */
  :root {
    --news-glass-bg: rgba(22, 24, 28, 0.7);
    --news-glass-border: rgba(255, 255, 255, 0.08);
    --news-glass-blur: blur(16px);
    --news-glow-cyan: rgba(0, 212, 255, 0.25);
    --news-glow-green: rgba(16, 124, 16, 0.25);
  }

  /* Cabecera Principal */
  .news-page-header {
    display: flex; align-items: flex-end; justify-content: space-between;
    gap: var(--space-4); margin-bottom: var(--space-4); flex-wrap: wrap;
    padding: var(--space-6) 0; position: relative;
  }
  .news-page-header::before {
    content: ''; position: absolute; top: -20%; left: -10%; width: 50%; height: 140%;
    background: radial-gradient(circle at center, rgba(0, 212, 255, 0.06) 0%, transparent 70%);
    pointer-events: none; z-index: 0;
  }
  .news-page-header > * { position: relative; z-index: 1; }
  /* 2026-05-10 (feedback Sergi "se ve cortado"): antes era una línea cyan de
     100px de ancho que se cortaba abrupto. Ahora full-width con gradient que se
     difumina por los lados — natural, sin sensación de corte. */
  .news-page-header::after {
    content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 1px;
    background: linear-gradient(90deg,
      transparent 0%,
      var(--cyan-accent) 15%,
      var(--cyan-accent) 30%,
      rgba(0,212,255,0.30) 60%,
      transparent 100%);
    box-shadow: 0 0 8px rgba(0,212,255,0.4);
  }
  .news-page-context {
    font-size: 11px; font-weight: 800; color: var(--cyan-accent);
    letter-spacing: 3px; text-transform: uppercase; margin-bottom: 8px;
    display: flex; align-items: center; gap: 10px;
    opacity: 0.8;
  }
  .news-page-context::before {
    content: ''; width: 20px; height: 1px; background: var(--cyan-accent);
  }
  .news-page-title {
    font-family: 'Bebas Neue', sans-serif; font-size: 64px; letter-spacing: 3px;
    line-height: 0.9; color: #fff; text-shadow: 0 0 30px rgba(255,255,255,0.1);
    margin-bottom: 4px;
  }
  .news-page-title span { 
    color: transparent; 
    background: linear-gradient(90deg, var(--cyan-accent) 0%, #00ffcc 100%);
    -webkit-background-clip: text; background-clip: text;
    filter: drop-shadow(0 0 15px rgba(0,212,255,0.4));
  }
  .news-page-sub { 
    font-family: system-ui, -apple-system, sans-serif;
    font-size: 14px; color: rgba(255,255,255,0.5); margin-top: 10px; 
    font-weight: 500; letter-spacing: 0.5px;
  }
  .news-page-sub strong { color: var(--cyan-accent); }

  /* Filtros (Pills) */
  /* 2026-05-09 (Operación BOOM A3): tabs SOCIALES (no taxonómicas).
     3 tabs: Reciente / Trending / Debate. Las categorías ?cat= siguen
     accesibles vía URL/sitemap pero no son la UI dominante. */
  .news-tabs {
    display: flex; gap: 6px; margin-bottom: var(--space-5);
    padding: 4px 0 12px;
    overflow-x: auto; -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    align-items: center;
  }
  .news-tabs::-webkit-scrollbar { display: none; }
  .news-tab {
    display: inline-flex; align-items: center; gap: 7px;
    padding: 10px 18px;
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.06);
    color: rgba(255,255,255,0.6);
    font-size: 13px; font-weight: 700;
    text-decoration: none;
    border-radius: 999px;
    transition: all 0.25s ease;
    white-space: nowrap;
  }
  .news-tab-icon {
    width: 14px; height: 14px;
    flex-shrink: 0;
    color: currentColor;
  }
  .news-tab.active .news-tab-icon { color: var(--cyan-accent, #00d4ff); }
  .news-tab:hover {
    background: rgba(0,212,255,0.06);
    border-color: rgba(0,212,255,0.30);
    color: #fff;
  }
  .news-tab.active {
    background: linear-gradient(135deg, rgba(0,212,255,0.18), rgba(0,212,255,0.08));
    border-color: rgba(0,212,255,0.55);
    color: #fff;
    box-shadow: 0 4px 14px rgba(0,212,255,0.18);
  }
  .news-tab-cat-badge {
    margin-left: auto;
    font-size: 11px;
    color: rgba(255,255,255,0.55);
  }
  .news-tab-cat-badge a {
    color: var(--cyan-accent, #00d4ff);
    text-decoration: none;
    padding: 4px 10px;
    background: rgba(0,212,255,0.08);
    border-radius: 999px;
    border: 1px dashed rgba(0,212,255,0.30);
  }
  /* Labels condicionales: full en desktop, short en mobile (entran 3 sin scroll) */
  .news-tab-label-short { display: none; }
  @media (max-width: 600px) {
    .news-tab { padding: 9px 14px; font-size: 12.5px; gap: 6px; }
    .news-tab-label-full { display: none; }
    .news-tab-label-short { display: inline; }
    .news-tabs { gap: 5px; }
  }

  /* HERO */
  /* 2026-05-08 (hero v8 — fix dimensiones):
     - Desktop ≥960px: grid 1.4fr / 1fr (más ancho a secundarias). Las
       secundarias NO se estiran al alto del hero (altura natural). Si el
       hero mide más, queda hueco visual aceptable abajo de las secundarias.
     - Tablet 700-959px: secundarias en fila 3-col bajo el hero.
     - Mobile <700px: stack vertical. */
  .news-hero-block {
    display: flex; flex-direction: column; gap: var(--space-4);
    margin-bottom: var(--space-5);
  }
  .news-hero-main { display: flex; min-width: 0; }
  .news-hero-main > .news-card { width: 100%; }
  .news-hero-secundarias {
    display: grid; grid-template-columns: 1fr;
    gap: var(--space-3);
    min-width: 0;
    align-content: start;
  }
  @media (min-width: 700px) and (max-width: 959px) {
    .news-hero-secundarias { grid-template-columns: repeat(3, 1fr); }
  }
  @media (min-width: 960px) {
    .news-hero-block {
      display: grid;
      grid-template-columns: minmax(0, 1.4fr) minmax(280px, 1fr);
      gap: var(--space-4);
      align-items: start;
    }
    .news-hero-secundarias {
      grid-template-columns: 1fr;
      gap: var(--space-3);
    }
  }

  /* LAYOUT GRID (Main + Sidebar) */
  .news-layout {
    display: grid; grid-template-columns: 1fr; gap: var(--space-6);
    max-width: 1300px; margin: 0 auto; padding: 0 var(--space-4);
  }
  @media (min-width: 1100px) {
    .news-layout { grid-template-columns: minmax(0,1fr) 340px; align-items: start; }
    .news-sidebar-sticky-wrapper { 
      position: sticky; 
      top: 88px; 
      display: flex; flex-direction: column; gap: var(--space-5);
      z-index: 10;
    }
  }
  .news-main { min-width: 0; }
  
  .news-sidebar { display: flex; flex-direction: column; gap: var(--space-6); position: relative; }
  @media (max-width: 1099px) {
    .news-sidebar { margin-top: var(--space-8); }
  }

  /* GRID — auto-fit (no auto-fill): cuando la última fila tiene 1-2 cards orphan,
     se estiran para llenar el ancho disponible en lugar de dejar hueco a la
     derecha. Mantiene minmax(280px, 1fr) para no romper en mobile. */
  .news-grid {
    display: grid; gap: var(--space-5);
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  }

  /* ════════════════════════════════════════════════════════════════════════
     LIVE ACTIVITY TICKER (Operación BOOM B1, 2026-05-09)
     Franja auto-scroll bajo header. CSS @keyframes puro (mobile-safe).
     ════════════════════════════════════════════════════════════════════════ */
  .live-ticker {
    display: flex; align-items: stretch;
    gap: 0;
    width: 100%;
    height: 44px;
    background: linear-gradient(90deg, rgba(0,0,0,0.85) 0%, rgba(10,14,23,0.7) 100%);
    border-top: 1px solid rgba(0,212,255,0.18);
    border-bottom: 1px solid rgba(0,212,255,0.10);
    overflow: hidden;
    backdrop-filter: blur(12px);
    position: relative;
    z-index: 50;
  }
  .live-ticker-label {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 0 14px;
    font-size: 10px; font-weight: 800; letter-spacing: 0.12em;
    color: #00f0ff;
    background: rgba(0,240,255,0.10);
    border-right: 1px solid rgba(0,240,255,0.20);
    white-space: nowrap;
    flex-shrink: 0;
    z-index: 2;
  }
  .live-ticker-dot {
    width: 8px; height: 8px;
    background: #00f0ff;
    border-radius: 50%;
    box-shadow: 0 0 8px rgba(0,240,255,0.8);
    animation: lt-pulse 1.4s ease-in-out infinite;
  }
  /* 2026-05-10: removido box-shadow del 50% (no compositable, Lighthouse).
     El brillo estático del .live-ticker-dot ya da el efecto suficiente. */
  @keyframes lt-pulse {
    0%, 100% { opacity: 0.4; transform: scale(0.85); }
    50%      { opacity: 1;    transform: scale(1.1); }
  }
  .live-ticker-track-wrap {
    flex: 1;
    overflow: hidden;
    position: relative;
    /* Captura swipes verticales sin bloquear (mobile UX) */
    pointer-events: none;
  }
  .live-ticker-track {
    display: inline-flex; align-items: center; gap: 32px;
    padding: 0 32px;
    white-space: nowrap;
    will-change: transform;
    /* Anim 70s desktop, 100s mobile (legible, no marea) */
    animation: lt-scroll 70s linear infinite;
  }
  /* Mobile: animación más lenta para legibilidad. Bug fix 2026-05-09:
     antes ocultaba .la-link y añadía ' una noticia' a TODOS los eventos →
     "X acaba de unirse a la comunidad una noticia" sonaba absurdo.
     Ahora dejamos el título visible (limitado por ancho del ticker). */
  @media (max-width: 768px) {
    .live-ticker { height: 36px; }
    .live-ticker-label { padding: 0 10px; font-size: 9px; }
    .live-ticker-track { animation-duration: 100s; gap: 22px; padding: 0 22px; }
    .live-ticker-text .la-link {
      max-width: 130px;
      display: inline-block;
      vertical-align: bottom;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }
  }
  @keyframes lt-scroll {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
  }
  /* Pausa en hover (desktop) y cuando pestaña inactiva */
  .live-ticker:hover .live-ticker-track { animation-play-state: paused; }
  /* Respeta prefers-reduced-motion */
  @media (prefers-reduced-motion: reduce) {
    .live-ticker-track { animation: none; }
    .live-ticker-dot { animation: none; opacity: 1; }
  }

  .live-ticker-item {
    display: inline-flex; align-items: center; gap: 8px;
    color: rgba(255,255,255,0.85);
    font-size: 13px;
    /* Restaurar pointer-events solo en items (para que enlaces funcionen) */
    pointer-events: auto;
  }
  .live-ticker-emoji { font-size: 15px; line-height: 1; flex-shrink: 0; }
  .live-ticker-text { color: rgba(255,255,255,0.85); }
  .live-ticker-text .la-nick {
    color: #00f0ff; font-weight: 700; text-decoration: none;
  }
  .live-ticker-text .la-nick:hover { text-decoration: underline; }
  .live-ticker-text .la-link {
    color: rgba(255,255,255,0.95); text-decoration: none;
    border-bottom: 1px dotted rgba(0,240,255,0.30);
  }
  .live-ticker-text .la-link:hover { border-bottom-color: #00f0ff; }
  .live-ticker-text strong { color: #ffd76b; }
  .live-ticker-time {
    color: rgba(255,255,255,0.40);
    font-size: 11px;
    margin-left: 4px;
  }

  /* ════════════════════════════════════════════════════════════════════════
     MURAL DE LA COMUNIDAD (Operación BOOM, 2026-05-09)
     Widget rolling-5: mensajes top sidebar. Cuesta 5⚡ publicar.
     ════════════════════════════════════════════════════════════════════════ */
  .mural-widget {
    position: relative;
    margin-bottom: var(--space-4);
    padding: 16px 16px 14px;
    background: linear-gradient(180deg, rgba(0,212,255,0.06) 0%, rgba(15,20,30,0.85) 100%);
    border: 1px solid rgba(0,212,255,0.30);
    border-radius: 14px;
    box-shadow: 0 8px 24px rgba(0,0,0,0.40), 0 0 18px rgba(0,212,255,0.10);
    overflow: hidden;
  }
  /* Glow ambient sutil arriba del widget */
  .mural-widget::before {
    content: ''; position: absolute; top: -1px; left: 12%; right: 12%; height: 1px;
    background: linear-gradient(90deg, transparent, var(--cyan-accent, #00d4ff), transparent);
    box-shadow: 0 0 12px rgba(0,212,255,0.50);
  }
  .mural-head {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: 12px; gap: 8px;
  }
  .mural-title {
    display: inline-flex; align-items: center; gap: 7px;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 16px; letter-spacing: 1.2px;
    color: rgba(255,255,255,0.85);
    text-transform: uppercase;
  }
  .mural-title svg { color: var(--cyan-accent, #00d4ff); flex-shrink: 0; }
  .mural-title strong { color: var(--cyan-accent, #00d4ff); font-weight: 700; }
  .mural-meta-rolling {
    font-size: 9px; font-weight: 700; letter-spacing: 0.08em;
    color: rgba(255,255,255,0.40);
    text-transform: uppercase;
    padding: 3px 8px;
    background: rgba(255,255,255,0.04);
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 999px;
  }

  /* Form publicar */
  .mural-form {
    margin-bottom: 14px;
    padding: 10px;
    background: rgba(0,0,0,0.30);
    border: 1px solid rgba(0,212,255,0.18);
    border-radius: 10px;
  }
  .mural-form textarea {
    width: 100%;
    min-height: 60px;
    padding: 8px 10px;
    background: rgba(0,0,0,0.35);
    border: 1px solid rgba(255,255,255,0.10);
    border-radius: 8px;
    color: #fff;
    font-family: inherit;
    font-size: 13px;
    line-height: 1.4;
    resize: vertical;
    box-sizing: border-box;
  }
  .mural-form textarea:focus {
    outline: none; border-color: var(--cyan-accent, #00d4ff);
    box-shadow: 0 0 0 2px rgba(0,212,255,0.15);
  }
  .mural-form-foot {
    display: flex; align-items: center; justify-content: space-between;
    gap: 10px; margin-top: 8px;
  }
  .mural-form-counter {
    font-size: 11px; color: rgba(255,255,255,0.45);
    font-family: 'Share Tech Mono', monospace;
  }
  .mural-form-counter.is-near { color: #ffd76b; }

  /* Bloque B 2026-05-28: input imagen mural */
  .mural-img-row { display: flex; align-items: center; gap: 10px; margin-top: 6px; flex-wrap: wrap; }
  .mural-img-btn {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 10px; border-radius: 8px;
    background: rgba(0,212,255,0.06); border: 1px dashed rgba(0,212,255,0.35);
    color: rgba(255,255,255,0.85); font-size: 11.5px; font-weight: 600;
    cursor: pointer; transition: all .15s;
  }
  .mural-img-btn:hover { background: rgba(0,212,255,0.12); border-color: rgba(0,212,255,0.6); color: #fff; }
  .mural-img-preview { display: inline-flex; align-items: center; gap: 6px; position: relative; }
  .mural-img-preview[hidden] { display: none !important; }
  .mural-img-preview img { width: 44px; height: 44px; object-fit: cover; border-radius: 6px; border: 1px solid rgba(255,255,255,0.1); }
  .mural-img-remove {
    background: rgba(231,76,60,0.85); color:#fff; border: 0;
    width: 18px; height: 18px; border-radius: 50%; cursor: pointer;
    font-size: 11px; line-height: 1; font-weight: 800;
    display: inline-flex; align-items: center; justify-content: center;
    position: absolute; top: -6px; right: -6px;
  }
  .mural-img-remove:hover { background: #e74c3c; }
  .mural-img-status { font-size: 11px; color: rgba(255,255,255,0.55); font-style: italic; }
  .mural-img-status.is-error { color: #ff8e8e; }
  .mural-img-status.is-ok { color: #aef0a0; }

  .mural-img-link { display: block; margin-top: 6px; }
  .mural-img-shot {
    display: block; width: 100%; max-height: 280px; object-fit: cover;
    border-radius: 10px; border: 1px solid rgba(255,255,255,0.06);
    background: #0a0a0e;
    transition: transform .25s ease, border-color .25s ease;
  }
  .mural-img-link:hover .mural-img-shot { transform: scale(1.01); border-color: rgba(0,212,255,0.3); }
  .mural-form-counter.is-over { color: #e74c3c; }
  .mural-form-btn {
    background: linear-gradient(135deg, var(--cyan-accent, #00d4ff), #00a8cc);
    color: #001a20;
    border: none;
    padding: 8px 14px;
    border-radius: 8px;
    font-family: inherit;
    font-size: 12px; font-weight: 800;
    letter-spacing: 0.3px;
    cursor: pointer;
    transition: all 0.2s ease;
  }
  .mural-form-btn strong { font-weight: 800; }
  .mural-form-btn:hover:not(:disabled) {
    transform: translateY(-1px);
    box-shadow: 0 4px 14px rgba(0,212,255,0.40);
    filter: brightness(1.08);
  }
  .mural-form-btn:disabled { opacity: 0.6; cursor: progress; }
  .mural-form-warn {
    margin: 8px 0 0; padding: 0;
    font-size: 10px; color: rgba(255,255,255,0.40);
    line-height: 1.35;
  }
  .mural-form-err {
    margin: 8px 0 0; padding: 6px 10px;
    background: rgba(231,76,60,0.10); color: #ff8b80;
    border: 1px solid rgba(231,76,60,0.30); border-radius: 6px;
    font-size: 11px;
  }
  .mural-form-locked {
    padding: 10px 12px;
    margin-bottom: 14px;
    background: rgba(255,255,255,0.03);
    border: 1px dashed rgba(255,255,255,0.10);
    border-radius: 8px;
    color: rgba(255,255,255,0.65);
    font-size: 12px; line-height: 1.5;
  }
  .mural-form-locked strong { color: var(--cyan-accent, #00d4ff); }
  .mural-cta-anon {
    color: var(--cyan-accent, #00d4ff);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dotted rgba(0,212,255,0.40);
  }
  .mural-cta-anon:hover { border-bottom-color: var(--cyan-accent, #00d4ff); }

  /* Lista de mensajes */
  .mural-list {
    list-style: none; padding: 0; margin: 0;
    display: flex; flex-direction: column; gap: 10px;
  }
  .mural-item {
    display: flex; gap: 10px;
    padding: 10px;
    background: rgba(255,255,255,0.02);
    border: 1px solid rgba(255,255,255,0.05);
    border-radius: 10px;
    transition: border-color 0.2s ease;
  }
  .mural-item:hover { border-color: rgba(0,212,255,0.20); }
  .mural-item.is-mine {
    background: rgba(0,212,255,0.06);
    border-color: rgba(0,212,255,0.25);
  }
  .mural-avatar-link { flex-shrink: 0; }
  .mural-avatar {
    width: 32px; height: 32px;
    border-radius: 50%;
    object-fit: cover;
    display: block;
  }
  .mural-avatar-letter {
    display: flex; align-items: center; justify-content: center;
    font-weight: 800; font-size: 13px; color: #fff;
  }
  .mural-body { flex: 1; min-width: 0; }
  .mural-meta {
    display: flex; align-items: center; gap: 8px;
    margin-bottom: 3px;
  }
  .mural-nick {
    color: var(--cyan-accent, #00d4ff);
    font-size: 12px; font-weight: 700;
    text-decoration: none;
  }
  .mural-nick:hover { text-decoration: underline; }
  .mural-time {
    font-size: 10px; color: rgba(255,255,255,0.40);
  }
  .mural-delete {
    margin-left: auto;
    background: transparent; border: none;
    color: rgba(255,255,255,0.35);
    font-size: 16px; line-height: 1;
    padding: 0 6px; cursor: pointer;
    transition: color 0.2s ease;
  }
  .mural-delete:hover { color: #e74c3c; }
  .mural-text {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.4;
    color: rgba(255,255,255,0.85);
    word-wrap: break-word;
    overflow-wrap: anywhere;
  }
  .mural-empty {
    margin: 0; padding: 12px;
    text-align: center;
    font-size: 12px; color: rgba(255,255,255,0.45);
    background: rgba(255,255,255,0.02);
    border-radius: 8px;
  }

  /* Mobile: ajustes mínimos */
  @media (max-width: 600px) {
    .mural-widget { padding: 14px 12px 12px; }
    .mural-form-btn { padding: 8px 10px; font-size: 11px; }
  }

  /* ════════════════════════════════════════════════════════════════════════
     BADGE TOAST (Operación BOOM B4, 2026-05-09)
     Toast top-right con confetti CSS al desbloquear badge. Inyectado por
     assets/js/badges-celebrate.js cuando un endpoint devuelve badges_unlocked.
     ════════════════════════════════════════════════════════════════════════ */
  .gp-badge-toast {
    position: fixed; top: 80px; right: 20px;
    z-index: 10000;
    display: flex; align-items: flex-start; gap: 12px;
    width: 320px; max-width: calc(100vw - 40px);
    padding: 14px 36px 14px 14px;
    background: linear-gradient(135deg, rgba(15,20,30,0.98), rgba(8,12,18,0.98));
    border: 1px solid rgba(0,212,255,0.40);
    border-radius: 14px;
    color: #fff;
    box-shadow: 0 12px 40px rgba(0,0,0,0.6), 0 0 24px rgba(0,212,255,0.30);
    cursor: pointer;
    transform: translateX(380px); opacity: 0;
    transition: transform 0.5s cubic-bezier(0.175,0.885,0.32,1.275),
                opacity 0.3s ease;
    overflow: hidden;
  }
  .gp-badge-toast.is-show { transform: translateX(0); opacity: 1; }
  .gp-badge-toast.is-hide { transform: translateX(380px); opacity: 0; }
  .gp-badge-toast[data-color="gold"]   { border-color: rgba(255,215,107,0.55); box-shadow: 0 12px 40px rgba(0,0,0,0.6), 0 0 28px rgba(255,215,107,0.30); }
  .gp-badge-toast[data-color="purple"] { border-color: rgba(192,132,252,0.55); box-shadow: 0 12px 40px rgba(0,0,0,0.6), 0 0 28px rgba(192,132,252,0.30); }
  .gp-badge-toast[data-color="green"]  { border-color: rgba(82,176,67,0.55); box-shadow: 0 12px 40px rgba(0,0,0,0.6), 0 0 28px rgba(82,176,67,0.30); }
  .gp-badge-toast[data-color="red"]    { border-color: rgba(231,76,60,0.55); box-shadow: 0 12px 40px rgba(0,0,0,0.6), 0 0 28px rgba(231,76,60,0.30); }

  .gpbt-icon {
    flex-shrink: 0;
    width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, var(--cyan-accent, #00d4ff), #00a8cc);
    color: #001a20;
    border-radius: 50%;
    box-shadow: 0 4px 14px rgba(0,212,255,0.40);
    z-index: 2;
  }
  .gp-badge-toast[data-color="gold"]   .gpbt-icon { background: linear-gradient(135deg, #ffd76b, #c89d2c); color: #2a1f00; box-shadow: 0 4px 14px rgba(255,215,107,0.40); }
  .gp-badge-toast[data-color="purple"] .gpbt-icon { background: linear-gradient(135deg, #c084fc, #8b5cf6); color: #fff; box-shadow: 0 4px 14px rgba(192,132,252,0.40); }
  .gp-badge-toast[data-color="green"]  .gpbt-icon { background: linear-gradient(135deg, #52b043, #2e7d32); color: #fff; box-shadow: 0 4px 14px rgba(82,176,67,0.40); }
  .gp-badge-toast[data-color="red"]    .gpbt-icon { background: linear-gradient(135deg, #e74c3c, #c0392b); color: #fff; box-shadow: 0 4px 14px rgba(231,76,60,0.40); }

  .gpbt-body { flex: 1; min-width: 0; z-index: 2; }
  .gpbt-eyebrow {
    font-size: 10px; font-weight: 800; letter-spacing: 0.12em;
    color: var(--cyan-accent, #00d4ff);
    text-transform: uppercase;
    margin-bottom: 4px;
  }
  .gpbt-title {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 22px; letter-spacing: 1px;
    color: #fff;
    line-height: 1.1; margin-bottom: 4px;
  }
  .gpbt-desc { font-size: 12px; color: rgba(255,255,255,0.70); line-height: 1.35; }
  .gpbt-close {
    position: absolute; top: 6px; right: 8px;
    background: transparent; border: none;
    color: rgba(255,255,255,0.45);
    font-size: 22px; line-height: 1; cursor: pointer;
    padding: 4px 8px;
    z-index: 3;
  }
  .gpbt-close:hover { color: #fff; }

  /* Confetti CSS — 14 partículas absolutas que caen con rotación */
  .gpbt-confetti {
    position: absolute; inset: 0;
    pointer-events: none; overflow: hidden;
    z-index: 1;
  }
  .gpbt-conf {
    position: absolute; top: -10px; left: 50%;
    width: 8px; height: 14px;
    border-radius: 2px;
    opacity: 0;
    transform-origin: center;
  }
  .gp-badge-toast.is-show .gpbt-conf {
    animation: gpbt-fall 1.8s ease-out forwards;
  }
  @keyframes gpbt-fall {
    0%   { opacity: 0; transform: translate(0, -10px) rotate(0); }
    15%  { opacity: 1; }
    100% { opacity: 0; transform: translate(var(--tx, 0), var(--ty, 240px)) rotate(var(--rot, 360deg)); }
  }
  /* 14 partículas distribuidas con dirección/color distintos */
  .gpbt-conf-0  { left: 12%; background: #00d4ff; --tx: -40px; --ty: 220px; --rot: 540deg; animation-delay: 0.05s; }
  .gpbt-conf-1  { left: 22%; background: #ffd76b; --tx: -20px; --ty: 250px; --rot: 720deg; animation-delay: 0.10s; }
  .gpbt-conf-2  { left: 32%; background: #c084fc; --tx: 10px;  --ty: 230px; --rot: 600deg; animation-delay: 0.00s; }
  .gpbt-conf-3  { left: 42%; background: #52b043; --tx: -10px; --ty: 260px; --rot: 480deg; animation-delay: 0.15s; }
  .gpbt-conf-4  { left: 52%; background: #00d4ff; --tx: 30px;  --ty: 240px; --rot: 720deg; animation-delay: 0.05s; }
  .gpbt-conf-5  { left: 62%; background: #ffd76b; --tx: 20px;  --ty: 220px; --rot: 540deg; animation-delay: 0.10s; }
  .gpbt-conf-6  { left: 72%; background: #c084fc; --tx: 50px;  --ty: 250px; --rot: 600deg; animation-delay: 0.00s; }
  .gpbt-conf-7  { left: 82%; background: #00d4ff; --tx: 40px;  --ty: 230px; --rot: 480deg; animation-delay: 0.20s; }
  .gpbt-conf-8  { left: 18%; background: #ffd76b; --tx: -30px; --ty: 245px; --rot: 720deg; animation-delay: 0.30s; }
  .gpbt-conf-9  { left: 38%; background: #52b043; --tx: 5px;   --ty: 235px; --rot: 540deg; animation-delay: 0.25s; }
  .gpbt-conf-10 { left: 58%; background: #c084fc; --tx: 15px;  --ty: 255px; --rot: 600deg; animation-delay: 0.35s; }
  .gpbt-conf-11 { left: 68%; background: #00d4ff; --tx: 35px;  --ty: 225px; --rot: 480deg; animation-delay: 0.30s; }
  .gpbt-conf-12 { left: 28%; background: #ffd76b; --tx: -15px; --ty: 245px; --rot: 720deg; animation-delay: 0.40s; }
  .gpbt-conf-13 { left: 78%; background: #52b043; --tx: 45px;  --ty: 240px; --rot: 540deg; animation-delay: 0.40s; }

  @media (prefers-reduced-motion: reduce) {
    .gp-badge-toast { transition: opacity 0.3s ease; transform: none; }
    .gpbt-conf { display: none; }
  }
  @media (max-width: 600px) {
    .gp-badge-toast { top: 70px; right: 10px; left: 10px; width: auto; }
  }

  /* 2026-05-09 (Operación BOOM A2): strip horizontal sutil POST-hero-bento.
     Reemplaza el muro de 280px que pisaba contenido. Visible solo deslogueados. */
  .home-comunidad-strip {
    display: flex; align-items: center; justify-content: space-between;
    gap: 16px; flex-wrap: wrap;
    margin: var(--space-3) 0 var(--space-4);
    padding: 14px 20px;
    background: linear-gradient(90deg, rgba(0,212,255,0.08), rgba(0,212,255,0.02));
    border: 1px solid rgba(0,212,255,0.20);
    border-radius: 12px;
  }
  .home-comunidad-strip .hcs-text {
    display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
    font-size: 14px; color: var(--text-secondary, #ccc);
  }
  .home-comunidad-strip .hcs-text strong {
    color: #fff; font-weight: 800; font-size: 15px;
  }
  .home-comunidad-strip .hcs-cta {
    display: inline-flex; align-items: center;
    background: linear-gradient(135deg, var(--cyan-accent, #00d4ff), #00a8cc);
    color: #001a20; padding: 8px 16px; border-radius: 8px;
    font-weight: 800; font-size: 13px; letter-spacing: 0.3px;
    text-decoration: none; flex-shrink: 0;
    box-shadow: 0 4px 12px rgba(0,212,255,0.30);
    transition: all 0.2s ease;
  }
  .home-comunidad-strip .hcs-cta:hover {
    transform: translateY(-1px);
    box-shadow: 0 6px 18px rgba(0,212,255,0.45);
    filter: brightness(1.08);
  }
  @media (max-width: 600px) {
    .home-comunidad-strip { padding: 12px 14px; flex-direction: column; align-items: flex-start; }
    .home-comunidad-strip .hcs-cta { width: 100%; justify-content: center; }
  }

  /* B9 (2026-05-07): eyebrow de sección entre hero y grid — guía la vista
     y rompe el "muro de cards" diagnosticado por revisor externo. */
  .news-section-eyebrow {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 15px;
    letter-spacing: 2px;
    color: var(--cyan-accent, #00d4ff);
    text-transform: uppercase;
    /* F8 (2026-05-08): margin-top reducido para que no quede hueco grande tras el hero. */
    margin: var(--space-3) 0 var(--space-3);
    display: flex;
    align-items: center;
    gap: 12px;
    text-shadow: 0 0 8px rgba(0,212,255,0.25);
  }
  .news-section-eyebrow::before,
  .news-section-eyebrow::after {
    content: '';
    flex: 1;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(0,212,255,0.25), transparent);
  }
  .news-section-eyebrow::after { background: linear-gradient(90deg, rgba(0,212,255,0.25), transparent); }
  .news-section-eyebrow::before { background: linear-gradient(90deg, transparent, rgba(0,212,255,0.25)); }
  @media (max-width: 600px) {
    .news-section-eyebrow { font-size: 13px; letter-spacing: 1.5px; gap: 8px; margin: var(--space-5) 0 var(--space-3); }
  }

  /* Tarjeta Premium (Card) — refactor 2026-05-07 layout flex-column.
     Antes: el <a class="news-card-link"> envolvía meta + body con height:100%.
     Ahora: meta y top-comment van FUERA del <a> (HTML5-válido, permite buttons),
     así que el article se vuelve flex-column y el <a> hace flex:1 (rellena
     espacio restante). Sin esto, meta queda oculta por overflow:hidden. */
  .news-card {
    display: flex; flex-direction: column;
    background: var(--news-glass-bg); border: 1px solid var(--news-glass-border);
    border-radius: 18px; overflow: hidden; transition: all 0.4s cubic-bezier(0.25, 1, 0.5, 1);
    backdrop-filter: var(--news-glass-blur); -webkit-backdrop-filter: var(--news-glass-blur);
    animation: newsFadeUp 0.5s cubic-bezier(0.25, 1, 0.5, 1) both; position: relative;
    box-shadow: 0 8px 24px rgba(0,0,0,0.2);
  }
  .news-card::before {
    content: ''; position: absolute; inset: 0; pointer-events: none;
    border-radius: 18px; padding: 1px;
    background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, rgba(255,255,255,0) 50%, rgba(0,212,255,0.1) 100%);
    -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
    -webkit-mask-composite: xor; mask-composite: exclude;
  }
  .news-card:hover {
    border-color: rgba(0,212,255,0.5); background: rgba(30, 34, 40, 0.8);
    transform: translateY(-6px); box-shadow: 0 15px 35px var(--news-glow-cyan);
  }
  .news-card-link { display: flex; flex-direction: column; text-decoration: none; color: inherit; flex: 1; }

  .news-card-media { position: relative; aspect-ratio: 16/9; overflow: hidden; background: #000; }
  /* Overlay que funde la imagen con el body de la card → look premium 2026 */
  .news-card-media::after {
    content: ''; position: absolute; inset: 0;
    background: linear-gradient(to top,
      var(--bg-card) 0%,
      rgba(10,12,16,0.55) 40%,
      rgba(10,12,16,0.18) 70%,
      rgba(10,12,16,0) 100%);
    pointer-events: none;
  }
  .news-card-media img {
    width: 100%; height: 100%; object-fit: cover;
    transition: transform 0.6s cubic-bezier(0.25, 1, 0.5, 1), filter 0.4s ease;
    filter: brightness(0.92) saturate(1.05);
  }
  .news-card:hover .news-card-media img { transform: scale(1.08); filter: brightness(1.05) saturate(1.12); }
  /* Hover sensorial — eleva la card con sombra más profunda + tinte cyan sutil */
  .news-card { transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease; }
  .news-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 18px 44px rgba(0,0,0,0.55), 0 0 22px rgba(0,212,255,0.10);
    border-color: rgba(0,212,255,0.20);
  }
  
  .news-card-placeholder {
    width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, #111 0%, #222 100%);
    font-family: 'Bebas Neue', sans-serif; color: var(--text-muted); letter-spacing: 2px;
  }

  /* Badges encuesta/pulso movidos al meta del body (refactor 2026-04-30 — antes
     saturaban la cabecera de la imagen en móvil con 3 elementos absolutos). Los
     estilos inline viven ahora en .news-card-meta-flag. */

  /* Tag de categoría — pill con icono + texto, fondo tintado y glow sutil */
  .news-card-cat {
    position: absolute; top: 12px; left: 12px; z-index: 2;
    display: inline-flex; align-items: center; gap: 6px;
    background: rgba(0,0,0,0.6);
    backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
    color: #fff; font-size: 10px; font-weight: 800; letter-spacing: 1.5px;
    text-transform: uppercase;
    padding: 5px 11px 5px 8px;
    border-radius: 999px;
    border: 1px solid rgba(255,255,255,0.12);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35);
    transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
  }
  .news-card-cat-icon {
    display: inline-flex; align-items: center; justify-content: center;
    line-height: 1;
    filter: drop-shadow(0 1px 2px rgba(0,0,0,0.5));
  }
  .news-card-cat-icon svg { width: 12px; height: 12px; }
  .news-card-cat-label { line-height: 1; }

  /* Tints + glows por categoría — fondo con tinte del color, no solo borde.
     game-pass = verde Game Pass (institucional servicio).
     xbox      = azul Xbox (institucional marca consola). Antes ambos verde → confusión. */
  .news-cat-game-pass {
    color: #aaffae;
    background: linear-gradient(135deg, rgba(0,212,255,0.32), rgba(0,212,255,0.08));
    border-color: rgba(0,212,255,0.55);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35), 0 0 14px rgba(0,212,255,0.18);
  }
  .news-cat-xbox {
    color: #9ec1ff;
    background: linear-gradient(135deg, rgba(16,124,247,0.32), rgba(16,124,247,0.08));
    border-color: rgba(16,124,247,0.55);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35), 0 0 14px rgba(16,124,247,0.20);
  }
  .news-cat-lanzamientos {
    color: #ffd07a;
    background: linear-gradient(135deg, rgba(243,156,18,0.32), rgba(243,156,18,0.08));
    border-color: rgba(243,156,18,0.55);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35), 0 0 14px rgba(243,156,18,0.20);
  }
  .news-cat-rumores {
    color: #ffa39d;
    background: linear-gradient(135deg, rgba(231,76,60,0.32), rgba(231,76,60,0.08));
    border-color: rgba(231,76,60,0.55);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35), 0 0 14px rgba(231,76,60,0.20);
  }
  .news-cat-ofertas {
    color: #ffc78a;
    background: linear-gradient(135deg, rgba(255,153,0,0.34), rgba(255,153,0,0.08));
    border-color: rgba(255,153,0,0.6);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35), 0 0 14px rgba(255,153,0,0.22);
  }
  .news-cat-comunidad {
    color: #b3eaff;
    background: linear-gradient(135deg, rgba(0,212,255,0.30), rgba(0,212,255,0.08));
    border-color: rgba(0,212,255,0.5);
    box-shadow: 0 4px 12px rgba(0,0,0,0.35), 0 0 14px rgba(0,212,255,0.18);
  }

  /* Hover: el tag se eleva ligeramente y el glow se intensifica */
  .news-card:hover .news-card-cat,
  .news-card-link:hover .news-card-cat {
    transform: translateY(-1px);
  }
  .news-card:hover .news-cat-game-pass,
  .news-card-link:hover .news-cat-game-pass    { box-shadow: 0 6px 16px rgba(0,0,0,0.4), 0 0 22px rgba(0,212,255,0.45); }
  .news-card:hover .news-cat-xbox,
  .news-card-link:hover .news-cat-xbox         { box-shadow: 0 6px 16px rgba(0,0,0,0.4), 0 0 22px rgba(16,124,247,0.45); }
  .news-card:hover .news-cat-lanzamientos,
  .news-card-link:hover .news-cat-lanzamientos { box-shadow: 0 6px 16px rgba(0,0,0,0.4), 0 0 22px rgba(243,156,18,0.45); }
  .news-card:hover .news-cat-rumores,
  .news-card-link:hover .news-cat-rumores      { box-shadow: 0 6px 16px rgba(0,0,0,0.4), 0 0 22px rgba(231,76,60,0.45); }
  .news-card:hover .news-cat-ofertas,
  .news-card-link:hover .news-cat-ofertas      { box-shadow: 0 6px 16px rgba(0,0,0,0.4), 0 0 22px rgba(255,153,0,0.50); }
  .news-card:hover .news-cat-comunidad,
  .news-card-link:hover .news-cat-comunidad    { box-shadow: 0 6px 16px rgba(0,0,0,0.4), 0 0 22px rgba(0,212,255,0.42); }

  .news-card-body { 
    padding: 0 var(--space-4) var(--space-4); display: flex; flex-direction: column; gap: 10px; 
    flex-grow: 1; position: relative; z-index: 2; margin-top: -20px;
  }
  .news-card-title {
    font-family: system-ui, -apple-system, sans-serif;
    /* B9 (2026-05-07): tipografía responsive — escala fluida en mobile sin requerir
       media queries, evita títulos largos rebasando 3 líneas. min 15px / max 18px. */
    font-size: clamp(15px, 3.8vw, 18px); font-weight: 700;
    line-height: 1.35; color: #fff; text-shadow: 0 2px 4px rgba(0,0,0,0.8);
    display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
    word-break: break-word;
  }
  .news-card:hover .news-card-title { color: var(--cyan-accent); }
  
  .news-card-excerpt { 
    font-family: system-ui, -apple-system, sans-serif; font-size: 14px; color: var(--text-secondary); 
    line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; 
  }
  /* Autor de la noticia — avatar + nombre + pill EDITOR + tiempo relativo */
  .news-card-author {
    display: flex; align-items: center; gap: 10px;
    margin-bottom: 12px;
    font-size: 12px; color: var(--text-muted, #888);
  }
  /* Avatar autor — borde cyan brand + glow (no verde Xbox) */
  .news-card-author-avatar {
    width: 32px; height: 32px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--cyan-accent, #00d4ff);
    box-shadow: 0 0 12px rgba(0, 212, 255, 0.45);
    flex-shrink: 0;
    transition: box-shadow 0.25s ease;
  }
  .news-card:hover .news-card-author-avatar {
    box-shadow: 0 0 18px rgba(0, 212, 255, 0.7);
  }
  /* Fallback letra cuando no hay imagen — gradient cyan con glow */
  .news-card-author-avatar-letter {
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, rgba(0, 212, 255, 0.20), rgba(0, 212, 255, 0.05));
    color: #fff;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 16px; font-weight: 700; letter-spacing: 1px;
    line-height: 1;
    text-shadow: 0 0 10px rgba(0, 212, 255, 0.6);
  }
  /* F5 (2026-05-08): info-block flex 1 con min-width 0 → ya no salta el "·" suelto
     ni se descuelga el score-pulsos cuando el ancho aprieta. Sin span literal de
     separador: usamos pseudo-element ::before en .news-card-author-time. */
  .news-card-author-info {
    display: flex; align-items: center; gap: 6px;
    flex: 1; min-width: 0;
    line-height: 1.3;
    flex-wrap: wrap;
  }
  .news-card-author-info strong {
    color: #fff; font-weight: 700;
    font-size: 13px;
  }
  /* Pill EDITOR — colores de marca cyan + brillo blanco (no verde Xbox) */
  .news-card-author-rank {
    background: rgba(0, 212, 255, 0.12);
    border: 1px solid rgba(0, 212, 255, 0.45);
    color: #fff;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 10px; letter-spacing: 1.2px;
    font-weight: 700;
    padding: 2px 8px;
    border-radius: 4px;
    text-transform: uppercase;
    text-shadow: 0 0 10px rgba(0, 212, 255, 0.6);
  }
  .news-card-author-time {
    color: var(--text-muted, #888); font-size: 11px;
    display: inline-flex; align-items: center;
  }
  /* Separador "·" como pseudo-element — desaparece limpio en wrap, no queda colgado. */
  .news-card-author-time::before {
    content: '·';
    color: var(--text-low, #555);
    margin-right: 6px;
    font-weight: 600;
  }

  /* news-card-author es flex-row: avatar + info + (score Pulsos a la derecha) */
  .news-card-author { align-items: center; }

  /* Score de Pulsos en el header del card body — display only (no interactivo).
     Se sincroniza con el button del footer vía pulso.js (selector data-pulso-display). */
  .news-card-pulsos-score {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    color: var(--cyan-accent, #00d4ff);
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.3px;
    flex-shrink: 0;
    line-height: 1;
  }
  .news-card-pulsos-score svg {
    opacity: 0.85;
    filter: drop-shadow(0 0 4px rgba(0, 212, 255, 0.35));
  }
  .pulsos-score-label {
    color: var(--text-muted, #888);
    font-weight: 600;
  }
  @media (max-width: 600px) {
    .pulsos-score-label { display: none; }
  }

  /* En hero: avatar más grande para acompañar al título XL + más respiración */
  .news-card-hero .news-card-author {
    margin-top: 6px;
    margin-bottom: 16px;
    gap: 12px;
  }
  .news-card-hero .news-card-author-avatar {
    width: 40px; height: 40px;
    border-width: 2.5px;
  }
  .news-card-hero .news-card-author-avatar-letter { font-size: 18px; }
  .news-card-hero .news-card-author-info strong { font-size: 15px; }

  /* Top comment preview dentro de la card (proof social — qué dice la comunidad) */
  .news-card-comment-preview {
    display: flex; gap: 10px; align-items: flex-start;
    padding: 10px 12px; margin-bottom: 12px;
    background: rgba(0,212,255,0.04);
    border-left: 3px solid rgba(0,212,255,0.45);
    border-radius: 0 8px 8px 0;
  }
  .ncp-avatar {
    width: 28px; height: 28px; border-radius: 50%;
    object-fit: cover; flex-shrink: 0;
    box-shadow: 0 0 0 1px rgba(255,255,255,0.08);
  }
  .ncp-avatar-letter {
    display: flex; align-items: center; justify-content: center;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 13px; font-weight: 700; color: #fff; letter-spacing: 1px;
  }
  .ncp-text { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.35; }
  .ncp-line { display: flex; gap: 6px; align-items: baseline; flex-wrap: wrap; font-size: 11px; }
  .ncp-line strong { color: #fff; font-weight: 700; font-size: 12px; }
  .ncp-level {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 11px; font-weight: 800; letter-spacing: 0.5px;
  }
  .ncp-up {
    color: var(--xbox-green-light, #00d4ff); font-weight: 800;
    font-size: 11px;
  }
  .ncp-quote {
    color: var(--text-secondary, #ccc);
    font-size: 12px; line-height: 1.45;
    overflow: hidden; text-overflow: ellipsis;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  }

  /* Meta bar como ACTION FOOTER (refactor 2026-05-08 estilo mockup Sergi):
     solo 2 acciones — "X Respuestas" link a comentarios + "Dar Pulso" button.
     Sin contador de Pulsos (movido al header del body). Border-top sutil
     separa el texto editorial del bloque de acciones de comunidad. */
  .news-card-meta {
    font-size: 13px; color: var(--text-muted); display: flex; gap: 12px;
    padding: 14px var(--space-4) var(--space-4);
    font-weight: 600; letter-spacing: 0.3px; align-items: center;
    justify-content: space-between; flex-wrap: nowrap;
    border-top: 1px solid rgba(255,255,255,0.04);
    margin-top: auto; /* 2026-05-16: footer pegado abajo + 1 sola línea (label izq / botón der). */
  }
  .news-card-meta > :first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .news-card-meta > span,
  .news-card-meta > a,
  .news-card-meta > button { display: inline-flex; align-items: center; gap: 6px; line-height: 1; }
  /* Iconos SVG inline en meta — minimalistas, currentColor */
  .news-card-meta .meta-icon {
    flex-shrink: 0;
    opacity: 0.75;
    margin-top: -1px; /* corrección óptica para alinear con texto */
  }
  .news-card-meta > span:hover .meta-icon { opacity: 1; }
  /* Comentarios link en meta — minimalista (sin pill/border).
     F4 (2026-05-08): hover FORZADO a cyan con !important — sin él hereda
     `a { color: var(--xbox-green-light) }` global de page-head.php → vira a verde
     Xbox y Sergi insiste: "no somos Xbox, somos comunidad Game Pass, color cyan". */
  .news-card-comments {
    color: var(--text-muted, #666);
    text-decoration: none;
    transition: color 0.2s ease;
  }
  .news-card-comments:hover { color: var(--cyan-accent, #00d4ff) !important; }
  .news-card-comments:hover .meta-icon { opacity: 1; }
  .news-card-comments.is-active { color: var(--cyan-accent, #00d4ff); }
  .news-card-comments.is-active .meta-icon { opacity: 1; }

  /* ─── F3.3: Franja TOP COMMENT (≥3 pulsos) ────────────────────────────
     Render fuera del <a> principal (es link independiente al ancla del comentario).
     Borde-left cyan + icono ⚡ + avatar pequeño + nick + pulsos + quote 1 línea.
     Solo aparece en cards con tracción real, así no hay franjas mock. */
  .news-card-top-comment {
    display: flex; gap: 10px; align-items: center;
    margin: 0 var(--space-4) var(--space-3);
    padding: 10px 12px;
    background: linear-gradient(135deg, rgba(0,212,255,0.06), rgba(0,212,255,0.02));
    border: 1px solid rgba(0,212,255,0.18);
    border-left: 3px solid rgba(0,212,255,0.55);
    border-radius: 0 8px 8px 0;
    text-decoration: none; color: inherit;
    transition: all 0.25s ease;
  }
  .news-card-top-comment:hover {
    border-color: rgba(0,212,255,0.4);
    border-left-color: rgba(0,212,255,0.9);
    background: linear-gradient(135deg, rgba(0,212,255,0.10), rgba(0,212,255,0.04));
    transform: translateX(2px);
  }
  .nctc-icon {
    flex-shrink: 0; color: var(--cyan-accent, #00d4ff);
    filter: drop-shadow(0 0 4px rgba(0,212,255,0.5));
    display: inline-flex;
  }
  .nctc-avatar {
    width: 28px; height: 28px; border-radius: 50%;
    object-fit: cover; flex-shrink: 0;
    box-shadow: 0 0 0 1px rgba(255,255,255,0.08);
  }
  .nctc-avatar-letter {
    display: flex; align-items: center; justify-content: center;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 13px; font-weight: 700; color: #fff; letter-spacing: 1px;
  }
  .nctc-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; line-height: 1.35; }
  .nctc-line { display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; font-size: 11px; }
  .nctc-nick { color: #fff; font-weight: 700; font-size: 12px; }
  .nctc-pulsos {
    color: var(--cyan-accent, #00d4ff);
    font-weight: 800; font-size: 11px; letter-spacing: 0.3px;
  }
  .nctc-quote {
    color: var(--text-secondary, #ccc);
    font-size: 12px; line-height: 1.45;
    overflow: hidden; text-overflow: ellipsis;
    display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical;
  }

  /* BOOM: variante "X dieron Pulso" cuando no hay top_comment. Misma franja,
     sustituye avatar único + cita por stack apilado de avatares. */
  .news-card-top-pulsadores .nctc-pulsadores-stack {
    display: inline-flex; align-items: center; flex-shrink: 0;
  }
  .news-card-top-pulsadores .nctc-pulsador-avatar {
    width: 24px; height: 24px;
    border-radius: 50%;
    object-fit: cover;
    margin-left: -8px;
    border: 2px solid var(--bg-card, #0a0e17);
    background: #1a1f2e;
    transition: transform 0.15s ease;
  }
  .news-card-top-pulsadores .nctc-pulsador-avatar:first-child { margin-left: 0; }
  .news-card-top-pulsadores .nctc-pulsador-avatar:hover { transform: translateY(-2px) scale(1.08); z-index: 2; }
  .news-card-top-pulsadores .nctc-pulsador-letter {
    display: inline-flex; align-items: center; justify-content: center;
    font-weight: 800; font-size: 11px; color: #fff;
    background: linear-gradient(135deg, var(--cyan-accent, #00d4ff), #0a4f5e);
  }
  .news-card-top-pulsadores .nctc-pulsador-extra {
    display: inline-flex; align-items: center; justify-content: center;
    height: 24px; min-width: 28px; padding: 0 6px;
    margin-left: -4px;
    border-radius: 12px;
    background: rgba(0,212,255,0.12);
    color: var(--cyan-accent, #00d4ff);
    font-size: 10px; font-weight: 800;
    border: 2px solid var(--bg-card, #0a0e17);
  }
  .news-card-top-pulsadores .nctc-pulsadores-text {
    flex-direction: row; align-items: baseline; gap: 4px;
    font-size: 12px;
  }
  .news-card-top-pulsadores .nctc-pulsadores-text strong {
    color: var(--cyan-accent, #00d4ff);
    font-weight: 800;
    font-size: 13px;
  }

  /* ─── F3.2 v2 (2026-05-08): Pulso interactivo desde card — minimalista.
     Refactor tras feedback Sergi: el pill/box compite con el card. Ahora estilo
     "verbo de acción": icono + número + label "Pulso". Sin border, sin bg.
     Solo color en hover (cyan) y estado is-reacted (cyan filled). */
  .news-card-pulso-btn {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 0;
    background: none;
    border: none;
    cursor: pointer;
    font: inherit;
    color: var(--text-muted, #666);
    font-size: 12px; font-weight: 600;
    letter-spacing: 0.3px; line-height: 1;
    transition: color 0.2s ease;
  }
  .news-card-pulso-btn:hover:not(:disabled) { color: var(--cyan-accent, #00d4ff); }
  .news-card-pulso-btn .hud-icon {
    opacity: 0.75;
    transition: opacity 0.2s ease, transform 0.2s ease;
    flex-shrink: 0;
  }
  .news-card-pulso-btn:hover:not(:disabled) .hud-icon { opacity: 1; transform: scale(1.12); }
  .news-card-pulso-btn.is-reacted {
    color: #00f3ff;
    font-weight: 700;
    cursor: default;
  }
  .news-card-pulso-btn.is-reacted .hud-icon {
    opacity: 1;
    fill: rgba(0, 212, 255, 0.25);
  }
  .news-card-pulso-btn.is-locked { opacity: 0.5; cursor: not-allowed; }
  .news-card-pulso-btn:disabled { cursor: default; }
  /* Flash al reaccionar — consistente con el HUD de noticia */
  @keyframes news-card-pulse-flash {
    0%   { transform: scale(1); }
    40%  { transform: scale(1.4); filter: drop-shadow(0 0 8px rgba(0,243,255,0.8)); }
    100% { transform: scale(1); }
  }
  .news-card-pulso-btn .hud-icon.flash-anim {
    animation: news-card-pulse-flash 0.5s cubic-bezier(0.25, 1, 0.5, 1);
  }

  /* Flags inline (encuesta, pulso) — pills compactos con SVG, sin emojis */
  .news-card-meta-flag {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: 10px; font-weight: 800; letter-spacing: 0.6px;
    text-transform: uppercase;
    padding: 3px 9px;
    border-radius: 999px;
    border: 1px solid transparent;
    line-height: 1;
  }
  .news-card-meta-flag svg { flex-shrink: 0; }
  /* Pill EDITORIAL — tono dorado/ámbar para distinguir del verde Xbox */
  .news-card-meta-flag.is-editorial {
    color: #ffd07a;
    background: linear-gradient(135deg, rgba(255,180,90,0.18), rgba(255,180,90,0.06));
    border-color: rgba(255,180,90,0.45);
    box-shadow: 0 0 12px rgba(255,180,90,0.18);
  }
  /* Pill HILO CALIENTE — rojo/naranja con pulse glow para llamar atención */
  .news-card-meta-flag.is-hot {
    color: #ff6b6b;
    background: linear-gradient(135deg, rgba(255, 107, 107, 0.18), rgba(255, 107, 107, 0.04));
    border-color: rgba(255, 107, 107, 0.45);
    box-shadow: 0 0 14px rgba(255, 107, 107, 0.25);
    animation: hot-pulse 2.4s ease-in-out infinite;
  }
  @keyframes hot-pulse {
    0%, 100% { box-shadow: 0 0 14px rgba(255, 107, 107, 0.20); }
    50%      { box-shadow: 0 0 20px rgba(255, 107, 107, 0.45); }
  }
  /* En cards small: solo icono, sin texto. Pill cuadrado. */
  .news-card-small .news-card-meta-flag-label { display: none; }
  .news-card-small .news-card-meta-flag { padding: 4px 6px; gap: 0; }
  /* En móviles estrechos: igual que small */
  @media (max-width: 480px) {
    .news-card-meta-flag-label { display: none; }
    .news-card-meta-flag { padding: 4px 6px; gap: 0; }
    .news-card-meta { gap: 10px; }
  }

  /* CARD — hero */
  /* ============================================================
     Encuesta inline GRANDE en hero card (Sprint 1.7)
     "El Pulso de la Comunidad" — estilo mockup Nexus Feed.
     ============================================================ */
  .np-hero {
    background: linear-gradient(135deg, rgba(0,212,255,0.06), rgba(0,0,0,0.20));
    border: 1px solid rgba(0,212,255,0.18);
    border-radius: 14px;
    padding: 14px 16px 16px;
    margin: 14px 0 16px;
  }
  .np-hero-head {
    display: flex; justify-content: space-between; align-items: center;
    margin-bottom: 10px;
  }
  .np-hero-eyebrow {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 13px; letter-spacing: 1.5px;
    color: var(--cyan-accent, #00d4ff);
    text-shadow: 0 0 8px rgba(0,212,255,0.35);
    display: inline-flex; align-items: center; gap: 6px;
  }
  .np-hero-eyebrow svg { flex-shrink: 0; }
  .np-hero-total {
    font-size: 11px; font-weight: 700; color: var(--text-muted);
    letter-spacing: 0.5px;
  }
  .np-hero-question {
    font-family: 'Inter', system-ui, sans-serif;
    font-size: 15px; line-height: 1.45;
    font-weight: 700; color: #fff;
    margin: 0 0 12px;
  }
  .np-hero-options { display: flex; flex-direction: column; gap: 8px; }
  /* El atributo HTML 'hidden' debe ganar sobre display:flex (CSS prioriza el
     bloque por defecto si no hacemos esta override explícita) */
  .np-hero-options[hidden],
  .np-hero-results[hidden] { display: none !important; }
  .np-hero-btn {
    width: 100%; cursor: pointer;
    background: rgba(255,255,255,0.04);
    border: 1px solid rgba(255,255,255,0.10);
    color: #fff;
    padding: 12px 14px;
    border-radius: 10px;
    font-size: 14px; font-weight: 600;
    text-align: left;
    display: flex; align-items: center; gap: 10px;
    transition: background 0.2s, border-color 0.2s, transform 0.1s;
    font-family: inherit;
  }
  .np-hero-btn:hover {
    background: rgba(0,212,255,0.10);
    border-color: rgba(0,212,255,0.40);
    transform: translateY(-1px);
  }
  .np-hero-btn:active { transform: translateY(0); }
  .np-hero-btn:disabled { opacity: 0.5; cursor: wait; }
  .np-hero-btn-emoji { font-size: 16px; line-height: 1; }
  .np-hero-btn-label { flex: 1; }

  .np-hero-results { display: flex; flex-direction: column; gap: 8px; }
  .np-hero-result {
    position: relative;
    display: flex; align-items: center;
    gap: 10px;
    padding: 10px 14px;
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 10px;
    overflow: hidden;
    font-size: 13px;
  }
  .np-hero-result-fill {
    position: absolute; top: 0; left: 0; bottom: 0;
    width: 0;
    background: linear-gradient(90deg, rgba(0,212,255,0.30), rgba(0,212,255,0.10));
    transition: width 0.9s cubic-bezier(0.25, 1, 0.5, 1);
  }
  .np-hero-result.is-winner .np-hero-result-fill {
    background: linear-gradient(90deg, rgba(0,212,255,0.40), rgba(0,212,255,0.15));
  }
  .np-hero-result.is-winner {
    border-color: rgba(0,212,255,0.50);
    box-shadow: inset 0 0 0 1px rgba(0,212,255,0.30), 0 0 18px rgba(0,212,255,0.10);
  }
  .np-hero-result.is-mine {
    box-shadow: inset 0 0 0 2px rgba(0,212,255,0.55);
  }
  .np-hero-result-text {
    position: relative; z-index: 2;
    color: #fff; font-weight: 600;
    display: flex; gap: 8px; align-items: center;
    flex: 1;
    min-width: 0;
    /* 2026-06-04: Sergi no quiere truncado con "..." — wrap a 2 líneas máx. */
    white-space: normal;
    line-height: 1.3;
    word-break: break-word;
    overflow-wrap: anywhere;
  }
  .np-hero-result-mine {
    background: rgba(0,212,255,0.20);
    color: var(--cyan-accent, #00d4ff);
    font-size: 10px; font-weight: 800;
    padding: 1px 7px; border-radius: 999px;
    text-transform: uppercase; letter-spacing: 0.5px;
  }
  .np-hero-result-pct {
    position: relative; z-index: 2;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 18px; letter-spacing: 1px;
    color: #fff; flex-shrink: 0;
  }

  /* Voters: stack horizontal de avatares de top votantes — variante cyan
     para encuesta hero. Se posicionan entre el texto y el % para mantener
     el layout flex (text - voters - pct). */
  .np-hero-result-voters {
    position: relative; z-index: 2;
    flex-shrink: 0;
    display: inline-flex; align-items: center;
    margin-right: 4px;
    /* margin-left: auto eliminado — el text con flex:1 ya empuja voters a la derecha,
       evita que se solape con TU VOTO badge cuando la opción es ganadora. */
  }
  .np-hero-result-voters:empty { display: none; }
  .np-hero-voter, .np-hero-voter-more {
    width: 22px; height: 22px;
    border-radius: 50%;
    border: 2px solid #131418;
    box-sizing: border-box;
    margin-left: -7px;
    flex-shrink: 0;
    transition: transform 0.18s ease;
  }
  .np-hero-voter:first-child, .np-hero-voter-letter:first-child { margin-left: 0; }
  .np-hero-voter {
    object-fit: cover;
    background: rgba(255,255,255,0.05);
    display: block;
  }
  .np-hero-voter:hover { transform: translateY(-2px) scale(1.08); z-index: 5; }
  .np-hero-voter-letter {
    display: inline-flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, rgba(0,212,255,0.40), rgba(0,212,255,0.25));
    color: #fff;
    font-family: 'Inter', sans-serif;
    font-size: 10px; font-weight: 800;
    text-transform: uppercase;
  }
  .np-hero-voter-more {
    width: auto; height: 22px;
    padding: 0 7px;
    background: rgba(0,212,255,0.20);
    color: var(--cyan-accent, #00d4ff);
    border-color: #131418;
    font-family: 'Inter', sans-serif;
    font-size: 10px; font-weight: 700;
    display: inline-flex; align-items: center; justify-content: center;
    border-radius: 999px;
    line-height: 1;
  }
  /* En la opción ganadora los avatares ganan un borde verde sutil */
  .np-hero-result.is-winner .np-hero-voter,
  .np-hero-result.is-winner .np-hero-voter-letter {
    border-color: rgba(0,212,255,0.65);
  }

  /* Mobile: ocultar avatares para no saturar (mismo criterio que news-poll) */
  @media (max-width: 540px) {
    .np-hero-result-voters { display: none; }
  }

  .np-hero-locked {
    margin-top: 10px;
    font-size: 11px;
    color: var(--text-muted);
    display: flex; align-items: center; justify-content: center; gap: 6px;
  }
  .np-hero-locked svg { flex-shrink: 0; opacity: 0.85; }
  .np-hero-locked a { color: var(--cyan-accent, #00d4ff); font-weight: 700; }

  /* Wrapper de la encuesta hero — vive FUERA del <a class="news-card-link">
     (evita <a> anidados). Mantiene padding lateral consistente con el body.
     F6 (2026-05-08): borde-top sutil separa visualmente la encuesta del body
     y refuerza la jerarquía "imagen → texto → encuesta" vertical. */
  .news-card-poll-wrap {
    padding: var(--space-3) var(--space-5) var(--space-5);
    border-top: 1px solid rgba(255,255,255,0.05);
    margin-top: var(--space-3);
  }
  .news-card-poll-wrap .np-hero { margin: 0; }

  /* Hero card v3 (2026-05-08) — Mockup user.
     - Imagen completa con object-fit: contain + bg dark (Xbox Wire-style).
     - Body separado debajo: título + meta autor/fecha/⚡pulsos.
     - Encuesta SACADA fuera al sidebar widget (hero-encuesta-widget). */
  .news-card-hero {
    display: flex !important; flex-direction: column !important;
    border: 1px solid rgba(0,212,255,0.20);
    box-shadow: 0 12px 40px rgba(0,0,0,0.55), 0 0 32px rgba(0,212,255,0.08);
    height: 100%;
  }
  .news-card-hero .news-card-link {
    display: flex; flex-direction: column;
    height: 100%;
  }
  .news-card-hero:hover {
    border-color: rgba(0,212,255,0.40);
    box-shadow: 0 18px 50px rgba(0,0,0,0.6), 0 0 44px rgba(0,212,255,0.18);
  }
  /* Hero v8 — estructura clásica del mosaic:
     - Imagen cover panorámica (16/9), título superpuesto con gradient bottom.
     - Body con margin-top negativo para overlap del texto sobre imagen.
     - Encuesta inline al final con avatares "TU VOTO". */
  .news-card-hero .news-card-media {
    aspect-ratio: 16/9;
    background: var(--bg-card, #0a0e17);
    display: block;
    position: relative;
    overflow: hidden;
    max-height: none; min-height: 0;
    padding: 0;
  }
  .news-card-hero .news-card-media img {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    object-position: center;
    display: block;
  }
  /* Gradient bottom para legibilidad del título superpuesto */
  .news-card-hero .news-card-media::after {
    content: ''; display: block;
    position: absolute; inset: 0;
    background: linear-gradient(to top,
      var(--bg-card, #0a0e17) 0%,
      rgba(10,12,16,0.78) 28%,
      rgba(10,12,16,0.32) 60%,
      rgba(10,12,16,0) 100%);
    pointer-events: none;
  }
  .news-card-hero .news-card-body {
    padding: 0 var(--space-5) var(--space-4);
    margin-top: -56px;
    gap: 12px;
    position: relative; z-index: 2;
  }
  .news-card-hero .news-card-title {
    font-family: 'Bebas Neue', 'Inter', sans-serif;
    font-size: clamp(24px, 2.4vw, 38px);
    line-height: 1.05;
    letter-spacing: 0.5px;
    margin-bottom: 0;
    color: #fff;
  }
  .news-card-hero .news-card-excerpt { display: none; }
  @media (min-width: 1100px) {
    .news-card-hero .news-card-body { padding: 0 var(--space-6) var(--space-5); }
  }

  /* CARD — small (sidebar hero) — REFACTOR 2026-05-08
     Antes: layout horizontal con imagen 140px a la izquierda y título comprimido
     a la derecha (apenas se leía). Sergi: "esto del hero no me gusta como está
     lo de la foto de la noticia, se ve feo. Apenas se ve el titular".
     Ahora: layout VERTICAL como cards normales pero compactas — imagen ancho
     completo arriba (16/9), título y meta debajo. La imagen luce y el título respira. */
  .news-card-small .news-card-link {
    flex-direction: column;
    min-height: 0;
  }
  .news-card-small .news-card-media {
    aspect-ratio: 16/9;
    width: 100%;
    height: auto;
    flex-shrink: 0;
  }
  .news-card-small .news-card-media img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }
  /* Overlay coherente con cards normales (gradient bottom→top) */
  .news-card-small .news-card-media::after {
    background: linear-gradient(to top,
      var(--bg-card) 0%,
      rgba(10,12,16,0.50) 35%,
      rgba(10,12,16,0) 70%);
  }
  .news-card-small .news-card-cat { font-size: 9px; padding: 4px 8px; top: 8px; left: 8px; }
  .news-card-small .news-card-body {
    padding: 0 var(--space-3) var(--space-3);
    margin-top: -16px;
    gap: 6px;
  }
  .news-card-small .news-card-title { font-size: 14px; -webkit-line-clamp: 2; line-height: 1.35; }
  .news-card-small .news-card-excerpt { display: none; }
  .news-card-small .news-card-author { display: none; }
  /* Footer compacto (Respuestas + Pulso) sin border-top fuerte y padding reducido */
  .news-card-small .news-card-meta {
    padding: 8px var(--space-3) var(--space-3);
    gap: 14px;
    font-size: 11px;
  }

  /* CARD — SECUNDARIA (mosaic moderno 2026-05-08)
     Compacta, sin meta, sin autor, sin excerpt. Solo imagen + cat pill + título.
     Vive dentro de .news-hero-secundarias y se estira a 1fr de fila. */
  /* CARD SECUNDARIA v8 fix — layout HORIZONTAL en desktop columna estrecha,
     VERTICAL en tablet (3-col) y mobile (stack). Sin avatar, sin EDITOR rank
     (sobran en formato compacto), meta footer en línea inline iconos+números. */
  .news-card-secundaria {
    position: relative;
    display: flex; flex-direction: column;
    background: linear-gradient(180deg, rgba(22,24,30,0.96) 0%, rgba(14,16,20,0.98) 100%);
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 12px;
    overflow: hidden;
    transition: transform 0.25s cubic-bezier(0.25,1,0.5,1),
                border-color 0.25s ease,
                box-shadow 0.25s ease;
  }
  .news-card-secundaria:hover {
    transform: translateY(-2px);
    border-color: rgba(0,212,255,0.30);
    box-shadow: 0 8px 24px rgba(0,212,255,0.12), 0 4px 14px rgba(0,0,0,0.30);
  }
  .news-card-secundaria .news-card-link {
    display: flex; flex-direction: column;
    text-decoration: none; color: inherit;
  }
  .news-card-secundaria .news-card-media {
    flex: 0 0 auto;
    aspect-ratio: 16 / 9;
    width: 100%;
    position: relative;
    overflow: hidden;
  }
  .news-card-secundaria .news-card-media img {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    transition: transform 0.5s cubic-bezier(0.25,1,0.5,1);
  }
  .news-card-secundaria:hover .news-card-media img { transform: scale(1.04); }
  .news-card-secundaria .news-card-media::after { display: none; }
  .news-card-secundaria .news-card-cat {
    top: 8px; left: 8px;
    font-size: 9px; padding: 3px 7px;
    backdrop-filter: blur(8px);
    z-index: 2;
  }
  .news-card-secundaria .news-card-body {
    padding: 10px 12px 4px;
    display: flex; flex-direction: column; gap: 6px;
  }
  .news-card-secundaria .news-card-title {
    font-family: 'Inter', system-ui, sans-serif;
    font-size: 13.5px;
    font-weight: 700;
    line-height: 1.3;
    letter-spacing: -0.01em;
    margin: 0;
    color: var(--text, #f0f0f0);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  /* En secundaria ocultamos: avatar + EDITOR rank + display Pulsos. Solo time inline. */
  .news-card-secundaria .news-card-author {
    margin-bottom: 0;
    font-size: 11px;
    gap: 6px;
  }
  .news-card-secundaria .news-card-author-avatar { display: none; }
  .news-card-secundaria .news-card-author-info { gap: 0; }
  .news-card-secundaria .news-card-author-info strong { display: none; }
  .news-card-secundaria .news-card-author-rank { display: none; }
  .news-card-secundaria .news-card-author-time { font-size: 11px; color: var(--text-muted, #888); }
  .news-card-secundaria .news-card-author-time::before { display: none; }
  .news-card-secundaria .news-card-pulsos-score { display: none; }
  /* Meta footer compacto: solo iconos + números, sin labels largos */
  .news-card-secundaria .news-card-meta {
    padding: 6px 12px 10px;
    gap: 8px;
    font-size: 11px;
    border-top: none;
    align-items: center;
  }
  .news-card-secundaria .news-card-comments span { font-size: 11px; }
  .news-card-secundaria .news-card-pulso-btn {
    padding: 4px 8px;
    font-size: 11px;
    gap: 4px;
  }
  .news-card-secundaria .news-card-pulso-btn .pulso-label { font-size: 11px; }

  /* Tablet/desktop con 3-col debajo del hero (700-959px): cards más anchas */
  @media (min-width: 700px) and (max-width: 959px) {
    .news-card-secundaria .news-card-title { font-size: 14px; -webkit-line-clamp: 3; }
  }
  @media (min-width: 1100px) {
    .news-card-secundaria .news-card-title { font-size: 14px; }
  }

  /* ─── Encuesta compacta EMBEBIDA en hero card (v6) ───────────────
     Vive en el hueco final tras meta. Sin fondo propio (hereda del
     card), separator top sutil, padding mínimo. */
  .news-card-hero-poll {
    padding: var(--space-3) var(--space-4) var(--space-4);
    border-top: 1px solid rgba(255,255,255,0.06);
    margin: 0;
  }
  .news-card-hero-poll .hero-poll-widget,
  .hero-poll-widget.is-compact {
    background: transparent;
    border: none;
    border-radius: 0;
    padding: 0;
  }
  .news-card-hero-poll .hero-poll-widget:hover,
  .hero-poll-widget.is-compact:hover {
    border-color: transparent;
    box-shadow: none;
  }
  /* En modo compact (dentro del hero) reducimos sizes 1-2px para más densidad */
  .hero-poll-widget.is-compact .hero-poll-question {
    font-size: 13px; margin-bottom: 8px;
  }
  .hero-poll-widget.is-compact .hero-poll-options { gap: 6px; }
  .hero-poll-widget.is-compact .hero-poll-option {
    padding: 8px 12px; font-size: 12px;
  }
  .hero-poll-widget.is-compact .hero-poll-pct { font-size: 14px; }
  .hero-poll-widget.is-compact .hero-poll-cta {
    margin-top: 10px; padding: 8px 14px; font-size: 11px;
  }

  /* ─── Fila de 3 destacadas debajo del hero (hero v6) ─────────────
     Mobile: stack 1col (cards full-width legibles).
     Desktop ≥700px: grid 3-col igualadas. */
  .news-hero-secundarias {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--space-3);
    margin-top: var(--space-3);
  }
  @media (min-width: 700px) {
    .news-hero-secundarias { grid-template-columns: repeat(3, 1fr); gap: var(--space-3); }
  }
  /* En el contexto del hero block, las secundarias quedan más bajitas */
  .news-hero-secundarias .news-card-secundaria .news-card-media { aspect-ratio: 16/9; }

  /* (Reglas hero v7 acciones-en-autor-row eliminadas — restaurado meta footer clásico) */

  /* Widget encuesta compacta — espejo del mockup user. Reglas base
     (también aplicables si se reutiliza el widget en otro contexto). */
  .hero-poll-widget {
    background: linear-gradient(180deg, rgba(20,22,26,0.92) 0%, rgba(13,15,18,0.96) 100%);
    border: 1px solid rgba(0,212,255,0.10);
    border-radius: 18px;
    padding: var(--space-4);
    display: flex; flex-direction: column;
    transition: border-color 0.25s ease, box-shadow 0.25s ease;
  }
  .hero-poll-widget:hover {
    border-color: rgba(0,212,255,0.25);
    box-shadow: 0 8px 28px rgba(0,212,255,0.08);
  }
  .hero-widget-title {
    font-family: 'Inter', sans-serif;
    font-size: 12px; font-weight: 800;
    text-transform: uppercase; letter-spacing: 0.12em;
    color: var(--text-secondary, #a0a0a0);
    margin: 0 0 var(--space-3);
    display: flex; align-items: center; gap: 6px;
  }
  .hero-widget-title svg { color: var(--cyan-accent, #00d4ff); flex-shrink: 0; }
  .hero-widget-title span { color: var(--cyan-accent, #00d4ff); }
  .hero-poll-question {
    font-size: 14px; font-weight: 700; line-height: 1.35;
    color: var(--text-primary, #fff);
    margin: 0 0 var(--space-3);
  }
  .hero-poll-options { display: flex; flex-direction: column; gap: 8px; }
  .hero-poll-option {
    position: relative;
    display: flex; align-items: center; justify-content: space-between;
    gap: 8px;
    background: rgba(255,255,255,0.04);
    border: 1px solid transparent;
    border-radius: 8px;
    padding: 10px 12px;
    font-size: 12.5px; font-weight: 600;
    color: var(--text-primary, #fff);
    overflow: hidden;
    transition: border-color 0.25s ease, background 0.25s ease, transform 0.18s ease;
    /* Botón clickable: reset estilos de <button> */
    font-family: inherit; text-align: left; width: 100%;
    cursor: pointer;
  }
  .hero-poll-option:hover:not(:disabled) {
    border-color: rgba(0,212,255,0.20);
    background: rgba(0,212,255,0.05);
    transform: translateX(2px);
  }
  .hero-poll-option:disabled { cursor: progress; opacity: 0.7; }
  .hero-poll-option.is-winner {
    border-color: rgba(0,212,255,0.30);
    background: rgba(0,212,255,0.04);
  }
  .hero-poll-option.is-voted {
    border-color: rgba(0,212,255,0.55);
    background: rgba(0,212,255,0.10);
    box-shadow: 0 0 0 1px rgba(0,212,255,0.25) inset;
  }
  .hero-poll-option.is-voted .hero-poll-text::before {
    content: '✓ ';
    color: var(--cyan-accent, #00d4ff);
    font-weight: 800;
  }
  .hero-poll-bar {
    position: absolute; top: 0; left: 0; height: 100%;
    background: linear-gradient(90deg, rgba(0,212,255,0.20) 0%, rgba(0,212,255,0.06) 100%);
    border-radius: 8px;
    transition: width 0.9s cubic-bezier(0.2, 0.8, 0.2, 1);
    z-index: 0;
  }
  .hero-poll-text, .hero-poll-pct { position: relative; z-index: 1; }
  .hero-poll-text {
    flex: 1; min-width: 0;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .hero-poll-pct {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 16px; letter-spacing: 0.5px;
    color: var(--cyan-accent, #00d4ff);
    flex-shrink: 0;
  }
  .hero-poll-cta {
    display: flex; align-items: center; justify-content: center; gap: 6px;
    margin-top: var(--space-3);
    padding: 10px 16px;
    background: rgba(0,212,255,0.08);
    border: 1px solid rgba(0,212,255,0.30);
    color: #fff;
    text-decoration: none;
    font-size: 12px; font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.1em;
    border-radius: 10px;
    transition: all 0.25s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  }
  .hero-poll-cta:hover {
    background: var(--cyan-accent, #00d4ff);
    color: #001a20;
    transform: translateY(-2px);
    box-shadow: 0 6px 18px rgba(0,212,255,0.35);
  }

  /* Eyebrow temporales (HOY / AYER / día / semana / mes) — estilo cyan
     idéntico al "Lo más reciente" original que le encanta al user.
     Span de toda la fila del grid para que NO rompa el layout 3-col. */
  .news-grid > .news-section-eyebrow,
  .news-grid > .news-section-eyebrow-dia {
    grid-column: 1 / -1;
    margin: var(--space-5) 0 var(--space-2);
  }
  /* Sufijo social del eyebrow (lowercase muted, sin pisar el color cyan del label).
     Bloque OBSOLETO tras revertir feedback user 2026-05-09 — se queda por
     compatibilidad si reactivamos el sufijo en el futuro. */
  .news-section-eyebrow-dia .eyebrow-meta {
    font-style: normal;
    font-size: 10px;
    font-weight: 500;
    color: rgba(255,255,255,0.42) !important;
    letter-spacing: 0.02em !important;
    text-transform: none !important;
    margin-left: 10px;
    padding-left: 10px;
    border-left: 1px solid rgba(255,255,255,0.12);
    font-family: 'Inter', system-ui, sans-serif;
  }
  /* Reset margin del primer eyebrow del grid (estaba fusionado por error). */
  .news-grid > .news-section-eyebrow:first-child,
  .news-grid > .news-section-eyebrow-dia:first-child {
    margin-top: var(--space-2);
  }

  /* ════════════════════════════════════════════════════════════════════════
     HERO "BENTO COMPACT" (2026-05-08, definitivo)
     Bloque AISLADO con clases nuevas. NO toca ni hereda de .news-card-* ni
     ningún CSS legacy del feed. CSS provisto literal por el user.
     ════════════════════════════════════════════════════════════════════════ */
  .hero-compact {
    display: grid;
    grid-template-columns: 1.5fr 1fr;
    gap: 16px;
    max-width: 1400px;
    margin: 0 auto 40px auto;
    /* stretch → ambas columnas igualan altura. Los hijos internos
       (.main-hub, .side-stack) usan flex: column con flex: 1 para
       distribuir el espacio extra de forma natural, sin huecos negros. */
    align-items: stretch;
  }
  .main-hub { height: 100%; }
  .side-stack { height: 100%; }
  .main-hub {
    display: flex;
    flex-direction: column;
    background: #000;
    border-radius: 16px;
    border: 1px solid rgba(255,255,255,0.06);
    overflow: hidden;
  }
  /* main-hub-link es flex column para que main-img-wrap pueda crecer (flex: 1)
     y rellenar el espacio extra cuando la columna der (cards) sea más alta. */
  .main-hub-link {
    display: flex; flex-direction: column;
    flex: 1 1 auto;
    text-decoration: none; color: inherit;
  }
  /* Imagen del hero: 16/9 como base + flex-grow para llenar hueco extra.
     Cuando las 2 cards son más altas, la imagen crece (object-fit cover).
     Sin huecos negros internos, ambas columnas niveladas. */
  .main-img-wrap {
    position: relative; width: 100%;
    aspect-ratio: 16/9;
    min-height: 0;
    flex: 1 1 auto;
    overflow: hidden;
  }
  .main-img-wrap img {
    width: 100%; height: 100%;
    object-fit: cover;
    transition: transform 0.6s cubic-bezier(0.2,0.8,0.2,1);
  }
  .main-hub-link:hover .main-img-wrap img { transform: scale(1.03); }
  .main-gradient {
    position: absolute; inset: 0;
    background: linear-gradient(to top,
      rgba(5,10,18,1) 0%,
      rgba(5,10,18,0.6) 40%,
      transparent 100%);
    pointer-events: none;
  }
  .main-content {
    position: absolute; bottom: 0; left: 0; right: 0;
    padding: 24px; z-index: 2;
  }
  .tag-gp {
    display: inline-block; padding: 4px 8px; border-radius: 4px;
    font-size: 10px; font-weight: 800; letter-spacing: 0.05em;
    text-transform: uppercase;
    background: rgba(0,240,255,0.10); color: #00f0ff;
    border: 1px solid rgba(0,240,255,0.30);
    margin-bottom: 12px;
  }
  .main-title {
    font-family: 'Inter', system-ui, sans-serif;
    font-size: clamp(1.4rem, 2vw, 2rem);
    line-height: 1.15;
    font-weight: 900; letter-spacing: -0.015em;
    color: #fff;
    margin: 0 0 12px 0;
  }
  .main-meta {
    display: flex; align-items: center;
    font-size: 12px; color: rgba(255,255,255,0.55);
  }
  .meta-pulso { color: #00f0ff; margin-left: auto; font-weight: 700; }

  /* BOOM C3: bio popover autor en el hero (hover desktop, focus mobile/teclado).
     Muestra nombre, bio, stats reales (noticias publicadas + año desde). */
  .main-author-pop { position: relative; display: inline-flex; align-items: center; }
  .main-author-pop .map-trigger {
    display: inline-flex; align-items: center; gap: 6px;
    cursor: pointer;
    color: rgba(255,255,255,0.85);
    transition: color 0.2s ease;
  }
  .main-author-pop .map-trigger:hover,
  .main-author-pop .map-trigger:focus { color: #fff; outline: none; }
  .main-author-pop .map-trigger strong { font-weight: 700; color: #fff; }
  .main-author-pop .map-tag {
    font-size: 9px; font-weight: 800; letter-spacing: 0.1em;
    padding: 2px 6px; border-radius: 4px;
    background: rgba(0,212,255,0.15);
    color: #00f0ff;
    border: 1px solid rgba(0,212,255,0.40);
  }
  .main-author-pop .map-time {
    color: rgba(255,255,255,0.50);
    font-weight: 500;
  }
  .main-author-pop .map-popover {
    position: absolute; top: calc(100% + 10px); left: 0;
    z-index: 100;
    display: flex; flex-direction: column; gap: 8px;
    width: 280px; max-width: 90vw;
    padding: 14px 16px;
    background: linear-gradient(135deg, rgba(15,20,30,0.98), rgba(8,12,18,0.98));
    border: 1px solid rgba(0,212,255,0.40);
    border-radius: 10px;
    box-shadow: 0 12px 32px rgba(0,0,0,0.55), 0 0 18px rgba(0,212,255,0.18);
    opacity: 0; visibility: hidden;
    transform: translateY(-4px);
    transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s linear 0.2s;
    pointer-events: none;
  }
  .main-author-pop:hover .map-popover,
  .main-author-pop:focus-within .map-popover {
    opacity: 1; visibility: visible; transform: translateY(0);
    transition-delay: 0s, 0s, 0s;
    pointer-events: auto;
  }
  /* Flecha que apunta hacia el trigger */
  .main-author-pop .map-popover::before {
    content: ''; position: absolute; top: -6px; left: 24px;
    border: 6px solid transparent;
    border-bottom-color: rgba(0,212,255,0.40);
  }
  .main-author-pop .map-pop-name {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 18px; letter-spacing: 0.5px;
    color: #fff;
    display: inline-flex; align-items: center; gap: 8px;
  }
  .main-author-pop .map-pop-tag {
    font-size: 9px; font-weight: 800; letter-spacing: 0.1em;
    padding: 2px 6px; border-radius: 4px;
    background: rgba(0,212,255,0.15);
    color: #00f0ff;
    border: 1px solid rgba(0,212,255,0.40);
  }
  .main-author-pop .map-pop-bio {
    font-size: 12.5px;
    color: rgba(255,255,255,0.75);
    line-height: 1.4;
  }
  .main-author-pop .map-pop-stats {
    display: flex; flex-direction: column; gap: 3px;
    font-size: 11px; color: rgba(255,255,255,0.55);
    padding-top: 8px;
    border-top: 1px solid rgba(255,255,255,0.08);
  }
  .main-author-pop .map-pop-stats strong { color: #00f0ff; font-weight: 700; }
  @media (max-width: 600px) {
    .main-author-pop .map-popover { width: 260px; left: -8px; }
  }

  /* Acciones del hero (Respuestas + Pulso btn) — fila propia bajo la imagen
     pero ANTES de la encuesta. NO van superpuestas a la imagen. */
  .main-actions {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 24px;
    background: rgba(0,0,0,0.35);
    border-top: 1px solid rgba(255,255,255,0.04);
  }
  .main-action-comments {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 11px; border-radius: 8px;
    color: rgba(255,255,255,0.55);
    text-decoration: none;
    font-size: 12px; font-weight: 700;
    border: 1px solid rgba(255,255,255,0.06);
    background: rgba(255,255,255,0.02);
    transition: all 0.2s ease;
  }
  .main-action-comments.is-active { color: #00f0ff; border-color: rgba(0,240,255,0.20); }
  .main-action-comments:hover {
    color: #00f0ff !important;
    border-color: rgba(0,240,255,0.40);
    background: rgba(0,240,255,0.06);
  }
  .main-action-pulso {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 12px; border-radius: 8px;
    font-size: 12px; font-weight: 700;
    border: 1px solid rgba(0,240,255,0.30);
    background: rgba(0,240,255,0.08);
    color: #00f0ff;
    cursor: pointer;
    transition: all 0.2s ease;
    font-family: inherit;
    margin-left: auto;
  }
  .main-action-pulso:hover:not(:disabled) {
    background: rgba(0,240,255,0.16);
    border-color: rgba(0,240,255,0.55);
    transform: translateY(-1px);
  }
  .main-action-pulso.is-reacted {
    background: rgba(0,240,255,0.18);
    border-color: rgba(0,240,255,0.55);
  }
  .main-action-pulso.is-locked {
    opacity: 0.55; cursor: not-allowed;
  }
  .main-action-pulso-count {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 14px; letter-spacing: 0.5px;
    margin-left: 2px;
    padding: 1px 7px; border-radius: 5px;
    background: rgba(0,240,255,0.14);
  }

  /* Franja TOP COMMENT — destacado del comentario con más pulsos */
  .main-top-comment {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 24px;
    background: rgba(0,240,255,0.04);
    border-top: 1px solid rgba(0,240,255,0.10);
    color: rgba(255,255,255,0.85);
    text-decoration: none;
    font-size: 12px;
    transition: background 0.2s ease;
  }
  .main-top-comment:hover { background: rgba(0,240,255,0.10); }
  .main-tc-icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 22px; height: 22px;
    background: rgba(0,240,255,0.15); color: #00f0ff;
    border-radius: 50%;
    flex-shrink: 0;
  }
  .main-tc-avatar {
    width: 24px; height: 24px;
    border-radius: 50%;
    object-fit: cover;
    flex-shrink: 0;
  }
  .main-tc-avatar-letter {
    display: inline-flex; align-items: center; justify-content: center;
    font-weight: 800; font-size: 11px; color: #fff;
  }
  .main-tc-text {
    flex: 1; min-width: 0;
    display: flex; align-items: center; gap: 8px;
    overflow: hidden;
  }
  .main-tc-text strong { color: #00f0ff; font-weight: 700; flex-shrink: 0; }
  .main-tc-quote {
    color: rgba(255,255,255,0.65);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .main-tc-pulsos {
    font-size: 11px; color: #00f0ff; font-weight: 700;
    flex-shrink: 0;
  }

  /* Encuesta strip (votable inline) */
  .poll-strip {
    padding: 16px 24px;
    background: rgba(0,0,0,0.4);
    border-top: 1px solid rgba(255,255,255,0.06);
  }
  .poll-header { margin-bottom: 10px; }
  .poll-label {
    font-size: 11px; font-weight: 800; letter-spacing: 0.08em;
    text-transform: uppercase; color: #00f0ff;
    display: block;
  }
  /* Pregunta de la encuesta — destaca sobre las opciones sin chocar con el label */
  .poll-question {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 18px; line-height: 1.2; letter-spacing: 0.5px;
    color: #fff; margin: 6px 0 12px;
  }
  .poll-row {
    /* 2026-06-04: era flex con .poll-row-text flex:0 1 auto + .poll-row-bar flex:1.
       Eso hacía que el ancho de la BARRA dependiera del LARGO del texto:
       texto largo → bar corta. Las barras de 50% se veían de distinto tamaño.
       Grid con columnas fijas: text(40%) · bar(restante) · voters · pct.  */
    display: grid;
    grid-template-columns: minmax(0, 0.95fr) minmax(60px, 1fr) auto auto;
    align-items: center; gap: 10px;
    margin: 0 0 6px 0;
    font-size: 12px; color: rgba(255,255,255,0.65);
    background: transparent; border: 0; padding: 4px 0;
    width: 100%; font-family: inherit; text-align: left;
    cursor: pointer;
    transition: color 0.2s ease;
  }
  .poll-row:hover:not(:disabled) { color: rgba(255,255,255,0.95); }
  .poll-row:disabled { cursor: progress; opacity: 0.7; }
  .poll-row.is-voted { color: #00f0ff; }
  .poll-row.is-voted .poll-row-fill {
    box-shadow: 0 0 12px rgba(0,240,255,0.6);
    background: #4ce8ff;
  }
  .poll-row-text {
    min-width: 0;
    /* 2026-06-04: Sergi no quiere truncado con "..." — texto entero a 2 líneas
       máx (en mobile largo cabe en 2). Wrap normal sin overflow. */
    white-space: normal;
    line-height: 1.3;
    word-break: break-word;
    overflow-wrap: anywhere;
  }
  .poll-row { align-items: center; }
  .poll-row-bar {
    height: 6px;
    background: rgba(255,255,255,0.05);
    border-radius: 3px; overflow: hidden;
  }
  .poll-row-fill {
    height: 100%; background: #00f0ff; border-radius: 3px;
    box-shadow: 0 0 8px rgba(0,240,255,0.30);
    transition: width 0.6s cubic-bezier(0.2,0.8,0.2,1);
  }
  .poll-row-pct {
    width: 36px; text-align: right;
    font-weight: 800; color: #fff;
    flex-shrink: 0;
  }
  /* Avatares de los top 5 votantes por opción (regla: ordenados por reputación) */
  .poll-row-voters {
    display: inline-flex; align-items: center;
    flex-shrink: 0;
    margin-right: 4px;
  }
  .poll-voter-avatar {
    width: 22px; height: 22px;
    border-radius: 50%;
    border: 2px solid rgba(5,10,18,1);
    object-fit: cover;
    margin-left: -8px;
    background: #1a1f2e;
    transition: transform 0.15s ease;
  }
  .poll-voter-avatar:first-child { margin-left: 0; }
  .poll-voter-avatar:hover { transform: translateY(-2px) scale(1.08); z-index: 2; }
  .poll-voter-letter {
    display: inline-flex; align-items: center; justify-content: center;
    font-weight: 800; font-size: 10px; color: #fff;
    background: linear-gradient(135deg, #00f0ff, #0a4f5e);
  }
  .poll-voter-extra {
    display: inline-flex; align-items: center; justify-content: center;
    height: 22px; min-width: 26px;
    padding: 0 6px;
    margin-left: -4px;
    border-radius: 11px;
    background: rgba(0,240,255,0.10);
    color: #00f0ff;
    font-size: 10px; font-weight: 800;
    border: 2px solid rgba(5,10,18,1);
  }

  /* COLUMNA DER: 3 intel-cards VERTICALES — imagen 16/9 arriba + texto debajo.
     Las imágenes venden — layout horizontal apretaba el thumbnail demasiado. */
  .side-stack { display: flex; flex-direction: column; gap: 12px; }
  .intel-card {
    position: relative;
    display: flex; flex-direction: column;
    background: linear-gradient(180deg, rgba(255,255,255,0.035) 0%, rgba(255,255,255,0.01) 100%);
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 14px;
    padding: 0;
    flex: 1;
    transition: all 0.3s ease;
    color: inherit;
    overflow: hidden;
    isolation: isolate;
  }
  /* Overlay link absoluto cubre toda la card sin contener al botón Pulso.
     Evita el HTML inválido <button> dentro de <a>.
     PATRÓN: imagen y texto con pointer-events:none → el click ATRAVIESA y
     llega al link debajo. Botón Pulso restaura pointer-events:auto + mayor
     z-index → su click se captura ANTES de llegar al link. */
  .intel-card-link {
    position: absolute; inset: 0;
    z-index: 1;
    text-decoration: none;
  }
  .intel-card > .intel-img,
  .intel-card > .intel-text {
    position: relative;
    z-index: 2;
    pointer-events: none;
  }
  /* Línea sutil cyan top que aparece en hover */
  .intel-card::before {
    content: ''; position: absolute; top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, transparent, #00f0ff, transparent);
    opacity: 0; transition: opacity 0.3s ease;
    z-index: 3;
  }
  .intel-card:hover {
    border-color: rgba(0,240,255,0.35);
    transform: translateY(-3px);
    background: linear-gradient(180deg, rgba(0,240,255,0.05) 0%, rgba(255,255,255,0.02) 100%);
    box-shadow: 0 8px 24px rgba(0,240,255,0.15);
  }
  .intel-card:hover::before { opacity: 1; }
  .intel-card.is-hot { border-color: rgba(255,107,53,0.30); }
  .intel-card.is-hot:hover { border-color: rgba(255,107,53,0.55); }

  /* Imagen ancho completo arriba con aspect-ratio estándar 16/9 (calidad alta).
     Ahora que el hero se redujo ~30% via aspect 21/9, las 3 cards 16/9 nivelan
     sin necesidad de cinemascope que perdía nitidez. */
  .intel-img {
    position: relative;
    width: 100%;
    aspect-ratio: 16/9;
    border-radius: 0;
    overflow: hidden;
    flex-shrink: 0;
    background: rgba(0,0,0,0.3);
  }
  .intel-img img {
    width: 100%; height: 100%;
    object-fit: cover; display: block;
    transition: transform 0.5s cubic-bezier(0.2,0.8,0.2,1);
  }
  .intel-card:hover .intel-img img { transform: scale(1.08); }
  /* Badge HOT: top-RIGHT (deja libre el top-left al tag categoría) */
  .intel-flame {
    position: absolute; top: 8px; right: 8px;
    display: inline-flex; align-items: center; gap: 3px;
    padding: 3px 7px;
    background: linear-gradient(135deg, #ff6b35, #ff3d00);
    color: #fff;
    font-size: 9px; font-weight: 800; letter-spacing: 0.08em;
    border-radius: 5px;
    box-shadow: 0 2px 8px rgba(255,107,53,0.45);
    z-index: 2;
  }
  .intel-flame svg { display: block; }

  .intel-text {
    display: flex; flex-direction: column; gap: 5px;
    min-width: 0; flex: 1;
    padding: 9px 12px 9px;
  }
  /* Tag flotando sobre la imagen (top-left), pill cyan-glass */
  .intel-tag {
    position: absolute; top: 10px; left: 10px;
    z-index: 2;
    display: inline-flex; align-items: center;
    padding: 4px 9px;
    border-radius: 6px;
    font-size: 9px; font-weight: 800; letter-spacing: 0.08em;
    text-transform: uppercase;
    background: rgba(0,0,0,0.55);
    backdrop-filter: blur(8px);
    color: #4caf50;
    border: 1px solid rgba(76,175,80,0.30);
  }
  .intel-title {
    font-family: 'Inter', system-ui, sans-serif;
    font-size: 13px; line-height: 1.3;
    font-weight: 700; color: #fff;
    margin: 0;
    /* Sin line-clamp — título completo. La card crece lo necesario y
       flex: 1 entre las 3 distribuye el alto del hero. */
    word-break: normal;
    overflow-wrap: anywhere;
  }
  @media (min-width: 1100px) {
    .intel-title { font-size: 14px; }
  }
  /* Fila inferior: avatar autor + tiempo izq, stats + btn Pulso der */
  .intel-meta-row {
    display: flex; align-items: center; gap: 10px;
    margin-top: auto;  /* empuja al fondo para que el título crezca arriba */
    padding-top: 4px;
  }
  .intel-author {
    display: inline-flex; align-items: center; gap: 6px;
    flex: 1; min-width: 0;
    font-size: 11px; color: rgba(255,255,255,0.55);
  }
  .intel-author-avatar {
    width: 20px; height: 20px;
    border-radius: 50%;
    object-fit: cover;
    border: 1.5px solid rgba(0,240,255,0.40);
    flex-shrink: 0;
  }
  .intel-author-letter {
    display: inline-flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, #00f0ff, #0a4f5e);
    font-weight: 800; font-size: 10px; color: #fff;
  }
  .intel-author-time {
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .intel-stats {
    display: inline-flex; align-items: center; gap: 10px;
    flex-shrink: 0;
  }
  /* Botón Respuestas estilo hero principal: solo icono+texto cyan, sin fondo */
  .intel-respuestas-btn {
    position: relative; z-index: 3;
    pointer-events: auto;
    display: inline-flex; align-items: center; gap: 5px;
    padding: 5px 8px;
    color: rgba(255,255,255,0.55);
    text-decoration: none;
    font-size: 12px; font-weight: 700;
    border-radius: 6px;
    transition: color 0.2s ease, background 0.2s ease;
  }
  .intel-respuestas-btn:hover {
    color: #00f0ff !important;
    background: rgba(0,240,255,0.06);
  }
  .intel-respuestas-btn svg { display: block; flex-shrink: 0; }

  /* Botón Pulso estilo "main-action-pulso" del hero principal: pill cyan
     con borde + label "Dar Pulso" / "Pulso dado". */
  .intel-pulso-btn {
    position: relative; z-index: 3;
    pointer-events: auto;
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 12px;
    border: 1px solid rgba(0,240,255,0.30);
    background: rgba(0,240,255,0.08);
    color: #00f0ff;
    font-family: inherit; font-size: 12px; font-weight: 700;
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.2s ease;
  }
  .intel-pulso-btn:hover:not([aria-disabled="true"]) {
    background: rgba(0,240,255,0.18);
    border-color: rgba(0,240,255,0.55);
    transform: translateY(-1px);
  }
  .intel-pulso-btn.is-reacted {
    background: rgba(0,240,255,0.20);
    border-color: rgba(0,240,255,0.55);
  }
  .intel-pulso-btn.is-locked {
    opacity: 0.55; cursor: not-allowed;
  }
  .intel-pulso-btn svg { display: block; flex-shrink: 0; }
  .intel-pulso-btn .pulso-label { white-space: nowrap; }

  @media (max-width: 768px) {
    .hero-compact { grid-template-columns: 1fr; gap: 12px; margin-bottom: 24px; }
    .side-stack { flex-direction: column; }
    .main-content { padding: 16px; }
    .poll-strip { padding: 14px 16px; }
  }
  /* ════════════════════════════════════════════════════════════════════════ */

  @keyframes newsFadeUp {
    from { opacity: 0; transform: translateY(20px); }
    to   { opacity: 1; transform: translateY(0); }
  }
  .news-grid > :nth-child(1) { animation-delay: 0.05s; }
  .news-grid > :nth-child(2) { animation-delay: 0.10s; }
  .news-grid > :nth-child(3) { animation-delay: 0.15s; }
  .news-grid > :nth-child(4) { animation-delay: 0.20s; }
  .news-grid > :nth-child(5) { animation-delay: 0.25s; }
  .news-grid > :nth-child(6) { animation-delay: 0.30s; }

  /* Cargar más (híbrido AJAX + pushState) — sustituye la paginación clásica.
     La paginación SSR sigue funcionando (deep link a ?p=N), pero el UX
     primario es un botón que carga sin recargar. */
  .news-load-more-wrap {
    display: flex; justify-content: center;
    margin: var(--space-7) 0 var(--space-5);
  }
  .news-load-more-btn {
    background: linear-gradient(135deg, rgba(0,212,255,0.10) 0%, rgba(0,212,255,0.04) 100%);
    border: 1px solid rgba(0,212,255,0.35);
    color: #fff;
    padding: 14px 32px;
    border-radius: 14px;
    font-family: 'Inter', sans-serif;
    font-size: 13px; font-weight: 700;
    letter-spacing: 0.12em; text-transform: uppercase;
    cursor: pointer;
    display: inline-flex; align-items: center; gap: 10px;
    transition: all 0.25s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  }
  .news-load-more-btn svg {
    transition: transform 0.25s ease;
  }
  .news-load-more-btn:hover {
    background: var(--cyan-accent, #00d4ff);
    color: #001a20;
    transform: translateY(-2px);
    box-shadow: 0 8px 24px rgba(0,212,255,0.40);
    border-color: var(--cyan-accent, #00d4ff);
  }
  .news-load-more-btn:hover svg { transform: translateY(2px); }
  .news-load-more-btn:disabled,
  .news-load-more-btn.is-loading {
    cursor: progress; opacity: 0.7; transform: none; box-shadow: none;
  }
  .news-load-more-btn.is-loading svg {
    animation: lmSpin 0.8s linear infinite;
  }
  @keyframes lmSpin { to { transform: rotate(360deg); } }

  .news-load-more-prev {
    display: flex; justify-content: center;
    margin: 0 0 var(--space-5);
  }

  /* Paginación SSR fallback (noscript + ?p=N directo) */
  .news-pagination { display: flex; justify-content: center; gap: 8px; margin: var(--space-7) 0; flex-wrap: wrap; }
  .news-pag-btn {
    background: var(--news-glass-bg); border: 1px solid var(--news-glass-border); color: var(--text-secondary);
    padding: 10px 18px; border-radius: 12px; text-decoration: none; font-size: 14px; font-weight: 600;
    transition: all 0.3s cubic-bezier(0.25, 1, 0.5, 1); backdrop-filter: var(--news-glass-blur);
  }
  .news-pag-btn:hover { border-color: var(--cyan-accent); color: #fff; transform: translateY(-2px); box-shadow: 0 4px 12px var(--news-glow-cyan); }
  .news-pag-btn.active { background: linear-gradient(135deg, rgba(0,212,255,0.2) 0%, rgba(0,212,255,0.05) 100%); border-color: var(--cyan-accent); color: #fff; }


  .news-sidebar-mod {
    background: var(--news-glass-bg); border: 1px solid var(--news-glass-border);
    border-radius: 18px; padding: var(--space-5);
    backdrop-filter: var(--news-glass-blur); -webkit-backdrop-filter: var(--news-glass-blur);
    box-shadow: 0 10px 30px rgba(0,0,0,0.2);
  }
  .news-sidebar-title {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 24px; letter-spacing: 1.5px; color: #fff;
    margin: 0 0 var(--space-4); display: flex; align-items: center; gap: 10px;
    border-bottom: 1px solid rgba(255,255,255,0.05); padding-bottom: 12px;
  }
  .news-sidebar-title span { color: var(--cyan-accent); }
  .news-sidebar-empty { font-size: 13px; color: var(--text-muted); margin: 0; }
  .news-sidebar-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 16px; }

  .news-sidebar-list a { text-decoration: none; color: inherit; display: block; padding: 8px; border-radius: 12px; transition: background 0.2s ease; margin: -8px; }
  .news-sidebar-list a:hover { background: rgba(255,255,255,0.03); }
  .news-sidebar-list a:hover .news-sidebar-noticia-titulo,
  .news-sidebar-list a:hover .news-sidebar-nick { color: var(--cyan-accent); }

  .news-sidebar-rank {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 28px; height: 28px; border-radius: 50%;
    background: linear-gradient(135deg, rgba(0,212,255,0.2) 0%, rgba(0,212,255,0.05) 100%); 
    color: var(--cyan-accent); border: 1px solid rgba(0,212,255,0.2);
    font-size: 13px; font-weight: 800; flex-shrink: 0;
  }

  /* Lo más comentado */
  .news-sidebar-noticia { display: grid; grid-template-columns: auto 1fr; gap: 14px; align-items: start; }
  .news-sidebar-noticia-body { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
  .news-sidebar-noticia-titulo {
    font-family: system-ui, -apple-system, sans-serif;
    font-size: 14px; font-weight: 600; line-height: 1.4; color: rgba(255,255,255,0.9);
    transition: color 0.2s ease;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }
  .news-sidebar-noticia-meta {
    font-size: 11px; color: var(--text-muted); display: flex; gap: 8px; align-items: center; flex-wrap: wrap; font-weight: 600;
  }
  .news-sidebar-cat {
    text-transform: uppercase; font-size: 10px; letter-spacing: 0.5px; padding: 2px 6px;
    border: 1px solid var(--border); border-radius: 6px; background: rgba(0,0,0,0.3);
  }

  /* Top comentarios */
  .news-sidebar-comentario { display: flex; flex-direction: column; gap: 8px; padding: 12px; border-radius: 12px; background: rgba(0,0,0,0.2); border: 1px solid rgba(255,255,255,0.02); transition: all 0.2s ease; }
  .news-sidebar-comentario:hover { background: rgba(0,212,255,0.05); border-color: rgba(0,212,255,0.1); }
  .news-sidebar-comentario-head { display: flex; align-items: center; gap: 10px; }
  .news-sidebar-avatar { width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0; border: 1px solid rgba(255,255,255,0.1); }
  .news-sidebar-avatar-fallback {
    display: inline-flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, var(--xbox-green) 0%, #0b5a0b 100%); color: #fff; font-size: 12px; font-weight: 700;
  }
  .news-sidebar-nick { font-size: 13px; font-weight: 700; color: #fff; transition: color 0.2s ease; }
  .news-sidebar-score { font-size: 12px; color: var(--xbox-green-light); margin-left: auto; font-weight: 700; display: flex; align-items: center; gap: 4px; }
  .news-sidebar-comentario-extracto {
    font-size: 13px; color: var(--text-secondary); line-height: 1.5; margin: 0;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
  }

  /* CTA Telegram */
  .news-sidebar-tg {
    background: linear-gradient(135deg, rgba(34,158,217,0.15) 0%, rgba(34,158,217,0.05) 100%);
    border-color: rgba(34,158,217,0.3); position: relative; overflow: hidden;
  }
  .news-sidebar-tg::before {
    content: ''; position: absolute; top: 0; right: 0; width: 100px; height: 100px;
    background: radial-gradient(circle, rgba(34,158,217,0.2) 0%, transparent 70%);
    border-radius: 50%; transform: translate(30%, -30%); pointer-events: none;
  }
  .news-sidebar-tg-cta { display: flex; align-items: center; gap: 16px; text-decoration: none; color: inherit; position: relative; z-index: 2; }
  .news-sidebar-tg-icon { font-size: 32px; filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3)); }
  .news-sidebar-tg-text { display: flex; flex-direction: column; gap: 4px; }
  .news-sidebar-tg-text strong { font-size: 16px; color: #fff; font-weight: 800; }
  .news-sidebar-tg-text span { font-size: 12px; color: rgba(255,255,255,0.7); }

  /* === WAVE WIDGET (Game Pass Entradas/Salidas) === */

  .wave-widget {
    background: rgba(22, 24, 28, 0.6);
    backdrop-filter: blur(20px);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 24px;
    padding: var(--space-5);
    box-shadow: 0 15px 35px rgba(0,0,0,0.3);
    overflow: hidden;
    position: relative;
    z-index: 5;
  }
  .wave-widget::after {
    content: ''; position: absolute; top: -50px; right: -50px; width: 100px; height: 100px;
    background: radial-gradient(circle, rgba(16, 124, 16, 0.2) 0%, transparent 70%);
    pointer-events: none;
  }
  .wave-header { 
    display: flex; gap: 16px; margin-bottom: 24px; padding: 4px 0;
    position: relative;
  }
  .wave-header-accent { 
    width: 4px; border-radius: 4px;
    background: linear-gradient(to bottom, var(--cyan-accent), transparent);
    flex-shrink: 0;
  }
  .wave-header-content { display: flex; flex-direction: column; gap: 2px; }
  .wave-header-context { 
    font-size: 10px; font-weight: 800; color: rgba(255,255,255,0.4); 
    letter-spacing: 2px; line-height: 1; text-transform: uppercase;
  }
  .wave-header-title { 
    font-size: 26px; font-weight: 900; color: #fff; 
    line-height: 1; letter-spacing: -0.5px;
  }
  .wave-header-action { 
    font-size: 16px; font-weight: 800; color: var(--cyan-accent); 
    line-height: 1.2; letter-spacing: 0.5px;
  }
  .wave-header-meta { 
    font-size: 11px; font-weight: 700; color: rgba(255,255,255,0.3); 
    margin-top: 6px; letter-spacing: 0.5px;
  }
  
  .wave-section { margin-bottom: var(--space-6); }
  .wave-section-title { 
    font-family: 'Bebas Neue', sans-serif; font-size: 20px; letter-spacing: 1.5px; 
    display: flex; align-items: center; gap: 10px; margin-bottom: var(--space-4);
    text-transform: uppercase;
  }
  .wave-section-title.coming { color: #fff; }
  .wave-section-title.leaving { color: #ff4757; }
  
  .wave-dot { 
    width: 8px; height: 8px; border-radius: 50%; display: inline-block;
    position: relative;
  }
  .coming .wave-dot { background: var(--xbox-green); box-shadow: 0 0 10px var(--xbox-green); }
  .leaving .wave-dot { background: #ff4757; box-shadow: 0 0 10px #ff4757; }

  /* Headers diferenciados para los widgets entran/salen separados */
  .wave-header-action-coming { color: var(--xbox-green-light, #00d4ff); }
  .wave-header-action-coming .wave-dot { background: var(--xbox-green); box-shadow: 0 0 10px var(--xbox-green); display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
  .wave-header-action-leaving { color: #ff4757; }
  .wave-header-action-leaving .wave-dot { background: #ff4757; box-shadow: 0 0 10px #ff4757; display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: middle; }
  .wave-header-accent-leaving { background: linear-gradient(180deg, #ff4757, transparent) !important; }
  
  .wave-game-list { list-style: none; padding: 0; display: flex; flex-direction: column; gap: 12px; }
  .wave-game-item { 
    display: flex; align-items: center; gap: 12px;
    padding: 10px 14px; background: rgba(255,255,255,0.03); border-radius: 14px;
    border: 1px solid rgba(255,255,255,0.02); transition: 0.3s ease;
  }
  .wave-game-item:hover { background: rgba(0,212,255,0.05); transform: translateX(5px); border-color: rgba(0,212,255,0.1); }
  
  .wave-game-img-container {
    width: 40px; height: 40px; border-radius: 8px; overflow: hidden;
    flex-shrink: 0; border: 1px solid rgba(255,255,255,0.1);
    box-shadow: 0 4px 10px rgba(0,0,0,0.3); background: #000;
  }
  .wave-game-img { width: 100%; height: 100%; object-fit: cover; opacity: 0.8; }
  .wave-game-item:hover .wave-game-img { opacity: 1; }

  .wave-game-info { display: flex; flex-direction: column; gap: 2px; flex-grow: 1; min-width: 0; }
  .wave-game-name { font-size: 14px; font-weight: 700; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .wave-game-platforms { font-size: 11px; color: #888; font-weight: 500; }
  .wave-game-date { 
    font-size: 12px; font-weight: 800; color: var(--cyan-accent); 
    background: rgba(0,212,255,0.1); padding: 2px 8px; border-radius: 6px; 
    white-space: nowrap; flex-shrink: 0;
  }
  
  .wave-game-item.compact { padding: 8px 14px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
  .wave-game-item.compact .wave-game-name { color: #bbb; font-weight: 600; font-size: 13px; }
  .wave-game-item.compact:hover .wave-game-name { color: #ff4757; }

  /* 2026-05-19: badges sociales en wave-widget — "X esperándolo" / "X jugándolo aún" */
  .wave-game-waiting,
  .wave-game-still-playing {
    font-size: 10.5px; font-weight: 700; letter-spacing: 0.3px;
    padding: 2px 7px; border-radius: 5px; white-space: nowrap; flex-shrink: 0;
    margin-top: 1px; align-self: flex-start;
  }
  .wave-game-waiting {
    color: var(--cyan-accent, #00d4ff);
    background: rgba(0,212,255,0.08);
    border: 1px solid rgba(0,212,255,0.18);
  }
  .wave-game-still-playing {
    color: #ff8a65;
    background: rgba(255,138,101,0.08);
    border: 1px solid rgba(255,138,101,0.22);
  }

  /* 2026-05-18: wave-widget-salen ahora enlaza al juego si hay slug.
     wave-game-link resetea el text-decoration default del <a>. */
  .wave-game-link { text-decoration: none; cursor: pointer; display: inline-block; }
  .wave-game-link:hover { text-decoration: none; }

  /* wave-widget-entran: el item entero pasa a ser <a class="wave-game-row">.
     Hereda el flex layout del item-padre para mantener visual idéntico. */
  .wave-game-row {
    display: flex; align-items: center; gap: 12px;
    width: 100%; color: inherit; text-decoration: none;
    transition: color 0.2s ease;
  }
  .wave-game-item:has(.wave-game-row:hover) .wave-game-name { color: var(--cyan-accent, #00d4ff); }

  .wave-more-link {
    display: flex; align-items: center; justify-content: center; gap: 10px;
    margin-top: var(--space-5); padding: 12px; background: rgba(0,212,255,0.05);
    border: 1px solid rgba(0,212,255,0.1); border-radius: 12px;
    color: var(--cyan-accent); text-decoration: none; font-size: 13px; font-weight: 800;
    text-transform: uppercase; letter-spacing: 1px; transition: 0.3s;
  }
  .wave-more-link:hover { background: var(--cyan-accent); color: #000; box-shadow: 0 0 20px rgba(0,212,255,0.3); }

  /* Widgets intercalados en el news-grid — ocultos en desktop, visibles en mobile.
     Permite distribuir los widgets sociales entre las noticias en lugar de
     dejarlos todos al final del scroll. */
  .news-grid-widget { display: none; }

  /* Variante fullspan: visible SIEMPRE (desktop + mobile) y ocupa el ancho
     completo del grid. Usada para bloques grandes tipo foro-resumen. */
  .news-grid-widget-fullspan {
    display: block;
    grid-column: 1 / -1;
    margin: var(--space-4) 0;
  }
  .news-grid-widget-fullspan .news-sidebar-mod,
  .news-grid-widget-fullspan .news-sidebar-sticky-wrapper {
    position: static;
    top: auto;
  }

  @media (max-width: 768px) {
    /* En móvil: el sidebar lateral entero desaparece — sus contenidos viven
       distribuidos en el grid (wave tras la 3ª, lo más comentado tras la 7ª,
       top comentarios tras la 11ª, top usuarios + CTA Telegram al final). */
    .news-layout  { display: flex; flex-direction: column; padding: 0; gap: var(--space-4); }
    .news-main    { order: 0; padding: 0; }
    .news-sidebar { display: none; }

    /* Widgets intercalados — anchura completa del grid */
    .news-grid-widget {
      display: block;
      grid-column: 1 / -1;
      margin: var(--space-3) 0;
      padding: 0 var(--space-3);
    }
    /* Reset de position:sticky cuando viven dentro del grid (no es relativo
       al sidebar wrapper, no debería pegarse al scroll) */
    .news-grid-widget .news-sidebar-mod,
    .news-grid-widget .wave-widget,
    .news-grid-widget .news-sidebar-sticky-wrapper {
      position: static;
      top: auto;
    }
    
    .news-page-header { padding: var(--space-4) var(--space-3); margin-bottom: var(--space-2); }
    .news-page-title { font-size: 38px; }
    .news-page-sub { font-size: 13px; margin-top: 6px; }
    
    .news-filters { 
      padding: 4px var(--space-3) 12px;
      margin-bottom: var(--space-4);
    }
    
    .news-grid {
      grid-template-columns: 1fr;
      gap: var(--space-4);
      padding: 0 var(--space-3);
      /* 2026-06-04: defensa contra overflow horizontal — cualquier
         elemento interno con margin negativo, width fijo o embed ancho
         no genera scroll horizontal del viewport. */
      max-width: 100%;
      min-width: 0;
      overflow-x: hidden;
    }
    .news-grid > * { max-width: 100%; min-width: 0; }
    .news-main { max-width: 100%; min-width: 0; overflow-x: hidden; }
    
    /* Hero en mobile: full bleed y más impacto */
    .news-hero-block { gap: 0; margin-bottom: var(--space-4); }
    .news-card-hero { border-radius: 0; border-left: none; border-right: none; }
    .news-card-hero .news-card-media { aspect-ratio: 16/9; }
    .news-card-hero .news-card-body { margin-top: -35px; padding: 0 var(--space-4) var(--space-5); gap: 10px; }
    .news-card-hero .news-card-title {
      font-size: 23px;
      line-height: 1.2;
      letter-spacing: -0.5px;
      display: -webkit-box;
      -webkit-line-clamp: 3;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }
    /* Avatar y nombre del autor más recogidos en móvil */
    .news-card-hero .news-card-author { margin-top: 4px; margin-bottom: 10px; gap: 10px; }
    .news-card-hero .news-card-author-avatar { width: 34px; height: 34px; }
    .news-card-hero .news-card-author-info strong { font-size: 14px; }
    /* Padding lateral del wrapper de encuesta en mobile */
    .news-card-poll-wrap { padding: 0 var(--space-4) var(--space-5); }
    
    /* Pequeño ajuste para las cards normales */
    .news-grid .news-card { border-radius: 20px; }
    
    /* 2026-05-08: small card ahora es flex-column en todos los viewports
       (refactor mismo día). El antiguo grid-template-columns ya no aplica. */
    .news-card-small .news-card-body { padding: 0 var(--space-3) var(--space-3); }
    .news-card-small .news-card-title { font-size: 14px; }

    .news-pagination { padding: 0 var(--space-3); }
  }

  /* ========================================================
     BOOST DESKTOP — solo ≥1024px. Sube tipografías para mejorar
     legibilidad en pantallas grandes (Lighthouse "Avoids small
     font sizes" + WCAG ~16px body recomendado). No afecta móvil.
     ======================================================== */
  @media (min-width: 1024px) {
    /* Cards del feed (no hero, no small) */
    .news-card-title { font-size: 20px; }
    .news-card-excerpt { font-size: 15px; line-height: 1.55; }
    .news-card-meta { font-size: 13px; }

    /* Bloque del autor */
    .news-card-author { font-size: 13px; }
    .news-card-author-info strong { font-size: 14px; }
    .news-card-author-time { font-size: 12px; }

    /* Comment preview dentro de cards */
    .ncp-line { font-size: 12px; }
    .ncp-line strong { font-size: 13px; }
    .ncp-quote { font-size: 13px; }

    /* Encuesta hero */
    .np-hero-eyebrow { font-size: 14px; }
    .np-hero-question { font-size: 17px; line-height: 1.4; }
    .np-hero-btn { font-size: 15px; padding: 13px 16px; }
    .np-hero-result { font-size: 14px; padding: 11px 16px; }
    .np-hero-locked { font-size: 12px; }

    /* Encuesta dentro del artículo */
    .news-poll-eyebrow { font-size: 14px; }
    .news-poll-question { font-size: 17px; }
    .news-poll-option { font-size: 14px; padding: 12px 16px; }
    .news-poll-foot { font-size: 12px; }
  }

  /* ========================================================
     TAKES — feed de notas rápidas tipo Twitter
     ======================================================== */
  .takes-widget {
    background: linear-gradient(160deg, rgba(20, 22, 30, 0.96), rgba(10, 11, 16, 0.99));
    border: 1px solid rgba(192, 132, 252, 0.22);
    border-radius: 14px;
    padding: 14px;
    margin-bottom: var(--space-5);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4), 0 0 18px rgba(192, 132, 252, 0.05);
  }
  .takes-widget-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 10px; }
  .takes-widget-title {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 22px; letter-spacing: 1.5px; color: #fff;
  }
  .takes-widget-title span { color: #c084fc; text-shadow: 0 0 12px rgba(192, 132, 252, 0.4); }
  .takes-widget-sub {
    font-family: 'Inter', sans-serif;
    font-size: 10px; font-weight: 600;
    letter-spacing: 1.5px; color: var(--text-muted);
    text-transform: uppercase;
  }
  .takes-widget-list { display: flex; flex-direction: column; gap: 8px; }
  .takes-widget-foot {
    display: block; margin-top: 10px;
    text-align: center;
    font-size: 12px; font-weight: 700;
    color: #c084fc;
    text-decoration: none;
    padding: 8px;
    border-top: 1px solid rgba(192, 132, 252, 0.15);
  }
  .takes-widget-foot:hover { color: #d4a8ff; }

  .take-card {
    background: rgba(255, 255, 255, 0.03);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 10px;
    padding: 12px 14px;
    transition: border-color 0.2s, background 0.2s;
  }
  .take-card:hover { border-color: rgba(192, 132, 252, 0.30); background: rgba(192, 132, 252, 0.04); }
  .take-card.is-large { padding: 18px 20px; max-width: 640px; margin: 0 auto; }

  .take-card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
  .take-card-avatar {
    width: 36px; height: 36px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 14px; letter-spacing: 1px;
    color: #fff; flex-shrink: 0;
    box-shadow: 0 0 0 1px rgba(255,255,255,0.15) inset;
    text-shadow: 0 1px 2px rgba(0,0,0,0.5);
  }
  .take-card.is-large .take-card-avatar { width: 48px; height: 48px; font-size: 18px; }
  .take-card-author { display: flex; flex-direction: column; min-width: 0; flex: 1; }
  .take-card-name { font-size: 13px; font-weight: 700; color: #fff; line-height: 1.2; }
  .take-card-handle { font-size: 11px; color: var(--text-muted); }
  .take-card.is-large .take-card-name { font-size: 16px; }
  .take-card.is-large .take-card-handle { font-size: 13px; }
  .take-card-meta { display: flex; align-items: center; gap: 8px; font-size: 11px; color: var(--text-muted); }
  .take-card-source {
    display: inline-flex; align-items: center; justify-content: center;
    width: 22px; height: 22px;
    color: var(--text-muted); border-radius: 50%;
    background: rgba(255,255,255,0.04);
    transition: all 0.2s;
  }
  .take-card-source:hover { color: #fff; background: rgba(255,255,255,0.10); }

  .take-card-text {
    font-size: 14px; line-height: 1.5;
    color: #e8eaed; margin: 6px 0 12px;
    white-space: pre-wrap; word-break: break-word;
  }
  .take-card.is-large .take-card-text { font-size: 17px; line-height: 1.55; margin: 12px 0 18px; }

  .take-card-foot {
    display: flex; align-items: center; gap: 10px;
    flex-wrap: wrap;
    padding-top: 10px;
    border-top: 1px solid rgba(255, 255, 255, 0.05);
  }
  .take-reactions { display: flex; gap: 4px; flex: 1; flex-wrap: wrap; }
  .take-reaction {
    display: inline-flex; align-items: center; gap: 4px;
    background: rgba(255, 255, 255, 0.04);
    border: 1px solid rgba(255, 255, 255, 0.08);
    color: var(--text-muted);
    border-radius: 999px;
    padding: 5px 10px;
    font-family: 'Inter', sans-serif;
    font-size: 11px; font-weight: 700;
    cursor: pointer;
    transition: all 0.18s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  }
  .take-reaction:hover {
    background: rgba(255, 255, 255, 0.08);
    border-color: rgba(255, 255, 255, 0.20);
    transform: translateY(-1px);
  }
  .take-reaction.is-mine.take-reaction-fire  { background: rgba(255, 107, 0, 0.18);   border-color: rgba(255, 107, 0, 0.50);   color: #ffb87a; }
  .take-reaction.is-mine.take-reaction-dead  { background: rgba(231, 76, 60, 0.18);   border-color: rgba(231, 76, 60, 0.50);   color: #ff8e8e; }
  .take-reaction.is-mine.take-reaction-think { background: rgba(255, 210, 77, 0.18);  border-color: rgba(255, 210, 77, 0.50);  color: #ffe28a; }
  .take-reaction.is-mine.take-reaction-eyes  { background: rgba(0, 212, 255, 0.18);   border-color: rgba(0, 212, 255, 0.50);   color: #7ee5ff; }
  .take-reaction-emoji { font-size: 14px; line-height: 1; }
  .take-reaction-count { line-height: 1; min-width: 6px; text-align: left; }
  .take-reaction.is-pulsing { animation: takeReactionPulse 0.4s ease-out; }
  @keyframes takeReactionPulse {
    0%   { transform: scale(1); }
    50%  { transform: scale(1.18); }
    100% { transform: scale(1); }
  }

  .take-card-share {
    display: inline-flex; align-items: center; justify-content: center;
    width: 30px; height: 30px;
    color: var(--text-muted); border-radius: 50%;
    background: rgba(255, 255, 255, 0.03);
    border: 1px solid rgba(255, 255, 255, 0.08);
    flex-shrink: 0;
    transition: all 0.2s;
  }
  .take-card-share:hover { color: #c084fc; background: rgba(192, 132, 252, 0.10); border-color: rgba(192, 132, 252, 0.30); }

  /* Feed completo en /takes */
  .takes-feed {
    display: flex; flex-direction: column; gap: 12px;
    max-width: 720px; margin: 0 auto;
  }
  .takes-feed .take-card { padding: 16px 18px; }
  .takes-feed .take-card-text { font-size: 15px; }

  /* Deeplink /take/[id] */
  .take-deeplink-main { padding: var(--space-7) var(--space-4); }
  .take-deeplink-wrap { max-width: 680px; margin: 0 auto; display: flex; flex-direction: column; gap: var(--space-4); }
  .take-deeplink-back { font-size: 13px; color: var(--text-muted); text-decoration: none; }
  .take-deeplink-back:hover { color: #c084fc; }
  .take-deeplink-foot {
    text-align: center; font-size: 13px; color: var(--text-muted); margin-top: var(--space-4);
  }
  .take-deeplink-foot a { color: #c084fc; text-decoration: none; font-weight: 700; }
  .take-deeplink-foot a:hover { text-decoration: underline; }

  @media (max-width: 600px) {
    .takes-widget { padding: 12px; }
    .takes-widget-title { font-size: 20px; }
    .take-card { padding: 12px; }
    .take-card-text { font-size: 13px; }
    .take-card.is-large .take-card-text { font-size: 15px; }
    .take-reaction-emoji { font-size: 13px; }
    .take-reaction { padding: 4px 8px; font-size: 10px; }
  }

  /* ===== GP COMMENTS HUD — bloque unificado (sustituye al antiguo HUD Footer) ===== */
  .gp-hud-block {
    margin: var(--space-5) 0;
    background: rgba(16, 23, 38, 0.5);
    backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
    border: 1px solid rgba(0, 212, 255, 0.15);
    border-radius: 14px;
    overflow: hidden;
    color: #eee;
    font-family: 'Inter', sans-serif;
  }
  .gp-hud-row {
    padding: 0.85rem 1.1rem;
    border-top: 1px solid rgba(255, 255, 255, 0.05);
    position: relative;
  }
  .gp-hud-row:first-child { border-top: 0; }

  /* --- Zone 1: HUD bar (Pulso + Comentar + Share) --- */
  .gp-hud-actions {
    display: flex; justify-content: space-between; align-items: center;
    gap: 0.75rem; flex-wrap: wrap;
  }
  .gp-hud-block .gp-hud-left,
  .gp-hud-block .gp-hud-right { display: flex; gap: 0.55rem; align-items: center; flex-wrap: wrap; }

  .hud-pulso-btn,
  .hud-cta-btn {
    display: inline-flex; align-items: center; gap: 0.5rem;
    padding: 0.55rem 1rem; border-radius: 10px;
    background: transparent; border: 1px solid rgba(255,255,255,0.1);
    color: var(--text-primary); font-family: 'Barlow', sans-serif;
    font-size: 0.9rem; font-weight: 600; text-decoration: none;
    cursor: pointer; transition: all 0.2s ease;
    position: relative;
  }
  .hud-pulso-btn .hud-icon,
  .hud-cta-btn .hud-icon { transition: transform 0.2s ease; flex-shrink: 0; }
  .hud-cta-btn:hover { background: rgba(255,255,255,0.04); border-color: rgba(0, 212, 255, 0.3); color: #fff; }
  .hud-cta-btn:hover .hud-icon { transform: translateX(2px) scale(1.05); }

  .hud-telegram-btn:hover { color: #0088cc; border-color: rgba(0, 136, 204, 0.4); }
  .hud-whatsapp-btn:hover { color: #25D366; border-color: rgba(37, 211, 102, 0.4); }

  /* Estado idle: clicable, color azul Pulso */
  .hud-pulso-btn.is-idle {
    color: #1E90FF; border-color: rgba(30, 144, 255, 0.4);
  }
  .hud-pulso-btn.is-idle:hover {
    background: rgba(30, 144, 255, 0.08);
    box-shadow: 0 0 15px rgba(30, 144, 255, 0.3);
  }
  .hud-pulso-btn.is-idle:hover .hud-icon { transform: scale(1.15); }

  /* Estado reacted: cyan permanente, glow constante */
  .hud-pulso-btn.is-reacted {
    color: #00f3ff; border-color: rgba(0, 243, 255, 0.5);
    box-shadow: 0 0 12px rgba(0, 243, 255, 0.25); cursor: default;
  }
  .hud-pulso-btn.is-reacted .hud-icon { filter: drop-shadow(0 0 4px rgba(0, 243, 255, 0.6)); }

  /* Estado locked: anónimo o sin pulsos */
  .hud-pulso-btn.is-locked {
    opacity: 0.5; border-style: dashed; cursor: not-allowed;
    color: var(--text-secondary);
  }

  .hud-pulso-count {
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 1.05rem; font-weight: 700; min-width: 1.2em; text-align: center;
  }
  .hud-pulso-label { font-size: 0.85rem; opacity: 0.85; }

  /* Animación flash al click (300ms total). JS añade .flash-anim al icono. */
  @keyframes pulso-flash {
    0%   { transform: scale(1);   filter: drop-shadow(0 0 0 rgba(0,243,255,0)); }
    40%  { transform: scale(1.6); filter: drop-shadow(0 0 16px rgba(255,255,255,0.9)); }
    100% { transform: scale(1);   filter: drop-shadow(0 0 6px rgba(0,243,255,0.6)); }
  }
  .hud-pulso-btn .hud-icon.flash-anim { animation: pulso-flash 600ms cubic-bezier(.2,.8,.2,1) forwards; }

  /* Floating "+1⚡" que sale del botón hacia arriba en regen */
  @keyframes pulso-float-up {
    0%   { opacity: 0; transform: translate(-50%, 0) scale(0.8); }
    20%  { opacity: 1; transform: translate(-50%, -8px) scale(1); }
    100% { opacity: 0; transform: translate(-50%, -36px) scale(1.1); }
  }
  .hud-pulso-float {
    position: absolute; left: 50%; top: 0;
    transform: translate(-50%, 0);
    color: #00f3ff; font-weight: 700; font-size: 0.95rem;
    pointer-events: none;
    animation: pulso-float-up 900ms ease-out forwards;
    text-shadow: 0 0 8px rgba(0, 243, 255, 0.6);
  }

  /* Tooltip nativo CSS — 2026-05-10: feedback Dani. Antes era white-space:nowrap
     que se cortaba al salirse del card si el texto era largo ("Reacciona a
     comentarios para recargar"). Ahora permite wrap a 2 líneas y respeta el
     ancho del card. */
  .hud-pulso-btn[data-tooltip]:hover::after,
  .hud-pulso-btn[data-tooltip]:focus-visible::after {
    content: attr(data-tooltip);
    position: absolute; bottom: calc(100% + 8px); left: 50%;
    transform: translateX(-50%);
    background: #1e293b; color: #fff; font-size: 0.75rem; font-weight: 500;
    padding: 0.5rem 0.8rem; border-radius: 6px;
    white-space: normal; width: max-content; max-width: 220px;
    text-align: center; line-height: 1.35;
    box-shadow: 0 4px 12px rgba(0,0,0,0.4); pointer-events: none; z-index: 100;
    border: 1px solid rgba(0, 212, 255, 0.2);
  }

  @media (max-width: 600px) {
    .news-hud-footer { padding: 0.65rem 0.75rem; gap: 0.4rem; flex-wrap: nowrap; }
    .news-hud-footer .hud-left,
    .news-hud-footer .hud-right { gap: 0.4rem; flex-wrap: nowrap; }
    .hud-pulso-btn, .hud-cta-btn { padding: 0.5rem 0.6rem; font-size: 0.85rem; gap: 0.35rem; }
    .hud-pulso-label { display: none; }
    /* En móvil: WhatsApp y Telegram solo icono para no romper el layout */
    .hud-whatsapp-btn span, .hud-telegram-btn span { display: none; }
    .hud-whatsapp-btn, .hud-telegram-btn { padding: 0.5rem; }
  }

  /* Botón Pulso DENTRO de un comentario (más pequeño) */
  .com-pulso-btn {
    display: inline-flex; align-items: center; gap: 0.3rem;
    background: transparent; border: 1px solid rgba(255,255,255,0.1);
    color: var(--text-secondary); font-size: 0.8rem; font-weight: 600;
    padding: 0.25rem 0.6rem; border-radius: 6px; cursor: pointer;
    transition: all 0.2s ease; position: relative;
  }
  .com-pulso-btn .hud-icon { width: 14px; height: 14px; }
  /* Sistema de color del Pulso COMENTARIO (mecánica de RECARGA, distinta del Pulso noticia que es de GASTO):
     ámbar = "click para recompensa", cyan = "completado", gris = "no para ti". */
  .com-pulso-btn.is-idle {
    color: #d97706;
    border-color: rgba(245, 158, 11, 0.35);
    background: rgba(245, 158, 11, 0.05);
  }
  .com-pulso-btn.is-idle:hover {
    background: rgba(245, 158, 11, 0.12);
    border-color: rgba(245, 158, 11, 0.55);
  }
  .com-pulso-btn.is-reacted {
    color: #00f3ff; border-color: rgba(0,243,255,0.5);
    box-shadow: 0 0 8px rgba(0,243,255,0.2); cursor: default;
    background: rgba(0, 243, 255, 0.04);
  }
  .com-pulso-btn.is-locked {
    opacity: 0.5; border-style: dashed; cursor: not-allowed;
    color: #555;
  }
  /* is-own (tu propio comentario) — gris muerto, sin warm cue. El 🔒 + "Tuyo" hace el resto. */
  .com-pulso-btn.is-own {
    color: #555 !important;
    border: 1px dashed rgba(255, 255, 255, 0.1) !important;
    background: transparent !important;
    opacity: 0.4;
    cursor: not-allowed;
    box-shadow: none !important;
  }
  .com-pulso-btn.is-own .com-pulso-label { font-style: italic; }
  .com-pulso-btn.is-own .com-pulso-lock,
  .com-pulso-btn.is-own .hud-icon { color: #555; opacity: 0.7; }
  .com-pulso-lock { margin-left: 2px; opacity: 0.7; }
  /* Tooltip del botón pulso EN COMENTARIOS — ARRIBA del botón con fondo
     totalmente OPACO para garantizar legibilidad aunque se solape con
     contenido vecino (texto del comentario, botones de acción). */
  .com-pulso-btn { position: relative; }
  .com-pulso-btn[data-tooltip]:hover::after,
  .com-pulso-btn[data-tooltip]:focus-visible::after {
    content: attr(data-tooltip);
    position: absolute;
    bottom: calc(100% + 8px);
    left: 50%;
    transform: translateX(-50%);
    background: #050a12;
    color: #fff;
    font-size: 0.72rem; font-weight: 600;
    padding: 0.5rem 0.75rem;
    border-radius: 7px;
    white-space: nowrap;
    box-shadow: 0 6px 20px rgba(0,0,0,0.85), 0 0 0 1px rgba(0,212,255,0.30);
    pointer-events: none;
    z-index: 9999;
    /* Pequeña flechita debajo del tooltip apuntando al botón */
  }
  .com-pulso-btn[data-tooltip]:hover::before,
  .com-pulso-btn[data-tooltip]:focus-visible::before {
    content: '';
    position: absolute;
    bottom: calc(100% + 2px);
    left: 50%;
    transform: translateX(-50%);
    border: 6px solid transparent;
    border-top-color: #050a12;
    pointer-events: none;
    z-index: 9999;
  }
  /* Si el botón está cerca del borde derecho del comentario, el tooltip se
     desplaza para no salirse: en mobile se ancla al lado derecho del botón. */
  @media (max-width: 600px) {
    .com-pulso-btn[data-tooltip]:hover::after,
    .com-pulso-btn[data-tooltip]:focus-visible::after {
      left: auto; right: 0;
      transform: none;
    }
    .com-pulso-btn[data-tooltip]:hover::before,
    .com-pulso-btn[data-tooltip]:focus-visible::before { display: none; }
  }

  /* Wallet badge en header */
  .header-pulso-wallet {
    display: inline-flex; align-items: center; gap: 0.35rem;
    padding: 0.3rem 0.65rem;
    background: rgba(30, 144, 255, 0.08); border: 1px solid rgba(30, 144, 255, 0.25);
    border-radius: 999px; color: #1E90FF; font-weight: 700; font-size: 0.85rem;
    font-family: 'Share Tech Mono', monospace; cursor: default;
    transition: all 0.3s ease;
  }
  .header-pulso-wallet.is-full {
    color: #00f3ff; border-color: rgba(0, 243, 255, 0.4);
    box-shadow: 0 0 10px rgba(0, 243, 255, 0.15);
  }
  .header-pulso-wallet.flash {
    transform: scale(1.15);
    box-shadow: 0 0 18px rgba(0, 243, 255, 0.5);
  }
  .header-pulso-wallet svg { width: 14px; height: 14px; }
  /* 2026-05-09 (BOOM B2): wallet onboarding para deslogueados */
  .header-pulso-wallet-anon {
    background: linear-gradient(135deg, rgba(0,212,255,0.15), rgba(0,212,255,0.06));
    border-color: rgba(0,212,255,0.45);
    color: #00f0ff;
    text-decoration: none;
    cursor: pointer;
    position: relative;
  }
  /* 2026-05-10: glow vía pseudo-element (animar opacity en vez de box-shadow → compositable) */
  .header-pulso-wallet-anon::before {
    content: '';
    position: absolute; inset: 0;
    border-radius: inherit;
    box-shadow: 0 0 14px rgba(0,212,255,0.30);
    opacity: 0;
    pointer-events: none;
    animation: hpwa-glow 3s ease-in-out infinite;
  }
  .header-pulso-wallet-anon:hover {
    background: linear-gradient(135deg, rgba(0,212,255,0.25), rgba(0,212,255,0.10));
    transform: translateY(-1px);
    box-shadow: 0 4px 12px rgba(0,212,255,0.30);
  }
  .header-pulso-wallet-anon strong { color: #fff; font-weight: 800; }
  @keyframes hpwa-glow {
    0%, 100% { opacity: 0; }
    50%      { opacity: 1; }
  }
  @media (max-width: 600px) {
    .header-pulso-wallet-anon { padding: 0.25rem 0.5rem; font-size: 0.75rem; }
    .header-pulso-wallet-anon span { display: none; }
    .header-pulso-wallet-anon svg { width: 16px; height: 16px; }
  }

  /* --- Zone 2: Tabs --- */
  .gp-hud-tabs { display: flex; gap: 0.5rem; padding: 0.6rem 1.1rem; flex-wrap: wrap; }
  .gp-tab {
    padding: 6px 14px; font-size: 12px; font-weight: 700;
    border-radius: 8px; text-decoration: none;
    color: #aaa; border: 1px solid rgba(255,255,255,0.06);
    background: rgba(255,255,255,0.02); transition: all 0.2s ease;
    text-transform: uppercase; letter-spacing: 0.5px;
  }
  .gp-tab:hover { border-color: rgba(0,212,255,0.4); color: #fff; }
  .gp-tab.is-active {
    background: rgba(0,212,255,0.1); border-color: rgba(0,212,255,0.5);
    color: #00d4ff; box-shadow: 0 0 10px rgba(0,212,255,0.15);
  }

  /* --- Zone 3: Compose form --- */
  .gp-form { display: flex; flex-direction: column; gap: 0.6rem; }
  .gp-form-head { display: flex; align-items: center; gap: 10px; }
  .gp-form-avatar {
    width: 30px; height: 30px; border-radius: 50%; object-fit: cover;
    background: #000; display: flex; align-items: center; justify-content: center;
    border: 2px solid var(--glow, rgba(0,212,255,0.4));
    font-weight: 800; font-size: 13px; color: #fff;
  }
  .gp-form-nick { font-size: 13px; color: #cbd5e1; font-weight: 700; }
  .gp-form textarea {
    width: 100%; background: rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px; color: #fff; padding: 12px; font-size: 14px; resize: vertical;
    min-height: 80px; transition: all 0.2s ease; font-family: 'Inter', sans-serif;
    box-sizing: border-box;
  }
  .gp-form textarea:focus { outline: none; border-color: rgba(0,212,255,0.5); background: rgba(0,0,0,0.5); }
  .gp-form-foot { display: flex; justify-content: space-between; align-items: center; gap: 12px; }
  .gp-form-counter { color: var(--text-muted); font-size: 12px; font-family: 'Share Tech Mono', monospace; }
  .gp-form-send {
    background: linear-gradient(135deg, #00d4ff 0%, #0088ff 100%); color: #000;
    border: none; padding: 9px 20px; border-radius: 8px; font-weight: 800; cursor: pointer;
    transition: all 0.2s ease; text-transform: uppercase; letter-spacing: 1px; font-size: 12px;
    font-family: 'Inter', sans-serif;
  }
  .gp-form-send:hover { transform: translateY(-1px); box-shadow: 0 4px 14px rgba(0,212,255,0.35); }
  .gp-form-error {
    color: #ff8277; background: rgba(231,76,60,0.1); border: 1px solid rgba(231,76,60,0.3);
    padding: 8px 12px; border-radius: 8px; font-size: 13px;
  }

  /* --- Zone 3 (alt): Empty state --- */
  .gp-empty { text-align: center; padding: 1rem 0.5rem 0.4rem; }
  .gp-empty-icon { display: inline-flex; margin-bottom: 8px; color: #00d4ff; filter: drop-shadow(0 0 12px rgba(0, 212, 255, 0.4)); }
  .gp-empty-icon svg { width: 32px; height: 32px; }
  .gp-empty-title { font-family: 'Bebas Neue', sans-serif; font-size: 22px; letter-spacing: 1px; margin: 0 0 6px; color: #fff; }
  .gp-empty-text { margin: 0 0 14px; color: #aaa; font-size: 14px; }
  .gp-empty-cta {
    display: inline-block;
    background: linear-gradient(135deg, #00d4ff 0%, #0088ff 100%); color: #000;
    padding: 9px 18px; border-radius: 8px; font-weight: 800;
    text-decoration: none; font-size: 12px; text-transform: uppercase; letter-spacing: 1px;
    transition: all 0.2s ease;
  }
  .gp-empty-cta:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(0,212,255,0.4); }

  /* --- Zone 3 (alt): Login hint inline --- */
  .gp-login-hint { margin: 0; font-size: 14px; color: #aaa; text-align: center; padding: 0.4rem 0; }
  .gp-login-hint a { color: #00d4ff; text-decoration: none; font-weight: 700; }
  .gp-login-hint a:hover { text-decoration: underline; }

  /* --- Zone 4: Lista de comentarios --- */
  .gp-hud-list { list-style: none; padding: 0; margin: 0; }
  .gp-cmt {
    padding: 0.95rem 1.1rem;
    border-top: 1px solid rgba(255, 255, 255, 0.05);
  }
  .gp-cmt-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
  .gp-cmt-user { display: flex; align-items: center; gap: 12px; text-decoration: none; color: #fff; }

  /* Hex avatar — clip-path hexagonal con borde de color del nivel.
     ATENCIÓN: el clip-path NO va en el padre porque recortaría el marker
     que sobresale (la esquina con el emoji del nivel). Por eso el shape
     hexagonal va en un span hijo separado (.gp-cmt-hex-shape) y el padre
     queda como contenedor relative sin recorte → marker queda libre fuera. */
  .gp-cmt-hex {
    position: relative;
    width: 44px; height: 50px;
    flex-shrink: 0;
    transition: transform 0.2s ease, filter 0.2s ease;
  }
  .gp-cmt-hex-shape {
    /* Fondo de color del nivel actuando como "borde" hexagonal */
    position: absolute; inset: 0;
    background: var(--lvl-color, #888);
    clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
  }
  .gp-cmt-user:hover .gp-cmt-hex {
    transform: scale(1.08);
    filter: drop-shadow(0 0 8px var(--lvl-color, #888));
  }
  /* 2026-05-13: separamos img y letter — display:flex rompía el render del <img>.
     img necesita display:block + object-fit:cover. letter (span) sí flex para centrar. */
  .gp-cmt-hex-img,
  .gp-cmt-hex-letter {
    position: absolute; inset: 2px;
    width: calc(100% - 4px); height: calc(100% - 4px);
    clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
  }
  .gp-cmt-hex-img {
    display: block;
    object-fit: cover;
    background: linear-gradient(135deg, var(--lvl-color, #888), #1a1a1a);
  }
  .gp-cmt-hex-letter {
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(135deg, var(--lvl-color, #888), #1a1a1a);
    color: #fff; font-weight: 800; font-size: 16px; letter-spacing: 0.5px;
  }
  .gp-cmt-hex-marker {
    position: absolute;
    bottom: -3px; right: -5px;
    width: 22px; height: 22px;
    border-radius: 50%;
    background: #14181f;
    border: 2px solid var(--lvl-color, #888);
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 11px; line-height: 1;
    box-shadow: 0 0 6px var(--lvl-color, #888);
    z-index: 2;
  }
  .gp-cmt-hex-emoji { font-size: 11px; line-height: 1; }

  .gp-cmt-nick {
    font-weight: 700; font-size: 14px;
    display: inline-flex; flex-direction: column; gap: 1px; line-height: 1.2;
    transition: color 0.2s;
  }
  .gp-cmt-user:hover .gp-cmt-nick { color: #00d4ff; }
  .gp-cmt-rep {
    font-size: 10px; font-weight: 600;
    color: var(--lvl-color, #888); opacity: 0.85;
    text-transform: uppercase; letter-spacing: 0.5px;
  }

  /* Badges destacados — píldora compacta. Insignias Nexo 2.0 (2026-08-30):
     imagen real en vez de emoji+color por categoría, estilo único neutro. */
  .gp-cmt-badge {
    display: inline-flex; align-items: center; gap: 4px;
    padding: 2px 7px; border-radius: 999px;
    font-size: 11px; font-weight: 600; line-height: 1.4;
    white-space: nowrap; cursor: help;
    background: rgba(0,212,255,0.08); color: #9fb0c3; border: 1px solid rgba(0,212,255,0.20);
  }
  .gp-cmt-badge-emoji { display: block; border-radius: 50%; }
  .gp-cmt-badge-cyan   { background: rgba(0,212,255,0.10);  color: #7ee7ff; border: 1px solid rgba(0,212,255,0.25); }
  .gp-cmt-badge-green  { background: rgba(0,212,255,0.12);  color: #9ed992; border: 1px solid rgba(0,212,255,0.30); }
  .gp-cmt-badge-gold   { background: rgba(255,204,68,0.12); color: #ffd970; border: 1px solid rgba(255,204,68,0.30); }
  .gp-cmt-badge-purple { background: rgba(168,85,247,0.12); color: #c4a4fa; border: 1px solid rgba(168,85,247,0.30); }
  .gp-cmt-badge-orange { background: rgba(255,140,0,0.12);  color: #ffae5c; border: 1px solid rgba(255,140,0,0.30); }
  .gp-cmt-badge-red    { background: rgba(239,68,68,0.12);  color: #ff8b8b; border: 1px solid rgba(239,68,68,0.30); }

  @media (max-width: 600px) {
    .gp-cmt-head { gap: 6px; flex-wrap: wrap; }
    .gp-cmt-level-name { display: none; }
    .gp-cmt-level-rep::before { content: ''; margin-right: 0; }
    .gp-cmt-badge-name { display: none; }
    .gp-cmt-badge:nth-of-type(n+2) { display: none; }
  }

  .gp-cmt-time { font-size: 11px; color: #666; margin-left: auto; font-weight: 500; }
  .gp-cmt-body {
    margin-left: 56px; font-size: 14px; line-height: 1.55; color: #d0d0d0;
    margin-bottom: 8px;
    word-wrap: break-word;
  }
  .gp-cmt-foot { margin-left: 56px; display: flex; gap: 14px; align-items: center; }
  .gp-cmt-foot .com-pulso-btn { padding: 0.35rem 0.75rem; font-size: 0.8rem; font-weight: 700; }
  .gp-cmt-foot .com-pulso-btn .com-pulso-label { opacity: 0.8; font-weight: 600; }
  .com-reply {
    background: none; border: none; color: #00d4ff; font-weight: 700; font-size: 11px;
    cursor: pointer; text-transform: uppercase; letter-spacing: 0.5px;
    opacity: 0.7; transition: 0.2s; padding: 2px 0;
    display: inline-flex; align-items: center;
  }
  .com-reply:hover { opacity: 1; }

  .gp-cmt-children {
    list-style: none; padding-left: 24px; margin-top: 12px;
    border-left: 2px solid rgba(0,212,255,0.15);
  }
  .gp-cmt-children .gp-cmt { padding: 0.85rem 0 0.4rem; border-top: 0; }

  /* E2 — comentario eliminado: muted en todo, sin acciones, mantiene posición. */
  .gp-cmt.is-deleted { opacity: 0.5; }
  .gp-cmt.is-deleted .gp-cmt-hex,
  .gp-cmt.is-deleted .gp-cmt-nick { filter: grayscale(0.6); }
  .gp-cmt-deleted-text {
    color: #888; font-style: italic; font-size: 13px;
  }
  .gp-cmt-foot-deleted .gp-cmt-deleted-meta {
    font-size: 11px; color: #666; letter-spacing: 0.3px; text-transform: uppercase;
  }
  /* Badge "(editado)" — ligero, no roba protagonismo del contenido */
  .gp-cmt-edited {
    margin-left: 6px; font-size: 11px; color: #888;
    font-style: italic; cursor: help; user-select: none;
  }
  /* Acciones del autor sobre su comentario */
  .com-edit, .com-delete {
    background: none; border: none; cursor: pointer; padding: 2px 0;
    font-size: 11px; font-weight: 700; letter-spacing: 0.5px;
    text-transform: uppercase; opacity: 0.65; transition: opacity 0.2s ease, color 0.2s ease;
  }
  .com-edit { color: #00d4ff; }
  .com-edit:hover { opacity: 1; color: #aff5ff; }
  .com-delete { color: #ff8b8b; }
  .com-delete:hover { opacity: 1; color: #ff6b6b; }
  /* Inline edit textarea reemplaza el body cuando edit está activo */
  .gp-cmt-edit-form {
    margin: 4px 0 8px;
  }
  .gp-cmt-edit-form textarea {
    width: 100%; min-height: 60px; padding: 8px 10px;
    background: rgba(0,0,0,0.3); color: #f0f0f0;
    border: 1px solid rgba(0,212,255,0.35); border-radius: 8px;
    font-size: 14px; line-height: 1.5; font-family: inherit;
    resize: vertical;
  }
  .gp-cmt-edit-form textarea:focus { outline: none; border-color: var(--cyan-accent, #00d4ff); }
  .gp-cmt-edit-form .gp-cmt-edit-actions {
    display: flex; gap: 8px; margin-top: 6px;
  }
  .gp-cmt-edit-form .com-edit-save,
  .gp-cmt-edit-form .com-edit-cancel {
    padding: 6px 14px; border-radius: 6px; font-size: 12px; font-weight: 700;
    cursor: pointer; border: none;
  }
  .gp-cmt-edit-form .com-edit-save { background: var(--cyan-accent, #00d4ff); color: #0a0e16; }
  .gp-cmt-edit-form .com-edit-cancel { background: rgba(255,255,255,0.08); color: #ccc; }

  /* Comentario top-pulsado: cyan glow + badge esquina */
  .gp-cmt.is-top {
    background: linear-gradient(135deg, rgba(0, 243, 255, 0.06), rgba(0, 243, 255, 0.0));
    box-shadow: inset 3px 0 0 rgba(0, 243, 255, 0.6), 0 0 18px rgba(0, 243, 255, 0.08);
    position: relative;
  }
  /* TOP badge: inline en el header (entre badges y time) — antes era absolute
     top-right pero pisaba el timestamp. Ahora va en flujo, no se solapa nunca. */
  .gp-cmt-top-badge {
    display: inline-flex; align-items: center;
    font-size: 9px; font-weight: 800; letter-spacing: 1px;
    color: #00f3ff; padding: 2px 8px; border-radius: 999px;
    background: rgba(0, 243, 255, 0.1);
    border: 1px solid rgba(0, 243, 255, 0.4);
    text-transform: uppercase;
    text-shadow: 0 0 4px rgba(0, 243, 255, 0.5);
    line-height: 1.4;
    flex-shrink: 0;
  }

  /* Reply form inline (cuando alguien clica "Responder") */
  .com-reply-form {
    margin: 12px 0 0 42px;
    background: rgba(0, 212, 255, 0.04);
    border: 1px solid rgba(0, 212, 255, 0.2);
    border-radius: 10px;
    padding: 12px;
    display: flex; flex-direction: column; gap: 8px;
  }
  .com-reply-form textarea {
    width: 100%; box-sizing: border-box;
    background: rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.08);
    border-radius: 8px; color: #fff; padding: 10px; font-size: 13px;
    resize: vertical; min-height: 70px; font-family: 'Inter', sans-serif;
  }
  .com-reply-form textarea:focus { outline: none; border-color: rgba(0,212,255,0.5); }
  .com-reply-form-foot { display: flex; justify-content: flex-end; gap: 8px; }
  .com-reply-cancel {
    background: none; border: 1px solid rgba(255,255,255,0.1); color: #aaa;
    padding: 7px 14px; border-radius: 7px; cursor: pointer;
    font-size: 12px; font-weight: 600; font-family: 'Inter', sans-serif;
  }
  .com-reply-cancel:hover { color: #fff; border-color: rgba(255,255,255,0.25); }
  .com-reply-send {
    background: linear-gradient(135deg, #00d4ff 0%, #0088ff 100%); color: #000;
    border: none; padding: 7px 16px; border-radius: 7px; font-weight: 800;
    cursor: pointer; text-transform: uppercase; letter-spacing: 0.5px; font-size: 11px;
    font-family: 'Inter', sans-serif;
  }
  .com-reply-send:hover { transform: translateY(-1px); box-shadow: 0 4px 14px rgba(0,212,255,0.35); }
  .com-form-error {
    color: #ff8277; background: rgba(231,76,60,0.1); border: 1px solid rgba(231,76,60,0.3);
    padding: 6px 10px; border-radius: 6px; font-size: 12px;
  }
  @media (max-width: 600px) {
    .com-reply-form { margin-left: 0; }
  }

  /* Mención @nick — link cyan inline */
  .cmt-mention {
    color: #00d4ff; text-decoration: none; font-weight: 700;
    background: rgba(0, 212, 255, 0.08); padding: 0 4px; border-radius: 4px;
    transition: all 0.2s ease;
  }
  .cmt-mention:hover {
    background: rgba(0, 212, 255, 0.18); color: #00f3ff;
    text-shadow: 0 0 6px rgba(0, 243, 255, 0.4);
  }

  @media (max-width: 600px) {
    .gp-hud-row { padding: 0.7rem 0.85rem; }
    .gp-hud-tabs { padding: 0.5rem 0.85rem; }
    .gp-cmt { padding: 0.85rem; }
    .gp-cmt-body, .gp-cmt-foot { margin-left: 0; }
    .gp-cmt-children { padding-left: 12px; }
  }

  /* Breadcrumb visual en noticia (B6 2026-05-07) — UX + SEO (Google lo
     muestra en SERP cuando lee el JSON-LD BreadcrumbList que ya tenemos). */
  .news-breadcrumb {
    font-size: 12px;
    color: var(--text-secondary, #888);
    margin-bottom: var(--space-3);
    letter-spacing: 0.3px;
    line-height: 1.6;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
  }
  .news-breadcrumb a {
    color: var(--text-secondary, #888);
    text-decoration: none;
    transition: color 0.2s ease;
  }
  .news-breadcrumb a:hover {
    color: var(--cyan-accent, #00d4ff);
    text-decoration: underline;
  }
  .news-breadcrumb-sep {
    color: rgba(255,255,255,0.25);
    font-size: 14px;
    line-height: 1;
  }
  .news-breadcrumb-current {
    color: #ddd;
    font-weight: 600;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  @media (max-width: 600px) {
    .news-breadcrumb { font-size: 11px; }
    .news-breadcrumb-current { display: none; } /* en mobile el título ya está en h1 abajo */
  }

  /* ============================================================
     F6.2 — AUTO-LINK + CTA AFILIADO en artículos de noticia.
     Auto-link: máx 3 keywords linkeadas con borde inferior cyan
     punteado para distinguir de links editoriales sin parecer ads.
     CTA al final: bloque glassmorphism con producto + precio + botón
     a /go/{codigo}. Solo si la noticia menciona producto detectable.
     ============================================================ */
  .news-article-affiliate-link {
    color: #aff5ff;
    text-decoration: none;
    border-bottom: 1px dotted rgba(0, 212, 255, 0.55);
    transition: color 0.2s ease, border-bottom-color 0.2s ease, background 0.2s ease;
    padding: 0 1px;
  }
  .news-article-affiliate-link:hover {
    color: #fff;
    border-bottom-color: #00d4ff;
    background: rgba(0, 212, 255, 0.08);
  }

  .cta-afiliado {
    margin: var(--space-5) 0 var(--space-4);
    padding: 18px 20px;
    background:
      linear-gradient(135deg, rgba(0,212,255,0.08), rgba(0,212,255,0.04)),
      rgba(20, 22, 28, 0.8);
    border: 1px solid rgba(0, 212, 255, 0.32);
    border-radius: 14px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.35), 0 0 24px rgba(0, 212, 255, 0.10);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .cta-afiliado-eyebrow {
    display: flex; align-items: center; gap: 8px;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 14px; letter-spacing: 1.6px;
    color: #aff5ff;
    text-shadow: 0 0 10px rgba(0, 212, 255, 0.4);
    line-height: 1;
  }
  .cta-aff-icon { font-size: 16px; filter: drop-shadow(0 0 4px rgba(0,212,255,0.7)); }
  .cta-aff-pct {
    margin-left: auto;
    background: rgba(82, 176, 67, 0.18);
    color: #b5f1a4;
    border: 1px solid rgba(82, 176, 67, 0.4);
    padding: 3px 10px;
    border-radius: 999px;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 13px; letter-spacing: 1px;
    box-shadow: 0 0 10px rgba(82, 176, 67, 0.18);
  }
  .cta-afiliado-body {
    display: flex; flex-direction: column; gap: 2px;
  }
  .cta-afiliado-titulo {
    font-size: 16px; font-weight: 700; line-height: 1.3; color: #fff;
    word-break: break-word;
  }
  .cta-afiliado-tienda {
    font-size: 12px; color: var(--text-secondary, #bbb);
    text-transform: uppercase; letter-spacing: 0.8px;
  }
  .cta-afiliado-tienda strong { color: #00d4ff; font-weight: 700; }
  .cta-afiliado-foot {
    display: flex; align-items: center; justify-content: space-between;
    gap: 14px; flex-wrap: wrap;
    border-top: 1px solid rgba(255,255,255,0.06);
    padding-top: 12px; margin-top: 4px;
  }
  .cta-afiliado-precios { display: inline-flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
  .cta-afiliado-precio {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 30px; letter-spacing: 0.5px;
    color: #fff;
    text-shadow: 0 0 14px rgba(0, 212, 255, 0.45);
  }
  .cta-aff-original {
    color: #888; font-size: 14px; font-weight: 500;
    text-decoration: line-through; text-decoration-color: rgba(255,255,255,0.4);
  }
  /* 2026-05-22: doble selector + !important para vencer la especificidad de
     .news-article-body a (que aplica color cyan + border-bottom a TODOS los
     links del cuerpo y dejaba este botón cyan-sobre-cyan ilegible). */
  .cta-afiliado-btn,
  .news-article-body a.cta-afiliado-btn,
  .article-body-content a.cta-afiliado-btn {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 10px 22px;
    background: linear-gradient(135deg, #00d4ff, #00a8ff);
    color: #0a0e16 !important;
    font-weight: 800; font-size: 14px;
    letter-spacing: 0.5px;
    border-radius: 999px;
    text-decoration: none !important;
    border-bottom: none !important;
    transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;
    box-shadow: 0 6px 18px rgba(0, 212, 255, 0.4);
    text-shadow: none !important;
  }
  .cta-afiliado-btn:hover,
  .news-article-body a.cta-afiliado-btn:hover,
  .article-body-content a.cta-afiliado-btn:hover {
    color: #0a0e16 !important;
    transform: translateY(-2px);
    box-shadow: 0 10px 28px rgba(0, 212, 255, 0.55);
    filter: brightness(1.08);
    text-shadow: none !important;
  }
  .cta-afiliado-disclaimer {
    font-size: 11px; color: var(--text-muted, #777);
    line-height: 1.4; margin: 0;
    border-top: 1px dashed rgba(255,255,255,0.05);
    padding-top: 8px;
  }

  @media (max-width: 600px) {
    .cta-afiliado { padding: 14px 16px; }
    .cta-afiliado-titulo { font-size: 15px; }
    .cta-afiliado-precio { font-size: 26px; }
    .cta-afiliado-btn { padding: 9px 18px; font-size: 13px; flex: 1; justify-content: center; }
  }

  /* Tier 2.2 (2026-05-12) — CTA inline para JUEGO mencionado en noticia.
     Más compacto que cta-afiliado (vive en mitad del cuerpo, no debe ser
     intrusivo). Layout horizontal con imagen del juego. */
  .cta-juego {
    margin: var(--space-5) 0;
    padding: 14px 16px;
    background:
      linear-gradient(135deg, rgba(0,212,255,0.06), rgba(82,176,67,0.04)),
      rgba(20, 22, 28, 0.85);
    border: 1px solid rgba(0, 212, 255, 0.22);
    border-radius: 12px;
    box-shadow: 0 6px 18px rgba(0,0,0,0.25);
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .cta-juego-tag {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 13px; letter-spacing: 1.4px;
    color: #aff5ff;
    text-shadow: 0 0 8px rgba(0, 212, 255, 0.4);
    line-height: 1;
  }
  .cta-juego-body {
    display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  }
  .cta-juego-img {
    width: 80px; height: 80px; flex-shrink: 0;
    object-fit: cover; border-radius: 8px;
    border: 1px solid rgba(255,255,255,0.08);
    background: #0a0e16;
  }
  .cta-juego-info {
    flex: 1; min-width: 180px;
    display: flex; flex-direction: column; gap: 6px;
  }
  .cta-juego-titulo {
    font-family: 'Barlow Condensed', sans-serif;
    font-weight: 700; font-size: 17px; line-height: 1.2;
    color: #fff;
    overflow-wrap: break-word; word-wrap: break-word;
  }
  .cta-juego-meta {
    display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
    font-size: 13px;
  }
  .cta-juego-precio {
    font-family: 'Bebas Neue', sans-serif;
    font-size: 22px; letter-spacing: 0.4px;
    color: #fff;
    text-shadow: 0 0 10px rgba(0, 212, 255, 0.4);
  }
  .cta-juego-tachado {
    color: #888; text-decoration: line-through;
    text-decoration-color: rgba(255,255,255,0.4);
    font-size: 13px;
  }
  .cta-juego-descuento {
    background: rgba(82, 176, 67, 0.18);
    color: #b5f1a4;
    border: 1px solid rgba(82, 176, 67, 0.4);
    padding: 2px 8px;
    border-radius: 999px;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 12px; letter-spacing: 0.8px;
  }
  .cta-juego-tienda {
    color: var(--text-muted, #888);
    text-transform: uppercase;
    letter-spacing: 0.8px;
    font-size: 11px;
    margin-left: auto;
  }
  /* 2026-05-22: mismo fix anti-cyan-sobre-cyan que .cta-afiliado-btn */
  .cta-juego-btn,
  .news-article-body a.cta-juego-btn,
  .article-body-content a.cta-juego-btn {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 10px 20px;
    background: linear-gradient(135deg, #00d4ff, #00a8ff);
    color: #0a0e16 !important;
    font-weight: 800; font-size: 13px;
    letter-spacing: 0.5px;
    border-radius: 999px;
    text-decoration: none !important;
    border-bottom: none !important;
    transition: transform 0.2s ease, box-shadow 0.2s ease, filter 0.2s ease;
    box-shadow: 0 4px 14px rgba(0, 212, 255, 0.35);
    flex-shrink: 0;
    text-shadow: none !important;
  }
  .cta-juego-btn:hover,
  .news-article-body a.cta-juego-btn:hover,
  .article-body-content a.cta-juego-btn:hover {
    color: #0a0e16 !important;
    transform: translateY(-2px);
    box-shadow: 0 8px 22px rgba(0, 212, 255, 0.5);
    filter: brightness(1.08);
    text-shadow: none !important;
  }
  .cta-juego-disclaimer {
    font-size: 10.5px; color: var(--text-muted, #777);
    line-height: 1.4; margin: 0;
    border-top: 1px dashed rgba(255,255,255,0.05);
    padding-top: 7px;
  }
  @media (max-width: 600px) {
    .cta-juego { padding: 12px 14px; }
    .cta-juego-img { width: 64px; height: 64px; }
    .cta-juego-titulo { font-size: 15px; }
    .cta-juego-precio { font-size: 19px; }
    .cta-juego-tienda { width: 100%; margin-left: 0; margin-top: 2px; }
    .cta-juego-btn { width: 100%; justify-content: center; padding: 9px 18px; }
  }

  /* ─── Convo Stripe (2026-05-18) ─────────────────────────────────────────────
     Widget horizontal de "EN CONVERSACIÓN AHORA" en el Nexo. Sale entre HOY y
     AYER. Cada card = comentario reciente con pulso optimista + reply inline.
     Diseño: glass card cyan accent, grid 4 cols desktop / scroll-snap mobile. */
  .convo-stripe {
    grid-column: 1 / -1;
    margin: var(--space-4) 0;
    padding: var(--space-4);
    background: linear-gradient(180deg, rgba(0,212,255,0.04) 0%, rgba(0,212,255,0.01) 100%);
    border: 1px solid rgba(0,212,255,0.12);
    border-radius: 16px;
    position: relative;
    box-sizing: border-box;
    /* min-width:0 crítico: sin esto, los hijos con contenido largo (snippets de
       comentarios) fuerzan ancho mayor que el grid-track padre → desborda. */
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
  }
  .convo-stripe::before {
    content: ''; position: absolute; inset: 0; border-radius: 16px;
    background: radial-gradient(80% 60% at 50% 0%, rgba(0,212,255,0.06) 0%, transparent 70%);
    pointer-events: none; z-index: 0;
  }
  .convo-stripe > * { position: relative; z-index: 1; }
  .convo-stripe-header {
    display: flex; align-items: center; justify-content: space-between;
    gap: 12px; margin-bottom: var(--space-3);
    flex-wrap: wrap;
  }
  .convo-stripe-eyebrow {
    display: inline-flex; align-items: center; gap: 8px;
    font-family: 'Bebas Neue', sans-serif;
    font-size: 16px; letter-spacing: 1.5px;
    color: var(--cyan-accent);
    text-transform: uppercase;
  }
  .convo-stripe-dot {
    width: 8px; height: 8px; border-radius: 50%;
    background: var(--cyan-accent);
    box-shadow: 0 0 8px rgba(0,212,255,0.7);
    animation: convo-dot-pulse 1.6s ease-in-out infinite;
  }
  @keyframes convo-dot-pulse {
    0%, 100% { opacity: 0.5; transform: scale(0.85); }
    50%      { opacity: 1;   transform: scale(1.15); box-shadow: 0 0 14px rgba(0,212,255,1); }
  }
  .convo-stripe-more {
    font-size: 12px; font-weight: 600; color: var(--text-secondary);
    text-decoration: none; letter-spacing: 0.3px;
    transition: color 0.15s ease;
  }
  .convo-stripe-more:hover { color: var(--cyan-accent); }

  /* 3 columnas como máximo: con 4 cols los botones se cortaban (≈250px de ancho
     por card no caben pulso+responder+ver hilo en una fila). Con 3 cols cada
     card tiene ~330px y todo respira. */
  .convo-track {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space-3);
    min-width: 0;
  }
  @media (max-width: 1100px) {
    .convo-track { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }
  /* Mobile: scroll horizontal con snap dentro del propio widget. CRÍTICO no
     usar margin negativo: provocaba scroll horizontal en el body entero. */
  @media (max-width: 768px) {
    .convo-track {
      display: flex;
      grid-template-columns: none;
      overflow-x: auto;
      scroll-snap-type: x mandatory;
      gap: 10px;
      padding-bottom: 4px;
      scrollbar-width: thin;
      scrollbar-color: rgba(0,212,255,0.3) transparent;
      -webkit-overflow-scrolling: touch;
    }
    .convo-track::-webkit-scrollbar { height: 6px; }
    .convo-track::-webkit-scrollbar-track { background: transparent; }
    .convo-track::-webkit-scrollbar-thumb { background: rgba(0,212,255,0.3); border-radius: 3px; }
    .convo-card {
      flex: 0 0 82%;
      max-width: 320px;
      scroll-snap-align: start;
    }
  }

  .convo-card {
    background: var(--news-glass-bg, rgba(20,28,42,0.7));
    border: 1px solid var(--news-glass-border, rgba(255,255,255,0.06));
    border-radius: 12px;
    /* Padding asimétrico extremo: holgado arriba/laterales, casi cero abajo
       para que los botones queden pegados al borde inferior del card. */
    padding: 12px 12px 0;
    display: flex;
    flex-direction: column;
    gap: 8px;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease;
    /* min-width:0 + overflow:hidden = grid item shrinkeable. Sin esto, contenido
       largo (snippets) fuerza el card más ancho que su grid track 1fr y el widget
       desborda hacia la derecha. */
    min-width: 0;
    overflow: hidden;
    box-sizing: border-box;
  }
  .convo-card:hover {
    transform: translateY(-2px);
    border-color: rgba(0,212,255,0.25);
    box-shadow: 0 8px 24px rgba(0,212,255,0.08);
  }

  /* Header en UNA línea: [avatar] @nick · Hace 1 día. Avatar 32px en vez de 36
     elimina el hueco vertical al lado del avatar (antes nick+tiempo iban en
     columna y dejaban ~16px sin usar). */
  .convo-card-head {
    display: flex; align-items: center; gap: 8px;
    min-width: 0;
  }
  .convo-card-nick {
    color: #fff; font-weight: 700; font-size: 13px;
    text-decoration: none; line-height: 1.2;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    transition: color 0.15s ease;
    min-width: 0;
    flex-shrink: 1;
  }
  .convo-card-nick:hover { color: var(--cyan-accent); }
  .convo-card-tu {
    display: inline-block; margin-left: 4px;
    background: rgba(0,212,255,0.15); color: var(--cyan-accent);
    font-size: 9px; font-weight: 800; letter-spacing: 0.6px;
    padding: 2px 5px; border-radius: 4px; vertical-align: middle;
  }
  .convo-card-sep {
    color: var(--text-muted, #666); font-size: 13px; line-height: 1;
    flex-shrink: 0;
  }
  .convo-card-time {
    font-size: 11px; color: var(--text-muted, #888); line-height: 1;
    flex-shrink: 0;
    white-space: nowrap;
  }

  .convo-card-body {
    text-decoration: none; color: inherit;
    display: flex; flex-direction: column; gap: 4px;
    padding: 0;
    /* flex:1 crítico: hace que el body crezca para llenar el espacio sobrante.
       Con esto el footer .convo-card-actions queda SIEMPRE pegado al fondo del
       card, no a media altura. Combinado con grid align-items:stretch (default)
       las cards de una misma fila tienen la misma altura. */
    flex: 1;
    min-height: 0;
  }
  .convo-card-body:hover .convo-card-snippet { color: #fff; }
  /* Snippet como CITA: blockquote semántico + barra cyan a la izquierda.
     Reset de margin default del browser (40px). Texto más grande y blanco
     puro para convertir el comentario en protagonista del card. */
  .convo-card-snippet {
    color: #f0f0f0;
    font-size: 14px; line-height: 1.45;
    margin: 0;
    padding: 2px 0 2px 10px;
    border-left: 3px solid rgba(0,212,255,0.45);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    transition: color 0.15s ease, border-color 0.15s ease;
    word-break: break-word;
  }
  .convo-card-body:hover .convo-card-snippet { border-left-color: var(--cyan-accent, #00d4ff); }

  /* Noticia ref como CHIP — fondo glass cyan tenue + icono periódico delante. */
  .convo-card-noticia {
    display: inline-flex; align-items: center; gap: 6px;
    align-self: flex-start;
    max-width: 100%;
    font-size: 11px;
    color: var(--text-secondary, #aaa);
    background: rgba(0,212,255,0.05);
    border: 1px solid rgba(0,212,255,0.14);
    padding: 4px 8px;
    border-radius: 4px;
    transition: border-color 0.15s ease, background 0.15s ease;
    min-width: 0;
  }
  .convo-card-body:hover .convo-card-noticia {
    border-color: rgba(0,212,255,0.35);
    background: rgba(0,212,255,0.08);
  }
  .convo-card-noticia-icon {
    color: var(--cyan-accent, #00d4ff);
    flex-shrink: 0;
  }
  .convo-card-noticia em {
    font-style: normal;
    color: #ddd;
    font-weight: 600;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    min-width: 0;
  }

  /* Acciones: una sola fila, sin wrap. Pulso + Responder a la izda (primarios),
     "Ver hilo →" a la dcha como link de texto (margin-left:auto entre los dos
     grupos, no en un único hijo, así no fuerza wrap).
     margin-top:auto empuja el footer al fondo del card SIEMPRE — combinado con
     flex:1 del body, todas las cards alinean su footer a la misma altura.
     Sin border-top: el footer queda integrado con el card como unidad visual. */
  .convo-card-actions {
    display: flex; align-items: center; gap: 6px;
    flex-wrap: nowrap;
    /* margin-top:auto empuja al fondo. padding-top genera respiro arriba.
       padding-bottom mínimo para que los botones rocen el borde inferior. */
    margin-top: auto;
    padding: 14px 0 4px;
    min-width: 0;
  }
  /* Ghost buttons estilo Twitter/X: sin border, fondo transparente, hover sutil
     en círculo. Los tres botones (Pulso/Responder/Ver hilo) comparten la
     MISMA forma → equilibrio visual, jerarquía igualitaria. Diferenciación
     solo por contenido (icono+texto vs icono+contador). */
  .convo-btn {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: 12px; font-weight: 600;
    padding: 6px 10px; border-radius: 999px;
    cursor: pointer; text-decoration: none;
    background: transparent;
    color: var(--text-muted, #888);
    border: none;
    transition: background 0.15s ease, color 0.15s ease;
    font-family: inherit;
    line-height: 1;
    white-space: nowrap;
    flex-shrink: 0;
  }
  .convo-btn:hover {
    background: rgba(0,212,255,0.10);
    color: var(--cyan-accent, #00d4ff);
  }
  .convo-btn:disabled {
    opacity: 0.5; cursor: not-allowed;
  }
  .convo-btn:disabled:hover {
    background: transparent;
    color: var(--text-muted, #888);
  }
  .convo-btn-pulso.is-active {
    background: rgba(0,212,255,0.12);
    color: var(--cyan-accent);
  }
  .convo-btn-pulso svg { width: 13px; height: 13px; }
  /* Span del contador: SIEMPRE en DOM (lo necesita el JS para bumpear optimista).
     Si textContent vacío (count=0 SSR) → :empty lo oculta y el botón solo
     muestra el icono. En cuanto JS o SSR pone un número, se ve.
     Con count>=1, además, el contador adquiere glow cyan sutil (social proof). */
  .convo-btn-pulso [data-pulso-cnt]:empty { display: none; }
  .convo-btn-pulso [data-pulso-cnt]:not(:empty) {
    color: var(--cyan-accent, #00d4ff);
    font-weight: 700;
    font-size: 12px;
  }
  .convo-btn-resp svg { width: 13px; height: 13px; }

  /* Ver hilo: mismo aspecto ghost que los otros, alineado a la derecha. NO usa
     cyan permanente — solo en hover, igual que Pulso/Responder. Así no roba
     protagonismo a las acciones primarias. */
  .convo-btn-link {
    margin-left: auto;
    font-size: 11px;
    gap: 4px;
  }
  .convo-btn-link::after {
    content: '→';
    transition: transform 0.15s ease;
  }
  .convo-btn-link:hover::after {
    transform: translateX(2px);
  }
  .convo-btn-anon {
    flex: 1; justify-content: center;
    background: rgba(0,212,255,0.08); border-color: rgba(0,212,255,0.25);
    color: var(--cyan-accent);
    font-size: 11px;
  }
  .convo-card-own-hint {
    font-size: 11px; color: var(--text-muted, #888);
    font-style: italic; flex: 1;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  /* Ya no es necesario ocultar el texto "Responder" porque la grid es 3-cols
     máximo (cards de ~330px) y todo cabe holgado en una fila. */
  .convo-card.is-own {
    border-color: rgba(0,212,255,0.15);
    background: linear-gradient(180deg, rgba(0,212,255,0.04) 0%, var(--news-glass-bg, rgba(20,28,42,0.7)) 60%);
  }

  /* Form de respuesta inline */
  .convo-resp-form {
    margin-top: 4px;
    background: rgba(0,0,0,0.25);
    border: 1px solid rgba(0,212,255,0.18);
    border-radius: 8px;
    padding: 8px;
    display: flex; flex-direction: column; gap: 6px;
  }
  .convo-resp-form[hidden] { display: none; }
  .convo-resp-form textarea {
    width: 100%; min-height: 60px; max-height: 200px;
    background: rgba(0,0,0,0.4); color: #fff;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 6px; padding: 8px;
    font-family: inherit; font-size: 13px; line-height: 1.4;
    resize: vertical;
    transition: border-color 0.15s ease;
  }
  .convo-resp-form textarea:focus {
    outline: none; border-color: var(--cyan-accent);
  }
  .convo-resp-foot {
    display: flex; align-items: center; gap: 6px;
    flex-wrap: wrap;
  }
  .convo-resp-info {
    font-size: 11px; color: var(--text-muted, #888);
    flex: 1; min-width: 0;
  }
  .convo-resp-cancel, .convo-resp-send {
    font-size: 12px; font-weight: 600; font-family: inherit;
    padding: 5px 12px; border-radius: 6px; cursor: pointer;
    border: 1px solid transparent; line-height: 1;
  }
  .convo-resp-cancel {
    background: transparent; color: var(--text-secondary, #aaa);
    border-color: rgba(255,255,255,0.1);
  }
  .convo-resp-cancel:hover { color: #fff; border-color: rgba(255,255,255,0.2); }
  .convo-resp-send {
    background: var(--cyan-accent); color: #001722;
  }
  .convo-resp-send:hover { filter: brightness(1.1); }
  .convo-resp-send:disabled { opacity: 0.5; cursor: wait; }

  /* Banner success que reemplaza el form tras enviar respuesta */
  .convo-resp-success {
    display: flex; align-items: center; justify-content: space-between;
    gap: 10px;
    margin-top: 4px;
    padding: 8px 12px;
    background: rgba(72,200,127,0.10);
    border: 1px solid rgba(72,200,127,0.35);
    border-radius: 8px;
    font-size: 12px;
    color: #9ae085;
    flex-wrap: wrap;
  }
  .convo-resp-success a {
    color: var(--cyan-accent); text-decoration: none; font-weight: 700;
  }
  .convo-resp-success a:hover { text-decoration: underline; }

  @media (prefers-reduced-motion: reduce) {
    .convo-card { transition: none; }
    .convo-card:hover { transform: none; }
    .convo-stripe-dot { animation: none; opacity: 1; }
  }

  /* ────────────────────────────────────────────────────────────
     Tweet card (embed Twitter/X fallback HTML, sin widgets.js)
     2026-05-23 — antes el blockquote crudo se veía pelado:
     "cita... pic.twitter.com/XXX May 22, 2026" todo seguido,
     sin handle, sin logo, sin jerarquía. Ahora embellecer_tweet_html()
     lo envuelve en figure.gp-tweet-card con header+body+footer.
     ──────────────────────────────────────────────────────────── */
  /* Reset agresivo de hijos: page-head.php tiene `footer { margin-top:64px;
     padding:32px; border-top:1px solid }` global que pisaba .gp-tweet-foot
     y metia espacios enormes. Aqui los anulamos sin tocar el footer global. */
  .gp-tweet-card,
  .gp-tweet-card header,
  .gp-tweet-card footer,
  .gp-tweet-card figure,
  .gp-tweet-card blockquote {
    margin: 0 !important;
    padding: 0 !important;
    border-top: 0 !important;
    background: transparent !important;
  }
  /* Y volvemos a aplicar SOLO las reglas que queremos (de fuera del reset). */
  .gp-tweet-card {
    margin: 28px auto !important;
    background: linear-gradient(165deg, rgba(0, 212, 255, 0.04) 0%, rgba(20, 22, 30, 0.7) 100%) !important;
    border: 1px solid rgba(255, 255, 255, 0.10);
    border-left: 3px solid var(--cyan-accent, #00d4ff);
    border-radius: 12px;
    overflow: hidden;
    /* 2026-05-23: ancho tipo X (~600px) para no parecer banner gigante.
       En articulos anchos (1100px+) la card queda centrada con respiracion. */
    max-width: 580px;
  }
  .gp-tweet-card .gp-tweet-head {
    display: flex; align-items: center;
    padding: 10px 22px !important;
    border-bottom: 1px solid rgba(0, 212, 255, 0.14) !important;
  }
  .gp-tweet-head--rich { justify-content: space-between; }
  .gp-tweet-handle {
    display: inline-flex; align-items: center; gap: 8px;
    color: #fff !important;
    text-decoration: none !important;
    border-bottom: none !important;
    font-weight: 700;
    font-size: 14px;
    transition: color 0.15s ease;
  }
  .gp-tweet-handle:hover { color: var(--cyan-accent, #00d4ff) !important; }
  .gp-tweet-x {
    display: inline-flex; align-items: center; justify-content: center;
    width: 26px; height: 26px;
    background: #000;
    color: #fff;
    border-radius: 6px;
    flex-shrink: 0;
  }
  .gp-tweet-head--rich .gp-tweet-x {
    width: 22px; height: 22px;
    background: transparent;
    color: var(--text-muted, #7e8695);
  }
  .gp-tweet-handle-txt { letter-spacing: 0.2px; }

  /* Header enriquecido con avatar real + nombre + handle (cuando fxtwitter responde). */
  .gp-tweet-author {
    display: inline-flex; align-items: center; gap: 10px;
    color: #fff !important;
    text-decoration: none !important;
    border-bottom: none !important;
    transition: opacity 0.15s ease;
    min-width: 0;
  }
  .gp-tweet-author:hover { opacity: 0.85; }
  .gp-tweet-avatar {
    width: 44px; height: 44px;
    border-radius: 50%;
    object-fit: cover;
    background: var(--bg-surface, #1f2433);
    flex-shrink: 0;
    border: 1px solid rgba(255, 255, 255, 0.08);
  }
  .gp-tweet-author-info {
    display: flex; flex-direction: column;
    line-height: 1.2;
    min-width: 0;
  }
  .gp-tweet-name {
    color: #fff;
    font-weight: 800;
    font-size: 14.5px;
    letter-spacing: 0.1px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .gp-tweet-head--rich .gp-tweet-handle-txt {
    color: var(--text-secondary, #9aa3b2);
    font-weight: 500;
    font-size: 12.5px;
    margin-top: 1px;
  }

  .gp-tweet-card .gp-tweet-body {
    margin: 0 !important;
    padding: 12px 22px !important;
    font-size: 15.5px;
    line-height: 1.55;
    color: #e6e9ef;
    font-style: normal;
    border-left: none !important; /* anular cualquier estilo blockquote global */
  }
  .gp-tweet-body p {
    margin: 0 !important;
    color: inherit !important;
    font-size: inherit !important;
    line-height: inherit !important;
  }
  .gp-tweet-body p + p { margin-top: 8px !important; }
  /* En .article-body-content los <a> se ponen cyan con border-bottom.
     Dentro del tweet no queremos esa decoración (links son del autor del tuit). */
  .article-body-content .gp-tweet-body a,
  .news-article-body .gp-tweet-body a {
    color: var(--cyan-accent, #00d4ff) !important;
    text-decoration: none !important;
    border-bottom: 1px dotted rgba(0, 212, 255, 0.35) !important;
  }
  .article-body-content .gp-tweet-body a:hover,
  .news-article-body .gp-tweet-body a:hover {
    border-bottom-color: var(--cyan-accent, #00d4ff) !important;
  }

  /* Media (imágenes) — descargadas via fxtwitter API a /uploads/tweets/.
     Grid auto: 1 imagen full-width; 2-4 imágenes en grid 2x2 con gap. */
  .gp-tweet-card .gp-tweet-media {
    display: grid;
    gap: 4px;
    padding: 0 22px !important;
  }
  .gp-tweet-media--count-1 { grid-template-columns: 1fr; }
  .gp-tweet-media--count-2 { grid-template-columns: 1fr 1fr; }
  .gp-tweet-media--count-3 { grid-template-columns: 1fr 1fr; }
  .gp-tweet-media--count-3 a:first-child { grid-column: 1 / -1; }
  .gp-tweet-media--count-4 { grid-template-columns: 1fr 1fr; }
  .gp-tweet-media a {
    display: block;
    border-radius: 10px;
    overflow: hidden;
    background: var(--bg-surface, #1f2433);
    border: 1px solid rgba(255, 255, 255, 0.05);
    transition: transform 0.2s ease, border-color 0.2s ease;
    line-height: 0;
  }
  .gp-tweet-media a:hover {
    transform: scale(1.005);
    border-color: rgba(0, 212, 255, 0.30);
  }
  /* Imagen del tuit: como la card ya es estrecha (max 580px), dejamos que
     respete su ratio nativo con un cap razonable (380px alto) — asi se ve
     parecida al tuit original en X, no como banda extra-wide. */
  .gp-tweet-media a { display: block !important; }
  .gp-tweet-media img {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    max-height: 380px !important;
    object-fit: cover !important;
  }
  .gp-tweet-media--count-2 img,
  .gp-tweet-media--count-3 img,
  .gp-tweet-media--count-4 img {
    height: 140px !important;
    max-height: 140px !important;
    object-fit: cover !important;
  }
  .gp-tweet-media--count-3 a:first-child img {
    height: 200px !important;
    max-height: 200px !important;
  }
  @media (max-width: 600px) {
    .gp-tweet-media img { max-height: 320px !important; }
    .gp-tweet-media--count-2 img,
    .gp-tweet-media--count-3 img,
    .gp-tweet-media--count-4 img { height: 100px !important; max-height: 100px !important; }
  }

  .gp-tweet-card .gp-tweet-foot a {
    display: flex; align-items: center; justify-content: space-between;
    padding: 10px 22px !important;
    color: var(--text-secondary, #9aa3b2) !important;
    text-decoration: none !important;
    border-bottom: none !important;
    font-size: 12px;
    font-weight: 600;
    letter-spacing: 0.3px;
    transition: background 0.15s ease, color 0.15s ease;
  }
  .gp-tweet-foot a:hover {
    background: rgba(0, 212, 255, 0.04);
    color: var(--cyan-accent, #00d4ff) !important;
  }
  .gp-tweet-foot time { font-style: normal; }
  .gp-tweet-cta {
    font-weight: 800;
    color: var(--cyan-accent, #00d4ff);
    text-transform: uppercase;
    letter-spacing: 1px;
    font-size: 11px;
  }

  @media (max-width: 600px) {
    /* 2026-05-27: quitado margin negativo -4px que pegaba la card al borde
       de la pantalla. Ahora respeta el contenedor con margin auto + padding
       lateral generoso para que el texto respire. */
    .gp-tweet-card { margin: 22px auto; border-radius: 10px; }
    .gp-tweet-card .gp-tweet-head { padding: 9px 18px !important; }
    .gp-tweet-card .gp-tweet-body { padding: 10px 20px !important; font-size: 14.5px; }
    .gp-tweet-card .gp-tweet-foot a { padding: 9px 20px !important; }
    .gp-tweet-card .gp-tweet-media { padding: 0 20px !important; }
  }

/* ============================================================
 * Mini-poll inline en news-card (Fase 2.1)
 * Override compacto del .news-poll base cuando vive dentro de
 * .news-card-poll-inline (cards de listings hero/normal).
 * Reduce padding, fuente, gaps y oculta el glow grande.
 * ============================================================ */
.news-card-poll-inline {
    padding: 10px 14px 12px;
    background: rgba(15, 16, 22, 0.55);
    border-top: 1px solid rgba(255,255,255,0.04);
}
.news-card-poll-inline .news-poll {
    margin: 0;
    padding: 10px 12px 11px;
    border-radius: 10px;
    background: linear-gradient(160deg, rgba(40, 18, 50, 0.45), rgba(10, 11, 16, 0.85));
    border: 1px solid rgba(192, 132, 252, 0.22);
    box-shadow: none;
    max-height: none;
}
.news-card-poll-inline .news-poll-glow { display: none; } /* sin halo en formato compacto */
.news-card-poll-inline .news-poll-head { margin-bottom: 4px; }
.news-card-poll-inline .news-poll-eyebrow {
    font-size: 10px;
    letter-spacing: 1.4px;
}
.news-card-poll-inline .news-poll-question {
    margin: 2px 0 8px;
    font-size: 13px;
    line-height: 1.35;
}
.news-card-poll-inline .news-poll-options { gap: 5px; }
.news-card-poll-inline .news-poll-option {
    padding: 7px 10px;
    font-size: 12px;
    border-radius: 7px;
    gap: 8px;
}
.news-card-poll-inline .news-poll-option-pct {
    font-size: 13px;
    min-width: 34px;
    letter-spacing: 0.5px;
}
.news-card-poll-inline .news-poll-option-voters { display: none; } /* compacto: sin avatares en card */
.news-card-poll-inline .news-poll-foot {
    margin: 6px 0 0;
    font-size: 10px;
}
.news-card-poll-inline .news-poll-locked-cta {
    margin-top: 8px;
    padding: 7px 10px;
    gap: 8px;
}
.news-card-poll-inline .news-poll-locked-icon {
    width: 26px; height: 26px;
}
.news-card-poll-inline .news-poll-locked-icon svg { width: 14px; height: 14px; }
.news-card-poll-inline .news-poll-locked-text strong { font-size: 12px; }
.news-card-poll-inline .news-poll-locked-text small  { font-size: 10px; }
.news-card-poll-inline .news-poll-locked-btn {
    padding: 6px 12px;
    font-size: 11px;
}

@media (max-width: 540px) {
    .news-card-poll-inline { padding: 8px 12px 10px; }
    .news-card-poll-inline .news-poll-option { padding: 8px 10px; font-size: 12px; }
}



/* ════════════════════════════════════════════════════════════════════════
   NEWS-CARD-WIDE v6 — síntesis 3 skills (2026-06-03)
   · frontend-design (Anthropic): aesthetic intentional, sharp accent, NO AI slop
   · ui-ux-pro-max: contrast 4.5:1, no emojis, focus-visible, touch ≥44pt
   · web-design-guidelines (Vercel): text-wrap balance, min-w-0,
     transition explicit (no `all`), prefers-reduced-motion, semantic HTML
   ──────────────────────────────────────────────────────────────────────
   Validado en mockup standalone por Sergi. Casos cubiertos:
     · título largo (line-clamp 2 + text-wrap balance)
     · título medio
     · título corto + poco excerpt (auto-compact natural)
   ════════════════════════════════════════════════════════════════════════ */

.news-card.news-card-wide {
    grid-column: 1 / -1;
    position: relative;
    display: flex;
    flex-direction: row;                        /* imagen izq + body der */
    background: linear-gradient(140deg, #0e1116 0%, #080b10 100%);
    border: 1px solid rgba(255,255,255,0.06);
    border-radius: 14px;
    overflow: hidden;
    isolation: isolate;
    transition: border-color 200ms ease, transform 200ms ease, box-shadow 200ms ease;
    text-decoration: none;
    color: inherit;
}
.news-card.news-card-wide::before { display: none; }
.news-card.news-card-wide:hover {
    border-color: rgba(0,212,255,0.42);
    transform: translateY(-2px);
    box-shadow: 0 18px 40px rgba(0,0,0,0.55), 0 0 22px rgba(0,212,255,0.10);
}
.news-card.news-card-wide:focus-within {
    outline: 2px solid #00d4ff;
    outline-offset: 3px;
}

/* Borde lateral cyan→green 12-88% — signature visual sin gritar */
.news-card.news-card-wide::after {
    content: '';
    position: absolute;
    top: 12%; bottom: 12%; left: 0;
    width: 2px;
    background: linear-gradient(to bottom,
        rgba(0,212,255,0) 0%,
        rgba(0,212,255,0.55) 35%,
        rgba(74,222,128,0.45) 65%,
        rgba(74,222,128,0) 100%);
    z-index: 2;
    pointer-events: none;
    border-radius: 2px;
}

/* Ocultar hermanos legacy (top-comment, top-pulsadores, poll-inline) en wide */
.news-card.news-card-wide .news-card-top-pulsadores,
.news-card.news-card-wide .news-card-top-comment,
.news-card.news-card-wide .news-card-poll-inline { display: none; }

/* ── COVER LINK: ancla invisible que cubre toda la card.
   Patrón iOS Safari safe: el <a> no contiene elementos interactivos.
   El button (.news-card-wide-pulso) tiene position:relative + z-index:3
   para recibir el tap por encima del cover link (z-index:1). */
.news-card-wide-coverlink {
    display: block;
    position: absolute;
    inset: 0;
    z-index: 1;
    text-decoration: none;
    color: inherit;
    border-radius: inherit;
}
.news-card-wide-coverlink:focus-visible {
    outline: 2px solid #00d4ff;
    outline-offset: -2px;
    border-radius: 14px;
}

/* ── IMAGEN izq 280×175 con aspect-ratio 16:10 FIJO ──
   Evita que la imagen crezca vertical cuando el body tiene más texto.
   Caso "logo Xbox cuadrado estirado" RESUELTO. */
.news-card.news-card-wide .news-card-media {
    flex: 0 0 280px;
    width: 280px;
    aspect-ratio: 16 / 10;
    height: auto;
    min-height: 0;
    position: relative;
    overflow: hidden;
    background: #1a1d24;
}
.news-card.news-card-wide .news-card-media img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    filter: brightness(0.92) saturate(1.05);
    transition: transform 600ms cubic-bezier(.25,1,.5,1), filter 300ms ease;
}
.news-card.news-card-wide:hover .news-card-media img {
    transform: scale(1.05);
    filter: brightness(1) saturate(1.12);
}
/* Mask gradient lateral derecho para fundir con el body */
.news-card.news-card-wide .news-card-media::after {
    background: linear-gradient(to right,
        rgba(14,17,22,0) 0%,
        rgba(14,17,22,0) 78%,
        rgba(14,17,22,0.55) 100%);
}
.news-card.news-card-wide .news-card-cat {
    top: 12px; left: 12px;
    background: rgba(10,13,18,0.85);
    backdrop-filter: blur(8px);
    border: 1px solid rgba(0,212,255,0.35);
    padding: 4px 9px;
    font-family: 'Bebas Neue', system-ui, sans-serif;
    font-size: 10.5px;
    letter-spacing: 1.5px;
    border-radius: 4px;
    color: #00d4ff;
}
.news-card.news-card-wide .news-card-cat-icon svg,
.news-card.news-card-wide .news-card-cat svg { width: 11px; height: 11px; }

/* ── BODY der: meta-top + título + excerpt + foot integrado ── */
.news-card.news-card-wide .news-card-body {
    flex: 1;
    min-width: 0;                               /* Vercel: permite line-clamp en flex */
    padding: 20px 24px 18px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

/* META-TOP: avatar + nombre + rank + tiempo + pulsos count (todo inline) */
.news-card-wide-meta-top {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12px;
    color: rgba(255,255,255,0.62);
    min-width: 0;
}
.news-card-wide-avatar,
.news-card-wide-avatar-img {
    width: 24px; height: 24px;
    border-radius: 50%;
    flex-shrink: 0;
}
.news-card-wide-avatar {
    background: linear-gradient(135deg, #1a8a8a, #00d4ff);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: #001824;
    font-weight: 800;
    font-size: 11px;
}
.news-card-wide-avatar-img { object-fit: cover; }
.news-card-wide-author-name {
    color: rgba(255,255,255,0.94);
    font-weight: 600;
}
.news-card-wide-rank {
    font-family: 'Bebas Neue', system-ui, sans-serif;
    background: rgba(74,222,128,0.14);
    color: #4ade80;
    font-size: 9.5px;
    letter-spacing: 1.2px;
    padding: 2px 6px;
    border-radius: 3px;
    border: 1px solid rgba(74,222,128,0.30);
}
.news-card-wide-meta-sep { color: rgba(255,255,255,0.42); }
.news-card-wide-time { color: rgba(255,255,255,0.42); }
.news-card-wide-pulsos {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: #00d4ff;
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    font-size: 12px;
    flex-shrink: 0;
}
.news-card-wide-pulsos svg { width: 13px; height: 13px; }

/* TÍTULO: system-ui weight 800 mixed-case (NO Bebas ALL CAPS gritando) */
.news-card.news-card-wide .news-card-title.news-card-wide-title {
    font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
    font-size: 19px;
    font-weight: 800;
    line-height: 1.22;
    letter-spacing: -0.01em;
    color: #fff;
    margin: 0;
    max-width: 52ch;
    text-wrap: balance;                         /* Vercel */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* EXCERPT: 2 líneas legible */
.news-card.news-card-wide .news-card-excerpt.news-card-wide-excerpt {
    font-size: 13.5px;
    line-height: 1.5;
    color: rgba(255,255,255,0.62);
    margin: 0;
    max-width: 70ch;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* FOOTER integrado DENTRO del body — sin franja full-width separada */
.news-card-wide-foot {
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid rgba(255,255,255,0.07);
    display: flex;
    align-items: center;
    gap: 14px;
}
.news-card-wide-action {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    font-weight: 600;
    color: rgba(255,255,255,0.62);
    padding: 6px 0;
    transition: color 150ms ease;
}
.news-card-wide-action:hover { color: #00d4ff; }
.news-card-wide-action svg { width: 14px; height: 14px; }

/* CTA Pulso: pill cyan ghost — hover fill solid.
   position:relative + z-index:3 para quedar encima del cover-link (z-index:1)
   y del borde decorativo ::after (z-index:2, pointer-events:none). */
.news-card-wide-pulso {
    position: relative;
    z-index: 3;
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 8px 16px;
    background: transparent;
    border: 1px solid #00d4ff;
    border-radius: 999px;
    color: #00d4ff;
    font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
    font-size: 12.5px;
    font-weight: 700;
    cursor: pointer;
    transition: background 150ms ease, color 150ms ease, transform 150ms ease, opacity 150ms ease;
}
.news-card-wide-pulso:hover:not(:disabled) {
    background: #00d4ff;
    color: #001824;
    transform: translateY(-1px);
}
.news-card-wide-pulso:focus-visible {
    outline: 2px solid #00d4ff;
    outline-offset: 3px;
}
.news-card-wide-pulso:disabled {
    cursor: default;
}
.news-card-wide-pulso.is-reacted {
    background: rgba(0,212,255,0.14);
    color: #00d4ff;
    border-color: #00d4ff;
}
.news-card-wide-pulso.is-locked {
    opacity: 0.45;
    cursor: not-allowed;
}
.news-card-wide-pulso svg { width: 13px; height: 13px; }

/* ── RESPONSIVE ── */
@media (max-width: 900px) {
    .news-card.news-card-wide .news-card-media {
        flex: 0 0 240px;
        width: 240px;
        /* aspect-ratio 16/10 se mantiene → 240×150 */
    }
    .news-card.news-card-wide .news-card-body { padding: 16px 20px 14px; gap: 9px; }
    .news-card.news-card-wide .news-card-title.news-card-wide-title { font-size: 17.5px; }
}
@media (max-width: 760px) {
    .news-card.news-card-wide { flex-direction: column; }
    .news-card.news-card-wide .news-card-media {
        flex: 0 0 auto;
        width: 100%;
        aspect-ratio: 16/9;
    }
    .news-card.news-card-wide .news-card-media::after {
        background: linear-gradient(to bottom,
            rgba(14,17,22,0) 50%,
            rgba(14,17,22,0.45) 100%);
    }
    .news-card.news-card-wide .news-card-body { padding: 16px 18px 14px; }
    .news-card-wide-foot { flex-wrap: wrap; gap: 10px; }
    .news-card-wide-pulso { padding: 7px 14px; font-size: 12px; }
}

@media (prefers-reduced-motion: reduce) {
    .news-card.news-card-wide,
    .news-card.news-card-wide .news-card-media img,
    .news-card-wide-pulso { transition: none !important; }
    .news-card.news-card-wide:hover { transform: none; }
    .news-card.news-card-wide:hover .news-card-media img { transform: none; }
}

/* ════════════════════════════════════════════════════════════════════════
   YOUTUBE EMBED — 2026-06-03
   Iframe responsive con aspect-ratio 16:9. Lo dispara markdown.php cuando
   detecta una URL YouTube sola en un bloque. Funciona en hilos foro,
   comentarios de noticias, mural y cualquier sitio que use
   comentario_render_html().
   ════════════════════════════════════════════════════════════════════════ */
.foro-yt-embed {
    position: relative;
    width: 100%;
    max-width: 720px;
    margin: 14px 0;
    aspect-ratio: 16 / 9;
    background: #000;
    border-radius: 10px;
    overflow: hidden;
    border: 1px solid rgba(255,255,255,0.06);
}
.foro-yt-embed iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}
