ryOS UI Design & Styling
The 4 Themes
Theme ID Key Traits
System 7 system7
Black/white, square corners, Chicago font, dotted patterns
macOS Aqua macosx
Pinstripes, traffic lights, glossy buttons, Lucida Grande
Windows XP xp
Blue gradients, Luna style, soft shadows, Tahoma
Windows 98 win98
Gray 3D bevels, classic blue title bars, MS Sans Serif
Essential Utilities
import { cn } from "@/lib/utils"; import { useTheme } from "@/contexts/ThemeContext";
const { osTheme } = useTheme();
// Theme-conditional classes className={cn( "base-classes", osTheme === "macosx" && "aqua-specific", osTheme === "system7" && "system7-specific" )}
OS-Aware Tailwind Classes
className="bg-os-window-bg" // Window background className="border-os-window" // Window border className="rounded-os" // Theme-appropriate radius className="font-os-ui" // UI font stack className="font-os-mono" // Monospace font className="shadow-os-window" // Window shadow className="h-os-titlebar" // Title bar height
CSS Variables
Access via var(--name) :
--os-font-ui, --os-font-mono --os-color-window-bg, --os-color-window-border --os-color-titlebar-active-bg, --os-color-titlebar-inactive-bg --os-color-button-face, --os-color-button-highlight, --os-color-button-shadow --os-color-selection-bg, --os-color-selection-text --os-metrics-border-width, --os-metrics-radius --os-metrics-titlebar-height, --os-metrics-menubar-height
Theme-Specific Styling
System 7
<div className={cn( "border-2 border-black bg-white rounded-none", "font-chicago text-black", "shadow-[2px_2px_0px_0px_rgba(0,0,0,0.5)]" )}>
macOS Aqua
<div className={cn( "bg-[#E8E8E8] border border-black/30", "rounded-lg font-lucida-grande", "shadow-[0_3px_10px_rgba(0,0,0,0.3)]" )}> <button className="aqua-button primary">OK</button> </div>
Windows XP
<div className={cn( "bg-[#ECE9D8] border-[3px] border-[#0054E3]", "rounded-[0.5rem] font-tahoma", "shadow-[0_4px_8px_rgba(0,0,0,0.25)]" )}>
Windows 98
<div className={cn( "bg-[#C0C0C0] border-2 rounded-none font-ms-sans-serif", "border-t-white border-l-white", "border-b-[#808080] border-r-[#808080]" )}>
Theme Specifications
System 7 (system7 )
Property Value
Fonts Chicago, Monaco (mono)
Window BG #FFFFFF
Border 2px solid #000000
Radius 0px
Selection Black bg, white text
Shadow 2px 2px 0px 0px rgba(0,0,0,0.5)
macOS Aqua (macosx )
Property Value
Fonts Lucida Grande, Monaco (mono)
Window BG #E8E8E8
Border 0.5px solid rgba(0,0,0,0.3)
Radius 0.45rem (8px)
Selection #3875D7 bg, white text
Shadow 0 3px 10px rgba(0,0,0,0.3)
Traffic Lights Red #FF5F57 , Yellow #FEBC2E , Green #28C840
Windows XP (xp )
Property Value
Fonts Tahoma, Consolas (mono)
Window BG #ECE9D8
Border 3px solid #0054E3
Radius 0.5rem (8px)
Selection #316AC5 bg, white text
Shadow 0 4px 8px rgba(0,0,0,0.25)
Title Bar Blue gradient #0A246A → #0054E3
Windows 98 (win98 )
Property Value
Fonts MS Sans Serif, Fixedsys (mono)
Window BG #C0C0C0
Raised Bevel border: 2px solid; border-color: #FFF #808080 #808080 #FFF
Sunken Bevel border: 2px solid; border-color: #808080 #FFF #FFF #808080
Radius 0px
Selection #000080 bg, white text
Title Bar Gradient #000080 → #1084D0
Component Patterns
Theme-Adaptive Button
import { Button } from "@/components/ui/button";
<Button variant="default">Standard</Button> <Button variant="retro">Retro Style</Button> <Button variant="aqua">Aqua (macOS)</Button>
Aqua Buttons (CSS classes)
<button className="aqua-button">Default</button> <button className="aqua-button primary">Primary (pulsing)</button> <button className="aqua-button secondary">Secondary</button>
Win98 3D Button
<button className={cn( "px-4 py-1 bg-[#C0C0C0]", "border-2 border-t-white border-l-white", "border-b-[#808080] border-r-[#808080]", "active:border-t-[#808080] active:border-l-[#808080]", "active:border-b-white active:border-r-white" )}>
Glassmorphism
<div className="bg-white/80 backdrop-blur-lg rounded-lg"> <div className="bg-black/40 backdrop-blur-xl text-white">
Theme-Aware Panel
<div className={cn( "p-4 bg-os-window-bg border-os-window rounded-os", osTheme === "system7" && "border-2 border-black", osTheme === "macosx" && "shadow-md", osTheme === "win98" && "border-2 border-t-white border-l-white border-b-[#808080] border-r-[#808080]" )}>
Custom Components
Component Usage
AudioBars
Frequency visualization
PlaybackBars
Equalizer animation
VolumeBar
Horizontal volume indicator
Dial
Circular dial control (sm/md/lg)
RightClickMenu
Context menu wrapper
Dial Example
import { Dial } from "@/components/ui/dial"; <Dial value={50} onChange={setValue} size="md" label="Volume" />
Window Materials
Mode Use Case
default
Standard opaque windows
transparent
Semi-transparent (iPod, Photo Booth)
notitlebar
Immersive with floating controls (Videos)
Best Practices
-
Always search for existing patterns before creating new styles or components
-
Always use cn() for conditional class merging
-
Use OS-aware classes (bg-os-* , border-os-* ) when available
-
Check theme with useTheme() for complex conditional rendering
-
Prefer CSS variables over hardcoded colors
-
Test all 4 themes when adding styled components x