@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.
Files changed (51) hide show
  1. package/dist/dsrc.css +10743 -0
  2. package/dist/dsrc.min.css +1 -0
  3. package/package.json +44 -0
  4. package/src/base/print.css +404 -0
  5. package/src/base/reset.css +106 -0
  6. package/src/components/accordion/accordion.css +216 -0
  7. package/src/components/alert/alert.css +187 -0
  8. package/src/components/badge/badge.css +178 -0
  9. package/src/components/breadcrumb/breadcrumb.css +235 -0
  10. package/src/components/button/button.css +805 -0
  11. package/src/components/callout/callout.css +95 -0
  12. package/src/components/card/card.css +551 -0
  13. package/src/components/checkbox/checkbox.css +257 -0
  14. package/src/components/consent/consent.css +297 -0
  15. package/src/components/download/download.css +66 -0
  16. package/src/components/dropdown/dropdown.css +295 -0
  17. package/src/components/highlight/highlight.css +74 -0
  18. package/src/components/input/input.css +337 -0
  19. package/src/components/label/label.css +29 -0
  20. package/src/components/link/link.css +208 -0
  21. package/src/components/logo/logo.css +86 -0
  22. package/src/components/modal/modal.css +271 -0
  23. package/src/components/notice/notice.css +211 -0
  24. package/src/components/pagination/pagination.css +132 -0
  25. package/src/components/password/password.css +195 -0
  26. package/src/components/quote/quote.css +156 -0
  27. package/src/components/radio/radio.css +270 -0
  28. package/src/components/range/range.css +362 -0
  29. package/src/components/search/search.css +129 -0
  30. package/src/components/select/select.css +130 -0
  31. package/src/components/sidemenu/sidemenu.css +268 -0
  32. package/src/components/spinner/spinner.css +73 -0
  33. package/src/components/stepper/stepper.css +140 -0
  34. package/src/components/summary/summary.css +142 -0
  35. package/src/components/tab/tab.css +184 -0
  36. package/src/components/table/table.css +556 -0
  37. package/src/components/tag/tag.css +201 -0
  38. package/src/components/tile/tile.css +389 -0
  39. package/src/components/toggle/toggle.css +229 -0
  40. package/src/components/tooltip/tooltip.css +158 -0
  41. package/src/components/translate/translate.css +356 -0
  42. package/src/components/upload/upload.css +185 -0
  43. package/src/index.css +77 -0
  44. package/src/layout/bandeau/bandeau.css +44 -0
  45. package/src/layout/entete/entete.css +130 -0
  46. package/src/layout/footer/footer.css +107 -0
  47. package/src/layout/grid/grid.css +197 -0
  48. package/src/layout/hero/hero.css +86 -0
  49. package/src/layout/main/main.css +123 -0
  50. package/src/layout/navigation/navigation.css +206 -0
  51. package/src/utilities/utilities.css +430 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * DSRC Callout Component
3
+ *
4
+ * Highlighted box with a colored left accent bar,
5
+ * used to draw attention to important information.
6
+ *
7
+ * Variants:
8
+ * --info / --success / --warning / --error (semantic colors)
9
+ *
10
+ * Usage:
11
+ * <div class="dsrc-callout">
12
+ * <h3 class="dsrc-callout__title">Titre</h3>
13
+ * <p class="dsrc-callout__text">Contenu informatif.</p>
14
+ * </div>
15
+ */
16
+
17
+
18
+ /* ============================================
19
+ * 1. Base callout
20
+ * ============================================ */
21
+
22
+ .dsrc-callout {
23
+ position: relative;
24
+ padding: var(--dsrc-spacing-6);
25
+ margin: var(--dsrc-spacing-4) 0;
26
+ background-color: var(--dsrc-color-gris-50);
27
+ border-left: 4px solid var(--dsrc-color-primaire);
28
+ }
29
+
30
+ .dsrc-callout__title {
31
+ font-family: var(--dsrc-font-family-sans);
32
+ font-size: var(--dsrc-font-size-h4);
33
+ font-weight: 700;
34
+ line-height: 1.5;
35
+ margin: 0 0 var(--dsrc-spacing-2);
36
+ }
37
+
38
+ .dsrc-callout__text {
39
+ font-family: var(--dsrc-font-family-sans);
40
+ font-size: var(--dsrc-font-size-lg);
41
+ line-height: 1.5;
42
+ margin: 0;
43
+ }
44
+
45
+ .dsrc-callout .dsrc-btn {
46
+ margin-top: var(--dsrc-spacing-4);
47
+ }
48
+
49
+
50
+ /* ============================================
51
+ * 2. Semantic variants
52
+ * ============================================ */
53
+
54
+ .dsrc-callout--info {
55
+ background-color: var(--dsrc-color-info-fond);
56
+ border-left-color: var(--dsrc-color-info-bordure);
57
+ }
58
+
59
+ .dsrc-callout--success {
60
+ background-color: var(--dsrc-color-succes-fond);
61
+ border-left-color: var(--dsrc-color-succes-bordure);
62
+ }
63
+
64
+ .dsrc-callout--warning {
65
+ background-color: var(--dsrc-color-avertissement-fond);
66
+ border-left-color: var(--dsrc-color-avertissement-bordure);
67
+ }
68
+
69
+ .dsrc-callout--error {
70
+ background-color: var(--dsrc-color-erreur-fond);
71
+ border-left-color: var(--dsrc-color-erreur-bordure);
72
+ }
73
+
74
+
75
+ /* ============================================
76
+ * 3. High contrast (forced-colors)
77
+ * ============================================ */
78
+
79
+ @media (forced-colors: active) {
80
+ .dsrc-callout {
81
+ border-left: 4px solid ButtonText;
82
+ }
83
+ }
84
+
85
+
86
+ /* ============================================
87
+ * 4. Print
88
+ * ============================================ */
89
+
90
+ @media print {
91
+ .dsrc-callout {
92
+ border: 1px solid var(--dsrc-color-gris-400);
93
+ border-left-width: 4px;
94
+ }
95
+ }
@@ -0,0 +1,551 @@
1
+ /**
2
+ * DSRC Card Component
3
+ * Design Systeme de la Republique du Cameroun
4
+ *
5
+ * Architecture alignee sur le DSFR (Design Systeme de l'Etat francais).
6
+ * Le composant carte affiche du contenu avec image, titre, description
7
+ * et actions optionnelles.
8
+ *
9
+ * Structure HTML :
10
+ *
11
+ * <div class="dsrc-card dsrc-enlarge-link">
12
+ * <div class="dsrc-card__body">
13
+ * <div class="dsrc-card__content">
14
+ * <h3 class="dsrc-card__title">
15
+ * <a href="#">Titre de la carte</a>
16
+ * </h3>
17
+ * <p class="dsrc-card__desc">Description de la carte</p>
18
+ * <div class="dsrc-card__start">
19
+ * <!-- Tags ou badges -->
20
+ * </div>
21
+ * <div class="dsrc-card__end">
22
+ * <p class="dsrc-card__detail">Detail optionnel</p>
23
+ * </div>
24
+ * </div>
25
+ * <div class="dsrc-card__footer">
26
+ * <!-- Boutons d'action -->
27
+ * </div>
28
+ * </div>
29
+ * <div class="dsrc-card__header">
30
+ * <div class="dsrc-card__img">
31
+ * <img class="dsrc-responsive-img" src="image.jpg" alt="">
32
+ * </div>
33
+ * </div>
34
+ * </div>
35
+ *
36
+ * Modificateurs :
37
+ * --grey Fond gris au lieu de blanc
38
+ * --shadow Elevation avec ombre portee
39
+ * --no-border Sans bordure
40
+ * --no-background Fond transparent
41
+ * --accent Barre verte en haut
42
+ * --sm Padding reduit
43
+ * --lg Padding et titre plus grands
44
+ * --horizontal Image 1/3, contenu 2/3
45
+ * --horizontal-half Image 1/2, contenu 1/2
46
+ * --horizontal-tier Image 1/3, contenu 2/3 (alias explicite)
47
+ *
48
+ * Note : .dsrc-enlarge-link est defini dans button.css.
49
+ */
50
+
51
+
52
+ /* ==========================================================================
53
+ 1. RESPONSIVE IMAGE
54
+ Utility class for images that fill their container and crop via
55
+ object-fit. Used inside .dsrc-card__img and elsewhere.
56
+ ========================================================================== */
57
+
58
+ .dsrc-responsive-img {
59
+ display: block;
60
+ width: 100%;
61
+ height: 100%;
62
+ object-fit: cover;
63
+ }
64
+
65
+
66
+ /* ==========================================================================
67
+ 2. IMAGE ASPECT-RATIO UTILITIES
68
+ Apply to .dsrc-card__img to control the visible ratio of the image.
69
+ ========================================================================== */
70
+
71
+ .dsrc-ratio-16x9 { aspect-ratio: 16 / 9; }
72
+ .dsrc-ratio-4x3 { aspect-ratio: 4 / 3; }
73
+ .dsrc-ratio-3x2 { aspect-ratio: 3 / 2; }
74
+ .dsrc-ratio-1x1 { aspect-ratio: 1 / 1; }
75
+
76
+
77
+ /* ==========================================================================
78
+ 3. BASE CARD
79
+ Default vertical card layout.
80
+ In the DOM, .dsrc-card__body comes BEFORE .dsrc-card__header so that
81
+ screen readers see the content first. We use flexbox + order to
82
+ render the image on top visually.
83
+ ========================================================================== */
84
+
85
+ .dsrc-card {
86
+ display: flex;
87
+ flex-direction: column;
88
+ position: relative;
89
+ background-color: var(--dsrc-color-blanc);
90
+ border: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
91
+ border-radius: var(--dsrc-radius-default);
92
+ overflow: hidden;
93
+ font-family: var(--dsrc-font-family-sans);
94
+ /* Smooth hover transitions */
95
+ transition:
96
+ box-shadow var(--dsrc-transition-duration-fast) ease,
97
+ border-color var(--dsrc-transition-duration-fast) ease;
98
+ }
99
+
100
+
101
+ /* ==========================================================================
102
+ 4. CARD HEADER (image area)
103
+ Placed last in the DOM but displayed first visually via order: -1.
104
+ ========================================================================== */
105
+
106
+ .dsrc-card__header {
107
+ order: -1;
108
+ padding: 0;
109
+ }
110
+
111
+ .dsrc-card__img {
112
+ overflow: hidden;
113
+ /* Default aspect ratio; override with .dsrc-ratio-* on this element */
114
+ aspect-ratio: 3 / 2;
115
+ }
116
+
117
+ .dsrc-card__img > img,
118
+ .dsrc-card__img > .dsrc-responsive-img {
119
+ display: block;
120
+ width: 100%;
121
+ height: 100%;
122
+ object-fit: cover;
123
+ }
124
+
125
+
126
+ /* ==========================================================================
127
+ 5. CARD BODY
128
+ Contains .dsrc-card__content and optionally .dsrc-card__footer.
129
+ ========================================================================== */
130
+
131
+ .dsrc-card__body {
132
+ display: flex;
133
+ flex-direction: column;
134
+ flex: 1 1 auto;
135
+ padding: 0;
136
+ }
137
+
138
+
139
+ /* ==========================================================================
140
+ 6. CARD CONTENT
141
+ Title, description, start zone (tags), end zone (detail).
142
+ ========================================================================== */
143
+
144
+ .dsrc-card__content {
145
+ display: flex;
146
+ flex-direction: column;
147
+ flex: 1 1 auto;
148
+ padding: var(--dsrc-spacing-4) var(--dsrc-spacing-5) var(--dsrc-spacing-3);
149
+ }
150
+
151
+ /* --------------------------------------------------------------------------
152
+ 6.1 Title
153
+ -------------------------------------------------------------------------- */
154
+
155
+ .dsrc-card__title {
156
+ font-family: var(--dsrc-font-family-sans);
157
+ font-size: var(--dsrc-font-size-body);
158
+ font-weight: var(--dsrc-font-weight-bold);
159
+ line-height: var(--dsrc-font-line-height-tight);
160
+ color: var(--dsrc-color-noir);
161
+ margin: 0 0 var(--dsrc-spacing-2) 0;
162
+ }
163
+
164
+ .dsrc-card__title a {
165
+ color: inherit;
166
+ text-decoration: none;
167
+ }
168
+
169
+ .dsrc-card__title a:hover {
170
+ text-decoration: underline;
171
+ }
172
+
173
+ /* --------------------------------------------------------------------------
174
+ 6.2 Description
175
+ -------------------------------------------------------------------------- */
176
+
177
+ .dsrc-card__desc {
178
+ font-size: var(--dsrc-font-size-small);
179
+ line-height: var(--dsrc-font-line-height-normal);
180
+ color: var(--dsrc-color-gris-600);
181
+ margin: 0 0 var(--dsrc-spacing-3) 0;
182
+ }
183
+
184
+ /* --------------------------------------------------------------------------
185
+ 6.3 Start zone (tags, badges)
186
+ -------------------------------------------------------------------------- */
187
+
188
+ .dsrc-card__start {
189
+ display: flex;
190
+ flex-wrap: wrap;
191
+ gap: var(--dsrc-spacing-2);
192
+ margin-bottom: var(--dsrc-spacing-3);
193
+ order: -1;
194
+ /* Tags appear above the title visually, matching DSFR behavior */
195
+ }
196
+
197
+ /* --------------------------------------------------------------------------
198
+ 6.4 End zone (detail, metadata)
199
+ -------------------------------------------------------------------------- */
200
+
201
+ .dsrc-card__end {
202
+ margin-top: auto;
203
+ padding-top: var(--dsrc-spacing-2);
204
+ }
205
+
206
+ .dsrc-card__detail {
207
+ font-size: var(--dsrc-font-size-caption);
208
+ line-height: var(--dsrc-font-line-height-normal);
209
+ color: var(--dsrc-color-gris-400);
210
+ margin: 0;
211
+ }
212
+
213
+
214
+ /* ==========================================================================
215
+ 7. CARD FOOTER
216
+ Action buttons inside the body, below the content.
217
+ ========================================================================== */
218
+
219
+ .dsrc-card__footer {
220
+ display: flex;
221
+ flex-wrap: wrap;
222
+ gap: var(--dsrc-spacing-3);
223
+ align-items: center;
224
+ padding: 0 var(--dsrc-spacing-5) var(--dsrc-spacing-4);
225
+ }
226
+
227
+ /* Ensure footer buttons remain clickable above dsrc-enlarge-link overlay */
228
+ .dsrc-card__footer .dsrc-btn,
229
+ .dsrc-card__footer a,
230
+ .dsrc-card__footer button {
231
+ position: relative;
232
+ z-index: 2;
233
+ }
234
+
235
+
236
+ /* ==========================================================================
237
+ 8. HOVER / FOCUS / ACTIVE
238
+ Interaction states for the card container.
239
+ ========================================================================== */
240
+
241
+ .dsrc-enlarge-link.dsrc-card:hover {
242
+ box-shadow: var(--dsrc-shadow-md);
243
+ border-color: var(--dsrc-color-gris-400);
244
+ }
245
+
246
+ .dsrc-enlarge-link.dsrc-card:active {
247
+ box-shadow: var(--dsrc-shadow-sm);
248
+ }
249
+
250
+ /* Focus ring appears around the link inside the title */
251
+ .dsrc-card__title a:focus-visible {
252
+ outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
253
+ outline-offset: var(--dsrc-outline-offset);
254
+ }
255
+
256
+
257
+ /* ==========================================================================
258
+ 9. SIZE MODIFIERS
259
+ ========================================================================== */
260
+
261
+ /* --------------------------------------------------------------------------
262
+ 9.1 Small (--sm): reduced padding
263
+ -------------------------------------------------------------------------- */
264
+
265
+ .dsrc-card--sm .dsrc-card__content {
266
+ padding: var(--dsrc-spacing-3) var(--dsrc-spacing-3) var(--dsrc-spacing-2);
267
+ }
268
+
269
+ .dsrc-card--sm .dsrc-card__footer {
270
+ padding: 0 var(--dsrc-spacing-3) var(--dsrc-spacing-3);
271
+ }
272
+
273
+ .dsrc-card--sm .dsrc-card__title {
274
+ font-size: var(--dsrc-font-size-small);
275
+ }
276
+
277
+ .dsrc-card--sm .dsrc-card__desc {
278
+ font-size: var(--dsrc-font-size-caption);
279
+ }
280
+
281
+ /* --------------------------------------------------------------------------
282
+ 9.2 Large (--lg): increased padding, bigger title
283
+ -------------------------------------------------------------------------- */
284
+
285
+ .dsrc-card--lg .dsrc-card__content {
286
+ padding: var(--dsrc-spacing-5) var(--dsrc-spacing-6) var(--dsrc-spacing-4);
287
+ }
288
+
289
+ .dsrc-card--lg .dsrc-card__footer {
290
+ padding: 0 var(--dsrc-spacing-6) var(--dsrc-spacing-5);
291
+ }
292
+
293
+ .dsrc-card--lg .dsrc-card__title {
294
+ font-size: var(--dsrc-font-size-h4, 1.25rem);
295
+ margin-bottom: var(--dsrc-spacing-3);
296
+ }
297
+
298
+ .dsrc-card--lg .dsrc-card__desc {
299
+ font-size: var(--dsrc-font-size-body);
300
+ }
301
+
302
+
303
+ /* ==========================================================================
304
+ 10. VISUAL MODIFIERS
305
+ ========================================================================== */
306
+
307
+ /* --------------------------------------------------------------------------
308
+ 10.1 --grey: grey background instead of white
309
+ -------------------------------------------------------------------------- */
310
+
311
+ .dsrc-card--grey {
312
+ background-color: var(--dsrc-color-gris-50);
313
+ }
314
+
315
+ /* --------------------------------------------------------------------------
316
+ 10.2 --shadow: elevated with shadow
317
+ -------------------------------------------------------------------------- */
318
+
319
+ .dsrc-card--shadow {
320
+ box-shadow: var(--dsrc-shadow-md);
321
+ border-color: transparent;
322
+ }
323
+
324
+ .dsrc-enlarge-link.dsrc-card--shadow:hover {
325
+ box-shadow: var(--dsrc-shadow-lg);
326
+ }
327
+
328
+ /* --------------------------------------------------------------------------
329
+ 10.3 --no-border: remove border
330
+ -------------------------------------------------------------------------- */
331
+
332
+ .dsrc-card--no-border {
333
+ border: 0;
334
+ }
335
+
336
+ /* --------------------------------------------------------------------------
337
+ 10.4 --no-background: transparent background
338
+ -------------------------------------------------------------------------- */
339
+
340
+ .dsrc-card--no-background {
341
+ background-color: transparent;
342
+ }
343
+
344
+ /* --------------------------------------------------------------------------
345
+ 10.5 --accent: top green accent bar
346
+ -------------------------------------------------------------------------- */
347
+
348
+ .dsrc-card--accent {
349
+ border-top: var(--dsrc-border-width-thick) solid var(--dsrc-color-primaire);
350
+ }
351
+
352
+
353
+ /* ==========================================================================
354
+ 11. HORIZONTAL VARIANTS
355
+ Side-by-side image + content layout.
356
+ At mobile (<768px) they stack vertically.
357
+ ========================================================================== */
358
+
359
+ /* --------------------------------------------------------------------------
360
+ 11.1 --horizontal (default 1/3 image, 2/3 content)
361
+ -------------------------------------------------------------------------- */
362
+
363
+ .dsrc-card--horizontal {
364
+ flex-direction: row;
365
+ }
366
+
367
+ .dsrc-card--horizontal > .dsrc-card__header {
368
+ order: 0;
369
+ flex: 0 0 33.333%;
370
+ max-width: 33.333%;
371
+ }
372
+
373
+ .dsrc-card--horizontal > .dsrc-card__header .dsrc-card__img {
374
+ aspect-ratio: auto;
375
+ height: 100%;
376
+ }
377
+
378
+ .dsrc-card--horizontal > .dsrc-card__body {
379
+ flex: 1 1 66.666%;
380
+ justify-content: center;
381
+ }
382
+
383
+ /* --------------------------------------------------------------------------
384
+ 11.2 --horizontal-half (50/50)
385
+ -------------------------------------------------------------------------- */
386
+
387
+ .dsrc-card--horizontal-half {
388
+ flex-direction: row;
389
+ }
390
+
391
+ .dsrc-card--horizontal-half > .dsrc-card__header {
392
+ order: 0;
393
+ flex: 0 0 50%;
394
+ max-width: 50%;
395
+ }
396
+
397
+ .dsrc-card--horizontal-half > .dsrc-card__header .dsrc-card__img {
398
+ aspect-ratio: auto;
399
+ height: 100%;
400
+ }
401
+
402
+ .dsrc-card--horizontal-half > .dsrc-card__body {
403
+ flex: 1 1 50%;
404
+ justify-content: center;
405
+ }
406
+
407
+ /* --------------------------------------------------------------------------
408
+ 11.3 --horizontal-tier (1/3 image, 2/3 content - explicit alias)
409
+ -------------------------------------------------------------------------- */
410
+
411
+ .dsrc-card--horizontal-tier {
412
+ flex-direction: row;
413
+ }
414
+
415
+ .dsrc-card--horizontal-tier > .dsrc-card__header {
416
+ order: 0;
417
+ flex: 0 0 33.333%;
418
+ max-width: 33.333%;
419
+ }
420
+
421
+ .dsrc-card--horizontal-tier > .dsrc-card__header .dsrc-card__img {
422
+ aspect-ratio: auto;
423
+ height: 100%;
424
+ }
425
+
426
+ .dsrc-card--horizontal-tier > .dsrc-card__body {
427
+ flex: 1 1 66.666%;
428
+ justify-content: center;
429
+ }
430
+
431
+ /* --------------------------------------------------------------------------
432
+ 11.4 Responsive: horizontal cards stack on mobile
433
+ -------------------------------------------------------------------------- */
434
+
435
+ @media (max-width: 767px) {
436
+ .dsrc-card--horizontal,
437
+ .dsrc-card--horizontal-half,
438
+ .dsrc-card--horizontal-tier {
439
+ flex-direction: column;
440
+ }
441
+
442
+ .dsrc-card--horizontal > .dsrc-card__header,
443
+ .dsrc-card--horizontal-half > .dsrc-card__header,
444
+ .dsrc-card--horizontal-tier > .dsrc-card__header {
445
+ flex: none;
446
+ max-width: 100%;
447
+ order: -1;
448
+ }
449
+
450
+ .dsrc-card--horizontal > .dsrc-card__header .dsrc-card__img,
451
+ .dsrc-card--horizontal-half > .dsrc-card__header .dsrc-card__img,
452
+ .dsrc-card--horizontal-tier > .dsrc-card__header .dsrc-card__img {
453
+ aspect-ratio: 3 / 2;
454
+ height: auto;
455
+ }
456
+
457
+ .dsrc-card--horizontal > .dsrc-card__body,
458
+ .dsrc-card--horizontal-half > .dsrc-card__body,
459
+ .dsrc-card--horizontal-tier > .dsrc-card__body {
460
+ flex: none;
461
+ }
462
+ }
463
+
464
+
465
+ /* ==========================================================================
466
+ 12. CARD WITHOUT IMAGE
467
+ When there is no .dsrc-card__header, the body spans the full card.
468
+ No special CSS needed -- flex: 1 on body handles it.
469
+ Add top padding to content so it is not flush against border.
470
+ ========================================================================== */
471
+
472
+ .dsrc-card:not(:has(.dsrc-card__header)) .dsrc-card__content {
473
+ padding-top: var(--dsrc-spacing-5);
474
+ }
475
+
476
+
477
+ /* ==========================================================================
478
+ 13. CARD GRID
479
+ Auto-responsive grid for multiple cards.
480
+ ========================================================================== */
481
+
482
+ .dsrc-card-grid {
483
+ display: grid;
484
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
485
+ gap: var(--dsrc-spacing-5);
486
+ }
487
+
488
+ .dsrc-card-grid > .dsrc-card {
489
+ /* Each card stretches to fill the grid cell height */
490
+ display: flex;
491
+ flex-direction: column;
492
+ }
493
+
494
+ .dsrc-card-grid > .dsrc-card > .dsrc-card__body {
495
+ flex: 1;
496
+ }
497
+
498
+
499
+ /* ==========================================================================
500
+ 14. PRINT
501
+ Strip decorations for print output.
502
+ ========================================================================== */
503
+
504
+ @media print {
505
+ .dsrc-card {
506
+ box-shadow: none;
507
+ border: var(--dsrc-border-width-thin) solid var(--dsrc-color-gris-200);
508
+ break-inside: avoid;
509
+ }
510
+
511
+ .dsrc-card__title a::after {
512
+ content: " (" attr(href) ")";
513
+ font-weight: var(--dsrc-font-weight-medium);
514
+ font-size: var(--dsrc-font-size-caption);
515
+ }
516
+ }
517
+
518
+
519
+ /* ==========================================================================
520
+ 15. HIGH CONTRAST (forced-colors)
521
+ ========================================================================== */
522
+
523
+ @media (forced-colors: active) {
524
+ .dsrc-card {
525
+ border: 1px solid ButtonText;
526
+ box-shadow: none;
527
+ }
528
+
529
+ .dsrc-card--shadow {
530
+ box-shadow: none;
531
+ }
532
+
533
+ .dsrc-card--accent {
534
+ border-top: 3px solid Highlight;
535
+ }
536
+
537
+ .dsrc-card__title a:focus-visible {
538
+ outline: 2px solid Highlight;
539
+ }
540
+ }
541
+
542
+
543
+ /* ==========================================================================
544
+ 16. REDUCED MOTION
545
+ ========================================================================== */
546
+
547
+ @media (prefers-reduced-motion: reduce) {
548
+ .dsrc-card {
549
+ transition: none;
550
+ }
551
+ }