| name | ParseKit | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| description | Menu-bar document converter — private, local, native macOS craft | ||||||||||||||||||||||||||||||||||||||||||||||||
| colors |
|
||||||||||||||||||||||||||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||||||||||||||||||||||||||
| rounded |
|
||||||||||||||||||||||||||||||||||||||||||||||||
| spacing |
|
||||||||||||||||||||||||||||||||||||||||||||||||
| components |
|
ParseKit is a product-register macOS menu-bar tool: design serves conversion, not marketing spectacle. Visual system is Bone White, Pressed — warm restrained neutrals, charcoal primary, native SF Pro body, Instrument Serif only for display (app title / about). Motion is short (120–180ms), ease-out, interruptible, reduced-motion aware. Identity lives in craft density and privacy posture, not loud color.
Canonical tokens: src/index.css (:root, [data-theme], system dark). Brand narrative: brand.md. Product brief: PRODUCT.md.
OKLCH is source of truth in CSS; hex above is sRGB approximation for tooling.
| Role | Light (OKLCH) | Use |
|---|---|---|
| Ink | oklch(0.18 0.01 50) |
Body text |
| Secondary | oklch(0.48 0.03 50) |
Hints, labels (keep ≥4.5:1 on surface) |
| Accent | oklch(0.32 0.03 50) |
Primary buttons, focus |
| Accent FG | oklch(0.98 0.005 85) |
Text on primary |
| Surface glass | oklch(0.97 0.01 85) + blur |
Popover material |
| Border | oklch(0.72 0.02 50 / 0.95) |
Hairlines |
| Success / Error / Warning | status-* tokens | Semantic only |
Dark theme flips ink/surface and warms the accent (oklch(0.78 0.08 75)). Prefer restrained strategy: neutrals dominate; accent ≤10% of surface.
- UI / body: system sans (
--font-sans) — native macOS feel. - Display only: Instrument Serif (
--font-serif) for app name / about — not for buttons, data, or dense labels. - Data / counts: JetBrains Mono (
--font-mono), tabular-nums for token counts. - Scale ratio ~1.15–1.2; display letter-spacing floor ≥ -0.04em (hero metrics ~-0.03em).
- Prefer weight + size hierarchy over all-caps eyebrows on every section.
Mostly tonal layering (secondary-bg, glass) over heavy drop shadows.
- Prefer: 1px border or soft shadow ≤8px blur — not both as decoration.
- Popover: glass material + restrained inset highlight.
- Focus:
--focus-ringtranslucent accent ring (never remove).
| Component | Notes |
|---|---|
| Primary button | .run-parse-btn / accent fill; :active scale(0.97) |
| Secondary button | Transparent / light border; quieter press scale |
| Chips | Pill outline for optional choices (destination) |
| Scoreboard | Post-convert result: one hero number, platter stats, progressive disclosure for method |
| Drop zone | Dominant affordance for first-run convert |
| Segmented control | Period toggle (today / month / lifetime) |
| Banners | Error/notice with fly enter; reduced-motion → fade |
States required on interactive: default, hover, focus-visible, active, disabled.
Do
- Keep conversion path obvious: drop → run → open output.
- Use local metrics language (estimate, privacy line).
- Animate transform/opacity only; honor
prefers-reduced-motionandprefers-reduced-transparency. - Align new UI to tokens in
src/index.cssbefore inventing hex.
Don't
- Side-stripe accents (
border-left>1px on cards/callouts). - Hero-metric SaaS clichés with gradients and confetti.
- Nested cards; identical icon+title+body grids.
- Uppercase tracked kicker on every block.
scale(0)entrances; bounce/elastic easing.- Pair thick border + wide soft shadow (ghost-card).
- Put Instrument Serif on dense UI chrome.