govuk_publishing_components 27.10.2 → 27.11.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }