* { box-sizing: border-box; margin: 0; padding: 0; }
    html { scroll-behavior: smooth; }
    body { font-family: var(--font-body); background: var(--bg); color: var(--text); line-height: 1.65; -webkit-font-smoothing: antialiased; }
    h1, h2, h3, h4 { font-family: var(--font-heading); line-height: 1.2; }
    img { max-width: 100%; display: block; }
    a { color: inherit; }

    .container { max-width: 1120px; margin: 0 auto; padding: 0 24px; }
    .grid { display: grid; gap: 24px; }
    .grid-3 { grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); }

    .link { color: var(--primary); text-decoration: none; font-weight: 600; }
    .link:hover { text-decoration: underline; }
    .meta { color: var(--muted); font-size: 0.9rem; }
    .badge { display: inline-block; padding: 3px 11px; background: var(--surface); border: 1px solid var(--border); border-radius: 999px; font-size: 0.8rem; color: var(--muted); margin-left: 6px; }
    .empty { text-align: center; color: var(--muted); padding: 40px 0; }

    /* Hero (el fondo .hero--themed lo define _shared/theme según el estilo elegido) */
    .hero { padding: 92px 0; text-align: center; }
    .hero--compact { padding: 56px 0; }
    .hero-title { font-size: 3rem; margin-bottom: 16px; }
    .hero-sub { font-size: 1.25rem; opacity: 0.92; max-width: 720px; margin: 0 auto; }
    .hero .btn { margin-top: 30px; }

    /* Secciones */
    .section { padding: 72px 0; }
    .section-title { font-size: 2rem; margin-bottom: 36px; text-align: center; }
    .section--center { text-align: center; padding: 110px 0; }

    /* Artículo (prosa) */
    .article-body { max-width: 740px; margin: 0 auto; }
    .article-cover { width: 100%; height: 320px; object-fit: cover; border-radius: var(--radius); margin-bottom: 28px; }
    .article-cover--sm { height: 170px; margin-bottom: 14px; }
    /* Card #177 — fallback de marca cuando la nota no tiene foto: mismo bloque/aspect que
       una cover real, degradé del tema y el nombre de la sección (o la marca) centrado. */
    .article-cover--fallback { display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--primary), var(--primary-dark, var(--primary))); }
    .article-cover--fallback > span { color: #fff; font-weight: 800; font-size: .85rem; text-transform: uppercase; letter-spacing: .08em; opacity: .9; padding: 0 12px; text-align: center; }
    .article-title { font-size: 2.4rem; margin-bottom: 14px; }
    .article-lead { font-size: 1.2rem; color: var(--muted); font-style: italic; margin: 18px 0 26px; }
    .article-content { font-size: 1.08rem; }
    .article-content p { margin-bottom: 18px; }
    .article-content h2, .article-content h3 { margin: 28px 0 12px; }
    .article-content img { border-radius: var(--radius); margin: 18px 0; }
    .article-content a { color: var(--primary); }
    .article-back { margin-top: 44px; }
    .card-more { margin-top: 14px; }

    .error-code { font-size: 5rem; color: var(--primary); }
    .error-msg { color: var(--muted); font-size: 1.2rem; margin-top: 12px; }
    .error-cta { margin-top: 30px; }

    /* Byline (autor / editor) + páginas de persona */
    .byline { display: flex; flex-wrap: wrap; gap: 16px 30px; align-items: flex-start; margin: 20px 0 28px; padding: 16px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
    .byline-person { display: flex; align-items: center; gap: 12px; }
    .byline-avatar { width: 46px; height: 46px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
    .byline-text { display: flex; flex-direction: column; line-height: 1.35; }
    .byline-role { font-size: .72rem; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }
    .byline-name { font-weight: 700; color: var(--text); text-decoration: none; }
    a.byline-name:hover { color: var(--primary); text-decoration: underline; }
    .byline-bio { font-size: .82rem; color: var(--muted); margin-top: 2px; max-width: 360px; }
    .person-hero-avatar { width: 90px; height: 90px; border-radius: 50%; object-fit: cover; border: 3px solid rgba(255,255,255,.55); margin: 0 auto 16px; display: block; }
    .person-eyebrow { font-size: .8rem; text-transform: uppercase; letter-spacing: .1em; opacity: .85; margin-bottom: 6px; }

    @media (max-width: 640px) {
        .hero-title { font-size: 2.1rem; }
        .section { padding: 52px 0; }
    }


. Los valores se emiten con {!! !!} (sin escape
  HTML) porque las comillas de los font-stack ("Segoe UI") no deben volverse
  &quot; (rompe el CSS). Por eso sanitizamos cada valor a mano.

  Variables CSS estándar que cada _layout puede usar:
    --primary --primary-dark --accent --bg --surface --text --muted --border
    --footer-bg --footer-text --radius --font-heading --font-body
--}}
@php
    $tv = function (string $k, $d = null) use ($site) {
        $v = $site->page('theme.' . $k, '');
        return ($v === '' || $v === null) ? $d : $v;
    };
    // Sanitizadores (contexto : evitar romper/inyectar).
    $css  = fn ($v) => preg_replace('/[;{}<>]/', '', (string) $v);              // colores, radio
    $font = fn ($v) => trim(preg_replace('/[^\p{L}\p{N}\s-]/u', '', (string) $v));  // nombres de fuente
    $urlc = fn ($v) => preg_replace('/[)"\'\\\\;<>]/', '', (string) $v);        // url() de imagen

    $fontHeading = $font($tv('font_heading', ''));
    $fontBody    = $font($tv('font_body', ''));
    $loadFonts   = $fontHeading !== '' || $fontBody !== '';

    $gf = '';
    if ($loadFonts) {
        $fams = [];
        if ($fontHeading !== '') { $fams[] = str_replace(' ', '+', $fontHeading) . ':wght@400;600;700;800'; }
        if ($fontBody !== '' && strcasecmp($fontBody, $fontHeading) !== 0) { $fams[] = str_replace(' ', '+', $fontBody) . ':wght@400;500;600;700'; }
        $gf = 'https://fonts.googleapis.com/css2?family=' . implode('&family=', $fams) . '&display=swap';
    }

    $sys = '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif';
    $headingStack = ($fontHeading !== '' ? '"' . $fontHeading . '",' : '') . $sys;
    $bodyStack    = ($fontBody !== '' ? '"' . $fontBody . '",' : '') . $sys;

    $heroStyle = $css($tv('hero_style', 'gradient'));
    $heroImg   = $urlc($tv('hero_image_url', ''));
@endphp
@if($loadFonts)
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="{{ $gf }}" rel="stylesheet">
@endif

    :root {
        --primary: {!! $css($tv('primary', '#2563eb')) !!};
        --primary-dark: {!! $css($tv('primary_dark', '#1e40af')) !!};
        --accent: {!! $css($tv('accent', $tv('primary', '#2563eb'))) !!};
        --bg: {!! $css($tv('bg', '#ffffff')) !!};
        --surface: {!! $css($tv('surface', '#f8fafc')) !!};
        --text: {!! $css($tv('text', '#0f172a')) !!};
        --muted: {!! $css($tv('muted', '#64748b')) !!};
        --border: {!! $css($tv('border', '#e2e8f0')) !!};
        --footer-bg: {!! $css($tv('footer_bg', '#0f172a')) !!};
        --footer-text: {!! $css($tv('footer_text', '#94a3b8')) !!};
        --radius: {!! $css($tv('radius', '12px')) !!};
        --font-heading: {!! $headingStack !!};
        --font-body: {!! $bodyStack !!};
    }
    @if($heroStyle === 'image' && $heroImg)
    .hero--themed { background-image: linear-gradient(rgba(15,23,42,.58), rgba(15,23,42,.58)), url('{!! $heroImg !!}'); background-size: cover; background-position: center; color: #fff; }
    @elseif($heroStyle === 'solid')
    .hero--themed { background: var(--primary); color: #fff; }
    @else
    .hero--themed { background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); color: #fff; }
    @endif



    /* Artículo enriquecido (breadcrumb, badge de sección, puntos clave, tags, relacionadas).
       Genérico: los colores salen de las variables del tema; el color del badge lo
       resuelve el render desde pages_content.sections. */
    .breadcrumb { font-size: .85rem; color: var(--muted); margin-bottom: 14px; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
    .breadcrumb-link { color: var(--muted); text-decoration: none; }
    .breadcrumb-link:hover { color: var(--primary); text-decoration: underline; }
    .breadcrumb-sep { color: var(--border); }
    .breadcrumb-current { color: var(--text); }
    .section-badge { display: inline-block; padding: 4px 13px; border-radius: 999px; color: #fff; font-size: .8rem; font-weight: 700; text-decoration: none; margin-bottom: 12px; text-transform: uppercase; letter-spacing: .03em; }
    .section-badge:hover { opacity: .9; }
    /* Card #90 — cupón/oferta vencida. */
    .article-expired-banner { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; border-radius: var(--radius, 8px); padding: 10px 16px; margin: 0 0 18px; font-size: .92rem; }
    .article-content a.cta-disabled { pointer-events: none; opacity: .55; filter: grayscale(40%); cursor: not-allowed; text-decoration: line-through; }
    .meta-sep { color: var(--border); margin: 0 2px; }
    .article-figure { margin: 0 0 28px; }
    .article-figure .article-cover { margin-bottom: 0; }
    .article-figcaption { font-size: .82rem; color: var(--muted); margin-top: 8px; line-height: 1.4; }
    .article-credito { display: inline; font-style: italic; }
    .article-figcaption .article-credito::before { content: ' — '; }
    .takeaways { background: var(--surface); border-left: 4px solid var(--primary); border-radius: var(--radius); padding: 20px 24px; margin: 8px 0 28px; }
    .takeaways-title { font-size: 1.05rem; margin-bottom: 10px; color: var(--primary); }
    .takeaways-list { margin: 0; padding-left: 20px; }
    .takeaways-list li { margin-bottom: 6px; }
    .article-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 32px; }
    .tag-pill { display: inline-block; padding: 5px 13px; background: var(--surface); border: 1px solid var(--border); border-radius: 999px; font-size: .85rem; color: var(--muted); text-decoration: none; }
    .tag-pill:hover { border-color: var(--primary); color: var(--primary); }
    .related { margin-top: 56px; }
    .related-title { text-align: left; margin-bottom: 26px; }
    /* Card #41b — disclosure de afiliado: sobrio, no compite visualmente con el body. */
    .article-affiliate-disclosure { font-size: .82rem; color: var(--muted); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 14px; margin: 0 0 20px; }
    /* Card #44 — widget aside sticky lateral (solo cuando pages_content.widgets.aside_embed
       está enabled; sin esa config esta regla no aplica a ningún elemento del DOM). */
    .article-layout-with-aside { display: grid; grid-template-columns: 1fr 300px; gap: 40px; align-items: start; }
    .article-main-col { min-width: 0; }
    .article-aside-embed { position: sticky; top: 90px; }
    .aside-embed-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }
    .aside-embed-item + .aside-embed-item { padding-top: 14px; border-top: 1px solid var(--border); }
    .aside-embed-link { display: flex; gap: 10px; align-items: center; text-decoration: none; color: var(--text); }
    .aside-embed-img { width: 64px; height: 64px; object-fit: cover; border-radius: var(--radius); flex-shrink: 0; background: var(--surface); }
    .aside-embed-title { font-size: .88rem; line-height: 1.3; }
    .aside-embed-link:hover .aside-embed-title { color: var(--primary); }
    @media (max-width: 860px) {
        .article-layout-with-aside { display: block; }
        .article-aside-embed { position: static; margin-top: 32px; }
    }



    /* ===== Card #110 — menú mobile (hamburguesa + drawer), compartido por los 3
       templates. En desktop el botón está oculto y no cambia nada. ===== */
    .nav-hamburger { display: none; background: none; border: 0; cursor: pointer; padding: 8px; margin-left: auto; }
    .nav-hamburger-bars, .nav-hamburger-bars::before, .nav-hamburger-bars::after {
        display: block; width: 24px; height: 2px; background: currentColor; border-radius: 2px; transition: transform .2s, opacity .2s;
    }
    .nav-hamburger-bars { position: relative; color: inherit; }
    .nav-hamburger-bars::before, .nav-hamburger-bars::after { content: ''; position: absolute; left: 0; }
    .nav-hamburger-bars::before { top: -7px; }
    .nav-hamburger-bars::after  { top: 7px; }

    @media (max-width: 768px) {
        .nav-hamburger { display: inline-flex; align-items: center; }
        /* off-canvas desde la derecha; !important para ganarle al display:flex de cada template */
        .nav-links {
            position: fixed !important; top: 0; right: 0; height: 100dvh; width: min(82vw, 320px); max-width: 92vw;
            flex-direction: column !important; align-items: stretch !important; justify-content: flex-start !important;
            flex-wrap: nowrap !important; gap: 0 !important; background: #fff; box-shadow: -10px 0 32px rgba(0,0,0,.2);
            z-index: 1000; padding: 60px 0 24px !important; overflow-y: auto;
            transform: translateX(100%); transition: transform .26s ease; visibility: hidden;
        }
        .nav-links.nav-open { transform: translateX(0); visibility: visible; }
        .nav-links > li { width: 100%; }
        .nav-links a {
            display: block !important; color: #1a1a1a !important; padding: 13px 22px !important;
            font-size: 1rem !important; font-weight: 500 !important; text-transform: none !important;
            letter-spacing: normal !important; border-bottom: 1px solid #f1f1f1; text-align: left !important;
        }
        .nav-links a:hover { background: #f6f7f9 !important; color: var(--primary, #2563eb) !important; }
        /* dropdown "Servicios": se expande inline dentro del drawer */
        .nav-links li.nav-dropdown .dropdown-menu {
            position: static !important; transform: none !important; display: block !important;
            box-shadow: none !important; border: 0 !important; min-width: 0 !important; margin: 0 !important;
            padding: 0 !important; background: #f7f8fa !important;
        }
        .nav-links li.nav-dropdown .dropdown-menu::before { display: none !important; }
        .nav-links li.nav-dropdown .dropdown-menu a { padding-left: 40px !important; }
        .nav-links li.nav-dropdown > .dropdown-toggle { display: none !important; } /* en drawer no hace falta el toggle */
    }
    /* backdrop + lock de scroll cuando el drawer está abierto */
    html.nav-drawer-open { overflow: hidden; }
    html.nav-drawer-open::after { content: ''; position: fixed; inset: 0; background: rgba(0,0,0,.42); z-index: 999; }

    /* Estilos compartidos de Dropdown de Plugins */
    .nav-links li.nav-dropdown, nav ul li.nav-dropdown {
        position: relative;
    }
    .nav-links li.nav-dropdown .dropdown-menu, nav ul li.nav-dropdown .dropdown-menu {
        display: none;
        position: absolute;
        top: 100%;
        left: 50%;
        transform: translateX(-50%);
        background: white;
        border: 1px solid #e2e8f0;
        border-radius: 8px;
        box-shadow: 0 10px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1);
        min-width: 160px;
        padding: 8px 0;
        margin-top: 8px;
        list-style: none;
        z-index: 100;
    }
    .nav-links li.nav-dropdown .dropdown-menu::before, nav ul li.nav-dropdown .dropdown-menu::before {
        content: '';
        position: absolute;
        top: -6px;
        left: 50%;
        transform: translateX(-50%) rotate(45deg);
        width: 12px;
        height: 12px;
        background: white;
        border-top: 1px solid #e2e8f0;
        border-left: 1px solid #e2e8f0;
    }
    .nav-links li.nav-dropdown:hover .dropdown-menu,
    .nav-links li.nav-dropdown.open .dropdown-menu,
    nav ul li.nav-dropdown:hover .dropdown-menu,
    nav ul li.nav-dropdown.open .dropdown-menu {
        display: block;
    }
    .nav-links li.nav-dropdown .dropdown-menu li, nav ul li.nav-dropdown .dropdown-menu li {
        display: block;
        margin: 0;
        padding: 0;
    }
    .nav-links li.nav-dropdown .dropdown-menu a, nav ul li.nav-dropdown .dropdown-menu a {
        display: block;
        padding: 10px 20px;
        color: #334155 !important;
        font-size: 0.9rem;
        font-weight: 500;
        text-align: left;
        text-transform: none !important;
        letter-spacing: normal !important;
        transition: background 0.15s, color 0.15s;
        white-space: nowrap;
    }
    .nav-links li.nav-dropdown .dropdown-menu a:hover, nav ul li.nav-dropdown .dropdown-menu a:hover {
        background: #f1f5f9;
        color: var(--primary, #2563eb) !important;
    }
    .caret {
        font-size: 0.65rem;
        margin-left: 4px;
        display: inline-block;
        transition: transform 0.2s;
        vertical-align: middle;
    }
    .nav-links li.nav-dropdown:hover .caret,
    .nav-links li.nav-dropdown.open .caret,
    nav ul li.nav-dropdown:hover .caret,
    nav ul li.nav-dropdown.open .caret {
        transform: rotate(180deg);
    }



    .qx-rrss { padding: 22px 16px; background: rgba(15, 23, 42, 0.03); }
    .qx-rrss--footer, .qx-rrss--header { padding: 16px; }
    .qx-rrss-inner { max-width: 1120px; margin: 0 auto; display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; }
    .qx-rrss-title { font-size: .82rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; opacity: .8; color: #475569; }
    .qx-rrss-btns { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }
    .qx-rrss-btn { display: inline-flex; align-items: center; gap: 7px; padding: 8px 15px; border-radius: 999px; color: #fff !important; text-decoration: none; font-size: .85rem; font-weight: 600; line-height: 1; transition: filter .15s, transform .15s; }
    .qx-rrss-btn:hover { filter: brightness(1.08); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.15); }
    .qx-rrss-btn svg { flex-shrink: 0; }
    @media (max-width: 560px) { .qx-rrss-btn span { display: none; } .qx-rrss-btn { padding: 10px; } }



    .person-hero-avatar--initials { display: inline-flex; align-items: center; justify-content: center; width: 72px; height: 72px; border-radius: 50%; background: var(--primary, #334155); color: #fff; font-weight: 700; font-size: 1.4rem; letter-spacing: .02em; }
    .section-pagination { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 32px 0 8px; padding: 16px 0; border-top: 1px solid var(--border); }
    .section-pagination-status { color: var(--muted); font-size: .85rem; }
    .section-pagination-disabled { color: var(--border); font-size: .9rem; }
    @media (max-width: 520px) {
        .section-pagination { flex-direction: column; gap: 10px; text-align: center; }
    }



    .authors-index-grid { row-gap: 28px; }
    .author-card { text-align: center; padding: 24px 18px; }
    .author-card-link { display: flex; flex-direction: column; align-items: center; gap: 12px; color: inherit; text-decoration: none; }
    .author-card-avatar { display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; background: var(--primary, #334155); color: #fff; font-weight: 700; font-size: 1.2rem; letter-spacing: .02em; }
    .author-card-name { margin: 0; }
    .author-card-link:hover .author-card-name { color: var(--primary); }
    .author-card-bio { color: var(--muted); font-size: .9rem; margin: 6px 0; }
    .author-card-count { justify-content: center; }
    .author-card .meta { text-align: center; }
    .author-card .card-more { text-align: center; }



    .qx-whatsapp-float-btn:hover {
        transform: scale(1.12);
        box-shadow: 0 10px 28px rgba(37, 211, 102, 0.7) !important;
    }
    .qx-whatsapp-float-btn .qx-wa-pulse {
        position: absolute;
        top: -6px; left: -6px; right: -6px; bottom: -6px;
        border-radius: 50%;
        border: 2px solid #25D366;
        animation: qxWaPulse 2s infinite;
        pointer-events: none;
    }
    @keyframes qxWaPulse {
        0% { transform: scale(0.92); opacity: 0.8; }
        70% { transform: scale(1.35); opacity: 0; }
        100% { transform: scale(1.35); opacity: 0; }
    }



        /* === Plantilla: Diario (portal de noticias) === */
        /* Look sobrio de diario: títulos serif, paleta del tema, secciones con color por sitio. */
        /* Tipografía: si el sitio no eligió font_heading, caemos a un serif serio (Merriweather/Georgia). */
        :root { --diario-serif: "Merriweather", Georgia, "Times New Roman", serif; }
        h1, h2, h3, .diario-serif { font-family: var(--font-heading, var(--diario-serif)); }
        body { background: var(--bg); }

        /* Barra superior (fecha / marca secundaria) */
        .diario-topbar { background: var(--footer-bg); color: var(--footer-text); font-size: .78rem; }
        .diario-topbar-inner { display: flex; align-items: center; justify-content: space-between; padding: 7px 0; gap: 12px; }
        .diario-topbar a { color: inherit; text-decoration: none; }
        .diario-date { text-transform: capitalize; letter-spacing: .02em; }

        /* Cabecera de marca (masthead) */
        .diario-masthead { background: #fff; border-bottom: 1px solid var(--border); padding: 20px 0; text-align: center; }
        .diario-masthead .brand { font-family: var(--font-heading, var(--diario-serif)); font-weight: 800; font-size: 2.1rem; color: var(--text); text-decoration: none; letter-spacing: -.01em; display: inline-flex; align-items: center; justify-content: center; }
        .diario-masthead .brand-logo { height: 52px; width: auto; }
        .diario-tagline { color: var(--muted); font-size: .85rem; margin-top: 4px; font-style: italic; }

        /* Nav de secciones (sticky). Reusa _shared/nav (.nav-links). */
        .nav { background: var(--text); padding: 0; position: sticky; top: 0; z-index: 30; border-bottom: 3px solid var(--primary); }
        .nav-inner { display: flex; align-items: center; justify-content: center; min-height: 46px; }
        .nav .nav-links { list-style: none; display: flex; flex-wrap: wrap; gap: 0; align-items: stretch; justify-content: center; }
        .nav .nav-links a { color: #fff; text-decoration: none; font-size: .82rem; text-transform: uppercase; letter-spacing: .07em; font-weight: 700; padding: 14px 16px; display: inline-block; }
        .nav .nav-links a:hover { background: var(--primary); color: #fff; }
        /* Card #174 — la hamburguesa comparte color con el texto del body (currentColor):
           sobre el nav OSCURO del diario quedaba negra-sobre-negro = "franja negra vacía".
           Los demás templates tienen nav claro y no lo sufren. */
        .nav .nav-hamburger { color: #fff; }

        /* Badge de sección (color por sitio, resuelto en el render desde pages_content.sections). */
        .seccion-badge { display: inline-block; padding: 3px 11px; border-radius: 3px; font-size: .72rem; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: #fff; background: var(--primary); text-decoration: none; line-height: 1.5; }
        .seccion-badge:hover { filter: brightness(.92); }

        /* Hero / nota destacada */
        .diario-hero { padding: 36px 0 8px; }
        .diario-hero-card { display: grid; grid-template-columns: 1.4fr 1fr; gap: 30px; align-items: center; }
        /* Cards #175/#176 — height:auto es OBLIGATORIO: imgAttrs() emite width/height
           reales de la imagen (ej. 675x1200 vertical) y ese height de ATRIBUTO le gana
           al aspect-ratio CSS — una foto vertical estiraba el hero a 1200px de alto y
           la grilla quedaba masonry. Con height:auto el aspect-ratio 16:9 vuelve a
           mandar y object-fit recorta. Los atributos siguen sirviendo para el CLS. */
        .diario-hero-media { width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; border-radius: var(--radius); background: var(--surface); }
        .diario-hero-title { font-size: 2.6rem; line-height: 1.12; margin: 12px 0 10px; color: var(--text); }
        .diario-hero-title a { color: inherit; text-decoration: none; }
        .diario-hero-title a:hover { color: var(--primary); }
        .diario-hero-lead { font-size: 1.15rem; color: var(--muted); }
        .diario-hero-byline { font-size: .82rem; color: var(--muted); margin-top: 12px; }

        /* Bloque de sección en la portada */
        .diario-block { padding: 30px 0; border-top: 1px solid var(--border); }
        .diario-block-head { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
        .diario-block-title { font-size: 1.45rem; margin: 0; padding-left: 12px; border-left: 5px solid var(--primary); }
        .diario-block-title a { color: var(--text); text-decoration: none; }
        .diario-block-title a:hover { color: var(--primary); }
        .diario-block-more { margin-left: auto; font-size: .82rem; }

        /* Cards de nota */
        .diario-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 24px; }
        .diario-grid > * { min-width: 0; }
        .diario-card { background: #fff; display: flex; flex-direction: column; }
        .diario-card-media { width: 100%; height: auto; aspect-ratio: 16/9; object-fit: cover; border-radius: var(--radius); background: var(--surface); margin-bottom: 10px; }
        /* Card #176 — límites editoriales: la altura de la card no depende del largo del
           texto ni de la foto; título 3 líneas, bajada 3. */
        .diario-card-title { font-size: 1.08rem; line-height: 1.25; margin: 4px 0 6px; overflow-wrap: break-word; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
        .diario-card-title a { color: var(--text); text-decoration: none; }
        .diario-card-title a:hover { color: var(--primary); }
        .diario-card-excerpt { color: var(--muted); font-size: .9rem; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
        /* Card #181 — metadatos un punto más grandes y legibles. */
        .diario-card-meta { color: var(--muted); font-size: .8rem; margin-top: 8px; }
        /* Card #176 — "Últimas noticias": grilla regular de 3 columnas en desktop
           (auto-fill metía 4 y desbalanceaba), 1 columna en mobile vía media query. */
        .diario-ultimas .diario-grid { grid-template-columns: repeat(3, 1fr); }

        /* Layout portada con sidebar de widgets */
        .diario-main { display: grid; grid-template-columns: 1fr 320px; gap: 40px; align-items: start; padding: 8px 0 48px; }
        .diario-aside { display: flex; flex-direction: column; gap: 28px; position: sticky; top: 70px; }

        /* Tarjeta genérica de widget (la usan dolar / mas_leidas / columnistas / newsletter) */
        .widget { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
        .widget-head { font-size: .8rem; font-weight: 800; text-transform: uppercase; letter-spacing: .08em; color: #fff; background: var(--primary); padding: 11px 16px; }
        .widget-body { padding: 16px; }

        /* Footer de diario: secciones + tagline */
        .footer { background: var(--footer-bg); color: var(--footer-text); padding: 48px 0 36px; }
        .footer-inner { display: flex; flex-direction: column; gap: 16px; }
        .footer-brand { font-family: var(--font-heading, var(--diario-serif)); font-weight: 800; font-size: 1.5rem; color: #fff; }
        .footer-logo { height: 46px; width: auto; display: block; }
        .footer-secciones { list-style: none; display: flex; flex-wrap: wrap; gap: 8px 20px; padding: 0; margin: 0; }
        .footer-secciones a { color: var(--footer-text); text-decoration: none; font-size: .85rem; text-transform: uppercase; letter-spacing: .05em; }
        .footer-secciones a:hover { color: #fff; }
        .footer a { color: #fff; text-decoration: none; }
        .footer-legal { font-size: .82rem; border-top: 1px solid rgba(255,255,255,.12); padding-top: 16px; }

        @media (max-width: 860px) {
            .diario-main { grid-template-columns: 1fr; }
            .diario-aside { position: static; }
            .diario-hero-card { grid-template-columns: 1fr; }
            .diario-hero-title { font-size: 1.9rem; }
            .diario-ultimas .diario-grid { grid-template-columns: 1fr; }
        }
        /* Card #173 — anti-overflow mobile: nada del template puede empujar el viewport.
           min-width:0 en los hijos de grid/flex + wrapping seguro de títulos y URLs. */
        .diario-main > *, .diario-hero-card > * { min-width: 0; }
        .diario-hero-title, .diario-hero-lead, .diario-card-excerpt, .diario-block-title,
        .breadcrumb, .article-body, .article-title { overflow-wrap: break-word; word-break: break-word; }
        @media (max-width: 480px) {
            .diario-hero { padding-top: 20px; }
            .diario-hero-title { font-size: 1.55rem; }
            .diario-hero-lead { font-size: 1rem; }
            .diario-masthead .brand-logo { height: 42px; }
            /* Card #175 — techo por si una foto extrema igual intenta crecer. */
            .diario-hero-media { max-height: 55vh; }
        }
        html, body { overflow-x: clip; }

        /* Card #181 — banner de sección compacto: el hero--compact compartido (56px de
           padding + título 3rem) superaba 220px y empujaba el contenido. Techo editorial:
           ≤220px desktop, ≤180px mobile, título contenido. */
        .section-index-hero { padding: 30px 0; max-height: 220px; box-sizing: border-box; overflow: hidden; }
        .section-index-hero .hero-title { font-size: 2rem; margin-bottom: 6px; }
        @media (max-width: 640px) {
            .section-index-hero { padding: 22px 0; max-height: 180px; }
            .section-index-hero .hero-title { font-size: 1.55rem; }
        }