@digdir/designsystemet-css 1.0.0-next.34 → 1.0.0-next.35

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/accordion.css CHANGED
@@ -4,7 +4,6 @@
4
4
  --dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle);
5
5
  --dsc-accordion-chevron-gap: var(--ds-spacing-2);
6
6
  --dsc-accordion-chevron-size: var(--ds-spacing-6);
7
- --dsc-accordion-chevron-rotate: 0deg;
8
7
  --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-default);
9
8
  --dsc-accordion-heading-background--open: var(--ds-color-neutral-background-subtle);
10
9
  --dsc-accordion-heading-background: var(--ds-color-neutral-background-default);
@@ -62,6 +61,7 @@
62
61
  .ds-accordion__item {
63
62
  background: var(--dsc-accordion-background);
64
63
  border-block: var(--dsc-accordion-border);
64
+ box-sizing: border-box;
65
65
 
66
66
  & > :is(summary, u-summary) {
67
67
  background: var(--dsc-accordion-heading-background);
@@ -72,6 +72,9 @@
72
72
  padding-block: var(--dsc-accordion-padding);
73
73
  padding-inline: calc(var(--dsc-accordion-padding) + var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) var(--dsc-accordion-padding);
74
74
 
75
+ @composes ds-focus from './utilities.css';
76
+ @composes ds-body-text--sm from './utilities.css';
77
+
75
78
  &:focus-visible {
76
79
  position: relative; /* Ensure foucs outline renders on top */
77
80
  }
@@ -84,7 +87,6 @@
84
87
  mask: 50% / contain no-repeat
85
88
  url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.97 9.47a.75.75 0 0 1 1.06 0L12 14.44l4.97-4.97a.75.75 0 1 1 1.06 1.06l-5.5 5.5a.75.75 0 0 1-1.06 0l-5.5-5.5a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E");
86
89
  position: absolute;
87
- rotate: var(--dsc-accordion-chevron-rotate);
88
90
  margin-inline: calc(
89
91
  (var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) * -1
90
92
  ); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */
@@ -104,11 +106,10 @@
104
106
 
105
107
  &[open] > :is(summary, u-summary) {
106
108
  background: var(--dsc-accordion-heading-background--open);
107
- }
108
109
 
109
- /* Make flip on click */
110
- &[open]:not([data-chevron-open='false']) {
111
- --dsc-accordion-chevron-rotate: -180deg;
110
+ &::before {
111
+ rotate: 180deg;
112
+ }
112
113
  }
113
114
 
114
115
  @media (hover: hover) and (pointer: fine) {
@@ -116,4 +117,20 @@
116
117
  background: var(--dsc-accordion-heading-background--hover);
117
118
  }
118
119
  }
120
+
121
+ @media (prefers-reduced-motion: no-preference) {
122
+ interpolate-size: allow-keywords; /* stylelint-disable-line property-no-unknown */
123
+ }
124
+
125
+ &::part(details-content) {
126
+ block-size: 0;
127
+ overflow-y: clip;
128
+ transition:
129
+ content-visibility 400ms allow-discrete,
130
+ height 400ms;
131
+ }
132
+
133
+ &[open]::part(details-content) {
134
+ height: auto;
135
+ }
119
136
  }
package/alert.css CHANGED
@@ -12,41 +12,47 @@
12
12
  background: var(--dsc-alert-background);
13
13
  border-radius: var(--dsc-alert-border-radius);
14
14
  border: 1px solid var(--dsc-alert-border-color);
15
+ box-sizing: border-box;
15
16
  color: var(--dsc-alert-color);
16
17
  padding-block: var(--dsc-alert-padding);
17
18
  padding-inline: calc(var(--dsc-alert-padding) + var(--dsc-alert-icon-size) + var(--dsc-alert-gap)) var(--dsc-alert-padding);
18
19
 
20
+ @composes ds-body-text--md from './utilities.css';
21
+
19
22
  & > :is(h1,h2,h3,h4,h5,h6):first-child::before, /* If Alert starts with Heading, align icon to this */
20
23
  &:not(:has(> :is(h1,h2,h3,h4,h5,h6):first-child))::before /* If there is no Heading, align icon to Alert itself */ {
21
24
  background-color: var(--dsc-alert-icon-color);
22
25
  content: '';
23
26
  display: block;
24
27
  height: var(--dsc-alert-icon-size);
25
- margin-inline: calc((var(--dsc-alert-icon-size) + var(--dsc-alert-gap)) * -1); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */
28
+ margin-inline: calc(
29
+ (var(--dsc-alert-icon-size) + var(--dsc-alert-gap)) * -1
30
+ ); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */
31
+
26
32
  mask: var(--dsc-alert-icon-url) center/contain no-repeat;
27
33
  position: absolute;
28
- translate: 0 calc(.5lh - var(--dsc-alert-icon-size) / 2); /* Center icon to line height */
34
+ translate: 0 calc((1lh - var(--dsc-alert-icon-size)) / 2); /* Center icon to line height */
29
35
  width: var(--dsc-alert-icon-size);
30
36
  }
31
37
 
32
38
  /**
33
39
  * Colors
34
40
  */
35
- &[data-color="warning"] {
41
+ &[data-color='warning'] {
36
42
  --dsc-alert-border-color: var(--ds-color-warning-border-default);
37
43
  --dsc-alert-icon-color: var(--ds-color-warning-text-subtle);
38
44
  --dsc-alert-background: var(--ds-color-warning-surface-default);
39
45
  --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 2.25a.75.75 0 0 1 .66.39l9.52 17.25a.75.75 0 0 1-.65 1.11H2.47a.75.75 0 0 1-.65-1.11l9.52-17.25a.75.75 0 0 1 .66-.39m0 6.5a.75.75 0 0 1 .75.75v4a.75.75 0 0 1-1.5 0v-4a.75.75 0 0 1 .75-.75m-1 7.75a1 1 0 1 1 2 0 1 1 0 0 1-2 0'/%3E%3C/svg%3E");
40
46
  }
41
47
 
42
- &[data-color="success"] {
48
+ &[data-color='success'] {
43
49
  --dsc-alert-background: var(--ds-color-success-surface-default);
44
50
  --dsc-alert-border-color: var(--ds-color-success-border-default);
45
51
  --dsc-alert-icon-color: var(--ds-color-success-text-subtle);
46
52
  --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 21.75a9.75 9.75 0 1 0 0-19.5 9.75 9.75 0 0 0 0 19.5m4.95-12.47a.81.81 0 0 0-1.24-1.05l-5.39 6.36-2.62-2.62a.81.81 0 0 0-1.15 1.15l3.25 3.25a.81.81 0 0 0 1.2-.05z'/%3E%3C/svg%3E");
47
53
  }
48
54
 
49
- &[data-color="danger"] {
55
+ &[data-color='danger'] {
50
56
  --dsc-alert-background: var(--ds-color-danger-surface-default);
51
57
  --dsc-alert-border-color: var(--ds-color-danger-border-default);
52
58
  --dsc-alert-icon-color: var(--ds-color-danger-text-subtle);
@@ -56,13 +62,17 @@
56
62
  /**
57
63
  * Sizes
58
64
  */
59
- &[data-size="sm"] {
65
+ &[data-size='sm'] {
60
66
  --dsc-alert-icon-size: var(--ds-sizing-6);
61
67
  --dsc-alert-padding: var(--ds-spacing-5);
68
+
69
+ @composes ds-body-text--sm from './utilities.css';
62
70
  }
63
71
 
64
- &[data-size="lg"] {
72
+ &[data-size='lg'] {
65
73
  --dsc-alert-icon-size: var(--ds-sizing-8);
66
74
  --dsc-alert-padding: var(--ds-spacing-7);
75
+
76
+ @composes ds-body-text--lg from './utilities.css';
67
77
  }
68
78
  }
package/avatar.css CHANGED
@@ -5,18 +5,21 @@
5
5
  --dsc-avatar-padding: var(--ds-spacing-2);
6
6
  --dsc-avatar-border-radius: 50%;
7
7
 
8
- background: var(--dsc-avatar-background);
9
- height: var(--dsc-avatar-size);
8
+ align-items: center;
10
9
  aspect-ratio: 1 / 1;
11
- color: var(--dsc-avatar-color);
10
+ background: var(--dsc-avatar-background);
12
11
  border-radius: var(--dsc-avatar-border-radius);
13
- overflow: hidden;
12
+ box-sizing: border-box;
13
+ color: var(--dsc-avatar-color);
14
14
  display: inline-flex;
15
+ height: var(--dsc-avatar-size);
15
16
  justify-content: center;
16
- align-items: center;
17
- user-select: none;
18
- text-transform: uppercase;
17
+ overflow: hidden;
19
18
  text-decoration: none;
19
+ text-transform: uppercase;
20
+ user-select: none;
21
+
22
+ @composes ds-body-text--xs from './utilities.css';
20
23
 
21
24
  &:not(:has(> img)) {
22
25
  padding: var(--dsc-avatar-padding);
@@ -79,20 +82,28 @@
79
82
  &[data-size='xs'] {
80
83
  --dsc-avatar-size: var(--ds-sizing-7);
81
84
  --dsc-avatar-padding: var(--ds-spacing-1);
85
+
86
+ @composes ds-body-text--xs from './utilities.css';
82
87
  }
83
88
 
84
89
  &[data-size='sm'] {
85
90
  --dsc-avatar-size: var(--ds-sizing-9);
86
91
  --dsc-avatar-padding: var(--ds-spacing-1);
92
+
93
+ @composes ds-heading-text--2xs from './utilities.css';
87
94
  }
88
95
 
89
96
  &[data-size='md'] {
90
97
  --dsc-avatar-size: var(--ds-sizing-12);
91
98
  --dsc-avatar-padding: var(--ds-spacing-2);
99
+
100
+ @composes ds-heading-text--sm from './utilities.css';
92
101
  }
93
102
 
94
103
  &[data-size='lg'] {
95
104
  --dsc-avatar-size: var(--ds-sizing-15);
96
105
  --dsc-avatar-padding: var(--ds-spacing-2);
106
+
107
+ @composes ds-heading-text--md from './utilities.css';
97
108
  }
98
109
  }
package/badge.css CHANGED
@@ -4,9 +4,12 @@
4
4
  --dsc-badge-padding: 0 calc(var(--ds-spacing-1) + calc(var(--ds-spacing-1) / 2));
5
5
  --dsc-badge-size: calc(var(--ds-sizing-3) + calc(var(--ds-spacing-1) / 2));
6
6
 
7
+ box-sizing: border-box;
7
8
  display: inline-flex;
8
9
  position: relative;
9
10
 
11
+ @composes ds-body-text--short-sm from './utilities.css';
12
+
10
13
  &::before {
11
14
  content: attr(data-count);
12
15
  background: var(--dsc-badge-background);
@@ -24,6 +27,8 @@
24
27
  --dsc-badge-size: var(--ds-sizing-3);
25
28
  --dsc-badge-padding: 0 var(--ds-spacing-1);
26
29
 
30
+ @composes ds-body-text--short-xs from './utilities.css';
31
+
27
32
  &[data-count] {
28
33
  --dsc-badge-size: var(--ds-sizing-5);
29
34
  }
@@ -33,6 +38,8 @@
33
38
  --dsc-badge-size: var(--ds-sizing-4);
34
39
  --dsc-badge-padding: 0 var(--ds-spacing-2);
35
40
 
41
+ @composes ds-body-text--short-md from './utilities.css';
42
+
36
43
  &[data-count] {
37
44
  --dsc-badge-size: var(--ds-sizing-7);
38
45
  }
package/breadcrumbs.css CHANGED
@@ -2,14 +2,20 @@
2
2
  --dsc-breadcrumbs-spacing: var(--ds-spacing-2);
3
3
  --dsc-breadcrumbs-chevron-size: var(--ds-sizing-6);
4
4
 
5
+ @composes ds-body-text--md from './utilities.css';
6
+
5
7
  &[data-size='sm'] {
6
8
  --dsc-breadcrumbs-spacing: var(--ds-spacing-1);
7
9
  --dsc-breadcrumbs-chevron-size: var(--ds-sizing-5);
10
+
11
+ @composes ds-body-text--sm from './utilities.css';
8
12
  }
9
13
 
10
14
  &[data-size='lg'] {
11
15
  --dsc-breadcrumbs-spacing: var(--ds-spacing-3);
12
16
  --dsc-breadcrumbs-chevron-size: var(--ds-sizing-7);
17
+
18
+ @composes ds-body-text--lg from './utilities.css';
13
19
  }
14
20
 
15
21
  & > :is(ol, ul) {
@@ -56,7 +62,7 @@
56
62
  }
57
63
 
58
64
  @media (min-width: 651px) {
59
- & > :not(ol, ul) {
65
+ & > :is(:not(ol, ul)):not(:only-child) {
60
66
  display: none; /* Hide back link when desktop and having list */
61
67
  }
62
68
  }
package/button.css CHANGED
@@ -9,8 +9,8 @@
9
9
  --dsc-button-padding-inline: var(--ds-spacing-4);
10
10
  --dsc-button-size: var(--ds-sizing-12);
11
11
 
12
+ @composes ds-body-text--short-md from './utilities.css';
12
13
  @composes ds-focus from './utilities.css';
13
- @composes ds-paragraph-short from './baseline/typography.css';
14
14
 
15
15
  align-items: center;
16
16
  background: var(--dsc-button-background);
@@ -42,12 +42,16 @@
42
42
  --dsc-button-padding-block: var(--ds-spacing-2);
43
43
  --dsc-button-padding-inline: var(--ds-spacing-3);
44
44
  --dsc-button-size: var(--ds-sizing-10);
45
+
46
+ @composes ds-body-text--short-sm from './utilities.css';
45
47
  }
46
48
 
47
49
  &[data-size='lg'] {
48
50
  --dsc-button-padding-block: var(--ds-spacing-3);
49
51
  --dsc-button-padding-inline: var(--ds-spacing-5);
50
52
  --dsc-button-size: var(--ds-sizing-14);
53
+
54
+ @composes ds-body-text--short-lg from './utilities.css';
51
55
  }
52
56
 
53
57
  &[data-icon] {
package/card.css CHANGED
@@ -1,197 +1,139 @@
1
1
  .ds-card {
2
+ --dsc-card-background--active: var(--ds-color-neutral-surface-default);
3
+ --dsc-card-background--hover: var(--ds-color-neutral-background-subtle);
4
+ --dsc-card-background: var(--ds-color-neutral-background-default);
2
5
  --dsc-card-border-color: var(--ds-color-neutral-border-subtle);
3
- --dsc-card-backround: var(--ds-color-neutral-background-default);
6
+ --dsc-card-border: 1px solid var(--dsc-card-border-color);
4
7
  --dsc-card-color: var(--ds-color-neutral-text-default);
8
+ --dsc-card-gap: 1rem;
9
+ --dsc-card-padding: var(--ds-spacing-6);
5
10
 
6
- display: flex;
7
- flex-direction: column;
8
- width: 100%;
11
+ all: unset; /* Reset if <button> */
12
+ display: block;
13
+ background: var(--dsc-card-background);
14
+ border-radius: min(1rem, var(--ds-border-radius-md));
15
+ border: var(--dsc-card-border);
9
16
  box-sizing: border-box;
10
- position: relative;
11
- overflow: hidden;
12
17
  color: var(--dsc-card-color);
13
- border-radius: min(1rem, var(--ds-border-radius-md));
14
- border: 1px solid var(--dsc-card-border-color);
15
- background: var(--dsc-card-backround);
18
+ overflow: clip; /* Needed to clip media elements and and Card.Block */
19
+ padding: var(--dsc-card-padding);
20
+
21
+ @composes ds-paragraph from './baseline/typography.css'; /* Must be after all: unset */
16
22
 
17
- &[data-link] {
18
- --dsc-card-border-color: var(--ds-color-neutral-border-default);
23
+ /* Style link in heading, or heading when Card is anchor */
24
+ :is(h1, h2, h3, h4, h5, h6) a:any-link, /* Using :any-link to target both a and a:visited */
25
+ &:is(a:any-link, button, [role='button']) :is(h1, h2, h3, h4, h5, h6) {
26
+ color: inherit;
27
+ outline: 0;
28
+ text-decoration: underline;
29
+ text-decoration-thickness: max(1px, 0.0625rem, 0.1025em);
30
+ text-underline-offset: max(6px, 0.25rem, 0.22em);
31
+ }
19
32
 
33
+ /* Add states when Card is a anchor, button, or when containing a anchor in heading */
34
+ &:where(a, button, [role='button']),
35
+ &:where(:has(:is(h1, h2, h3, h4, h5, h6) a)) {
36
+ cursor: pointer;
20
37
  text-decoration: none;
21
38
 
22
- & h1,
23
- & h2,
24
- & h3,
25
- & h4,
26
- & h5,
27
- & h6 {
28
- color: var(--dsc-card-color);
29
- text-decoration: underline;
30
- text-decoration-thickness: max(1px, 0.0625rem, 0.1025em);
31
- text-underline-offset: max(6px, 0.25rem, 0.22em);
39
+ @media (hover: hover) and (pointer: fine) {
40
+ &:hover {
41
+ background: var(--dsc-card-background--hover);
42
+ }
43
+ }
44
+
45
+ /* Using CSS custom property instead of composes since we need to support :has(:focus-visible) */
46
+ &:where(:focus-visible, :has(:focus-visible)) {
47
+ @composes ds-focus--visible from './utilities.css';
32
48
  }
33
49
 
34
50
  &:active {
35
- --dsc-card-backround: var(--ds-color-neutral-surface-default);
51
+ background: var(--dsc-card-background--active);
36
52
  }
53
+ }
37
54
 
38
- @media (hover: hover) and (pointer: fine) {
39
- &:hover {
40
- --dsc-card-backround: var(--ds-color-neutral-background-subtle);
41
- }
42
- }
55
+ &:has(> .ds-card__block) {
56
+ padding: 0; /* Let Card.Block own the padding */
43
57
  }
44
58
 
45
59
  &[data-color='subtle'] {
60
+ --dsc-card-background--active: var(--ds-color-neutral-surface-hover);
61
+ --dsc-card-background--hover: var(--ds-color-neutral-surface-default);
62
+ --dsc-card-background: var(--ds-color-neutral-background-subtle);
46
63
  --dsc-card-border-color: var(--ds-color-neutral-border-subtle);
47
- --dsc-card-backround: var(--ds-color-neutral-background-subtle);
48
-
49
- &[data-link] {
50
- --dsc-card-border-color: var(--ds-color-neutral-border-default);
51
-
52
- &:active {
53
- --dsc-card-backround: var(--ds-color-neutral-surface-hover);
54
- }
55
-
56
- @media (hover: hover) and (pointer: fine) {
57
- &:hover {
58
- --dsc-card-backround: var(--ds-color-neutral-surface-default);
59
- }
60
- }
61
- }
62
64
  }
63
65
 
64
66
  &[data-color='brand1'] {
67
+ --dsc-card-background--active: var(--ds-color-brand1-surface-active);
68
+ --dsc-card-background--hover: var(--ds-color-brand1-surface-hover);
69
+ --dsc-card-background: var(--ds-color-brand1-surface-default);
65
70
  --dsc-card-border-color: var(--ds-color-brand1-border-subtle);
66
- --dsc-card-backround: var(--ds-color-brand1-surface-default);
67
71
  --dsc-card-color: var(--ds-color-brand1-text-default);
68
-
69
- &[data-link] {
70
- --dsc-card-border-color: var(--ds-color-brand1-border-default);
71
-
72
- &:active {
73
- --dsc-card-backround: var(--ds-color-brand1-surface-active);
74
- }
75
-
76
- @media (hover: hover) and (pointer: fine) {
77
- &:hover {
78
- --dsc-card-backround: var(--ds-color-brand1-surface-hover);
79
- }
80
- }
81
- }
82
72
  }
83
73
 
84
74
  &[data-color='brand2'] {
75
+ --dsc-card-background--active: var(--ds-color-brand2-surface-active);
76
+ --dsc-card-background--hover: var(--ds-color-brand2-surface-hover);
77
+ --dsc-card-background: var(--ds-color-brand2-surface-default);
85
78
  --dsc-card-border-color: var(--ds-color-brand2-border-subtle);
86
- --dsc-card-backround: var(--ds-color-brand2-surface-default);
87
79
  --dsc-card-color: var(--ds-color-brand2-text-default);
88
-
89
- &[data-link] {
90
- --dsc-card-border-color: var(--ds-color-brand2-border-default);
91
-
92
- &:active {
93
- --dsc-card-backround: var(--ds-color-brand2-surface-active);
94
- }
95
-
96
- @media (hover: hover) and (pointer: fine) {
97
- &:hover {
98
- --dsc-card-backround: var(--ds-color-brand2-surface-hover);
99
- }
100
- }
101
- }
102
80
  }
103
81
 
104
82
  &[data-color='brand3'] {
83
+ --dsc-card-background--active: var(--ds-color-brand3-surface-active);
84
+ --dsc-card-background--hover: var(--ds-color-brand3-surface-hover);
85
+ --dsc-card-background: var(--ds-color-brand3-surface-default);
105
86
  --dsc-card-border-color: var(--ds-color-brand3-border-subtle);
106
- --dsc-card-backround: var(--ds-color-brand3-surface-default);
107
87
  --dsc-card-color: var(--ds-color-brand3-text-default);
108
-
109
- &[data-link] {
110
- --dsc-card-border-color: var(--ds-color-brand3-border-default);
111
-
112
- &:active {
113
- --dsc-card-backround: var(--ds-color-brand3-surface-active);
114
- }
115
-
116
- @media (hover: hover) and (pointer: fine) {
117
- &:hover {
118
- --dsc-card-backround: var(--ds-color-brand3-surface-hover);
119
- }
120
- }
121
- }
122
- }
123
-
124
- .ds-card__header h1,
125
- .ds-card__header h2,
126
- .ds-card__header h3,
127
- .ds-card__header h4,
128
- .ds-card__header h5,
129
- .ds-card__header h6 {
130
- color: inherit;
131
- }
132
-
133
- .ds-card__media > * {
134
- display: flex;
135
- flex-direction: column;
136
- width: 100%;
137
- border: 0;
138
- }
139
-
140
- .ds-card__media {
141
- width: auto;
142
- }
143
-
144
- .ds-card__media:first-child {
145
- padding-bottom: var(--ds-spacing-4);
146
- }
147
-
148
- .ds-card__media:last-child {
149
- padding-top: var(--ds-spacing-6);
150
88
  }
89
+ }
151
90
 
152
- .ds-card__footer,
153
- .ds-card__content {
154
- display: flex;
155
- justify-content: flex-start;
156
- gap: var(--ds-spacing-4);
157
- flex-wrap: wrap;
158
- word-wrap: break-word;
159
- padding: var(--ds-spacing-2) 0;
160
- color: inherit;
91
+ /* Using :where to overwrite user agent CSS, but not our own CSS */
92
+ :where(.ds-card, .ds-card__block) {
93
+ & > :first-child {
94
+ margin-block: 0;
161
95
  }
162
96
 
163
- .ds-card__content {
164
- flex-direction: column;
97
+ & > * + * {
98
+ margin-block: var(--dsc-card-gap) 0; /* https://every-layout.dev/layouts/stack/ */
165
99
  }
100
+ }
166
101
 
167
- .ds-card__header {
168
- display: flex;
169
- flex-direction: column;
170
- flex-wrap: wrap;
171
- word-wrap: break-word;
172
- font-family: inherit;
173
- padding: var(--ds-spacing-2) 0;
174
- }
102
+ .ds-card__block {
103
+ box-sizing: border-box;
104
+ margin: 0;
105
+ padding: var(--dsc-card-padding);
106
+ position: relative;
175
107
 
176
- & a:any-link {
177
- color: var(--ds-color-neutral-text-default);
108
+ /* Needed to support automatic separator border between both vertical and horizontal stacking Card.Block: */
109
+ &::before {
110
+ content: '';
111
+ border-top: var(--dsc-card-border);
112
+ position: absolute;
113
+ inset: 0 0 auto;
114
+ translate: 0 -100%;
178
115
  }
179
116
 
180
- & > hr {
181
- width: 100%;
182
- margin: var(--ds-spacing-3) 0;
117
+ &::after {
118
+ content: '';
119
+ border-left: var(--dsc-card-border);
120
+ position: absolute;
121
+ inset: 0 auto 0 0;
122
+ translate: -100%;
183
123
  }
184
124
 
185
- & > *:not(.ds-card__media, hr) {
186
- padding-left: var(--ds-spacing-6);
187
- padding-right: var(--ds-spacing-6);
188
- }
125
+ &:has(> :is(audio, figure, iframe, img, video):only-child) {
126
+ padding: 0;
189
127
 
190
- & > *:not(.ds-card__media):first-child {
191
- padding-top: var(--ds-spacing-6);
192
- }
128
+ & > * {
129
+ border: 0;
130
+ display: block;
131
+ height: auto;
132
+ width: 100%;
133
+ }
193
134
 
194
- & > *:not(.ds-card__media):last-child {
195
- padding-bottom: var(--ds-spacing-6);
135
+ & > iframe {
136
+ aspect-ratio: 16 / 9; /* Make iframes scale responsively */
137
+ }
196
138
  }
197
139
  }