# Handoff: Nibiru Docs Design System ## Overview This handoff covers the **Nibiru documentation site** redesign — a cosmic-themed, dark-primary design system for the framework's docs portal. It includes a complete component library (navigation, code blocks, callouts, tables, API references, search modal, 404, etc.) plus a working full-page preview of the "What is Nibiru?" article styled with the new system. The metaphor carried throughout: **Nibiru is a star map**. The framework's MMVC architecture (Model · Module · View · Controller) is a constellation, and the docs adopt the same atmospheric vocabulary — deep cosmic plum backgrounds, magenta/cyan/amber accents echoing nebula colors, terminal-aesthetic code blocks, and subtle galaxy textures behind content. A companion start page (`index-v2.html`) is included for context — it's the marketing site this docs design extends. ## About the Design Files The files in this bundle are **design references created in HTML** — interactive prototypes showing intended look, behavior, and layout. They are **not production code to copy directly**. Your task is to **recreate these designs in the Nibiru docs site's actual environment** (likely a static-site generator like Nextra, Mintlify, Docusaurus, or VitePress, given the original screenshot's nav structure), using whatever templating, theming, and component patterns that environment provides. The HTML/JSX in this bundle uses React + Babel inline as a fast prototyping medium — your real implementation should use your stack's idioms. If no docs framework has been chosen yet, **Nextra (with the docs theme) or Mintlify** are good fits — both support exactly this kind of three-column layout (sidebar + content + on-this-page TOC) with custom theming hooks. ## Fidelity **High-fidelity.** All colors, typography, spacing, border radii, shadows, and component states are final. Treat the hex values, font sizes, and CSS tokens in `tokens.css` as the source of truth. The single open question is how dark/light theme switching is wired — the prototype uses a `.theme-light` class on a wrapper element, but your stack may prefer `data-theme` attributes or CSS `color-scheme`. ## Screens / Views The design canvas in `source/docs-system.html` shows every component grouped into reviewable sections. The full-page preview is the most important reference — it shows how everything composes. ### 1. Full Page Preview ("What is Nibiru?") **Purpose**: Recreate the documentation article from the original screenshot in the new design system. **Layout**: Three-column grid, full viewport height. - **Top nav**: 60px tall, sticky, `backdrop-filter: blur(16px)`, semi-transparent background. - **Main grid**: `grid-template-columns: 280px 1fr 240px` (sidebar / content / TOC). - **Content column**: `max-width: 760px`, centered within its track, padding `32px 48px`. **Components used**: TopNav · Sidebar · PageHeader · Prose body · DocTable · Callout · Pagination · RightTOC ### 2. Top Nav **Purpose**: Brand mark, search, GitHub link, theme toggle, locale picker. **Layout**: `grid-template-columns: 240px 1fr auto`, gap 32px, padding `0 24px`, height 60px. **Components**: - **Brand**: Lotus PNG (36px tall) + "Nibiru" (17px / 600) + "Create, Invent, Impress" tagline (10px muted, lowercase). - **Search button**: Pill-shaped, 420px max-width, centered. `background: var(--space-2)`, `border: 1px solid var(--line)`, contains search icon + "Search" placeholder + `⌘ K` kbd badge. Hover: brighten background. - **Right cluster**: GitHub icon (36×36), theme toggle (sun/moon), locale dropdown ("EN ▾"). All 36×36 with hover background `var(--space-2)`. ### 3. Sidebar **Purpose**: Sectioned navigation with collapsible groups and active-page indication. **Layout**: 280px wide, padding `24px 12px 24px 24px`, `border-right: 1px solid var(--line)`, faint background tint `rgba(11,4,16,0.4)`. **Sections**: "Get Started" / "The Framework" / "CLI" / "Advanced" — each a collapsible group with a chevron that rotates 0deg/-90deg. **Section heading**: 11px JetBrains Mono, 0.12em letter-spacing, uppercase, muted color. **Items**: 13.5px, padding `6px 10px`, border-radius 8px. Hover: background `var(--space-2)`. Active state has a magenta gradient background (`linear-gradient(90deg, rgba(184,107,255,0.18), rgba(184,107,255,0.04))`) and a 3px magenta indicator bar with a glow shadow on the left edge. **Badges**: `core` (magenta tint) and `new` (green tint), 9px JetBrains Mono uppercase. ### 4. Right TOC ("On this page") **Layout**: 240px wide, padding `24px 16px 24px 24px`. **Heading**: 11px JetBrains Mono uppercase muted. **List**: `border-left: 1px solid var(--line)`, items 13px with 12px padding-left. Active item: magenta text + magenta 2px left border (replacing the 1px line border at that position). **Sub-items (level 2)**: Indented 24px, 12.5px, more muted. **Footer**: "Edit this page" link with pencil icon. ### 5. Page Header **Layout**: `margin-bottom: 32px`, `padding-bottom: 24px`, `border-bottom: 1px solid var(--line)`. **Breadcrumbs**: 11px JetBrains Mono uppercase, separated by `/`. Last crumb is brighter. **Title**: 36px / 600 / -0.025em letter-spacing. **Summary**: 18px, color `var(--star-soft)`, max-width 60ch. **Last-updated meta**: 11px JetBrains Mono with a 6px green dot (with green glow shadow). ### 6. Body Prose **Base**: 16px / 1.7 line-height, color `var(--star-soft)`. **h2**: 28px / 600, with a 24px magenta gradient line above it (`width: 24px; height: 1px; background: linear-gradient(90deg, var(--nebula-mag), transparent)`). 40px top margin, 16px bottom margin. **h3**: 22px / 600. 32px top, 12px bottom. **em**: Restyled — color `var(--nebula-mag-2)`, NOT italic. **Inline code**: Monospace 0.86em, magenta-2 text on `var(--space-2)` with 1px line border, 4px radius, 1px 6px padding. **Blockquote**: 2px magenta left border, 16px left padding, magenta gradient fade background. **ul markers**: Magenta accent. ### 7. Code Block **Aesthetic**: Mission-Control terminal — `background: #0a0210`, 12px radius, magenta gradient overlay (4% opacity, 135deg from top-left). **Header**: `padding: 8px 14px`, `border-bottom: 1px solid rgba(244,238,219,0.06)`, `background: rgba(0,0,0,0.3)`. - Three colored dots (rose, amber, green at 50% alpha — like macOS traffic lights but recolored to nebula palette). - Filename in JetBrains Mono 11px. - Language badge (10px JetBrains Mono uppercase, magenta text on transparent background with magenta border). - Copy button on the right (changes to "Copied ✓" for 1.4s on click). **Body**: 13px JetBrains Mono, 1.7 line-height, padding `16px 20px`. **Syntax tokens** (CSS classes already defined): | Token | Class | Color | |---|---|---| | Keyword | `.tk-kw` | `#ff7ab8` rose | | Class/type | `.tk-cn` | `#ffb574` amber | | Function | `.tk-fn` | `#6ad9ff` cyan | | Variable | `.tk-var` | `#d8a8ff` magenta | | String | `.tk-str` | `#6ee7b0` green | | Number | `.tk-num` | `#ffb574` amber | | Namespace | `.tk-ns` | muted cream | | Comment | `.tk-cm` | very muted, italic | In production, hook these classes up to your syntax highlighter (Shiki, Prism, etc.) via a custom token theme. ### 8. Callouts (Note / Tip / Warning / Danger) **Layout**: Flex row with 14px gap, 14px×18px padding, 8px radius, 1px colored border, tinted background (~6% alpha of the accent), radial gradient overlay at 5% opacity from top-left. **Glyph**: 24×24 rounded with `filter: drop-shadow(0 0 6px currentColor)` for the cosmic glow. **Color mapping**: | Kind | Color | Hex | |---|---|---| | Note | Cyan | `#6ad9ff` | | Tip | Green | `#6ee7b0` | | Warning | Amber | `#ffb574` | | Danger | Rose | `#ff7ab8` | **Title**: 13px / 600 in the accent color. **Body**: 15px in `var(--star-soft)`. ### 9. Tables **Layout**: `border: 1px solid var(--line)`, 8px radius, `overflow: hidden`. **Header**: `background: var(--space-2)`, padding `10px 16px`, 11px JetBrains Mono uppercase muted. **Rows**: `padding: 12px 16px`, 13.5px, dashed bottom border. Hover: `background: rgba(184,107,255,0.04)`. **First column**: Brighter (`var(--star)`), 500 weight, `white-space: nowrap`. **Inline ``**: Magenta-2 on `var(--space-2)`. ### 10. Tabs **List**: `background: var(--space-2)`, padding 4px, 4px gap. **Trigger**: 6px×14px padding, 13px / 500. Inactive: muted text. Active: bright text on `var(--space-3)`, 1px magenta inset shadow at the top, sm shadow. **Use case**: "PHP / SQL / YAML" code variants, "macOS / Linux / Windows" install instructions. ### 11. API Block **Container**: `padding: 18px 20px`, 12px radius, gradient background (`linear-gradient(180deg, var(--space-2), transparent)`). **Signature**: 14px JetBrains Mono on `rgba(0,0,0,0.3)` with line border, 8px radius. Highlights function name (cyan), arg names (magenta-2), types (amber). Punctuation muted. **Section labels**: "Parameters" / "Returns" — 10px JetBrains Mono uppercase muted. **Param row**: - Name (13px JetBrains Mono magenta-2 / 500) - Type pill (11px JetBrains Mono amber on amber-tinted bg) - Optional `required` pill (rose tint) - Optional `default: ...` (muted, with brighter code value) - Description (13.5px star-soft) - Dashed bottom border between params ### 12. Cards / Feature Grid **Layout**: `grid-template-columns: repeat(2, 1fr)`, 14px gap. **Card**: `background: var(--space-2)`, 1px line border, 12px radius, 18px padding. Hover: border becomes magenta-tinted, lifts 2px, background brightens, top-right arrow icon fades in & slides into place. **Icon block**: 36×36 rounded square with a custom gradient background per card (mag→rose, cyan→mag, amber→rose, green→cyan). **Title**: 15px / 600. **Description**: 13px star-soft. ### 13. Search Modal (⌘K) **Container**: 580px wide, 16px radius, `background: var(--space-2)`, glow shadow (`0 0 60px rgba(184,107,255,0.1)`). **Sections**: - Input row (16px placeholder text, search icon, `esc` kbd badge). - "Recent" — pills (rounded, `var(--space-3)` background). - "Results" — list with kind badges (page=magenta, section=cyan, api=amber), title with breadcrumb prefix, excerpt, `→` indicator. Active result has a magenta left border and tinted bg. - Footer — kbd hints (`↑↓` navigate · `↵` open · `⌘K` close) + "Powered by Nibiru Search". **Highlight matches**: `` element gets `background: rgba(184,107,255,0.3)`, no padding. ### 14. Pagination **Layout**: Two-column grid, top border, 48px top margin. **Link card**: `background: var(--space-2)`, 1px border, 12px radius, padding `14px 18px`. Two-line content: small "Previous"/"Next" label (10px JetBrains Mono uppercase muted) + 14px / 500 page title. **Hover**: Border picks up magenta glow, bg brightens, chevron arrow translates ±3px. ### 15. Floating Action Button (Help) **Button**: 52px circle, gradient `linear-gradient(135deg, magenta, rose)`, 12px×32px shadow + inner white highlight. **Pulse ring**: `::after` pseudo-element animating from scale(1) → scale(1.4), opacity 0.7 → 0, infinite 2.4s. **Tooltip**: Pops out to the left on hover (kept in DOM for review). ### 16. 404 / "Off-orbit" **Layout**: Centered, 520px max-width. **Hero illustration**: SVG with two dashed orbital ellipses around a bright central star (radial gradient white→amber→magenta-fade), and a cyan probe drifting off-orbit at the top-right with a "PROBE-404" callout label and a dashed line connecting it back to the star. **Code label**: "404 / off-orbit" in 11px JetBrains Mono cyan. **Title**: "This page drifted away from Nibiru." 28px / 600. **Actions**: Primary button (magenta solid) + ghost button (line border). ### 17. Mobile Drawer **Container**: 320px wide, 640px tall in the prototype (in real life: full viewport with slide-in animation). **Structure**: Header (brand + close X) → search button → sidebar (full nav) → footer (Theme / EN / GitHub pills). ## Interactions & Behavior | Interaction | Trigger | Behavior | |---|---|---| | Theme toggle | Click sun/moon icon in nav | Add/remove `.theme-light` on root. Persist to `localStorage`. | | Sidebar collapse | Click section heading | Toggle children visibility, rotate chevron 90°. Animate `transform: rotate()` 200ms ease. | | Sidebar active | Current page | Apply `.active` class — magenta gradient bg + 3px magenta glowing left bar. | | TOC active | Scroll position | Use `IntersectionObserver` on `.prose h2[id]` elements. Highlight matching TOC item. | | Search open | `⌘K` / `Ctrl+K` / click search button | Open modal, focus input. `Esc` closes. ↑↓ navigates results, ↵ opens. | | Code copy | Click "Copy" button | Copy to clipboard, swap to "Copied ✓" for 1400ms, then revert. | | Tab switch | Click trigger | Update `aria-selected`, swap panel. No transition — instant. | | Card hover | Pointer enter | `transform: translateY(-2px)`, border magenta-tint, arrow fades in & translates. 200ms transitions. | | Pagination hover | Pointer enter | Chevron translates ±3px in the direction of travel, border magenta. | | FAB pulse | Always | 2.4s infinite ring animation. | ## State Management This is a docs site — most state is URL-driven (current page, anchor, search query). The minimum client state needed: - `theme: "dark" | "light"` (persisted to `localStorage`) - `sidebarOpen: boolean` (mobile drawer) - `searchOpen: boolean` (⌘K modal) - `expandedSections: Record` (sidebar collapse — defaults to "current section open") - `activeTocId: string` (driven by IntersectionObserver, not user input) - `copyStateByBlock: Record` (per-block "Copied" flash — local component state is fine) ## Design Tokens All tokens live in **`source/docs-system/tokens.css`**. Copy this file into your codebase verbatim — it's the source of truth. ### Colors (dark theme) | Name | Hex | Use | |---|---|---| | `--space` | `#0b0410` | Page background | | `--space-2` | `#120822` | Panel surfaces | | `--space-3` | `#1a0c2e` | Raised surfaces | | `--plum` | `#2a1545` | Deep accents | | `--plum-2` | `#3a1d5e` | Hover plum | | `--star` | `#f4eedb` | Primary text | | `--star-soft` | `#d8d2c0` | Secondary text | | `--muted` | `#8b85a3` | Tertiary / labels | | `--muted-2` | `#5e5878` | Very muted | | `--nebula-mag` | `#b86bff` | Primary accent · links | | `--nebula-mag-2` | `#d8a8ff` | Hover / em | | `--nebula-cyan` | `#6ad9ff` | Note callout | | `--nebula-amber` | `#ffb574` | Warning callout / numbers | | `--nebula-rose` | `#ff7ab8` | Danger callout / keywords | | `--nebula-green` | `#6ee7b0` | Tip callout / strings | ### Light theme overrides Defined under `.theme-light` in `tokens.css` — accent colors shift to higher-contrast equivalents (purple replaces magenta, teal replaces cyan) against a parchment `#faf6ec` background. ### Type scale | Token | px | Use | |---|---|---| | `--fs-xs` | 12 | Tiny meta | | `--fs-sm` | 13 | UI | | `--fs-base` | 15 | Default | | `--fs-md` | 16 | Body prose | | `--fs-lg` | 18 | Page summary | | `--fs-xl` | 22 | h3 | | `--fs-2xl` | 28 | h2 | | `--fs-3xl` | 36 | Page title | | `--fs-4xl` | 48 | Page hero | ### Spacing 4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64 — exposed as `--space-1` through `--space-16` (note: var name pun with the cosmic palette `--space`; see comment in tokens.css). ### Radii 4 / 8 / 12 / 16 / 20 / 999px (pill). ### Shadows - `--shadow-sm`: `0 1px 2px rgba(0,0,0,0.3)` - `--shadow-md`: `0 8px 24px -8px rgba(0,0,0,0.5)` - `--shadow-lg`: `0 24px 48px -16px rgba(0,0,0,0.6)` - `--shadow-glow`: `0 0 24px rgba(184,107,255,0.25)` ### Fonts - **Sans**: `Inter Tight` (400/500/600/700) — fall back to Inter, system sans - **Mono**: `JetBrains Mono` (400/500/600) - No display serif — explicitly all-sans for density and clarity. Load via Google Fonts: ```html ``` Or self-host for performance. ## Assets - **`source/docs-system/assets/lotus.png`** — The Nibiru lotus mark, cropped from the supplied logo. 861×569. Use at 36px height in the nav (auto width). For a smaller mark icon variant, ask the brand owner for a square crop. - **`source/docs-system/assets/nibiru-full.png`** — The full logo with "Nibiru" wordmark and "Create, Invent, Impress" tagline. Use on a marketing splash or auth page; not the docs nav. The docs nav uses **lotus + typeset wordmark separately** so we get crisper text than scaling a PNG, and so the tagline can use our `--muted` token color. ## Files ``` source/ ├── docs-system.html # Main design canvas — every component side-by-side ├── design-canvas.jsx # The canvas component itself (pan/zoom shell, you can ignore this) ├── index-v2.html # Companion: the marketing start page (for brand context) └── docs-system/ ├── tokens.css # ★ DESIGN TOKENS — copy into your codebase ├── components.css # ★ COMPONENT STYLES — copy or port to your styling system ├── assets/ │ ├── lotus.png # Brand mark │ └── nibiru-full.png # Full logo └── components/ ├── navigation.jsx # TopNav, Sidebar, RightTOC, LotusMark ├── typography-and-code.jsx # PageHeader, Prose, CodeBlock, Callout, DocTable └── extras.jsx # Tabs, ApiBlock, CardGrid, SearchModal, FAB, Pagination, # MobileDrawer, NotFound preview/ └── nibiru-docs-system.html # Single-file bundled preview (all assets inlined, # works offline, just open in a browser) ``` ### Where to start 1. Open `preview/nibiru-docs-system.html` in a browser to see the full design canvas. **This file works offline** — everything is inlined, just double-click it. 2. Read `source/docs-system/tokens.css` end-to-end — these tokens drive everything. 3. Read `source/docs-system/components.css` — every visual decision is here, organized by component with `/* ====== COMPONENT ====== */` headers. 4. Check the JSX components for structure (don't port React verbatim — just use them as a reference for DOM hierarchy and class names). 5. Pick a target stack (Nextra / Mintlify / VitePress / your own React app) and start porting. The CSS will land cleanly because it's plain CSS variables + class selectors — no framework lock-in. ### ⚠️ Running the source HTML locally The files in `source/` use external `