@aggc/ui 0.5.1 → 0.7.0

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 (51) hide show
  1. package/dist/chunks/{UiSkeleton.vue_vue_type_script_setup_true_lang-Lghyrtms.js → UiSkeleton.vue_vue_type_script_setup_true_lang-Dg-HzSqj.js} +286 -286
  2. package/dist/chunks/{pageHeader-CcJrPX_8.js → pageHeader-DhPY_hNA.js} +204 -146
  3. package/dist/components/StatusBadge.styles.d.ts +5 -0
  4. package/dist/components/StatusBadge.vue.d.ts +2 -2
  5. package/dist/components/UiButton.styles.d.ts +31 -12
  6. package/dist/components/UiButton.vue.d.ts +4 -0
  7. package/dist/components/UiCheckbox.styles.d.ts +2 -4
  8. package/dist/components/UiSegmentedControl.styles.d.ts +5 -1
  9. package/dist/components/UiSelect.styles.d.ts +10 -3
  10. package/dist/components/UiSkeleton.styles.d.ts +1 -33
  11. package/dist/components.js +1 -1
  12. package/dist/index.js +2 -2
  13. package/dist/styles/recipes/badge.recipe.d.ts +5 -0
  14. package/dist/styles/recipes/button.recipe.d.ts +31 -12
  15. package/dist/styles/recipes/card.recipe.d.ts +23 -12
  16. package/dist/styles/recipes/dropdown.recipe.d.ts +6 -6
  17. package/dist/styles/recipes/input.recipe.d.ts +0 -3
  18. package/dist/styles.js +118 -92
  19. package/dist/tokens/colors.d.ts +30 -0
  20. package/dist/tokens/core-colors.d.ts +30 -0
  21. package/dist/tokens/motion.d.ts +20 -0
  22. package/dist/tokens/radius.d.ts +9 -0
  23. package/dist/tokens-core.js +21 -5
  24. package/dist/ui.css +306 -228
  25. package/package.json +1 -1
  26. package/src/components/ResultPanel.styles.ts +7 -2
  27. package/src/components/SectionCard.styles.ts +1 -1
  28. package/src/components/SectionCard.vue +1 -1
  29. package/src/components/StatusBadge.styles.ts +10 -8
  30. package/src/components/StatusBadge.vue +1 -1
  31. package/src/components/UiButton.vue +5 -1
  32. package/src/components/UiCheckbox.styles.ts +7 -11
  33. package/src/components/UiField.styles.ts +2 -2
  34. package/src/components/UiLoadingState.styles.ts +2 -2
  35. package/src/components/UiSegmentedControl.styles.ts +14 -4
  36. package/src/components/UiSelect.styles.ts +24 -10
  37. package/src/components/UiSkeleton.styles.ts +7 -36
  38. package/src/css/base.css +44 -9
  39. package/src/styles/layouts/page.ts +5 -0
  40. package/src/styles/primitives/feedback.ts +1 -0
  41. package/src/styles/primitives/fields.ts +21 -11
  42. package/src/styles/primitives/surfaces.ts +13 -26
  43. package/src/styles/primitives/typography.ts +5 -4
  44. package/src/styles/recipes/badge.recipe.ts +5 -5
  45. package/src/styles/recipes/button.recipe.ts +86 -25
  46. package/src/styles/recipes/card.recipe.ts +24 -13
  47. package/src/styles/recipes/dropdown.recipe.ts +11 -8
  48. package/src/styles/recipes/input.recipe.ts +10 -6
  49. package/src/tokens/core-colors.ts +5 -0
  50. package/src/tokens/motion.ts +8 -0
  51. package/src/tokens/radius.ts +3 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aggc/ui",
3
- "version": "0.5.1",
3
+ "version": "0.7.0",
4
4
  "description": "Shared Vue UI primitives, patterns, and tokens for AGGC desktop and web.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -6,6 +6,9 @@ export const resultPanelClass = cva({
6
6
  base: {
7
7
  borderWidth: "1px",
8
8
  padding: "5",
9
+ _dark: {
10
+ borderColor: "border.default",
11
+ },
9
12
  },
10
13
  variants: {
11
14
  ok: {
@@ -40,12 +43,13 @@ export const resultPanelSummaryClass = css({
40
43
 
41
44
  export const resultPanelIconClass = cva({
42
45
  base: {
43
- width: "10",
44
- height: "10",
46
+ width: "9",
47
+ height: "9",
45
48
  borderRadius: "full",
46
49
  display: "flex",
47
50
  alignItems: "center",
48
51
  justifyContent: "center",
52
+ flexShrink: "0",
49
53
  },
50
54
  variants: {
51
55
  ok: {
@@ -65,6 +69,7 @@ export const resultPanelTitleClass = css({
65
69
  fontSize: "lg",
66
70
  fontWeight: "700",
67
71
  color: "text.primary",
72
+ lineHeight: "1.3",
68
73
  });
69
74
 
70
75
  export const resultPanelSectionClass = cva({
@@ -26,7 +26,7 @@ export const sectionCardHeaderClass = pageHeaderRootClass;
26
26
  export const sectionCardHeaderWithGapClass = css({
27
27
  position: "relative",
28
28
  zIndex: "1",
29
- mb: "5",
29
+ mb: "4",
30
30
  });
31
31
 
32
32
  export const sectionCardHeaderCollapsedGapClass = css({
@@ -23,7 +23,7 @@ const props = withDefaults(defineProps<{
23
23
  scrollBody?: boolean;
24
24
  collapseBodyGap?: boolean;
25
25
  }>(), {
26
- eyebrow: "Workspace surface",
26
+ eyebrow: undefined,
27
27
  description: "",
28
28
  scrollBody: false,
29
29
  collapseBodyGap: false,
@@ -7,17 +7,14 @@ export const statusBadgeClass = cva({
7
7
  justifyContent: "center",
8
8
  borderRadius: "full",
9
9
  borderWidth: "1px",
10
- px: "3",
11
- py: "1.5",
10
+ px: "2.5",
11
+ py: "1",
12
12
  fontSize: "xs",
13
13
  fontWeight: "700",
14
14
  textTransform: "uppercase",
15
- letterSpacing: "0.1em",
16
- backdropFilter: "blur(16px) saturate(140%)",
17
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.16)",
18
- _dark: {
19
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.04)",
20
- },
15
+ letterSpacing: "0.06em",
16
+ lineHeight: "1",
17
+ whiteSpace: "nowrap",
21
18
  },
22
19
  variants: {
23
20
  tone: {
@@ -41,6 +38,11 @@ export const statusBadgeClass = cva({
41
38
  color: "badge.neutralText",
42
39
  borderColor: "badge.neutralBorder",
43
40
  },
41
+ danger: {
42
+ bg: "badge.dangerBg",
43
+ color: "badge.dangerText",
44
+ borderColor: "badge.dangerBorder",
45
+ },
44
46
  },
45
47
  },
46
48
  defaultVariants: {
@@ -3,7 +3,7 @@ import { statusBadgeClass } from "./StatusBadge.styles";
3
3
 
4
4
  const props = withDefaults(
5
5
  defineProps<{
6
- tone?: "success" | "warning" | "info" | "neutral";
6
+ tone?: "success" | "warning" | "info" | "danger" | "neutral";
7
7
  }>(),
8
8
  {
9
9
  tone: "neutral",
@@ -10,6 +10,8 @@ import {
10
10
  withDefaults(
11
11
  defineProps<{
12
12
  variant?: "solid" | "outline" | "subtle";
13
+ size?: "sm" | "md" | "lg";
14
+ tone?: "default" | "danger";
13
15
  loading?: boolean;
14
16
  loadingLabel?: string;
15
17
  disabled?: boolean;
@@ -18,6 +20,8 @@ withDefaults(
18
20
  }>(),
19
21
  {
20
22
  variant: "solid",
23
+ size: "md",
24
+ tone: "default",
21
25
  loading: false,
22
26
  loadingLabel: "Working...",
23
27
  disabled: false,
@@ -33,7 +37,7 @@ withDefaults(
33
37
  :disabled="disabled || loading"
34
38
  :aria-busy="loading || undefined"
35
39
  :aria-label="ariaLabel"
36
- :class="uiButtonClass({ variant, disabled, loading })"
40
+ :class="uiButtonClass({ variant, size, tone, disabled, loading })"
37
41
  >
38
42
  <span :class="[uiButtonContentClass, loading ? uiButtonHiddenContentClass : undefined]">
39
43
  <slot />
@@ -7,30 +7,28 @@ export const uiCheckboxRootClass = cva({
7
7
  alignItems: "flex-start",
8
8
  gap: "3",
9
9
  textAlign: "left",
10
- borderRadius: "2xl",
10
+ borderRadius: "xl",
11
11
  borderWidth: "1px",
12
12
  px: "4",
13
13
  py: "3.5",
14
14
  color: "text.primary",
15
- transition: "all 160ms ease",
15
+ transition: "border-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), background-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), box-shadow 160ms cubic-bezier(0.25, 0.1, 0.25, 1)",
16
16
  },
17
17
  variants: {
18
18
  checked: {
19
19
  true: {
20
20
  borderColor: "border.accent",
21
21
  bg: "bg.selected",
22
- boxShadow: "0 18px 40px -30px rgba(49,94,255,0.56)",
23
22
  },
24
23
  false: {
25
24
  borderColor: "border.default",
26
25
  bg: "bg.input",
27
- boxShadow: "0 14px 32px -30px rgba(15,23,42,0.42)",
28
26
  },
29
27
  },
30
28
  disabled: {
31
29
  true: {
32
30
  cursor: "not-allowed",
33
- opacity: 0.5,
31
+ opacity: 0.45,
34
32
  },
35
33
  false: {
36
34
  cursor: "pointer",
@@ -44,7 +42,6 @@ export const uiCheckboxRootClass = cva({
44
42
  css: {
45
43
  _hover: {
46
44
  borderColor: "border.accent",
47
- transform: "translateY(-1px)",
48
45
  },
49
46
  },
50
47
  },
@@ -54,7 +51,6 @@ export const uiCheckboxRootClass = cva({
54
51
  css: {
55
52
  _hover: {
56
53
  borderColor: "border.strong",
57
- transform: "translateY(-1px)",
58
54
  },
59
55
  },
60
56
  },
@@ -72,11 +68,11 @@ export const uiCheckboxIndicatorClass = cva({
72
68
  width: "22px",
73
69
  height: "22px",
74
70
  borderRadius: "md",
75
- borderWidth: "1px",
71
+ borderWidth: "1.5px",
76
72
  display: "flex",
77
73
  alignItems: "center",
78
74
  justifyContent: "center",
79
- transition: "all 160ms ease",
75
+ transition: "border-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), background-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), transform 160ms cubic-bezier(0.25, 0.1, 0.25, 1)",
80
76
  },
81
77
  variants: {
82
78
  checked: {
@@ -84,13 +80,13 @@ export const uiCheckboxIndicatorClass = cva({
84
80
  borderColor: "border.accent",
85
81
  bg: "bg.accentStrong",
86
82
  color: "text.inverse",
87
- boxShadow: "0 12px 24px -16px rgba(49,94,255,0.7)",
83
+ transform: "scale(1)",
88
84
  },
89
85
  false: {
90
86
  borderColor: "border.default",
91
87
  bg: "bg.buttonOutline",
92
88
  color: "transparent",
93
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.32)",
89
+ transform: "scale(1)",
94
90
  },
95
91
  },
96
92
  },
@@ -16,7 +16,7 @@ export const uiFieldTopRowClass = css({
16
16
 
17
17
  export const uiFieldLabelWrapClass = css({
18
18
  display: "grid",
19
- gap: "1",
19
+ gap: "0.5",
20
20
  minWidth: "0",
21
21
  });
22
22
 
@@ -24,7 +24,7 @@ export const uiFieldEyebrowClass = eyebrowClass;
24
24
 
25
25
  export const uiFieldLabelClass = css({
26
26
  fontSize: "sm",
27
- fontWeight: "700",
27
+ fontWeight: "600",
28
28
  color: "text.primary",
29
29
  });
30
30
 
@@ -21,8 +21,8 @@ export const uiLoadingStatePulseClass = css({
21
21
  borderRadius: "full",
22
22
  flexShrink: "0",
23
23
  bg: "text.accent",
24
- boxShadow: "0 0 0 0 rgba(49,94,255,0.35)",
25
- animation: "loadingPulse 1.2s ease-out infinite",
24
+ boxShadow: "0 0 0 0 var(--colors-bg-accentSoft, rgba(49, 94, 255, 0.3))",
25
+ animation: "loadingPulse 1.4s cubic-bezier(0.25, 0.1, 0.25, 1) infinite",
26
26
  });
27
27
 
28
28
  export const uiLoadingStateContentClass = css({
@@ -9,8 +9,9 @@ export const segmentedControlContainerClass = css({
9
9
  bg: "bg.input",
10
10
  padding: "1",
11
11
  gap: "1",
12
- backdropFilter: "blur(18px) saturate(140%)",
13
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.18)",
12
+ _dark: {
13
+ borderColor: "border.strong",
14
+ },
14
15
  });
15
16
 
16
17
  export const segmentedControlOptionClass = cva({
@@ -22,7 +23,12 @@ export const segmentedControlOptionClass = cva({
22
23
  fontWeight: "600",
23
24
  cursor: "pointer",
24
25
  borderWidth: "1px",
25
- transition: "all 160ms ease",
26
+ transition: "background-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), border-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), box-shadow 160ms cubic-bezier(0.25, 0.1, 0.25, 1)",
27
+ _focusVisible: {
28
+ outline: "2px solid",
29
+ outlineColor: "text.accent",
30
+ outlineOffset: "2px",
31
+ },
26
32
  },
27
33
  variants: {
28
34
  active: {
@@ -30,10 +36,14 @@ export const segmentedControlOptionClass = cva({
30
36
  borderColor: "border.accent",
31
37
  bg: "bg.accentStrong",
32
38
  color: "text.inverse",
33
- boxShadow: "0 14px 26px -16px rgba(49,94,255,0.68)",
34
39
  _hover: {
35
40
  bg: "bg.accentStrong",
36
41
  },
42
+ _dark: {
43
+ bg: "rgba(138, 180, 255, 0.2)",
44
+ color: "text.accent",
45
+ borderColor: "border.accent",
46
+ },
37
47
  },
38
48
  false: {
39
49
  borderColor: "transparent",
@@ -26,8 +26,7 @@ export const uiSelectTriggerClass = cva({
26
26
  borderWidth: "1px",
27
27
  fontSize: "sm",
28
28
  overflow: "hidden",
29
- backdropFilter: "blur(24px) saturate(145%)",
30
- transition: "all 160ms ease",
29
+ transition: "border-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), background-color 160ms cubic-bezier(0.25, 0.1, 0.25, 1), box-shadow 160ms cubic-bezier(0.25, 0.1, 0.25, 1)",
31
30
  },
32
31
  variants: {
33
32
  size: {
@@ -48,12 +47,14 @@ export const uiSelectTriggerClass = cva({
48
47
  true: {
49
48
  borderColor: "border.accent",
50
49
  bg: "bg.cardStrong",
51
- boxShadow: "0 18px 42px -28px rgba(49,94,255,0.42)",
50
+ _dark: {
51
+ borderColor: "border.accent",
52
+ bg: "bg.input",
53
+ },
52
54
  },
53
55
  false: {
54
56
  borderColor: "border.default",
55
57
  bg: "bg.input",
56
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.22)",
57
58
  },
58
59
  },
59
60
  selected: {
@@ -63,10 +64,15 @@ export const uiSelectTriggerClass = cva({
63
64
  disabled: {
64
65
  true: {
65
66
  cursor: "not-allowed",
66
- opacity: 0.55,
67
+ opacity: 0.45,
67
68
  },
68
69
  false: {
69
70
  cursor: "pointer",
71
+ _focusVisible: {
72
+ outline: "2px solid",
73
+ outlineColor: "text.accent",
74
+ outlineOffset: "2px",
75
+ },
70
76
  },
71
77
  },
72
78
  },
@@ -77,6 +83,9 @@ export const uiSelectTriggerClass = cva({
77
83
  _hover: {
78
84
  borderColor: "border.strong",
79
85
  bg: "bg.cardStrong",
86
+ _dark: {
87
+ bg: "bg.input",
88
+ },
80
89
  },
81
90
  },
82
91
  },
@@ -120,7 +129,7 @@ export const uiSelectValueTextClass = css({
120
129
  export const uiSelectChevronClass = cva({
121
130
  base: {
122
131
  color: "text.muted",
123
- transition: "transform 160ms ease",
132
+ transition: "transform 160ms cubic-bezier(0.25, 0.1, 0.25, 1)",
124
133
  },
125
134
  variants: {
126
135
  open: {
@@ -141,20 +150,25 @@ export const uiSelectOptionClass = cva({
141
150
  justifyContent: "space-between",
142
151
  gap: "3",
143
152
  textAlign: "left",
144
- borderRadius: "xl",
153
+ borderRadius: "lg",
145
154
  px: "3",
146
155
  borderWidth: "1px",
147
156
  cursor: "pointer",
148
- transition: "all 140ms ease",
157
+ transition: "border-color 140ms cubic-bezier(0.25, 0.1, 0.25, 1), background-color 140ms cubic-bezier(0.25, 0.1, 0.25, 1), color 140ms cubic-bezier(0.25, 0.1, 0.25, 1)",
149
158
  _hover: {
150
159
  bg: "bg.selected",
151
160
  borderColor: "border.accent",
152
161
  },
162
+ _focusVisible: {
163
+ outline: "2px solid",
164
+ outlineColor: "text.accent",
165
+ outlineOffset: "-2px",
166
+ },
153
167
  },
154
168
  variants: {
155
169
  size: {
156
170
  sm: { py: "2.5" },
157
- md: { py: "3" },
171
+ md: { py: "2.5" },
158
172
  },
159
173
  active: {
160
174
  true: {
@@ -200,7 +214,7 @@ export const uiSelectOptionDescriptionClass = css({
200
214
  export const uiSelectCheckClass = cva({
201
215
  base: {
202
216
  color: "text.accent",
203
- transition: "opacity 140ms ease",
217
+ transition: "opacity 140ms cubic-bezier(0.25, 0.1, 0.25, 1)",
204
218
  },
205
219
  variants: {
206
220
  selected: {
@@ -4,19 +4,22 @@ export const skeletonClass = cva({
4
4
  base: {
5
5
  position: "relative",
6
6
  overflow: "hidden",
7
+ bg: "bg.cardAlt",
8
+ borderRadius: "md",
7
9
  _before: {
8
10
  content: "\"\"",
9
11
  position: "absolute",
10
12
  inset: "0",
11
13
  background:
12
- "linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.62) 50%, rgba(255,255,255,0) 100%)",
14
+ "linear-gradient(90deg, transparent 0%, var(--colors-bg-overlay, rgba(255,255,255,0.36)) 50%, transparent 100%)",
13
15
  transform: "translateX(-100%)",
14
- animation: "aggc-shimmer 1.45s ease-in-out infinite",
16
+ animation: "aggc-shimmer 1.6s cubic-bezier(0.25, 0.1, 0.25, 1) infinite",
15
17
  },
16
18
  _dark: {
19
+ bg: "rgba(255, 255, 255, 0.04)",
17
20
  _before: {
18
21
  background:
19
- "linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(186,204,236,0.22) 50%, rgba(255,255,255,0) 100%)",
22
+ "linear-gradient(90deg, transparent 0%, rgba(186, 204, 236, 0.1) 50%, transparent 100%)",
20
23
  },
21
24
  },
22
25
  },
@@ -25,65 +28,33 @@ export const skeletonClass = cva({
25
28
  text: {
26
29
  width: "100%",
27
30
  height: "0.875rem",
28
- borderRadius: "md",
29
- bg: "rgba(127, 146, 184, 0.14)",
30
- _dark: {
31
- bg: "rgba(210, 220, 240, 0.09)",
32
- },
33
31
  },
34
32
  title: {
35
33
  width: "100%",
36
34
  height: "1.75rem",
37
- borderRadius: "xl",
38
- bg: "rgba(127, 146, 184, 0.14)",
39
- _dark: {
40
- bg: "rgba(210, 220, 240, 0.09)",
41
- },
35
+ borderRadius: "md",
42
36
  },
43
37
  rect: {
44
38
  width: "100%",
45
39
  height: "5rem",
46
- borderRadius: "xl",
47
- bg: "rgba(127, 146, 184, 0.14)",
48
- _dark: {
49
- bg: "rgba(210, 220, 240, 0.09)",
50
- },
51
40
  },
52
41
  pill: {
53
42
  width: "5rem",
54
43
  height: "1.75rem",
55
44
  borderRadius: "999px",
56
- bg: "rgba(127, 146, 184, 0.14)",
57
- _dark: {
58
- bg: "rgba(210, 220, 240, 0.09)",
59
- },
60
45
  },
61
46
  circle: {
62
47
  width: "2.75rem",
63
48
  height: "2.75rem",
64
49
  borderRadius: "999px",
65
- bg: "rgba(127, 146, 184, 0.14)",
66
- _dark: {
67
- bg: "rgba(210, 220, 240, 0.09)",
68
- },
69
50
  },
70
51
  stat: {
71
52
  width: "100%",
72
53
  height: "4.75rem",
73
- borderRadius: "xl",
74
- bg: "rgba(117, 138, 178, 0.16)",
75
- _dark: {
76
- bg: "rgba(210, 220, 240, 0.11)",
77
- },
78
54
  },
79
55
  action: {
80
56
  width: "100%",
81
57
  height: "2.75rem",
82
- borderRadius: "xl",
83
- bg: "rgba(127, 146, 184, 0.14)",
84
- _dark: {
85
- bg: "rgba(210, 220, 240, 0.09)",
86
- },
87
58
  },
88
59
  },
89
60
  },
package/src/css/base.css CHANGED
@@ -8,14 +8,17 @@ html {
8
8
 
9
9
  body {
10
10
  margin: 0;
11
+ -webkit-font-smoothing: antialiased;
12
+ -moz-osx-font-smoothing: grayscale;
13
+ text-rendering: optimizeLegibility;
11
14
  }
12
15
 
13
16
  .aggc-spin {
14
- animation: aggc-spin 800ms linear infinite;
17
+ animation: aggc-spin 700ms linear infinite;
15
18
  }
16
19
 
17
20
  [data-ui-loading-pulse] {
18
- animation: loadingPulse 1.2s ease-out infinite;
21
+ animation: loadingPulse 1.4s cubic-bezier(0.25, 0.1, 0.25, 1) infinite;
19
22
  }
20
23
 
21
24
  [data-ui-skeleton]::before {
@@ -29,25 +32,57 @@ body {
29
32
 
30
33
  @keyframes loadingPulse {
31
34
  0% {
32
- transform: scale(0.96);
33
- box-shadow: 0 0 0 0 rgba(49, 94, 255, 0.35);
35
+ transform: scale(0.92);
36
+ box-shadow: 0 0 0 0 var(--colors-text-accent, rgba(49, 94, 255, 0.3));
34
37
  }
35
- 70% {
38
+ 50% {
36
39
  transform: scale(1);
37
- box-shadow: 0 0 0 10px rgba(49, 94, 255, 0);
40
+ }
41
+ 70% {
42
+ box-shadow: 0 0 0 8px var(--colors-text-accent, rgba(49, 94, 255, 0));
38
43
  }
39
44
  100% {
40
- transform: scale(0.96);
41
- box-shadow: 0 0 0 0 rgba(49, 94, 255, 0);
45
+ transform: scale(0.92);
46
+ box-shadow: 0 0 0 0 var(--colors-text-accent, rgba(49, 94, 255, 0));
42
47
  }
43
48
  }
44
49
 
45
50
  @keyframes aggc-shimmer {
51
+ 0% {
52
+ transform: translateX(-100%);
53
+ }
46
54
  100% {
47
55
  transform: translateX(100%);
48
56
  }
49
57
  }
50
58
 
59
+ @keyframes aggc-fade-in {
60
+ from { opacity: 0; }
61
+ to { opacity: 1; }
62
+ }
63
+
64
+ @keyframes aggc-slide-up {
65
+ from {
66
+ opacity: 0;
67
+ transform: translateY(6px);
68
+ }
69
+ to {
70
+ opacity: 1;
71
+ transform: translateY(0);
72
+ }
73
+ }
74
+
75
+ @keyframes aggc-scale-in {
76
+ from {
77
+ opacity: 0;
78
+ transform: scale(0.96);
79
+ }
80
+ to {
81
+ opacity: 1;
82
+ transform: scale(1);
83
+ }
84
+ }
85
+
51
86
  @media (prefers-reduced-motion: reduce) {
52
87
  .aggc-spin,
53
88
  [data-ui-loading-pulse] {
@@ -57,6 +92,6 @@ body {
57
92
  [data-ui-skeleton]::before {
58
93
  animation: none !important;
59
94
  transform: translateX(0);
60
- opacity: 0.45;
95
+ opacity: 0.4;
61
96
  }
62
97
  }
@@ -19,4 +19,9 @@ export const pageScrollRegionClass = css({
19
19
  overflowY: "auto",
20
20
  paddingRight: "1",
21
21
  alignContent: "start",
22
+ scrollbarWidth: "thin",
23
+ scrollbarColor: "rgba(148, 163, 184, 0.3) transparent",
24
+ _dark: {
25
+ scrollbarColor: "rgba(255, 255, 255, 0.12) transparent",
26
+ },
22
27
  });
@@ -9,6 +9,7 @@ export const errorTextClass = css({
9
9
  color: "text.error",
10
10
  fontSize: "sm",
11
11
  fontWeight: "600",
12
+ lineHeight: "1.5",
12
13
  });
13
14
 
14
15
  export const mutedTextClass = css({
@@ -12,17 +12,20 @@ export const fieldControlClass = css({
12
12
  lineHeight: "1.5",
13
13
  px: "4",
14
14
  py: "3",
15
- backdropFilter: "blur(22px) saturate(145%)",
16
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.24), 0 14px 28px -28px rgba(15,23,42,0.42)",
17
- transition: "border-color 160ms ease, background 160ms ease, transform 160ms ease",
15
+ transition: "border-color 160ms ease, background-color 160ms ease, box-shadow 160ms ease",
18
16
  _hover: {
19
17
  borderColor: "border.strong",
20
18
  },
21
19
  _placeholder: {
22
20
  color: "text.muted",
23
21
  },
22
+ _focusVisible: {
23
+ outline: "none",
24
+ borderColor: "border.accent",
25
+ boxShadow: "0 0 0 3px rgba(82, 121, 255, 0.18)",
26
+ },
24
27
  _dark: {
25
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
28
+ borderColor: "border.strong",
26
29
  },
27
30
  });
28
31
 
@@ -38,17 +41,20 @@ export const fieldControlSmClass = css({
38
41
  lineHeight: "1.45",
39
42
  px: "3",
40
43
  py: "2.5",
41
- backdropFilter: "blur(20px) saturate(145%)",
42
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.2)",
43
- transition: "border-color 160ms ease, background 160ms ease",
44
+ transition: "border-color 160ms ease, background-color 160ms ease",
44
45
  _hover: {
45
46
  borderColor: "border.strong",
46
47
  },
47
48
  _placeholder: {
48
49
  color: "text.muted",
49
50
  },
51
+ _focusVisible: {
52
+ outline: "none",
53
+ borderColor: "border.accent",
54
+ boxShadow: "0 0 0 3px rgba(82, 121, 255, 0.18)",
55
+ },
50
56
  _dark: {
51
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
57
+ borderColor: "border.strong",
52
58
  },
53
59
  });
54
60
 
@@ -65,12 +71,16 @@ export const fieldTextareaClass = css({
65
71
  lineHeight: "1.6",
66
72
  px: "4",
67
73
  py: "4",
68
- backdropFilter: "blur(24px) saturate(145%)",
69
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.24), 0 18px 36px -32px rgba(15,23,42,0.42)",
74
+ transition: "border-color 160ms ease, background-color 160ms ease",
70
75
  _hover: {
71
76
  borderColor: "border.strong",
72
77
  },
78
+ _focusVisible: {
79
+ outline: "none",
80
+ borderColor: "border.accent",
81
+ boxShadow: "0 0 0 3px rgba(82, 121, 255, 0.18)",
82
+ },
73
83
  _dark: {
74
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.03)",
84
+ borderColor: "border.strong",
75
85
  },
76
86
  });