@aspect-ops/exon-ui 0.0.1

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.
Files changed (106) hide show
  1. package/dist/components/Badge/Badge.svelte +60 -0
  2. package/dist/components/Badge/Badge.svelte.d.ts +9 -0
  3. package/dist/components/Badge/index.d.ts +2 -0
  4. package/dist/components/Badge/index.js +1 -0
  5. package/dist/components/BottomNav/BottomNav.svelte +128 -0
  6. package/dist/components/BottomNav/BottomNav.svelte.d.ts +8 -0
  7. package/dist/components/BottomNav/BottomNavItem.svelte +133 -0
  8. package/dist/components/BottomNav/BottomNavItem.svelte.d.ts +8 -0
  9. package/dist/components/Breadcrumbs/BreadcrumbItem.svelte +65 -0
  10. package/dist/components/Breadcrumbs/BreadcrumbItem.svelte.d.ts +7 -0
  11. package/dist/components/Breadcrumbs/BreadcrumbSeparator.svelte +27 -0
  12. package/dist/components/Breadcrumbs/BreadcrumbSeparator.svelte.d.ts +7 -0
  13. package/dist/components/Breadcrumbs/Breadcrumbs.svelte +114 -0
  14. package/dist/components/Breadcrumbs/Breadcrumbs.svelte.d.ts +8 -0
  15. package/dist/components/Button/Button.svelte +209 -0
  16. package/dist/components/Button/Button.svelte.d.ts +14 -0
  17. package/dist/components/Button/index.d.ts +2 -0
  18. package/dist/components/Button/index.js +1 -0
  19. package/dist/components/Checkbox/Checkbox.svelte +166 -0
  20. package/dist/components/Checkbox/Checkbox.svelte.d.ts +16 -0
  21. package/dist/components/Checkbox/CheckboxGroup.svelte +55 -0
  22. package/dist/components/Checkbox/CheckboxGroup.svelte.d.ts +12 -0
  23. package/dist/components/Checkbox/index.d.ts +2 -0
  24. package/dist/components/Checkbox/index.js +2 -0
  25. package/dist/components/FormField/FormField.svelte +101 -0
  26. package/dist/components/FormField/FormField.svelte.d.ts +13 -0
  27. package/dist/components/FormField/index.d.ts +1 -0
  28. package/dist/components/FormField/index.js +1 -0
  29. package/dist/components/Icon/Icon.svelte +47 -0
  30. package/dist/components/Icon/Icon.svelte.d.ts +11 -0
  31. package/dist/components/Icon/index.d.ts +2 -0
  32. package/dist/components/Icon/index.js +1 -0
  33. package/dist/components/Link/Link.svelte +56 -0
  34. package/dist/components/Link/Link.svelte.d.ts +9 -0
  35. package/dist/components/Link/index.d.ts +2 -0
  36. package/dist/components/Link/index.js +1 -0
  37. package/dist/components/Menu/Menu.svelte +14 -0
  38. package/dist/components/Menu/Menu.svelte.d.ts +7 -0
  39. package/dist/components/Menu/MenuContent.svelte +71 -0
  40. package/dist/components/Menu/MenuContent.svelte.d.ts +10 -0
  41. package/dist/components/Menu/MenuItem.svelte +73 -0
  42. package/dist/components/Menu/MenuItem.svelte.d.ts +7 -0
  43. package/dist/components/Menu/MenuSeparator.svelte +19 -0
  44. package/dist/components/Menu/MenuSeparator.svelte.d.ts +6 -0
  45. package/dist/components/Menu/MenuSub.svelte +14 -0
  46. package/dist/components/Menu/MenuSub.svelte.d.ts +7 -0
  47. package/dist/components/Menu/MenuSubContent.svelte +60 -0
  48. package/dist/components/Menu/MenuSubContent.svelte.d.ts +7 -0
  49. package/dist/components/Menu/MenuSubTrigger.svelte +84 -0
  50. package/dist/components/Menu/MenuSubTrigger.svelte.d.ts +7 -0
  51. package/dist/components/Menu/MenuTrigger.svelte +32 -0
  52. package/dist/components/Menu/MenuTrigger.svelte.d.ts +7 -0
  53. package/dist/components/Navbar/NavItem.svelte +99 -0
  54. package/dist/components/Navbar/NavItem.svelte.d.ts +8 -0
  55. package/dist/components/Navbar/Navbar.svelte +243 -0
  56. package/dist/components/Navbar/Navbar.svelte.d.ts +10 -0
  57. package/dist/components/Radio/Radio.svelte +93 -0
  58. package/dist/components/Radio/Radio.svelte.d.ts +10 -0
  59. package/dist/components/Radio/RadioGroup.svelte +72 -0
  60. package/dist/components/Radio/RadioGroup.svelte.d.ts +14 -0
  61. package/dist/components/Radio/index.d.ts +2 -0
  62. package/dist/components/Radio/index.js +2 -0
  63. package/dist/components/Select/Select.svelte +251 -0
  64. package/dist/components/Select/Select.svelte.d.ts +17 -0
  65. package/dist/components/Select/index.d.ts +1 -0
  66. package/dist/components/Select/index.js +1 -0
  67. package/dist/components/Sidebar/Sidebar.svelte +48 -0
  68. package/dist/components/Sidebar/Sidebar.svelte.d.ts +7 -0
  69. package/dist/components/Sidebar/SidebarGroup.svelte +141 -0
  70. package/dist/components/Sidebar/SidebarGroup.svelte.d.ts +7 -0
  71. package/dist/components/Sidebar/SidebarItem.svelte +151 -0
  72. package/dist/components/Sidebar/SidebarItem.svelte.d.ts +8 -0
  73. package/dist/components/Switch/Switch.svelte +120 -0
  74. package/dist/components/Switch/Switch.svelte.d.ts +13 -0
  75. package/dist/components/Switch/index.d.ts +1 -0
  76. package/dist/components/Switch/index.js +1 -0
  77. package/dist/components/Tabs/TabContent.svelte +91 -0
  78. package/dist/components/Tabs/TabContent.svelte.d.ts +7 -0
  79. package/dist/components/Tabs/TabList.svelte +46 -0
  80. package/dist/components/Tabs/TabList.svelte.d.ts +7 -0
  81. package/dist/components/Tabs/TabTrigger.svelte +68 -0
  82. package/dist/components/Tabs/TabTrigger.svelte.d.ts +7 -0
  83. package/dist/components/Tabs/Tabs.svelte +69 -0
  84. package/dist/components/Tabs/Tabs.svelte.d.ts +7 -0
  85. package/dist/components/TextInput/TextInput.svelte +200 -0
  86. package/dist/components/TextInput/TextInput.svelte.d.ts +35 -0
  87. package/dist/components/TextInput/index.d.ts +1 -0
  88. package/dist/components/TextInput/index.js +1 -0
  89. package/dist/components/Textarea/Textarea.svelte +198 -0
  90. package/dist/components/Textarea/Textarea.svelte.d.ts +33 -0
  91. package/dist/components/Textarea/index.d.ts +1 -0
  92. package/dist/components/Textarea/index.js +1 -0
  93. package/dist/components/Typography/Typography.svelte +99 -0
  94. package/dist/components/Typography/Typography.svelte.d.ts +10 -0
  95. package/dist/components/Typography/index.d.ts +2 -0
  96. package/dist/components/Typography/index.js +1 -0
  97. package/dist/index.d.ts +37 -0
  98. package/dist/index.js +41 -0
  99. package/dist/styles/tokens.css +431 -0
  100. package/dist/test-setup.d.ts +1 -0
  101. package/dist/test-setup.js +1 -0
  102. package/dist/types/index.d.ts +129 -0
  103. package/dist/types/index.js +1 -0
  104. package/dist/types/navigation.d.ts +118 -0
  105. package/dist/types/navigation.js +1 -0
  106. package/package.json +130 -0
@@ -0,0 +1,99 @@
1
+ <script lang="ts">
2
+ import type { TypographyVariant } from '../../types/index.js';
3
+
4
+ interface Props {
5
+ variant?: TypographyVariant;
6
+ as?: string;
7
+ class?: string;
8
+ children?: import('svelte').Snippet;
9
+ }
10
+
11
+ let { variant = 'body', as, class: className = '', children }: Props = $props();
12
+
13
+ // Map variant to default HTML element
14
+ const variantToElement: Record<TypographyVariant, string> = {
15
+ h1: 'h1',
16
+ h2: 'h2',
17
+ h3: 'h3',
18
+ h4: 'h4',
19
+ h5: 'h5',
20
+ h6: 'h6',
21
+ 'body-lg': 'p',
22
+ body: 'p',
23
+ 'body-sm': 'p',
24
+ caption: 'span'
25
+ };
26
+
27
+ const element = $derived(as || variantToElement[variant]);
28
+ </script>
29
+
30
+ <svelte:element this={element} class="typography typography--{variant} {className}">
31
+ {#if children}
32
+ {@render children()}
33
+ {/if}
34
+ </svelte:element>
35
+
36
+ <style>
37
+ .typography {
38
+ margin: 0;
39
+ font-family: inherit;
40
+ color: var(--color-text, #1f2937);
41
+ }
42
+
43
+ .typography--h1 {
44
+ font-size: var(--text-4xl, 2.25rem);
45
+ font-weight: 700;
46
+ line-height: 1.2;
47
+ }
48
+
49
+ .typography--h2 {
50
+ font-size: var(--text-3xl, 1.875rem);
51
+ font-weight: 700;
52
+ line-height: 1.25;
53
+ }
54
+
55
+ .typography--h3 {
56
+ font-size: var(--text-2xl, 1.5rem);
57
+ font-weight: 600;
58
+ line-height: 1.3;
59
+ }
60
+
61
+ .typography--h4 {
62
+ font-size: var(--text-xl, 1.25rem);
63
+ font-weight: 600;
64
+ line-height: 1.4;
65
+ }
66
+
67
+ .typography--h5 {
68
+ font-size: var(--text-lg, 1.125rem);
69
+ font-weight: 600;
70
+ line-height: 1.4;
71
+ }
72
+
73
+ .typography--h6 {
74
+ font-size: var(--text-base, 1rem);
75
+ font-weight: 600;
76
+ line-height: 1.5;
77
+ }
78
+
79
+ .typography--body-lg {
80
+ font-size: var(--text-lg, 1.125rem);
81
+ line-height: 1.6;
82
+ }
83
+
84
+ .typography--body {
85
+ font-size: var(--text-base, 1rem);
86
+ line-height: 1.6;
87
+ }
88
+
89
+ .typography--body-sm {
90
+ font-size: var(--text-sm, 0.875rem);
91
+ line-height: 1.5;
92
+ }
93
+
94
+ .typography--caption {
95
+ font-size: var(--text-xs, 0.75rem);
96
+ line-height: 1.4;
97
+ color: var(--color-text-muted, #6b7280);
98
+ }
99
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { TypographyVariant } from '../../types/index.js';
2
+ interface Props {
3
+ variant?: TypographyVariant;
4
+ as?: string;
5
+ class?: string;
6
+ children?: import('svelte').Snippet;
7
+ }
8
+ declare const Typography: import("svelte").Component<Props, {}, "">;
9
+ type Typography = ReturnType<typeof Typography>;
10
+ export default Typography;
@@ -0,0 +1,2 @@
1
+ export { default as Typography } from './Typography.svelte';
2
+ export type { TypographyProps, TypographyVariant } from '../../types/index.js';
@@ -0,0 +1 @@
1
+ export { default as Typography } from './Typography.svelte';
@@ -0,0 +1,37 @@
1
+ export { default as Button } from './components/Button/Button.svelte';
2
+ export { default as Typography } from './components/Typography/Typography.svelte';
3
+ export { default as Icon } from './components/Icon/Icon.svelte';
4
+ export { default as Badge } from './components/Badge/Badge.svelte';
5
+ export { default as Link } from './components/Link/Link.svelte';
6
+ export { default as FormField } from './components/FormField/FormField.svelte';
7
+ export { default as TextInput } from './components/TextInput/TextInput.svelte';
8
+ export { default as Textarea } from './components/Textarea/Textarea.svelte';
9
+ export { default as Select } from './components/Select/Select.svelte';
10
+ export { default as Checkbox } from './components/Checkbox/Checkbox.svelte';
11
+ export { default as CheckboxGroup } from './components/Checkbox/CheckboxGroup.svelte';
12
+ export { default as Radio } from './components/Radio/Radio.svelte';
13
+ export { default as RadioGroup } from './components/Radio/RadioGroup.svelte';
14
+ export { default as Switch } from './components/Switch/Switch.svelte';
15
+ export { default as Tabs } from './components/Tabs/Tabs.svelte';
16
+ export { default as TabList } from './components/Tabs/TabList.svelte';
17
+ export { default as TabTrigger } from './components/Tabs/TabTrigger.svelte';
18
+ export { default as TabContent } from './components/Tabs/TabContent.svelte';
19
+ export { default as Menu } from './components/Menu/Menu.svelte';
20
+ export { default as MenuTrigger } from './components/Menu/MenuTrigger.svelte';
21
+ export { default as MenuContent } from './components/Menu/MenuContent.svelte';
22
+ export { default as MenuItem } from './components/Menu/MenuItem.svelte';
23
+ export { default as MenuSeparator } from './components/Menu/MenuSeparator.svelte';
24
+ export { default as MenuSub } from './components/Menu/MenuSub.svelte';
25
+ export { default as MenuSubTrigger } from './components/Menu/MenuSubTrigger.svelte';
26
+ export { default as MenuSubContent } from './components/Menu/MenuSubContent.svelte';
27
+ export { default as Breadcrumbs } from './components/Breadcrumbs/Breadcrumbs.svelte';
28
+ export { default as BreadcrumbItem } from './components/Breadcrumbs/BreadcrumbItem.svelte';
29
+ export { default as BreadcrumbSeparator } from './components/Breadcrumbs/BreadcrumbSeparator.svelte';
30
+ export { default as BottomNav } from './components/BottomNav/BottomNav.svelte';
31
+ export { default as BottomNavItem } from './components/BottomNav/BottomNavItem.svelte';
32
+ export { default as Navbar } from './components/Navbar/Navbar.svelte';
33
+ export { default as NavItem } from './components/Navbar/NavItem.svelte';
34
+ export { default as Sidebar } from './components/Sidebar/Sidebar.svelte';
35
+ export { default as SidebarItem } from './components/Sidebar/SidebarItem.svelte';
36
+ export { default as SidebarGroup } from './components/Sidebar/SidebarGroup.svelte';
37
+ export type { ButtonProps, ButtonVariant, ButtonSize, TypographyProps, TypographyVariant, IconProps, IconSize, BadgeProps, BadgeVariant, LinkProps, InputSize, TextInputType, FormFieldProps, TextInputProps, TextareaProps, SelectOption, SelectProps, CheckboxProps, RadioProps, RadioGroupProps, SwitchProps, TabsOrientation, TabsProps, TabListProps, TabTriggerProps, TabContentProps, MenuProps, MenuTriggerProps, MenuContentProps, MenuItemProps, MenuSeparatorProps, MenuSubProps, MenuSubTriggerProps, MenuSubContentProps, BreadcrumbItemData, BreadcrumbsProps, BreadcrumbItemProps, BottomNavItemData, BottomNavProps, BottomNavItemProps, NavItemProps, NavbarProps, SidebarItemData, SidebarProps, SidebarItemProps, SidebarGroupProps } from './types/index.js';
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
1
+ // Exon UI Library - Core Components
2
+ // Tree-shakeable exports per F25 standard
3
+ // Core Components
4
+ export { default as Button } from './components/Button/Button.svelte';
5
+ export { default as Typography } from './components/Typography/Typography.svelte';
6
+ export { default as Icon } from './components/Icon/Icon.svelte';
7
+ export { default as Badge } from './components/Badge/Badge.svelte';
8
+ export { default as Link } from './components/Link/Link.svelte';
9
+ // Form Components
10
+ export { default as FormField } from './components/FormField/FormField.svelte';
11
+ export { default as TextInput } from './components/TextInput/TextInput.svelte';
12
+ export { default as Textarea } from './components/Textarea/Textarea.svelte';
13
+ export { default as Select } from './components/Select/Select.svelte';
14
+ export { default as Checkbox } from './components/Checkbox/Checkbox.svelte';
15
+ export { default as CheckboxGroup } from './components/Checkbox/CheckboxGroup.svelte';
16
+ export { default as Radio } from './components/Radio/Radio.svelte';
17
+ export { default as RadioGroup } from './components/Radio/RadioGroup.svelte';
18
+ export { default as Switch } from './components/Switch/Switch.svelte';
19
+ // Navigation Components
20
+ export { default as Tabs } from './components/Tabs/Tabs.svelte';
21
+ export { default as TabList } from './components/Tabs/TabList.svelte';
22
+ export { default as TabTrigger } from './components/Tabs/TabTrigger.svelte';
23
+ export { default as TabContent } from './components/Tabs/TabContent.svelte';
24
+ export { default as Menu } from './components/Menu/Menu.svelte';
25
+ export { default as MenuTrigger } from './components/Menu/MenuTrigger.svelte';
26
+ export { default as MenuContent } from './components/Menu/MenuContent.svelte';
27
+ export { default as MenuItem } from './components/Menu/MenuItem.svelte';
28
+ export { default as MenuSeparator } from './components/Menu/MenuSeparator.svelte';
29
+ export { default as MenuSub } from './components/Menu/MenuSub.svelte';
30
+ export { default as MenuSubTrigger } from './components/Menu/MenuSubTrigger.svelte';
31
+ export { default as MenuSubContent } from './components/Menu/MenuSubContent.svelte';
32
+ export { default as Breadcrumbs } from './components/Breadcrumbs/Breadcrumbs.svelte';
33
+ export { default as BreadcrumbItem } from './components/Breadcrumbs/BreadcrumbItem.svelte';
34
+ export { default as BreadcrumbSeparator } from './components/Breadcrumbs/BreadcrumbSeparator.svelte';
35
+ export { default as BottomNav } from './components/BottomNav/BottomNav.svelte';
36
+ export { default as BottomNavItem } from './components/BottomNav/BottomNavItem.svelte';
37
+ export { default as Navbar } from './components/Navbar/Navbar.svelte';
38
+ export { default as NavItem } from './components/Navbar/NavItem.svelte';
39
+ export { default as Sidebar } from './components/Sidebar/Sidebar.svelte';
40
+ export { default as SidebarItem } from './components/Sidebar/SidebarItem.svelte';
41
+ export { default as SidebarGroup } from './components/Sidebar/SidebarGroup.svelte';
@@ -0,0 +1,431 @@
1
+ /**
2
+ * Exon UI Design Tokens
3
+ * Standard: F12 (Radix Colors + Utopia Fluid Typography)
4
+ *
5
+ * Color System: Radix-inspired 12-step semantic scale
6
+ * Typography: Utopia fluid responsive scale
7
+ *
8
+ * Research: docs/investigations/INV-002-design-system-colors-typography.md
9
+ */
10
+
11
+ :root {
12
+ /* ========================================
13
+ * Color Palette (Radix-inspired 12-step)
14
+ * ======================================== */
15
+
16
+ /* Gray Scale (Neutral) - Light Mode */
17
+ --gray-1: #fcfcfc;
18
+ --gray-2: #f9f9f9;
19
+ --gray-3: #f0f0f0;
20
+ --gray-4: #e8e8e8;
21
+ --gray-5: #e0e0e0;
22
+ --gray-6: #d9d9d9;
23
+ --gray-7: #cecece;
24
+ --gray-8: #bbbbbb;
25
+ --gray-9: #8d8d8d;
26
+ --gray-10: #838383;
27
+ --gray-11: #646464;
28
+ --gray-12: #202020;
29
+
30
+ /* Blue Scale (Primary) - Light Mode */
31
+ --blue-1: #fbfdff;
32
+ --blue-2: #f4faff;
33
+ --blue-3: #e6f4fe;
34
+ --blue-4: #d5efff;
35
+ --blue-5: #c2e5ff;
36
+ --blue-6: #acd8fc;
37
+ --blue-7: #8ec8f6;
38
+ --blue-8: #5eb1ef;
39
+ --blue-9: #0090ff;
40
+ --blue-10: #0588f0;
41
+ --blue-11: #0d74ce;
42
+ --blue-12: #113264;
43
+
44
+ /* Green Scale (Success) - Light Mode */
45
+ --green-1: #fbfefc;
46
+ --green-2: #f4fbf6;
47
+ --green-3: #e6f6eb;
48
+ --green-4: #d6f1df;
49
+ --green-5: #c4e8d1;
50
+ --green-6: #adddc0;
51
+ --green-7: #8eceaa;
52
+ --green-8: #5bb98b;
53
+ --green-9: #30a46c;
54
+ --green-10: #2b9a66;
55
+ --green-11: #218358;
56
+ --green-12: #193b2d;
57
+
58
+ /* Red Scale (Error/Destructive) - Light Mode */
59
+ --red-1: #fffcfc;
60
+ --red-2: #fff7f7;
61
+ --red-3: #feebec;
62
+ --red-4: #ffdbdc;
63
+ --red-5: #ffcdce;
64
+ --red-6: #fdbdbe;
65
+ --red-7: #f4a9aa;
66
+ --red-8: #eb8e90;
67
+ --red-9: #e5484d;
68
+ --red-10: #dc3e42;
69
+ --red-11: #ce2c31;
70
+ --red-12: #641723;
71
+
72
+ /* Amber Scale (Warning) - Light Mode */
73
+ --amber-1: #fefdfb;
74
+ --amber-2: #fefbe9;
75
+ --amber-3: #fff7c2;
76
+ --amber-4: #ffee9c;
77
+ --amber-5: #fbe577;
78
+ --amber-6: #f3d768;
79
+ --amber-7: #e9c162;
80
+ --amber-8: #e2a336;
81
+ --amber-9: #ffc53d;
82
+ --amber-10: #ffba18;
83
+ --amber-11: #ab6400;
84
+ --amber-12: #4f3422;
85
+
86
+ /* ========================================
87
+ * Semantic Color Tokens (Light Mode)
88
+ * ======================================== */
89
+
90
+ /* Backgrounds */
91
+ --color-bg: var(--gray-1);
92
+ --color-bg-muted: var(--gray-2);
93
+ --color-bg-subtle: var(--gray-3);
94
+ --color-bg-hover: var(--gray-4);
95
+ --color-bg-active: var(--gray-5);
96
+ --color-bg-elevated: #ffffff;
97
+
98
+ /* Text */
99
+ --color-text: var(--gray-12);
100
+ --color-text-muted: var(--gray-11);
101
+ --color-text-subtle: var(--gray-10);
102
+ --color-text-inverse: #ffffff;
103
+
104
+ /* Borders */
105
+ --color-border: var(--gray-6);
106
+ --color-border-hover: var(--gray-7);
107
+ --color-border-active: var(--gray-8);
108
+
109
+ /* Primary */
110
+ --color-primary: var(--blue-9);
111
+ --color-primary-hover: var(--blue-10);
112
+ --color-primary-active: var(--blue-11);
113
+ --color-primary-bg: var(--blue-3);
114
+ --color-primary-bg-hover: var(--blue-4);
115
+
116
+ /* Secondary */
117
+ --color-secondary: var(--gray-9);
118
+ --color-secondary-hover: var(--gray-10);
119
+ --color-secondary-active: var(--gray-11);
120
+
121
+ /* Destructive */
122
+ --color-destructive: var(--red-9);
123
+ --color-destructive-hover: var(--red-10);
124
+ --color-destructive-active: var(--red-11);
125
+ --color-destructive-bg: var(--red-3);
126
+
127
+ /* Success */
128
+ --color-success: var(--green-9);
129
+ --color-success-hover: var(--green-10);
130
+ --color-success-active: var(--green-11);
131
+ --color-success-bg: var(--green-3);
132
+
133
+ /* Warning */
134
+ --color-warning: var(--amber-9);
135
+ --color-warning-hover: var(--amber-10);
136
+ --color-warning-active: var(--amber-11);
137
+ --color-warning-bg: var(--amber-3);
138
+
139
+ /* Error (alias for destructive) */
140
+ --color-error: var(--red-9);
141
+ --color-error-hover: var(--red-10);
142
+ --color-error-bg: var(--red-3);
143
+
144
+ /* Info */
145
+ --color-info: var(--blue-9);
146
+ --color-info-hover: var(--blue-10);
147
+ --color-info-bg: var(--blue-3);
148
+
149
+ /* ========================================
150
+ * Typography - Utopia Fluid Scale
151
+ * Min: 360px @ 16px | Max: 1280px @ 18px
152
+ * Scale: 1.2 → 1.25
153
+ * ======================================== */
154
+
155
+ --font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
156
+ --font-family-mono: ui-monospace, 'SF Mono', Menlo, Monaco, 'Cascadia Code', monospace;
157
+
158
+ /* Fluid type scale */
159
+ --text-xs: clamp(0.69rem, 0.66rem + 0.14vw, 0.78rem); /* ~11-12px */
160
+ --text-sm: clamp(0.83rem, 0.79rem + 0.21vw, 0.97rem); /* ~13-16px */
161
+ --text-base: clamp(1rem, 0.93rem + 0.33vw, 1.125rem); /* 16-18px */
162
+ --text-lg: clamp(1.13rem, 1.03rem + 0.47vw, 1.41rem); /* ~18-23px */
163
+ --text-xl: clamp(1.27rem, 1.14rem + 0.65vw, 1.76rem); /* ~20-28px */
164
+ --text-2xl: clamp(1.42rem, 1.25rem + 0.89vw, 2.2rem); /* ~23-35px */
165
+ --text-3xl: clamp(1.6rem, 1.37rem + 1.19vw, 2.75rem); /* ~26-44px */
166
+ --text-4xl: clamp(1.8rem, 1.49rem + 1.57vw, 3.43rem); /* ~29-55px */
167
+
168
+ /* Line heights */
169
+ --leading-none: 1;
170
+ --leading-tight: 1.25;
171
+ --leading-snug: 1.375;
172
+ --leading-normal: 1.5;
173
+ --leading-relaxed: 1.625;
174
+ --leading-loose: 2;
175
+
176
+ /* Font weights */
177
+ --font-thin: 100;
178
+ --font-light: 300;
179
+ --font-normal: 400;
180
+ --font-medium: 500;
181
+ --font-semibold: 600;
182
+ --font-bold: 700;
183
+ --font-extrabold: 800;
184
+
185
+ /* Letter spacing */
186
+ --tracking-tighter: -0.05em;
187
+ --tracking-tight: -0.025em;
188
+ --tracking-normal: 0;
189
+ --tracking-wide: 0.025em;
190
+ --tracking-wider: 0.05em;
191
+
192
+ /* ========================================
193
+ * Spacing (4px base, fluid)
194
+ * ======================================== */
195
+ --space-xs: clamp(0.25rem, 0.23rem + 0.11vw, 0.31rem); /* 4-5px */
196
+ --space-sm: clamp(0.5rem, 0.46rem + 0.22vw, 0.63rem); /* 8-10px */
197
+ --space-md: clamp(1rem, 0.93rem + 0.33vw, 1.125rem); /* 16-18px */
198
+ --space-lg: clamp(1.5rem, 1.39rem + 0.54vw, 1.75rem); /* 24-28px */
199
+ --space-xl: clamp(2rem, 1.85rem + 0.76vw, 2.5rem); /* 32-40px */
200
+ --space-2xl: clamp(3rem, 2.78rem + 1.09vw, 3.75rem); /* 48-60px */
201
+ --space-3xl: clamp(4rem, 3.7rem + 1.52vw, 5rem); /* 64-80px */
202
+
203
+ /* ========================================
204
+ * Border Radius
205
+ * ======================================== */
206
+ --radius-none: 0;
207
+ --radius-sm: 0.25rem; /* 4px */
208
+ --radius-md: 0.375rem; /* 6px */
209
+ --radius-lg: 0.5rem; /* 8px */
210
+ --radius-xl: 0.75rem; /* 12px */
211
+ --radius-2xl: 1rem; /* 16px */
212
+ --radius-full: 9999px;
213
+
214
+ /* ========================================
215
+ * Shadows
216
+ * ======================================== */
217
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
218
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
219
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
220
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
221
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
222
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
223
+ --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
224
+
225
+ /* ========================================
226
+ * Transitions
227
+ * ======================================== */
228
+ --transition-fast: 150ms ease;
229
+ --transition-base: 200ms ease;
230
+ --transition-slow: 300ms ease;
231
+ --transition-slower: 500ms ease;
232
+
233
+ /* ========================================
234
+ * Z-index Scale
235
+ * ======================================== */
236
+ --z-base: 0;
237
+ --z-dropdown: 100;
238
+ --z-sticky: 200;
239
+ --z-fixed: 300;
240
+ --z-modal-backdrop: 400;
241
+ --z-modal: 500;
242
+ --z-popover: 600;
243
+ --z-tooltip: 700;
244
+ --z-toast: 800;
245
+
246
+ /* ========================================
247
+ * Capacitor Mobile (F20, F21)
248
+ * ======================================== */
249
+ --touch-target-min: 44px;
250
+ --safe-area-top: env(safe-area-inset-top, 0px);
251
+ --safe-area-right: env(safe-area-inset-right, 0px);
252
+ --safe-area-bottom: env(safe-area-inset-bottom, 0px);
253
+ --safe-area-left: env(safe-area-inset-left, 0px);
254
+
255
+ /* ========================================
256
+ * Breakpoints (reference only)
257
+ * ======================================== */
258
+ --breakpoint-sm: 640px;
259
+ --breakpoint-md: 768px;
260
+ --breakpoint-lg: 1024px;
261
+ --breakpoint-xl: 1280px;
262
+ --breakpoint-2xl: 1536px;
263
+ }
264
+
265
+ /* ========================================
266
+ * Dark Mode
267
+ * Standard: F31
268
+ * ======================================== */
269
+ [data-theme='dark'] {
270
+ /* Gray Scale - Dark Mode */
271
+ --gray-1: #111111;
272
+ --gray-2: #191919;
273
+ --gray-3: #222222;
274
+ --gray-4: #2a2a2a;
275
+ --gray-5: #313131;
276
+ --gray-6: #3a3a3a;
277
+ --gray-7: #484848;
278
+ --gray-8: #606060;
279
+ --gray-9: #6e6e6e;
280
+ --gray-10: #7b7b7b;
281
+ --gray-11: #b4b4b4;
282
+ --gray-12: #eeeeee;
283
+
284
+ /* Blue Scale - Dark Mode */
285
+ --blue-1: #0d1520;
286
+ --blue-2: #111927;
287
+ --blue-3: #0d2847;
288
+ --blue-4: #003362;
289
+ --blue-5: #004074;
290
+ --blue-6: #104d87;
291
+ --blue-7: #205d9e;
292
+ --blue-8: #2870bd;
293
+ --blue-9: #0090ff;
294
+ --blue-10: #3b9eff;
295
+ --blue-11: #70b8ff;
296
+ --blue-12: #c2e6ff;
297
+
298
+ /* Green Scale - Dark Mode */
299
+ --green-1: #0e1512;
300
+ --green-2: #121b17;
301
+ --green-3: #132d21;
302
+ --green-4: #113b29;
303
+ --green-5: #174933;
304
+ --green-6: #20573e;
305
+ --green-7: #28684a;
306
+ --green-8: #2f7c57;
307
+ --green-9: #30a46c;
308
+ --green-10: #33b074;
309
+ --green-11: #3dd68c;
310
+ --green-12: #b1f1cb;
311
+
312
+ /* Red Scale - Dark Mode */
313
+ --red-1: #191111;
314
+ --red-2: #201314;
315
+ --red-3: #3b1219;
316
+ --red-4: #500f1c;
317
+ --red-5: #611623;
318
+ --red-6: #72232d;
319
+ --red-7: #8c333a;
320
+ --red-8: #b54548;
321
+ --red-9: #e5484d;
322
+ --red-10: #ec5d5e;
323
+ --red-11: #ff9592;
324
+ --red-12: #ffd1d9;
325
+
326
+ /* Amber Scale - Dark Mode */
327
+ --amber-1: #16120c;
328
+ --amber-2: #1d180f;
329
+ --amber-3: #302008;
330
+ --amber-4: #3f2700;
331
+ --amber-5: #4d3000;
332
+ --amber-6: #5c3d05;
333
+ --amber-7: #714f19;
334
+ --amber-8: #8f6424;
335
+ --amber-9: #ffc53d;
336
+ --amber-10: #ffd60a;
337
+ --amber-11: #ffca16;
338
+ --amber-12: #ffe7b3;
339
+
340
+ /* Semantic overrides for dark mode */
341
+ --color-bg-elevated: var(--gray-2);
342
+ --color-text-inverse: var(--gray-12);
343
+
344
+ /* Shadows for dark mode */
345
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.3);
346
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.4);
347
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4);
348
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4);
349
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.5);
350
+ }
351
+
352
+ /* ========================================
353
+ * System Preference Dark Mode (fallback)
354
+ * ======================================== */
355
+ @media (prefers-color-scheme: dark) {
356
+ :root:not([data-theme='light']) {
357
+ /* Gray Scale - Dark Mode */
358
+ --gray-1: #111111;
359
+ --gray-2: #191919;
360
+ --gray-3: #222222;
361
+ --gray-4: #2a2a2a;
362
+ --gray-5: #313131;
363
+ --gray-6: #3a3a3a;
364
+ --gray-7: #484848;
365
+ --gray-8: #606060;
366
+ --gray-9: #6e6e6e;
367
+ --gray-10: #7b7b7b;
368
+ --gray-11: #b4b4b4;
369
+ --gray-12: #eeeeee;
370
+
371
+ /* Blue Scale - Dark Mode */
372
+ --blue-1: #0d1520;
373
+ --blue-2: #111927;
374
+ --blue-3: #0d2847;
375
+ --blue-4: #003362;
376
+ --blue-5: #004074;
377
+ --blue-6: #104d87;
378
+ --blue-7: #205d9e;
379
+ --blue-8: #2870bd;
380
+ --blue-9: #0090ff;
381
+ --blue-10: #3b9eff;
382
+ --blue-11: #70b8ff;
383
+ --blue-12: #c2e6ff;
384
+
385
+ /* Green Scale - Dark Mode */
386
+ --green-1: #0e1512;
387
+ --green-2: #121b17;
388
+ --green-3: #132d21;
389
+ --green-4: #113b29;
390
+ --green-5: #174933;
391
+ --green-6: #20573e;
392
+ --green-7: #28684a;
393
+ --green-8: #2f7c57;
394
+ --green-9: #30a46c;
395
+ --green-10: #33b074;
396
+ --green-11: #3dd68c;
397
+ --green-12: #b1f1cb;
398
+
399
+ /* Red Scale - Dark Mode */
400
+ --red-1: #191111;
401
+ --red-2: #201314;
402
+ --red-3: #3b1219;
403
+ --red-4: #500f1c;
404
+ --red-5: #611623;
405
+ --red-6: #72232d;
406
+ --red-7: #8c333a;
407
+ --red-8: #b54548;
408
+ --red-9: #e5484d;
409
+ --red-10: #ec5d5e;
410
+ --red-11: #ff9592;
411
+ --red-12: #ffd1d9;
412
+
413
+ /* Amber Scale - Dark Mode */
414
+ --amber-1: #16120c;
415
+ --amber-2: #1d180f;
416
+ --amber-3: #302008;
417
+ --amber-4: #3f2700;
418
+ --amber-5: #4d3000;
419
+ --amber-6: #5c3d05;
420
+ --amber-7: #714f19;
421
+ --amber-8: #8f6424;
422
+ --amber-9: #ffc53d;
423
+ --amber-10: #ffd60a;
424
+ --amber-11: #ffca16;
425
+ --amber-12: #ffe7b3;
426
+
427
+ /* Semantic overrides */
428
+ --color-bg-elevated: var(--gray-2);
429
+ --color-text-inverse: var(--gray-12);
430
+ }
431
+ }
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/vitest';
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom/vitest';