Собственные темы оформления на CSS (Theme Library)
Собственная тема оформления на CSS перекрашивает все приложение Marinara. В разделе Theme Library (библиотека тем оформления) темы можно создавать, импортировать, экспортировать и переключать. В этом руководстве также перечислены переменные и классы CSS, которыми может пользоваться тема, и объяснено, как темы оформления сочетаются с Card CSS. Чтобы быстро изменить вид без CSS, см. Готовые стили окон чата.
Перед началом: если вы открываете Marinara с другого устройства, например с телефона, серверу нужен секрет администратора, прежде чем вы сможете создавать, править, импортировать, включать или удалять темы оформления. На компьютере, где работает сервер, секрет не нужен.
- На сервере задайте
ADMIN_SECRETв файле.env. - В приложении откройте Settings → Advanced → Admin Access (настройки → дополнительно → доступ администратора) и введите то же значение.
См. Настройки сервера: справочник и руководство Удаленный доступ: вход и список разрешенных адресов. Чтобы включить тему, которую вам передали, перейдите к разделу Включение темы оформления.
Что такое собственная тема оформления
CSS (сокращение от Cascading Style Sheets) – это код, задающий цвета, рамки и отступы. Тема оформления – это блок CSS, который может менять фон страницы, акцентный цвет, карточки, рамки, текст и многое другое.
Темы оформления хранятся в разделе Theme Library на вашем сервере Marinara, поэтому они синхронизируются на каждом устройстве, подключенном к тому же серверу. Большинство остальных настроек оформления остаются на одном устройстве. Активной может быть только одна тема оформления, а держать в библиотеке можно сколько угодно тем.
Где найти раздел Theme Library
- Откройте панель Settings.
- Перейдите на вкладку Addons (дополнения).
- Найдите раздел Theme Library.
Создание темы оформления
- В разделе Theme Library нажмите кнопку Create Theme (создать тему оформления).
- Введите название в поле для названия (его подсказка в поле читается "Theme name...").
- Напишите или вставьте CSS в большое текстовое поле.
- Оставьте переключатель Preview (предпросмотр) включенным, чтобы видеть изменения сразу во время набора. Выключите его, чтобы остановить живой предпросмотр.
- Нажмите кнопку Save (сохранить).
Новая тема оформления начинается с шаблона, в котором самые ходовые переменные перечислены в виде закомментированных примеров. Снимите знаки комментария и подставьте свои значения. Совсем новая тема оформления включается при сохранении, и появляется сообщение: Theme "My Theme" saved and activated.
Чтобы поправить тему оформления позже, найдите ее в списке Installed Themes (установленные темы), нажмите значок с кодом (всплывающая подсказка Edit theme CSS), внесите правки и нажмите Save. Правка не меняет того, какая тема активна.
Импорт и экспорт тем оформления
Как импортировать тему оформления:
- Нажмите кнопку Import File (импортировать файл) в разделе Theme Library.
- Выберите файл
.cssили.json. - Прочитайте сообщение. В нем сказано, сколько тем оформления импортировано, сколько пропущено и сколько не удалось импортировать.
Файл .css превращается в одну тему оформления, название берется из имени файла. Файл .json может содержать одну или несколько тем. Файл, экспортированный из Marinara, импортируйте как есть или напишите небольшой файл сами:
{ "name": "My Theme", "css": "..." }Импортированные темы оформления сами по себе не включаются. Тема с таким же названием и таким же CSS, как у темы, которая уже есть на сервере, пропускается.
Чтобы экспортировать тему оформления, нажмите значок выгрузки (всплывающая подсказка Export theme) в ее строке в списке Installed Themes. Marinara скачивает файл .json, который можно импортировать в другом месте.
Включение темы оформления
В списке Installed Themes показаны все темы оформления, а сверху стоит пункт Default Theme (тема по умолчанию).
- Нажмите на название темы оформления, чтобы сделать ее активной. Активную тему отмечает галочка.
- Нажмите Default Theme, чтобы отключить собственное оформление и вернуть встроенный вид.
Кнопка Reset Appearance (сбросить оформление) вверху раздела App Style (стиль приложения) в Settings → Appearance (настройки → оформление) тоже отключает активную тему оформления.
Чтобы удалить тему оформления, нажмите значок корзины (всплывающая подсказка Remove theme) и подтвердите действие в окне Delete Theme. CSS этой темы удаляется с сервера безвозвратно.
Если не сработало: когда приложение выглядит неправильно, проверьте и активную тему оформления, и Card CSS в чате, если он есть. См. Темы оформления и Card CSS.
Готовые стили окон чата
Перед началом: CSS здесь не нужен.
- Откройте Settings → Appearance → App (настройки → оформление → приложение).
- Внизу раздела App Style найдите Chat widget style (стиль виджетов чата).
- Выберите стиль.
| Стиль | Вид |
| Default | Исходный вид. |
| Dottore | Ледяные голубые приборные рамки, светлые металлические края и срезанные углы. |
| Prof. Mari | Сказочные рамки с золотой отделкой, синие тона драгоценных камней и Primogems у заголовков окон. Фон его кнопок совпадает с фоном окон. |
У каждого стиля свой шрифт; каждый работает в светлом и темном режимах и вместе оформляет кнопки, окна и раскрывающиеся разделы. Выбор стиля сбрасывает Font (шрифт), Shape (форма) и все три цвета. Расположение окон сохраняется.
Отдельно можно изменить следующее:
- Font и Shape следуют стилю (Preset font, Preset shape), пока вы не выберете другие значения.
- Border & Buttons Color (цвет рамок и кнопок) меняет контуры и значки кнопок. Значки используют первый цвет градиента.
- Background Color (цвет фона) заполняет кнопки, окна, раскрывающиеся разделы и поля редактирования.
- Text Color (цвет текста) меняет текст виджетов. Градиент виден на заголовках и подписях, а поля редактирования используют первый цвет.
Для каждого цвета есть поле выбора сплошного цвета и вариант с градиентом. 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, и оба могут действовать одновременно.
- Собственная тема оформления перекрашивает все приложение. Ей разрешено переопределять основные переменные Marinara, использовать
!importantиposition: fixed. - Card CSS встраивается в карточку персонажа или персоны и включается отдельно в каждом чате. Он очищается строже: не может переопределять основные переменные,
!importantиз него вырезается, аposition: fixedпревращается вposition: absolute. Он оформляет сообщения чата, а не все приложение. См. Руководство по оформлению карточек через Card 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 |
Атрибуты данных
data-windowзадает имя окна и его кнопки:chat-settings,trackers, окна управленияcontrol:game,control:session,control:volume,control:assets,control:connected-chat,control:package:<package>иcontrol:beholder:<package>, а такжеdrawer:<window>:<drawer>для вынесенного раздела, напримерdrawer:chat-settings:chat-name.data-drawerзадает имя раздела, напримерchat-name. Некоторые имена начинаются с режима чата, какroleplay-agentsилиconversation-agents. Трекеры используютtracker-world,tracker-persona,tracker-characters,tracker-quests,tracker-inventory,tracker-customиagent-activity.data-presentationимеет значение"window"у окна на компьютере или"sheet"у панели на телефоне.data-pinnedиdata-lockedимеют значение"true", пока окно закреплено или заблокировано.data-window-controlзадает имя кнопки в строке заголовка:"pin","lock","close"или"put-back". У нажатой кнопки закрепления или блокировки также естьaria-pressed="true".data-chat-settings-controlотмечает дополнительные кнопки строки заголовка Chat Settings:"reset-view","favorite-layout"и"tracker-panel". У звездочки избранного естьaria-pressed="true"и заполненный значок, когда текущее расположение совпадает с сохраненным избранным.data-edgeимеет значение"n","s","e","w","ne","nw","se"или"sw"на соответствующем участке для изменения размера.- У кнопки раскрытого раздела внутри
.mari-drawer__headerестьaria-expanded="true". data-drawer-control="pop-out"отмечает кнопку переноса раздела в отдельное окно.data-outside="true"отмечает предпросмотр перетаскивания достаточно далеко за пределами окна, чтобы при отпускании создать отдельное окно.data-axisимеет значение"x"у вертикальной линии выравнивания и"y"у горизонтальной.data-detachedимеет значение"true", когда раздел показан в своем окне, и у окна, и у раздела внутри него. Окно вынесенного раздела получает имяdata-window="drawer:<window>:<drawer>", напримерdata-window="drawer:chat-settings:chat-name", аdata-drawer-hostзадает имя исходного окна.data-draggingимеет значение"true"у раздела, пока вы перетаскиваете его заголовок, аdata-drop-targetимеет значение"true"у окна, над которым вы держите вынесенный раздел для возврата.- У кнопки окна есть
data-windowэтого окна иdata-minimized="true", например.mari-window-bubble[data-window="control:volume"]. Окна управления называютсяcontrol:game,control:session,control:volume,control:assets,control:connected-chat,control:package:<package>иcontrol:beholder:<package>. Во время перетаскивания кнопки ееdata-draggingимеет значение"true". Кнопка, которая вместо значка показывает обновляемую сводку, например свернутый трекер World State, имеетdata-banner="true"и растягивается по ширине сводки. - У заблокированной кнопки есть
data-locked="true", в том числе у кнопки Chat Settings. Она по-прежнему открывает окно, но не перемещается, пока окно не разблокировано. Селектор.mari-window-bubble[data-locked="true"]позволяет оформить такие кнопки иначе. - На телефоне окна и их немного увеличенные кнопки имеют
data-presentation="sheet". Кнопка Tracker Panel –.mari-window-bubble[data-tracker-panel-toggle="bubble"]. - Кнопка Chat Settings тоже относится к bubble:
.mari-window-bubble[data-chat-settings-button]. Пока Chat Settings открыто, у нее естьdata-open="true". - Вынесенный раздел сворачивается в кнопку с
data-drawer-host(исходным окном). Кнопка Put back в его окне –[data-window-control="put-back"].
Переменные
Если переменная не задана, используются общие цвета элементов управления чатом. Поэтому теме достаточно задать только те значения, которые нужно изменить.
| Переменная | Чем управляет |
--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. У столбца нет оконной рамки; кнопки используют цвета виджетов и выбранный размер кнопок независимо от трех переключателей для остальной части чата, сохраняя круглую форму.
Смежные руководства
- Руководство по оформлению карточек через Card CSS
- Настройки оформления
- Настройки сервера: справочник
- Удаленный доступ: вход и список разрешенных адресов