Руководства Typhon

Свои темы оформления в Typhon

Цвета, скругления, отступы и шрифт — в одном небольшом файле. Как его написать, импортировать и вернуть оформление по умолчанию.

Обновлено 10 октября 2026 г.

Где это в лаунчере

Все темы живут в разделе Настройки → Оформление. Там же:

  • выбор темы — нажмите на карточку. «Системная» переключает встроенные светлую и тёмную вслед за настройками системы;
  • импорт — кнопка «Импорт» загружает файл темы с диска (расширение .typhontheme или .json);
  • редактор — открывается под выбранной темой: название, значения токенов с палитрой для цветов и поле «Пользовательский CSS» под кнопкой «Дополнительно». Рядом — живое превью;
  • экспорт — сохраняет выбранную тему в файл .typhontheme, чтобы перенести её на другой компьютер или отдать кому-то;
  • удаление — только для своих тем. Встроенные «Тёмная», «Светлая» и «Высокий контраст» не удаляются и не перезаписываются: если отредактировать встроенную тему, изменения сохранятся как новая тема рядом с ней.

Свои темы хранятся в файле themes.json в папке данных Typhon: %APPDATA%\Typhon\ на Windows и ~/Library/Application Support/Typhon/ на macOS. Править его руками не нужно — для переноса есть импорт и экспорт.

Быстрый старт

Сохраните текст ниже в файл dusk.typhontheme (подойдёт и расширение .json), затем в лаунчере откройте Настройки → Оформление → Импорт и выберите этот файл. Тема появится в списке с пометкой «своя» — нажмите на неё, чтобы применить.

{
  "version": 1,
  "theme": {
    "id": "dusk",
    "name": "Сумерки",
    "base": "dark",
    "tokens": {
      "--bg": "#0d1117",
      "--bg-sidebar": "#0b0e13",
      "--surface": "#131922",
      "--surface-2": "#18202b",
      "--surface-3": "#202a37",
      "--surface-4": "#293444",
      "--border": "rgba(255, 255, 255, 0.08)",
      "--border-strong": "rgba(255, 255, 255, 0.14)",
      "--hover": "rgba(255, 255, 255, 0.05)",
      "--hover-strong": "rgba(255, 255, 255, 0.08)",
      "--text": "#e8edf3",
      "--text-2": "#a0abb8",
      "--text-3": "#6b7785",
      "--accent": "#2fb3a3",
      "--accent-hover": "#3cc4b3",
      "--accent-subtle": "rgba(47, 179, 163, 0.15)",
      "--accent-text": "#6fd6c8",
      "--accent-ring": "rgba(47, 179, 163, 0.5)",
      "--radius-md": "1rem",
      "--radius-lg": "1.4rem"
    },
    "css": ".sidebar { border-right: 1px solid var(--border); }"
  }
}

Дальше тему удобно доводить прямо в редакторе лаунчера: выберите её, поменяйте значения, посмотрите на превью и нажмите «Сохранить».

Формат файла

Файл темы — JSON с двумя полями верхнего уровня: version (сейчас всегда 1) и theme. Любое лишнее поле — ошибка импорта, поэтому опечатка в имени поля не пройдёт незамеченной.

ПолеЧто этоПравила
idИдентификатор темыСтрочные латинские буквы, цифры и дефис, до 64 символов, начинается с буквы или цифры
nameНазвание в списке темОт 1 до 64 символов, без управляющих символов; повторные пробелы схлопываются
baseБазовая палитраdark или light
tokensЗначения переменных интерфейсаТолько имена из таблиц ниже
cssСвой CSSНеобязательно, до 32 КиБ

Весь файл — не больше 256 КиБ. Поля builtIn и updatedAt, которые появляются в экспортированном файле, при импорте допустимы, но лаунчер выставляет их сам.

Повторный импорт. Если своя тема с таким же id уже есть, импорт заменит её — так удобно обновлять тему, которую вы правите во внешнем редакторе. Если id совпадает со встроенной темой (dark, light, contrast), тема сохранится под новым идентификатором вроде dark-2, а встроенная останется как была.

Что делает base. Лаунчер по нему понимает, светлая тема или тёмная, и подбирает под неё оттенки личного акцента. Недостающих цветов base не подставляет: токен, которого нет в теме, берётся из встроенной тёмной палитры. Поэтому светлая тема должна задать все цвета из таблицы, иначе часть интерфейса останется тёмной.

Токены

Токен — это CSS-переменная, на которой построен интерфейс. Тема может задать любую их часть, остальные остаются встроенными. Размеры указываются в rem: при размере интерфейса 100% (Настройки → Общие → Размер интерфейса) 1rem равен 11 пикселям, и всё, что задано в rem, масштабируется вместе с этой настройкой.

Цвета

ТокенГде используется
--bgФон окна
--bg-sidebarФон боковой панели
--surfaceКарточки и панели первого уровня
--surface-2Поверхности второго уровня: поля ввода, вложенные блоки
--surface-3Поверхности третьего уровня
--surface-4Самые приподнятые элементы: кнопки, всплывающие панели
--borderОбычные рамки и разделители
--border-strongЗаметные рамки
--hoverПодсветка при наведении
--hover-strongУсиленная подсветка при наведении и нажатии
--textОсновной текст
--text-2Второстепенный текст
--text-3Приглушённый текст: подписи, подсказки
--accentАкцентный цвет: главные кнопки, выделение
--accent-hoverАкцент при наведении
--accent-subtleБледный акцентный фон
--accent-textАкцентный текст и ссылки
--accent-ringРамка фокуса и активных полей
--success, --success-subtleУспех и его бледный фон
--warning, --warning-subtleПредупреждение и его бледный фон
--danger, --danger-subtleОшибка, опасное действие и их бледный фон

Скругления и отступы

ТокенВстроенное значение
--radius-xs, --radius-sm, --radius-md, --radius-lg, --radius-xl0.4rem, 0.6rem, 0.8rem, 1.2rem, 1.6rem
--cut0.2rem — скругление метки активного пункта боковой панели
--space-1 … --space-60.4rem … 2.4rem с шагом 0.4rem
--space-8, --space-10, --space-123.2rem, 4rem, 4.8rem

Раскладка

ТокенВстроенное значение
--page-x3.6rem — боковые поля страницы
--page-max232rem — максимальная ширина содержимого
--prose-max76rem — максимальная ширина длинного текста
--sidebar-w23.2rem — ширина боковой панели
--topbar-h5.6rem — высота верхней панели
--control-sm, --control-md, --control-lg3.2rem, 3.8rem, 4.4rem — высота кнопок и полей

Текст

ТокенВстроенное значение
--font-sansInter Tight Variable, Inter, Segoe UI, system-ui, sans-serif
--font-xs, --font-sm, --font-md, --font-lg, --font-xl1.3rem, 1.4rem, 1.5rem, 1.7rem, 1.9rem
--font-title3.2rem — заголовки страниц
--font-heroclamp(3.6rem, 2.6vw, 4.4rem) — сейчас в интерфейсе не используется
--tracking-title, --tracking-heading-0.024em, -0.012em — межбуквенный интервал заголовков

Шрифт берётся только из установленных в системе: загрузить свой файл шрифта тема не может. Названия шрифтов в --font-sans пишутся без кавычек, через запятую: Segoe UI, sans-serif.

Анимации и тени

ТокенВстроенное значение
--easecubic-bezier(0.2, 0.8, 0.2, 1) — кривая всех переходов
--dur, --dur-fast, --dur-panel160ms, 120ms, 180ms — длительность переходов
--shadow-popТень всплывающих меню и подсказок
--shadow-modalТень модальных окон

--ui-scale в тему не входит: размером интерфейса управляет отдельная настройка, и тема не может её перебить.

Какие значения допустимы

Значение токена — от 1 до 120 символов из этого набора: латинские буквы, цифры, пробел и # . , % ( ) / + * -. Этого хватает на цвета (#1a2b3c, rgb(26 43 60 / 80%), hsl(210 40% 16%), color-mix(in srgb, #fff 8%, transparent)), размеры, calc(...), clamp(...) и ссылки на другие токены через var(--accent).

Нельзя: кавычки, точка с запятой, фигурные скобки, !important, url(, expression( и /*.

Свой CSS

Токены покрывают почти всё, но иногда хочется поменять то, что переменной не вынесено. Для этого у темы есть поле css, в редакторе — «Пользовательский CSS» под кнопкой «Дополнительно». Лаунчер добавляет этот CSS на страницу поверх встроенных стилей, пока тема активна.

Ограничения:

  • не больше 32 КиБ;
  • запрещены @import, url(, expression(, javascript:, behavior:, -moz-binding и </style — тема не может ничего загрузить из сети или с диска, поэтому ни картинок, ни своих шрифтов через CSS тоже не будет. Редактор лаунчера проверяет CSS вместе с комментариями, так что не пишите эти слова и там;
  • --ui-scale в CSS запрещён по той же причине, что и в токенах;
  • фигурные скобки должны быть парными, вложенность — не глубже четырёх уровней. @media и @keyframes работают.

Специфичность. Стили компонентов лаунчера привязаны к самим компонентам, поэтому правило .sidebar { background: ... } проиграет встроенному, если оно меняет то же свойство. Свойства, которые компонент не задаёт, применяются как есть; чтобы перебить заданное, добавьте !important.

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

Пример для светлой темы: полоса прокрутки во встроенных стилях рассчитана на тёмный фон и на светлом почти не видна.

::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.14);
  background-clip: padding-box;
}

::-webkit-scrollbar-thumb:hover {
  background: rgba(0, 0, 0, 0.24);
  background-clip: padding-box;
}

В JSON-файле CSS записывается одной строкой, переносы — как \n. Удобнее вставить его в поле «Пользовательский CSS» в редакторе и затем экспортировать тему — лаунчер сам запишет его правильно.

Личный акцент

В разделе «Оформление» есть ещё «Личный акцент» — цвет, который применяется поверх любой темы и сам подстраивает оттенки под читаемость. Пока он выбран, акцентные токены темы (--accent, --accent-hover, --accent-subtle, --accent-text, --accent-ring) не видны. Чтобы увидеть акцент самой темы, выберите в личном акценте вариант «Цвет темы». Личный акцент — ваша локальная настройка, в экспортированный файл темы он не попадает.

Если тема сломала окно

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

  1. Кнопка «Сбросить оформление» в правом нижнем углу окна. Она видна всегда, пока активна своя тема или тема со своим CSS, и CSS темы её не оформляет.
  2. Сочетание Ctrl+Shift+Alt+T в окне лаунчера.
  3. Настройки → Оформление → Сброс, если до настроек добраться можно: кнопка «Сбросить» там просит подтверждения.

Кроме того, новая тема первые пять секунд считается пробной. Если за это время лаунчер закрылся или упал, при следующем запуске он вернётся к теме, которая была до неё.

Сброс удаляет все свои темы, а заодно личный акцент и окраску значка, и возвращает встроенную тёмную тему. Кнопка в углу и сочетание клавиш срабатывают сразу, без вопроса. Поэтому тему, над которой вы работаете, стоит время от времени экспортировать в файл — после сброса её можно будет импортировать обратно и поправить то, что сломало окно.

Ошибки импорта

СообщениеЧто проверить
недопустимый путь к файлу темыУ файла не то расширение: нужно .typhontheme или .json
файл темы превышает допустимый размерФайл больше 256 КиБ
неподдерживаемая версия файла темыversion должен быть 1
недопустимый идентификатор темыid: строчные латинские буквы, цифры и дефис
недопустимое имя темыname пустое, длиннее 64 символов или содержит управляющие символы
недопустимая базовая палитра темыbase — только dark или light
неизвестное имя токена темыТокена нет в таблицах выше, или это --ui-scale
недопустимое значение токена темыПустое значение, длиннее 120 символов или символ вне допустимого набора — чаще всего кавычки
пользовательский CSS превышает допустимый размерCSS больше 32 КиБ
пользовательский CSS содержит запрещённую конструкциюВ CSS есть @import, url( или другое слово из списка выше
непарные или слишком глубоко вложенные фигурные скобки в CSSЛишняя или незакрытая скобка, либо вложенность глубже четырёх уровней
Не удалось выполнить действие с темойФайл не читается как JSON или в нём лишнее поле

Если лаунчер пишет «Не удалось выполнить действие с темой», чаще всего файл не читается как JSON или в нём лишнее поле. Проверьте запятые, кавычки вокруг имён полей и названия полей верхнего уровня.