@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,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
|
+
}
|