You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DM Sans is loaded from Google Fonts as a variable font (weight axis: 300–800, with italic support).
Type Scale
Usage
Size
Weight
Notes
Button (default)
text-base (16px)
font-medium (500)
Button (small)
text-sm (14px)
font-medium (500)
Card Title
text-lg (18px)
font-semibold (600)
Card Title (compact)
text-sm (14px)
font-semibold (600)
Frame variant
Card Description
text-sm (14px)
Normal (400)
muted-foreground
Input Text
text-base (16px)
Normal (400)
Inline Code
0.75rem (12px)
—
Monospace
Code Block
0.875rem (14px)
—
Monospace, 1.5 line-height
Heading Scale
[TBD]
[TBD]
5. Spacing & Layout
Border Radius Scale
Base radius: 0.625rem (10px)
Token
Value
--radius-sm
6px
--radius-md
8px
--radius-lg
10px (base)
--radius-xl
14px
--radius-2xl
18px
--radius-3xl
22px
--radius-4xl
26px
Common component radii:
Cards: rounded-2xl (18px)
Inputs: rounded-lg (10px)
Code blocks: rounded-[0.75rem] (12px)
Inline code: rounded-[0.375rem] (6px)
Sidebar
Property
Value
Desktop width
16rem (256px)
Icon-only width
3rem (48px)
Mobile width
calc(100vw - 12px)
Min resizable width
256px
Responsive Breakpoints
Name
Min-width
sm
640px
md
768px
lg
1024px
xl
1280px
2xl
1536px
3xl
1600px
4xl
2000px
Mobile breakpoint: < 768px (max-md)
Common Spacing Patterns
Context
Padding/Gap
Card content
p-6 (24px)
Chat area
px-3 py-3 → sm:px-5 sm:py-4
Markdown block spacing
0.65rem vertical margin
List item spacing
0.25rem between items
6. Shadows & Depth
Usage
Shadow
Cards
shadow-xs/5 (extra-small at 5% opacity)
Inputs
shadow-xs/5
Primary buttons
shadow-primary/24 (primary color glow at 24%)
Card inner edge (light)
0 1px black/4% (inset, via ::before)
Card inner edge (dark)
0 -1px white/6% (inset, via ::before)
Scrollbar
Property
Light
Dark
Width
6px
6px
Thumb
rgba(0,0,0,0.15)
rgba(255,255,255,0.1)
Thumb (hover)
rgba(0,0,0,0.25)
rgba(255,255,255,0.18)
Track
Transparent
Transparent
Border radius
3px
3px
Background Texture
A subtle fractal noise SVG overlay is applied to body::after at 3.5% opacity (opacity: 0.035), giving the UI a very faint grain/paper texture. Tile size: 256×256px.
Visual Studio Code logo (with gradient + filter effects)
9. Dark / Light Mode
Property
Value
Mechanism
.dark class on <html> element
Storage key
okcode:theme (localStorage)
Options
"light" · "dark" · "system"
Default
"system" (follows OS preference)
OS detection
prefers-color-scheme: dark media query
Desktop sync
Theme synced to Electron main process via window.desktopBridge.setTheme()
Transition handling
.no-transitions class suppresses all transitions during theme switch, removed after requestAnimationFrame reflow
10. Animation & Motion
Keyframe Animations
Name
Duration
Easing
Purpose
skeleton
2s (infinite)
Linear
Loading skeleton shimmer
ultrathink-rainbow
10s (infinite)
Linear
Rainbow gradient scroll for thinking indicator
ultrathink-chroma-shift
10s (infinite)
Linear
Hue rotation + saturation boost
Transition Patterns
Context
Duration
Easing
Properties
Copy button
120ms
ease
opacity, color, border-color
Input focus
default
default
box-shadow
Hover states
default
default
opacity, color
Layout Animation
@formkit/auto-animate v0.9.0 is used in the Sidebar component for automatic FLIP (First, Last, Invert, Play) layout transitions when DOM elements are added/removed/reordered.
Motion Preference
Property
Value
prefers-reduced-motion support
Respect; disable non-essential animations when set
Global animation toggle
[TBD]
11. Component Library
Built with:
Dependency
Purpose
Tailwind CSS 4
Utility-first CSS framework
@base-ui/react
Headless UI primitives (dialogs, popovers, etc.)
class-variance-authority
Type-safe component variant definitions
tailwind-merge
Intelligent class deduplication
@formkit/auto-animate
Automatic layout animations
@pierre/diffs
Diff rendering with theme integration
Button Variants
Styles:
Variant
Appearance
default
Solid primary (indigo) fill, white text, primary shadow glow
secondary
Subtle fill (4% black/white), neutral text
outline
Bordered, popover background
ghost
Transparent, accent fill on hover
destructive
Solid red fill, white text
destructive-outline
Transparent, red text
link
Text-only, underline on hover
Sizes:
Size
Height
Notes
default
36px → 32px (sm)
Standard
sm
32px → 28px (sm)
Compact
lg
40px → 36px (sm)
Prominent
xl
44px → 40px (sm)
Hero/CTA
icon
36×36 → 32×32 (sm)
Square icon
icon-sm
32×32 → 28×28 (sm)
Small square icon
icon-xs
28×28 → 24×24 (sm)
Tiny square icon
icon-lg
40×40 → 36×36 (sm)
Large square icon
icon-xl
44×44 → 40×40 (sm)
XL square icon
Sizes shrink by one step at the sm breakpoint for tighter density on larger screens.
12. Platform-Specific
Property
Value
Electron product name
"OK Code"
Frameless titlebar
Yes — .drag-region CSS for window drag
Desktop platforms
macOS, Windows, Linux (dedicated icons for each)
Web deployment
[TBD]
App Store presence
[TBD]
13. Open Items [TBD]
The following need to be provided/decided:
Tagline — "A Minimal Web GUI for Coding Agents"
One-liner description — see Brand Identity table above
WCAG contrast target — AA minimum
Reduced motion support — respect prefers-reduced-motion
Emoji policy — none in UI copy
Error/empty state voice — concise and helpful
Logo mark description — what does the mark depict?
Logo usage guidelines — minimum size, clear space, do's and don'ts
Heading type scale — H1–H6 sizes and weights
Website URL
Social media handles / links
App store descriptions
Open Graph / social card image
Brand color as hex — the primary oklch(0.488 0.217 264) converts to approximately #2b4acb (a deep blue-violet); confirm this is the intended brand hex
Secondary brand color — is there a distinct secondary brand color beyond the neutral system?
Icon stroke width — confirm Lucide default (2) or custom