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.
- package/ATTRIBUTIONS.md +3 -0
- package/README.md +11 -0
- package/guidelines/Guidelines.md +61 -0
- package/index.html +15 -0
- package/package.json +91 -0
- package/postcss.config.mjs +15 -0
- package/src/app/App.tsx +6 -0
- package/src/app/components/design-system/Buttons.tsx +623 -0
- package/src/app/components/design-system/Cards.tsx +123 -0
- package/src/app/components/design-system/Charts.tsx +135 -0
- package/src/app/components/design-system/ColorPalette.tsx +86 -0
- package/src/app/components/design-system/CopyButton.tsx +102 -0
- package/src/app/components/design-system/Forms.tsx +409 -0
- package/src/app/components/design-system/Icons.tsx +140 -0
- package/src/app/components/design-system/ListItems.tsx +234 -0
- package/src/app/components/design-system/Navigation.tsx +344 -0
- package/src/app/components/design-system/Patterns.tsx +235 -0
- package/src/app/components/design-system/PopoverMenu.tsx +81 -0
- package/src/app/components/design-system/SectionHeader.tsx +22 -0
- package/src/app/components/design-system/Spacing.tsx +109 -0
- package/src/app/components/design-system/StatusIndicators.tsx +194 -0
- package/src/app/components/design-system/Typography.tsx +88 -0
- package/src/app/components/figma/ImageWithFallback.tsx +27 -0
- package/src/app/components/ui/accordion.tsx +66 -0
- package/src/app/components/ui/alert-dialog.tsx +157 -0
- package/src/app/components/ui/alert.tsx +66 -0
- package/src/app/components/ui/aspect-ratio.tsx +11 -0
- package/src/app/components/ui/avatar.tsx +53 -0
- package/src/app/components/ui/badge.tsx +46 -0
- package/src/app/components/ui/breadcrumb.tsx +109 -0
- package/src/app/components/ui/button.tsx +58 -0
- package/src/app/components/ui/calendar.tsx +75 -0
- package/src/app/components/ui/card.tsx +92 -0
- package/src/app/components/ui/carousel.tsx +241 -0
- package/src/app/components/ui/chart.tsx +353 -0
- package/src/app/components/ui/checkbox.tsx +32 -0
- package/src/app/components/ui/collapsible.tsx +33 -0
- package/src/app/components/ui/command.tsx +177 -0
- package/src/app/components/ui/context-menu.tsx +252 -0
- package/src/app/components/ui/dialog.tsx +135 -0
- package/src/app/components/ui/drawer.tsx +132 -0
- package/src/app/components/ui/dropdown-menu.tsx +257 -0
- package/src/app/components/ui/form.tsx +168 -0
- package/src/app/components/ui/hover-card.tsx +44 -0
- package/src/app/components/ui/input-otp.tsx +77 -0
- package/src/app/components/ui/input.tsx +21 -0
- package/src/app/components/ui/label.tsx +24 -0
- package/src/app/components/ui/menubar.tsx +276 -0
- package/src/app/components/ui/navigation-menu.tsx +168 -0
- package/src/app/components/ui/pagination.tsx +127 -0
- package/src/app/components/ui/popover.tsx +48 -0
- package/src/app/components/ui/progress.tsx +31 -0
- package/src/app/components/ui/radio-group.tsx +45 -0
- package/src/app/components/ui/resizable.tsx +56 -0
- package/src/app/components/ui/scroll-area.tsx +58 -0
- package/src/app/components/ui/select.tsx +189 -0
- package/src/app/components/ui/separator.tsx +28 -0
- package/src/app/components/ui/sheet.tsx +139 -0
- package/src/app/components/ui/sidebar.tsx +726 -0
- package/src/app/components/ui/skeleton.tsx +13 -0
- package/src/app/components/ui/slider.tsx +63 -0
- package/src/app/components/ui/sonner.tsx +25 -0
- package/src/app/components/ui/switch.tsx +31 -0
- package/src/app/components/ui/table.tsx +116 -0
- package/src/app/components/ui/tabs.tsx +66 -0
- package/src/app/components/ui/textarea.tsx +18 -0
- package/src/app/components/ui/toggle-group.tsx +73 -0
- package/src/app/components/ui/toggle.tsx +47 -0
- package/src/app/components/ui/tooltip.tsx +61 -0
- package/src/app/components/ui/use-mobile.ts +21 -0
- package/src/app/components/ui/utils.ts +6 -0
- package/src/app/pages/DesignSystem.tsx +189 -0
- package/src/app/pages/Team.tsx +168 -0
- package/src/app/routes.tsx +14 -0
- package/src/assets/6276cd19433d265f363bddc7f52f4937da9b1dd4.png +0 -0
- package/src/assets/9d7a018c9a6938d439d9059f82753d232ce63804.png +0 -0
- package/src/imports/Buttons-3-409.tsx +46 -0
- package/src/imports/Buttons-3-962.tsx +155 -0
- package/src/imports/ButtonsAndActions.tsx +139 -0
- package/src/imports/Dashboard.tsx +1914 -0
- package/src/imports/DesignSystem.tsx +6008 -0
- package/src/imports/Forms.tsx +1088 -0
- package/src/imports/Navigation-17-3259.tsx +564 -0
- package/src/imports/Navigation-18-957.tsx +873 -0
- package/src/imports/Wireframe.tsx +112 -0
- package/src/imports/svg-1ifosis1tx.ts +3 -0
- package/src/imports/svg-5spfd.tsx +1 -0
- package/src/imports/svg-6180by7m37.ts +3 -0
- package/src/imports/svg-guy0p.tsx +1 -0
- package/src/imports/svg-hm2n0.tsx +2 -0
- package/src/imports/svg-j8o95ccqq7.ts +26 -0
- package/src/imports/svg-liuy2nykz3.ts +10 -0
- package/src/imports/svg-pp9c3.tsx +1 -0
- package/src/imports/svg-pr0k9194w9.ts +33 -0
- package/src/imports/svg-umftvfphsk.ts +48 -0
- package/src/imports/svg-vbi95q76mb.ts +23 -0
- package/src/imports/svg-vxjpl.tsx +1 -0
- package/src/imports/svg-wl30wxxv53.ts +3 -0
- package/src/main.tsx +7 -0
- package/src/styles/fonts.css +1 -0
- package/src/styles/forms.css +181 -0
- package/src/styles/header.css +48 -0
- package/src/styles/index.css +7 -0
- package/src/styles/navlinks.css +112 -0
- package/src/styles/popover.css +48 -0
- package/src/styles/tailwind.css +4 -0
- package/src/styles/theme.css +312 -0
- 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,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,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
|
+
})
|