@alpaca-editor/core 1.0.3897 → 1.0.3899

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 (95) hide show
  1. package/dist/components/ui/CardConnector.d.ts +3 -0
  2. package/dist/components/ui/CardConnector.js +6 -0
  3. package/dist/components/ui/CardConnector.js.map +1 -0
  4. package/dist/components/ui/button.js +1 -1
  5. package/dist/components/ui/button.js.map +1 -1
  6. package/dist/components/ui/card.d.ts +12 -0
  7. package/dist/components/ui/card.js +10 -0
  8. package/dist/components/ui/card.js.map +1 -0
  9. package/dist/config/config.js +7 -0
  10. package/dist/config/config.js.map +1 -1
  11. package/dist/editor/MobileLayout.js +15 -4
  12. package/dist/editor/MobileLayout.js.map +1 -1
  13. package/dist/editor/Titlebar.js +1 -1
  14. package/dist/editor/Titlebar.js.map +1 -1
  15. package/dist/editor/client/EditorClient.d.ts +13 -4
  16. package/dist/editor/client/EditorClient.js +34 -11
  17. package/dist/editor/client/EditorClient.js.map +1 -1
  18. package/dist/editor/client/editContext.d.ts +3 -1
  19. package/dist/editor/client/editContext.js.map +1 -1
  20. package/dist/editor/control-center/QuotaInfo.js +76 -26
  21. package/dist/editor/control-center/QuotaInfo.js.map +1 -1
  22. package/dist/editor/control-center/WebSocketMessages.d.ts +1 -0
  23. package/dist/editor/control-center/WebSocketMessages.js +66 -0
  24. package/dist/editor/control-center/WebSocketMessages.js.map +1 -0
  25. package/dist/editor/services/aiService.d.ts +1 -0
  26. package/dist/editor/services/aiService.js +4 -1
  27. package/dist/editor/services/aiService.js.map +1 -1
  28. package/dist/editor/sidebar/SidebarView.js +14 -14
  29. package/dist/editor/sidebar/SidebarView.js.map +1 -1
  30. package/dist/editor/ui/Icons.d.ts +3 -1
  31. package/dist/editor/ui/Icons.js +2 -2
  32. package/dist/editor/ui/Icons.js.map +1 -1
  33. package/dist/editor/ui/SimpleTabs.js +1 -1
  34. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  35. package/dist/editor/ui/Splitter.d.ts +1 -0
  36. package/dist/editor/ui/Splitter.js +119 -58
  37. package/dist/editor/ui/Splitter.js.map +1 -1
  38. package/dist/fonts/index.d.ts +4 -0
  39. package/dist/fonts/index.js +9 -0
  40. package/dist/fonts/index.js.map +1 -0
  41. package/dist/index.d.ts +3 -1
  42. package/dist/index.js +2 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/page-wizard/WizardBox.d.ts +2 -8
  45. package/dist/page-wizard/WizardBox.js +3 -5
  46. package/dist/page-wizard/WizardBox.js.map +1 -1
  47. package/dist/page-wizard/WizardSteps.d.ts +4 -2
  48. package/dist/page-wizard/WizardSteps.js +41 -62
  49. package/dist/page-wizard/WizardSteps.js.map +1 -1
  50. package/dist/page-wizard/steps/CollectStep.js +10 -10
  51. package/dist/page-wizard/steps/CollectStep.js.map +1 -1
  52. package/dist/page-wizard/steps/CreatePage.js +6 -3
  53. package/dist/page-wizard/steps/CreatePage.js.map +1 -1
  54. package/dist/page-wizard/steps/Generate.js +27 -5
  55. package/dist/page-wizard/steps/Generate.js.map +1 -1
  56. package/dist/page-wizard/steps/ImagesStep.js +46 -44
  57. package/dist/page-wizard/steps/ImagesStep.js.map +1 -1
  58. package/dist/page-wizard/steps/SelectStep.js +11 -19
  59. package/dist/page-wizard/steps/SelectStep.js.map +1 -1
  60. package/dist/revision.d.ts +2 -2
  61. package/dist/revision.js +2 -2
  62. package/dist/splash-screen/NewPage.js +12 -11
  63. package/dist/splash-screen/NewPage.js.map +1 -1
  64. package/dist/splash-screen/SplashScreen.js +8 -7
  65. package/dist/splash-screen/SplashScreen.js.map +1 -1
  66. package/dist/styles.css +179 -104
  67. package/package.json +1 -1
  68. package/src/components/ui/CardConnector.tsx +21 -0
  69. package/src/components/ui/button.tsx +1 -1
  70. package/src/components/ui/card.tsx +44 -0
  71. package/src/config/config.tsx +7 -0
  72. package/src/editor/MobileLayout.tsx +20 -7
  73. package/src/editor/Titlebar.tsx +1 -1
  74. package/src/editor/client/EditorClient.tsx +53 -15
  75. package/src/editor/client/editContext.ts +9 -1
  76. package/src/editor/control-center/QuotaInfo.tsx +225 -95
  77. package/src/editor/control-center/WebSocketMessages.tsx +155 -0
  78. package/src/editor/services/aiService.ts +4 -1
  79. package/src/editor/sidebar/SidebarView.tsx +46 -44
  80. package/src/editor/ui/Icons.tsx +2 -3
  81. package/src/editor/ui/SimpleTabs.tsx +1 -1
  82. package/src/editor/ui/Splitter.tsx +152 -80
  83. package/src/fonts/index.ts +10 -0
  84. package/src/index.ts +9 -1
  85. package/src/page-wizard/WizardBox.tsx +3 -39
  86. package/src/page-wizard/WizardSteps.tsx +231 -161
  87. package/src/page-wizard/steps/CollectStep.tsx +10 -11
  88. package/src/page-wizard/steps/CreatePage.tsx +130 -84
  89. package/src/page-wizard/steps/Generate.tsx +45 -17
  90. package/src/page-wizard/steps/ImagesStep.tsx +161 -141
  91. package/src/page-wizard/steps/SelectStep.tsx +92 -76
  92. package/src/revision.ts +2 -2
  93. package/src/splash-screen/NewPage.tsx +107 -80
  94. package/src/splash-screen/SplashScreen.tsx +49 -33
  95. package/styles.css +38 -0
@@ -4,11 +4,14 @@ import { useEditContext } from "../../editor/client/editContext";
4
4
  import { executePrompt } from "../../editor/services/aiService";
5
5
  import { createWizardAiContext } from "../service";
6
6
  import { classNames } from "primereact/utils";
7
- import { Splitter, SplitterPanel } from "../../editor/ui/Splitter";
8
7
  import { InputTextarea } from "primereact/inputtextarea";
9
8
  import { StepComponentProps } from "../../config/types";
10
9
  import { ActionButton } from "../../components/ActionButton";
11
10
  import Generate from "./Generate";
11
+ import { WizardBox } from "../WizardBox";
12
+ import { WizardBoxConnector } from "../WizardBoxConnector";
13
+ import { Settings, CheckSquare } from "lucide-react";
14
+
12
15
  type Option = {
13
16
  title: string;
14
17
  description: string;
@@ -174,82 +177,95 @@ export function SelectStep({
174
177
  );
175
178
  }
176
179
 
177
- const optionsPanel: SplitterPanel = {
178
- name: "options",
179
- defaultSize: "auto",
180
- content: (
181
- <div className="h-full p-4">
182
- {loading && (
183
- <div className="flex h-full items-center justify-center">
184
- <Generate title="Generating options..." />
180
+ return (
181
+ <div className="flex h-full">
182
+ <WizardBox
183
+ title="Configuration"
184
+ icon={<Settings />}
185
+ description="Configure instructions and regenerate options"
186
+ className="w-96"
187
+ >
188
+ <div className="flex h-full flex-col items-stretch">
189
+ <div className="relative flex-1">
190
+ <div className="absolute inset-0 overflow-y-auto pr-6">
191
+ <h3 className="text-sm font-bold">Instructions</h3>
192
+ <InputTextarea
193
+ className="h-48 w-full text-sm"
194
+ value={instructions}
195
+ onChange={(e) => setInstructions(e.target.value)}
196
+ placeholder="Enter instructions for the options"
197
+ />
198
+ </div>
185
199
  </div>
186
- )}
187
- {!loading && (
188
- <div>
189
- {options.length === 0 ? (
190
- <div className="p-4 text-gray-500">
191
- No options available. Try refreshing the page.
192
- </div>
193
- ) : (
194
- options.map((option, index) => {
195
- const isSelected = selectedOptions.includes(option.id);
196
-
197
- return (
198
- <div
199
- key={option.id}
200
- className={classNames(
201
- "mb-3 flex items-center rounded border-2 bg-white p-3",
202
- index % 2 === 0
203
- ? "animate-fadeRight"
204
- : "animate-fadeLeft",
205
- isSelected
206
- ? "text-canvas-pink border-canvas-pink"
207
- : "border-gray-300 text-gray-600",
208
- )}
209
- onClick={() => handleOptionSelect(option)}
210
- >
211
- <div className="flex flex-1 cursor-pointer flex-col">
212
- <div className="font-medium">{option.title}</div>
213
- <div className="text-xs text-gray-600">
214
- {option.description}
215
- </div>
216
- </div>
217
- {isSelected && (
218
- <div className="text-canvas-pink ml-2">✓</div>
219
- )}
220
- </div>
221
- );
222
- })
223
- )}
200
+ <div className="py-2">
201
+ <ActionButton
202
+ onClick={generateOptions}
203
+ isLoading={loading}
204
+ disabled={loading}
205
+ loadingText="Thinking..."
206
+ className="w-full"
207
+ >
208
+ Regenerate Options
209
+ </ActionButton>
224
210
  </div>
225
- )}
226
- </div>
227
- ),
228
- };
211
+ </div>
212
+ </WizardBox>
213
+ <WizardBoxConnector className="mt-6" />
214
+ <WizardBox
215
+ title="Select Options"
216
+ icon={<CheckSquare />}
217
+ description="Choose from the generated options below"
218
+ className="flex-1"
219
+ >
220
+ <div className="h-full">
221
+ {loading && (
222
+ <div className="flex h-full items-center justify-center">
223
+ <Generate title="Generating options..." />
224
+ </div>
225
+ )}
226
+ {!loading && (
227
+ <div>
228
+ {options.length === 0 ? (
229
+ <div className="p-4 text-gray-500">
230
+ No options available. Try refreshing the page.
231
+ </div>
232
+ ) : (
233
+ options.map((option, index) => {
234
+ const isSelected = selectedOptions.includes(option.id);
229
235
 
230
- const settingsPanel: SplitterPanel = {
231
- name: "settings",
232
- defaultSize: 400,
233
- content: (
234
- <div className="flex flex-col gap-2 pr-6">
235
- <h3 className="text-sm font-bold">Instructions</h3>
236
- <InputTextarea
237
- className="h-48 text-sm"
238
- value={instructions}
239
- onChange={(e) => setInstructions(e.target.value)}
240
- placeholder="Enter instructions for the options"
241
- />
242
- <ActionButton
243
- onClick={generateOptions}
244
- isLoading={loading}
245
- disabled={loading}
246
- loadingText="Thinking..."
247
- >
248
- Regenerate Options
249
- </ActionButton>
250
- </div>
251
- ),
252
- };
253
-
254
- return <Splitter panels={[settingsPanel, optionsPanel]} />;
236
+ return (
237
+ <div
238
+ key={option.id}
239
+ className={classNames(
240
+ "mb-3 flex items-center rounded border-2 bg-white p-3",
241
+ index % 2 === 0
242
+ ? "animate-fadeRight"
243
+ : "animate-fadeLeft",
244
+ isSelected
245
+ ? "text-theme-secondary border-theme-secondary"
246
+ : "border-gray-300 text-gray-600",
247
+ )}
248
+ onClick={() => handleOptionSelect(option)}
249
+ >
250
+ <div className="flex flex-1 cursor-pointer flex-col">
251
+ <div className="font-medium">{option.title}</div>
252
+ <div className="text-xs text-gray-600">
253
+ {option.description}
254
+ </div>
255
+ </div>
256
+ {isSelected && (
257
+ <div className="bg-theme-secondary ml-2 flex h-6 w-6 items-center justify-center rounded-full text-white">
258
+
259
+ </div>
260
+ )}
261
+ </div>
262
+ );
263
+ })
264
+ )}
265
+ </div>
266
+ )}
267
+ </div>
268
+ </WizardBox>
269
+ </div>
270
+ );
255
271
  }
package/src/revision.ts CHANGED
@@ -1,2 +1,2 @@
1
- export const version = "1.0.3897";
2
- export const buildDate = "2025-05-24 21:26:53";
1
+ export const version = "1.0.3899";
2
+ export const buildDate = "2025-05-26 01:54:10";
@@ -20,6 +20,8 @@ import { ItemDescriptor } from "../editor/pageModel";
20
20
  import { useDebouncedCallback } from "use-debounce";
21
21
  import { getWizards } from "../page-wizard/service";
22
22
  import { Wizard } from "../page-wizard/PageWizard";
23
+ import { Card } from "../components/ui/card";
24
+ import { CardConnector } from "../components/ui/CardConnector";
23
25
  export function NewPage({ selectedItemId }: { selectedItemId?: string }) {
24
26
  const [selectedItem, setSelectedItem] = useState<ItemDescriptor | null>(null);
25
27
  const [isValid, setIsValid] = useState<boolean>(false);
@@ -143,90 +145,115 @@ export function NewPage({ selectedItemId }: { selectedItemId?: string }) {
143
145
  };
144
146
 
145
147
  return (
146
- <div className="flex h-full gap-3">
147
- <div className="tour-pick-location flex w-1/2 flex-col">
148
- <SectionHeadline>1. Pick Location</SectionHeadline>
149
- <div className="relative flex-1">
150
- <div className="absolute inset-0 overflow-auto">
151
- <ScrollingContentTree
152
- selectedItemId={selectedItem?.id || selectedItemId}
153
- onSelectionChange={(selection) => {
154
- const selected = selection[0] as ItemTreeNodeData;
155
- if (selected) setSelectedItem(selected);
156
- }}
157
- />
148
+ <div className="flex h-full flex-col bg-gray-50 p-4 md:flex-row">
149
+ <div className="tour-pick-location flex-1">
150
+ <Card
151
+ icon={<i className="pi pi-map-marker text-sm"></i>}
152
+ title="Pick Location"
153
+ description="Select where to create your new page"
154
+ noPadding
155
+ >
156
+ <div className="relative h-full">
157
+ <div className="absolute inset-0 overflow-auto">
158
+ <ScrollingContentTree
159
+ selectedItemId={selectedItem?.id || selectedItemId}
160
+ onSelectionChange={(selection) => {
161
+ const selected = selection[0] as ItemTreeNodeData;
162
+ if (selected) setSelectedItem(selected);
163
+ }}
164
+ />
165
+ </div>
158
166
  </div>
159
- </div>
167
+ </Card>
160
168
  </div>
161
- <div className="w-1/2 border-l pl-7">
162
- <SectionHeadline className="tour-choose-template">
163
- 2. Choose a Template or Wizard
164
- </SectionHeadline>
165
- <div className="mt-1 flex min-h-12 flex-wrap gap-3">
166
- {!insertOptions?.length && (
167
- <div>No page templates available here.</div>
168
- )}
169
- {insertOptionsAndWizards?.map((option) => (
170
- <div
171
- key={option.id}
172
- onClick={() => setSelectedTemplate(option.id)}
173
- className={classNames(
174
- "mb-2 flex cursor-pointer flex-col items-center bg-gray-100 p-2 text-sm",
175
- selectedTemplate === option.id
176
- ? "tour-selected-template bg-gray-200 outline outline-2 outline-offset-2 outline-gray-200"
177
- : "bg-gray-100",
178
- )}
179
- >
180
- {
181
- <img
182
- src={getAbsoluteIconUrl(option.icon)}
183
- width="32"
184
- height="32"
185
- ></img>
186
- }
187
- {option.name}
188
- </div>
189
- ))}
169
+
170
+ {/* Card Connector - only visible when location is selected */}
171
+ {selectedItem && (
172
+ <div className="hidden items-start justify-center pt-10 md:flex">
173
+ <CardConnector />
190
174
  </div>
191
- {selectedTemplate &&
192
- wizards?.find((x) => x.id === selectedTemplate) && (
193
- <div className="mt-4">
194
- <Button
195
- onClick={launchWizard}
196
- label="Start Wizard"
197
- id="launch-wizard-button"
198
- />
199
- </div>
200
- )}
201
- {selectedTemplate &&
202
- insertOptions?.find((x) => x.id === selectedTemplate) && (
203
- <>
204
- <SectionHeadline>3. Name Your Page</SectionHeadline>
205
-
206
- <InputText
207
- className="w-full"
208
- value={name}
209
- id="new-page-name"
210
- onChange={(e) => setName(e.target.value)}
211
- onKeyDown={(ev) => {
212
- if (ev.key === "Enter" && isValid) handleOk();
213
- }}
214
- data-testid="new-page-name"
215
- />
216
- {validationMessage && (
217
- <div className="mt-2 text-red-500">{validationMessage}</div>
218
- )}
219
- <div className="mt-4">
220
- <Button
221
- onClick={handleOk}
222
- label="Create"
223
- disabled={!isValid}
224
- id="create-new-page-button"
225
- />
175
+ )}
176
+
177
+ {/* Second card - only visible when location is selected */}
178
+ {selectedItem && (
179
+ <div className="flex-1">
180
+ <Card
181
+ icon={<i className="pi pi-palette text-sm"></i>}
182
+ title="Choose Template or Wizard"
183
+ description="Select a template or wizard to create your page"
184
+ >
185
+ <div className="tour-choose-template">
186
+ <div className="flex min-h-12 flex-wrap gap-3">
187
+ {!insertOptions?.length && (
188
+ <div>No page templates available here.</div>
189
+ )}
190
+ {insertOptionsAndWizards?.map((option) => (
191
+ <div
192
+ key={option.id}
193
+ onClick={() => setSelectedTemplate(option.id)}
194
+ className={classNames(
195
+ "mb-2 flex cursor-pointer flex-col items-center rounded bg-gray-100 p-2 text-sm",
196
+ selectedTemplate === option.id
197
+ ? "tour-selected-template bg-gray-200 outline outline-2 outline-offset-2 outline-gray-200"
198
+ : "bg-gray-100",
199
+ )}
200
+ >
201
+ {
202
+ <img
203
+ src={getAbsoluteIconUrl(option.icon)}
204
+ width="32"
205
+ height="32"
206
+ ></img>
207
+ }
208
+ {option.name}
209
+ </div>
210
+ ))}
226
211
  </div>
227
- </>
228
- )}
229
- </div>
212
+ {selectedTemplate &&
213
+ wizards?.find((x) => x.id === selectedTemplate) && (
214
+ <div className="mt-4">
215
+ <Button
216
+ onClick={launchWizard}
217
+ label="Start Wizard"
218
+ id="launch-wizard-button"
219
+ />
220
+ </div>
221
+ )}
222
+ {selectedTemplate &&
223
+ insertOptions?.find((x) => x.id === selectedTemplate) && (
224
+ <div className="mt-6 border-t pt-4">
225
+ <div className="mb-3 text-base font-bold text-neutral-800">
226
+ Name Your Page
227
+ </div>
228
+ <InputText
229
+ className="w-full"
230
+ value={name}
231
+ id="new-page-name"
232
+ onChange={(e) => setName(e.target.value)}
233
+ onKeyDown={(ev) => {
234
+ if (ev.key === "Enter" && isValid) handleOk();
235
+ }}
236
+ data-testid="new-page-name"
237
+ />
238
+ {validationMessage && (
239
+ <div className="mt-2 text-red-500">
240
+ {validationMessage}
241
+ </div>
242
+ )}
243
+ <div className="mt-4">
244
+ <Button
245
+ onClick={handleOk}
246
+ label="Create"
247
+ disabled={!isValid}
248
+ id="create-new-page-button"
249
+ />
250
+ </div>
251
+ </div>
252
+ )}
253
+ </div>
254
+ </Card>
255
+ </div>
256
+ )}
230
257
  </div>
231
258
  );
232
259
  }
@@ -10,6 +10,7 @@ import { usePathname, useRouter } from "next/navigation";
10
10
  import { SimpleIconButton } from "../editor/ui/SimpleIconButton";
11
11
  import { Spinner } from "../editor/ui/Spinner";
12
12
  import { ItemDescriptor } from "../editor/pageModel";
13
+ import { Card } from "../components/ui/card";
13
14
 
14
15
  export function SplashScreen() {
15
16
  const savedHistory =
@@ -76,38 +77,53 @@ export function SplashScreen() {
76
77
  const tabs: Tab[] = [
77
78
  {
78
79
  content: (
79
- <div className="flex flex-1 gap-4 text-sm">
80
- <div className="relative w-2/3">
81
- <ScrollingContentTree
82
- selectedItemId={selectedPage?.id}
83
- onSelectionChange={(selection) => {
84
- const selectedItem = selection[0];
85
- if (selectedItem) {
86
- loadItem(selectedItem);
87
- }
88
- }}
89
- />
80
+ <div className="flex flex-1 flex-col gap-4 text-sm md:flex-row">
81
+ <div className="flex-1">
82
+ <Card
83
+ icon={<i className="pi pi-sitemap text-sm"></i>}
84
+ title="Browse Content"
85
+ description="Navigate through your content structure"
86
+ noPadding
87
+ >
88
+ <div className="relative h-full">
89
+ <ScrollingContentTree
90
+ selectedItemId={selectedPage?.id}
91
+ onSelectionChange={(selection) => {
92
+ const selectedItem = selection[0];
93
+ if (selectedItem) {
94
+ loadItem(selectedItem);
95
+ }
96
+ }}
97
+ />
98
+ </div>
99
+ </Card>
90
100
  </div>
91
- <div className="flex w-1/3 flex-col border-l pl-6">
92
- <div className="mb-3 font-bold">Recent Pages</div>
93
- <div className="relative flex-1">
94
- <ul className="absolute inset-0 overflow-auto">
95
- {history?.map((page, index) => (
96
- <li
97
- key={index}
98
- onMouseOver={() => setSelectedPage(page)}
99
- onClick={() => loadItem(page)}
100
- className="flex cursor-pointer items-center gap-2 p-1 text-xs hover:bg-gray-100"
101
- >
102
- {page.icon && (
103
- <img src={page.icon} width="16" height="16" />
104
- )}{" "}
105
- {page.name}{" "}
106
- <span className="text-gray-500">({page.language})</span>
107
- </li>
108
- ))}
109
- </ul>
110
- </div>
101
+ <div className="flex-1 md:pl-4">
102
+ <Card
103
+ icon={<i className="pi pi-history text-sm"></i>}
104
+ title="Recent Pages"
105
+ description="Quick access to your recently viewed pages"
106
+ noPadding
107
+ >
108
+ <div className="relative h-full">
109
+ <ul className="absolute inset-0 overflow-auto p-6 pt-0">
110
+ {history?.map((page, index) => (
111
+ <li
112
+ key={index}
113
+ onMouseOver={() => setSelectedPage(page)}
114
+ onClick={() => loadItem(page)}
115
+ className="flex cursor-pointer items-center gap-2 rounded p-2 text-xs hover:bg-gray-100"
116
+ >
117
+ {page.icon && (
118
+ <img src={page.icon} width="16" height="16" />
119
+ )}{" "}
120
+ {page.name}{" "}
121
+ <span className="text-gray-500">({page.language})</span>
122
+ </li>
123
+ ))}
124
+ </ul>
125
+ </div>
126
+ </Card>
111
127
  </div>
112
128
  </div>
113
129
  ),
@@ -128,7 +144,7 @@ export function SplashScreen() {
128
144
 
129
145
  return (
130
146
  <div className="flex h-full items-center justify-center bg-gray-100">
131
- <div className="relative h-3/4 w-2/3 space-y-8 rounded-lg bg-white p-6 p-8 shadow-lg">
147
+ <div className="relative h-full w-full space-y-8 rounded-lg bg-white p-4 shadow-lg md:h-3/4 md:w-2/3 md:p-8">
132
148
  <div className="flex h-full flex-col">
133
149
  <div className="flex flex-1 flex-col">
134
150
  <SimpleTabs
@@ -147,7 +163,7 @@ export function SplashScreen() {
147
163
  </div>
148
164
  </div>
149
165
 
150
- <div className="absolute top-0 right-0 p-2">
166
+ <div className="absolute top-0 right-0 hidden p-2 md:block">
151
167
  <SimpleIconButton
152
168
  icon="pi pi-times"
153
169
  onClick={() =>
package/styles.css CHANGED
@@ -1,11 +1,49 @@
1
+ /* Override default fonts to ensure Inter is used throughout */
2
+ * {
3
+ font-family:
4
+ var(--font-inter),
5
+ Inter,
6
+ -apple-system,
7
+ BlinkMacSystemFont,
8
+ "Segoe UI",
9
+ "Roboto",
10
+ "Oxygen",
11
+ "Ubuntu",
12
+ "Cantarell",
13
+ "Fira Sans",
14
+ "Droid Sans",
15
+ "Helvetica Neue",
16
+ sans-serif;
17
+ }
18
+
19
+ html,
20
+ body {
21
+ font-family:
22
+ var(--font-inter),
23
+ Inter,
24
+ -apple-system,
25
+ BlinkMacSystemFont,
26
+ "Segoe UI",
27
+ "Roboto",
28
+ "Oxygen",
29
+ "Ubuntu",
30
+ "Cantarell",
31
+ "Fira Sans",
32
+ "Droid Sans",
33
+ "Helvetica Neue",
34
+ sans-serif;
35
+ }
36
+
1
37
  @theme {
2
38
  --font-geist-sans: "GeistSans";
3
39
  --font-geist-mono: "GeistMono";
40
+ --font-inter: "Inter";
4
41
  --color-canvas-red: #e32e52;
5
42
  --color-canvas-pink: #e32e52;
6
43
  --color-alpaca-blue: #209cfc;
7
44
  --color-alpaca-blue-light: #41aafd;
8
45
  --color-theme-secondary: #9650fb;
46
+ --color-theme-secondary-light: #f6eeff;
9
47
  --color-neutral-350: #b4b4b4;
10
48
  --text-2xs: 0.7rem;
11
49
  --text-3xs: 0.6rem;