@amsterdam/design-system-css 3.2.1 → 4.0.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 (116) hide show
  1. package/CHANGELOG.md +51 -2
  2. package/README.md +10 -6
  3. package/dist/accordion/accordion.css +1 -1
  4. package/dist/accordion/accordion.css.map +1 -1
  5. package/dist/alert/alert.css +1 -1
  6. package/dist/alert/alert.css.map +1 -1
  7. package/dist/avatar/avatar.css +1 -1
  8. package/dist/avatar/avatar.css.map +1 -1
  9. package/dist/badge/badge.css +1 -1
  10. package/dist/badge/badge.css.map +1 -1
  11. package/dist/body/body.css +1 -0
  12. package/dist/body/body.css.map +1 -0
  13. package/dist/breakout/breakout.css +1 -1
  14. package/dist/breakout/breakout.css.map +1 -1
  15. package/dist/button/button.css +1 -1
  16. package/dist/button/button.css.map +1 -1
  17. package/dist/call-to-action-link/call-to-action-link.css +1 -1
  18. package/dist/call-to-action-link/call-to-action-link.css.map +1 -1
  19. package/dist/checkbox/checkbox.css +1 -1
  20. package/dist/checkbox/checkbox.css.map +1 -1
  21. package/dist/description-list/description-list.css +1 -1
  22. package/dist/description-list/description-list.css.map +1 -1
  23. package/dist/dialog/dialog.css +1 -1
  24. package/dist/dialog/dialog.css.map +1 -1
  25. package/dist/field-set/field-set.css.map +1 -1
  26. package/dist/grid/grid.css +1 -1
  27. package/dist/grid/grid.css.map +1 -1
  28. package/dist/heading/heading.css +1 -1
  29. package/dist/heading/heading.css.map +1 -1
  30. package/dist/icon/icon.css +1 -1
  31. package/dist/icon/icon.css.map +1 -1
  32. package/dist/image-slider/image-slider.css +1 -1
  33. package/dist/image-slider/image-slider.css.map +1 -1
  34. package/dist/index.css +1 -1
  35. package/dist/index.css.map +1 -1
  36. package/dist/label/label.css.map +1 -1
  37. package/dist/menu/menu.css +1 -1
  38. package/dist/menu/menu.css.map +1 -1
  39. package/dist/page-footer/page-footer.css +1 -1
  40. package/dist/page-footer/page-footer.css.map +1 -1
  41. package/dist/page-header/page-header.css +1 -1
  42. package/dist/page-header/page-header.css.map +1 -1
  43. package/dist/pagination/pagination.css +1 -1
  44. package/dist/pagination/pagination.css.map +1 -1
  45. package/dist/paragraph/paragraph.css.map +1 -1
  46. package/dist/progress-list/progress-list.css +1 -1
  47. package/dist/progress-list/progress-list.css.map +1 -1
  48. package/dist/prose/prose.css +1 -0
  49. package/dist/prose/prose.css.map +1 -0
  50. package/dist/radio/radio.css +1 -1
  51. package/dist/radio/radio.css.map +1 -1
  52. package/dist/search-field/search-field.css +1 -1
  53. package/dist/search-field/search-field.css.map +1 -1
  54. package/dist/spotlight/spotlight.css +1 -1
  55. package/dist/spotlight/spotlight.css.map +1 -1
  56. package/dist/switch/switch.css +1 -1
  57. package/dist/switch/switch.css.map +1 -1
  58. package/dist/tab-navigation/tab-navigation.css +1 -0
  59. package/dist/tab-navigation/tab-navigation.css.map +1 -0
  60. package/dist/table/table.css +1 -1
  61. package/dist/table/table.css.map +1 -1
  62. package/package.json +4 -4
  63. package/src/common/hide-input.scss +1 -0
  64. package/src/common/print-exact.scss +16 -0
  65. package/src/components/accordion/accordion.scss +1 -5
  66. package/src/components/alert/alert.scss +4 -0
  67. package/src/components/aspect-ratio/README.md +8 -10
  68. package/src/components/avatar/avatar.scss +4 -0
  69. package/src/components/badge/badge.scss +2 -0
  70. package/src/components/body/README.md +15 -0
  71. package/src/components/{document/document.scss → body/body.scss} +2 -1
  72. package/src/components/breadcrumb/README.md +6 -7
  73. package/src/components/breakout/breakout.scss +20 -8
  74. package/src/components/button/button.scss +2 -0
  75. package/src/components/call-to-action-link/call-to-action-link.scss +2 -0
  76. package/src/components/description-list/description-list.scss +44 -9
  77. package/src/components/dialog/dialog.scss +32 -11
  78. package/src/components/field-set/field-set.scss +1 -5
  79. package/src/components/gap/README.md +4 -3
  80. package/src/components/grid/README.md +4 -0
  81. package/src/components/grid/_mixins.scss +49 -11
  82. package/src/components/grid/grid.scss +49 -3
  83. package/src/components/heading/heading.scss +1 -10
  84. package/src/components/icon/icon.scss +0 -7
  85. package/src/components/image-slider/image-slider.scss +1 -1
  86. package/src/components/index.scss +3 -3
  87. package/src/components/label/label.scss +1 -5
  88. package/src/components/logo/README.md +2 -1
  89. package/src/components/margin/README.md +3 -1
  90. package/src/components/menu/menu.scss +32 -29
  91. package/src/components/page-footer/page-footer.scss +16 -4
  92. package/src/components/page-header/README.md +8 -24
  93. package/src/components/page-header/page-header.scss +37 -23
  94. package/src/components/pagination/pagination.scss +4 -0
  95. package/src/components/paragraph/paragraph.scss +1 -5
  96. package/src/components/progress-list/README.md +2 -1
  97. package/src/components/progress-list/progress-list.scss +90 -10
  98. package/src/components/prose/README.md +15 -0
  99. package/src/components/prose/prose.scss +104 -0
  100. package/src/components/search-field/search-field.scss +2 -0
  101. package/src/components/spotlight/spotlight.scss +4 -0
  102. package/src/components/standalone-link/standalone-link.scss +0 -5
  103. package/src/components/tab-navigation/README.md +13 -0
  104. package/src/components/tab-navigation/tab-navigation.scss +101 -0
  105. package/src/components/table/README.md +4 -5
  106. package/src/components/table/table.scss +1 -0
  107. package/src/components/tabs/README.md +9 -27
  108. package/dist/document/document.css +0 -1
  109. package/dist/document/document.css.map +0 -1
  110. package/dist/icon/icon.deprecated.css +0 -1
  111. package/dist/icon/icon.deprecated.css.map +0 -1
  112. package/dist/page-heading/page-heading.deprecated.css +0 -1
  113. package/dist/page-heading/page-heading.deprecated.css.map +0 -1
  114. package/src/components/icon/icon.deprecated.scss +0 -12
  115. package/src/components/page-heading/README.md +0 -3
  116. package/src/components/page-heading/page-heading.deprecated.scss +0 -32
@@ -15,9 +15,10 @@ Six options are available for the width or height of the bottom margin:
15
15
  - `ams-mb-xl`
16
16
  - `ams-mb-2xl`
17
17
 
18
+ These classes apply the [design tokens for space](/docs/brand-design-tokens-space--docs).
19
+
18
20
  Because spacing is responsive, the margins are as well.
19
21
  They are also smaller in [Compact Mode](https://designsystem.amsterdam/docs/docs-developer-guide-modes--docs).
20
- Consult the [Space](/docs/brand-design-tokens-space--docs) docs for an indication of their sizes.
21
22
 
22
23
  ## Guidelines
23
24
 
@@ -29,3 +30,4 @@ Consult the [Space](/docs/brand-design-tokens-space--docs) docs for an indicatio
29
30
  Consult [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing) for details.
30
31
  - To add equal margins between elements, either use the [Gap](/docs/utilities-css-gap--docs) utility class on their common parent or wrap them in a [Column](/docs/components-layout-column--docs) component.
31
32
  This helps in loops: it prevents having to treat the last element differently.
33
+ - Wrap editorial content in the [Prose](/docs/utilities-css-prose--docs) utility class to have all spacing set automatically.
@@ -23,24 +23,42 @@
23
23
  // We subtract the menu link padding to align the items with surrounding content.
24
24
  padding-inline: calc(var(--ams-grid-padding-inline) - var(--ams-menu-link-padding-inline));
25
25
 
26
- @media screen and (min-width: $ams-breakpoint-medium) {
27
- margin-inline: calc(var(--ams-grid-medium-padding-inline) * -1);
28
- padding-inline: var(--ams-grid-medium-padding-inline);
26
+ @media (min-width: $ams-breakpoint-medium) {
27
+ margin-inline: calc(
28
+ var(
29
+ --ams-grid-medium-padding-inline /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
30
+ var(--ams-grid-vi-medium-padding-inline)
31
+ ) *
32
+ -1
33
+ );
34
+ padding-inline: var(
35
+ --ams-grid-medium-padding-inline /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
36
+ var(--ams-grid-vi-medium-padding-inline)
37
+ );
29
38
  }
30
39
 
31
- @media screen and (min-width: $ams-breakpoint-wide) {
40
+ @media (min-width: $ams-breakpoint-wide) {
32
41
  display: none;
33
42
  margin-inline: 0; // Override negative margin above.
34
- max-inline-size: var(--ams-menu-wide-max-inline-size);
35
- padding-block: var(--ams-menu-wide-padding-block);
36
- padding-inline: var(--ams-menu-wide-padding-inline);
43
+ max-inline-size: var(
44
+ --ams-menu-wide-max-inline-size /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
45
+ var(--ams-menu-vi-wide-max-inline-size)
46
+ );
47
+ padding-block: var(
48
+ --ams-menu-wide-padding-block /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
49
+ var(--ams-menu-vi-wide-padding-block)
50
+ );
51
+ padding-inline: var(
52
+ --ams-menu-wide-padding-inline /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
53
+ var(--ams-menu-vi-wide-padding-inline)
54
+ );
37
55
  }
38
56
  }
39
57
 
40
58
  .ams-menu--in-wide-window {
41
59
  display: none;
42
60
 
43
- @media screen and (min-width: $ams-breakpoint-wide) {
61
+ @media (min-width: $ams-breakpoint-wide) {
44
62
  display: block;
45
63
  }
46
64
  }
@@ -53,7 +71,7 @@
53
71
  @include hyphenation;
54
72
  @include text-rendering;
55
73
 
56
- @media screen and (min-width: $ams-breakpoint-wide) {
74
+ @media (min-width: $ams-breakpoint-wide) {
57
75
  gap: var(--ams-menu-list-gap);
58
76
  }
59
77
  }
@@ -79,11 +97,14 @@
79
97
  align-self: initial;
80
98
  }
81
99
 
82
- @media screen and (min-width: $ams-breakpoint-wide) {
100
+ @media (min-width: $ams-breakpoint-wide) {
83
101
  align-items: center;
84
102
  display: flex; // The links do stretch in the vertical layout of Menu.
85
103
  flex-direction: column;
86
- gap: var(--ams-menu-link-wide-gap);
104
+ gap: var(
105
+ --ams-menu-link-wide-gap /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
106
+ var(--ams-menu-link-vi-wide-gap)
107
+ );
87
108
  text-align: center;
88
109
 
89
110
  .ams-menu__icon {
@@ -92,21 +113,3 @@
92
113
  }
93
114
  }
94
115
  }
95
-
96
- /** @deprecated The menu has a dark background now, so this is no longer needed. */
97
- .ams-menu__link--contrast {
98
- color: var(--ams-menu-link-contrast-color);
99
-
100
- &:hover {
101
- color: var(--ams-menu-link-contrast-hover-color);
102
- }
103
- }
104
-
105
- /** @deprecated The menu has a dark background now, so this is no longer needed. */
106
- .ams-menu__link--inverse {
107
- color: var(--ams-menu-link-inverse-color);
108
-
109
- &:hover {
110
- color: var(--ams-menu-link-inverse-hover-color);
111
- }
112
- }
@@ -5,16 +5,20 @@
5
5
 
6
6
  @use "../../common/breakpoint" as *;
7
7
  @use "../../common/hyphenation" as *;
8
+ @use "../../common/print-exact" as *;
8
9
  @use "../../common/resets" as *;
9
10
  @use "../../common/text-rendering" as *;
10
11
 
11
12
  .ams-page-footer__spotlight {
12
13
  background-color: var(--ams-page-footer-spotlight-background-color);
14
+
15
+ @include print-exact;
13
16
  }
14
17
 
15
18
  .ams-page-footer__menu {
16
19
  @include reset-ul;
17
20
 
21
+ background-color: var(--ams-page-footer-menu-background-color);
18
22
  column-gap: var(--ams-page-footer-menu-column-gap);
19
23
  display: flex;
20
24
  flex-wrap: wrap;
@@ -22,12 +26,20 @@
22
26
  padding-inline: var(--ams-page-footer-menu-padding-inline);
23
27
  row-gap: var(--ams-page-footer-menu-row-gap);
24
28
 
25
- @media screen and (min-width: $ams-breakpoint-medium) {
26
- padding-inline: var(--ams-page-footer-menu-medium-padding-inline);
29
+ @media (min-width: $ams-breakpoint-medium) {
30
+ padding-inline: var(
31
+ --ams-page-footer-menu-medium-padding-inline
32
+ /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
33
+ var(--ams-page-footer-menu-vi-medium-padding-inline)
34
+ );
27
35
  }
28
36
 
29
- @media screen and (min-width: $ams-breakpoint-wide) {
30
- padding-inline: var(--ams-page-footer-menu-wide-padding-inline);
37
+ @media (min-width: $ams-breakpoint-wide) {
38
+ padding-inline: var(
39
+ --ams-page-footer-menu-wide-padding-inline
40
+ /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
41
+ var(--ams-page-footer-menu-vi-wide-padding-inline)
42
+ );
31
43
  }
32
44
  }
33
45
 
@@ -2,30 +2,14 @@
2
2
 
3
3
  # Page Header
4
4
 
5
- Displays the City’s logo at the top of every page, and optionally a navigation menu.
6
- Includes the name of the website if it is not the general one.
5
+ Conveys the origin and authority of the website through a logo and an optional name.
6
+ Can serve as a consistent starting point for navigation.
7
7
 
8
8
  ## Guidelines
9
9
 
10
- - The Page Header must be used on all websites for the City of Amsterdam.
11
- - It includes the logo of the City or the organization, the site title (except for the general website), and a menu with links to commonly used pages.
12
- - The Page Header is important because it conveys our corporate identity and is the first thing people see.
13
- Using it consistently helps users recognize and trust the website.
14
- - The Page Header is the same on every page of the website, although full-screen pages may hide it, e.g. a video or a map.
15
- - The inline menu can contain a maximum of 5 items.
16
- The last two will often be ‘Search’ and ‘Menu’.
17
- - An icon can be added to such a menu item if it helps clarify it, e.g. for searching and for logging in and out.
18
- - The 'Menu' button opens a collapsible menu, which has room for more links.
19
- - On narrow windows, links can move from the inline menu to the collapsible one.
20
- - Labels should be short to help the inline menu fit on a single line whenever possible.
21
- - An icon can be added to the end of a link to make its destination easier to guess.
22
- - For websites with a brand name that feature the standard Amsterdam logo, only the emblem is shown in narrow windows.
23
- - An abbreviated brand name can be shown in narrow or medium-wide windows if the full name does not fit.
24
- - If the collapsible menu contains [Headings](https://designsystem.amsterdam/?path=/docs/components-text-heading--docs), give them level 2 and a size of ‘level-3’.
25
- - There’s no need to add whitespace to the Grid in the collapsible menu.
26
- Its container already does this.
27
-
28
- ## References
29
-
30
- - A Page Header is a [landmark](https://www.w3.org/TR/wai-aria-practices-1.1/#aria_landmark_roles) and can be used to group navigation elements.
31
- - [WCAG 3.2.3](https://wcag.com/designers/3-2-3-consistent-navigation/) Consistent Navigation: Navigation menus that appear on multiple pages are consistent.
10
+ - All our websites must start with the Page Header.
11
+ Consistent use helps people identify, navigate, and trust our digital channels.
12
+ - The Page Header must show the appropriate logo and brand name.
13
+ The navigation structure can be configured freely.
14
+ - The Page Header is the same on every page of the website, although full-screen pages (e.g. a video or map) may hide it.
15
+ - Continue below to the [guidelines for elements](#guidelines-for-elements).
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  @use "../../common/breakpoint" as *;
7
+ @use "../../common/print-exact" as *;
7
8
  @use "../../common/resets" as *;
8
9
  @use "../../common/text-rendering" as *;
9
10
 
@@ -11,19 +12,25 @@
11
12
  /*
12
13
  * The logo link section is created twice: once outside the navigation and once hidden inside it.
13
14
  * This keeps all navigation in one nav element and lets the menu wrap around the logo link section.
14
- * Display grid is used to let both logo link sections overlap.
15
15
  */
16
- display: grid;
16
+ background-color: var(--ams-page-header-background-color);
17
+ display: grid; /* Allows both instances of Logo Link to overlap */
17
18
  font-family: var(--ams-page-header-font-family);
18
19
  padding-block: var(--ams-page-header-padding-block);
19
20
  padding-inline: var(--ams-page-header-padding-inline);
20
21
 
21
- @media screen and (min-width: $ams-breakpoint-medium) {
22
- padding-inline: var(--ams-page-header-medium-padding-inline);
22
+ @media (min-width: $ams-breakpoint-medium) {
23
+ padding-inline: var(
24
+ --ams-page-header-medium-padding-inline /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
25
+ var(--ams-page-header-vi-medium-padding-inline)
26
+ );
23
27
  }
24
28
 
25
- @media screen and (min-width: $ams-breakpoint-wide) {
26
- padding-inline: var(--ams-page-header-wide-padding-inline);
29
+ @media (min-width: $ams-breakpoint-wide) {
30
+ padding-inline: var(
31
+ --ams-page-header-wide-padding-inline /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
32
+ var(--ams-page-header-vi-wide-padding-inline)
33
+ );
27
34
  }
28
35
  }
29
36
 
@@ -32,7 +39,7 @@
32
39
  align-self: start; // To align the logo link section to the top of the header when it wraps
33
40
  column-gap: var(--ams-page-header-logo-link-column-gap);
34
41
  display: flex;
35
- grid-area: 1 / 1; // To allow this section to overlap with the second logo link section
42
+ grid-area: 1 / 1; /* Lets this visible instance of Logo Link overlap the hidden one in Navigation. */
36
43
  inline-size: fit-content;
37
44
  outline-offset: var(--ams-page-header-logo-link-outline-offset);
38
45
  text-decoration: none;
@@ -60,7 +67,7 @@
60
67
  inline-size: 0.75rem;
61
68
  overflow: hidden;
62
69
 
63
- @media screen and (min-width: $ams-breakpoint-medium) {
70
+ @media (min-width: $ams-breakpoint-medium) {
64
71
  inline-size: auto;
65
72
  }
66
73
  }
@@ -72,23 +79,19 @@
72
79
  font-weight: var(--ams-page-header-brand-name-font-weight);
73
80
  line-height: var(--ams-page-header-brand-name-line-height);
74
81
 
75
- /*
76
- * If text-wrap is not supported, it is ignored.
77
- * This means the wrapped text will look less balanced, which is fine.
78
- */
79
- /* stylelint-disable-next-line plugin/use-baseline */
82
+ /* stylelint-disable-next-line plugin/use-baseline -- Unbalanced line lengths in non-supporting browsers are acceptable */
80
83
  text-wrap: var(--ams-page-header-brand-name-text-wrap);
81
84
  }
82
85
 
83
86
  .ams-page-header__brand-name-short {
84
- @media screen and (min-width: $ams-breakpoint-wide) {
87
+ @media (min-width: $ams-breakpoint-wide) {
85
88
  display: none;
86
89
  }
87
90
 
88
91
  & + .ams-page-header__brand-name {
89
92
  display: none;
90
93
 
91
- @media screen and (min-width: $ams-breakpoint-wide) {
94
+ @media (min-width: $ams-breakpoint-wide) {
92
95
  display: initial;
93
96
  }
94
97
  }
@@ -98,7 +101,7 @@
98
101
  column-gap: var(--ams-page-header-navigation-column-gap);
99
102
  display: flex;
100
103
  flex-wrap: wrap;
101
- grid-area: 1 / 1; // To allow this section to overlap with the logo link section
104
+ grid-area: 1 / 1; /* Makes the hidden Logo Link child overlap the visible one. */
102
105
  // This section blocks pointer events initially, so the hidden logo link section can't be activated.
103
106
  // The menu and collapsible menu set it back to auto, to make sure they can be activated.
104
107
  pointer-events: none;
@@ -120,7 +123,7 @@
120
123
 
121
124
  // Do not show menu items below the wide breakpoint...
122
125
  .ams-page-header__menu-item {
123
- @media screen and (not (min-width: $ams-breakpoint-wide)) {
126
+ @media (not (min-width: $ams-breakpoint-wide)) {
124
127
  display: none;
125
128
  }
126
129
  }
@@ -131,6 +134,10 @@
131
134
  }
132
135
 
133
136
  @mixin page-header-menu-action {
137
+ color: var(
138
+ --ams-page-header-menu-item-color
139
+ ); /* This token is @deprecated. Will be removed on or after 2026-09-13. */
140
+
134
141
  font-size: var(--ams-page-header-menu-item-font-size);
135
142
  font-weight: var(--ams-page-header-menu-item-font-weight);
136
143
  line-height: var(--ams-page-header-menu-item-line-height);
@@ -147,6 +154,8 @@
147
154
  }
148
155
 
149
156
  .ams-page-header__menu-link {
157
+ @include page-header-menu-action;
158
+
150
159
  color: var(--ams-page-header-menu-link-color);
151
160
  display: inline-flex;
152
161
  gap: var(--ams-page-header-menu-link-gap);
@@ -154,8 +163,6 @@
154
163
  text-decoration-thickness: var(--ams-page-header-menu-link-text-decoration-thickness);
155
164
  text-underline-offset: var(--ams-page-header-menu-link-text-underline-offset);
156
165
 
157
- @include page-header-menu-action;
158
-
159
166
  &:hover {
160
167
  text-decoration-line: var(--ams-page-header-menu-link-hover-text-decoration-line);
161
168
  }
@@ -166,13 +173,14 @@
166
173
  }
167
174
 
168
175
  .ams-page-header__mega-menu-button-item--hide-on-wide-window {
169
- @media screen and (min-width: $ams-breakpoint-wide) {
176
+ @media (min-width: $ams-breakpoint-wide) {
170
177
  display: none;
171
178
  }
172
179
  }
173
180
 
174
181
  .ams-page-header__mega-menu-button {
175
182
  @include reset-button;
183
+ @include page-header-menu-action;
176
184
 
177
185
  background-color: var(--ams-page-header-mega-menu-button-background-color);
178
186
  color: var(--ams-page-header-mega-menu-button-color);
@@ -183,17 +191,23 @@
183
191
  grid-auto-flow: column;
184
192
  padding-inline: var(--ams-page-header-mega-menu-button-padding-inline);
185
193
 
186
- @include page-header-menu-action;
194
+ @include print-exact;
187
195
 
188
196
  &:hover {
189
197
  background-color: var(--ams-page-header-mega-menu-button-hover-background-color);
190
198
  color: var(--ams-page-header-mega-menu-button-hover-color);
191
199
  }
200
+
201
+ &[aria-expanded="true"] {
202
+ font-weight: var(
203
+ --ams-page-header-mega-menu-button-label-open-font-weight
204
+ ); /* This token is @deprecated. Will be removed on or after 2026-09-13. */
205
+ }
192
206
  }
193
207
 
194
208
  .ams-page-header__mega-menu-button-label,
195
209
  .ams-page-header__mega-menu-button-hidden-label {
196
- /* @deprecated These class names will be removed in 6.0.0. */
210
+ /* @deprecated These class names will be removed on or after 2026-09-13. */
197
211
  }
198
212
 
199
213
  .ams-page-header__menu-icon-top,
@@ -245,7 +259,7 @@
245
259
  .ams-page-header__grid-cell-narrow-window-only {
246
260
  display: initial; // Override the `hidden` attribute; this cell duplicates the non-fixed links in the Page Header Menu.
247
261
 
248
- @media screen and (min-width: $ams-breakpoint-wide) {
262
+ @media (min-width: $ams-breakpoint-wide) {
249
263
  display: none;
250
264
  }
251
265
  }
@@ -48,6 +48,10 @@
48
48
  }
49
49
  }
50
50
 
51
+ .ams-pagination__link-label {
52
+ display: inline; // Override the default 'hidden' attribute, showing the visible label when CSS loads
53
+ }
54
+
51
55
  .ams-pagination__link[aria-current="page"] {
52
56
  font-weight: var(--ams-pagination-link-current-font-weight);
53
57
 
@@ -25,11 +25,7 @@
25
25
  font-size: var(--ams-paragraph-large-font-size);
26
26
  line-height: var(--ams-paragraph-large-line-height);
27
27
 
28
- /*
29
- * If text-wrap is not supported, it is ignored.
30
- * This means the wrapped text will look less balanced, which is fine.
31
- */
32
- /* stylelint-disable-next-line plugin/use-baseline */
28
+ /* stylelint-disable-next-line plugin/use-baseline -- Unbalanced line lengths in non-supporting browsers are acceptable */
33
29
  text-wrap: var(--ams-paragraph-large-text-wrap);
34
30
  }
35
31
 
@@ -6,9 +6,10 @@ Displays the progress of a sequence of steps, with optional additional details p
6
6
 
7
7
  ## Guidelines
8
8
 
9
- - Choose the correct level for the steps’ headings.
9
+ - Choose the correct level for the headings of the steps.
10
10
  - Assign a status to each step: _completed_ or _current_.
11
11
  Steps without a status are considered _upcoming_.
12
12
  - Maintain a correct chronological order.
13
13
  Only one step may be _current_; preceding steps must be _completed_.
14
+ - Decide whether the user should be able to collapse and expand steps.
14
15
  - Progress List must only be used on a white background.
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  @use "../../common/breakpoint" as *;
7
+ @use "../../common/print-exact" as *;
7
8
  @use "../../common/resets" as *;
8
9
 
9
10
  @mixin indicator {
@@ -36,8 +37,11 @@
36
37
  display: flex;
37
38
  gap: var(--ams-progress-list-step-gap);
38
39
 
39
- @media screen and (min-width: $ams-breakpoint-medium) {
40
- gap: var(--ams-progress-list-step-medium-gap);
40
+ @media (min-width: $ams-breakpoint-medium) {
41
+ gap: var(
42
+ --ams-progress-list-step-medium-gap /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
43
+ var(--ams-progress-list-step-vi-medium-gap)
44
+ );
41
45
  }
42
46
  }
43
47
 
@@ -80,6 +84,7 @@
80
84
  var(--ams-progress-list-step-marker-shape-outline-style) var(--ams-progress-list-step-marker-shape-outline-color);
81
85
 
82
86
  @include marker-shape;
87
+ @include print-exact;
83
88
 
84
89
  .ams-progress-list__step--completed & {
85
90
  background-color: var(--ams-progress-list-step-completed-marker-shape-background-color);
@@ -127,16 +132,25 @@
127
132
  .ams-progress-list > :last-child:not(.ams-progress-list__step--has-substeps) & {
128
133
  display: none;
129
134
  }
135
+
136
+ /* Hide connector for last step when collapsed. */
137
+ .ams-progress-list > :last-child.ams-progress-list__step--collapsed & {
138
+ display: none;
139
+ }
130
140
  }
131
141
 
132
142
  /* Content */
133
143
 
134
144
  .ams-progress-list__content {
135
145
  flex: auto;
136
- min-inline-size: 0; /* Ensure content can shrink to fit container */
137
-
138
- /* Add white space below all but the last step and steps with substeps. */
139
- .ams-progress-list__step:not(:last-child, .ams-progress-list__step--has-substeps) & {
146
+ min-inline-size: 0;
147
+
148
+ /* Add space below content, unless it is the last child, or if it has substeps and it is not collapsed. */
149
+ .ams-progress-list__step:not(
150
+ :last-child,
151
+ .ams-progress-list__step--has-substeps:not(.ams-progress-list__step--collapsed)
152
+ )
153
+ & {
140
154
  margin-block-end: var(--ams-progress-list-step-content-margin-block-end);
141
155
  }
142
156
  }
@@ -145,9 +159,66 @@
145
159
 
146
160
  .ams-progress-list__heading {
147
161
  margin-block-end: var(--ams-progress-list-step-heading-margin-block-end);
162
+
163
+ .ams-progress-list__step--collapsed & {
164
+ margin-block-end: 0;
165
+ }
148
166
  }
149
167
 
150
- /* Substeps is its own block in BEM and has the same elements as above */
168
+ /* Button */
169
+
170
+ .ams-progress-list__button {
171
+ @include reset-button;
172
+
173
+ background-color: transparent;
174
+ color: var(--ams-progress-list-button-color);
175
+ cursor: var(--ams-progress-list-button-cursor);
176
+ display: flex;
177
+ font-family: inherit;
178
+ font-size: inherit;
179
+ font-weight: inherit;
180
+ gap: var(--ams-progress-list-button-gap);
181
+ inline-size: 100%;
182
+ line-height: inherit;
183
+ outline-offset: var(--ams-progress-list-button-outline-offset);
184
+ padding-block: var(--ams-progress-list-button-padding-block);
185
+ padding-inline: var(--ams-progress-list-button-padding-inline);
186
+ text-align: start;
187
+
188
+ &:hover {
189
+ color: var(--ams-progress-list-button-hover-color);
190
+ }
191
+ }
192
+
193
+ /* Icon */
194
+
195
+ .ams-progress-list__icon svg {
196
+ rotate: 0deg;
197
+ transition: none;
198
+
199
+ [aria-expanded="true"] & {
200
+ rotate: -180deg;
201
+ }
202
+
203
+ @media (prefers-reduced-motion: no-preference) {
204
+ transition: rotate var(--ams-progress-list-icon-transition-duration)
205
+ var(--ams-progress-list-icon-transition-timing-function);
206
+ }
207
+ }
208
+
209
+ /* Panel */
210
+
211
+ .ams-progress-list__panel {
212
+ .ams-progress-list__step--collapsed & {
213
+ display: none;
214
+
215
+ @media print {
216
+ display: block;
217
+ }
218
+ }
219
+ }
220
+
221
+ /* Substeps – is its own block in BEM and has the same elements as above */
151
222
 
152
223
  .ams-progress-list-substeps {
153
224
  @include reset-ol;
@@ -170,10 +241,18 @@
170
241
 
171
242
  @include indicator;
172
243
 
173
- @media screen and (min-width: $ams-breakpoint-medium) {
174
- margin-inline-end: var(--ams-progress-list-substeps-step-indicator-medium-margin-inline-end);
244
+ @media (min-width: $ams-breakpoint-medium) {
245
+ margin-inline-end: var(
246
+ --ams-progress-list-substeps-step-indicator-medium-margin-inline-end
247
+ /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
248
+ var(--ams-progress-list-substeps-step-indicator-vi-medium-margin-inline-end)
249
+ );
175
250
  margin-inline-start: calc(
176
- -1 * var(--ams-progress-list-step-medium-gap) - var(--ams-progress-list-step-marker-shape-block-size)
251
+ -1 *
252
+ var(
253
+ --ams-progress-list-step-medium-gap /* This token is @deprecated. Will be removed on or after 2026-10-20. */,
254
+ var(--ams-progress-list-step-vi-medium-gap)
255
+ ) - var(--ams-progress-list-step-marker-shape-block-size)
177
256
  );
178
257
  }
179
258
  }
@@ -199,6 +278,7 @@
199
278
  var(--ams-progress-list-substeps-step-marker-shape-outline-color);
200
279
 
201
280
  @include marker-shape;
281
+ @include print-exact;
202
282
 
203
283
  .ams-progress-list-substeps__step--completed & {
204
284
  background-color: var(--ams-progress-list-substeps-step-completed-marker-shape-background-color);
@@ -0,0 +1,15 @@
1
+ <!-- @license CC0-1.0 -->
2
+
3
+ # Prose
4
+
5
+ Applies the recommended vertical spacing between the direct children of a container, so editorial content flows without hand-picked margins.
6
+
7
+ ## Class name
8
+
9
+ `ams-prose`
10
+
11
+ ## Guidelines
12
+
13
+ - Wrap this utility class around editorial content to space its content according to the [Vertical space](/docs/docs-designer-guide-vertical-space--docs) recommendations.
14
+ - To add a single ad-hoc gap between two elements, prefer the [Margin Bottom](/docs/utilities-css-margin--docs) utility class on the first one.
15
+ - To add even spacing between a set of siblings, prefer the [Gap](/docs/utilities-css-gap--docs) utility class on their parent.