@dsrc-cm/core 0.1.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.
- package/dist/dsrc.css +10743 -0
- package/dist/dsrc.min.css +1 -0
- package/package.json +44 -0
- package/src/base/print.css +404 -0
- package/src/base/reset.css +106 -0
- package/src/components/accordion/accordion.css +216 -0
- package/src/components/alert/alert.css +187 -0
- package/src/components/badge/badge.css +178 -0
- package/src/components/breadcrumb/breadcrumb.css +235 -0
- package/src/components/button/button.css +805 -0
- package/src/components/callout/callout.css +95 -0
- package/src/components/card/card.css +551 -0
- package/src/components/checkbox/checkbox.css +257 -0
- package/src/components/consent/consent.css +297 -0
- package/src/components/download/download.css +66 -0
- package/src/components/dropdown/dropdown.css +295 -0
- package/src/components/highlight/highlight.css +74 -0
- package/src/components/input/input.css +337 -0
- package/src/components/label/label.css +29 -0
- package/src/components/link/link.css +208 -0
- package/src/components/logo/logo.css +86 -0
- package/src/components/modal/modal.css +271 -0
- package/src/components/notice/notice.css +211 -0
- package/src/components/pagination/pagination.css +132 -0
- package/src/components/password/password.css +195 -0
- package/src/components/quote/quote.css +156 -0
- package/src/components/radio/radio.css +270 -0
- package/src/components/range/range.css +362 -0
- package/src/components/search/search.css +129 -0
- package/src/components/select/select.css +130 -0
- package/src/components/sidemenu/sidemenu.css +268 -0
- package/src/components/spinner/spinner.css +73 -0
- package/src/components/stepper/stepper.css +140 -0
- package/src/components/summary/summary.css +142 -0
- package/src/components/tab/tab.css +184 -0
- package/src/components/table/table.css +556 -0
- package/src/components/tag/tag.css +201 -0
- package/src/components/tile/tile.css +389 -0
- package/src/components/toggle/toggle.css +229 -0
- package/src/components/tooltip/tooltip.css +158 -0
- package/src/components/translate/translate.css +356 -0
- package/src/components/upload/upload.css +185 -0
- package/src/index.css +77 -0
- package/src/layout/bandeau/bandeau.css +44 -0
- package/src/layout/entete/entete.css +130 -0
- package/src/layout/footer/footer.css +107 -0
- package/src/layout/grid/grid.css +197 -0
- package/src/layout/hero/hero.css +86 -0
- package/src/layout/main/main.css +123 -0
- package/src/layout/navigation/navigation.css +206 -0
- package/src/utilities/utilities.css +430 -0
|
@@ -0,0 +1,805 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSRC Button Component
|
|
3
|
+
* Design Systeme de la Republique du Cameroun
|
|
4
|
+
*
|
|
5
|
+
* Variants:
|
|
6
|
+
* --primary ............. Filled green (default action)
|
|
7
|
+
* --secondary ........... Outlined green (secondary action)
|
|
8
|
+
* --tertiary ............ Outlined grey (cancel / neutral action)
|
|
9
|
+
* --tertiary-no-outline . Text-only, no border (link-like)
|
|
10
|
+
* --danger .............. Filled red (destructive action)
|
|
11
|
+
* --danger-outline ...... Outlined red (destructive secondary)
|
|
12
|
+
* --close ............... Icon-only close button (X)
|
|
13
|
+
*
|
|
14
|
+
* Icons: --icon-left, --icon-right (+ .dsrc-icon-{name} utility)
|
|
15
|
+
* Specialized: --account, --sort, --print, --share, --notification, --menu, --lang
|
|
16
|
+
* Sizes: --sm (32px), default (40px), --lg (48px)
|
|
17
|
+
* Layout: --icon, --block
|
|
18
|
+
* State: --loading, :disabled
|
|
19
|
+
*
|
|
20
|
+
* Groups: .dsrc-btns-group (wraps <ul><li><button>)
|
|
21
|
+
* --inline, --inline-sm, --inline-md, --inline-lg (responsive)
|
|
22
|
+
*
|
|
23
|
+
* Utility: .dsrc-enlarge-link (makes entire container clickable)
|
|
24
|
+
*
|
|
25
|
+
* Usage:
|
|
26
|
+
* <button class="dsrc-btn dsrc-btn--primary">Confirmer</button>
|
|
27
|
+
* <button class="dsrc-btn dsrc-btn--primary dsrc-btn--icon-left dsrc-icon-check">Valider</button>
|
|
28
|
+
* <button class="dsrc-btn dsrc-btn--secondary dsrc-btn--icon-right dsrc-icon-arrow-right">Suivant</button>
|
|
29
|
+
* <button class="dsrc-btn dsrc-btn--tertiary dsrc-btn--print">Imprimer</button>
|
|
30
|
+
* <button class="dsrc-btn dsrc-btn--icon dsrc-btn--notification" aria-label="Notifications">
|
|
31
|
+
* <span class="dsrc-btn__badge">3</span>
|
|
32
|
+
* </button>
|
|
33
|
+
*
|
|
34
|
+
* <ul class="dsrc-btns-group dsrc-btns-group--inline-md">
|
|
35
|
+
* <li><button class="dsrc-btn dsrc-btn--primary">Valider</button></li>
|
|
36
|
+
* <li><button class="dsrc-btn dsrc-btn--secondary">Retour</button></li>
|
|
37
|
+
* </ul>
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
/* ============================================
|
|
42
|
+
* 1. Base button
|
|
43
|
+
* ============================================ */
|
|
44
|
+
|
|
45
|
+
.dsrc-btn {
|
|
46
|
+
display: inline-flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
gap: var(--dsrc-spacing-2);
|
|
50
|
+
font-family: var(--dsrc-font-family-sans);
|
|
51
|
+
font-size: var(--dsrc-font-size-small);
|
|
52
|
+
font-weight: var(--dsrc-font-weight-medium);
|
|
53
|
+
line-height: 1;
|
|
54
|
+
padding: var(--dsrc-spacing-2) var(--dsrc-spacing-5);
|
|
55
|
+
min-height: 40px;
|
|
56
|
+
border-radius: var(--dsrc-radius-default);
|
|
57
|
+
border: var(--dsrc-border-width-default) solid transparent;
|
|
58
|
+
cursor: pointer;
|
|
59
|
+
text-decoration: none;
|
|
60
|
+
transition:
|
|
61
|
+
background-color var(--dsrc-transition-duration-fast) ease,
|
|
62
|
+
border-color var(--dsrc-transition-duration-fast) ease,
|
|
63
|
+
color var(--dsrc-transition-duration-fast) ease;
|
|
64
|
+
white-space: nowrap;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
/* ============================================
|
|
69
|
+
* 2. Focus
|
|
70
|
+
* ============================================ */
|
|
71
|
+
|
|
72
|
+
.dsrc-btn:focus-visible {
|
|
73
|
+
outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
|
|
74
|
+
outline-offset: var(--dsrc-outline-offset);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
/* ============================================
|
|
79
|
+
* 3. Primary variant (filled green)
|
|
80
|
+
* ============================================ */
|
|
81
|
+
|
|
82
|
+
.dsrc-btn--primary {
|
|
83
|
+
background-color: var(--dsrc-color-primaire);
|
|
84
|
+
color: var(--dsrc-color-blanc);
|
|
85
|
+
border-color: var(--dsrc-color-primaire);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.dsrc-btn--primary:hover {
|
|
89
|
+
background-color: var(--dsrc-color-primaire-fonce);
|
|
90
|
+
border-color: var(--dsrc-color-primaire-fonce);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.dsrc-btn--primary:active {
|
|
94
|
+
background-color: var(--dsrc-color-primaire-fonce);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/* ============================================
|
|
99
|
+
* 4. Secondary variant (outlined green)
|
|
100
|
+
* ============================================ */
|
|
101
|
+
|
|
102
|
+
.dsrc-btn--secondary {
|
|
103
|
+
background-color: transparent;
|
|
104
|
+
color: var(--dsrc-color-primaire);
|
|
105
|
+
border-color: var(--dsrc-color-primaire);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.dsrc-btn--secondary:hover {
|
|
109
|
+
background-color: var(--dsrc-color-primaire-clair);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.dsrc-btn--secondary:active {
|
|
113
|
+
background-color: var(--dsrc-color-primaire-clair);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
/* ============================================
|
|
118
|
+
* 5. Tertiary variant (outlined grey)
|
|
119
|
+
* ============================================ */
|
|
120
|
+
|
|
121
|
+
.dsrc-btn--tertiary {
|
|
122
|
+
background-color: transparent;
|
|
123
|
+
color: var(--dsrc-color-noir);
|
|
124
|
+
border-color: var(--dsrc-color-gris-200);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.dsrc-btn--tertiary:hover {
|
|
128
|
+
background-color: var(--dsrc-color-gris-100);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.dsrc-btn--tertiary:active {
|
|
132
|
+
background-color: var(--dsrc-color-gris-200);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
/* ============================================
|
|
137
|
+
* 6. Tertiary no-outline variant (text only)
|
|
138
|
+
* ============================================ */
|
|
139
|
+
|
|
140
|
+
.dsrc-btn--tertiary-no-outline {
|
|
141
|
+
background-color: transparent;
|
|
142
|
+
color: var(--dsrc-color-primaire);
|
|
143
|
+
border-color: transparent;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.dsrc-btn--tertiary-no-outline:hover {
|
|
147
|
+
background-color: var(--dsrc-color-primaire-clair);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.dsrc-btn--tertiary-no-outline:active {
|
|
151
|
+
background-color: var(--dsrc-color-primaire-clair);
|
|
152
|
+
color: var(--dsrc-color-primaire-fonce);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
/* ============================================
|
|
157
|
+
* 7. Danger variants
|
|
158
|
+
* ============================================ */
|
|
159
|
+
|
|
160
|
+
/* Danger filled */
|
|
161
|
+
.dsrc-btn--danger {
|
|
162
|
+
background-color: var(--dsrc-color-erreur-bordure);
|
|
163
|
+
color: var(--dsrc-color-blanc);
|
|
164
|
+
border-color: var(--dsrc-color-erreur-bordure);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.dsrc-btn--danger:hover {
|
|
168
|
+
background-color: var(--dsrc-color-erreur-texte);
|
|
169
|
+
border-color: var(--dsrc-color-erreur-texte);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.dsrc-btn--danger:active {
|
|
173
|
+
background-color: var(--dsrc-color-erreur-texte);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.dsrc-btn--danger:focus-visible {
|
|
177
|
+
outline-color: var(--dsrc-color-erreur-bordure);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Danger outline */
|
|
181
|
+
.dsrc-btn--danger-outline {
|
|
182
|
+
background-color: transparent;
|
|
183
|
+
color: var(--dsrc-color-erreur-bordure);
|
|
184
|
+
border-color: var(--dsrc-color-erreur-bordure);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.dsrc-btn--danger-outline:hover {
|
|
188
|
+
background-color: var(--dsrc-color-erreur-bordure);
|
|
189
|
+
color: var(--dsrc-color-blanc);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.dsrc-btn--danger-outline:active {
|
|
193
|
+
background-color: var(--dsrc-color-erreur-texte);
|
|
194
|
+
border-color: var(--dsrc-color-erreur-texte);
|
|
195
|
+
color: var(--dsrc-color-blanc);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.dsrc-btn--danger-outline:focus-visible {
|
|
199
|
+
outline-color: var(--dsrc-color-erreur-bordure);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
/* ============================================
|
|
204
|
+
* 8. Close button (special purpose)
|
|
205
|
+
* Used in: alert, modal, toast
|
|
206
|
+
*
|
|
207
|
+
* <button class="dsrc-btn dsrc-btn--close" aria-label="Fermer">
|
|
208
|
+
* <svg ...>X</svg>
|
|
209
|
+
* </button>
|
|
210
|
+
* ============================================ */
|
|
211
|
+
|
|
212
|
+
.dsrc-btn--close {
|
|
213
|
+
background-color: transparent;
|
|
214
|
+
color: var(--dsrc-color-gris-600);
|
|
215
|
+
border-color: transparent;
|
|
216
|
+
padding: var(--dsrc-spacing-1);
|
|
217
|
+
min-height: 0;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.dsrc-btn--close:hover {
|
|
221
|
+
background-color: var(--dsrc-color-gris-100);
|
|
222
|
+
color: var(--dsrc-color-noir);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.dsrc-btn--close:active {
|
|
226
|
+
background-color: var(--dsrc-color-gris-200);
|
|
227
|
+
color: var(--dsrc-color-noir);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
/* ============================================
|
|
232
|
+
* 9. Sizes
|
|
233
|
+
* ============================================ */
|
|
234
|
+
|
|
235
|
+
.dsrc-btn--sm {
|
|
236
|
+
font-size: var(--dsrc-font-size-caption);
|
|
237
|
+
padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
|
|
238
|
+
min-height: 32px;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.dsrc-btn--lg {
|
|
242
|
+
font-size: var(--dsrc-font-size-body);
|
|
243
|
+
padding: var(--dsrc-spacing-3) var(--dsrc-spacing-5);
|
|
244
|
+
min-height: 48px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
/* ============================================
|
|
249
|
+
* 10. Icon-only button
|
|
250
|
+
* ============================================ */
|
|
251
|
+
|
|
252
|
+
.dsrc-btn--icon {
|
|
253
|
+
padding: var(--dsrc-spacing-2);
|
|
254
|
+
min-width: 40px;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.dsrc-btn--icon.dsrc-btn--sm {
|
|
258
|
+
padding: var(--dsrc-spacing-2);
|
|
259
|
+
min-width: 32px;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.dsrc-btn--icon.dsrc-btn--lg {
|
|
263
|
+
padding: var(--dsrc-spacing-3);
|
|
264
|
+
min-width: 48px;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
/* ============================================
|
|
269
|
+
* 11. Icon-left / Icon-right buttons
|
|
270
|
+
*
|
|
271
|
+
* The icon is provided via --dsrc-btn-icon
|
|
272
|
+
* custom property, set by a .dsrc-icon-{name}
|
|
273
|
+
* class or an inline style.
|
|
274
|
+
*
|
|
275
|
+
* <button class="dsrc-btn dsrc-btn--primary dsrc-btn--icon-left dsrc-icon-check">
|
|
276
|
+
* Valider
|
|
277
|
+
* </button>
|
|
278
|
+
*
|
|
279
|
+
* <button class="dsrc-btn dsrc-btn--secondary dsrc-btn--icon-right dsrc-icon-arrow-right">
|
|
280
|
+
* Suivant
|
|
281
|
+
* </button>
|
|
282
|
+
*
|
|
283
|
+
* <!-- Custom icon via inline style -->
|
|
284
|
+
* <button class="dsrc-btn dsrc-btn--primary dsrc-btn--icon-left"
|
|
285
|
+
* style="--dsrc-btn-icon: url('data:image/svg+xml,...')">
|
|
286
|
+
* Action
|
|
287
|
+
* </button>
|
|
288
|
+
* ============================================ */
|
|
289
|
+
|
|
290
|
+
.dsrc-btn--icon-left::before,
|
|
291
|
+
.dsrc-btn--icon-right::after {
|
|
292
|
+
content: '';
|
|
293
|
+
display: inline-block;
|
|
294
|
+
width: 1em;
|
|
295
|
+
height: 1em;
|
|
296
|
+
flex-shrink: 0;
|
|
297
|
+
background-color: currentColor;
|
|
298
|
+
-webkit-mask-image: var(--dsrc-btn-icon);
|
|
299
|
+
mask-image: var(--dsrc-btn-icon);
|
|
300
|
+
-webkit-mask-repeat: no-repeat;
|
|
301
|
+
mask-repeat: no-repeat;
|
|
302
|
+
-webkit-mask-size: contain;
|
|
303
|
+
mask-size: contain;
|
|
304
|
+
-webkit-mask-position: center;
|
|
305
|
+
mask-position: center;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
/* ============================================
|
|
310
|
+
* 12. Icon definitions
|
|
311
|
+
*
|
|
312
|
+
* Utility classes that set --dsrc-btn-icon.
|
|
313
|
+
* Reusable on buttons, links, or any element.
|
|
314
|
+
* ============================================ */
|
|
315
|
+
|
|
316
|
+
/* Arrow left (back navigation) */
|
|
317
|
+
.dsrc-icon-arrow-left {
|
|
318
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M10 3L5 8l5 5' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/* Arrow right (forward navigation) */
|
|
322
|
+
.dsrc-icon-arrow-right {
|
|
323
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M6 3l5 5-5 5' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/* Download */
|
|
327
|
+
.dsrc-icon-download {
|
|
328
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 2v8M8 10L4.5 6.5M8 10l3.5-3.5M3 14h10' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/* External link */
|
|
332
|
+
.dsrc-icon-external {
|
|
333
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M13 9v4a1 1 0 01-1 1H4a1 1 0 01-1-1V5a1 1 0 011-1h4M9 2h5v5M14 2L7 9' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/* Add / plus */
|
|
337
|
+
.dsrc-icon-add {
|
|
338
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 3v10M3 8h10' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* Close / X */
|
|
342
|
+
.dsrc-icon-close {
|
|
343
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M4 4l8 8M12 4l-8 8' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/* Search / magnifying glass */
|
|
347
|
+
.dsrc-icon-search {
|
|
348
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='7' cy='7' r='4.5' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M10.5 10.5L14 14' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* Check / validation */
|
|
352
|
+
.dsrc-icon-check {
|
|
353
|
+
--dsrc-btn-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M3 8.5l3.5 3.5L13 4' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
/* ============================================
|
|
358
|
+
* 13. Specialized button types
|
|
359
|
+
*
|
|
360
|
+
* Pre-configured buttons for Cameroon government
|
|
361
|
+
* portal actions. Each type embeds its icon
|
|
362
|
+
* via mask-image on ::before.
|
|
363
|
+
*
|
|
364
|
+
* Text+icon types (combine with any variant):
|
|
365
|
+
* <button class="dsrc-btn dsrc-btn--secondary dsrc-btn--account">Mon compte</button>
|
|
366
|
+
* <button class="dsrc-btn dsrc-btn--tertiary dsrc-btn--print">Imprimer</button>
|
|
367
|
+
* <button class="dsrc-btn dsrc-btn--secondary dsrc-btn--share">Partager</button>
|
|
368
|
+
* <button class="dsrc-btn dsrc-btn--tertiary dsrc-btn--lang">FR</button>
|
|
369
|
+
*
|
|
370
|
+
* Icon-only types (combine with --icon):
|
|
371
|
+
* <button class="dsrc-btn dsrc-btn--icon dsrc-btn--tertiary dsrc-btn--sort" aria-label="Trier"></button>
|
|
372
|
+
* <button class="dsrc-btn dsrc-btn--icon dsrc-btn--tertiary dsrc-btn--menu" aria-label="Menu"></button>
|
|
373
|
+
* <button class="dsrc-btn dsrc-btn--icon dsrc-btn--tertiary dsrc-btn--notification" aria-label="Notifications">
|
|
374
|
+
* <span class="dsrc-btn__badge">3</span>
|
|
375
|
+
* </button>
|
|
376
|
+
* ============================================ */
|
|
377
|
+
|
|
378
|
+
/* Shared pseudo-element base for text+icon types */
|
|
379
|
+
.dsrc-btn--account::before,
|
|
380
|
+
.dsrc-btn--print::before,
|
|
381
|
+
.dsrc-btn--share::before,
|
|
382
|
+
.dsrc-btn--lang::before {
|
|
383
|
+
content: '';
|
|
384
|
+
display: inline-block;
|
|
385
|
+
width: 1em;
|
|
386
|
+
height: 1em;
|
|
387
|
+
flex-shrink: 0;
|
|
388
|
+
background-color: currentColor;
|
|
389
|
+
-webkit-mask-repeat: no-repeat;
|
|
390
|
+
mask-repeat: no-repeat;
|
|
391
|
+
-webkit-mask-size: contain;
|
|
392
|
+
mask-size: contain;
|
|
393
|
+
-webkit-mask-position: center;
|
|
394
|
+
mask-position: center;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* Shared pseudo-element base for icon-only types */
|
|
398
|
+
.dsrc-btn--sort::before,
|
|
399
|
+
.dsrc-btn--notification::before,
|
|
400
|
+
.dsrc-btn--menu::before {
|
|
401
|
+
content: '';
|
|
402
|
+
display: inline-block;
|
|
403
|
+
width: 1em;
|
|
404
|
+
height: 1em;
|
|
405
|
+
flex-shrink: 0;
|
|
406
|
+
background-color: currentColor;
|
|
407
|
+
-webkit-mask-repeat: no-repeat;
|
|
408
|
+
mask-repeat: no-repeat;
|
|
409
|
+
-webkit-mask-size: contain;
|
|
410
|
+
mask-size: contain;
|
|
411
|
+
-webkit-mask-position: center;
|
|
412
|
+
mask-position: center;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/* -- Account (user silhouette) -- */
|
|
416
|
+
.dsrc-btn--account::before {
|
|
417
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='8' cy='5' r='3' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M2.5 14c0-2.5 2.5-4 5.5-4s5.5 1.5 5.5 4' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
418
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='8' cy='5' r='3' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M2.5 14c0-2.5 2.5-4 5.5-4s5.5 1.5 5.5 4' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/* -- Print (printer) -- */
|
|
422
|
+
.dsrc-btn--print::before {
|
|
423
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M4 6V2h8v4M4 12H2V8h12v4h-2M4 10h8v4H4v-4z' stroke='currentColor' stroke-width='1.5' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
424
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M4 6V2h8v4M4 12H2V8h12v4h-2M4 10h8v4H4v-4z' stroke='currentColor' stroke-width='1.5' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/* -- Share (3 connected nodes) -- */
|
|
428
|
+
.dsrc-btn--share::before {
|
|
429
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='12' cy='4' r='2' stroke='currentColor' stroke-width='1.5'/%3E%3Ccircle cx='4' cy='8' r='2' stroke='currentColor' stroke-width='1.5'/%3E%3Ccircle cx='12' cy='12' r='2' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M6 7l4-2M6 9l4 2' stroke='currentColor' stroke-width='1.5'/%3E%3C/svg%3E");
|
|
430
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='12' cy='4' r='2' stroke='currentColor' stroke-width='1.5'/%3E%3Ccircle cx='4' cy='8' r='2' stroke='currentColor' stroke-width='1.5'/%3E%3Ccircle cx='12' cy='12' r='2' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M6 7l4-2M6 9l4 2' stroke='currentColor' stroke-width='1.5'/%3E%3C/svg%3E");
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/* -- Lang (globe for bilingual FR/EN) -- */
|
|
434
|
+
.dsrc-btn--lang::before {
|
|
435
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='8' cy='8' r='6' stroke='currentColor' stroke-width='1.5'/%3E%3Cellipse cx='8' cy='8' rx='3' ry='6' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M2 8h12' stroke='currentColor' stroke-width='1.5'/%3E%3C/svg%3E");
|
|
436
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Ccircle cx='8' cy='8' r='6' stroke='currentColor' stroke-width='1.5'/%3E%3Cellipse cx='8' cy='8' rx='3' ry='6' stroke='currentColor' stroke-width='1.5'/%3E%3Cpath d='M2 8h12' stroke='currentColor' stroke-width='1.5'/%3E%3C/svg%3E");
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/* -- Sort (double arrow up/down) -- */
|
|
440
|
+
.dsrc-btn--sort::before {
|
|
441
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 2l3 4H5l3-4zM8 14l-3-4h6l-3 4z' stroke='currentColor' stroke-width='1.5' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
442
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 2l3 4H5l3-4zM8 14l-3-4h6l-3 4z' stroke='currentColor' stroke-width='1.5' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/* -- Notification (bell) -- */
|
|
446
|
+
.dsrc-btn--notification {
|
|
447
|
+
position: relative;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
.dsrc-btn--notification::before {
|
|
451
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 1.5a4.5 4.5 0 00-4.5 4.5v3l-1 2h11l-1-2V6A4.5 4.5 0 008 1.5zM6.5 13a1.5 1.5 0 003 0' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
452
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M8 1.5a4.5 4.5 0 00-4.5 4.5v3l-1 2h11l-1-2V6A4.5 4.5 0 008 1.5zM6.5 13a1.5 1.5 0 003 0' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/* -- Menu (hamburger 3 lines) -- */
|
|
456
|
+
.dsrc-btn--menu::before {
|
|
457
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M2 4h12M2 8h12M2 12h12' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
458
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'%3E%3Cpath d='M2 4h12M2 8h12M2 12h12' stroke='currentColor' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/* Notification badge (counter overlay) */
|
|
462
|
+
.dsrc-btn__badge {
|
|
463
|
+
position: absolute;
|
|
464
|
+
top: -4px;
|
|
465
|
+
right: -4px;
|
|
466
|
+
display: inline-flex;
|
|
467
|
+
align-items: center;
|
|
468
|
+
justify-content: center;
|
|
469
|
+
min-width: 16px;
|
|
470
|
+
height: 16px;
|
|
471
|
+
padding: 0 4px;
|
|
472
|
+
font-size: var(--dsrc-font-size-nano);
|
|
473
|
+
font-weight: var(--dsrc-font-weight-bold);
|
|
474
|
+
line-height: 1;
|
|
475
|
+
color: var(--dsrc-color-blanc);
|
|
476
|
+
background-color: var(--dsrc-color-erreur-bordure);
|
|
477
|
+
border-radius: var(--dsrc-radius-round);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/* Empty badge (just a dot indicator) */
|
|
481
|
+
.dsrc-btn__badge:empty {
|
|
482
|
+
min-width: 8px;
|
|
483
|
+
height: 8px;
|
|
484
|
+
padding: 0;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
/* ============================================
|
|
489
|
+
* 14. Block / full-width button
|
|
490
|
+
* ============================================ */
|
|
491
|
+
|
|
492
|
+
.dsrc-btn--block {
|
|
493
|
+
width: 100%;
|
|
494
|
+
justify-content: center;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
/* ============================================
|
|
499
|
+
* 15. Disabled state
|
|
500
|
+
* ============================================ */
|
|
501
|
+
|
|
502
|
+
.dsrc-btn:disabled,
|
|
503
|
+
.dsrc-btn[aria-disabled="true"],
|
|
504
|
+
.dsrc-btn--disabled {
|
|
505
|
+
opacity: 0.5;
|
|
506
|
+
cursor: not-allowed;
|
|
507
|
+
pointer-events: none;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
/* ============================================
|
|
512
|
+
* 16. Loading state
|
|
513
|
+
* ============================================ */
|
|
514
|
+
|
|
515
|
+
.dsrc-btn--loading {
|
|
516
|
+
pointer-events: none;
|
|
517
|
+
position: relative;
|
|
518
|
+
color: transparent;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.dsrc-btn--loading::after {
|
|
522
|
+
content: "";
|
|
523
|
+
position: absolute;
|
|
524
|
+
width: 1em;
|
|
525
|
+
height: 1em;
|
|
526
|
+
border: var(--dsrc-border-width-default) solid currentColor;
|
|
527
|
+
border-right-color: transparent;
|
|
528
|
+
border-radius: 50%;
|
|
529
|
+
animation: dsrc-btn-spin 0.6s linear infinite;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* Spinner color per variant */
|
|
533
|
+
.dsrc-btn--primary.dsrc-btn--loading::after {
|
|
534
|
+
border-color: var(--dsrc-color-blanc);
|
|
535
|
+
border-right-color: transparent;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
.dsrc-btn--secondary.dsrc-btn--loading::after,
|
|
539
|
+
.dsrc-btn--tertiary-no-outline.dsrc-btn--loading::after {
|
|
540
|
+
border-color: var(--dsrc-color-primaire);
|
|
541
|
+
border-right-color: transparent;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
.dsrc-btn--tertiary.dsrc-btn--loading::after {
|
|
545
|
+
border-color: var(--dsrc-color-noir);
|
|
546
|
+
border-right-color: transparent;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.dsrc-btn--danger.dsrc-btn--loading::after {
|
|
550
|
+
border-color: var(--dsrc-color-blanc);
|
|
551
|
+
border-right-color: transparent;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.dsrc-btn--danger-outline.dsrc-btn--loading::after {
|
|
555
|
+
border-color: var(--dsrc-color-erreur-bordure);
|
|
556
|
+
border-right-color: transparent;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
@keyframes dsrc-btn-spin {
|
|
560
|
+
to {
|
|
561
|
+
transform: rotate(360deg);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
/* ============================================
|
|
567
|
+
* 17. Button group (<ul> wrapper)
|
|
568
|
+
*
|
|
569
|
+
* <ul class="dsrc-btns-group dsrc-btns-group--inline">
|
|
570
|
+
* <li><button class="dsrc-btn dsrc-btn--primary">OK</button></li>
|
|
571
|
+
* <li><button class="dsrc-btn dsrc-btn--secondary">Annuler</button></li>
|
|
572
|
+
* </ul>
|
|
573
|
+
* ============================================ */
|
|
574
|
+
|
|
575
|
+
.dsrc-btns-group {
|
|
576
|
+
display: flex;
|
|
577
|
+
flex-wrap: wrap;
|
|
578
|
+
gap: var(--dsrc-spacing-2);
|
|
579
|
+
align-items: center;
|
|
580
|
+
padding: 0;
|
|
581
|
+
margin: 0;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.dsrc-btns-group li {
|
|
585
|
+
list-style: none;
|
|
586
|
+
display: flex;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/* Direction modifiers */
|
|
590
|
+
.dsrc-btns-group--inline {
|
|
591
|
+
flex-direction: row;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
.dsrc-btns-group--inline-reverse {
|
|
595
|
+
flex-direction: row-reverse;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
/* Vertical stack */
|
|
599
|
+
.dsrc-btns-group--vertical {
|
|
600
|
+
flex-direction: column;
|
|
601
|
+
align-items: stretch;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/* Alignment modifiers */
|
|
605
|
+
.dsrc-btns-group--right {
|
|
606
|
+
justify-content: flex-end;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
.dsrc-btns-group--center {
|
|
610
|
+
justify-content: center;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/* Equisized: all buttons take equal width */
|
|
614
|
+
.dsrc-btns-group--equisized .dsrc-btn {
|
|
615
|
+
flex: 1;
|
|
616
|
+
justify-content: center;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/* Size modifiers propagated to group children */
|
|
620
|
+
.dsrc-btns-group--sm .dsrc-btn {
|
|
621
|
+
font-size: var(--dsrc-font-size-caption);
|
|
622
|
+
padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
|
|
623
|
+
min-height: 32px;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
.dsrc-btns-group--lg .dsrc-btn {
|
|
627
|
+
font-size: var(--dsrc-font-size-body);
|
|
628
|
+
padding: var(--dsrc-spacing-3) var(--dsrc-spacing-5);
|
|
629
|
+
min-height: 48px;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
/* ============================================
|
|
634
|
+
* 18. Responsive button groups
|
|
635
|
+
*
|
|
636
|
+
* Mobile-first: vertical (stacked, full-width).
|
|
637
|
+
* Above breakpoint: horizontal (inline).
|
|
638
|
+
*
|
|
639
|
+
* <ul class="dsrc-btns-group dsrc-btns-group--inline-sm">...</ul>
|
|
640
|
+
* <ul class="dsrc-btns-group dsrc-btns-group--inline-md">...</ul>
|
|
641
|
+
* <ul class="dsrc-btns-group dsrc-btns-group--inline-lg">...</ul>
|
|
642
|
+
* ============================================ */
|
|
643
|
+
|
|
644
|
+
/* Base state: vertical */
|
|
645
|
+
.dsrc-btns-group--inline-sm,
|
|
646
|
+
.dsrc-btns-group--inline-md,
|
|
647
|
+
.dsrc-btns-group--inline-lg {
|
|
648
|
+
flex-direction: column;
|
|
649
|
+
align-items: stretch;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.dsrc-btns-group--inline-sm .dsrc-btn,
|
|
653
|
+
.dsrc-btns-group--inline-md .dsrc-btn,
|
|
654
|
+
.dsrc-btns-group--inline-lg .dsrc-btn {
|
|
655
|
+
width: 100%;
|
|
656
|
+
justify-content: center;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/* sm breakpoint (>= 576px) */
|
|
660
|
+
@media (min-width: 576px) {
|
|
661
|
+
.dsrc-btns-group--inline-sm {
|
|
662
|
+
flex-direction: row;
|
|
663
|
+
align-items: center;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
.dsrc-btns-group--inline-sm .dsrc-btn {
|
|
667
|
+
width: auto;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
/* md breakpoint (>= 768px) */
|
|
672
|
+
@media (min-width: 768px) {
|
|
673
|
+
.dsrc-btns-group--inline-md {
|
|
674
|
+
flex-direction: row;
|
|
675
|
+
align-items: center;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
.dsrc-btns-group--inline-md .dsrc-btn {
|
|
679
|
+
width: auto;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/* lg breakpoint (>= 1024px) */
|
|
684
|
+
@media (min-width: 1024px) {
|
|
685
|
+
.dsrc-btns-group--inline-lg {
|
|
686
|
+
flex-direction: row;
|
|
687
|
+
align-items: center;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.dsrc-btns-group--inline-lg .dsrc-btn {
|
|
691
|
+
width: auto;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
/* ============================================
|
|
697
|
+
* 19. Enlarge-link utility (DSFR pattern)
|
|
698
|
+
*
|
|
699
|
+
* Makes the entire container clickable via the
|
|
700
|
+
* first <a> or <button> inside it.
|
|
701
|
+
*
|
|
702
|
+
* <div class="dsrc-card dsrc-enlarge-link">
|
|
703
|
+
* <a href="/page">Titre du lien</a>
|
|
704
|
+
* <p>Description...</p>
|
|
705
|
+
* </div>
|
|
706
|
+
* ============================================ */
|
|
707
|
+
|
|
708
|
+
.dsrc-enlarge-link {
|
|
709
|
+
position: relative;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
.dsrc-enlarge-link a::after,
|
|
713
|
+
.dsrc-enlarge-link button::after {
|
|
714
|
+
content: "";
|
|
715
|
+
display: block;
|
|
716
|
+
position: absolute;
|
|
717
|
+
inset: 0;
|
|
718
|
+
z-index: 1;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/* Only the first link/button gets the enlarged click area */
|
|
722
|
+
.dsrc-enlarge-link a ~ a::after,
|
|
723
|
+
.dsrc-enlarge-link a ~ button::after,
|
|
724
|
+
.dsrc-enlarge-link button ~ a::after,
|
|
725
|
+
.dsrc-enlarge-link button ~ button::after {
|
|
726
|
+
content: none;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/* Ensure secondary interactive elements sit above the overlay */
|
|
730
|
+
.dsrc-enlarge-link a ~ a,
|
|
731
|
+
.dsrc-enlarge-link a ~ button,
|
|
732
|
+
.dsrc-enlarge-link button ~ a,
|
|
733
|
+
.dsrc-enlarge-link button ~ button {
|
|
734
|
+
position: relative;
|
|
735
|
+
z-index: 2;
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
|
|
739
|
+
/* ============================================
|
|
740
|
+
* 20. High contrast (forced-colors)
|
|
741
|
+
* ============================================ */
|
|
742
|
+
|
|
743
|
+
@media (forced-colors: active) {
|
|
744
|
+
.dsrc-btn {
|
|
745
|
+
border: 2px solid ButtonText;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
.dsrc-btn--tertiary-no-outline {
|
|
749
|
+
border-color: ButtonText;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.dsrc-btn:disabled,
|
|
753
|
+
.dsrc-btn[aria-disabled="true"],
|
|
754
|
+
.dsrc-btn--disabled {
|
|
755
|
+
border-color: GrayText;
|
|
756
|
+
color: GrayText;
|
|
757
|
+
opacity: 1;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
.dsrc-btn:focus-visible {
|
|
761
|
+
outline: 2px solid Highlight;
|
|
762
|
+
outline-offset: 2px;
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.dsrc-btn--loading::after {
|
|
766
|
+
border-color: ButtonText;
|
|
767
|
+
border-right-color: transparent;
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
/* Icon pseudo-elements */
|
|
771
|
+
.dsrc-btn--icon-left::before,
|
|
772
|
+
.dsrc-btn--icon-right::after,
|
|
773
|
+
.dsrc-btn--account::before,
|
|
774
|
+
.dsrc-btn--print::before,
|
|
775
|
+
.dsrc-btn--share::before,
|
|
776
|
+
.dsrc-btn--lang::before,
|
|
777
|
+
.dsrc-btn--sort::before,
|
|
778
|
+
.dsrc-btn--notification::before,
|
|
779
|
+
.dsrc-btn--menu::before {
|
|
780
|
+
background-color: ButtonText;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/* Notification badge */
|
|
784
|
+
.dsrc-btn__badge {
|
|
785
|
+
border: 1px solid ButtonText;
|
|
786
|
+
forced-color-adjust: none;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
/* ============================================
|
|
792
|
+
* 21. Reduced motion
|
|
793
|
+
* ============================================ */
|
|
794
|
+
|
|
795
|
+
@media (prefers-reduced-motion: reduce) {
|
|
796
|
+
.dsrc-btn {
|
|
797
|
+
transition: none;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.dsrc-btn--loading::after {
|
|
801
|
+
animation: none;
|
|
802
|
+
border-right-color: currentColor;
|
|
803
|
+
opacity: 0.5;
|
|
804
|
+
}
|
|
805
|
+
}
|