| name | design-system |
| description | Mars Greenhouse Command Center design system. Dark-only theme with warm Mars palette, cockpit-inspired UI. Reference for colors, typography, spacing, components, and layout patterns. |
Mars Greenhouse Command Center Design System
Dark-only theme. No light mode. Warm, Mars-inspired palette for a cockpit-style interface designed for astronauts.
Color Palette
Background Layers
:root {
--background: #0f0e0d;
--card: #1a1917;
--secondary: #252320;
--border: #2e2b27;
}
Tailwind usage:
bg-background - page background
bg-card - card backgrounds
bg-secondary - hover states, raised elements
border-border - dividers, card borders
Hex values:
- base:
#0f0e0d
- surface:
#1a1917
- elevated:
#252320
- border:
#2e2b27
Text Colors
:root {
--foreground: #e8e2d9;
--muted-foreground: #9c9488;
--tertiary: #6b6560;
}
Tailwind usage:
text-foreground - primary text
text-muted-foreground - labels, secondary text
text-[#6b6560] - disabled/tertiary text
Accent Colors
:root {
--primary: #d4924a;
--destructive: #c75a3a;
--green: #5a9a6b;
--yellow: #c4a344;
--blue: #4a7c9e;
--purple: #7c6aad;
}
Semantic usage:
- Amber (
#d4924a) - primary actions, highlights, Mars theme
- Red (
#c75a3a) - destructive actions, critical alerts
- Green (
#5a9a6b) - healthy status, growth indicators
- Yellow (
#c4a344) - warnings, attention needed
- Blue (
#4a7c9e) - water-related, informational
- Purple (
#7c6aad) - AI agent actions, autonomous systems
Tailwind usage:
text-primary or bg-primary - amber
text-destructive or bg-destructive - red
text-[#5a9a6b] or bg-[#5a9a6b] - green
text-[#c4a344] or bg-[#c4a344] - yellow
text-[#4a7c9e] or bg-[#4a7c9e] - blue
text-[#7c6aad] or bg-[#7c6aad] - purple
Status Colors
--status-healthy: #5a9a6b;
--status-warning: #c4a344;
--status-critical: #c75a3a;
Status dots: 8px circles with status colors.
Chart Colors
--chart-1: #d4924a;
--chart-2: #5a9a6b;
--chart-3: #4a7c9e;
--chart-4: #c4a344;
--chart-5: #7c6aad;
Typography
Fonts
import { Geist, Geist_Mono } from 'next/font/google';
const geistSans = Geist({ subsets: ['latin'], variable: '--font-geist-sans' });
const geistMono = Geist_Mono({ subsets: ['latin'], variable: '--font-geist-mono' });
Font families:
- Geist Sans - all body text, headings, UI
- Geist Mono - numbers, data, code, technical values
Type Styles
| Element | Classes | Notes |
|---|
| Page Title | text-xl font-medium tracking-tight | Top-level page heading |
| Section Heading | text-base font-medium | Card titles, section headers |
| Body Text | text-sm | Default text size |
| Label | text-xs text-muted-foreground uppercase tracking-wide | Form labels, metadata |
| Data/Numbers | text-sm font-mono tabular-nums | Metrics, readings, counts |
Type Scale
--text-xs: 0.75rem;
--text-sm: 0.875rem;
--text-base: 1rem;
--text-lg: 1.125rem;
--text-xl: 1.25rem;
--text-2xl: 1.5rem;
--text-3xl: 1.875rem;
Number Formatting
Always use monospace font with tabular figures for numbers:
<span className="font-mono tabular-nums">23.7°C</span>
<div className="text-sm font-mono tabular-nums">1,847 kcal</div>
Component Patterns
Cards
<div className="bg-card border border-border rounded-lg p-4">
{}
</div>
Rules:
- NO shadows - borders only
rounded-lg consistently
border-border for subtle division
p-4 standard padding (16px)
Status Indicators
<div className="flex items-center gap-2">
<div className="w-2 h-2 rounded-full bg-[#5a9a6b]" />
<span className="text-sm">Healthy</span>
</div>
Status dot sizes: 8px (w-2 h-2) for inline indicators.
Labels
<div className="text-xs text-muted-foreground uppercase tracking-wide">
Temperature
</div>
Always uppercase, extra letter spacing, muted color.
Buttons
<button className="bg-primary text-background rounded-lg px-4 py-2">
Action
</button>
<button className="bg-secondary text-foreground rounded-lg px-4 py-2 hover:bg-[#2e2b27]">
Action
</button>
<button className="bg-destructive text-background rounded-lg px-4 py-2">
Delete
</button>
Rules:
- Use
rounded-lg (NOT rounded-full)
- Standard padding:
px-4 py-2
- Icons: 16px inline within buttons
Icons
- Library: lucide-react only
- Inline icons: 16px (size={16})
- Standalone icons: 20px (size={20})
- Color: inherit from parent text color
import { AlertTriangle, Droplets } from 'lucide-react';
<span className="flex items-center gap-2">
<Droplets size={16} />
Water Level
</span>
<AlertTriangle size={20} className="text-destructive" />
Layout
Page Structure
<div className="min-h-screen bg-background text-foreground">
{}
<nav className="fixed top-0 w-full h-14 border-b border-border bg-background z-10">
{}
</nav>
{}
<main className="flex-1 pt-14 p-6">
<div className="space-y-4">
{/* cards, widgets */}
</div>
</main>
</div>
Navbar
- Height:
h-14 (56px)
- Position:
fixed top-0 w-full
- Border:
border-b border-border
- Background:
bg-background
- Z-index:
z-10 (or higher if needed)
Content Area
- Padding top:
pt-14 (to clear fixed navbar)
- Page padding:
p-6 (24px)
- Vertical spacing:
space-y-4 or gap-4 (16px between elements)
Widget Cards
<div className="bg-card border border-border rounded-lg p-4 min-h-[160px]">
{}
</div>
Minimum height: 160px for visual consistency.
Spacing System (4px grid)
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 0.75rem;
--space-4: 1rem;
--space-6: 1.5rem;
--space-8: 2rem;
--space-12: 3rem;
--space-16: 4rem;
--space-20: 5rem;
Common Spacing Patterns
- Card padding: 16px (p-4)
- Widget spacing: 16px gap (gap-4)
- Page padding: 24px (p-6)
- Navbar height: 56px (h-14)
- Status dot size: 8px (w-2 h-2)
- Icon inline: 16px (size={16})
- Icon standalone: 20px (size={20})
Border Radius
--radius-sm: 0.125rem;
--radius-md: 0.375rem;
--radius-lg: 0.5rem;
--radius-xl: 0.75rem;
--radius-2xl: 1rem;
--radius-full: 9999px;
Standard: Use rounded-lg (8px) for cards, buttons, inputs.
Exceptions: rounded-full only for status dots and avatar circles.
Z-Index Scale
--z-base: 1;
--z-dropdown: 1000;
--z-sticky: 1020;
--z-fixed: 1030;
--z-modal-backdrop: 1040;
--z-modal: 1050;
--z-popover: 1060;
--z-tooltip: 1070;
Navbar: Use z-10 or higher as needed (typically z-sticky).
Design Principles
- No shadows - Use borders only for depth
- No gradients - Except for greenhouse visualization if needed
- Consistent rounding -
rounded-lg everywhere (except dots)
- Monospace numbers - Always for data, metrics, readings
- Uppercase labels - Small, muted, letter-spaced
- Status dots - 8px circles with semantic colors
- lucide-react only - No other icon libraries
- Dark-only - No light mode toggle or implementation
Quick Reference
Color Variables
bg-background
bg-card
bg-secondary
text-foreground
text-muted-foreground
text-primary
text-destructive
text-[#5a9a6b]
text-[#c4a344]
text-[#4a7c9e]
text-[#7c6aad]
border-border
Common Patterns
<div className="bg-card border border-border rounded-lg p-4" />
<div className="text-xs text-muted-foreground uppercase tracking-wide" />
<span className="text-sm font-mono tabular-nums" />
<div className="w-2 h-2 rounded-full bg-[#5a9a6b]" />
<button className="bg-primary text-background rounded-lg px-4 py-2" />
<h2 className="text-base font-medium" />
<h1 className="text-xl font-medium tracking-tight" />
Responsive Breakpoints
@media (min-width: 640px) { }
@media (min-width: 768px) { }
@media (min-width: 1024px) { }
@media (min-width: 1280px) { }
Approach: Design mobile-first, enhance for larger screens.