emarpiee2k downloadsProvides advanced controls for managing themes, CSS snippets, and style settings. Transforms them into adjustable controls, enabling you to save, export or switch between configurations as presets.
This plugin wouldn't have been possible without the inspiration and foundational logic provided by Style Settings, an Obsidian plugin originally created by mgmeyers. I've adapted several key parts of their codebase to jumpstart the development of this plugin.
This plugin allows Obsidian snippet, theme, and plugin CSS files to define configurable options, offering users a central settings pane to tweak these variables. It supports toggling HTML body classes, numeric sliders, text inputs, color pickers, and more.
[!CAUTION] Do not enable Style Manager and Style Settings at the same time. Both plugins rely on the exact same
/* @settingsconfiguration system. If run simultaneously, they will compete to manage your CSS variables, which can lead to layout conflicts. To ensure a stable experience, please disable the Style Settings plugin before using Style Manager.
@metadata)
@settings)
This is the recommended method to receive updates directly.
Use this method if you prefer to install files directly without third-party tools.
main.jsmanifest.jsonstyles.css.obsidian/plugins/ (note that this folder is hidden by default on some operating systems).obsidian-style-manager.This is the easiest way to install the plugin.
If you are switching from the Style Settings plugin, you can migrate your existing configurations into Style Manager:
This will import your current Style Settings configurations as preset.
Managing your vault's look across multiple devices (such as a large monitor and a mobile phone) can introduce layout conflicts. Style Manager resolves this by offering two storage modes to control how your styles are synced.
Best for: Maintaining a consistent global styles across all devices in shared vault.
When you modify styles in Shared Mode, the configurations are synced across your vault.
data.json): First, it records your configurations in data.json. Think of this as the plugin's Master Ledger. It’s a private notebook where Style Manager keeps a detailed record of every preference you've set.appearance.json): The plugin writes the values directly to Obsidian's default config file, appearance.json. Your sync service (Obsidian Sync, iCloud, Git, etc.) recognizes this change and distributes it to your other devices.Best for: Customizing layouts for specific screens (e.g., larger fonts on mobile) or local style testing.
Isolate Mode is your "Creative Sandbox." Isolate Mode creates a private local environment that never writes to the shared appearance.json file, protecting other devices from unexpected style changes.
data.json.data.json, other devices running in Isolate Mode will ignore them and run their own isolated configurations. When you're on your phone, the plugin looks into data.json, finds the locker labeled "Phone," and loads your Isolate Locker from there. When you move to your desktop, it finds the locker labeled "Desktop" and loads a completely different set of styles.Style Manager interface is structured into six functional tabs.
The primary workspace for Styles customization.
@id <id>, @type <known-type>, @title <text>, and @heading <text> prefixes), and a "Collapse/Expand All" toggle to manage large sets of style settings.@settings blocks, allowing for quick debugging of CSS configurations. Errors are persistently tracked across theme and snippet changes. Clicking an error's line number or setting ID will instantly open the CSS editor and jump directly to the exact location of the issue.
Manage Obsidian's native CSS snippets from a centralized list.
@name, @description, @license – Match against snippet metadata.@settings <true/false> – Filter for snippets that do or do not support style settings.
Tools for switching, and building custom themes.
@author <name> – Find themes made by a specific creator. (e.g. @author emarpiee)@name <name> – Find themes matching a specific title. (e.g. @name Retroma)@settings <true/false> – Filter for themes that do or do not support style settings..obsidian/themes directory.
Capture, restore, and schedule snapshots of your entire workspace design.
@theme, @snippet, and @name to match preset contents.@light and @dark to filter by appearance mode.After customizing your vault's look in Style Manager, go to the Presets tab (or select Create preset… from the More Actions menu in the top toolbar).
Click Create preset.
Select which elements to include in your snapshot (such as Active theme, Appearance, Accent color, Snippets, or specific theme/snippet configurations). Tip: Use the Select modified button to automatically check only the settings you have explicitly changed.
Save the configuration using one of two options:
Save preset: Click this button and enter a Name to store your custom design state as a brand new preset.
Save to existing preset: Click this button to select an existing preset and merge your current selections into it.
[!NOTE] Conflict Resolution during Merge: If you choose to save to an existing preset, any conflicting keys (matching settings) will be overwritten with your current values. All other non-conflicting keys stored in the target preset are safely preserved.
Orphaned Settings Warning: If the configurations you are saving contain style setting keys that are no longer active in your current stylesheets (e.g. leftovers from an old theme or inactive preset), a warning dialog listing these orphaned keys will appear:
[!TIP] Single-Purpose Presets: When creating a preset, try to give it a single clear purpose. For example, have one preset dedicated to an entire theme, and separate presets for specific active snippets or plugins, rather than mixing them all into one snapshot.
.json or .zip bundle from your device..json or .zip files already stored within your Obsidian vault.
Manage device-specific profiles.
Plugin configuration, safety tools, and developer options. Includes a search filter to quickly find specific settings.
data.json.bak snapshot..json, .md, .txt), and timestamp layouts.
The persistent toolbar header provides system actions across all tabs:
Create preset… or Import preset…. Completing these actions automatically switches the view to the Presets tab.Create snippet… generates a new CSS file. Based on your preferences, it opens in the internal editor or your system's default text editor, then switches the view to the Snippets tab.Reset styles opens the Reset Settings Modal, allowing you to select specific style sections to clear and return to their default theme values.The Style Manager displays a system of badges to provide quick visual cues and access to configuration details. These are categorized into two types: interactive badges, which trigger actions or open menus when clicked, and info badges, which serve as read-only indicators for status and metadata.
| Badge | Type | Description | |
|---|---|---|---|
| A | style settings count |
interactive | Number of settings configured in a style, preset, or device locker. In Styles tab, click to show per section configurations. |
| B | style status |
info | Shows if the specific style settings is currently active |
| C | style source |
interactive | Indicates where the style originates (Plugin, Theme, or Snippet). Click to open the CSS editor as a modal, or open it in a tab from the modal. |
| D | active theme |
interactive | Displays the name of the currently active Obsidian theme. Click to copy the preset or device locker current accent color. |
| E | active snippets |
info | Current count of active CSS snippets |
| F | active appearance |
info | Indicates if a device locker or preset is in Light or Dark mode |
| G | locker |
info | Distinguishes the local device locker from other device lockers (in Isolate tab) |
| H | duplicate warning |
info | Alerts you when a Style ID is duplicated across different sources. |
| I | mode |
info | Shows which mode that component is currently active |
| J | schedule |
interactive | Indicates if a preset is currently managed by a date & time-based schedule. Click to edit the preset's active schedule. |
Style Manager features an integrated CodeMirror 6 editor that works in both a modal and a dedicated workspace tab. Use it to edit styles, snippets, and theme files without leaving Obsidian.
Mod-s (Ctrl/Cmd+S) support for quick saving.@settings blocks to match your preferred coding style.For a long time, managing style settings manually in CSS files could cause errors:
/* @settings blocks, leading to repetitive work and frequent typos.-) and several lines of properties exactly in the right place, risking the accidental deletion of existing settings.Style Manager eliminates these pain points by automating the structure and placement of these blocks, allowing authors to focus on the design rather than the syntax.
+---------------------------------------------------------+
| Top of CSS File |
| /* @metadata |
| (Metadata block is always injected here) */ |
+---------------------------------------------------------+
| |
| Your Custom CSS |
| |
+---------------------------------------------------------+
| Bottom of CSS File |
| /* @settings |
| (Settings container block is injected here) */ |
+---------------------------------------------------------+
| Block | Cursor Location | Resulting Position |
|---|---|---|
@metadata |
Anywhere | Top of file |
@settings |
Anywhere | Bottom of file |
| Setting Component | Left of/on the dash (-) |
Above the current field |
| Setting Component | Inside setting properties | Below the current field |
| Setting Component | Outside any block (but one exists) | Above the first field of the next block (or end of last block) |
| Setting Component | No @settings block exists |
Exactly at the cursor |
@metadata)The @metadata block allows developers to embed authorship, license, and versioning data directly inside CSS files as a standard comment block. The Style Manager parser reads this block and displays in the Snippets tab.
+) icon (Add block button).Type the following comment structure at the top of your .css file:
/* @metadata
description: This snippet adds a glowing effect to the active line in the editor.
author: emarpiee
version: 1.2.0
authorUrl: https://github.com/emarpiee
license: MIT
*/
| Field | Description | Example |
|---|---|---|
description |
A brief explanation of what the snippet does. | description: Customizes the sidebar width |
author |
The name of the creator. | author: emarpiee |
version |
The current version of the snippet. | version: 1.0.0 |
authorUrl |
A link to the author's profile or website. | authorUrl: https://github.com/emarpiee |
license |
The license under which the snippet is shared. | license: MIT |
To show these in your list views, enable "Display metadata (Author, Version, etc.) for CSS snippets…" in the Preferences Tab.
@settings)Style Manager uses a specific system to turn CSS class and variables into user-configurable settings in the Styles tab. This is done using special comment blocks. To expose configurable settings, wrap YAML configuration blocks inside CSS comments starting with /* @settings.
Style Manager scans for these comments in all CSS loaded by Obsidian from the snippets, themes, and plugins directories under your vault's configuration directory (%yourVault%/.obsidian/).
A Setting Component is a single configurable item within an @settings block. It defines one specific component type (like a color, a number, or a toggle) that a user can change.
Each component starts with a dash (-) and contains key such as an id, title, type, and a default value.
Example of a Setting Component:
/* @settings
name: My Theme
id: my-theme
settings:
-
id: accent-color
title: Accent Color
description: Changes the main accent color of the theme
type: variable-color
default: '#7b2cbf'
*/
In this example, everything from the dash (-) to the end of the default value is one Setting Component.
Add the following template block inside a snippet or theme .css file:
/* @settings
name: Custom Sidebar
id: custom-sidebar-id
settings:
-
id: custom-sidebar-title
title: Sidebar Settings
type: heading
level: 3
-
id: sidebar-bg-color
title: Background Color
type: variable-color
format: hex
default: '#1a1a1a'
-
id: sidebar-width
title: Sidebar Width (px)
type: variable-number
default: 250
format: px
*/
Remember that every setting component is separated by a dash (-) and must include a type. Here is a quick reference for all available setting component types:
| Type | Description |
|---|---|
heading |
Organizes settings into collapsible nested sections. |
info-text |
Displays arbitrary informational text or markdown to users. |
class-toggle |
A switch to toggle classes on and off the body element. |
class-select |
A dropdown menu of predefined options to add specific classes to the body. |
variable-text |
A standard text-based CSS variable. |
variable-number |
A numeric CSS variable (with optional unit formatting). |
variable-number-slider |
A numeric CSS variable represented and adjusted via a visual slider. |
variable-select |
A dropdown menu of predefined options for a text-based CSS variable. |
variable-color |
A color CSS variable with a corresponding interactive color picker. |
variable-themed-color |
Generates two color pickers for light and dark mode. |
color-gradient |
Outputs a fixed number of colors along a gradient between two existing variables. |
All settings definitions (regardless of type) must include the following core parameters:
id: A unique identifier for the setting.title: The label displayed in the user interface.type: The layout component style.description (optional): Informational text displayed next to the setting.If you want to allow the plugin to show the setting but not override the theme's native default variable, you can bypass variable generation by setting the default value to '#'.
[!WARNING] Because settings are parsed as YAML, a bare
#character will be treated as a comment. You must wrap the#in quotes to bypass generation properly without throwing a warning.
variable-text, variable-number, variable-number-slider, and variable-select), set default: '#'.variable-color and variable-themed-color), use '#' (e.g., default: '#' or default-light: '#'). -
id: my-setting
title: My Setting
type: variable-number
default: '#'
-
id: my-color
title: My Color
type: variable-color
format: hex
default: '#'
headingCreates collapsible sections to organize variables. Ensure that you follow the proper level of headings (hierarchical order) for sticky headings to work properly in Styles tab.
level (number from 1 to 6).collapsed (boolean: true/false). -
id: structure-heading
title: Layout Structure
type: heading
level: 1
collapsed: true
info-textDisplays markdown-styled text blocks inside your settings view.
markdown: true. -
id: format-notice
title: Readme Instructions
description: "Refer to the *online guide* for configuration rules."
type: info-text
markdown: true
class-toggleToggles a CSS class directly on the HTML <body> element. The id of the setting will be used as the class name.
default (boolean), addCommand (boolean - adds a hotkey command to the command palette). -
id: hide-sidebar-titles
title: Hide Sidebar Headers
description: Hides structural labels in the left sidebar
type: class-toggle
default: false
addCommand: true
class-selectCreates a dropdown menu that applies a selected CSS class to the HTML <body> element. The id of the setting will be used as the variable name.
options list, allowEmpty (boolean).default value (required if allowEmpty is false). -
id: sidebar-font-theme
title: Navigation Typography
type: class-select
allowEmpty: false
default: serif-style
options:
- serif-style
- sans-style
- mono-style
Note: Options can also be structured as label / value pairs:
options:
-
label: Classic Serif
value: serif-style
-
label: Modern Sans
value: sans-style
variable-textSets a text-based CSS variable. The id of the setting will be used as the variable name.
default.quotes (boolean - wraps output in single quotes if set to true). -
id: header-font-family
title: Main Header Font
type: variable-text
default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif
quotes: false
variable-numberSets a numeric value. The id of the setting will be used as the variable name.
default.format (appends a unit string, e.g., px, em, rem). -
id: active-border-width
title: Border Width
type: variable-number
default: 2
format: px
variable-number-sliderCreates a sliding adjustment input for numeric values. The id of the setting will be used as the variable name.
default, min, max, step.min: The minimum possible value of the slidermax: The maximum possible value of the sliderstep: The size of each "tick" of the slider. For example, a step of 100 will only allow the slider to move in increments of 100.format (appends a unit string). -
id: content-margin-size
title: Border Gap Width
type: variable-number-slider
default: 16
min: 0
max: 64
step: 2
format: px
variable-selectCreates a dropdown selection to assign values to a CSS variable. The id of the setting will be used as the variable name.
default, options list. -
id: code-font-size-tier
title: Editor Font Style
type: variable-select
default: Fira Code
options:
- Fira Code
- Source Code Pro
- Courier New
variable-colorCreates an interactive color picker interface. The id of the setting will be used as the variable name.
default (hex color values must be wrapped in quote, format (e.g., hex, rgb, hsl, oklch).opacity (boolean - enables transparency), alt-format (outputs alternative values to helper variable targets). -
id: global-accent-color
title: System Accent
type: variable-color
opacity: true
format: hex
alt-format:
-
id: global-accent-color-rgb
format: rgb
default: '#007AFF'
variable-themed-colorGenerates dual color pickers for light and dark appearance profiles. The id of the setting will be used as the variable name.
format (e.g., hex, rgb, hsl, oklch), default-light, default-dark (hex color values must be wrapped in quotes).opacity. -
id: primary-text-color
title: Primary Text
type: variable-themed-color
format: hex
default-light: '#111111'
default-dark: '#f5f5f5'
color-gradientCalculates intermediate color steps along a gradient between two defined CSS color variables.
from, to, step, format.pad (pads number variables with leading zeros).Parameters:
from: The starting color, or color that will be at step 0to: The ending color, or color that will be at step 100step: The increment at which to output a CSS variable. For example, setting step to 10 will output --var-0, --var-10, --var-20, etc…format: Can be one of: hsl, rgb, hex, or oklch;pad: When set, the number section of the variable will be padded with 0's until it contains this number of digits. For example, setting pad to 3 and step to 10 will output --var-000, --var-010, --var-020 -
id: color-base
type: color-gradient
from: color-base-00
to: color-base-100
step: 5
pad: 2
format: hex
Outputs:
--color-base-00,--color-base-05,--color-base-10, etc.
The following color format options are available:
hex--accent: #007AFF;
/* With opacity: true */
--accent: #007AFFFF;
rgb--accent: rgb(0, 122, 255);
/* With opacity: true */
--accent: rgba(0, 122, 255, 1);
rgb-values--accent: 0, 122, 255;
/* With opacity: true */
--accent: 0, 122, 255, 1;
rgb-split--accent-r: 0;
--accent-g: 122;
--accent-b: 255;
/* With opacity: true */
--accent-a: 1;
hsl--accent: hsl(211, 100%, 50%);
/* With opacity: true */
--accent: hsla(211, 100%, 50%, 1);
hsl-values--accent: 211, 100%, 50%;
/* With opacity: true */
--accent: 211, 100%, 50%, 1;
hsl-split--accent-h: 211;
--accent-s: 100%;
--accent-l: 50%;
/* With opacity: true */
--accent-a: 1;
hsl-split-decimal--accent-h: 211;
--accent-s: 1;
--accent-l: 0.5;
/* With opacity: true */
--accent-a: 1;
oklch--accent: oklch(70% 0.1 150);
/* With opacity: true */
--accent: oklch(70% 0.1 150 / 0.5);
You can provide translated titles and descriptions for every language Obsidian natively supports. Simply append the appropriate language postfix to your YAML keys:
-
id: side-panel-toggle
title: Toggle Layout
title.de: Layout Umschalten
title.ko: 레이아웃 전환
description: Toggles sidebar panel
description.de: Schaltet das Seitenpanel um
description.ko: 사이드바 패널을 토글합니다.
type: class-toggle
en (English)zh (Simplified Chinese)zh-TW (Traditional Chinese)ru (Russian)ko (Korean)it (Italian)id (Bahasa Indonesia)ro (Romanian)pt-BR (Brazilian Portuguese)cz (Czech)de (German)es (Spanish)fr (French)no (Norwegian)pl (Polish)pt (Portuguese)ja (Japanese)da (Danish)uk (Ukrainian)sq (Albanian)tr (Turkish - partial)hi (Hindi - partial)nl (Dutch - partial)ar (Arabic - partial)This section provides a comprehensive mapping of the storage structure used by the plugin.
These keys are the "Master Ledger" for settings that are mirrored in Obsidian's native appearance.json to ensure they sync across devices via Obsidian Sync or other sync services.
data.json key |
Description | appearance.json mapping |
|---|---|---|
__style_manager_theme |
The active theme name | cssTheme |
__style_manager_appearance |
Appearance mode (light, dark, or system) |
theme |
__style_manager_accent_color |
Custom accent color (hex code) | accentColor |
__style_manager_snippets |
List of currently enabled CSS snippet IDs | enabledCssSnippets |
These keys store the internal preferences that control the Style Manager's UI, behavior, and utility settings. They are not mirrored in Obsidian's native config.
data.json key |
Description |
|---|---|
__style_manager_show_status_bar |
Toggles visibility of the Style Manager icon in status bar |
__style_manager_show_tab_badge |
Toggles visibility of active count badges on the Styles & Snippets tabs |
__style_manager_panel_open_location |
Workspace placement for the panel (left-sidebar/right-sidebar/main-tab) |
__style_manager_show_snippet_metadata |
Toggles display of metadata for CSS snippets |
__style_manager_show_shared_notifications |
Toggles notifications when shared settings change |
__style_manager_show_preset_notifications |
Toggles notifications when a preset is applied |
__style_manager_show_isolate_notifications |
Toggles notifications for Isolate Mode changes |
__style_manager_show_snippet_notifications |
Toggles snippet-related notifications |
__style_manager_show_utility_notifications |
Toggles general plugin utility notifications |
__style_manager_open_modal_on_create |
Opens a manifest modal when creating a new snippet |
__style_manager_separate_bulk_presets |
Controls behavior for bulk preset operations |
__style_manager_editor_tab_size |
Tab indentation size for the CSS editor |
__style_manager_enable_console_logging |
Enables verbose debugging logs in the console |
__style_manager_backup_path |
Custom directory for plugin backups |
__style_manager_backup_date_format |
Date format used for backup filenames |
__style_manager_tool_freeze_delay |
Delay before the UI freezes during (freeze tool) |
__style_manager_tool_box_outline_color |
Custom color for the box outline tool |
__style_manager_sticky_heading |
Enables sticky headers in styles tab |
__style_manager_export_path |
Custom directory for exported preset |
__style_manager_export_extension |
File extension used for exported preset |
__style_manager_export_date_format |
Date format used in exported preset filenames |
__style_manager_created_date_format |
Timestamp format for "Created" dates in presets tab |
__style_manager_skip_delete_confirm |
Bypasses confirmation when deleting a preset |
__style_manager_skip_export_confirm |
Bypasses confirmation when exporting a preset |
__style_manager_skip_import_confirm |
Bypasses confirmation when importing a preset |
__style_manager_always_shared_presets |
Forces presets tab to always show shared preset list |
__style_manager_open_in_default_app |
Opens CSS files in the OS default text editor |
__style_manager_preset_apply_action |
Default action (ask/merge/overwrite) for single preset application |
__style_manager_bulk_preset_apply_action |
Default action for bulk preset application |
__style_manager_schedule_apply_action |
Default action for scheduled preset application |
__style_manager_settings_block_dash_spaces |
CSS formatting: spaces around dashes in @settings block |
__style_manager_settings_block_component_spaces |
CSS formatting: spaces before setting components in @settings block |
__style_manager_show_parse_logs_icon |
Toggles visibility of the CSS parse log icon in styles tab |
These keys store complex data structures and metadata used for the plugin's advanced features (Isolate Mode, Scheduling, and Presets).
data.json key |
Description |
|---|---|
_manager_presets |
Array of Preset objects containing saved style configurations |
_manager_schedules |
Array of PresetSchedule objects for automated style switching |
__devices |
Map of Device IDs isolateSettings (the "Locker" system) |
__shared_version |
Version counter used to detect and resolve shared data conflicts |
Keys containing @@ are used to store user-defined CSS style settings. These are dynamically generated to link a specific setting to its parent section.
[Section ID]@@[Setting ID] (and optionally @@light or @@dark for themed colors)
theme-settings@@font-size refers to the font-size setting within the theme-settings section.theme-settings@@accent-color@@light and theme-settings@@accent-color@@dark allow separate values for Light and Dark modes.StyleGenerator to quickly identify and apply CSS variables to the document.The Style Manager includes a suite of built-in tools designed to streamline the process of theme development and UI debugging within Obsidian. These tools provide developers with quick access to common debugging tasks, accessibility checks, and UI testing utilities, all of which are accessible via the Obsidian command palette.
Note: Tools marked with a
(+)are adapted from the obsidian-theme-design-utilities project.
| Tool | Type | Description |
|---|---|---|
| Color Contrast Checker | Accessibility | Opens a contrast checker modal to ensure color accessibility WCAG standards. Can be expanded to a full tab. |
Lorem Ipsum |
Content Generation | Opens a lorem ipsum generator modal for layout and content testing. Can be expanded to a full tab. |
| Copy Accent Color | Utility | Quickly copies the vault's current accent color to the clipboard. |
| CSS Compatibility (+) | Information | Displays the current Chrome, Node, and Electron versions for CSS feature support verification. |
| Box Outline (+) | UI Debugger | Toggles a global outline on all elements to help visualize the box model. |
| Freeze Obsidian (+) | Debugger | Triggers a debugger statement after a specified delay to freeze the application state. |
| Garbled Text (+) | UI Testing | Toggles a garbled text on non-hovered text. |
| Mobile Emulation (+) | UI Testing | Toggles Obsidian's built-in mobile emulation mode to test responsive designs. |
| Test Notice (+) | Testing | Displays a persistent test notice to verify notification behavior and styling. |
| Toggle DevTools (+) | Debugger | Quickly opens or closes the Electron developer tools. |
Style Manager registers several commands in the Obsidian command palette for quick access to various features and utilities.
| Command | Description |
|---|---|
| Apply preset to other device (isolate) | Pushes a preset specifically to a remote device's isolated locker. |
| Apply preset to shared locker | Applies a preset globally across all synchronized devices. |
| Apply preset to this device (isolate) | Applies a preset to only your current device's isolated locker. |
| Change CSS box outline color | Customizes the color of the CSS box outlines tool. |
| Change freeze Obsidian delay | Adjusts the countdown delay before freezing Obsidian. |
| Color contrast checker | Opens the accessibility contrast checker tool. |
| Copy current accent color | Quickly copies the current accent color hex to the clipboard. |
| Freeze Obsidian | Pauses the application state after a set delay for DOM inspection. |
| Import preset | Opens a modal to import presets from files, vaults, or raw JSON data. |
| Lorem ipsum generator | Generates dummy text for layout testing. |
| Obsidian tech stack versions | Displays versions of underlying technologies (Chrome, Node, Electron). |
| Reset current styles | Clears modified settings and returns them to their default values. |
| Save current styles as preset | Saves your currently active layout and styles into a new preset. |
| Set schedule for a preset | Sets up an automated schedule for a chosen preset. |
| Show panel | Opens the main Style Manager view in a workspace leaf. |
| Show readme | Opens the plugin documentation modal. |
| Show test notice | Displays a sample notification for testing purposes. |
| Toggle [Setting Name] | Any class-toggle setting with addCommand: true will create a dynamic command to toggle that specific style setting on/off. |
| Toggle CSS box outlines for debugging | Draws outlines around HTML elements for visualizing the box model. |
| Toggle devtools | Opens or closes the Obsidian developer tools panel. |
| Toggle garbled text | Randomizes text characters for layout testing. |
| Toggle isolate mode | Toggles whether your current device uses isolated or shared settings. |
| Toggle mobile emulation | Switches Obsidian into a simulated mobile view. |
| Toggle snippet | Opens a searchable list of all CSS snippets; selecting one instantly enables or disables it. |
| View active schedules | Opens a modal to manage and view active preset schedules. |
I want to be open about my workflow for this project. I personally directed and designed every aspect of the UI and UX. To give myself more time to focus on that creative side, I used Gemma to help speed up the technical groundwork, specifically implementing complex logic, catching syntax errors, and generating my commit messages.
Donations are greatly appreciated and will be used to fund my sanity, and my cats 😼 expensive taste.