@marwes-ui/presets 1.3.0 → 1.4.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 (57) hide show
  1. package/README.md +19 -9
  2. package/dist/chunk-PWG4S55U.js +131 -0
  3. package/dist/chunk-PWG4S55U.js.map +1 -0
  4. package/dist/firstEdition/index.d.ts +18 -1
  5. package/dist/firstEdition/index.js +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.js +1 -1
  8. package/package.json +3 -3
  9. package/src/firstEdition/accordion.css +25 -12
  10. package/src/firstEdition/avatar.css +20 -6
  11. package/src/firstEdition/badge.css +18 -15
  12. package/src/firstEdition/banner.css +190 -0
  13. package/src/firstEdition/breadcrumb.css +125 -0
  14. package/src/firstEdition/button.css +77 -18
  15. package/src/firstEdition/card.css +28 -24
  16. package/src/firstEdition/checkbox.css +9 -9
  17. package/src/firstEdition/context-menu.css +114 -0
  18. package/src/firstEdition/date-picker.css +6 -9
  19. package/src/firstEdition/dialog.css +17 -10
  20. package/src/firstEdition/drawer.css +258 -0
  21. package/src/firstEdition/index.ts +10 -0
  22. package/src/firstEdition/input-otp.css +16 -8
  23. package/src/firstEdition/input.css +7 -4
  24. package/src/firstEdition/molecules/accordion-field.css +9 -5
  25. package/src/firstEdition/molecules/checkbox-field.css +12 -12
  26. package/src/firstEdition/molecules/checkbox-group-field.css +29 -17
  27. package/src/firstEdition/molecules/date-picker-field.css +28 -0
  28. package/src/firstEdition/molecules/dialog-modal.css +16 -1
  29. package/src/firstEdition/molecules/input-field.css +31 -13
  30. package/src/firstEdition/molecules/input-otp-field.css +26 -0
  31. package/src/firstEdition/molecules/pagination-field.css +23 -0
  32. package/src/firstEdition/molecules/radio-group-field.css +30 -9
  33. package/src/firstEdition/molecules/segmented-control-field.css +23 -0
  34. package/src/firstEdition/molecules/slider-field.css +9 -4
  35. package/src/firstEdition/molecules/switch-field.css +8 -4
  36. package/src/firstEdition/molecules/tab-group.css +15 -2
  37. package/src/firstEdition/pagination.css +180 -0
  38. package/src/firstEdition/personality.css +66 -0
  39. package/src/firstEdition/presets.ts +97 -0
  40. package/src/firstEdition/progress-bar.css +108 -0
  41. package/src/firstEdition/radio.css +10 -5
  42. package/src/firstEdition/rich-text.css +5 -2
  43. package/src/firstEdition/segmented-control.css +133 -0
  44. package/src/firstEdition/select.css +26 -31
  45. package/src/firstEdition/skip-link.css +45 -0
  46. package/src/firstEdition/slider.css +10 -4
  47. package/src/firstEdition/spinner.css +1 -1
  48. package/src/firstEdition/styles.css +20 -0
  49. package/src/firstEdition/switch.css +4 -4
  50. package/src/firstEdition/tab.css +4 -4
  51. package/src/firstEdition/textarea.css +9 -6
  52. package/src/firstEdition/toast.css +25 -25
  53. package/src/firstEdition/tokens.css +6 -5
  54. package/src/firstEdition/tooltip.css +5 -5
  55. package/src/firstEdition/typography.css +21 -0
  56. package/dist/chunk-62D3F6GN.js +0 -49
  57. package/dist/chunk-62D3F6GN.js.map +0 -1
@@ -0,0 +1,190 @@
1
+ /*
2
+ * Banner Component Styles
3
+ * Figma:
4
+ * - .figma/marwes/components/banner.json (component definition)
5
+ * - .figma/marwes/pages/-banner/-banner_1593-5094.json (light)
6
+ * - .figma/marwes/pages/-banner/-banner-dark_2444-2179.json (dark)
7
+ *
8
+ * Single token-driven component. Color → Banner states.
9
+ * Supports: info, success, warning, error, neutral.
10
+ */
11
+
12
+ .mw-banner {
13
+ --mw-banner-surface: var(--mw-color-surface-primary, #ffffff);
14
+ --mw-banner-border: var(--mw-color-border-low, #000000);
15
+ --mw-banner-icon: var(--mw-color-text-muted, #595959);
16
+ --mw-banner-text: var(--mw-color-text, #141414);
17
+
18
+ display: flex;
19
+ align-items: center;
20
+ width: 100%;
21
+ padding: var(--mw-spacing-sp-8, 8px) 12px var(--mw-spacing-sp-8, 8px) 20px;
22
+ border: 0;
23
+ border-bottom: 1px solid var(--mw-banner-border);
24
+ border-radius: 0;
25
+ background: var(--mw-banner-surface);
26
+ }
27
+
28
+ /* Content area: icon + message */
29
+ .mw-banner__content {
30
+ display: flex;
31
+ min-width: 0;
32
+ flex: 1;
33
+ align-items: center;
34
+ gap: var(--mw-spacing-sp-8);
35
+ padding-right: var(--mw-spacing-sp-8);
36
+ }
37
+
38
+ /* Leading icon */
39
+ .mw-banner__icon {
40
+ display: flex;
41
+ width: 12px;
42
+ height: 12px;
43
+ flex-shrink: 0;
44
+ align-items: center;
45
+ justify-content: center;
46
+ color: var(--mw-banner-icon);
47
+ }
48
+
49
+ .mw-banner__icon svg {
50
+ width: 12px;
51
+ height: 12px;
52
+ }
53
+
54
+ /* Message text */
55
+ .mw-banner__message {
56
+ min-width: 0;
57
+ flex: 1;
58
+ color: var(--mw-banner-text);
59
+ font-family: var(--mw-font-primary, inherit);
60
+ font-size: 14px;
61
+ font-weight: 400;
62
+ line-height: 24px;
63
+ letter-spacing: -0.42px;
64
+ }
65
+
66
+ /* CTA action slot */
67
+ .mw-banner__action {
68
+ display: flex;
69
+ flex-shrink: 0;
70
+ align-items: center;
71
+ }
72
+
73
+ /* Dismiss/close button */
74
+ .mw-banner__dismiss {
75
+ display: flex;
76
+ width: 32px;
77
+ height: 32px;
78
+ flex-shrink: 0;
79
+ align-items: center;
80
+ justify-content: center;
81
+ padding: 0;
82
+ border: none;
83
+ border-radius: 6px;
84
+ background: none;
85
+ color: var(--mw-color-text-muted, #595959);
86
+ cursor: pointer;
87
+ }
88
+
89
+ .mw-banner__dismiss:hover {
90
+ background: var(--mw-color-surface-subtle, rgba(0, 0, 0, 0.04));
91
+ }
92
+
93
+ .mw-banner__dismiss:focus-visible {
94
+ outline: 2px solid var(--mw-color-focus, #2f31fc);
95
+ outline-offset: 2px;
96
+ }
97
+
98
+ .mw-banner__dismiss::before {
99
+ content: "";
100
+ display: block;
101
+ width: 12px;
102
+ height: 12px;
103
+ background-color: currentColor;
104
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cline x1='18' y1='6' x2='6' y2='18' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3Cline x1='6' y1='6' x2='18' y2='18' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
105
+ -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cline x1='18' y1='6' x2='6' y2='18' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3Cline x1='6' y1='6' x2='18' y2='18' stroke='black' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
106
+ mask-repeat: no-repeat;
107
+ mask-position: center;
108
+ mask-size: contain;
109
+ -webkit-mask-repeat: no-repeat;
110
+ -webkit-mask-position: center;
111
+ -webkit-mask-size: contain;
112
+ }
113
+
114
+ /* ============================================
115
+ LIGHT VARIANTS
116
+ ============================================ */
117
+
118
+ .mw-banner--neutral {
119
+ --mw-banner-surface: var(--mw-color-surface, #ffffff);
120
+ --mw-banner-border: var(--mw-color-border, #000000);
121
+ --mw-banner-icon: var(--mw-color-text-muted, #595959);
122
+ --mw-banner-text: var(--mw-color-text, #141414);
123
+ }
124
+
125
+ .mw-banner--info {
126
+ --mw-banner-surface: var(--mw-color-status-info-background, #eeeeff);
127
+ --mw-banner-border: var(--mw-color-status-info-border, #ababfd);
128
+ --mw-banner-icon: var(--mw-color-status-info-icon, #2527ca);
129
+ --mw-banner-text: var(--mw-color-text, #141414);
130
+ }
131
+
132
+ .mw-banner--success {
133
+ --mw-banner-surface: var(--mw-color-status-success-background, #e6f4ed);
134
+ --mw-banner-border: var(--mw-color-status-success-border, #90caad);
135
+ --mw-banner-icon: var(--mw-color-status-success-icon, #006d48);
136
+ --mw-banner-text: var(--mw-color-text, #141414);
137
+ }
138
+
139
+ .mw-banner--warning {
140
+ --mw-banner-surface: var(--mw-color-status-warning-background, #fff8e6);
141
+ --mw-banner-border: var(--mw-color-status-warning-border, #fde08a);
142
+ --mw-banner-icon: var(--mw-color-status-warning-icon, #d97706);
143
+ --mw-banner-text: var(--mw-color-text, #141414);
144
+ }
145
+
146
+ .mw-banner--error {
147
+ --mw-banner-surface: var(--mw-color-status-error-background, #ffe8eb);
148
+ --mw-banner-border: var(--mw-color-status-error-border, #ff8a95);
149
+ --mw-banner-icon: var(--mw-color-status-error-icon, #d90429);
150
+ --mw-banner-text: var(--mw-color-text, #141414);
151
+ }
152
+
153
+ /* ============================================
154
+ DARK MODE OVERRIDES
155
+ ============================================ */
156
+
157
+ .mw-theme--dark .mw-banner--neutral {
158
+ --mw-banner-surface: var(--mw-color-surface, #0f0f0f);
159
+ --mw-banner-border: var(--mw-color-border, #ffffff);
160
+ --mw-banner-icon: var(--mw-color-text-muted, #a3a3a3);
161
+ --mw-banner-text: var(--mw-color-text, #f9fafb);
162
+ }
163
+
164
+ .mw-theme--dark .mw-banner--info {
165
+ --mw-banner-surface: var(--mw-color-status-info-background, #040519);
166
+ --mw-banner-border: var(--mw-color-status-info-border, #8182fc);
167
+ --mw-banner-icon: var(--mw-color-border-brand, #5859fc);
168
+ --mw-banner-text: var(--mw-color-text, #f9fafb);
169
+ }
170
+
171
+ .mw-theme--dark .mw-banner--success {
172
+ --mw-banner-surface: var(--mw-color-status-success-background, #001a0c);
173
+ --mw-banner-border: var(--mw-color-status-success-border, #006d48);
174
+ --mw-banner-icon: var(--mw-color-status-success-icon, #5db189);
175
+ --mw-banner-text: var(--mw-color-text, #f9fafb);
176
+ }
177
+
178
+ .mw-theme--dark .mw-banner--warning {
179
+ --mw-banner-surface: var(--mw-color-status-warning-background, #221004);
180
+ --mw-banner-border: var(--mw-color-status-warning-border, #b45309);
181
+ --mw-banner-icon: var(--mw-color-status-warning-icon, #f9b21a);
182
+ --mw-banner-text: var(--mw-color-text, #f9fafb);
183
+ }
184
+
185
+ .mw-theme--dark .mw-banner--error {
186
+ --mw-banner-surface: var(--mw-color-status-error-background, #240006);
187
+ --mw-banner-border: var(--mw-color-status-error-border, #ff2847);
188
+ --mw-banner-icon: var(--mw-color-status-error-icon, #ff2847);
189
+ --mw-banner-text: var(--mw-color-text, #f9fafb);
190
+ }
@@ -0,0 +1,125 @@
1
+ /*
2
+ * Breadcrumb Styles
3
+ * Figma refs: 1574:26965, 1574:26960, 1574:26962
4
+ */
5
+
6
+ .mw-breadcrumb {
7
+ --mw-breadcrumb-link: var(--mw-color-text-muted, #595959);
8
+ --mw-breadcrumb-link-hover: var(--mw-color-text, #141414);
9
+ --mw-breadcrumb-current: var(--mw-color-text, #141414);
10
+ --mw-breadcrumb-icon: var(--mw-color-text, #141414);
11
+ --mw-breadcrumb-focus: var(--mw-color-focus, #2f31fc);
12
+ --mw-breadcrumb-font: var(--mw-font-primary, "Instrument Sans", sans-serif);
13
+ --mw-breadcrumb-font-size: 12px;
14
+ --mw-breadcrumb-line-height: 12px;
15
+ --mw-breadcrumb-letter-spacing: -0.36px;
16
+ --mw-breadcrumb-font-weight: 500;
17
+ --mw-breadcrumb-home-size: 14px;
18
+ --mw-breadcrumb-separator-size: 12px;
19
+ --mw-breadcrumb-separator-padding: 6px;
20
+ --mw-breadcrumb-row-gap: 4px;
21
+
22
+ display: inline-flex;
23
+ max-width: 100%;
24
+ color: var(--mw-breadcrumb-current);
25
+ font-family: var(--mw-breadcrumb-font);
26
+ font-size: var(--mw-breadcrumb-font-size);
27
+ font-weight: var(--mw-breadcrumb-font-weight);
28
+ line-height: var(--mw-breadcrumb-line-height);
29
+ letter-spacing: var(--mw-breadcrumb-letter-spacing);
30
+ }
31
+
32
+ .mw-breadcrumb__list {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ flex-wrap: wrap;
36
+ row-gap: var(--mw-breadcrumb-row-gap);
37
+ max-width: 100%;
38
+ margin: 0;
39
+ padding: 0;
40
+ list-style: none;
41
+ }
42
+
43
+ .mw-breadcrumb__item {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ min-width: 0;
47
+ margin: 0;
48
+ padding: 0;
49
+ }
50
+
51
+ .mw-breadcrumb__action {
52
+ appearance: none;
53
+ display: inline-flex;
54
+ align-items: center;
55
+ min-width: 0;
56
+ border: 0;
57
+ padding: 0;
58
+ background: transparent;
59
+ color: var(--mw-breadcrumb-link);
60
+ font: inherit;
61
+ letter-spacing: inherit;
62
+ text-decoration: none;
63
+ cursor: pointer;
64
+ }
65
+
66
+ .mw-breadcrumb__action:hover {
67
+ color: var(--mw-breadcrumb-link-hover);
68
+ text-decoration: none;
69
+ }
70
+
71
+ .mw-breadcrumb__action:visited {
72
+ color: var(--mw-breadcrumb-link);
73
+ }
74
+
75
+ .mw-breadcrumb__action:focus-visible {
76
+ outline: 2px solid var(--mw-breadcrumb-focus);
77
+ outline-offset: 2px;
78
+ border-radius: 2px;
79
+ }
80
+
81
+ .mw-breadcrumb__home {
82
+ width: var(--mw-breadcrumb-home-size);
83
+ height: var(--mw-breadcrumb-home-size);
84
+ justify-content: center;
85
+ color: var(--mw-breadcrumb-icon);
86
+ line-height: 0;
87
+ margin-bottom: 1px;
88
+ }
89
+
90
+ .mw-breadcrumb__home:visited,
91
+ .mw-breadcrumb__home:hover {
92
+ color: var(--mw-breadcrumb-icon);
93
+ }
94
+
95
+ .mw-breadcrumb__home svg {
96
+ width: var(--mw-breadcrumb-home-size);
97
+ height: var(--mw-breadcrumb-home-size);
98
+ }
99
+
100
+ .mw-breadcrumb__current {
101
+ color: var(--mw-breadcrumb-current);
102
+ cursor: default;
103
+ }
104
+
105
+ .mw-breadcrumb__current:hover {
106
+ color: var(--mw-breadcrumb-current);
107
+ text-decoration: none;
108
+ }
109
+
110
+ .mw-breadcrumb__separator {
111
+ display: inline-flex;
112
+ align-items: center;
113
+ justify-content: center;
114
+ width: calc(var(--mw-breadcrumb-separator-size) + (var(--mw-breadcrumb-separator-padding) * 2));
115
+ height: var(--mw-breadcrumb-separator-size);
116
+ padding-inline: var(--mw-breadcrumb-separator-padding);
117
+ color: var(--mw-breadcrumb-icon);
118
+ line-height: 0;
119
+ flex: 0 0 auto;
120
+ }
121
+
122
+ .mw-breadcrumb__separator svg {
123
+ width: var(--mw-breadcrumb-separator-size);
124
+ height: var(--mw-breadcrumb-separator-size);
125
+ }
@@ -20,20 +20,41 @@
20
20
  display: inline-flex;
21
21
  align-items: center;
22
22
  justify-content: center;
23
- gap: 6px; /* off-scale — icon-to-label spacing */
23
+ gap: var(--mw-spacing-sp-4);
24
24
  height: var(--mw-density-height);
25
- padding: 0 var(--mw-density-padding-x);
25
+ padding: var(--mw-density-padding-y) var(--mw-density-padding-x);
26
26
  border-radius: var(--mw-ui-radius);
27
- border: 1px solid transparent;
27
+ border: 0;
28
28
  font-family: var(--mw-font-primary, inherit);
29
29
  font-size: var(--mw-density-font-size);
30
30
  font-weight: 500;
31
- line-height: 0;
31
+ line-height: var(--mw-typography-text-label-line-height);
32
+ letter-spacing: var(--mw-typography-text-label-letter-spacing);
33
+ min-inline-size: 0;
32
34
  cursor: pointer;
33
35
  user-select: none;
34
36
  transition: all 150ms ease;
35
37
  }
36
38
 
39
+ .mw-btn__label {
40
+ display: block;
41
+ line-height: inherit;
42
+ letter-spacing: inherit;
43
+ min-inline-size: 0;
44
+ }
45
+
46
+ .mw-btn[data-has-affordance="true"] .mw-btn__label {
47
+ overflow: hidden;
48
+ text-overflow: ellipsis;
49
+ white-space: nowrap;
50
+ }
51
+
52
+ .mw-btn[data-icon-only="true"] {
53
+ width: var(--mw-density-height);
54
+ min-width: var(--mw-density-height);
55
+ padding: 0;
56
+ }
57
+
37
58
  /* FOCUS STATE - Figma spec: 2px white space + 2px Accessible blue outline */
38
59
  .mw-btn:focus-visible {
39
60
  outline: 2px solid var(--mw-color-focus);
@@ -60,6 +81,7 @@
60
81
  background: transparent;
61
82
  color: var(--mw-color-secondary-label);
62
83
  border-color: var(--mw-color-secondary-border);
84
+ box-shadow: inset 0 0 0 1px var(--mw-color-secondary-border);
63
85
  }
64
86
 
65
87
  .mw-btn--secondary:hover:not(:disabled) {
@@ -85,24 +107,36 @@
85
107
  background: color-mix(in srgb, var(--mw-color-text) 8%, transparent);
86
108
  }
87
109
 
88
- /* TEXT - Minimal text-only button, content-hugging (no fixed height).
89
- Uses the same 6px icon-to-label spacing as every other button. */
110
+ /* TEXT - Minimal text-only button, content-hugging (no fixed height). */
90
111
  .mw-btn.mw-btn--text {
112
+ position: relative;
113
+ isolation: isolate;
91
114
  background: transparent;
92
115
  color: var(--mw-color-text);
93
116
  border-color: transparent;
117
+ border-width: 0;
94
118
  height: auto;
95
- padding: 0.25rem 0.5rem;
96
- line-height: 1;
119
+ padding: 0;
97
120
  border-radius: var(--mw-ui-radius);
121
+ overflow: visible;
98
122
  }
99
123
 
100
- .mw-btn--text:hover:not(:disabled) {
101
- background: color-mix(in srgb, var(--mw-color-text) 8%, transparent);
124
+ .mw-btn.mw-btn--text::before {
125
+ content: "";
126
+ position: absolute;
127
+ inset: -0.25rem -0.5rem;
128
+ z-index: -1;
129
+ border-radius: var(--mw-ui-radius);
130
+ background: transparent;
131
+ pointer-events: none;
132
+ }
133
+
134
+ .mw-btn--text:hover:not(:disabled)::before {
135
+ background: color-mix(in srgb, var(--mw-color-border-full) 10%, transparent);
102
136
  }
103
137
 
104
- .mw-btn--text:active:not(:disabled) {
105
- background: color-mix(in srgb, var(--mw-color-text) 12%, transparent);
138
+ .mw-btn--text:active:not(:disabled)::before {
139
+ background: color-mix(in srgb, var(--mw-color-border-full) 20%, transparent);
106
140
  }
107
141
 
108
142
  .mw-btn.mw-btn--text[data-action="navigate"] {
@@ -111,6 +145,10 @@
111
145
  text-underline-offset: 2px;
112
146
  }
113
147
 
148
+ .mw-btn.mw-btn--text[data-action="navigate"]::before {
149
+ content: none;
150
+ }
151
+
114
152
  /* SIZES */
115
153
  .mw-btn--xs {
116
154
  height: 30px;
@@ -142,6 +180,10 @@
142
180
  cursor: not-allowed;
143
181
  }
144
182
 
183
+ .mw-btn.mw-btn--text:disabled {
184
+ color: var(--mw-color-text-disabled);
185
+ }
186
+
145
187
  /* Dark mode disabled state: #FFFFFF 40% (middle of 20-60% range from Figma) */
146
188
  .mw-theme--dark .mw-btn:disabled {
147
189
  opacity: 0.4;
@@ -150,7 +192,7 @@
150
192
  /* ERROR STATE - Figma node: 1:1072 includes error state */
151
193
  .mw-btn[data-error="true"],
152
194
  .mw-btn--error {
153
- border-color: var(--mw-color-danger-base);
195
+ border-color: var(--mw-color-status-error-border);
154
196
  }
155
197
 
156
198
  .mw-btn--primary[data-error="true"],
@@ -161,13 +203,14 @@
161
203
 
162
204
  .mw-btn--secondary[data-error="true"],
163
205
  .mw-btn--secondary.mw-btn--error {
164
- color: var(--mw-color-danger-base);
165
- border-color: var(--mw-color-danger-base);
206
+ color: var(--mw-color-status-error-text);
207
+ border-color: var(--mw-color-status-error-border);
208
+ box-shadow: inset 0 0 0 1px var(--mw-color-status-error-border);
166
209
  }
167
210
 
168
211
  .mw-btn--text[data-error="true"],
169
212
  .mw-btn--text.mw-btn--error {
170
- color: var(--mw-color-danger-base);
213
+ color: var(--mw-color-status-error-text);
171
214
  }
172
215
 
173
216
  /* SUCCESS - Positive confirmation actions */
@@ -185,6 +228,21 @@
185
228
  opacity: 0.95;
186
229
  }
187
230
 
231
+ /* DANGER - Destructive confirmation actions */
232
+ .mw-btn--danger {
233
+ background: var(--mw-color-danger-base);
234
+ color: var(--mw-color-danger-label);
235
+ border-color: var(--mw-color-danger-base);
236
+ }
237
+
238
+ .mw-btn--danger:hover:not(:disabled) {
239
+ opacity: 0.9;
240
+ }
241
+
242
+ .mw-btn--danger:active:not(:disabled) {
243
+ opacity: 0.95;
244
+ }
245
+
188
246
  /* ============================================
189
247
  DARK MODE OVERRIDES
190
248
  ============================================ */
@@ -206,8 +264,9 @@
206
264
  /* Dark mode: Error state for Secondary button (red outline on dark background) */
207
265
  .mw-theme--dark .mw-btn--secondary[data-error="true"],
208
266
  .mw-theme--dark .mw-btn--secondary.mw-btn--error {
209
- border-color: var(--mw-color-danger-base);
210
- color: var(--mw-color-danger-base);
267
+ border-color: var(--mw-color-status-error-border);
268
+ color: var(--mw-color-status-error-text);
269
+ box-shadow: inset 0 0 0 1px var(--mw-color-status-error-border);
211
270
  }
212
271
 
213
272
  /* Dark mode: Error state for Primary button */
@@ -6,8 +6,8 @@
6
6
  *
7
7
  * Live Figma values from the synced state matrix:
8
8
  * - container: 8px radius, 24px padding, 8px gap
9
- * - title: 16/18, weight 500
10
- * - body: 14/18, weight 400
9
+ * - title: 16/18, weight 600, letter-spacing -0.48px
10
+ * - body: 16/24, weight 400, letter-spacing -0.48px
11
11
  *
12
12
  * Light mode:
13
13
  * - default border: #d8d8d8
@@ -25,14 +25,10 @@
25
25
  */
26
26
 
27
27
  .mw-card {
28
- --mw-card-surface: var(--mw-color-surface-elevated, #ffffff);
29
- --mw-card-border: var(--mw-color-border-subtle, #d8d8d8);
28
+ --mw-card-surface: var(--mw-color-surface, var(--mw-color-surface-elevated, #ffffff));
29
+ --mw-card-border: var(--mw-color-border-low, #d8d8d8);
30
30
  --mw-card-title: var(--mw-color-text, #141414);
31
- --mw-card-body: color-mix(
32
- in srgb,
33
- var(--mw-color-text, #141414) 65%,
34
- var(--mw-color-background, #ffffff)
35
- );
31
+ --mw-card-body: var(--mw-color-text-muted, #595959);
36
32
  --mw-card-radius: calc(var(--mw-ui-radius, 4px) * 2);
37
33
 
38
34
  display: flex;
@@ -42,9 +38,12 @@
42
38
  padding: 24px;
43
39
  box-sizing: border-box;
44
40
  background: var(--mw-card-surface);
45
- border: 1px solid var(--mw-card-border);
41
+ border: 0;
46
42
  border-radius: var(--mw-card-radius);
47
- transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
43
+ box-shadow: inset 0 0 0 1px var(--mw-card-border);
44
+ transition: background-color 120ms ease, box-shadow 120ms ease, color 120ms ease;
45
+ -webkit-font-smoothing: antialiased;
46
+ font-synthesis: none;
48
47
  }
49
48
 
50
49
  .mw-card__header {
@@ -57,8 +56,9 @@
57
56
  color: var(--mw-card-title);
58
57
  font-family: var(--mw-font-primary, inherit);
59
58
  font-size: 16px;
60
- font-weight: 500;
59
+ font-weight: 600;
61
60
  line-height: 18px;
61
+ letter-spacing: -0.48px;
62
62
  }
63
63
 
64
64
  .mw-card__body {
@@ -66,19 +66,20 @@
66
66
  margin: 0;
67
67
  color: var(--mw-card-body);
68
68
  font-family: var(--mw-font-primary, inherit);
69
- font-size: 14px;
69
+ font-size: 16px;
70
70
  font-weight: 400;
71
- line-height: 18px;
71
+ line-height: 24px;
72
+ letter-spacing: -0.48px;
72
73
  }
73
74
 
74
75
  .mw-card:hover,
75
76
  .mw-card--state-hover {
76
- --mw-card-border: color-mix(in srgb, var(--mw-color-border, #141414) 70%, transparent);
77
+ --mw-card-border: var(--mw-color-border-strong, #a3a3a3);
77
78
  }
78
79
 
79
80
  .mw-card:active,
80
81
  .mw-card--state-pressed {
81
- --mw-card-border: color-mix(in srgb, var(--mw-color-border, #141414) 70%, transparent);
82
+ --mw-card-border: var(--mw-color-border-strong, #a3a3a3);
82
83
  }
83
84
 
84
85
  .mw-card:focus-visible,
@@ -99,20 +100,23 @@
99
100
  pointer-events: none;
100
101
  }
101
102
 
103
+ .mw-card--error,
104
+ .mw-card[data-state="error"] {
105
+ --mw-card-surface: var(--mw-color-status-error-background, #ffe8eb);
106
+ --mw-card-border: var(--mw-color-status-error-border, #ff8a95);
107
+ --mw-card-title: var(--mw-color-status-error-text, #d90429);
108
+ }
109
+
102
110
  .mw-theme--dark .mw-card {
103
- --mw-card-surface: var(--mw-color-surface-elevated, #474747);
104
- --mw-card-border: var(--mw-color-border-subtle, #474747);
111
+ --mw-card-surface: var(--mw-color-surface-elevated, #2b2b2b);
112
+ --mw-card-border: var(--mw-color-border-low, #474747);
105
113
  --mw-card-title: var(--mw-color-text, #f9fafb);
106
- --mw-card-body: color-mix(
107
- in srgb,
108
- var(--mw-color-text, #f9fafb) 65%,
109
- var(--mw-color-background, #141414)
110
- );
114
+ --mw-card-body: var(--mw-color-text-muted, #a3a3a3);
111
115
  }
112
116
 
113
117
  .mw-theme--dark .mw-card:hover,
114
118
  .mw-theme--dark .mw-card--state-hover {
115
- --mw-card-border: color-mix(in srgb, var(--mw-color-border, #f9fafb) 70%, transparent);
119
+ --mw-card-border: var(--mw-color-border-strong, #a3a3a3);
116
120
  }
117
121
 
118
122
  .mw-theme--dark .mw-card:active,
@@ -8,10 +8,10 @@
8
8
 
9
9
  .mw-checkbox {
10
10
  /* Component-level CSS variables (overridden by modifiers) */
11
- --mw-checkbox-size: var(--mw-density-checkbox-size);
11
+ --mw-checkbox-size: 16px;
12
12
  --mw-checkbox-radius: var(--mw-ui-radius);
13
- --mw-checkbox-border: var(--mw-color-border);
14
- --mw-checkbox-bg: var(--mw-color-surface);
13
+ --mw-checkbox-border: var(--mw-color-border-subtle);
14
+ --mw-checkbox-bg: var(--mw-color-surface, var(--mw-color-surface-primary));
15
15
  --mw-checkbox-checked-bg: var(--mw-color-primary-base);
16
16
  --mw-checkbox-check: var(--mw-color-primary-label);
17
17
 
@@ -28,8 +28,8 @@
28
28
  place-content: center;
29
29
 
30
30
  /* Visual styling - aligned with Figma design */
31
- border-radius: max(2px, calc(var(--mw-checkbox-radius) * 0.4));
32
- border: 1px solid var(--mw-checkbox-border);
31
+ border-radius: 3px;
32
+ border: 1.5px solid var(--mw-checkbox-border);
33
33
  background: var(--mw-checkbox-bg);
34
34
 
35
35
  /* Interaction */
@@ -37,8 +37,7 @@
37
37
  vertical-align: middle;
38
38
  transition: all 150ms ease;
39
39
 
40
- /* Space Protection */
41
- margin: var(--mw-density-field-gap);
40
+ margin: 0;
42
41
 
43
42
  /* Typography */
44
43
  font-family: var(--mw-font-primary, inherit);
@@ -53,7 +52,7 @@
53
52
  }
54
53
 
55
54
  .mw-checkbox--md {
56
- --mw-checkbox-size: 18px;
55
+ --mw-checkbox-size: 16px;
57
56
  }
58
57
 
59
58
  .mw-checkbox--lg {
@@ -142,6 +141,7 @@
142
141
  .mw-checkbox--disabled {
143
142
  cursor: not-allowed;
144
143
  opacity: 0.2;
144
+ color: var(--mw-color-text-disabled);
145
145
  }
146
146
 
147
147
  /* ============================================
@@ -150,7 +150,7 @@
150
150
 
151
151
  .mw-checkbox--invalid,
152
152
  .mw-checkbox[aria-invalid="true"] {
153
- border-color: var(--mw-color-danger-base);
153
+ border-color: var(--mw-color-status-error-text, var(--mw-color-danger-base));
154
154
  }
155
155
 
156
156
  .mw-checkbox:checked.mw-checkbox--invalid,