@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,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSRC Alert Component
|
|
3
|
+
* Composant d'alerte contextuelle (en page)
|
|
4
|
+
*
|
|
5
|
+
* Aligne sur les patrons du DSFR (fr-alert) adaptes pour le DSRC.
|
|
6
|
+
* - Barre d'accent a gauche (border-left)
|
|
7
|
+
* - Texte sombre (--dsrc-color-noir), fond pastel de la variante
|
|
8
|
+
* - 4 variantes : --info, --success, --warning, --error
|
|
9
|
+
* - Variante sans type : neutre (gris)
|
|
10
|
+
* - Taille reduite : --sm (ligne unique, pas de titre)
|
|
11
|
+
* - Fermable : bouton .dsrc-btn--close
|
|
12
|
+
*
|
|
13
|
+
* Markup:
|
|
14
|
+
*
|
|
15
|
+
* <!-- Avec titre -->
|
|
16
|
+
* <div class="dsrc-alert dsrc-alert--info" role="alert">
|
|
17
|
+
* <h3 class="dsrc-alert__title">Titre de l'information</h3>
|
|
18
|
+
* <p>Description optionnelle plus detaillee.</p>
|
|
19
|
+
* </div>
|
|
20
|
+
*
|
|
21
|
+
* <!-- Sans titre -->
|
|
22
|
+
* <div class="dsrc-alert dsrc-alert--info" role="alert">
|
|
23
|
+
* <p>Information : texte de l'alerte.</p>
|
|
24
|
+
* </div>
|
|
25
|
+
*
|
|
26
|
+
* <!-- Taille reduite -->
|
|
27
|
+
* <div class="dsrc-alert dsrc-alert--info dsrc-alert--sm" role="alert">
|
|
28
|
+
* <p>Information courte.</p>
|
|
29
|
+
* </div>
|
|
30
|
+
*
|
|
31
|
+
* <!-- Fermable -->
|
|
32
|
+
* <div class="dsrc-alert dsrc-alert--info" role="alert">
|
|
33
|
+
* <h3 class="dsrc-alert__title">Information</h3>
|
|
34
|
+
* <p>Cliquer sur la croix pour fermer.</p>
|
|
35
|
+
* <button type="button" class="dsrc-btn dsrc-btn--close">Masquer</button>
|
|
36
|
+
* </div>
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/* ============================================
|
|
40
|
+
* 1. Base
|
|
41
|
+
* ============================================ */
|
|
42
|
+
|
|
43
|
+
.dsrc-alert {
|
|
44
|
+
position: relative;
|
|
45
|
+
display: block;
|
|
46
|
+
padding: var(--dsrc-spacing-4) var(--dsrc-spacing-5);
|
|
47
|
+
border-radius: var(--dsrc-radius-default);
|
|
48
|
+
font-family: var(--dsrc-font-family-sans);
|
|
49
|
+
font-size: var(--dsrc-font-size-body);
|
|
50
|
+
line-height: var(--dsrc-font-line-height-relaxed);
|
|
51
|
+
color: var(--dsrc-color-noir);
|
|
52
|
+
width: 100%;
|
|
53
|
+
|
|
54
|
+
/* Accent bar - left border (thicker than default, DSFR-inspired) */
|
|
55
|
+
border-left-style: solid;
|
|
56
|
+
border-left-width: var(--dsrc-spacing-1); /* 4px */
|
|
57
|
+
border-left-color: var(--dsrc-color-gris-400);
|
|
58
|
+
|
|
59
|
+
/* Default (no type): neutral grey */
|
|
60
|
+
background-color: var(--dsrc-color-gris-50);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* ============================================
|
|
64
|
+
* 2. Title
|
|
65
|
+
* ============================================ */
|
|
66
|
+
|
|
67
|
+
.dsrc-alert__title {
|
|
68
|
+
font-size: var(--dsrc-font-size-h4);
|
|
69
|
+
font-weight: var(--dsrc-font-weight-semibold);
|
|
70
|
+
line-height: var(--dsrc-font-line-height-normal);
|
|
71
|
+
margin: 0 0 var(--dsrc-spacing-2) 0;
|
|
72
|
+
color: var(--dsrc-color-noir);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* ============================================
|
|
76
|
+
* 3. Description paragraphs
|
|
77
|
+
* ============================================ */
|
|
78
|
+
|
|
79
|
+
.dsrc-alert > p {
|
|
80
|
+
margin: 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.dsrc-alert > p + p {
|
|
84
|
+
margin-top: var(--dsrc-spacing-2);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Links inside alert */
|
|
88
|
+
.dsrc-alert a {
|
|
89
|
+
color: var(--dsrc-color-noir);
|
|
90
|
+
text-decoration: underline;
|
|
91
|
+
text-underline-offset: 3px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.dsrc-alert a:hover {
|
|
95
|
+
text-decoration-thickness: 2px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* ============================================
|
|
99
|
+
* 4. Type variants
|
|
100
|
+
* Background: pastel / fond
|
|
101
|
+
* Border-left: dark status color / bordure
|
|
102
|
+
* Text stays --dsrc-color-noir (DSFR pattern)
|
|
103
|
+
* ============================================ */
|
|
104
|
+
|
|
105
|
+
/* --- Info --- */
|
|
106
|
+
.dsrc-alert--info {
|
|
107
|
+
background-color: var(--dsrc-color-info-fond);
|
|
108
|
+
border-left-color: var(--dsrc-color-info-bordure);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.dsrc-alert--info .dsrc-alert__title {
|
|
112
|
+
color: var(--dsrc-color-info-texte);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* --- Success --- */
|
|
116
|
+
.dsrc-alert--success {
|
|
117
|
+
background-color: var(--dsrc-color-succes-fond);
|
|
118
|
+
border-left-color: var(--dsrc-color-succes-bordure);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.dsrc-alert--success .dsrc-alert__title {
|
|
122
|
+
color: var(--dsrc-color-succes-texte);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* --- Warning --- */
|
|
126
|
+
.dsrc-alert--warning {
|
|
127
|
+
background-color: var(--dsrc-color-alerte-fond);
|
|
128
|
+
border-left-color: var(--dsrc-color-alerte-bordure);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.dsrc-alert--warning .dsrc-alert__title {
|
|
132
|
+
color: var(--dsrc-color-alerte-texte);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* --- Error --- */
|
|
136
|
+
.dsrc-alert--error {
|
|
137
|
+
background-color: var(--dsrc-color-erreur-fond);
|
|
138
|
+
border-left-color: var(--dsrc-color-erreur-bordure);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.dsrc-alert--error .dsrc-alert__title {
|
|
142
|
+
color: var(--dsrc-color-erreur-texte);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* ============================================
|
|
146
|
+
* 5. Small size (--sm)
|
|
147
|
+
* Reduced padding, single-line, no title expected
|
|
148
|
+
* ============================================ */
|
|
149
|
+
|
|
150
|
+
.dsrc-alert--sm {
|
|
151
|
+
padding: var(--dsrc-spacing-2) var(--dsrc-spacing-4);
|
|
152
|
+
font-size: var(--dsrc-font-size-small);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.dsrc-alert--sm .dsrc-alert__title {
|
|
156
|
+
font-size: var(--dsrc-font-size-body);
|
|
157
|
+
margin-bottom: var(--dsrc-spacing-1);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* ============================================
|
|
161
|
+
* 6. Close button integration
|
|
162
|
+
* Uses the shared .dsrc-btn.dsrc-btn--close
|
|
163
|
+
* positioned in the top-right corner
|
|
164
|
+
* ============================================ */
|
|
165
|
+
|
|
166
|
+
.dsrc-alert > .dsrc-btn--close {
|
|
167
|
+
position: absolute;
|
|
168
|
+
top: var(--dsrc-spacing-3);
|
|
169
|
+
right: var(--dsrc-spacing-3);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* Extra right padding when a close button is present,
|
|
173
|
+
to prevent text overlapping the button.
|
|
174
|
+
Apply via the presence of the close button sibling.
|
|
175
|
+
Alternatively, authors can use padding-right directly. */
|
|
176
|
+
.dsrc-alert:has(> .dsrc-btn--close) {
|
|
177
|
+
padding-right: var(--dsrc-spacing-8);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* ============================================
|
|
181
|
+
* 7. Hidden state
|
|
182
|
+
* When dismissed (JS sets aria-hidden="true")
|
|
183
|
+
* ============================================ */
|
|
184
|
+
|
|
185
|
+
.dsrc-alert[aria-hidden="true"] {
|
|
186
|
+
display: none;
|
|
187
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSRC Badge Component
|
|
3
|
+
* Aligned with DSFR quality patterns
|
|
4
|
+
*
|
|
5
|
+
* Semantic variants:
|
|
6
|
+
* --success .... Green (validated, complete)
|
|
7
|
+
* --error ...... Red (rejected, failed)
|
|
8
|
+
* --warning .... Orange/amber (pending, attention)
|
|
9
|
+
* --info ....... Blue (informational)
|
|
10
|
+
* --neutral .... Grey (default / no semantic meaning)
|
|
11
|
+
* --new ........ Primary green (novelty / "Nouveau")
|
|
12
|
+
*
|
|
13
|
+
* Color variants:
|
|
14
|
+
* --green ...... Explicit green coloring
|
|
15
|
+
* --orange ..... Explicit orange coloring
|
|
16
|
+
* --purple ..... Explicit purple coloring
|
|
17
|
+
*
|
|
18
|
+
* Modifiers:
|
|
19
|
+
* --sm ......... Smaller badge
|
|
20
|
+
* --no-icon .... Hides the icon slot
|
|
21
|
+
*
|
|
22
|
+
* Groups:
|
|
23
|
+
* .dsrc-badges-group (flex-wrap container for badge lists)
|
|
24
|
+
*
|
|
25
|
+
* Usage:
|
|
26
|
+
* <p class="dsrc-badge dsrc-badge--success">Valide</p>
|
|
27
|
+
* <p class="dsrc-badge dsrc-badge--sm dsrc-badge--info">Information</p>
|
|
28
|
+
* <p class="dsrc-badge dsrc-badge--new">Nouveau</p>
|
|
29
|
+
*
|
|
30
|
+
* <ul class="dsrc-badges-group">
|
|
31
|
+
* <li><p class="dsrc-badge dsrc-badge--new">Nouveau</p></li>
|
|
32
|
+
* <li><p class="dsrc-badge dsrc-badge--neutral">Libelle</p></li>
|
|
33
|
+
* </ul>
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
/* ============================================
|
|
38
|
+
* 1. Base badge
|
|
39
|
+
* ============================================ */
|
|
40
|
+
|
|
41
|
+
.dsrc-badge {
|
|
42
|
+
display: inline-flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
gap: var(--dsrc-spacing-1);
|
|
45
|
+
font-family: var(--dsrc-font-family-sans);
|
|
46
|
+
font-size: var(--dsrc-font-size-caption);
|
|
47
|
+
font-weight: var(--dsrc-font-weight-semibold);
|
|
48
|
+
line-height: 1;
|
|
49
|
+
padding: var(--dsrc-spacing-1) var(--dsrc-spacing-2);
|
|
50
|
+
border-radius: var(--dsrc-radius-small);
|
|
51
|
+
white-space: nowrap;
|
|
52
|
+
text-transform: uppercase;
|
|
53
|
+
letter-spacing: var(--dsrc-font-letter-spacing-caps);
|
|
54
|
+
|
|
55
|
+
/* Default appearance (unstyled / no variant) */
|
|
56
|
+
background-color: var(--dsrc-color-gris-100);
|
|
57
|
+
color: var(--dsrc-color-gris-700);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/* ============================================
|
|
62
|
+
* 2. Semantic variants
|
|
63
|
+
* ============================================ */
|
|
64
|
+
|
|
65
|
+
/* Success */
|
|
66
|
+
.dsrc-badge--success {
|
|
67
|
+
background-color: var(--dsrc-color-succes-fond);
|
|
68
|
+
color: var(--dsrc-color-succes-texte);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Error */
|
|
72
|
+
.dsrc-badge--error {
|
|
73
|
+
background-color: var(--dsrc-color-erreur-fond);
|
|
74
|
+
color: var(--dsrc-color-erreur-texte);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Warning */
|
|
78
|
+
.dsrc-badge--warning {
|
|
79
|
+
background-color: var(--dsrc-color-alerte-fond);
|
|
80
|
+
color: var(--dsrc-color-alerte-texte);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Info */
|
|
84
|
+
.dsrc-badge--info {
|
|
85
|
+
background-color: var(--dsrc-color-info-fond);
|
|
86
|
+
color: var(--dsrc-color-info-texte);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Neutral */
|
|
90
|
+
.dsrc-badge--neutral {
|
|
91
|
+
background-color: var(--dsrc-color-gris-100);
|
|
92
|
+
color: var(--dsrc-color-gris-700);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* New / Novelty (primary green) */
|
|
96
|
+
.dsrc-badge--new {
|
|
97
|
+
background-color: var(--dsrc-color-primaire-clair);
|
|
98
|
+
color: var(--dsrc-color-primaire-fonce);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
/* ============================================
|
|
103
|
+
* 3. Color variants (explicit hue, not semantic)
|
|
104
|
+
* ============================================ */
|
|
105
|
+
|
|
106
|
+
.dsrc-badge--green {
|
|
107
|
+
background-color: var(--dsrc-color-succes-fond);
|
|
108
|
+
color: var(--dsrc-color-succes-texte);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.dsrc-badge--orange {
|
|
112
|
+
background-color: var(--dsrc-color-alerte-fond);
|
|
113
|
+
color: var(--dsrc-color-alerte-texte);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.dsrc-badge--purple {
|
|
117
|
+
background-color: var(--dsrc-color-purple-fond);
|
|
118
|
+
color: var(--dsrc-color-purple-texte);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
/* ============================================
|
|
123
|
+
* 4. Size variants
|
|
124
|
+
* ============================================ */
|
|
125
|
+
|
|
126
|
+
/* Small badge */
|
|
127
|
+
.dsrc-badge--sm {
|
|
128
|
+
font-size: var(--dsrc-font-size-micro);
|
|
129
|
+
padding: 2px var(--dsrc-spacing-1);
|
|
130
|
+
gap: 2px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
/* ============================================
|
|
135
|
+
* 5. Icon handling
|
|
136
|
+
* ============================================ */
|
|
137
|
+
|
|
138
|
+
/* Badge icon slot */
|
|
139
|
+
.dsrc-badge__icon {
|
|
140
|
+
width: 12px;
|
|
141
|
+
height: 12px;
|
|
142
|
+
flex-shrink: 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Small badge icon */
|
|
146
|
+
.dsrc-badge--sm .dsrc-badge__icon {
|
|
147
|
+
width: 10px;
|
|
148
|
+
height: 10px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* Hide icon when --no-icon modifier is applied */
|
|
152
|
+
.dsrc-badge--no-icon .dsrc-badge__icon {
|
|
153
|
+
display: none;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
/* ============================================
|
|
158
|
+
* 6. Badge group
|
|
159
|
+
*
|
|
160
|
+
* <ul class="dsrc-badges-group">
|
|
161
|
+
* <li><p class="dsrc-badge dsrc-badge--success">Valide</p></li>
|
|
162
|
+
* <li><p class="dsrc-badge dsrc-badge--info">En cours</p></li>
|
|
163
|
+
* </ul>
|
|
164
|
+
* ============================================ */
|
|
165
|
+
|
|
166
|
+
.dsrc-badges-group {
|
|
167
|
+
display: flex;
|
|
168
|
+
flex-wrap: wrap;
|
|
169
|
+
gap: var(--dsrc-spacing-2);
|
|
170
|
+
align-items: center;
|
|
171
|
+
padding: 0;
|
|
172
|
+
margin: 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.dsrc-badges-group li {
|
|
176
|
+
list-style: none;
|
|
177
|
+
display: flex;
|
|
178
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSRC Breadcrumb Component
|
|
3
|
+
* Design Systeme de la Republique du Cameroun
|
|
4
|
+
*
|
|
5
|
+
* Architecture alignee sur le DSFR : les separateurs sont generes
|
|
6
|
+
* en CSS via ::before (pas de <span> dans le HTML), et le fil
|
|
7
|
+
* d'Ariane est collapsible sur mobile.
|
|
8
|
+
*
|
|
9
|
+
* Structure HTML :
|
|
10
|
+
*
|
|
11
|
+
* <nav class="dsrc-breadcrumb" role="navigation" aria-label="Vous etes ici :">
|
|
12
|
+
* <button class="dsrc-breadcrumb__btn" aria-expanded="false" aria-controls="breadcrumb-list">
|
|
13
|
+
* Voir le fil d'Ariane
|
|
14
|
+
* </button>
|
|
15
|
+
* <div class="dsrc-collapse" id="breadcrumb-list">
|
|
16
|
+
* <ol class="dsrc-breadcrumb__list">
|
|
17
|
+
* <li class="dsrc-breadcrumb__item">
|
|
18
|
+
* <a class="dsrc-breadcrumb__link" href="/">Accueil</a>
|
|
19
|
+
* </li>
|
|
20
|
+
* <li class="dsrc-breadcrumb__item">
|
|
21
|
+
* <a class="dsrc-breadcrumb__link" href="/services">Services</a>
|
|
22
|
+
* </li>
|
|
23
|
+
* <li class="dsrc-breadcrumb__item" aria-current="page">
|
|
24
|
+
* Cadastre
|
|
25
|
+
* </li>
|
|
26
|
+
* </ol>
|
|
27
|
+
* </div>
|
|
28
|
+
* </nav>
|
|
29
|
+
*
|
|
30
|
+
* Sur desktop le .dsrc-collapse est toujours visible.
|
|
31
|
+
* Sur mobile il est masque et le bouton le deplie.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
/* ==========================================================================
|
|
36
|
+
1. CONTAINER
|
|
37
|
+
========================================================================== */
|
|
38
|
+
|
|
39
|
+
.dsrc-breadcrumb {
|
|
40
|
+
font-family: var(--dsrc-font-family-sans);
|
|
41
|
+
font-size: var(--dsrc-font-size-small);
|
|
42
|
+
padding: var(--dsrc-spacing-2) 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
/* ==========================================================================
|
|
47
|
+
2. MOBILE TOGGLE BUTTON
|
|
48
|
+
Masque sur desktop, visible sur mobile.
|
|
49
|
+
========================================================================== */
|
|
50
|
+
|
|
51
|
+
.dsrc-breadcrumb__btn {
|
|
52
|
+
display: none;
|
|
53
|
+
align-items: center;
|
|
54
|
+
gap: var(--dsrc-spacing-2);
|
|
55
|
+
padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
|
|
56
|
+
font-family: inherit;
|
|
57
|
+
font-size: inherit;
|
|
58
|
+
font-weight: var(--dsrc-font-weight-medium);
|
|
59
|
+
color: var(--dsrc-color-primaire);
|
|
60
|
+
background-color: transparent;
|
|
61
|
+
border: none;
|
|
62
|
+
cursor: pointer;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.dsrc-breadcrumb__btn:focus-visible {
|
|
66
|
+
outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
|
|
67
|
+
outline-offset: var(--dsrc-outline-offset);
|
|
68
|
+
border-radius: var(--dsrc-radius-small);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* Chevron */
|
|
72
|
+
.dsrc-breadcrumb__btn::before {
|
|
73
|
+
content: '';
|
|
74
|
+
display: inline-block;
|
|
75
|
+
width: 8px;
|
|
76
|
+
height: 8px;
|
|
77
|
+
border-right: var(--dsrc-border-width-default) solid currentColor;
|
|
78
|
+
border-bottom: var(--dsrc-border-width-default) solid currentColor;
|
|
79
|
+
transform: rotate(45deg);
|
|
80
|
+
transition: transform var(--dsrc-transition-duration-fast) ease;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.dsrc-breadcrumb__btn[aria-expanded="true"]::before {
|
|
84
|
+
transform: rotate(-135deg);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
/* ==========================================================================
|
|
89
|
+
3. LIST
|
|
90
|
+
========================================================================== */
|
|
91
|
+
|
|
92
|
+
.dsrc-breadcrumb__list {
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
flex-wrap: wrap;
|
|
96
|
+
gap: 0;
|
|
97
|
+
list-style: none;
|
|
98
|
+
margin: 0;
|
|
99
|
+
padding: 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/* ==========================================================================
|
|
104
|
+
4. ITEMS
|
|
105
|
+
========================================================================== */
|
|
106
|
+
|
|
107
|
+
.dsrc-breadcrumb__item {
|
|
108
|
+
display: flex;
|
|
109
|
+
align-items: center;
|
|
110
|
+
color: var(--dsrc-color-gris-600);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* CSS-generated separator — no HTML needed */
|
|
114
|
+
.dsrc-breadcrumb__item:not(:first-child)::before {
|
|
115
|
+
content: '';
|
|
116
|
+
display: inline-block;
|
|
117
|
+
width: 14px;
|
|
118
|
+
height: 14px;
|
|
119
|
+
flex-shrink: 0;
|
|
120
|
+
margin: 0 var(--dsrc-spacing-2);
|
|
121
|
+
background-color: var(--dsrc-color-gris-400);
|
|
122
|
+
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none'%3E%3Cpath d='M5 2l5 5-5 5' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
123
|
+
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none'%3E%3Cpath d='M5 2l5 5-5 5' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
124
|
+
-webkit-mask-repeat: no-repeat;
|
|
125
|
+
mask-repeat: no-repeat;
|
|
126
|
+
-webkit-mask-size: contain;
|
|
127
|
+
mask-size: contain;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Current page (last item) */
|
|
131
|
+
.dsrc-breadcrumb__item[aria-current="page"] {
|
|
132
|
+
color: var(--dsrc-color-gris-600);
|
|
133
|
+
font-weight: var(--dsrc-font-weight-regular);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
/* ==========================================================================
|
|
138
|
+
5. LINKS
|
|
139
|
+
========================================================================== */
|
|
140
|
+
|
|
141
|
+
.dsrc-breadcrumb__link {
|
|
142
|
+
color: var(--dsrc-color-primaire);
|
|
143
|
+
text-decoration: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.dsrc-breadcrumb__link:hover {
|
|
147
|
+
text-decoration: underline;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.dsrc-breadcrumb__link:focus-visible {
|
|
151
|
+
outline: var(--dsrc-outline-width) solid var(--dsrc-color-primaire-focus);
|
|
152
|
+
outline-offset: var(--dsrc-outline-offset);
|
|
153
|
+
border-radius: var(--dsrc-radius-small);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
/* ==========================================================================
|
|
158
|
+
6. MOBILE RESPONSIVE
|
|
159
|
+
On mobile: show toggle button, hide breadcrumb via collapse.
|
|
160
|
+
========================================================================== */
|
|
161
|
+
|
|
162
|
+
@media (max-width: 767px) {
|
|
163
|
+
.dsrc-breadcrumb__btn {
|
|
164
|
+
display: inline-flex;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/* On mobile, the collapse wraps the list.
|
|
168
|
+
On desktop the collapse is always visible regardless of class. */
|
|
169
|
+
.dsrc-breadcrumb .dsrc-collapse {
|
|
170
|
+
max-height: 0;
|
|
171
|
+
overflow: hidden;
|
|
172
|
+
transition: max-height var(--dsrc-transition-duration-normal) ease;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.dsrc-breadcrumb .dsrc-collapse--expanded {
|
|
176
|
+
max-height: 500px;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.dsrc-breadcrumb__list {
|
|
180
|
+
flex-direction: column;
|
|
181
|
+
align-items: flex-start;
|
|
182
|
+
padding: var(--dsrc-spacing-2) var(--dsrc-spacing-3);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.dsrc-breadcrumb__item:not(:first-child)::before {
|
|
186
|
+
margin: 0 var(--dsrc-spacing-1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* On desktop: always show collapse content */
|
|
191
|
+
@media (min-width: 768px) {
|
|
192
|
+
.dsrc-breadcrumb .dsrc-collapse {
|
|
193
|
+
max-height: none !important;
|
|
194
|
+
overflow: visible;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
/* ==========================================================================
|
|
200
|
+
7. HIGH CONTRAST (forced-colors)
|
|
201
|
+
========================================================================== */
|
|
202
|
+
|
|
203
|
+
@media (forced-colors: active) {
|
|
204
|
+
.dsrc-breadcrumb__item:not(:first-child)::before {
|
|
205
|
+
background-color: ButtonText;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.dsrc-breadcrumb__link {
|
|
209
|
+
color: LinkText;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.dsrc-breadcrumb__link:focus-visible {
|
|
213
|
+
outline: 2px solid Highlight;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.dsrc-breadcrumb__btn::before {
|
|
217
|
+
border-right-color: LinkText;
|
|
218
|
+
border-bottom-color: LinkText;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
/* ==========================================================================
|
|
224
|
+
8. REDUCED MOTION
|
|
225
|
+
========================================================================== */
|
|
226
|
+
|
|
227
|
+
@media (prefers-reduced-motion: reduce) {
|
|
228
|
+
.dsrc-breadcrumb__btn::before {
|
|
229
|
+
transition: none;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.dsrc-breadcrumb .dsrc-collapse {
|
|
233
|
+
transition: none;
|
|
234
|
+
}
|
|
235
|
+
}
|