返回 presentation-ai
themes.ts
根目录 / src / lib / presentation / themes.ts
1 export type ThemeMode = "light" | "dark";
2
3 export type ThemeName =
4 | "daktilo"
5 | "noir"
6 | "cornflower"
7 | "indigo"
8 | "orbit"
9 | "cosmos"
10 | "piano"
11 | "ebony"
12 | "mystique"
13 | "phantom"
14 | "allweoneLight"
15 | "allweoneDark"
16 | "crimson"
17 | "ember"
18 | "sunset"
19 | "dusk"
20 | "forest"
21 | "canopy"
22 | "aurora"
23 | "borealis"
24 | "sakura"
25 | "midnight"
26 | "ocean"
27 | "abyss"
28 | "sand"
29 | "obsidian"
30 | "mint"
31 | "jade"
32 | "rose"
33 | "wine"
34 | "arctic"
35 | "glacier"
36 | "honey"
37 | "amber"
38 | "coral"
39 | "magma"
40 | "lavender"
41 | "velvet";
42
43 export interface ThemeColors {
44 primary: string;
45 accent: string;
46 background: string;
47 text: string;
48 heading: string;
49 smartLayout: string;
50 cardBackground: string;
51 }
52
53 export type ThemeColorsKeys = keyof ThemeColors;
54
55 export interface ThemeFonts {
56 heading: string;
57 body: string;
58 headingWeight?: number;
59 bodyWeight?: number;
60 headingUrl?: string;
61 bodyUrl?: string;
62 }
63
64 interface ThemeTransitions {
65 default: string;
66 }
67
68 export interface ThemeShadows {
69 card: string;
70 button: string;
71 slide: string;
72 }
73
74 export interface ThemeBorderRadius {
75 card: string;
76 slide: string;
77 button: string;
78 }
79
80 interface ThemeMask {
81 clipPath?: string;
82 maskImage?: string;
83 maskSize?: string;
84 maskPosition?: string;
85 maskRepeat?: string;
86 }
87
88 export interface ThemeBackground {
89 type?: "solid" | "linear" | "radial" | "image";
90 override?: string;
91 gradient?: {
92 type: "linear" | "radial";
93 angle?: number;
94 shape?: "circle" | "ellipse";
95 at?: { x: number; y: number };
96 stops?: Array<{ id: string; color: string; position: number }>;
97 };
98 imageUrl?: string;
99 }
100
101 export interface ThemeProperties {
102 name: string;
103 description: string;
104 mode: ThemeMode;
105 colors: ThemeColors;
106 fonts: ThemeFonts;
107 borderRadius: ThemeBorderRadius;
108 transitions: ThemeTransitions;
109 shadows: ThemeShadows;
110 mask?: ThemeMask;
111 background?: ThemeBackground;
112 }
113
114 export type Themes = keyof typeof themes;
115
116 // ============ Themes ============
117
118 /**
119 * Button border-radius scale:
120 * - For all values previously 0.5rem → now 0.17rem (scaled by ~1/3)
121 * - For all values previously 0.75rem → now 0.25rem (scaled by ~1/3)
122 * - For all values previously 0.625rem → now 0.21rem (scaled by ~1/3)
123 * - For all values previously 1rem → now 0.33rem (scaled by ~1/3)
124 * - For all values previously 0.375rem → now 0.13rem (scaled by ~1/3)
125 * - For all values previously 0.25rem → now 0.08rem (scaled by ~1/3)
126 * - For all values previously 1.25rem → now 0.42rem (scaled by ~1/3)
127 * - 0, 9999px and 9999px remain unchanged.
128 */
129
130 export const themes: { [key in ThemeName]: ThemeProperties } = {
131 // ==================== DAKTILO / NOIR ====================
132 daktilo: {
133 name: "Daktilo",
134 description: "Modern and clean",
135 mode: "light",
136 colors: {
137 primary: "#3B82F6",
138 accent: "#60A5FA",
139 background: "#FFFFFF",
140 text: "#1F2937",
141 heading: "#3B82F6",
142 smartLayout: "#3B82F6",
143 cardBackground: "#F3F4F6",
144 },
145 fonts: { heading: "Inter", body: "Inter" },
146 borderRadius: {
147 card: "0.75rem",
148 slide: "1rem",
149 button: "0.17rem",
150 },
151 transitions: { default: "all 0.2s ease-in-out" },
152 shadows: {
153 card: "0 1px 2px rgba(0,0,0,0.04), 0 4px 8px rgba(59,130,246,0.08)",
154 button:
155 "0 1px 3px rgba(59,130,246,0.12), 0 2px 6px rgba(59,130,246,0.08)",
156 slide: "0 4px 6px rgba(0,0,0,0.02), 0 12px 24px rgba(59,130,246,0.1)",
157 },
158 background: {
159 type: "radial",
160 override: `
161 radial-gradient(circle at 10% 10%, #3B82F615 0%, transparent 30%),
162 radial-gradient(circle at 90% 20%, #60A5FA15 0%, transparent 40%),
163 radial-gradient(circle at 50% 80%, #1F293710 0%, transparent 50%),
164 #FFFFFF
165 `,
166 },
167 },
168
169 noir: {
170 name: "Noir",
171 description: "Sleek film noir aesthetic",
172 mode: "dark",
173 colors: {
174 primary: "#60A5FA",
175 accent: "#93C5FD",
176 background: "#111827",
177 text: "#E5E7EB",
178 heading: "#60A5FA",
179 smartLayout: "#60A5FA",
180 cardBackground: "#1F2937",
181 },
182 fonts: { heading: "Inter", body: "Inter" },
183 borderRadius: {
184 card: "0.75rem",
185 slide: "1rem",
186 button: "0.17rem",
187 },
188 transitions: { default: "all 0.2s ease-in-out" },
189 shadows: {
190 card: "0 2px 4px rgba(0,0,0,0.3), 0 8px 16px rgba(96,165,250,0.1)",
191 button: "0 2px 8px rgba(96,165,250,0.25), 0 0 20px rgba(96,165,250,0.1)",
192 slide: "0 8px 32px rgba(0,0,0,0.4), 0 0 48px rgba(96,165,250,0.08)",
193 },
194 background: {
195 type: "radial",
196 override: `
197 radial-gradient(circle at 10% 10%, #60A5FA20 0%, transparent 30%),
198 radial-gradient(circle at 90% 20%, #93C5FD20 0%, transparent 40%),
199 radial-gradient(circle at 50% 80%, #E5E7EB15 0%, transparent 50%),
200 #111827
201 `,
202 },
203 },
204
205 // ==================== CORNFLOWER / INDIGO ====================
206 cornflower: {
207 mode: "dark",
208 fonts: { body: "Raleway", heading: "Prata" },
209 colors: {
210 text: "#CFCBBF",
211 accent: "#F4E883",
212 heading: "#AE8625",
213 primary: "#D2AC47",
214 background: "#1B1C1D",
215 smartLayout: "#AE8625",
216 cardBackground: "#1B1C1D",
217 },
218 shadows: {
219 card: "0 1px 3px rgba(0,0,0,0.05)",
220 slide: "0 2px 4px rgba(0,0,0,0.04)",
221 button: "0 1px 2px rgba(0,0,0,0.03)",
222 },
223 background: { type: "solid", override: "#0a0a0a" },
224 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
225 borderRadius: { card: "0.5rem", slide: "0.5rem", button: "0.375rem" },
226 name: "Cornflower",
227 description: "Professional and bold",
228 },
229
230 indigo: {
231 name: "Indigo",
232 description: "Deep and immersive",
233 mode: "dark",
234 colors: {
235 primary: "#818CF8",
236 accent: "#A5B4FC",
237 background: "#1E1B4B",
238 text: "#E2E8F0",
239 heading: "#818CF8",
240 smartLayout: "#818CF8",
241 cardBackground: "#312E81",
242 },
243 fonts: { heading: "Poppins", body: "Source Sans Pro" },
244 borderRadius: {
245 card: "1rem",
246 slide: "1.25rem",
247 button: "0.25rem",
248 },
249 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
250 shadows: {
251 card: "0 4px 20px rgba(129,140,248,0.2), 0 0 40px rgba(129,140,248,0.1)",
252 button:
253 "0 4px 16px rgba(129,140,248,0.4), 0 0 24px rgba(129,140,248,0.2)",
254 slide: "0 20px 50px rgba(0,0,0,0.5), 0 0 60px rgba(129,140,248,0.15)",
255 },
256 background: {
257 type: "radial",
258 override: `
259 radial-gradient(circle at 10% 10%, #818CF820 0%, transparent 30%),
260 radial-gradient(circle at 90% 20%, #A5B4FC20 0%, transparent 40%),
261 radial-gradient(circle at 50% 80%, #C7D2FE15 0%, transparent 50%),
262 #1E1B4B
263 `,
264 },
265 },
266
267 // ==================== ORBIT / COSMOS ====================
268 orbit: {
269 name: "Orbit",
270 description: "Futuristic and dynamic",
271 mode: "light",
272 colors: {
273 primary: "#312E81",
274 accent: "#3B82F6",
275 background: "#FFFFFF",
276 text: "#1F2937",
277 heading: "#312E81",
278 smartLayout: "#312E81",
279 cardBackground: "#F3F4F6",
280 },
281 fonts: { heading: "Space Grotesk", body: "IBM Plex Sans" },
282 borderRadius: {
283 card: "1.5rem",
284 slide: "2rem",
285 button: "9999px",
286 },
287 transitions: { default: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)" },
288 shadows: {
289 card: "0 8px 32px rgba(49,46,129,0.12), 0 2px 8px rgba(59,130,246,0.08)",
290 button: "0 4px 20px rgba(49,46,129,0.2), 0 0 40px rgba(59,130,246,0.1)",
291 slide: "0 16px 48px rgba(49,46,129,0.16), 0 0 80px rgba(59,130,246,0.08)",
292 },
293 background: {
294 type: "radial",
295 override: `
296 radial-gradient(circle at 10% 10%, #312E8115 0%, transparent 30%),
297 radial-gradient(circle at 90% 20%, #3B82F615 0%, transparent 40%),
298 radial-gradient(circle at 50% 80%, #4338CA10 0%, transparent 50%),
299 #FFFFFF
300 `,
301 },
302 },
303
304 cosmos: {
305 name: "Cosmos",
306 description: "Deep space exploration",
307 mode: "dark",
308 colors: {
309 primary: "#818CF8",
310 accent: "#60A5FA",
311 background: "#030712",
312 text: "#E5E7EB",
313 heading: "#818CF8",
314 smartLayout: "#818CF8",
315 cardBackground: "#111827",
316 },
317 fonts: { heading: "Space Grotesk", body: "IBM Plex Sans" },
318 borderRadius: {
319 card: "1.5rem",
320 slide: "2rem",
321 button: "9999px",
322 },
323 transitions: { default: "all 0.4s cubic-bezier(0.16, 1, 0.3, 1)" },
324 shadows: {
325 card: "0 0 30px rgba(129,140,248,0.3), 0 8px 32px rgba(0,0,0,0.4)",
326 button: "0 0 24px rgba(129,140,248,0.5), 0 0 48px rgba(96,165,250,0.3)",
327 slide: "0 0 80px rgba(129,140,248,0.2), 0 24px 64px rgba(0,0,0,0.6)",
328 },
329 background: {
330 type: "radial",
331 override: `
332 radial-gradient(circle at 10% 10%, #818CF820 0%, transparent 30%),
333 radial-gradient(circle at 90% 20%, #60A5FA20 0%, transparent 40%),
334 radial-gradient(circle at 50% 80%, #A5B4FC15 0%, transparent 50%),
335 #030712
336 `,
337 },
338 },
339
340 // ==================== PIANO / EBONY ====================
341 piano: {
342 name: "Piano",
343 description: "Classic and elegant",
344 mode: "light",
345 colors: {
346 primary: "#1F2937",
347 accent: "#4B5563",
348 background: "#F3F4F6",
349 text: "#374151",
350 heading: "#1F2937",
351 smartLayout: "#1F2937",
352 cardBackground: "#FFFFFF",
353 },
354 fonts: { heading: "Playfair Display", body: "Lora" },
355 borderRadius: {
356 card: "0",
357 slide: "0",
358 button: "0",
359 },
360 transitions: { default: "all 0.2s ease" },
361 shadows: {
362 card: "4px 4px 0 0 #1F2937",
363 button: "3px 3px 0 0 #1F2937",
364 slide: "8px 8px 0 0 #1F2937",
365 },
366 background: {
367 type: "radial",
368 override: `
369 radial-gradient(circle at 10% 10%, #1F293715 0%, transparent 30%),
370 radial-gradient(circle at 90% 20%, #4B556315 0%, transparent 40%),
371 radial-gradient(circle at 50% 80%, #37415110 0%, transparent 50%),
372 #F3F4F6
373 `,
374 },
375 },
376
377 ebony: {
378 name: "Ebony",
379 description: "Refined dark elegance",
380 mode: "dark",
381 colors: {
382 primary: "#E5E7EB",
383 accent: "#9CA3AF",
384 background: "#111827",
385 text: "#E5E7EB",
386 heading: "#E5E7EB",
387 smartLayout: "#E5E7EB",
388 cardBackground: "#1F2937",
389 },
390 fonts: { heading: "Playfair Display", body: "Lora" },
391 borderRadius: {
392 card: "0",
393 slide: "0",
394 button: "0",
395 },
396 transitions: { default: "all 0.2s ease" },
397 shadows: {
398 card: "4px 4px 0 0 #E5E7EB",
399 button: "3px 3px 0 0 #9CA3AF",
400 slide: "8px 8px 0 0 rgba(229,231,235,0.3)",
401 },
402 background: {
403 type: "radial",
404 override: `
405 radial-gradient(circle at 10% 10%, #E5E7EB20 0%, transparent 30%),
406 radial-gradient(circle at 90% 20%, #9CA3AF20 0%, transparent 40%),
407 radial-gradient(circle at 50% 80%, #D1D5DB15 0%, transparent 50%),
408 #111827
409 `,
410 },
411 },
412
413 // ==================== MYSTIQUE / PHANTOM ====================
414 mystique: {
415 name: "Mystique",
416 description: "Mysterious and sophisticated",
417 mode: "light",
418 colors: {
419 primary: "#7C3AED",
420 accent: "#8B5CF6",
421 background: "#FFFFFF",
422 text: "#1F2937",
423 heading: "#7C3AED",
424 smartLayout: "#7C3AED",
425 cardBackground: "#F5F3FF",
426 },
427 fonts: { heading: "Montserrat", body: "Raleway" },
428 borderRadius: {
429 card: "0.5rem",
430 slide: "0.75rem",
431 button: "9999px",
432 },
433 transitions: { default: "all 0.3s ease-out" },
434 shadows: {
435 card: "0 2px 16px rgba(124,58,237,0.12), 0 8px 32px rgba(139,92,246,0.1)",
436 button: "0 4px 24px rgba(124,58,237,0.25)",
437 slide:
438 "0 12px 48px rgba(124,58,237,0.15), 0 0 96px rgba(139,92,246,0.08)",
439 },
440 background: {
441 type: "radial",
442 override: `
443 radial-gradient(circle at 10% 10%, #7C3AED15 0%, transparent 30%),
444 radial-gradient(circle at 90% 20%, #8B5CF615 0%, transparent 40%),
445 radial-gradient(circle at 50% 80%, #5B21B610 0%, transparent 50%),
446 #FFFFFF
447 `,
448 },
449 },
450
451 phantom: {
452 name: "Phantom",
453 description: "Ethereal and haunting",
454 mode: "dark",
455 colors: {
456 primary: "#A78BFA",
457 accent: "#C4B5FD",
458 background: "#18181B",
459 text: "#D4D4D8",
460 heading: "#A78BFA",
461 smartLayout: "#A78BFA",
462 cardBackground: "#27272A",
463 },
464 fonts: { heading: "Montserrat", body: "Raleway" },
465 borderRadius: {
466 card: "0.5rem",
467 slide: "0.75rem",
468 button: "9999px",
469 },
470 transitions: { default: "all 0.3s ease-out" },
471 shadows: {
472 card: "0 0 40px rgba(167,139,250,0.2), 0 8px 24px rgba(0,0,0,0.3)",
473 button:
474 "0 0 32px rgba(167,139,250,0.4), 0 4px 16px rgba(196,181,253,0.2)",
475 slide: "0 0 80px rgba(167,139,250,0.25), 0 16px 48px rgba(0,0,0,0.4)",
476 },
477 background: {
478 type: "radial",
479 override: `
480 radial-gradient(circle at 10% 10%, #A78BFA20 0%, transparent 30%),
481 radial-gradient(circle at 90% 20%, #C4B5FD20 0%, transparent 40%),
482 radial-gradient(circle at 50% 80%, #8B5CF615 0%, transparent 50%),
483 #18181B
484 `,
485 },
486 },
487
488 // ==================== ALLWEONE ====================
489 allweoneLight: {
490 name: "Allweone",
491 description: "Clean and high contrast",
492 mode: "light",
493 colors: {
494 primary: "#06B6D4",
495 accent: "#0EA5E9",
496 background: "#FFFFFF",
497 text: "#0F172A",
498 heading: "#06B6D4",
499 smartLayout: "#06B6D4",
500 cardBackground: "#ECFEFF",
501 },
502 fonts: { heading: "JetBrains Mono", body: "Inter" },
503 borderRadius: {
504 card: "0.25rem",
505 slide: "0.375rem",
506 button: "0.08rem",
507 },
508 transitions: { default: "all 0.25s cubic-bezier(0.4, 0, 0.2, 1)" },
509 shadows: {
510 card: "0 0 0 1px rgba(6,182,212,0.1), 0 4px 16px rgba(6,182,212,0.12)",
511 button: "0 0 20px rgba(6,182,212,0.3), 0 2px 8px rgba(14,165,233,0.2)",
512 slide: "0 0 0 1px rgba(6,182,212,0.08), 0 8px 32px rgba(6,182,212,0.15)",
513 },
514 background: {
515 type: "radial",
516 override: `
517 radial-gradient(circle at 10% 10%, #06B6D415 0%, transparent 30%),
518 radial-gradient(circle at 90% 20%, #0EA5E915 0%, transparent 40%),
519 radial-gradient(circle at 50% 80%, #0E749010 0%, transparent 50%),
520 #FFFFFF
521 `,
522 },
523 },
524
525 allweoneDark: {
526 name: "Allweone",
527 description: "Cyberpunk glow",
528 mode: "dark",
529 colors: {
530 primary: "#22D3EE",
531 accent: "#38BDF8",
532 background: "#0F172A",
533 text: "#E2E8F0",
534 heading: "#22D3EE",
535 smartLayout: "#22D3EE",
536 cardBackground: "#1E293B",
537 },
538 fonts: { heading: "JetBrains Mono", body: "Inter" },
539 borderRadius: {
540 card: "0.25rem",
541 slide: "0.375rem",
542 button: "0.08rem",
543 },
544 transitions: { default: "all 0.25s cubic-bezier(0.4, 0, 0.2, 1)" },
545 shadows: {
546 card: "0 0 24px rgba(34,211,238,0.3), 0 0 48px rgba(56,189,248,0.15)",
547 button:
548 "0 0 16px rgba(34,211,238,0.5), 0 0 32px rgba(34,211,238,0.3), inset 0 0 8px rgba(34,211,238,0.1)",
549 slide: "0 0 60px rgba(34,211,238,0.25), 0 0 120px rgba(56,189,248,0.15)",
550 },
551 background: {
552 type: "radial",
553 override: `
554 radial-gradient(circle at 10% 10%, #22D3EE20 0%, transparent 30%),
555 radial-gradient(circle at 90% 20%, #38BDF820 0%, transparent 40%),
556 radial-gradient(circle at 50% 80%, #67E8F915 0%, transparent 50%),
557 #0F172A
558 `,
559 },
560 },
561
562 // ==================== CRIMSON / EMBER ====================
563 crimson: {
564 name: "Crimson",
565 description: "Bold and passionate",
566 mode: "light",
567 colors: {
568 primary: "#DC2626",
569 accent: "#F87171",
570 background: "#FFFFFF",
571 text: "#1F2937",
572 heading: "#DC2626",
573 smartLayout: "#DC2626",
574 cardBackground: "#FEF2F2",
575 },
576 fonts: { heading: "Merriweather", body: "Source Sans Pro" },
577 borderRadius: {
578 card: "0.375rem",
579 slide: "0.5rem",
580 button: "9999px",
581 },
582 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
583 shadows: {
584 card: "0 4px 12px rgba(220,38,38,0.15), 0 2px 4px rgba(220,38,38,0.1)",
585 button: "0 6px 20px rgba(220,38,38,0.35)",
586 slide: "0 12px 36px rgba(220,38,38,0.18), 0 4px 12px rgba(0,0,0,0.05)",
587 },
588 background: {
589 type: "radial",
590 override: `
591 radial-gradient(circle at 10% 10%, #DC262615 0%, transparent 30%),
592 radial-gradient(circle at 90% 20%, #F8717115 0%, transparent 40%),
593 radial-gradient(circle at 50% 80%, #991B1B10 0%, transparent 50%),
594 #FFFFFF
595 `,
596 },
597 },
598
599 ember: {
600 name: "Ember",
601 description: "Smoldering intensity",
602 mode: "dark",
603 colors: {
604 primary: "#F87171",
605 accent: "#EF4444",
606 background: "#18181B",
607 text: "#E5E7EB",
608 heading: "#F87171",
609 smartLayout: "#F87171",
610 cardBackground: "#27272A",
611 },
612 fonts: { heading: "Merriweather", body: "Source Sans Pro" },
613 borderRadius: {
614 card: "0.375rem",
615 slide: "0.5rem",
616 button: "9999px",
617 },
618 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
619 shadows: {
620 card: "0 0 32px rgba(248,113,113,0.25), 0 8px 24px rgba(0,0,0,0.3)",
621 button: "0 0 24px rgba(248,113,113,0.5), 0 4px 16px rgba(239,68,68,0.3)",
622 slide: "0 0 64px rgba(248,113,113,0.2), 0 16px 48px rgba(0,0,0,0.4)",
623 },
624 background: {
625 type: "radial",
626 override: `
627 radial-gradient(circle at 10% 10%, #F8717120 0%, transparent 30%),
628 radial-gradient(circle at 90% 20%, #EF444420 0%, transparent 40%),
629 radial-gradient(circle at 50% 80%, #FCA5A515 0%, transparent 50%),
630 #18181B
631 `,
632 },
633 },
634
635 // ==================== SUNSET / DUSK ====================
636 sunset: {
637 name: "Sunset",
638 description: "Warm and inviting",
639 mode: "light",
640 colors: {
641 primary: "#EA580C",
642 accent: "#FB923C",
643 background: "#FFFBEB",
644 text: "#292524",
645 heading: "#EA580C",
646 smartLayout: "#EA580C",
647 cardBackground: "#FFFFFF",
648 },
649 fonts: { heading: "DM Serif Display", body: "DM Sans" },
650 borderRadius: {
651 card: "1.25rem",
652 slide: "1.5rem",
653 button: "0.25rem",
654 },
655 transitions: { default: "all 0.25s ease-in-out" },
656 shadows: {
657 card: "0 4px 16px rgba(234,88,12,0.1), 0 8px 24px rgba(251,146,60,0.08)",
658 button: "0 4px 20px rgba(234,88,12,0.3)",
659 slide:
660 "0 12px 40px rgba(234,88,12,0.12), 0 4px 16px rgba(251,146,60,0.08)",
661 },
662 background: {
663 type: "radial",
664 override: `
665 radial-gradient(circle at 10% 10%, #EA580C15 0%, transparent 30%),
666 radial-gradient(circle at 90% 20%, #FB923C15 0%, transparent 40%),
667 radial-gradient(circle at 50% 80%, #C2410C10 0%, transparent 50%),
668 #FFFBEB
669 `,
670 },
671 },
672
673 dusk: {
674 name: "Dusk",
675 description: "Twilight tranquility",
676 mode: "dark",
677 colors: {
678 primary: "#FB923C",
679 accent: "#F97316",
680 background: "#1C1917",
681 text: "#E7E5E4",
682 heading: "#FB923C",
683 smartLayout: "#FB923C",
684 cardBackground: "#292524",
685 },
686 fonts: { heading: "DM Serif Display", body: "DM Sans" },
687 borderRadius: {
688 card: "1.25rem",
689 slide: "1.5rem",
690 button: "0.25rem",
691 },
692 transitions: { default: "all 0.25s ease-in-out" },
693 shadows: {
694 card: "0 0 40px rgba(251,146,60,0.15), 0 8px 24px rgba(0,0,0,0.25)",
695 button: "0 0 28px rgba(251,146,60,0.4), 0 4px 16px rgba(249,115,22,0.25)",
696 slide: "0 0 72px rgba(251,146,60,0.18), 0 16px 48px rgba(0,0,0,0.35)",
697 },
698 background: {
699 type: "radial",
700 override: `
701 radial-gradient(circle at 10% 10%, #FB923C20 0%, transparent 30%),
702 radial-gradient(circle at 90% 20%, #F9731620 0%, transparent 40%),
703 radial-gradient(circle at 50% 80%, #FDBA7415 0%, transparent 50%),
704 #1C1917
705 `,
706 },
707 },
708
709 // ==================== FOREST / CANOPY ====================
710 forest: {
711 name: "Forest",
712 description: "Natural and serene",
713 mode: "light",
714 colors: {
715 primary: "#059669",
716 accent: "#34D399",
717 background: "#F0FDF4",
718 text: "#1F2937",
719 heading: "#059669",
720 smartLayout: "#059669",
721 cardBackground: "#FFFFFF",
722 },
723 fonts: { heading: "Bitter", body: "Source Sans Pro" },
724 borderRadius: {
725 card: "0.875rem",
726 slide: "1rem",
727 button: "0.17rem",
728 },
729 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
730 shadows: {
731 card: "0 2px 8px rgba(5,150,105,0.08), 0 6px 20px rgba(52,211,153,0.1)",
732 button: "0 4px 16px rgba(5,150,105,0.2), 0 2px 6px rgba(5,150,105,0.1)",
733 slide: "0 8px 32px rgba(5,150,105,0.12), 0 2px 8px rgba(52,211,153,0.08)",
734 },
735 background: {
736 type: "radial",
737 override: `
738 radial-gradient(circle at 10% 10%, #05966915 0%, transparent 30%),
739 radial-gradient(circle at 90% 20%, #34D39915 0%, transparent 40%),
740 radial-gradient(circle at 50% 80%, #04785710 0%, transparent 50%),
741 #F0FDF4
742 `,
743 },
744 },
745
746 canopy: {
747 name: "Canopy",
748 description: "Deep forest sanctuary",
749 mode: "dark",
750 colors: {
751 primary: "#34D399",
752 accent: "#10B981",
753 background: "#064E3B",
754 text: "#E5E7EB",
755 heading: "#34D399",
756 smartLayout: "#34D399",
757 cardBackground: "#065F46",
758 },
759 fonts: { heading: "Bitter", body: "Source Sans Pro" },
760 borderRadius: {
761 card: "0.875rem",
762 slide: "1rem",
763 button: "0.17rem",
764 },
765 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
766 shadows: {
767 card: "0 0 24px rgba(52,211,153,0.2), 0 8px 24px rgba(0,0,0,0.25)",
768 button: "0 0 20px rgba(52,211,153,0.35), 0 4px 12px rgba(16,185,129,0.2)",
769 slide: "0 0 48px rgba(52,211,153,0.18), 0 12px 36px rgba(0,0,0,0.3)",
770 },
771 background: {
772 type: "radial",
773 override: `
774 radial-gradient(circle at 10% 10%, #34D39920 0%, transparent 30%),
775 radial-gradient(circle at 90% 20%, #10B98120 0%, transparent 40%),
776 radial-gradient(circle at 50% 80%, #6EE7B715 0%, transparent 50%),
777 #064E3B
778 `,
779 },
780 },
781
782 // ==================== AURORA / BOREALIS ====================
783 aurora: {
784 name: "Aurora",
785 description: "Northern lights at dawn",
786 mode: "light",
787 colors: {
788 primary: "#06B6D4",
789 accent: "#34D399",
790 background: "#F0FDFA",
791 text: "#134E4A",
792 heading: "#0891B2",
793 smartLayout: "#06B6D4",
794 cardBackground: "#FFFFFF",
795 },
796 fonts: { heading: "Quicksand", body: "Nunito" },
797 borderRadius: {
798 card: "2rem",
799 slide: "2.5rem",
800 button: "9999px",
801 },
802 transitions: { default: "all 0.3s ease-out" },
803 shadows: {
804 card: "0 4px 20px rgba(6,182,212,0.12), 0 8px 32px rgba(52,211,153,0.08)",
805 button: "0 4px 24px rgba(6,182,212,0.25), 0 0 40px rgba(139,92,246,0.1)",
806 slide: "0 12px 48px rgba(6,182,212,0.14), 0 0 80px rgba(52,211,153,0.08)",
807 },
808 background: {
809 type: "radial",
810 override: `
811 radial-gradient(circle at 20% 20%, #06B6D420 0%, transparent 40%),
812 radial-gradient(circle at 80% 30%, #8B5CF620 0%, transparent 40%),
813 radial-gradient(circle at 50% 80%, #34D39915 0%, transparent 50%),
814 #F0FDFA
815 `,
816 },
817 },
818
819 borealis: {
820 name: "Borealis",
821 description: "Northern lights at midnight",
822 mode: "dark",
823 colors: {
824 primary: "#22D3EE",
825 accent: "#4ADE80",
826 background: "#0C1222",
827 text: "#E2E8F0",
828 heading: "#67E8F9",
829 smartLayout: "#22D3EE",
830 cardBackground: "#1E293B",
831 },
832 fonts: { heading: "Quicksand", body: "Nunito" },
833 borderRadius: {
834 card: "2rem",
835 slide: "2.5rem",
836 button: "9999px",
837 },
838 transitions: { default: "all 0.3s ease-out" },
839 shadows: {
840 card: "0 0 32px rgba(34,211,238,0.2), 0 0 48px rgba(74,222,128,0.15), 0 0 64px rgba(167,139,250,0.1)",
841 button: "0 0 24px rgba(34,211,238,0.4), 0 0 48px rgba(74,222,128,0.25)",
842 slide:
843 "0 0 80px rgba(34,211,238,0.2), 0 0 120px rgba(74,222,128,0.12), 0 0 160px rgba(167,139,250,0.08)",
844 },
845 background: {
846 type: "radial",
847 override: `
848 radial-gradient(circle at 20% 20%, #22D3EE25 0%, transparent 40%),
849 radial-gradient(circle at 80% 30%, #A78BFA25 0%, transparent 40%),
850 radial-gradient(circle at 50% 80%, #4ADE8020 0%, transparent 50%),
851 #0C1222
852 `,
853 },
854 },
855
856 // ==================== SAKURA / MIDNIGHT ====================
857 sakura: {
858 name: "Sakura",
859 description: "Cherry blossom spring",
860 mode: "light",
861 colors: {
862 primary: "#EC4899",
863 accent: "#F472B6",
864 background: "#FDF2F8",
865 text: "#831843",
866 heading: "#BE185D",
867 smartLayout: "#EC4899",
868 cardBackground: "#FFFFFF",
869 },
870 fonts: { heading: "Cormorant Garamond", body: "Lato" },
871 borderRadius: {
872 card: "1rem",
873 slide: "1.25rem",
874 button: "0.21rem",
875 },
876 transitions: { default: "all 0.25s ease" },
877 shadows: {
878 card: "0 4px 16px rgba(236,72,153,0.1), 0 8px 32px rgba(244,114,182,0.08)",
879 button: "0 4px 20px rgba(236,72,153,0.25)",
880 slide:
881 "0 8px 40px rgba(236,72,153,0.12), 0 2px 12px rgba(244,114,182,0.08)",
882 },
883 background: {
884 type: "radial",
885 override: `
886 radial-gradient(circle at 10% 10%, #EC489920 0%, transparent 35%),
887 radial-gradient(circle at 90% 20%, #F472B620 0%, transparent 40%),
888 radial-gradient(circle at 50% 90%, #DB277715 0%, transparent 50%),
889 #FDF2F8
890 `,
891 },
892 },
893
894 midnight: {
895 name: "Midnight",
896 description: "Moonlit cherry blossoms",
897 mode: "dark",
898 colors: {
899 primary: "#F472B6",
900 accent: "#FDA4AF",
901 background: "#1A0A14",
902 text: "#FECDD3",
903 heading: "#F9A8D4",
904 smartLayout: "#F472B6",
905 cardBackground: "#2D1F2B",
906 },
907 fonts: { heading: "Cormorant Garamond", body: "Lato" },
908 borderRadius: {
909 card: "1rem",
910 slide: "1.25rem",
911 button: "0.21rem",
912 },
913 transitions: { default: "all 0.25s ease" },
914 shadows: {
915 card: "0 0 32px rgba(244,114,182,0.25), 0 8px 24px rgba(0,0,0,0.3)",
916 button:
917 "0 0 24px rgba(244,114,182,0.45), 0 4px 16px rgba(253,164,175,0.2)",
918 slide: "0 0 64px rgba(244,114,182,0.2), 0 16px 48px rgba(0,0,0,0.4)",
919 },
920 background: {
921 type: "radial",
922 override: `
923 radial-gradient(circle at 10% 10%, #F472B625 0%, transparent 35%),
924 radial-gradient(circle at 90% 20%, #FDA4AF20 0%, transparent 40%),
925 radial-gradient(circle at 50% 90%, #FB718520 0%, transparent 50%),
926 #1A0A14
927 `,
928 },
929 },
930
931 // ==================== OCEAN / ABYSS ====================
932 ocean: {
933 name: "Ocean",
934 description: "Sunlit tropical waters",
935 mode: "light",
936 colors: {
937 primary: "#0284C7",
938 accent: "#38BDF8",
939 background: "#F0F9FF",
940 text: "#0C4A6E",
941 heading: "#0369A1",
942 smartLayout: "#0284C7",
943 cardBackground: "#FFFFFF",
944 },
945 fonts: { heading: "Outfit", body: "Work Sans" },
946 borderRadius: {
947 card: "1.125rem",
948 slide: "1.5rem",
949 button: "0.25rem",
950 },
951 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
952 shadows: {
953 card: "0 4px 24px rgba(2,132,199,0.1), 0 12px 48px rgba(56,189,248,0.08)",
954 button:
955 "0 4px 20px rgba(2,132,199,0.25), 0 8px 32px rgba(56,189,248,0.15)",
956 slide:
957 "0 8px 48px rgba(2,132,199,0.12), 0 16px 64px rgba(56,189,248,0.08)",
958 },
959 background: {
960 type: "radial",
961 override: `
962 radial-gradient(circle at 30% 20%, #0284C720 0%, transparent 40%),
963 radial-gradient(circle at 70% 60%, #38BDF820 0%, transparent 45%),
964 radial-gradient(circle at 50% 90%, #0369A115 0%, transparent 50%),
965 #F0F9FF
966 `,
967 },
968 },
969
970 abyss: {
971 name: "Abyss",
972 description: "Deep sea mysteries",
973 mode: "dark",
974 colors: {
975 primary: "#38BDF8",
976 accent: "#0EA5E9",
977 background: "#020617",
978 text: "#BAE6FD",
979 heading: "#7DD3FC",
980 smartLayout: "#38BDF8",
981 cardBackground: "#0F172A",
982 },
983 fonts: { heading: "Outfit", body: "Work Sans" },
984 borderRadius: {
985 card: "1.125rem",
986 slide: "1.5rem",
987 button: "0.25rem",
988 },
989 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
990 shadows: {
991 card: "0 0 40px rgba(56,189,248,0.2), 0 12px 36px rgba(0,0,0,0.4)",
992 button:
993 "0 0 32px rgba(56,189,248,0.45), 0 8px 24px rgba(14,165,233,0.25)",
994 slide: "0 0 80px rgba(56,189,248,0.18), 0 20px 60px rgba(0,0,0,0.5)",
995 },
996 background: {
997 type: "radial",
998 override: `
999 radial-gradient(circle at 30% 20%, #38BDF825 0%, transparent 40%),
1000 radial-gradient(circle at 70% 60%, #0EA5E920 0%, transparent 45%),
1001 radial-gradient(circle at 50% 90%, #7DD3FC15 0%, transparent 50%),
1002 #020617
1003 `,
1004 },
1005 },
1006
1007 // ==================== SAND / OBSIDIAN ====================
1008 sand: {
1009 name: "Sand",
1010 description: "Warm desert dunes",
1011 mode: "light",
1012 colors: {
1013 primary: "#A16207",
1014 accent: "#CA8A04",
1015 background: "#FEFCE8",
1016 text: "#422006",
1017 heading: "#A16207",
1018 smartLayout: "#CA8A04",
1019 cardBackground: "#FFFFFF",
1020 },
1021 fonts: { heading: "Fraunces", body: "Commissioner" },
1022 borderRadius: {
1023 card: "0",
1024 slide: "0",
1025 button: "0",
1026 },
1027 transitions: { default: "all 0.2s ease" },
1028 shadows: {
1029 card: "6px 6px 0 0 #CA8A04",
1030 button: "4px 4px 0 0 #A16207",
1031 slide: "10px 10px 0 0 rgba(161,98,7,0.3)",
1032 },
1033 background: {
1034 type: "radial",
1035 override: `
1036 radial-gradient(circle at 20% 30%, #A1620715 0%, transparent 40%),
1037 radial-gradient(circle at 80% 50%, #CA8A0415 0%, transparent 45%),
1038 radial-gradient(circle at 40% 80%, #854D0E10 0%, transparent 50%),
1039 #FEFCE8
1040 `,
1041 },
1042 },
1043
1044 obsidian: {
1045 name: "Obsidian",
1046 description: "Volcanic glass night",
1047 mode: "dark",
1048 colors: {
1049 primary: "#FACC15",
1050 accent: "#EAB308",
1051 background: "#0A0A0A",
1052 text: "#E7E5E4",
1053 heading: "#FDE047",
1054 smartLayout: "#FACC15",
1055 cardBackground: "#1C1917",
1056 },
1057 fonts: { heading: "Fraunces", body: "Commissioner" },
1058 borderRadius: {
1059 card: "0",
1060 slide: "0",
1061 button: "0",
1062 },
1063 transitions: { default: "all 0.2s ease" },
1064 shadows: {
1065 card: "6px 6px 0 0 rgba(250,204,21,0.4)",
1066 button: "4px 4px 0 0 #FACC15",
1067 slide: "10px 10px 0 0 rgba(250,204,21,0.25)",
1068 },
1069 background: {
1070 type: "radial",
1071 override: `
1072 radial-gradient(circle at 20% 30%, #FACC1520 0%, transparent 40%),
1073 radial-gradient(circle at 80% 50%, #EAB30820 0%, transparent 45%),
1074 radial-gradient(circle at 40% 80%, #FDE04715 0%, transparent 50%),
1075 #0A0A0A
1076 `,
1077 },
1078 },
1079
1080 // ==================== MINT / JADE ====================
1081 mint: {
1082 name: "Mint",
1083 description: "Fresh and cool",
1084 mode: "light",
1085 colors: {
1086 primary: "#10B981",
1087 accent: "#34D399",
1088 background: "#ECFDF5",
1089 text: "#064E3B",
1090 heading: "#047857",
1091 smartLayout: "#10B981",
1092 cardBackground: "#FFFFFF",
1093 },
1094 fonts: { heading: "Plus Jakarta Sans", body: "Inter" },
1095 borderRadius: {
1096 card: "1.5rem",
1097 slide: "2rem",
1098 button: "9999px",
1099 },
1100 transitions: { default: "all 0.25s ease-out" },
1101 shadows: {
1102 card: "0 2px 12px rgba(16,185,129,0.1), 0 4px 24px rgba(52,211,153,0.08)",
1103 button: "0 4px 16px rgba(16,185,129,0.25)",
1104 slide:
1105 "0 6px 32px rgba(16,185,129,0.12), 0 2px 8px rgba(52,211,153,0.06)",
1106 },
1107 background: {
1108 type: "radial",
1109 override: `
1110 radial-gradient(circle at 15% 25%, #10B98118 0%, transparent 40%),
1111 radial-gradient(circle at 85% 35%, #34D39918 0%, transparent 45%),
1112 radial-gradient(circle at 50% 85%, #05966912 0%, transparent 50%),
1113 #ECFDF5
1114 `,
1115 },
1116 },
1117
1118 jade: {
1119 name: "Jade",
1120 description: "Precious stone depths",
1121 mode: "dark",
1122 colors: {
1123 primary: "#34D399",
1124 accent: "#10B981",
1125 background: "#022C22",
1126 text: "#A7F3D0",
1127 heading: "#6EE7B7",
1128 smartLayout: "#34D399",
1129 cardBackground: "#064E3B",
1130 },
1131 fonts: { heading: "Plus Jakarta Sans", body: "Inter" },
1132 borderRadius: {
1133 card: "1.5rem",
1134 slide: "2rem",
1135 button: "9999px",
1136 },
1137 transitions: { default: "all 0.25s ease-out" },
1138 shadows: {
1139 card: "0 0 28px rgba(52,211,153,0.25), 0 8px 24px rgba(0,0,0,0.3)",
1140 button:
1141 "0 0 20px rgba(52,211,153,0.45), 0 4px 16px rgba(16,185,129,0.25)",
1142 slide: "0 0 56px rgba(52,211,153,0.2), 0 12px 40px rgba(0,0,0,0.35)",
1143 },
1144 background: {
1145 type: "radial",
1146 override: `
1147 radial-gradient(circle at 15% 25%, #34D39922 0%, transparent 40%),
1148 radial-gradient(circle at 85% 35%, #10B98120 0%, transparent 45%),
1149 radial-gradient(circle at 50% 85%, #6EE7B715 0%, transparent 50%),
1150 #022C22
1151 `,
1152 },
1153 },
1154
1155 // ==================== ROSE / WINE ====================
1156 rose: {
1157 name: "Rose",
1158 description: "Soft romantic petals",
1159 mode: "light",
1160 colors: {
1161 primary: "#E11D48",
1162 accent: "#FB7185",
1163 background: "#FFF1F2",
1164 text: "#4C0519",
1165 heading: "#BE123C",
1166 smartLayout: "#E11D48",
1167 cardBackground: "#FFFFFF",
1168 },
1169 fonts: { heading: "Libre Baskerville", body: "Source Serif Pro" },
1170 borderRadius: {
1171 card: "0.625rem",
1172 slide: "0.875rem",
1173 button: "0.13rem",
1174 },
1175 transitions: { default: "all 0.3s ease" },
1176 shadows: {
1177 card: "0 4px 20px rgba(225,29,72,0.1), 0 8px 40px rgba(251,113,133,0.08)",
1178 button: "0 4px 24px rgba(225,29,72,0.3)",
1179 slide:
1180 "0 8px 48px rgba(225,29,72,0.12), 0 4px 16px rgba(251,113,133,0.06)",
1181 },
1182 background: {
1183 type: "radial",
1184 override: `
1185 radial-gradient(circle at 10% 20%, #E11D4818 0%, transparent 35%),
1186 radial-gradient(circle at 90% 30%, #FB718518 0%, transparent 40%),
1187 radial-gradient(circle at 50% 85%, #BE123C12 0%, transparent 50%),
1188 #FFF1F2
1189 `,
1190 },
1191 },
1192
1193 wine: {
1194 name: "Wine",
1195 description: "Rich burgundy elegance",
1196 mode: "dark",
1197 colors: {
1198 primary: "#FB7185",
1199 accent: "#F43F5E",
1200 background: "#1C0A10",
1201 text: "#FECDD3",
1202 heading: "#FDA4AF",
1203 smartLayout: "#FB7185",
1204 cardBackground: "#3F1525",
1205 },
1206 fonts: { heading: "Libre Baskerville", body: "Source Serif Pro" },
1207 borderRadius: {
1208 card: "0.625rem",
1209 slide: "0.875rem",
1210 button: "0.13rem",
1211 },
1212 transitions: { default: "all 0.3s ease" },
1213 shadows: {
1214 card: "0 0 36px rgba(251,113,133,0.2), 0 8px 28px rgba(0,0,0,0.35)",
1215 button:
1216 "0 0 28px rgba(251,113,133,0.45), 0 4px 16px rgba(244,63,94,0.25)",
1217 slide: "0 0 72px rgba(251,113,133,0.18), 0 16px 56px rgba(0,0,0,0.45)",
1218 },
1219 background: {
1220 type: "radial",
1221 override: `
1222 radial-gradient(circle at 10% 20%, #FB718522 0%, transparent 35%),
1223 radial-gradient(circle at 90% 30%, #F43F5E20 0%, transparent 40%),
1224 radial-gradient(circle at 50% 85%, #FDA4AF15 0%, transparent 50%),
1225 #1C0A10
1226 `,
1227 },
1228 },
1229
1230 // ==================== ARCTIC / GLACIER ====================
1231 arctic: {
1232 name: "Arctic",
1233 description: "Crisp icy morning",
1234 mode: "light",
1235 colors: {
1236 primary: "#6366F1",
1237 accent: "#818CF8",
1238 background: "#EEF2FF",
1239 text: "#312E81",
1240 heading: "#4338CA",
1241 smartLayout: "#6366F1",
1242 cardBackground: "#FFFFFF",
1243 },
1244 fonts: { heading: "Manrope", body: "Public Sans" },
1245 borderRadius: {
1246 card: "1.75rem",
1247 slide: "2rem",
1248 button: "0.33rem",
1249 },
1250 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
1251 shadows: {
1252 card: "0 2px 8px rgba(99,102,241,0.08), 0 8px 32px rgba(129,140,248,0.12)",
1253 button:
1254 "0 4px 20px rgba(99,102,241,0.25), 0 0 40px rgba(129,140,248,0.1)",
1255 slide:
1256 "0 8px 40px rgba(99,102,241,0.1), 0 16px 64px rgba(129,140,248,0.08)",
1257 },
1258 background: {
1259 type: "radial",
1260 override: `
1261 radial-gradient(circle at 25% 25%, #6366F118 0%, transparent 40%),
1262 radial-gradient(circle at 75% 40%, #818CF818 0%, transparent 45%),
1263 radial-gradient(circle at 50% 80%, #4F46E512 0%, transparent 50%),
1264 #EEF2FF
1265 `,
1266 },
1267 },
1268
1269 glacier: {
1270 name: "Glacier",
1271 description: "Frozen twilight depths",
1272 mode: "dark",
1273 colors: {
1274 primary: "#A5B4FC",
1275 accent: "#818CF8",
1276 background: "#0C0A1D",
1277 text: "#E0E7FF",
1278 heading: "#C7D2FE",
1279 smartLayout: "#A5B4FC",
1280 cardBackground: "#1E1B4B",
1281 },
1282 fonts: { heading: "Manrope", body: "Public Sans" },
1283 borderRadius: {
1284 card: "1.75rem",
1285 slide: "2rem",
1286 button: "0.33rem",
1287 },
1288 transitions: { default: "all 0.3s cubic-bezier(0.4, 0, 0.2, 1)" },
1289 shadows: {
1290 card: "0 0 36px rgba(165,180,252,0.2), 0 8px 28px rgba(0,0,0,0.35)",
1291 button:
1292 "0 0 28px rgba(165,180,252,0.4), 0 4px 16px rgba(129,140,248,0.25)",
1293 slide: "0 0 72px rgba(165,180,252,0.18), 0 16px 56px rgba(0,0,0,0.45)",
1294 },
1295 background: {
1296 type: "radial",
1297 override: `
1298 radial-gradient(circle at 25% 25%, #A5B4FC22 0%, transparent 40%),
1299 radial-gradient(circle at 75% 40%, #818CF820 0%, transparent 45%),
1300 radial-gradient(circle at 50% 80%, #C7D2FE15 0%, transparent 50%),
1301 #0C0A1D
1302 `,
1303 },
1304 },
1305
1306 // ==================== HONEY / AMBER ====================
1307 honey: {
1308 name: "Honey",
1309 description: "Golden sweetness",
1310 mode: "light",
1311 colors: {
1312 primary: "#D97706",
1313 accent: "#FBBF24",
1314 background: "#FFFBEB",
1315 text: "#451A03",
1316 heading: "#B45309",
1317 smartLayout: "#D97706",
1318 cardBackground: "#FFFFFF",
1319 },
1320 fonts: { heading: "Bricolage Grotesque", body: "Atkinson Hyperlegible" },
1321 borderRadius: {
1322 card: "0.75rem",
1323 slide: "1rem",
1324 button: "0.17rem",
1325 },
1326 transitions: { default: "all 0.25s ease-in-out" },
1327 shadows: {
1328 card: "0 4px 16px rgba(217,119,6,0.12), 0 8px 32px rgba(251,191,36,0.1)",
1329 button:
1330 "0 4px 20px rgba(217,119,6,0.3), 0 8px 40px rgba(251,191,36,0.15)",
1331 slide:
1332 "0 8px 40px rgba(217,119,6,0.14), 0 4px 16px rgba(251,191,36,0.08)",
1333 },
1334 background: {
1335 type: "radial",
1336 override: `
1337 radial-gradient(circle at 20% 30%, #D9770618 0%, transparent 40%),
1338 radial-gradient(circle at 80% 40%, #FBBF2418 0%, transparent 45%),
1339 radial-gradient(circle at 45% 85%, #B4530912 0%, transparent 50%),
1340 #FFFBEB
1341 `,
1342 },
1343 },
1344
1345 amber: {
1346 name: "Amber",
1347 description: "Fossilized warmth",
1348 mode: "dark",
1349 colors: {
1350 primary: "#FBBF24",
1351 accent: "#F59E0B",
1352 background: "#1A1207",
1353 text: "#FEF3C7",
1354 heading: "#FCD34D",
1355 smartLayout: "#FBBF24",
1356 cardBackground: "#2D2410",
1357 },
1358 fonts: { heading: "Bricolage Grotesque", body: "Atkinson Hyperlegible" },
1359 borderRadius: {
1360 card: "0.75rem",
1361 slide: "1rem",
1362 button: "0.17rem",
1363 },
1364 transitions: { default: "all 0.25s ease-in-out" },
1365 shadows: {
1366 card: "0 0 32px rgba(251,191,36,0.25), 0 8px 24px rgba(0,0,0,0.35)",
1367 button: "0 0 24px rgba(251,191,36,0.5), 0 4px 16px rgba(245,158,11,0.3)",
1368 slide: "0 0 64px rgba(251,191,36,0.2), 0 16px 48px rgba(0,0,0,0.45)",
1369 },
1370 background: {
1371 type: "radial",
1372 override: `
1373 radial-gradient(circle at 20% 30%, #FBBF2422 0%, transparent 40%),
1374 radial-gradient(circle at 80% 40%, #F59E0B20 0%, transparent 45%),
1375 radial-gradient(circle at 45% 85%, #FCD34D15 0%, transparent 50%),
1376 #1A1207
1377 `,
1378 },
1379 },
1380
1381 // ==================== CORAL / MAGMA ====================
1382 coral: {
1383 name: "Coral",
1384 description: "Vibrant reef life",
1385 mode: "light",
1386 colors: {
1387 primary: "#F97316",
1388 accent: "#FB923C",
1389 background: "#FFF7ED",
1390 text: "#431407",
1391 heading: "#C2410C",
1392 smartLayout: "#F97316",
1393 cardBackground: "#FFFFFF",
1394 },
1395 fonts: { heading: "Sora", body: "Karla" },
1396 borderRadius: {
1397 card: "1rem",
1398 slide: "1.25rem",
1399 button: "0.13rem",
1400 },
1401 transitions: { default: "all 0.3s ease" },
1402 shadows: {
1403 card: "0 4px 20px rgba(249,115,22,0.15), 0 8px 40px rgba(251,146,60,0.1)",
1404 button: "0 6px 24px rgba(249,115,22,0.35)",
1405 slide:
1406 "0 10px 48px rgba(249,115,22,0.16), 0 4px 16px rgba(251,146,60,0.08)",
1407 },
1408 background: {
1409 type: "radial",
1410 override: `
1411 radial-gradient(circle at 15% 20%, #F9731618 0%, transparent 40%),
1412 radial-gradient(circle at 85% 35%, #FB923C18 0%, transparent 45%),
1413 radial-gradient(circle at 50% 80%, #EA580C12 0%, transparent 50%),
1414 #FFF7ED
1415 `,
1416 },
1417 },
1418
1419 magma: {
1420 name: "Magma",
1421 description: "Molten volcanic fire",
1422 mode: "dark",
1423 colors: {
1424 primary: "#FB923C",
1425 accent: "#F97316",
1426 background: "#1A0F0A",
1427 text: "#FFEDD5",
1428 heading: "#FDBA74",
1429 smartLayout: "#FB923C",
1430 cardBackground: "#2D1A10",
1431 },
1432 fonts: { heading: "Sora", body: "Karla" },
1433 borderRadius: {
1434 card: "1rem",
1435 slide: "1.25rem",
1436 button: "0.13rem",
1437 },
1438 transitions: { default: "all 0.3s ease" },
1439 shadows: {
1440 card: "0 0 40px rgba(251,146,60,0.3), 0 0 80px rgba(249,115,22,0.15), 0 8px 24px rgba(0,0,0,0.3)",
1441 button: "0 0 32px rgba(251,146,60,0.55), 0 0 64px rgba(249,115,22,0.25)",
1442 slide:
1443 "0 0 80px rgba(251,146,60,0.25), 0 0 160px rgba(249,115,22,0.12), 0 16px 48px rgba(0,0,0,0.4)",
1444 },
1445 background: {
1446 type: "radial",
1447 override: `
1448 radial-gradient(circle at 15% 20%, #FB923C22 0%, transparent 40%),
1449 radial-gradient(circle at 85% 35%, #F9731620 0%, transparent 45%),
1450 radial-gradient(circle at 50% 80%, #FDBA7415 0%, transparent 50%),
1451 #1A0F0A
1452 `,
1453 },
1454 },
1455
1456 // ==================== LAVENDER / VELVET ====================
1457 lavender: {
1458 name: "Lavender",
1459 description: "Calming purple fields",
1460 mode: "light",
1461 colors: {
1462 primary: "#9333EA",
1463 accent: "#A855F7",
1464 background: "#FAF5FF",
1465 text: "#3B0764",
1466 heading: "#7E22CE",
1467 smartLayout: "#9333EA",
1468 cardBackground: "#FFFFFF",
1469 },
1470 fonts: { heading: "Epilogue", body: "Rubik" },
1471 borderRadius: {
1472 card: "0.5rem",
1473 slide: "0.75rem",
1474 button: "0.17rem",
1475 },
1476 transitions: { default: "all 0.3s ease-out" },
1477 shadows: {
1478 card: "0 4px 20px rgba(147,51,234,0.1), 0 12px 48px rgba(168,85,247,0.08)",
1479 button: "0 4px 24px rgba(147,51,234,0.28)",
1480 slide:
1481 "0 8px 48px rgba(147,51,234,0.12), 0 16px 80px rgba(168,85,247,0.08)",
1482 },
1483 background: {
1484 type: "radial",
1485 override: `
1486 radial-gradient(circle at 10% 25%, #9333EA18 0%, transparent 40%),
1487 radial-gradient(circle at 90% 35%, #A855F718 0%, transparent 45%),
1488 radial-gradient(circle at 50% 85%, #7C3AED12 0%, transparent 50%),
1489 #FAF5FF
1490 `,
1491 },
1492 },
1493
1494 velvet: {
1495 name: "Velvet",
1496 description: "Luxurious purple night",
1497 mode: "dark",
1498 colors: {
1499 primary: "#C084FC",
1500 accent: "#A855F7",
1501 background: "#120A1C",
1502 text: "#E9D5FF",
1503 heading: "#D8B4FE",
1504 smartLayout: "#C084FC",
1505 cardBackground: "#2E1A47",
1506 },
1507 fonts: { heading: "Epilogue", body: "Rubik" },
1508 borderRadius: {
1509 card: "0.5rem",
1510 slide: "0.75rem",
1511 button: "0.17rem",
1512 },
1513 transitions: { default: "all 0.3s ease-out" },
1514 shadows: {
1515 card: "0 0 40px rgba(192,132,252,0.25), 0 8px 32px rgba(0,0,0,0.35)",
1516 button: "0 0 32px rgba(192,132,252,0.5), 0 4px 20px rgba(168,85,247,0.3)",
1517 slide: "0 0 80px rgba(192,132,252,0.2), 0 16px 64px rgba(0,0,0,0.45)",
1518 },
1519 background: {
1520 type: "radial",
1521 override: `
1522 radial-gradient(circle at 10% 25%, #C084FC22 0%, transparent 40%),
1523 radial-gradient(circle at 90% 35%, #A855F720 0%, transparent 45%),
1524 radial-gradient(circle at 50% 85%, #D8B4FE15 0%, transparent 50%),
1525 #120A1C
1526 `,
1527 },
1528 },
1529 };
1530
1531 // ============ CSS Variable Setter ============
1532
1533 export function setThemeVariables(
1534 theme: ThemeProperties,
1535 element: HTMLElement = document.documentElement,
1536 ) {
1537 const { colors, shadows, mask, borderRadius } = theme;
1538
1539 element.style.setProperty("--presentation-primary", colors.primary);
1540 element.style.setProperty("--presentation-accent", colors.accent);
1541 element.style.setProperty("--presentation-secondary", colors.accent);
1542 element.style.setProperty("--presentation-background", colors.background);
1543 element.style.setProperty("--presentation-text", colors.text);
1544 element.style.setProperty("--presentation-heading", colors.heading);
1545 element.style.setProperty("--presentation-smart-layout", colors.smartLayout);
1546 element.style.setProperty(
1547 "--presentation-card-background",
1548 colors.cardBackground,
1549 );
1550 element.style.setProperty("--presentation-heading-font", theme.fonts.heading);
1551 element.style.setProperty("--presentation-body-font", theme.fonts.body);
1552 element.style.setProperty(
1553 "--presentation-card-border-radius",
1554 borderRadius.card,
1555 );
1556 element.style.setProperty(
1557 "--presentation-slide-border-radius",
1558 borderRadius.slide,
1559 );
1560 element.style.setProperty(
1561 "--presentation-button-border-radius",
1562 borderRadius.button,
1563 );
1564 element.style.setProperty(
1565 "--presentation-transition",
1566 theme.transitions.default,
1567 );
1568 element.style.setProperty("--presentation-card-shadow", shadows.card);
1569 element.style.setProperty("--presentation-button-shadow", shadows.button);
1570 element.style.setProperty("--presentation-slide-shadow", shadows.slide);
1571
1572 if (mask) {
1573 if (mask.clipPath)
1574 element.style.setProperty("--presentation-mask-clip-path", mask.clipPath);
1575 if (mask.maskImage)
1576 element.style.setProperty("--presentation-mask-image", mask.maskImage);
1577 if (mask.maskSize)
1578 element.style.setProperty("--presentation-mask-size", mask.maskSize);
1579 if (mask.maskPosition)
1580 element.style.setProperty(
1581 "--presentation-mask-position",
1582 mask.maskPosition,
1583 );
1584 if (mask.maskRepeat)
1585 element.style.setProperty("--presentation-mask-repeat", mask.maskRepeat);
1586 }
1587 }
1588
1588 lines TYPESCRIPT