/* ============================================================
   Blog library — responsive card grid, dark dashboard theme.
   Tokens only (variables.css): --bg-*, --accent-*, --text-*,
   --space-*, --radius-*, --shadow-*.
   ============================================================ */
.blog-body {
    background: var(--bg-body);
    color: var(--text-primary);
    min-height: 100vh;
}
/* base.css paints a busy 3D-grid image on body::before + a light overlay on
   body::after. Override with a near-opaque dark overlay so the reading
   surface is calm and text stays legible. (.blog-body::after is more specific
   than body::after, so it REPLACES it — and must itself be dark.) */
.blog-body::after {
    content: "";
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background:
        radial-gradient(ellipse at 20% -5%, rgba(74, 158, 255, 0.07), transparent 45%),
        linear-gradient(180deg, rgba(8, 12, 22, 0.93) 0%, rgba(5, 9, 17, 0.97) 100%);
}

.blog-main {
    position: relative;
    z-index: 1;
    padding: var(--space-2xl) 0 var(--space-3xl);
}
.blog-shell {
    width: min(1180px, calc(100vw - 32px));
    margin: 0 auto;
}

/* ── Header ── */
.blog-header {
    max-width: 720px;
    margin: 0 0 var(--space-xl);
}
.blog-eyebrow {
    display: inline-block;
    font-size: 11px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: var(--font-semibold);
    color: var(--accent-highlight);
    margin-bottom: var(--space-sm);
}
.blog-title {
    font-size: clamp(32px, 5vw, 52px);
    font-weight: var(--font-bold);
    letter-spacing: -0.03em;
    line-height: 1.05;
    margin: 0 0 var(--space-sm);
    color: #f5fbff;
}
.blog-subtitle {
    font-size: var(--text-md);
    line-height: var(--line-height-relaxed);
    color: var(--text-secondary);
    margin: 0;
}

/* ── Category filter chips ── */
.blog-filters {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-sm);
    margin-bottom: var(--space-xl);
}
.blog-chip {
    padding: 7px 16px;
    border-radius: var(--radius-full);
    border: 1px solid var(--border-default);
    background: rgba(7, 18, 34, 0.5);
    color: var(--text-secondary);
    font: inherit;
    font-size: var(--text-sm);
    cursor: pointer;
    transition: border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);
}
.blog-chip:hover { border-color: var(--border-focus); color: var(--text-primary); }
.blog-chip.is-active {
    border-color: var(--accent-highlight);
    color: var(--accent-highlight);
    background: var(--bg-highlight);
}

/* ── Grid ── */
.blog-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: var(--space-lg);
}

/* ── Card ── */
.blog-card {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    border: 1px solid rgba(74, 158, 255, 0.14);
    border-radius: var(--radius-lg);
    background: linear-gradient(150deg, rgba(11, 34, 64, 0.4), rgba(7, 18, 34, 0.55));
    text-decoration: none;
    transition: transform var(--transition-normal), box-shadow var(--transition-normal), border-color var(--transition-normal);
}
.blog-card:hover {
    transform: translateY(-4px);
    border-color: var(--accent-highlight);
    box-shadow: var(--shadow-lg), 0 0 28px rgba(7, 89, 144, 0.18);
}
.blog-card-cover {
    aspect-ratio: 16 / 9;
    overflow: hidden;
    background: linear-gradient(135deg, rgba(7, 89, 144, 0.35), rgba(4, 20, 40, 0.6));
}
.blog-card-cover img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.blog-card-cover-empty::after {
    content: "";
    display: block;
    width: 100%; height: 100%;
    background:
        radial-gradient(ellipse at 30% 20%, rgba(90, 200, 232, 0.12), transparent 60%),
        radial-gradient(ellipse at 80% 90%, rgba(74, 158, 255, 0.1), transparent 55%);
}
.blog-card-body {
    display: flex;
    flex-direction: column;
    gap: var(--space-sm);
    padding: var(--space-lg);
    flex: 1;
}
.blog-card-cat {
    align-self: flex-start;
    font-size: 10px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    font-weight: var(--font-semibold);
    color: var(--accent-highlight);
}
.blog-card-title {
    font-size: var(--text-lg);
    font-weight: var(--font-bold);
    line-height: 1.25;
    color: var(--text-primary);
    margin: 0;
}
.blog-card-excerpt {
    font-size: var(--text-sm);
    line-height: var(--line-height-normal);
    color: var(--text-secondary);
    margin: 0;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.blog-card-meta {
    display: flex;
    justify-content: space-between;
    gap: var(--space-sm);
    margin-top: auto;
    padding-top: var(--space-sm);
    font-size: var(--text-xs);
    color: var(--text-muted);
}

.blog-empty {
    padding: var(--space-3xl) 0;
    text-align: center;
    color: var(--text-muted);
}

@media (max-width: 520px) {
    .blog-grid { grid-template-columns: 1fr; }
    .blog-main { padding: var(--space-lg) 0 var(--space-2xl); }
}
