@pebble-software/bonsai 0.0.8 → 0.1.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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +371 -88
  3. package/dist/ast.js +10 -0
  4. package/dist/ast.js.map +1 -0
  5. package/dist/chunks/builder.meta-WpXc5VBB.js +666 -0
  6. package/dist/chunks/builder.meta-WpXc5VBB.js.map +1 -0
  7. package/dist/chunks/button-jfJanilw.js +161 -0
  8. package/dist/chunks/button-jfJanilw.js.map +1 -0
  9. package/dist/chunks/create-renderer-DHneTPd-.js +280 -0
  10. package/dist/chunks/create-renderer-DHneTPd-.js.map +1 -0
  11. package/dist/chunks/index-DzpRdatr.js +359 -0
  12. package/dist/chunks/index-DzpRdatr.js.map +1 -0
  13. package/dist/chunks/render-shared-Ci28BpkI.js +1989 -0
  14. package/dist/chunks/render-shared-Ci28BpkI.js.map +1 -0
  15. package/dist/components/core/bonsai.d.ts +5 -0
  16. package/dist/components/core/render-shared.d.ts +123 -0
  17. package/dist/components/core/render-tree-client.d.ts +4 -0
  18. package/dist/components/core/render-tree-server.d.ts +2 -0
  19. package/dist/components/ui/a.d.ts +3 -0
  20. package/dist/components/ui/accordion.d.ts +17 -0
  21. package/dist/components/ui/alert-dialog.d.ts +23 -0
  22. package/dist/components/ui/alert.d.ts +12 -0
  23. package/dist/components/ui/avatar.d.ts +21 -0
  24. package/dist/components/ui/badge.d.ts +10 -0
  25. package/dist/components/ui/breadcrumb.d.ts +10 -0
  26. package/dist/components/ui/button.d.ts +14 -0
  27. package/dist/components/ui/calendar.d.ts +9 -0
  28. package/dist/components/ui/card.d.ts +15 -0
  29. package/dist/components/ui/checkbox.d.ts +7 -0
  30. package/dist/components/ui/collapsible.d.ts +5 -0
  31. package/dist/components/ui/combobox.d.ts +31 -0
  32. package/dist/components/ui/command.d.ts +23 -0
  33. package/dist/components/ui/dialog.d.ts +23 -0
  34. package/dist/components/ui/drawer.d.ts +22 -0
  35. package/dist/components/ui/dropdown-menu.d.ts +29 -0
  36. package/dist/components/ui/form.d.ts +24 -0
  37. package/dist/components/ui/h.d.ts +10 -0
  38. package/dist/components/ui/input-group.d.ts +18 -0
  39. package/dist/components/ui/input-otp.d.ts +11 -0
  40. package/dist/components/ui/input.d.ts +3 -0
  41. package/dist/components/ui/label.d.ts +10 -0
  42. package/dist/components/ui/loader.d.ts +14 -0
  43. package/dist/components/ui/p.d.ts +11 -0
  44. package/dist/components/ui/popover.d.ts +9 -0
  45. package/dist/components/ui/progress.d.ts +31 -0
  46. package/dist/components/ui/scroll-area.d.ts +13 -0
  47. package/dist/components/ui/select.d.ts +17 -0
  48. package/dist/components/ui/separator.d.ts +8 -0
  49. package/dist/components/ui/sidebar.d.ts +70 -0
  50. package/dist/components/ui/signature-pad.d.ts +7 -0
  51. package/dist/components/ui/skeleton.d.ts +7 -0
  52. package/dist/components/ui/switch.d.ts +8 -0
  53. package/dist/components/ui/table.d.ts +14 -0
  54. package/dist/components/ui/tabs.d.ts +15 -0
  55. package/dist/components/ui/textarea.d.ts +5 -0
  56. package/dist/components/ui/toast.d.ts +46 -0
  57. package/dist/components/ui/tooltip.d.ts +15 -0
  58. package/dist/constants.d.ts +1 -0
  59. package/dist/constants.js +11 -0
  60. package/dist/constants.js.map +1 -0
  61. package/dist/core.d.ts +12 -0
  62. package/dist/core.js +17 -0
  63. package/dist/core.js.map +1 -0
  64. package/dist/hooks/haptics.d.ts +8 -0
  65. package/dist/hooks/use-mobile.d.ts +1 -0
  66. package/dist/index.css +7 -0
  67. package/dist/index.d.ts +27 -339
  68. package/dist/index.js +532 -4297
  69. package/dist/index.js.map +1 -0
  70. package/dist/lib/ast/cache.d.ts +8 -0
  71. package/dist/lib/ast/evaluator.d.ts +2 -0
  72. package/dist/lib/ast/helpers.d.ts +2 -0
  73. package/dist/lib/ast/index.d.ts +29 -0
  74. package/dist/lib/ast/setup.d.ts +2 -0
  75. package/dist/lib/ast/types.d.ts +1 -0
  76. package/dist/lib/ast/utils.d.ts +4 -0
  77. package/dist/lib/haptics.d.ts +8 -0
  78. package/dist/lib/registry/drift.d.ts +17 -0
  79. package/dist/lib/registry/identity.d.ts +24 -0
  80. package/dist/lib/registry/json-schema-to-zod.d.ts +32 -0
  81. package/dist/lib/registry/manifest-schema.d.ts +62 -0
  82. package/dist/lib/registry/manifest.d.ts +26 -0
  83. package/dist/lib/registry/merge-generated.d.ts +7 -0
  84. package/dist/lib/registry/pebble-registry.d.ts +1 -0
  85. package/dist/lib/registry/types.d.ts +29 -0
  86. package/dist/lib/registry/validate.d.ts +18 -0
  87. package/dist/lib/renderer/compile-template.d.ts +70 -0
  88. package/dist/lib/ui/registry.d.ts +19 -0
  89. package/dist/lib/utils.d.ts +3 -0
  90. package/dist/library/constants/src/components.d.ts +59 -0
  91. package/dist/library/constants/src/index.d.ts +2 -0
  92. package/dist/library/constants/src/webhook-events.d.ts +6 -0
  93. package/dist/library/schemas/src/bonsai.schema.d.ts +24 -0
  94. package/dist/library/schemas/src/builder.meta.d.ts +26 -0
  95. package/dist/presets/calendar.js +374 -0
  96. package/dist/presets/calendar.js.map +1 -0
  97. package/dist/presets/signature.js +405 -0
  98. package/dist/presets/signature.js.map +1 -0
  99. package/dist/renderer/core-registry.d.ts +52 -0
  100. package/dist/renderer/create-renderer.d.ts +38 -0
  101. package/dist/renderer/presets/calendar.d.ts +5 -0
  102. package/dist/renderer/presets/signature.d.ts +6 -0
  103. package/dist/schemas.d.ts +2 -0
  104. package/dist/schemas.js +13 -0
  105. package/dist/schemas.js.map +1 -0
  106. package/dist/styles/css/base.css +144 -0
  107. package/dist/styles/css/fonts.css +25 -0
  108. package/dist/styles/css/maplibre.css +29 -0
  109. package/dist/styles/css/overrides.css +7 -0
  110. package/dist/styles/css/tailwind.css +1 -0
  111. package/dist/styles/css/theme.css +197 -0
  112. package/dist/styles/css/tw-animate.css +1 -0
  113. package/dist/styles/css/utilities.css +44 -0
  114. package/dist/styles/presets.json +20 -0
  115. package/dist/styles/vendor/maplibre-gl.css +701 -0
  116. package/dist/styles/vendor/tw-animate.css +692 -0
  117. package/dist/types.d.ts +1 -0
  118. package/package.json +64 -19
@@ -0,0 +1,144 @@
1
+ /* --- Global Resets & Theme Overrides --- */
2
+ @layer base {
3
+ /* THEME DEFINITIONS
4
+ Usage: <html data-theme="red"> or <body data-theme="indigo">
5
+ Logic:
6
+ - Main: The vibrant accent color
7
+ - Background: The secondary pastel version
8
+ - Main-Foreground: White for dark accents, Black for light accents (EX. text on buttons)
9
+ */
10
+
11
+ [data-theme="red"] {
12
+ --color-main: var(--color-accent-red);
13
+ --color-main-secondary: var(--color-accent-red-secondary);
14
+ --color-background: var(--color-accent-red-secondary);
15
+ --color-main-foreground: oklch(100% 0 0);
16
+ }
17
+
18
+ [data-theme="orange"] {
19
+ --color-main: var(--color-accent-orange);
20
+ --color-main-secondary: var(--color-accent-orange-secondary);
21
+ --color-background: var(--color-accent-orange-secondary);
22
+ --color-main-foreground: oklch(0% 0 0);
23
+ }
24
+
25
+ [data-theme="amber"] {
26
+ --color-main: var(--color-accent-amber);
27
+ --color-main-secondary: var(--color-accent-amber-secondary);
28
+ --color-background: var(--color-accent-amber-secondary);
29
+ --color-main-foreground: oklch(0% 0 0);
30
+ }
31
+
32
+ [data-theme="yellow"] {
33
+ --color-main: var(--color-accent-yellow);
34
+ --color-main-secondary: var(--color-accent-yellow-secondary);
35
+ --color-background: var(--color-accent-yellow-secondary);
36
+ --color-main-foreground: oklch(0% 0 0);
37
+ }
38
+
39
+ [data-theme="lime"] {
40
+ --color-main: var(--color-accent-lime);
41
+ --color-main-secondary: var(--color-accent-lime-secondary);
42
+ --color-background: var(--color-accent-lime-secondary);
43
+ --color-main-foreground: oklch(0% 0 0);
44
+ }
45
+
46
+ [data-theme="green"] {
47
+ --color-main: var(--color-accent-green);
48
+ --color-main-secondary: var(--color-accent-green-secondary);
49
+ --color-background: var(--color-accent-green-secondary);
50
+ --color-main-foreground: oklch(0% 0 0);
51
+ }
52
+
53
+ [data-theme="emerald"] {
54
+ --color-main: var(--color-accent-emerald);
55
+ --color-main-secondary: var(--color-accent-emerald-secondary);
56
+ --color-background: var(--color-accent-emerald-secondary);
57
+ --color-main-foreground: oklch(0% 0 0);
58
+ }
59
+
60
+ [data-theme="teal"] {
61
+ --color-main: var(--color-accent-teal);
62
+ --color-main-secondary: var(--color-accent-teal-secondary);
63
+ --color-background: var(--color-accent-teal-secondary);
64
+ --color-main-foreground: oklch(0% 0 0);
65
+ }
66
+
67
+ [data-theme="cyan"] {
68
+ --color-main: var(--color-accent-cyan);
69
+ --color-main-secondary: var(--color-accent-cyan-secondary);
70
+ --color-background: var(--color-accent-cyan-secondary);
71
+ --color-main-foreground: oklch(0% 0 0);
72
+ }
73
+
74
+ [data-theme="sky"] {
75
+ --color-main: var(--color-accent-sky);
76
+ --color-main-secondary: var(--color-accent-sky-secondary);
77
+ --color-background: var(--color-accent-sky-secondary);
78
+ --color-main-foreground: oklch(0% 0 0);
79
+ }
80
+
81
+ [data-theme="blue"] {
82
+ --color-main: var(--color-accent-blue);
83
+ --color-main-secondary: var(--color-accent-blue-secondary);
84
+ --color-background: var(--color-accent-blue-secondary);
85
+ --color-main-foreground: oklch(100% 0 0);
86
+ }
87
+
88
+ [data-theme="indigo"] {
89
+ --color-main: var(--color-accent-indigo);
90
+ --color-main-secondary: var(--color-accent-indigo-secondary);
91
+ --color-background: var(--color-accent-indigo-secondary);
92
+ --color-main-foreground: oklch(100% 0 0);
93
+ }
94
+
95
+ [data-theme="violet"] {
96
+ --color-main: var(--color-accent-violet);
97
+ --color-main-secondary: var(--color-accent-violet-secondary);
98
+ --color-background: var(--color-accent-violet-secondary);
99
+ --color-main-foreground: oklch(100% 0 0);
100
+ }
101
+
102
+ [data-theme="purple"] {
103
+ --color-main: var(--color-accent-purple);
104
+ --color-main-secondary: var(--color-accent-purple-secondary);
105
+ --color-background: var(--color-accent-purple-secondary);
106
+ --color-main-foreground: oklch(100% 0 0);
107
+ }
108
+
109
+ [data-theme="fuchsia"] {
110
+ --color-main: var(--color-accent-fuchsia);
111
+ --color-main-secondary: var(--color-accent-fuchsia-secondary);
112
+ --color-background: var(--color-accent-fuchsia-secondary);
113
+ --color-main-foreground: oklch(0% 0 0);
114
+ }
115
+
116
+ [data-theme="pink"] {
117
+ --color-main: var(--color-accent-pink);
118
+ --color-main-secondary: var(--color-accent-pink-secondary);
119
+ --color-background: var(--color-accent-pink-secondary);
120
+ --color-main-foreground: oklch(0% 0 0);
121
+ }
122
+
123
+ [data-theme="rose"] {
124
+ --color-main: var(--color-accent-rose);
125
+ --color-main-secondary: var(--color-accent-rose-secondary);
126
+ --color-background: var(--color-accent-rose-secondary);
127
+ --color-main-foreground: oklch(100% 0 0);
128
+ }
129
+
130
+ body {
131
+ font-family: var(--font-body);
132
+ background-color: var(--color-background);
133
+ color: var(--color-foreground);
134
+ }
135
+
136
+ h1,
137
+ h2,
138
+ h3,
139
+ h4,
140
+ h5,
141
+ h6 {
142
+ font-family: var(--font-heading);
143
+ }
144
+ }
@@ -0,0 +1,25 @@
1
+ /* --- Fonts --- */
2
+ @font-face {
3
+ font-family: "Great Vibes";
4
+ src: url("https://brand.pebble.software/fonts/GreatVibes-Regular.ttf")
5
+ format("truetype");
6
+ font-weight: auto;
7
+ font-style: normal;
8
+ font-display: swap;
9
+ }
10
+ @font-face {
11
+ font-family: "Sora";
12
+ src: url("https://brand.pebble.software/fonts/Sora-VariableFont_wght.ttf")
13
+ format("truetype");
14
+ font-weight: 100 900;
15
+ font-style: normal;
16
+ font-display: swap;
17
+ }
18
+ @font-face {
19
+ font-family: "Fredoka";
20
+ src: url("https://brand.pebble.software/fonts/Fredoka-VariableFont_wdth,wght.ttf")
21
+ format("truetype");
22
+ font-weight: 300 700;
23
+ font-style: normal;
24
+ font-display: swap;
25
+ }
@@ -0,0 +1,29 @@
1
+ @import "maplibre-gl/dist/maplibre-gl.css";
2
+
3
+ /* --- MapLibre Pebble Overrides --- */
4
+ .maplibregl-ctrl {
5
+ @apply bg-surface! outline-0! shadow-none! *:[button]:rounded-base *:[button]:bg-surface! *:[button]:hover:bg-main! *:[button]:transition-all *:[button]:duration-200 *:[button]:border-2! *:[button]:border-border! *:[button]:shadow-xs! *:[button]:-translate-0.5! *:[button]:hover:shadow-min! *:[button]:hover:-translate-px! *:[button]:focus-visible:-translate-px! *:[button]:focus-visible:shadow-min! *:[button]:active:shadow-none! *:[button]:active:translate-0! *:[button]:aria-disabled:shadow-none! *:[button]:aria-disabled:translate-0!;
6
+ }
7
+
8
+ .maplibregl-ctrl-zoom-in {
9
+ @apply -mb-0.5! rounded-b-none!;
10
+ }
11
+
12
+ .maplibregl-ctrl-zoom-out {
13
+ @apply rounded-t-none!;
14
+ }
15
+
16
+ .maplibregl-ctrl-fullscreen {
17
+ @apply p-1!;
18
+ }
19
+
20
+ .maplibregl-ctrl-scale {
21
+ @apply transition-[width] duration-500 delay-100 rounded-sm! border-2! border-border! hover:bg-main! bg-surface! font-bold! leading-none! py-1! shadow-sm! font-mono! text-xs!;
22
+ }
23
+
24
+ .maplibregl-user-location-dot {
25
+ @apply shadow-xl! bg-accent-blue! before:bg-accent-blue! after:border-border!;
26
+ }
27
+ .maplibregl-user-location-accuracy-circle {
28
+ @apply bg-accent-blue/20!;
29
+ }
@@ -0,0 +1,7 @@
1
+ /* --- Recharts Overrides --- */
2
+ .recharts-wrapper > svg > g {
3
+ outline: none !important;
4
+ }
5
+ .recharts-wrapper .recharts-cartesian-grid-horizontal line:last-child {
6
+ stroke-opacity: 0;
7
+ }
@@ -0,0 +1 @@
1
+ @import "tailwindcss";
@@ -0,0 +1,197 @@
1
+ @theme {
2
+ /* --- Typography --- */
3
+ --font-body: "Sora", ui-sans-serif, system-ui, sans-serif;
4
+ --font-heading: "Fredoka", ui-monospace, monospace;
5
+ --font-signature: "Great Vibes", cursive;
6
+ --font-weight-base: 400;
7
+ --font-weight-heading: 600;
8
+
9
+ /* --- Core Colors (Default - Emerald) --- */
10
+ --color-main: var(--color-accent-emerald);
11
+ --color-main-secondary: var(--color-accent-emerald-secondary);
12
+ --color-main-foreground: oklch(0% 0 0);
13
+
14
+ --color-background: var(--color-white);
15
+ --color-foreground: oklch(0% 0 0);
16
+ --color-surface: oklch(100% 0 0);
17
+ --color-muted: oklch(0% 0 0 / 0.65);
18
+ --color-subtle: oklch(0% 0 0 / 0.5);
19
+
20
+ --color-border: oklch(0% 0 0);
21
+ --color-ring: oklch(0% 0 0);
22
+ --color-overlay: oklch(0% 0 0 / 0.8);
23
+
24
+ /* --- Accent Palette --- */
25
+ --color-accent-red: oklch(67.28% 0.2147 24.22);
26
+ --color-accent-red-secondary: oklch(93.3% 0.0339 17.77);
27
+
28
+ --color-accent-orange: oklch(72.27% 0.1894 50.19);
29
+ --color-accent-orange-secondary: oklch(95.38% 0.0357 72.89);
30
+
31
+ --color-accent-amber: oklch(84.08% 0.1725 84.2);
32
+ --color-accent-amber-secondary: oklch(96% 0.04 85);
33
+
34
+ --color-accent-yellow: oklch(86.03% 0.176 92.36);
35
+ --color-accent-yellow-secondary: oklch(96.79% 0.0654 102.26);
36
+
37
+ --color-accent-lime: oklch(83.29% 0.2331 132.51);
38
+ --color-accent-lime-secondary: oklch(95.37% 0.0549 125.19);
39
+
40
+ --color-accent-green: oklch(79.76% 0.2044 153.08);
41
+ --color-accent-green-secondary: oklch(96.47% 0.0401 157.79);
42
+
43
+ --color-accent-emerald: oklch(77.54% 0.1681 162.78);
44
+ --color-accent-emerald-secondary: oklch(95.31% 0.0496 169.04);
45
+
46
+ --color-accent-teal: oklch(78.57% 0.1422 180.36);
47
+ --color-accent-teal-secondary: oklch(95.08% 0.0481 184.07);
48
+
49
+ --color-accent-cyan: oklch(76.89% 0.139164 219.13);
50
+ --color-accent-cyan-secondary: oklch(94.61% 0.043 211.12);
51
+
52
+ --color-accent-sky: oklch(66.9% 0.18368 248.8066);
53
+ --color-accent-sky-secondary: oklch(94.27% 0.0268 242.57);
54
+
55
+ --color-accent-blue: oklch(67.47% 0.1726 259.49);
56
+ --color-accent-blue-secondary: oklch(93.46% 0.0305 255.11);
57
+
58
+ --color-accent-indigo: oklch(66.34% 0.1806 277.2);
59
+ --color-accent-indigo-secondary: oklch(92.13% 0.0388 282.36);
60
+
61
+ --color-accent-violet: oklch(70.28% 0.1753 295.36);
62
+ --color-accent-violet-secondary: oklch(93% 0.04 295);
63
+
64
+ --color-accent-purple: oklch(71.9% 0.198 310.03);
65
+ --color-accent-purple-secondary: oklch(94.11% 0.036556 308.0303);
66
+
67
+ --color-accent-fuchsia: oklch(73.43% 0.2332 321.41);
68
+ --color-accent-fuchsia-secondary: oklch(94% 0.04 321);
69
+
70
+ --color-accent-pink: oklch(71.5% 0.197 354.23);
71
+ --color-accent-pink-secondary: oklch(95.16% 0.0242 343.23);
72
+
73
+ --color-accent-rose: oklch(70.79% 0.1862 16.25);
74
+ --color-accent-rose-secondary: oklch(93.37% 0.0339 12.05);
75
+
76
+ /* --- Chart Colors (for Recharts graphs only) --- */
77
+ --color-chart-1: var(--color-accent-red);
78
+ --color-chart-2: var(--color-accent-orange);
79
+ --color-chart-3: var(--color-accent-amber);
80
+ --color-chart-4: var(--color-accent-yellow);
81
+ --color-chart-5: var(--color-accent-lime);
82
+ --color-chart-6: var(--color-accent-green);
83
+ --color-chart-7: var(--color-accent-emerald);
84
+ --color-chart-8: var(--color-accent-teal);
85
+ --color-chart-9: var(--color-accent-cyan);
86
+ --color-chart-10: var(--color-accent-sky);
87
+ --color-chart-11: var(--color-accent-blue);
88
+ --color-chart-12: var(--color-accent-indigo);
89
+ --color-chart-13: var(--color-accent-violet);
90
+ --color-chart-14: var(--color-accent-purple);
91
+ --color-chart-15: var(--color-accent-fuchsia);
92
+ --color-chart-16: var(--color-accent-pink);
93
+ --color-chart-17: var(--color-accent-rose);
94
+ --color-chart-active-dot: var(--color-foreground);
95
+
96
+ /* --- Borders --- */
97
+ --default-border-width: 2px;
98
+
99
+ /* --- Shadows & Spacing --- */
100
+ --radius-base: var(--radius-lg);
101
+ --spacing-boxShadowX: 3px;
102
+ --spacing-boxShadowY: 3px;
103
+
104
+ /* --- Drop Shadows --- */
105
+ --shadow-min: 1px 1px 0px 0px var(--color-border);
106
+ --shadow-xs: 2px 2px 0px 0px var(--color-border);
107
+ --shadow-sm: 3px 3px 0px 0px var(--color-border);
108
+ --shadow-md: 4px 4px 0px 0px var(--color-border);
109
+ --shadow-lg: 4.75px 4.75px 0px 0px var(--color-border);
110
+ --shadow-xl: 5.5px 5.5px 0px 0px var(--color-border);
111
+
112
+ --shadow-default: var(--shadow-md);
113
+
114
+ /* --- Inset Shadows --- */
115
+ --inset-shadow-xs: inset 1px 1px 0px 0px var(--color-border);
116
+ --inset-shadow-sm: inset 2px 2px 0px 0px var(--color-border);
117
+ --inset-shadow-md: inset 3px 3px 0px 0px var(--color-border);
118
+ --inset-shadow-lg: inset 4px 4px 0px 0px var(--color-border);
119
+ --inset-shadow-xl: inset 5px 5px 0px 0px var(--color-border);
120
+
121
+ /* --- Aspect Ratios --- */
122
+ --aspect-a4: 210/297;
123
+ --aspect-a4-landscape: 297/210;
124
+
125
+ /* --- Animations & Keyframes --- */
126
+ --animate-cloud-move: cloud-move 60s linear infinite alternate;
127
+ --animate-float: float 3s ease-in-out infinite;
128
+ --animate-subtle-float: subtle-float 3s ease-in-out infinite;
129
+ --animate-color-cycle: color-cycle 30s ease-in-out infinite;
130
+ --animate-color-cycle-vibrant: color-cycle-vibrant 30s ease-in-out infinite;
131
+ --animate-bg-color-cycle: bg-color-cycle 30s ease-in-out infinite;
132
+ --animate-bg-color-cycle-vibrant: bg-color-cycle-vibrant 30s ease-in-out
133
+ infinite;
134
+ --animate-font-color-cycle-vibrant: font-color-cycle-vibrant 30s ease-in-out
135
+ infinite;
136
+
137
+ @keyframes cloud-move {
138
+ 0% {
139
+ transform: translateX(0);
140
+ }
141
+ 100% {
142
+ transform: translateX(-100vw);
143
+ }
144
+ }
145
+ @keyframes float {
146
+ 0%,
147
+ 100% {
148
+ transform: translateY(0%);
149
+ }
150
+ 50% {
151
+ transform: translateY(-5%);
152
+ }
153
+ }
154
+ @keyframes subtle-float {
155
+ 0%,
156
+ 100% {
157
+ transform: translateY(0%);
158
+ }
159
+ 50% {
160
+ transform: translateY(-2%);
161
+ }
162
+ }
163
+
164
+ @keyframes bg-color-cycle {
165
+ 0% {
166
+ background-color: var(--color-accent-red-secondary);
167
+ }
168
+ 50% {
169
+ background-color: var(--color-accent-cyan-secondary);
170
+ }
171
+ 100% {
172
+ background-color: var(--color-accent-rose-secondary);
173
+ }
174
+ }
175
+ @keyframes bg-color-cycle-vibrant {
176
+ 0% {
177
+ background-color: var(--color-accent-red);
178
+ }
179
+ 50% {
180
+ background-color: var(--color-accent-cyan);
181
+ }
182
+ 100% {
183
+ background-color: var(--color-accent-rose);
184
+ }
185
+ }
186
+ @keyframes font-color-cycle-vibrant {
187
+ 0% {
188
+ color: var(--color-accent-red);
189
+ }
190
+ 50% {
191
+ color: var(--color-accent-cyan);
192
+ }
193
+ 100% {
194
+ color: var(--color-accent-rose);
195
+ }
196
+ }
197
+ }
@@ -0,0 +1 @@
1
+ @import "tw-animate-css";
@@ -0,0 +1,44 @@
1
+ /* --- Utilities --- */
2
+ @layer utilities {
3
+ .neo-base {
4
+ @apply touch-manipulation select-none appearance-none outline-none;
5
+ }
6
+ .neo-popup-focus {
7
+ @apply focus-visible:after:absolute focus-visible:after:-inset-1 focus-visible:after:border-8 focus-visible:after:pointer-events-none
8
+ focus-visible:after:border-foreground focus-visible:after:rounded-[inherit] focus-visible:after:blur-[2px];
9
+ }
10
+ .neo-accordion-focus {
11
+ @apply focus:outline-none focus-visible:after:absolute focus-visible:after:-inset-px focus-visible:after:border-2 focus-visible:after:pointer-events-none
12
+ focus-visible:after:border-foreground/30 focus-visible:after:rounded-sm;
13
+ }
14
+ .neo-button-focus {
15
+ @apply focus:outline-none focus-visible:after:absolute focus-visible:after:-inset-px focus-visible:after:border-3 focus-visible:after:pointer-events-none
16
+ focus-visible:after:border-foreground/30 focus-visible:after:rounded-[inherit];
17
+ }
18
+ .neo-input-focus {
19
+ @apply outline-none hover:shadow-sm hover:-translate-[3px] focus-visible:shadow-sm focus-visible:-translate-[3px];
20
+ }
21
+ .neo-switch-focus {
22
+ @apply outline-none hover:shadow-xs hover:-translate-[2px] focus-visible:shadow-xs focus-visible:-translate-[2px];
23
+ }
24
+ .neo-chips-focus {
25
+ @apply translate-0 has-data-pressed:shadow-sm has-data-pressed:-translate-[3px] outline-none hover:shadow-sm hover:-translate-[3px] focus-visible:shadow-sm focus-visible:-translate-[3px];
26
+ }
27
+ .neo-checkbox-focus {
28
+ @apply hover:shadow-xs hover:-translate-0.5 focus-visible:shadow-xs focus-visible:-translate-0.5 active:translate-0 active:shadow-none;
29
+ }
30
+ .neo-sidebar-button-focus {
31
+ @apply border-2 border-transparent focus-visible:border-black hover:border-black hover:shadow-sm hover:-translate-[3px] focus-visible:shadow-sm focus-visible:-translate-[3px] active:shadow-none active:translate-0;
32
+ }
33
+ .neo-scrollbar-focus {
34
+ @apply active:z-14 hover:z-12 focus:[&_svg]:scale-110 focus:z-12 focus:[&_svg]:fill-main hover:[&_svg]:fill-main focus:[&_svg]:text-main hover:[&_svg]:text-main;
35
+ }
36
+
37
+ .no-scrollbar::-webkit-scrollbar {
38
+ display: none;
39
+ }
40
+ .no-scrollbar {
41
+ -ms-overflow-style: none;
42
+ scrollbar-width: none;
43
+ }
44
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "layers": {
3
+ "tailwind": "css/tailwind.css",
4
+ "tw-animate": "css/tw-animate.css",
5
+ "fonts": "css/fonts.css",
6
+ "theme": "css/theme.css",
7
+ "base": "css/base.css",
8
+ "utilities": "css/utilities.css",
9
+ "overrides": "css/overrides.css",
10
+ "maplibre": "css/maplibre.css"
11
+ },
12
+ "presets": {
13
+ "core": ["tailwind", "theme", "base"],
14
+ "full": ["tailwind", "tw-animate", "fonts", "theme", "base", "utilities", "overrides"]
15
+ },
16
+ "vendor": {
17
+ "tw-animate-css": "vendor/tw-animate.css",
18
+ "maplibre-gl/dist/maplibre-gl.css": "vendor/maplibre-gl.css"
19
+ }
20
+ }