/* ═══ AV DS × Total.kz — overlay (Волна 0) ═══
   Подключается ПОСЛЕ tokens.css, но ПЕРЕД public.min.css.
   Задача: сохранить уникальную страновую палитру Total.kz поверх AV DS семантики.

   Цепочка каскада:
     1. av-ds/tokens.css — базовые HSL-токены AV DS (нейтральный синий --primary)
     2. av-ds/total-overlay.css — Total-specific переопределения (этот файл)
     3. public.min.css — публичные стили Total (продолжают рулить UI, ничего не ломается)

   После Волны 0 визуал меняется минимально (< 5%): появляется только поверхность
   для будущих av-* компонентов. Цвета .btn/.card/.accent Total.kz остаются как были. */


/* ── Типографика: Onest вместо Inter (AV DS default) ────────────────── */
:root {
  --font-sans: 'Onest', 'Helvetica Neue', -apple-system, BlinkMacSystemFont, sans-serif;
  --font-serif: Georgia, 'Times New Roman', serif;
  --font-mono: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
}


/* ══════════════════════════════════════════════════════════════════════
   СТРАНОВЫЕ ПАЛИТРЫ — АВ DS `--primary` синхронизирован с Total `--accent`
   Таким образом каждый сайт (kz/uz/kg/tj/az/mn/hub) получает СВОЙ
   брендовый цвет в любых av-* компонентах автоматически.
   ══════════════════════════════════════════════════════════════════════ */


/* ── KZ (Kazakhstan) — Teal #007A8C ─────────────────────────────────── */
:root,
[data-site="kz"],
[data-site="kz"][data-theme="light"] {
  --primary: 188 100% 27%;
  --primary-foreground: 0 0% 100%;
  --ring: 188 100% 27%;
  --sidebar-primary: 188 100% 27%;
  --sidebar-ring: 188 100% 27%;
  --chart-1: 188 100% 27%;
}
[data-site="kz"][data-theme="dark"],
.dark[data-site="kz"] {
  --primary: 188 53% 54%;
  --primary-foreground: 0 0% 10%;
  --ring: 188 53% 54%;
  --sidebar-primary: 188 53% 54%;
  --sidebar-ring: 188 53% 54%;
  --chart-1: 188 53% 54%;
}


/* ── UZ (Uzbekistan) — Blue #1460AA ─────────────────────────────────── */
[data-site="uz"],
[data-site="uz"][data-theme="light"] {
  --primary: 210 79% 37%;
  --primary-foreground: 0 0% 100%;
  --ring: 210 79% 37%;
  --sidebar-primary: 210 79% 37%;
  --sidebar-ring: 210 79% 37%;
  --chart-1: 210 79% 37%;
}
[data-site="uz"][data-theme="dark"] {
  --primary: 208 64% 61%;
  --primary-foreground: 0 0% 10%;
  --ring: 208 64% 61%;
  --sidebar-primary: 208 64% 61%;
  --sidebar-ring: 208 64% 61%;
  --chart-1: 208 64% 61%;
}


/* ── KG (Kyrgyzstan) — Red #C52E2E ──────────────────────────────────── */
[data-site="kg"],
[data-site="kg"][data-theme="light"] {
  --primary: 0 62% 48%;
  --primary-foreground: 0 0% 100%;
  --ring: 0 62% 48%;
  --sidebar-primary: 0 62% 48%;
  --sidebar-ring: 0 62% 48%;
  --chart-1: 0 62% 48%;
}
[data-site="kg"][data-theme="dark"] {
  --primary: 0 74% 65%;
  --primary-foreground: 0 0% 10%;
  --ring: 0 74% 65%;
  --sidebar-primary: 0 74% 65%;
  --sidebar-ring: 0 74% 65%;
  --chart-1: 0 74% 65%;
}


/* ── TJ (Tajikistan) — Green #1A7A3A ────────────────────────────────── */
[data-site="tj"],
[data-site="tj"][data-theme="light"] {
  --primary: 140 65% 29%;
  --primary-foreground: 0 0% 100%;
  --ring: 140 65% 29%;
  --sidebar-primary: 140 65% 29%;
  --sidebar-ring: 140 65% 29%;
  --chart-1: 140 65% 29%;
}
[data-site="tj"][data-theme="dark"] {
  --primary: 135 40% 54%;
  --primary-foreground: 0 0% 10%;
  --ring: 135 40% 54%;
  --sidebar-primary: 135 40% 54%;
  --sidebar-ring: 135 40% 54%;
  --chart-1: 135 40% 54%;
}


/* ── AZ (Azerbaijan) — Emerald #00856B ──────────────────────────────── */
[data-site="az"],
[data-site="az"][data-theme="light"] {
  --primary: 168 100% 26%;
  --primary-foreground: 0 0% 100%;
  --ring: 168 100% 26%;
  --sidebar-primary: 168 100% 26%;
  --sidebar-ring: 168 100% 26%;
  --chart-1: 168 100% 26%;
}
[data-site="az"][data-theme="dark"] {
  --primary: 163 53% 54%;
  --primary-foreground: 0 0% 10%;
  --ring: 163 53% 54%;
  --sidebar-primary: 163 53% 54%;
  --sidebar-ring: 163 53% 54%;
  --chart-1: 163 53% 54%;
}


/* ── MN (Mongolia) — Purple #7B2D8E ─────────────────────────────────── */
[data-site="mn"],
[data-site="mn"][data-theme="light"] {
  --primary: 288 52% 37%;
  --primary-foreground: 0 0% 100%;
  --ring: 288 52% 37%;
  --sidebar-primary: 288 52% 37%;
  --sidebar-ring: 288 52% 37%;
  --chart-1: 288 52% 37%;
}
[data-site="mn"][data-theme="dark"] {
  --primary: 289 45% 61%;
  --primary-foreground: 0 0% 10%;
  --ring: 289 45% 61%;
  --sidebar-primary: 289 45% 61%;
  --sidebar-ring: 289 45% 61%;
  --chart-1: 289 45% 61%;
}


/* ── HUB (Central Asia aggregator) — Graphite #505258 ───────────────── */
[data-site="hub"],
[data-site="hub"][data-theme="light"] {
  --primary: 225 5% 33%;
  --primary-foreground: 0 0% 100%;
  --ring: 225 5% 33%;
  --sidebar-primary: 225 5% 33%;
  --sidebar-ring: 225 5% 33%;
  --chart-1: 225 5% 33%;
}
[data-site="hub"][data-theme="dark"] {
  --primary: 225 4% 64%;
  --primary-foreground: 0 0% 10%;
  --ring: 225 4% 64%;
  --sidebar-primary: 225 4% 64%;
  --sidebar-ring: 225 4% 64%;
  --chart-1: 225 4% 64%;
}


/* ══════════════════════════════════════════════════════════════════════
   Мост между AV DS и Total: `--accent` Total.kz сильнее не трогаем —
   public.css продолжает задавать --accent через data-site, а мы поверх
   синхронизируем --primary AV DS с тем же значением через HSL.
   Благодаря этому при переносе Total UI на av-* классы (волны 2-7)
   никакой дополнительной магии не потребуется.
   ══════════════════════════════════════════════════════════════════════ */


/* ══════════════════════════════════════════════════════════════════════
   Wave 7.1 — Inputs: unified focus-ring across legacy & AV DS inputs.
   Even where the markup keeps its old class (.search-input,
   .persons-search-input и т.д.) the focused state will pull from
   the AV DS --ring token (already country-tinted via overlay above).
   This gives Total a single focus appearance everywhere, without
   touching templates.
   ══════════════════════════════════════════════════════════════════════ */
.persons-search-input:focus,
.entities-search-input:focus,
.tags-search-input:focus,
.td-search-input:focus,
.td-search-bar__input:focus,
.td-gov-search-input:focus,
.at3-ask__input:focus {
  outline: none;
  border-color: hsl(var(--ring));
  box-shadow: 0 0 0 3px hsl(var(--ring) / 0.20);
}
.search-input-wrap:focus-within,
.search-overlay-form:focus-within {
  border-color: hsl(var(--ring));
  box-shadow: 0 0 0 3px hsl(var(--ring) / 0.20);
}


/* ══════════════════════════════════════════════════════════════════════
   Wave 7.2 — Cards: a11y + unified hover/focus rhythm.
   Existing card hover (border-color: var(--accent)) already works,
   так как --accent уже привязан к country-tinted токенам. Дополняем:
   1) :focus-visible outline для клавиатурной навигации (ring-token),
   2) sidebar-person-card / persons-strip-card / hero-side-item получают
      легкий ring-tinted bg/border на hover для визуального равенства.
   ══════════════════════════════════════════════════════════════════════ */
.shelf-card:focus-visible,
.feed-card:focus-visible,
.feed-duo-main:focus-visible,
.live-feed__item:focus-visible,
.person-card:focus-visible,
.persons-strip-card:focus-visible,
.hero-side-item:focus-visible,
.author-article-item:focus-visible,
.sidebar-person-card:focus-visible,
.ca-shelf-card:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 2px;
  border-radius: 10px;
}

/* hero-side-item: добавляем тонкий ring-tinted фон на hover */
.hero-side-item:hover {
  background: hsl(var(--ring) / 0.06);
}

/* persons-strip-card: ring-tinted shadow на hover (уже есть bg) */
.persons-strip-card:hover {
  box-shadow: 0 2px 10px hsl(var(--ring) / 0.10);
}

/* sidebar-person-card: вместо opacity-only — нежный border + bg */
.sidebar-person-card {
  border-radius: 8px;
  padding: 6px 8px;
  margin: 0 -8px;
  border: 1px solid transparent;
  transition: border-color .15s, background .15s, opacity .15s;
}
.sidebar-person-card:hover {
  opacity: 1;
  background: hsl(var(--ring) / 0.05);
  border-color: hsl(var(--ring) / 0.25);
}


/* ══════════════════════════════════════════════════════════════════════
   Wave 7.4 — Cleanup & a11y for legacy button classes.
   Не удаляем legacy CSS (всё ещё нужен админ-страницам без AV DS),
   но даём кнопкам единый клавиатурный focus-ring и фиксируем
   deprecation-mapping. Каждый legacy class ↔ AV DS эквивалент:
     .btn-primary          → .av-btn .av-btn--primary
     .btn-secondary        → .av-btn .av-btn--outline
     .sidebar-action-btn   → .av-btn .av-btn--ghost--icon--sm
     .tag-pill             → .av-badge .av-badge--neutral--md
     .btn-load-more        → .av-btn .av-btn--outline--lg
     .ask-cta-btn          → .av-btn .av-btn--primary--lg
   После полного перехода на av-* (волны 8+) можно будет вычистить
   правила из public.min.css. Сейчас — только a11y-обвязка.
   ══════════════════════════════════════════════════════════════════════ */
.btn-primary:focus-visible,
.btn-secondary:focus-visible,
.btn-load-more:focus-visible,
.ask-cta-btn:focus-visible,
.sidebar-action-btn:focus-visible,
.tag-pill:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 2px;
}

/* Lang-switcher (header) — единый focus-ring */
.lang-btn:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 2px;
  border-radius: 4px;
}

/* btn-primary в country-tinted hover уже работает через --accent;
   фиксируем active state так, чтобы тень тоже была --ring-token */
.btn-primary:active {
  box-shadow: 0 0 0 3px hsl(var(--ring) / 0.18);
}


/* ══════════════════════════════════════════════════════════════════════
   Wave 9.1 — Admin form fields: unified focus-ring.
   Admin использует style.css с собственными правилами; здесь даём
   AV DS-окрашенный focus-ring (через --ring) поверх hard-coded
   rgba(37,99,235,0.1). Логика и иконки select остаются.
   ══════════════════════════════════════════════════════════════════════ */
.editor-input:focus,
.editor-select:focus,
.editor-textarea:focus,
.editor-title-input:focus,
.filter-input:focus,
.filter-select:focus,
.form-input:focus,
.form-select:focus,
.tag-add-input:focus {
  outline: none;
  border-color: hsl(var(--ring));
  box-shadow: 0 0 0 3px hsl(var(--ring) / 0.18);
}

/* Wave 9.2 — Admin sidebar / nav-item focus-ring (a11y).
   Sidebar links и menu-toggle: видимый focus-visible outline. */
.nav-item:focus-visible,
.menu-toggle:focus-visible,
.sidebar a:focus-visible,
.context-menu-option:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 2px;
  border-radius: 6px;
}

/* Calendar nav-buttons (admin) — единый focus + hover ring-tint */
.calendar-nav-btn:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 2px;
}
.calendar-nav-btn:hover {
  background: hsl(var(--ring) / 0.06);
}


/* ══════════════════════════════════════════════════════════════════════
   Wave 11 — Semantic button variants: success & warning.
   AV DS components.css даёт только --destructive из семантики; здесь
   добавляем --success (зелёный) и --warning (янтарный) tokens поверх
   и av-btn-варианты с тем же визуальным языком, что и --destructive.
   ══════════════════════════════════════════════════════════════════════ */
:root, [data-theme="light"] {
  --success: 142 71% 36%;            /* deep emerald */
  --success-foreground: 0 0% 99%;
  --warning: 35 92% 48%;             /* amber-500 */
  --warning-foreground: 0 0% 17%;    /* near-black, читаемо на янтарном */
}
[data-theme="dark"] {
  --success: 142 65% 45%;
  --success-foreground: 0 0% 99%;
  --warning: 38 92% 56%;
  --warning-foreground: 0 0% 13%;
}

.av-btn--success {
  background: hsl(var(--success));
  color: hsl(var(--success-foreground));
  border-color: hsl(var(--success));
}
.av-btn--success:hover:not(:disabled) {
  background: hsl(var(--success) / 0.9);
  border-color: hsl(var(--success) / 0.9);
}

.av-btn--warning {
  background: hsl(var(--warning));
  color: hsl(var(--warning-foreground));
  border-color: hsl(var(--warning));
}
.av-btn--warning:hover:not(:disabled) {
  background: hsl(var(--warning) / 0.9);
  border-color: hsl(var(--warning) / 0.9);
}

/* ============================================================
   Wave 12 — av-table (admin/data tables)
   Adds AV DS look to .table and .data-table via dual-class.
   Tokens used: --border, --muted, --foreground, --ring, --accent.
   ============================================================ */
.av-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 0.92rem;
  color: hsl(var(--foreground));
  background: hsl(var(--card, var(--background)));
}
.av-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  text-align: left;
  font-weight: 600;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: hsl(var(--muted-foreground));
  background: hsl(var(--muted) / 0.6);
  padding: 0.625rem 0.75rem;
  border-bottom: 1px solid hsl(var(--border));
}
.av-table tbody td {
  padding: 0.625rem 0.75rem;
  border-bottom: 1px solid hsl(var(--border) / 0.6);
  vertical-align: middle;
}
.av-table tbody tr {
  transition: background-color 0.15s ease;
}
.av-table tbody tr:hover {
  background: hsl(var(--accent) / 0.5);
}
.av-table tbody tr:focus-within {
  outline: 2px solid hsl(var(--ring));
  outline-offset: -2px;
}
.av-table--striped tbody tr:nth-child(even) {
  background: hsl(var(--muted) / 0.3);
}
.av-table--striped tbody tr:nth-child(even):hover {
  background: hsl(var(--accent) / 0.5);
}
.av-table tbody tr:last-child td {
  border-bottom: 0;
}


/* ============================================================
   v83.13 — Public home composition primitives.
   Home keeps its editorial layout, but recurring news cards,
   section actions, tabs, sidebar cards, and breaking states now
   map to AV DS cards/buttons/badges through dual classes.
   ============================================================ */
.av-home-shell {
  --home-card-radius: calc(var(--av-radius, 0.5rem) + 4px);
  --home-soft-shadow: 0 8px 24px hsl(var(--foreground) / 0.07);
  --home-strong-shadow: 0 16px 42px hsl(var(--foreground) / 0.12);
}

.home-breaking-slot:empty {
  display: none;
}

.av-home-section[hidden],
.poll-widget[hidden],
.poll-content[hidden],
.poll-loading[hidden] {
  display: none !important;
}

.home-breaking-banner {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  width: 100%;
  margin: 0 0 0.875rem;
  padding: 0.625rem 0.875rem;
  border: 0;
  border-radius: var(--home-card-radius);
  color: #fff;
  text-decoration: none;
  background: linear-gradient(90deg, var(--red, #d83236) 0%, #b82a2e 100%);
  box-shadow: 0 2px 8px rgba(216, 50, 54, 0.2);
  animation: totalHomeBreakingPulse 2.5s ease-in-out infinite;
}

.home-breaking-banner:hover {
  color: #fff;
  transform: translateY(-1px);
}

.home-breaking-banner__label {
  flex: 0 0 auto;
  padding: 0.1875rem 0.5rem;
  border-radius: 0.25rem;
  background: rgba(255, 255, 255, 0.22);
  font-size: 0.6875rem;
  font-weight: 800;
  letter-spacing: 0.08em;
  line-height: 1.2;
  white-space: nowrap;
}

.home-breaking-banner__title {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 0.875rem;
  font-weight: 650;
  line-height: 1.3;
}

.home-breaking-banner__arrow {
  flex: 0 0 auto;
  font-size: 1.25rem;
  line-height: 1;
  opacity: 0.82;
}

@keyframes totalHomeBreakingPulse {
  0%, 100% { box-shadow: 0 2px 8px rgba(216, 50, 54, 0.2); }
  50% { box-shadow: 0 2px 16px rgba(216, 50, 54, 0.5); }
}

.av-home-section {
  scroll-margin-top: 5rem;
}

.av-home-section .section-header,
.feed-duo.av-home-section .section-header {
  align-items: center;
  border-bottom-color: hsl(var(--border));
}

.av-home-section .section-title,
.feed-duo.av-home-section .section-title {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  color: hsl(var(--foreground));
}

.home-section-icon {
  display: inline-block;
  flex: 0 0 auto;
  margin-right: 0.25rem;
  vertical-align: -0.125rem;
}

.section-more.av-home-section-more {
  height: auto;
  min-height: 2rem;
  padding: 0.25rem 0.625rem;
  border-color: transparent;
  border-radius: 999px;
  background: hsl(var(--primary) / 0.08);
  color: hsl(var(--primary));
  text-transform: uppercase;
}

.section-more.av-home-section-more:hover,
.section-more.av-home-section-more:focus-visible {
  background: hsl(var(--primary) / 0.13);
  color: hsl(var(--primary));
}

.hero-main.av-home-hero-card {
  border-color: hsl(var(--border));
  box-shadow: var(--home-soft-shadow);
}

.hero-main.av-home-hero-card:hover {
  transform: none;
  box-shadow: var(--home-strong-shadow);
}

.hero-main.av-home-hero-card:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 3px;
}

.hero-side-item.av-home-side-card {
  border-color: hsl(var(--border));
  background: hsl(var(--card));
  box-shadow: 0 1px 2px hsl(var(--foreground) / 0.035);
}

.hero-side-item.av-home-side-card:hover {
  border-color: hsl(var(--ring) / 0.45);
  background: hsl(var(--ring) / 0.055);
  box-shadow: var(--home-soft-shadow);
}

.live-feed.av-home-live-feed {
  border-color: hsl(var(--border));
  background: hsl(var(--card));
  box-shadow: 0 1px 2px hsl(var(--foreground) / 0.035);
}

.live-feed__time--breaking {
  color: var(--red, #d83236);
  font-weight: 800;
}

.shelf-card.av-home-news-card {
  border-color: hsl(var(--border));
  background: hsl(var(--card));
  box-shadow: 0 1px 2px hsl(var(--foreground) / 0.035);
}

.shelf-card.av-home-news-card:hover {
  transform: translateY(-2px);
  border-color: hsl(var(--ring) / 0.52);
  box-shadow: var(--home-soft-shadow);
}

.shelf-card.av-home-news-card .shelf-card-overlay-cat,
.shelf-card.av-home-news-card .shelf-card-overlay-date,
.hero-side-date {
  border: 1px solid rgba(255, 255, 255, 0.18);
  background: rgba(0, 0, 0, 0.52);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

.ca-tab.av-home-tab {
  height: auto;
  min-height: 2rem;
  border-color: hsl(var(--border));
  border-radius: 999px;
  background: hsl(var(--card));
  color: hsl(var(--foreground));
}

.ca-tab.av-home-tab:hover {
  border-color: hsl(var(--ring) / 0.38);
  background: hsl(var(--ring) / 0.07);
}

.ca-tab.av-home-tab.is-active {
  border-color: hsl(var(--primary));
  background: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
}

.persons-strip.av-home-section {
  padding: var(--space-4);
  border-color: hsl(var(--border));
  background: hsl(var(--muted) / 0.32);
}

.persons-strip-card.av-card {
  border-color: hsl(var(--border) / 0.78);
  background: hsl(var(--card));
}

.persons-strip-card.av-card:hover {
  border-color: hsl(var(--ring) / 0.42);
  background: hsl(var(--card));
}

.av-home-sidebar-card {
  border-color: hsl(var(--border));
  background: hsl(var(--card));
  box-shadow: 0 1px 2px hsl(var(--foreground) / 0.035);
}

.poll-submit.av-btn {
  margin-top: 0.25rem;
}

.poll-progress {
  display: block;
  width: 100%;
  height: 0.5rem;
  overflow: hidden;
  border: 0;
  border-radius: 999px;
  background: hsl(var(--muted));
  accent-color: hsl(var(--primary));
}

.poll-progress::-webkit-progress-bar {
  background: hsl(var(--muted));
}

.poll-progress::-webkit-progress-value {
  border-radius: 999px;
  background: hsl(var(--primary));
}

.poll-progress::-moz-progress-bar {
  border-radius: 999px;
  background: hsl(var(--primary));
}

.btn-load-more.is-loading,
.btn-load-more.is-disabled-soft {
  opacity: 0.6;
}

.btn-load-more.is-disabled-soft {
  cursor: default;
}

.home-trending-tags-row {
  padding: var(--space-6) 0 var(--space-8);
}

.trending-pill.av-badge {
  border-color: hsl(var(--border));
  text-decoration: none;
}

.trending-pill.trending-pill--more {
  border-color: hsl(var(--primary));
  background: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
}

@media (max-width: 768px) {
  .home-breaking-banner {
    align-items: flex-start;
    gap: 0.5rem;
    padding: 0.625rem 0.75rem;
  }

  .home-breaking-banner__title {
    font-size: 0.8125rem;
  }

  .section-more.av-home-section-more {
    min-height: 1.875rem;
    padding: 0.25rem 0.5rem;
  }

  .persons-strip.av-home-section {
    padding: var(--space-3);
  }
}

/* Wave 19.1: quiet 2026 image empty states. */
.shelf-card-img {
  isolation: isolate;
}

.shelf-card-img:has(.shelf-card-img-empty)::before {
  opacity: 0;
}

.shelf-card-img-empty {
  position: absolute;
  inset: 0;
  z-index: 0;
  display: block;
  background:
    linear-gradient(135deg, hsl(var(--muted) / 0.52), hsl(var(--muted) / 0.26)),
    radial-gradient(circle at 82% 18%, hsl(var(--primary) / 0.10), transparent 32%);
}

.shelf-card-img-empty::before {
  content: "";
  position: absolute;
  inset: 50% auto auto 50%;
  width: 2.75rem;
  height: 2.75rem;
  transform: translate(-50%, -50%);
  border: 1.5px solid hsl(var(--muted-foreground) / 0.34);
  border-radius: 0.75rem;
  opacity: 0.72;
}

.shelf-card-img-empty::after {
  content: "";
  position: absolute;
  inset: 50% auto auto 50%;
  width: 1.55rem;
  height: 1.1rem;
  transform: translate(-50%, -34%) rotate(45deg);
  border-right: 1.5px solid hsl(var(--muted-foreground) / 0.34);
  border-bottom: 1.5px solid hsl(var(--muted-foreground) / 0.34);
  opacity: 0.72;
}

img[src*="placeholder.svg"],
img[src*="placeholder-card.svg"] {
  padding: 0 !important;
  opacity: 1 !important;
  object-fit: cover !important;
  background: hsl(var(--muted) / 0.45) !important;
}

[data-theme="dark"] .shelf-card-img-empty {
  background:
    linear-gradient(135deg, hsl(var(--muted) / 0.42), hsl(var(--background) / 0.70)),
    radial-gradient(circle at 82% 18%, hsl(var(--primary) / 0.13), transparent 34%);
}

/* Wave 19.2: bridge AV DS HSL tokens with Total's legacy hex border vars. */
.av-card:not(.av-card--ghost) {
  border-color: var(--border-light, #e5e7eb);
}

.hero-main.av-home-hero-card,
.hero-side-item.av-home-side-card,
.live-feed.av-home-live-feed,
.shelf-card.av-home-news-card,
.persons-strip.av-card,
.persons-strip-card.av-card,
.av-home-sidebar-card,
.ca-tab.av-home-tab {
  border-width: 1px;
  border-color: var(--border-light, #e5e7eb) !important;
}

.hero-main.av-home-hero-card,
.hero-side-item.av-home-side-card,
.live-feed.av-home-live-feed,
.shelf-card.av-home-news-card,
.persons-strip.av-card,
.persons-strip-card.av-card,
.av-home-sidebar-card {
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.035);
}

.hero-side-item.av-home-side-card:hover,
.shelf-card.av-home-news-card:hover,
.persons-strip-card.av-card:hover {
  border-color: color-mix(in srgb, var(--accent, #007A8C) 34%, var(--border-light, #e5e7eb)) !important;
  box-shadow: 0 8px 22px rgba(15, 23, 42, 0.075);
}

.ca-tab.av-home-tab {
  background: var(--surface, #fff);
  color: var(--text, #1a1a2e);
}

.ca-tab.av-home-tab.is-active {
  border-color: var(--accent, #007A8C) !important;
}

/* Wave 19.3: visual spot-check fixes for public chrome and media fallbacks. */
@media (min-width: 1100px) and (max-width: 1320px) {
  .header-inner {
    gap: var(--space-4);
    padding-inline: var(--space-4);
  }

  .header-nav {
    gap: 2px;
    min-width: 0;
  }

  .header-nav a {
    padding-inline: var(--space-2);
  }

  .header-actions {
    gap: 4px;
  }

  .site-logo-text {
    font-size: 1.35rem;
  }

  .anniversary-badge {
    padding-inline: 6px;
  }
}

.hero-side-thumb,
.shelf-card-img,
.card-image,
.search-result-thumb,
.feed-item-thumb,
.related-thumb {
  position: relative;
  overflow: hidden;
  background:
    linear-gradient(135deg, #f5f7f8 0%, #e8eef0 100%);
}

.hero-side-thumb::before,
.card-image::before,
.search-result-thumb::before,
.feed-item-thumb::before,
.related-thumb::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='52' height='52' viewBox='0 0 24 24' fill='none' stroke='%2398a6ad' stroke-width='1.45' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3.5' y='5' width='17' height='14' rx='2.5'/%3E%3Ccircle cx='9' cy='10' r='1.6'/%3E%3Cpath d='m20 16-4.5-4.5a2 2 0 0 0-2.8 0L5 19'/%3E%3C/svg%3E")
    center / 2.9rem 2.9rem no-repeat;
  opacity: 0.42;
  pointer-events: none;
}

.hero-side-thumb img,
.card-image img,
.search-result-thumb img,
.feed-item-thumb img,
.related-thumb img {
  position: relative;
  z-index: 1;
}

[data-theme="dark"] .hero-side-thumb,
[data-theme="dark"] .shelf-card-img,
[data-theme="dark"] .card-image,
[data-theme="dark"] .search-result-thumb,
[data-theme="dark"] .feed-item-thumb,
[data-theme="dark"] .related-thumb {
  background:
    linear-gradient(135deg, #28313b 0%, #202832 100%) !important;
}

[data-theme="dark"] .hero-side-thumb::before,
[data-theme="dark"] .card-image::before,
[data-theme="dark"] .search-result-thumb::before,
[data-theme="dark"] .feed-item-thumb::before,
[data-theme="dark"] .related-thumb::before {
  filter: brightness(1.35);
  opacity: 0.34;
}

@media (max-width: 768px) {
  body {
    padding-bottom: 72px;
  }

  .news-ticker {
    display: none !important;
  }

  .article-top-bar {
    flex-wrap: nowrap;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
  }

  .article-top-bar > span:last-child {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}

/* Wave 19.4: final public-page sweep fixes. */
.ad-placeholder[aria-hidden="true"] {
  display: none !important;
  height: 0 !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden !important;
}

.at3-root,
.at3-root * {
  min-width: 0;
}

.at3-root code,
.at3-code {
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: break-word;
}

.mobile-menu:not(.is-open) .mobile-menu-drawer {
  display: none !important;
}

.mobile-menu.is-open .mobile-menu-drawer {
  display: flex !important;
}

@media (max-width: 640px) {
  .section-header {
    gap: 8px;
    min-width: 0;
  }

  .section-more.av-home-section-more {
    flex: 0 1 auto;
    max-width: 48vw;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .at3-api__item,
  .at3-code {
    overflow-x: auto;
  }

  .at3-code {
    white-space: pre-wrap;
  }
}
