{
  "name": "state-tokens",
  "type": "registry:file",
  "description": "Успех, предупреждение и информация: утилиты Tailwind плюс значения по умолчанию. Неудача и нейтраль в наборе уже есть — это destructive и muted. Фундамент перебивает эти значения своими, поэтому порядок установки тут не важен.",
  "files": [
    {
      "path": "styles/state-tokens.css",
      "type": "registry:file",
      "target": "styles/state-tokens.css",
      "content": "/**\n * Состояния: успех, предупреждение, информация.\n *\n * Файл делает две вещи: объявляет утилиты Tailwind (`bg-success`, `text-warning`) и держит\n * значения по умолчанию. Без первой половины токен есть, а класса нет; без второй класс есть,\n * а красить нечем — у нейтральной темы shadcn состояний нет вовсе.\n *\n * ⚠️ ЗНАЧЕНИЯ ЛЕЖАТ В `@layer base` НАМЕРЕННО. Фундамент объявляет свои в обычном `:root`, а\n * слой в каскаде всегда слабее нелayered правил — поэтому фундамент перебивает эти значения\n * независимо от порядка импортов. Уберёшь слой, и палитра фундамента перестанет действовать\n * на состояния в том проекте, где этот файл подключён позже.\n *\n * Неудача — это `--destructive` набора, нейтраль — `--muted`; оба существуют изначально, и\n * здесь их нет, чтобы не заводить второе имя одному смыслу.\n *\n * Пилюля собирается коротким классом: `<Badge class=\"state-success\">`. Раньше в разметку\n * приходилось вписывать подложку и вычисление надписи вручную — строка на шестьдесят\n * символов, в которой легко подставить один токен для фона и другой для текста, и ни одна\n * проверка этого не увидит.\n */\n\n@theme inline {\n  --color-success: var(--success);\n  --color-warning: var(--warning);\n  --color-info: var(--info);\n}\n\n@layer base {\n  :root {\n    /* Общая часть исходного документа фундаментов: один набор статусов на все направления. */\n    --success: oklch(0.6 0.16 150);\n    --warning: oklch(0.78 0.15 75);\n    --info: oklch(0.62 0.12 240);\n  }\n\n  .dark {\n    /* Сдвиг светлоты и насыщенности взят с destructive апстрима: L +0.127, C ×0.78. */\n    --success: oklch(0.727 0.125 150);\n    --warning: oklch(0.907 0.117 75);\n    --info: oklch(0.747 0.094 240);\n  }\n}\n\n/**\n * Пилюли состояния. Пять смыслов, по два свойства каждый.\n *\n * ⚠️ НАДПИСЬ — СМЕСЬ, А НЕ САМ ТОКЕН, и это замер. Той же краской по подложке в 10% успех\n * даёт 3.29:1, предупреждение 1.89:1 при норме 4.5:1 для мелкого текста. Смесь 40 на 60 с\n * цветом текста даёт минимум 4.94:1 на всех десяти фундаментах — и работает на тёмной базе,\n * где фиксированное затемнение проваливалось до 3.73:1.\n *\n * Долю пришлось опускать с 55 до 40 из-за тёплой светлой базы Claude +: там подложка\n * предупреждения светлее белой, и 55 давали 3.77:1, 45 — 4.51:1 впритык. Меняешь долю —\n * прогоняй проверку читаемости, она числовая и живёт в `tests/visual.spec.ts` витрины.\n */\n\n@utility state-success {\n  background-color: color-mix(in oklab, var(--success) 10%, transparent);\n  color: color-mix(in oklab, var(--success) 40%, var(--foreground));\n}\n\n@utility state-warning {\n  background-color: color-mix(in oklab, var(--warning) 10%, transparent);\n  color: color-mix(in oklab, var(--warning) 40%, var(--foreground));\n}\n\n@utility state-info {\n  background-color: color-mix(in oklab, var(--info) 10%, transparent);\n  color: color-mix(in oklab, var(--info) 40%, var(--foreground));\n}\n\n@utility state-danger {\n  background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n  color: color-mix(in oklab, var(--destructive) 40%, var(--foreground));\n}\n\n@utility state-neutral {\n  background-color: var(--muted);\n  color: color-mix(in oklab, var(--muted-foreground) 40%, var(--foreground));\n}\n"
    }
  ],
  "css": {
    "@import \"../styles/state-tokens.css\"": {}
  }
}
