/* cdogeo-traj — общий фундамент витрины и админки: токены сайта cdogeo.kpfu.ru → переменные Bootstrap 5.3.8.
   Источник значений — design/traj/storefront-spec.md §1.1–1.2 (замер живого сайта, T-022). Подключать после bootstrap.min.css
   и vendor/fonts/pt/pt-fonts.css (PT Sans / PT Mono локально, D-118; внешние шрифты закрыты CSP). */

:root[data-bs-theme="light"] {
  --t-base: #ffffff; --t-panel: #ffffff; --t-surface: #f5f7fa; --t-surface-2: #eef1f6;
  --t-ink: #1a1c22; --t-ink-strong: #0f1116; --t-muted: #5b6572;
  --t-border: #e4e8ee; --t-border-strong: #d3d9e2;
  --t-primary: #00549F; --t-primary-h: #00427f; --t-on-primary: #ffffff;
  --t-primary-tint: #e7eef7; --t-primary-tint-2: #f2f6fb;
  --t-spark: #F2A81E; --t-spark-soft: #fdf0d3; --t-spark-ink: #4a350a;
  --t-ring: rgba(0,84,159,.75);
  --t-shadow: 0 2px 6px rgba(16,18,22,.05), 0 14px 30px -16px rgba(16,18,22,.18);
  --t-ok-bg: #d1e7dd; --t-ok-ink: #0a3622; --t-ok-border: #a3cfbb; --t-ok-mark: #198754;
  --t-invalid: #b02a37;
  --t-field-border: #808a99; /* T-034 UX-2: рамка полей ввода — 3,49 на #fff, 3,25 на --t-surface (WCAG 1.4.11) */
  --bs-primary-rgb: 0,84,159; --bs-link-color-rgb: 0,84,159; --bs-link-hover-color-rgb: 0,66,127;
}
:root[data-bs-theme="dark"] {
  --t-base: #0e1320; --t-panel: #131a27; --t-surface: #141b28; --t-surface-2: #1a2333;
  --t-ink: #e9edf3; --t-ink-strong: #f6f9fc; --t-muted: #9aa6b6;
  --t-border: #26303f; --t-border-strong: #33425a;
  --t-primary: #4d96da; --t-primary-h: #6aa9e4; --t-on-primary: #06213c;
  --t-primary-tint: #16273c; --t-primary-tint-2: #121d2c;
  /* T-034 П-1: текст на золотой подложке в тёмной теме — светлый --t-ink, не золото (золото не для текста); 12,32 на #33280f */
  --t-spark: #F5B940; --t-spark-soft: #33280f; --t-spark-ink: #e9edf3;
  --t-ring: rgba(77,150,218,.8);
  --t-shadow: 0 2px 6px rgba(0,0,0,.35), 0 18px 40px -18px rgba(0,0,0,.6);
  --t-ok-bg: #051b11; --t-ok-ink: #75b798; --t-ok-border: #0f5132; --t-ok-mark: #75b798;
  --t-invalid: #ea868f;
  --t-field-border: #66748a; /* T-034 UX-2: 3,91 на --t-base, 3,68 на --t-panel */
  --bs-primary-rgb: 77,150,218; --bs-link-color-rgb: 77,150,218; --bs-link-hover-color-rgb: 106,169,228;
}
:root[data-bs-theme="light"], :root[data-bs-theme="dark"] {
  --t-r-s: 11px; --t-r-m: 18px; --t-r-l: 26px;
  --bs-body-font-family: "PT Sans", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --bs-font-monospace: "PT Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --bs-body-font-size: 1rem;
  --bs-body-line-height: 1.55;
  --bs-body-color: var(--t-ink); --bs-body-bg: var(--t-base);
  --bs-emphasis-color: var(--t-ink-strong);
  --bs-heading-color: var(--t-ink-strong);
  --bs-secondary-color: var(--t-muted); --bs-secondary-bg: var(--t-surface-2); --bs-tertiary-bg: var(--t-surface);
  --bs-border-color: var(--t-border); --bs-border-color-translucent: var(--t-border);
  --bs-primary: var(--t-primary);
  --bs-primary-bg-subtle: var(--t-primary-tint); --bs-primary-border-subtle: var(--t-border-strong);
  --bs-link-color: var(--t-primary); --bs-link-hover-color: var(--t-primary-h);
  --bs-border-radius: 11px; --bs-border-radius-sm: 6px; --bs-border-radius-lg: 18px; --bs-border-radius-xl: 26px;
  --bs-focus-ring-color: var(--t-ring); --bs-focus-ring-width: 3px;
  --bs-form-invalid-color: var(--t-invalid); --bs-form-invalid-border-color: var(--t-invalid);
}
@media (min-width: 992px) {
  :root[data-bs-theme="light"], :root[data-bs-theme="dark"] { --bs-body-font-size: 1.0625rem; }
}

/* компоненты с цветом, вшитым hex-ом в Bootstrap 5.3.8 */
.btn { --bs-btn-font-weight: 700; --bs-btn-padding-y: .6875rem; --bs-btn-padding-x: 1.5rem; --bs-btn-border-radius: var(--t-r-s); }
.btn-sm { --bs-btn-padding-y: .375rem; --bs-btn-padding-x: .75rem; --bs-btn-font-size: .9375rem; }
.btn-lg { --bs-btn-padding-y: .8125rem; --bs-btn-padding-x: 2rem; --bs-btn-font-size: 1.0625rem; }
.btn-primary {
  --bs-btn-bg: var(--t-primary); --bs-btn-border-color: var(--t-primary);
  --bs-btn-disabled-bg: var(--t-primary); --bs-btn-disabled-border-color: var(--t-primary);
  --bs-btn-color: var(--t-on-primary); --bs-btn-hover-color: var(--t-on-primary);
  --bs-btn-active-color: var(--t-on-primary); --bs-btn-disabled-color: var(--t-on-primary);
  --bs-btn-hover-bg: var(--t-primary-h); --bs-btn-hover-border-color: var(--t-primary-h);
  --bs-btn-active-bg: var(--t-primary-h); --bs-btn-active-border-color: var(--t-primary-h);
}
.btn-outline-primary {
  --bs-btn-color: var(--t-primary); --bs-btn-border-color: var(--t-border-strong);
  --bs-btn-hover-bg: var(--t-primary-tint-2); --bs-btn-hover-color: var(--t-primary); --bs-btn-hover-border-color: var(--t-primary);
  --bs-btn-active-bg: var(--t-primary-tint-2); --bs-btn-active-color: var(--t-primary); --bs-btn-active-border-color: var(--t-primary);
  --bs-btn-disabled-color: var(--t-muted); --bs-btn-disabled-border-color: var(--t-border);
}
/* outline-danger в тёмной теме: #dc3545 на фоне #0e1320 — 4,09 < 4,5 (T-026 verdict-r1 п. 1) → #ea868f (danger-text-emphasis
   тёмной темы Bootstrap): 7,33 на фоне, наведение — тёмный текст на #ea868f, 7,33 */
:root[data-bs-theme="dark"] .btn-outline-danger {
  --bs-btn-color: #ea868f; --bs-btn-border-color: #ea868f;
  --bs-btn-hover-color: #0e1320; --bs-btn-hover-bg: #ea868f; --bs-btn-hover-border-color: #ea868f;
  --bs-btn-active-color: #0e1320; --bs-btn-active-bg: #ea868f; --bs-btn-active-border-color: #ea868f;
  --bs-btn-disabled-color: #ea868f; --bs-btn-disabled-border-color: #ea868f;
}
.btn-link { --bs-btn-color: var(--t-primary); --bs-btn-hover-color: var(--t-primary-h); --bs-btn-active-color: var(--t-primary-h); --bs-btn-font-weight: 700; }
/* T-034 UX-2: поля ввода — своя рамка (рамки карточек --t-border не трогаем); фокус и ошибка перекрывают её (0,2,0) */
.form-control, .form-select { border-color: var(--t-field-border); }
.form-check-input { width: 1.25em; height: 1.25em; border: 1.5px solid var(--t-muted); }
.form-check-input:checked { background-color: var(--t-primary); border-color: var(--t-primary); }
.progress { --bs-progress-height: 8px; --bs-progress-bg: var(--t-border); --bs-progress-bar-bg: var(--t-primary); --bs-progress-border-radius: 4px; }
.modal { --bs-modal-bg: var(--t-panel); --bs-modal-border-radius: var(--t-r-m); }
.table { --bs-table-bg: transparent; --bs-table-color: var(--t-ink); --bs-table-border-color: var(--t-border); }

/* фокус: рамка — только outline, как на сайте (spec §1.2, §6). Bootstrap гасит outline у кнопок и элементов форм правилами
   специфичности (0,2,0)–(0,3,0) (`.btn:focus-visible{outline:0}`, `.btn-close:focus{outline:0}` …) — повторяем рамку теми же
   селекторами ниже по каскаду и убираем box-shadow-фокус Bootstrap (T-022 круг 3, verdict-r1 п. 1). Общий файл с админкой. */
:focus-visible { outline: 3px solid var(--t-ring); outline-offset: 2px; }
.btn:focus-visible, .btn-check:focus-visible + .btn, .btn-close:focus-visible, .nav-link:focus-visible, .page-link:focus-visible,
.accordion-button:focus-visible, .navbar-toggler:focus-visible, .form-check-input:focus-visible, .form-range:focus-visible,
.dropdown-item:focus-visible, .list-group-item-action:focus-visible { outline: 3px solid var(--t-ring); outline-offset: 2px; box-shadow: none; }
.btn:focus, .btn-close:focus, .form-check-input:focus, .nav-link:focus, .page-link:focus, .accordion-button:focus, .navbar-toggler:focus { box-shadow: none; }
/* активная/нажатая кнопка в фокусе (`.btn.active:focus-visible`, `:not(.btn-check)+.btn:active:focus-visible` (0,4,0) …) берёт тень
   из --bs-btn-focus-box-shadow — гасим переменную и повторяем селекторы (T-026 verdict-r1 п. 5: кнопка периода дашборда) */
.btn { --bs-btn-focus-box-shadow: none; }
.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible,
.btn.active:focus-visible, .btn.show:focus-visible { outline: 3px solid var(--t-ring); outline-offset: 2px; box-shadow: none; }
.form-control:focus, .form-select:focus { outline: 3px solid var(--t-ring); outline-offset: 1px; border-color: var(--t-primary); box-shadow: none; }
.form-control.is-invalid:focus { border-color: var(--t-invalid); }
/* тень валидации Bootstrap на фокусе (`.form-control.is-invalid:focus{box-shadow:0 0 0 .25rem …}`, (0,3,0)–(0,4,0)) — те же
   селекторы ниже по каскаду: рамка — только outline (T-022 круг 4, verdict-r2 п. 3) */
.form-control.is-invalid:focus, .form-control.is-valid:focus, .form-select.is-invalid:focus, .form-select.is-valid:focus,
.form-check-input.is-invalid:focus, .form-check-input.is-valid:focus,
.was-validated .form-control:invalid:focus, .was-validated .form-control:valid:focus,
.was-validated .form-select:invalid:focus, .was-validated .form-select:valid:focus,
.was-validated .form-check-input:invalid:focus, .was-validated .form-check-input:valid:focus { box-shadow: none; }

/* T-035 UX-6: пагинация и code по токенам сайта (Bootstrap 5.3.8 вшивает #0d6efd и #d63384). На витрине .pagination и code
   не используются (поиск по templates/store) — правка её не задевает. Фокус .page-link — outline выше, тень Bootstrap гасится. */
.pagination {
  --bs-pagination-active-bg: var(--t-primary); --bs-pagination-active-border-color: var(--t-primary); --bs-pagination-active-color: var(--t-on-primary);
  --bs-pagination-hover-bg: var(--t-primary-tint-2); --bs-pagination-hover-border-color: var(--t-border-strong);
  --bs-pagination-focus-box-shadow: none;
  --bs-pagination-disabled-color: var(--t-muted); --bs-pagination-disabled-bg: var(--t-surface); --bs-pagination-disabled-border-color: var(--t-border);
}
:root[data-bs-theme="light"], :root[data-bs-theme="dark"] { --bs-code-color: var(--t-ink); --bs-primary-text-emphasis: var(--t-primary); }
code { background: var(--t-surface-2); padding: 0 .25em; border-radius: 4px; }
