@usefidel/design-system 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # @usefidel/design-system
2
+
3
+ The single source of truth for Fidel's brand design tokens.
4
+
5
+ - `tokens/tokens.json` — DTCG (`$value`/`$type`). **The only source of truth.** Change a color here, nowhere else.
6
+ - `tokens/CLASSIFICATION.md` — how every migrated value was classified (canonical / legacy-alias / surface-transform / delete-replace).
7
+ - `dist/*.css` — generated per-surface CSS. Do not edit by hand.
8
+ - `dist/theme.css` — **generated Tailwind v4 `@theme` parser-compatibility output.** It exists so Fidel's own `theme-intake` parser (which reads Tailwind, not raw DTCG) can ingest our brand. It is a compatibility layer, NOT a second source of truth. Native DTCG parsing is a separate follow-up.
9
+ - `dist/fidel.manifest.json` — version boundary: `{ brandKey, tokenSource, generatedCssOutputs, storybookUrl, packageVersion, resolvedSha }`.
10
+
11
+ Surfaces (webapp / extension / landing / admin) are **outputs** of the one Fidel brand, not separate brands. Per-surface density is a declared Style Dictionary platform dimension.
12
+
13
+ ## Build
14
+ `npm ci && npm run build` regenerates all of `dist/`.
package/dist/admin.css ADDED
@@ -0,0 +1,113 @@
1
+ /* GENERATED by @usefidel/design-system — do not edit. Surface: admin. */
2
+ :root {
3
+ --color-bg: #ffffff;
4
+ --color-surface: #fff7ed;
5
+ --color-surface-hover: #ffedd5;
6
+ --color-surface-raised: #ffffff;
7
+ --color-text: #171717;
8
+ --color-text-secondary: #525252;
9
+ --color-text-muted: #a3a3a3;
10
+ --color-border: #e5e5e5;
11
+ --color-border-light: #f5f5f5;
12
+ --color-border-strong: #d4d4d4;
13
+ --color-border-focus: #ea580c;
14
+ --color-accent: #ea580c;
15
+ --color-accent-hover: #c2410c;
16
+ --color-accent-subtle: #ffedd5;
17
+ --color-accent-muted: #fb923c;
18
+ --color-accent-text: #c2410c;
19
+ --color-primary: #171717;
20
+ --color-primary-hover: #262626;
21
+ --color-primary-text: #ffffff;
22
+ --color-critical: #ef4444;
23
+ --color-high: #f59e0b;
24
+ --color-high-bg: #fffbeb;
25
+ --color-high-text: #92400e;
26
+ --color-medium: #94a3b8;
27
+ --color-medium-bg: #f8fafc;
28
+ --color-medium-text: #64748b;
29
+ --color-low: #10b981;
30
+ --color-success: #059669;
31
+ --color-success-bg: #f0fdf4;
32
+ --color-success-text: #15803d;
33
+ --color-warning: #ca8a04;
34
+ --color-warning-bg: #fffbeb;
35
+ --color-warning-text: #92400e;
36
+ --color-warning-border: #fde68a;
37
+ --color-error: #b91c1c;
38
+ --color-error-bg: #fef2f2;
39
+ --color-error-text: #991b1b;
40
+ --color-error-border: #fecaca;
41
+ --color-expected-bg: #f0fdf4;
42
+ --color-expected-text: #15803d;
43
+ --color-actual-bg: #fef2f2;
44
+ --color-actual-text: #dc2626;
45
+ --color-focus: #ea580c;
46
+ --color-info: #1d4ed8;
47
+ --font-display: 'Rethink Sans', system-ui, -apple-system, sans-serif;
48
+ --font-body: 'Rethink Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
49
+ --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
50
+ --radius-xs: 4px;
51
+ --radius-sm: 6px;
52
+ --radius-md: 8px;
53
+ --radius-lg: 12px;
54
+ --radius-xl: 16px;
55
+ --radius-pill: 9999px;
56
+ --radius-full: 9999px;
57
+ --spacing-1: 4px;
58
+ --spacing-2: 8px;
59
+ --spacing-3: 12px;
60
+ --spacing-4: 16px;
61
+ --spacing-5: 20px;
62
+ --spacing-6: 24px;
63
+ --spacing-8: 32px;
64
+ --spacing-10: 40px;
65
+ --spacing-12: 48px;
66
+ --spacing-16: 64px;
67
+ --font-size-body: 14px;
68
+ --font-size-display-2xl: 70px;
69
+ --font-size-display-xl: 60px;
70
+ --font-size-display-lg: 48px;
71
+ --font-size-display-md: 36px;
72
+ --font-size-display-sm: 30px;
73
+ --font-size-display-xs: 24px;
74
+ --font-size-text-xl: 20px;
75
+ --font-size-text-lg: 18px;
76
+ --font-size-text-md: 16px;
77
+ --font-size-text-sm: 14px;
78
+ --font-size-text-xs: 12px;
79
+ --font-size-label-sm: 14px;
80
+ --font-size-label-xs: 12px;
81
+ --line-height-body: 1.6;
82
+ --line-height-display-2xl: 78px;
83
+ --line-height-display-xl: 68px;
84
+ --line-height-display-lg: 56px;
85
+ --line-height-display-md: 44px;
86
+ --line-height-display-sm: 38px;
87
+ --line-height-display-xs: 32px;
88
+ --line-height-text-xl: 28px;
89
+ --line-height-text-lg: 26px;
90
+ --line-height-text-md: 24px;
91
+ --line-height-text-sm: 22px;
92
+ --line-height-text-xs: 18px;
93
+ --line-height-label-sm: 22px;
94
+ --line-height-label-xs: 18px;
95
+ --duration-instant: 80ms;
96
+ --duration-quick: 150ms;
97
+ --duration-moderate: 280ms;
98
+ --duration-slow: 450ms;
99
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
100
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
101
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
102
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.03), 0 2px 4px rgba(0, 0, 0, 0.04);
103
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.04), 0 2px 8px rgba(0, 0, 0, 0.04);
104
+ --shadow-card-hover: 0 2px 4px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.08);
105
+ --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.06), 0 16px 40px rgba(0, 0, 0, 0.1);
106
+ --shadow-pill: 0 1px 2px rgba(15, 23, 42, 0.08);
107
+ --shadow-cta: 0 1px 2px rgba(15, 23, 42, 0.06), 0 4px 12px rgba(15, 23, 42, 0.06);
108
+ --font-weight-regular: 400;
109
+ --font-weight-medium: 500;
110
+ --font-weight-semibold: 600;
111
+ --font-weight-bold: 700;
112
+ --font-weight-extrabold: 800;
113
+ }
@@ -0,0 +1,113 @@
1
+ /* GENERATED by @usefidel/design-system — do not edit. Surface: extension. */
2
+ :root {
3
+ --color-bg: #ffffff;
4
+ --color-surface: #f7f8fa;
5
+ --color-surface-hover: #f1f4f7;
6
+ --color-surface-raised: #ffffff;
7
+ --color-text: #0f172a;
8
+ --color-text-secondary: #475569;
9
+ --color-text-muted: #a3a3a3;
10
+ --color-border: #e2e5ea;
11
+ --color-border-light: #ebeff3;
12
+ --color-border-strong: #d1d5db;
13
+ --color-border-focus: #ea580c;
14
+ --color-accent: #ea580c;
15
+ --color-accent-hover: #c2410c;
16
+ --color-accent-subtle: #ffedd5;
17
+ --color-accent-muted: #fb923c;
18
+ --color-accent-text: #c2410c;
19
+ --color-primary: #0f172a;
20
+ --color-primary-hover: #1e293b;
21
+ --color-primary-text: #ffffff;
22
+ --color-critical: #ef4444;
23
+ --color-high: #f59e0b;
24
+ --color-high-bg: #fffbeb;
25
+ --color-high-text: #92400e;
26
+ --color-medium: #94a3b8;
27
+ --color-medium-bg: #f8fafc;
28
+ --color-medium-text: #64748b;
29
+ --color-low: #10b981;
30
+ --color-success: #059669;
31
+ --color-success-bg: #f0fdf4;
32
+ --color-success-text: #15803d;
33
+ --color-warning: #ca8a04;
34
+ --color-warning-bg: #fffbeb;
35
+ --color-warning-text: #92400e;
36
+ --color-warning-border: #fde68a;
37
+ --color-error: #b91c1c;
38
+ --color-error-bg: #fef2f2;
39
+ --color-error-text: #991b1b;
40
+ --color-error-border: #fecaca;
41
+ --color-expected-bg: #f0fdf4;
42
+ --color-expected-text: #15803d;
43
+ --color-actual-bg: #fef2f2;
44
+ --color-actual-text: #dc2626;
45
+ --color-focus: #ea580c;
46
+ --color-info: #1d4ed8;
47
+ --font-display: 'Rethink Sans', system-ui, -apple-system, sans-serif;
48
+ --font-body: 'Rethink Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
49
+ --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
50
+ --radius-xs: 4px;
51
+ --radius-sm: 6px;
52
+ --radius-md: 8px;
53
+ --radius-lg: 12px;
54
+ --radius-xl: 16px;
55
+ --radius-pill: 20px;
56
+ --radius-full: 9999px;
57
+ --spacing-1: 4px;
58
+ --spacing-2: 8px;
59
+ --spacing-3: 12px;
60
+ --spacing-4: 16px;
61
+ --spacing-5: 20px;
62
+ --spacing-6: 24px;
63
+ --spacing-8: 32px;
64
+ --spacing-10: 40px;
65
+ --spacing-12: 48px;
66
+ --spacing-16: 64px;
67
+ --font-size-body: 13px;
68
+ --font-size-display-2xl: 70px;
69
+ --font-size-display-xl: 60px;
70
+ --font-size-display-lg: 48px;
71
+ --font-size-display-md: 36px;
72
+ --font-size-display-sm: 30px;
73
+ --font-size-display-xs: 24px;
74
+ --font-size-text-xl: 20px;
75
+ --font-size-text-lg: 18px;
76
+ --font-size-text-md: 16px;
77
+ --font-size-text-sm: 14px;
78
+ --font-size-text-xs: 12px;
79
+ --font-size-label-sm: 14px;
80
+ --font-size-label-xs: 12px;
81
+ --line-height-body: 1.5;
82
+ --line-height-display-2xl: 78px;
83
+ --line-height-display-xl: 68px;
84
+ --line-height-display-lg: 56px;
85
+ --line-height-display-md: 44px;
86
+ --line-height-display-sm: 38px;
87
+ --line-height-display-xs: 32px;
88
+ --line-height-text-xl: 28px;
89
+ --line-height-text-lg: 26px;
90
+ --line-height-text-md: 24px;
91
+ --line-height-text-sm: 22px;
92
+ --line-height-text-xs: 18px;
93
+ --line-height-label-sm: 22px;
94
+ --line-height-label-xs: 18px;
95
+ --duration-instant: 80ms;
96
+ --duration-quick: 150ms;
97
+ --duration-moderate: 280ms;
98
+ --duration-slow: 450ms;
99
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
100
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
101
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
102
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.03), 0 2px 4px rgba(0, 0, 0, 0.04);
103
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.04), 0 2px 8px rgba(0, 0, 0, 0.04);
104
+ --shadow-card-hover: 0 2px 4px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.08);
105
+ --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.06), 0 16px 40px rgba(0, 0, 0, 0.1);
106
+ --shadow-pill: 0 1px 2px rgba(15, 23, 42, 0.08);
107
+ --shadow-cta: 0 1px 2px rgba(15, 23, 42, 0.06), 0 4px 12px rgba(15, 23, 42, 0.06);
108
+ --font-weight-regular: 400;
109
+ --font-weight-medium: 500;
110
+ --font-weight-semibold: 600;
111
+ --font-weight-bold: 700;
112
+ --font-weight-extrabold: 800;
113
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "brandKey": "default",
3
+ "tokenSource": "tokens/tokens.json",
4
+ "generatedCssOutputs": [
5
+ "admin.css",
6
+ "extension.css",
7
+ "index.css",
8
+ "landing.css",
9
+ "theme.css",
10
+ "webapp.css"
11
+ ],
12
+ "storybookUrl": null,
13
+ "packageVersion": "0.2.0",
14
+ "resolvedSha": "c78cdac9bf6848d4e37053d17dd1bf15ded0aa40"
15
+ }
package/dist/index.cjs ADDED
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ Button: () => Button
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+
27
+ // src/components/Button/Button.tsx
28
+ var import_jsx_runtime = require("react/jsx-runtime");
29
+ function Button({
30
+ variant = "primary",
31
+ size = "medium",
32
+ leftIcon,
33
+ rightIcon,
34
+ type = "button",
35
+ className,
36
+ children,
37
+ ...rest
38
+ }) {
39
+ const classes = [
40
+ "fds-button",
41
+ `fds-button--${variant}`,
42
+ `fds-button--${size}`,
43
+ className
44
+ ].filter(Boolean).join(" ");
45
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type, className: classes, ...rest, children: [
46
+ leftIcon != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "fds-button__icon", "aria-hidden": "true", children: leftIcon }),
47
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "fds-button__label", children }),
48
+ rightIcon != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "fds-button__icon", "aria-hidden": "true", children: rightIcon })
49
+ ] });
50
+ }
51
+ // Annotate the CommonJS export names for ESM import in node:
52
+ 0 && (module.exports = {
53
+ Button
54
+ });
package/dist/index.css ADDED
@@ -0,0 +1,125 @@
1
+ /* src/components/Button/button.css */
2
+ .fds-button {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ gap: var(--spacing-2, 8px);
7
+ border: 1px solid transparent;
8
+ border-radius: var(--radius-sm, 6px);
9
+ font-family: var(--font-body, "Rethink Sans", system-ui, sans-serif);
10
+ font-weight: var(--font-weight-medium, 500);
11
+ white-space: nowrap;
12
+ cursor: pointer;
13
+ user-select: none;
14
+ text-decoration: none;
15
+ transition:
16
+ background-color var(--duration-quick, 150ms) var(--ease-out, ease),
17
+ border-color var(--duration-quick, 150ms) var(--ease-out, ease),
18
+ color var(--duration-quick, 150ms) var(--ease-out, ease);
19
+ }
20
+ .fds-button:focus-visible {
21
+ outline: 2px solid var(--color-accent, #ea580c);
22
+ outline-offset: 2px;
23
+ }
24
+ .fds-button__icon {
25
+ display: inline-flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ flex-shrink: 0;
29
+ width: 20px;
30
+ height: 20px;
31
+ }
32
+ .fds-button__icon > svg,
33
+ .fds-button__icon > img {
34
+ width: 100%;
35
+ height: 100%;
36
+ display: block;
37
+ }
38
+ .fds-button__label {
39
+ display: inline-block;
40
+ }
41
+ .fds-button--x-small {
42
+ padding: 6px 12px;
43
+ font-size: 12px;
44
+ line-height: 18px;
45
+ letter-spacing: 0;
46
+ }
47
+ .fds-button--small {
48
+ padding: 8px 16px;
49
+ font-size: 14px;
50
+ line-height: 22px;
51
+ letter-spacing: 0;
52
+ }
53
+ .fds-button--medium {
54
+ padding: 10px 20px;
55
+ font-size: 16px;
56
+ line-height: 24px;
57
+ letter-spacing: -0.18px;
58
+ }
59
+ .fds-button--big {
60
+ padding: 12px 24px;
61
+ font-size: 16px;
62
+ line-height: 24px;
63
+ letter-spacing: -0.18px;
64
+ }
65
+ .fds-button--primary {
66
+ background-color: var(--color-accent, #ea580c);
67
+ color: #ffffff;
68
+ }
69
+ .fds-button--primary:hover:not(:disabled) {
70
+ background-color: var(--color-accent-hover, #c2410c);
71
+ }
72
+ .fds-button--primary:active:not(:disabled) {
73
+ background-color: #9a3412;
74
+ }
75
+ .fds-button--primary:disabled {
76
+ background-color: var(--color-surface, #fff7ed);
77
+ color: var(--color-text-secondary, #525252);
78
+ cursor: not-allowed;
79
+ }
80
+ .fds-button--outlined {
81
+ background-color: #ffffff;
82
+ border-color: var(--color-border-strong, #d4d4d4);
83
+ color: #404040;
84
+ }
85
+ .fds-button--outlined:hover:not(:disabled) {
86
+ background-color: #fafafa;
87
+ }
88
+ .fds-button--outlined:active:not(:disabled) {
89
+ background-color: #f5f5f5;
90
+ }
91
+ .fds-button--outlined:disabled {
92
+ background-color: #ffffff;
93
+ border-color: #e5e5e5;
94
+ color: #a3a3a3;
95
+ cursor: not-allowed;
96
+ }
97
+ .fds-button--text {
98
+ background-color: transparent;
99
+ color: #404040;
100
+ }
101
+ .fds-button--text:hover:not(:disabled) {
102
+ background-color: #fafafa;
103
+ }
104
+ .fds-button--text:active:not(:disabled) {
105
+ background-color: #f5f5f5;
106
+ }
107
+ .fds-button--text:disabled {
108
+ color: #a3a3a3;
109
+ cursor: not-allowed;
110
+ }
111
+ .fds-button--neutral {
112
+ background-color: #fafafa;
113
+ color: #404040;
114
+ }
115
+ .fds-button--neutral:hover:not(:disabled) {
116
+ background-color: #f5f5f5;
117
+ }
118
+ .fds-button--neutral:active:not(:disabled) {
119
+ background-color: #e5e5e5;
120
+ }
121
+ .fds-button--neutral:disabled {
122
+ background-color: #fafafa;
123
+ color: #a3a3a3;
124
+ cursor: not-allowed;
125
+ }
@@ -0,0 +1,23 @@
1
+ import * as react from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
3
+
4
+ type ButtonVariant = 'primary' | 'outlined' | 'text' | 'neutral';
5
+ type ButtonSize = 'x-small' | 'small' | 'medium' | 'big';
6
+ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
7
+ /** Visual style. @default 'primary' */
8
+ variant?: ButtonVariant;
9
+ /** Size step. @default 'medium' */
10
+ size?: ButtonSize;
11
+ /** Optional leading icon (rendered in a 20px slot). */
12
+ leftIcon?: ReactNode;
13
+ /** Optional trailing icon (rendered in a 20px slot). */
14
+ rightIcon?: ReactNode;
15
+ }
16
+ /**
17
+ * Fidel design-system Button. Renders a native `<button>`; hover/active/disabled
18
+ * are handled in CSS, so all standard button attributes (onClick, type, aria-*,
19
+ * disabled, …) pass straight through.
20
+ */
21
+ declare function Button({ variant, size, leftIcon, rightIcon, type, className, children, ...rest }: ButtonProps): react.JSX.Element;
22
+
23
+ export { Button, type ButtonProps, type ButtonSize, type ButtonVariant };
@@ -0,0 +1,23 @@
1
+ import * as react from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
3
+
4
+ type ButtonVariant = 'primary' | 'outlined' | 'text' | 'neutral';
5
+ type ButtonSize = 'x-small' | 'small' | 'medium' | 'big';
6
+ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
7
+ /** Visual style. @default 'primary' */
8
+ variant?: ButtonVariant;
9
+ /** Size step. @default 'medium' */
10
+ size?: ButtonSize;
11
+ /** Optional leading icon (rendered in a 20px slot). */
12
+ leftIcon?: ReactNode;
13
+ /** Optional trailing icon (rendered in a 20px slot). */
14
+ rightIcon?: ReactNode;
15
+ }
16
+ /**
17
+ * Fidel design-system Button. Renders a native `<button>`; hover/active/disabled
18
+ * are handled in CSS, so all standard button attributes (onClick, type, aria-*,
19
+ * disabled, …) pass straight through.
20
+ */
21
+ declare function Button({ variant, size, leftIcon, rightIcon, type, className, children, ...rest }: ButtonProps): react.JSX.Element;
22
+
23
+ export { Button, type ButtonProps, type ButtonSize, type ButtonVariant };
package/dist/index.js ADDED
@@ -0,0 +1,27 @@
1
+ // src/components/Button/Button.tsx
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ function Button({
4
+ variant = "primary",
5
+ size = "medium",
6
+ leftIcon,
7
+ rightIcon,
8
+ type = "button",
9
+ className,
10
+ children,
11
+ ...rest
12
+ }) {
13
+ const classes = [
14
+ "fds-button",
15
+ `fds-button--${variant}`,
16
+ `fds-button--${size}`,
17
+ className
18
+ ].filter(Boolean).join(" ");
19
+ return /* @__PURE__ */ jsxs("button", { type, className: classes, ...rest, children: [
20
+ leftIcon != null && /* @__PURE__ */ jsx("span", { className: "fds-button__icon", "aria-hidden": "true", children: leftIcon }),
21
+ children != null && /* @__PURE__ */ jsx("span", { className: "fds-button__label", children }),
22
+ rightIcon != null && /* @__PURE__ */ jsx("span", { className: "fds-button__icon", "aria-hidden": "true", children: rightIcon })
23
+ ] });
24
+ }
25
+ export {
26
+ Button
27
+ };
@@ -0,0 +1,113 @@
1
+ /* GENERATED by @usefidel/design-system — do not edit. Surface: landing. */
2
+ :root {
3
+ --color-bg: #ffffff;
4
+ --color-surface: #fff7ed;
5
+ --color-surface-hover: #ffedd5;
6
+ --color-surface-raised: #ffffff;
7
+ --color-text: #171717;
8
+ --color-text-secondary: #525252;
9
+ --color-text-muted: #a3a3a3;
10
+ --color-border: #e5e5e5;
11
+ --color-border-light: #f5f5f5;
12
+ --color-border-strong: #d4d4d4;
13
+ --color-border-focus: #ea580c;
14
+ --color-accent: #ea580c;
15
+ --color-accent-hover: #c2410c;
16
+ --color-accent-subtle: #ffedd5;
17
+ --color-accent-muted: #fb923c;
18
+ --color-accent-text: #c2410c;
19
+ --color-primary: #171717;
20
+ --color-primary-hover: #262626;
21
+ --color-primary-text: #ffffff;
22
+ --color-critical: #ef4444;
23
+ --color-high: #f59e0b;
24
+ --color-high-bg: #fffbeb;
25
+ --color-high-text: #92400e;
26
+ --color-medium: #94a3b8;
27
+ --color-medium-bg: #f8fafc;
28
+ --color-medium-text: #64748b;
29
+ --color-low: #10b981;
30
+ --color-success: #059669;
31
+ --color-success-bg: #f0fdf4;
32
+ --color-success-text: #15803d;
33
+ --color-warning: #ca8a04;
34
+ --color-warning-bg: #fffbeb;
35
+ --color-warning-text: #92400e;
36
+ --color-warning-border: #fde68a;
37
+ --color-error: #b91c1c;
38
+ --color-error-bg: #fef2f2;
39
+ --color-error-text: #991b1b;
40
+ --color-error-border: #fecaca;
41
+ --color-expected-bg: #f0fdf4;
42
+ --color-expected-text: #15803d;
43
+ --color-actual-bg: #fef2f2;
44
+ --color-actual-text: #dc2626;
45
+ --color-focus: #ea580c;
46
+ --color-info: #1d4ed8;
47
+ --font-display: 'Rethink Sans', system-ui, -apple-system, sans-serif;
48
+ --font-body: 'Rethink Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
49
+ --font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
50
+ --radius-xs: 4px;
51
+ --radius-sm: 6px;
52
+ --radius-md: 8px;
53
+ --radius-lg: 12px;
54
+ --radius-xl: 16px;
55
+ --radius-pill: 9999px;
56
+ --radius-full: 9999px;
57
+ --spacing-1: 4px;
58
+ --spacing-2: 8px;
59
+ --spacing-3: 12px;
60
+ --spacing-4: 16px;
61
+ --spacing-5: 20px;
62
+ --spacing-6: 24px;
63
+ --spacing-8: 32px;
64
+ --spacing-10: 40px;
65
+ --spacing-12: 48px;
66
+ --spacing-16: 64px;
67
+ --font-size-body: 14px;
68
+ --font-size-display-2xl: 70px;
69
+ --font-size-display-xl: 60px;
70
+ --font-size-display-lg: 48px;
71
+ --font-size-display-md: 36px;
72
+ --font-size-display-sm: 30px;
73
+ --font-size-display-xs: 24px;
74
+ --font-size-text-xl: 20px;
75
+ --font-size-text-lg: 18px;
76
+ --font-size-text-md: 16px;
77
+ --font-size-text-sm: 14px;
78
+ --font-size-text-xs: 12px;
79
+ --font-size-label-sm: 14px;
80
+ --font-size-label-xs: 12px;
81
+ --line-height-body: 1.6;
82
+ --line-height-display-2xl: 78px;
83
+ --line-height-display-xl: 68px;
84
+ --line-height-display-lg: 56px;
85
+ --line-height-display-md: 44px;
86
+ --line-height-display-sm: 38px;
87
+ --line-height-display-xs: 32px;
88
+ --line-height-text-xl: 28px;
89
+ --line-height-text-lg: 26px;
90
+ --line-height-text-md: 24px;
91
+ --line-height-text-sm: 22px;
92
+ --line-height-text-xs: 18px;
93
+ --line-height-label-sm: 22px;
94
+ --line-height-label-xs: 18px;
95
+ --duration-instant: 80ms;
96
+ --duration-quick: 150ms;
97
+ --duration-moderate: 280ms;
98
+ --duration-slow: 450ms;
99
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
100
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
101
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
102
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.03), 0 2px 4px rgba(0, 0, 0, 0.04);
103
+ --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.04), 0 2px 8px rgba(0, 0, 0, 0.04);
104
+ --shadow-card-hover: 0 2px 4px rgba(0, 0, 0, 0.04), 0 8px 24px rgba(0, 0, 0, 0.08);
105
+ --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.06), 0 16px 40px rgba(0, 0, 0, 0.1);
106
+ --shadow-pill: 0 1px 2px rgba(15, 23, 42, 0.08);
107
+ --shadow-cta: 0 1px 2px rgba(15, 23, 42, 0.06), 0 4px 12px rgba(15, 23, 42, 0.06);
108
+ --font-weight-regular: 400;
109
+ --font-weight-medium: 500;
110
+ --font-weight-semibold: 600;
111
+ --font-weight-bold: 700;
112
+ --font-weight-extrabold: 800;
113
+ }