@nationalarchives/frontend 0.1.5-prerelease → 0.1.6-prerelease

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 (51) hide show
  1. package/README.md +1 -1
  2. package/govuk-prototype-kit.config.json +10 -2
  3. package/nationalarchives/all.css +1 -1
  4. package/nationalarchives/all.css.map +1 -1
  5. package/nationalarchives/all.scss +4 -3
  6. package/nationalarchives/components/_all.scss +5 -7
  7. package/nationalarchives/components/button/_index.scss +15 -16
  8. package/nationalarchives/components/button/button.stories.js +1 -2
  9. package/nationalarchives/components/card/_index.scss +71 -24
  10. package/nationalarchives/components/card/card.stories.js +41 -10
  11. package/nationalarchives/components/card/fixtures.json +135 -7
  12. package/nationalarchives/components/card/macro-options.json +42 -10
  13. package/nationalarchives/components/card/template.njk +53 -24
  14. package/nationalarchives/components/footer/_index.scss +61 -51
  15. package/nationalarchives/components/footer/fixtures.json +1 -1
  16. package/nationalarchives/components/footer/footer.stories.js +22 -2
  17. package/nationalarchives/components/footer/macro-options.json +12 -0
  18. package/nationalarchives/components/footer/template.njk +16 -5
  19. package/nationalarchives/components/grid/_index.scss +127 -52
  20. package/nationalarchives/components/grid/grid.stories.js +2 -3
  21. package/nationalarchives/components/sensitive-image/_index.scss +55 -58
  22. package/nationalarchives/components/sensitive-image/sensitive-image.stories.js +1 -2
  23. package/nationalarchives/stories/design/about.mdx +25 -0
  24. package/nationalarchives/stories/utilities/heading-groups.stories.js +44 -0
  25. package/nationalarchives/stories/{global → utilities}/headings.stories.js +1 -1
  26. package/nationalarchives/stories/utilities/lists.stories.js +38 -0
  27. package/nationalarchives/stories/{global → utilities}/typography.mdx +8 -8
  28. package/nationalarchives/stories/utilities/typography.stories.js +14 -0
  29. package/nationalarchives/templates/homepage.njk +64 -0
  30. package/nationalarchives/templates/layouts/_generic.njk +60 -0
  31. package/nationalarchives/tools/_all.scss +2 -2
  32. package/nationalarchives/tools/_grid.scss +4 -91
  33. package/nationalarchives/tools/_typography.scss +6 -0
  34. package/nationalarchives/utilities/_all.scss +2 -2
  35. package/nationalarchives/utilities/_global.scss +8 -0
  36. package/nationalarchives/utilities/_typography.scss +126 -18
  37. package/nationalarchives/variables/_all.scss +3 -2
  38. package/nationalarchives/variables/_grid.scss +7 -7
  39. package/nationalarchives/variables/_media.scss +11 -11
  40. package/nationalarchives/variables/_typography.scss +10 -0
  41. package/package.json +1 -1
  42. package/nationalarchives/_base.scss +0 -3
  43. package/nationalarchives/_prototype-kit.scss +0 -3
  44. package/nationalarchives/components/button/_button.scss +0 -2
  45. package/nationalarchives/components/card/_card.scss +0 -2
  46. package/nationalarchives/components/footer/_footer.scss +0 -2
  47. package/nationalarchives/components/grid/_grid.scss +0 -2
  48. package/nationalarchives/components/sensitive-image/_sensitive-image.scss +0 -2
  49. package/nationalarchives/stories/global/heading-groups.stories.js +0 -23
  50. package/nationalarchives/stories/global/typography.stories.js +0 -15
  51. package/nationalarchives/tools/_exports.scss +0 -36
@@ -1,84 +1,81 @@
1
- @include nationalarchives-exports(
2
- "nationalarchives/components/sensitive-image"
3
- ) {
4
- .tna-sensitive-image {
5
- }
1
+ @use "../../tools/typography" as typographyTools;
6
2
 
7
- .tna-sensitive-image__warning {
8
- }
3
+ .tna-sensitive-image {
4
+ }
9
5
 
10
- .tna-sensitive-image__details {
11
- position: relative;
6
+ .tna-sensitive-image__warning {
7
+ }
12
8
 
13
- // overflow: hidden;
9
+ .tna-sensitive-image__details {
10
+ position: relative;
14
11
 
15
- &::after {
16
- width: 100%;
17
- padding-bottom: calc(
18
- 100% * var(--sensitive-image-height) / var(--sensitive-image-width)
19
- );
12
+ // overflow: hidden;
20
13
 
21
- display: block;
14
+ &::after {
15
+ width: 100%;
16
+ padding-bottom: calc(
17
+ 100% * var(--sensitive-image-height) / var(--sensitive-image-width)
18
+ );
22
19
 
23
- position: relative;
24
- z-index: -1;
20
+ display: block;
25
21
 
26
- background-image: var(--sensitive-image);
27
- background-clip: padding-box;
28
- background-size: contain;
22
+ position: relative;
23
+ z-index: -1;
29
24
 
30
- filter: blur(20px) saturate(0);
25
+ background-image: var(--sensitive-image);
26
+ background-clip: padding-box;
27
+ background-size: contain;
31
28
 
32
- content: "";
33
- }
29
+ filter: blur(20px) saturate(0);
30
+
31
+ content: "";
34
32
  }
33
+ }
35
34
 
36
- .tna-sensitive-image__show {
37
- display: flex;
38
- align-items: center;
39
- justify-content: center;
35
+ .tna-sensitive-image__show {
36
+ display: flex;
37
+ align-items: center;
38
+ justify-content: center;
40
39
 
41
- position: absolute;
42
- top: 0;
43
- right: 0;
44
- bottom: 0;
45
- left: 0;
46
- z-index: 1;
40
+ position: absolute;
41
+ top: 0;
42
+ right: 0;
43
+ bottom: 0;
44
+ left: 0;
45
+ z-index: 1;
47
46
 
48
- font-size: 0;
47
+ font-size: 0;
49
48
 
50
- cursor: pointer;
49
+ cursor: pointer;
51
50
 
52
- &::after {
53
- padding: 0.5rem 2rem;
51
+ &::after {
52
+ padding: 0.5rem 2rem;
54
53
 
55
- font-size: 1rem;
54
+ @include typographyTools.relativeFontSize(16);
55
+ background-color: #ff0;
56
56
 
57
- background-color: #ff0;
58
-
59
- content: attr(data-action);
60
- }
57
+ content: attr(data-action);
58
+ }
61
59
 
62
- &:hover {
63
- &::after {
64
- color: #fff;
60
+ &:hover {
61
+ &::after {
62
+ color: #fff;
65
63
 
66
- background-color: #000;
67
- }
64
+ background-color: #000;
68
65
  }
69
66
  }
67
+ }
70
68
 
71
- .tna-sensitive-image__container {
72
- }
69
+ .tna-sensitive-image__container {
70
+ }
73
71
 
74
- .tna-sensitive-image__image {
75
- width: 100%;
76
- }
72
+ .tna-sensitive-image__image {
73
+ width: 100%;
74
+ }
77
75
 
78
- .tna-sensitive-image__details[open] {
79
- &::after,
80
- .tna-sensitive-image__show {
81
- display: none;
82
- }
76
+ .tna-sensitive-image__details[open] {
77
+ &::after,
78
+ .tna-sensitive-image__show {
79
+ display: none;
83
80
  }
84
81
  }
@@ -1,6 +1,5 @@
1
1
  import SensitiveImage from "./template.njk";
2
- import "../../all.scss";
3
- import "./_sensitive-image.scss";
2
+ import "./_index.scss";
4
3
  import macroOptions from "./macro-options.json";
5
4
 
6
5
  const argTypes = {
@@ -0,0 +1,25 @@
1
+ import { Meta } from "@storybook/blocks";
2
+
3
+ <Meta title="Design/Prototyping" />
4
+
5
+ # Prototyping with the styles
6
+
7
+ The National Archives frontend styles include support for the [GOV.UK Prototype Kit](https://prototype-kit.service.gov.uk/).
8
+
9
+ You can use the components and styles within the prototype kit to make rich HTML prototypes.
10
+
11
+ ## Create a new prototype
12
+
13
+ 1. Create an empty directory `mkdir my-new-prototype`
14
+ 1. Use `npx govuk-prototype-kit create` to create a new prototype project
15
+ 1. Install the frontend styles with `npm install @nationalarchives/frontend`
16
+ 1. Run `npm run dev` to start up the prototype kit
17
+ 1. Use the National Archives components!
18
+
19
+ ```Nunjucks
20
+ {% from "nationalarchives/components/button/macro.njk" import tnaButton %}
21
+ {{ tnaButton({
22
+ text: "I am a button",
23
+ url: "#"
24
+ }) }}
25
+ ```
@@ -0,0 +1,44 @@
1
+ const argTypes = {
2
+ supertitle: { control: "text" },
3
+ title: { control: "text" },
4
+ level: { control: "number", min: 1, max: 6, step: 1 },
5
+ size: { control: "radio", options: ["m", "l", "xl"] },
6
+ singleSentence: { control: "boolean" },
7
+ };
8
+
9
+ export default {
10
+ title: "Utilities/Typography",
11
+ argTypes,
12
+ };
13
+
14
+ const Template = ({
15
+ supertitle,
16
+ title,
17
+ level = 3,
18
+ size = "l",
19
+ singleSentence,
20
+ }) =>
21
+ singleSentence
22
+ ? `<hgroup class="tna-hgroup tna-hgroup--${size}">
23
+ <h${level} class="tna-hgroup__title">
24
+ <span class="tna-hgroup__supertitle">${supertitle}</span>
25
+ ${title}
26
+ </h${level}>
27
+ </hgroup>`
28
+ : `<hgroup class="tna-hgroup tna-hgroup--${size}">
29
+ <p class="tna-hgroup__supertitle">${supertitle}</p>
30
+ <h${level} class="tna-hgroup__title">${title}</h${level}>
31
+ </hgroup>`;
32
+
33
+ export const HeadingGroup = Template.bind({});
34
+ HeadingGroup.args = {
35
+ supertitle: "The story of",
36
+ title: "Alice Hawkins",
37
+ singleSentence: true,
38
+ };
39
+
40
+ export const HeadingGroupSeparated = Template.bind({});
41
+ HeadingGroupSeparated.args = {
42
+ supertitle: "Record revealed",
43
+ title: "The Monteagle Letter",
44
+ };
@@ -4,7 +4,7 @@ const argTypes = {
4
4
  };
5
5
 
6
6
  export default {
7
- title: "Global styles/Typography",
7
+ title: "Utilities/Typography",
8
8
  argTypes,
9
9
  };
10
10
 
@@ -0,0 +1,38 @@
1
+ const argTypes = {
2
+ items: { control: "object" },
3
+ };
4
+
5
+ export default {
6
+ title: "Utilities/Typography",
7
+ argTypes,
8
+ };
9
+
10
+ const UnorderedListTemplate = ({ items, plain }) =>
11
+ `<ul class="tna-ul${plain ? " tna-ul--plain" : ""}">${items.reduce(
12
+ (list, item) => `${list}<li>${item}</li>`,
13
+ ""
14
+ )}</ul>`;
15
+ export const UnorderedList = UnorderedListTemplate.bind({});
16
+ UnorderedList.args = {
17
+ items: ["Alpha", "Beta", "Gamma"],
18
+ };
19
+ export const UnorderedListPlain = UnorderedListTemplate.bind({});
20
+ UnorderedListPlain.args = {
21
+ items: ["Alpha", "Beta", "Gamma"],
22
+ plain: true,
23
+ };
24
+
25
+ const OrderedListTemplate = ({ items, plain }) =>
26
+ `<ol class="tna-ol${plain ? " tna-ol--plain" : ""}">${items.reduce(
27
+ (list, item) => `${list}<li>${item}</li>`,
28
+ ""
29
+ )}</ol>`;
30
+ export const OrderedList = OrderedListTemplate.bind({});
31
+ OrderedList.args = {
32
+ items: ["Alpha", "Beta", "Gamma"],
33
+ };
34
+ export const OrderedListPlain = OrderedListTemplate.bind({});
35
+ OrderedListPlain.args = {
36
+ items: ["Alpha", "Beta", "Gamma"],
37
+ plain: true,
38
+ };
@@ -1,7 +1,8 @@
1
- import { Meta, Primary, Controls, Story, Canvas, Typeset } from "@storybook/blocks";
1
+ import { Meta, Canvas } from "@storybook/blocks";
2
2
  import * as HeadingStories from './headings.stories';
3
3
  import * as HeadingGroupStories from './heading-groups.stories';
4
4
  import * as TypographyStories from './typography.stories';
5
+ import * as ListStories from './lists.stories';
5
6
 
6
7
  <Meta of={TypographyStories} />
7
8
 
@@ -9,14 +10,13 @@ import * as TypographyStories from './typography.stories';
9
10
 
10
11
  We use a set of typefaces...
11
12
 
12
- <Story of={HeadingStories.Heading1} />
13
- <Story of={HeadingStories.Heading2} />
14
- <Story of={HeadingStories.Heading3} />
15
- <Story of={HeadingGroupStories.HeadingGroup} />
16
- <Story of={TypographyStories.BodyFont} />
17
-
18
13
  <Canvas of={HeadingStories.Heading1} />
19
14
  <Canvas of={HeadingStories.Heading2} />
20
15
  <Canvas of={HeadingStories.Heading3} />
21
16
  <Canvas of={HeadingGroupStories.HeadingGroup} />
22
- <Canvas of={TypographyStories.BodyFont} />
17
+ <Canvas of={HeadingGroupStories.HeadingGroupSeparated} />
18
+ <Canvas of={TypographyStories.Paragraph} />
19
+ <Canvas of={ListStories.UnorderedList} />
20
+ <Canvas of={ListStories.UnorderedListPlain} />
21
+ <Canvas of={ListStories.OrderedList} />
22
+ <Canvas of={ListStories.OrderedListPlain} />
@@ -0,0 +1,14 @@
1
+ const argTypes = {
2
+ text: { control: "text" },
3
+ };
4
+
5
+ export default {
6
+ title: "Utilities/Typography",
7
+ argTypes,
8
+ };
9
+
10
+ const ParagraphTemplate = ({ text }) => `<p class="tna-p">${text}</p>`;
11
+ export const Paragraph = ParagraphTemplate.bind({});
12
+ Paragraph.args = {
13
+ text: "This is some body text",
14
+ };
@@ -0,0 +1,64 @@
1
+ {% from "nationalarchives/components/card/macro.njk" import tnaCard %}
2
+
3
+ {% extends "layouts/_generic.njk" %}
4
+
5
+ {% block pageTitle %}The National Archives | Welcome{% endblock %}
6
+
7
+ {% block content %}
8
+ <div class="tna-container">
9
+ <div class="tna-column tna-column--full">
10
+ <h1 class="tna-heading tna-heading--xl">
11
+ Welcome
12
+ </h1>
13
+ </div>
14
+ <div class="tna-column tna-column--full">
15
+ {{ tnaCard({
16
+ "heading": {
17
+ "supertitle": "Card supertitle",
18
+ "title": "Card title",
19
+ "level": 2,
20
+ "size": "m"
21
+ },
22
+ "href": "#",
23
+ "image": {
24
+ "src": "https://loremflickr.com/640/360",
25
+ "alt": "A placeholder image"
26
+ },
27
+ "body": "<p>Card body</p>",
28
+ "actions": [
29
+ {
30
+ "text": "Card action",
31
+ "href": "#",
32
+ "title": "Go and do the action"
33
+ }
34
+ ],
35
+ "featured": true,
36
+ "htmlElement": "article"
37
+ }) }}
38
+ </div>
39
+ {% for item in range(0, 12) -%}
40
+ <div class="tna-column tna-column--width-1-3 tna-column--width-1-2-medium tna-column--full-small tna-column--full-tiny">
41
+ {{ tnaCard({
42
+ "heading": {
43
+ "supertitle": "Card supertitle",
44
+ "title": "Card title",
45
+ "level": 3
46
+ },
47
+ "href": "#",
48
+ "image": {
49
+ "src": "https://loremflickr.com/640/360",
50
+ "alt": "A placeholder image"
51
+ },
52
+ "body": "<p>Card body</p>",
53
+ "actions": [
54
+ {
55
+ "text": "Card action",
56
+ "href": "#",
57
+ "title": "Go and do the action"
58
+ }
59
+ ]
60
+ }) }}
61
+ </div>
62
+ {%- endfor %}
63
+ </div>
64
+ {% endblock %}
@@ -0,0 +1,60 @@
1
+ {# Based on https://github.com/alphagov/govuk-frontend/blob/8b6bf304b9fc891f64459c25a08f3d623f3fea72/packages/govuk-frontend/src/govuk/template.njk #}
2
+ {#% from "./components/skip-link/macro.njk" import tnaSkipLink -%#}
3
+ <!DOCTYPE html>
4
+ <html lang="{{ htmlLang | default('en') }}" class="tna-template {{ htmlClasses }}">
5
+ <head>
6
+ <meta charset="utf-8">
7
+ <title{% if pageTitleLang %} lang="{{ pageTitleLang }}"{% endif %}>{% block pageTitle %}The National Archives{% endblock %}</title>
8
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
9
+ <meta name="theme-color" content="{{ themeColor | default('#000000') }}">
10
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
11
+
12
+ {% block headIcons %}
13
+ <link rel="shortcut icon" sizes="16x16 32x32 48x48" href="{{ assetPath | default('/assets') }}/images/favicon.ico" type="image/x-icon">
14
+ <link rel="mask-icon" href="{{ assetPath | default('/assets') }}/images/govuk-mask-icon.svg" color="{{ themeColor | default('#0b0c0c') }}"> {# Hardcoded value of $govuk-black #}
15
+ <link rel="apple-touch-icon" sizes="180x180" href="{{ assetPath | default('/assets') }}/images/govuk-apple-touch-icon-180x180.png">
16
+ <link rel="apple-touch-icon" sizes="167x167" href="{{ assetPath | default('/assets') }}/images/govuk-apple-touch-icon-167x167.png">
17
+ <link rel="apple-touch-icon" sizes="152x152" href="{{ assetPath | default('/assets') }}/images/govuk-apple-touch-icon-152x152.png">
18
+ <link rel="apple-touch-icon" href="{{ assetPath | default('/assets') }}/images/govuk-apple-touch-icon.png">
19
+ {% endblock %}
20
+
21
+ {% block head %}{% endblock %}
22
+
23
+ {% block stylesheets %}
24
+ {% include "govuk-prototype-kit/includes/stylesheets-plugins.njk" %}
25
+ {% endblock %}
26
+
27
+ {# OpenGraph images needs to be absolute, so we need either a URL for the image or for assetUrl to be set #}
28
+ {% if opengraphImageUrl or assetUrl %}
29
+ <meta property="og:image" content="{{ opengraphImageUrl | default(assetUrl + '/images/govuk-opengraph-image.png') }}">
30
+ {% endif %}
31
+ </head>
32
+ <body class="tna-template__body {{ bodyClasses }}" {%- for attribute, value in bodyAttributes %} {{attribute}}="{{value}}"{% endfor %}>
33
+
34
+ {% block bodyStart %}{% endblock %}
35
+
36
+ {% block skipLink %}
37
+ {#{ govukSkipLink({
38
+ href: '#main-content',
39
+ text: 'Skip to main content'
40
+ }) }#}
41
+ {% endblock %}
42
+
43
+ {% block header %}
44
+ <h1>HEADER</h1>
45
+ {% endblock %}
46
+
47
+ {% block main %}
48
+ {% block beforeContent %}{% endblock %}
49
+ <main class="tna-main-wrapper {{ mainClasses }}" id="main-content" role="main"{% if mainLang %} lang="{{ mainLang }}"{% endif %}>
50
+ {% block content %}{% endblock %}
51
+ </main>
52
+ {% endblock %}
53
+
54
+ {% block footer %}
55
+ <h1>FOOTER</h1>
56
+ {% endblock %}
57
+
58
+ {% block bodyEnd %}{% endblock %}
59
+ </body>
60
+ </html>
@@ -1,2 +1,2 @@
1
- @import "exports";
2
- @import "grid";
1
+ @use "grid";
2
+ @use "typography";
@@ -1,4 +1,5 @@
1
- @import "../variables/all";
1
+ @use "sass:math";
2
+ @use "../variables/grid";
2
3
 
3
4
  @mixin columns-generator($count, $suffix: "") {
4
5
  @for $i from 1 through $count - 1 {
@@ -10,6 +11,7 @@
10
11
  ) {
11
12
  .tna-column--width-#{math.div($i, $j)}-#{math.div($count, $j)}#{$suffix} {
12
13
  width: math.div(100%, $count) * $i;
14
+ flex: none;
13
15
  }
14
16
 
15
17
  // .column--margin-right-#{math.div($i, $j)}-#{math.div($count, $j)}#{$suffix} {
@@ -27,6 +29,7 @@
27
29
  @if ($simplestFractionFound != true) {
28
30
  .tna-column--width-#{$i}-#{$count}#{$suffix} {
29
31
  width: math.div(100%, $count) * $i;
32
+ flex: none;
30
33
  }
31
34
 
32
35
  // .column--margin-right-#{$i}-#{$count}#{$suffix} {
@@ -39,93 +42,3 @@
39
42
  }
40
43
  }
41
44
  }
42
-
43
- @mixin grid-medium {
44
- .tna-column--width-full-medium {
45
- width: 100%;
46
- }
47
-
48
- @for $i from 1 through 3 {
49
- .tna-column--flex-#{$i}-medium {
50
- flex: $i 0;
51
- }
52
- }
53
-
54
- // @for $i from 1 through 3 {
55
- // .column--order-#{$i}-medium {
56
- // order: $i;
57
- // }
58
- // }
59
-
60
- @include columns-generator($column-count-medium, "-medium");
61
- }
62
-
63
- @mixin grid-mobile {
64
- .tna-container {
65
- padding-right: math.div($gutter-width-mobile, 2) + 0.75rem;
66
- padding-left: math.div($gutter-width-mobile, 2) + 0.75rem;
67
- }
68
-
69
- .tna-column {
70
- padding-right: math.div($gutter-width-mobile, 2);
71
- padding-left: math.div($gutter-width-mobile, 2);
72
- }
73
-
74
- // .column--width-full-mobile {
75
- // width: 100%;
76
- // }
77
-
78
- // @for $i from 1 through 3 {
79
- // .column--flex-#{$i}-mobile {
80
- // flex: $i 0;
81
- // }
82
- // }
83
-
84
- // @for $i from 1 through 3 {
85
- // .column--order-#{$i}-mobile {
86
- // order: $i;
87
- // }
88
- // }
89
- }
90
-
91
- @mixin grid-small {
92
- .tna-column--width-full-small {
93
- width: 100%;
94
- }
95
-
96
- @for $i from 1 through 3 {
97
- .tna-column--flex-#{$i}-small {
98
- flex: $i 0;
99
- }
100
- }
101
-
102
- // @for $i from 1 through 3 {
103
- // .column--order-#{$i}-small {
104
- // order: $i;
105
- // }
106
- // }
107
-
108
- @include columns-generator($column-count-small, "-small");
109
- }
110
-
111
- @mixin grid-tiny {
112
- .tna-column--width-full-tiny {
113
- width: 100%;
114
- }
115
-
116
- @for $i from 1 through 3 {
117
- .tna-column--flex-#{$i}-tiny {
118
- width: auto;
119
-
120
- flex: $i 0;
121
- }
122
- }
123
-
124
- // @for $i from 1 through 3 {
125
- // .column--order-#{$i}-tiny {
126
- // order: $i;
127
- // }
128
- // }
129
-
130
- @include columns-generator($column-count-tiny, "-tiny");
131
- }
@@ -0,0 +1,6 @@
1
+ @use "sass:math";
2
+ @use "../variables/typography";
3
+
4
+ @mixin relativeFontSize($fontSizePx) {
5
+ font-size: #{math.div($fontSizePx, typography.$baseFontSizePx)}rem;
6
+ }
@@ -1,2 +1,2 @@
1
- @import "global";
2
- @import "typography";
1
+ @use "global";
2
+ @use "typography";
@@ -1,3 +1,5 @@
1
+ @use "../variables/typography";
2
+
1
3
  .tna-template {
2
4
  min-width: 320px;
3
5
  width: 100%;
@@ -7,6 +9,8 @@
7
9
  overflow-y: auto;
8
10
  -webkit-overflow-scrolling: touch;
9
11
 
12
+ font-size: typography.$baseFontSizePx;
13
+
10
14
  @media (prefers-reduced-motion) {
11
15
  * {
12
16
  animation: none !important;
@@ -37,3 +41,7 @@ video,
37
41
  canvas {
38
42
  width: 100%;
39
43
  }
44
+
45
+ *:focus {
46
+ outline: 3px #f0a solid;
47
+ }