// ---------- Article cards ---------- .section { position: relative; padding-bottom: clamp(56px, 9vh, 96px); } .articles-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; } // the shelf's last line: reaching it brings the next batch of cards in, and // while that batch is on its way it says so .shelf-sentinel { display: grid; place-items: center; padding-top: 24px; color: var(--faint); font-size: 0.85rem; } .article-card { display: flex; flex-direction: column; gap: 10px; padding: 22px; border-radius: 16px; border: 1px solid var(--border); background: var(--surface); text-decoration: none; color: inherit; box-shadow: var(--shadow-sm); transition: transform 0.18s ease, border-color 0.18s, box-shadow 0.18s; &:hover { transform: translateY(-3px); border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); box-shadow: var(--shadow-lg); } &:focus-visible { box-shadow: var(--ring); } } .card-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; } .card-kicker { font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent); } .card-title { margin: 0; font-size: 1.14rem; font-weight: 720; letter-spacing: -0.015em; line-height: 1.3; } .card-meta { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 4px; font-size: 0.78rem; color: var(--faint); } .tags { display: flex; flex-wrap: wrap; gap: 6px; } .tag { display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px; background: color-mix(in srgb, var(--accent) 11%, transparent); color: var(--accent); font-size: 0.75rem; font-weight: 600; text-decoration: none; transition: background-color 0.15s; } a.tag:hover { background: color-mix(in srgb, var(--accent) 22%, transparent); }