govuk_publishing_components 27.10.2 → 27.11.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/analytics/explicit-cross-domain-links.js +1 -1
  3. data/app/assets/javascripts/govuk_publishing_components/components/cookie-banner.js +1 -0
  4. data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +1 -0
  5. data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +543 -380
  6. data/app/assets/stylesheets/govuk_publishing_components/components/_single-page-notification-button.scss +30 -0
  7. data/app/assets/stylesheets/govuk_publishing_components/components/print/_layout-super-navigation-header.scss +2 -2
  8. data/app/models/govuk_publishing_components/shared_accessibility_criteria.rb +17 -0
  9. data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +107 -89
  10. data/app/views/govuk_publishing_components/components/_single_page_notification_button.html.erb +23 -0
  11. data/app/views/govuk_publishing_components/components/docs/layout_super_navigation_header.yml +12 -3
  12. data/app/views/govuk_publishing_components/components/docs/single_page_notification_button.yml +32 -0
  13. data/app/views/govuk_publishing_components/components/search/_search_icon.html.erb +5 -5
  14. data/config/locales/en.yml +7 -3
  15. data/lib/govuk_publishing_components/version.rb +1 -1
  16. data/node_modules/govuk-frontend/govuk/components/accordion/macro-options.json +2 -2
  17. data/node_modules/govuk-frontend/govuk/components/back-link/macro-options.json +3 -3
  18. data/node_modules/govuk-frontend/govuk/components/button/_index.scss +3 -4
  19. data/node_modules/govuk-frontend/govuk/components/button/fixtures.json +9 -0
  20. data/node_modules/govuk-frontend/govuk/components/character-count/macro-options.json +6 -6
  21. data/node_modules/govuk-frontend/govuk/components/checkboxes/_index.scss +14 -0
  22. data/node_modules/govuk-frontend/govuk/components/checkboxes/macro-options.json +8 -8
  23. data/node_modules/govuk-frontend/govuk/components/cookie-banner/macro-options.json +1 -1
  24. data/node_modules/govuk-frontend/govuk/components/date-input/macro-options.json +5 -5
  25. data/node_modules/govuk-frontend/govuk/components/details/_index.scss +2 -1
  26. data/node_modules/govuk-frontend/govuk/components/details/macro-options.json +2 -2
  27. data/node_modules/govuk-frontend/govuk/components/error-message/macro-options.json +3 -3
  28. data/node_modules/govuk-frontend/govuk/components/fieldset/macro-options.json +1 -1
  29. data/node_modules/govuk-frontend/govuk/components/file-upload/_index.scss +1 -0
  30. data/node_modules/govuk-frontend/govuk/components/file-upload/macro-options.json +4 -4
  31. data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +3 -0
  32. data/node_modules/govuk-frontend/govuk/components/footer/macro-options.json +2 -2
  33. data/node_modules/govuk-frontend/govuk/components/header/macro-options.json +6 -6
  34. data/node_modules/govuk-frontend/govuk/components/hint/macro-options.json +1 -1
  35. data/node_modules/govuk-frontend/govuk/components/input/macro-options.json +7 -7
  36. data/node_modules/govuk-frontend/govuk/components/inset-text/macro-options.json +1 -1
  37. data/node_modules/govuk-frontend/govuk/components/label/macro-options.json +1 -1
  38. data/node_modules/govuk-frontend/govuk/components/panel/_index.scss +13 -1
  39. data/node_modules/govuk-frontend/govuk/components/panel/macro-options.json +1 -1
  40. data/node_modules/govuk-frontend/govuk/components/radios/_index.scss +14 -0
  41. data/node_modules/govuk-frontend/govuk/components/radios/macro-options.json +8 -8
  42. data/node_modules/govuk-frontend/govuk/components/select/macro-options.json +3 -3
  43. data/node_modules/govuk-frontend/govuk/components/summary-list/fixtures.json +2 -2
  44. data/node_modules/govuk-frontend/govuk/components/summary-list/macro-options.json +7 -7
  45. data/node_modules/govuk-frontend/govuk/components/tabs/macro-options.json +4 -4
  46. data/node_modules/govuk-frontend/govuk/components/textarea/macro-options.json +5 -5
  47. data/node_modules/govuk-frontend/govuk/helpers/_colour.scss +2 -2
  48. data/node_modules/govuk-frontend/govuk/helpers/_spacing.scss +22 -4
  49. data/node_modules/govuk-frontend/govuk/overrides/_all.scss +1 -0
  50. data/node_modules/govuk-frontend/govuk/overrides/_text-align.scss +20 -0
  51. data/node_modules/govuk-frontend/package.json +1 -1
  52. metadata +20 -16
@@ -46,6 +46,10 @@
46
46
  grid-template-columns: fractions($columns);
47
47
  -ms-grid-rows: fractions($rows);
48
48
  grid-template-rows: fractions($rows);
49
+ }
50
+
51
+ @mixin columns-children($items, $columns, $selector: "*") {
52
+ $rows: ceil($items / $columns);
49
53
 
50
54
  // Internet Explorer 10-11 require each element to be placed in the grid -
51
55
  // the `grid-auto-flow` property isn't supported. This means that both the
@@ -92,169 +96,72 @@
92
96
  }
93
97
  }
94
98
 
95
- $search-icon-size: 20px;
96
-
97
- @mixin chevron($colour) {
98
- border-bottom: 3px solid govuk-colour($colour);
99
- border-right: 3px solid govuk-colour($colour);
100
- content: " ";
101
- display: inline-block;
102
- height: 8px;
103
- margin: 0 8px 0 2px;
104
- transform: translateY(-35%) rotate(45deg);
105
- vertical-align: middle;
106
- width: 8px;
107
- }
108
-
109
- %top-level-navigation-link-base {
110
- background: none;
111
- @include govuk-font($size: 24, $weight: bold, $line-height: 20px);
112
- border: 0;
113
- box-sizing: border-box;
114
- display: block;
115
- margin: 0;
116
- padding: govuk-spacing(6) govuk-spacing(3);
117
- position: relative;
118
- text-decoration: none;
119
-
120
- &,
121
- &:link,
122
- &:visited {
123
- color: $govuk-link-colour;
124
- }
125
-
126
- &:focus {
127
- background: $govuk-focus-colour;
128
- border-color: $govuk-focus-text-colour;
129
- border-top-color: $govuk-focus-colour;
130
- color: $govuk-focus-text-colour;
131
- outline: 3px solid transparent;
132
- box-shadow: none;
133
- z-index: 1;
134
- }
135
-
136
- @include govuk-media-query($from: "tablet") {
137
- padding: govuk-spacing(6);
138
- }
139
-
140
- @include govuk-media-query($from: "desktop") {
141
- @include govuk-font($size: 16, $weight: false, $line-height: 20px);
142
- color: govuk-colour("white");
143
- display: inherit;
144
- height: govuk-spacing(9);
145
- padding: govuk-spacing(4);
146
-
147
- &:after {
148
- background: govuk-colour("black");
149
- bottom: 0;
150
- content: " ";
151
- display: block;
152
- height: govuk-spacing(1);
153
- left: govuk-spacing(4);
154
- position: absolute;
155
- right: govuk-spacing(4);
156
- }
157
-
158
- &:hover {
159
- background: govuk-colour("black");
160
- color: govuk-colour("mid-grey");
161
-
162
- &:after {
163
- background-color: govuk-colour("mid-grey");
164
- }
165
- }
166
-
167
- &:focus {
168
- @include govuk-focused-text;
169
- box-shadow: none;
99
+ $icon-size: 20px;
100
+ $chevron-indent-spacing: 7px;
170
101
 
171
- &:after {
172
- background-color: $govuk-focus-text-colour;
173
- }
174
- }
175
-
176
- &,
177
- &:visited {
178
- color: govuk-colour("white");
179
- }
102
+ @mixin chevron($colour, $update: false) {
103
+ @if ($update == true) {
104
+ border-bottom-color: $colour;
105
+ border-right-color: $colour;
106
+ } @else {
107
+ border-bottom: 3px solid $colour;
108
+ border-right: 3px solid $colour;
109
+ content: " ";
110
+ display: inline-block;
111
+ height: 8px;
112
+ margin: 0 8px 0 2px;
113
+ transform: translateY(-35%) rotate(45deg);
114
+ vertical-align: middle;
115
+ width: 8px;
180
116
  }
181
117
  }
182
118
 
183
- %toggle-base {
184
- @extend %top-level-navigation-link-base;
185
- @include govuk-font($size: 16, $weight: false, $line-height: 20px);
186
- border-radius: 0;
187
- cursor: pointer;
188
- padding: govuk-spacing(4);
119
+ @mixin make-selectable-area-bigger {
120
+ background: none;
121
+ bottom: 0;
122
+ content: " ";
123
+ left: 0;
124
+ position: absolute;
189
125
  right: 0;
190
126
  top: 0;
191
-
192
- @include govuk-media-query($from: "desktop") {
193
- border: none;
194
- }
195
127
  }
196
128
 
197
- %top-level-navigation-toggle-base {
198
- @extend %toggle-base;
199
- border-top: 1px solid govuk-colour("black");
200
- height: govuk-spacing(9);
129
+ @mixin pseudo-underline {
130
+ background: none;
131
+ bottom: 0;
132
+ content: " ";
133
+ height: govuk-spacing(1);
134
+ left: govuk-spacing(4);
135
+ position: absolute;
136
+ right: govuk-spacing(4);
137
+ top: auto;
138
+ }
201
139
 
140
+ @mixin focus-and-focus-visible {
202
141
  &:focus {
203
- border-color: $govuk-focus-colour;
142
+ @content;
204
143
  }
205
144
 
206
- &.gem-c-layout-super-navigation-header__open-button {
207
- border-left-color: govuk-colour("black");
208
- border-right-color: govuk-colour("black");
209
-
210
- &,
211
- &:hover {
212
- background: govuk-colour("light-grey");
213
- color: govuk-colour("light-grey");
214
- }
215
-
216
- &:focus {
217
- color: $govuk-focus-colour;
218
- background: $govuk-focus-colour;
219
- }
220
-
221
- &:before,
222
- &:after {
223
- $width: govuk-spacing(4);
224
- $height: 4px;
225
-
226
- border: none;
227
- content: " ";
228
- display: block;
229
- margin: 0;
230
- width: $width;
231
- height: $height;
232
- background: govuk-colour("black");
233
- transform-origin: center;
234
- position: absolute;
235
- top: calc(50% - #{$height / 2});
236
- left: calc(50% - #{$width / 2});
237
- }
238
-
239
- &:before {
240
- transform: rotate(45deg);
241
- }
242
-
243
- &:after {
244
- transform: rotate(-45deg);
245
- }
145
+ &:focus-visible {
146
+ @content;
246
147
  }
247
148
  }
248
149
 
249
- %search-icon {
250
- height: $search-icon-size;
251
- pointer-events: none;
252
- width: $search-icon-size;
150
+ @mixin focus-not-focus-visible {
151
+ & {
152
+ @content;
153
+ }
154
+
155
+ &:focus:not(:focus-visible) {
156
+ @content;
157
+ }
253
158
  }
254
159
 
255
160
  // Header layout - black bar and logo.
256
161
  .gem-c-layout-super-navigation-header {
257
162
  background: govuk-colour("black");
163
+ border-top: 1px solid govuk-colour("black");
164
+ margin-top: -1px;
258
165
  position: relative;
259
166
 
260
167
  .lte-ie8 & {
@@ -276,8 +183,8 @@ $search-icon-size: 20px;
276
183
 
277
184
  .gem-c-layout-super-navigation-header__header-logo {
278
185
  height: govuk-spacing(6);
279
- padding-top: govuk-spacing(3);
280
186
  padding-bottom: govuk-spacing(3);
187
+ padding-top: govuk-spacing(3);
281
188
 
282
189
  @include govuk-media-query($from: "desktop") {
283
190
  display: block;
@@ -292,6 +199,10 @@ $search-icon-size: 20px;
292
199
  }
293
200
  }
294
201
 
202
+ .gem-c-layout-super-navigation-header__navigation-toggle-wrapper {
203
+ position: relative;
204
+ }
205
+
295
206
  // Top level navigation and search.
296
207
  .gem-c-layout-super-navigation-header__navigation-items,
297
208
  .gem-c-layout-super-navigation-header__search-items {
@@ -314,6 +225,10 @@ $search-icon-size: 20px;
314
225
  }
315
226
 
316
227
  .gem-c-layout-super-navigation-header__navigation-items {
228
+ @include govuk-media-query($from: "desktop") {
229
+ display: inline-block;
230
+ }
231
+
317
232
  .js-module-initialised & {
318
233
  padding: 0 0 govuk-spacing(9) 0;
319
234
 
@@ -325,94 +240,290 @@ $search-icon-size: 20px;
325
240
 
326
241
  .gem-c-layout-super-navigation-header__navigation-item,
327
242
  .gem-c-layout-super-navigation-header__search-item {
328
- margin-right: 0;
329
- padding: 0;
243
+ display: block;
244
+ margin: 0 govuk-spacing(3);
245
+ position: relative;
246
+
247
+ @include govuk-media-query($from: "tablet") {
248
+ margin: 0 govuk-spacing(6);
249
+ }
330
250
 
331
251
  @include govuk-media-query($from: "desktop") {
332
- border-bottom: none;
252
+ background: govuk-colour("black");
253
+ display: block;
333
254
  float: left;
255
+ margin: 0;
334
256
  padding: 0;
257
+ position: static;
335
258
  }
336
259
  }
337
260
 
338
261
  .gem-c-layout-super-navigation-header__navigation-item {
339
- &:after {
340
- background-color: $govuk-border-colour;
341
- content: " ";
342
- display: block;
343
- height: 1px;
344
- left: 0;
345
- right: 0;
346
- position: absolute;
347
- }
262
+ border-bottom: 1px solid $govuk-border-colour;
348
263
 
349
264
  @include govuk-media-query($from: "desktop") {
350
- &:after {
351
- content: none;
352
- }
265
+ border-bottom: 0;
353
266
  }
354
267
  }
355
268
 
356
- // Top level navigation links.
357
- .gem-c-layout-super-navigation-header__navigation-item-link {
358
- @extend %top-level-navigation-link-base;
269
+ // Top level navigation links and search link.
270
+ .gem-c-layout-super-navigation-header__navigation-item-link,
271
+ .gem-c-layout-super-navigation-header__search-item-link,
272
+ .gem-c-layout-super-navigation-header__navigation-second-toggle-button {
273
+ @include govuk-link-common;
274
+ @include govuk-link-style-no-visited-state;
275
+
276
+ display: inline-block;
277
+ font-size: 19px;
278
+ @if $govuk-typography-use-rem {
279
+ font-size: govuk-px-to-rem(19px);
280
+ }
281
+ font-weight: bold;
282
+ margin: govuk-spacing(3) 0;
283
+
284
+ @include govuk-media-query($from: "desktop") {
285
+ display: block;
286
+ margin: 0;
287
+ }
288
+
289
+ &:hover {
290
+ @include govuk-link-hover-decoration;
291
+ }
359
292
 
360
293
  &,
361
- &:link, // 👈 required to override govuk-template
294
+ &:link,
362
295
  &:visited {
363
- color: $govuk-link-colour;
296
+ @include focus-and-focus-visible {
297
+ @include govuk-focused-text;
298
+ }
364
299
 
365
- &:hover {
366
- color: $govuk-link-hover-colour;
300
+ // Undoes the :focus styles *only* for browsers that support :focus-visible.
301
+ // See https://www.tpgi.com/focus-visible-and-backwards-compatibility/
302
+ &:focus:not(:focus-visible) {
303
+ background: none;
304
+ box-shadow: none;
305
+ color: $govuk-link-colour;
367
306
 
368
- @include govuk-media-query($from: "desktop") {
369
- color: govuk-colour("mid-grey");
307
+ &:hover {
308
+ @include govuk-link-decoration;
309
+ @include govuk-link-hover-decoration;
310
+ color: $govuk-link-hover-colour;
370
311
  }
371
312
  }
372
313
 
373
- &:focus {
374
- color: $govuk-focus-text-colour;
314
+ &:after {
315
+ @include make-selectable-area-bigger;
375
316
  }
376
317
 
377
318
  @include govuk-media-query($from: "desktop") {
378
- color: govuk-colour("white");
319
+ float: left;
320
+ font-size: 16px;
321
+
322
+ // stylelint-disable max-nesting-depth
323
+ @if $govuk-typography-use-rem {
324
+ font-size: govuk-px-to-rem(16px);
325
+ }
326
+ // stylelint-enable max-nesting-depth
327
+
328
+ height: govuk-spacing(4);
329
+ padding: govuk-spacing(4);
330
+ position: relative;
331
+
332
+ &:before {
333
+ @include chevron(govuk-colour("white"), true);
334
+ }
335
+
336
+ &:hover {
337
+ color: govuk-colour("mid-grey");
338
+
339
+ &:after {
340
+ background: govuk-colour("mid-grey");
341
+ }
342
+ }
343
+
344
+ // stylelint-disable max-nesting-depth
345
+ @include focus-and-focus-visible {
346
+ box-shadow: none;
347
+ color: $govuk-focus-text-colour;
348
+
349
+ &:after {
350
+ background: $govuk-focus-text-colour;
351
+ }
352
+ }
353
+
354
+ @include focus-not-focus-visible {
355
+ &,
356
+ &:hover {
357
+ color: govuk-colour("white");
358
+ text-decoration: none;
359
+ }
360
+ }
361
+ // stylelint-enable max-nesting-depth
362
+
363
+ &:focus:not(:focus-visible) {
364
+ &:after {
365
+ background: none;
366
+ }
367
+ }
368
+
369
+ &:after {
370
+ @include pseudo-underline;
371
+ }
379
372
  }
380
373
  }
381
374
 
382
- // This :link:focus selector is required to override the `govuk-template`
383
- // defaults.
384
- &:link:focus {
385
- color: $govuk-focus-text-colour;
375
+ &:after {
376
+ @include make-selectable-area-bigger;
386
377
  }
378
+ }
387
379
 
380
+ .gem-c-layout-super-navigation-header__navigation-item-link {
388
381
  .js-module-initialised & {
389
- @include govuk-media-query($until: "desktop") {
390
- padding: govuk-spacing(6) govuk-spacing(3) govuk-spacing(6) govuk-spacing(9);
382
+ margin-left: govuk-spacing(4);
383
+ @include govuk-link-style-no-underline;
384
+ }
385
+ }
386
+
387
+ .gem-c-layout-super-navigation-header__navigation-second-toggle-button {
388
+ background: none;
389
+ border: 0;
390
+ color: $govuk-link-colour;
391
+ cursor: pointer;
392
+ padding: 0;
393
+
394
+ @include focus-not-focus-visible {
395
+ &:before {
396
+ @include chevron($govuk-link-colour);
397
+ }
398
+ }
399
+
400
+ @include focus-not-focus-visible {
401
+ &:hover {
402
+ &:before {
403
+ @include chevron($govuk-link-hover-colour, true);
404
+ }
405
+ }
406
+ }
407
+
408
+ &:focus {
409
+ &:before {
410
+ @include chevron($govuk-focus-text-colour, true);
411
+ }
412
+ }
413
+
414
+ @include govuk-media-query($from: "desktop") {
415
+ &:after {
416
+ @include pseudo-underline;
417
+ }
418
+
419
+ @include focus-not-focus-visible {
420
+ color: govuk-colour("white");
421
+ float: left;
422
+ font-size: 16px;
423
+ @if $govuk-typography-use-rem {
424
+ font-size: govuk-px-to-rem(16px);
425
+ }
426
+ height: govuk-spacing(9);
427
+ padding: govuk-spacing(4);
428
+ position: relative;
429
+ text-decoration: none;
430
+
431
+ &:before {
432
+ @include chevron(govuk-colour("white"), true);
433
+ }
434
+ }
435
+ @include focus-not-focus-visible {
436
+ &:hover {
437
+ color: govuk-colour("mid-grey");
438
+ text-decoration: none;
439
+
440
+ &:after {
441
+ background: govuk-colour("mid-grey");
442
+ }
443
+
444
+ &:before {
445
+ @include chevron(govuk-colour("mid-grey"), true);
446
+ }
447
+ }
391
448
  }
392
449
 
393
- @include govuk-media-query($until: "tablet") {
394
- padding-left: govuk-spacing(7);
450
+ @include focus-and-focus-visible {
451
+ color: $govuk-focus-text-colour;
452
+
453
+ &:after {
454
+ background: $govuk-focus-text-colour;
455
+ }
456
+
457
+ &:before {
458
+ @include chevron($govuk-focus-text-colour, true);
459
+ }
395
460
  }
396
461
  }
462
+
463
+ &.gem-c-layout-super-navigation-header__open-button {
464
+ @include focus-not-focus-visible {
465
+ &:before {
466
+ transform: translateY(0) rotate(225deg);
467
+ }
468
+ }
469
+
470
+ @include govuk-media-query($from: "desktop") {
471
+ @include focus-not-focus-visible {
472
+ background: govuk-colour("light-grey");
473
+ color: $govuk-link-colour;
474
+
475
+ &:before {
476
+ @include chevron($govuk-link-colour, true);
477
+ }
478
+
479
+ &:after {
480
+ background-color: $govuk-link-colour;
481
+ }
482
+ }
483
+
484
+ @include focus-and-focus-visible {
485
+ background-color: $govuk-focus-colour;
486
+ color: $govuk-focus-text-colour;
487
+
488
+ &:before {
489
+ @include chevron($govuk-focus-text-colour, true);
490
+ }
491
+
492
+ &:after {
493
+ background: $govuk-focus-text-colour;
494
+ }
495
+ }
496
+ }
497
+ }
498
+
499
+ .js-module-initialised & {
500
+ @include govuk-link-style-no-underline;
501
+ }
397
502
  }
398
503
 
399
504
  // Search link and dropdown.
400
505
  .gem-c-layout-super-navigation-header__search-item-link {
401
- @extend %top-level-navigation-link-base;
506
+ &:link,
507
+ &:visited {
508
+ @include govuk-media-query($from: "desktop") {
509
+ background: $govuk-brand-colour;
402
510
 
403
- @include govuk-media-query($from: "desktop") {
404
- background: $govuk-link-colour;
405
- margin-left: 0;
511
+ &:hover {
512
+ background: none;
406
513
 
407
- &:focus:hover:after,
408
- &:after {
409
- content: none;
410
- }
514
+ &:before {
515
+ left: 0;
516
+ right: 0;
517
+ }
518
+ }
411
519
 
412
- &:hover:after {
413
- content: " ";
414
- left: 0;
415
- right: 0;
520
+ &:focus {
521
+ background: $govuk-focus-colour;
522
+
523
+ &:before {
524
+ content: none;
525
+ }
526
+ }
416
527
  }
417
528
  }
418
529
  }
@@ -423,18 +534,17 @@ $search-icon-size: 20px;
423
534
  }
424
535
  }
425
536
 
426
- .gem-c-layout-super-navigation-header__search-item-link-icon {
427
- @extend %search-icon;
428
- display: none;
429
-
430
- @include govuk-media-query($from: "desktop") {
431
- display: block;
432
- }
537
+ .gem-c-layout-super-navigation-header__search-item-link-icon,
538
+ .gem-c-layout-super-navigation-header__search-toggle-button-link-icon {
539
+ height: $icon-size;
540
+ pointer-events: none;
541
+ width: $icon-size;
433
542
  }
434
543
 
435
- .gem-c-layout-super-navigation-header__search-toggle-button-link-icon {
436
- @extend %search-icon;
437
- display: block;
544
+ .gem-c-layout-super-navigation-header__search-item-link-icon {
545
+ @include govuk-media-query($until: "desktop") {
546
+ @include govuk-visually-hidden;
547
+ }
438
548
  }
439
549
 
440
550
  // Search and popular content dropdown.
@@ -450,223 +560,216 @@ $search-icon-size: 20px;
450
560
 
451
561
  // Styles for top level navigation toggle button.
452
562
  .gem-c-layout-super-navigation-header__navigation-top-toggle-button {
453
- @extend %top-level-navigation-toggle-base;
454
- border-left: 1px solid govuk-colour("mid-grey");
563
+ @include govuk-link-common;
564
+ @include govuk-link-style-no-visited-state;
565
+ @include govuk-link-style-no-underline;
566
+
567
+ font-size: 16px;
568
+ @if $govuk-typography-use-rem {
569
+ font-size: govuk-px-to-rem(16px);
570
+ }
571
+ font-weight: 700;
572
+ background: govuk-colour("black");
573
+ border: 0;
574
+ box-sizing: border-box;
455
575
  color: govuk-colour("white");
576
+ cursor: pointer;
577
+ height: govuk-spacing(9);
578
+ padding: 0;
456
579
  position: absolute;
457
- right: 45px;
580
+ right: ((govuk-spacing(9) - govuk-spacing(3)) - 1px); // width of the search button (60px) - 15px - 1px to create an overlap between buttons and stop the border appearing to hang off the buttons when they're focused/open
581
+ top: 0;
582
+ z-index: 10;
458
583
 
459
- &.gem-c-layout-super-navigation-header__open-button {
460
- border-top-color: govuk-colour("black");
461
- }
584
+ @include focus-and-focus-visible {
585
+ @include govuk-focused-text;
586
+ box-shadow: none;
462
587
 
463
- @include govuk-media-query($from: 360px) {
464
- &:before {
465
- @include chevron("white");
466
- }
467
- }
588
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner {
589
+ border-color: $govuk-focus-colour;
590
+ color: govuk-colour("black");
468
591
 
469
- &:focus {
470
- &:before {
471
- border-color: $govuk-focus-text-colour;
592
+ @include govuk-media-query($from: 360px) {
593
+ &:before {
594
+ @include chevron(govuk-colour("black"), true);
595
+ }
596
+ }
472
597
  }
473
598
  }
474
599
 
475
- @include govuk-media-query(360px) {
476
- right: 60px;
477
- }
478
-
479
- @include govuk-media-query($from: "desktop") {
480
- display: none;
481
- }
482
- }
483
-
484
- // styles for search toggle button
485
- .gem-c-layout-super-navigation-header__search-toggle-button {
486
- @extend %top-level-navigation-toggle-base;
487
- border-top: 1px solid transparent;
488
- border-left: 1px solid govuk-colour("mid-grey");
489
- color: govuk-colour("white");
490
- position: absolute;
491
- right: (0 - govuk-spacing(3));
600
+ // Undoes the :focus styles *only* for browsers that support :focus-visible.
601
+ // See https://www.tpgi.com/focus-visible-and-backwards-compatibility/
602
+ @include focus-not-focus-visible {
603
+ background: none;
604
+ box-shadow: none;
492
605
 
493
- &:after {
494
- background-color: $govuk-link-colour;
495
- content: " ";
496
- left: 0;
497
- right: 0;
498
- }
606
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner {
607
+ border-color: govuk-colour("white");
608
+ color: govuk-colour("white");
499
609
 
500
- &:not(.gem-c-layout-super-navigation-header__open-button):focus {
501
- &:hover,
502
- &:after {
503
- background-color: $govuk-focus-colour;
504
- border-top-color: $govuk-focus-colour;
610
+ @include govuk-media-query($from: 360px) {
611
+ &:before {
612
+ @include chevron(govuk-colour("white"), true);
613
+ }
614
+ }
505
615
  }
506
616
  }
507
617
 
508
- @include govuk-media-query($from: 360px) {
509
- right: 0;
510
- }
511
-
512
- @include govuk-media-query($from: "desktop") {
513
- background-color: $govuk-link-colour;
514
- border-left: 0;
515
- height: govuk-spacing(9);
516
- margin-left: govuk-spacing(3);
517
- padding: govuk-spacing(4);
518
- position: relative;
519
- float: right;
618
+ // Open button modifier
619
+ &.gem-c-layout-super-navigation-header__open-button {
620
+ // stylelint-disable max-nesting-depth
621
+ @include focus-and-focus-visible {
622
+ @include govuk-focused-text;
623
+ box-shadow: none;
520
624
 
521
- &.gem-c-layout-super-navigation-header__open-button {
522
- border-top-color: govuk-colour("black");
625
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner {
626
+ color: govuk-colour("black");
627
+ border-color: $govuk-focus-colour;
523
628
 
524
- &:hover:after {
525
- content: " ";
629
+ @include govuk-media-query($from: 360px) {
630
+ &:before {
631
+ @include chevron(govuk-colour("black"), true);
632
+ transform: translateY(0) rotate(225deg);
633
+ }
634
+ }
526
635
  }
527
636
  }
528
637
 
529
- // To avoid the 'sticky hover' problem, we need to stop the hover state on
530
- // touch screen devices.
531
- //
532
- // One solution is to use `@media(hover: hover)`. This turns on the hover
533
- // state only for devices that aren't touchscreen, but means that browsers
534
- // that don't support this media query won't get a hover state at all.
535
- //
536
- // To get around this, we do the opposite - we turn off the hover state for
537
- // for touchscreen devices.
538
- @media (hover: none), (pointer: coarse) {
539
- &:not(:focus):hover {
540
- background-color: $govuk-link-colour;
541
- color: govuk-colour("white");
638
+ @include focus-not-focus-visible {
639
+ background: govuk-colour("light-grey");
542
640
 
543
- &:after {
544
- background-color: $govuk-link-colour;
641
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner {
642
+ color: govuk-colour("black");
643
+ border-color: govuk-colour("light-grey");
644
+
645
+ @include govuk-media-query($from: 360px) {
646
+ &:before {
647
+ @include chevron(govuk-colour("black"));
648
+ transform: translateY(0) rotate(225deg);
649
+ }
545
650
  }
546
651
  }
547
652
  }
653
+ // stylelint-enable max-nesting-depth
548
654
  }
549
655
  }
550
656
 
551
- // styles for second level navigation toggle buttons
552
- .gem-c-layout-super-navigation-header__navigation-second-toggle-button {
553
- @extend %toggle-base;
554
- @include govuk-font($size: 24, $weight: false, $line-height: 20px);
555
- border: 0;
556
- margin: 0;
557
- padding: govuk-spacing(6) govuk-spacing(3);
558
- position: relative;
559
- text-align: left;
560
- text-decoration: none;
561
- width: 100%;
657
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-button-inner {
658
+ display: inline-block;
659
+ border-left: 1px solid govuk-colour("white");
660
+ border-right: 1px solid govuk-colour("white");
661
+ margin: govuk-spacing(2) 0;
662
+ padding: govuk-spacing(2) govuk-spacing(4);
562
663
 
563
- &:before {
564
- @include chevron("black");
664
+ @include govuk-media-query($from: 360px) {
665
+ &:before {
666
+ @include chevron(govuk-colour("white"));
667
+ }
565
668
  }
669
+ }
566
670
 
567
- &,
568
- &:visited {
569
- color: $govuk-link-colour;// FIXME: contrast against govuk-colour("light-grey") not high enough
671
+ // Styles for search toggle button.
672
+ .gem-c-layout-super-navigation-header__search-toggle-button {
673
+ @include govuk-font($size: 19, $weight: "bold", $line-height: 20px);
674
+ background: govuk-colour("black");
675
+ border: 0;
676
+ color: govuk-colour("white");
677
+ cursor: pointer;
678
+ height: govuk-spacing(9);
679
+ padding: govuk-spacing(4);
680
+ position: absolute;
681
+ right: (0 - govuk-spacing(3));
682
+ top: 0;
683
+ width: govuk-spacing(9);
570
684
 
571
- @include govuk-media-query($from: "desktop") {
572
- color: govuk-colour("white");
573
- }
685
+ @include focus-and-focus-visible {
686
+ @include govuk-focused-text;
687
+ border-color: $govuk-focus-colour;
688
+ box-shadow: none;
689
+ z-index: 11;
574
690
  }
575
691
 
576
- @include govuk-media-query($from: "tablet") {
577
- padding: govuk-spacing(6);
692
+ &:focus:not(:focus-visible) {
693
+ background: none;
694
+ border-color: govuk-colour("white");
695
+ box-shadow: none;
696
+ color: govuk-colour("white");
578
697
  }
579
698
 
580
699
  @include govuk-media-query($from: "desktop") {
581
- @include govuk-font($size: 16, $weight: false, $line-height: 20px);
582
- border-top: 1px solid transparent;
583
- color: govuk-colour("white");
584
- height: govuk-spacing(9);
585
- padding: govuk-spacing(4);
586
- position: relative;
700
+ right: 0;
587
701
 
588
- &:before {
589
- border-color: govuk-colour("white");
702
+ @include focus-not-focus-visible {
703
+ background: $govuk-brand-colour;
704
+ border-bottom: 1px solid govuk-colour("dark-blue");
705
+ border-left: none;
706
+ position: relative;
590
707
  }
591
708
 
592
709
  &:hover {
710
+ background: govuk-colour("black");
711
+ border-bottom: govuk-spacing(1) solid govuk-colour("mid-grey");
593
712
  color: govuk-colour("mid-grey");
594
-
595
- &:after {
596
- background-color: govuk-colour("mid-grey");
597
- }
598
-
599
- &:before {
600
- border-color: govuk-colour("mid-grey");
601
- }
602
713
  }
603
714
 
604
- &:focus {
605
- color: $govuk-focus-text-colour;
606
-
607
- &:after {
608
- background-color: $govuk-focus-text-colour;
609
- }
610
-
611
- &:before {
612
- border-color: $govuk-focus-text-colour;
613
- }
715
+ @include focus-and-focus-visible {
716
+ @include govuk-focused-text;
717
+ border-bottom-color: $govuk-focus-colour;
718
+ box-shadow: none;
614
719
  }
615
720
  }
616
721
 
722
+ // Open button modifier
617
723
  &.gem-c-layout-super-navigation-header__open-button {
618
- border-top-color: govuk-colour("black");
619
-
620
- &:before {
621
- transform: translateY(20%) rotate(225deg);
622
- }
623
-
624
- @include govuk-media-query($from: "desktop") {
625
- background-color: govuk-colour("light-grey");
626
- color: $govuk-link-colour;
627
-
628
- &:after {
629
- background: $govuk-link-colour;
630
- }
631
-
632
- &:before {
633
- border-color: $govuk-link-colour;
634
- }
635
-
636
- &:focus {
637
- background-color: $govuk-focus-colour;
638
- color: $govuk-focus-text-colour;
639
-
640
- &:after {
641
- background-color: $govuk-focus-text-colour;
642
- }
724
+ @include focus-and-focus-visible {
725
+ @include govuk-focused-text;
726
+ border-color: $govuk-focus-colour;
727
+ box-shadow: none;
728
+ color: $govuk-focus-colour;
643
729
 
730
+ @include govuk-media-query($from: 360px) {
644
731
  &:before {
645
- border-color: $govuk-focus-text-colour;
732
+ @include chevron($govuk-focus-colour, true);
646
733
  }
647
734
  }
735
+ }
648
736
 
649
- &:active {
650
- background-color: govuk-colour("light-grey");
651
- color: $govuk-link-colour;
652
-
653
- &:before {
654
- border-color: $govuk-link-colour;
655
- }
656
- }
737
+ @include focus-not-focus-visible {
738
+ background: govuk-colour("light-grey");
739
+ border-bottom-color: govuk-colour("light-grey");
740
+ color: govuk-colour("light-grey");
657
741
  }
658
742
  }
659
743
  }
660
744
 
745
+ .gem-c-layout-super-navigation-header__navigation-top-toggle-close-icon {
746
+ color: $govuk-text-colour;
747
+ display: none;
748
+ font-size: 36px;
749
+ font-weight: normal;
750
+ left: 0;
751
+ line-height: 22px;
752
+ padding: govuk-spacing(4) 0;
753
+ pointer-events: none;
754
+ position: absolute;
755
+ right: 0;
756
+ text-align: center;
757
+ top: 0;
758
+
759
+ .gem-c-layout-super-navigation-header__open-button & {
760
+ display: block;
761
+ }
762
+ }
763
+
661
764
  // Dropdown menu.
662
765
  .gem-c-layout-super-navigation-header__navigation-dropdown-menu {
663
- background: govuk-colour("white");
766
+ background: govuk-colour("light-grey");
664
767
 
665
768
  @include govuk-media-query($from: "desktop") {
666
- background: govuk-colour("light-grey");
667
769
  left: 0;
668
770
  position: absolute;
669
771
  right: 0;
772
+ top: govuk-spacing(9);
670
773
  }
671
774
  }
672
775
 
@@ -682,7 +785,12 @@ $search-icon-size: 20px;
682
785
 
683
786
  // Dropdown menu items.
684
787
  .gem-c-layout-super-navigation-header__dropdown-list-item {
788
+ margin: 0 0 0 $chevron-indent-spacing;
789
+ padding: govuk-spacing(2) 0;
790
+ position: relative;
791
+
685
792
  @include govuk-media-query($from: "desktop") {
793
+ margin: 0;
686
794
  padding: govuk-spacing(2) 0;
687
795
  }
688
796
  }
@@ -699,9 +807,7 @@ $search-icon-size: 20px;
699
807
 
700
808
  & > li {
701
809
  box-sizing: border-box;
702
- margin-bottom: 0;
703
- padding-left: govuk-spacing(3);
704
- padding-right: govuk-spacing(3);
810
+ margin: 0 govuk-spacing(3) govuk-spacing(2) govuk-spacing(3);
705
811
  }
706
812
  }
707
813
  }
@@ -709,64 +815,122 @@ $search-icon-size: 20px;
709
815
  .gem-c-layout-super-navigation-header__navigation-second-items--topics {
710
816
  @include govuk-media-query($from: "desktop") {
711
817
  @include columns(18, 2, "li");
818
+ @include columns-children(18, 2, "li");
712
819
  }
713
820
  }
714
821
 
715
822
  .gem-c-layout-super-navigation-header__navigation-second-items--government-activity {
823
+ & > li:first-child {
824
+ margin-bottom: govuk-spacing(7);
825
+ }
826
+
716
827
  @include govuk-media-query($from: "desktop") {
717
- @include columns(5, 2, "li");
718
- padding-bottom: govuk-spacing(3);
828
+ @include columns(7, 2, "li");
829
+ padding-bottom: 0;
830
+
831
+ & > li,
832
+ & > li:first-child {
833
+ margin-bottom: govuk-spacing(4);
834
+ }
835
+
836
+ @supports (display: grid) {
837
+ & > li:first-child {
838
+ grid-column: span 2;
839
+ }
840
+ }
841
+
842
+ & > li:first-child {
843
+ border-bottom: 1px solid $govuk-border-colour;
844
+ padding-bottom: 0;
845
+ -ms-grid-column-span: 2;
846
+ -ms-grid-column: 1;
847
+ -ms-grid-row: 1;
848
+ }
849
+
850
+ & > li:nth-child(2) {
851
+ -ms-grid-column: 1;
852
+ -ms-grid-row: 2;
853
+ }
854
+
855
+ & > li:nth-child(3) {
856
+ -ms-grid-column: 1;
857
+ -ms-grid-row: 3;
858
+ }
859
+
860
+ & > li:nth-child(4) {
861
+ -ms-grid-column: 1;
862
+ -ms-grid-row: 4;
863
+ }
864
+
865
+ & > li:nth-child(5) {
866
+ -ms-grid-column: 2;
867
+ -ms-grid-row: 2;
868
+ }
869
+
870
+ & > li:nth-child(6) {
871
+ -ms-grid-column: 2;
872
+ -ms-grid-row: 3;
873
+ }
719
874
  }
720
875
  }
721
876
 
722
877
  .gem-c-layout-super-navigation-header__navigation-second-item-link {
723
- display: inline-block;
724
- padding: govuk-spacing(2) 0;
878
+ &:after {
879
+ @include make-selectable-area-bigger;
880
+ }
725
881
 
726
882
  @include govuk-media-query($from: "desktop") {
727
- display: inline;
728
883
  font-weight: bold;
729
884
  padding: 0;
885
+
886
+ &:after {
887
+ content: none;
888
+ }
730
889
  }
731
890
  }
732
891
 
733
892
  .gem-c-layout-super-navigation-header__navigation-second-item-link--with-description {
734
893
  @include govuk-font($size: 19, $weight: bold);
735
- margin-top: govuk-spacing(2);
736
894
  margin-bottom: 0;
895
+ margin-top: govuk-spacing(2);
737
896
  }
738
897
 
739
898
  // Dropdown menu footer links.
740
- .gem-c-layout-super-navigation-header__navigation-second-footer {
741
- border-top: 1px solid govuk-colour("mid-grey");
899
+ .gem-c-layout-super-navigation-header__navigation-second-footer-break {
900
+ @include govuk-media-query($until: "desktop") {
901
+ display: none;
902
+ }
742
903
  }
743
904
 
744
905
  .gem-c-layout-super-navigation-header__navigation-second-footer-list {
745
906
  list-style: none;
746
- padding-bottom: govuk-spacing(8);
747
- padding-top: govuk-spacing(4);
748
-
749
- @include govuk-grid-column($width: "two-thirds", $float: right, $at: "desktop");
907
+ padding: 0 0 govuk-spacing(8) 0;
750
908
 
751
909
  @include govuk-media-query($from: "desktop") {
752
- padding: govuk-spacing(7) 0 govuk-spacing(8) 0;
910
+ margin: 0 (0 - govuk-spacing(3)) 0 (0 - govuk-spacing(3));
911
+ padding: govuk-spacing(8) 0 govuk-spacing(9) 0;
912
+ @include columns(2, 2, "li");
913
+ @include columns-children(2, 2, "li");
753
914
  }
754
915
  }
755
916
 
756
917
  .gem-c-layout-super-navigation-header__navigation-second-footer-item {
918
+ padding: govuk-spacing(2) 0 govuk-spacing(2) $chevron-indent-spacing;
919
+ position: relative;
920
+
757
921
  @include govuk-media-query($from: "desktop") {
758
- box-sizing: border-box;
759
- float: left;
760
- width: 50%;
761
- padding: 0 govuk-spacing(3);
922
+ padding: 0 govuk-spacing(3) 0 govuk-spacing(3);
762
923
  }
763
924
  }
764
925
 
765
926
  .gem-c-layout-super-navigation-header__navigation-second-footer-link {
766
- @include govuk-font($size: 19, $weight: bold);
927
+ @include govuk-font($size: 19, $weight: normal);
767
928
  display: inline-block;
768
929
  margin: govuk-spacing(1) 0;
769
- padding: govuk-spacing(2) 0;
930
+
931
+ &:after {
932
+ @include make-selectable-area-bigger;
933
+ }
770
934
 
771
935
  @include govuk-media-query($from: "desktop") {
772
936
  display: inline;
@@ -791,7 +955,6 @@ $search-icon-size: 20px;
791
955
  left: 0;
792
956
  position: absolute;
793
957
  right: 0;
794
- top: 60px;
795
958
  }
796
959
  }
797
960
  }