@primer/brand-css 0.66.1-rc.612823df → 0.67.0-rc.6edbc9d8

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.
@@ -1,20 +1,25 @@
1
1
  .Card {
2
+ /* Keeps the dynamic height row on the description slot in the default layout so variable-height content fills the card body. */
3
+ --Card-grid-template-rows: auto auto auto auto auto auto 1fr auto;
4
+
2
5
  text-decoration: none;
3
6
  color: var(--brand-color-text-default);
4
- border-radius: var(--brand-borderRadius-xlarge);
7
+
5
8
  transition: transform var(--brand-Card-animation-duration) var(--brand-Card-animation-easing);
6
9
  padding: var(--base-size-32);
7
10
  display: grid;
8
11
  grid-template-columns: 1fr 1fr;
9
12
  grid-template-areas:
10
13
  'image image'
14
+ 'leadingVisual leadingVisual'
11
15
  'icon icon'
16
+ 'tokens tokens'
12
17
  'label label'
13
18
  'heading heading'
14
19
  'description description'
15
20
  'action action';
16
21
  flex: auto;
17
- grid-template-rows: auto auto auto auto 1fr;
22
+ grid-template-rows: var(--Card-grid-template-rows);
18
23
  position: relative;
19
24
  height: 100%;
20
25
  }
@@ -34,7 +39,9 @@
34
39
  grid-template-columns: 1fr;
35
40
  grid-template-areas:
36
41
  'image'
42
+ 'leadingVisual'
37
43
  'icon'
44
+ 'tokens'
38
45
  'label'
39
46
  'heading'
40
47
  'description'
@@ -42,10 +49,42 @@
42
49
  justify-items: center;
43
50
  }
44
51
 
52
+ .Card--tokensPosition-block-end {
53
+ /* Moves the dynamic height row from tokens back to description because the block-end layout places tokens below the body copy. */
54
+ --Card-grid-template-rows: auto auto auto auto auto 1fr auto auto;
55
+
56
+ grid-template-areas:
57
+ 'image image'
58
+ 'leadingVisual leadingVisual'
59
+ 'icon icon'
60
+ 'label label'
61
+ 'heading heading'
62
+ 'description description'
63
+ 'tokens tokens'
64
+ 'action action';
65
+ }
66
+
67
+ .Card--align-center .Card--tokensPosition-block-end {
68
+ grid-template-areas:
69
+ 'image'
70
+ 'leadingVisual'
71
+ 'icon'
72
+ 'label'
73
+ 'heading'
74
+ 'description'
75
+ 'tokens'
76
+ 'action';
77
+ }
78
+
45
79
  /** Block end image position option */
46
80
  .Card--imagePos-block-end {
81
+ /* Moves the dynamic height row from action back to description because the image is rendered after the content in this layout. */
82
+ --Card-grid-template-rows: auto auto auto auto auto 1fr auto auto;
83
+
47
84
  grid-template-areas:
85
+ 'leadingVisual leadingVisual'
48
86
  'icon icon'
87
+ 'tokens tokens'
49
88
  'label label'
50
89
  'heading heading'
51
90
  'description description'
@@ -55,7 +94,9 @@
55
94
 
56
95
  .Card--align-center .Card--imagePos-block-end {
57
96
  grid-template-areas:
97
+ 'leadingVisual'
58
98
  'icon'
99
+ 'tokens'
59
100
  'label'
60
101
  'heading'
61
102
  'description'
@@ -63,6 +104,37 @@
63
104
  'image';
64
105
  }
65
106
 
107
+ .Card--imagePos-block-end.Card--tokensPosition-block-end {
108
+ /* Moves the dynamic height row from tokens back to description because both the tokens and image are rendered after the body copy here. */
109
+ --Card-grid-template-rows: auto auto auto auto 1fr auto auto auto;
110
+
111
+ grid-template-areas:
112
+ 'leadingVisual leadingVisual'
113
+ 'icon icon'
114
+ 'label label'
115
+ 'heading heading'
116
+ 'description description'
117
+ 'tokens tokens'
118
+ 'action action'
119
+ 'image image';
120
+ }
121
+
122
+ .Card--align-center .Card--imagePos-block-end.Card--tokensPosition-block-end {
123
+ grid-template-areas:
124
+ 'leadingVisual'
125
+ 'icon'
126
+ 'label'
127
+ 'heading'
128
+ 'description'
129
+ 'tokens'
130
+ 'action'
131
+ 'image';
132
+ }
133
+
134
+ .Card--hasLeadingVisual {
135
+ padding: var(--base-size-64) var(--base-size-40);
136
+ }
137
+
66
138
  .Card--imagePos-block-end .Card__image {
67
139
  margin-bottom: 0;
68
140
  margin-top: var(--base-size-28);
@@ -84,11 +156,18 @@
84
156
  padding: 0;
85
157
  }
86
158
 
87
- .Card--variant-default,
88
- .Card--variant-torchlight.Card--colorMode-light {
159
+ .Card--variant-default {
89
160
  background-color: var(--brand-Card-background-default);
90
161
  }
91
162
 
163
+ .Card--variant-default.Card--ctaVariant-arrow {
164
+ background-color: transparent;
165
+ }
166
+
167
+ .Card--ctaVariant-arrow {
168
+ --Card-arrowAction-endInset: var(--base-size-40);
169
+ }
170
+
92
171
  .Card:hover {
93
172
  text-decoration: none;
94
173
  }
@@ -138,11 +217,11 @@
138
217
 
139
218
  .Card--border {
140
219
  border: var(--brand-borderWidth-thin) solid var(--brand-color-border-default);
220
+ border-radius: var(--brand-borderRadius-medium);
141
221
  }
142
222
 
143
223
  .Card__outer {
144
224
  height: 100%;
145
- border-radius: var(--brand-borderRadius-xlarge);
146
225
  }
147
226
 
148
227
  .Card__outer:has(.Card--variant-minimal) {
@@ -159,34 +238,12 @@
159
238
  ); /* This value is adjusted so that, when combined with the container's border radius, the total border radius equals `var(--brand-borderRadius-medium)` */
160
239
  }
161
240
 
162
- .Card--icon {
163
- grid-template-areas:
164
- 'image image'
165
- 'icon label'
166
- 'heading heading'
167
- 'description description'
168
- 'action action';
169
- }
170
-
171
- .Card--icon .Card__label {
172
- justify-self: flex-end;
173
- }
174
-
175
- .Card--align-center .Card--icon .Card__label {
176
- justify-self: center;
177
- }
178
-
179
- .Card--icon .Card__label,
180
- .Card--icon .Card__icon {
181
- align-self: center;
182
- }
183
-
184
- .Card:not(.Card--disableAnimation, .Card--variant-torchlight.Card--colorMode-dark):hover {
241
+ .Card:not(.Card--disableAnimation):hover {
185
242
  transform: scale3d(1.025, 1.025, 1);
186
243
  }
187
244
 
188
245
  .Card__image {
189
- margin-bottom: var(--base-size-28);
246
+ margin-block-end: var(--base-size-28);
190
247
  border-radius: var(--brand-borderRadius-medium);
191
248
  overflow: hidden;
192
249
  grid-area: image;
@@ -198,31 +255,139 @@
198
255
  display: block;
199
256
  }
200
257
 
258
+ .Card__leadingVisual {
259
+ margin-block-end: var(--base-size-36);
260
+ display: flex;
261
+ align-items: center;
262
+ grid-area: leadingVisual;
263
+ }
264
+
265
+ .Card--align-center .Card__leadingVisual {
266
+ justify-content: center;
267
+ }
268
+
269
+ .Card__leadingVisualItem {
270
+ display: block;
271
+ max-width: 100%;
272
+ height: var(--base-size-40);
273
+ width: auto;
274
+ }
275
+
201
276
  .Card__icon {
202
277
  margin-bottom: var(--base-size-24);
203
278
  grid-area: icon;
204
279
  }
205
280
 
281
+ .Card__tokens {
282
+ display: flex;
283
+ flex-wrap: wrap;
284
+ gap: var(--base-size-8);
285
+ grid-area: tokens;
286
+ margin-bottom: var(--base-size-20);
287
+ }
288
+
289
+ .Card--align-center .Card__tokens {
290
+ justify-content: center;
291
+ }
292
+
293
+ .Card__tokens--position-block-end {
294
+ margin-block-start: var(--base-size-20);
295
+ margin-block-end: 0;
296
+ }
297
+
206
298
  .Card__label {
207
- margin-bottom: var(--base-size-24);
299
+ margin-block-end: var(--base-size-20);
208
300
  grid-area: label;
209
301
  }
210
302
 
211
303
  .Card__heading {
212
- margin-bottom: var(--base-size-20);
304
+ margin-block-end: var(--base-size-20);
213
305
  grid-area: heading;
214
306
  }
215
307
 
216
308
  .Card__description {
217
- margin-bottom: var(--base-size-32);
309
+ margin-block-end: var(--base-size-32);
218
310
  grid-area: description;
219
311
  }
220
312
 
221
313
  .Card__action {
222
314
  grid-area: action;
223
- margin-top: auto;
315
+ margin-block-start: auto;
316
+ display: inline-flex;
317
+ align-items: center;
318
+ max-inline-size: 100%;
319
+ pointer-events: none;
320
+ }
321
+
322
+ .Card__actionIcon {
323
+ display: inline-flex;
324
+ align-items: center;
325
+ justify-content: center;
326
+ flex-shrink: 0;
327
+ }
328
+
329
+ .Card__actionLabel {
330
+ display: block;
331
+ min-inline-size: 0;
332
+ overflow: hidden;
333
+ text-overflow: ellipsis;
334
+ white-space: nowrap;
335
+ }
336
+
337
+ .Card__actionLabelClip {
338
+ --actionLabelClip-duration: 400ms;
224
339
  display: inline-flex;
340
+ flex: 1 1 auto;
225
341
  align-items: center;
342
+ align-self: stretch;
343
+ min-inline-size: 0;
344
+ overflow: hidden;
345
+ max-inline-size: 0;
346
+ background-color: transparent;
347
+ opacity: 0;
348
+ transform: translateX(calc(var(--base-size-12) * -1));
349
+ transition: max-inline-size var(--actionLabelClip-duration) var(--brand-Card-animation-easing),
350
+ opacity var(--actionLabelClip-duration) ease-out, transform var(--actionLabelClip-duration) ease-out,
351
+ margin-inline var(--actionLabelClip-duration) ease-out, padding-inline var(--actionLabelClip-duration) ease-out;
352
+ }
353
+
354
+ .Card--tokensPosition-block-end .Card__action {
355
+ margin-block-start: var(--base-size-20);
356
+ }
357
+
358
+ .Card__action--arrowOnly {
359
+ --actionArrow-duration: 300ms;
360
+
361
+ margin-block-start: var(--base-size-20);
362
+ min-height: var(--base-size-40);
363
+ width: -moz-fit-content;
364
+ width: fit-content;
365
+ min-inline-size: 0;
366
+ max-inline-size: calc(100% - var(--Card-arrowAction-endInset));
367
+ justify-content: flex-start;
368
+ -moz-column-gap: 0;
369
+ column-gap: 0;
370
+ padding-block: var(--base-size-4);
371
+ padding-inline: 0;
372
+ border: var(--brand-borderWidth-thin) solid transparent;
373
+ border-radius: var(--brand-borderRadius-full);
374
+ background-color: transparent;
375
+ flex-shrink: 0;
376
+ overflow: hidden;
377
+ transition: border-color var(--actionArrow-duration) ease-out, background-color var(--actionArrow-duration) ease-out,
378
+ column-gap var(--actionArrow-duration) ease-out, padding-inline var(--actionArrow-duration) ease-out;
379
+ transition: border-color var(--actionArrow-duration) ease-out, background-color var(--actionArrow-duration) ease-out,
380
+ column-gap var(--actionArrow-duration) ease-out, padding-inline var(--actionArrow-duration) ease-out, -moz-column-gap var(--actionArrow-duration) ease-out;
381
+ }
382
+
383
+ .Card__actionIcon--arrowOnly {
384
+ width: var(--base-size-32);
385
+ min-width: var(--base-size-32);
386
+ height: var(--base-size-32);
387
+ min-height: var(--base-size-32);
388
+ border: var(--brand-borderWidth-thin) solid var(--brand-color-border-default);
389
+ border-radius: var(--brand-borderRadius-full);
390
+ background-color: var(--brand-color-canvas-default);
226
391
  }
227
392
 
228
393
  .Card--align-center .Card__action {
@@ -234,10 +399,9 @@
234
399
  color: var(--brand-Link-color-accent);
235
400
  }
236
401
 
237
- .Card--skew {
238
- height: 100%;
239
- border-radius: var(--brand-borderRadius-xlarge);
240
- overflow: hidden;
402
+ .Card__action,
403
+ .Card__action * {
404
+ cursor: inherit;
241
405
  }
242
406
 
243
407
  .Card--skew:focus-within {
@@ -278,11 +442,56 @@
278
442
  margin-inline-start: var(--base-size-4);
279
443
  }
280
444
 
281
- .Card:has(.Card__link:hover) .Card--expandableArrow {
282
- transform: translateX(var(--base-size-4));
445
+ .Card--ctaVariant-arrow .Card--expandableArrow {
446
+ --ExpandableArrow-duration: var(--brand-Card-animation-duration);
447
+ --ExpandableArrow-easing: var(--brand-Card-animation-easing);
448
+ }
449
+
450
+ .Card__actionIcon--arrowOnly .Card--expandableArrow {
451
+ margin-inline-start: 0;
452
+ }
453
+
454
+ .Card--ctaVariant-arrow .Card__description {
455
+ margin-bottom: var(--base-size-12);
456
+ }
457
+
458
+ .Card--ctaVariant-arrow:not(.Card--disableAnimation):hover {
459
+ transform: none;
460
+ }
461
+
462
+ .Card--ctaVariant-arrow .Card__action {
463
+ min-inline-size: 0;
464
+ justify-self: start;
465
+ }
466
+
467
+ .Card--align-center .Card--ctaVariant-arrow .Card__action {
468
+ justify-self: center;
469
+ }
470
+
471
+ .Card--ctaVariant-arrow:is(:hover, :focus-within) .Card__action--arrowOnly {
472
+ -moz-column-gap: var(--base-size-8);
473
+ column-gap: var(--base-size-8);
474
+ padding-inline-start: var(--base-size-12);
475
+ padding-inline-end: var(--base-size-4);
476
+ border-color: var(--brand-color-border-default);
477
+ background-color: var(--brand-Card-background-overlay);
478
+ }
479
+
480
+ .Card--ctaVariant-arrow:is(:hover, :focus-within) .Card__actionLabelClip {
481
+ max-inline-size: 100%;
482
+ opacity: 1;
483
+ transform: translateX(0);
484
+ margin-inline-start: calc(var(--base-size-12) * -1);
485
+ margin-inline-end: 0;
486
+ padding-inline-start: var(--base-size-12);
487
+ padding-inline-end: var(--base-size-4);
488
+ }
489
+
490
+ .Card:is(:hover, :focus-within) .Card--expandableArrow {
491
+ transform: translateX(var(--base-size-2));
283
492
  }
284
493
 
285
- .Card:has(.Card__link:hover) .Card--expandableArrow path:nth-of-type(2) {
494
+ .Card:is(:hover, :focus-within) .Card--expandableArrow path:nth-of-type(2) {
286
495
  stroke-dashoffset: 20;
287
496
  }
288
497
 
@@ -1,5 +1,8 @@
1
1
  .ExpandableArrow {
2
- transition: transform 200ms;
2
+ --ExpandableArrow-duration: 200ms;
3
+ --ExpandableArrow-easing: ease;
4
+
5
+ transition: transform var(--ExpandableArrow-duration) var(--ExpandableArrow-easing);
3
6
  transform: translateX(0);
4
7
  }
5
8
 
@@ -10,7 +13,7 @@
10
13
  .ExpandableArrow-stem {
11
14
  stroke-dasharray: 10;
12
15
  stroke-dashoffset: 10;
13
- transition: stroke-dashoffset 200ms;
16
+ transition: stroke-dashoffset var(--ExpandableArrow-duration) var(--ExpandableArrow-easing);
14
17
  }
15
18
 
16
19
  .ExpandableArrow-stem--expanded {
@@ -2,3 +2,7 @@
2
2
  text-transform: uppercase;
3
3
  letter-spacing: var(--brand-text-letterSpacing-100);
4
4
  }
5
+
6
+ .EyebrowText--variant-accent {
7
+ color: var(--brand-color-accent-primary);
8
+ }
@@ -44,7 +44,7 @@
44
44
 
45
45
  .Icon--background {
46
46
  padding: var(--base-size-12);
47
- border-radius: var(--brand-borderRadius-full);
47
+ border-radius: var(--brand-borderRadius-medium);
48
48
  }
49
49
 
50
50
  .Icon--color-default {
@@ -78,6 +78,7 @@
78
78
  }
79
79
 
80
80
  .Link--label {
81
+ color: inherit !important; /* Some components like Accordion override all children color. We need to force this. */
81
82
  font-weight: var(--base-text-weight-medium);
82
83
  }
83
84
 
@@ -127,7 +127,7 @@
127
127
  align-items: center;
128
128
  gap: var(--base-size-24);
129
129
  margin: auto;
130
- max-width: 100dvw;
130
+ max-width: 100vw;
131
131
  }
132
132
 
133
133
  .LogoSuite__logobar-marqueeGroup {