/* theme.css — токены и компоненты void-theme для движка презентаций.
 *
 * Раздел 1 (токены) — дословная копия ~/projects/void-theme/src/styles/colorscheme.scss.
 * Она сгенерирована там из colorscheme/*.yaml; руками её не править.
 * `bin/build.py --sync-theme` перечитывает копию и печатает расхождение в отчёте.
 *
 * Раздел 2 (компоненты) — перенос ~/projects/void-theme/src/styles/components/*.scss
 * в чистый CSS: без Tailwind и без SCSS-циклов, поэтому тональные варианты
 * (6 цветов x solid/outline/soft) развёрнуты явно. Значения color-mix, радиусы
 * и переходы повторяют оригинал.
 */

/* ================================================================
 * 1. ТОКЕНЫ ГАММ  (colorscheme.scss, дословно)
 * ================================================================ */

/* Сгенерировано scripts/build-colorschemes.mjs из colorscheme/*.yaml — не редактировать */

/* Гамма по умолчанию: blocks */
:root,
html[data-scheme="blocks"] {
  color-scheme: light;
  --background: oklch(100% 0 0);
  --foreground: oklch(14.5% 0 0);
  --surface: oklch(100% 0 0);
  --surface-foreground: oklch(14.5% 0 0);
  --primary: oklch(20.5% 0 0);
  --primary-foreground: oklch(98.5% 0 0);
  --secondary: oklch(97% 0 0);
  --secondary-foreground: oklch(20.5% 0 0);
  --muted: oklch(97% 0 0);
  --muted-foreground: oklch(55.6% 0 0);
  --accent: oklch(97% 0 0);
  --accent-foreground: oklch(20.5% 0 0);
  --success: oklch(64% 0.09 150);
  --success-foreground: oklch(98.5% 0 0);
  --warning: oklch(78% 0.10 85);
  --warning-foreground: oklch(20.5% 0 0);
  --danger: oklch(62% 0.12 25);
  --danger-foreground: oklch(98.5% 0 0);
  --info: oklch(62% 0.07 235);
  --info-foreground: oklch(98.5% 0 0);
  --border: oklch(80.2% 0 0);
  --input: oklch(80.2% 0 0);
  --ring: oklch(70.8% 0 0);
  --sidebar: oklch(98.5% 0 0);
  --sidebar-foreground: oklch(14.5% 0 0);
  --sidebar-accent: oklch(97% 0 0);
  --sidebar-accent-foreground: oklch(20.5% 0 0);
  --sidebar-border: oklch(80.2% 0 0);
  --chart-1: oklch(72% 0.09 40);
  --chart-2: oklch(72% 0.08 185);
  --chart-3: oklch(62% 0.07 230);
  --chart-4: oklch(84% 0.09 85);
  --chart-5: oklch(78% 0.09 70);
  --radius: 8px;
}

.dark,
html[data-scheme="blocks"].dark {
  color-scheme: dark;
  --background: oklch(24.5% 0 0);
  --foreground: oklch(83.5% 0 0);
  --surface: oklch(24.5% 0 0);
  --surface-foreground: oklch(83.5% 0 0);
  --primary: oklch(90.2% 0 0);
  --primary-foreground: oklch(20.5% 0 0);
  --secondary: oklch(26.9% 0 0);
  --secondary-foreground: oklch(98.5% 0 0);
  --muted: oklch(26.9% 0 0);
  --muted-foreground: oklch(70.8% 0 0);
  --accent: oklch(26.9% 0 0);
  --accent-foreground: oklch(98.5% 0 0);
  --success: oklch(70% 0.09 155);
  --success-foreground: oklch(14.5% 0 0);
  --warning: oklch(80% 0.09 90);
  --warning-foreground: oklch(14.5% 0 0);
  --danger: oklch(70% 0.11 25);
  --danger-foreground: oklch(98.5% 0 0);
  --info: oklch(68% 0.07 235);
  --info-foreground: oklch(14.5% 0 0);
  --border: oklch(100% 0 0 / .1);
  --input: oklch(100% 0 0 / .15);
  --ring: oklch(55.6% 0 0);
  --sidebar: oklch(24.5% 0 0);
  --sidebar-foreground: oklch(83.5% 0 0);
  --sidebar-accent: oklch(26.9% 0 0);
  --sidebar-accent-foreground: oklch(98.5% 0 0);
  --sidebar-border: oklch(100% 0 0 / .1);
  --chart-1: oklch(62% 0.10 265);
  --chart-2: oklch(72% 0.09 165);
  --chart-3: oklch(80% 0.09 70);
  --chart-4: oklch(70% 0.10 305);
  --chart-5: oklch(70% 0.10 20);
  --radius: 8px;
}

/* Adwaita */
html[data-scheme="adwaita"] {
  color-scheme: light;
  --background: #fafafb;
  --foreground: #241f31;
  --surface: #ffffff;
  --surface-foreground: #241f31;
  --primary: #3584e4;
  --primary-foreground: #ffffff;
  --secondary: #edeff2;
  --secondary-foreground: #241f31;
  --muted: #edeff2;
  --muted-foreground: #5e5c64;
  --accent: #e4e8ee;
  --accent-foreground: #241f31;
  --success: #26a269;
  --success-foreground: #ffffff;
  --warning: #e5a50a;
  --warning-foreground: #241f31;
  --danger: #e01b24;
  --danger-foreground: #ffffff;
  --info: #1c71d8;
  --info-foreground: #ffffff;
  --border: #d8dce3;
  --input: #d8dce3;
  --ring: #3584e4;
  --sidebar: #f2f4f7;
  --sidebar-foreground: #241f31;
  --sidebar-accent: #e2e6ec;
  --sidebar-accent-foreground: #241f31;
  --sidebar-border: #d8dce3;
  --chart-1: #3584e4;
  --chart-2: #26a269;
  --chart-3: #e5a50a;
  --chart-4: #e01b24;
  --chart-5: #9141ac;
  --radius: 10px;
}

html[data-scheme="adwaita"].dark {
  color-scheme: dark;
  --background: #222226;
  --foreground: #f6f5f4;
  --surface: #303034;
  --surface-foreground: #f6f5f4;
  --primary: #78aeed;
  --primary-foreground: #141416;
  --secondary: #3b3b40;
  --secondary-foreground: #f6f5f4;
  --muted: #3b3b40;
  --muted-foreground: #9a9a9e;
  --accent: #3b3b40;
  --accent-foreground: #f6f5f4;
  --success: #2ec27e;
  --success-foreground: #141416;
  --warning: #f6d32d;
  --warning-foreground: #141416;
  --danger: #f66151;
  --danger-foreground: #141416;
  --info: #78aeed;
  --info-foreground: #141416;
  --border: #4a4a4f;
  --input: #4a4a4f;
  --ring: #78aeed;
  --sidebar: #1c1c1f;
  --sidebar-foreground: #f6f5f4;
  --sidebar-accent: #34343a;
  --sidebar-accent-foreground: #f6f5f4;
  --sidebar-border: #4a4a4f;
  --chart-1: #78aeed;
  --chart-2: #2ec27e;
  --chart-3: #f6d32d;
  --chart-4: #f66151;
  --chart-5: #c061cb;
  --radius: 10px;
}

/* Monokai */
html[data-scheme="monokai"] {
  color-scheme: light;
  --background: #f9f8f5;
  --foreground: #272822;
  --surface: #ffffff;
  --surface-foreground: #272822;
  --primary: #d61f69;
  --primary-foreground: #ffffff;
  --secondary: #efece4;
  --secondary-foreground: #272822;
  --muted: #efece4;
  --muted-foreground: #75715e;
  --accent: #efece4;
  --accent-foreground: #272822;
  --success: #5c9e12;
  --success-foreground: #ffffff;
  --warning: #9c8a12;
  --warning-foreground: #ffffff;
  --danger: #d61f69;
  --danger-foreground: #ffffff;
  --info: #0f9bc0;
  --info-foreground: #ffffff;
  --border: #e0dcd0;
  --input: #e0dcd0;
  --ring: #d61f69;
  --sidebar: #f1efe9;
  --sidebar-foreground: #272822;
  --sidebar-accent: #e6e2d7;
  --sidebar-accent-foreground: #272822;
  --sidebar-border: #e0dcd0;
  --chart-1: #d61f69;
  --chart-2: #5c9e12;
  --chart-3: #0f9bc0;
  --chart-4: #9c8a12;
  --chart-5: #8455d8;
  --radius: 6px;
}

html[data-scheme="monokai"].dark {
  color-scheme: dark;
  --background: #272822;
  --foreground: #f8f8f2;
  --surface: #31322b;
  --surface-foreground: #f8f8f2;
  --primary: #f92672;
  --primary-foreground: #f8f8f2;
  --secondary: #3e3d32;
  --secondary-foreground: #f8f8f2;
  --muted: #3e3d32;
  --muted-foreground: #8f8b7e;
  --accent: #3e3d32;
  --accent-foreground: #f8f8f2;
  --success: #a6e22e;
  --success-foreground: #272822;
  --warning: #e6db74;
  --warning-foreground: #272822;
  --danger: #f92672;
  --danger-foreground: #f8f8f2;
  --info: #66d9ef;
  --info-foreground: #272822;
  --border: #49483e;
  --input: #49483e;
  --ring: #f92672;
  --sidebar: #21221c;
  --sidebar-foreground: #f8f8f2;
  --sidebar-accent: #3e3d32;
  --sidebar-accent-foreground: #f8f8f2;
  --sidebar-border: #49483e;
  --chart-1: #f92672;
  --chart-2: #a6e22e;
  --chart-3: #66d9ef;
  --chart-4: #e6db74;
  --chart-5: #ae81ff;
  --radius: 6px;
}

/* ================================================================
 * 2. БАЗА
 * ================================================================ */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  background-color: var(--background);
  color: var(--foreground);
  font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
    "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif;
  font-size: 1rem;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

:root {
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
    "Liberation Mono", monospace;
}

a {
  color: color-mix(in oklab, var(--info) 82%, var(--foreground));
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: color-mix(in oklab, var(--info) 45%, var(--border));
  transition: color 0.2s ease-in-out, text-decoration-color 0.2s ease-in-out;
}
a:hover {
  color: var(--info);
  text-decoration-color: var(--info);
}

:focus-visible {
  outline: none;
  box-shadow: 0 0 0 2px var(--background), 0 0 0 4px var(--ring);
}

hr {
  border: 0;
  border-top: 1px dashed var(--border);
  margin-block: 1.25rem;
}

/* заголовки: вес и ритм темы, дальше по убыванию */
h1, h2, h3, h4, h5 {
  margin: 0 0 0.5em;
  font-weight: 600;
  line-height: 1.25;
  letter-spacing: -0.011em;
}

p {
  margin: 0 0 0.85em;
}
p:last-child {
  margin-bottom: 0;
}

ul, ol {
  margin: 0 0 0.85em;
  padding-left: 1.35em;
}
li {
  margin-bottom: 0.3em;
}
li::marker {
  color: var(--muted-foreground);
}

small {
  font-size: 0.8125rem;
}

strong {
  font-weight: 600;
  color: var(--foreground);
}

/* инлайновый код */
code, kbd, samp {
  font-family: var(--mono);
  font-size: 0.875em;
}
:not(pre) > code {
  padding: 0.125rem 0.375rem;
  border-radius: calc(var(--radius) - 4px);
  background-color: color-mix(in oklab, var(--foreground) 7%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--foreground) 9%, transparent);
  color: color-mix(in oklab, var(--foreground) 92%, var(--info));
  /* переносимся: длинный путь или команда не должна обрезать слайд */
  white-space: normal;
  overflow-wrap: anywhere;
}

kbd {
  display: inline-block;
  min-width: 1.5em;
  padding: 0.125rem 0.4375rem;
  font-size: 0.75rem;
  font-weight: 600;
  line-height: 1.4;
  text-align: center;
  color: var(--foreground);
  background-color: var(--surface);
  border-radius: calc(var(--radius) - 2px);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--foreground) 16%, transparent),
    0 1px 0 0 color-mix(in oklab, var(--foreground) 18%, transparent);
}

blockquote {
  margin: 0.85em 0;
  padding: 0.25rem 0 0.25rem 1rem;
  border-left: 2px solid color-mix(in oklab, var(--primary) 35%, var(--border));
  color: var(--muted-foreground);
}

/* таблицы — стиль cards-tables.scss: тонкие линейки, полосатые строки */
table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.9375rem;
}
thead th {
  padding: 0.625rem 0.875rem;
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  text-align: left;
  color: var(--muted-foreground);
  background-color: color-mix(in oklab, var(--muted) 45%, var(--surface));
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
}
tbody td {
  padding: 0.5625rem 0.875rem;
  border-bottom: 1px solid color-mix(in oklab, var(--border) 70%, transparent);
  vertical-align: top;
}
tbody tr:nth-child(even) {
  background-color: color-mix(in oklab, var(--muted) 30%, var(--surface));
}
tbody tr:hover {
  background-color: color-mix(in oklab, var(--muted) 55%, var(--surface));
}
td code, th code {
  white-space: nowrap;
}

/* ================================================================
 * 3. КОМПОНЕНТЫ
 * ================================================================ */

/* --- кнопки (buttons.scss) --- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  height: 2.25rem;
  padding-inline: 1rem;
  font-family: inherit;
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
  border-radius: calc(var(--radius) + 2px);
  background-color: var(--secondary);
  color: var(--secondary-foreground);
  border: 1px solid transparent;
  transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out,
    border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out, filter 0.2s ease-in-out;
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--foreground) 8%, transparent),
    0 1px 2px -1px color-mix(in oklab, var(--foreground) 10%, transparent),
    0 2px 4px 0 color-mix(in oklab, var(--foreground) 3%, transparent);
}
.btn svg {
  width: 1em;
  height: 1em;
  flex-shrink: 0;
}
.btn:disabled {
  opacity: 0.55;
  pointer-events: none;
  box-shadow: none;
}
.btn--xs { height: 1.75rem; padding-inline: 0.625rem; font-size: 0.75rem; gap: 0.25rem; border-radius: var(--radius); }
.btn--sm { height: 2rem; padding-inline: 0.75rem; font-size: 0.8125rem; }
.btn--lg { height: 2.5rem; padding-inline: 1.25rem; font-size: 0.9375rem; }
.btn--xl { height: 2.75rem; padding-inline: 1.5rem; font-size: 1rem; gap: 0.625rem; }
.btn--icon { width: 2.25rem; padding-inline: 0; }
.btn--icon.btn--xs { width: 1.75rem; }
.btn--icon.btn--sm { width: 2rem; }
.btn--icon.btn--lg { width: 2.5rem; }
.btn--pill { border-radius: 9999px; }
.btn--block { width: 100%; }
.btn--ghost {
  background-color: transparent;
  border: 1px solid transparent;
  box-shadow: none;
}
.btn--ghost:hover:not(:disabled) {
  background-color: var(--accent);
  color: var(--accent-foreground);
  box-shadow: 0 2px 10px -4px color-mix(in oklab, var(--foreground) 20%, transparent);
}
.btn--ghost:active:not(:disabled) { background-color: var(--muted); }
.btn--outline {
  color: var(--foreground);
  border: 1px solid var(--border);
  background-color: transparent;
  box-shadow: none;
}
.btn--outline:hover:not(:disabled) {
  background-color: var(--accent);
  color: var(--accent-foreground);
  border-color: color-mix(in oklab, var(--foreground) 25%, var(--border));
  box-shadow: 0 4px 12px -6px color-mix(in oklab, var(--foreground) 25%, transparent);
}
.btn--outline:active:not(:disabled) { background-color: var(--muted); }
.btn--link {
  height: auto;
  padding-inline: 0;
  background: none;
  border: 0;
  box-shadow: none;
  color: color-mix(in oklab, var(--info) 82%, var(--foreground));
  text-decoration: underline;
  text-underline-offset: 3px;
}
.btn--link:hover:not(:disabled) {
  color: var(--info);
  text-decoration-thickness: 2px;
}

/* primary */
.btn--primary {
  background-color: var(--primary);
  color: var(--primary-foreground);
  border: 1px solid color-mix(in oklab, var(--primary-foreground) 12%, transparent);
}
.btn--primary:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--primary) 87%, var(--background));
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--primary) 35%, transparent),
    0 6px 16px -6px color-mix(in oklab, var(--primary) 55%, transparent);
}
.btn--outline-primary {
  color: color-mix(in oklab, var(--primary) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--primary) 25%, var(--border));
  background-color: transparent;
  box-shadow: none;
}
.btn--outline-primary:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--primary) 10%, var(--surface));
  border-color: color-mix(in oklab, var(--primary) 50%, var(--border));
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--primary) 45%, transparent);
}
.btn--soft-primary {
  color: color-mix(in oklab, var(--primary) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--primary) 14%, transparent);
  border: 1px solid color-mix(in oklab, var(--primary) 20%, transparent);
  box-shadow: none;
}
.btn--soft-primary:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--primary) 24%, transparent);
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--primary) 40%, transparent);
}
/* secondary */
.btn--secondary {
  background-color: var(--secondary);
  color: var(--secondary-foreground);
  border: 1px solid color-mix(in oklab, var(--secondary-foreground) 12%, transparent);
}
.btn--secondary:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--secondary) 87%, var(--background));
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--secondary) 35%, transparent),
    0 6px 16px -6px color-mix(in oklab, var(--secondary) 55%, transparent);
}
.btn--outline-secondary {
  color: color-mix(in oklab, var(--secondary) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--secondary) 45%, var(--border));
  background-color: transparent;
  box-shadow: none;
}
.btn--outline-secondary:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--secondary) 10%, var(--surface));
  border-color: color-mix(in oklab, var(--secondary) 70%, var(--border));
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--secondary) 45%, transparent);
}
.btn--soft-secondary {
  color: color-mix(in oklab, var(--secondary) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--secondary) 14%, transparent);
  border: 1px solid color-mix(in oklab, var(--secondary) 20%, transparent);
  box-shadow: none;
}
.btn--soft-secondary:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--secondary) 24%, transparent);
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--secondary) 40%, transparent);
}
/* success */
.btn--success {
  background-color: var(--success);
  color: var(--success-foreground);
  border: 1px solid color-mix(in oklab, var(--success-foreground) 12%, transparent);
}
.btn--success:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--success) 87%, var(--background));
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--success) 35%, transparent),
    0 6px 16px -6px color-mix(in oklab, var(--success) 55%, transparent);
}
.btn--outline-success {
  color: color-mix(in oklab, var(--success) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--success) 45%, var(--border));
  background-color: transparent;
  box-shadow: none;
}
.btn--outline-success:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--success) 10%, var(--surface));
  border-color: color-mix(in oklab, var(--success) 70%, var(--border));
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--success) 45%, transparent);
}
.btn--soft-success {
  color: color-mix(in oklab, var(--success) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--success) 14%, transparent);
  border: 1px solid color-mix(in oklab, var(--success) 20%, transparent);
  box-shadow: none;
}
.btn--soft-success:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--success) 24%, transparent);
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--success) 40%, transparent);
}
/* warning */
.btn--warning {
  background-color: var(--warning);
  color: var(--warning-foreground);
  border: 1px solid color-mix(in oklab, var(--warning-foreground) 12%, transparent);
}
.btn--warning:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--warning) 87%, var(--background));
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--warning) 35%, transparent),
    0 6px 16px -6px color-mix(in oklab, var(--warning) 55%, transparent);
}
.btn--outline-warning {
  color: color-mix(in oklab, var(--warning) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--warning) 45%, var(--border));
  background-color: transparent;
  box-shadow: none;
}
.btn--outline-warning:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--warning) 10%, var(--surface));
  border-color: color-mix(in oklab, var(--warning) 70%, var(--border));
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--warning) 45%, transparent);
}
.btn--soft-warning {
  color: color-mix(in oklab, var(--warning) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--warning) 14%, transparent);
  border: 1px solid color-mix(in oklab, var(--warning) 20%, transparent);
  box-shadow: none;
}
.btn--soft-warning:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--warning) 24%, transparent);
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--warning) 40%, transparent);
}
/* danger */
.btn--danger {
  background-color: var(--danger);
  color: var(--danger-foreground);
  border: 1px solid color-mix(in oklab, var(--danger-foreground) 12%, transparent);
}
.btn--danger:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--danger) 87%, var(--background));
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--danger) 35%, transparent),
    0 6px 16px -6px color-mix(in oklab, var(--danger) 55%, transparent);
}
.btn--outline-danger {
  color: color-mix(in oklab, var(--danger) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--danger) 45%, var(--border));
  background-color: transparent;
  box-shadow: none;
}
.btn--outline-danger:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--danger) 10%, var(--surface));
  border-color: color-mix(in oklab, var(--danger) 70%, var(--border));
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--danger) 45%, transparent);
}
.btn--soft-danger {
  color: color-mix(in oklab, var(--danger) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--danger) 14%, transparent);
  border: 1px solid color-mix(in oklab, var(--danger) 20%, transparent);
  box-shadow: none;
}
.btn--soft-danger:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--danger) 24%, transparent);
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--danger) 40%, transparent);
}
/* info */
.btn--info {
  background-color: var(--info);
  color: var(--info-foreground);
  border: 1px solid color-mix(in oklab, var(--info-foreground) 12%, transparent);
}
.btn--info:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--info) 87%, var(--background));
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--info) 35%, transparent),
    0 6px 16px -6px color-mix(in oklab, var(--info) 55%, transparent);
}
.btn--outline-info {
  color: color-mix(in oklab, var(--info) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--info) 45%, var(--border));
  background-color: transparent;
  box-shadow: none;
}
.btn--outline-info:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--info) 10%, var(--surface));
  border-color: color-mix(in oklab, var(--info) 70%, var(--border));
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--info) 45%, transparent);
}
.btn--soft-info {
  color: color-mix(in oklab, var(--info) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--info) 14%, transparent);
  border: 1px solid color-mix(in oklab, var(--info) 20%, transparent);
  box-shadow: none;
}
.btn--soft-info:hover:not(:disabled) {
  background-color: color-mix(in oklab, var(--info) 24%, transparent);
  box-shadow: 0 4px 14px -6px color-mix(in oklab, var(--info) 40%, transparent);
}

/* --- бейджи и теги (badges-tags.scss) --- */
.badge {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  padding: 0.125rem 0.625rem;
  font-size: 0.75rem;
  font-weight: 500;
  line-height: 1.5;
  border-radius: 9999px;
  background-color: var(--secondary);
  color: var(--secondary-foreground);
  white-space: nowrap;
}
.badge svg { width: 1em; height: 1em; flex-shrink: 0; }
.badge__dot {
  width: 0.375rem;
  height: 0.375rem;
  border-radius: 9999px;
  background-color: currentColor;
}

.tag {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  padding: 0.3125rem 0.625rem;
  font-size: 0.75rem;
  font-weight: 500;
  border-radius: calc(var(--radius) - 2px);
  color: var(--secondary-foreground);
  background-color: var(--secondary);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--foreground) 12%, transparent);
}
.tag svg { width: 1em; height: 1em; flex-shrink: 0; }

.badge--neutral {
  background-color: var(--secondary);
  color: var(--secondary-foreground);
}
.badge--soft-neutral {
  color: color-mix(in oklab, var(--secondary) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--secondary) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--secondary) 24%, transparent);
}
.badge--outline-neutral {
  color: color-mix(in oklab, var(--secondary) 85%, var(--foreground));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--secondary) 45%, var(--border));
}
.badge--success {
  background-color: var(--success);
  color: var(--success-foreground);
}
.badge--soft-success {
  color: color-mix(in oklab, var(--success) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--success) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--success) 24%, transparent);
}
.badge--outline-success {
  color: color-mix(in oklab, var(--success) 85%, var(--foreground));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--success) 45%, var(--border));
}
.badge--warning {
  background-color: var(--warning);
  color: var(--warning-foreground);
}
.badge--soft-warning {
  color: color-mix(in oklab, var(--warning) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--warning) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--warning) 24%, transparent);
}
.badge--outline-warning {
  color: color-mix(in oklab, var(--warning) 85%, var(--foreground));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--warning) 45%, var(--border));
}
.badge--danger {
  background-color: var(--danger);
  color: var(--danger-foreground);
}
.badge--soft-danger {
  color: color-mix(in oklab, var(--danger) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--danger) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--danger) 24%, transparent);
}
.badge--outline-danger {
  color: color-mix(in oklab, var(--danger) 85%, var(--foreground));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--danger) 45%, var(--border));
}
.badge--info {
  background-color: var(--info);
  color: var(--info-foreground);
}
.badge--soft-info {
  color: color-mix(in oklab, var(--info) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--info) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--info) 24%, transparent);
}
.badge--outline-info {
  color: color-mix(in oklab, var(--info) 85%, var(--foreground));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--info) 45%, var(--border));
}
.badge--primary {
  background-color: var(--primary);
  color: var(--primary-foreground);
}
.badge--soft-primary {
  color: color-mix(in oklab, var(--primary) 82%, var(--foreground));
  background-color: color-mix(in oklab, var(--primary) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--primary) 24%, transparent);
}
.badge--outline-primary {
  color: color-mix(in oklab, var(--primary) 85%, var(--foreground));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--primary) 45%, var(--border));
}
.tag--primary {
  color: color-mix(in oklab, var(--primary) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--primary) 12%, var(--surface));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--primary) 28%, var(--border));
}
.tag--success {
  color: color-mix(in oklab, var(--success) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--success) 12%, var(--surface));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--success) 28%, var(--border));
}
.tag--warning {
  color: color-mix(in oklab, var(--warning) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--warning) 12%, var(--surface));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--warning) 28%, var(--border));
}
.tag--danger {
  color: color-mix(in oklab, var(--danger) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--danger) 12%, var(--surface));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--danger) 28%, var(--border));
}
.tag--info {
  color: color-mix(in oklab, var(--info) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--info) 12%, var(--surface));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--info) 28%, var(--border));
}

/* --- карточки и таблицы (cards-tables.scss) --- */
.card {
  padding: 1.25rem 1.5rem;
  background-color: var(--surface);
  color: var(--surface-foreground);
  border: 1px solid var(--border);
  border-top-width: 1px;
  border-radius: var(--radius);
  box-shadow: 0 1px 2px -1px color-mix(in oklab, var(--foreground) 10%, transparent);
}
.card__title {
  font-size: 0.9375rem;
  font-weight: 600;
  margin-bottom: 0.5rem;
}
.card-table {
  margin-inline: -1.5rem;
  width: calc(100% + 3rem);
}
.card-table tr > :first-child { border-left: 0; }
.card-table tr > :last-child { border-right: 0; }
.table-wrap {
  overflow-x: auto;
  border: 1px solid var(--border);
  border-radius: var(--radius);
}
.table-wrap > table { margin: 0; }

/* --- инфоблоки (callouts.scss) --- */
.callout {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  padding: 0.875rem 1rem;
  font-size: 0.9375rem;
  border-radius: calc(var(--radius) - 2px);
  transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out,
    color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
}
.callout > svg {
  width: 1.25rem;
  height: 1.25rem;
  flex-shrink: 0;
  margin-top: 0.125rem;
}
.callout__body { min-width: 0; flex: 1; }
.callout__title { font-weight: 600; }
.callout__text { margin-top: 0.25rem; font-size: 0.875rem; opacity: 0.92; }
.callout__text > p { margin-bottom: 0.4em; }
.callout__text > p:last-child { margin-bottom: 0; }
.callout ul, .callout ol { margin-bottom: 0; }

/* primary */
.callout--primary {
  background-color: var(--primary);
  color: var(--primary-foreground);
  border: 1px solid color-mix(in oklab, var(--primary-foreground) 14%, transparent);
}
.callout--outline-primary {
  background-color: transparent;
  color: color-mix(in oklab, var(--primary) 85%, var(--foreground));
  border: 1px dashed color-mix(in oklab, var(--primary) 25%, var(--border));
}
.callout--soft-primary {
  background-color: color-mix(in oklab, var(--primary) 12%, transparent);
  color: color-mix(in oklab, var(--primary) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--primary) 18%, transparent);
}
/* secondary */
.callout--secondary {
  background-color: var(--secondary);
  color: var(--secondary-foreground);
  border: 1px solid color-mix(in oklab, var(--secondary-foreground) 14%, transparent);
}
.callout--outline-secondary {
  background-color: transparent;
  color: color-mix(in oklab, var(--secondary) 85%, var(--foreground));
  border: 1px dashed color-mix(in oklab, var(--secondary) 45%, var(--border));
}
.callout--soft-secondary {
  background-color: color-mix(in oklab, var(--secondary) 12%, transparent);
  color: color-mix(in oklab, var(--secondary) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--secondary) 18%, transparent);
}
/* success */
.callout--success {
  background-color: var(--success);
  color: var(--success-foreground);
  border: 1px solid color-mix(in oklab, var(--success-foreground) 14%, transparent);
}
.callout--outline-success {
  background-color: transparent;
  color: color-mix(in oklab, var(--success) 85%, var(--foreground));
  border: 1px dashed color-mix(in oklab, var(--success) 45%, var(--border));
}
.callout--soft-success {
  background-color: color-mix(in oklab, var(--success) 12%, transparent);
  color: color-mix(in oklab, var(--success) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--success) 18%, transparent);
}
/* warning */
.callout--warning {
  background-color: var(--warning);
  color: var(--warning-foreground);
  border: 1px solid color-mix(in oklab, var(--warning-foreground) 14%, transparent);
}
.callout--outline-warning {
  background-color: transparent;
  color: color-mix(in oklab, var(--warning) 85%, var(--foreground));
  border: 1px dashed color-mix(in oklab, var(--warning) 45%, var(--border));
}
.callout--soft-warning {
  background-color: color-mix(in oklab, var(--warning) 12%, transparent);
  color: color-mix(in oklab, var(--warning) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--warning) 18%, transparent);
}
/* danger */
.callout--danger {
  background-color: var(--danger);
  color: var(--danger-foreground);
  border: 1px solid color-mix(in oklab, var(--danger-foreground) 14%, transparent);
}
.callout--outline-danger {
  background-color: transparent;
  color: color-mix(in oklab, var(--danger) 85%, var(--foreground));
  border: 1px dashed color-mix(in oklab, var(--danger) 45%, var(--border));
}
.callout--soft-danger {
  background-color: color-mix(in oklab, var(--danger) 12%, transparent);
  color: color-mix(in oklab, var(--danger) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--danger) 18%, transparent);
}
/* info */
.callout--info {
  background-color: var(--info);
  color: var(--info-foreground);
  border: 1px solid color-mix(in oklab, var(--info-foreground) 14%, transparent);
}
.callout--outline-info {
  background-color: transparent;
  color: color-mix(in oklab, var(--info) 85%, var(--foreground));
  border: 1px dashed color-mix(in oklab, var(--info) 45%, var(--border));
}
.callout--soft-info {
  background-color: color-mix(in oklab, var(--info) 12%, transparent);
  color: color-mix(in oklab, var(--info) 85%, var(--foreground));
  border: 1px solid color-mix(in oklab, var(--info) 18%, transparent);
}

/* --- прогресс (progress.scss) --- */
.progress {
  height: 0.375rem;
  border-radius: 9999px;
  background-color: color-mix(in oklab, var(--foreground) 12%, transparent);
  overflow: hidden;
}
.progress__bar {
  height: 100%;
  border-radius: inherit;
  background-color: var(--primary);
  transition: width 0.3s ease-in-out;
}
.progress__bar--primary { background-color: var(--primary); }
.progress__bar--success { background-color: var(--success); }
.progress__bar--info { background-color: var(--info); }
.progress__bar--soft-info { background-color: color-mix(in oklab, var(--info) 45%, transparent); }

/* --- текст-тон и статус-линия (callouts.scss) --- */
.text--primary { color: var(--primary); }
.text--outline-primary { color: color-mix(in oklab, var(--primary) 62%, var(--foreground)); }
.text--soft-primary {
  color: color-mix(in oklab, var(--primary) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--primary) 12%, transparent);
  border-radius: 0.25rem;
  padding-inline: 0.375rem;
}
.text--secondary { color: var(--secondary); }
.text--outline-secondary { color: color-mix(in oklab, var(--secondary) 62%, var(--foreground)); }
.text--soft-secondary {
  color: color-mix(in oklab, var(--secondary) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--secondary) 12%, transparent);
  border-radius: 0.25rem;
  padding-inline: 0.375rem;
}
.text--success { color: var(--success); }
.text--outline-success { color: color-mix(in oklab, var(--success) 62%, var(--foreground)); }
.text--soft-success {
  color: color-mix(in oklab, var(--success) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--success) 12%, transparent);
  border-radius: 0.25rem;
  padding-inline: 0.375rem;
}
.text--warning { color: var(--warning); }
.text--outline-warning { color: color-mix(in oklab, var(--warning) 62%, var(--foreground)); }
.text--soft-warning {
  color: color-mix(in oklab, var(--warning) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--warning) 12%, transparent);
  border-radius: 0.25rem;
  padding-inline: 0.375rem;
}
.text--danger { color: var(--danger); }
.text--outline-danger { color: color-mix(in oklab, var(--danger) 62%, var(--foreground)); }
.text--soft-danger {
  color: color-mix(in oklab, var(--danger) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--danger) 12%, transparent);
  border-radius: 0.25rem;
  padding-inline: 0.375rem;
}
.text--info { color: var(--info); }
.text--outline-info { color: color-mix(in oklab, var(--info) 62%, var(--foreground)); }
.text--soft-info {
  color: color-mix(in oklab, var(--info) 85%, var(--foreground));
  background-color: color-mix(in oklab, var(--info) 12%, transparent);
  border-radius: 0.25rem;
  padding-inline: 0.375rem;
}

.status-line {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.875rem;
  font-weight: 500;
}
.status-line__dot {
  width: 0.5rem;
  height: 0.5rem;
  flex-shrink: 0;
  border-radius: 9999px;
  background-color: currentColor;
}
.status-line--success { color: var(--success); }
.status-line--danger { color: var(--danger); }
.status-line--warning { color: var(--warning); }
.status-line--info { color: var(--info); }
.status-line--muted { color: var(--muted-foreground); }

/* --- таймлайн / лента шагов (timeline.scss) --- */
.timeline__item {
  position: relative;
  padding-bottom: 1.25rem;
}
.timeline__item::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 1rem;
  border-left: 2px dashed var(--border);
}
.timeline__item:last-child::before {
  bottom: auto;
  height: 2.25rem;
}
.timeline__node {
  position: absolute;
  top: 0.1875rem;
  left: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border: 1px solid var(--border);
  border-radius: 9999px;
  background-color: var(--surface);
  color: var(--muted-foreground);
  font-size: 0.8125rem;
  font-weight: 600;
  box-shadow: 0 0 0 4px var(--surface),
    0 2px 12px -2px color-mix(in oklab, var(--foreground) 22%, transparent);
}
.timeline__node svg { width: 1rem; height: 1rem; }
.timeline__card {
  margin-left: 3rem;
  padding-bottom: 1.25rem;
  border-bottom: 1px dashed var(--border);
}
.timeline__item:last-child .timeline__card {
  padding-bottom: 0;
  border-bottom: 0;
}
.timeline__title {
  font-size: 0.9375rem;
  font-weight: 600;
  line-height: 1.4;
}
.timeline__desc {
  margin-top: 0.25rem;
  font-size: 0.875rem;
  color: var(--muted-foreground);
}
.timeline__desc > p { margin-bottom: 0.4em; }
.timeline__desc > p:last-child { margin-bottom: 0; }

/* --- ссылки (links.scss) --- */
.link {
  color: color-mix(in oklab, var(--info) 82%, var(--foreground));
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: color-mix(in oklab, var(--info) 45%, var(--border));
}
.link:hover { color: var(--info); text-decoration-color: var(--info); }
.link--muted {
  color: var(--muted-foreground);
  text-decoration: none;
}
.link--muted:hover {
  color: var(--foreground);
  text-decoration: underline;
}
.link--dashed {
  text-decoration-style: dashed;
  text-decoration-color: color-mix(in oklab, var(--info) 60%, var(--border));
}

/* --- утилиты темы --- */
.text-muted { color: var(--muted-foreground); }
.text-sm { font-size: 0.875rem; }
.text-xs { font-size: 0.75rem; }
.mono { font-family: var(--mono); }
.nowrap { white-space: nowrap; }

/* тонкий скроллбар в цвет темы */
* {
  scrollbar-width: thin;
  scrollbar-color: color-mix(in oklab, var(--foreground) 28%, transparent) transparent;
}
*::-webkit-scrollbar { width: 8px; height: 8px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background-color: color-mix(in oklab, var(--foreground) 24%, transparent);
  border-radius: 9999px;
}
*::-webkit-scrollbar-thumb:hover {
  background-color: color-mix(in oklab, var(--foreground) 38%, transparent);
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}
