Основа
Темы продуктов
База и слой продукта: как подключить тему ShadeNotes, портфолио или новую
База ставится в любой продукт первой и одна на всех. Слой продукта меняет только акцент: --primary, --primary-foreground, --primary-ink, --primary-edge. Новый продукт делает свой слой по образцу
npx shadcn@latest add @umbra/theme-baseОснова системы: CSS-переменные (tokens.css), базовые стили (base.css) и мост в Tailwind. Файлы ложатся в styles/umbra/
tokens.css: окно, плитка, вложенное, текст, роли цвета, стекло, геометрия, шрифт, типографика, движение. Светлая тема в:root, тёмная в.darkbase.css: шрифт SF Pro системным стеком (Inter запасной),text-wrap: balanceу заголовков иprettyу абзацев, полоса прокрутки 4 px цветом--text22 %,.glass,.glass-soft,.glass-dense,.glass-pop,.edge-fade,.umbra-fill(карточки по 2 в ряд, по 1 на узком окне; нечётный последний на всю ширину), утилиты движения (.umbra-appear,.umbra-rise,.umbra-leave,.umbra-exit,.umbra-stagger,.umbra-transition,.umbra-spin), правилаprefers-reduced-motionиprefers-reduced-transparencytailwind-v4.css:@theme inlineи@utilityдля Tailwind 4tailwind-v3-preset.cjs: пресет для Tailwind 3.4. Классы те же, что в v4, один в один
Когда брать
Всегда, первым шагом в новом продукте и перед любым компонентом @umbra
Когда не брать
Если tokens.css уже подключён в продукте вручную. Второй раз не ставить: переменные задаются в одном месте
Поверхности
Светлая
window
tile
nested
popover
skeleton
nav-active
Тёмная
window
tile
nested
popover
skeleton
nav-active
Роли цвета
Светлая
primary
indigo
indigo-soft
giants
record
destructive
Тёмная
primary
indigo
indigo-soft
giants
record
destructive
Типографика
Светлая
Display 36/40
Title 22/28
Heading 20/28
Body 15/22: основной текст приложений
Label 14/20: подписи кнопок
Caption 13/18: мета
MONO 12/16 · ВТ, 10:00
Тёмная
Display 36/40
Title 22/28
Heading 20/28
Body 15/22: основной текст приложений
Label 14/20: подписи кнопок
Caption 13/18: мета
MONO 12/16 · ВТ, 10:00
Стекло поверх контента
Светлая
.glass
липкая шапка, меню, подсказки
Тёмная
.glass
липкая шапка, меню, подсказки
Можно
- Брать цвет только через роль:
bg-tile,text-muted,bg-primary - Текст роли на мягких тонах
bg-indigo-soft,bg-giants-soft; на насыщенныхbg-indigo,bg-giantsтолько иконки - Чернила
text-*-ink: иконки и текст. Мелкий текст только там, где пара проходит Lc 75 вpnpm apca:text-primary-inkвезде,text-indigo-inkиtext-giants-inkтолько в светлой теме; в тёмной они только для крупного полужирного (text-title,text-heading) - Стекло только у того, что лежит поверх контента: липкая шапка, меню, подсказки, диалоги, док
Нельзя
- Сырые цвета,
p-[13px],rounded-lg, модификаторы прозрачности (bg-primary/50): их ловит@umbra/eslint - Переписывать
tokens.cssв продукте. Продукт меняет только акцент вproduct.css - Модификатор
dark:для цветов: тема переключается переменными, классы те же - Смешивать классы
base.css(.umbra-transition,.glass) с утилитами того же свойства на одном элементе (umbra-transition duration-base): в Tailwind 4base.cssвне слоёв и побеждает утилиты, в 3.4 проигрывает. Нужна другая длительность:transition-all duration-base ease-outбез.umbra-transition
npx shadcn@latest add @umbra/theme-shadenotesproduct.css ShadeNotes. Задаёт только акцент: --primary, --primary-foreground, --primary-ink, --primary-edge и имя продукта. Всё остальное берётся из базы
| Токен | Светлая | Тёмная |
|---|---|---|
--primary |
#E4FB77 |
#E4FB77 |
--primary-foreground |
#111111 |
#111111 |
--primary-ink |
#576E00 |
#E4FB77 |
--primary-edge |
#98B620 |
#E4FB77 |
Когда брать
В ShadeNotes, один раз, после @umbra/theme-base. Подключить в глобальном CSS после tokens.css
Когда не брать
В портфолио (там @umbra/theme-portfolio) и в новом продукте: новому продукту нужен свой product.css по правилу вывода из DESIGN.md (Colors, «Акцент продукта»)
Светлая
Сохранено: акцент как чернила
Выбранный чипТёмная
Сохранено: акцент как чернила
Выбранный чипНельзя
- Добавлять в
product.cssчто-то кроме акцента, логотипа и имени
npx shadcn@latest add @umbra/theme-portfolioproduct.css портфолио, имя продукта --product-name: "Aidyn Beisembin". Кобальт годится как заливка кнопки с белым текстом (Lc 89), но как текст и иконка на #0A0A0A он не читается (Lc 18), поэтому --primary-ink в тёмной теме осветлён
| Токен | Светлая | Тёмная |
|---|---|---|
--primary |
#3044D8 |
#3044D8 |
--primary-foreground |
#FFFFFF |
#FFFFFF |
--primary-ink |
#3044D8 |
#C4CBFF |
--primary-edge |
#3044D8 |
#C4CBFF |
Сайт сейчас только тёмный (класс dark на <html>), но светлые значения заданы, чтобы светлую тему можно было включить без перекраски
Когда брать
В портфолио, один раз, после @umbra/theme-base
Когда не брать
В ShadeNotes и в новом продукте
Светлая
Сохранено: акцент как чернила
Выбранный чипТёмная
Сохранено: акцент как чернила
Выбранный чип