- Remove all 1px border separators (sidebar border-r, page header border-b, section border-t, member list divide-y, invite card border). Separation is now achieved via background color shifts and whitespace per the "No-Line" rule. - Fix sidebar: bg-surface-raised vs bg-background creates tonal separation. - Correct dark background to #020617 (slate-950) per spec. - Add surface-container-low, text-primary/secondary/muted, destructive tokens. - Fix CSS variable color space: all tokens are RGB triplets; switch Tailwind config and app.css from hsl() to rgb() to prevent yellow/warm color bleed. - Replace emoji nav icons with Lucide icons at 16px / 1.5 stroke-width. - Apply Masthead typography (uppercase Label-MD + Title-LG) to all page headers and section labels across lists, tasks, notes, search, settings, manage. - Destructive action (sign out) uses bg-destructive per spec. - Add `just serve` command: builds and runs the prod Node server at :3000 against the dev Docker stack for production build testing. - Add nav_collective i18n key (en + es). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.8 KiB
Design System Specification
1. Overview & Creative North Star: "The Monolith Editorial"
The creative direction for this design system is The Monolith Editorial. We are moving away from the "busy" aesthetics of modern SaaS and toward a disciplined, high-end editorial experience. The goal is to create a sense of permanent, quiet authority. By stripping away all accent colors and relying on a monochromatic slate palette, we force the user to focus on content, structure, and intent.
The "Template" look is avoided through Intentional Negative Space and Tonal Depth. We do not use lines to separate ideas; we use the weight of the typography and the shift of the background. It is a system that feels carved rather than assembled.
2. Colors & Tonal Architecture
The palette is strictly monochromatic, utilizing a "Slate" foundation to provide a cooling, sophisticated atmosphere.
Core Palette
- Background:
#f7f9fb(Light) /#020617(Dark) - Primary (Action):
#000000(Light) /#ffffff(Dark) — Note: Primary actions invert the surface. - Destructive:
#ba1a1a(The only color allowed to break the monochrome seal).
The "No-Line" Rule
Explicit Instruction: Designers are prohibited from using 1px solid borders to section off major UI areas. To define boundaries, you must use background shifts.
- Use
surface-container-lowfor secondary content areas. - Use
surface-container-highestfor high-priority nested components. - Sectioning is achieved via a 32px–48px vertical gap or a subtle change in the background hex, never a line.
Surface Hierarchy & Nesting
Treat the UI as stacked sheets of gallery-grade paper.
- Base Layer:
surface(The foundation). - Raised Layer:
surface-container-low(For subtle grouping). - Focus Layer:
surface-container-lowest(For cards and interactive modules to "pop" via tonal contrast).
3. Typography: The Inter Hierarchy
We use Inter exclusively. To achieve an editorial feel, we rely on extreme contrast between headline-lg and label-sm.
| Level | Size | Weight | Case | Spacing |
|---|---|---|---|---|
| Display-LG | 3.5rem | 600 | Default | -0.02em |
| Title-LG | 20px | 600 | Default | -0.01em |
| Header (Label-MD) | 13px | 600 | Uppercase | +0.05em |
| Body-LG | 16px | 400 | Default | Normal |
| Meta (Label-SM) | 13px | 400 | Default | Normal |
Editorial Note: Always pair an Uppercase Label-MD header directly above a Title-LG to create a "Masthead" effect for sections.
4. Elevation & Depth: Tonal Layering
Traditional drop shadows are largely forbidden. Hierarchy must be achieved through Tonal Layering.
- The Layering Principle: Instead of a shadow, place a
surface-container-lowestcard on asurface-container-lowbackground. The slight shift in slate value creates a "natural" lift. - Ambient Shadows: For floating elements like Sheets or Dialogs, use a "Ghost Shadow":
0px 20px 40px rgba(15, 23, 42, 0.06). It should feel like a soft glow, not a dark stain. - Glassmorphism: For the "Sticky Bottom Input," use a backdrop-blur of
12pxand a semi-transparentsurfacecolor (80% opacity). This ensures the content "flows" under the interface, maintaining a sense of depth.
5. Components
All components follow a 4px base grid and a rounded-md (0.375rem) corner radius.
Buttons (Inversion Logic)
- Primary:
bg-slate-900 text-slate-50(Light Mode). This "Inversion" is the signature interactive state. - Destructive:
bg-red-500 text-white. Reserved only for irreversible actions. - Ghost: No background,
text-slate-500. On hover, shift tosurface-raised.
Input Fields & Sticky Input
- The Monolith Input: A sticky bottom container with
backdrop-blur. No border; only a subtlesurface-raisedbackground. - Chips:
rounded-full,bg-slate-200. When active, they invert tobg-slate-900 text-white.
Lists & Swipe Actions
- Forbid Dividers: Do not use lines between list items. Use 12px of vertical padding (
py-3) to create separation through whitespace. - Swipe-to-Delete: The "Red Zone" emerges from behind the item. As the user swipes, the background transitions into
red-500with a white Lucidetrash-2icon.
Shopping Mode Components
- Large Tap Targets: Increase minimum hit area to 56px.
- Presence Avatars: 24px circles with a 2px
surfaceborder, overlapped horizontally to show collaboration.
6. Do's and Don'ts
Do
- Do use uppercase labels with letter-spacing for all category headers.
- Do use
slate-500for meta-text to create a visual "recession" of less important data. - Do maximize the use of the
2xlmax-width container on desktop to ensure the "Editorial" line lengths remain readable. - Do use Lucide icons at 1.5 stroke width to match the weight of Inter's medium-weight characters.
Don't
- Don't use a 1px border to separate the sidebar from the main content. Use a background color shift.
- Don't use any colors outside of the Slate and Red-500 palette. No "Success Green" or "Warning Orange." Use icons and text to convey state.
- Don't use standard "drop shadows" on cards. If it doesn't pop via tonal shift, the layout needs more whitespace, not more shadow.
- Don't use "Slate-900" for body text. Use "Slate-900" only for titles; use "Slate-800" or "Slate-700" for long-form reading to reduce eye strain.
7. Layout Philosophy
- Desktop (lg+): The left sidebar is a fixed Monolith. It stays
surface-raisedwhile the main content area remainssurface. - Mobile: The bottom tab bar utilizes Glassmorphism. Navigation icons should be
slate-400, switching toslate-900when active. No text labels on mobile tabs; the icons must be clear enough to stand alone.