Собственные темы оформления на CSS (Theme Library)

Собственная тема оформления на CSS перекрашивает все приложение Marinara. В разделе Theme Library (библиотека тем оформления) темы можно создавать, импортировать, экспортировать и переключать. В этом руководстве также перечислены переменные и классы CSS, которыми может пользоваться тема, и объяснено, как темы оформления сочетаются с Card CSS. Чтобы быстро изменить вид без CSS, см. Готовые стили окон чата.

Перед началом: если вы открываете Marinara с другого устройства, например с телефона, серверу нужен секрет администратора, прежде чем вы сможете создавать, править, импортировать, включать или удалять темы оформления. На компьютере, где работает сервер, секрет не нужен.

  1. На сервере задайте ADMIN_SECRET в файле .env.
  2. В приложении откройте Settings → Advanced → Admin Access (настройки → дополнительно → доступ администратора) и введите то же значение.

См. Настройки сервера: справочник и руководство Удаленный доступ: вход и список разрешенных адресов. Чтобы включить тему, которую вам передали, перейдите к разделу Включение темы оформления.

Что такое собственная тема оформления

CSS (сокращение от Cascading Style Sheets) – это код, задающий цвета, рамки и отступы. Тема оформления – это блок CSS, который может менять фон страницы, акцентный цвет, карточки, рамки, текст и многое другое.

Темы оформления хранятся в разделе Theme Library на вашем сервере Marinara, поэтому они синхронизируются на каждом устройстве, подключенном к тому же серверу. Большинство остальных настроек оформления остаются на одном устройстве. Активной может быть только одна тема оформления, а держать в библиотеке можно сколько угодно тем.

Где найти раздел Theme Library

  1. Откройте панель Settings.
  2. Перейдите на вкладку Addons (дополнения).
  3. Найдите раздел Theme Library.

Создание темы оформления

  1. В разделе Theme Library нажмите кнопку Create Theme (создать тему оформления).
  2. Введите название в поле для названия (его подсказка в поле читается "Theme name...").
  3. Напишите или вставьте CSS в большое текстовое поле.
  4. Оставьте переключатель Preview (предпросмотр) включенным, чтобы видеть изменения сразу во время набора. Выключите его, чтобы остановить живой предпросмотр.
  5. Нажмите кнопку Save (сохранить).

Новая тема оформления начинается с шаблона, в котором самые ходовые переменные перечислены в виде закомментированных примеров. Снимите знаки комментария и подставьте свои значения. Совсем новая тема оформления включается при сохранении, и появляется сообщение: Theme "My Theme" saved and activated.

Чтобы поправить тему оформления позже, найдите ее в списке Installed Themes (установленные темы), нажмите значок с кодом (всплывающая подсказка Edit theme CSS), внесите правки и нажмите Save. Правка не меняет того, какая тема активна.

Импорт и экспорт тем оформления

Как импортировать тему оформления:

  1. Нажмите кнопку Import File (импортировать файл) в разделе Theme Library.
  2. Выберите файл .css или .json.
  3. Прочитайте сообщение. В нем сказано, сколько тем оформления импортировано, сколько пропущено и сколько не удалось импортировать.

Файл .css превращается в одну тему оформления, название берется из имени файла. Файл .json может содержать одну или несколько тем. Файл, экспортированный из Marinara, импортируйте как есть или напишите небольшой файл сами:

{ "name": "My Theme", "css": "..." }

Импортированные темы оформления сами по себе не включаются. Тема с таким же названием и таким же CSS, как у темы, которая уже есть на сервере, пропускается.

Чтобы экспортировать тему оформления, нажмите значок выгрузки (всплывающая подсказка Export theme) в ее строке в списке Installed Themes. Marinara скачивает файл .json, который можно импортировать в другом месте.

Включение темы оформления

В списке Installed Themes показаны все темы оформления, а сверху стоит пункт Default Theme (тема по умолчанию).

  1. Нажмите на название темы оформления, чтобы сделать ее активной. Активную тему отмечает галочка.
  2. Нажмите Default Theme, чтобы отключить собственное оформление и вернуть встроенный вид.

Кнопка Reset Appearance (сбросить оформление) вверху раздела App Style (стиль приложения) в Settings → Appearance (настройки → оформление) тоже отключает активную тему оформления.

Чтобы удалить тему оформления, нажмите значок корзины (всплывающая подсказка Remove theme) и подтвердите действие в окне Delete Theme. CSS этой темы удаляется с сервера безвозвратно.

Если не сработало: когда приложение выглядит неправильно, проверьте и активную тему оформления, и Card CSS в чате, если он есть. См. Темы оформления и Card CSS.

Готовые стили окон чата

Перед началом: CSS здесь не нужен.

  1. Откройте Settings → Appearance → App (настройки → оформление → приложение).
  2. Внизу раздела App Style найдите Chat widget style (стиль виджетов чата).
  3. Выберите стиль.
СтильВид
DefaultИсходный вид.
DottoreЛедяные голубые приборные рамки, светлые металлические края и срезанные углы.
Prof. MariСказочные рамки с золотой отделкой, синие тона драгоценных камней и Primogems у заголовков окон. Фон его кнопок совпадает с фоном окон.

У каждого стиля свой шрифт; каждый работает в светлом и темном режимах и вместе оформляет кнопки, окна и раскрывающиеся разделы. Выбор стиля сбрасывает Font (шрифт), Shape (форма) и все три цвета. Расположение окон сохраняется.

Отдельно можно изменить следующее:

Для каждого цвета есть поле выбора сплошного цвета и вариант с градиентом. Reset color (сбросить цвет) рядом с настройкой снова включает светлые или темные цвета стиля. Декоративные эмблемы сохраняют исходные цвета.

Перенос стиля на чат

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

ПереключательЧто применяет
Apply preset font (применить шрифт пресета)Шрифт виджетов – для сообщений, полей ввода и элементов управления чатом.
Apply preset shape (применить форму пресета)Форму рамки – для сообщений Roleplay (в классическом виде и в виде визуальной новеллы), диалогового поля Game, полей ввода и элементов управления. Сообщения Conversation сохраняют свою форму.
Apply preset colors (применить цвета пресета)Цвета рамки, фона и текста в этих областях, включая сообщения Conversation. Ваши собственные цвета и градиенты тоже применяются. Реплики в кавычках сохраняют собственный цвет Dialogue Highlight Color каждого персонажа или персоны. Сообщение из HTML, например оформленная карточка агента, сохраняет цвета текста, которые задает само.

Кнопки истории (Load More, Show older) подчиняются переключателям так же, как остальные элементы управления чатом. В Game Mode переключатели также действуют на побочные реплики, виджеты HUD, панель карты, листы персонажей, журналы, инвентарь, боевые панели и диалоговые окна. Professor Mari тоже может создавать собственные темы для этих областей.

Собственная тема оформления по-прежнему может переопределять стили. Переменные окон и разделов, перечисленные ниже, имеют приоритет над цветами стиля. Используйте --mari-window-font-family для шрифта окна, --mari-drawer-radius для углов разделов и --mari-window-ornament: none, чтобы скрыть украшение заголовка. Чтобы убрать все украшения стиля, сначала выберите Default.

Темы оформления и Card CSS

В приложении Marinara есть два способа добавить собственный CSS, и оба могут действовать одновременно.

Ограничения размера и названия

Название темы оформления вмещает до 200 символов. CSS вмещает до 256 KiB, причем считаются байты в кодировке UTF-8. Тему крупнее этого предела приложение отклоняет при сохранении или импорте. Кроме того, CSS собственной темы оформления перед запуском проходит очистку: стили, которые подгружают файл с другого сайта, не работают. Вместо этого встройте картинку или шрифт в виде URI data:.

Справочник по переменным CSS

В редакторе тем оформления есть сворачиваемый блок CSS Variable Reference. Раскройте его, чтобы увидеть самые полезные переменные, значения которых можно переопределить. Тема оформления меняет вид приложения, задавая эти переменные в блоке :root. В справочнике перечислены такие переменные:

ПеременнаяЗа что отвечает
--backgroundФон страницы
--foregroundОсновной текст
--primaryАкцент и кнопки
--primary-foregroundТекст на акцентном фоне
--secondaryКарточки и поля ввода
--cardФон карточки
--borderРамки
--muted-foregroundПриглушенный текст
--sidebarФон боковой панели
--sidebar-borderРамка боковой панели
--marinara-shell-edge-borderЛевый и правый края оболочки
--destructiveОшибки и удаление
--popoverФон раскрывающегося списка
--accentПодсветка при наведении

Тема оформления может задать любую переменную CSS, которую использует Marinara, а не только эти. У некоторых эффектов есть свои переменные. Например, --marinara-theme-accent-pulse: enabled запрашивает анимацию пульсации акцента.

Оформление окон и разделов чата

На компьютере Chat Settings (настройки чата) открывается как перемещаемое окно. Его сворачиваемые разделы называются drawers. Раздел можно вынести в отдельное окно, а затем свернуть в маленькую перемещаемую кнопку, которая называется bubble.

Эти окна и кнопки используются и для других инструментов чата: Game controls, Session, Volume, Game Assets, связанных чатов и элементов управления пакетами. На телефоне большинство окон открывается панелями на всю ширину; Echo Chamber остается компактным окном, которое можно перемещать и растягивать. Инструменты, вынесенные из Chat Settings, находятся в перемещаемом меню Chat tools (инструменты чата) с тремя точками; кнопки трекеров остаются отдельно.

Классы, атрибуты данных и переменные ниже позволяют теме оформления вместе менять эти части интерфейса. Правила вашей темы переопределяют значения по умолчанию без !important.

Классы

Часть интерфейсаКласс
Окно.mari-window
Строка заголовка.mari-window__header
Заголовок и его значок.mari-window__title-row
Заголовок.mari-window__title
Кнопки строки заголовка (Reset View, звездочка избранного, Tracker Panel, закрепление, блокировка, закрытие, Put back).mari-window__controls (у каждой кнопки есть .mari-window__control)
Содержимое окна.mari-window__body
Края и углы для изменения размера.mari-window__resize-handle
Метка в углу, когда указатель или фокус находится в окне.mari-window__resize-grip
Сворачиваемый раздел.mari-drawer
Шапка и заголовок раздела.mari-drawer__header, .mari-drawer__title
Значок раздела, счетчик и ?.mari-drawer__icon, .mari-drawer__count, .mari-drawer__help
Предпросмотр свернутого раздела (маленький виджет трекера).mari-drawer__summary
Кнопки рядом со стрелкой раздела и кнопка отдельного окна.mari-drawer__actions, .mari-drawer__popout
Стрелка и содержимое раздела.mari-drawer__arrow, .mari-drawer__body
Предпросмотр, следующий за указателем при перетаскивании раздела наружу.mari-drawer-ghost
Кнопка свернутого окна (bubble).mari-window-bubble
Обновляемая сводка, которую кнопка показывает вместо значка (баннер World State).mari-window-bubble__banner
Линия выравнивания перемещаемой кнопки с другой.mari-window-snap-guide
Точка во время работы агентов (кнопка Chat Settings, окно Trackers).mari-agents-running-dot

Атрибуты данных

Переменные

Если переменная не задана, используются общие цвета элементов управления чатом. Поэтому теме достаточно задать только те значения, которые нужно изменить.

ПеременнаяЧем управляет
--mari-window-bgФон окна
--mari-window-textТекст окна
--mari-window-border, --mari-window-border-widthРамка окна
--mari-window-radiusСкругление углов окна
--mari-window-shadowТень окна
--mari-window-backdrop-filterРазмытие за окном
--mari-window-header-bg, --mari-window-header-text, --mari-window-header-borderЦвета строки заголовка
--mari-window-header-paddingОтступы строки заголовка
--mari-window-control-color, --mari-window-control-color-hover, --mari-window-control-bg-hoverКнопки строки заголовка, включая звездочку избранного
--mari-window-control-color-active, --mari-window-control-bg-activeНажатые кнопки строки заголовка: закрепление, блокировка и заполненная звездочка избранного
--mari-window-control-radius, --mari-window-control-gapСкругление кнопок и расстояние между ними
--mari-window-focus-ringКонтур фокуса клавиатуры и окна, в которое будет возвращен раздел
--mari-window-resize-handle-sizeШирина краев для изменения размера
--mari-window-bubble-size, --mari-window-bubble-radius, --mari-window-bubble-shadowРазмер, скругление и тень кнопки окна
--mari-window-bubble-bg, --mari-window-bubble-bg-hover, --mari-window-bubble-borderФон и рамка кнопки окна
--mari-window-bubble-text, --mari-window-bubble-text-hoverЦвет значка кнопки окна
--mari-window-snap-guideЦвет линии выравнивания
--mari-drawer-bg, --mari-drawer-borderФон и разделитель раздела
--mari-drawer-header-bg, --mari-drawer-header-bg-hoverЦвета шапки раздела
--mari-drawer-header-padding, --mari-drawer-body-padding-inline, --mari-drawer-body-padding-bottomОтступы раздела
--mari-drawer-title-color, --mari-drawer-icon-color, --mari-drawer-arrow-colorТекст и значки шапки раздела
--mari-drawer-count-bg, --mari-drawer-count-textСчетчик у раздела

Задайте переменную в :root, чтобы изменить все окна, или в селекторе, чтобы изменить одно:

:root {
  --mari-window-radius: 0.5rem;
  --mari-window-bubble-bg: #3b0764;
}

[data-window="chat-settings"] .mari-drawer[data-drawer="chat-name"] {
  --mari-drawer-border: transparent;
}

Оформление сообщений, полей ввода и элементов управления чатом

Три переключателя Apply preset также позволяют собственной теме использовать оформление виджетов в остальной части чата. Тема может переопределить каждую часть с помощью переменных ниже. Если не хотите писать CSS сами, попросите Professor Mari создать подходящую тему чата.

ЧастьКласс
Поля сообщений Roleplay и Game, побочные реплики, виджеты HUD, панель карты и листы персонажей в Game, а также поля ввода чата.mari-chat-style-surface
Журналы, инвентарь, боевые панели, варианты выбора и диалоговые окна в Game; у панелей также есть data-game-section с их названием, например logs, inventory или combat-actions.mari-game-section.mari-chat-style-surface
Содержимое Game в окне, например журнал приключений, которое следует цветам окна.mari-game-section
Сообщения Conversation (только шрифт и цвета).mari-chat-style-conversation
Текст сообщений Conversation без рамки.mari-chat-style-text
Элементы управления чатом, включая Calls и управление группой Conversation.mari-chat-style-control
Кнопки истории: Load More, Show older, Show newer, Latest, а также Older, All и Show more older logs в журналах Game. У них также есть .mari-chat-style-control.mari-chat-history-pager
Сообщение из HTML, например оформленная карточка агента. Цвета текста, заданные внутри него, сохраняются при включенном Apply preset colors.mari-html-content
ПеременнаяЧто меняет
--mari-chat-font-familyШрифт соответствующих областей чата
--mari-chat-bgФон поля; принимает цвет или градиент
--mari-chat-textЧитаемый сплошной цвет текста
--mari-chat-borderКонтур поля; принимает цвет или градиент
--mari-chat-border-colorЗапасной сплошной цвет рамки
--mari-chat-radiusСкругление полей, кроме сообщений Conversation
--mari-chat-control-bg, --mari-chat-control-bg-hoverФон кнопок чата
--mari-chat-control-color, --mari-chat-control-radiusЦвет значков и скругление кнопок чата
--mari-chat-input-bgФон внутри редактируемых полей

Например, при включенных Apply preset font и Apply preset colors:

:root {
  --mari-chat-font-family: Georgia, serif;
  --mari-chat-bg: #251e29;
  --mari-chat-text: #f4e8dc;
  --mari-chat-border: linear-gradient(100deg, #d6aa66, #dda0b2);
}

Незаданные переменные следуют настройкам виджетов и пресету. Чтобы переменные применялись через встроенное оформление, соответствующий переключатель должен быть включен. Сообщения Conversation сохраняют свою форму даже при включенном Apply preset shape. Собственные темы также могут обращаться к классам напрямую; не обрезайте декоративными формами контуры фокуса, меню и содержимое сообщений.

На телефоне меню с тремя точками раскрывается в круглые кнопки. Его кнопка открытия – [data-chat-tools-menu-button], раскрытый столбец – [data-chat-tools-menu], а атрибут data-chat-tools-menu-item каждого элемента списка содержит ID его окна. Кнопки инструментов используют .mari-window-bubble.mari-chat-tools-button и data-chat-tools-menu-tool с тем же ID. У столбца нет оконной рамки; кнопки используют цвета виджетов и выбранный размер кнопок независимо от трех переключателей для остальной части чата, сохраняя круглую форму.

Смежные руководства