@nationalarchives/frontend 0.1.17-prerelease → 0.1.19-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.
- package/nationalarchives/all.css +12 -2
- package/nationalarchives/all.css.map +1 -1
- package/nationalarchives/all.js +1 -1
- package/nationalarchives/all.js.map +1 -1
- package/nationalarchives/all.mjs +26 -2
- package/nationalarchives/all.scss +20 -4
- package/nationalarchives/assets/fonts/OpenSans-Bold.ttf +0 -0
- package/nationalarchives/assets/fonts/OpenSans-Medium.ttf +0 -0
- package/nationalarchives/assets/fonts/RobotoMono-Regular.ttf +0 -0
- package/nationalarchives/components/_index.scss +18 -16
- package/nationalarchives/components/breadcrumbs/_index.scss +1 -109
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -0
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -0
- package/nationalarchives/components/breadcrumbs/breadcrumbs.js +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.scss +111 -0
- package/nationalarchives/components/button/_button-group.scss +3 -5
- package/nationalarchives/components/button/_index.scss +1 -73
- package/nationalarchives/components/button/button.css +13 -0
- package/nationalarchives/components/button/button.css.map +1 -0
- package/nationalarchives/components/button/button.scss +103 -0
- package/nationalarchives/components/button/button.stories.js +61 -0
- package/nationalarchives/components/button/macro-options.json +19 -1
- package/nationalarchives/components/button/template.njk +8 -2
- package/nationalarchives/components/card/_index.scss +1 -183
- package/nationalarchives/components/card/card.css +13 -0
- package/nationalarchives/components/card/card.css.map +1 -0
- package/nationalarchives/components/card/card.scss +171 -0
- package/nationalarchives/components/card/card.stories.js +185 -95
- package/nationalarchives/components/card/fixtures.json +57 -28
- package/nationalarchives/components/card/macro-options.json +77 -48
- package/nationalarchives/components/card/template.njk +47 -37
- package/nationalarchives/components/cookie-banner/_index.scss +1 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.css +13 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.js +2 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.mjs +83 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.scss +32 -0
- package/nationalarchives/components/cookie-banner/cookie-banner.stories.js +164 -0
- package/nationalarchives/components/cookie-banner/fixtures.json +4 -0
- package/nationalarchives/components/cookie-banner/macro-options.json +38 -0
- package/nationalarchives/components/cookie-banner/macro.njk +3 -0
- package/nationalarchives/components/cookie-banner/template.njk +61 -0
- package/nationalarchives/components/filters/_index.scss +1 -54
- package/nationalarchives/components/filters/filters.css +1 -0
- package/nationalarchives/components/filters/filters.css.map +1 -0
- package/nationalarchives/components/filters/filters.scss +53 -0
- package/nationalarchives/components/footer/_index.scss +1 -270
- package/nationalarchives/components/footer/footer.css +13 -0
- package/nationalarchives/components/footer/footer.css.map +1 -0
- package/nationalarchives/components/footer/footer.scss +265 -0
- package/nationalarchives/components/footer/footer.stories.js +6 -6
- package/nationalarchives/components/footer/macro-options.json +7 -1
- package/nationalarchives/components/footer/template.njk +10 -6
- package/nationalarchives/components/gallery/_index.scss +1 -0
- package/nationalarchives/components/gallery/fixtures.json +4 -0
- package/nationalarchives/components/gallery/gallery.css +13 -0
- package/nationalarchives/components/gallery/gallery.css.map +1 -0
- package/nationalarchives/components/gallery/gallery.js +2 -0
- package/nationalarchives/components/gallery/gallery.js.map +1 -0
- package/nationalarchives/components/gallery/gallery.mjs +80 -0
- package/nationalarchives/components/gallery/gallery.scss +129 -0
- package/nationalarchives/components/gallery/gallery.stories.js +76 -0
- package/nationalarchives/components/gallery/macro-options.json +104 -0
- package/nationalarchives/components/gallery/macro.njk +3 -0
- package/nationalarchives/components/gallery/template.njk +45 -0
- package/nationalarchives/components/grid/_index.scss +1 -79
- package/nationalarchives/components/grid/grid.css +1 -0
- package/nationalarchives/components/grid/grid.css.map +1 -0
- package/nationalarchives/components/grid/grid.scss +81 -0
- package/nationalarchives/components/header/_index.scss +1 -586
- package/nationalarchives/components/header/header.css +1 -0
- package/nationalarchives/components/header/header.css.map +1 -0
- package/nationalarchives/components/header/header.js +1 -1
- package/nationalarchives/components/header/header.js.map +1 -1
- package/nationalarchives/components/header/header.scss +594 -0
- package/nationalarchives/components/header/header.stories.js +5 -5
- package/nationalarchives/components/hero/_index.scss +1 -167
- package/nationalarchives/components/hero/hero.css +1 -0
- package/nationalarchives/components/hero/hero.css.map +1 -0
- package/nationalarchives/components/hero/hero.scss +169 -0
- package/nationalarchives/components/index-grid/_index.scss +1 -82
- package/nationalarchives/components/index-grid/index-grid.css +1 -0
- package/nationalarchives/components/index-grid/index-grid.css.map +1 -0
- package/nationalarchives/components/index-grid/index-grid.scss +84 -0
- package/nationalarchives/components/message/_index.scss +1 -35
- package/nationalarchives/components/message/message.css +1 -0
- package/nationalarchives/components/message/message.css.map +1 -0
- package/nationalarchives/components/message/message.scss +36 -0
- package/nationalarchives/components/phase-banner/_index.scss +1 -60
- package/nationalarchives/components/phase-banner/fixtures.json +8 -8
- package/nationalarchives/components/phase-banner/phase-banner.css +1 -0
- package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -0
- package/nationalarchives/components/phase-banner/phase-banner.scss +31 -0
- package/nationalarchives/components/phase-banner/template.njk +2 -2
- package/nationalarchives/components/picture/_index.scss +1 -62
- package/nationalarchives/components/picture/picture.css +13 -0
- package/nationalarchives/components/picture/picture.css.map +1 -0
- package/nationalarchives/components/picture/picture.js +1 -1
- package/nationalarchives/components/picture/picture.js.map +1 -1
- package/nationalarchives/components/picture/picture.mjs +2 -1
- package/nationalarchives/components/picture/picture.scss +65 -0
- package/nationalarchives/components/profile/_index.scss +1 -2
- package/nationalarchives/components/profile/profile.css +1 -0
- package/nationalarchives/components/profile/profile.css.map +1 -0
- package/nationalarchives/components/profile/profile.scss +5 -0
- package/nationalarchives/components/sensitive-image/_index.scss +1 -77
- package/nationalarchives/components/sensitive-image/sensitive-image.css +1 -0
- package/nationalarchives/components/sensitive-image/sensitive-image.css.map +1 -0
- package/nationalarchives/components/sensitive-image/sensitive-image.js +1 -1
- package/nationalarchives/components/sensitive-image/sensitive-image.js.map +1 -1
- package/nationalarchives/components/sensitive-image/sensitive-image.scss +78 -0
- package/nationalarchives/components/skip-link/_index.scss +1 -63
- package/nationalarchives/components/skip-link/skip-link.css +1 -0
- package/nationalarchives/components/skip-link/skip-link.css.map +1 -0
- package/nationalarchives/components/skip-link/skip-link.scss +61 -0
- package/nationalarchives/components/tabs/_index.scss +1 -144
- package/nationalarchives/components/tabs/tabs.css +1 -0
- package/nationalarchives/components/tabs/tabs.css.map +1 -0
- package/nationalarchives/components/tabs/tabs.js +1 -1
- package/nationalarchives/components/tabs/tabs.js.map +1 -1
- package/nationalarchives/components/tabs/tabs.mjs +2 -0
- package/nationalarchives/components/tabs/tabs.scss +143 -0
- package/nationalarchives/components/tabs/tabs.stories.js +0 -1
- package/nationalarchives/lib/_font-awesome.scss +5 -0
- package/nationalarchives/lib/_index.scss +1 -0
- package/nationalarchives/lib/cookies.mjs +110 -0
- package/nationalarchives/lib/font-awesome/brands.css +5 -0
- package/nationalarchives/lib/font-awesome/brands.css.map +1 -0
- package/nationalarchives/lib/font-awesome/fontawesome.css +5 -0
- package/nationalarchives/lib/font-awesome/fontawesome.css.map +1 -0
- package/nationalarchives/lib/font-awesome/regular.css +5 -0
- package/nationalarchives/lib/font-awesome/regular.css.map +1 -0
- package/nationalarchives/lib/font-awesome/solid.css +5 -0
- package/nationalarchives/lib/font-awesome/solid.css.map +1 -0
- package/nationalarchives/lib/font-awesome/v4-shims.css +5 -0
- package/nationalarchives/lib/font-awesome/v4-shims.css.map +1 -0
- package/nationalarchives/stories/development/about.mdx +60 -0
- package/nationalarchives/stories/development/contributing.mdx +8 -5
- package/nationalarchives/stories/development/relationships.mdx +57 -0
- package/nationalarchives/stories/development/using.mdx +75 -0
- package/nationalarchives/stories/utilities/colour-schemes/colour-schemes.stories.js +176 -50
- package/nationalarchives/stories/utilities/typography/heading-groups.stories.js +3 -3
- package/nationalarchives/stories/utilities/typography/typography.stories.js +1 -1
- package/nationalarchives/templates/layouts/_generic.njk +7 -2
- package/nationalarchives/tools/_colour.scss +55 -17
- package/nationalarchives/tools/_index.scss +5 -4
- package/nationalarchives/tools/_spacing.scss +22 -0
- package/nationalarchives/tools/_typography.scss +0 -4
- package/nationalarchives/utilities/_a11y.scss +24 -0
- package/nationalarchives/utilities/_global.scss +3 -29
- package/nationalarchives/utilities/_index.scss +5 -5
- package/nationalarchives/utilities/_overrides.scss +5 -15
- package/nationalarchives/utilities/_typography.scss +68 -57
- package/nationalarchives/variables/_colour.scss +17 -9
- package/nationalarchives/variables/_grid.scss +1 -1
- package/nationalarchives/variables/_spacing.scss +12 -12
- package/nationalarchives/variables/_typography.scss +7 -7
- package/package.json +5 -2
- package/nationalarchives/assets/images/footer/facebook.svg +0 -11
- package/nationalarchives/assets/images/footer/flickr.svg +0 -11
- package/nationalarchives/assets/images/footer/instagram.svg +0 -17
- package/nationalarchives/assets/images/footer/rss.svg +0 -13
- package/nationalarchives/assets/images/footer/twitter.svg +0 -14
- package/nationalarchives/assets/images/footer/youtube.svg +0 -12
- package/nationalarchives/stories/development/dependencies.mdx +0 -11
- package/nationalarchives/stories/development/relationships.md +0 -91
- package/nationalarchives/stories/development/technologies.mdx +0 -65
- package/nationalarchives/utilities/_font-awesome.scss +0 -5
@@ -0,0 +1,2 @@
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("TNAFrontend",[],t):"object"==typeof exports?exports.TNAFrontend=t():e.TNAFrontend=t()}(self,(()=>(()=>{"use strict";var e={774:(e,t,o)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function r(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){c(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function c(e,t,o){return(t=a(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,a(n.key),n)}}function a(e){var t=function(e,t){if("object"!==n(e)||null===e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var i=o.call(e,"string");if("object"!==n(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===n(t)?t:String(t)}function u(e,t){l(e,t),t.add(e)}function l(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function f(e,t,o){return function(e,t,o){if(t.set)t.set.call(e,o);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=o}}(e,y(e,t,"set"),o),o}function p(e,t,o){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return o}function h(e,t){return function(e,t){return t.get?t.get.call(e):t.value}(e,y(e,t,"get"))}function y(e,t,o){if(!t.has(e))throw new TypeError("attempted to "+o+" private field on non-instance");return t.get(e)}o.d(t,{Z:()=>m});var d=new WeakMap,v=new WeakSet,b=new WeakSet,m=function(){function e(){var t,o,n=this,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["analytics","settings"],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"cookies_policy",c=arguments.length>2&&void 0!==arguments[2]&&arguments[2];!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),u(this,b),u(this,v),o={writable:!0,value:{}},l(this,t=d),t.set(this,o),this.cookiesPolicyKey=r,this.crossDomain=c,i.forEach((function(e){h(n,d)[e]=!1})),p(this,v,g).call(this)}var t,o;return t=e,o=[{key:"data",get:function(){return p(this,b,k).call(this,document.cookie)}},{key:"all",get:function(){return this.data}},{key:"allPolicies",get:function(){return JSON.parse(this.get(this.cookiesPolicyKey))}},{key:"exists",value:function(e){return Object.prototype.hasOwnProperty.call(this.data,e)}},{key:"hasValue",value:function(e,t){return this.get(e)===t}},{key:"get",value:function(e){return decodeURIComponent(this.data[e])}},{key:"delete",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";this.set(e,"",0,t)}},{key:"acceptPolicy",value:function(e){this.setPolicy(e,!0)}},{key:"rejectPolicy",value:function(e){this.setPolicy(e,!1)}},{key:"setPolicy",value:function(e,t){f(this,d,r(r({},h(this,d)),{},c({},e,t))),this.set(this.cookiesPolicyKey,JSON.stringify(h(this,d)))}},{key:"acceptAllPolicies",value:function(){var e=this;Object.keys(h(this,d)).filter((function(t){return!1===h(e,d)[t]})).forEach((function(t){return e.acceptPolicy(t)}))}},{key:"rejectAllPolicies",value:function(){var e=this;Object.keys(h(this,d)).filter((function(t){return!0===h(e,d)[t]})).forEach((function(t){return e.rejectPolicy(t)}))}},{key:"isPolicyAccepted",value:function(e){return p(this,v,g).call(this),Object.prototype.hasOwnProperty.call(h(this,d),e)?!0===h(this,d)[e]:null}},{key:"set",value:function(e,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:31536e3,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"/";document.cookie="".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(t),"; SameSite=").concat(this.crossDomain?"None":"Lax","; path=").concat(n,"; max-age=").concat(o,"; Secure"),p(this,v,g).call(this)}},{key:"policy",value:function(e){return h(this,d)[e]}}],o&&s(t.prototype,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function g(){this.exists(this.cookiesPolicyKey)&&f(this,d,r(r({},h(this,d)),this.allPolicies))}function k(e){var t={};return e.split(";").forEach((function(e){var o=e.trim().split("=");t[o[0]]=o[1]})),t}}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,o),r.exports}o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{o.r(n),o.d(n,{CookieBanner:()=>r});var e=o(774);function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function i(e,o){for(var n=0;n<o.length;n++){var i=o[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,(void 0,r=function(e,o){if("object"!==t(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,"string");if("object"!==t(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(i.key),"symbol"===t(r)?r:String(r)),i)}var r}var r=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.$module=e,this.$acceptButton=e&&e.querySelector('[value="accept"]'),this.$rejectButton=e&&e.querySelector('[value="reject"]'),this.$prompt=e&&e.querySelector(".tna-cookie-banner__message--prompt"),this.$acceptedMessage=e&&e.querySelector(".tna-cookie-banner__message--accepted"),this.$rejectedMessage=e&&e.querySelector(".tna-cookie-banner__message--rejected"),this.$closeButtons=e&&e.querySelectorAll('[value="close"]')}var o,n;return o=t,(n=[{key:"init",value:function(){var t=this;if(this.$module&&this.$acceptButton&&this.$rejectButton&&this.$prompt&&this.$acceptedMessage&&this.$rejectedMessage&&this.$closeButtons){var o=this.$module.getAttribute("data-policies");o&&(this.cookies=new e.Z(o.split(",").map((function(e){return e.trim()}))),this.loadScriptsOnAccept=this.$module.getAttribute("data-acceptscripts"),this.hideCookieBannerKey=this.$module.getAttribute("data-hidekey"),this.cookies.exists(this.hideCookieBannerKey)||(this.$module.removeAttribute("hidden"),this.$acceptButton.addEventListener("click",(function(){return t.accept()})),this.$rejectButton.addEventListener("click",(function(){return t.reject()})),this.$closeButtons.forEach((function(e){e.addEventListener("click",(function(){return t.close()}))}))))}}},{key:"accept",value:function(){this.$prompt.setAttribute("hidden",!0),this.complete(),this.$acceptedMessage.removeAttribute("hidden"),this.cookies.acceptAllPolicies(),this.loadScriptsOnAccept&&this.loadScriptsOnAccept.split(",").forEach((function(e){var t=document.createElement("script");t.src=e,document.head.appendChild(t)}))}},{key:"reject",value:function(){this.$prompt.setAttribute("hidden",!0),this.complete(),this.$rejectedMessage.removeAttribute("hidden"),this.cookies.rejectAllPolicies()}},{key:"complete",value:function(){this.cookies.set(this.hideCookieBannerKey,!0)}},{key:"close",value:function(){this.$module.setAttribute("hidden",!0)}}])&&i(o.prototype,n),Object.defineProperty(o,"prototype",{writable:!1}),t}()})(),n})()));
|
2
|
+
//# sourceMappingURL=cookie-banner.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"components/cookie-banner/cookie-banner.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/cookie-banner/cookie-banner.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","export default class Cookies {\n #policies = {};\n\n constructor(\n policies = [\"analytics\", \"settings\"],\n cookiesPolicyKey = \"cookies_policy\",\n crossDomain = false,\n ) {\n this.cookiesPolicyKey = cookiesPolicyKey;\n this.crossDomain = crossDomain;\n policies.forEach((policy) => {\n this.#policies[policy] = false;\n });\n this.#getPolicies();\n }\n\n #getPolicies() {\n if (this.exists(this.cookiesPolicyKey)) {\n this.#policies = {\n ...this.#policies,\n ...this.allPolicies,\n };\n }\n }\n\n get data() {\n return this.#deserialise(document.cookie);\n }\n\n #deserialise(cookieString) {\n const deserialised = {};\n cookieString.split(\";\").forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n deserialised[parts[0]] = parts[1];\n });\n return deserialised;\n }\n\n get all() {\n return this.data;\n }\n\n get allPolicies() {\n return JSON.parse(this.get(this.cookiesPolicyKey));\n }\n\n exists(key) {\n return Object.prototype.hasOwnProperty.call(this.data, key);\n }\n\n hasValue(key, value) {\n return this.get(key) === value;\n }\n\n get(key) {\n return decodeURIComponent(this.data[key]);\n }\n\n delete(key, path = \"/\") {\n this.set(key, \"\", 0, path);\n }\n\n acceptPolicy(policy) {\n this.setPolicy(policy, true);\n }\n\n rejectPolicy(policy) {\n this.setPolicy(policy, false);\n }\n\n setPolicy(policy, accepted) {\n this.#policies = {\n ...this.#policies,\n [policy]: accepted,\n };\n this.set(this.cookiesPolicyKey, JSON.stringify(this.#policies));\n }\n\n acceptAllPolicies() {\n Object.keys(this.#policies)\n .filter((policy) => this.#policies[policy] === false)\n .forEach((policy) => this.acceptPolicy(policy));\n }\n\n rejectAllPolicies() {\n Object.keys(this.#policies)\n .filter((policy) => this.#policies[policy] === true)\n .forEach((policy) => this.rejectPolicy(policy));\n }\n\n isPolicyAccepted(policy) {\n this.#getPolicies();\n return Object.prototype.hasOwnProperty.call(this.#policies, policy)\n ? this.#policies[policy] === true\n : null;\n }\n\n set(key, value, maxAge = 60 * 60 * 24 * 365, path = \"/\") {\n document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(\n value,\n )}; SameSite=${\n this.crossDomain ? \"None\" : \"Lax\"\n }; path=${path}; max-age=${maxAge}; Secure`;\n this.#getPolicies();\n }\n\n policy(policy) {\n return this.#policies[policy];\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Cookies from \"../../lib/cookies.mjs\";\n\nexport class CookieBanner {\n constructor($module) {\n this.$module = $module;\n this.$acceptButton = $module && $module.querySelector('[value=\"accept\"]');\n this.$rejectButton = $module && $module.querySelector('[value=\"reject\"]');\n this.$prompt =\n $module && $module.querySelector(\".tna-cookie-banner__message--prompt\");\n this.$acceptedMessage =\n $module && $module.querySelector(\".tna-cookie-banner__message--accepted\");\n this.$rejectedMessage =\n $module && $module.querySelector(\".tna-cookie-banner__message--rejected\");\n this.$closeButtons = $module && $module.querySelectorAll('[value=\"close\"]');\n }\n\n init() {\n if (\n !this.$module ||\n !this.$acceptButton ||\n !this.$rejectButton ||\n !this.$prompt ||\n !this.$acceptedMessage ||\n !this.$rejectedMessage ||\n !this.$closeButtons\n ) {\n return;\n }\n\n const policies = this.$module.getAttribute(\"data-policies\");\n if (!policies) {\n return;\n }\n this.cookies = new Cookies(\n policies.split(\",\").map((policy) => policy.trim()),\n );\n\n this.loadScriptsOnAccept = this.$module.getAttribute(\"data-acceptscripts\");\n\n this.hideCookieBannerKey = this.$module.getAttribute(\"data-hidekey\");\n const cookiePreferencesSet = this.cookies.exists(this.hideCookieBannerKey);\n\n if (!cookiePreferencesSet) {\n this.$module.removeAttribute(\"hidden\");\n\n this.$acceptButton.addEventListener(\"click\", () => this.accept());\n this.$rejectButton.addEventListener(\"click\", () => this.reject());\n\n this.$closeButtons.forEach(($closeButton) => {\n $closeButton.addEventListener(\"click\", () => this.close());\n });\n }\n }\n\n accept() {\n this.$prompt.setAttribute(\"hidden\", true);\n this.complete();\n this.$acceptedMessage.removeAttribute(\"hidden\");\n this.cookies.acceptAllPolicies();\n if (this.loadScriptsOnAccept) {\n this.loadScriptsOnAccept.split(\",\").forEach((script) => {\n const $script = document.createElement(\"script\");\n $script.src = script;\n document.head.appendChild($script);\n });\n }\n }\n\n reject() {\n this.$prompt.setAttribute(\"hidden\", true);\n this.complete();\n this.$rejectedMessage.removeAttribute(\"hidden\");\n this.cookies.rejectAllPolicies();\n }\n\n complete() {\n this.cookies.set(this.hideCookieBannerKey, true);\n }\n\n close() {\n this.$module.setAttribute(\"hidden\", true);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","Cookies","_this","policies","arguments","length","undefined","cookiesPolicyKey","crossDomain","_classCallCheck","_classPrivateMethodInitSpec","_deserialise","_getPolicies","writable","value","_policies","this","forEach","policy","_classPrivateFieldGet","_classPrivateMethodGet","_getPolicies2","call","key","get","_deserialise2","document","cookie","data","JSON","parse","Object","prototype","hasOwnProperty","decodeURIComponent","path","set","setPolicy","accepted","_classPrivateFieldSet","_objectSpread","_defineProperty","stringify","_this2","keys","filter","acceptPolicy","_this3","rejectPolicy","maxAge","concat","encodeURIComponent","exists","allPolicies","cookieString","deserialised","split","parts","trim","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","r","Symbol","toStringTag","CookieBanner","$module","$acceptButton","querySelector","$rejectButton","$prompt","$acceptedMessage","$rejectedMessage","$closeButtons","querySelectorAll","getAttribute","cookies","map","loadScriptsOnAccept","hideCookieBannerKey","removeAttribute","addEventListener","accept","reject","$closeButton","close","setAttribute","complete","acceptAllPolicies","script","$script","createElement","src","head","appendChild","rejectAllPolicies"],"sourceRoot":""}
|
@@ -0,0 +1,83 @@
|
|
1
|
+
import Cookies from "../../lib/cookies.mjs";
|
2
|
+
|
3
|
+
export class CookieBanner {
|
4
|
+
constructor($module) {
|
5
|
+
this.$module = $module;
|
6
|
+
this.$acceptButton = $module && $module.querySelector('[value="accept"]');
|
7
|
+
this.$rejectButton = $module && $module.querySelector('[value="reject"]');
|
8
|
+
this.$prompt =
|
9
|
+
$module && $module.querySelector(".tna-cookie-banner__message--prompt");
|
10
|
+
this.$acceptedMessage =
|
11
|
+
$module && $module.querySelector(".tna-cookie-banner__message--accepted");
|
12
|
+
this.$rejectedMessage =
|
13
|
+
$module && $module.querySelector(".tna-cookie-banner__message--rejected");
|
14
|
+
this.$closeButtons = $module && $module.querySelectorAll('[value="close"]');
|
15
|
+
}
|
16
|
+
|
17
|
+
init() {
|
18
|
+
if (
|
19
|
+
!this.$module ||
|
20
|
+
!this.$acceptButton ||
|
21
|
+
!this.$rejectButton ||
|
22
|
+
!this.$prompt ||
|
23
|
+
!this.$acceptedMessage ||
|
24
|
+
!this.$rejectedMessage ||
|
25
|
+
!this.$closeButtons
|
26
|
+
) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
|
30
|
+
const policies = this.$module.getAttribute("data-policies");
|
31
|
+
if (!policies) {
|
32
|
+
return;
|
33
|
+
}
|
34
|
+
this.cookies = new Cookies(
|
35
|
+
policies.split(",").map((policy) => policy.trim()),
|
36
|
+
);
|
37
|
+
|
38
|
+
this.loadScriptsOnAccept = this.$module.getAttribute("data-acceptscripts");
|
39
|
+
|
40
|
+
this.hideCookieBannerKey = this.$module.getAttribute("data-hidekey");
|
41
|
+
const cookiePreferencesSet = this.cookies.exists(this.hideCookieBannerKey);
|
42
|
+
|
43
|
+
if (!cookiePreferencesSet) {
|
44
|
+
this.$module.removeAttribute("hidden");
|
45
|
+
|
46
|
+
this.$acceptButton.addEventListener("click", () => this.accept());
|
47
|
+
this.$rejectButton.addEventListener("click", () => this.reject());
|
48
|
+
|
49
|
+
this.$closeButtons.forEach(($closeButton) => {
|
50
|
+
$closeButton.addEventListener("click", () => this.close());
|
51
|
+
});
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
accept() {
|
56
|
+
this.$prompt.setAttribute("hidden", true);
|
57
|
+
this.complete();
|
58
|
+
this.$acceptedMessage.removeAttribute("hidden");
|
59
|
+
this.cookies.acceptAllPolicies();
|
60
|
+
if (this.loadScriptsOnAccept) {
|
61
|
+
this.loadScriptsOnAccept.split(",").forEach((script) => {
|
62
|
+
const $script = document.createElement("script");
|
63
|
+
$script.src = script;
|
64
|
+
document.head.appendChild($script);
|
65
|
+
});
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
reject() {
|
70
|
+
this.$prompt.setAttribute("hidden", true);
|
71
|
+
this.complete();
|
72
|
+
this.$rejectedMessage.removeAttribute("hidden");
|
73
|
+
this.cookies.rejectAllPolicies();
|
74
|
+
}
|
75
|
+
|
76
|
+
complete() {
|
77
|
+
this.cookies.set(this.hideCookieBannerKey, true);
|
78
|
+
}
|
79
|
+
|
80
|
+
close() {
|
81
|
+
this.$module.setAttribute("hidden", true);
|
82
|
+
}
|
83
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
@use "../../tools/colour";
|
2
|
+
@use "../../tools/spacing";
|
3
|
+
@use "../../tools/media";
|
4
|
+
@use "../../tools/typography";
|
5
|
+
@use "../../utilities";
|
6
|
+
@use "../button";
|
7
|
+
@use "../grid";
|
8
|
+
|
9
|
+
.tna-cookie-banner {
|
10
|
+
@include colour.invert;
|
11
|
+
|
12
|
+
padding-top: 2rem;
|
13
|
+
padding-bottom: 2rem;
|
14
|
+
|
15
|
+
@include media.on-tiny {
|
16
|
+
padding-top: 1rem;
|
17
|
+
padding-bottom: 1rem;
|
18
|
+
|
19
|
+
@include typography.relative-font-size(16);
|
20
|
+
}
|
21
|
+
|
22
|
+
&__message {
|
23
|
+
&--prompt {
|
24
|
+
}
|
25
|
+
|
26
|
+
&--accepted {
|
27
|
+
}
|
28
|
+
|
29
|
+
&--rejected {
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
@@ -0,0 +1,164 @@
|
|
1
|
+
import CookieBanner from "./template.njk";
|
2
|
+
import macroOptions from "./macro-options.json";
|
3
|
+
import { expect } from "@storybook/jest";
|
4
|
+
import { within, userEvent } from "@storybook/testing-library";
|
5
|
+
import Cookies from "../../lib/cookies.mjs";
|
6
|
+
|
7
|
+
const argTypes = {
|
8
|
+
url: { control: "text" },
|
9
|
+
policies: { control: "text" },
|
10
|
+
hideCookieBannerKey: { control: "text" },
|
11
|
+
loadScriptsOnAccept: { control: "text" },
|
12
|
+
classes: { control: "text" },
|
13
|
+
attributes: { control: "object" },
|
14
|
+
};
|
15
|
+
|
16
|
+
Object.keys(argTypes).forEach((argType) => {
|
17
|
+
argTypes[argType].description = macroOptions.find(
|
18
|
+
(option) => option.name === argType,
|
19
|
+
)?.description;
|
20
|
+
});
|
21
|
+
|
22
|
+
export default {
|
23
|
+
title: "Components/Cookie banner",
|
24
|
+
argTypes,
|
25
|
+
};
|
26
|
+
|
27
|
+
const Template = ({
|
28
|
+
url,
|
29
|
+
policies,
|
30
|
+
hideCookieBannerKey,
|
31
|
+
loadScriptsOnAccept,
|
32
|
+
classes,
|
33
|
+
attributes,
|
34
|
+
}) =>
|
35
|
+
CookieBanner({
|
36
|
+
params: {
|
37
|
+
url,
|
38
|
+
policies,
|
39
|
+
hideCookieBannerKey,
|
40
|
+
loadScriptsOnAccept,
|
41
|
+
classes,
|
42
|
+
attributes,
|
43
|
+
},
|
44
|
+
});
|
45
|
+
|
46
|
+
export const Standard = Template.bind({});
|
47
|
+
Standard.args = {
|
48
|
+
cookiesUrl: "#",
|
49
|
+
classes: "tna-cookie-banner--demo",
|
50
|
+
};
|
51
|
+
|
52
|
+
const deleteAllCookies = (cookies) => {
|
53
|
+
Object.keys(cookies.all).forEach((cookie) => cookies.delete(cookie));
|
54
|
+
};
|
55
|
+
|
56
|
+
export const Accept = Template.bind({});
|
57
|
+
Accept.args = {
|
58
|
+
cookiesUrl: "#",
|
59
|
+
classes: "tna-cookie-banner--demo",
|
60
|
+
};
|
61
|
+
Accept.play = async ({ canvasElement }) => {
|
62
|
+
const cookies = new Cookies();
|
63
|
+
deleteAllCookies(cookies);
|
64
|
+
|
65
|
+
await expect(cookies.isPolicyAccepted("analytics")).toEqual(false);
|
66
|
+
await expect(cookies.isPolicyAccepted("settings")).toEqual(false);
|
67
|
+
await expect(cookies.isPolicyAccepted("unknown")).toEqual(null);
|
68
|
+
|
69
|
+
const canvas = within(canvasElement);
|
70
|
+
const acceptButton = canvas.getByText("Accept cookies");
|
71
|
+
await expect(acceptButton).toBeVisible();
|
72
|
+
await userEvent.click(acceptButton);
|
73
|
+
|
74
|
+
await expect(cookies.isPolicyAccepted("analytics")).toEqual(true);
|
75
|
+
await expect(cookies.isPolicyAccepted("settings")).toEqual(true);
|
76
|
+
await expect(cookies.isPolicyAccepted("unknown")).toEqual(null);
|
77
|
+
await expect(acceptButton).not.toBeVisible();
|
78
|
+
|
79
|
+
// const closeButton = canvas.getByText("Close this message");
|
80
|
+
// await expect(closeButton).toBeVisible();
|
81
|
+
// await userEvent.click(closeButton);
|
82
|
+
|
83
|
+
// await expect(closeButton).not.toBeVisible();
|
84
|
+
|
85
|
+
deleteAllCookies(cookies);
|
86
|
+
};
|
87
|
+
|
88
|
+
export const Reject = Template.bind({});
|
89
|
+
Reject.args = {
|
90
|
+
cookiesUrl: "#",
|
91
|
+
classes: "tna-cookie-banner--demo",
|
92
|
+
};
|
93
|
+
Reject.play = async ({ canvasElement }) => {
|
94
|
+
const cookies = new Cookies();
|
95
|
+
deleteAllCookies(cookies);
|
96
|
+
|
97
|
+
await expect(cookies.isPolicyAccepted("analytics")).toEqual(false);
|
98
|
+
await expect(cookies.isPolicyAccepted("settings")).toEqual(false);
|
99
|
+
await expect(cookies.isPolicyAccepted("unknown")).toEqual(null);
|
100
|
+
|
101
|
+
const canvas = within(canvasElement);
|
102
|
+
const rejectButton = canvas.getByText("Reject cookies");
|
103
|
+
await expect(rejectButton).toBeVisible();
|
104
|
+
await userEvent.click(rejectButton);
|
105
|
+
|
106
|
+
await expect(cookies.isPolicyAccepted("analytics")).toEqual(false);
|
107
|
+
await expect(cookies.isPolicyAccepted("settings")).toEqual(false);
|
108
|
+
await expect(cookies.isPolicyAccepted("unknown")).toEqual(null);
|
109
|
+
|
110
|
+
deleteAllCookies(cookies);
|
111
|
+
};
|
112
|
+
|
113
|
+
export const CustomPolicies = Template.bind({});
|
114
|
+
CustomPolicies.args = {
|
115
|
+
cookiesUrl: "#",
|
116
|
+
policies: "custom",
|
117
|
+
classes: "tna-cookie-banner--demo",
|
118
|
+
};
|
119
|
+
CustomPolicies.play = async ({ args, canvasElement }) => {
|
120
|
+
const cookies = new Cookies(args.policies.split(","));
|
121
|
+
deleteAllCookies(cookies);
|
122
|
+
|
123
|
+
await expect(cookies.isPolicyAccepted("analytics")).toEqual(null);
|
124
|
+
await expect(cookies.isPolicyAccepted("settings")).toEqual(null);
|
125
|
+
await expect(cookies.isPolicyAccepted("custom")).toEqual(false);
|
126
|
+
|
127
|
+
const canvas = within(canvasElement);
|
128
|
+
const acceptButton = canvas.getByText("Accept cookies");
|
129
|
+
await userEvent.click(acceptButton);
|
130
|
+
|
131
|
+
await expect(cookies.isPolicyAccepted("analytics")).toEqual(null);
|
132
|
+
await expect(cookies.isPolicyAccepted("settings")).toEqual(null);
|
133
|
+
await expect(cookies.isPolicyAccepted("custom")).toEqual(true);
|
134
|
+
|
135
|
+
deleteAllCookies(cookies);
|
136
|
+
};
|
137
|
+
|
138
|
+
export const AddScriptsOnAccept = Template.bind({});
|
139
|
+
AddScriptsOnAccept.args = {
|
140
|
+
cookiesUrl: "#",
|
141
|
+
loadScriptsOnAccept: "my-analytics-script.js",
|
142
|
+
classes: "tna-cookie-banner--demo",
|
143
|
+
};
|
144
|
+
AddScriptsOnAccept.play = async ({ args, canvasElement }) => {
|
145
|
+
const cookies = new Cookies();
|
146
|
+
deleteAllCookies(cookies);
|
147
|
+
|
148
|
+
const noScript = document.querySelector(
|
149
|
+
`script[src="${args.loadScriptsOnAccept}"]`,
|
150
|
+
);
|
151
|
+
await expect(noScript).toEqual(null);
|
152
|
+
|
153
|
+
const canvas = within(canvasElement);
|
154
|
+
const acceptButton = canvas.getByText("Accept cookies");
|
155
|
+
await userEvent.click(acceptButton);
|
156
|
+
|
157
|
+
const script = document.querySelector(
|
158
|
+
`script[src="${args.loadScriptsOnAccept}"]`,
|
159
|
+
);
|
160
|
+
await expect(script).toBeTruthy();
|
161
|
+
|
162
|
+
deleteAllCookies(cookies);
|
163
|
+
script.remove();
|
164
|
+
};
|
@@ -0,0 +1,38 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "cookiesUrl",
|
4
|
+
"type": "string",
|
5
|
+
"required": true,
|
6
|
+
"description": ""
|
7
|
+
},
|
8
|
+
{
|
9
|
+
"name": "policies",
|
10
|
+
"type": "string",
|
11
|
+
"required": false,
|
12
|
+
"description": ""
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"name": "hideCookieBannerKey",
|
16
|
+
"type": "string",
|
17
|
+
"required": false,
|
18
|
+
"description": ""
|
19
|
+
},
|
20
|
+
{
|
21
|
+
"name": "loadScriptsOnAccept",
|
22
|
+
"type": "string",
|
23
|
+
"required": false,
|
24
|
+
"description": ""
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"name": "classes",
|
28
|
+
"type": "string",
|
29
|
+
"required": false,
|
30
|
+
"description": "Classes to add to the cookie banner."
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"name": "attributes",
|
34
|
+
"type": "object",
|
35
|
+
"required": false,
|
36
|
+
"description": "HTML attributes (for example data attributes) to add to the cookie banner."
|
37
|
+
}
|
38
|
+
]
|
@@ -0,0 +1,61 @@
|
|
1
|
+
{% from "nationalarchives/components/button/macro.njk" import tnaButton %}
|
2
|
+
|
3
|
+
{%- set containerClasses = [params.classes] if params.classes else [] -%}
|
4
|
+
<div class="tna-cookie-banner {{ containerClasses | join(' ') }}" role="region" aria-label="Cookie usage" data-module="tna-cookie-banner" data-policies="{{ params.policies if params.policies else 'analytics,settings' }}" data-hidekey="{{ params.hideCookieBannerKey if params.hideCookieBannerKey else 'hide_tna_cookie_banner' }}"{% if params.loadScriptsOnAccept %} data-acceptscripts="{{ params.loadScriptsOnAccept }}"{% endif %}{%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %} hidden>
|
5
|
+
<div class="tna-container">
|
6
|
+
<div class="tna-column tna-column--full tna-cookie-banner__message tna-cookie-banner__message--prompt">
|
7
|
+
<h2>This website uses cookies</h2>
|
8
|
+
<p>We use some essential cookies to make this service work.</p>
|
9
|
+
<p>We'd also like to use analytics cookies so we can understand how you use the service and make improvements.</p>
|
10
|
+
<div class="tna-button-group">
|
11
|
+
{{ tnaButton({
|
12
|
+
text: "Accept cookies",
|
13
|
+
buttonElement: true,
|
14
|
+
attributes: {
|
15
|
+
value: "accept"
|
16
|
+
}
|
17
|
+
}) }}
|
18
|
+
{{ tnaButton({
|
19
|
+
text: "Reject cookies",
|
20
|
+
buttonElement: true,
|
21
|
+
attributes: {
|
22
|
+
value: "reject"
|
23
|
+
}
|
24
|
+
}) }}
|
25
|
+
{{ tnaButton({
|
26
|
+
text: "Set cookie preferences",
|
27
|
+
href: "#",
|
28
|
+
plain: true
|
29
|
+
}) }}
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
<div class="tna-column tna-column--full tna-cookie-banner__message tna-cookie-banner__message--accepted" hidden>
|
33
|
+
<p>
|
34
|
+
You have accepted optional cookies. You can change your cookie settings on the <a href="#">Cookies page</a>.
|
35
|
+
</p>
|
36
|
+
<div class="tna-button-group">
|
37
|
+
{{ tnaButton({
|
38
|
+
text: "Close this message",
|
39
|
+
buttonElement: true,
|
40
|
+
attributes: {
|
41
|
+
value: "close"
|
42
|
+
}
|
43
|
+
}) }}
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
<div class="tna-column tna-column--full tna-cookie-banner__message tna-cookie-banner__message--rejected" hidden>
|
47
|
+
<p>
|
48
|
+
You have rejected optional cookies. You can change your cookie settings on the <a href="#">Cookies page</a>.
|
49
|
+
</p>
|
50
|
+
<div class="tna-button-group">
|
51
|
+
{{ tnaButton({
|
52
|
+
text: "Close this message",
|
53
|
+
buttonElement: true,
|
54
|
+
attributes: {
|
55
|
+
value: "close"
|
56
|
+
}
|
57
|
+
}) }}
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
</div>
|
@@ -1,54 +1 @@
|
|
1
|
-
|
2
|
-
margin-bottom: 2rem;
|
3
|
-
|
4
|
-
display: flex;
|
5
|
-
flex-wrap: wrap;
|
6
|
-
gap: 1rem;
|
7
|
-
|
8
|
-
&:last-child {
|
9
|
-
margin-bottom: 0;
|
10
|
-
}
|
11
|
-
|
12
|
-
&__item {
|
13
|
-
}
|
14
|
-
|
15
|
-
&__item--selected #{&}__link {
|
16
|
-
background-color: #004c7e;
|
17
|
-
|
18
|
-
&,
|
19
|
-
&:link,
|
20
|
-
&:visited {
|
21
|
-
color: #fff;
|
22
|
-
}
|
23
|
-
}
|
24
|
-
|
25
|
-
&__link {
|
26
|
-
padding: 0.125rem 0.75rem;
|
27
|
-
|
28
|
-
text-decoration: none;
|
29
|
-
|
30
|
-
background-color: #d4e5ef;
|
31
|
-
|
32
|
-
border-radius: 99rem;
|
33
|
-
|
34
|
-
transition:
|
35
|
-
color 200ms,
|
36
|
-
background-color 200ms;
|
37
|
-
|
38
|
-
&,
|
39
|
-
&:link,
|
40
|
-
&:visited {
|
41
|
-
color: #000;
|
42
|
-
}
|
43
|
-
|
44
|
-
&:hover {
|
45
|
-
color: #fff;
|
46
|
-
|
47
|
-
background-color: #004c7e;
|
48
|
-
|
49
|
-
transition:
|
50
|
-
color 50ms,
|
51
|
-
background-color 50ms;
|
52
|
-
}
|
53
|
-
}
|
54
|
-
}
|
1
|
+
@use "filters";
|
@@ -0,0 +1 @@
|
|
1
|
+
@import"https://use.typekit.net/hkj3kuz.css";.tna-filters,.tna-ul,.tna-ol,.tna-chip-list,.tna-blockquote,.tna-scene-setter,.tna-aside{margin-bottom:2rem}.tna-filters:last-child,.tna-ul:last-child,.tna-ol:last-child,.tna-chip-list:last-child,.tna-blockquote:last-child,.tna-scene-setter:last-child,.tna-aside:last-child{margin-bottom:0}.tna-visually-hidden{width:1px !important;height:1px !important;margin:0 !important;padding:0 !important;position:absolute !important;top:-9999px !important;left:-9999px !important;z-index:-1 !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;border:0 !important;background-color:rgba(0,0,0,0) !important}.tna-visually-hidden::before,.tna-visually-hidden::after{content:" "}.tna-background--contrast{--font-base: var(--contrast-font-base);--font-dark: var(--contrast-font-dark);--font-light: var(--contrast-font-light);--link: var(--contrast-link);--link-visited: var(--contrast-link-visited);--keyline: var(--contrast-keyline);--keyline-dark: var(--contrast-keyline-dark);--button-text: var(--contrast-button-text);--button-background: var(--contrast-button-background);--button-hover-text: var(--contrast-button-hover-text);--button-hover-background: var(--contrast-button-hover-background);background-color:#1e1e1e;background-color:var(--contrast-background);color:rgba(255,255,255,.95);color:var(--font-base)}.tna-chip,.tna-hgroup__supertitle,.tna-background--accent{--font-base: var(--accent-font-base);--font-dark: var(--accent-font-dark);--font-light: var(--accent-font-light);--link: var(--accent-link);--link-visited: var(--accent-link-visited);--keyline: var(--accent-keyline);--keyline-dark: var(--accent-keyline-dark);background-color:#111;background-color:var(--accent-background);color:rgba(255,255,255,.95);color:var(--font-base)}.tna-background--accent-light{background-color:#d9d9d6;background-color:var(--accent-background-light);--font-base: #343338;--font-dark: #000;--font-light: rgba(52, 51, 56, 0.7);--link: #000;--link-visited: #4c2c92;--keyline: #ccc;--keyline-dark: #26262a;--button-text: #fff;--button-background: #000;--button-hover-text: #000;--button-hover-background: #fff}:root{--page-background: #f4f4f4;--font-base: #343338;--font-dark: #000;--font-light: rgba(52, 51, 56, 0.7);--link: #1d70ab;--link-visited: #4c2c92;--focus-outline: #00b0ff;--keyline: #ccc;--keyline-dark: #26262a;--button-text: #fff;--button-background: #000;--button-hover-text: #000;--button-hover-background: #fff;--contrast-background: #1e1e1e;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #d9d9d6;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}.tna-template{min-width:320px;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;font-size:16px;background-color:#f4f4f4;background-color:var(--page-background);accent-color:var(--accent);--accent-font-base: #fff !important;--accent-font-dark: #fff !important;--accent-font-light: rgba(255, 255, 255, 0.7) !important;--accent-link: #fff !important;--accent-link-visited: #fff !important;--accent-keyline: rgba(255, 255, 255, 0.5) !important;--accent-keyline-dark: rgba(255, 255, 255, 0.8) !important}.tna-template--system-theme{--page-background: #f4f4f4;--font-base: #343338;--font-dark: #000;--font-light: rgba(52, 51, 56, 0.7);--link: #1d70ab;--link-visited: #4c2c92;--focus-outline: #00b0ff;--keyline: #ccc;--keyline-dark: #26262a;--button-text: #fff;--button-background: #000;--button-hover-text: #000;--button-hover-background: #fff;--contrast-background: #1e1e1e;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #d9d9d6;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}@media(prefers-color-scheme: dark){.tna-template--system-theme{--page-background: #111;--font-base: rgba(255, 255, 255, 0.95);--font-dark: #fff;--font-light: rgba(255, 255, 255, 0.5);--link: #00b0ff;--link-visited: #fff;--focus-outline: #00b0ff;--keyline: rgba(255, 255, 255, 0.25);--keyline-dark: #fff;--button-text: #000;--button-background: #fff;--button-hover-text: #fff;--button-hover-background: #000;--contrast-background: #1e1e1e;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #8c9694;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}}@media(prefers-contrast: more){.tna-template--system-theme{--page-background: #fff;--font-base: #000;--font-dark: #000;--font-light: #000;--link: #004c7e;--link-visited: #000;--focus-outline: #fd3f03;--keyline: #000;--keyline-dark: #000;--button-text: #fff;--button-background: #000;--button-hover-text: #000;--button-hover-background: #fff;--contrast-background: #f4f4f4;--contrast-font-base: #000;--contrast-font-dark: #000;--contrast-font-light: #000;--contrast-link: #004c7e;--contrast-link-visited: #000;--contrast-keyline: #000;--contrast-keyline-dark: #000;--contrast-button-text: #fff;--contrast-button-background: #000;--contrast-button-hover-text: #000;--contrast-button-hover-background: #fff;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #d9d9d6;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}.tna-template--system-theme *{background-image:none !important}}@media(prefers-contrast: more)and (prefers-color-scheme: dark){.tna-template--system-theme{--page-background: #000;--font-base: #fff;--font-dark: #fff;--font-light: #fff;--link: #fff;--link-visited: #fff;--focus-outline: #00b0ff;--keyline: #fff;--keyline-dark: #fff;--button-text: #000;--button-background: #fff;--button-hover-text: #fff;--button-hover-background: #000;--contrast-background: #111;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #8c9694;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}}.tna-template--light-theme{--page-background: #f4f4f4;--font-base: #343338;--font-dark: #000;--font-light: rgba(52, 51, 56, 0.7);--link: #1d70ab;--link-visited: #4c2c92;--focus-outline: #00b0ff;--keyline: #ccc;--keyline-dark: #26262a;--button-text: #fff;--button-background: #000;--button-hover-text: #000;--button-hover-background: #fff;--contrast-background: #1e1e1e;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #d9d9d6;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}.tna-template--dark-theme{--page-background: #111;--font-base: rgba(255, 255, 255, 0.95);--font-dark: #fff;--font-light: rgba(255, 255, 255, 0.5);--link: #00b0ff;--link-visited: #fff;--focus-outline: #00b0ff;--keyline: rgba(255, 255, 255, 0.25);--keyline-dark: #fff;--button-text: #000;--button-background: #fff;--button-hover-text: #fff;--button-hover-background: #000;--contrast-background: #1e1e1e;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #8c9694;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}.tna-template--high-contrast-theme{--page-background: #fff;--font-base: #000;--font-dark: #000;--font-light: #000;--link: #004c7e;--link-visited: #000;--focus-outline: #fd3f03;--keyline: #000;--keyline-dark: #000;--button-text: #fff;--button-background: #000;--button-hover-text: #000;--button-hover-background: #fff;--contrast-background: #f4f4f4;--contrast-font-base: #000;--contrast-font-dark: #000;--contrast-font-light: #000;--contrast-link: #004c7e;--contrast-link-visited: #000;--contrast-keyline: #000;--contrast-keyline-dark: #000;--contrast-button-text: #fff;--contrast-button-background: #000;--contrast-button-hover-text: #000;--contrast-button-hover-background: #fff;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #d9d9d6;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}.tna-template--high-contrast-theme *{background-image:none !important}.tna-template--high-contrast-theme.tna-template--dark-theme{--page-background: #000;--font-base: #fff;--font-dark: #fff;--font-light: #fff;--link: #fff;--link-visited: #fff;--focus-outline: #00b0ff;--keyline: #fff;--keyline-dark: #fff;--button-text: #000;--button-background: #fff;--button-hover-text: #fff;--button-hover-background: #000;--contrast-background: #111;--contrast-font-base: #fff;--contrast-font-dark: #fff;--contrast-font-light: rgba(255, 255, 255, 0.7);--contrast-link: #fff;--contrast-link-visited: #fff;--contrast-keyline: rgba(255, 255, 255, 0.5);--contrast-keyline-dark: rgba(255, 255, 255, 0.8);--contrast-button-text: #000;--contrast-button-background: #fff;--contrast-button-hover-text: #fff;--contrast-button-hover-background: #000;--accent: #d9d9d6;--accent-background: #111;--accent-background-light: #8c9694;--accent-font-base: #fff;--accent-font-dark: #fff;--accent-font-light: rgba(255, 255, 255, 0.7);--accent-link: #fff;--accent-link-visited: #b9f;--accent-keyline: rgba(255, 255, 255, 0.5);--accent-keyline-dark: rgba(255, 255, 255, 0.8);--button-accent-text: #000;--button-accent-background: #8c9694}.tna-template--yellow-accent{--accent: #fc0 !important;--accent-background: #fc0 !important;--accent-background-light: #f9f7e2 !important;--accent-font-base: #000 !important;--accent-font-dark: #000 !important;--accent-font-light: rgba(0, 0, 0, 0.7) !important;--accent-link: #000 !important;--accent-link-visited: #000 !important;--accent-keyline: rgba(0, 0, 0, 0.5) !important;--accent-keyline-dark: rgba(0, 0, 0, 0.8) !important;--button-accent-background: #fc0 !important}.tna-template--pink-accent{--accent-font-base: #fff !important;--accent-font-dark: #fff !important;--accent-font-light: rgba(255, 255, 255, 0.7) !important;--accent-link: #fff !important;--accent-link-visited: #fff !important;--accent-keyline: rgba(255, 255, 255, 0.5) !important;--accent-keyline-dark: rgba(255, 255, 255, 0.8) !important;--button-accent-text: #fff !important;--accent: #fe1d57 !important;--accent-background: #9c193a !important;--accent-background-light: #fad3d4 !important;--button-accent-background: #9c193a !important}.tna-template--orange-accent{--accent-font-base: #fff !important;--accent-font-dark: #fff !important;--accent-font-light: rgba(255, 255, 255, 0.7) !important;--accent-link: #fff !important;--accent-link-visited: #fff !important;--accent-keyline: rgba(255, 255, 255, 0.5) !important;--accent-keyline-dark: rgba(255, 255, 255, 0.8) !important;--button-accent-text: #fff !important;--accent: #fd3f03 !important;--accent-background: #8f3415 !important;--accent-background-light: #f9e1bc !important;--button-accent-background: #8f3415 !important}.tna-template--green-accent{--accent-font-base: #fff !important;--accent-font-dark: #fff !important;--accent-font-light: rgba(255, 255, 255, 0.7) !important;--accent-link: #fff !important;--accent-link-visited: #fff !important;--accent-keyline: rgba(255, 255, 255, 0.5) !important;--accent-keyline-dark: rgba(255, 255, 255, 0.8) !important;--button-accent-text: #fff !important;--accent: #86bc25 !important;--accent-background: #00623b !important;--accent-background-light: #dde5d5 !important;--button-accent-background: #00623b !important}.tna-template--blue-accent{--accent-font-base: #fff !important;--accent-font-dark: #fff !important;--accent-font-light: rgba(255, 255, 255, 0.7) !important;--accent-link: #fff !important;--accent-link-visited: #fff !important;--accent-keyline: rgba(255, 255, 255, 0.5) !important;--accent-keyline-dark: rgba(255, 255, 255, 0.8) !important;--button-accent-text: #fff !important;--accent: #00b0ff !important;--accent-background: #004c7e !important;--accent-background-light: #d4e5ef !important;--button-accent-background: #004c7e !important}@media(prefers-reduced-motion){.tna-template *{animation:none !important;transition:none !important}}.tna-template__body{min-height:100%;margin:0;padding:0;overflow:auto}.tna-template__body:has(.tna-header):has(#main-content[role=main]):has(.tna-footer){display:flex;flex-direction:column}.tna-template__body:has(.tna-header):has(#main-content[role=main]):has(.tna-footer) #main-content[role=main]{flex:1}img,svg,picture,video,canvas{max-width:100%;display:block}video,canvas{width:100%}[hidden]{display:none}*:focus{outline:.3125rem solid;outline-color:#00b0ff;outline-color:var(--focus-outline);outline-offset:.125rem}hr{margin:2rem 0;border-width:1px 0 0;border-color:#ccc;border-color:var(--keyline);border-style:solid}.tna-section{padding-top:3rem;padding-bottom:3rem}@media(max-width: 48em){.tna-section{padding-top:2rem;padding-bottom:2rem}}.tna-aside{padding:2rem}@media(max-width: 48em){.tna-aside{padding:1rem}}.tna-template--high-contrast-theme .tna-aside{border:1px #26262a solid;border:1px var(--keyline-dark) solid}@media(prefers-contrast: more){.tna-template--system-theme .tna-aside{border:1px #26262a solid;border:1px var(--keyline-dark) solid}}.tna-\!--no-margin-top,.tna-\!--no-margin-vertical{margin-top:0 !important}.tna-\!--no-margin-bottom,.tna-\!--no-margin-vertical{margin-bottom:0 !important}.tna-\!--no-padding-top,.tna-\!--no-padding-vertical{padding-top:0 !important}.tna-\!--no-padding-bottom,.tna-\!--no-padding-vertical{padding-bottom:0 !important}.tna-\!--margin-top-xs,.tna-\!--margin-vertical-xs{margin-top:0.5rem !important}.tna-\!--margin-top-s,.tna-\!--margin-vertical-s{margin-top:1rem !important}.tna-\!--margin-top-m,.tna-\!--margin-vertical-m{margin-top:2rem !important}.tna-\!--margin-top-l,.tna-\!--margin-vertical-l{margin-top:3rem !important}.tna-\!--margin-top-xl,.tna-\!--margin-vertical-xl{margin-top:5rem !important}.tna-\!--margin-top-xxl,.tna-\!--margin-vertical-xxl{margin-top:8rem !important}.tna-\!--margin-bottom-xs,.tna-\!--margin-vertical-xs{margin-bottom:0.5rem !important}.tna-\!--margin-bottom-s,.tna-\!--margin-vertical-s{margin-bottom:1rem !important}.tna-\!--margin-bottom-m,.tna-\!--margin-vertical-m{margin-bottom:2rem !important}.tna-\!--margin-bottom-l,.tna-\!--margin-vertical-l{margin-bottom:3rem !important}.tna-\!--margin-bottom-xl,.tna-\!--margin-vertical-xl{margin-bottom:5rem !important}.tna-\!--margin-bottom-xxl,.tna-\!--margin-vertical-xxl{margin-bottom:8rem !important}.tna-\!--padding-top-xs,.tna-\!--padding-vertical-xs{padding-top:0.5rem !important}.tna-\!--padding-top-s,.tna-\!--padding-vertical-s{padding-top:1rem !important}.tna-\!--padding-top-m,.tna-\!--padding-vertical-m{padding-top:2rem !important}.tna-\!--padding-top-l,.tna-\!--padding-vertical-l{padding-top:3rem !important}.tna-\!--padding-top-xl,.tna-\!--padding-vertical-xl{padding-top:5rem !important}.tna-\!--padding-top-xxl,.tna-\!--padding-vertical-xxl{padding-top:8rem !important}.tna-\!--padding-bottom-xs,.tna-\!--padding-vertical-xs{padding-bottom:0.5rem !important}.tna-\!--padding-bottom-s,.tna-\!--padding-vertical-s{padding-bottom:1rem !important}.tna-\!--padding-bottom-m,.tna-\!--padding-vertical-m{padding-bottom:2rem !important}.tna-\!--padding-bottom-l,.tna-\!--padding-vertical-l{padding-bottom:3rem !important}.tna-\!--padding-bottom-xl,.tna-\!--padding-vertical-xl{padding-bottom:5rem !important}.tna-\!--padding-bottom-xxl,.tna-\!--padding-vertical-xxl{padding-bottom:8rem !important}@media(min-width: 48.0625em)and (max-width: 64em){.tna-\!--no-margin-top-medium,.tna-\!--no-margin-vertical-medium{margin-top:0 !important}.tna-\!--no-margin-bottom-medium,.tna-\!--no-margin-vertical-medium{margin-bottom:0 !important}.tna-\!--no-padding-top-medium,.tna-\!--no-padding-vertical-medium{padding-top:0 !important}.tna-\!--no-padding-bottom-medium,.tna-\!--no-padding-vertical-medium{padding-bottom:0 !important}.tna-\!--margin-top-xs-medium,.tna-\!--margin-vertical-xs-medium{margin-top:0.5rem !important}.tna-\!--margin-top-s-medium,.tna-\!--margin-vertical-s-medium{margin-top:1rem !important}.tna-\!--margin-top-m-medium,.tna-\!--margin-vertical-m-medium{margin-top:2rem !important}.tna-\!--margin-top-l-medium,.tna-\!--margin-vertical-l-medium{margin-top:3rem !important}.tna-\!--margin-top-xl-medium,.tna-\!--margin-vertical-xl-medium{margin-top:5rem !important}.tna-\!--margin-top-xxl-medium,.tna-\!--margin-vertical-xxl-medium{margin-top:8rem !important}.tna-\!--margin-bottom-xs-medium,.tna-\!--margin-vertical-xs-medium{margin-bottom:0.5rem !important}.tna-\!--margin-bottom-s-medium,.tna-\!--margin-vertical-s-medium{margin-bottom:1rem !important}.tna-\!--margin-bottom-m-medium,.tna-\!--margin-vertical-m-medium{margin-bottom:2rem !important}.tna-\!--margin-bottom-l-medium,.tna-\!--margin-vertical-l-medium{margin-bottom:3rem !important}.tna-\!--margin-bottom-xl-medium,.tna-\!--margin-vertical-xl-medium{margin-bottom:5rem !important}.tna-\!--margin-bottom-xxl-medium,.tna-\!--margin-vertical-xxl-medium{margin-bottom:8rem !important}.tna-\!--padding-top-xs-medium,.tna-\!--padding-vertical-xs-medium{padding-top:0.5rem !important}.tna-\!--padding-top-s-medium,.tna-\!--padding-vertical-s-medium{padding-top:1rem !important}.tna-\!--padding-top-m-medium,.tna-\!--padding-vertical-m-medium{padding-top:2rem !important}.tna-\!--padding-top-l-medium,.tna-\!--padding-vertical-l-medium{padding-top:3rem !important}.tna-\!--padding-top-xl-medium,.tna-\!--padding-vertical-xl-medium{padding-top:5rem !important}.tna-\!--padding-top-xxl-medium,.tna-\!--padding-vertical-xxl-medium{padding-top:8rem !important}.tna-\!--padding-bottom-xs-medium,.tna-\!--padding-vertical-xs-medium{padding-bottom:0.5rem !important}.tna-\!--padding-bottom-s-medium,.tna-\!--padding-vertical-s-medium{padding-bottom:1rem !important}.tna-\!--padding-bottom-m-medium,.tna-\!--padding-vertical-m-medium{padding-bottom:2rem !important}.tna-\!--padding-bottom-l-medium,.tna-\!--padding-vertical-l-medium{padding-bottom:3rem !important}.tna-\!--padding-bottom-xl-medium,.tna-\!--padding-vertical-xl-medium{padding-bottom:5rem !important}.tna-\!--padding-bottom-xxl-medium,.tna-\!--padding-vertical-xxl-medium{padding-bottom:8rem !important}}@media(min-width: 30.0625em)and (max-width: 48em){.tna-\!--no-margin-top-small,.tna-\!--no-margin-vertical-small{margin-top:0 !important}.tna-\!--no-margin-bottom-small,.tna-\!--no-margin-vertical-small{margin-bottom:0 !important}.tna-\!--no-padding-top-small,.tna-\!--no-padding-vertical-small{padding-top:0 !important}.tna-\!--no-padding-bottom-small,.tna-\!--no-padding-vertical-small{padding-bottom:0 !important}.tna-\!--margin-top-xs-small,.tna-\!--margin-vertical-xs-small{margin-top:0.5rem !important}.tna-\!--margin-top-s-small,.tna-\!--margin-vertical-s-small{margin-top:0.75rem !important}.tna-\!--margin-top-m-small,.tna-\!--margin-vertical-m-small{margin-top:1.5rem !important}.tna-\!--margin-top-l-small,.tna-\!--margin-vertical-l-small{margin-top:2rem !important}.tna-\!--margin-top-xl-small,.tna-\!--margin-vertical-xl-small{margin-top:3rem !important}.tna-\!--margin-top-xxl-small,.tna-\!--margin-vertical-xxl-small{margin-top:5rem !important}.tna-\!--margin-bottom-xs-small,.tna-\!--margin-vertical-xs-small{margin-bottom:0.5rem !important}.tna-\!--margin-bottom-s-small,.tna-\!--margin-vertical-s-small{margin-bottom:0.75rem !important}.tna-\!--margin-bottom-m-small,.tna-\!--margin-vertical-m-small{margin-bottom:1.5rem !important}.tna-\!--margin-bottom-l-small,.tna-\!--margin-vertical-l-small{margin-bottom:2rem !important}.tna-\!--margin-bottom-xl-small,.tna-\!--margin-vertical-xl-small{margin-bottom:3rem !important}.tna-\!--margin-bottom-xxl-small,.tna-\!--margin-vertical-xxl-small{margin-bottom:5rem !important}.tna-\!--padding-top-xs-small,.tna-\!--padding-vertical-xs-small{padding-top:0.5rem !important}.tna-\!--padding-top-s-small,.tna-\!--padding-vertical-s-small{padding-top:0.75rem !important}.tna-\!--padding-top-m-small,.tna-\!--padding-vertical-m-small{padding-top:1.5rem !important}.tna-\!--padding-top-l-small,.tna-\!--padding-vertical-l-small{padding-top:2rem !important}.tna-\!--padding-top-xl-small,.tna-\!--padding-vertical-xl-small{padding-top:3rem !important}.tna-\!--padding-top-xxl-small,.tna-\!--padding-vertical-xxl-small{padding-top:5rem !important}.tna-\!--padding-bottom-xs-small,.tna-\!--padding-vertical-xs-small{padding-bottom:0.5rem !important}.tna-\!--padding-bottom-s-small,.tna-\!--padding-vertical-s-small{padding-bottom:0.75rem !important}.tna-\!--padding-bottom-m-small,.tna-\!--padding-vertical-m-small{padding-bottom:1.5rem !important}.tna-\!--padding-bottom-l-small,.tna-\!--padding-vertical-l-small{padding-bottom:2rem !important}.tna-\!--padding-bottom-xl-small,.tna-\!--padding-vertical-xl-small{padding-bottom:3rem !important}.tna-\!--padding-bottom-xxl-small,.tna-\!--padding-vertical-xxl-small{padding-bottom:5rem !important}}@media(max-width: 30em){.tna-\!--no-margin-top-tiny,.tna-\!--no-margin-vertical-tiny{margin-top:0 !important}.tna-\!--no-margin-bottom-tiny,.tna-\!--no-margin-vertical-tiny{margin-bottom:0 !important}.tna-\!--no-padding-top-tiny,.tna-\!--no-padding-vertical-tiny{padding-top:0 !important}.tna-\!--no-padding-bottom-tiny,.tna-\!--no-padding-vertical-tiny{padding-bottom:0 !important}.tna-\!--margin-top-xs-tiny,.tna-\!--margin-vertical-xs-tiny{margin-top:0.5rem !important}.tna-\!--margin-top-s-tiny,.tna-\!--margin-vertical-s-tiny{margin-top:0.75rem !important}.tna-\!--margin-top-m-tiny,.tna-\!--margin-vertical-m-tiny{margin-top:1.5rem !important}.tna-\!--margin-top-l-tiny,.tna-\!--margin-vertical-l-tiny{margin-top:2rem !important}.tna-\!--margin-top-xl-tiny,.tna-\!--margin-vertical-xl-tiny{margin-top:3rem !important}.tna-\!--margin-top-xxl-tiny,.tna-\!--margin-vertical-xxl-tiny{margin-top:5rem !important}.tna-\!--margin-bottom-xs-tiny,.tna-\!--margin-vertical-xs-tiny{margin-bottom:0.5rem !important}.tna-\!--margin-bottom-s-tiny,.tna-\!--margin-vertical-s-tiny{margin-bottom:0.75rem !important}.tna-\!--margin-bottom-m-tiny,.tna-\!--margin-vertical-m-tiny{margin-bottom:1.5rem !important}.tna-\!--margin-bottom-l-tiny,.tna-\!--margin-vertical-l-tiny{margin-bottom:2rem !important}.tna-\!--margin-bottom-xl-tiny,.tna-\!--margin-vertical-xl-tiny{margin-bottom:3rem !important}.tna-\!--margin-bottom-xxl-tiny,.tna-\!--margin-vertical-xxl-tiny{margin-bottom:5rem !important}.tna-\!--padding-top-xs-tiny,.tna-\!--padding-vertical-xs-tiny{padding-top:0.5rem !important}.tna-\!--padding-top-s-tiny,.tna-\!--padding-vertical-s-tiny{padding-top:0.75rem !important}.tna-\!--padding-top-m-tiny,.tna-\!--padding-vertical-m-tiny{padding-top:1.5rem !important}.tna-\!--padding-top-l-tiny,.tna-\!--padding-vertical-l-tiny{padding-top:2rem !important}.tna-\!--padding-top-xl-tiny,.tna-\!--padding-vertical-xl-tiny{padding-top:3rem !important}.tna-\!--padding-top-xxl-tiny,.tna-\!--padding-vertical-xxl-tiny{padding-top:5rem !important}.tna-\!--padding-bottom-xs-tiny,.tna-\!--padding-vertical-xs-tiny{padding-bottom:0.5rem !important}.tna-\!--padding-bottom-s-tiny,.tna-\!--padding-vertical-s-tiny{padding-bottom:0.75rem !important}.tna-\!--padding-bottom-m-tiny,.tna-\!--padding-vertical-m-tiny{padding-bottom:1.5rem !important}.tna-\!--padding-bottom-l-tiny,.tna-\!--padding-vertical-l-tiny{padding-bottom:2rem !important}.tna-\!--padding-bottom-xl-tiny,.tna-\!--padding-vertical-xl-tiny{padding-bottom:3rem !important}.tna-\!--padding-bottom-xxl-tiny,.tna-\!--padding-vertical-xxl-tiny{padding-bottom:5rem !important}}@font-face{font-family:"Open Sans";src:url("assets/fonts/OpenSans-Medium.ttf");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans";src:url("assets/fonts/OpenSans-Bold.ttf");font-weight:bold;font-style:normal}@font-face{font-family:"Roboto Mono";src:url("assets/fonts/RobotoMono-Regular.ttf");font-weight:normal;font-style:normal}.tna-template{color:#343338;color:var(--font-base);font-family:"Open Sans",serif;font-weight:normal;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-webkit-text-size-adjust:none;direction:ltr}.tna-template__body{color:inherit;font-size:1.125rem;line-height:1.7777777778}h1,h2,h3,h4,h5,h6,ul,ol{margin-top:0}h1,h2,h3,h4,h5,h6,strong{font-weight:bold}p{margin:0 0 1.5rem}@media(max-width: 30em){p{margin-bottom:1rem}}p:last-child{margin-bottom:0}a{color:#1d70ab;color:var(--link);text-decoration-thickness:1.5px}a:visited{color:#4c2c92;color:var(--link-visited)}a:hover,a:active{text-decoration:underline;text-decoration-thickness:3.5px}a.tna-chip{text-decoration:none}a.tna-chip,a.tna-chip:link,a.tna-chip:visited{color:#000;color:var(--font-dark)}a.tna-chip:hover{text-decoration:underline;text-decoration-thickness:3.5px}.tna-ul,.tna-ol{margin-top:0;margin-right:0;margin-left:0;padding:0 0 0 2rem}.tna-ul li::marker,.tna-ol li::marker{color:#111;color:var(--accent-background);font-weight:700}.tna-ul--plain,.tna-ol--plain{padding-left:0;list-style:none}.tna-hgroup__supertitle,.tna-chip{max-width:max-content;padding:.375em .5rem;display:block;color:#000;color:var(--font-dark);font-family:"Roboto Mono",monospace;font-weight:normal;font-size:0.875rem;text-transform:uppercase;line-height:1.1428571429;line-height:1}.tna-chip-list{padding-left:0;display:flex;flex-wrap:wrap;gap:1rem;list-style:none}.tna-hgroup__title,.tna-heading{color:#000;color:var(--font-dark);font-family:supria-sans-condensed,"Arial Narrow",sans-serif;font-weight:400}.tna-hgroup__title a,.tna-heading a{display:inline-block}.tna-hgroup__title a::after,.tna-heading a::after{padding-left:.25rem;display:inline-block;font-weight:700;content:"›"}.tna-hgroup__title a:hover::after,.tna-heading a:hover::after{padding-left:.5rem}.tna-hgroup--xl .tna-hgroup__title,.tna-heading--xl{font-size:4rem;line-height:1.2}@media(min-width: 48.0625em)and (max-width: 64em){.tna-hgroup--xl .tna-hgroup__title,.tna-heading--xl{font-size:3.125rem}}@media(max-width: 48em){.tna-hgroup--xl .tna-hgroup__title,.tna-heading--xl{font-size:2.25rem}}.tna-hgroup--l .tna-hgroup__title,.tna-heading--l{font-size:2rem;line-height:1.4}@media(min-width: 48.0625em)and (max-width: 64em){.tna-hgroup--l .tna-hgroup__title,.tna-heading--l{font-size:1.75rem}}@media(max-width: 48em){.tna-hgroup--l .tna-hgroup__title,.tna-heading--l{font-size:1.5rem}}.tna-hgroup--m .tna-hgroup__title,.tna-heading--m{font-size:1.25rem;line-height:1.6}.tna-hgroup--s .tna-hgroup__title,.tna-heading--s{font-size:1.125rem;line-height:1.6}.tna-hgroup__supertitle{margin:0 0 .5rem}.tna-hgroup__title{margin:0;display:block}.tna-heading,.tna-hgroup{margin-top:3rem;margin-bottom:1rem}.tna-heading:first-child,.tna-hgroup:first-child{margin-top:0}.tna-heading:last-child,.tna-hgroup:last-child{margin-bottom:0}.tna-blockquote{margin-top:0;margin-right:0;margin-left:0;padding:1rem 1rem 1rem 2rem;border-left:.35rem #111 solid;border-left:.35rem var(--accent-background) solid}.tna-blockquote__quote{font-weight:700}.tna-blockquote__author{font-style:italic}.tna-blockquote .tna-blockquote__author{margin:1rem 0 0}.tna-blockquote__author::before{content:"—" " "}.tna-scene-setter{font-family:"Roboto Mono",monospace;font-weight:normal;color:#000;color:var(--font-dark);font-size:1.875rem;line-height:1.6666666667}@media(max-width: 48em){.tna-scene-setter{font-size:1.5rem;line-height:2}}.tna-scene-setter a{color:inherit;text-decoration-thickness:2px}.tna-scene-setter a:hover{text-decoration-thickness:4.5px}.tna-columns{column-gap:2rem}.tna-columns--2{column-count:2}.tna-columns--3{column-count:3}@media(max-width: 48em){.tna-columns{column-gap:1.5rem}}@media(min-width: 30.0625em)and (max-width: 48em){.tna-columns--1-small{column-count:1}.tna-columns--2-small{column-count:2}.tna-columns--3-small{column-count:3}.tna-columns--4-small{column-count:4}}@media(max-width: 30em){.tna-columns--1-tiny{column-count:1}.tna-columns--2-tiny{column-count:2}.tna-columns--3-tiny{column-count:3}.tna-columns--4-tiny{column-count:4}}.tna-columns__block{break-inside:avoid}.tna-columns:has(.tna-columns__block:only-of-type){column-count:1}.tna-filters{display:flex;flex-wrap:wrap;gap:1rem}.tna-filters__item--selected .tna-filters__link{background-color:#004c7e}.tna-filters__item--selected .tna-filters__link,.tna-filters__item--selected .tna-filters__link:link,.tna-filters__item--selected .tna-filters__link:visited{color:#fff}.tna-filters__link{padding:.125rem .75rem;text-decoration:none;background-color:#d4e5ef;border-radius:99rem;transition:color 200ms,background-color 200ms}.tna-filters__link,.tna-filters__link:link,.tna-filters__link:visited{color:#000}.tna-filters__link:hover{color:#fff;background-color:#004c7e;transition:color 50ms,background-color 50ms}/*# sourceMappingURL=filters.css.map */
|