Основа
Стекло и анимация
Стекло для слоя управления, пружины, перетекание и появление
В духе Liquid Glass macOS 26 и iOS 26: контент плотный, стекло только у слоя управления поверх него, выбор перетекает каплей, всё садится пружиной. Правила в DESIGN.md, раздел «Стекло и движение»
npx shadcn@latest add @umbra/glass @umbra/motionДва слоя
Контент плотный: плитки, карточки, текст. Стекло только у слоя управления, который плавает поверх: шапка при прокрутке, панель действий, меню. Прокрутите список: под стеклом всегда есть контент
Встречи
Материал
Тон --glass-tint с --glass-alpha, blur(var(--glass-blur)) saturate(180%), блик по верхней кромке, тонкая кромка --glass-edge, мягкая тень --glass-shadow. Плотное (--glass-alpha-dense) для мелкого текста поверх пёстрого
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Обычное
Итоги
Плотное
Мелкий текст и подписи поверх пёстрого
Преломление
Лупа по краю: SVG feDisplacementMap в backdrop-filter, только Chromium (проверка @supports); Safari и Firefox получают blur и saturate. Только у мелких элементов: индикатор выбора, бегунок, тост. Ведите курсор по примеру
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Концентричность
Радиус внутреннего равен внешнему минус отступ. У управления таблетки: внутренняя повторяет внешнюю
Вложенное 16
Плитка 24, отступ 8, внутри 24 − 8 = 16
У управления таблетки: внутренняя таблетка с отступом 4 повторяет внешнюю
Доступность
prefers-reduced-transparency даёт сплошной фон темы без размытия. Контраст текста на стекле по APCA проверяется на самом пёстром фоне под ним (худший случай: под стеклом сплошной цвет). Ниже худшие пары из pnpm apca
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Стекло
Пружины
--spring-snappy и --spring-smooth через CSS linear(): пружина без заметного перелёта, не больше 4 %. Только у слоя управления. prefers-reduced-motion: длительности 0, только смена прозрачности
--spring-snappy 0.35 с, перелёт 2 %
--spring-smooth 0.5 с, перелёт 0.2 %
--ease-out для сравнения: появление
Перетекание
Индикатор выбора не появляется на новом месте, а перетекает каплей: в движении слегка вытягивается по направлению (около 1.08) и садится пружиной
Появление поверх
Из blur(8px), scale 0.96 и прозрачности; уход быстрее появления (--t-exit, --ease-in)
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Нажатие
scale 0.97 и усиленный блик кромки на время нажатия
Встреча с командой дизайна: бета в пятницу, тексты к четвергу. Итоги собраны автоматически, проверьте имена
Смена страниц и темы
Если страница грузится по сети, выбор в навигации меняется сразу по клику, а контент появляется следом за --t-fast без размытия: View Transition заморозил бы экран до загрузки. Когда новая страница готова сразу, можно View Transitions: проявление из blur(6px), заголовок перетекает. Тема меняется круговым раскрытием от кнопки. Попробуйте пункты сайдбара и переключатель темы внизу слева
Без поддержки View Transitions и при prefers-reduced-motion переход мгновенный
Токены движения
Кривые и длительности: появление, уход, пружины слоя управления
Одна кривая на появление, одна на уход. При «уменьшить движение» длительности равны 0: шарик встаёт на место сразу
ease-out
cubic-bezier(0.22, 1, 0.36, 1). Всё появление и сдвиги
ease-in
cubic-bezier(0.4, 0, 1, 1). Уход
Материал стекла @umbra/glass
Классы материала, вариант плотный, преломление, нажатие и компонент Glass
npx shadcn@latest add @umbra/glassМатериал стекла (styles/umbra/glass.css, подключается после base.css) и обёртка Glass. Правила в DESIGN.md, «Стекло и движение»
.umbra-glass: тон--glass-tintс--glass-alpha,backdrop-filter: blur(var(--glass-blur)) saturate(180%), блик по верхней кромке, тонкий край--glass-edge, мягкая тень--glass-shadow.umbra-glass-dense: плотное (--glass-alpha-dense) для мелкого текста поверх пёстрого.umbra-glass-soft: без тени и края;.umbra-glass-select: индикатор выбора на однотонной плитке (тон--text8 %).umbra-glass-refract: преломление по краю (лупа) через SVGfeDisplacementMapвbackdrop-filter, только Chromium (проверка@supports); Safari и Firefox получают только blur и saturate. Нужен<GlassRefraction />один раз на странице. Только у мелких элементов: дорого.umbra-press: нажатие,scale 0.97и усиленный блик кромкиprefers-reduced-transparencyиdata-transparency="reduce"на<html>: сплошной фон темы без размытия
Компонент Glass ставит базовые классы .glass* из theme-base (тот же материал), пропы refract и press добавляют классы из glass.css
Когда брать
- Поповер, меню, подсказка, диалог, капсула над контентом
dense: карточка-уведомление, где текст должен читаться на любом фонеpop: появление меню и диалогов из размытия
Когда не брать
- Плитка, вложенное, поле: поверхности плоские
- Шапка страницы: стекло включает
Page - Уведомление: готовый
NoticeCardилиToast
Встречи
7 записей за неделю
Нельзя
- Стекло на стекле (предупреждение
umbra/glass-layer) backdrop-filterу плитки (предупреждениеumbra/glass-layer)- Преломление у больших панелей
- Градиент или свечение вместо стекла
- Стекло у элемента в потоке страницы
Движение @umbra/motion
Пружины, перетекающий индикатор MorphIndicator, появление поверх и смена темы
npx shadcn@latest add @umbra/motionДвижение слоя управления в духе Liquid Glass. Токены пружин уже в tokens.css (theme-base): --spring-snappy и --spring-smooth через linear(), длительности --t-spring-snappy 0.35 с и --t-spring-smooth 0.5 с; при prefers-reduced-motion длительности 0. Здесь утилиты (styles/umbra/motion.css, после base.css) и компонент MorphIndicator
.umbra-pop-in/.umbra-pop-out: появление поверх изblur(8px),scale 0.96и прозрачности; уход быстрее, за--t-exitпо--ease-inMorphIndicator: капля выбора не появляется на новом месте, а перетекает; во время движения вытягивается по направлению (около 1.08), садится пружиной--spring-snappy.umbra-vt-titleи правила::view-transition-*: контент новой страницы проявляется изblur(6px)за--t-page, заголовок перетекает, если он есть на обеих страницахumbraThemeTransition(apply, origin): смена темы круговым раскрытием от кнопки
Когда брать
- Индикатор выбора вкладок, чипов, пунктов сайдбара, бегунок переключателя
- Меню, подсказка, тост, диалог: появление поверх
- Смена страниц и темы
Когда не брать
- Появление контента в потоке:
umbra-riseиumbra-appearизtheme-base - Живой персонаж и показы: у них свой цикл
У этого элемента нет живого примера: он ставит файлы или правила. Подключение во вкладке «Код»
Можно
- Материал капли из
@umbra/glass:umbra-glass-select, сumbra-glass-refractу мелких - Пружины только у слоя управления
Нельзя
- Перелёт больше 4 %, свои кривые вместо
--spring-* - Пружины у контента в потоке и у текста