/* Калька — OVERRIDES: точечная добивка остатков старого стиля.
   Ред. 1 · 17.08.2026 · по разведке wf kalka-residue-recon (84 находки,
   215 hex-градиентных строк в 42 файлах; здесь — верхние по видимости).

   Файл грузится ПОСЛЕДНИМ в _kalka_css.html и ТОЛЬКО при KALKA_ENABLED:
   исходные легаси-файлы не тронуты — выключение флага возвращает старый
   вид полностью. Ни одного hex вне комментариев. !important — только
   против runtime-инжектируемых <style> (EducationWidget) и inline-стилей. */

/* ═══ 1. Сайдбар админки: корень тёмного фона — scoped-токены ═══════════
   Батарея селекторов кроет и ручные dark-оверрайды admin-panel-v2.css
   (строки 93/108): gd-токены сами переключаются «Синькой» в тёмной теме. */
:root .admin-layout,
:root[data-theme="dark"] .admin-layout {
  --sidebar-bg: var(--gd-paper);
  --sidebar-hover: var(--gd-field);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .admin-layout {
    --sidebar-bg: var(--gd-paper);
    --sidebar-hover: var(--gd-field);
  }
}
.admin-layout .sidebar {
  border-right: 1px solid var(--gd-hair);
  box-shadow: none;
}
.admin-layout .sidebar-nav { scrollbar-color: var(--gd-hair) transparent; }
.admin-layout .sidebar-nav::-webkit-scrollbar-thumb { background: var(--gd-hair); }
.admin-layout .sidebar-divider { background: var(--gd-hair); }
.admin-layout .sidebar-group-label { color: var(--gd-muted); }
.admin-layout .sidebar-item { color: var(--gd-ink); }
.admin-layout .sidebar-item:hover,
.admin-layout .sidebar-item.active { color: var(--gd-ink); }
.admin-layout .sidebar-item.active::before { background: var(--gd-signal); }
.admin-layout .sidebar-hamburger {
  color: var(--gd-ink);
  border: 1px solid var(--gd-edge);
}

/* ═══ 2. Hero «Пульс Системы» и его градиентные братья (#31.5) ══════════ */
.card.admin-pulse-card {
  background: var(--gd-field);
  background-image: none;
  border: 1px solid var(--gd-ink);
  color: var(--gd-ink);
}
.admin-pulse-card__title { color: var(--gd-ink); }
.admin-pulse-card__stats {
  background: var(--gd-paper);
  border: 1px solid var(--gd-hair);
}
.admin-map-marker-icon {
  background: var(--gd-ink);
  color: var(--gd-paper);
  border: 3px solid var(--gd-paper);
}
.admin-map-popup__llm {
  background: var(--gd-field);
  border: 1px solid var(--gd-hair);
  color: var(--gd-ink);
}

/* Заливки семейства "фиолетовый 135deg" по всему репо → тушь с бумагой */
.ugc-modal-header, .ugc-btn-primary, .ugc-cta-card, .ugc-compact-btn,
.grant-wizard .wizard-header, .wizard-header,
.citizen-new-ui-btn, .data-initialization-notification, .ai-explain-btn,
#generate-polygons-btn {
  background: var(--gd-ink);
  background-image: none;
  color: var(--gd-paper);
}
.tep-tab.active::after { background: var(--gd-ink); }
.moodboard-stats {
  background: var(--gd-field);
  background-image: none;
  color: var(--gd-ink);
  border: 1px solid var(--gd-hair);
}

/* ═══ 3. Пастельные подложки и прогрессы ═══════════════════════════════ */
body.pulse-body { background: var(--gd-paper); }
.tep-view { background: var(--gd-paper); }
#heroes-pane { background: var(--gd-paper); }
.dashboards-footer { background: var(--gd-field); }
.academy-hero::after { background: none; }
.academy-hero { background: var(--gd-field); }
.nav-archetype-banner { background: var(--gd-field); }
.sec-intro, .impact-balance-card, .promoter-ai-card {
  background: var(--gd-field);
  border: 1px solid var(--gd-hair);
}
.progress-toast .progress-bar { background: var(--gd-water); }
.kanban-card-progress__bar { background: var(--gd-water); }
.time-river-progress-card.is-error .progress-bar-fill { background: var(--gd-signal); }

/* ═══ 4. Горожанин: карточки быстрых действий ══════════════════════════
   Роль действия кодируется рамкой-кромкой: опрос — тушь, комментарий/
   история — петроль, идея — сурик. Градиентные фоны → поле. */
body[data-dashboard-theme="citizen"] .action-btn, .action-btn {
  background: var(--gd-field);
  border: 1px solid var(--gd-edge);
}
.dashboard-sidebar-left .action-buttons-container .action-btn:nth-child(1) {
  background: var(--gd-field); border-left: 4px solid var(--gd-ink); }
.dashboard-sidebar-left .action-buttons-container .action-btn:nth-child(2) {
  background: var(--gd-field); border-left: 4px solid var(--gd-water); }
.dashboard-sidebar-left .action-buttons-container .action-btn:nth-child(3) {
  background: var(--gd-field); border-left: 4px solid var(--gd-water); }
.dashboard-sidebar-left .action-buttons-container .action-btn:nth-child(4) {
  background: var(--gd-field); border-left: 4px solid var(--gd-signal); }
.action-btn.active {
  background: var(--gd-field);
  border-color: var(--gd-ink);
  color: var(--gd-ink);
}
.action-btn.active::before { background: var(--gd-ink); }

/* ═══ 5. Бейджи и чипы ═════════════════════════════════════════════════ */
.badge.badge-beta {
  background: var(--gd-field);
  background-image: none;
  color: var(--gd-muted);
  border: 1px solid var(--gd-edge);
}
#quests-pane .cq-badge {
  background: var(--gd-field) !important;
  color: var(--gd-water) !important;
  border: 1px solid var(--gd-edge) !important;
}
#quests-pane .cq-badge.urg-critical,
#quests-pane .cq-badge.urg-high { color: var(--gd-signal) !important; }
#quests-pane .cq-badge.reward { color: var(--gd-ink) !important; }
.hint-badge { background: var(--gd-ink); color: var(--gd-paper); }
.neuro-art-option .neuro-art-badge {
  background: var(--gd-field);
  background-image: none;
  color: var(--gd-water);
  border: 1px solid var(--gd-edge);
}

/* Шапка админки: статусы воркера/задач/ошибок — поле + смысловой цвет */
.stat-icon.success { background: var(--gd-field); color: var(--gd-ink);
  border: 1px solid var(--gd-edge); }
.stat-icon.danger  { background: var(--gd-field); color: var(--gd-signal);
  border: 1px solid var(--gd-signal); }
.stat-icon.info    { background: var(--gd-field); color: var(--gd-water);
  border: 1px solid var(--gd-edge); }
.admin-stat-icon-user { background: var(--gd-field); color: var(--gd-ink);
  border: 1px solid var(--gd-edge); }
.status-badge.active { background: var(--gd-field); color: var(--gd-ink);
  border: 1px solid var(--gd-edge); }
.status-badge.idle   { background: var(--gd-field); color: var(--gd-muted);
  border: 1px solid var(--gd-edge); }
.status-badge.error  { background: var(--gd-field); color: var(--gd-signal);
  border: 1px solid var(--gd-signal); }
.worker-indicator.idle { background-color: var(--gd-muted); }
.worker-indicator.connected { background-color: var(--gd-ink); }
.worker-indicator.disconnected { background-color: var(--gd-signal); }

/* ═══ 5б. Штамп (D-7): ContextBar — «паспорт экрана» в раме чертежа ═════
   ContextBar уже несёт роль штампа (город/исследование/период/версия,
   UX-P0-01) — перекраиваем его в канонную раму .gd-stamp, не плодя второй
   компонент (анти-дуп #9). */
.cb-bar {
  background: var(--gd-field);
  border: 1px solid var(--gd-ink);
  box-shadow: none;
}
.cb-lbl {
  font-family: var(--gd-mono);
  font-size: var(--gd-t-label);
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--gd-muted);
}
.cb-val {
  font-family: var(--gd-serif);
  color: var(--gd-ink);
}
.cb-seg { border-right: 1px solid var(--gd-hair); }
.cb-sep { color: var(--gd-hair); }
.cb-tech {
  font-family: var(--gd-mono);
  color: var(--gd-muted);
}

/* ═══ 5в. Пульс: плитки орбиты ролей — «приборы», не кнопки действий ════
   Это <button>, и канонная типографика кнопок (mono/uppercase/трекинг)
   раздувала подписи: .role-name имеет max-width 48px → плитки сталкивались
   на кольце (прод-скрин владельца 2026-08-17). Возвращаем компактный вид. */
button.role-orbit {
  font-family: var(--gd-serif);
  text-transform: none;
  letter-spacing: 0;
  background: var(--gd-field);
  font-size: inherit;
}
button.role-orbit:hover {
  background: var(--gd-field);
  color: var(--gd-ink);
  border-color: var(--gd-ink);
}
.role-orbit .role-name { font-family: var(--gd-serif); }

/* ═══ 5г. Радиусы, недосягаемые для нуля скруглений ════════════════════
   Правило-убийца в kalka-components = (0,3,0); ID-селекторы (1,x,0) его
   бьют. Единственный живой нарушитель по грепу 2026-08-17 —
   #mission-constructor-modal (data_engineer_layout 16px/8px,
   task_setter_layout 16px). Зеркалим селекторы дословно: специфичность
   равная, этот файл в каскаде последний → побеждает. */
#mission-constructor-modal .modal-dialog,
#mission-constructor-modal.mission-wizard-compact .context-fact-item,
#mission-constructor-modal.mission-wizard-compact .context-facts-list .context-fact-item {
  border-radius: 0 !important;
}

/* ═══ 6. Runtime-инжектируемые стили (EducationWidget рендерит <style>
   ПОСЛЕ наших ссылок — только !important) ══════════════════════════════ */
.education-widget {
  background: var(--gd-field) !important;
  border: 1px solid var(--gd-edge) !important;
}
.edu-widget-header {
  background: var(--gd-field) !important;
  color: var(--gd-ink) !important;
  border-bottom: 1px solid var(--gd-hair) !important;
}
