File
Blob: .impeccable/design.json
| 1 | { |
| 2 | "schemaVersion": 2, |
| 3 | "generatedAt": "2026-09-11T10:18:12.999704+00:00", |
| 4 | "title": "Specter design system", |
| 5 | "extensions": { |
| 6 | "colorMeta": { |
| 7 | "accent-500": { |
| 8 | "role": "primary", |
| 9 | "displayName": "Muted cyan" |
| 10 | } |
| 11 | }, |
| 12 | "motion": [ |
| 13 | { |
| 14 | "name": "press", |
| 15 | "value": "transform 75ms", |
| 16 | "purpose": "Button press feedback." |
| 17 | } |
| 18 | ], |
| 19 | "breakpoints": [ |
| 20 | { |
| 21 | "name": "sm", |
| 22 | "value": "640px" |
| 23 | } |
| 24 | ] |
| 25 | }, |
| 26 | "components": [ |
| 27 | { |
| 28 | "name": "Primary button", |
| 29 | "kind": "button", |
| 30 | "description": "Shared Button variant.", |
| 31 | "html": "<button type=\"button\" class=\"ds-button-0\">Synchronize</button>", |
| 32 | "css": ".ds-button-0{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:6px 12px;border:1px solid;border-radius:6px;font:600 14px/20px \"Hanken Grotesk\",sans-serif;cursor:pointer;transition:transform 75ms;border-color:var(--color-accent-500);background:var(--color-accent-500);color:var(--color-chrome);}.ds-button-0:hover{border-color:var(--color-accent-400);background:var(--color-accent-400);}.ds-button-0:active{transform:scale(.98)}.ds-button-0:focus-visible{outline:2px solid var(--color-accent-300);outline-offset:3px}.ds-button-0:disabled{opacity:.5;pointer-events:none}@media(prefers-reduced-motion:reduce){.ds-button-0{transition:none}.ds-button-0:active{transform:none}}", |
| 33 | "refersTo": "button-primary" |
| 34 | }, |
| 35 | { |
| 36 | "name": "Secondary button", |
| 37 | "kind": "button", |
| 38 | "description": "Shared Button variant.", |
| 39 | "html": "<button type=\"button\" class=\"ds-button-1\">Refresh</button>", |
| 40 | "css": ".ds-button-1{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:6px 12px;border:1px solid;border-radius:6px;font:600 14px/20px \"Hanken Grotesk\",sans-serif;cursor:pointer;transition:transform 75ms;border-color:var(--color-zinc-500);background:var(--color-surface);color:var(--color-foreground);}.ds-button-1:hover{border-color:var(--color-muted);background:var(--color-line);}.ds-button-1:active{transform:scale(.98)}.ds-button-1:focus-visible{outline:2px solid var(--color-accent-300);outline-offset:3px}.ds-button-1:disabled{opacity:.5;pointer-events:none}@media(prefers-reduced-motion:reduce){.ds-button-1{transition:none}.ds-button-1:active{transform:none}}", |
| 41 | "refersTo": "button-secondary" |
| 42 | }, |
| 43 | { |
| 44 | "name": "Danger button", |
| 45 | "kind": "button", |
| 46 | "description": "Shared Button variant.", |
| 47 | "html": "<button type=\"button\" class=\"ds-button-2\">Release</button>", |
| 48 | "css": ".ds-button-2{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:6px 12px;border:1px solid;border-radius:6px;font:600 14px/20px \"Hanken Grotesk\",sans-serif;cursor:pointer;transition:transform 75ms;border-color:color-mix(in oklab,var(--color-danger) 70%,transparent);background:color-mix(in oklab,var(--color-danger) 10%,transparent);color:var(--color-danger);}.ds-button-2:hover{border-color:var(--color-danger);background:color-mix(in oklab,var(--color-danger) 20%,transparent);}.ds-button-2:active{transform:scale(.98)}.ds-button-2:focus-visible{outline:2px solid var(--color-accent-300);outline-offset:3px}.ds-button-2:disabled{opacity:.5;pointer-events:none}@media(prefers-reduced-motion:reduce){.ds-button-2{transition:none}.ds-button-2:active{transform:none}}" |
| 49 | }, |
| 50 | { |
| 51 | "name": "Ghost button", |
| 52 | "kind": "button", |
| 53 | "description": "Shared Button variant.", |
| 54 | "html": "<button type=\"button\" class=\"ds-button-3\">Cancel</button>", |
| 55 | "css": ".ds-button-3{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:6px 12px;border:1px solid;border-radius:6px;font:600 14px/20px \"Hanken Grotesk\",sans-serif;cursor:pointer;transition:transform 75ms;border-color:transparent;background:transparent;color:var(--color-muted);}.ds-button-3:hover{background:var(--color-surface);color:var(--color-foreground);}.ds-button-3:active{transform:scale(.98)}.ds-button-3:focus-visible{outline:2px solid var(--color-accent-300);outline-offset:3px}.ds-button-3:disabled{opacity:.5;pointer-events:none}@media(prefers-reduced-motion:reduce){.ds-button-3{transition:none}.ds-button-3:active{transform:none}}" |
| 56 | }, |
| 57 | { |
| 58 | "name": "Domain input", |
| 59 | "kind": "input", |
| 60 | "refersTo": "input", |
| 61 | "description": "Shared input styling.", |
| 62 | "html": "<label class=\"ds-field\">Domain<input class=\"ds-input\" placeholder=\"app.example.com\"></label>", |
| 63 | "css": ".ds-field{display:grid;gap:6px;color:var(--color-foreground);font:450 15px/1.5 \"Hanken Grotesk\",sans-serif}.ds-input{box-sizing:border-box;width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--color-zinc-500);border-radius:6px;background:var(--color-chrome);color:var(--color-foreground);font:450 14px/20px \"Hanken Grotesk\",sans-serif}.ds-input::placeholder{color:var(--color-muted)}.ds-input:focus-visible{outline:2px solid var(--color-accent-300);outline-offset:3px}.ds-input:disabled{opacity:.5}" |
| 64 | }, |
| 65 | { |
| 66 | "name": "Operator navigation", |
| 67 | "kind": "nav", |
| 68 | "description": "Links between operator views.", |
| 69 | "html": "<nav class=\"ds-nav\" aria-label=\"Operator\"><a href=\"#\" aria-current=\"page\">Overview</a><a href=\"#\">Clients</a></nav>", |
| 70 | "css": ".ds-nav{display:flex;flex-wrap:wrap;gap:4px}.ds-nav a{display:inline-flex;align-items:center;min-height:40px;padding:0 12px;border-radius:6px;color:var(--color-muted);font:500 14px/20px \"Hanken Grotesk\",sans-serif;text-decoration:none}.ds-nav a:hover{background:var(--color-surface)}.ds-nav a[aria-current]{background:var(--color-surface);color:var(--color-accent-300)}.ds-nav a:focus-visible{outline:2px solid var(--color-accent-300);outline-offset:3px}" |
| 71 | } |
| 72 | ], |
| 73 | "narrative": { |
| 74 | "northStar": "Compact operating tools", |
| 75 | "overview": "Compact operating tools: data and actions first, optional help, concise feedback.", |
| 76 | "dos": [ |
| 77 | "Keep loading, empty, failed, and stale states distinct.", |
| 78 | "Preserve useful data on refresh failure.", |
| 79 | "Show saved state and publication separately." |
| 80 | ], |
| 81 | "donts": [ |
| 82 | "Do not add jump navigation for sections already visible on a short page." |
| 83 | ] |
| 84 | } |
| 85 | } |