@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/fonts/inter-cyrillic-wght-normal.woff2) format('woff2-variations');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/fonts/inter-latin-wght-normal.woff2) format('woff2-variations');
  unicode-range:
    U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Archivo Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  font-stretch: 62% 125%;
  src: url(/fonts/archivo-latin-wdth-normal.woff2) format('woff2-variations');
  unicode-range:
    U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Geist Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/fonts/geist-mono-cyrillic-500-normal.woff2) format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

@font-face {
  font-family: 'Geist Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 500;
  src: url(/fonts/geist-mono-latin-500-normal.woff2) format('woff2');
  unicode-range:
    U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329,
    U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


/* Auri design system tokens. Copied from auri-codex/packages/ui/src/tokens, 2026-09-30.
   Static local app: Auri fonts are served from /fonts; no CDN or build imports.
   Original SIL OFL 1.1 copyright notices and licenses are bundled in fonts/OFL.txt. */
/* Source: colors.css */
:root{
/* ---- Neutral ramp (Tailwind `gray`) — the structural palette ---- */
--gray-50:#f9fafb;--gray-100:#f3f4f6;--gray-200:#e5e7eb;--gray-300:#d1d5db;--gray-400:#9ca3af;--gray-500:#6b7280;--gray-600:#4b5563;--gray-700:#374151;--gray-800:#1f2937;--gray-900:#111827;--gray-950:#030712;
/* ---- Brand / primary (Tailwind `blue`) ---- */
--blue-50:#eff6ff;--blue-100:#dbeafe;--blue-200:#bfdbfe;--blue-300:#93c5fd;--blue-400:#60a5fa;--blue-500:#3b82f6;--blue-600:#2563eb;--blue-700:#1d4ed8;--blue-800:#1e40af;--blue-900:#1e3a8a;--blue-950:#172554;
/* ---- Semantic hues ---- */
--emerald-50:#ecfdf5;--emerald-200:#a7f3d0;--emerald-400:#34d399;--emerald-500:#10b981;--emerald-600:#059669;--emerald-900:#064e3b;--emerald-950:#022c22;
--red-50:#fef2f2;--red-200:#fecaca;--red-300:#fca5a5;--red-400:#f87171;--red-500:#ef4444;--red-600:#dc2626;--red-700:#b91c1c;--red-900:#7f1d1d;--red-950:#450a0a;
--yellow-50:#fefce8;--yellow-200:#fef08a;--yellow-500:#eab308;--yellow-600:#ca8a04;--yellow-900:#713f12;--yellow-950:#422006;
--amber-500:#f59e0b;
/* ---- Alpha scales (Radix Colors practice): identical ink on any background.
   a1–a2 washes, a3–a5 component states, a6–a8 borders/rings. ---- */
--gray-a1:rgb(107 114 128 / 0.04);--gray-a2:rgb(107 114 128 / 0.06);--gray-a3:rgb(107 114 128 / 0.08);--gray-a4:rgb(107 114 128 / 0.12);--gray-a5:rgb(107 114 128 / 0.16);--gray-a6:rgb(107 114 128 / 0.22);--gray-a7:rgb(107 114 128 / 0.3);--gray-a8:rgb(107 114 128 / 0.4);
--blue-a1:rgb(59 130 246 / 0.04);--blue-a2:rgb(59 130 246 / 0.06);--blue-a3:rgb(59 130 246 / 0.1);--blue-a4:rgb(59 130 246 / 0.14);--blue-a5:rgb(59 130 246 / 0.18);--blue-a6:rgb(59 130 246 / 0.24);--blue-a7:rgb(59 130 246 / 0.3);--blue-a8:rgb(59 130 246 / 0.4);

/* Instrument textures: hero/section/empty surfaces ONLY — never under tables or charts */
--paper:repeating-linear-gradient(to bottom,transparent 0 7px,var(--gray-100) 7px 8px); /* @kind other */
--dot-grid:radial-gradient(circle,var(--gray-200) 1px,transparent 1.4px); /* @kind other */ /* use with background-size:16px 16px */
--grid-paper:repeating-linear-gradient(to bottom,transparent 0 15px,var(--gray-100) 15px 16px),repeating-linear-gradient(to right,transparent 0 15px,var(--gray-100) 15px 16px); /* @kind other */
--texture-fade:radial-gradient(ellipse 70% 60% at 50% 40%,black 45%,transparent 100%); /* @kind other */ /* mask-image so textures dissolve, never wallpaper */

/* ---- Action run states ---- */
--run-queued:var(--gray-400);--run-running:var(--blue-500);--run-succeeded:var(--emerald-500);--run-failed:var(--red-500);

/* ---- Chart categorical order (utils/chartColors.ts) ---- */
--chart-blue:#3b82f6;--chart-emerald:#10b981;--chart-violet:#8b5cf6;--chart-amber:#f59e0b;--chart-gray:#6b7280;--chart-cyan:#06b6d4;--chart-pink:#ec4899;--chart-lime:#84cc16;--chart-fuchsia:#d946ef;

/* ---- Каналы (chat-list.md, п. 2): фирменные цвета мессенджеров — значок канала на аватаре; одинаковы в обеих темах,
   канал различает знак, цвет ему помогает ---- */
--channel-telegram:#2AABEE;--channel-whatsapp:#25D366;--channel-vk:#0077FF;--channel-avito:#00AAFF;--channel-instagram:#E1306C;--channel-max:#5B5FEF;--channel-viber:#7360F2;--channel-facebook:#0866FF;--channel-ok:#EE8208;

/* ---- Semantic aliases (light, the default scheme) ---- */
--bg-page:#ffffff;
/* Боковое меню и прочие постоянные панели оболочки; в светлой теме совпадает со страницей. */
--surface-panel:var(--bg-page);
--surface-card:#ffffff;
--surface-raised:#ffffff;
--surface-sunken:var(--gray-50);
--surface-muted:var(--gray-100);
--surface-inverted:var(--gray-900);
--border-default:var(--gray-200);
--border-input:var(--gray-300);
--border-strong:var(--gray-300);
--divider:var(--gray-200);
--text-strong:var(--gray-900);
--text-body:var(--gray-700);
--text-muted:var(--gray-600);
--text-subtle:var(--gray-500);
--text-placeholder:var(--gray-400);
--text-disabled:var(--gray-400);
--text-inverted:var(--gray-50);
--text-accent:var(--blue-500);
--accent:var(--blue-500);
--accent-hover:var(--blue-600);
--accent-subtle:var(--blue-50);
--accent-disabled:var(--blue-300);
/* Text on a disabled accent button. */
--accent-disabled-text:#ffffff;
/* Акцент супер-админки (sa-ui.md, п. 2.1): полоса 3 px по верху окна, текст метки «Супер-админка», подложка
   значка вкладки; --sa-accent-subtle — подложка метки. Портал их не использует. */
--sa-accent:#5b3fd6;
--sa-accent-subtle:#ece8fd;
--surface-hover:var(--gray-50);
--surface-hover-strong:var(--gray-100);
--surface-strong:var(--gray-200);
/* Наведение на строку бокового меню. В светлой — как --surface-hover-strong; в тёмной свой тон:
   общий на самом тёмном фоне был бы пятном ярче активного пункта. */
--surface-panel-hover:var(--surface-hover-strong);
/* Заливка включённого поля ввода: в тёмной — углубление, темнее карточки. */
--surface-input:#ffffff;
/* Заливка отключённого поля и отключённой кнопки без цвета: «погасшая» плашка. */
--surface-disabled:var(--gray-100);
--focus-ring:var(--blue-500);
--focus-input-ring:var(--blue-200);
/* Tinted chips (Badge, Callout, bulk band): 50-bg/900-text in light, 12%-wash/400-text in dark */
--chip-default-bg:var(--blue-50);--chip-default-text:var(--blue-900);
--chip-neutral-bg:var(--gray-50);--chip-neutral-text:var(--gray-900);
--chip-success-bg:var(--emerald-50);--chip-success-text:var(--emerald-900);
--chip-error-bg:var(--red-50);--chip-error-text:var(--red-900);
--chip-warning-bg:var(--yellow-50);--chip-warning-text:var(--yellow-900);
/* Track washes (ProgressBar/Circle tracks, BarList bars): 200-level in light, 500@30% in dark */
--wash-blue:var(--blue-200);--wash-gray:var(--gray-200);--wash-emerald:var(--emerald-200);--wash-red:var(--red-200);--wash-yellow:var(--yellow-200);
/* Chart chrome */
--chart-grid:var(--gray-200);
--chart-cursor:var(--gray-300);
--success:var(--emerald-500);
--warning:var(--yellow-500);
--danger:var(--red-600);
--danger-hover:var(--red-700);
/* Кольцо поля с ошибкой и заливка отключённой красной кнопки. */
--danger-ring:var(--red-200);
--danger-disabled:var(--red-300);
--link:var(--blue-500);
--link-hover:var(--blue-600);
/* ---- Сообщения чата (dark-theme.md, п. 11): цветное — это AI, нейтральное — люди. Клиент — «бумага»,
   менеджер — серый, AI — синий, служебное (Salesbot, интеграция) — без заливки, пунктиром. Лента Чатов
   и окно «Проверить агента» берут цвета только отсюда; оттенок AI сменится вместе с брендом. ---- */
--chat-client-bg:var(--surface-card);
--chat-client-border:var(--border-default);
--chat-client-text:var(--text-body);
--chat-client-meta:var(--text-subtle);
--chat-manager-bg:var(--gray-100);
--chat-manager-border:var(--gray-300);
--chat-manager-text:var(--text-body);
--chat-manager-meta:var(--gray-600);
--chat-manager-label:var(--text-muted);
--chat-ai-bg:var(--blue-100);
--chat-ai-border:var(--blue-200);
--chat-ai-text:var(--text-strong);
--chat-ai-meta:var(--gray-600);
--chat-ai-label:var(--blue-700);
--chat-service-border:var(--border-strong);
--chat-service-text:var(--text-muted);
--chat-service-meta:var(--gray-600);
/* Плеер голосового: кнопка и пройденная часть видны на каждом из трёх пузырей. */
--chat-player-track:var(--gray-400);
--chat-player-fill:var(--blue-600);
--chat-player-fill-hover:var(--blue-700);
}
/* Dark scheme — «ночная синева» (фидбек владельца 25.09, спецификация dark-theme.md, DS-1): тёмно-синие
   тона около чёрного, не чистый чёрный. Один оттенок (222°), насыщенность от 52 % внизу до 33 % наверху.
   Лестница — глубже темнее, выше светлее: меню #0C1426 → углубление (лента чата, поле) #0F172A →
   страница #121B31 → карточка #1A2540 → всплывающее и строка под курсором #232F4D. Соседние зоны без
   линии между ними — шаг от 4 единиц светлоты. Контраст текста — WCAG AA на каждой поверхности, где он
   стоит (theme.test.ts); глубина и насыщенность синего меняются только здесь. */
.dark,[data-theme="dark"]{
--bg-page:#121B31;
--surface-panel:#0C1426;
--surface-card:#1A2540;
--surface-raised:#232F4D;
--surface-sunken:#0F172A;
--surface-muted:#253250;
--surface-inverted:#E3E8F2;
--border-default:#2C3959;
--border-input:#3F5075;
--border-strong:#5D719E;
--divider:#2C3959;
--text-strong:#F3F6FC;
--text-body:#D5DCEA;
--text-muted:#AFB9CE;
--text-subtle:#9BA6C0;
--text-placeholder:#838FAC;
--text-disabled:#6D7895;
--text-inverted:#0E1527;
--text-accent:var(--blue-400);
/* Кнопка с белым текстом: blue-600 даёт 5.2:1 (blue-500 — только 3.7:1). */
--accent:var(--blue-600);
--accent-hover:var(--blue-500);
--accent-subtle:rgb(59 130 246 / 0.2);
--accent-disabled:#274A89;
--accent-disabled-text:rgb(255 255 255 / 0.5);
/* Акцент супер-админки: светлее, метка держит 4,5:1 на своей подложке. */
--sa-accent:#8f7cf0;
--sa-accent-subtle:#262042;
--surface-hover:#232F4D;
--surface-hover-strong:#2B3A5B;
--surface-strong:#334266;
--surface-panel-hover:#151F37;
--surface-input:#0F172A;
--surface-disabled:#162038;
/* Кольцо фокуса: blue-500 на плотной заливке — 2.7:1, blue-400 — от 3.9:1 на любой поверхности. */
--focus-ring:var(--blue-400);
--focus-input-ring:rgb(59 130 246 / 0.35);
--chip-default-bg:rgb(59 130 246 / 0.14);--chip-default-text:var(--blue-300);
--chip-neutral-bg:rgb(139 151 175 / 0.14);--chip-neutral-text:#C9D2E3;
--chip-success-bg:rgb(16 185 129 / 0.14);--chip-success-text:var(--emerald-400);
--chip-error-bg:rgb(239 68 68 / 0.14);--chip-error-text:var(--red-300);
--chip-warning-bg:rgb(234 179 8 / 0.14);--chip-warning-text:#facc15;
--wash-blue:rgb(59 130 246 / 0.3);--wash-gray:rgb(139 151 175 / 0.25);--wash-emerald:rgb(16 185 129 / 0.3);--wash-red:rgb(239 68 68 / 0.3);--wash-yellow:rgb(234 179 8 / 0.3);
--chart-grid:var(--border-default);
--chart-cursor:var(--border-input);
--link:var(--blue-400);
--link-hover:var(--blue-300);
/* Текст ошибки и опасный пункт меню: red-600 на тёмном — 3.2–3.8:1, red-400 — от 4.8:1 (theme.test.ts). */
--danger:var(--red-400);
--danger-hover:var(--red-300);
--danger-ring:rgb(239 68 68 / 0.35);
--danger-disabled:#682536;
/* Тени тёмной темы — в layout.css: он подключается позже и своим :root перебил бы их здесь. */
--paper:repeating-linear-gradient(to bottom,transparent 0 7px,var(--border-default) 7px 8px); /* @kind other */
--dot-grid:radial-gradient(circle,var(--border-default) 1px,transparent 1.4px); /* @kind other */
--grid-paper:repeating-linear-gradient(to bottom,transparent 0 15px,var(--border-default) 15px 16px),repeating-linear-gradient(to right,transparent 0 15px,var(--border-default) 15px 16px); /* @kind other */
/* Сообщения чата: менеджер — серо-синий нейтральный, AI — насыщенный синий; оба светлее ленты #0F172A.
   Остальные --chat-* ссылаются на общие токены и здесь не повторяются. */
--chat-manager-bg:#2D3446;
--chat-manager-border:#47526B;
--chat-manager-meta:var(--text-subtle);
--chat-ai-bg:#152C56;
--chat-ai-border:#2F568F;
--chat-ai-meta:var(--text-subtle);
--chat-ai-label:var(--blue-400);
--chat-service-meta:var(--text-subtle);
--chat-player-track:var(--border-strong);
--chat-player-fill:var(--blue-400);
--chat-player-fill-hover:var(--blue-300);
}


/* Source: typography.css */
:root{
--font-sans:"Archivo Variable","Archivo","Inter",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
--font-mono:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;

/* Tailwind's type scale — Tremor uses text-xs / text-sm almost exclusively in UI */
--text-xs:0.75rem;--text-xs-lh:1rem;
--text-sm:0.875rem;--text-sm-lh:1.25rem;
--text-base:1rem;--text-base-lh:1.5rem;
--text-lg:1.125rem;--text-lg-lh:1.75rem;
--text-xl:1.25rem;--text-xl-lh:1.75rem;
--text-2xl:1.5rem;--text-2xl-lh:2rem;
--text-3xl:1.875rem;--text-3xl-lh:2.25rem;

--font-normal:400;--font-medium:500;--font-semibold:600;--font-bold:700;

/* Tracking. Large numerals and headings tighten; UI text never does. */
--tracking-tight:-0.02em; /* @kind other */
--tracking-tighter:-0.035em; /* @kind other */
/* The display voice: same family, wider. Expanded text sets tracking to 0. */
--display-stretch:125%; /* @kind other */

/* Semantic roles as used across the library */
--type-metric-size:var(--text-3xl);      /* KPI number in a Card */
--type-metric-weight:var(--font-semibold);
--type-metric-tracking:0em; /* @kind other */ /* metrics are expanded, not tightened */
--type-metric-stretch:var(--display-stretch); /* @kind other */
--type-card-title-size:var(--text-sm);   /* Card eyebrow / label */
--type-card-title-weight:var(--font-medium);
--type-dialog-title-size:var(--text-lg);
--type-body-size:var(--text-sm);
--type-label-size:var(--text-sm);
--type-badge-size:var(--text-xs);
--type-axis-size:var(--text-xs);
}


/* Source: layout.css */
:root{
/* Tailwind 4px spacing scale — Tremor sticks to it strictly */
--space-0-5:0.125rem;--space-1:0.25rem;--space-1-5:0.375rem;--space-2:0.5rem;--space-2-5:0.625rem;--space-3:0.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;

/* Radii — the whole library lives on rounded-md; pills only for tracks/thumbs */
--radius-xs:0.125rem;
--radius-sm:0.25rem;
--radius-md:0.375rem;
--radius-lg:0.5rem;
--radius-full:9999px;

/* Elevation. Tremor's resting elevation is shadow-xs — almost invisible. */
--shadow-xs:0 1px 2px 0 rgb(0 0 0 / 0.05);
--shadow-sm:0 1px 3px 0 rgb(0 0 0 / 0.1),0 1px 2px -1px rgb(0 0 0 / 0.1);
--shadow-md:0 4px 6px -1px rgb(0 0 0 / 0.1),0 2px 4px -2px rgb(0 0 0 / 0.1);
--shadow-lg:0 10px 15px -3px rgb(0 0 0 / 0.1),0 4px 6px -4px rgb(0 0 0 / 0.1);
--shadow-xl:0 20px 25px -5px rgb(0 0 0 / 0.025),0 8px 10px -6px rgb(0 0 0 / 0.025);
--shadow-inner:inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
/* Бегунок переключателя: в светлой — как --shadow-lg; в тёмной своя маленькая тень, без пятна вокруг кружка. */
--shadow-thumb:var(--shadow-lg);

/* Component geometry lifted verbatim from source */
--card-padding:var(--space-6);
--card-radius:var(--radius-lg);
--control-radius:var(--radius-md);
--control-padding-x:0.625rem;   /* Input px-2.5 */
--control-padding-y:var(--space-2);
--button-padding-x:var(--space-3);
--button-padding-y:var(--space-2);
--table-cell-padding:var(--space-4);
--table-head-padding-y:0.875rem; /* py-3.5 */
/* Portal shell (app-shell.md, change 8). The section header and the sidebar's top row share one
   height, so their bottom borders form one line across the screen. */
--shell-header-height:3.5rem;
--shell-sidebar-width:15rem;
--shell-rail-width:4rem;
--shell-nav-row:2.25rem;
--overlay-scrim:rgb(0 0 0 / 0.7);
--drawer-scrim:rgb(0 0 0 / 0.3);
}
/* Тени тёмной темы. Здесь, а не в colors.css: layout.css подключается позже (index.css), и его :root
   с тем же весом селектора перебил бы тёмные значения. Чёрные тени 2,5–10 % на тёмно-синем не видны —
   всплывающие слои отделяет более глубокая тёмно-синяя тень. */
.dark,[data-theme="dark"]{
--shadow-md:0 4px 6px -1px rgb(2 6 16 / 0.45),0 2px 4px -2px rgb(2 6 16 / 0.4);
--shadow-lg:0 10px 24px -6px rgb(2 6 16 / 0.55),0 4px 8px -4px rgb(2 6 16 / 0.4);
--shadow-xl:0 20px 40px -12px rgb(2 6 16 / 0.7),0 8px 16px -8px rgb(2 6 16 / 0.45);
--shadow-thumb:0 1px 2px rgb(2 6 16 / 0.5);
/* Затемнение под окном и под боковой панелью — тёмно-синее, а не чёрное. */
--overlay-scrim:rgb(5 10 20 / 0.72);
--drawer-scrim:rgb(5 10 20 / 0.5);
}


/* Source: density.css */
/* ─────────────────────────────────────────────────────────────────────────
   CONTENT DENSITY — Cloudscape practice, delivered the same way as glass:
   comfortable is the default and IS the upstream Tremor geometry; a single
   attribute switches a subtree to compact for data-heavy screens.

     <body data-density="compact">     → compact
     <div data-density="comfortable">  → back to default for a subtree

   Only component geometry tokens remap. The 4px spacing scale, type scale,
   radii and shadows never change between densities.
   ───────────────────────────────────────────────────────────────────────── */

[data-density="compact"]{
--card-padding:var(--space-4);
--table-cell-padding:0.625rem var(--space-4);
--table-head-padding-y:var(--space-2);
--control-padding-y:var(--space-1-5);
--button-padding-y:var(--space-1-5);
}
[data-density="comfortable"]{
--card-padding:var(--space-6);
--table-cell-padding:var(--space-4);
--table-head-padding-y:0.875rem;
--control-padding-y:var(--space-2);
--button-padding-y:var(--space-2);
}


/* Source: motion.css */
:root{
--ease-out-expo:cubic-bezier(0.16,1,0.3,1); /* @kind other */   /* every popover/dialog/toast entrance */
--ease-in-out-hard:cubic-bezier(0.87,0,0.13,1); /* @kind other */ /* accordion open/close */
--ease-in-out:cubic-bezier(0.4,0,0.2,1); /* @kind other */
--ease-spring:cubic-bezier(0.3,1.4,0.5,1); /* @kind other */ /* tab indicator, palette entrance — one gentle overshoot */
--duration-fast:100ms; /* @kind other */   /* button colour transitions */
--duration-base:150ms; /* @kind other */   /* all overlay enter/exit */
--duration-slow:300ms; /* @kind other */   /* progress / marker moves */
--motion-offset:6px;     /* slide-and-fade travel distance */
}
@keyframes tremor-hide{from{opacity:1}to{opacity:0}}
@keyframes tremor-slide-down-and-fade{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
@keyframes tremor-slide-up-and-fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@keyframes tremor-slide-left-and-fade{from{opacity:0;transform:translateX(6px)}to{opacity:1;transform:translateX(0)}}
@keyframes tremor-slide-right-and-fade{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:translateX(0)}}
@keyframes tremor-dialog-overlay-show{from{opacity:0}to{opacity:1}}
@keyframes tremor-lightbox-show{from{opacity:0;transform:scale(0.96)}to{opacity:1;transform:scale(1)}}
@keyframes tremor-lightbox-hide{to{opacity:0;transform:scale(0.96)}}
@keyframes tremor-dialog-content-show{from{opacity:0;transform:translate(-50%,-45%) scale(0.95)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@keyframes tremor-drawer-slide-left-and-fade{from{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}
@keyframes tremor-spin{to{transform:rotate(360deg)}}
@keyframes tremor-skeleton-pulse{0%,100%{opacity:1}50%{opacity:0.55}}
@keyframes tremor-chart-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes tremor-chart-fade{from{opacity:0}to{opacity:1}}
@keyframes tremor-chart-grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes tremor-donut-in{from{transform:rotate(-14deg) scale(0.92);opacity:0}to{transform:rotate(0) scale(1);opacity:1}}
@keyframes tremor-check-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@keyframes tremor-overlay-hide{to{opacity:0}}
@keyframes tremor-dialog-content-hide{to{opacity:0;transform:translate(-50%,-45%) scale(0.95)}}
@keyframes tremor-drawer-hide{to{opacity:0;transform:translateX(100%)}}
@keyframes tremor-palette-in{from{opacity:0;transform:translate(-50%,10px) scale(0.98)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
@keyframes tremor-status-ping{0%{transform:scale(1);opacity:0.6}70%,100%{transform:scale(2.4);opacity:0}}
@keyframes tremor-toast-out{to{opacity:0;transform:translateX(12px)}}
@keyframes tremor-menu-hide{to{opacity:0;transform:translateY(-6px)}}
@keyframes tremor-scale-in{from{transform:scale(0.4);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes tremor-screen-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@keyframes tremor-palette-out{to{opacity:0;transform:translate(-50%,6px) scale(0.98)}}
@keyframes tremor-widget-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@keyframes tremor-dot-in{from{opacity:0;transform:scale(0.5)}to{opacity:1;transform:scale(1)}}
@keyframes tremor-tape{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes tremor-menu-hide-down{to{opacity:0;transform:translateY(6px)}}
@keyframes tremor-amp-in{from{transform:scaleY(0.2);opacity:0}to{transform:scaleY(1);opacity:1}}
@keyframes tremor-signal-sweep{from{stroke-dashoffset:1;opacity:1}60%{opacity:1}to{stroke-dashoffset:0;opacity:0}}


/* Source: glass.css */
/* ─────────────────────────────────────────────────────────────────────────
   OPTIONAL GLASS LAYER — off by default.

   Tremor's own visual language is flat: shadow-xs at rest, no gradients,
   no backdrop-filter anywhere in the source. This layer does not change
   that. Every value below resolves to the ordinary opaque Tremor treatment
   until an ancestor carries [data-glass], so components can reference
   --glass-* unconditionally and get flat Tremor unless glass is switched on.

     <body data-glass>            → glass on
     <div data-glass-off>         → glass off again for a subtree

   Scope rule: glass is only ever applied to layers that physically float
   ABOVE scrolling content — sticky headers, chart tooltips, toasts, the
   drawer. Never on cards, buttons, badges, inputs, tables or callouts.
   ───────────────────────────────────────────────────────────────────────── */

:root{
/* Theme-dependent ingredients, so the [data-glass] block below needs one
   selector rather than a light/dark pair. */
--glass-tint:255 255 255;
--glass-tint-inverted:17 24 39;
--glass-border-rgb:229 231 235; /* @kind color */
--glass-highlight-color:rgb(255 255 255 / 0.7);

/* Resolved values — these are what components read. Flat by default. */
--glass-filter:none; /* @kind other */
--glass-bg:var(--surface-card);
/* Page header bar: the page's own colour, so the bar reads as part of the page (dark: not a lighter band). */
--glass-bg-bar:var(--bg-page);
--glass-bg-panel:var(--surface-card);
--glass-bg-inverted:var(--surface-inverted);
--glass-border:var(--border-default);
--glass-highlight:0 0 #0000;
/* Menus (Dropdown/Select/Popover) opt OUT of glass on purpose — dense 14px
   rows over arbitrary content is where legibility fails, and there is no
   reason to see through a menu you are about to dismiss. To disagree, set
   this to blur(12px) saturate(140%) and --glass-menu-bg to var(--glass-bg). */
--glass-menu-filter:none; /* @kind other */
--glass-menu-bg:var(--surface-raised);
}

.dark,[data-theme="dark"]{
--glass-tint:26 37 64;
--glass-tint-inverted:249 250 251;
--glass-border-rgb:44 57 89; /* @kind color */
--glass-highlight-color:rgb(255 255 255 / 0.08);
/* Inverted bubbles (Tooltip, Tracker) follow the scheme: light fill with dark text. */
--glass-bg-inverted:var(--surface-inverted);
/* Drawer and palette float above the page: the raised navy level, not the card level. */
--glass-bg-panel:var(--surface-raised);
}

[data-glass]{
--glass-filter:blur(12px) saturate(140%); /* @kind other */
--glass-bg:rgb(var(--glass-tint) / 0.85);
--glass-bg-bar:rgb(var(--glass-tint) / 0.85);
--glass-bg-panel:rgb(var(--glass-tint) / 0.92);
--glass-bg-inverted:rgb(var(--glass-tint-inverted) / 0.82);
--glass-border:rgb(var(--glass-border-rgb) / 0.8);
--glass-highlight:inset 0 1px 0 var(--glass-highlight-color);
}

[data-glass-off]{
--glass-filter:none; /* @kind other */
--glass-bg:var(--surface-card);
--glass-bg-bar:var(--bg-page);
--glass-bg-panel:var(--surface-card);
--glass-bg-inverted:var(--surface-inverted);
--glass-border:var(--border-default);
--glass-highlight:0 0 #0000;
}

/* No backdrop-filter (older Firefox, print): fall back to near-opaque so
   text never lands on unblurred content. */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
[data-glass]{--glass-bg:rgb(var(--glass-tint) / 0.97);--glass-bg-bar:rgb(var(--glass-tint) / 0.97);--glass-bg-panel:rgb(var(--glass-tint) / 0.98)}
}

/* Reduced transparency is an accessibility setting, not a preference. */
@media (prefers-reduced-transparency:reduce){
[data-glass]{--glass-filter:none; /* @kind other */--glass-bg:var(--surface-card);--glass-bg-bar:var(--bg-page);--glass-bg-panel:var(--surface-card);--glass-bg-inverted:var(--surface-inverted);--glass-border:var(--border-default);--glass-highlight:0 0 #0000}
}


/* Source: base.css */
/* Base rules every consumer inherits by linking styles.css. Details, not layout. */
html{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
::selection{background:var(--blue-a5)}

/* Focus is the accessibility contract: loud, consistent, keyboard-only. */
:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
input:focus-visible,textarea:focus-visible,select:focus-visible{outline:none} /* fields carry their own ring */

/* Пункты родного списка (SelectNative и фильтры, где пункты переданы потомками). На Windows и Linux
   браузер красит выпадающий список этими цветами — в тёмной теме он не остаётся серо-чёрным. */
select option{background:var(--surface-raised);color:var(--text-strong)}

/* Thin, quiet scrollbars that match the neutral ramp. */
*{scrollbar-width:thin;scrollbar-color:var(--gray-300) transparent}
*::-webkit-scrollbar{width:8px;height:8px}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--gray-300);border-radius:9999px;border:2px solid transparent;background-clip:padding-box}
*::-webkit-scrollbar-thumb:hover{background:var(--gray-400);background-clip:padding-box;border:2px solid transparent}
.dark *,[data-theme="dark"] *{scrollbar-color:var(--border-input) transparent}
.dark *::-webkit-scrollbar-thumb,[data-theme="dark"] *::-webkit-scrollbar-thumb{background:var(--border-input);background-clip:padding-box;border:2px solid transparent}

/* Motion is decoration; stillness is a setting. */
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:0.01ms!important;animation-iteration-count:1!important;transition-duration:0.01ms!important;scroll-behavior:auto!important}}
