/* Blog (/articles, /articles/:slug) — not in the reference prototype; layout taken from the
   minna project's blog, type rescaled for DB Heavent (×1.375). The list reuses the catalog's
   hero, search and chips (discovery.css); the article page is long prose beside a sticky
   contents card. The card is `.bl-card` so the home page's `.ac` article cards stay as they are. */

/* ---------- the list ---------- */

.bl-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gutter); margin: 0; padding: 0; list-style: none; }
.bl-grid > li { display: flex; }
.bl-more { display: flex; justify-content: center; padding-top: var(--gutter); }
.bl-list-main { padding-top: 32px; padding-bottom: 56px; }
.bl-count { margin: 0 0 20px; }

.bl-filter { margin-bottom: 20px; }
.bl-filter .cat-chips { gap: 8px; }
.bl-filter .cat-chip { padding: 0 14px; background: #fff; border-color: var(--border-default); color: var(--ink-primary); }
.bl-filter .cat-chip:hover { border-color: var(--brand-primary); color: var(--brand-primary-dark); }
.bl-filter .cat-chip.is-on { background: var(--brand-primary); border-color: var(--brand-primary); color: #fff; }
.chip-n { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 7px; border-radius: 999px; background: var(--surface-soft); font-size: 16px; font-weight: 700; color: var(--ink-secondary); }
.cat-chip.is-on .chip-n { background: rgb(255 255 255 / .22); color: #fff; }

/* ---------- a card ---------- */

.bl-card { position: relative; display: flex; flex-direction: column; width: 100%; overflow: hidden; border: 1px solid var(--border-default); border-radius: var(--r-card); background: #fff; transition: box-shadow .25s, transform .25s; }
.bl-card:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.bl-card-media { position: relative; display: block; aspect-ratio: 16 / 9; overflow: hidden; background: var(--surface-soft); }
.bl-card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform var(--dur-img) ease; }
.bl-card:hover .bl-card-media img { transform: scale(var(--img-zoom)); }
.bl-card-cat { position: absolute; left: 12px; top: 12px; z-index: 1; gap: 6px; background: rgb(255 255 255 / .94); border-color: transparent; font-size: 17px; font-weight: 700; color: var(--brand-primary-deep); backdrop-filter: blur(4px); }
.bl-card-cat:hover { background: #fff; color: var(--brand-primary-active); }
.bl-card-cat svg { width: 16px; height: 16px; }
.bl-card-body { display: flex; flex-direction: column; flex: 1; gap: 10px; padding: 20px 22px 22px; }
.bl-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; font-size: 18px; color: var(--ink-secondary); }
.bl-card-meta span { display: inline-flex; align-items: center; gap: 6px; }
.bl-card-meta svg { width: 17px; height: 17px; color: var(--ink-muted); }
.bl-card-title { margin: 0; font-size: 24px; line-height: 1.3; }
.bl-card-title a { color: var(--ink-primary); }
.bl-card-title a:hover { color: var(--brand-primary-dark); }
.bl-card-desc { margin: 0; font-size: 20px; line-height: 1.45; color: var(--ink-secondary); }
.bl-card-foot { display: flex; align-items: center; justify-content: flex-end; margin-top: auto; padding-top: 14px; border-top: 1px solid var(--border-default); }
.bl-card-read { display: inline-flex; align-items: center; gap: 6px; font-weight: 700; font-size: 19px; color: var(--brand-primary-dark); }
.bl-card-read svg { width: 19px; height: 19px; transition: transform .2s; }
.bl-card:hover .bl-card-read svg { transform: translateX(3px); }

/* ---------- the article page ---------- */

.bl-hero { padding-bottom: 32px; }
.bl-hero .cd-cat { margin-top: 18px; }
.bl-title { margin: 12px 0 0; max-width: 22ch; }
.page-hero .bl-lead { margin: 12px 0 0; max-width: 62ch; font-size: 22.5px; line-height: 1.5; color: var(--ink-secondary); }

.bl-byline { display: flex; align-items: center; gap: 12px; margin-top: 22px; }
.bl-byline-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.bl-byline-name { font-weight: 700; color: var(--ink-primary); }
.bl-byline-meta { display: flex; flex-wrap: wrap; gap: 2px 14px; font-size: 18.5px; color: var(--ink-secondary); }
.bl-byline-meta span { display: inline-flex; align-items: center; gap: 6px; }
.bl-byline-meta svg { width: 17px; height: 17px; color: var(--ink-muted); }

.bl-cover { margin: 0 0 8px; overflow: hidden; border-radius: var(--r-card); aspect-ratio: 16 / 9; background: var(--surface-soft); }
.bl-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }

.bl-layout { display: grid; grid-template-columns: minmax(0, 1fr) 290px; gap: 48px; padding-top: 32px; padding-bottom: 56px; }
.bl-content { min-width: 0; max-width: 820px; }

/* ---------- contents ---------- */

.bl-toc {
  position: sticky; top: calc(var(--header-h) + 16px); align-self: start;
  max-height: calc(100vh - var(--header-h) - 32px); max-height: calc(100dvh - var(--header-h) - 32px);
  overflow-y: auto; overscroll-behavior: contain;
  scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent;
  padding: 18px 16px 16px;
  background: #fff; border: 1px solid var(--border-default); border-radius: var(--r-card);
  box-shadow: 0 28px 56px -32px rgba(24, 39, 42, .38), var(--shadow-card);
}
.bl-toc-title { display: flex; align-items: center; gap: 8px; margin: 0 0 12px; padding: 0 8px 12px; border-bottom: 1px solid var(--border-default); font-size: 17px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-secondary); }
.bl-toc-title svg { width: 18px; height: 18px; color: var(--brand-primary-dark); }
.bl-toc ol { display: grid; gap: 2px; list-style: none; margin: 0; padding: 0; counter-reset: bltoc; }
.bl-toc li { counter-increment: bltoc; }
.bl-toc a { display: grid; grid-template-columns: 1.4em minmax(0, 1fr); gap: 2px; padding: 8px 10px; border-radius: 12px; font-size: 19px; line-height: 1.3; color: var(--ink-secondary); transition: background .18s, color .18s; }
.bl-toc a::before { content: counter(bltoc) "."; color: var(--ink-muted); font-weight: 700; font-variant-numeric: tabular-nums; }
.bl-toc a:hover { background: var(--surface-soft); color: var(--brand-primary-dark); }
.bl-toc a:hover::before { color: var(--brand-primary-dark); }
.bl-toc a.is-current { position: relative; background: var(--brand-primary-soft); color: var(--brand-primary-deep); font-weight: 700; }
.bl-toc a.is-current::after { content: ""; position: absolute; inset-block: 7px; inset-inline-start: 0; width: 3px; border-radius: 0 3px 3px 0; background: var(--brand-primary); }
.bl-toc a.is-current::before { color: var(--brand-primary-dark); }

/* ---------- the body ---------- */

.bl-prose { font-size: 22px; }
.bl-prose > * + * { margin-top: 18px; }
.bl-prose p { margin: 0; line-height: 1.55; color: var(--ink-primary); }
.bl-prose h2 { font-size: 31px; line-height: 1.25; margin: 38px 0 0; scroll-margin-top: calc(var(--header-h) + 24px); }
.bl-prose h3 { font-size: 24px; line-height: 1.3; margin: 28px 0 0; }
.bl-prose h2 + *, .bl-prose h3 + * { margin-top: 10px; }
.bl-prose ul, .bl-prose ol { margin: 0; padding-inline-start: 28px; display: grid; gap: 8px; }
.bl-prose ul { list-style: disc; }
.bl-prose ol { list-style: decimal; }
.bl-prose li { line-height: 1.5; padding-inline-start: 4px; }
.bl-prose li::marker { color: var(--brand-primary-dark); font-weight: 700; }
.bl-prose ol > li::marker { color: var(--ink-secondary); }
.bl-prose a { color: var(--brand-primary-deep); text-decoration: underline; text-underline-offset: 3px; }
.bl-prose a:hover { color: var(--brand-primary-dark); }
.bl-prose blockquote { margin: 0; padding: 18px 22px; border-inline-start: 3px solid var(--brand-primary); border-radius: 0 var(--r-card) var(--r-card) 0; background: var(--brand-primary-soft); }
.bl-prose blockquote p { margin: 0; font-size: 22.5px; line-height: 1.5; color: var(--brand-primary-deep); }
.bl-prose table { width: 100%; border-collapse: collapse; font-size: 20px; border: 1px solid var(--border-default); border-radius: 16px; overflow: hidden; display: table; }
.bl-prose th, .bl-prose td { padding: 12px 16px; text-align: start; vertical-align: top; line-height: 1.45; border-bottom: 1px solid var(--border-default); }
.bl-prose thead th { background: var(--surface-soft); font-weight: 700; color: var(--ink-primary); }
.bl-prose tbody tr:last-child td { border-bottom: 0; }

/* ---------- share ---------- */

.bl-share { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--border-default); }
.bl-share-label { font-weight: 700; font-size: 19px; color: var(--ink-secondary); }
.bl-share-list { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.bl-share-btn { display: inline-flex; align-items: center; gap: 7px; height: 42px; padding: 0 16px; border: 1px solid var(--border-default); border-radius: 999px; background: #fff; font: inherit; font-size: 19px; font-weight: 600; color: var(--ink-primary); cursor: pointer; transition: border-color .2s, color .2s, background .2s; }
.bl-share-btn:hover { border-color: var(--brand-primary); color: var(--brand-primary-dark); background: var(--brand-primary-soft); }
.bl-share-btn svg { width: 18px; height: 18px; }
.bl-share-btn.is-done { border-color: var(--brand-primary); color: var(--brand-primary-deep); background: var(--brand-primary-soft); }

/* ---------- the author ---------- */

.bl-author { display: flex; align-items: flex-start; gap: 16px; margin-top: 32px; padding: 20px; border: 1px solid var(--border-default); border-radius: var(--r-card); background: var(--surface-soft); }
.bl-author-body { min-width: 0; }
.bl-author-name { margin: 2px 0 6px; font-size: 24px; line-height: 1.3; }
.bl-author-body p { margin: 10px 0 0; font-size: 20px; line-height: 1.45; color: var(--ink-secondary); }

/* ---------- more articles ---------- */

.bl-more-sec { padding-bottom: 56px; }

@media (max-width: 1099px) {
  .bl-layout { grid-template-columns: minmax(0, 1fr); gap: 24px; }
  .bl-content { max-width: none; }
  .bl-toc { position: static; order: -1; max-height: none; overflow: visible; background: var(--surface-soft); box-shadow: none; padding: 16px 18px; }
  .bl-toc-title { padding-bottom: 10px; }
  .bl-toc ol { display: flex; flex-wrap: wrap; gap: 6px; }
  .bl-toc a { display: inline-flex; align-items: baseline; gap: 6px; background: #fff; border: 1px solid var(--border-default); }
  .bl-toc a.is-current::after { display: none; }
  .bl-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 719px) {
  .bl-grid { grid-template-columns: minmax(0, 1fr); }
  .bl-title { max-width: none; }
  .bl-prose { font-size: 21px; }
  .bl-prose h2 { font-size: 27px; margin-top: 30px; }
  .bl-author { flex-direction: column; }
  .bl-prose table { display: block; overflow-x: auto; }
}
