Dark Professional Design System for Report Websites
Apply a distinctive dark professional visual identity to generated research report websites using Tailwind CSS v4 + shadcn/ui. This design system creates sites that feel like a premium data terminal crossed with a high-end law publication — dense with information yet elegant and readable.
Design Philosophy
Tone: Sophisticated, authoritative, data-rich. Think Bloomberg Terminal meets The Economist's digital edition.
Differentiation: The signature element is the warm amber accent system against deep cool backgrounds — every interactive element glows with intention. Typography pairs a refined serif display face with a crisp humanist sans-serif body, creating tension between editorial authority and modern clarity.
Theme System: Color accents are swappable via theme presets (8 built-in options) or community registries, while layout, typography, and animations remain consistent.
Color System
Colors are defined as Tailwind @theme tokens in app.css and can be overridden by theme preset CSS files. Use Tailwind utility classes for all color references — never hardcode color values.
Core Palette
bg-bg-primary → #0f1117 Deep space — main background
bg-bg-secondary → #161922 Elevated surface — cards, panels
bg-bg-tertiary → #1c1f2e Recessed areas — code blocks, inputs
bg-bg-hover → #232738 Hover state for interactive surfaces
text-text-primary → #e8e6e1 Warm white — body text
text-text-secondary → #9a9690 Muted warm — secondary text, labels
text-text-tertiary → #5e5a55 Dim — disabled text, timestamps
text-accent-primary → #d4a853 Amber gold — primary actions, highlights
text-accent-secondary → #2d9e8f Teal — secondary interactive elements
text-accent-tertiary → #6366f1 Indigo — links, tertiary actions
border-border-primary → #2a2d3a Subtle borders between sections
border-border-accent → rgba(212, 168, 83, 0.2) Amber border at 20% opacity
shadcn Semantic Tokens
These map to the dark theme by default and are overridden by theme presets:
--color-primary → accent-primary (gold by default)
--color-primary-foreground → bg-primary
--color-secondary → bg-tertiary
--color-muted → bg-tertiary
--color-muted-foreground → text-secondary
--color-destructive → error
--color-border → border-primary
--color-ring → accent-primary
Typography
Font Stack
Load from Google Fonts:
- Display/Headings:
font-display → "DM Serif Display", Georgia, serif — Elegant, authoritative serif
- Body/UI:
font-body → "IBM Plex Sans", "Helvetica Neue", sans-serif — Crisp, professional
- Code/Data:
font-mono → "IBM Plex Mono", "Consolas", monospace — Clean monospace for numbers
Type Treatments
- Headings:
font-display text-text-primary with tracking-tight
- Body:
font-body text-text-primary with leading-[1.7] max-w-[72ch]
- Labels/Captions:
text-xs uppercase tracking-wide text-text-secondary
- Data/Numbers:
font-mono text-accent-primary tabular-nums
- Blockquotes:
italic text-text-secondary border-l-3 border-l-accent-primary bg-bg-secondary
Spacing
Use Tailwind's spacing scale. Key layout patterns:
- Between sections (H3):
mb-16
- Inside cards/panels:
p-5 or space-y-5
- Tab bar height:
py-4 (maps to --tab-bar-height: 4rem)
- Page horizontal padding:
px-6
- Max content width:
max-w-[var(--max-content-width)] (1200px), centered with mx-auto
Component Styling
All components use Tailwind utility classes + shadcn UI primitives. Import cn from @/lib/utils for conditional class merging.
Tabbed Navigation (TabbedLayout)
- Background:
bg-bg-secondary
- Bottom border:
border-b border-border-primary
- Active tab:
text-accent-primary + animated indicator via bg-gradient-tab-indicator
- Inactive tab:
text-text-tertiary hover:text-text-secondary
- Glassmorphism on scroll:
glass shadow-lg utility class
- Tab labels:
text-sm font-medium uppercase tracking-[0.08em]
- Presentation toggle: shadcn
Button variant="outline"
Cards and Panels
- Use shadcn
Card / CardContent components
- Calculator:
border-l-3 border-l-accent-primary bg-gradient-gold-subtle shadow-md
- Scenario slider:
border-l-3 border-l-accent-secondary bg-gradient-teal-subtle shadow-md
- Hover lift: framer-motion
whileHover={{ y: -2 }}
Interactive Elements (Calculators, Sliders)
- Input fields: shadcn
Input with font-mono bg-bg-primary border-border-primary shadow-inset
- Focus:
focus-visible:border-accent-primary focus-visible:ring-[rgba(212,168,83,0.15)]
- Labels: shadcn
Label with text-xs uppercase tracking-wide text-text-secondary
- Dividers: shadcn
Separator with bg-border-primary
- Result display:
font-mono text-[length:var(--font-size-hero)] text-accent-primary tabular-nums
- Range slider: Native
<input type="range"> with .scenario-slider CSS class (custom styling in app.css)
Tables (ComparisonTable)
- Use shadcn
Table, TableHeader, TableBody, TableHead, TableRow, TableCell
- Header row:
bg-bg-tertiary text-xs uppercase tracking-wide font-semibold
- Hover row: inline style
background: var(--color-bg-hover)
- Filter buttons: shadcn
Button with variant toggling
- Highlighted column:
text-accent-primary + subtle gradient background
Citations (CitationCard)
- Use shadcn
Collapsible + Badge
- Number badge:
font-mono text-xs text-accent-tertiary in a shadcn Badge variant="outline"
- Left border:
border-l-3 border-l-accent-tertiary
- Links:
text-accent-tertiary text-xs font-mono bg-bg-tertiary with hover lift
Knowledge Vault (KnowledgeVault)
- Use shadcn
Accordion, AccordionItem, AccordionTrigger, AccordionContent
- Search input: shadcn
Input with pl-12 font-mono shadow-inset
- Expand all: shadcn
Button variant="outline"
- Section items: AccordionItem with conditional border/shadow classes
Badges (SectionRenderer)
- Use shadcn
Badge variant="outline" with semantic color classes
- VERIFIED:
text-success border-[rgba(52,211,153,0.25)]
- ESTIMATE:
text-warning border-[rgba(251,191,36,0.25)]
- ILLUSTRATIVE:
text-info border-[rgba(96,165,250,0.25)]
Animation Patterns
Use framer-motion for React. Animation tokens are in src/theme/motion.js. Keep animations purposeful and restrained.
Tab Transitions
- Content fade + slide: 300ms,
opacity: 0 → 1, y: 8 → 0
- Use
AnimatePresence with mode="wait" for clean tab switches
Content Reveals
- Sections animate in on first view with
useInView and staggered delays (50ms between siblings)
- Cards:
opacity: 0 → 1, y: 16 → 0, 400ms
- Tables: rows stagger in at 30ms intervals
- Numbers/stats: count-up animation over 600ms
Interactive Feedback
- Calculator results: brief scale pulse (1.0 → 1.02 → 1.0) on value change
- Slider: real-time update, no animation delay
- Hover on cards: framer-motion
whileHover={{ y: -2 }}
- Button press: framer-motion
whileTap={{ scale: 0.95 }}
Presentation Mode (if enabled)
- Auto-advance tabs every 8 seconds
- Progress bar under tabs shows timing
- Section content types in with stagger
Custom Tailwind Utilities
Defined in app.css via @utility blocks:
bg-gradient-surface — Surface gradient (secondary → tertiary)
bg-gradient-gold-subtle — Calculator background tint
bg-gradient-teal-subtle — Scenario slider background tint
bg-gradient-timeline — Timeline line gradient (gold → teal → indigo)
bg-gradient-tab-indicator — Tab underline gradient (gold → teal)
bg-gradient-hero-text — Hero title text gradient
bg-gradient-accent-line — 60px heading accent line
glass — Glassmorphism (bg + backdrop-filter)
scrollbar-none — Hide scrollbar
Responsive Design
Breakpoints
Mobile: < 768px
Tablet: 768px - 1023px
Desktop: >= 1024px
Mobile Adaptations
- Tabs become a horizontal scrollable row (
overflow-x-auto scrollbar-none)
- Tables use horizontal scroll
- Calculator inputs stack vertically
- Font sizes reduce:
--font-size-hero: 2.5rem on mobile
- Page padding:
px-4
Desktop Enhancements
- Tabs are full-width with even spacing
- Comparison tables show all columns
- Page padding:
px-6
Accessibility
- All color combinations meet WCAG AA contrast ratios (4.5:1 for text, 3:1 for large text)
- Tab navigation is keyboard accessible (arrow keys, Enter, Tab) via
role="tablist" and role="tab"
- Interactive elements have visible focus indicators (
focus-visible: with accent-primary outline)
- Animations respect
prefers-reduced-motion — all durations reduced to 0.01ms
- All icons have
aria-hidden="true" with descriptive text nearby
- Semantic HTML:
<nav>, <main>, <header>, <section>
- shadcn components include built-in ARIA attributes (Accordion, Collapsible, etc.)
Note: This design system is dark-mode only by design. Light mode is not supported. The dark professional aesthetic is core to the brand identity of generated report sites.
Theme Presets
8 built-in color presets are available in ${CLAUDE_PLUGIN_ROOT}/templates/src/themes/. Each overrides only semantic color tokens, leaving layout and animation intact. See ${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/registry-guide.md for details.
Reference Files
For framer-motion animation tokens, see ${CLAUDE_PLUGIN_ROOT}/templates/src/theme/motion.js.
For the Tailwind v4 stylesheet with all tokens, see ${CLAUDE_PLUGIN_ROOT}/templates/src/app.css.
For the full token definitions, see ${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/tokens-reference.md.
For registry/theme selection, see ${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/registry-guide.md.
1---2name: design-system3description: This skill should be used when the user asks about "dark theme for report site", "presentation website styling", "report-to-web design system", "professional dark theme", "site theme tokens", "interactive component styling", "customize report website colors", "report site accessibility", "shadcn theme", "tailwind tokens", or needs guidance on the dark professional visual design system used by report-to-web generated sites, including color palettes, typography, spacing, animation patterns, responsive design, accessibility, component styling, and theme/registry selection.4---56# Dark Professional Design System for Report Websites78Apply a distinctive dark professional visual identity to generated research report websites using Tailwind CSS v4 + shadcn/ui. This design system creates sites that feel like a premium data terminal crossed with a high-end law publication — dense with information yet elegant and readable.910## Design Philosophy1112**Tone**: Sophisticated, authoritative, data-rich. Think Bloomberg Terminal meets The Economist's digital edition.1314**Differentiation**: The signature element is the warm amber accent system against deep cool backgrounds — every interactive element glows with intention. Typography pairs a refined serif display face with a crisp humanist sans-serif body, creating tension between editorial authority and modern clarity.1516**Theme System**: Color accents are swappable via theme presets (8 built-in options) or community registries, while layout, typography, and animations remain consistent.1718## Color System1920Colors are defined as Tailwind `@theme` tokens in `app.css` and can be overridden by theme preset CSS files. Use Tailwind utility classes for all color references — never hardcode color values.2122### Core Palette2324```25bg-bg-primary → #0f1117 Deep space — main background26bg-bg-secondary → #161922 Elevated surface — cards, panels27bg-bg-tertiary → #1c1f2e Recessed areas — code blocks, inputs28bg-bg-hover → #232738 Hover state for interactive surfaces2930text-text-primary → #e8e6e1 Warm white — body text31text-text-secondary → #9a9690 Muted warm — secondary text, labels32text-text-tertiary → #5e5a55 Dim — disabled text, timestamps3334text-accent-primary → #d4a853 Amber gold — primary actions, highlights35text-accent-secondary → #2d9e8f Teal — secondary interactive elements36text-accent-tertiary → #6366f1 Indigo — links, tertiary actions3738border-border-primary → #2a2d3a Subtle borders between sections39border-border-accent → rgba(212, 168, 83, 0.2) Amber border at 20% opacity40```4142### shadcn Semantic Tokens4344These map to the dark theme by default and are overridden by theme presets:4546```47--color-primary → accent-primary (gold by default)48--color-primary-foreground → bg-primary49--color-secondary → bg-tertiary50--color-muted → bg-tertiary51--color-muted-foreground → text-secondary52--color-destructive → error53--color-border → border-primary54--color-ring → accent-primary55```5657## Typography5859### Font Stack6061Load from Google Fonts:62- **Display/Headings**: `font-display` → `"DM Serif Display", Georgia, serif` — Elegant, authoritative serif63- **Body/UI**: `font-body` → `"IBM Plex Sans", "Helvetica Neue", sans-serif` — Crisp, professional64- **Code/Data**: `font-mono` → `"IBM Plex Mono", "Consolas", monospace` — Clean monospace for numbers6566### Type Treatments6768- **Headings**: `font-display text-text-primary` with tracking-tight69- **Body**: `font-body text-text-primary` with `leading-[1.7] max-w-[72ch]`70- **Labels/Captions**: `text-xs uppercase tracking-wide text-text-secondary`71- **Data/Numbers**: `font-mono text-accent-primary tabular-nums`72- **Blockquotes**: `italic text-text-secondary border-l-3 border-l-accent-primary bg-bg-secondary`7374## Spacing7576Use Tailwind's spacing scale. Key layout patterns:77- Between sections (H3): `mb-16`78- Inside cards/panels: `p-5` or `space-y-5`79- Tab bar height: `py-4` (maps to `--tab-bar-height: 4rem`)80- Page horizontal padding: `px-6`81- Max content width: `max-w-[var(--max-content-width)]` (1200px), centered with `mx-auto`8283## Component Styling8485All components use Tailwind utility classes + shadcn UI primitives. Import `cn` from `@/lib/utils` for conditional class merging.8687### Tabbed Navigation (TabbedLayout)8889- Background: `bg-bg-secondary`90- Bottom border: `border-b border-border-primary`91- Active tab: `text-accent-primary` + animated indicator via `bg-gradient-tab-indicator`92- Inactive tab: `text-text-tertiary hover:text-text-secondary`93- Glassmorphism on scroll: `glass shadow-lg` utility class94- Tab labels: `text-sm font-medium uppercase tracking-[0.08em]`95- Presentation toggle: shadcn `Button` variant="outline"9697### Cards and Panels9899- Use shadcn `Card` / `CardContent` components100- Calculator: `border-l-3 border-l-accent-primary bg-gradient-gold-subtle shadow-md`101- Scenario slider: `border-l-3 border-l-accent-secondary bg-gradient-teal-subtle shadow-md`102- Hover lift: framer-motion `whileHover={{ y: -2 }}`103104### Interactive Elements (Calculators, Sliders)105106- Input fields: shadcn `Input` with `font-mono bg-bg-primary border-border-primary shadow-inset`107- Focus: `focus-visible:border-accent-primary focus-visible:ring-[rgba(212,168,83,0.15)]`108- Labels: shadcn `Label` with `text-xs uppercase tracking-wide text-text-secondary`109- Dividers: shadcn `Separator` with `bg-border-primary`110- Result display: `font-mono text-[length:var(--font-size-hero)] text-accent-primary tabular-nums`111- Range slider: Native `<input type="range">` with `.scenario-slider` CSS class (custom styling in app.css)112113### Tables (ComparisonTable)114115- Use shadcn `Table`, `TableHeader`, `TableBody`, `TableHead`, `TableRow`, `TableCell`116- Header row: `bg-bg-tertiary text-xs uppercase tracking-wide font-semibold`117- Hover row: inline style `background: var(--color-bg-hover)`118- Filter buttons: shadcn `Button` with variant toggling119- Highlighted column: `text-accent-primary` + subtle gradient background120121### Citations (CitationCard)122123- Use shadcn `Collapsible` + `Badge`124- Number badge: `font-mono text-xs text-accent-tertiary` in a shadcn Badge variant="outline"125- Left border: `border-l-3 border-l-accent-tertiary`126- Links: `text-accent-tertiary text-xs font-mono bg-bg-tertiary` with hover lift127128### Knowledge Vault (KnowledgeVault)129130- Use shadcn `Accordion`, `AccordionItem`, `AccordionTrigger`, `AccordionContent`131- Search input: shadcn `Input` with `pl-12 font-mono shadow-inset`132- Expand all: shadcn `Button` variant="outline"133- Section items: AccordionItem with conditional border/shadow classes134135### Badges (SectionRenderer)136137- Use shadcn `Badge` variant="outline" with semantic color classes138- VERIFIED: `text-success border-[rgba(52,211,153,0.25)]`139- ESTIMATE: `text-warning border-[rgba(251,191,36,0.25)]`140- ILLUSTRATIVE: `text-info border-[rgba(96,165,250,0.25)]`141142## Animation Patterns143144Use framer-motion for React. Animation tokens are in `src/theme/motion.js`. Keep animations purposeful and restrained.145146### Tab Transitions147148- Content fade + slide: 300ms, `opacity: 0 → 1`, `y: 8 → 0`149- Use `AnimatePresence` with `mode="wait"` for clean tab switches150151### Content Reveals152153- Sections animate in on first view with `useInView` and staggered delays (50ms between siblings)154- Cards: `opacity: 0 → 1`, `y: 16 → 0`, 400ms155- Tables: rows stagger in at 30ms intervals156- Numbers/stats: count-up animation over 600ms157158### Interactive Feedback159160- Calculator results: brief scale pulse (1.0 → 1.02 → 1.0) on value change161- Slider: real-time update, no animation delay162- Hover on cards: framer-motion `whileHover={{ y: -2 }}`163- Button press: framer-motion `whileTap={{ scale: 0.95 }}`164165### Presentation Mode (if enabled)166167- Auto-advance tabs every 8 seconds168- Progress bar under tabs shows timing169- Section content types in with stagger170171## Custom Tailwind Utilities172173Defined in `app.css` via `@utility` blocks:174175```176bg-gradient-surface — Surface gradient (secondary → tertiary)177bg-gradient-gold-subtle — Calculator background tint178bg-gradient-teal-subtle — Scenario slider background tint179bg-gradient-timeline — Timeline line gradient (gold → teal → indigo)180bg-gradient-tab-indicator — Tab underline gradient (gold → teal)181bg-gradient-hero-text — Hero title text gradient182bg-gradient-accent-line — 60px heading accent line183glass — Glassmorphism (bg + backdrop-filter)184scrollbar-none — Hide scrollbar185```186187## Responsive Design188189### Breakpoints190191```192Mobile: < 768px193Tablet: 768px - 1023px194Desktop: >= 1024px195```196197### Mobile Adaptations198199- Tabs become a horizontal scrollable row (`overflow-x-auto scrollbar-none`)200- Tables use horizontal scroll201- Calculator inputs stack vertically202- Font sizes reduce: `--font-size-hero: 2.5rem` on mobile203- Page padding: `px-4`204205### Desktop Enhancements206207- Tabs are full-width with even spacing208- Comparison tables show all columns209- Page padding: `px-6`210211## Accessibility212213- All color combinations meet WCAG AA contrast ratios (4.5:1 for text, 3:1 for large text)214- Tab navigation is keyboard accessible (arrow keys, Enter, Tab) via `role="tablist"` and `role="tab"`215- Interactive elements have visible focus indicators (`focus-visible:` with accent-primary outline)216- Animations respect `prefers-reduced-motion` — all durations reduced to 0.01ms217- All icons have `aria-hidden="true"` with descriptive text nearby218- Semantic HTML: `<nav>`, `<main>`, `<header>`, `<section>`219- shadcn components include built-in ARIA attributes (Accordion, Collapsible, etc.)220221**Note:** This design system is dark-mode only by design. Light mode is not supported. The dark professional aesthetic is core to the brand identity of generated report sites.222223## Theme Presets2242258 built-in color presets are available in `${CLAUDE_PLUGIN_ROOT}/templates/src/themes/`. Each overrides only semantic color tokens, leaving layout and animation intact. See `${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/registry-guide.md` for details.226227## Reference Files228229For framer-motion animation tokens, see `${CLAUDE_PLUGIN_ROOT}/templates/src/theme/motion.js`.230For the Tailwind v4 stylesheet with all tokens, see `${CLAUDE_PLUGIN_ROOT}/templates/src/app.css`.231For the full token definitions, see `${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/tokens-reference.md`.232For registry/theme selection, see `${CLAUDE_PLUGIN_ROOT}/skills/design-system/references/registry-guide.md`.