Files
admin/.cursor/skills/ui-design/templates/design-system.md
T
Oleksandr Bezdieniezhnykh d96971b050 Update .gitignore to include .env and .DS_Store files
Add .cursor autodevelopment system
2026-03-25 17:41:10 +02:00

6.1 KiB

Design System: [Project Name]

1. Visual Atmosphere

[Describe the mood, density, and aesthetic philosophy in 2-3 sentences. Be specific — never use "clean and modern". Reference the atmosphere type from design-vocabulary.md. Example: "A spacious, light-filled interface with generous whitespace that feels calm and unhurried. Elements float on a near-white canvas with subtle shadows providing depth. The overall impression is sophisticated simplicity — premium without being cold."]

2. Color System

Primitives

:root {
  --white: #ffffff;
  --black: #000000;

  --gray-50: #______;
  --gray-100: #______;
  --gray-200: #______;
  --gray-300: #______;
  --gray-400: #______;
  --gray-500: #______;
  --gray-600: #______;
  --gray-700: #______;
  --gray-800: #______;
  --gray-900: #______;
  --gray-950: #______;

  --accent-50: #______;
  --accent-100: #______;
  --accent-200: #______;
  --accent-300: #______;
  --accent-400: #______;
  --accent-500: #______;
  --accent-600: #______;
  --accent-700: #______;
  --accent-800: #______;
  --accent-900: #______;

  --red-500: #______;
  --red-600: #______;
  --green-500: #______;
  --green-600: #______;
  --amber-500: #______;
  --amber-600: #______;
}

Semantic Tokens

:root {
  --color-bg-primary: var(--gray-50);
  --color-bg-secondary: var(--gray-100);
  --color-bg-surface: var(--white);
  --color-bg-inverse: var(--gray-900);

  --color-text-primary: var(--gray-900);
  --color-text-secondary: var(--gray-500);
  --color-text-tertiary: var(--gray-400);
  --color-text-inverse: var(--white);
  --color-text-link: var(--accent-600);

  --color-accent: var(--accent-600);
  --color-accent-hover: var(--accent-700);
  --color-accent-light: var(--accent-50);

  --color-border: var(--gray-200);
  --color-border-strong: var(--gray-300);
  --color-divider: var(--gray-100);

  --color-error: var(--red-600);
  --color-error-light: var(--red-500);
  --color-success: var(--green-600);
  --color-success-light: var(--green-500);
  --color-warning: var(--amber-600);
  --color-warning-light: var(--amber-500);
}

Component Tokens

:root {
  --button-primary-bg: var(--color-accent);
  --button-primary-text: var(--color-text-inverse);
  --button-primary-hover: var(--color-accent-hover);
  --button-secondary-bg: transparent;
  --button-secondary-border: var(--color-border-strong);
  --button-secondary-text: var(--color-text-primary);

  --card-bg: var(--color-bg-surface);
  --card-border: var(--color-border);
  --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

  --input-bg: var(--color-bg-surface);
  --input-border: var(--color-border);
  --input-border-focus: var(--color-accent);
  --input-text: var(--color-text-primary);
  --input-placeholder: var(--color-text-tertiary);

  --nav-bg: var(--color-bg-surface);
  --nav-active-bg: var(--color-accent-light);
  --nav-active-text: var(--color-accent);
}

3. Typography

  • Font family: [Specific font name], [fallback], system-ui, sans-serif
  • Font source: Google Fonts link or system font
Level Element Size Weight Line Height Letter Spacing
Display Hero headlines 3rem (48px) 700 1.1 -0.02em
H1 Page title 2.25rem (36px) 700 1.2 -0.01em
H2 Section title 1.5rem (24px) 600 1.3 0
H3 Subsection 1.25rem (20px) 600 1.4 0
H4 Card/group title 1.125rem (18px) 600 1.4 0
Body Default text 1rem (16px) 400 1.5 0
Small Captions, meta 0.875rem (14px) 400 1.5 0.01em
XS Labels, badges 0.75rem (12px) 500 1.4 0.02em

4. Spacing & Layout

  • Base unit: 4px (0.25rem)
  • Spacing scale: 1 (4px), 2 (8px), 3 (12px), 4 (16px), 5 (20px), 6 (24px), 8 (32px), 10 (40px), 12 (48px), 16 (64px), 20 (80px), 24 (96px)
  • Content max-width: [1200px / 1280px / 1440px]
  • Grid: [12-column / auto-fit] with [16px / 24px] gap
Breakpoint Name Min Width Columns Padding
Mobile sm 0 1 16px
Tablet md 768px 2 24px
Laptop lg 1024px 3-4 32px
Desktop xl 1280px 4+ 32px

5. Component Styling Defaults

Buttons

  • Border radius: [6px / 8px / full]
  • Padding: 10px 20px (md), 8px 16px (sm), 12px 24px (lg)
  • Font weight: 500
  • Transition: background-color 150ms ease, box-shadow 150ms ease
  • Focus: 2px ring with 2px offset using --color-accent
  • Disabled: opacity 0.5, cursor not-allowed

Cards

  • Border radius: [8px / 12px]
  • Border: 1px solid var(--card-border)
  • Shadow: var(--card-shadow)
  • Padding: 20-24px
  • Hover (if interactive): shadow increase or border-color change

Inputs

  • Height: 40px (md), 36px (sm), 48px (lg)
  • Border radius: 6px
  • Border: 1px solid var(--input-border)
  • Padding: 0 12px
  • Focus: border-color var(--input-border-focus) + 2px ring
  • Error: border-color var(--color-error) + error message below

Navigation

  • Item height: 40px
  • Active: background var(--nav-active-bg), text var(--nav-active-text)
  • Hover: background var(--color-bg-secondary)
  • Transition: background-color 150ms ease

6. Interaction States (MANDATORY)

Loading

  • Use skeleton loaders matching content shape
  • Pulse animation: opacity 0.4 → 1.0, duration 1.5s, ease-in-out
  • Background: var(--color-bg-secondary)

Error

  • Inline message below the element
  • Icon (circle-exclamation) + red text using var(--color-error)
  • Border change on the input/container to var(--color-error)

Empty

  • Centered illustration or icon (64-96px)
  • Heading: "No [items] yet" or similar
  • Descriptive text: one sentence explaining what will appear
  • Primary CTA button: "Create first...", "Add...", "Import..."

Hover

  • Interactive elements: subtle background shift or underline
  • Cards: shadow increase or border-color change
  • Transition: 150ms ease

Focus

  • Visible ring: 2px solid var(--color-accent), 2px offset
  • Applied to all interactive elements (buttons, inputs, links, tabs)
  • Never remove outline without providing alternative focus indicator

Disabled

  • Opacity: 0.5
  • Cursor: not-allowed
  • Title attribute explaining why the element is disabled