@higinio/design-mcp 0.2.0 → 0.2.1
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/assets/bruma/design-doc.md +225 -33
- package/assets/bruma/framework.css +268 -51
- package/assets/bruma/styleguide.html +676 -168
- package/assets/bruma/tailwind.css +48 -6
- package/assets/bruma/tokens.css +61 -5
- package/assets/bruma/tokens.json +769 -25
- package/assets/celeste/design-doc.md +242 -40
- package/assets/celeste/framework.css +290 -62
- package/assets/celeste/styleguide.html +760 -178
- package/assets/celeste/tailwind.css +48 -6
- package/assets/celeste/tokens.css +67 -6
- package/assets/celeste/tokens.json +778 -26
- package/assets/nocturna/design-doc.md +346 -52
- package/assets/nocturna/framework.css +317 -108
- package/assets/nocturna/styleguide.html +809 -215
- package/assets/nocturna/tailwind.css +46 -3
- package/assets/nocturna/tokens.css +115 -6
- package/assets/nocturna/tokens.json +754 -21
- package/assets/salvia/design-doc.md +224 -31
- package/assets/salvia/framework.css +269 -51
- package/assets/salvia/styleguide.html +674 -168
- package/assets/salvia/tailwind.css +48 -6
- package/assets/salvia/tokens.css +61 -5
- package/assets/salvia/tokens.json +769 -25
- package/dist/server.js +1 -1
- package/dist/snippet.js +26 -17
- package/dist/tokens.js +42 -5
- package/package.json +32 -8
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
1
|
+
/* ============================================================
|
|
2
|
+
Bruma Lavanda — Design Tokens v1.0
|
|
3
3
|
Sistema de diseño de Higinio Sosa · light-first
|
|
4
4
|
Fuente de verdad: DESIGN-bruma-lavanda.md
|
|
5
|
-
Uso:
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
Uso: importar ANTES de cualquier estilo propio.
|
|
6
|
+
Los componentes consumen SOLO aliases semánticos, nunca hex.
|
|
7
|
+
============================================================ */
|
|
8
8
|
|
|
9
9
|
@import url("https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@600;700&family=Atkinson+Hyperlegible+Next:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Atkinson+Hyperlegible+Mono:wght@400;500&display=swap");
|
|
10
10
|
|
|
11
|
-
/* --------------------------------------------------------------------------
|
|
12
|
-
1. TOKENS (§13)
|
|
13
|
-
-------------------------------------------------------------------------- */
|
|
14
11
|
:root {
|
|
15
12
|
/* == Primitivos: primario (Lavanda) ==
|
|
16
13
|
Lavanda apagada, nunca violeta saturado. El acento no rellena áreas grandes:
|
|
@@ -51,12 +48,6 @@
|
|
|
51
48
|
--accent-soft: var(--primary-50);
|
|
52
49
|
--accent-soft-strong: var(--primary-100);
|
|
53
50
|
--link: var(--primary-600); /* AA 7.98:1 sobre --surface — texto de links y ghost */
|
|
54
|
-
--overlay: rgba(31, 30, 40, .5);
|
|
55
|
-
--tooltip-bg: var(--neutral-900); /* 15.94:1 con --tooltip-text */
|
|
56
|
-
--tooltip-text: var(--neutral-0);
|
|
57
|
-
--focus-color: var(--accent); /* contorno de foco de teclado: 6.40:1 sobre --surface */
|
|
58
|
-
--text-on-danger: var(--neutral-0); /* texto del botón destructivo: 5.01:1 sobre --danger-500 */
|
|
59
|
-
--border-hover: var(--neutral-500); /* borde de campos en hover: 6.38:1 sobre --surface */
|
|
60
51
|
|
|
61
52
|
/* == Tipografía == */
|
|
62
53
|
--font-display: "Bricolage Grotesque", system-ui, sans-serif;
|
|
@@ -97,7 +88,6 @@
|
|
|
97
88
|
/* == Focus == */
|
|
98
89
|
--ring: 0 0 0 3px rgba(91,87,138,.25);
|
|
99
90
|
--ring-color: rgba(91,87,138,.25);
|
|
100
|
-
--ring-danger: 0 0 0 3px rgba(178,76,85,.22);
|
|
101
91
|
|
|
102
92
|
/* == Motion (corto y preciso) == */
|
|
103
93
|
--duration-instant: 100ms; --duration-fast: 140ms; --duration-base: 180ms;
|
|
@@ -109,9 +99,48 @@
|
|
|
109
99
|
--stagger-step: 30ms;
|
|
110
100
|
|
|
111
101
|
color-scheme: light;
|
|
112
|
-
}
|
|
113
102
|
|
|
114
|
-
|
|
103
|
+
--overlay: rgba(31, 30, 40, .5);
|
|
104
|
+
--tooltip-bg: var(--neutral-900);
|
|
105
|
+
--tooltip-text: var(--neutral-0);
|
|
106
|
+
--focus-color: var(--accent);
|
|
107
|
+
--text-on-danger: var(--neutral-0);
|
|
108
|
+
--border-hover: var(--neutral-500);
|
|
109
|
+
--ring-danger: 0 0 0 3px rgba(178,76,85,.22);
|
|
110
|
+
|
|
111
|
+
--action-bg: var(--accent);
|
|
112
|
+
--action-hover: var(--accent-hover);
|
|
113
|
+
--action-active: var(--accent-active);
|
|
114
|
+
--text-on-action: var(--text-on-primary);
|
|
115
|
+
--control-border: var(--border-strong);
|
|
116
|
+
--placeholder: var(--text-muted);
|
|
117
|
+
--selection-bg: var(--action-bg);
|
|
118
|
+
--selection-text: var(--text-on-action);
|
|
119
|
+
--font-ui-heading: var(--font-body);
|
|
120
|
+
--text-ui-title: 2rem;
|
|
121
|
+
--touch-target: 44px;
|
|
122
|
+
--text-display-fluid: clamp(2.5rem, 1.8rem + 2.2vw, 4.25rem);
|
|
123
|
+
|
|
124
|
+
/* Series categóricas: orden estable; acompañar con etiqueta o forma. */
|
|
125
|
+
--chart-1: #857bc1;
|
|
126
|
+
--chart-2: #8a600a;
|
|
127
|
+
--chart-3: #4a8cc1;
|
|
128
|
+
--chart-4: #853f63;
|
|
129
|
+
--chart-5: #129a92;
|
|
130
|
+
--chart-6: #8e4031;
|
|
131
|
+
--chart-7: #5b975e;
|
|
132
|
+
/* Ritmo de contenido y formularios. */
|
|
133
|
+
--field-gap: 6px;
|
|
134
|
+
--heading-gap: var(--space-2);
|
|
135
|
+
--content-gap: var(--space-4);
|
|
136
|
+
--card-content-gap: var(--space-4);
|
|
137
|
+
--card-group-gap: var(--space-5);
|
|
138
|
+
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* == Modo oscuro (variante) — alternar data-theme en <html> ==
|
|
142
|
+
Sin sombras en las capas: se separan por superficie y borde, y solo
|
|
143
|
+
los overlays (lg/xl) conservan una sombra tenue. */
|
|
115
144
|
[data-theme="dark"] {
|
|
116
145
|
--bg: #16151c;
|
|
117
146
|
--surface: #1f1e27;
|
|
@@ -130,31 +159,49 @@
|
|
|
130
159
|
--text-on-primary: #16151c;
|
|
131
160
|
--text-on-primary-solid: #c4c1e6;
|
|
132
161
|
--link: #c4c1e6;
|
|
133
|
-
--overlay: rgba(0, 0, 0, .6);
|
|
134
|
-
--tooltip-bg: #e7e6ef; /* 13.31:1 con --tooltip-text */
|
|
135
|
-
--tooltip-text: #1f1e28;
|
|
136
|
-
--focus-color: var(--accent); /* 7.68:1 sobre --surface */
|
|
137
|
-
--text-on-danger: #16151c; /* 6.99:1 sobre --danger-500 */
|
|
138
|
-
--border-hover: #aaa8bb; /* 7.09:1 sobre --surface */
|
|
139
162
|
--success-500: #6cc1ad; --success-100: #13261f; --success-text: #8bd1c0;
|
|
140
163
|
--warning-500: #d6a752; --warning-100: #29220f; --warning-text: #e4c07f;
|
|
141
164
|
--danger-500: #e08890; --danger-100: #2c171a; --danger-text: #eba4ab;
|
|
142
165
|
--info-500: #8daecb; --info-100: #172129; --info-text: #a8c3da;
|
|
143
166
|
--ring: 0 0 0 3px rgba(176,172,220,.3);
|
|
144
167
|
--ring-color: rgba(176,172,220,.3);
|
|
145
|
-
--ring-danger: 0 0 0 3px rgba(224,136,144,.25);
|
|
146
168
|
--shadow-xs: none;
|
|
147
169
|
--shadow-sm: none;
|
|
148
170
|
--shadow-md: none;
|
|
149
171
|
--shadow-lg: 0 8px 20px rgba(8,8,12,.28);
|
|
150
172
|
--shadow-xl: 0 16px 32px rgba(8,8,12,.32);
|
|
151
173
|
color-scheme: dark;
|
|
174
|
+
|
|
175
|
+
--overlay: rgba(0, 0, 0, .6);
|
|
176
|
+
--tooltip-bg: #e7e6ef;
|
|
177
|
+
--tooltip-text: #1f1e28;
|
|
178
|
+
--focus-color: var(--accent);
|
|
179
|
+
--text-on-danger: #16151c;
|
|
180
|
+
--border-hover: #aaa8bb;
|
|
181
|
+
--ring-danger: 0 0 0 3px rgba(224,136,144,.25);
|
|
182
|
+
|
|
183
|
+
--selection-bg: var(--action-bg);
|
|
184
|
+
--selection-text: var(--text-on-action);
|
|
185
|
+
|
|
186
|
+
/* Series categóricas: orden estable; acompañar con etiqueta o forma. */
|
|
187
|
+
--chart-1: #877cc3;
|
|
188
|
+
--chart-2: #946a1c;
|
|
189
|
+
--chart-3: #5798ce;
|
|
190
|
+
--chart-4: #a0587c;
|
|
191
|
+
--chart-5: #2aa79e;
|
|
192
|
+
--chart-6: #aa5849;
|
|
193
|
+
--chart-7: #67a369;
|
|
152
194
|
}
|
|
153
195
|
|
|
196
|
+
/* == Accesibilidad del movimiento == */
|
|
197
|
+
|
|
198
|
+
@media (prefers-reduced-motion: reduce) {
|
|
199
|
+
:root {
|
|
200
|
+
--duration-instant: 0ms; --duration-fast: 0ms; --duration-base: 0ms;
|
|
201
|
+
--duration-slow: 0ms; --duration-page: 0ms; --stagger-step: 0ms;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
154
204
|
|
|
155
|
-
/* --------------------------------------------------------------------------
|
|
156
|
-
2. BASE (§6, §11.5, §13)
|
|
157
|
-
-------------------------------------------------------------------------- */
|
|
158
205
|
*, *::before, *::after { box-sizing: border-box; }
|
|
159
206
|
|
|
160
207
|
/* Focus ring global de teclado — especificidad cero vía :where() */
|
|
@@ -196,17 +243,10 @@
|
|
|
196
243
|
.bruma-reset h6 { font-size: var(--text-base); line-height: var(--leading-base); }
|
|
197
244
|
.bruma-reset p { max-width: var(--measure); margin: 0 0 1em; }
|
|
198
245
|
.bruma-reset table { font-variant-numeric: tabular-nums; }
|
|
199
|
-
.bruma-reset ::placeholder { color: var(--
|
|
246
|
+
.bruma-reset ::placeholder { color: var(--placeholder); }
|
|
200
247
|
.bruma-reset ::selection { background: var(--ring-color); }
|
|
201
248
|
|
|
202
|
-
|
|
203
|
-
*, *::before, *::after {
|
|
204
|
-
animation-duration: 0.01ms !important;
|
|
205
|
-
animation-iteration-count: 1 !important;
|
|
206
|
-
transition-duration: 0.01ms !important;
|
|
207
|
-
scroll-behavior: auto !important;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
249
|
+
|
|
210
250
|
|
|
211
251
|
/* --------------------------------------------------------------------------
|
|
212
252
|
3. LAYOUT — contenedor, grid 12 col (§14)
|
|
@@ -254,12 +294,12 @@
|
|
|
254
294
|
/* Gating de hover (§11.5): los hover que mueven/elevan (transform, box-shadow) van
|
|
255
295
|
dentro de @media (hover: hover) and (pointer: fine) — en touch el tap dispara
|
|
256
296
|
hovers falsos que se quedan pegados. Los hover de solo color/fondo quedan fuera. */
|
|
257
|
-
.btn--primary { background: var(--
|
|
258
|
-
.btn--primary:hover:not(:disabled) { background: var(--
|
|
297
|
+
.btn--primary { background: var(--action-bg); color: var(--text-on-action); }
|
|
298
|
+
.btn--primary:hover:not(:disabled) { background: var(--action-hover); }
|
|
259
299
|
@media (hover: hover) and (pointer: fine) {
|
|
260
300
|
.btn--primary:hover:not(:disabled) { box-shadow: var(--shadow-sm); }
|
|
261
301
|
}
|
|
262
|
-
.btn--primary:active:not(:disabled) { background: var(--
|
|
302
|
+
.btn--primary:active:not(:disabled) { background: var(--action-active); box-shadow: none; }
|
|
263
303
|
.btn--primary:disabled { background: var(--border); color: var(--text-disabled); box-shadow: none; }
|
|
264
304
|
|
|
265
305
|
.btn--secondary { background: var(--surface); border-color: var(--border-strong); color: var(--text-primary); }
|
|
@@ -326,7 +366,7 @@
|
|
|
326
366
|
.input, .textarea, .select {
|
|
327
367
|
width: 100%; font-family: var(--font-body); font-size: var(--text-base);
|
|
328
368
|
color: var(--text-primary); background: var(--surface);
|
|
329
|
-
border: var(--border-width) solid var(--border
|
|
369
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
330
370
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
331
371
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
332
372
|
}
|
|
@@ -424,7 +464,7 @@
|
|
|
424
464
|
}
|
|
425
465
|
.checkbox__box {
|
|
426
466
|
width: 20px; height: 20px; flex: none; display: grid; place-items: center;
|
|
427
|
-
background: var(--surface); border: 2px solid var(--border
|
|
467
|
+
background: var(--surface); border: 2px solid var(--control-border); border-radius: 4px;
|
|
428
468
|
transition: background-color var(--duration-fast) var(--ease-out),
|
|
429
469
|
border-color var(--duration-fast) var(--ease-out);
|
|
430
470
|
}
|
|
@@ -434,7 +474,7 @@
|
|
|
434
474
|
stroke-dasharray: 20; stroke-dashoffset: 20;
|
|
435
475
|
transition: stroke-dashoffset var(--duration-base) var(--ease-spring);
|
|
436
476
|
}
|
|
437
|
-
.checkbox:hover .checkbox__box { border-color: var(--
|
|
477
|
+
.checkbox:hover .checkbox__box { border-color: var(--focus-color); }
|
|
438
478
|
.checkbox input:checked ~ .checkbox__box { background: var(--accent); border-color: var(--accent); }
|
|
439
479
|
.checkbox input:checked ~ .checkbox__box svg { stroke-dashoffset: 0; }
|
|
440
480
|
.checkbox input:focus-visible ~ .checkbox__box { box-shadow: var(--ring); }
|
|
@@ -451,7 +491,7 @@
|
|
|
451
491
|
|
|
452
492
|
.radio__dot {
|
|
453
493
|
width: 20px; height: 20px; flex: none; display: grid; place-items: center;
|
|
454
|
-
background: var(--surface); border: 2px solid var(--border
|
|
494
|
+
background: var(--surface); border: 2px solid var(--control-border); border-radius: var(--radius-full);
|
|
455
495
|
transition: background-color var(--duration-fast) var(--ease-out),
|
|
456
496
|
border-color var(--duration-fast) var(--ease-out);
|
|
457
497
|
}
|
|
@@ -460,7 +500,7 @@
|
|
|
460
500
|
background: var(--text-on-primary); transform: scale(0);
|
|
461
501
|
transition: transform var(--duration-base) var(--ease-spring);
|
|
462
502
|
}
|
|
463
|
-
.radio:hover .radio__dot { border-color: var(--
|
|
503
|
+
.radio:hover .radio__dot { border-color: var(--focus-color); }
|
|
464
504
|
.radio input:checked ~ .radio__dot { background: var(--accent); border-color: var(--accent); }
|
|
465
505
|
.radio input:checked ~ .radio__dot::after { transform: scale(1); }
|
|
466
506
|
.radio input:focus-visible ~ .radio__dot { box-shadow: var(--ring); }
|
|
@@ -793,10 +833,14 @@
|
|
|
793
833
|
background: var(--surface); border: var(--border-width) solid var(--border);
|
|
794
834
|
border-radius: var(--radius-md); box-shadow: var(--shadow-lg);
|
|
795
835
|
opacity: 0; transform: translateY(-4px); pointer-events: none;
|
|
796
|
-
transition: opacity
|
|
836
|
+
transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
|
|
837
|
+
|
|
838
|
+
visibility: hidden;
|
|
839
|
+
|
|
840
|
+
display: none;
|
|
797
841
|
}
|
|
798
842
|
.menu--right { left: auto; right: 0; }
|
|
799
|
-
.menu.is-open { opacity: 1; transform: none; pointer-events: auto; }
|
|
843
|
+
.menu.is-open { opacity: 1; transform: none; pointer-events: auto; visibility: visible; display: block; }
|
|
800
844
|
.menu__item {
|
|
801
845
|
display: flex; align-items: center; gap: 10px; width: 100%;
|
|
802
846
|
padding: 9px 12px; border: 0; border-radius: var(--radius-sm);
|
|
@@ -1071,7 +1115,7 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1071
1115
|
width: 100%; height: var(--control-height-md); padding: 0 14px;
|
|
1072
1116
|
font-family: var(--font-body); font-size: var(--text-base);
|
|
1073
1117
|
color: var(--text-primary); background: var(--surface);
|
|
1074
|
-
border: var(--border-width) solid var(--border
|
|
1118
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
1075
1119
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
1076
1120
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
1077
1121
|
}
|
|
@@ -1113,7 +1157,7 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1113
1157
|
width: 100%; height: var(--control-height-md); padding: 0 40px;
|
|
1114
1158
|
font-family: var(--font-body); font-size: var(--text-base);
|
|
1115
1159
|
color: var(--text-primary); background: var(--surface);
|
|
1116
|
-
border: var(--border-width) solid var(--border
|
|
1160
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
1117
1161
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
1118
1162
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
1119
1163
|
}
|
|
@@ -1181,8 +1225,12 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1181
1225
|
transform-origin: top left; opacity: 0; transform: scale(.96); pointer-events: none;
|
|
1182
1226
|
transition: opacity var(--duration-base) var(--ease-out),
|
|
1183
1227
|
transform var(--duration-base) var(--ease-out);
|
|
1228
|
+
|
|
1229
|
+
visibility: hidden;
|
|
1230
|
+
|
|
1231
|
+
display: none;
|
|
1184
1232
|
}
|
|
1185
|
-
.popover.is-open .popover__panel { opacity: 1; transform: none; pointer-events: auto; }
|
|
1233
|
+
.popover.is-open .popover__panel { opacity: 1; transform: none; pointer-events: auto; visibility: visible; display: block; }
|
|
1186
1234
|
.popover--right .popover__panel { left: auto; right: 0; transform-origin: top right; }
|
|
1187
1235
|
|
|
1188
1236
|
/* ButtonGroup (§10.31) */
|
|
@@ -1207,7 +1255,7 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1207
1255
|
width: 100%; height: var(--control-height-md); padding: 0 40px 0 14px;
|
|
1208
1256
|
font-family: var(--font-body); font-size: var(--text-base);
|
|
1209
1257
|
color: var(--text-primary); background: var(--surface);
|
|
1210
|
-
border: var(--border-width) solid var(--border
|
|
1258
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
1211
1259
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
1212
1260
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
1213
1261
|
}
|
|
@@ -1226,8 +1274,12 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1226
1274
|
transform-origin: top left; opacity: 0; transform: scale(.96); pointer-events: none;
|
|
1227
1275
|
transition: opacity var(--duration-base) var(--ease-out),
|
|
1228
1276
|
transform var(--duration-base) var(--ease-out);
|
|
1277
|
+
|
|
1278
|
+
visibility: hidden;
|
|
1279
|
+
|
|
1280
|
+
display: none;
|
|
1229
1281
|
}
|
|
1230
|
-
.datepicker.is-open .datepicker__calendar { opacity: 1; transform: none; pointer-events: auto; }
|
|
1282
|
+
.datepicker.is-open .datepicker__calendar { opacity: 1; transform: none; pointer-events: auto; visibility: visible; display: block; }
|
|
1231
1283
|
.datepicker--right .datepicker__calendar { left: auto; right: 0; transform-origin: top right; }
|
|
1232
1284
|
|
|
1233
1285
|
.calendar { width: 15.75rem; }
|
|
@@ -1372,3 +1424,168 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1372
1424
|
.u-mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
1373
1425
|
.u-muted { color: var(--text-muted); }
|
|
1374
1426
|
.u-measure { max-width: var(--measure); }
|
|
1427
|
+
|
|
1428
|
+
/* CONTRATOS COMPARTIDOS GENERADOS */
|
|
1429
|
+
/* Contratos comunes de interacción; la identidad y los valores viven en tokens.css. */
|
|
1430
|
+
.grid { grid-template-columns: repeat(12, minmax(0, 1fr)); }
|
|
1431
|
+
.grid > *, .field, .card { min-inline-size: 0; }
|
|
1432
|
+
.stack, .card__content, .form-stack, .text-group { display: flex; flex-direction: column; align-items: stretch; }
|
|
1433
|
+
.stack, .card__content { gap: var(--content-gap); }
|
|
1434
|
+
.stack--tight, .text-group { gap: var(--heading-gap); }
|
|
1435
|
+
.stack--cards { gap: var(--card-group-gap); }
|
|
1436
|
+
.form-stack { gap: var(--form-gap); }
|
|
1437
|
+
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }
|
|
1438
|
+
.card { display: flex; flex-direction: column; gap: var(--card-content-gap); }
|
|
1439
|
+
.field { gap: var(--field-gap); }
|
|
1440
|
+
.field__label, .field__help, .field__error, .field > :is(label, p, span, div) { margin-block: 0; }
|
|
1441
|
+
:where(.field + .field, .field + .btn, .field + .cluster) { margin-block-start: var(--form-gap); }
|
|
1442
|
+
:where(.card + .card) { margin-block-start: var(--card-group-gap); }
|
|
1443
|
+
.stack > *, .card__content > *, .form-stack > *, .text-group > *, .grid > .card,
|
|
1444
|
+
.card > :is(h1, h2, h3, h4, h5, h6, p), .text-group > :is(h1, h2, h3, h4, h5, h6, p),
|
|
1445
|
+
.stack > :is(h1, h2, h3, h4, h5, h6, p) { margin-block: 0; }
|
|
1446
|
+
.form-stack > .field { margin-block: 0; }
|
|
1447
|
+
.btn {
|
|
1448
|
+
block-size: auto;
|
|
1449
|
+
min-block-size: var(--control-height-md);
|
|
1450
|
+
max-inline-size: 100%;
|
|
1451
|
+
white-space: normal;
|
|
1452
|
+
line-height: 1.35;
|
|
1453
|
+
text-align: center;
|
|
1454
|
+
}
|
|
1455
|
+
.btn--sm { min-block-size: var(--control-height-sm, 36px); }
|
|
1456
|
+
.btn--lg { min-block-size: var(--control-height-lg, 52px); }
|
|
1457
|
+
.btn--primary, .icon-btn--primary, .calendar__day--selected, .pagination__btn.is-active {
|
|
1458
|
+
background: var(--action-bg);
|
|
1459
|
+
color: var(--text-on-action);
|
|
1460
|
+
}
|
|
1461
|
+
.btn--primary:hover:not(:disabled), .icon-btn--primary:hover:not(:disabled) { background: var(--action-hover); color: var(--text-on-action); }
|
|
1462
|
+
.btn--primary:active:not(:disabled), .icon-btn--primary:active:not(:disabled) { background: var(--action-active); color: var(--text-on-action); }
|
|
1463
|
+
.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input {
|
|
1464
|
+
max-inline-size: 100%;
|
|
1465
|
+
caret-color: var(--focus-color);
|
|
1466
|
+
}
|
|
1467
|
+
.input, .select, .combobox__input, .search__input, .datepicker__input {
|
|
1468
|
+
block-size: auto; min-block-size: var(--control-height-md);
|
|
1469
|
+
padding-block: var(--space-2); line-height: 1.5;
|
|
1470
|
+
}
|
|
1471
|
+
:is(.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input):not(.input--error, .input--success, .textarea--error, [aria-invalid="true"]) { border-color: var(--control-border); }
|
|
1472
|
+
.input:hover:not(:disabled):not(:focus):not(.input--error, .input--success, [aria-invalid="true"]), .textarea:hover:not(:disabled):not(:focus):not(.textarea--error, [aria-invalid="true"]),
|
|
1473
|
+
.select:hover:not(:disabled):not(:focus), .combobox__input:hover:not(:disabled):not(:focus),
|
|
1474
|
+
.search__input:hover:not(:focus), .datepicker__input:hover:not(:disabled):not(:focus) { border-color: var(--border-hover); }
|
|
1475
|
+
.input:focus-visible, .textarea:focus-visible, .select:focus-visible,
|
|
1476
|
+
.combobox__input:focus-visible, .search__input:focus-visible, .datepicker__input:focus-visible {
|
|
1477
|
+
outline: 2px solid var(--focus-color);
|
|
1478
|
+
outline-offset: 2px;
|
|
1479
|
+
}
|
|
1480
|
+
.input[aria-invalid="true"], .textarea[aria-invalid="true"] { border-color: var(--danger-text, var(--danger)); }
|
|
1481
|
+
.input.input--error, .textarea.textarea--error,
|
|
1482
|
+
.input.input--error:hover:not(:disabled):not(:focus), .textarea.textarea--error:hover:not(:disabled):not(:focus),
|
|
1483
|
+
:is(.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input)[aria-invalid="true"]:hover:not(:disabled):not(:focus) {
|
|
1484
|
+
border-color: var(--danger-text, var(--danger));
|
|
1485
|
+
}
|
|
1486
|
+
.input.input--success, .input.input--success:hover:not(:disabled):not(:focus) { border-color: var(--success-text, var(--success)); }
|
|
1487
|
+
.pagination { max-inline-size: 100%; flex-wrap: wrap; row-gap: var(--space-2); }
|
|
1488
|
+
.pagination__ellipsis { color: var(--text-muted); }
|
|
1489
|
+
.step--current .step__marker { color: var(--link); border-color: var(--focus-color); }
|
|
1490
|
+
.checkbox input:focus-visible ~ .checkbox__box,
|
|
1491
|
+
.radio input:focus-visible ~ .radio__dot,
|
|
1492
|
+
.switch input:focus-visible ~ .switch__track {
|
|
1493
|
+
outline: 2px solid var(--focus-color);
|
|
1494
|
+
outline-offset: 2px;
|
|
1495
|
+
}
|
|
1496
|
+
input.checkbox, input.radio { border-color: var(--control-border); }
|
|
1497
|
+
input.checkbox:hover, input.radio:hover { border-color: var(--focus-color); }
|
|
1498
|
+
input.checkbox:checked, input.checkbox:indeterminate, input.radio:checked { border-color: var(--focus-color); }
|
|
1499
|
+
.switch__track { background: var(--control-border); }
|
|
1500
|
+
.tabs { max-inline-size: 100%; overflow-x: auto; }
|
|
1501
|
+
.tabs__tab { flex-shrink: 0; }
|
|
1502
|
+
.segmented { max-inline-size: 100%; block-size: auto; min-block-size: var(--control-height-md); overflow-x: auto; }
|
|
1503
|
+
.segmented label { padding-block: var(--space-2); }
|
|
1504
|
+
.stat__row, .breadcrumbs, .check-row { flex-wrap: wrap; row-gap: var(--space-2); }
|
|
1505
|
+
.progress-row, .slider-row { flex-wrap: wrap; gap: var(--space-2); }
|
|
1506
|
+
.stat__value { max-inline-size: 100%; white-space: normal; overflow-wrap: anywhere; }
|
|
1507
|
+
.file-upload, .file-upload__label { min-inline-size: 0; max-inline-size: 100%; }
|
|
1508
|
+
.file-upload__button { max-inline-size: 100%; white-space: normal; text-align: center; }
|
|
1509
|
+
.file-upload__hint { overflow-wrap: anywhere; }
|
|
1510
|
+
.table-scroll { max-inline-size: 100%; overflow-x: auto; overscroll-behavior-inline: contain; }
|
|
1511
|
+
.popover__panel, .datepicker__calendar, .combobox__list {
|
|
1512
|
+
max-inline-size: calc(100vw - 2rem);
|
|
1513
|
+
max-block-size: min(32rem, 70dvh);
|
|
1514
|
+
overflow: auto;
|
|
1515
|
+
}
|
|
1516
|
+
.file-upload__input:focus-visible + .file-upload__label { outline: 2px solid var(--focus-color); outline-offset: 2px; }
|
|
1517
|
+
.calendar { max-inline-size: calc(100vw - 2rem); }
|
|
1518
|
+
.ui-title, :is(h1, h2, h3, h4, h5, h6).ui-title, [data-mode="operate"] :is(h1, h2, h3) {
|
|
1519
|
+
font-family: var(--font-ui-heading);
|
|
1520
|
+
letter-spacing: 0;
|
|
1521
|
+
line-height: 1.3;
|
|
1522
|
+
font-weight: var(--weight-semibold);
|
|
1523
|
+
}
|
|
1524
|
+
.ui-title, :is(h1, h2, h3, h4, h5, h6).ui-title, [data-mode="operate"] h1 { font-size: var(--text-ui-title); }
|
|
1525
|
+
[data-mode="operate"] h2 { font-size: var(--text-xl); }
|
|
1526
|
+
[data-mode="operate"] h3 { font-size: var(--text-lg); }
|
|
1527
|
+
.display, .reading-title, :is(h1, h2, h3, h4, h5, h6):is(.display, .reading-title) {
|
|
1528
|
+
font-family: var(--font-display);
|
|
1529
|
+
font-size: var(--text-display-fluid);
|
|
1530
|
+
line-height: 1.08;
|
|
1531
|
+
letter-spacing: var(--tracking-display);
|
|
1532
|
+
text-wrap: balance;
|
|
1533
|
+
}
|
|
1534
|
+
:where(.celeste-reset, .salvia-reset, .bruma-reset, .nocturna-reset, body[data-system]) {
|
|
1535
|
+
scrollbar-color: var(--control-border) var(--bg);
|
|
1536
|
+
}
|
|
1537
|
+
::selection,
|
|
1538
|
+
.celeste-reset ::selection, .salvia-reset ::selection, .bruma-reset ::selection {
|
|
1539
|
+
background: var(--selection-bg); color: var(--selection-text);
|
|
1540
|
+
}
|
|
1541
|
+
::placeholder { color: var(--placeholder); opacity: 1; }
|
|
1542
|
+
:where(a) { text-underline-offset: .2em; text-decoration-thickness: .08em; }
|
|
1543
|
+
.skip-link {
|
|
1544
|
+
position: fixed; inset-block-start: var(--space-2); inset-inline-start: var(--space-2);
|
|
1545
|
+
z-index: 1000; padding: var(--space-3) var(--space-4);
|
|
1546
|
+
background: var(--action-bg); color: var(--text-on-action);
|
|
1547
|
+
border-radius: var(--radius-sm); transform: translateY(-180%);
|
|
1548
|
+
}
|
|
1549
|
+
.skip-link:focus { transform: none; outline: 2px solid var(--focus-color); outline-offset: 2px; }
|
|
1550
|
+
[data-tooltip]::before, [data-tooltip]::after { display: none; }
|
|
1551
|
+
[data-tooltip]:focus-visible::before, [data-tooltip]:focus-visible::after { display: block; }
|
|
1552
|
+
.has-tooltip .tooltip { display: none; }
|
|
1553
|
+
.has-tooltip:has(:focus-visible) .tooltip { display: block; opacity: 1; transform: translate(-50%, 0); }
|
|
1554
|
+
@media (hover: hover) and (pointer: fine) {
|
|
1555
|
+
[data-tooltip]:hover::before, [data-tooltip]:hover::after { display: block; }
|
|
1556
|
+
.has-tooltip:hover .tooltip { display: block; }
|
|
1557
|
+
}
|
|
1558
|
+
@media (pointer: coarse) {
|
|
1559
|
+
.btn, .icon-btn, .segmented label, .pagination button,
|
|
1560
|
+
.tag__close, .search__clear, .toast__close, .check-row,
|
|
1561
|
+
.checkbox:not(input), .radio:not(input), .switch:not(input) {
|
|
1562
|
+
min-block-size: var(--touch-target);
|
|
1563
|
+
min-inline-size: var(--touch-target);
|
|
1564
|
+
}
|
|
1565
|
+
}
|
|
1566
|
+
@media (max-width: 479px) {
|
|
1567
|
+
.btn-group { flex-wrap: wrap; }
|
|
1568
|
+
.modal { max-inline-size: calc(100vw - 2rem); }
|
|
1569
|
+
.stepper { flex-direction: column; align-items: stretch; gap: var(--space-4); }
|
|
1570
|
+
.step { flex-direction: row; align-items: center; gap: var(--space-3); text-align: start; min-inline-size: 0; }
|
|
1571
|
+
.step__label { overflow-wrap: anywhere; }
|
|
1572
|
+
.step__connector { display: none; }
|
|
1573
|
+
}
|
|
1574
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1575
|
+
html, html:focus-within { scroll-behavior: auto; }
|
|
1576
|
+
.spinner, .skeleton, .skeleton::after,
|
|
1577
|
+
.progress--indeterminate .progress__bar, .alert.is-leaving, .toast.is-leaving { animation: none; }
|
|
1578
|
+
.progress--indeterminate .progress__bar { transform: none; }
|
|
1579
|
+
.btn, .icon-btn, .card--interactive, .slider::-webkit-slider-thumb { transform: none; }
|
|
1580
|
+
.btn:active:not(:disabled), .icon-btn:active:not(:disabled), .card--interactive:hover { transform: none; }
|
|
1581
|
+
.btn, .icon-btn { transition: background-color 80ms linear, color 80ms linear; }
|
|
1582
|
+
.menu, .popover__panel, .datepicker__calendar, .link::after { transition: none; }
|
|
1583
|
+
.progress__bar, .progress-ring__value, .accordion__content, .accordion__body { transition: none; }
|
|
1584
|
+
}
|
|
1585
|
+
@media (forced-colors: active) {
|
|
1586
|
+
input.switch, .switch__track { border: 1px solid CanvasText; background: Canvas; }
|
|
1587
|
+
input.switch::after, .switch__track::after { background: CanvasText; }
|
|
1588
|
+
input.switch:checked, .switch input:checked ~ .switch__track { border-color: Highlight; }
|
|
1589
|
+
input.switch:checked::after, .switch input:checked ~ .switch__track::after { background: Highlight; }
|
|
1590
|
+
.checkbox__box, .radio__dot { border-color: CanvasText; }
|
|
1591
|
+
}
|