@rafael_dias/akoma 0.4.0 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { cIcons } from '../../node_modules/@sysvale/cuida-icons/dist/index.js';
1
2
  import { ComponentOptionsMixin } from 'vue';
2
3
  import { ComponentProvideOptions } from 'vue';
3
4
  import { DefineComponent } from 'vue';
@@ -13,6 +14,20 @@ type: "button" | "submit" | "reset";
13
14
  block: boolean;
14
15
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLButtonElement>;
15
16
 
17
+ declare const __VLS_component_10: DefineComponent<__VLS_Props_17, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
18
+ "update:modelValue": (value: string) => any;
19
+ }, string, PublicProps, Readonly<__VLS_Props_17> & Readonly<{
20
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
21
+ }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
22
+ trackRef: HTMLDivElement;
23
+ }, HTMLElement>;
24
+
25
+ declare const __VLS_component_11: DefineComponent<__VLS_Props_18, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_18> & Readonly<{}>, {
26
+ disabled: boolean;
27
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
28
+ itemRef: HTMLButtonElement;
29
+ }, HTMLButtonElement>;
30
+
16
31
  declare const __VLS_component_2: DefineComponent<__VLS_Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_2> & Readonly<{}>, {
17
32
  variant: BadgeVariant;
18
33
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
@@ -33,18 +48,18 @@ padding: "none" | "sm" | "md" | "lg";
33
48
 
34
49
  declare const __VLS_component_5: DefineComponent<__VLS_Props_7, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_7> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
35
50
 
36
- declare const __VLS_component_6: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLElement>;
51
+ declare const __VLS_component_6: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLElement>;
37
52
 
38
53
  declare const __VLS_component_7: DefineComponent< {}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLUListElement>;
39
54
 
40
- declare const __VLS_component_8: DefineComponent<__VLS_Props_13, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_13> & Readonly<{}>, {
55
+ declare const __VLS_component_8: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {
41
56
  disabled: boolean;
42
57
  interactive: boolean;
43
58
  padding: ListRowPadding;
44
59
  divider: boolean;
45
60
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
46
61
 
47
- declare const __VLS_component_9: DefineComponent<__VLS_Props_14, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_14> & Readonly<{}>, {
62
+ declare const __VLS_component_9: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{}>, {
48
63
  variant: IconButtonVariant;
49
64
  size: IconButtonSize;
50
65
  disabled: boolean;
@@ -62,6 +77,13 @@ declare type __VLS_Props = {
62
77
  };
63
78
 
64
79
  declare type __VLS_Props_10 = {
80
+ name: CuidaIconName;
81
+ size?: number | string;
82
+ /** Accessible label — omit when decorative inside labelled controls */
83
+ label?: string;
84
+ };
85
+
86
+ declare type __VLS_Props_11 = {
65
87
  /** Horizontal spacing around the line */
66
88
  spacing?: DividerSpacing;
67
89
  /** Optional centered label */
@@ -69,7 +91,7 @@ declare type __VLS_Props_10 = {
69
91
  vertical?: boolean;
70
92
  };
71
93
 
72
- declare type __VLS_Props_11 = {
94
+ declare type __VLS_Props_12 = {
73
95
  /** Current value */
74
96
  value?: number;
75
97
  max?: number;
@@ -80,33 +102,46 @@ declare type __VLS_Props_11 = {
80
102
  showValue?: boolean;
81
103
  };
82
104
 
83
- declare type __VLS_Props_12 = {
105
+ declare type __VLS_Props_13 = {
84
106
  title?: string;
85
107
  };
86
108
 
87
- declare type __VLS_Props_13 = {
109
+ declare type __VLS_Props_14 = {
88
110
  interactive?: boolean;
89
111
  disabled?: boolean;
90
112
  padding?: ListRowPadding;
91
113
  divider?: boolean;
92
114
  };
93
115
 
94
- declare type __VLS_Props_14 = {
116
+ declare type __VLS_Props_15 = {
95
117
  variant?: IconButtonVariant;
96
118
  size?: IconButtonSize;
97
119
  disabled?: boolean;
98
120
  loading?: boolean;
99
121
  type?: 'button' | 'submit' | 'reset';
100
122
  label: string;
123
+ /** Cuida Icons name — preferred over the default slot */
124
+ icon?: CuidaIconName;
101
125
  };
102
126
 
103
- declare type __VLS_Props_15 = {
127
+ declare type __VLS_Props_16 = {
104
128
  modelValue?: boolean;
105
129
  label?: string;
106
130
  description?: string;
107
131
  disabled?: boolean;
108
132
  };
109
133
 
134
+ declare type __VLS_Props_17 = {
135
+ modelValue: string;
136
+ };
137
+
138
+ declare type __VLS_Props_18 = {
139
+ value: string;
140
+ label: string;
141
+ icon?: CuidaIconName;
142
+ disabled?: boolean;
143
+ };
144
+
110
145
  declare type __VLS_Props_2 = {
111
146
  variant?: BadgeVariant;
112
147
  label?: string;
@@ -179,6 +214,30 @@ declare function __VLS_template(): {
179
214
  rootEl: HTMLButtonElement;
180
215
  };
181
216
 
217
+ declare function __VLS_template_10(): {
218
+ attrs: Partial<{}>;
219
+ slots: {
220
+ default?(_: {}): any;
221
+ };
222
+ refs: {
223
+ trackRef: HTMLDivElement;
224
+ };
225
+ rootEl: HTMLElement;
226
+ };
227
+
228
+ declare function __VLS_template_11(): {
229
+ attrs: Partial<{}>;
230
+ slots: Readonly<{
231
+ icon?: () => unknown;
232
+ }> & {
233
+ icon?: () => unknown;
234
+ };
235
+ refs: {
236
+ itemRef: HTMLButtonElement;
237
+ };
238
+ rootEl: HTMLButtonElement;
239
+ };
240
+
182
241
  declare function __VLS_template_2(): {
183
242
  attrs: Partial<{}>;
184
243
  slots: Readonly<{
@@ -283,6 +342,10 @@ declare function __VLS_template_9(): {
283
342
 
284
343
  declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
285
344
 
345
+ declare type __VLS_TemplateResult_10 = ReturnType<typeof __VLS_template_10>;
346
+
347
+ declare type __VLS_TemplateResult_11 = ReturnType<typeof __VLS_template_11>;
348
+
286
349
  declare type __VLS_TemplateResult_2 = ReturnType<typeof __VLS_template_2>;
287
350
 
288
351
  declare type __VLS_TemplateResult_3 = ReturnType<typeof __VLS_template_3>;
@@ -305,6 +368,18 @@ declare type __VLS_WithTemplateSlots<T, S> = T & {
305
368
  };
306
369
  };
307
370
 
371
+ declare type __VLS_WithTemplateSlots_10<T, S> = T & {
372
+ new (): {
373
+ $slots: S;
374
+ };
375
+ };
376
+
377
+ declare type __VLS_WithTemplateSlots_11<T, S> = T & {
378
+ new (): {
379
+ $slots: S;
380
+ };
381
+ };
382
+
308
383
  declare type __VLS_WithTemplateSlots_2<T, S> = T & {
309
384
  new (): {
310
385
  $slots: S;
@@ -353,6 +428,57 @@ declare type __VLS_WithTemplateSlots_9<T, S> = T & {
353
428
  };
354
429
  };
355
430
 
431
+ export declare type AccentPalette = keyof typeof accentPalettes;
432
+
433
+ export declare const accentPaletteIds: AccentPalette[];
434
+
435
+ /**
436
+ * Named accent palettes for Akoma.
437
+ * Set on `<html data-accent="teal">` or override CSS variables in your app.
438
+ */
439
+ export declare const accentPalettes: {
440
+ readonly violet: {
441
+ readonly label: "Violet";
442
+ readonly description: "Mineral violet — default for App mood.";
443
+ readonly sample: "#6658b8";
444
+ };
445
+ readonly evergreen: {
446
+ readonly label: "Evergreen";
447
+ readonly description: "Confident green — default for Site mood.";
448
+ readonly sample: "#2e684f";
449
+ };
450
+ readonly teal: {
451
+ readonly label: "Teal";
452
+ readonly description: "Calm mineral teal for productivity and wellness apps.";
453
+ readonly sample: "#3a7d85";
454
+ };
455
+ readonly ocean: {
456
+ readonly label: "Ocean";
457
+ readonly description: "Trustworthy blue for data-heavy products.";
458
+ readonly sample: "#3d6a94";
459
+ };
460
+ readonly amber: {
461
+ readonly label: "Amber";
462
+ readonly description: "Warm gold for optimistic, human interfaces.";
463
+ readonly sample: "#9a702d";
464
+ };
465
+ readonly rose: {
466
+ readonly label: "Rose";
467
+ readonly description: "Dusty rose for lifestyle and creative tools.";
468
+ readonly sample: "#a8586a";
469
+ };
470
+ readonly coral: {
471
+ readonly label: "Coral";
472
+ readonly description: "Terracotta warmth without feeling playful.";
473
+ readonly sample: "#b5644a";
474
+ };
475
+ readonly slate: {
476
+ readonly label: "Slate";
477
+ readonly description: "Blue-gray for neutral B2B surfaces.";
478
+ readonly sample: "#4a5d73";
479
+ };
480
+ };
481
+
356
482
  export declare const AkAmbientBg: DefineComponent<__VLS_Props_9, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_9> & Readonly<{}>, {
357
483
  contained: boolean;
358
484
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
@@ -365,13 +491,17 @@ export declare const AkCard: __VLS_WithTemplateSlots_4<typeof __VLS_component_4,
365
491
 
366
492
  export declare const AkChip: __VLS_WithTemplateSlots_3<typeof __VLS_component_3, __VLS_TemplateResult_3["slots"]>;
367
493
 
368
- export declare const AkDivider: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {
494
+ export declare const AkDivider: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {
369
495
  spacing: DividerSpacing;
370
496
  vertical: boolean;
371
497
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
372
498
 
373
499
  export declare const AkEmptyState: __VLS_WithTemplateSlots_5<typeof __VLS_component_5, __VLS_TemplateResult_5["slots"]>;
374
500
 
501
+ export declare const AkIcon: DefineComponent<__VLS_Props_10, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_10> & Readonly<{}>, {
502
+ size: number | string;
503
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLSpanElement>;
504
+
375
505
  export declare const AkIconButton: __VLS_WithTemplateSlots_9<typeof __VLS_component_9, __VLS_TemplateResult_9["slots"]>;
376
506
 
377
507
  export declare const AkInput: DefineComponent<__VLS_Props_5, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
@@ -397,7 +527,7 @@ export declare type AkomaOptions = {
397
527
  prefix?: string;
398
528
  };
399
529
 
400
- export declare const AkProgress: DefineComponent<__VLS_Props_11, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_11> & Readonly<{}>, {
530
+ export declare const AkProgress: DefineComponent<__VLS_Props_12, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props_12> & Readonly<{}>, {
401
531
  size: ProgressSize;
402
532
  value: number;
403
533
  max: number;
@@ -412,15 +542,19 @@ height: string;
412
542
  radius: "sm" | "md" | "lg" | "full" | string;
413
543
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
414
544
 
415
- export declare const AkSwitch: DefineComponent<__VLS_Props_15, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
545
+ export declare const AkSwitch: DefineComponent<__VLS_Props_16, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
416
546
  "update:modelValue": (value: boolean) => any;
417
- }, string, PublicProps, Readonly<__VLS_Props_15> & Readonly<{
547
+ }, string, PublicProps, Readonly<__VLS_Props_16> & Readonly<{
418
548
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
419
549
  }>, {
420
550
  disabled: boolean;
421
551
  modelValue: boolean;
422
552
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLLabelElement>;
423
553
 
554
+ export declare const AkTabBar: __VLS_WithTemplateSlots_10<typeof __VLS_component_10, __VLS_TemplateResult_10["slots"]>;
555
+
556
+ export declare const AkTabBarItem: __VLS_WithTemplateSlots_11<typeof __VLS_component_11, __VLS_TemplateResult_11["slots"]>;
557
+
424
558
  export declare const AkTextarea: DefineComponent<__VLS_Props_6, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
425
559
  "update:modelValue": (value: string) => any;
426
560
  }, string, PublicProps, Readonly<__VLS_Props_6> & Readonly<{
@@ -432,14 +566,25 @@ required: boolean;
432
566
  rows: number;
433
567
  }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLLabelElement>;
434
568
 
569
+ /** App mood default when no data-accent is set */
570
+ export declare const appDefaultAccent: AccentPalette;
571
+
572
+ export declare function applyAccentPalette(root: HTMLElement, palette: AccentPalette | 'auto'): void;
573
+
435
574
  export declare type BadgeVariant = 'neutral' | 'accent' | 'success' | 'warning' | 'danger' | 'info';
436
575
 
437
576
  export declare type ButtonSize = 'sm' | 'md' | 'lg';
438
577
 
439
578
  export declare type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
440
579
 
580
+ export declare const cuidaIconMap: Map<string, string>;
581
+
582
+ export declare type CuidaIconName = cIcons;
583
+
441
584
  export declare type DividerSpacing = 'sm' | 'md' | 'lg';
442
585
 
586
+ export declare function getCuidaIconMarkup(name: CuidaIconName): string;
587
+
443
588
  export declare type IconButtonSize = 'sm' | 'md' | 'lg';
444
589
 
445
590
  export declare type IconButtonVariant = 'ghost' | 'secondary' | 'danger';
@@ -450,4 +595,9 @@ export declare type ListRowPadding = 'sm' | 'md';
450
595
 
451
596
  export declare type ProgressSize = 'sm' | 'md';
452
597
 
598
+ export declare function resolveAccentPalette(mood: 'app' | 'site', explicit?: AccentPalette | null): AccentPalette;
599
+
600
+ /** Site mood default when no data-accent is set */
601
+ export declare const siteDefaultAccent: AccentPalette;
602
+
453
603
  export { }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rafael_dias/akoma",
3
- "version": "0.4.0",
3
+ "version": "0.7.6",
4
4
  "description": "A human Vue 3 design system with expressive App and trustworthy Site moods.",
5
5
  "type": "module",
6
6
  "author": "Rafael",
@@ -29,6 +29,7 @@
29
29
  "./tokens.css": "./src/styles/tokens.css",
30
30
  "./base.css": "./src/styles/base.css",
31
31
  "./motion.css": "./src/styles/motion.css",
32
+ "./accent-palettes.css": "./src/styles/accent-palettes.css",
32
33
  "./content/*": "./content/*"
33
34
  },
34
35
  "files": [
@@ -48,12 +49,14 @@
48
49
  "typecheck": "vue-tsc -p tsconfig.app.json --noEmit"
49
50
  },
50
51
  "peerDependencies": {
51
- "vue": "^3.5.0"
52
+ "vue": "^3.5.0",
53
+ "@sysvale/cuida-icons": "^1.18.0"
52
54
  },
53
55
  "dependencies": {
54
56
  "vue": "^3.5.0"
55
57
  },
56
58
  "devDependencies": {
59
+ "@sysvale/cuida-icons": "^1.18.0",
57
60
  "@types/node": "^24.13.2",
58
61
  "@vitejs/plugin-vue": "^6.0.7",
59
62
  "@vue/tsconfig": "^0.9.1",
@@ -0,0 +1,194 @@
1
+ /* Akoma — accent palettes
2
+ *
3
+ * Mood (App / Site) controls shape and surfaces.
4
+ * Accent controls brand color independently.
5
+ *
6
+ * <html data-mood="app" data-accent="teal">
7
+ *
8
+ * Without data-accent:
9
+ * App → violet
10
+ * Site → evergreen
11
+ */
12
+
13
+ :root,
14
+ [data-mood='app']:not([data-accent]) {
15
+ --accent: #6658b8;
16
+ --accent-hover: #5548a3;
17
+ --accent-soft: #ece9f8;
18
+ --accent-contrast: #ffffff;
19
+ --bg-tinted: #f1eefb;
20
+ --orb-1: rgba(102, 88, 184, 0.13);
21
+ }
22
+
23
+ [data-mood='site']:not([data-accent]) {
24
+ --accent: #2e684f;
25
+ --accent-hover: #245640;
26
+ --accent-soft: #e2eee7;
27
+ --accent-contrast: #ffffff;
28
+ --bg-tinted: #f4f5f4;
29
+ --orb-1: rgba(46, 104, 79, 0.06);
30
+ }
31
+
32
+ [data-accent='violet'] {
33
+ --accent: #6658b8;
34
+ --accent-hover: #5548a3;
35
+ --accent-soft: #ece9f8;
36
+ --accent-contrast: #ffffff;
37
+ --bg-tinted: #f1eefb;
38
+ --orb-1: rgba(102, 88, 184, 0.13);
39
+ }
40
+
41
+ [data-accent='evergreen'] {
42
+ --accent: #2e684f;
43
+ --accent-hover: #245640;
44
+ --accent-soft: #e2eee7;
45
+ --accent-contrast: #ffffff;
46
+ --bg-tinted: #f2f5f3;
47
+ --orb-1: rgba(46, 104, 79, 0.07);
48
+ }
49
+
50
+ [data-accent='teal'] {
51
+ --accent: #3a7d85;
52
+ --accent-hover: #2f686f;
53
+ --accent-soft: #e3eff0;
54
+ --accent-contrast: #ffffff;
55
+ --bg-tinted: #e8f2f3;
56
+ --orb-1: rgba(58, 125, 133, 0.12);
57
+ }
58
+
59
+ [data-accent='ocean'] {
60
+ --accent: #3d6a94;
61
+ --accent-hover: #32577a;
62
+ --accent-soft: #e5eef5;
63
+ --accent-contrast: #ffffff;
64
+ --bg-tinted: #e8f0f7;
65
+ --orb-1: rgba(61, 106, 148, 0.11);
66
+ }
67
+
68
+ [data-accent='amber'] {
69
+ --accent: #9a702d;
70
+ --accent-hover: #7f5c24;
71
+ --accent-soft: #f5ecd4;
72
+ --accent-contrast: #ffffff;
73
+ --bg-tinted: #f8f2e4;
74
+ --orb-1: rgba(154, 112, 45, 0.1);
75
+ }
76
+
77
+ [data-accent='rose'] {
78
+ --accent: #a8586a;
79
+ --accent-hover: #8f4a59;
80
+ --accent-soft: #fae9ed;
81
+ --accent-contrast: #ffffff;
82
+ --bg-tinted: #f9eef1;
83
+ --orb-1: rgba(168, 88, 106, 0.11);
84
+ }
85
+
86
+ [data-accent='coral'] {
87
+ --accent: #b5644a;
88
+ --accent-hover: #9a543e;
89
+ --accent-soft: #faece8;
90
+ --accent-contrast: #ffffff;
91
+ --bg-tinted: #f9f0eb;
92
+ --orb-1: rgba(181, 100, 74, 0.11);
93
+ }
94
+
95
+ [data-accent='slate'] {
96
+ --accent: #4a5d73;
97
+ --accent-hover: #3c4d60;
98
+ --accent-soft: #e8ecf1;
99
+ --accent-contrast: #ffffff;
100
+ --bg-tinted: #eef1f5;
101
+ --orb-1: rgba(74, 93, 115, 0.1);
102
+ }
103
+
104
+ /* Dark — mood defaults */
105
+ [data-theme='dark']:not([data-accent]),
106
+ [data-theme='dark'][data-mood='app']:not([data-accent]) {
107
+ --accent: #a99ee8;
108
+ --accent-hover: #bbb2f0;
109
+ --accent-soft: #39354f;
110
+ --accent-contrast: #211d38;
111
+ --bg-tinted: #312e40;
112
+ --orb-1: rgba(169, 158, 232, 0.11);
113
+ }
114
+
115
+ [data-theme='dark'][data-mood='site']:not([data-accent]) {
116
+ --accent: #82b99d;
117
+ --accent-hover: #96c6ae;
118
+ --accent-soft: #294438;
119
+ --accent-contrast: #13241c;
120
+ --bg-tinted: #252928;
121
+ --orb-1: rgba(130, 185, 157, 0.06);
122
+ }
123
+
124
+ [data-theme='dark'][data-accent='violet'] {
125
+ --accent: #a99ee8;
126
+ --accent-hover: #bbb2f0;
127
+ --accent-soft: #39354f;
128
+ --accent-contrast: #211d38;
129
+ --bg-tinted: #312e40;
130
+ --orb-1: rgba(169, 158, 232, 0.11);
131
+ }
132
+
133
+ [data-theme='dark'][data-accent='evergreen'] {
134
+ --accent: #82b99d;
135
+ --accent-hover: #96c6ae;
136
+ --accent-soft: #294438;
137
+ --accent-contrast: #13241c;
138
+ --bg-tinted: #27312c;
139
+ --orb-1: rgba(130, 185, 157, 0.07);
140
+ }
141
+
142
+ [data-theme='dark'][data-accent='teal'] {
143
+ --accent: #7eb8bf;
144
+ --accent-hover: #95c7cd;
145
+ --accent-soft: #294548;
146
+ --accent-contrast: #142528;
147
+ --bg-tinted: #243638;
148
+ --orb-1: rgba(126, 184, 191, 0.1);
149
+ }
150
+
151
+ [data-theme='dark'][data-accent='ocean'] {
152
+ --accent: #8ab4d9;
153
+ --accent-hover: #9fc3e2;
154
+ --accent-soft: #2a3a4a;
155
+ --accent-contrast: #152130;
156
+ --bg-tinted: #253545;
157
+ --orb-1: rgba(138, 180, 217, 0.1);
158
+ }
159
+
160
+ [data-theme='dark'][data-accent='amber'] {
161
+ --accent: #d4ad61;
162
+ --accent-hover: #debb78;
163
+ --accent-soft: #413823;
164
+ --accent-contrast: #2a2212;
165
+ --bg-tinted: #3a3220;
166
+ --orb-1: rgba(212, 173, 97, 0.09);
167
+ }
168
+
169
+ [data-theme='dark'][data-accent='rose'] {
170
+ --accent: #df8a9a;
171
+ --accent-hover: #e79fad;
172
+ --accent-soft: #472f35;
173
+ --accent-contrast: #2a171c;
174
+ --bg-tinted: #3a2830;
175
+ --orb-1: rgba(223, 138, 154, 0.1);
176
+ }
177
+
178
+ [data-theme='dark'][data-accent='coral'] {
179
+ --accent: #e09a82;
180
+ --accent-hover: #e8ad99;
181
+ --accent-soft: #4a322c;
182
+ --accent-contrast: #2a1a15;
183
+ --bg-tinted: #3d2e28;
184
+ --orb-1: rgba(224, 154, 130, 0.1);
185
+ }
186
+
187
+ [data-theme='dark'][data-accent='slate'] {
188
+ --accent: #9aadc4;
189
+ --accent-hover: #aebed1;
190
+ --accent-soft: #2f3844;
191
+ --accent-contrast: #171e28;
192
+ --bg-tinted: #2a323c;
193
+ --orb-1: rgba(154, 173, 196, 0.1);
194
+ }
@@ -1,3 +1,4 @@
1
1
  @import './tokens.css';
2
+ @import './accent-palettes.css';
2
3
  @import './base.css';
3
4
  @import './motion.css';
@@ -16,6 +16,14 @@
16
16
  animation: ambient-drift 18s ease-in-out infinite;
17
17
  }
18
18
 
19
+ [data-mood='site'] .ambient__orb {
20
+ opacity: 0.2;
21
+ }
22
+
23
+ [data-mood='site'][data-theme='dark'] .ambient__orb {
24
+ opacity: 0.14;
25
+ }
26
+
19
27
  .ambient__orb--1 {
20
28
  width: 280px;
21
29
  height: 280px;