docs.json:12345{ "colors": { "primary": "#6366f1" } }
1234567{ "colors": { "primary": "#6366f1", "light": "#818cf8", "dark": "#4f46e5" } }
colors.dark is used in light mode, and colors.light is used in dark mode.123456{ "appearance": { "default": "system", "strict": false } }
| Value | Behavior |
"system" | Follow the user's OS setting (default) |
"light" | Force light mode |
"dark" | Force dark mode |
strict: true | Hide the mode toggle |
1234567891011121314151617@reference "tailwindcss"; @custom-variant dark (&:where(.dark, .dark *)); :root { --background: #fafafa; --foreground: #0a0a0a; --primary: #6366f1; --muted-foreground: #737373; --border: #e5e5e5; @variant dark { --background: #0a0a0a; --foreground: #fafafa; --primary: #818cf8; --border: #262626; } }
@variant dark instead of Tailwind's dark: for dark mode overrides. This keeps all theme values in CSS variables that adapt automatically. The @custom-variant dark line makes those overrides follow Holocron's persisted .dark class instead of the browser system media query.| Token | Purpose |
--background / --foreground | Page surface and default text |
--card / --card-foreground | Elevated surfaces |
--primary / --primary-foreground | Brand color and text on it |
--muted / --muted-foreground | Muted backgrounds and placeholder text |
--accent / --accent-foreground | Hover/active highlights |
--border | Default border color |
--border-subtle | Lighter border for subtle dividers |
--sidebar-foreground / --sidebar-primary | Sidebar text and active item |
| Token | Default | Purpose |
--type-body-size | 14px | Base body text size |
--type-heading-1-size | 16px | H1 heading size |
--type-heading-2-size | 16px | H2 heading size |
--type-heading-3-size | 16px | H3 heading size |
--type-small-size | 13px | Small text |
--type-nav-group-size | 12px | Sidebar group labels |
--weight-regular | 400 | Normal text weight |
--weight-prose | 475 | Body prose weight |
--weight-heading | 560 | Heading weight |
| Token | Default | Purpose |
--code-block-background | transparent | Background color |
--code-block-border | none | Border (e.g. 1px solid var(--border-subtle)) |
--code-block-shadow | none | Box shadow around the frame |
--code-block-radius | 0px | Corner radius |
--code-block-padding-x | 0px | Horizontal padding |
--code-block-padding-y | 0.5rem | Vertical padding |
1234567:root { --code-block-background: var(--muted); --code-block-border: 1px solid var(--border-subtle); --code-block-radius: var(--radius-md); --code-block-padding-x: 8px; --code-block-padding-y: 12px; }
| Token | Default | Purpose |
--blockquote-border-width | 3px | Left border thickness |
--blockquote-border-color | var(--border) | Left border color |
--blockquote-font-weight | inherit | Font weight (e.g. 500 for bolder quotes) |
| Token | Default | Purpose |
--card-padding | 16px | Inner padding |
--card-border | 1px solid var(--border-subtle) | Border around the card frame |
--card-shadow | none | Box shadow around the card frame |
| Token | Default | Purpose |
--table-radius | 0px | Corner radius on markdown tables |
| Token | Default | Purpose |
--sidebar-group-margin-top | 12px | Top margin above group labels |
--sidebar-link-radius | 0px | Border radius on nav links |
--sidebar-indent | 12px | Indentation per nesting level |
--sidebar-active-background | transparent | Background pill behind the deepest active item (TOC heading when expanded, else page link) |
--sidebar-hover-background | var(--accent) | Hover background on sidebar links, group toggles, and TOC headings |
--search-input-radius | var(--radius-xl) | Corner radius of the sidebar search input |
| Token | Default | Purpose |
--prose-gap | 20px | Between elements inside a section |
--section-gap | 48px | Between heading-delimited sections |
--list-gap | 8px | Between list items |
--blue, --green, --yellow, --orange, --red, --purple. These adapt to dark mode automatically.