tio-design-make-experiments 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 (108) hide show
  1. package/ATTRIBUTIONS.md +3 -0
  2. package/README.md +11 -0
  3. package/guidelines/Guidelines.md +61 -0
  4. package/index.html +15 -0
  5. package/package.json +91 -0
  6. package/postcss.config.mjs +15 -0
  7. package/src/app/App.tsx +6 -0
  8. package/src/app/components/design-system/Buttons.tsx +623 -0
  9. package/src/app/components/design-system/Cards.tsx +123 -0
  10. package/src/app/components/design-system/Charts.tsx +135 -0
  11. package/src/app/components/design-system/ColorPalette.tsx +86 -0
  12. package/src/app/components/design-system/CopyButton.tsx +102 -0
  13. package/src/app/components/design-system/Forms.tsx +409 -0
  14. package/src/app/components/design-system/Icons.tsx +140 -0
  15. package/src/app/components/design-system/ListItems.tsx +234 -0
  16. package/src/app/components/design-system/Navigation.tsx +344 -0
  17. package/src/app/components/design-system/Patterns.tsx +235 -0
  18. package/src/app/components/design-system/PopoverMenu.tsx +81 -0
  19. package/src/app/components/design-system/SectionHeader.tsx +22 -0
  20. package/src/app/components/design-system/Spacing.tsx +109 -0
  21. package/src/app/components/design-system/StatusIndicators.tsx +194 -0
  22. package/src/app/components/design-system/Typography.tsx +88 -0
  23. package/src/app/components/figma/ImageWithFallback.tsx +27 -0
  24. package/src/app/components/ui/accordion.tsx +66 -0
  25. package/src/app/components/ui/alert-dialog.tsx +157 -0
  26. package/src/app/components/ui/alert.tsx +66 -0
  27. package/src/app/components/ui/aspect-ratio.tsx +11 -0
  28. package/src/app/components/ui/avatar.tsx +53 -0
  29. package/src/app/components/ui/badge.tsx +46 -0
  30. package/src/app/components/ui/breadcrumb.tsx +109 -0
  31. package/src/app/components/ui/button.tsx +58 -0
  32. package/src/app/components/ui/calendar.tsx +75 -0
  33. package/src/app/components/ui/card.tsx +92 -0
  34. package/src/app/components/ui/carousel.tsx +241 -0
  35. package/src/app/components/ui/chart.tsx +353 -0
  36. package/src/app/components/ui/checkbox.tsx +32 -0
  37. package/src/app/components/ui/collapsible.tsx +33 -0
  38. package/src/app/components/ui/command.tsx +177 -0
  39. package/src/app/components/ui/context-menu.tsx +252 -0
  40. package/src/app/components/ui/dialog.tsx +135 -0
  41. package/src/app/components/ui/drawer.tsx +132 -0
  42. package/src/app/components/ui/dropdown-menu.tsx +257 -0
  43. package/src/app/components/ui/form.tsx +168 -0
  44. package/src/app/components/ui/hover-card.tsx +44 -0
  45. package/src/app/components/ui/input-otp.tsx +77 -0
  46. package/src/app/components/ui/input.tsx +21 -0
  47. package/src/app/components/ui/label.tsx +24 -0
  48. package/src/app/components/ui/menubar.tsx +276 -0
  49. package/src/app/components/ui/navigation-menu.tsx +168 -0
  50. package/src/app/components/ui/pagination.tsx +127 -0
  51. package/src/app/components/ui/popover.tsx +48 -0
  52. package/src/app/components/ui/progress.tsx +31 -0
  53. package/src/app/components/ui/radio-group.tsx +45 -0
  54. package/src/app/components/ui/resizable.tsx +56 -0
  55. package/src/app/components/ui/scroll-area.tsx +58 -0
  56. package/src/app/components/ui/select.tsx +189 -0
  57. package/src/app/components/ui/separator.tsx +28 -0
  58. package/src/app/components/ui/sheet.tsx +139 -0
  59. package/src/app/components/ui/sidebar.tsx +726 -0
  60. package/src/app/components/ui/skeleton.tsx +13 -0
  61. package/src/app/components/ui/slider.tsx +63 -0
  62. package/src/app/components/ui/sonner.tsx +25 -0
  63. package/src/app/components/ui/switch.tsx +31 -0
  64. package/src/app/components/ui/table.tsx +116 -0
  65. package/src/app/components/ui/tabs.tsx +66 -0
  66. package/src/app/components/ui/textarea.tsx +18 -0
  67. package/src/app/components/ui/toggle-group.tsx +73 -0
  68. package/src/app/components/ui/toggle.tsx +47 -0
  69. package/src/app/components/ui/tooltip.tsx +61 -0
  70. package/src/app/components/ui/use-mobile.ts +21 -0
  71. package/src/app/components/ui/utils.ts +6 -0
  72. package/src/app/pages/DesignSystem.tsx +189 -0
  73. package/src/app/pages/Team.tsx +168 -0
  74. package/src/app/routes.tsx +14 -0
  75. package/src/assets/6276cd19433d265f363bddc7f52f4937da9b1dd4.png +0 -0
  76. package/src/assets/9d7a018c9a6938d439d9059f82753d232ce63804.png +0 -0
  77. package/src/imports/Buttons-3-409.tsx +46 -0
  78. package/src/imports/Buttons-3-962.tsx +155 -0
  79. package/src/imports/ButtonsAndActions.tsx +139 -0
  80. package/src/imports/Dashboard.tsx +1914 -0
  81. package/src/imports/DesignSystem.tsx +6008 -0
  82. package/src/imports/Forms.tsx +1088 -0
  83. package/src/imports/Navigation-17-3259.tsx +564 -0
  84. package/src/imports/Navigation-18-957.tsx +873 -0
  85. package/src/imports/Wireframe.tsx +112 -0
  86. package/src/imports/svg-1ifosis1tx.ts +3 -0
  87. package/src/imports/svg-5spfd.tsx +1 -0
  88. package/src/imports/svg-6180by7m37.ts +3 -0
  89. package/src/imports/svg-guy0p.tsx +1 -0
  90. package/src/imports/svg-hm2n0.tsx +2 -0
  91. package/src/imports/svg-j8o95ccqq7.ts +26 -0
  92. package/src/imports/svg-liuy2nykz3.ts +10 -0
  93. package/src/imports/svg-pp9c3.tsx +1 -0
  94. package/src/imports/svg-pr0k9194w9.ts +33 -0
  95. package/src/imports/svg-umftvfphsk.ts +48 -0
  96. package/src/imports/svg-vbi95q76mb.ts +23 -0
  97. package/src/imports/svg-vxjpl.tsx +1 -0
  98. package/src/imports/svg-wl30wxxv53.ts +3 -0
  99. package/src/main.tsx +7 -0
  100. package/src/styles/fonts.css +1 -0
  101. package/src/styles/forms.css +181 -0
  102. package/src/styles/header.css +48 -0
  103. package/src/styles/index.css +7 -0
  104. package/src/styles/navlinks.css +112 -0
  105. package/src/styles/popover.css +48 -0
  106. package/src/styles/tailwind.css +4 -0
  107. package/src/styles/theme.css +312 -0
  108. package/vite.config.ts +38 -0
@@ -0,0 +1,48 @@
1
+ /* ═══════════════════════════════════════════════════════
2
+ Header — CSS component classes
3
+ ═══════════════════════════════════════════════════════ */
4
+
5
+ @layer components {
6
+ /* ─── Header bar container ─── */
7
+ .header-bar {
8
+ @apply bg-card flex items-center justify-between relative;
9
+ height: 70px;
10
+ @apply border-b border-secondary;
11
+ box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.1);
12
+ }
13
+
14
+ /* ─── Header inner wrapper (max-width content area) ─── */
15
+ .header-wrapper {
16
+ @apply flex items-center justify-between w-full;
17
+ padding-left: 50px;
18
+ padding-right: 50px;
19
+ }
20
+
21
+ /* ─── Header left section (logo + nav) ─── */
22
+ .header-left {
23
+ @apply flex-1 min-h-px min-w-px;
24
+ }
25
+
26
+ .header-left-inner {
27
+ @apply flex items-center size-full;
28
+ }
29
+
30
+ .header-nav {
31
+ @apply flex gap-[5px] items-center w-full;
32
+ padding-left: 32px;
33
+ }
34
+
35
+ /* ─── Header right section ─── */
36
+ .header-right {
37
+ @apply flex items-center shrink-0;
38
+ }
39
+
40
+ /* ─── Profile avatar ─── */
41
+ .header-avatar {
42
+ @apply overflow-clip rounded-full size-10 shrink-0;
43
+ }
44
+
45
+ .header-avatar img {
46
+ @apply object-cover size-full;
47
+ }
48
+ }
@@ -0,0 +1,7 @@
1
+ @import './fonts.css';
2
+ @import './tailwind.css';
3
+ @import './theme.css';
4
+ @import './header.css';
5
+ @import './navlinks.css';
6
+ @import './forms.css';
7
+ @import './popover.css';
@@ -0,0 +1,112 @@
1
+ /* ═══════════════════════════════════════════════════════
2
+ Navlinks & Tablinks — CSS component classes
3
+ All hover states use --link-hover / --link-hover-foreground.
4
+ ═══════════════════════════════════════════════════════ */
5
+
6
+ @layer components {
7
+ /* ═══ HEADER NAVLINKS ═══ */
8
+
9
+ /* ─── Navlink base (transparent pill, foreground text) ─── */
10
+ .navlink {
11
+ @apply inline-flex items-center gap-2 cursor-pointer
12
+ transition-all duration-200 outline-none uppercase
13
+ font-['Source_Sans_3',sans-serif];
14
+ @apply text-foreground rounded-full relative;
15
+ height: 2.125rem; /* 34px */
16
+ padding-left: 15px;
17
+ padding-right: 15px;
18
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
19
+ @apply active:scale-[0.98];
20
+ @apply focus-visible:ring-2 focus-visible:ring-ring
21
+ focus-visible:ring-offset-2 focus-visible:ring-offset-card;
22
+ }
23
+
24
+ /* ─── Navlink active (with bottom marker) ─── */
25
+ .navlink-active {
26
+ @apply inline-flex items-center gap-2 cursor-pointer
27
+ transition-all duration-200 outline-none uppercase
28
+ font-['Source_Sans_3',sans-serif];
29
+ @apply text-foreground rounded-full relative;
30
+ height: 2.125rem; /* 34px */
31
+ padding-left: 15px;
32
+ padding-right: 15px;
33
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
34
+ @apply active:scale-[0.98];
35
+ @apply focus-visible:ring-2 focus-visible:ring-ring
36
+ focus-visible:ring-offset-2 focus-visible:ring-offset-card;
37
+ }
38
+
39
+ .navlink-active::after {
40
+ content: '';
41
+ @apply absolute bottom-0 h-0.5 bg-link-hover;
42
+ left: 15px;
43
+ right: 15px;
44
+ }
45
+
46
+ /* ─── Navlink highlight (filled primary CTA) ─── */
47
+ .navlink-highlight {
48
+ @apply inline-flex items-center gap-2 cursor-pointer
49
+ transition-all duration-200 outline-none uppercase
50
+ font-['Source_Sans_3',sans-serif];
51
+ @apply bg-primary text-primary-foreground rounded-full relative;
52
+ height: 2.125rem; /* 34px */
53
+ padding-left: 15px;
54
+ padding-right: 15px;
55
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
56
+ @apply active:bg-link-hover/90 active:text-link-hover-foreground active:scale-[0.98];
57
+ @apply focus-visible:ring-2 focus-visible:ring-ring
58
+ focus-visible:ring-offset-2 focus-visible:ring-offset-card;
59
+ }
60
+
61
+ /* ═══ TAB NAVLINKS ═══ */
62
+
63
+ /* ─── Tablink base (muted text, light weight, larger font) ─── */
64
+ .tablink {
65
+ @apply inline-flex items-center cursor-pointer
66
+ transition-all duration-200 outline-none uppercase
67
+ font-['Source_Sans_Pro',sans-serif];
68
+ @apply text-muted-foreground rounded-full relative;
69
+ font-weight: 300;
70
+ height: 2.125rem; /* 34px */
71
+ padding-left: 15px;
72
+ padding-right: 15px;
73
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
74
+ @apply active:scale-[0.98];
75
+ @apply focus-visible:ring-2 focus-visible:ring-ring
76
+ focus-visible:ring-offset-2 focus-visible:ring-offset-card;
77
+ }
78
+
79
+ /* ─── Tablink active (white text + bottom marker) ─── */
80
+ .tablink-active {
81
+ @apply inline-flex items-center cursor-pointer
82
+ transition-all duration-200 outline-none uppercase
83
+ font-['Source_Sans_Pro',sans-serif];
84
+ @apply text-foreground rounded-full relative;
85
+ font-weight: 300;
86
+ height: 2.125rem; /* 34px */
87
+ padding-left: 15px;
88
+ padding-right: 15px;
89
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
90
+ @apply active:scale-[0.98];
91
+ @apply focus-visible:ring-2 focus-visible:ring-ring
92
+ focus-visible:ring-offset-2 focus-visible:ring-offset-card;
93
+ }
94
+
95
+ .tablink-active::after {
96
+ content: '';
97
+ @apply absolute bottom-0 h-0.5 bg-link-hover;
98
+ left: 15px;
99
+ right: 15px;
100
+ }
101
+
102
+ /* ─── Metrics item (icon + count) ─── */
103
+ .tab-metric {
104
+ @apply inline-flex items-center gap-2.5 shrink-0;
105
+ }
106
+
107
+ .tab-metric-value {
108
+ @apply font-['Source_Sans_Pro',sans-serif] text-foreground;
109
+ font-size: 14px;
110
+ line-height: 16px;
111
+ }
112
+ }
@@ -0,0 +1,48 @@
1
+ /* ═══════════════════════════════════════════════════════
2
+ Popover Menu — CSS component classes
3
+ Dropdown/popover menus and their action items.
4
+ ═══════════════════════════════════════════════════════ */
5
+
6
+ @layer components {
7
+ /* ─── Popover menu container ─── */
8
+ .popover-menu {
9
+ @apply bg-secondary flex flex-col items-start;
10
+ padding: 5px;
11
+ border-radius: 10px;
12
+ width: 240px;
13
+ box-shadow: 4px 4px 15px 0px rgba(0, 0, 0, 0.1);
14
+ }
15
+
16
+ /* ─── Popover button / action item ─── */
17
+ .popover-btn {
18
+ @apply bg-secondary relative w-full cursor-pointer
19
+ font-['Source_Sans_3',sans-serif] text-foreground uppercase
20
+ transition-all duration-200;
21
+ min-height: 40px;
22
+ border-radius: 10px;
23
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
24
+ }
25
+
26
+ .popover-btn-inner {
27
+ @apply flex items-center w-full;
28
+ min-height: inherit;
29
+ padding: 10px 20px;
30
+ }
31
+
32
+ .popover-btn-text {
33
+ @apply flex-1 font-['Source_Sans_3',sans-serif] uppercase;
34
+ font-size: 16px;
35
+ line-height: 14px;
36
+ }
37
+
38
+ /* Last item in a stacked menu (rounded only at bottom) */
39
+ .popover-btn-last {
40
+ @apply bg-secondary relative w-full cursor-pointer
41
+ font-['Source_Sans_3',sans-serif] text-foreground uppercase
42
+ transition-all duration-200;
43
+ min-height: 40px;
44
+ border-bottom-left-radius: 10px;
45
+ border-bottom-right-radius: 10px;
46
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
47
+ }
48
+ }
@@ -0,0 +1,4 @@
1
+ @import 'tailwindcss' source(none);
2
+ @source '../**/*.{js,ts,jsx,tsx}';
3
+
4
+ @import 'tw-animate-css';
@@ -0,0 +1,312 @@
1
+ @custom-variant dark (&:is(.dark *));
2
+
3
+ :root {
4
+ --font-size: 16px;
5
+ --background: #181818;
6
+ --foreground: #ffffff;
7
+ --card: #1d1d1d;
8
+ --card-foreground: #ffffff;
9
+ --popover: #1d1d1d;
10
+ --popover-foreground: #ffffff;
11
+ --primary: #78eac1;
12
+ --primary-foreground: #1d1d1d;
13
+ --secondary: #262626;
14
+ --secondary-foreground: #ffffff;
15
+ --muted: #2e2e2e;
16
+ --muted-foreground: #888888;
17
+ --accent: #7954ff;
18
+ --accent-foreground: #ffffff;
19
+ --destructive: #FF3131;
20
+ --destructive-foreground: #ffffff;
21
+ --border: #2e2e2e;
22
+ --input: transparent;
23
+ --input-background: #262626;
24
+ --switch-background: #2e2e2e;
25
+ --font-weight-medium: 500;
26
+ --font-weight-normal: 400;
27
+ --ring: #7954ff;
28
+ --link-hover: #7954ff;
29
+ --link-hover-foreground: #ffffff;
30
+ --chart-1: #33BA9E;
31
+ --chart-2: #FF3131;
32
+ --chart-3: #F48D21;
33
+ --chart-4: #7954ff;
34
+ --chart-5: #78eac1;
35
+ --radius: 0.625rem;
36
+ --sidebar: #1d1d1d;
37
+ --sidebar-foreground: #ffffff;
38
+ --sidebar-primary: #78eac1;
39
+ --sidebar-primary-foreground: #1d1d1d;
40
+ --sidebar-accent: #262626;
41
+ --sidebar-accent-foreground: #ffffff;
42
+ --sidebar-border: #2e2e2e;
43
+ --sidebar-ring: #7954ff;
44
+ }
45
+
46
+ .dark {
47
+ --background: oklch(0.145 0 0);
48
+ --foreground: oklch(0.985 0 0);
49
+ --card: oklch(0.145 0 0);
50
+ --card-foreground: oklch(0.985 0 0);
51
+ --popover: oklch(0.145 0 0);
52
+ --popover-foreground: oklch(0.985 0 0);
53
+ --primary: oklch(0.985 0 0);
54
+ --primary-foreground: oklch(0.205 0 0);
55
+ --secondary: oklch(0.269 0 0);
56
+ --secondary-foreground: oklch(0.985 0 0);
57
+ --muted: oklch(0.269 0 0);
58
+ --muted-foreground: oklch(0.708 0 0);
59
+ --accent: oklch(0.269 0 0);
60
+ --accent-foreground: oklch(0.985 0 0);
61
+ --destructive: oklch(0.396 0.141 25.723);
62
+ --destructive-foreground: oklch(0.637 0.237 25.331);
63
+ --border: oklch(0.269 0 0);
64
+ --input: oklch(0.269 0 0);
65
+ --ring: oklch(0.439 0 0);
66
+ --font-weight-medium: 500;
67
+ --font-weight-normal: 400;
68
+ --chart-1: oklch(0.488 0.243 264.376);
69
+ --chart-2: oklch(0.696 0.17 162.48);
70
+ --chart-3: oklch(0.769 0.188 70.08);
71
+ --chart-4: oklch(0.627 0.265 303.9);
72
+ --chart-5: oklch(0.645 0.246 16.439);
73
+ --sidebar: oklch(0.205 0 0);
74
+ --sidebar-foreground: oklch(0.985 0 0);
75
+ --sidebar-primary: oklch(0.488 0.243 264.376);
76
+ --sidebar-primary-foreground: oklch(0.985 0 0);
77
+ --sidebar-accent: oklch(0.269 0 0);
78
+ --sidebar-accent-foreground: oklch(0.985 0 0);
79
+ --sidebar-border: oklch(0.269 0 0);
80
+ --sidebar-ring: oklch(0.439 0 0);
81
+ }
82
+
83
+ @theme inline {
84
+ --color-background: var(--background);
85
+ --color-foreground: var(--foreground);
86
+ --color-card: var(--card);
87
+ --color-card-foreground: var(--card-foreground);
88
+ --color-popover: var(--popover);
89
+ --color-popover-foreground: var(--popover-foreground);
90
+ --color-primary: var(--primary);
91
+ --color-primary-foreground: var(--primary-foreground);
92
+ --color-secondary: var(--secondary);
93
+ --color-secondary-foreground: var(--secondary-foreground);
94
+ --color-muted: var(--muted);
95
+ --color-muted-foreground: var(--muted-foreground);
96
+ --color-accent: var(--accent);
97
+ --color-accent-foreground: var(--accent-foreground);
98
+ --color-destructive: var(--destructive);
99
+ --color-destructive-foreground: var(--destructive-foreground);
100
+ --color-border: var(--border);
101
+ --color-input: var(--input);
102
+ --color-input-background: var(--input-background);
103
+ --color-switch-background: var(--switch-background);
104
+ --color-ring: var(--ring);
105
+ --color-link-hover: var(--link-hover);
106
+ --color-link-hover-foreground: var(--link-hover-foreground);
107
+ --color-chart-1: var(--chart-1);
108
+ --color-chart-2: var(--chart-2);
109
+ --color-chart-3: var(--chart-3);
110
+ --color-chart-4: var(--chart-4);
111
+ --color-chart-5: var(--chart-5);
112
+ --radius-sm: calc(var(--radius) - 4px);
113
+ --radius-md: calc(var(--radius) - 2px);
114
+ --radius-lg: var(--radius);
115
+ --radius-xl: calc(var(--radius) + 4px);
116
+ --color-sidebar: var(--sidebar);
117
+ --color-sidebar-foreground: var(--sidebar-foreground);
118
+ --color-sidebar-primary: var(--sidebar-primary);
119
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
120
+ --color-sidebar-accent: var(--sidebar-accent);
121
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
122
+ --color-sidebar-border: var(--sidebar-border);
123
+ --color-sidebar-ring: var(--sidebar-ring);
124
+ }
125
+
126
+ @layer base {
127
+ * {
128
+ @apply border-border outline-ring/50;
129
+ }
130
+
131
+ body {
132
+ @apply bg-background text-foreground;
133
+ }
134
+
135
+ /**
136
+ * Default typography styles for HTML elements (h1-h4, p, label, button, input).
137
+ * These are in @layer base, so Tailwind utility classes (like text-sm, text-lg) automatically override them.
138
+ */
139
+
140
+ html {
141
+ font-size: var(--font-size);
142
+ }
143
+
144
+ h1 {
145
+ font-size: var(--text-2xl);
146
+ font-weight: var(--font-weight-medium);
147
+ line-height: 1.5;
148
+ }
149
+
150
+ h2 {
151
+ font-size: var(--text-xl);
152
+ font-weight: var(--font-weight-medium);
153
+ line-height: 1.5;
154
+ }
155
+
156
+ h3 {
157
+ font-size: var(--text-lg);
158
+ font-weight: var(--font-weight-medium);
159
+ line-height: 1.5;
160
+ }
161
+
162
+ h4 {
163
+ font-size: var(--text-base);
164
+ font-weight: var(--font-weight-medium);
165
+ line-height: 1.5;
166
+ }
167
+
168
+ label {
169
+ font-size: var(--text-base);
170
+ font-weight: var(--font-weight-medium);
171
+ line-height: 1.5;
172
+ }
173
+
174
+ button {
175
+ font-size: var(--text-base);
176
+ font-weight: var(--font-weight-medium);
177
+ line-height: 1.5;
178
+ }
179
+
180
+ input {
181
+ font-size: var(--text-base);
182
+ font-weight: var(--font-weight-normal);
183
+ line-height: 1.5;
184
+ }
185
+ }
186
+
187
+ @layer components {
188
+ /* ─── Shared button base ─── */
189
+ .btn {
190
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
191
+ transition-all duration-200 outline-none uppercase
192
+ font-['Source_Sans_3',sans-serif];
193
+ @apply focus-visible:ring-2 focus-visible:ring-ring
194
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
195
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
196
+ }
197
+
198
+ /* ─── Primary Filled ─── */
199
+ .btn-primary {
200
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
201
+ transition-all duration-200 outline-none uppercase
202
+ font-['Source_Sans_3',sans-serif];
203
+ @apply focus-visible:ring-2 focus-visible:ring-ring
204
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
205
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
206
+ @apply bg-primary text-primary-foreground h-10 px-5 rounded-full;
207
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
208
+ @apply active:bg-link-hover/90 active:text-link-hover-foreground active:scale-[0.98];
209
+ @apply disabled:opacity-50;
210
+ }
211
+
212
+ /* ─── Outline Primary (teal border) ─── */
213
+ .btn-outline-primary {
214
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
215
+ transition-all duration-200 outline-none uppercase
216
+ font-['Source_Sans_3',sans-serif];
217
+ @apply focus-visible:ring-2 focus-visible:ring-ring
218
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
219
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
220
+ @apply border border-primary text-primary h-10 px-5 rounded-full;
221
+ @apply hover:bg-link-hover hover:text-link-hover-foreground hover:border-transparent;
222
+ @apply active:bg-link-hover/90 active:text-link-hover-foreground
223
+ active:border-transparent active:scale-[0.98];
224
+ @apply disabled:opacity-50;
225
+ }
226
+
227
+ /* ─── Outline Muted (subtle border, rounded-lg) ─── */
228
+ .btn-outline-muted {
229
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
230
+ transition-all duration-200 outline-none uppercase
231
+ font-['Source_Sans_3',sans-serif];
232
+ @apply focus-visible:ring-2 focus-visible:ring-ring
233
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
234
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
235
+ @apply border border-border text-primary h-10 px-5 rounded-lg;
236
+ @apply hover:bg-link-hover hover:text-link-hover-foreground hover:border-transparent;
237
+ @apply active:bg-link-hover/90 active:text-link-hover-foreground
238
+ active:border-transparent active:scale-[0.98];
239
+ @apply disabled:opacity-50;
240
+ }
241
+
242
+ /* ─── Icon Circle ─── */
243
+ .btn-icon {
244
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
245
+ transition-all duration-200 outline-none
246
+ font-['Source_Sans_3',sans-serif];
247
+ @apply focus-visible:ring-2 focus-visible:ring-ring
248
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
249
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
250
+ @apply border border-muted-foreground size-10 rounded-full;
251
+ @apply hover:bg-link-hover hover:border-transparent;
252
+ @apply active:bg-link-hover/90 active:border-transparent active:scale-95;
253
+ @apply disabled:opacity-40;
254
+ }
255
+
256
+ /* ─── Ghost (no chrome) ─── */
257
+ .btn-ghost {
258
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
259
+ transition-all duration-200 outline-none
260
+ font-['Source_Sans_3',sans-serif];
261
+ @apply focus-visible:ring-2 focus-visible:ring-ring
262
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
263
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
264
+ @apply size-10 rounded-md text-muted-foreground;
265
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
266
+ @apply active:bg-link-hover/90 active:scale-95;
267
+ @apply disabled:opacity-30;
268
+ }
269
+
270
+ /* ─── Navigation CTA (compact pill) ─── */
271
+ .btn-nav-cta {
272
+ @apply inline-flex items-center justify-center gap-2.5 cursor-pointer
273
+ transition-all duration-200 outline-none uppercase
274
+ font-['Source_Sans_3',sans-serif];
275
+ @apply focus-visible:ring-2 focus-visible:ring-ring
276
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
277
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
278
+ @apply bg-primary text-primary-foreground px-4 rounded-full;
279
+ height: 2.125rem; /* 34px */
280
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
281
+ @apply active:bg-link-hover/90 active:text-link-hover-foreground active:scale-[0.98];
282
+ @apply disabled:opacity-50;
283
+ }
284
+
285
+ /* ─── XL Outline (large action card) ─── */
286
+ .btn-xl-outline {
287
+ @apply inline-flex flex-col items-center justify-center cursor-pointer
288
+ transition-all duration-200 outline-none uppercase
289
+ font-['Source_Sans_3',sans-serif];
290
+ @apply focus-visible:ring-2 focus-visible:ring-ring
291
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
292
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
293
+ @apply border border-border text-primary px-8 py-8 rounded-lg;
294
+ @apply hover:bg-secondary/30 hover:border-primary;
295
+ @apply active:bg-secondary/50 active:border-primary active:scale-[0.98];
296
+ @apply disabled:opacity-50;
297
+ }
298
+
299
+ /* ─── XL Filled (large action card) ─── */
300
+ .btn-xl-filled {
301
+ @apply inline-flex flex-col items-center justify-center cursor-pointer
302
+ transition-all duration-200 outline-none uppercase
303
+ font-['Source_Sans_3',sans-serif];
304
+ @apply focus-visible:ring-2 focus-visible:ring-ring
305
+ focus-visible:ring-offset-2 focus-visible:ring-offset-background;
306
+ @apply disabled:cursor-not-allowed disabled:pointer-events-none;
307
+ @apply bg-primary text-primary-foreground px-8 py-8 rounded-lg;
308
+ @apply hover:bg-link-hover hover:text-link-hover-foreground;
309
+ @apply active:bg-link-hover/90 active:text-link-hover-foreground active:scale-[0.98];
310
+ @apply disabled:opacity-50;
311
+ }
312
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { defineConfig, type Plugin } from 'vite'
2
+ import path from 'path'
3
+ import tailwindcss from '@tailwindcss/vite'
4
+ import react from '@vitejs/plugin-react'
5
+
6
+ function figmaAssetPlaceholder(): Plugin {
7
+ const PREFIX = 'figma:asset/'
8
+ const placeholder = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40'%3E%3Crect width='40' height='40' rx='20' fill='%23444'/%3E%3C/svg%3E"
9
+ return {
10
+ name: 'figma-asset-placeholder',
11
+ enforce: 'pre',
12
+ resolveId(source) {
13
+ if (source.startsWith(PREFIX)) return source
14
+ },
15
+ load(id) {
16
+ if (id.startsWith(PREFIX)) return `export default ${JSON.stringify(placeholder)}`
17
+ },
18
+ }
19
+ }
20
+
21
+ export default defineConfig({
22
+ plugins: [
23
+ figmaAssetPlaceholder(),
24
+ // The React and Tailwind plugins are both required for Make, even if
25
+ // Tailwind is not being actively used – do not remove them
26
+ react(),
27
+ tailwindcss(),
28
+ ],
29
+ resolve: {
30
+ alias: {
31
+ // Alias @ to the src directory
32
+ '@': path.resolve(__dirname, './src'),
33
+ },
34
+ },
35
+
36
+ // File types to support raw imports. Never add .css, .tsx, or .ts files to this.
37
+ assetsInclude: ['**/*.svg', '**/*.csv'],
38
+ })