@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
|
+
Salvia Serena — Design Tokens v1.0
|
|
3
3
|
Sistema de diseño de Higinio Sosa · light-first
|
|
4
4
|
Fuente de verdad: DESIGN-salvia-serena.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=Lora:ital,wght@0,600;0,700;1,600&family=Nunito+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Source+Code+Pro:wght@400;500&display=swap");
|
|
10
10
|
|
|
11
|
-
/* --------------------------------------------------------------------------
|
|
12
|
-
1. TOKENS (§13)
|
|
13
|
-
-------------------------------------------------------------------------- */
|
|
14
11
|
:root {
|
|
15
12
|
/* == Primitivos: primario (Salvia) == */
|
|
16
13
|
--primary-50: #e2eadf; --primary-100: #d4e0d1; --primary-200: #b8cbb7;
|
|
@@ -49,12 +46,6 @@
|
|
|
49
46
|
--accent-soft: var(--primary-50);
|
|
50
47
|
--accent-soft-strong: var(--primary-100);
|
|
51
48
|
--link: var(--primary-600); /* AA 7.00:1 sobre --surface — texto de links y ghost */
|
|
52
|
-
--overlay: rgba(44, 54, 48, .5);
|
|
53
|
-
--tooltip-bg: var(--neutral-900);
|
|
54
|
-
--tooltip-text: var(--neutral-0);
|
|
55
|
-
--focus-color: var(--accent); /* contorno de foco de teclado */
|
|
56
|
-
--text-on-danger: var(--neutral-0); /* texto del botón destructivo */
|
|
57
|
-
--border-hover: var(--neutral-500); /* borde de campos en hover */
|
|
58
49
|
|
|
59
50
|
/* == Tipografía == */
|
|
60
51
|
--font-display: "Lora", Georgia, serif;
|
|
@@ -93,7 +84,6 @@
|
|
|
93
84
|
/* == Focus == */
|
|
94
85
|
--ring: 0 0 0 3px rgba(79,107,88,.25);
|
|
95
86
|
--ring-color: rgba(79,107,88,.25);
|
|
96
|
-
--ring-danger: 0 0 0 3px rgba(181,82,63,.22);
|
|
97
87
|
|
|
98
88
|
/* == Motion (pausado: nada urge) == */
|
|
99
89
|
--duration-instant: 100ms; --duration-fast: 150ms; --duration-base: 220ms;
|
|
@@ -105,9 +95,48 @@
|
|
|
105
95
|
--stagger-step: 30ms;
|
|
106
96
|
|
|
107
97
|
color-scheme: light;
|
|
108
|
-
}
|
|
109
98
|
|
|
110
|
-
|
|
99
|
+
--overlay: rgba(44, 54, 48, .5);
|
|
100
|
+
--tooltip-bg: var(--neutral-900);
|
|
101
|
+
--tooltip-text: var(--neutral-0);
|
|
102
|
+
--focus-color: var(--accent);
|
|
103
|
+
--text-on-danger: var(--neutral-0);
|
|
104
|
+
--border-hover: var(--neutral-500);
|
|
105
|
+
--ring-danger: 0 0 0 3px rgba(181,82,63,.22);
|
|
106
|
+
|
|
107
|
+
--action-bg: var(--accent);
|
|
108
|
+
--action-hover: var(--accent-hover);
|
|
109
|
+
--action-active: var(--accent-active);
|
|
110
|
+
--text-on-action: var(--text-on-primary);
|
|
111
|
+
--control-border: var(--border-strong);
|
|
112
|
+
--placeholder: var(--text-muted);
|
|
113
|
+
--selection-bg: var(--action-bg);
|
|
114
|
+
--selection-text: var(--text-on-action);
|
|
115
|
+
--font-ui-heading: var(--font-body);
|
|
116
|
+
--text-ui-title: 2rem;
|
|
117
|
+
--touch-target: 44px;
|
|
118
|
+
--text-display-fluid: clamp(2.5rem, 1.8rem + 2.4vw, 4.5rem);
|
|
119
|
+
|
|
120
|
+
/* Series categóricas: orden estable; acompañar con etiqueta o forma. */
|
|
121
|
+
--chart-1: #549864;
|
|
122
|
+
--chart-2: #8d4226;
|
|
123
|
+
--chart-3: #179a8e;
|
|
124
|
+
--chart-4: #81416d;
|
|
125
|
+
--chart-5: #8a8b39;
|
|
126
|
+
--chart-6: #195f91;
|
|
127
|
+
--chart-7: #996f18;
|
|
128
|
+
/* Ritmo de contenido y formularios. */
|
|
129
|
+
--field-gap: 6px;
|
|
130
|
+
--heading-gap: var(--space-2);
|
|
131
|
+
--content-gap: var(--space-4);
|
|
132
|
+
--card-content-gap: var(--space-4);
|
|
133
|
+
--card-group-gap: var(--space-8);
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* == Modo oscuro (variante) — alternar data-theme en <html> ==
|
|
138
|
+
Casi sin sombras: las capas se separan por superficie y borde, y solo
|
|
139
|
+
los overlays (lg/xl) conservan una sombra tenue. */
|
|
111
140
|
[data-theme="dark"] {
|
|
112
141
|
--bg: #151a17;
|
|
113
142
|
--surface: #1d231f;
|
|
@@ -126,30 +155,49 @@
|
|
|
126
155
|
--text-on-primary: #151a17;
|
|
127
156
|
--text-on-primary-solid: #b5d2bc;
|
|
128
157
|
--link: #b5d2bc;
|
|
129
|
-
--overlay: rgba(0, 0, 0, .6);
|
|
130
|
-
--tooltip-bg: #e3e8e2;
|
|
131
|
-
--tooltip-text: #2c3630;
|
|
132
|
-
--focus-color: var(--accent);
|
|
133
|
-
--text-on-danger: #151a17;
|
|
134
|
-
--border-hover: #a6b0a8;
|
|
135
158
|
--success-500: #6cc3ac; --success-100: #14271f; --success-text: #8ad3bf;
|
|
136
159
|
--warning-500: #d9a94f; --warning-100: #2a2213; --warning-text: #e6c17e;
|
|
137
160
|
--danger-500: #d9806d; --danger-100: #2c1814; --danger-text: #e9a597;
|
|
138
161
|
--info-500: #8fb0c9; --info-100: #18222b; --info-text: #a9c4d8;
|
|
139
162
|
--ring: 0 0 0 3px rgba(159,194,168,.3);
|
|
140
163
|
--ring-color: rgba(159,194,168,.3);
|
|
141
|
-
--ring-danger: 0 0 0 3px rgba(217,128,109,.25);
|
|
142
164
|
--shadow-xs: none;
|
|
143
165
|
--shadow-sm: none;
|
|
144
166
|
--shadow-md: none;
|
|
145
167
|
--shadow-lg: 0 8px 24px rgba(8,10,9,.3);
|
|
146
168
|
--shadow-xl: 0 16px 32px rgba(8,10,9,.35);
|
|
147
169
|
color-scheme: dark;
|
|
170
|
+
|
|
171
|
+
--overlay: rgba(0, 0, 0, .6);
|
|
172
|
+
--tooltip-bg: #e3e8e2;
|
|
173
|
+
--tooltip-text: #2c3630;
|
|
174
|
+
--focus-color: var(--accent);
|
|
175
|
+
--text-on-danger: #151a17;
|
|
176
|
+
--border-hover: #a6b0a8;
|
|
177
|
+
--ring-danger: 0 0 0 3px rgba(217,128,109,.25);
|
|
178
|
+
|
|
179
|
+
--selection-bg: var(--action-bg);
|
|
180
|
+
--selection-text: var(--text-on-action);
|
|
181
|
+
|
|
182
|
+
/* Series categóricas: orden estable; acompañar con etiqueta o forma. */
|
|
183
|
+
--chart-1: #60a46f;
|
|
184
|
+
--chart-2: #a85a3f;
|
|
185
|
+
--chart-3: #2da79b;
|
|
186
|
+
--chart-4: #9b5986;
|
|
187
|
+
--chart-5: #818230;
|
|
188
|
+
--chart-6: #3678ac;
|
|
189
|
+
--chart-7: #946b10;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* == Accesibilidad del movimiento == */
|
|
193
|
+
|
|
194
|
+
@media (prefers-reduced-motion: reduce) {
|
|
195
|
+
:root {
|
|
196
|
+
--duration-instant: 0ms; --duration-fast: 0ms; --duration-base: 0ms;
|
|
197
|
+
--duration-slow: 0ms; --duration-page: 0ms; --stagger-step: 0ms;
|
|
198
|
+
}
|
|
148
199
|
}
|
|
149
200
|
|
|
150
|
-
/* --------------------------------------------------------------------------
|
|
151
|
-
2. BASE (§6, §11.5, §13)
|
|
152
|
-
-------------------------------------------------------------------------- */
|
|
153
201
|
*, *::before, *::after { box-sizing: border-box; }
|
|
154
202
|
|
|
155
203
|
/* Focus ring global de teclado — especificidad cero vía :where() */
|
|
@@ -191,17 +239,10 @@
|
|
|
191
239
|
.salvia-reset h6 { font-size: var(--text-base); line-height: var(--leading-base); }
|
|
192
240
|
.salvia-reset p { max-width: var(--measure); margin: 0 0 1em; }
|
|
193
241
|
.salvia-reset table { font-variant-numeric: tabular-nums; }
|
|
194
|
-
.salvia-reset ::placeholder { color: var(--
|
|
242
|
+
.salvia-reset ::placeholder { color: var(--placeholder); }
|
|
195
243
|
.salvia-reset ::selection { background: var(--ring-color); }
|
|
196
244
|
|
|
197
|
-
|
|
198
|
-
*, *::before, *::after {
|
|
199
|
-
animation-duration: 0.01ms !important;
|
|
200
|
-
animation-iteration-count: 1 !important;
|
|
201
|
-
transition-duration: 0.01ms !important;
|
|
202
|
-
scroll-behavior: auto !important;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
245
|
+
|
|
205
246
|
|
|
206
247
|
/* --------------------------------------------------------------------------
|
|
207
248
|
3. LAYOUT — contenedor, grid 12 col (§14)
|
|
@@ -249,12 +290,12 @@
|
|
|
249
290
|
/* Gating de hover (§11.5): los hover que mueven/elevan (transform, box-shadow) van
|
|
250
291
|
dentro de @media (hover: hover) and (pointer: fine) — en touch el tap dispara
|
|
251
292
|
hovers falsos que se quedan pegados. Los hover de solo color/fondo quedan fuera. */
|
|
252
|
-
.btn--primary { background: var(--
|
|
253
|
-
.btn--primary:hover:not(:disabled) { background: var(--
|
|
293
|
+
.btn--primary { background: var(--action-bg); color: var(--text-on-action); }
|
|
294
|
+
.btn--primary:hover:not(:disabled) { background: var(--action-hover); }
|
|
254
295
|
@media (hover: hover) and (pointer: fine) {
|
|
255
296
|
.btn--primary:hover:not(:disabled) { box-shadow: var(--shadow-sm); }
|
|
256
297
|
}
|
|
257
|
-
.btn--primary:active:not(:disabled) { background: var(--
|
|
298
|
+
.btn--primary:active:not(:disabled) { background: var(--action-active); box-shadow: none; }
|
|
258
299
|
.btn--primary:disabled { background: var(--border); color: var(--text-disabled); box-shadow: none; }
|
|
259
300
|
|
|
260
301
|
.btn--secondary { background: var(--surface); border-color: var(--border-strong); color: var(--text-primary); }
|
|
@@ -321,7 +362,7 @@
|
|
|
321
362
|
.input, .textarea, .select {
|
|
322
363
|
width: 100%; font-family: var(--font-body); font-size: var(--text-base);
|
|
323
364
|
color: var(--text-primary); background: var(--surface);
|
|
324
|
-
border: var(--border-width) solid var(--border
|
|
365
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
325
366
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
326
367
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
327
368
|
}
|
|
@@ -419,7 +460,7 @@
|
|
|
419
460
|
}
|
|
420
461
|
.checkbox__box {
|
|
421
462
|
width: 20px; height: 20px; flex: none; display: grid; place-items: center;
|
|
422
|
-
background: var(--surface); border: 2px solid var(--border
|
|
463
|
+
background: var(--surface); border: 2px solid var(--control-border); border-radius: 4px;
|
|
423
464
|
transition: background-color var(--duration-fast) var(--ease-out),
|
|
424
465
|
border-color var(--duration-fast) var(--ease-out);
|
|
425
466
|
}
|
|
@@ -429,7 +470,7 @@
|
|
|
429
470
|
stroke-dasharray: 20; stroke-dashoffset: 20;
|
|
430
471
|
transition: stroke-dashoffset var(--duration-base) var(--ease-spring);
|
|
431
472
|
}
|
|
432
|
-
.checkbox:hover .checkbox__box { border-color: var(--
|
|
473
|
+
.checkbox:hover .checkbox__box { border-color: var(--focus-color); }
|
|
433
474
|
.checkbox input:checked ~ .checkbox__box { background: var(--accent); border-color: var(--accent); }
|
|
434
475
|
.checkbox input:checked ~ .checkbox__box svg { stroke-dashoffset: 0; }
|
|
435
476
|
.checkbox input:focus-visible ~ .checkbox__box { box-shadow: var(--ring); }
|
|
@@ -446,7 +487,7 @@
|
|
|
446
487
|
|
|
447
488
|
.radio__dot {
|
|
448
489
|
width: 20px; height: 20px; flex: none; display: grid; place-items: center;
|
|
449
|
-
background: var(--surface); border: 2px solid var(--border
|
|
490
|
+
background: var(--surface); border: 2px solid var(--control-border); border-radius: var(--radius-full);
|
|
450
491
|
transition: background-color var(--duration-fast) var(--ease-out),
|
|
451
492
|
border-color var(--duration-fast) var(--ease-out);
|
|
452
493
|
}
|
|
@@ -455,7 +496,7 @@
|
|
|
455
496
|
background: var(--text-on-primary); transform: scale(0);
|
|
456
497
|
transition: transform var(--duration-base) var(--ease-spring);
|
|
457
498
|
}
|
|
458
|
-
.radio:hover .radio__dot { border-color: var(--
|
|
499
|
+
.radio:hover .radio__dot { border-color: var(--focus-color); }
|
|
459
500
|
.radio input:checked ~ .radio__dot { background: var(--accent); border-color: var(--accent); }
|
|
460
501
|
.radio input:checked ~ .radio__dot::after { transform: scale(1); }
|
|
461
502
|
.radio input:focus-visible ~ .radio__dot { box-shadow: var(--ring); }
|
|
@@ -789,10 +830,14 @@
|
|
|
789
830
|
background: var(--surface); border: var(--border-width) solid var(--border);
|
|
790
831
|
border-radius: var(--radius-md); box-shadow: var(--shadow-lg);
|
|
791
832
|
opacity: 0; transform: translateY(-4px); pointer-events: none;
|
|
792
|
-
transition: opacity
|
|
833
|
+
transition: opacity var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
|
|
834
|
+
|
|
835
|
+
visibility: hidden;
|
|
836
|
+
|
|
837
|
+
display: none;
|
|
793
838
|
}
|
|
794
839
|
.menu--right { left: auto; right: 0; }
|
|
795
|
-
.menu.is-open { opacity: 1; transform: none; pointer-events: auto; }
|
|
840
|
+
.menu.is-open { opacity: 1; transform: none; pointer-events: auto; visibility: visible; display: block; }
|
|
796
841
|
.menu__item {
|
|
797
842
|
display: flex; align-items: center; gap: 10px; width: 100%;
|
|
798
843
|
padding: 9px 12px; border: 0; border-radius: var(--radius-sm);
|
|
@@ -1067,7 +1112,7 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1067
1112
|
width: 100%; height: var(--control-height-md); padding: 0 14px;
|
|
1068
1113
|
font-family: var(--font-body); font-size: var(--text-base);
|
|
1069
1114
|
color: var(--text-primary); background: var(--surface);
|
|
1070
|
-
border: var(--border-width) solid var(--border
|
|
1115
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
1071
1116
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
1072
1117
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
1073
1118
|
}
|
|
@@ -1109,7 +1154,7 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1109
1154
|
width: 100%; height: var(--control-height-md); padding: 0 40px;
|
|
1110
1155
|
font-family: var(--font-body); font-size: var(--text-base);
|
|
1111
1156
|
color: var(--text-primary); background: var(--surface);
|
|
1112
|
-
border: var(--border-width) solid var(--border
|
|
1157
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
1113
1158
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
1114
1159
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
1115
1160
|
}
|
|
@@ -1177,8 +1222,12 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1177
1222
|
transform-origin: top left; opacity: 0; transform: scale(.96); pointer-events: none;
|
|
1178
1223
|
transition: opacity var(--duration-base) var(--ease-out),
|
|
1179
1224
|
transform var(--duration-base) var(--ease-out);
|
|
1225
|
+
|
|
1226
|
+
visibility: hidden;
|
|
1227
|
+
|
|
1228
|
+
display: none;
|
|
1180
1229
|
}
|
|
1181
|
-
.popover.is-open .popover__panel { opacity: 1; transform: none; pointer-events: auto; }
|
|
1230
|
+
.popover.is-open .popover__panel { opacity: 1; transform: none; pointer-events: auto; visibility: visible; display: block; }
|
|
1182
1231
|
.popover--right .popover__panel { left: auto; right: 0; transform-origin: top right; }
|
|
1183
1232
|
|
|
1184
1233
|
/* ButtonGroup (§10.31) */
|
|
@@ -1203,7 +1252,7 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1203
1252
|
width: 100%; height: var(--control-height-md); padding: 0 40px 0 14px;
|
|
1204
1253
|
font-family: var(--font-body); font-size: var(--text-base);
|
|
1205
1254
|
color: var(--text-primary); background: var(--surface);
|
|
1206
|
-
border: var(--border-width) solid var(--border
|
|
1255
|
+
border: var(--border-width) solid var(--control-border); border-radius: var(--radius-sm);
|
|
1207
1256
|
transition: border-color var(--duration-fast) var(--ease-out),
|
|
1208
1257
|
box-shadow var(--duration-fast) var(--ease-out);
|
|
1209
1258
|
}
|
|
@@ -1222,8 +1271,12 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1222
1271
|
transform-origin: top left; opacity: 0; transform: scale(.96); pointer-events: none;
|
|
1223
1272
|
transition: opacity var(--duration-base) var(--ease-out),
|
|
1224
1273
|
transform var(--duration-base) var(--ease-out);
|
|
1274
|
+
|
|
1275
|
+
visibility: hidden;
|
|
1276
|
+
|
|
1277
|
+
display: none;
|
|
1225
1278
|
}
|
|
1226
|
-
.datepicker.is-open .datepicker__calendar { opacity: 1; transform: none; pointer-events: auto; }
|
|
1279
|
+
.datepicker.is-open .datepicker__calendar { opacity: 1; transform: none; pointer-events: auto; visibility: visible; display: block; }
|
|
1227
1280
|
.datepicker--right .datepicker__calendar { left: auto; right: 0; transform-origin: top right; }
|
|
1228
1281
|
|
|
1229
1282
|
.calendar { width: 15.75rem; }
|
|
@@ -1368,3 +1421,168 @@ button.metric-chip:focus-visible { outline: 2px solid var(--focus-color); outlin
|
|
|
1368
1421
|
.u-mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
1369
1422
|
.u-muted { color: var(--text-muted); }
|
|
1370
1423
|
.u-measure { max-width: var(--measure); }
|
|
1424
|
+
|
|
1425
|
+
/* CONTRATOS COMPARTIDOS GENERADOS */
|
|
1426
|
+
/* Contratos comunes de interacción; la identidad y los valores viven en tokens.css. */
|
|
1427
|
+
.grid { grid-template-columns: repeat(12, minmax(0, 1fr)); }
|
|
1428
|
+
.grid > *, .field, .card { min-inline-size: 0; }
|
|
1429
|
+
.stack, .card__content, .form-stack, .text-group { display: flex; flex-direction: column; align-items: stretch; }
|
|
1430
|
+
.stack, .card__content { gap: var(--content-gap); }
|
|
1431
|
+
.stack--tight, .text-group { gap: var(--heading-gap); }
|
|
1432
|
+
.stack--cards { gap: var(--card-group-gap); }
|
|
1433
|
+
.form-stack { gap: var(--form-gap); }
|
|
1434
|
+
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }
|
|
1435
|
+
.card { display: flex; flex-direction: column; gap: var(--card-content-gap); }
|
|
1436
|
+
.field { gap: var(--field-gap); }
|
|
1437
|
+
.field__label, .field__help, .field__error, .field > :is(label, p, span, div) { margin-block: 0; }
|
|
1438
|
+
:where(.field + .field, .field + .btn, .field + .cluster) { margin-block-start: var(--form-gap); }
|
|
1439
|
+
:where(.card + .card) { margin-block-start: var(--card-group-gap); }
|
|
1440
|
+
.stack > *, .card__content > *, .form-stack > *, .text-group > *, .grid > .card,
|
|
1441
|
+
.card > :is(h1, h2, h3, h4, h5, h6, p), .text-group > :is(h1, h2, h3, h4, h5, h6, p),
|
|
1442
|
+
.stack > :is(h1, h2, h3, h4, h5, h6, p) { margin-block: 0; }
|
|
1443
|
+
.form-stack > .field { margin-block: 0; }
|
|
1444
|
+
.btn {
|
|
1445
|
+
block-size: auto;
|
|
1446
|
+
min-block-size: var(--control-height-md);
|
|
1447
|
+
max-inline-size: 100%;
|
|
1448
|
+
white-space: normal;
|
|
1449
|
+
line-height: 1.35;
|
|
1450
|
+
text-align: center;
|
|
1451
|
+
}
|
|
1452
|
+
.btn--sm { min-block-size: var(--control-height-sm, 36px); }
|
|
1453
|
+
.btn--lg { min-block-size: var(--control-height-lg, 52px); }
|
|
1454
|
+
.btn--primary, .icon-btn--primary, .calendar__day--selected, .pagination__btn.is-active {
|
|
1455
|
+
background: var(--action-bg);
|
|
1456
|
+
color: var(--text-on-action);
|
|
1457
|
+
}
|
|
1458
|
+
.btn--primary:hover:not(:disabled), .icon-btn--primary:hover:not(:disabled) { background: var(--action-hover); color: var(--text-on-action); }
|
|
1459
|
+
.btn--primary:active:not(:disabled), .icon-btn--primary:active:not(:disabled) { background: var(--action-active); color: var(--text-on-action); }
|
|
1460
|
+
.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input {
|
|
1461
|
+
max-inline-size: 100%;
|
|
1462
|
+
caret-color: var(--focus-color);
|
|
1463
|
+
}
|
|
1464
|
+
.input, .select, .combobox__input, .search__input, .datepicker__input {
|
|
1465
|
+
block-size: auto; min-block-size: var(--control-height-md);
|
|
1466
|
+
padding-block: var(--space-2); line-height: 1.5;
|
|
1467
|
+
}
|
|
1468
|
+
: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); }
|
|
1469
|
+
.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"]),
|
|
1470
|
+
.select:hover:not(:disabled):not(:focus), .combobox__input:hover:not(:disabled):not(:focus),
|
|
1471
|
+
.search__input:hover:not(:focus), .datepicker__input:hover:not(:disabled):not(:focus) { border-color: var(--border-hover); }
|
|
1472
|
+
.input:focus-visible, .textarea:focus-visible, .select:focus-visible,
|
|
1473
|
+
.combobox__input:focus-visible, .search__input:focus-visible, .datepicker__input:focus-visible {
|
|
1474
|
+
outline: 2px solid var(--focus-color);
|
|
1475
|
+
outline-offset: 2px;
|
|
1476
|
+
}
|
|
1477
|
+
.input[aria-invalid="true"], .textarea[aria-invalid="true"] { border-color: var(--danger-text, var(--danger)); }
|
|
1478
|
+
.input.input--error, .textarea.textarea--error,
|
|
1479
|
+
.input.input--error:hover:not(:disabled):not(:focus), .textarea.textarea--error:hover:not(:disabled):not(:focus),
|
|
1480
|
+
:is(.input, .textarea, .select, .combobox__input, .search__input, .datepicker__input)[aria-invalid="true"]:hover:not(:disabled):not(:focus) {
|
|
1481
|
+
border-color: var(--danger-text, var(--danger));
|
|
1482
|
+
}
|
|
1483
|
+
.input.input--success, .input.input--success:hover:not(:disabled):not(:focus) { border-color: var(--success-text, var(--success)); }
|
|
1484
|
+
.pagination { max-inline-size: 100%; flex-wrap: wrap; row-gap: var(--space-2); }
|
|
1485
|
+
.pagination__ellipsis { color: var(--text-muted); }
|
|
1486
|
+
.step--current .step__marker { color: var(--link); border-color: var(--focus-color); }
|
|
1487
|
+
.checkbox input:focus-visible ~ .checkbox__box,
|
|
1488
|
+
.radio input:focus-visible ~ .radio__dot,
|
|
1489
|
+
.switch input:focus-visible ~ .switch__track {
|
|
1490
|
+
outline: 2px solid var(--focus-color);
|
|
1491
|
+
outline-offset: 2px;
|
|
1492
|
+
}
|
|
1493
|
+
input.checkbox, input.radio { border-color: var(--control-border); }
|
|
1494
|
+
input.checkbox:hover, input.radio:hover { border-color: var(--focus-color); }
|
|
1495
|
+
input.checkbox:checked, input.checkbox:indeterminate, input.radio:checked { border-color: var(--focus-color); }
|
|
1496
|
+
.switch__track { background: var(--control-border); }
|
|
1497
|
+
.tabs { max-inline-size: 100%; overflow-x: auto; }
|
|
1498
|
+
.tabs__tab { flex-shrink: 0; }
|
|
1499
|
+
.segmented { max-inline-size: 100%; block-size: auto; min-block-size: var(--control-height-md); overflow-x: auto; }
|
|
1500
|
+
.segmented label { padding-block: var(--space-2); }
|
|
1501
|
+
.stat__row, .breadcrumbs, .check-row { flex-wrap: wrap; row-gap: var(--space-2); }
|
|
1502
|
+
.progress-row, .slider-row { flex-wrap: wrap; gap: var(--space-2); }
|
|
1503
|
+
.stat__value { max-inline-size: 100%; white-space: normal; overflow-wrap: anywhere; }
|
|
1504
|
+
.file-upload, .file-upload__label { min-inline-size: 0; max-inline-size: 100%; }
|
|
1505
|
+
.file-upload__button { max-inline-size: 100%; white-space: normal; text-align: center; }
|
|
1506
|
+
.file-upload__hint { overflow-wrap: anywhere; }
|
|
1507
|
+
.table-scroll { max-inline-size: 100%; overflow-x: auto; overscroll-behavior-inline: contain; }
|
|
1508
|
+
.popover__panel, .datepicker__calendar, .combobox__list {
|
|
1509
|
+
max-inline-size: calc(100vw - 2rem);
|
|
1510
|
+
max-block-size: min(32rem, 70dvh);
|
|
1511
|
+
overflow: auto;
|
|
1512
|
+
}
|
|
1513
|
+
.file-upload__input:focus-visible + .file-upload__label { outline: 2px solid var(--focus-color); outline-offset: 2px; }
|
|
1514
|
+
.calendar { max-inline-size: calc(100vw - 2rem); }
|
|
1515
|
+
.ui-title, :is(h1, h2, h3, h4, h5, h6).ui-title, [data-mode="operate"] :is(h1, h2, h3) {
|
|
1516
|
+
font-family: var(--font-ui-heading);
|
|
1517
|
+
letter-spacing: 0;
|
|
1518
|
+
line-height: 1.3;
|
|
1519
|
+
font-weight: var(--weight-semibold);
|
|
1520
|
+
}
|
|
1521
|
+
.ui-title, :is(h1, h2, h3, h4, h5, h6).ui-title, [data-mode="operate"] h1 { font-size: var(--text-ui-title); }
|
|
1522
|
+
[data-mode="operate"] h2 { font-size: var(--text-xl); }
|
|
1523
|
+
[data-mode="operate"] h3 { font-size: var(--text-lg); }
|
|
1524
|
+
.display, .reading-title, :is(h1, h2, h3, h4, h5, h6):is(.display, .reading-title) {
|
|
1525
|
+
font-family: var(--font-display);
|
|
1526
|
+
font-size: var(--text-display-fluid);
|
|
1527
|
+
line-height: 1.08;
|
|
1528
|
+
letter-spacing: var(--tracking-display);
|
|
1529
|
+
text-wrap: balance;
|
|
1530
|
+
}
|
|
1531
|
+
:where(.celeste-reset, .salvia-reset, .bruma-reset, .nocturna-reset, body[data-system]) {
|
|
1532
|
+
scrollbar-color: var(--control-border) var(--bg);
|
|
1533
|
+
}
|
|
1534
|
+
::selection,
|
|
1535
|
+
.celeste-reset ::selection, .salvia-reset ::selection, .bruma-reset ::selection {
|
|
1536
|
+
background: var(--selection-bg); color: var(--selection-text);
|
|
1537
|
+
}
|
|
1538
|
+
::placeholder { color: var(--placeholder); opacity: 1; }
|
|
1539
|
+
:where(a) { text-underline-offset: .2em; text-decoration-thickness: .08em; }
|
|
1540
|
+
.skip-link {
|
|
1541
|
+
position: fixed; inset-block-start: var(--space-2); inset-inline-start: var(--space-2);
|
|
1542
|
+
z-index: 1000; padding: var(--space-3) var(--space-4);
|
|
1543
|
+
background: var(--action-bg); color: var(--text-on-action);
|
|
1544
|
+
border-radius: var(--radius-sm); transform: translateY(-180%);
|
|
1545
|
+
}
|
|
1546
|
+
.skip-link:focus { transform: none; outline: 2px solid var(--focus-color); outline-offset: 2px; }
|
|
1547
|
+
[data-tooltip]::before, [data-tooltip]::after { display: none; }
|
|
1548
|
+
[data-tooltip]:focus-visible::before, [data-tooltip]:focus-visible::after { display: block; }
|
|
1549
|
+
.has-tooltip .tooltip { display: none; }
|
|
1550
|
+
.has-tooltip:has(:focus-visible) .tooltip { display: block; opacity: 1; transform: translate(-50%, 0); }
|
|
1551
|
+
@media (hover: hover) and (pointer: fine) {
|
|
1552
|
+
[data-tooltip]:hover::before, [data-tooltip]:hover::after { display: block; }
|
|
1553
|
+
.has-tooltip:hover .tooltip { display: block; }
|
|
1554
|
+
}
|
|
1555
|
+
@media (pointer: coarse) {
|
|
1556
|
+
.btn, .icon-btn, .segmented label, .pagination button,
|
|
1557
|
+
.tag__close, .search__clear, .toast__close, .check-row,
|
|
1558
|
+
.checkbox:not(input), .radio:not(input), .switch:not(input) {
|
|
1559
|
+
min-block-size: var(--touch-target);
|
|
1560
|
+
min-inline-size: var(--touch-target);
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
@media (max-width: 479px) {
|
|
1564
|
+
.btn-group { flex-wrap: wrap; }
|
|
1565
|
+
.modal { max-inline-size: calc(100vw - 2rem); }
|
|
1566
|
+
.stepper { flex-direction: column; align-items: stretch; gap: var(--space-4); }
|
|
1567
|
+
.step { flex-direction: row; align-items: center; gap: var(--space-3); text-align: start; min-inline-size: 0; }
|
|
1568
|
+
.step__label { overflow-wrap: anywhere; }
|
|
1569
|
+
.step__connector { display: none; }
|
|
1570
|
+
}
|
|
1571
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1572
|
+
html, html:focus-within { scroll-behavior: auto; }
|
|
1573
|
+
.spinner, .skeleton, .skeleton::after,
|
|
1574
|
+
.progress--indeterminate .progress__bar, .alert.is-leaving, .toast.is-leaving { animation: none; }
|
|
1575
|
+
.progress--indeterminate .progress__bar { transform: none; }
|
|
1576
|
+
.btn, .icon-btn, .card--interactive, .slider::-webkit-slider-thumb { transform: none; }
|
|
1577
|
+
.btn:active:not(:disabled), .icon-btn:active:not(:disabled), .card--interactive:hover { transform: none; }
|
|
1578
|
+
.btn, .icon-btn { transition: background-color 80ms linear, color 80ms linear; }
|
|
1579
|
+
.menu, .popover__panel, .datepicker__calendar, .link::after { transition: none; }
|
|
1580
|
+
.progress__bar, .progress-ring__value, .accordion__content, .accordion__body { transition: none; }
|
|
1581
|
+
}
|
|
1582
|
+
@media (forced-colors: active) {
|
|
1583
|
+
input.switch, .switch__track { border: 1px solid CanvasText; background: Canvas; }
|
|
1584
|
+
input.switch::after, .switch__track::after { background: CanvasText; }
|
|
1585
|
+
input.switch:checked, .switch input:checked ~ .switch__track { border-color: Highlight; }
|
|
1586
|
+
input.switch:checked::after, .switch input:checked ~ .switch__track::after { background: Highlight; }
|
|
1587
|
+
.checkbox__box, .radio__dot { border-color: CanvasText; }
|
|
1588
|
+
}
|