Design System
Style guide, component reference, and integration docs for the dhanur.me design system
Color Palette
Semantic colors adapt to the current theme. Toggle dark/light to see them change.
Base colors
Typography
Heading 1 — text-4xl
Heading 2 — text-3xl
Heading 3 — text-2xl
Heading 4 — text-xl
Heading 5 — text-lg
Heading 6 — text-base
Body text — default paragraph. The quick brown fox jumps over the lazy dog.
Small text — text-sm with 60% opacity.
Inline code: const x = 42;
Buttons
Variants
Sizes
Shapes
States
Cards
Default Card
Card with bg-base-200 background.
Bordered Card
Card with border and no background fill.
Compact Card
Uses card-compact for tighter padding.
Forms
Badges & Alerts
Badges
Alerts
Tabs
Collapse / Accordion
Zola (static site generator) + Tailwind CSS v4 + DaisyUI v5. No Node.js runtime needed.
A cookie scoped to .dhanur.me stores the theme preference. All subdomains read the same cookie.
No. The safelist includes all common Tailwind utilities and DaisyUI components. Only unusual arbitrary values need a recompile.
Tooltips
Dropdowns
Progress & Loading
Progress bars
Loading indicators
Keyboard
Steps
- Install
- Configure
- Build
- Deploy
Skeleton
Swap
Theme System
The theme uses a cookie-based system scoped to .dhanur.me, so all subdomains share the same dark/light preference.
| Attribute | Dark | Light |
|---|---|---|
data-theme | night | lofi |
data-brightness | darker (default) / normal / lighter | normal (default) / darker / lighter |
colorScheme | dark | light |
Brightness variants
The darker brightness gives pure black (#000000) backgrounds. lighter gives a softer dark mode.
Reading/setting theme in JS
// Read current theme from cookie
;
// Set theme (if on dhanur.me or subdomain)
"light"; // or "dark"
// Or manually
document.cookie =
"theme=dark; path=/; domain=.dhanur.me; max-age=31536000; SameSite=Lax";
Integration Guide
Minimal setup (just the script)
This auto-injects main.css + font-awesome.min.css, fetches the layout shell, wraps your page content in the drawer, and handles theming.
Script tag attributes
| Attribute | Default | Description |
|---|---|---|
data-base-url | Auto-detect | Override the base URL for fetching layout + CSS |
data-no-css | (absent) | Skip CSS auto-injection if you already include them |
SiteNavConfig API
Set window.SiteNavConfig before the script loads to configure navigation, branding, and chrome visibility.
window.SiteNavConfig =;
Config options
| Option | Type | Default | Description |
|---|---|---|---|
mode | "full" | "navbar" | "full" | Full drawer layout or navbar-only (for SPAs) |
nav | Array | Main site nav | Header navigation items |
sidebarNav | Array | Falls back to nav | Sidebar items with optional nested children |
activePath | string | location.pathname | Path to highlight as active in sidebar |
logo | { href, html } | Main site logo | Override logo link and content |
favicon | string | Main site favicon | Path to custom favicon |
badge | { text, class } | None | Badge shown next to logo (e.g. "BETA", "DOCS") |
showSearch | boolean | false | Show search bar (requires main site search index) |
showAppsGrid | boolean | true | Show the apps grid dropdown |
showThemeToggle | boolean | true | Show the theme toggle button |
Nav item shapes
| Property | Type | Description |
|---|---|---|
name | string | Display text |
url | string | Link target |
icon | string? | FontAwesome class, e.g. "fa-solid fa-book" |
children | NavItem[]? | Nested items (sidebar only, creates collapsible sections) |
type | "dropdown"? | Header-only dropdown menu |
members | NavItem[]? | Dropdown items (when type: "dropdown") |
Example Configurations
Subdomain with custom nav + badge
React SPA (navbar only)
<!-- In public/index.html -->
Documentation site with nested sidebar
No config (uses dhanur.me's nav)
<!-- Simplest possible usage — zero config -->
Notes
- Logo defaults to
~/dhanurlinking to dhanur.me — override withlogo: { href, html } - Favicon defaults to main site — override with
favicon: "/path/to/icon.png" - Theme cookie is shared across all
*.dhanur.mesubdomains - CSS (compiled Tailwind + DaisyUI) is auto-injected unless
data-no-cssis set on the script tag - Search is off by default on subdomains (needs main site search index)
- The layout shell is fetched from
/navbar/on the main site — any template changes propagate automatically - Font Awesome 6 icons are available via the auto-injected CSS

