Themes — Versola Docs
/docs
До 1.00.7.5versola.ioGitHub

Themes

Экран Themes в консоли администратора — как выглядят экраны входа: встроенная базовая тема, несколько значений поверх нее и свой CSS по желанию, с предпросмотром на настоящих формах.

Тема определяет, как выглядит каждый экран входа: цвета, скругления, страница за карточкой. Экран Themes показывает список тем, собирает новую из встроенной базовой темы, нескольких значений и, если нужно, переопределений токенов и вашего CSS и показывает ее на настоящих формах до сохранения.

Прежде чем начать

Themes находится в боковом меню в группе GLOBAL, после Forms. Темы бывают глобальными или принадлежат одному тенанту, поэтому список зависит от тенанта, выбранного в боковом меню. Чтобы увидеть экран, нужно разрешение forms:read, а чтобы создавать, править и удалять темы, нужно forms:manage. Клиент выбирает тему в поле Forms Theme на своей странице (Клиент); если клиент не выбрал тему, применяется тема default.

Список

Themes — одна строка на тему
Таблица Themes: у каждой темы область действия, база и переопределенные значения, миниатюра с кодом цвета бренда и клиенты, которые ее используют

Тема — это базовая тема, несколько значений поверх нее и, по желанию, ваш CSS. Одна таблица показывает глобальные темы и темы выбранного тенанта и говорит, какая из них какая.

КолонкаЗначение
ThemeID темы, под ним — Global или This tenant.
BaseБазовая тема и названия переопределенных значений, затем Token overrides и Custom CSS, если они есть у темы: Versola · Overrides: brand, shape · Token overrides · Custom CSS или No overrides. Тема, сохраненная только с CSS (когда у тем еще не было значений), называется Versola + custom CSS.
LookМиниатюра страницы, карточки и бренда и код цвета бренда (собственное переопределение темы, иначе цвет ее базы). У темы, сохраненной только с CSS, написано Set by its CSS.
Used byПервые два клиента, которые выбрали тему, и +N для остальных (названия видны при наведении); No clients, если таких нет. Клиент, не выбравший тему, использует default.

«Used by» вычисляется в консоли по клиентам выбранного тенанта. В central нет эндпоинта, который говорит об использовании, поэтому глобальную тему могут использовать и клиенты другого тенанта — список их не покажет; central все равно откажется удалить такую тему.

Фильтры — All и This tenant, рядом с поиском по ID темы. В меню строки — Open, Copy ID и Delete theme; пока тему нельзя удалить, пункт недоступен и показывает причину. Кнопка + Create theme открывает редактор.

Страница темы

Щелкните строку, чтобы открыть тему. Страница и есть редактор: в шапке ID темы, область действия, теги Token overrides и Custom CSS, если они есть у темы, и клиенты, которые ее используют. Основной кнопки в шапке нет; внизу страницы закреплена панель с Cancel и Save theme, и она говорит, что еще не сохранено, например Unsaved: brand colour, shape. Пока ничего не изменено, Save theme недоступна, а после сохранения вы остаетесь на странице. При выходе с несохраненными изменениями консоль просит подтверждение.

Предпросмотр формы входа справа от элементов управления остается на экране, пока они прокручиваются; в широком окне он шириной 560 px, в более узком — 380 px, а ниже 900 px это сворачиваемая полоса над элементами управления.

ПолеЗначение
Theme IDИмя, которое выбирают клиенты, например acme-dark. После создания не меняется.
ScopeGlobal (все тенанты) или This tenant (тенант, выбранный в боковом меню). Выбирается при создании темы.

Delete theme — последняя карточка. Она недоступна, с указанием причины, для темы, которую используют клиенты (Used by shop-mobile and storefront-web. Move them to another theme first.), и для default, которую удалить нельзя. В остальных случаях подтверждение называет тему. Если тему все еще использует клиент другого тенанта, API отвечает конфликтом, и страница показывает его сообщение. default — обычная тема: она начинается с базовой Versola без переопределений и правится в том же редакторе, поэтому изменение доходит до каждого клиента, который ее использует. На пустой базе она создается именно такой; при обновлении central превращает default, которая еще была поставляемой таблицей стилей, в эту визуальную тему, а default с уже заданными базой и переопределениями оставляет как вы ее настроили.

Создание темы

+ Create theme открывает редактор с карточкой Basics (Theme ID, Scope) над карточками Base theme, Look и Advanced. Create theme сохраняет тему и открывает ее страницу.

Create theme — базовая тема и предпросмотр
Create theme с выбранной базовой темой Fintech, цветом бренда, фоном страницы, стилем фона, формой и цветовой схемой, карточкой Advanced и предпросмотром формы входа справа

Базовая тема и значения

Тема — это одна из встроенных базовых тем и значения, которые вы на ней переопределяете.

Базовая темаЦвет брендаФормаФон страницыСтиль фона
Versola#155e75SoftBoldGlow
Studio#ff6b4aRoundBoldGlow
Fintech#5b5bd6SoftNeutralLinear
Wellness#0e9f8eRoundSoftHorizon
Editorial#14130fSharpNeutralFlat
Sunny#f5c518SoftBoldGlow
Berry#b4348aRoundBoldGlow

Список входит в сборку central: добавить в него или изменить его нельзя. Поверх базовой темы задаются пять значений:

ЗначениеВариантыЧто задает
Brand colourЛюбой #rrggbbАкцент: галочки, подчеркивание ссылок, рамку фокуса и оттенок страницы. Текст на нем белый или почти черный, смотря какой контрастнее. Принимается только #rrggbb, потому что значение записывается в таблицу стилей.
Page backgroundBold, Soft, NeutralBold окрашивает страницу брендом: глубокий оттенок в темной схеме и светлая страница с легким оттенком бренда в светлой. Soft — бледный оттенок бренда, Neutral — простой серый.
Background styleGlow, Linear, Horizon, FlatЧто рисуется поверх цвета страницы за карточкой; варианты показаны маленькими карточками-превью в цвете вашего бренда. Glow — свечение бренда за карточкой в обеих цветовых схемах, так выглядела каждая тема до появления этого значения. Linear — мягкая диагональная заливка, Horizon — свет, поднимающийся от нижнего края, Flat — просто цвет страницы. Каждый стиль использует только оттенок цвета бренда, а его сила зависит от фона страницы и цветовой схемы, чтобы бренд над карточкой оставался читаемым.
ShapeRound, Soft, SharpСкругление полей, кнопок и карточки.
Colour schemeAuto, Light, DarkAuto следует устройству посетителя и показывает посетителю переключатель цветовой схемы на формах входа. Light и Dark фиксируют схему для всех и скрывают переключатель.

Карточка Base theme — это ряд кнопок-плашек, по одной на каждую базовую тему, с цветом бренда в виде точки; строка под рядом говорит, что задает выбранная. В карточке Look значение, которое отличается от базового, помечено Overridden с базовым значением, а Reset возвращает его; Clear overrides в шапке карточки сбрасывает все, а подзаголовок карточки называет переопределенные значения (Overrides on Versola: brand colour, shape.). Значение, равное базовому, переопределением не считается, и тогда тема следует за базой. При смене базовой темы переопределения сохраняются. Отдельные переменные и свои правила задают в карточке Advanced, она описана ниже; оставьте ее пустой, если значения справляются.

Тема storefront: Studio и два переопределения
Страница темы storefront: базовая тема Studio, цвет бренда и форма Sharp помечены Overridden, карточка Advanced, карточка Delete theme недоступна и называет клиента, который тему использует, справа предпросмотр экрана согласия

Таблицу стилей темы auth собирает при выдаче формы: базовая таблица стилей, которая поставляется с Versola, затем то, что задают значения, затем переопределения токенов, затем собственный CSS темы (Custom CSS). Базовая таблица входит в релиз, это не тема, которую можно править; чтобы изменить вид всех экранов, правьте значения темы default или дайте ей свой CSS.

Предпросмотр рисует форму на ваш выбор (активную версию любой формы), в выбранном состоянии, в светлой или темной схеме и, в широком окне, в ширину телефона или рабочего стола, с той же таблицей стилей, которую выдал бы auth, вместе с вашим CSS. Он начинается со схемы вашего устройства. Темный предпросмотр недоступен, если тема фиксирует цветовую схему. Если central не может отрисовать предпросмотр, страница говорит об этом и оставляет последнюю отрисованную версию, приглушенной.

Note: Если central не отдает базовых тем, Create theme остается недоступной: тема всегда строится на базовой.

Внешний вид отдельного клиента

Партнерское приложение может переопределить те же пять значений поверх своей темы, только для собственных экранов входа. Это задается на странице клиента под Forms Theme и применяется после таблицы стилей темы; см. Client. Сама тема не меняется, поэтому остальные клиенты с этой темой выглядят как раньше.

Как выглядят экраны

Так выглядят экраны, которые оформляет тема. Бренд над карточкой — логотип тенанта из Branding или, если его нет, словесный знак Versola; иконка партнера всегда внутри карточки.

Экран входа в теме default
Экран входа по номеру телефона в теме default: словесный знак Versola над карточкой, поле телефона с кодом страны и кнопка passkey
Тот же экран в теме storefront
Тот же экран входа в теме storefront: Studio с цветом бренда #b4348a и острыми углами
Экран согласия

Переключатель цветовой схемы у посетителя

При Auto формы, у которых есть выбор языка, показывают рядом с ним небольшую кнопку-иконку: Auto, Light или Dark. Выбор делается для браузера и хранится в локальном хранилище браузера для адреса входа. Это не настройка аккаунта, поэтому в другом браузере пользователя он не действует. Предпросмотр в консоли переключатель не показывает; используйте его собственный переключатель светлой и темной схемы.

Фиксированная схема Light или Dark, заданная в теме или переопределением клиента, скрывает переключатель, а ранее выбранная посетителем схема не применяется. Клиент, который переопределяет фиксированную тему значением Auto, снова показывает переключатель.

Advanced: переопределения токенов и свой CSS

Карточка Advanced стоит после Look. В ней две части, и обе применяются после значений выше. Побеждает позднее, так что порядок такой: базовая тема, пять значений, переопределения токенов, свой CSS.

Переопределения токенов

Переопределение токена задает одну именованную переменную экранов входа без всякого CSS. Нажмите Add token, выберите токен в строке и задайте значение. Список сгруппирован (Page, Brand and logo, Card, Text, Fields, Buttons, Links and focus, Lines, Status and overlays), а под ним строка одной фразой говорит, что токен красит и каков он по умолчанию: --btn — заливка главной кнопки, по умолчанию var(--ink). Remove убирает строку, а панель называет изменение (Unsaved: token overrides). Один токен можно использовать один раз.

Чем редактировать значение, зависит от типа токена:

ТипЭлементЧто принимается
цветВыбор цвета и поле hexHex (#rgb, #rrggbb, #rrggbbaa), название цвета или rgb(), hsl(), oklch(), color-mix() и подобные; внутри них можно var(--name).
длинаЧисло в pxЧисло с px, rem, em, vw, vh или %, либо 0. Не отрицательное.
теньТекстовое полеnone или от одного до четырех слоев вида [inset] x y [blur [spread]] цвет.
насыщенностьТекстовое полеЦелое число от 100 до 900.
шрифтТекстовое полеНазвания шрифтов через запятую, без кавычек: шрифты, установленные на устройстве посетителя, без веб-шрифтов.

Значение, которое элементы не умеют показать, например color-mix(in oklab, red 10%, white), записанное через API, — это обычное текстовое поле.

Цвет, который различается в светлой и темной схеме, — токен-пара (столбец Светлая и темная ниже). У него два поля, Light и Dark, каждое с выбором цвета и hex; они заполнены тем, что формы рисуют сейчас, так что добавление ничего не меняет, пока вы не правите значение. Отметьте Same for both, чтобы записать одно значение для обеих схем; снимите отметку, чтобы задать каждой свое, начиная с этого значения. central записывает пару как light-dark(light, dark), а одиночное значение как есть. Токен, который не пара, принимает только одно значение.

central отказывает имени, которого нет в справочнике ниже, и значению, которое не подходит типу токена, длиннее 120 символов или содержит ;, {, }, !, @, \, комментарий, url( или expression(. Редактор показывает причину под строкой и не дает нажать Save theme; через API ответ — 400 с причиной, и ничего не сохраняется. Переопределение --brand не двигает --on-brand и цвет фокуса: задайте их тоже, если этого требует контраст. --btn, --link и --field-focus по умолчанию равны var(--ink), поэтому переопределение --ink двигает и их, пока вы не задали их сами.

Токены, которые можно переопределить

Список задан в central и отдается через GET /configuration/themes/variables; консоль читает его оттуда. Значения по умолчанию — то, что объявляет базовая таблица стилей.

Страница

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--page-lightцвет—color-mix(in oklab, var(--brand) 9%, #f6f4ef)Цвет страницы в светлой теме
--page-darkцвет—color-mix(in oklab, var(--brand) 10%, #060707)Цвет страницы в темной теме
--glow-lightцвет—color-mix(in oklab, var(--brand) 30%, transparent)Свечение за карточкой в светлой теме
--glow-darkцвет—color-mix(in oklab, var(--brand) 55%, transparent)Свечение за карточкой в темной теме

Бренд и логотип

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--brandцвет—#155e75Фирменный цвет; оттенки страницы и рамки фокуса следуют за ним
--on-brandцвет—#ffffffЦвет текста, читаемый на фирменном цвете
--page-inkцветДаlight-dark(#1c1b19, #f3f2f0)Цвет логотипа и названия над карточкой
--logo-plateцветДаlight-dark(var(--field), rgba(255, 255, 255, 0.94))Подложка под логотипом приложения-партнера на значке и на экране согласия, чтобы темный логотип был виден
--logo-hдлина—40pxВысота вашего логотипа над карточкой

Карточка

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--sheetцветДаlight-dark(#ffffff, color-mix(in oklab, var(--brand) 7%, #1f1f20))Фон карточки
--sheet-lineцветДаlight-dark(transparent, rgba(255, 255, 255, 0.09))Рамка карточки (в светлой теме по умолчанию не видна)
--rsдлина—24pxСкругление углов карточки
--shadowтень—0 30px 60px -24px var(--shadow-color)Тень под карточкой; none убирает ее
--shadow-colorцветДаlight-dark(rgba(0, 0, 0, 0.45), rgba(0, 0, 0, 0.8))Цвет тени под карточкой
--card-wдлина—460pxШирина карточки на компьютере; на телефоне она во всю ширину
--card-padдлина—40pxБоковые отступы внутри карточки (на телефоне не больше 22px)

Текст

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--inkцветДаlight-dark(#1c1b19, #f3f2f0)Основной цвет текста; ссылки, главная кнопка и рамка поля в фокусе следуют за ним, пока их не задали
--text-mutedцветДаlight-dark(#6b6a66, #a9a9b0)Второстепенный текст: описания, подсказки и подписи
--invertцветДаlight-dark(#ffffff, #1c1b19)Цвет текста на заливке цветом —ink, противоположный —ink
--heading-weightнасыщенность—750Насыщенность заголовка страницы, от 100 до 900
--fontшрифт—system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serifШрифт всего текста: названия шрифтов, установленных на устройстве, без веб-шрифтов

Поля

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--fieldцветДаlight-dark(#f5f3ee, color-mix(in oklab, var(--brand) 9%, #2b2b2d))Заливка полей, ячеек кода и спокойных строк
--field-hoverцветДаlight-dark(#edeae3, color-mix(in oklab, var(--brand) 12%, #323235))Заливка поля под курсором
--field-focusцветДаvar(--ink)Рамка поля в фокусе и активной ячейки кода
--placeholderцветДаcolor-mix(in srgb, var(--text-muted) 70%, transparent)Подсказка в пустых полях
--rfдлина—14pxСкругление углов полей
--control-hдлина—54pxВысота полей и кнопок

Кнопки

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--btnцветДаvar(--ink)Заливка главной кнопки
--on-btnцветДаvar(--invert)Цвет текста на главной кнопке
--btn-hoverцветДаcolor-mix(in srgb, var(--btn) 88%, var(--sheet))Заливка главной кнопки под курсором
--btn-secondary-lineцветДаvar(--line)Рамка второстепенной кнопки
--btn-secondary-inkцветДаvar(--ink)Текст второстепенной кнопки и ее рамка под курсором
--rbдлина—14pxСкругление углов кнопок

Ссылки и фокус

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--linkцветДаvar(--ink)Цвет ссылок
--focusцветДаlight-dark(var(--brand), color-mix(in oklab, var(--brand) 50%, white))Рамки фокуса, галочки и подчеркивание ссылок; оставьте его заметным на карточке
--on-focusцветДаlight-dark(var(--on-brand), #1c1b19)Цвет текста на цвете фокуса, например галочки в отмеченном поле

Линии

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--lineцветДаlight-dark(#e6e2d8, color-mix(in oklab, var(--brand) 10%, #38383b))Разделители, рамки строк и рамка второстепенной кнопки
--line-strongцветДаlight-dark(#cfc9bb, #55535a)Заметные линии: рамка переключателя и разделитель в выборе страны

Статус и затемнение

ТокенТипСветлая и темнаяПо умолчаниюЧто задает
--dangerцветДаlight-dark(#c0341d, #ff8a73)Цвет текста ошибки и рамки поля с ошибкой
--scrimцвет—rgba(16, 24, 40, 0.45)Затемнение за диалогами и списком стран на телефоне

В большинстве случаев хватает этих токенов. К своему CSS обращайтесь, когда ни один токен не делает нужного.

Custom CSS

У темы без CSS эта часть свернута и показывает кнопку Add custom CSS; у темы, где CSS есть, она открыта. В ней редактор CSS, а под ним — переменные, на которые может опираться правило. Подсказка говорит прямо: Most things are tokens above: buttons, the card, fields, text, lines and the logo. Write CSS only for what no token does. It is applied after the colours, shape and background above, so your rules win; you are responsible for contrast and small screens. То есть почти все — токены выше: кнопки, карточка, поля, текст, линии и логотип; CSS нужен только для того, что токен не умеет. Он применяется после выбранных цветов, формы и фона, поэтому побеждает; за контраст и маленькие экраны отвечаете вы. Это крайнее средство.

Advanced: два токена и два правила CSS
Страница темы storefront-rules с раскрытой карточкой Advanced: две строки переопределения токенов: --btn со значением #c2410c и --on-btn со значением #ffffff, под ними редактор CSS с двумя правилами, список переменных и предпросмотр экрана согласия, нарисованный с ними

Правила кладутся после CSS, сгенерированного из значений, поэтому правило перекрывает значение, на которое нацелено: :root { --rs: 8px; } сильнее радиуса, который дало значение Shape (переопределение токена делает то же самое без CSS). Предпросмотр учитывает CSS по мере набора, а панель называет его, когда он изменился (Unsaved: custom CSS). На странице создания темы та же карточка.

Правило может задавать или читать на :root токены выше и такие переменные, которые не относятся к токенам:

ПеременнаяЧто задает
--page-bgЧто страница рисует за карточкой: по умолчанию свечение поверх цвета страницы. Стиль фона заменяет только эту переменную.
color-schemelight или dark фиксирует одну схему. По умолчанию экраны следуют устройству посетителя.
--scheme-locked1 скрывает у посетителя переключатель цветовой схемы. Тема с фиксированной схемой задает его сама; по умолчанию 0.

Работают и другие селекторы, например .container { box-shadow: none; }, но имена классов не гарантированы: релиз может их переименовать, а переменная — надежнее.

Note: За свой CSS отвечаете вы. Его никто не проверяет: цвет, плохо читаемый на карточке, или ширина, которая не влезает в телефон, дойдут до пользователей как написано. Посмотрите предпросмотр в обеих цветовых схемах и в ширину телефона. Если тема фиксирует color-scheme в своем CSS и посетитель не должен ее менять, задайте еще и --scheme-locked: 1.

Тема, сохраненная только с CSS

Тема, сохраненная до появления значений, имеет CSS и не имеет базы. Пока вы ее не сохранили, формы, которые ее используют, получают один этот CSS вместо базовой таблицы стилей. Консоль открывает ее в том же редакторе: база Versola без переопределений, часть Custom CSS карточки Advanced раскрыта, а в карточке Base theme об этом сказано строкой. Save theme доступна сразу: она сохраняет значения, которые показывает редактор, вместе с CSS, и дальше этот CSS ложится поверх значений, как любой другой Custom CSS. Правила, написанные в расчете на прежнюю целую таблицу стилей, стоит пересмотреть: теперь под ними лежит базовая таблица.

Что дальше

  • Forms — экраны, которые оформляет тема, их версии и предпросмотр
  • Клиент — выбор темы клиента
  • Locales — языки, которые предлагают экраны