diff --git a/.gitignore b/.gitignore index 848e08e2e49..63e492ffb81 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ data/pelican_settings.json # this file is generated by the search module and should not be committed search_bundle.js node_modules/ + +attack-style/dist/ +attack-style/docs/ diff --git a/CUSTOMIZING.md b/CUSTOMIZING.md index cbb2ef3d9e4..287af561c98 100644 --- a/CUSTOMIZING.md +++ b/CUSTOMIZING.md @@ -75,8 +75,8 @@ def get_priority(): def get_menu(): return { "display_name": "Name that will be displayed in the navigation menu" - "module_name": "Your module's name", - "url": "/your_module-s_name/", + "module_name": "Your module's name", + "url": "/your_module-s_name/", "external_link": False, "priority": your_module-s_name_config.priority, "children": [ @@ -91,7 +91,7 @@ def get_menu(): "display_name": "Module sub-menu external page", "url": "https://attack.mitre.org", "external_link": True, - "children": [] + "children": [] } ] } diff --git a/attack-style/.nvmrc b/attack-style/.nvmrc new file mode 100644 index 00000000000..b009dfb9d9f --- /dev/null +++ b/attack-style/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/attack-style/.stylelintrc.json b/attack-style/.stylelintrc.json new file mode 100644 index 00000000000..39bc0d07746 --- /dev/null +++ b/attack-style/.stylelintrc.json @@ -0,0 +1,9 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-standard-scss" + ], + "ignoreFiles": [ + "dist/*" + ] +} \ No newline at end of file diff --git a/attack-style/README.md b/attack-style/README.md new file mode 100644 index 00000000000..1d1c04ccfb5 --- /dev/null +++ b/attack-style/README.md @@ -0,0 +1,56 @@ +# ATT&CK Style + +ATT&CK Style is a JavaScript package that builds the CSS styles for the ATT&CK website. +The outputs are simply 2 CSS files: + +* `dist/style-attack.css` +* `dist/style-user.css` + +These files are then copied into `/attack-theme/static/`. +Currently this is done manually - no automation. +But also, the CSS is not updated very often. + +## Installation + +To set up the ATT&CK Style package, follow these steps: + +1. **Prerequisite: Ensure Node.js is Installed**: + + Make sure you have the latest Node.js LTS version installed. + +2. **Navigate to the attack-style Sub-folder**: + + Clone the repository, then change your directory to the attack-style sub-folder. + + ```bash + cd /attack-style + ``` + +3. **Install Dependencies**: + + Run the following command to install the necessary dependencies: + + ```bash + npm install + ``` + +## Build + +1. **Build the CSS Files**: + + Use the following command to compile the SCSS files into CSS. + The CSS output files will be generated in the `dist/` directory. + + ```bash + npm run build + ``` + +2. **Copy CSS Files**: + + Copy both `dist/style-attack.css` and `dist/style-user.css` to `/attack-theme/static/`. + + ```bash + npm run copy + ``` + +The files are now ready to be used in the process to build the ATT&CK website! diff --git a/attack-style/abstracts/_color-functions.scss b/attack-style/abstracts/_color-functions.scss new file mode 100644 index 00000000000..4407f1f3d8b --- /dev/null +++ b/attack-style/abstracts/_color-functions.scss @@ -0,0 +1,55 @@ +@use "sass:color"; +@use "sass:map"; +@use "sass:string"; +@use "variables"; + +// accessor helper for $colors. Gets the color of the named pair +@function color($name) { + @return map.get(map.get(variables.$colors, $name), "color"); +} + +// given a color name, get an alternate version of the color, for patterning +// if the base color is dark, the alternate will be slightly lighter. +// if the base color is light, the alternate will be slightly darker. +// contrast, an optional argument, multiplies to create a more distint or similar color. >1 is more distant, <1 is more similar. +@function color-alternate($name, $contrast: 1) { + @return color.mix(color.invert(color($name)), color($name), $weight: $contrast * 5%); +} + +/// accessor helper for $colors. Gets the on-color of the named pair +@function on-color($name) { + @return map.get(map.get(variables.$colors, $name), "on-color"); +} + +/// given a color-name, get an emphasized version of the on-color. +/// The emphasized on-color is less like the background color. +@function on-color-emphasis($name) { + @return color.mix(color.invert(color($name)), on-color($name)); +} + +// given a color-name, get an deemphasized version of the on-color. +// The deemphasized on-color is more like the background color. +@function on-color-deemphasis($name) { + @return color.mix(color($name), on-color($name), 25%); +} + +// given a color name, compute a border color for the color +@function border-color($name) { + @return color.mix(color.invert(color($name)), color($name), 12.5%); + + // @return rgba(invert(color($name)), 0.125); +} + +// given a color name, compute a border color for the color +@function background-color($name) { + @return color.mix(color.invert(color($name)), color($name), 12.5%); +} + +// escape the color. Note param is a color and not a color name: this is not an accessor to the color map above. +// replaces # with %23 in hex colors +// see https://codepen.io/gunnarbittersmann/pen/BoovjR for explanation of why we have to escape # for the background image +@function escape-color($color) { + $hex: color.ie-hex-str($color); + + @return "%23" + string.slice($string: #{$hex}, $start-at: 4); // skip #AA in #AARRGGBB +} diff --git a/attack-style/abstracts/_font-faces.scss b/attack-style/abstracts/_font-faces.scss new file mode 100644 index 00000000000..8af1361b589 --- /dev/null +++ b/attack-style/abstracts/_font-faces.scss @@ -0,0 +1,42 @@ +@use "sass:list"; +@use "sass:map"; + +$fonts: ( + font-families: ( + "Roboto-Thin", + "Roboto-Light", + "Roboto-Regular", + "Roboto-Medium", + "Roboto-Bold", + "Roboto-Black", + "AlegreyaSans-Regular" + ), + font-weights: ( + 100, + 300, + 400, + 500, + 700, + 900, + 400 + ), + srcs: ( + "fonts/Roboto/Roboto-Thin.ttf", + "fonts/Roboto/Roboto-Light.ttf", + "fonts/Roboto/Roboto-Regular.ttf", + "fonts/Roboto/Roboto-Medium.ttf", + "fonts/Roboto/Roboto-Bold.ttf", + "fonts/Roboto/Roboto-Black.ttf", + "fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf" + ) +); + +/* FONTS */ +@for $i from 1 to list.length(map.get($fonts, "font-families")) { + @font-face { + font-family: list.nth(map.get($fonts, "font-families"), $i); + font-style: normal; + font-weight: list.nth(map.get($fonts, "font-weights"), $i); + src: url(list.nth(map.get($fonts, "srcs"), $i)); + } +} diff --git a/attack-theme/static/style/_misc.scss b/attack-style/abstracts/_utilities.scss similarity index 88% rename from attack-theme/static/style/_misc.scss rename to attack-style/abstracts/_utilities.scss index bcc7f6a8005..23be713c829 100644 --- a/attack-theme/static/style/_misc.scss +++ b/attack-style/abstracts/_utilities.scss @@ -1,3 +1,5 @@ +@use "sass:math"; + // specify a font family for a css block or element @mixin font($primary, $secondary: sans-serif) { font-family: $primary, $secondary; @@ -5,7 +7,7 @@ // change any presicion point to rem for consistency @function to-rem($target-val) { - @return #{$target-val/16}rem; + @return #{math.div($target-val, 16)}rem; } // base for precision point (not used in @media blocks) @@ -17,4 +19,3 @@ @mixin margin($property, $value) { margin-#{$property}: to-rem(24 * $value); } - diff --git a/attack-style/abstracts/_variables.scss b/attack-style/abstracts/_variables.scss new file mode 100644 index 00000000000..bdbc472efa0 --- /dev/null +++ b/attack-style/abstracts/_variables.scss @@ -0,0 +1,80 @@ +@use "sass:map"; +@use "../config.scss" as config; + +/* COLORS */ + +/// ATT&CK Brand colors +$attack-colors: ( + attack-orange: #c63f1f, + attack-blue: #062f4f, + attack-footer: #0b2338, + attack-active: #0156b3 +); + +/// User colors +$user-colors: ( + user-gray: #303435 +); + +/// +/// Colors used across the website. +/// For each color-pair: +/// - "color" refers to the color itself +/// - "on-color" refers to the most readable text-color to appear on top of the color. +/// Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to +/// appear with inner content. For example, "link" is only intended to be used for link text, which inherently +/// cannot have inner text. +/// +$colors: ( + primary: ( + color: if(config.$use-attack-theme, map.get($attack-colors, attack-orange), map.get($user-colors, user-gray)), + on-color: white + ), + // used for header and some nav elements + secondary: + ( + color: if(config.$use-attack-theme, map.get($attack-colors, attack-blue), map.get($user-colors, user-gray)), + on-color: white + ), + // used for some buttons + footer: + ( + color: if(config.$use-attack-theme, map.get($attack-colors, attack-footer), map.get($user-colors, user-gray)), + on-color: #87deff + ), + // used for footer and some buttons + active: + ( + color: if(config.$use-attack-theme, map.get($attack-colors, attack-active), map.get($user-colors, user-gray)), + on-color: #eaeaea + ), + // used for active buttons and sidebar links + body: + ( + color: white, + on-color: #39434c + ), + // primary page body + // example of a dark theme for the site + // body: (color: rgb(50, 50, 50), on-color: #cdcdcd), + link: + ( + color: #4f7cac + ), + // hyperlinks + matrix-header: + ( + color: gray, + on-color: white + ), + // color of matrix headers + // query highlight in the search UI + search-highlight: + ( + color: yellow, + on-color: black + ), + deemphasis: ( + color: #303435 + ) +); diff --git a/attack-style/base/_base.scss b/attack-style/base/_base.scss new file mode 100644 index 00000000000..138b74ef090 --- /dev/null +++ b/attack-style/base/_base.scss @@ -0,0 +1,24 @@ +@use "../abstracts/color-functions"; + +// used in 404 and contact templates +.deemphasis { + color: color-functions.on-color-deemphasis(body); +} + +// background color for the table matrix headers in the home page and the matrices page +.matrix-header { + background-color: color-functions.color(matrix-header); + color: color-functions.on-color(matrix-header); +} + +// background color for the table matrix in the home page +%bg-alternate { + background-color: color-functions.color-alternate(body) !important; +} + +// .bg-alternate { +// background-color: color-functions.color-alternate(body) !important; +// } +.bg-alternate { + @extend %bg-alternate; +} diff --git a/attack-style/base/_typography.scss b/attack-style/base/_typography.scss new file mode 100644 index 00000000000..109184e1b44 --- /dev/null +++ b/attack-style/base/_typography.scss @@ -0,0 +1,12 @@ +@use "../abstracts/color-functions"; + +.text-label { + text-transform: uppercase; + font-size: 14px; +} + +.text-label-small { + font-size: 12px; + color: color-functions.color(deemphasis); + margin-top: -10px; +} diff --git a/attack-style/components/_matrix.scss b/attack-style/components/_matrix.scss new file mode 100644 index 00000000000..0804423c173 --- /dev/null +++ b/attack-style/components/_matrix.scss @@ -0,0 +1,381 @@ +@use "sass:math"; +@use "../abstracts/color-functions"; +@use "../abstracts/utilities"; + +.matrix-container { + border: 1px solid color-functions.border-color(body); + + // border-top-width: 0; + background: color-functions.color(body); + + & + .matrix-container { + margin-top: utilities.to-rem(16); + } + + .matrix-border { + border-left: 1px solid color-functions.border-color(body); + padding-left: 0.5rem; + display: flex; + justify-content: center; + align-items: center; + } + + .matrix-title { + border-bottom: 1px solid color-functions.border-color(body); + margin-bottom: 1rem; + padding-bottom: 0.5rem; + } + + .scroll-indicator-group { + white-space: nowrap; + display: flex; + + .matrix-scroll-box { + flex-grow: 1; + display: inline-block; + } + + .scroll-indicator { + width: 0; + display: inline-block; + position: relative; + + .cover { + width: 50px; + height: 100%; + position: absolute; + pointer-events: none; // doesn't prevent usage of things under the cover + } + + // safari doesn't really work with transparent in gradients, but making something almost transparent works + $safari-transparent: rgba(255, 255, 255, 0.1%); + + &.right { + .cover { + right: 0; + } + + &.show .cover { + background: linear-gradient(to right, $safari-transparent, color-functions.color(body)); + } + } + + &.left { + .cover { + left: 0; + } + + &.show .cover { + background: linear-gradient(to left, $safari-transparent, color-functions.color(body)); + } + } + } + } +} + +$sizeunit: 14px; + +.matrix { + white-space: normal; + line-height: $sizeunit; + + &.side { + // thead { + // background-color: color(matrix-header); + // color: on-color(matrix-header); + // } + // white-space: nowrap; + .tactic { + &:first-child { + padding: 2px 5px 2px 2px; + } + + &:last-child { + padding: 2px 2px 2px 5px; + } + + padding: 2px 5px; + width: 1%; + vertical-align: top; + + // &:not(:last-child):not(.name, .count) { + // border-right: 1px solid border-color(body); + // } + + &:hover:not(.name, .count) { + background: color-functions.background-color(body); + + // Apply background color to child when hovering + .sidebar.expanded .angle { + background: color-functions.background-color(body); + } + } + + &.name, + &.count { + text-align: center; + font-size: $sizeunit + 2px; + } + + &.name { + font-weight: bold; + } + + &.count { + font-size: $sizeunit - 1px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; + } + + .techniques-table { + border-collapse: collapse; + width: 100%; + + tr, + td { + padding: 0; + } + + tr { + height: 1px; + } + } + + .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; + + td { + padding: 0; + vertical-align: top; + + &.technique { + outline: 1px solid color-functions.on-color-deemphasis(body); + outline-offset: -1px; + } + } + } + + .subtechniques { + &.hidden { + display: none; + } + + // expand to entire height of row if it's smaller than supertechnique + display: flex; + flex-direction: column; + height: 100%; + margin-left: -1px; + border-left: 2px solid color-functions.on-color-deemphasis(body); + outline: 1px solid color-functions.on-color-deemphasis(body); + outline-offset: -1px; + white-space: nowrap; + vertical-align: top; + + .subtechnique { + height: 100%; + flex-grow: 1; + } + } + + .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: color-functions.color-alternate(body); + width: 12px; + height: 12px; + font-size: 16px; + line-height: 12px; + } + + .sidebar { + min-width: 8px; + width: 12px; + padding: 0; + background: color-functions.on-color-deemphasis(body); + cursor: pointer; + position: relative; + vertical-align: middle; + + .angle { + display: none; + } + + &.expanded .angle { + margin: 0 auto; // internet explorer and edge compatability requires this for some reason + height: 12px; + display: block; + position: absolute; + background: color-functions.color(body); + + svg { + fill: color-functions.on-color-deemphasis(body); + vertical-align: baseline; + } + + &.top { + top: 0; + } + + &.bottom { + bottom: 0; + } + } + } + } + } + + &.flat { + .tactic { + margin-right: 5px; + width: 1%; + vertical-align: top; + + &.name, + &.count { + text-align: center; + font-size: $sizeunit + 2px; + } + + &.name { + font-weight: bold; + } + + &.count { + font-size: $sizeunit - 1px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; + } + + .subtechniques-row.hidden { + display: none; + } + + .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; + + td { + padding: 0; + vertical-align: top; + + &.sidebar.technique { + min-width: 8px; + width: 12px; + padding: 0; + background: color-functions.on-color-deemphasis(body); + cursor: pointer; + vertical-align: middle; + + .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: color-functions.color-alternate(body); + width: 12px; + height: 9px; + font-size: 16px; + line-height: 12px; + } + } + + &.sidebar.subtechniques { + svg { + fill: color-functions.on-color-deemphasis(body); + vertical-align: baseline; + } + } + + &.sidebar { + border-right: 2px solid color-functions.on-color-deemphasis(body); + } + + &.technique { + outline: 1px solid color-functions.on-color-deemphasis(body); + outline-offset: -1px; + } + } + } + + .more-icon { + transition: all ease 0.125s; + vertical-align: top; + + // TODO icon + transform: scale(0.5) rotate(-90deg); + width: 12px; + height: 12px; + + &.expanded { + transform: scale(0.5); + } + } + } + } + + .technique-cell { + height: 100%; + display: flex; + align-items: center; + background-color: color-functions.color(body); + font-size: $sizeunit - 1px; + line-height: $sizeunit; + + a { + display: block; + width: 100%; + height: 100%; + padding: math.div($sizeunit, 2) 3px; + } + + outline: 1px solid transparent; + outline-offset: -1px; + + &:not(.colored):not(.supertechniquecell) { + outline-color: color-functions.border-color(body); + } + } +} + +.matrix-controls { + margin: auto; + width: 50%; + padding: 1rem; + + button { + border-color: color-functions.border-color(body); + background: color-functions.color(body); + color: color-functions.on-color(body); + + &:hover { + background: color-functions.color-alternate(body, 0.8); + } + } + + .layout-button { + // active layout button should not use the .active style + // to prevent it looking like there's two active items in + // the menu when the user is clicking. Instead use the + // bootstrap hover style. + &:active { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; + } + } +} + +.center-controls .matrix-controls .btn-toolbar { + justify-content: center; +} + +.btn-toolbar { + justify-content: center; +} diff --git a/attack-style/components/_search.scss b/attack-style/components/_search.scss new file mode 100644 index 00000000000..ec18d876a75 --- /dev/null +++ b/attack-style/components/_search.scss @@ -0,0 +1,141 @@ +@use "../abstracts/color-functions"; + +// highlight for found search words in preview and title +.search-word-found { + background: color-functions.color(search-highlight); + color: color-functions.on-color(search-highlight); +} + +.btn-group-text { + padding: 0.25rem, 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; + border: 1px solid transparent; +} + +.overlay.search { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1051; // header is 1050 and we need to overlay header + background: rgba(0, 0, 0, 0.35); + padding: 50px; + + .overlay-inner { + border-radius: 25px; + background: color-functions.color(body); + color: color-functions.on-color(body); + width: 100%; + display: flex; + flex-flow: column; + max-height: 100%; + + .search-header { + flex-shrink: 0; + position: relative; + + .search-input { + padding: 10px; + + input { + padding-left: 12.5px; + font-size: 25px; + line-height: 50px; + width: 100%; + border: 0; + background: color-functions.color(body); + color: color-functions.on-color(body); + + &:focus { + outline: none; + } + } + } + + .search-icons { + position: absolute; + top: 0px; + right: 0px; + + > div { + display: inline-block; + } + + .search-parsing-icon { + height: 25px; + width: 25px; + margin-bottom: 8px; + opacity: 0.5; + } + + .close-search-icon { + font-size: 50px; + width: 50px; + line-height: 50px; + text-align: center; + margin: 10px; + opacity: 0.8; + cursor: pointer; + + &:hover { + opacity: 1; + } + } + } + } + + .search-body { + flex: 1 1 auto; + padding: 0 50px; + border-top: 1px solid color-functions.border-color(body); + margin-bottom: 25px; + overflow-y: auto; + + .results { + .search-result:first-child { + margin-top: 1.5rem; + } + } + + .load-more-results { + // button and stuff for showing more results + text-align: center; + } + } + } +} + +.page-search { + float: right; + width: 50%; +} + +// internet explorer compatability override +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .overlay.search .search-body { + flex-basis: 50vh !important; + } +} + +// mobile display search overrides +@media screen and (min-width: 1px) and (max-width: 767.8px) { + .search-input input { + font-size: 20px !important; + line-height: 25px !important; + } + + .close-search-icon { + font-size: 25px !important; + line-height: 25px !important; + width: 25px !important; + } + + .search-parsing-icon { + width: 14px !important; + height: 14px !important; + margin-bottom: 5px !important; + } +} diff --git a/attack-style/components/_tour.scss b/attack-style/components/_tour.scss new file mode 100644 index 00000000000..caed9b782eb --- /dev/null +++ b/attack-style/components/_tour.scss @@ -0,0 +1,43 @@ +@use "../abstracts/color-functions"; + +// .tour-backdrop { +// opacity: 0.3; +// position: fixed; +// } +.popover { + .popover-header { + background: color-functions.color(primary); + color: color-functions.on-color(primary); + } + + box-shadow: 0 0 5px 3px color-functions.color(body); // give the popover a halo for readability + + // darker border + border-color: color-functions.color(primary); + + &.bs-popover-left .arrow::before { + border-left-color: color-functions.color(primary); + } + + &.bs-popover-right .arrow::before { + border-right-color: color-functions.color(primary); + } + + &.bs-popover-top .arrow::before { + border-top-color: color-functions.color(primary); + } + + &.bs-popover-bottom { + .arrow::before, + .arrow::after, + .popover-header::before { + border-bottom-color: color-functions.color(primary); + } + } +} + +.tour-backdrop, +.tour-highlight { + // hide tour backdrop and highlight to prevent animations + opacity: 0; +} diff --git a/attack-style/components/_versioning.scss b/attack-style/components/_versioning.scss new file mode 100644 index 00000000000..c7e72ee7a21 --- /dev/null +++ b/attack-style/components/_versioning.scss @@ -0,0 +1,18 @@ +@use "../abstracts/color-functions"; + +.version-button { + // hide the option not in use + &.permalink .live { + display: none; + } + + &.live .permalink { + display: none; + } +} + +.version-table .table-break-row { + border-right-color: color-functions.color(body); + border-left-color: color-functions.color(body); + padding: 1rem 0; +} diff --git a/attack-style/config.scss b/attack-style/config.scss new file mode 100644 index 00000000000..48d49625aa9 --- /dev/null +++ b/attack-style/config.scss @@ -0,0 +1 @@ +$use-attack-theme: false !default; // set to false by default \ No newline at end of file diff --git a/attack-style/layout/_footer.scss b/attack-style/layout/_footer.scss new file mode 100644 index 00000000000..cd7f7f1cbb4 --- /dev/null +++ b/attack-style/layout/_footer.scss @@ -0,0 +1,112 @@ +@use "sass:color"; +@use "../abstracts/color-functions"; +@use "../abstracts/utilities"; + +/* Footer styling */ +.footer { + background-color: color-functions.color(footer); + color: color-functions.on-color(secondary); + padding: 1rem 3rem; + + @include utilities.font("Roboto-Thin"); + + // place footer at the bottom + &.sticky-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; + } + + > .container-fluid { + padding-right: 0 !important; + padding-left: 0 !important; + } + + // space block between text block and buttons in footer + .footer-responsive-break { + display: none; + } + + // place buttons to the right of footer + .footer-float-right-responsive-brand { + float: right; + height: 100%; + display: flex; + align-items: center; + } + + // place button to the right of footer; vertically centered + .footer-float-right-responsive-centered { + display: flex; + justify-content: flex-end; + align-items: center; + } + + .footer-link-group { + display: flex; + flex-direction: column; + justify-content: center; + } + + .footer-link { + color: color-functions.on-color(footer); + + &:hover { + // add some link color to this so that it resembles a link, but is still visible if normal link color is not visible on footer color + color: color.mix(color-functions.on-color(footer), color-functions.color(link)); + } + } +} + +.col { + .col-footer { + border-right: 1px solid; + } +} + +.p-footer { + padding-left: 25px; +} + +.btn-footer { + color: white; + padding: 0.375rem; +} + +.btn-footer:hover { + color: white; +} + +// phones and small tablets view +@media screen and (width <= 47.9875rem) { + .footer { + // space block between text block and buttons in footer + .footer-responsive-break { + display: block !important; + } + + // extend buttons width to 100% in the footer + .footer-float-right-responsive-brand { + float: none !important; + } + + .footer-float-right-responsive-centered { + float: none !important; + display: block !important; + justify-content: none !important; + align-items: none !important; + } + } +} + +/* **** */ + +// Hides the footer when the user tries to print out a page so that the page looks clean and only the relevant information is displayed + +@media print { + .footer { + visibility: hidden; + display: none; + } +} diff --git a/attack-style/layout/_layout.scss b/attack-style/layout/_layout.scss new file mode 100644 index 00000000000..f078a3dd81b --- /dev/null +++ b/attack-style/layout/_layout.scss @@ -0,0 +1,1669 @@ +@use "sass:color"; +@use "sass:math"; +@use "../abstracts/color-functions"; +@use "../abstracts/utilities"; +@use "../base/base"; + +/* General styling */ +html { + height: 100%; +} + +body { + height: 100%; + background: color-functions.color(body); + color: color-functions.on-color(body); + + @include utilities.font("Roboto-Regular"); + + display: flex; + flex-direction: column; +} + +// footer IE compatability +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + body { + height: auto; // fix footer bug + } +} + +// .maincontent { //grow the page content to fill space before footer +// flex-grow: 1; +// } + +.attack-website-wrapper { + max-height: 100vh; + overflow-y: auto; +} + +h1, +h2, +h3, +h4, +h5 { + @include utilities.font("Roboto-Light"); +} + +strong { + @include utilities.font("Roboto-Bold"); +} + +.jumbotron { + padding: 0; + background: color-functions.color(body); + color: color-functions.on-color(body); + + code { + color: color-functions.on-color-emphasis(body); + background-color: color-functions.color-alternate(body, 2); + border-radius: 3px; + font-family: courier, monospace; + padding: 0 3px; + } +} + +a { + color: color-functions.color(link); + + .anchor::before { + content: ""; + display: block; + margin-top: utilities.to-rem(-80); + position: absolute; + } +} + +.marker-none { + list-style-type: none; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.fs-s { + font-size: small; +} + +.capec-card { + background: rgb(128, 0, 0); + + img { + margin: utilities.to-rem(8); + max-width: utilities.to-rem(160); + max-height: utilities.to-rem(55); + margin-left: auto; + margin-right: auto; + display: block; + } +} + +.maec-card { + background: #212121; + + img { + margin: utilities.to-rem(8); + max-width: utilities.to-rem(146); + margin-left: auto; + margin-right: auto; + display: block; + } +} + +.default-img-size { + width: 100%; + max-width: utilities.to-rem(1000); +} + +.mitre-logo-wtrans { + width: utilities.to-rem(144); + height: utilities.to-rem(66); +} + +// left column in the home page +.quick-links { + width: 100%; + text-align: center; + table-layout: fixed; + + td { + padding: utilities.to-rem(5) 0; + } + + tr + tr { + border-top: 1px solid color-functions.border-color(body); + } +} + +.row-main-page { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +@media screen and (width <= 47.9875rem) { + .row-main-page { + display: inline; + } +} + +// p for home page +.p-line { + p { + border-top: 0.0625rem solid #1c2226; + } +} + +// button style in the side navigation of MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE +.btn-default { + background: color-functions.color(body); + border-color: color-functions.on-color-deemphasis(body); + color: color-functions.on-color(body); + + &:hover { + color: color-functions.on-color-emphasis(body); + } +} + +.website-button { + font-size: 16px; + border-radius: 5px; + cursor: pointer; + position: relative; + overflow: hidden; + font-family: Arial; + display: inline-flex; + align-items: center; + border-style: solid; +} + +.slide-icon-button { + border-style: none; + background: none; +} + +.slide-button { + @extend .website-button; + + border-color: color-functions.color(active); + color: #fff; + background: color-functions.color(active); + padding: 6px 16px; + + a & { + text-decoration: none !important; + } +} + +.slide-button-secondary { + @extend .website-button; + + color: color-functions.color(active); + background: #fff; + border-color: color-functions.color(active); + padding: 6px 16px; + + a & { + text-decoration: none !important; + } +} + +.slide-button-text { + position: relative; +} + +.slide-button-icon { + position: relative; + padding-left: 8px; +} + +.slide-button:hover { + background: color-functions.color(secondary); + border-color: color-functions.color(secondary); +} + +.slide-button-secondary:hover { + background: color-functions.on-color(active); + border-color: color-functions.color(secondary); + color: color-functions.color(secondary); +} + +// used for data sources filter dropdown +.dropdown { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + background-color: color-functions.on-color(secondary); + min-width: 160px; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 20%); +} + +.dropdown:hover .dropdown-content { + display: block; +} + +// placeholder for base style of all navy colored buttons +%button-style { + color: color-functions.on-color(secondary); + border-color: utilities.to-rem(1) solid color-functions.color(secondary); +} + +// navy buttons are in the home page and in MATRICES +.btn-navy { + @extend %button-style; + + background-color: color-functions.color(secondary); + color: color-functions.on-color(secondary); + + &:hover { + // Extending placeholder 'button-style' is necessary to keep on-color white. Else, the on-color will change to the tag on-color when hovering the button. + @extend %button-style; + + background-color: color.scale(color-functions.color(secondary), $lightness: 5%); + background-image: none; + } +} + +// Style for changelog markdown section +.markdown-body { + h1:not(:first-child) { + padding-top: 2rem; + } + + h1 { + padding-bottom: utilities.rem(0.5); + font-size: utilities.rem(1.5); + } + + h2 { + font-size: utilities.rem(1); + } + + h3 { + font-size: utilities.rem(0.8); + } +} + +/* **** */ + +/* Table styling */ +.table, +.blog-post table, +.changelog table { + empty-cells: hide; + + td { + p:last-child { + margin-bottom: 0; + } + + padding: 0.75rem; + vertical-align: top; + } + + th { + padding: utilities.rem(0.3); + vertical-align: top; + font-size: utilities.rem(0.6); + } + + .active { + color: color-functions.color(primary); + } +} + +.blog-post table { + margin-bottom: 1.5rem; +} + +// background color for tables in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE +.table-alternate, +.blog-post table, +.changelog table { + @extend %bg-alternate; + + tbody { + background: color-functions.color(body); + color: color-functions.on-color(body); + } +} + +// table for techniques +.table-techniques { + thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; + } + + table { + border-collapse: collapse; + } + + td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; + } + + tr:last-child { + border-bottom: 1px solid #dfdfdf; + } + + .sub.technique { + border-left: none; + } + + .technique td:first-child { + border-bottom: none; + } + + .sub.technique td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; + } + + .sub.technique td:not(:nth-child(4)) { + color: #4f7cac; + } + + .technique:not(.sub) td:not(:nth-child(3)) { + color: #4f7cac; + } +} + +// Styling for techniques used table +.techniques-used { + table { + border-collapse: collapse; + } + + td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; + } + + tr:last-child { + border-bottom: 1px solid #dfdfdf; + } + + .sub.technique { + border-left: none; + } + + .technique td:first-child { + border-bottom: none; + } + + .technique td:nth-child(2) { + border-bottom: none; + } + + .sub.technique:not(.noparent) td:nth-child(2) { + width: 5ex; + border-top: none; + border-bottom: none; + } + + .sub.technique:not(.noparent) td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; + } +} + +.techniques-used.background { + thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; + } +} + +// .table td.border { +// border-color: on-color-deemphasis(body); +// } + +// Styling for datasources table +.datasources-table { + table { + border-collapse: collapse; + } + + thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; + } + + td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; + } + + tr:last-child { + border-bottom: 1px solid #dfdfdf; + } + + .datacomponent.datasource { + border-left: none; + } + + .datasource td:first-child { + border-bottom: none; + } + + .datasource td:nth-child(2) { + border-bottom: none; + } + + .datacomponent.datasource:not(.noparent) td:nth-child(2) { + width: 5ex; + border-top: none; + border-bottom: none; + } + + .datacomponent.datasource:not(.noparent) td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; + } + + .nowrap { + white-space: nowrap; + } +} + +.tables-mobile { + overflow-y: auto; +} + +.table-bordered, +.blog-post table, +.changelog table { + &, + & td, + & th { + border: 1px solid color-functions.border-color(body); + } + + th { + border-bottom: 2px solid color-functions.border-color(body) !important; + } +} + +// border style for empty cells in the home page matrix and in MATRICES +@mixin no-border($property) { + #{$property}: none !important; +} + +// vertically aligned text +@mixin align($text, $vertical) { + text-align: $text !important; + vertical-align: $vertical !important; +} + +// matrix style in home page and in MATRICES +.table-matrix { + @include no-border(border); + + thead th { + @include align(center, middle); + + border: utilities.to-rem(1) solid color-functions.border-color(body) !important; + } + + td, + th { + @include align(center, middle); + @include no-border(border-top); + + padding: utilities.to-rem(2) !important; + font-size: utilities.to-rem(12) !important; + + &.border { + border: utilities.to-rem(1) solid color-functions.border-color(body) !important; + } + + &.no-border { + @include no-border(border); + } + } + + td { + background: color-functions.color(body); + color: color-functions.on-color(body); + } +} + +// table expands/contracts depending on the cell's content +%table-nowrap { + white-space: nowrap; + width: 1%; +} + +// mitigation tables +.table-mitigations { + @extend %table-nowrap; + + th, + td { + @extend %table-nowrap; + } +} + +// number of table rows in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE +.div-count { + margin-top: auto; + margin-bottom: 0; +} + +.table-object-count { + display: flex; + justify-content: flex-end; +} + +// links in header row of matrices in the home page matrix and in MATRICES +.matrix-tactics-url { + color: color-functions.on-color(primary); + + &:visited, + &:hover, + &:active { + color: color-functions.on-color(primary); + } +} + +/* **** */ + +/* BANNER */ +.banner-message { + padding: utilities.to-rem(5) 0; + text-align: center; + background-color: color-functions.color-alternate(body, 2); +} + +// basic banner +.version-banner { + @extend .banner-message; +} + +/* **** */ + +/* IMG/SVG ICON in BANNER */ +.icon-inline { + display: inline-flex; + align-self: center; + + svg, + img { + height: utilities.rem(0.7); + width: utilities.rem(0.7); + fill: currentcolor; + top: utilities.rem(-0.175); + position: relative; + } +} + +/* **** */ + +/* Pre-block in SIGHTINGS */ +// style for inline code blocks +pre { + color: color-functions.on-color(body); + background-color: color-functions.color-alternate(body, 3); + border-radius: 5px; + padding: 1rem; +} + +code { + color: #c63e1f; +} + +/* **** */ + +/* CARDS */ +// cards are used in the General Information, Staying Informed, and Related Projects page, and in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE +.card { + background: color-functions.color(body); + color: color-functions.on-color(body); + border-color: color-functions.border-color(body); +} + +.button-group { + display: flex; + justify-content: end; + + a.button + a.button { + margin-left: 22px; + } + + button { + justify-content: center; + width: 100%; + } + + a.w-40 { + width: 40%; + } +} + +.card-filter { + width: 20%; + top: 9.3rem; + float: right; + background: color-functions.on-color(active); +} + +@media screen and (width <= 90.62rem) { + .card-filter { + display: contents; + } +} + +.card-presentation { + margin-bottom: 30px; +} + +.card-attackcon { + width: 100%; +} + +.card-data { + margin-bottom: utilities.rem(0.2); +} + +.card-header { + color: color-functions.on-color(body); + background: rgba(color-functions.on-color(body), 0.03); + border-bottom-color: color-functions.border-color(body); +} + +a.partial-underline { + text-decoration: none; + + .hover-line { + text-decoration: underline; + } +} + +.contact-card { + border-radius: 0.75em; + overflow: hidden; + + .card-footer { + padding: 0 1.25rem 1.25rem; + + &.button-group { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 12px; + } + } + + .card-footer-no-button { + padding: 0.5rem 1.25rem; + min-height: 4rem; + max-height: fit-content; + } + + .card-header { + padding: 1.25rem 1.25rem 0; + + &.background { + background: color-functions.color(footer); + color: white; + padding-bottom: 1.25rem; + } + } + + .card-header, + .card-footer { + &.no-background { + background: color-functions.color(body); + color: color-functions.on-color(body); + border: unset; + } + } + + .card-body { + p { + margin: 0; + } + + &.background { + background: color-functions.on-color(active); + } + } +} + +.card-body { + // Remove extra whitespace from tables inside of cards + // Source: https://github.com/philipnewcomer/bootstrap4-card-tables/blob/master/src/bootstrap4-card-tables.scss + > .table { + border-right: 0; + border-left: 0; + margin-bottom: 0; + + &:last-child { + border-bottom: 0; + } + + &:not(.table-sm) th, + &:not(.table-sm) td { + padding: 0.75rem 1.25rem; + } + + td:first-child, + th:first-child { + border-left: 0; + } + + td:last-child, + th:last-child { + border-right: 0; + } + + tr:first-child td, + tr:first-child th { + border-top: 0; + } + + tr:last-child td { + border-bottom: 0; + } + } + + .card-header + .table { + border-top: 0; + } +} + +// remove botton margin from last item in the card +.card-data:last-of-type { + margin-bottom: 0; +} + +.card-title { + font-size: utilities.rem(0.8); + color: color-functions.on-color-emphasis(body); +} + +.contact-card-title { + font-size: 1.1rem; + font-weight: bold; +} + +.card-title-icon { + float: right; + color: color-functions.color(active); +} + +/* **** */ + +/* TWITTER */ +// twitter container in the home page +.attack-box { + width: utilities.to-rem(352); + max-width: 100%; + height: utilities.to-rem(432); + margin: 0 auto; + border: 3px solid #dfdfdf; + padding: 3px; + display: flex; + flex-direction: column; + + iframe { + border: 1px solid color-functions.border-color(body) !important; + border-radius: 0.25rem; + } +} + +/* **** */ + +/* BREADCRUMBS */ +.breadcrumb { + font-size: 90%; + background-color: color-functions.color(body); + max-width: 1140px; + padding: 0 15px; + + .breadcrumb-item + .breadcrumb-item::before { + content: ">"; + color: color-functions.on-color-deemphasis(body); + } +} + +/* **** */ + +.nestedlist { + counter-reset: item; +} + +.nestedlist-item { + display: block; +} + +.nestedlist-item::before { + content: counters(item, ".") ". "; + counter-increment: item; +} + +.danger-card { + .card-header { + background: color-functions.color(primary); + color: color-functions.on-color(primary); + } + + border-color: color-functions.color(primary); +} + +/* **** */ + +/* ATT&CKCON */ +// collapsible expansion panels - light +.bg-accord-light { + color: color-functions.on-color(body); + background-color: color-functions.color-alternate(body); +} + +// collapsible expansion panels - dark +.bg-accord-dark { + color: color-functions.on-color(body); + background-color: color-functions.color-alternate(body, 3); +} + +/* **** */ + +/* CONTRIBUTE */ +.contribution-headers { + @include utilities.font("Roboto-Regular"); +} + +.usa-card-group { + display: flex; + flex-direction: row; +} + +.usa-card__header { + @include utilities.font("Roboto-Regular"); + + color: color-functions.color(body); + background: color-functions.color(secondary); + border-bottom-color: color-functions.border-color(body); + border-radius: 0.3rem 0.3rem 0 0; +} + +/* CONTRIBUTE Examples */ +.new-examples { + padding: utilities.to-rem(10) utilities.to-rem(10) 0 utilities.to-rem(10); + width: 100%; + + &.second-example { + margin-top: utilities.to-rem(10); + margin-bottom: utilities.to-rem(20); + } + + .example-container { + padding: utilities.to-rem(15); + + .examples-div { + display: flex; + + .margin-contribute-a { + margin-left: utilities.to-rem(25); + } + + .margin-contribute-b { + margin-left: utilities.to-rem(183); + } + } + + .examples-p { + margin-left: utilities.to-rem(5); + margin-bottom: utilities.to-rem(10); + word-break: break-word; + } + + .nested-examples-div { + padding-left: utilities.to-rem(50); + } + + .example-fields { + @include utilities.font("Roboto-Bold"); + + + ul { + padding-left: utilities.to-rem(100); + } + } + } +} + +/* **** */ + +/* CONTRIBUTORS */ +.scrollable-box { + width: 100%; + height: 500px; + overflow: auto; + + // border: 1px solid black; /* just to show the box */ + padding: utilities.to-rem(15); + background-color: color-functions.color-alternate(body); + border-radius: utilities.to-rem(3); +} + +/* **** */ + +img.yt-core-image { + width: 100%; +} + +.iframe-width { + width: 500px; + height: 275px; +} + +@media screen and (width <= 47.9875rem) { + .iframe-width { + width: 100%; + height: 140px; + } +} + +/* No transition */ +.notransition::after { + transition: none !important; +} + +/* FAQ */ +.faq { + .faq-section { + padding-bottom: 2rem; + } + + .faq-question { + padding: 6px 0; + } + + .relevant-links { + margin-bottom: 1rem; + border-radius: 3px; + + .faq-link ~ .faq-link::before { + content: ", "; + } + } +} + +/* **** */ + +@mixin collapsible($direction) { + display: flex; + flex-direction: row; + + :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; + } + + &:#{$direction}, + &::#{$direction} { + content: ""; + cursor: pointer; + width: utilities.to-rem(24); + height: utilities.to-rem(24); + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='#{color-functions.escape-color(color-functions.on-color(body))}' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; + } + + @if $direction == "before" { + &.collapsed:#{$direction}, + &.collapsed::#{$direction} { + transform: rotate(-90deg); + } + } @else { + &:not(.collapsed):#{$direction}, + &:not(.collapsed)::#{$direction} { + transform: rotate(-180deg); + } + } +} + +.attackcon-columns { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: flex-start; +} + +@media screen and (width <= 47.9875rem) { + .attackcon-columns { + flex-direction: column; + } +} + +/* Ensure the sponsors block is below and not affected by the top image */ + +/* Card Blocks */ +// container of groups of cards +.card-block { + // style of card headers in collapsable cards in Getting Started and FAQ + .card-header { + h5 { + @include utilities.font("Roboto-Regular"); + } + + @include collapsible("after"); + } + + // style of card titles in Related Projects + .card-title { + display: inline-block; + flex-grow: 1; + + @include utilities.font("Roboto-Regular"); + } +} + +/* **** */ + +/* GENERAL INFORMATION */ +.general-info { + // cards with image in General Information page + .card-img-top { + width: 100%; + height: 15vw; + object-fit: cover; + } + + .graphics .card-header { + flex-grow: 1; + } + + // show entire timeline + .showmore-btn { + display: block !important; + text-align: center; + + &.show { + display: none !important; + } + } +} + +/* **** */ + +/* GETTING STARTED */ +// move video to an item in the getting started list when in mobile or tablet view +.getting-started { + ul:not(.col) { + padding: 0 utilities.to-rem(15); + margin-left: utilities.to-rem(15); + } + + .getting-started-content { + width: 75%; + } + + @media screen and (width <= 90.62rem) { + .getting-started-content { + width: 100%; + } + } + + .getting-started-icon { + color: color-functions.color(primary); + } + + .video-li { + /* don't display the video in the list itself except in mobile layout */ + display: none; + } + + @media screen and (width <= 47.9875rem) { + .row ul.col { + margin-left: utilities.to-rem(30); + } + + .video-col { + display: none; + } + + .video-li { + display: list-item; + } + } +} + +.jump-to-section { + position: -webkit-sticky; + position: sticky; + top: 14rem; + word-wrap: normal; + border-radius: 0.75em; +} + +/* **** */ + +/* Timeline in GENERAL INFORMATION */ +// base style of timeline +@mixin timeline($bg, $w, $h, $z) { + background: $bg; + position: absolute; + width: $w; + height: $h; + z-index: $z; + content: ""; +} + +.timeline { + $timeline-size: 20px; + $timeline-padding: 10px; + $timeline-hidden-height: 300px; + + overflow-y: hidden; + position: relative; + list-style-type: none; + padding-left: 0; + + // left line + &::before { + @include timeline(color-functions.on-color-deemphasis(body), utilities.to-rem(1), 100%, 2); + + left: (0.5 * $timeline-size) + $timeline-padding; + } + + &.collapse { + display: block !important; + } + + // hidden section of the timeline + &:not(.show) { + height: $timeline-hidden-height; + + // creating the 'faded' effect at the of the timeline when a section of the timelien is hidden + &::after { + @include timeline(linear-gradient(to bottom, transparent, color-functions.color(body)), 100%, math.div($timeline-hidden-height, 4), 4); + + bottom: 0; + pointer-events: none; // allow the user to click-through the overlay + } + } + + // milestones in timeline + .timeline-card { + margin: $timeline-size 0; + padding-left: $timeline-size + (2 * $timeline-padding); + + // roundel on the line indicating a milestone + &::before { + @include timeline(color-functions.color(body), $timeline-size, $timeline-size, 3); + + display: inline-block; + border-radius: 50%; + border: utilities.to-rem(2) solid color-functions.on-color-deemphasis(body); + left: $timeline-padding; + } + + // title style of the milestone + .timeline-card-header { + width: 100%; + display: flex; + flex-direction: row; + clear: both; + + .title { + display: inline-block; + flex-grow: 1; + font-size: utilities.rem(0.95); + } + + .date { + display: inline-block; + font-size: utilities.rem(0.95); + text-align: right; + white-space: nowrap; + padding-left: utilities.to-rem(10); + } + } + + // content of each milestone + .timeline-card-body { + padding-top: utilities.to-rem(5); + } + } +} + +/* **** */ + +/* Description formatting in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE */ +.description-body { + line-height: utilities.rem(1.5); +} + +.description-body.in-table { + padding: 0.75rem 1.25rem; + + p { + margin-bottom: 0; + } +} + +.description-body.card-description { + padding: 0.3rem 0 0 0; + + p { + margin-bottom: 0; + } +} + +/* **** */ + +/* External link icon */ +.external-icon { + width: utilities.to-rem(15); + margin-top: utilities.to-rem(-5); +} + +/* **** */ + +/* ATTA&K Logo */ +// attack logo in the home page +.attack-logo-bold { + width: 60%; +} + +// attack logo - menu +.attack-logo { + // vertically center + margin: 8px 0; + display: block; + height: 24px; +} + +/* **** */ + +/* anchor tag to bypass navbar */ +.anchor { + display: block; + position: relative; + top: utilities.to-rem(-66); + visibility: hidden; +} + +.section-view { + .anchor-section { + position: -webkit-sticky; + position: sticky; + top: 4.125rem; + background: color-functions.color(body); + z-index: 100; + margin-bottom: 0; + } + + p { + margin-bottom: 0; + padding-bottom: 0.5rem; + } + + // don't show in mobile view + .section-mobile-view { + display: none; + } + + // show in desktop view + .section-desktop-view { + display: block; + } + + // collapsed view for phones and small tablets + @media screen and (width <= 74.938rem) { + // show collapsed side navigation (mobile view) + .section-mobile-view { + display: block; + } + + // don't show side navigation in desktop view + .section-desktop-view { + display: none; + } + } + + .section-shadow { + border-bottom: 1px solid #dfdfdf !important; + } + + table { + margin-top: -1px; + } +} + +/* **** */ + +// how to display the sidebar +div#sidebars { + display: contents; +} + +/* Plus/Minus expand icons */ +// used in the expandable list items in the side navigation and in the expandable gray blocks in ATT&CKCON +.expand-icon { + font-size: 5%; + color: color-functions.on-color(body); + margin-top: utilities.to-rem(7); +} + +/* **** */ + +/* attackcon page */ +.attackcons { + border-top-width: 0; + + .sponsors { + flex: 1; + padding-left: 25px; + } + + .p-description { + width: 90%; + } + + .sponsors-block { + background: color-functions.on-color(active); + text-align: center; + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + flex-direction: column; + width: 200%; + + .img-container { + margin: 10px; + flex: 1 1 20%; + box-sizing: border-box; + + img { + width: 100%; + margin: auto; + height: auto; + } + } + } + + @media screen and (width <= 47.9875rem) { + .sponsors-block { + width: 100%; + flex-direction: row; + } + } +} + +.support-box { + background-color: color-functions.color-alternate(body, 2); + padding: 1.5em; + border-radius: 0.75em; + width: fit-content; +} + +.sponsor-list { + gap: 1.5em; +} + +.sponsor-square { + padding: 0 !important; + height: 150px; + display: flex; + + a { + display: contents; + } + + img.sponsor-logo { + background-color: color-functions.color(body); + border-radius: 6px; + object-fit: contain; + object-position: center; + } +} + +/* **** */ + +/* training pages */ +.training { + .exercise { + background: color-functions.color-alternate(body); + } +} + +.card-training { + margin-bottom: 30px; + width: 100%; +} + +.training-card-body { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: left; +} + +.training-text-container { + flex: 1; + margin-right: 20px; +} + +.training-header { + display: flex; + justify-content: space-between; +} + +.resources-container { + display: flex; + flex-wrap: wrap; + flex-direction: row; + gap: 10px; +} + +.resource { + flex: 1; + background-color: color-functions.on-color(active); + padding: 10px; + box-sizing: border-box; +} + +.resource-links { + list-style-type: none; + margin-top: 5px; + padding: 0 !important; + margin-left: 0 !important; +} + +.resource-links li { + margin-bottom: 5px; +} + +.resource-links a { + text-decoration: underline; +} + +/* **** */ + +// Decorative panels used for working-with-attack page + +.decorative-panels { + .decorative-panel { + // display: block; + .decorative-panel-header, + .decorative-panel-body { + padding: 10px; + } + + .decorative-panel-header { + h3, + h4, + .btn { + margin-bottom: 16px; + } + } + + .decorative-panel-body.show { + border-top: 1px solid color-functions.border-color(body); + } + + & + .decorative-panel { + margin-top: 25px; + } + + &:nth-of-type(even) { + border-radius: 8px; + background: color-functions.color-alternate(body); + } + } + + @media screen and (width <= 47.9875rem) { + .row { + display: block; + + &.collapse:not(.show) { + display: none; + } + } + } +} + +.working-with-attack { + .g-24 { + gap: 24px; + } + + .g-12 { + gap: 12px; + } + + .row.panels { + margin: 0; + } + + img { + border-radius: 0.75em; + } + + img.scale { + object-fit: cover; + object-position: left top; + border-radius: unset !important; + border: 1px solid color-functions.border-color(body); + } + + .panel { + padding: 0; + border: 1px solid color-functions.border-color(body); + border-radius: 0.75em; + max-width: 100%; + } + + img + .panel-body { + border-top: 1px solid color-functions.border-color(body); + } + + .panel-body { + p { + margin: 24px 0; + overflow: scroll; + } + + &.fixed-height { + height: 30vh; + } + } + + ul { + margin-bottom: 0; + } + + @media screen and (width <= 61.938rem) { + .panel-body { + &.fixed-height { + min-height: 40vh; + max-height: fit-content; + } + } + } + + .table-of-contents { + position: static; + float: none; + width: 25%; + } +} + +.tip-box { + background: color-functions.on-color(active); + padding: 1rem; +} + +/* Card Blocks */ +// container of groups of cards +.expand-panel { + .card-block { + // style of card headers in collapsable cards in Getting Started and FAQ + .card-header { + h5 { + @include utilities.font("Roboto-Regular"); + } + + @include collapsible("after"); + + &:not(:last-child) { + border-bottom: none; + } + } + + // style of card titles in Related Projects + .card-title { + display: inline-block; + flex-grow: 1; + + @include utilities.font("Roboto-Regular"); + } + + .first-card { + border-bottom: none; + border-radius: 0.25rem 0.25rem 0 0; + } + + .last-card { + border-radius: 0 0 0.25rem 0.25rem; + } + + .middle-card { + border-bottom: none; + border-radius: 0; + } + } +} + +/* **** */ + +// Institutes page breaks when the user tries to print so that all the content gets printed out, not just the first page (if there is more than one page's +// worth of content) +@media print { + * { + overflow: visible !important; + break-before: always !important; + page-break-inside: avoid !important; + } +} diff --git a/attack-style/layout/_nav.scss b/attack-style/layout/_nav.scss new file mode 100644 index 00000000000..85e321a44c3 --- /dev/null +++ b/attack-style/layout/_nav.scss @@ -0,0 +1,377 @@ +@use "layout"; +@use "../abstracts/color-functions"; +@use "../abstracts/utilities"; + +/* Navigation styling */ +// base style for nav-links in the top navigation bar (across the web site) +%ele-state { + border: utilities.to-rem(1) solid transparent; + border-top-left-radius: utilities.rem(-0.05); + border-top-right-radius: utilities.rem(-0.05); + text-decoration: underline; +} + +/* Top NAVIGATION */ // top navigation bar across the web site +.navbar { + background-color: color-functions.color(primary); + z-index: 1; + + // ATT&CK brand in the top navigation bar + .navbar-brand { + font-size: utilities.rem(1.7); + } + + .nav-tabs { + border-bottom: none; + + // list items + .nav-link { + color: color-functions.on-color(primary); + + @include utilities.font("Roboto-Light"); + + &:focus { + color: color-functions.on-color(primary); + + @extend %ele-state; + } + + &:hover:not(.active) { + color: color-functions.on-color(primary); + background-color: transparent; + + @extend %ele-state; + } + + &.active { + color: color-functions.on-color(primary); + background-color: color-functions.color(primary); + + @extend %ele-state; + } + } + + .nav-item.show .nav-link { + color: color-functions.on-color(primary); + background-color: color-functions.color(primary); + border-color: transparent; + } + } + + .search-button { + padding: 0.3rem utilities.to-rem(16); + font-size: 1rem; + border: utilities.to-rem(1) solid color-functions.on-color(primary); + border-radius: 0.25rem; + color: color-functions.on-color(primary); + line-height: utilities.to-rem(24); + opacity: 0.8; + + &:not(:has(.error-icon)):hover { + opacity: 1; + } + + .icon-button { + content: ""; + width: utilities.to-rem(24); + height: utilities.to-rem(24); + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; + background-position: center; + z-index: 1; + transition: all 0.2s ease; + } + + .search-icon { + cursor: pointer; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='#{color-functions.escape-color(color-functions.on-color(primary))}' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + } + + .error-icon { + cursor: default; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg fill='#{color-functions.escape-color(color-functions.on-color(primary))}' xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 96 960 960' width='24'%3e%3cpath d='M479.982 776q14.018 0 23.518-9.482 9.5-9.483 9.5-23.5 0-14.018-9.482-23.518-9.483-9.5-23.5-9.5-14.018 0-23.518 9.482-9.5 9.483-9.5 23.5 0 14.018 9.482 23.518 9.483 9.5 23.5 9.5ZM453 623h60V370h-60v253Zm27.266 353q-82.734 0-155.5-31.5t-127.266-86q-54.5-54.5-86-127.341Q80 658.319 80 575.5q0-82.819 31.5-155.659Q143 347 197.5 293t127.341-85.5Q397.681 176 480.5 176q82.819 0 155.659 31.5Q709 239 763 293t85.5 127Q880 493 880 575.734q0 82.734-31.5 155.5T763 858.316q-54 54.316-127 86Q563 976 480.266 976Zm.234-60Q622 916 721 816.5t99-241Q820 434 721.188 335 622.375 236 480 236q-141 0-240.5 98.812Q140 433.625 140 576q0 141 99.5 240.5t241 99.5Zm-.5-340Z'/%3e%3c/svg%3e"); + } + } +} + +/* **** */ + +.nav, +.faq { + /* NAVIGATION Dropdown */ // dropdowns in top navigation bar + .dropdown:hover > .dropdown-menu { + display: block; + } + + .dropdown-menu { + background-color: color-functions.color(primary); + + .dropdown-item { + color: color-functions.on-color(primary); + + &:hover, + &:focus { + color: color-functions.on-color(primary); + text-decoration: underline; + background-color: transparent; + } + } + } + + /* **** */ + + /* Side NAVIGATION */ + // bold list name for MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE + border-color: color-functions.border-color(body) !important; + + .heading { + font-size: utilities.rem(1.3); + color: color-functions.on-color-deemphasis(body); + letter-spacing: utilities.to-rem(3); + pointer-events: none; + + @media screen and (width <= 74.938rem) { + pointer-events: all; + } + } + + .heading.collapsed .fa-chevron-up, + .heading .fa-chevron-down { + display: none; + } + + .heading.collapsed .fa-chevron-down, + .heading .fa-chevron-up { + display: inline-block; + } + + i.fa-solid { + visibility: hidden; + display: none; + + @media screen and (width <= 74.938rem) { + visibility: visible; + display: contents; + } + } + + .br-mobile { + display: none; + + @media screen and (width <= 74.938rem) { + display: inline-block; + } + } + + // dropdown of the button in the side navigation. This button is in MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE + .heading-dropdown { + font-size: utilities.rem(0.9); + color: color-functions.color(secondary); + letter-spacing: utilities.to-rem(3); + } + + // smaller fon-size and letter spacin for phones and small tablets + @media screen and (width <= 90.62rem) { + // bold list name for MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE + .heading { + font-size: utilities.rem(0.9); + color: color-functions.on-color-deemphasis(body); + letter-spacing: utilities.to-rem(3); + } + + // dropdown of the button in the side navigation. This button is in MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE + .heading-dropdown { + font-size: utilities.rem(0.7); + color: color-functions.on-color(body); + letter-spacing: utilities.to-rem(1); + } + } + + /* **** */ + + // list items + .nav-link { + font-size: utilities.rem(0.7); + padding: utilities.rem(0) utilities.rem(0.7); + color: color-functions.on-color-deemphasis(body); + + &.expand-title { + font-size: utilities.rem(0.8); + color: color-functions.on-color(body); + } + + &.side { + padding: utilities.rem(0) utilities.rem(0); + word-break: break-word; + + &:hover { + background-color: color-functions.color(primary); + color: color-functions.on-color(primary); + } + + &.active { + color: color-functions.color(primary); + background-color: color-functions.color-alternate(body); + border-right: utilities.to-rem(3) solid color-functions.color(primary); + } + } + } +} + +/* **** */ + +.resizer { + width: 2px; + top: 0; + right: 0; + cursor: col-resize; + height: 100%; + position: absolute; + background-color: #dfdfdf; +} + +.data-sources-menu { + padding-top: 15px; +} + +.sidebar.nav { + // max-height: 60vh; + overflow-y: auto; + z-index: 0; // behind the header + min-width: min-content; + max-width: 20vw; + + // Remove overflow and sticky position for mobile view + @media screen and (width <= 74.938rem) { + position: static; + min-width: fit-content; + } + + .sidenav-wrapper { + display: flex; + flex-direction: column; + padding-right: 5px; + padding-left: 1rem; + height: 100%; + + @media screen and (width <= 74.938rem) { + display: block; + } + + .heading { + border-bottom: 1px solid color-functions.color-alternate(body); + flex: 0 1 0; + } + + .checkbox-div { + border-bottom: 1px solid color-functions.color-alternate(body); + flex: 0 1 0; + } + + .sidenav-list { + flex: 1 0 0; + overflow-y: auto; + + .sidenav { + width: 100%; + word-break: break-word; + font-size: utilities.rem(0.8); + + .sidenav-head { + display: flex; + flex-direction: row; + + a, + .expand-button { + // any direct child + cursor: pointer; + color: black; + + &:hover { + background: color-functions.color-alternate(body); + } + } + + a, + span { + padding: utilities.rem(0); + padding-left: 0; + display: inline-block; + flex-grow: 1; + height: 100%; + + &:hover { + text-decoration: none; // disable underline + } + } + + .expand-button { + padding: 5px; + border-left: 1px solid color-functions.color-alternate(body); + display: inline-block; + + @include layout.collapsible("after"); + } + + &.active { + // current page + &, + & > a { + color: color-functions.color(active) !important; + font-weight: bolder; + background: color-functions.on-color(active); + font-family: Roboto-Bold, sans-serif; + } + + // background-color: color-alternate(body); + // border-right: to-rem(3) solid color(primary); + } + } + + .sidenav-body { + padding-left: 0.75rem; + } + + .sidenav { + // nested + padding-left: utilities.to-rem(12); + } + } + } + } +} + +// Hides the navbar when the user tries to print out a page so that the page looks clean and only the relevant information is displayed + +@media print { + .nav { + visibility: hidden; + display: none; + } + + .sidenav { + visibility: hidden; + display: none; + } + + .sidebar.nav { + visibility: hidden; + display: none; + } + + .sidenav-wrapper { + visibility: hidden; + display: none; + } + + .side-nav-desktop-view { + visibility: hidden; + display: none; + } + + .navbar { + visibility: hidden; + display: none; + } +} diff --git a/attack-style/package-lock.json b/attack-style/package-lock.json new file mode 100644 index 00000000000..d6e38e2ee58 --- /dev/null +++ b/attack-style/package-lock.json @@ -0,0 +1,5205 @@ +{ + "name": "attack-style", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "attack-style", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "sass": "^1.83.0", + "sassdoc": "^2.7.4" + }, + "devDependencies": { + "stylelint": "^16.12.0", + "stylelint-config-standard": "^36.0.1", + "stylelint-config-standard-scss": "^14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/a-sync-waterfall": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", + "license": "MIT" + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "license": "MIT", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "license": "MIT", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "license": "MIT" + }, + "node_modules/cacheable-request/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cdocparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/cdocparser/-/cdocparser-0.13.0.tgz", + "integrity": "sha512-bMi4t0qjeT0xQ8ECBmWcilMYcUNYsERQoatXveMIbItgqliZDCNyv2xfkBoKrs5H08ApeRMoysJLwgPiHtv7HQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.2", + "lodash.assign": "^2.4.1", + "strip-indent": "^1.0.0" + } + }, + "node_modules/cdocparser/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "license": "MIT", + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chroma-js": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-1.4.1.tgz", + "integrity": "sha512-jTwQiT859RTFN/vIf7s+Vl/Z2LcMrvMv3WUFmd/4u76AdlFC0NTNgqEEFPcRiHmAswPsMiQEDZLM8vX8qXpZNQ==" + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "license": "MIT" + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cloneable-readable/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/cloneable-readable/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/cloneable-readable/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/configstore/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dargs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", + "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/docopt": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", + "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "license": "BSD-3-Clause" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ends-with": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ends-with/-/ends-with-0.2.0.tgz", + "integrity": "sha512-lRppY4dK3VkqBdR242sKcAJeYc8Gf/DhoX9AWvWI2RzccmLnqBQfwm2k4oSDv5MPDjUqawCauXhZkyWxkVhRsg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-denodeify": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz", + "integrity": "sha512-731Rf4NqlPvhkT1pIF7r8vZxESJlWocNpXLuyPlVnfEGXlwuJaMvU5WpyyDjpudDC2cgXVX849xljzvQqBg1QQ==", + "license": "Unlicense" + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "license": "MIT" + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==", + "license": "MIT" + }, + "node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha512-9ztMtDZtSKC78V8mev+k31qaTabbmuH5jatdvPBMikrFHvw5BqlYnQIn/WGK3WHeRooSTkRvLa2IPlaHjPq5Sg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/fs-mkdirp-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/glob-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/glob-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==", + "dependencies": { + "find-index": "^0.1.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "license": "MIT", + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "license": "ISC" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "license": "MIT", + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/ignore": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", + "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "license": "MIT", + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "license": "MIT" + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "license": "MIT", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "license": "MIT", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash._basebind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.4.1.tgz", + "integrity": "sha512-VGHm6DH+1UiuafQdE/DNMqxOcSyhRu0xO9+jPDq7xITRn5YOorGrHVQmavMVXCYmTm80YRTZZCn/jTW7MokwLg==", + "license": "MIT", + "dependencies": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash._basecreate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz", + "integrity": "sha512-8JJ3FnMPm54t3BwPLk8q8mPyQKQXm/rt9df+awr4NGtyJrtcCXM3Of1I86S6jVy1b4yAyFBb8wbKPEauuqzRmQ==", + "license": "MIT", + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash.isobject": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "node_modules/lodash._basecreatecallback": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz", + "integrity": "sha512-SLczhg860fGW7AKlYcuOFstDtJuQhaANlJ4Y/jrOoRxhmVtK41vbJDH3OefVRSRkSCQo4HI82QVkAVsoGa5gSw==", + "license": "MIT", + "dependencies": { + "lodash._setbinddata": "~2.4.1", + "lodash.bind": "~2.4.1", + "lodash.identity": "~2.4.1", + "lodash.support": "~2.4.1" + } + }, + "node_modules/lodash._basecreatewrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz", + "integrity": "sha512-x2ja1fa/qmzbizuXgVM4QAP9svtMbdxjG8Anl9bCeDAwLOVQ1vLrA0hLb/NkpbGi9evjtkl0aWLTEoOlUdBPQA==", + "license": "MIT", + "dependencies": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash._createwrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz", + "integrity": "sha512-5TCfLt1haQpsa7bgLYRKNNE4yqhO4ZxIayN1btQmazMchO6Q8JYFRMqbJ3W+uNmMm4R0Jw7KGkZX5YfDDnywuw==", + "license": "MIT", + "dependencies": { + "lodash._basebind": "~2.4.1", + "lodash._basecreatewrapper": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isfunction": "~2.4.1" + } + }, + "node_modules/lodash._isnative": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha512-BOlKGKNHhCHswGOWtmVb5zBygyxN7EmTuzVOSQI6QSoGhG+kvv71gICFS1TBpnqvT1n53txK8CDK3u5D2/GZxQ==", + "license": "MIT" + }, + "node_modules/lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==", + "license": "MIT" + }, + "node_modules/lodash._setbinddata": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz", + "integrity": "sha512-Vx0XKzpg2DFbQw4wrp1xSWd2sfl3W/BG6bucSRZmftS1AzbWRemCmBQDxyQTNhlLNec428PXkuuja+VNBZgu2A==", + "license": "MIT", + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "node_modules/lodash._shimkeys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha512-lBrglYxLD/6KAJ8IEa5Lg+YHgNAL7FyKqXg4XOUI+Du/vtniLs1ZqS+yHNKPkK54waAgkdUnDOYaWf+rv4B+AA==", + "license": "MIT", + "dependencies": { + "lodash._objecttypes": "~2.4.1" + } + }, + "node_modules/lodash._slice": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.4.1.tgz", + "integrity": "sha512-+odPJa4PE2UgYnQgJgkLs0UD03QU78R2ivhrFnG9GdtYOZdE6ObxOj7KiUEUlqOOgatFT+ZqSypFjDSduTigKg==", + "license": "MIT" + }, + "node_modules/lodash.assign": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-2.4.1.tgz", + "integrity": "sha512-AqQ4AJz5buSx9ELXWt5dONwJyVPd4NTADMKhoVYWCugjoVf172/LpvVhwmSJn4g8/Dc0S8hxTe8rt5Dob3X9KQ==", + "license": "MIT", + "dependencies": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "node_modules/lodash.bind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.4.1.tgz", + "integrity": "sha512-hn2VWYZ+N9aYncRad4jORvlGgpFrn+axnPIWRvFxjk6CWcZH5b5alI8EymYsHITI23Z9wrW/+ORq+azrVFpOfw==", + "license": "MIT", + "dependencies": { + "lodash._createwrapper": "~2.4.1", + "lodash._slice": "~2.4.1" + } + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.identity": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.4.1.tgz", + "integrity": "sha512-VRYX+8XipeLjorag5bz3YBBRJ+5kj8hVBzfnaHgXPZAVTYowBdY5l0M5ZnOmlAMCOXBFabQtm7f5VqjMKEji0w==", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz", + "integrity": "sha512-6XcAB3izeQxPOQQNAJbbdjXbvWEt2Pn9ezPrjr4CwoLwmqsLVbsiEXD19cmmt4mbzOCOCdHzOQiUivUOJLra7w==", + "license": "MIT" + }, + "node_modules/lodash.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", + "license": "MIT", + "dependencies": { + "lodash._objecttypes": "~2.4.1" + } + }, + "node_modules/lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha512-ZpJhwvUXHSNL5wYd1RM6CUa2ZuqorG9ngoJ9Ix5Cce+uX7I5O/E06FCJdhSZ33b5dVyeQDnIlWH7B2s5uByZ7g==", + "license": "MIT", + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash.noop": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.4.1.tgz", + "integrity": "sha512-uNcV98/blRhInPUGQEnj9ekXXfG+q+rfoNSFZgl/eBfog9yBDW9gfUv2AHX/rAF7zZRlzWhbslGhbGQFZlCkZA==", + "license": "MIT" + }, + "node_modules/lodash.support": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.4.1.tgz", + "integrity": "sha512-6SwqWwGFHhTXEiqB/yQgu8FYd//tm786d49y7kizHVCJH7zdzs191UQn3ES3tkkDbUddNRfkCRYqJFHtbLnbCw==", + "license": "MIT", + "dependencies": { + "lodash._isnative": "~2.4.1" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/marked": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.3.tgz", + "integrity": "sha512-Fqa7eq+UaxfMriqzYLayfqAE40WN03jf+zHjT18/uXNuzjq3TY0XTbrAoPeqSJrAmPz11VuUA+kBPYOhHt9oOQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/memoize-decorator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/memoize-decorator/-/memoize-decorator-1.0.2.tgz", + "integrity": "sha512-G2vHcq4c+EwnBAOeWCH1mNz99QPCgm4ECjhHOd3SFZm66jVlwhBLdqhCvnHxptaRyZfm8ap3igoeDfrO92+uHQ==", + "license": "MIT" + }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/multipipe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", + "integrity": "sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==", + "license": "MIT", + "dependencies": { + "duplexer2": "^0.1.2", + "object-assign": "^4.1.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "license": "MIT", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/ordered-read-streams/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/ordered-read-streams/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/ordered-read-streams/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "license": "MIT", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "license": "MIT" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "license": "MIT", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "license": "MIT", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "license": "MIT", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-bom-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/remove-bom-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/remove-bom-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/remove-bom-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "license": "ISC" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "license": "MIT", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-wipe": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/safe-wipe/-/safe-wipe-0.2.5.tgz", + "integrity": "sha512-MwTNf4YrRqCHsB5jUzOVdXoRbW4jkhgTvhlyfiaxox8EP7cOCiD4ydMOQCxDPR9KpvwdBSM2dQHScV1m85k8wQ==", + "license": "Unlicense", + "dependencies": { + "extend": "^3.0.2", + "q": "1.*", + "rimraf": "2.*" + } + }, + "node_modules/safe-wipe/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/sass": { + "version": "1.83.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.0.tgz", + "integrity": "sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-convert": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/sass-convert/-/sass-convert-0.5.2.tgz", + "integrity": "sha512-eV9wXZg7MrHmnKLD6WojC/WX7lhLm+PSSLrOukzRIECa04fGbkmFDO9Ot9/82KjzSe+VEClYe9WDKzCuBz30Dg==", + "license": "Unlicense", + "dependencies": { + "concat-stream": "^1.4.7", + "dargs": "^4.0.0", + "ends-with": "^0.2.0", + "es6-denodeify": "^0.1.0", + "es6-promise": "^3.0.2", + "memoize-decorator": "^1.0.2", + "object-assign": "^3.0.0", + "semver": "^5.0.1", + "semver-regex": "^1.0.0", + "through2": "^2.0.0", + "which": "^1.0.5" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">=2.1.0" + } + }, + "node_modules/sass-convert/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/sass-convert/node_modules/object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass-convert/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/sass-convert/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/sass-convert/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/sass-convert/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/sassdoc": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/sassdoc/-/sassdoc-2.7.4.tgz", + "integrity": "sha512-/HEjX9pMILkePyC4ZKGhkLqZHJZpsTxFwQIQNsLhV4XHiPKoWHrSmam1pMntM79tcdtBII3JX7ShfyZjHnrkyw==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.2.1", + "babel-runtime": "^6.26.0", + "chalk": "^2.4.2", + "concat-stream": "^2.0.0", + "docopt": "^0.6.1", + "glob": "^7.1.6", + "glob2base": "0.0.12", + "js-yaml": "^3.14.0", + "lodash.difference": "^4.5.0", + "lodash.uniq": "^4.5.0", + "minimatch": "^3.0.4", + "mkdirp": "^1.0.4", + "multipipe": "1.0.2", + "rimraf": "^3.0.2", + "safe-wipe": "0.2.5", + "sass-convert": "^0.5.0", + "sassdoc-theme-default": "^2.8.3", + "scss-comment-parser": "^0.8.4", + "strip-indent": "^3.0.0", + "through2": "1.1.1", + "update-notifier": "^4.1.0", + "vinyl-fs": "^3.0.3", + "vinyl-source-stream": "1.1.2", + "vinyl-string": "^1.0.2" + }, + "bin": { + "sassdoc": "bin/sassdoc" + } + }, + "node_modules/sassdoc-extras": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/sassdoc-extras/-/sassdoc-extras-2.5.1.tgz", + "integrity": "sha512-/+ilEnk1H1hG9nympL1GIFWhAczzoclyDzgzfphIg46nsT/dWJuzWYHyzIpduc/nTVwKeQfmTz0ZVvy12QMkrQ==", + "license": "MIT", + "dependencies": { + "marked": "^0.6.2" + } + }, + "node_modules/sassdoc-theme-default": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/sassdoc-theme-default/-/sassdoc-theme-default-2.8.6.tgz", + "integrity": "sha512-s12y6pThpPDm33UScHfnfa/RBs9+gkCxl/YNWDTyLl3a6IxzusEdut1uwv4fpmpaOsTpcjGxZw839Moi4d/3Eg==", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "chroma-js": "^1.2.2", + "es6-denodeify": "^0.1.0", + "es6-promise": "^4.2.6", + "extend": "^3.0.2", + "fs-extra": "^2.0.0", + "html-minifier": "^3.5.21", + "nunjucks": "^3.1.7", + "sassdoc-extras": "^2.5.0" + } + }, + "node_modules/sassdoc-theme-default/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sassdoc-theme-default/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sassdoc-theme-default/node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/sassdoc-theme-default/node_modules/nunjucks": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/sassdoc-theme-default/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/sassdoc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sassdoc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/scss-comment-parser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/scss-comment-parser/-/scss-comment-parser-0.8.4.tgz", + "integrity": "sha512-ERw4BODvM22n8Ke8hJxuH3fKXLm0Q4chfUNHwDSOAExCths2ZXq8PT32vms4R9Om6dffRSXzzGZS1p38UU4EAg==", + "license": "MIT", + "dependencies": { + "cdocparser": "^0.13.0" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "license": "MIT", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha512-1vZcoRC+LPtHFkLUPyrabsATDSHerxW+hJBN8h04HZOZBuewbXaNROtUVdEPrTdZsWNq6sfsXDhd48GB2xTG4g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz", + "integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.0.1", + "debug": "^4.3.7", + "fast-glob": "^3.3.2", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^9.1.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^6.0.2", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.1.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.1.0" + } + }, + "node_modules/stylelint-config-recommended-scss": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.6.1" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-config-standard": { + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", + "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "dependencies": { + "stylelint-config-recommended": "^14.0.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.1.0" + } + }, + "node_modules/stylelint-config-standard-scss": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz", + "integrity": "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "stylelint-config-recommended-scss": "^14.1.0", + "stylelint-config-standard": "^36.0.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.11.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-scss": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.10.0.tgz", + "integrity": "sha512-y03if6Qw9xBMoVaf7tzp5BbnYhYvudIKzURkhSHzcHG0bW0fAYvQpTUVJOe7DyhHaxeThBil4ObEMvGbV7+M+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mdn-data": "^2.12.2", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", + "integrity": "sha512-zEbpaeSMHxczpTzO1KkMHjBC1enTA68ojeaZGG4toqdASpb9t4xUZaYFBq2/9OHo5nTGFVSYd4c910OR+6wxbQ==", + "license": "MIT", + "dependencies": { + "readable-stream": ">=1.1.13-1 <1.2.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2-filter/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2-filter/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/through2-filter/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/through2-filter/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "license": "MIT", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/to-through/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/to-through/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/to-through/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "license": "BSD-2-Clause", + "dependencies": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "license": "MIT" + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "license": "MIT", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "license": "MIT" + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "license": "MIT", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "license": "MIT", + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/vinyl-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/vinyl-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/vinyl-source-stream": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz", + "integrity": "sha512-X+1Jq+M6ufv/ky480hndPBsNb0ieqTQkvpakxMTxb7oUlyuNaJKL2HddYUrbTec0Lb0J53JlDiCetcgJ3b3Wmg==", + "license": "MIT", + "dependencies": { + "through2": "^2.0.3", + "vinyl": "^0.4.3" + } + }, + "node_modules/vinyl-source-stream/node_modules/clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha512-g62n3Kb9cszeZvmvBUqP/dsEJD/+80pDA8u8KqHnAPrVnQ2Je9rVV6opxkhuWCd1kCn2gOibzDKxCtBvD3q5kA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/vinyl-source-stream/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "license": "MIT" + }, + "node_modules/vinyl-source-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/vinyl-source-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/vinyl-source-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/vinyl-source-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/vinyl-source-stream/node_modules/vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha512-pmza4M5VA15HOImIQYWhoXGlGNafCm0QK5BpBUXkzzEwrRxKqBsbAhTfkT2zMcJhUX1G1Gkid0xaV8WjOl7DsA==", + "dependencies": { + "clone": "^0.2.0", + "clone-stats": "^0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "license": "MIT", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vinyl-string/-/vinyl-string-1.0.2.tgz", + "integrity": "sha512-mDkPUvCM7K9r0WYZKIWc/dfPH8wkJBbe/3wZUU9EJyw3g6VSACg6FLlcZ/QbP1lTSdtBsVjQoYG1a9K0cfoKeQ==", + "license": "MIT", + "dependencies": { + "vinyl": "^1.1.1" + } + }, + "node_modules/vinyl-string/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/vinyl-string/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "license": "MIT" + }, + "node_modules/vinyl-string/node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/vinyl-string/node_modules/vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + } + } +} diff --git a/attack-style/package.json b/attack-style/package.json new file mode 100644 index 00000000000..0dcfc246e2b --- /dev/null +++ b/attack-style/package.json @@ -0,0 +1,27 @@ +{ + "name": "attack-style", + "version": "1.0.0", + "description": "ATT&CK website CSS styles", + "license": "Apache-2.0", + "author": "MITRE ATT&CK", + "type": "commonjs", + "main": "index.js", + "scripts": { + "clean": "rm -rf dist/", + "build": "sass style-attack.scss dist/style-attack.css && sass style-user.scss dist/style-user.css", + "copy": "cp dist/style-attack.css dist/style-user.css ../attack-theme/static/", + "build-copy": "npm run clean && npm run build && npm run copy", + "watch": "sass --watch style-attack.scss dist/style-attack.css && sass --watch style-user.scss dist/style-user.css", + "doc": "sassdoc --verbose --dest docs/ style.scss", + "lint": "stylelint **/*.scss" + }, + "devDependencies": { + "stylelint": "^16.12.0", + "stylelint-config-standard": "^36.0.1", + "stylelint-config-standard-scss": "^14.0.0" + }, + "dependencies": { + "sass": "^1.83.0", + "sassdoc": "^2.7.4" + } +} diff --git a/attack-style/style-attack.scss b/attack-style/style-attack.scss new file mode 100644 index 00000000000..dc269b3418b --- /dev/null +++ b/attack-style/style-attack.scss @@ -0,0 +1,5 @@ +// Set the theme to use ATT&CK colors +@use 'config' with ($use-attack-theme: true); + +// Import the main styles +@use 'style'; \ No newline at end of file diff --git a/attack-style/style-user.scss b/attack-style/style-user.scss new file mode 100644 index 00000000000..9c71194f6f2 --- /dev/null +++ b/attack-style/style-user.scss @@ -0,0 +1,5 @@ +// Set the theme to use user gray colors +@use 'config' with ($use-attack-theme: false); + +// Import the main styles +@use 'style'; diff --git a/attack-style/style.scss b/attack-style/style.scss new file mode 100644 index 00000000000..c8c19234ddd --- /dev/null +++ b/attack-style/style.scss @@ -0,0 +1,24 @@ +// Import Sass utilities and helpers +// Note: The order of imports in this section is important due to dependencies. +// - abstracts/variables must be imported first as it defines variables used by other files. +// - abstracts/color-functions relies on variables and provides functions used by many other files. + +@use "abstracts/variables"; // Define global variables +@use "abstracts/color-functions"; // Functions that use variables and are used by other files +@use "abstracts/utilities"; // General utility functions and mixins +@use "abstracts/font-faces"; // Font-face declarations + +// Import base styles +@use "base/base"; // Base styles for HTML elements +@use "base/typography"; // Typography settings + +// Import layout styles +@use "layout/layout"; // General layout styles +@use "layout/footer"; // Footer-specific styles +@use "layout/nav"; // Navigation-specific styles + +// Import component styles +@use "components/search"; // Search component styles +@use "components/tour"; // Tour component styles +@use "components/matrix"; // Matrix component styles +@use "components/versioning"; // Versioning component styles \ No newline at end of file diff --git a/attack-style/themes/_colors.scss b/attack-style/themes/_colors.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/attack-theme/static/style-attack.css b/attack-theme/static/style-attack.css new file mode 100644 index 00000000000..782c1193185 --- /dev/null +++ b/attack-theme/static/style-attack.css @@ -0,0 +1,2276 @@ +/* COLORS */ +/* FONTS */ +@font-face { + font-family: "Roboto-Thin"; + font-style: normal; + font-weight: 100; + src: url("fonts/Roboto/Roboto-Thin.ttf"); +} +@font-face { + font-family: "Roboto-Light"; + font-style: normal; + font-weight: 300; + src: url("fonts/Roboto/Roboto-Light.ttf"); +} +@font-face { + font-family: "Roboto-Regular"; + font-style: normal; + font-weight: 400; + src: url("fonts/Roboto/Roboto-Regular.ttf"); +} +@font-face { + font-family: "Roboto-Medium"; + font-style: normal; + font-weight: 500; + src: url("fonts/Roboto/Roboto-Medium.ttf"); +} +@font-face { + font-family: "Roboto-Bold"; + font-style: normal; + font-weight: 700; + src: url("fonts/Roboto/Roboto-Bold.ttf"); +} +@font-face { + font-family: "Roboto-Black"; + font-style: normal; + font-weight: 900; + src: url("fonts/Roboto/Roboto-Black.ttf"); +} +.deemphasis { + color: rgb(106.5, 114, 120.75); +} + +.matrix-header { + background-color: gray; + color: white; +} + +.table-alternate, +.blog-post table, +.changelog table, .bg-alternate { + background-color: rgb(242.25, 242.25, 242.25) !important; +} + +.text-label { + text-transform: uppercase; + font-size: 14px; +} + +.text-label-small { + font-size: 12px; + color: #303435; + margin-top: -10px; +} + +/* General styling */ +html { + height: 100%; +} + +body { + height: 100%; + background: white; + color: #39434c; + font-family: "Roboto-Regular", sans-serif; + display: flex; + flex-direction: column; +} + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + body { + height: auto; + } +} +.attack-website-wrapper { + max-height: 100vh; + overflow-y: auto; +} + +h1, +h2, +h3, +h4, +h5 { + font-family: "Roboto-Light", sans-serif; +} + +strong { + font-family: "Roboto-Bold", sans-serif; +} + +.jumbotron { + padding: 0; + background: white; + color: #39434c; +} +.jumbotron code { + color: rgb(28.5, 33.5, 38); + background-color: rgb(229.5, 229.5, 229.5); + border-radius: 3px; + font-family: courier, monospace; + padding: 0 3px; +} + +a { + color: #4f7cac; +} +a .anchor::before { + content: ""; + display: block; + margin-top: -5rem; + position: absolute; +} + +.marker-none { + list-style-type: none; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.fs-s { + font-size: small; +} + +.capec-card { + background: rgb(128, 0, 0); +} +.capec-card img { + margin: 0.5rem; + max-width: 10rem; + max-height: 3.4375rem; + margin-left: auto; + margin-right: auto; + display: block; +} + +.maec-card { + background: #212121; +} +.maec-card img { + margin: 0.5rem; + max-width: 9.125rem; + margin-left: auto; + margin-right: auto; + display: block; +} + +.default-img-size { + width: 100%; + max-width: 62.5rem; +} + +.mitre-logo-wtrans { + width: 9rem; + height: 4.125rem; +} + +.quick-links { + width: 100%; + text-align: center; + table-layout: fixed; +} +.quick-links td { + padding: 0.3125rem 0; +} +.quick-links tr + tr { + border-top: 1px solid rgb(223.125, 223.125, 223.125); +} + +.row-main-page { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +@media screen and (width <= 47.9875rem) { + .row-main-page { + display: inline; + } +} +.p-line p { + border-top: 0.0625rem solid #1c2226; +} + +.btn-default { + background: white; + border-color: rgb(106.5, 114, 120.75); + color: #39434c; +} +.btn-default:hover { + color: rgb(28.5, 33.5, 38); +} + +.website-button, .slide-button-secondary, .slide-button { + font-size: 16px; + border-radius: 5px; + cursor: pointer; + position: relative; + overflow: hidden; + font-family: Arial; + display: inline-flex; + align-items: center; + border-style: solid; +} + +.slide-icon-button { + border-style: none; + background: none; +} + +.slide-button { + border-color: #0156b3; + color: #fff; + background: #0156b3; + padding: 6px 16px; +} +a .slide-button { + text-decoration: none !important; +} + +.slide-button-secondary { + color: #0156b3; + background: #fff; + border-color: #0156b3; + padding: 6px 16px; +} +a .slide-button-secondary { + text-decoration: none !important; +} + +.slide-button-text { + position: relative; +} + +.slide-button-icon { + position: relative; + padding-left: 8px; +} + +.slide-button:hover { + background: #062f4f; + border-color: #062f4f; +} + +.slide-button-secondary:hover { + background: #eaeaea; + border-color: #062f4f; + color: #062f4f; +} + +.dropdown { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + background-color: white; + min-width: 160px; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +} + +.dropdown:hover .dropdown-content { + display: block; +} + +.btn-navy:hover, .btn-navy { + color: white; + border-color: 0.0625rem solid #062f4f; +} + +.btn-navy { + background-color: #062f4f; + color: white; +} +.btn-navy:hover { + background-color: rgb(7.5, 58.75, 98.75); + background-image: none; +} + +.markdown-body h1:not(:first-child) { + padding-top: 2rem; +} +.markdown-body h1 { + padding-bottom: 0.8rem; + font-size: 1.8rem; +} +.markdown-body h2 { + font-size: 1.3rem; +} +.markdown-body h3 { + font-size: 1.1rem; +} + +/* **** */ +/* Table styling */ +.table, +.blog-post table, +.changelog table { + empty-cells: hide; +} +.table td, +.blog-post table td, +.changelog table td { + padding: 0.75rem; + vertical-align: top; +} +.table td p:last-child, +.blog-post table td p:last-child, +.changelog table td p:last-child { + margin-bottom: 0; +} +.table th, +.blog-post table th, +.changelog table th { + padding: 0.6rem; + vertical-align: top; + font-size: 0.9rem; +} +.table .active, +.blog-post table .active, +.changelog table .active { + color: #c63f1f; +} + +.blog-post table { + margin-bottom: 1.5rem; +} + +.table-alternate tbody, +.blog-post table tbody, +.changelog table tbody { + background: white; + color: #39434c; +} + +.table-techniques thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; +} +.table-techniques table { + border-collapse: collapse; +} +.table-techniques td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; +} +.table-techniques tr:last-child { + border-bottom: 1px solid #dfdfdf; +} +.table-techniques .sub.technique { + border-left: none; +} +.table-techniques .technique td:first-child { + border-bottom: none; +} +.table-techniques .sub.technique td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; +} +.table-techniques .sub.technique td:not(:nth-child(4)) { + color: #4f7cac; +} +.table-techniques .technique:not(.sub) td:not(:nth-child(3)) { + color: #4f7cac; +} + +.techniques-used table { + border-collapse: collapse; +} +.techniques-used td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; +} +.techniques-used tr:last-child { + border-bottom: 1px solid #dfdfdf; +} +.techniques-used .sub.technique { + border-left: none; +} +.techniques-used .technique td:first-child { + border-bottom: none; +} +.techniques-used .technique td:nth-child(2) { + border-bottom: none; +} +.techniques-used .sub.technique:not(.noparent) td:nth-child(2) { + width: 5ex; + border-top: none; + border-bottom: none; +} +.techniques-used .sub.technique:not(.noparent) td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; +} + +.techniques-used.background thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; +} + +.datasources-table table { + border-collapse: collapse; +} +.datasources-table thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; +} +.datasources-table td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; +} +.datasources-table tr:last-child { + border-bottom: 1px solid #dfdfdf; +} +.datasources-table .datacomponent.datasource { + border-left: none; +} +.datasources-table .datasource td:first-child { + border-bottom: none; +} +.datasources-table .datasource td:nth-child(2) { + border-bottom: none; +} +.datasources-table .datacomponent.datasource:not(.noparent) td:nth-child(2) { + width: 5ex; + border-top: none; + border-bottom: none; +} +.datasources-table .datacomponent.datasource:not(.noparent) td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; +} +.datasources-table .nowrap { + white-space: nowrap; +} + +.tables-mobile { + overflow-y: auto; +} + +.table-bordered, .table-bordered td, .table-bordered th, +.blog-post table, +.blog-post table td, +.blog-post table th, +.changelog table, +.changelog table td, +.changelog table th { + border: 1px solid rgb(223.125, 223.125, 223.125); +} +.table-bordered th, +.blog-post table th, +.changelog table th { + border-bottom: 2px solid rgb(223.125, 223.125, 223.125) !important; +} + +.table-matrix { + border: none !important; +} +.table-matrix thead th { + text-align: center !important; + vertical-align: middle !important; + border: 0.0625rem solid rgb(223.125, 223.125, 223.125) !important; +} +.table-matrix td, +.table-matrix th { + text-align: center !important; + vertical-align: middle !important; + border-top: none !important; + padding: 0.125rem !important; + font-size: 0.75rem !important; +} +.table-matrix td.border, +.table-matrix th.border { + border: 0.0625rem solid rgb(223.125, 223.125, 223.125) !important; +} +.table-matrix td.no-border, +.table-matrix th.no-border { + border: none !important; +} +.table-matrix td { + background: white; + color: #39434c; +} + +.table-mitigations th, +.table-mitigations td, .table-mitigations { + white-space: nowrap; + width: 1%; +} + +.div-count { + margin-top: auto; + margin-bottom: 0; +} + +.table-object-count { + display: flex; + justify-content: flex-end; +} + +.matrix-tactics-url { + color: white; +} +.matrix-tactics-url:visited, .matrix-tactics-url:hover, .matrix-tactics-url:active { + color: white; +} + +/* **** */ +/* BANNER */ +.banner-message, .version-banner { + padding: 0.3125rem 0; + text-align: center; + background-color: rgb(229.5, 229.5, 229.5); +} + +/* **** */ +/* IMG/SVG ICON in BANNER */ +.icon-inline { + display: inline-flex; + align-self: center; +} +.icon-inline svg, +.icon-inline img { + height: 1rem; + width: 1rem; + fill: currentcolor; + top: 0.125rem; + position: relative; +} + +/* **** */ +/* Pre-block in SIGHTINGS */ +pre { + color: #39434c; + background-color: rgb(216.75, 216.75, 216.75); + border-radius: 5px; + padding: 1rem; +} + +code { + color: #c63e1f; +} + +/* **** */ +/* CARDS */ +.card { + background: white; + color: #39434c; + border-color: rgb(223.125, 223.125, 223.125); +} + +.button-group { + display: flex; + justify-content: end; +} +.button-group a.button + a.button { + margin-left: 22px; +} +.button-group button { + justify-content: center; + width: 100%; +} +.button-group a.w-40 { + width: 40%; +} + +.card-filter { + width: 20%; + top: 9.3rem; + float: right; + background: #eaeaea; +} + +@media screen and (width <= 90.62rem) { + .card-filter { + display: contents; + } +} +.card-presentation { + margin-bottom: 30px; +} + +.card-attackcon { + width: 100%; +} + +.card-data { + margin-bottom: 0.5rem; +} + +.card-header { + color: #39434c; + background: rgba(57, 67, 76, 0.03); + border-bottom-color: rgb(223.125, 223.125, 223.125); +} + +a.partial-underline { + text-decoration: none; +} +a.partial-underline .hover-line { + text-decoration: underline; +} + +.contact-card { + border-radius: 0.75em; + overflow: hidden; +} +.contact-card .card-footer { + padding: 0 1.25rem 1.25rem; +} +.contact-card .card-footer.button-group { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 12px; +} +.contact-card .card-footer-no-button { + padding: 0.5rem 1.25rem; + min-height: 4rem; + max-height: fit-content; +} +.contact-card .card-header { + padding: 1.25rem 1.25rem 0; +} +.contact-card .card-header.background { + background: #0b2338; + color: white; + padding-bottom: 1.25rem; +} +.contact-card .card-header.no-background, +.contact-card .card-footer.no-background { + background: white; + color: #39434c; + border: unset; +} +.contact-card .card-body p { + margin: 0; +} +.contact-card .card-body.background { + background: #eaeaea; +} + +.card-body > .table { + border-right: 0; + border-left: 0; + margin-bottom: 0; +} +.card-body > .table:last-child { + border-bottom: 0; +} +.card-body > .table:not(.table-sm) th, .card-body > .table:not(.table-sm) td { + padding: 0.75rem 1.25rem; +} +.card-body > .table td:first-child, +.card-body > .table th:first-child { + border-left: 0; +} +.card-body > .table td:last-child, +.card-body > .table th:last-child { + border-right: 0; +} +.card-body > .table tr:first-child td, +.card-body > .table tr:first-child th { + border-top: 0; +} +.card-body > .table tr:last-child td { + border-bottom: 0; +} +.card-body .card-header + .table { + border-top: 0; +} + +.card-data:last-of-type { + margin-bottom: 0; +} + +.card-title { + font-size: 1.1rem; + color: rgb(28.5, 33.5, 38); +} + +.contact-card-title { + font-size: 1.1rem; + font-weight: bold; +} + +.card-title-icon { + float: right; + color: #0156b3; +} + +/* **** */ +/* TWITTER */ +.attack-box { + width: 22rem; + max-width: 100%; + height: 27rem; + margin: 0 auto; + border: 3px solid #dfdfdf; + padding: 3px; + display: flex; + flex-direction: column; +} +.attack-box iframe { + border: 1px solid rgb(223.125, 223.125, 223.125) !important; + border-radius: 0.25rem; +} + +/* **** */ +/* BREADCRUMBS */ +.breadcrumb { + font-size: 90%; + background-color: white; + max-width: 1140px; + padding: 0 15px; +} +.breadcrumb .breadcrumb-item + .breadcrumb-item::before { + content: ">"; + color: rgb(106.5, 114, 120.75); +} + +/* **** */ +.nestedlist { + counter-reset: item; +} + +.nestedlist-item { + display: block; +} + +.nestedlist-item::before { + content: counters(item, ".") ". "; + counter-increment: item; +} + +.danger-card { + border-color: #c63f1f; +} +.danger-card .card-header { + background: #c63f1f; + color: white; +} + +/* **** */ +/* ATT&CKCON */ +.bg-accord-light { + color: #39434c; + background-color: rgb(242.25, 242.25, 242.25); +} + +.bg-accord-dark { + color: #39434c; + background-color: rgb(216.75, 216.75, 216.75); +} + +/* **** */ +/* CONTRIBUTE */ +.contribution-headers { + font-family: "Roboto-Regular", sans-serif; +} + +.usa-card-group { + display: flex; + flex-direction: row; +} + +.usa-card__header { + font-family: "Roboto-Regular", sans-serif; + color: white; + background: #062f4f; + border-bottom-color: rgb(223.125, 223.125, 223.125); + border-radius: 0.3rem 0.3rem 0 0; +} + +/* CONTRIBUTE Examples */ +.new-examples { + padding: 0.625rem 0.625rem 0 0.625rem; + width: 100%; +} +.new-examples.second-example { + margin-top: 0.625rem; + margin-bottom: 1.25rem; +} +.new-examples .example-container { + padding: 0.9375rem; +} +.new-examples .example-container .examples-div { + display: flex; +} +.new-examples .example-container .examples-div .margin-contribute-a { + margin-left: 1.5625rem; +} +.new-examples .example-container .examples-div .margin-contribute-b { + margin-left: 11.4375rem; +} +.new-examples .example-container .examples-p { + margin-left: 0.3125rem; + margin-bottom: 0.625rem; + word-break: break-word; +} +.new-examples .example-container .nested-examples-div { + padding-left: 3.125rem; +} +.new-examples .example-container .example-fields { + font-family: "Roboto-Bold", sans-serif; +} +.new-examples .example-container .example-fields + ul { + padding-left: 6.25rem; +} + +/* **** */ +/* CONTRIBUTORS */ +.scrollable-box { + width: 100%; + height: 500px; + overflow: auto; + padding: 0.9375rem; + background-color: rgb(242.25, 242.25, 242.25); + border-radius: 0.1875rem; +} + +/* **** */ +img.yt-core-image { + width: 100%; +} + +.iframe-width { + width: 500px; + height: 275px; +} + +@media screen and (width <= 47.9875rem) { + .iframe-width { + width: 100%; + height: 140px; + } +} +/* No transition */ +.notransition::after { + transition: none !important; +} + +/* FAQ */ +.faq .faq-section { + padding-bottom: 2rem; +} +.faq .faq-question { + padding: 6px 0; +} +.faq .relevant-links { + margin-bottom: 1rem; + border-radius: 3px; +} +.faq .relevant-links .faq-link ~ .faq-link::before { + content: ", "; +} + +/* **** */ +.attackcon-columns { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: flex-start; +} + +@media screen and (width <= 47.9875rem) { + .attackcon-columns { + flex-direction: column; + } +} +/* Ensure the sponsors block is below and not affected by the top image */ +/* Card Blocks */ +.card-block .card-header { + display: flex; + flex-direction: row; +} +.card-block .card-header h5 { + font-family: "Roboto-Regular", sans-serif; +} +.card-block .card-header :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; +} +.card-block .card-header:after, .card-block .card-header::after { + content: ""; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%2339434C' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; +} +.card-block .card-header:not(.collapsed):after, .card-block .card-header:not(.collapsed)::after { + transform: rotate(-180deg); +} +.card-block .card-title { + display: inline-block; + flex-grow: 1; + font-family: "Roboto-Regular", sans-serif; +} + +/* **** */ +/* GENERAL INFORMATION */ +.general-info .card-img-top { + width: 100%; + height: 15vw; + object-fit: cover; +} +.general-info .graphics .card-header { + flex-grow: 1; +} +.general-info .showmore-btn { + display: block !important; + text-align: center; +} +.general-info .showmore-btn.show { + display: none !important; +} + +/* **** */ +/* GETTING STARTED */ +.getting-started ul:not(.col) { + padding: 0 0.9375rem; + margin-left: 0.9375rem; +} +.getting-started .getting-started-content { + width: 75%; +} +@media screen and (width <= 90.62rem) { + .getting-started .getting-started-content { + width: 100%; + } +} +.getting-started .getting-started-icon { + color: #c63f1f; +} +.getting-started .video-li { + /* don't display the video in the list itself except in mobile layout */ + display: none; +} +@media screen and (width <= 47.9875rem) { + .getting-started .row ul.col { + margin-left: 1.875rem; + } + .getting-started .video-col { + display: none; + } + .getting-started .video-li { + display: list-item; + } +} + +.jump-to-section { + position: -webkit-sticky; + position: sticky; + top: 14rem; + word-wrap: normal; + border-radius: 0.75em; +} + +/* **** */ +/* Timeline in GENERAL INFORMATION */ +.timeline { + overflow-y: hidden; + position: relative; + list-style-type: none; + padding-left: 0; +} +.timeline::before { + background: rgb(106.5, 114, 120.75); + position: absolute; + width: 0.0625rem; + height: 100%; + z-index: 2; + content: ""; + left: 20px; +} +.timeline.collapse { + display: block !important; +} +.timeline:not(.show) { + height: 300px; +} +.timeline:not(.show)::after { + background: linear-gradient(to bottom, transparent, white); + position: absolute; + width: 100%; + height: 75px; + z-index: 4; + content: ""; + bottom: 0; + pointer-events: none; +} +.timeline .timeline-card { + margin: 20px 0; + padding-left: 40px; +} +.timeline .timeline-card::before { + background: white; + position: absolute; + width: 20px; + height: 20px; + z-index: 3; + content: ""; + display: inline-block; + border-radius: 50%; + border: 0.125rem solid rgb(106.5, 114, 120.75); + left: 10px; +} +.timeline .timeline-card .timeline-card-header { + width: 100%; + display: flex; + flex-direction: row; + clear: both; +} +.timeline .timeline-card .timeline-card-header .title { + display: inline-block; + flex-grow: 1; + font-size: 1.25rem; +} +.timeline .timeline-card .timeline-card-header .date { + display: inline-block; + font-size: 1.25rem; + text-align: right; + white-space: nowrap; + padding-left: 0.625rem; +} +.timeline .timeline-card .timeline-card-body { + padding-top: 0.3125rem; +} + +/* **** */ +/* Description formatting in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE */ +.description-body { + line-height: 1.8rem; +} + +.description-body.in-table { + padding: 0.75rem 1.25rem; +} +.description-body.in-table p { + margin-bottom: 0; +} + +.description-body.card-description { + padding: 0.3rem 0 0 0; +} +.description-body.card-description p { + margin-bottom: 0; +} + +/* **** */ +/* External link icon */ +.external-icon { + width: 0.9375rem; + margin-top: -0.3125rem; +} + +/* **** */ +/* ATTA&K Logo */ +.attack-logo-bold { + width: 60%; +} + +.attack-logo { + margin: 8px 0; + display: block; + height: 24px; +} + +/* **** */ +/* anchor tag to bypass navbar */ +.anchor { + display: block; + position: relative; + top: -4.125rem; + visibility: hidden; +} + +.section-view .anchor-section { + position: -webkit-sticky; + position: sticky; + top: 4.125rem; + background: white; + z-index: 100; + margin-bottom: 0; +} +.section-view p { + margin-bottom: 0; + padding-bottom: 0.5rem; +} +.section-view .section-mobile-view { + display: none; +} +.section-view .section-desktop-view { + display: block; +} +@media screen and (width <= 74.938rem) { + .section-view .section-mobile-view { + display: block; + } + .section-view .section-desktop-view { + display: none; + } +} +.section-view .section-shadow { + border-bottom: 1px solid #dfdfdf !important; +} +.section-view table { + margin-top: -1px; +} + +/* **** */ +div#sidebars { + display: contents; +} + +/* Plus/Minus expand icons */ +.expand-icon { + font-size: 5%; + color: #39434c; + margin-top: 0.4375rem; +} + +/* **** */ +/* attackcon page */ +.attackcons { + border-top-width: 0; +} +.attackcons .sponsors { + flex: 1; + padding-left: 25px; +} +.attackcons .p-description { + width: 90%; +} +.attackcons .sponsors-block { + background: #eaeaea; + text-align: center; + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + flex-direction: column; + width: 200%; +} +.attackcons .sponsors-block .img-container { + margin: 10px; + flex: 1 1 20%; + box-sizing: border-box; +} +.attackcons .sponsors-block .img-container img { + width: 100%; + margin: auto; + height: auto; +} +@media screen and (width <= 47.9875rem) { + .attackcons .sponsors-block { + width: 100%; + flex-direction: row; + } +} + +.support-box { + background-color: rgb(229.5, 229.5, 229.5); + padding: 1.5em; + border-radius: 0.75em; + width: fit-content; +} + +.sponsor-list { + gap: 1.5em; +} + +.sponsor-square { + padding: 0 !important; + height: 150px; + display: flex; +} +.sponsor-square a { + display: contents; +} +.sponsor-square img.sponsor-logo { + background-color: white; + border-radius: 6px; + object-fit: contain; + object-position: center; +} + +/* **** */ +/* training pages */ +.training .exercise { + background: rgb(242.25, 242.25, 242.25); +} + +.card-training { + margin-bottom: 30px; + width: 100%; +} + +.training-card-body { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: left; +} + +.training-text-container { + flex: 1; + margin-right: 20px; +} + +.training-header { + display: flex; + justify-content: space-between; +} + +.resources-container { + display: flex; + flex-wrap: wrap; + flex-direction: row; + gap: 10px; +} + +.resource { + flex: 1; + background-color: #eaeaea; + padding: 10px; + box-sizing: border-box; +} + +.resource-links { + list-style-type: none; + margin-top: 5px; + padding: 0 !important; + margin-left: 0 !important; +} + +.resource-links li { + margin-bottom: 5px; +} + +.resource-links a { + text-decoration: underline; +} + +/* **** */ +.decorative-panels .decorative-panel .decorative-panel-header, +.decorative-panels .decorative-panel .decorative-panel-body { + padding: 10px; +} +.decorative-panels .decorative-panel .decorative-panel-header h3, +.decorative-panels .decorative-panel .decorative-panel-header h4, +.decorative-panels .decorative-panel .decorative-panel-header .btn { + margin-bottom: 16px; +} +.decorative-panels .decorative-panel .decorative-panel-body.show { + border-top: 1px solid rgb(223.125, 223.125, 223.125); +} +.decorative-panels .decorative-panel + .decorative-panel { + margin-top: 25px; +} +.decorative-panels .decorative-panel:nth-of-type(even) { + border-radius: 8px; + background: rgb(242.25, 242.25, 242.25); +} +@media screen and (width <= 47.9875rem) { + .decorative-panels .row { + display: block; + } + .decorative-panels .row.collapse:not(.show) { + display: none; + } +} + +.working-with-attack .g-24 { + gap: 24px; +} +.working-with-attack .g-12 { + gap: 12px; +} +.working-with-attack .row.panels { + margin: 0; +} +.working-with-attack img { + border-radius: 0.75em; +} +.working-with-attack img.scale { + object-fit: cover; + object-position: left top; + border-radius: unset !important; + border: 1px solid rgb(223.125, 223.125, 223.125); +} +.working-with-attack .panel { + padding: 0; + border: 1px solid rgb(223.125, 223.125, 223.125); + border-radius: 0.75em; + max-width: 100%; +} +.working-with-attack img + .panel-body { + border-top: 1px solid rgb(223.125, 223.125, 223.125); +} +.working-with-attack .panel-body p { + margin: 24px 0; + overflow: scroll; +} +.working-with-attack .panel-body.fixed-height { + height: 30vh; +} +.working-with-attack ul { + margin-bottom: 0; +} +@media screen and (width <= 61.938rem) { + .working-with-attack .panel-body.fixed-height { + min-height: 40vh; + max-height: fit-content; + } +} +.working-with-attack .table-of-contents { + position: static; + float: none; + width: 25%; +} + +.tip-box { + background: #eaeaea; + padding: 1rem; +} + +/* Card Blocks */ +.expand-panel .card-block .card-header { + display: flex; + flex-direction: row; +} +.expand-panel .card-block .card-header h5 { + font-family: "Roboto-Regular", sans-serif; +} +.expand-panel .card-block .card-header :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; +} +.expand-panel .card-block .card-header:after, .expand-panel .card-block .card-header::after { + content: ""; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%2339434C' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; +} +.expand-panel .card-block .card-header:not(.collapsed):after, .expand-panel .card-block .card-header:not(.collapsed)::after { + transform: rotate(-180deg); +} +.expand-panel .card-block .card-header:not(:last-child) { + border-bottom: none; +} +.expand-panel .card-block .card-title { + display: inline-block; + flex-grow: 1; + font-family: "Roboto-Regular", sans-serif; +} +.expand-panel .card-block .first-card { + border-bottom: none; + border-radius: 0.25rem 0.25rem 0 0; +} +.expand-panel .card-block .last-card { + border-radius: 0 0 0.25rem 0.25rem; +} +.expand-panel .card-block .middle-card { + border-bottom: none; + border-radius: 0; +} + +/* **** */ +@media print { + * { + overflow: visible !important; + break-before: always !important; + page-break-inside: avoid !important; + } +} +/* Footer styling */ +.footer { + background-color: #0b2338; + color: white; + padding: 1rem 3rem; + font-family: "Roboto-Thin", sans-serif; +} +.footer.sticky-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; +} +.footer > .container-fluid { + padding-right: 0 !important; + padding-left: 0 !important; +} +.footer .footer-responsive-break { + display: none; +} +.footer .footer-float-right-responsive-brand { + float: right; + height: 100%; + display: flex; + align-items: center; +} +.footer .footer-float-right-responsive-centered { + display: flex; + justify-content: flex-end; + align-items: center; +} +.footer .footer-link-group { + display: flex; + flex-direction: column; + justify-content: center; +} +.footer .footer-link { + color: #87deff; +} +.footer .footer-link:hover { + color: rgb(107, 173, 213.5); +} + +.col .col-footer { + border-right: 1px solid; +} + +.p-footer { + padding-left: 25px; +} + +.btn-footer { + color: white; + padding: 0.375rem; +} + +.btn-footer:hover { + color: white; +} + +@media screen and (width <= 47.9875rem) { + .footer .footer-responsive-break { + display: block !important; + } + .footer .footer-float-right-responsive-brand { + float: none !important; + } + .footer .footer-float-right-responsive-centered { + float: none !important; + display: block !important; + justify-content: none !important; + align-items: none !important; + } +} +/* **** */ +@media print { + .footer { + visibility: hidden; + display: none; + } +} +/* Navigation styling */ +.navbar .nav-tabs .nav-link.active, .navbar .nav-tabs .nav-link:hover:not(.active), .navbar .nav-tabs .nav-link:focus { + border: 0.0625rem solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + text-decoration: underline; +} + +/* Top NAVIGATION */ +.navbar { + background-color: #c63f1f; + z-index: 1; +} +.navbar .navbar-brand { + font-size: 2rem; +} +.navbar .nav-tabs { + border-bottom: none; +} +.navbar .nav-tabs .nav-link { + color: white; + font-family: "Roboto-Light", sans-serif; +} +.navbar .nav-tabs .nav-link:focus { + color: white; +} +.navbar .nav-tabs .nav-link:hover:not(.active) { + color: white; + background-color: transparent; +} +.navbar .nav-tabs .nav-link.active { + color: white; + background-color: #c63f1f; +} +.navbar .nav-tabs .nav-item.show .nav-link { + color: white; + background-color: #c63f1f; + border-color: transparent; +} +.navbar .search-button { + padding: 0.3rem 1rem; + font-size: 1rem; + border: 0.0625rem solid white; + border-radius: 0.25rem; + color: white; + line-height: 1.5rem; + opacity: 0.8; +} +.navbar .search-button:not(:has(.error-icon)):hover { + opacity: 1; +} +.navbar .search-button .icon-button { + content: ""; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; + background-position: center; + z-index: 1; + transition: all 0.2s ease; +} +.navbar .search-button .search-icon { + cursor: pointer; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%23FFFFFF' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); +} +.navbar .search-button .error-icon { + cursor: default; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg fill='%23FFFFFF' xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 96 960 960' width='24'%3e%3cpath d='M479.982 776q14.018 0 23.518-9.482 9.5-9.483 9.5-23.5 0-14.018-9.482-23.518-9.483-9.5-23.5-9.5-14.018 0-23.518 9.482-9.5 9.483-9.5 23.5 0 14.018 9.482 23.518 9.483 9.5 23.5 9.5ZM453 623h60V370h-60v253Zm27.266 353q-82.734 0-155.5-31.5t-127.266-86q-54.5-54.5-86-127.341Q80 658.319 80 575.5q0-82.819 31.5-155.659Q143 347 197.5 293t127.341-85.5Q397.681 176 480.5 176q82.819 0 155.659 31.5Q709 239 763 293t85.5 127Q880 493 880 575.734q0 82.734-31.5 155.5T763 858.316q-54 54.316-127 86Q563 976 480.266 976Zm.234-60Q622 916 721 816.5t99-241Q820 434 721.188 335 622.375 236 480 236q-141 0-240.5 98.812Q140 433.625 140 576q0 141 99.5 240.5t241 99.5Zm-.5-340Z'/%3e%3c/svg%3e"); +} + +/* **** */ +.nav, +.faq { + /* NAVIGATION Dropdown */ + /* **** */ + /* Side NAVIGATION */ + border-color: rgb(223.125, 223.125, 223.125) !important; + /* **** */ +} +.nav .dropdown:hover > .dropdown-menu, +.faq .dropdown:hover > .dropdown-menu { + display: block; +} +.nav .dropdown-menu, +.faq .dropdown-menu { + background-color: #c63f1f; +} +.nav .dropdown-menu .dropdown-item, +.faq .dropdown-menu .dropdown-item { + color: white; +} +.nav .dropdown-menu .dropdown-item:hover, .nav .dropdown-menu .dropdown-item:focus, +.faq .dropdown-menu .dropdown-item:hover, +.faq .dropdown-menu .dropdown-item:focus { + color: white; + text-decoration: underline; + background-color: transparent; +} +.nav .heading, +.faq .heading { + font-size: 1.6rem; + color: rgb(106.5, 114, 120.75); + letter-spacing: 0.1875rem; + pointer-events: none; +} +@media screen and (width <= 74.938rem) { + .nav .heading, + .faq .heading { + pointer-events: all; + } +} +.nav .heading.collapsed .fa-chevron-up, +.nav .heading .fa-chevron-down, +.faq .heading.collapsed .fa-chevron-up, +.faq .heading .fa-chevron-down { + display: none; +} +.nav .heading.collapsed .fa-chevron-down, +.nav .heading .fa-chevron-up, +.faq .heading.collapsed .fa-chevron-down, +.faq .heading .fa-chevron-up { + display: inline-block; +} +.nav i.fa-solid, +.faq i.fa-solid { + visibility: hidden; + display: none; +} +@media screen and (width <= 74.938rem) { + .nav i.fa-solid, + .faq i.fa-solid { + visibility: visible; + display: contents; + } +} +.nav .br-mobile, +.faq .br-mobile { + display: none; +} +@media screen and (width <= 74.938rem) { + .nav .br-mobile, + .faq .br-mobile { + display: inline-block; + } +} +.nav .heading-dropdown, +.faq .heading-dropdown { + font-size: 1.2rem; + color: #062f4f; + letter-spacing: 0.1875rem; +} +@media screen and (width <= 90.62rem) { + .nav .heading, + .faq .heading { + font-size: 1.2rem; + color: rgb(106.5, 114, 120.75); + letter-spacing: 0.1875rem; + } + .nav .heading-dropdown, + .faq .heading-dropdown { + font-size: 1rem; + color: #39434c; + letter-spacing: 0.0625rem; + } +} +.nav .nav-link, +.faq .nav-link { + font-size: 1rem; + padding: 0.3rem 1rem; + color: rgb(106.5, 114, 120.75); +} +.nav .nav-link.expand-title, +.faq .nav-link.expand-title { + font-size: 1.1rem; + color: #39434c; +} +.nav .nav-link.side, +.faq .nav-link.side { + padding: 0.3rem 0.3rem; + word-break: break-word; +} +.nav .nav-link.side:hover, +.faq .nav-link.side:hover { + background-color: #c63f1f; + color: white; +} +.nav .nav-link.side.active, +.faq .nav-link.side.active { + color: #c63f1f; + background-color: rgb(242.25, 242.25, 242.25); + border-right: 0.1875rem solid #c63f1f; +} + +/* **** */ +.resizer { + width: 2px; + top: 0; + right: 0; + cursor: col-resize; + height: 100%; + position: absolute; + background-color: #dfdfdf; +} + +.data-sources-menu { + padding-top: 15px; +} + +.sidebar.nav { + overflow-y: auto; + z-index: 0; + min-width: min-content; + max-width: 20vw; +} +@media screen and (width <= 74.938rem) { + .sidebar.nav { + position: static; + min-width: fit-content; + } +} +.sidebar.nav .sidenav-wrapper { + display: flex; + flex-direction: column; + padding-right: 5px; + padding-left: 1rem; + height: 100%; +} +@media screen and (width <= 74.938rem) { + .sidebar.nav .sidenav-wrapper { + display: block; + } +} +.sidebar.nav .sidenav-wrapper .heading { + border-bottom: 1px solid rgb(242.25, 242.25, 242.25); + flex: 0 1 0; +} +.sidebar.nav .sidenav-wrapper .checkbox-div { + border-bottom: 1px solid rgb(242.25, 242.25, 242.25); + flex: 0 1 0; +} +.sidebar.nav .sidenav-wrapper .sidenav-list { + flex: 1 0 0; + overflow-y: auto; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav { + width: 100%; + word-break: break-word; + font-size: 1.1rem; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head { + display: flex; + flex-direction: row; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button { + cursor: pointer; + color: black; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a:hover, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:hover { + background: rgb(242.25, 242.25, 242.25); +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head span { + padding: 0.3rem; + padding-left: 0; + display: inline-block; + flex-grow: 1; + height: 100%; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a:hover, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head span:hover { + text-decoration: none; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button { + padding: 5px; + border-left: 1px solid rgb(242.25, 242.25, 242.25); + display: inline-block; + display: flex; + flex-direction: row; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:after, .sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button::after { + content: ""; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%2339434C' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:not(.collapsed):after, .sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:not(.collapsed)::after { + transform: rotate(-180deg); +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head.active, .sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head.active > a { + color: #0156b3 !important; + font-weight: bolder; + background: #eaeaea; + font-family: Roboto-Bold, sans-serif; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-body { + padding-left: 0.75rem; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav { + padding-left: 0.75rem; +} + +@media print { + .nav { + visibility: hidden; + display: none; + } + .sidenav { + visibility: hidden; + display: none; + } + .sidebar.nav { + visibility: hidden; + display: none; + } + .sidenav-wrapper { + visibility: hidden; + display: none; + } + .side-nav-desktop-view { + visibility: hidden; + display: none; + } + .navbar { + visibility: hidden; + display: none; + } +} +.search-word-found { + background: yellow; + color: black; +} + +.btn-group-text { + padding: 0.25rem, 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; + border: 1px solid transparent; +} + +.overlay.search { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1051; + background: rgba(0, 0, 0, 0.35); + padding: 50px; +} +.overlay.search .overlay-inner { + border-radius: 25px; + background: white; + color: #39434c; + width: 100%; + display: flex; + flex-flow: column; + max-height: 100%; +} +.overlay.search .overlay-inner .search-header { + flex-shrink: 0; + position: relative; +} +.overlay.search .overlay-inner .search-header .search-input { + padding: 10px; +} +.overlay.search .overlay-inner .search-header .search-input input { + padding-left: 12.5px; + font-size: 25px; + line-height: 50px; + width: 100%; + border: 0; + background: white; + color: #39434c; +} +.overlay.search .overlay-inner .search-header .search-input input:focus { + outline: none; +} +.overlay.search .overlay-inner .search-header .search-icons { + position: absolute; + top: 0px; + right: 0px; +} +.overlay.search .overlay-inner .search-header .search-icons > div { + display: inline-block; +} +.overlay.search .overlay-inner .search-header .search-icons .search-parsing-icon { + height: 25px; + width: 25px; + margin-bottom: 8px; + opacity: 0.5; +} +.overlay.search .overlay-inner .search-header .search-icons .close-search-icon { + font-size: 50px; + width: 50px; + line-height: 50px; + text-align: center; + margin: 10px; + opacity: 0.8; + cursor: pointer; +} +.overlay.search .overlay-inner .search-header .search-icons .close-search-icon:hover { + opacity: 1; +} +.overlay.search .overlay-inner .search-body { + flex: 1 1 auto; + padding: 0 50px; + border-top: 1px solid rgb(223.125, 223.125, 223.125); + margin-bottom: 25px; + overflow-y: auto; +} +.overlay.search .overlay-inner .search-body .results .search-result:first-child { + margin-top: 1.5rem; +} +.overlay.search .overlay-inner .search-body .load-more-results { + text-align: center; +} + +.page-search { + float: right; + width: 50%; +} + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .overlay.search .search-body { + flex-basis: 50vh !important; + } +} +@media screen and (min-width: 1px) and (max-width: 767.8px) { + .search-input input { + font-size: 20px !important; + line-height: 25px !important; + } + .close-search-icon { + font-size: 25px !important; + line-height: 25px !important; + width: 25px !important; + } + .search-parsing-icon { + width: 14px !important; + height: 14px !important; + margin-bottom: 5px !important; + } +} +.popover { + box-shadow: 0 0 5px 3px white; + border-color: #c63f1f; +} +.popover .popover-header { + background: #c63f1f; + color: white; +} +.popover.bs-popover-left .arrow::before { + border-left-color: #c63f1f; +} +.popover.bs-popover-right .arrow::before { + border-right-color: #c63f1f; +} +.popover.bs-popover-top .arrow::before { + border-top-color: #c63f1f; +} +.popover.bs-popover-bottom .arrow::before, +.popover.bs-popover-bottom .arrow::after, +.popover.bs-popover-bottom .popover-header::before { + border-bottom-color: #c63f1f; +} + +.tour-backdrop, +.tour-highlight { + opacity: 0; +} + +.matrix-container { + border: 1px solid rgb(223.125, 223.125, 223.125); + background: white; +} +.matrix-container + .matrix-container { + margin-top: 1rem; +} +.matrix-container .matrix-border { + border-left: 1px solid rgb(223.125, 223.125, 223.125); + padding-left: 0.5rem; + display: flex; + justify-content: center; + align-items: center; +} +.matrix-container .matrix-title { + border-bottom: 1px solid rgb(223.125, 223.125, 223.125); + margin-bottom: 1rem; + padding-bottom: 0.5rem; +} +.matrix-container .scroll-indicator-group { + white-space: nowrap; + display: flex; +} +.matrix-container .scroll-indicator-group .matrix-scroll-box { + flex-grow: 1; + display: inline-block; +} +.matrix-container .scroll-indicator-group .scroll-indicator { + width: 0; + display: inline-block; + position: relative; +} +.matrix-container .scroll-indicator-group .scroll-indicator .cover { + width: 50px; + height: 100%; + position: absolute; + pointer-events: none; +} +.matrix-container .scroll-indicator-group .scroll-indicator.right .cover { + right: 0; +} +.matrix-container .scroll-indicator-group .scroll-indicator.right.show .cover { + background: linear-gradient(to right, rgba(255, 255, 255, 0.001), white); +} +.matrix-container .scroll-indicator-group .scroll-indicator.left .cover { + left: 0; +} +.matrix-container .scroll-indicator-group .scroll-indicator.left.show .cover { + background: linear-gradient(to left, rgba(255, 255, 255, 0.001), white); +} + +.matrix { + white-space: normal; + line-height: 14px; +} +.matrix.side .tactic { + padding: 2px 5px; + width: 1%; + vertical-align: top; +} +.matrix.side .tactic:first-child { + padding: 2px 5px 2px 2px; +} +.matrix.side .tactic:last-child { + padding: 2px 2px 2px 5px; +} +.matrix.side .tactic:hover:not(.name, .count) { + background: rgb(223.125, 223.125, 223.125); +} +.matrix.side .tactic:hover:not(.name, .count) .sidebar.expanded .angle { + background: rgb(223.125, 223.125, 223.125); +} +.matrix.side .tactic.name, .matrix.side .tactic.count { + text-align: center; + font-size: 16px; +} +.matrix.side .tactic.name { + font-weight: bold; +} +.matrix.side .tactic.count { + font-size: 13px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; +} +.matrix.side .tactic .techniques-table { + border-collapse: collapse; + width: 100%; +} +.matrix.side .tactic .techniques-table tr, +.matrix.side .tactic .techniques-table td { + padding: 0; +} +.matrix.side .tactic .techniques-table tr { + height: 1px; +} +.matrix.side .tactic .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; +} +.matrix.side .tactic .supertechnique td { + padding: 0; + vertical-align: top; +} +.matrix.side .tactic .supertechnique td.technique { + outline: 1px solid rgb(106.5, 114, 120.75); + outline-offset: -1px; +} +.matrix.side .tactic .subtechniques { + display: flex; + flex-direction: column; + height: 100%; + margin-left: -1px; + border-left: 2px solid rgb(106.5, 114, 120.75); + outline: 1px solid rgb(106.5, 114, 120.75); + outline-offset: -1px; + white-space: nowrap; + vertical-align: top; +} +.matrix.side .tactic .subtechniques.hidden { + display: none; +} +.matrix.side .tactic .subtechniques .subtechnique { + height: 100%; + flex-grow: 1; +} +.matrix.side .tactic .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: rgb(242.25, 242.25, 242.25); + width: 12px; + height: 12px; + font-size: 16px; + line-height: 12px; +} +.matrix.side .tactic .sidebar { + min-width: 8px; + width: 12px; + padding: 0; + background: rgb(106.5, 114, 120.75); + cursor: pointer; + position: relative; + vertical-align: middle; +} +.matrix.side .tactic .sidebar .angle { + display: none; +} +.matrix.side .tactic .sidebar.expanded .angle { + margin: 0 auto; + height: 12px; + display: block; + position: absolute; + background: white; +} +.matrix.side .tactic .sidebar.expanded .angle svg { + fill: rgb(106.5, 114, 120.75); + vertical-align: baseline; +} +.matrix.side .tactic .sidebar.expanded .angle.top { + top: 0; +} +.matrix.side .tactic .sidebar.expanded .angle.bottom { + bottom: 0; +} +.matrix.flat .tactic { + margin-right: 5px; + width: 1%; + vertical-align: top; +} +.matrix.flat .tactic.name, .matrix.flat .tactic.count { + text-align: center; + font-size: 16px; +} +.matrix.flat .tactic.name { + font-weight: bold; +} +.matrix.flat .tactic.count { + font-size: 13px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; +} +.matrix.flat .tactic .subtechniques-row.hidden { + display: none; +} +.matrix.flat .tactic .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; +} +.matrix.flat .tactic .supertechnique td { + padding: 0; + vertical-align: top; +} +.matrix.flat .tactic .supertechnique td.sidebar.technique { + min-width: 8px; + width: 12px; + padding: 0; + background: rgb(106.5, 114, 120.75); + cursor: pointer; + vertical-align: middle; +} +.matrix.flat .tactic .supertechnique td.sidebar.technique .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: rgb(242.25, 242.25, 242.25); + width: 12px; + height: 9px; + font-size: 16px; + line-height: 12px; +} +.matrix.flat .tactic .supertechnique td.sidebar.subtechniques svg { + fill: rgb(106.5, 114, 120.75); + vertical-align: baseline; +} +.matrix.flat .tactic .supertechnique td.sidebar { + border-right: 2px solid rgb(106.5, 114, 120.75); +} +.matrix.flat .tactic .supertechnique td.technique { + outline: 1px solid rgb(106.5, 114, 120.75); + outline-offset: -1px; +} +.matrix.flat .tactic .more-icon { + transition: all ease 0.125s; + vertical-align: top; + transform: scale(0.5) rotate(-90deg); + width: 12px; + height: 12px; +} +.matrix.flat .tactic .more-icon.expanded { + transform: scale(0.5); +} +.matrix .technique-cell { + height: 100%; + display: flex; + align-items: center; + background-color: white; + font-size: 13px; + line-height: 14px; + outline: 1px solid transparent; + outline-offset: -1px; +} +.matrix .technique-cell a { + display: block; + width: 100%; + height: 100%; + padding: 7px 3px; +} +.matrix .technique-cell:not(.colored):not(.supertechniquecell) { + outline-color: rgb(223.125, 223.125, 223.125); +} + +.matrix-controls { + margin: auto; + width: 50%; + padding: 1rem; +} +.matrix-controls button { + border-color: rgb(223.125, 223.125, 223.125); + background: white; + color: #39434c; +} +.matrix-controls button:hover { + background: rgb(244.8, 244.8, 244.8); +} +.matrix-controls .layout-button:active { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.center-controls .matrix-controls .btn-toolbar { + justify-content: center; +} + +.btn-toolbar { + justify-content: center; +} + +.version-button.permalink .live { + display: none; +} +.version-button.live .permalink { + display: none; +} + +.version-table .table-break-row { + border-right-color: white; + border-left-color: white; + padding: 1rem 0; +} + +/*# sourceMappingURL=style-attack.css.map */ diff --git a/attack-theme/static/style-user.css b/attack-theme/static/style-user.css new file mode 100644 index 00000000000..373b50b86c4 --- /dev/null +++ b/attack-theme/static/style-user.css @@ -0,0 +1,2276 @@ +/* COLORS */ +/* FONTS */ +@font-face { + font-family: "Roboto-Thin"; + font-style: normal; + font-weight: 100; + src: url("fonts/Roboto/Roboto-Thin.ttf"); +} +@font-face { + font-family: "Roboto-Light"; + font-style: normal; + font-weight: 300; + src: url("fonts/Roboto/Roboto-Light.ttf"); +} +@font-face { + font-family: "Roboto-Regular"; + font-style: normal; + font-weight: 400; + src: url("fonts/Roboto/Roboto-Regular.ttf"); +} +@font-face { + font-family: "Roboto-Medium"; + font-style: normal; + font-weight: 500; + src: url("fonts/Roboto/Roboto-Medium.ttf"); +} +@font-face { + font-family: "Roboto-Bold"; + font-style: normal; + font-weight: 700; + src: url("fonts/Roboto/Roboto-Bold.ttf"); +} +@font-face { + font-family: "Roboto-Black"; + font-style: normal; + font-weight: 900; + src: url("fonts/Roboto/Roboto-Black.ttf"); +} +.deemphasis { + color: rgb(106.5, 114, 120.75); +} + +.matrix-header { + background-color: gray; + color: white; +} + +.table-alternate, +.blog-post table, +.changelog table, .bg-alternate { + background-color: rgb(242.25, 242.25, 242.25) !important; +} + +.text-label { + text-transform: uppercase; + font-size: 14px; +} + +.text-label-small { + font-size: 12px; + color: #303435; + margin-top: -10px; +} + +/* General styling */ +html { + height: 100%; +} + +body { + height: 100%; + background: white; + color: #39434c; + font-family: "Roboto-Regular", sans-serif; + display: flex; + flex-direction: column; +} + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + body { + height: auto; + } +} +.attack-website-wrapper { + max-height: 100vh; + overflow-y: auto; +} + +h1, +h2, +h3, +h4, +h5 { + font-family: "Roboto-Light", sans-serif; +} + +strong { + font-family: "Roboto-Bold", sans-serif; +} + +.jumbotron { + padding: 0; + background: white; + color: #39434c; +} +.jumbotron code { + color: rgb(28.5, 33.5, 38); + background-color: rgb(229.5, 229.5, 229.5); + border-radius: 3px; + font-family: courier, monospace; + padding: 0 3px; +} + +a { + color: #4f7cac; +} +a .anchor::before { + content: ""; + display: block; + margin-top: -5rem; + position: absolute; +} + +.marker-none { + list-style-type: none; +} + +.overflow-x-auto { + overflow-x: auto; +} + +.fs-s { + font-size: small; +} + +.capec-card { + background: rgb(128, 0, 0); +} +.capec-card img { + margin: 0.5rem; + max-width: 10rem; + max-height: 3.4375rem; + margin-left: auto; + margin-right: auto; + display: block; +} + +.maec-card { + background: #212121; +} +.maec-card img { + margin: 0.5rem; + max-width: 9.125rem; + margin-left: auto; + margin-right: auto; + display: block; +} + +.default-img-size { + width: 100%; + max-width: 62.5rem; +} + +.mitre-logo-wtrans { + width: 9rem; + height: 4.125rem; +} + +.quick-links { + width: 100%; + text-align: center; + table-layout: fixed; +} +.quick-links td { + padding: 0.3125rem 0; +} +.quick-links tr + tr { + border-top: 1px solid rgb(223.125, 223.125, 223.125); +} + +.row-main-page { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +@media screen and (width <= 47.9875rem) { + .row-main-page { + display: inline; + } +} +.p-line p { + border-top: 0.0625rem solid #1c2226; +} + +.btn-default { + background: white; + border-color: rgb(106.5, 114, 120.75); + color: #39434c; +} +.btn-default:hover { + color: rgb(28.5, 33.5, 38); +} + +.website-button, .slide-button-secondary, .slide-button { + font-size: 16px; + border-radius: 5px; + cursor: pointer; + position: relative; + overflow: hidden; + font-family: Arial; + display: inline-flex; + align-items: center; + border-style: solid; +} + +.slide-icon-button { + border-style: none; + background: none; +} + +.slide-button { + border-color: #303435; + color: #fff; + background: #303435; + padding: 6px 16px; +} +a .slide-button { + text-decoration: none !important; +} + +.slide-button-secondary { + color: #303435; + background: #fff; + border-color: #303435; + padding: 6px 16px; +} +a .slide-button-secondary { + text-decoration: none !important; +} + +.slide-button-text { + position: relative; +} + +.slide-button-icon { + position: relative; + padding-left: 8px; +} + +.slide-button:hover { + background: #303435; + border-color: #303435; +} + +.slide-button-secondary:hover { + background: #eaeaea; + border-color: #303435; + color: #303435; +} + +.dropdown { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + background-color: white; + min-width: 160px; + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +} + +.dropdown:hover .dropdown-content { + display: block; +} + +.btn-navy:hover, .btn-navy { + color: white; + border-color: 0.0625rem solid #303435; +} + +.btn-navy { + background-color: #303435; + color: white; +} +.btn-navy:hover { + background-color: rgb(57.7188118812, 62.5287128713, 63.7311881188); + background-image: none; +} + +.markdown-body h1:not(:first-child) { + padding-top: 2rem; +} +.markdown-body h1 { + padding-bottom: 0.8rem; + font-size: 1.8rem; +} +.markdown-body h2 { + font-size: 1.3rem; +} +.markdown-body h3 { + font-size: 1.1rem; +} + +/* **** */ +/* Table styling */ +.table, +.blog-post table, +.changelog table { + empty-cells: hide; +} +.table td, +.blog-post table td, +.changelog table td { + padding: 0.75rem; + vertical-align: top; +} +.table td p:last-child, +.blog-post table td p:last-child, +.changelog table td p:last-child { + margin-bottom: 0; +} +.table th, +.blog-post table th, +.changelog table th { + padding: 0.6rem; + vertical-align: top; + font-size: 0.9rem; +} +.table .active, +.blog-post table .active, +.changelog table .active { + color: #303435; +} + +.blog-post table { + margin-bottom: 1.5rem; +} + +.table-alternate tbody, +.blog-post table tbody, +.changelog table tbody { + background: white; + color: #39434c; +} + +.table-techniques thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; +} +.table-techniques table { + border-collapse: collapse; +} +.table-techniques td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; +} +.table-techniques tr:last-child { + border-bottom: 1px solid #dfdfdf; +} +.table-techniques .sub.technique { + border-left: none; +} +.table-techniques .technique td:first-child { + border-bottom: none; +} +.table-techniques .sub.technique td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; +} +.table-techniques .sub.technique td:not(:nth-child(4)) { + color: #4f7cac; +} +.table-techniques .technique:not(.sub) td:not(:nth-child(3)) { + color: #4f7cac; +} + +.techniques-used table { + border-collapse: collapse; +} +.techniques-used td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; +} +.techniques-used tr:last-child { + border-bottom: 1px solid #dfdfdf; +} +.techniques-used .sub.technique { + border-left: none; +} +.techniques-used .technique td:first-child { + border-bottom: none; +} +.techniques-used .technique td:nth-child(2) { + border-bottom: none; +} +.techniques-used .sub.technique:not(.noparent) td:nth-child(2) { + width: 5ex; + border-top: none; + border-bottom: none; +} +.techniques-used .sub.technique:not(.noparent) td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; +} + +.techniques-used.background thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; +} + +.datasources-table table { + border-collapse: collapse; +} +.datasources-table thead tr { + background: #f2f2f2; + border-bottom: 2px solid #dee2e6; +} +.datasources-table td { + vertical-align: top; + padding: 10px; + border: 1px solid #dfdfdf; +} +.datasources-table tr:last-child { + border-bottom: 1px solid #dfdfdf; +} +.datasources-table .datacomponent.datasource { + border-left: none; +} +.datasources-table .datasource td:first-child { + border-bottom: none; +} +.datasources-table .datasource td:nth-child(2) { + border-bottom: none; +} +.datasources-table .datacomponent.datasource:not(.noparent) td:nth-child(2) { + width: 5ex; + border-top: none; + border-bottom: none; +} +.datasources-table .datacomponent.datasource:not(.noparent) td:first-child { + width: 5ex; + border-top: none; + border-bottom: none; +} +.datasources-table .nowrap { + white-space: nowrap; +} + +.tables-mobile { + overflow-y: auto; +} + +.table-bordered, .table-bordered td, .table-bordered th, +.blog-post table, +.blog-post table td, +.blog-post table th, +.changelog table, +.changelog table td, +.changelog table th { + border: 1px solid rgb(223.125, 223.125, 223.125); +} +.table-bordered th, +.blog-post table th, +.changelog table th { + border-bottom: 2px solid rgb(223.125, 223.125, 223.125) !important; +} + +.table-matrix { + border: none !important; +} +.table-matrix thead th { + text-align: center !important; + vertical-align: middle !important; + border: 0.0625rem solid rgb(223.125, 223.125, 223.125) !important; +} +.table-matrix td, +.table-matrix th { + text-align: center !important; + vertical-align: middle !important; + border-top: none !important; + padding: 0.125rem !important; + font-size: 0.75rem !important; +} +.table-matrix td.border, +.table-matrix th.border { + border: 0.0625rem solid rgb(223.125, 223.125, 223.125) !important; +} +.table-matrix td.no-border, +.table-matrix th.no-border { + border: none !important; +} +.table-matrix td { + background: white; + color: #39434c; +} + +.table-mitigations th, +.table-mitigations td, .table-mitigations { + white-space: nowrap; + width: 1%; +} + +.div-count { + margin-top: auto; + margin-bottom: 0; +} + +.table-object-count { + display: flex; + justify-content: flex-end; +} + +.matrix-tactics-url { + color: white; +} +.matrix-tactics-url:visited, .matrix-tactics-url:hover, .matrix-tactics-url:active { + color: white; +} + +/* **** */ +/* BANNER */ +.banner-message, .version-banner { + padding: 0.3125rem 0; + text-align: center; + background-color: rgb(229.5, 229.5, 229.5); +} + +/* **** */ +/* IMG/SVG ICON in BANNER */ +.icon-inline { + display: inline-flex; + align-self: center; +} +.icon-inline svg, +.icon-inline img { + height: 1rem; + width: 1rem; + fill: currentcolor; + top: 0.125rem; + position: relative; +} + +/* **** */ +/* Pre-block in SIGHTINGS */ +pre { + color: #39434c; + background-color: rgb(216.75, 216.75, 216.75); + border-radius: 5px; + padding: 1rem; +} + +code { + color: #c63e1f; +} + +/* **** */ +/* CARDS */ +.card { + background: white; + color: #39434c; + border-color: rgb(223.125, 223.125, 223.125); +} + +.button-group { + display: flex; + justify-content: end; +} +.button-group a.button + a.button { + margin-left: 22px; +} +.button-group button { + justify-content: center; + width: 100%; +} +.button-group a.w-40 { + width: 40%; +} + +.card-filter { + width: 20%; + top: 9.3rem; + float: right; + background: #eaeaea; +} + +@media screen and (width <= 90.62rem) { + .card-filter { + display: contents; + } +} +.card-presentation { + margin-bottom: 30px; +} + +.card-attackcon { + width: 100%; +} + +.card-data { + margin-bottom: 0.5rem; +} + +.card-header { + color: #39434c; + background: rgba(57, 67, 76, 0.03); + border-bottom-color: rgb(223.125, 223.125, 223.125); +} + +a.partial-underline { + text-decoration: none; +} +a.partial-underline .hover-line { + text-decoration: underline; +} + +.contact-card { + border-radius: 0.75em; + overflow: hidden; +} +.contact-card .card-footer { + padding: 0 1.25rem 1.25rem; +} +.contact-card .card-footer.button-group { + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 12px; +} +.contact-card .card-footer-no-button { + padding: 0.5rem 1.25rem; + min-height: 4rem; + max-height: fit-content; +} +.contact-card .card-header { + padding: 1.25rem 1.25rem 0; +} +.contact-card .card-header.background { + background: #303435; + color: white; + padding-bottom: 1.25rem; +} +.contact-card .card-header.no-background, +.contact-card .card-footer.no-background { + background: white; + color: #39434c; + border: unset; +} +.contact-card .card-body p { + margin: 0; +} +.contact-card .card-body.background { + background: #eaeaea; +} + +.card-body > .table { + border-right: 0; + border-left: 0; + margin-bottom: 0; +} +.card-body > .table:last-child { + border-bottom: 0; +} +.card-body > .table:not(.table-sm) th, .card-body > .table:not(.table-sm) td { + padding: 0.75rem 1.25rem; +} +.card-body > .table td:first-child, +.card-body > .table th:first-child { + border-left: 0; +} +.card-body > .table td:last-child, +.card-body > .table th:last-child { + border-right: 0; +} +.card-body > .table tr:first-child td, +.card-body > .table tr:first-child th { + border-top: 0; +} +.card-body > .table tr:last-child td { + border-bottom: 0; +} +.card-body .card-header + .table { + border-top: 0; +} + +.card-data:last-of-type { + margin-bottom: 0; +} + +.card-title { + font-size: 1.1rem; + color: rgb(28.5, 33.5, 38); +} + +.contact-card-title { + font-size: 1.1rem; + font-weight: bold; +} + +.card-title-icon { + float: right; + color: #303435; +} + +/* **** */ +/* TWITTER */ +.attack-box { + width: 22rem; + max-width: 100%; + height: 27rem; + margin: 0 auto; + border: 3px solid #dfdfdf; + padding: 3px; + display: flex; + flex-direction: column; +} +.attack-box iframe { + border: 1px solid rgb(223.125, 223.125, 223.125) !important; + border-radius: 0.25rem; +} + +/* **** */ +/* BREADCRUMBS */ +.breadcrumb { + font-size: 90%; + background-color: white; + max-width: 1140px; + padding: 0 15px; +} +.breadcrumb .breadcrumb-item + .breadcrumb-item::before { + content: ">"; + color: rgb(106.5, 114, 120.75); +} + +/* **** */ +.nestedlist { + counter-reset: item; +} + +.nestedlist-item { + display: block; +} + +.nestedlist-item::before { + content: counters(item, ".") ". "; + counter-increment: item; +} + +.danger-card { + border-color: #303435; +} +.danger-card .card-header { + background: #303435; + color: white; +} + +/* **** */ +/* ATT&CKCON */ +.bg-accord-light { + color: #39434c; + background-color: rgb(242.25, 242.25, 242.25); +} + +.bg-accord-dark { + color: #39434c; + background-color: rgb(216.75, 216.75, 216.75); +} + +/* **** */ +/* CONTRIBUTE */ +.contribution-headers { + font-family: "Roboto-Regular", sans-serif; +} + +.usa-card-group { + display: flex; + flex-direction: row; +} + +.usa-card__header { + font-family: "Roboto-Regular", sans-serif; + color: white; + background: #303435; + border-bottom-color: rgb(223.125, 223.125, 223.125); + border-radius: 0.3rem 0.3rem 0 0; +} + +/* CONTRIBUTE Examples */ +.new-examples { + padding: 0.625rem 0.625rem 0 0.625rem; + width: 100%; +} +.new-examples.second-example { + margin-top: 0.625rem; + margin-bottom: 1.25rem; +} +.new-examples .example-container { + padding: 0.9375rem; +} +.new-examples .example-container .examples-div { + display: flex; +} +.new-examples .example-container .examples-div .margin-contribute-a { + margin-left: 1.5625rem; +} +.new-examples .example-container .examples-div .margin-contribute-b { + margin-left: 11.4375rem; +} +.new-examples .example-container .examples-p { + margin-left: 0.3125rem; + margin-bottom: 0.625rem; + word-break: break-word; +} +.new-examples .example-container .nested-examples-div { + padding-left: 3.125rem; +} +.new-examples .example-container .example-fields { + font-family: "Roboto-Bold", sans-serif; +} +.new-examples .example-container .example-fields + ul { + padding-left: 6.25rem; +} + +/* **** */ +/* CONTRIBUTORS */ +.scrollable-box { + width: 100%; + height: 500px; + overflow: auto; + padding: 0.9375rem; + background-color: rgb(242.25, 242.25, 242.25); + border-radius: 0.1875rem; +} + +/* **** */ +img.yt-core-image { + width: 100%; +} + +.iframe-width { + width: 500px; + height: 275px; +} + +@media screen and (width <= 47.9875rem) { + .iframe-width { + width: 100%; + height: 140px; + } +} +/* No transition */ +.notransition::after { + transition: none !important; +} + +/* FAQ */ +.faq .faq-section { + padding-bottom: 2rem; +} +.faq .faq-question { + padding: 6px 0; +} +.faq .relevant-links { + margin-bottom: 1rem; + border-radius: 3px; +} +.faq .relevant-links .faq-link ~ .faq-link::before { + content: ", "; +} + +/* **** */ +.attackcon-columns { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: flex-start; +} + +@media screen and (width <= 47.9875rem) { + .attackcon-columns { + flex-direction: column; + } +} +/* Ensure the sponsors block is below and not affected by the top image */ +/* Card Blocks */ +.card-block .card-header { + display: flex; + flex-direction: row; +} +.card-block .card-header h5 { + font-family: "Roboto-Regular", sans-serif; +} +.card-block .card-header :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; +} +.card-block .card-header:after, .card-block .card-header::after { + content: ""; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%2339434C' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; +} +.card-block .card-header:not(.collapsed):after, .card-block .card-header:not(.collapsed)::after { + transform: rotate(-180deg); +} +.card-block .card-title { + display: inline-block; + flex-grow: 1; + font-family: "Roboto-Regular", sans-serif; +} + +/* **** */ +/* GENERAL INFORMATION */ +.general-info .card-img-top { + width: 100%; + height: 15vw; + object-fit: cover; +} +.general-info .graphics .card-header { + flex-grow: 1; +} +.general-info .showmore-btn { + display: block !important; + text-align: center; +} +.general-info .showmore-btn.show { + display: none !important; +} + +/* **** */ +/* GETTING STARTED */ +.getting-started ul:not(.col) { + padding: 0 0.9375rem; + margin-left: 0.9375rem; +} +.getting-started .getting-started-content { + width: 75%; +} +@media screen and (width <= 90.62rem) { + .getting-started .getting-started-content { + width: 100%; + } +} +.getting-started .getting-started-icon { + color: #303435; +} +.getting-started .video-li { + /* don't display the video in the list itself except in mobile layout */ + display: none; +} +@media screen and (width <= 47.9875rem) { + .getting-started .row ul.col { + margin-left: 1.875rem; + } + .getting-started .video-col { + display: none; + } + .getting-started .video-li { + display: list-item; + } +} + +.jump-to-section { + position: -webkit-sticky; + position: sticky; + top: 14rem; + word-wrap: normal; + border-radius: 0.75em; +} + +/* **** */ +/* Timeline in GENERAL INFORMATION */ +.timeline { + overflow-y: hidden; + position: relative; + list-style-type: none; + padding-left: 0; +} +.timeline::before { + background: rgb(106.5, 114, 120.75); + position: absolute; + width: 0.0625rem; + height: 100%; + z-index: 2; + content: ""; + left: 20px; +} +.timeline.collapse { + display: block !important; +} +.timeline:not(.show) { + height: 300px; +} +.timeline:not(.show)::after { + background: linear-gradient(to bottom, transparent, white); + position: absolute; + width: 100%; + height: 75px; + z-index: 4; + content: ""; + bottom: 0; + pointer-events: none; +} +.timeline .timeline-card { + margin: 20px 0; + padding-left: 40px; +} +.timeline .timeline-card::before { + background: white; + position: absolute; + width: 20px; + height: 20px; + z-index: 3; + content: ""; + display: inline-block; + border-radius: 50%; + border: 0.125rem solid rgb(106.5, 114, 120.75); + left: 10px; +} +.timeline .timeline-card .timeline-card-header { + width: 100%; + display: flex; + flex-direction: row; + clear: both; +} +.timeline .timeline-card .timeline-card-header .title { + display: inline-block; + flex-grow: 1; + font-size: 1.25rem; +} +.timeline .timeline-card .timeline-card-header .date { + display: inline-block; + font-size: 1.25rem; + text-align: right; + white-space: nowrap; + padding-left: 0.625rem; +} +.timeline .timeline-card .timeline-card-body { + padding-top: 0.3125rem; +} + +/* **** */ +/* Description formatting in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE */ +.description-body { + line-height: 1.8rem; +} + +.description-body.in-table { + padding: 0.75rem 1.25rem; +} +.description-body.in-table p { + margin-bottom: 0; +} + +.description-body.card-description { + padding: 0.3rem 0 0 0; +} +.description-body.card-description p { + margin-bottom: 0; +} + +/* **** */ +/* External link icon */ +.external-icon { + width: 0.9375rem; + margin-top: -0.3125rem; +} + +/* **** */ +/* ATTA&K Logo */ +.attack-logo-bold { + width: 60%; +} + +.attack-logo { + margin: 8px 0; + display: block; + height: 24px; +} + +/* **** */ +/* anchor tag to bypass navbar */ +.anchor { + display: block; + position: relative; + top: -4.125rem; + visibility: hidden; +} + +.section-view .anchor-section { + position: -webkit-sticky; + position: sticky; + top: 4.125rem; + background: white; + z-index: 100; + margin-bottom: 0; +} +.section-view p { + margin-bottom: 0; + padding-bottom: 0.5rem; +} +.section-view .section-mobile-view { + display: none; +} +.section-view .section-desktop-view { + display: block; +} +@media screen and (width <= 74.938rem) { + .section-view .section-mobile-view { + display: block; + } + .section-view .section-desktop-view { + display: none; + } +} +.section-view .section-shadow { + border-bottom: 1px solid #dfdfdf !important; +} +.section-view table { + margin-top: -1px; +} + +/* **** */ +div#sidebars { + display: contents; +} + +/* Plus/Minus expand icons */ +.expand-icon { + font-size: 5%; + color: #39434c; + margin-top: 0.4375rem; +} + +/* **** */ +/* attackcon page */ +.attackcons { + border-top-width: 0; +} +.attackcons .sponsors { + flex: 1; + padding-left: 25px; +} +.attackcons .p-description { + width: 90%; +} +.attackcons .sponsors-block { + background: #eaeaea; + text-align: center; + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + flex-direction: column; + width: 200%; +} +.attackcons .sponsors-block .img-container { + margin: 10px; + flex: 1 1 20%; + box-sizing: border-box; +} +.attackcons .sponsors-block .img-container img { + width: 100%; + margin: auto; + height: auto; +} +@media screen and (width <= 47.9875rem) { + .attackcons .sponsors-block { + width: 100%; + flex-direction: row; + } +} + +.support-box { + background-color: rgb(229.5, 229.5, 229.5); + padding: 1.5em; + border-radius: 0.75em; + width: fit-content; +} + +.sponsor-list { + gap: 1.5em; +} + +.sponsor-square { + padding: 0 !important; + height: 150px; + display: flex; +} +.sponsor-square a { + display: contents; +} +.sponsor-square img.sponsor-logo { + background-color: white; + border-radius: 6px; + object-fit: contain; + object-position: center; +} + +/* **** */ +/* training pages */ +.training .exercise { + background: rgb(242.25, 242.25, 242.25); +} + +.card-training { + margin-bottom: 30px; + width: 100%; +} + +.training-card-body { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: left; +} + +.training-text-container { + flex: 1; + margin-right: 20px; +} + +.training-header { + display: flex; + justify-content: space-between; +} + +.resources-container { + display: flex; + flex-wrap: wrap; + flex-direction: row; + gap: 10px; +} + +.resource { + flex: 1; + background-color: #eaeaea; + padding: 10px; + box-sizing: border-box; +} + +.resource-links { + list-style-type: none; + margin-top: 5px; + padding: 0 !important; + margin-left: 0 !important; +} + +.resource-links li { + margin-bottom: 5px; +} + +.resource-links a { + text-decoration: underline; +} + +/* **** */ +.decorative-panels .decorative-panel .decorative-panel-header, +.decorative-panels .decorative-panel .decorative-panel-body { + padding: 10px; +} +.decorative-panels .decorative-panel .decorative-panel-header h3, +.decorative-panels .decorative-panel .decorative-panel-header h4, +.decorative-panels .decorative-panel .decorative-panel-header .btn { + margin-bottom: 16px; +} +.decorative-panels .decorative-panel .decorative-panel-body.show { + border-top: 1px solid rgb(223.125, 223.125, 223.125); +} +.decorative-panels .decorative-panel + .decorative-panel { + margin-top: 25px; +} +.decorative-panels .decorative-panel:nth-of-type(even) { + border-radius: 8px; + background: rgb(242.25, 242.25, 242.25); +} +@media screen and (width <= 47.9875rem) { + .decorative-panels .row { + display: block; + } + .decorative-panels .row.collapse:not(.show) { + display: none; + } +} + +.working-with-attack .g-24 { + gap: 24px; +} +.working-with-attack .g-12 { + gap: 12px; +} +.working-with-attack .row.panels { + margin: 0; +} +.working-with-attack img { + border-radius: 0.75em; +} +.working-with-attack img.scale { + object-fit: cover; + object-position: left top; + border-radius: unset !important; + border: 1px solid rgb(223.125, 223.125, 223.125); +} +.working-with-attack .panel { + padding: 0; + border: 1px solid rgb(223.125, 223.125, 223.125); + border-radius: 0.75em; + max-width: 100%; +} +.working-with-attack img + .panel-body { + border-top: 1px solid rgb(223.125, 223.125, 223.125); +} +.working-with-attack .panel-body p { + margin: 24px 0; + overflow: scroll; +} +.working-with-attack .panel-body.fixed-height { + height: 30vh; +} +.working-with-attack ul { + margin-bottom: 0; +} +@media screen and (width <= 61.938rem) { + .working-with-attack .panel-body.fixed-height { + min-height: 40vh; + max-height: fit-content; + } +} +.working-with-attack .table-of-contents { + position: static; + float: none; + width: 25%; +} + +.tip-box { + background: #eaeaea; + padding: 1rem; +} + +/* Card Blocks */ +.expand-panel .card-block .card-header { + display: flex; + flex-direction: row; +} +.expand-panel .card-block .card-header h5 { + font-family: "Roboto-Regular", sans-serif; +} +.expand-panel .card-block .card-header :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; +} +.expand-panel .card-block .card-header:after, .expand-panel .card-block .card-header::after { + content: ""; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%2339434C' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; +} +.expand-panel .card-block .card-header:not(.collapsed):after, .expand-panel .card-block .card-header:not(.collapsed)::after { + transform: rotate(-180deg); +} +.expand-panel .card-block .card-header:not(:last-child) { + border-bottom: none; +} +.expand-panel .card-block .card-title { + display: inline-block; + flex-grow: 1; + font-family: "Roboto-Regular", sans-serif; +} +.expand-panel .card-block .first-card { + border-bottom: none; + border-radius: 0.25rem 0.25rem 0 0; +} +.expand-panel .card-block .last-card { + border-radius: 0 0 0.25rem 0.25rem; +} +.expand-panel .card-block .middle-card { + border-bottom: none; + border-radius: 0; +} + +/* **** */ +@media print { + * { + overflow: visible !important; + break-before: always !important; + page-break-inside: avoid !important; + } +} +/* Footer styling */ +.footer { + background-color: #303435; + color: white; + padding: 1rem 3rem; + font-family: "Roboto-Thin", sans-serif; +} +.footer.sticky-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; +} +.footer > .container-fluid { + padding-right: 0 !important; + padding-left: 0 !important; +} +.footer .footer-responsive-break { + display: none; +} +.footer .footer-float-right-responsive-brand { + float: right; + height: 100%; + display: flex; + align-items: center; +} +.footer .footer-float-right-responsive-centered { + display: flex; + justify-content: flex-end; + align-items: center; +} +.footer .footer-link-group { + display: flex; + flex-direction: column; + justify-content: center; +} +.footer .footer-link { + color: #87deff; +} +.footer .footer-link:hover { + color: rgb(107, 173, 213.5); +} + +.col .col-footer { + border-right: 1px solid; +} + +.p-footer { + padding-left: 25px; +} + +.btn-footer { + color: white; + padding: 0.375rem; +} + +.btn-footer:hover { + color: white; +} + +@media screen and (width <= 47.9875rem) { + .footer .footer-responsive-break { + display: block !important; + } + .footer .footer-float-right-responsive-brand { + float: none !important; + } + .footer .footer-float-right-responsive-centered { + float: none !important; + display: block !important; + justify-content: none !important; + align-items: none !important; + } +} +/* **** */ +@media print { + .footer { + visibility: hidden; + display: none; + } +} +/* Navigation styling */ +.navbar .nav-tabs .nav-link.active, .navbar .nav-tabs .nav-link:hover:not(.active), .navbar .nav-tabs .nav-link:focus { + border: 0.0625rem solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + text-decoration: underline; +} + +/* Top NAVIGATION */ +.navbar { + background-color: #303435; + z-index: 1; +} +.navbar .navbar-brand { + font-size: 2rem; +} +.navbar .nav-tabs { + border-bottom: none; +} +.navbar .nav-tabs .nav-link { + color: white; + font-family: "Roboto-Light", sans-serif; +} +.navbar .nav-tabs .nav-link:focus { + color: white; +} +.navbar .nav-tabs .nav-link:hover:not(.active) { + color: white; + background-color: transparent; +} +.navbar .nav-tabs .nav-link.active { + color: white; + background-color: #303435; +} +.navbar .nav-tabs .nav-item.show .nav-link { + color: white; + background-color: #303435; + border-color: transparent; +} +.navbar .search-button { + padding: 0.3rem 1rem; + font-size: 1rem; + border: 0.0625rem solid white; + border-radius: 0.25rem; + color: white; + line-height: 1.5rem; + opacity: 0.8; +} +.navbar .search-button:not(:has(.error-icon)):hover { + opacity: 1; +} +.navbar .search-button .icon-button { + content: ""; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: middle; + background-position: center; + z-index: 1; + transition: all 0.2s ease; +} +.navbar .search-button .search-icon { + cursor: pointer; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%23FFFFFF' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); +} +.navbar .search-button .error-icon { + cursor: default; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg fill='%23FFFFFF' xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 96 960 960' width='24'%3e%3cpath d='M479.982 776q14.018 0 23.518-9.482 9.5-9.483 9.5-23.5 0-14.018-9.482-23.518-9.483-9.5-23.5-9.5-14.018 0-23.518 9.482-9.5 9.483-9.5 23.5 0 14.018 9.482 23.518 9.483 9.5 23.5 9.5ZM453 623h60V370h-60v253Zm27.266 353q-82.734 0-155.5-31.5t-127.266-86q-54.5-54.5-86-127.341Q80 658.319 80 575.5q0-82.819 31.5-155.659Q143 347 197.5 293t127.341-85.5Q397.681 176 480.5 176q82.819 0 155.659 31.5Q709 239 763 293t85.5 127Q880 493 880 575.734q0 82.734-31.5 155.5T763 858.316q-54 54.316-127 86Q563 976 480.266 976Zm.234-60Q622 916 721 816.5t99-241Q820 434 721.188 335 622.375 236 480 236q-141 0-240.5 98.812Q140 433.625 140 576q0 141 99.5 240.5t241 99.5Zm-.5-340Z'/%3e%3c/svg%3e"); +} + +/* **** */ +.nav, +.faq { + /* NAVIGATION Dropdown */ + /* **** */ + /* Side NAVIGATION */ + border-color: rgb(223.125, 223.125, 223.125) !important; + /* **** */ +} +.nav .dropdown:hover > .dropdown-menu, +.faq .dropdown:hover > .dropdown-menu { + display: block; +} +.nav .dropdown-menu, +.faq .dropdown-menu { + background-color: #303435; +} +.nav .dropdown-menu .dropdown-item, +.faq .dropdown-menu .dropdown-item { + color: white; +} +.nav .dropdown-menu .dropdown-item:hover, .nav .dropdown-menu .dropdown-item:focus, +.faq .dropdown-menu .dropdown-item:hover, +.faq .dropdown-menu .dropdown-item:focus { + color: white; + text-decoration: underline; + background-color: transparent; +} +.nav .heading, +.faq .heading { + font-size: 1.6rem; + color: rgb(106.5, 114, 120.75); + letter-spacing: 0.1875rem; + pointer-events: none; +} +@media screen and (width <= 74.938rem) { + .nav .heading, + .faq .heading { + pointer-events: all; + } +} +.nav .heading.collapsed .fa-chevron-up, +.nav .heading .fa-chevron-down, +.faq .heading.collapsed .fa-chevron-up, +.faq .heading .fa-chevron-down { + display: none; +} +.nav .heading.collapsed .fa-chevron-down, +.nav .heading .fa-chevron-up, +.faq .heading.collapsed .fa-chevron-down, +.faq .heading .fa-chevron-up { + display: inline-block; +} +.nav i.fa-solid, +.faq i.fa-solid { + visibility: hidden; + display: none; +} +@media screen and (width <= 74.938rem) { + .nav i.fa-solid, + .faq i.fa-solid { + visibility: visible; + display: contents; + } +} +.nav .br-mobile, +.faq .br-mobile { + display: none; +} +@media screen and (width <= 74.938rem) { + .nav .br-mobile, + .faq .br-mobile { + display: inline-block; + } +} +.nav .heading-dropdown, +.faq .heading-dropdown { + font-size: 1.2rem; + color: #303435; + letter-spacing: 0.1875rem; +} +@media screen and (width <= 90.62rem) { + .nav .heading, + .faq .heading { + font-size: 1.2rem; + color: rgb(106.5, 114, 120.75); + letter-spacing: 0.1875rem; + } + .nav .heading-dropdown, + .faq .heading-dropdown { + font-size: 1rem; + color: #39434c; + letter-spacing: 0.0625rem; + } +} +.nav .nav-link, +.faq .nav-link { + font-size: 1rem; + padding: 0.3rem 1rem; + color: rgb(106.5, 114, 120.75); +} +.nav .nav-link.expand-title, +.faq .nav-link.expand-title { + font-size: 1.1rem; + color: #39434c; +} +.nav .nav-link.side, +.faq .nav-link.side { + padding: 0.3rem 0.3rem; + word-break: break-word; +} +.nav .nav-link.side:hover, +.faq .nav-link.side:hover { + background-color: #303435; + color: white; +} +.nav .nav-link.side.active, +.faq .nav-link.side.active { + color: #303435; + background-color: rgb(242.25, 242.25, 242.25); + border-right: 0.1875rem solid #303435; +} + +/* **** */ +.resizer { + width: 2px; + top: 0; + right: 0; + cursor: col-resize; + height: 100%; + position: absolute; + background-color: #dfdfdf; +} + +.data-sources-menu { + padding-top: 15px; +} + +.sidebar.nav { + overflow-y: auto; + z-index: 0; + min-width: min-content; + max-width: 20vw; +} +@media screen and (width <= 74.938rem) { + .sidebar.nav { + position: static; + min-width: fit-content; + } +} +.sidebar.nav .sidenav-wrapper { + display: flex; + flex-direction: column; + padding-right: 5px; + padding-left: 1rem; + height: 100%; +} +@media screen and (width <= 74.938rem) { + .sidebar.nav .sidenav-wrapper { + display: block; + } +} +.sidebar.nav .sidenav-wrapper .heading { + border-bottom: 1px solid rgb(242.25, 242.25, 242.25); + flex: 0 1 0; +} +.sidebar.nav .sidenav-wrapper .checkbox-div { + border-bottom: 1px solid rgb(242.25, 242.25, 242.25); + flex: 0 1 0; +} +.sidebar.nav .sidenav-wrapper .sidenav-list { + flex: 1 0 0; + overflow-y: auto; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav { + width: 100%; + word-break: break-word; + font-size: 1.1rem; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head { + display: flex; + flex-direction: row; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button { + cursor: pointer; + color: black; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a:hover, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:hover { + background: rgb(242.25, 242.25, 242.25); +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head span { + padding: 0.3rem; + padding-left: 0; + display: inline-block; + flex-grow: 1; + height: 100%; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head a:hover, +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head span:hover { + text-decoration: none; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button { + padding: 5px; + border-left: 1px solid rgb(242.25, 242.25, 242.25); + display: inline-block; + display: flex; + flex-direction: row; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button :first-child { + cursor: pointer; + display: inline-block; + flex-grow: 1; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:after, .sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button::after { + content: ""; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + background-repeat: no-repeat; + display: inline-block; + vertical-align: top; + background-position: center; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%2339434C' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + z-index: 1; + transition: all 0.2s ease; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:not(.collapsed):after, .sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head .expand-button:not(.collapsed)::after { + transform: rotate(-180deg); +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head.active, .sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-head.active > a { + color: #303435 !important; + font-weight: bolder; + background: #eaeaea; + font-family: Roboto-Bold, sans-serif; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav-body { + padding-left: 0.75rem; +} +.sidebar.nav .sidenav-wrapper .sidenav-list .sidenav .sidenav { + padding-left: 0.75rem; +} + +@media print { + .nav { + visibility: hidden; + display: none; + } + .sidenav { + visibility: hidden; + display: none; + } + .sidebar.nav { + visibility: hidden; + display: none; + } + .sidenav-wrapper { + visibility: hidden; + display: none; + } + .side-nav-desktop-view { + visibility: hidden; + display: none; + } + .navbar { + visibility: hidden; + display: none; + } +} +.search-word-found { + background: yellow; + color: black; +} + +.btn-group-text { + padding: 0.25rem, 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; + border: 1px solid transparent; +} + +.overlay.search { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1051; + background: rgba(0, 0, 0, 0.35); + padding: 50px; +} +.overlay.search .overlay-inner { + border-radius: 25px; + background: white; + color: #39434c; + width: 100%; + display: flex; + flex-flow: column; + max-height: 100%; +} +.overlay.search .overlay-inner .search-header { + flex-shrink: 0; + position: relative; +} +.overlay.search .overlay-inner .search-header .search-input { + padding: 10px; +} +.overlay.search .overlay-inner .search-header .search-input input { + padding-left: 12.5px; + font-size: 25px; + line-height: 50px; + width: 100%; + border: 0; + background: white; + color: #39434c; +} +.overlay.search .overlay-inner .search-header .search-input input:focus { + outline: none; +} +.overlay.search .overlay-inner .search-header .search-icons { + position: absolute; + top: 0px; + right: 0px; +} +.overlay.search .overlay-inner .search-header .search-icons > div { + display: inline-block; +} +.overlay.search .overlay-inner .search-header .search-icons .search-parsing-icon { + height: 25px; + width: 25px; + margin-bottom: 8px; + opacity: 0.5; +} +.overlay.search .overlay-inner .search-header .search-icons .close-search-icon { + font-size: 50px; + width: 50px; + line-height: 50px; + text-align: center; + margin: 10px; + opacity: 0.8; + cursor: pointer; +} +.overlay.search .overlay-inner .search-header .search-icons .close-search-icon:hover { + opacity: 1; +} +.overlay.search .overlay-inner .search-body { + flex: 1 1 auto; + padding: 0 50px; + border-top: 1px solid rgb(223.125, 223.125, 223.125); + margin-bottom: 25px; + overflow-y: auto; +} +.overlay.search .overlay-inner .search-body .results .search-result:first-child { + margin-top: 1.5rem; +} +.overlay.search .overlay-inner .search-body .load-more-results { + text-align: center; +} + +.page-search { + float: right; + width: 50%; +} + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .overlay.search .search-body { + flex-basis: 50vh !important; + } +} +@media screen and (min-width: 1px) and (max-width: 767.8px) { + .search-input input { + font-size: 20px !important; + line-height: 25px !important; + } + .close-search-icon { + font-size: 25px !important; + line-height: 25px !important; + width: 25px !important; + } + .search-parsing-icon { + width: 14px !important; + height: 14px !important; + margin-bottom: 5px !important; + } +} +.popover { + box-shadow: 0 0 5px 3px white; + border-color: #303435; +} +.popover .popover-header { + background: #303435; + color: white; +} +.popover.bs-popover-left .arrow::before { + border-left-color: #303435; +} +.popover.bs-popover-right .arrow::before { + border-right-color: #303435; +} +.popover.bs-popover-top .arrow::before { + border-top-color: #303435; +} +.popover.bs-popover-bottom .arrow::before, +.popover.bs-popover-bottom .arrow::after, +.popover.bs-popover-bottom .popover-header::before { + border-bottom-color: #303435; +} + +.tour-backdrop, +.tour-highlight { + opacity: 0; +} + +.matrix-container { + border: 1px solid rgb(223.125, 223.125, 223.125); + background: white; +} +.matrix-container + .matrix-container { + margin-top: 1rem; +} +.matrix-container .matrix-border { + border-left: 1px solid rgb(223.125, 223.125, 223.125); + padding-left: 0.5rem; + display: flex; + justify-content: center; + align-items: center; +} +.matrix-container .matrix-title { + border-bottom: 1px solid rgb(223.125, 223.125, 223.125); + margin-bottom: 1rem; + padding-bottom: 0.5rem; +} +.matrix-container .scroll-indicator-group { + white-space: nowrap; + display: flex; +} +.matrix-container .scroll-indicator-group .matrix-scroll-box { + flex-grow: 1; + display: inline-block; +} +.matrix-container .scroll-indicator-group .scroll-indicator { + width: 0; + display: inline-block; + position: relative; +} +.matrix-container .scroll-indicator-group .scroll-indicator .cover { + width: 50px; + height: 100%; + position: absolute; + pointer-events: none; +} +.matrix-container .scroll-indicator-group .scroll-indicator.right .cover { + right: 0; +} +.matrix-container .scroll-indicator-group .scroll-indicator.right.show .cover { + background: linear-gradient(to right, rgba(255, 255, 255, 0.001), white); +} +.matrix-container .scroll-indicator-group .scroll-indicator.left .cover { + left: 0; +} +.matrix-container .scroll-indicator-group .scroll-indicator.left.show .cover { + background: linear-gradient(to left, rgba(255, 255, 255, 0.001), white); +} + +.matrix { + white-space: normal; + line-height: 14px; +} +.matrix.side .tactic { + padding: 2px 5px; + width: 1%; + vertical-align: top; +} +.matrix.side .tactic:first-child { + padding: 2px 5px 2px 2px; +} +.matrix.side .tactic:last-child { + padding: 2px 2px 2px 5px; +} +.matrix.side .tactic:hover:not(.name, .count) { + background: rgb(223.125, 223.125, 223.125); +} +.matrix.side .tactic:hover:not(.name, .count) .sidebar.expanded .angle { + background: rgb(223.125, 223.125, 223.125); +} +.matrix.side .tactic.name, .matrix.side .tactic.count { + text-align: center; + font-size: 16px; +} +.matrix.side .tactic.name { + font-weight: bold; +} +.matrix.side .tactic.count { + font-size: 13px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; +} +.matrix.side .tactic .techniques-table { + border-collapse: collapse; + width: 100%; +} +.matrix.side .tactic .techniques-table tr, +.matrix.side .tactic .techniques-table td { + padding: 0; +} +.matrix.side .tactic .techniques-table tr { + height: 1px; +} +.matrix.side .tactic .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; +} +.matrix.side .tactic .supertechnique td { + padding: 0; + vertical-align: top; +} +.matrix.side .tactic .supertechnique td.technique { + outline: 1px solid rgb(106.5, 114, 120.75); + outline-offset: -1px; +} +.matrix.side .tactic .subtechniques { + display: flex; + flex-direction: column; + height: 100%; + margin-left: -1px; + border-left: 2px solid rgb(106.5, 114, 120.75); + outline: 1px solid rgb(106.5, 114, 120.75); + outline-offset: -1px; + white-space: nowrap; + vertical-align: top; +} +.matrix.side .tactic .subtechniques.hidden { + display: none; +} +.matrix.side .tactic .subtechniques .subtechnique { + height: 100%; + flex-grow: 1; +} +.matrix.side .tactic .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: rgb(242.25, 242.25, 242.25); + width: 12px; + height: 12px; + font-size: 16px; + line-height: 12px; +} +.matrix.side .tactic .sidebar { + min-width: 8px; + width: 12px; + padding: 0; + background: rgb(106.5, 114, 120.75); + cursor: pointer; + position: relative; + vertical-align: middle; +} +.matrix.side .tactic .sidebar .angle { + display: none; +} +.matrix.side .tactic .sidebar.expanded .angle { + margin: 0 auto; + height: 12px; + display: block; + position: absolute; + background: white; +} +.matrix.side .tactic .sidebar.expanded .angle svg { + fill: rgb(106.5, 114, 120.75); + vertical-align: baseline; +} +.matrix.side .tactic .sidebar.expanded .angle.top { + top: 0; +} +.matrix.side .tactic .sidebar.expanded .angle.bottom { + bottom: 0; +} +.matrix.flat .tactic { + margin-right: 5px; + width: 1%; + vertical-align: top; +} +.matrix.flat .tactic.name, .matrix.flat .tactic.count { + text-align: center; + font-size: 16px; +} +.matrix.flat .tactic.name { + font-weight: bold; +} +.matrix.flat .tactic.count { + font-size: 13px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; +} +.matrix.flat .tactic .subtechniques-row.hidden { + display: none; +} +.matrix.flat .tactic .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; +} +.matrix.flat .tactic .supertechnique td { + padding: 0; + vertical-align: top; +} +.matrix.flat .tactic .supertechnique td.sidebar.technique { + min-width: 8px; + width: 12px; + padding: 0; + background: rgb(106.5, 114, 120.75); + cursor: pointer; + vertical-align: middle; +} +.matrix.flat .tactic .supertechnique td.sidebar.technique .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: rgb(242.25, 242.25, 242.25); + width: 12px; + height: 9px; + font-size: 16px; + line-height: 12px; +} +.matrix.flat .tactic .supertechnique td.sidebar.subtechniques svg { + fill: rgb(106.5, 114, 120.75); + vertical-align: baseline; +} +.matrix.flat .tactic .supertechnique td.sidebar { + border-right: 2px solid rgb(106.5, 114, 120.75); +} +.matrix.flat .tactic .supertechnique td.technique { + outline: 1px solid rgb(106.5, 114, 120.75); + outline-offset: -1px; +} +.matrix.flat .tactic .more-icon { + transition: all ease 0.125s; + vertical-align: top; + transform: scale(0.5) rotate(-90deg); + width: 12px; + height: 12px; +} +.matrix.flat .tactic .more-icon.expanded { + transform: scale(0.5); +} +.matrix .technique-cell { + height: 100%; + display: flex; + align-items: center; + background-color: white; + font-size: 13px; + line-height: 14px; + outline: 1px solid transparent; + outline-offset: -1px; +} +.matrix .technique-cell a { + display: block; + width: 100%; + height: 100%; + padding: 7px 3px; +} +.matrix .technique-cell:not(.colored):not(.supertechniquecell) { + outline-color: rgb(223.125, 223.125, 223.125); +} + +.matrix-controls { + margin: auto; + width: 50%; + padding: 1rem; +} +.matrix-controls button { + border-color: rgb(223.125, 223.125, 223.125); + background: white; + color: #39434c; +} +.matrix-controls button:hover { + background: rgb(244.8, 244.8, 244.8); +} +.matrix-controls .layout-button:active { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.center-controls .matrix-controls .btn-toolbar { + justify-content: center; +} + +.btn-toolbar { + justify-content: center; +} + +.version-button.permalink .live { + display: none; +} +.version-button.live .permalink { + display: none; +} + +.version-table .table-break-row { + border-right-color: white; + border-left-color: white; + padding: 1rem 0; +} + +/*# sourceMappingURL=style-user.css.map */ diff --git a/attack-theme/static/style/_colors.scss b/attack-theme/static/style/_colors.scss deleted file mode 100644 index fcc9f2b2483..00000000000 --- a/attack-theme/static/style/_colors.scss +++ /dev/null @@ -1,108 +0,0 @@ -//$use_attack_theme : true; -// end search -// Do not remove previous lines - used to add/remove ATT&CK theme - -/*COLORS*/ - -// ATT&CK Brand colors -$attack-colors: ( - attack-orange: #c63f1f, - attack-blue: #062f4f, - attack-footer:#0b2338, - attack-active: #0156b3 -); -// User colors -$user-colors: ( - user-gray: #303435 -); - -/** - * Colors used across the website. - * For each color-pair: - * - "color" refers to the color itself - * - "on-color" refers to the most readable text-color to appear on top of the color. - * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to - * appear with inner content. For example, "link" is only intended to be used for link text, which inherently - * cannot have inner text. - */ -$colors: ( - primary: (color: if(variable-exists($name: use_attack_theme), map-get($attack-colors, attack-orange), map-get($user-colors, user-gray)), on-color: white), //used for header and some nav elements - secondary: (color: if(variable-exists($name: use_attack_theme), map-get($attack-colors, attack-blue), map-get($user-colors, user-gray)), on-color: white), //used for some buttons - footer: (color: if(variable-exists($name: use_attack_theme), map-get($attack-colors, attack-footer), map-get($user-colors, user-gray)), on-color: #87deff), //used for footer and some buttons - active: (color: if(variable-exists($name: use_attack_theme), map-get($attack-colors, attack-active), map-get($user-colors, user-gray)), on-color: #eaeaea), //used for active buttons and sidebar links - body: (color: white, on-color: #39434C), //primary page body - // body: (color: rgb(50, 50, 50), on-color: #cdcdcd), //example of a dark theme for the site - link: (color: #4f7cac), //hyperlinks - matrix-header: (color: gray, on-color: white), //color of matrix headers - - //query highlight in the search UI - search-highlight: (color: yellow, on-color: black), - deemphasis: (color: #303435) -); - -// accessor helper for $colors. Gets the color of the named pair -@function color($name) { - @return map-get(map-get($colors, $name), "color"); -} - -// given a color name, get an alternate version of the color, for patterning -// if the base color is dark, the alternate will be slightly lighter. -// if the base color is light, the alternate will be slightly darker. -// contrast, an optional argument, multiplies to create a more distint or similar color. >1 is more distant, <1 is more similar. -@function color-alternate($name, $contrast: 1) { - @return mix(invert(color($name)), color($name), $weight: $contrast * 5%); -} - -// accessor helper for $colors. Gets the on-color of the named pair -@function on-color($name) { - @return map-get(map-get($colors, $name), "on-color"); -} - -// given a color-name, get an emphasized version of the on-color. -// The emphasized on-color is less like the background color. -@function on-color-emphasis($name) { - @return mix(invert(color($name)), on-color($name)); -} -// given a color-name, get an deemphasized version of the on-color. -// The deemphasized on-color is more like the background color. -@function on-color-deemphasis($name) { - @return mix(color($name), on-color($name), 25%); -} - -// given a color name, compute a border color for the color -@function border-color($name) { - @return mix(invert(color($name)), color($name), 12.5%); - // @return rgba(invert(color($name)), 0.125); -} - -// given a color name, compute a border color for the color -@function background-color($name) { - @return mix(invert(color($name)), color($name), 12.5%); -} - -// escape the color. Note param is a color and not a color name: this is not an accessor to the color map above. -// replaces # with %23 in hex colors -// see https://codepen.io/gunnarbittersmann/pen/BoovjR for explanation of why we have to escape # for the background image -@function escape-color($color) { - $hex: ie-hex-str($color); - @return "%23"+ str-slice($string: #{$hex}, $start-at: 4); //skip #AA in #AARRGGBB -} - -// used in 404 and contact templates -.deemphasis { - color: on-color-deemphasis(body); -} - -// background color for the table matrix headers in the home page and the matrices page -.matrix-header { - background-color: color(matrix-header); - color: on-color(matrix-header); -} - -// background color for the table matrix in the home page -.bg-alternate { - background-color: color-alternate(body) !important; -} - - -/******/ diff --git a/attack-theme/static/style/_fonts.scss b/attack-theme/static/style/_fonts.scss deleted file mode 100644 index 7b392130206..00000000000 --- a/attack-theme/static/style/_fonts.scss +++ /dev/null @@ -1,50 +0,0 @@ -$fonts: ( - font-families: ( - "Roboto-Thin", - "Roboto-Light", - "Roboto-Regular", - "Roboto-Medium", - "Roboto-Bold", - "Roboto-Black", - "AlegreyaSans-Regular" - ), - font-weights: ( - 100, - 300, - 400, - 500, - 700, - 900, - 400 - ), - srcs: ( - "fonts/Roboto/Roboto-Thin.ttf", - "fonts/Roboto/Roboto-Light.ttf", - "fonts/Roboto/Roboto-Regular.ttf", - "fonts/Roboto/Roboto-Medium.ttf", - "fonts/Roboto/Roboto-Bold.ttf", - "fonts/Roboto/Roboto-Black.ttf", - "fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf" - ) -); - -/*FONTS*/ -@for $i from 1 to length(map-get($fonts, "font-families")) { - @font-face { - font-family: nth(map-get($fonts, "font-families"), $i); - font-style: normal; - font-weight: nth(map-get($fonts, "font-weights"), $i); - src: url(nth(map-get($fonts, "srcs"), $i)); - } -} - -.text-label { - text-transform: uppercase; - font-size: 14px; -} - -.text-label-small { - font-size: 12px; - color: color(deemphasis); - margin-top: -10px; -} \ No newline at end of file diff --git a/attack-theme/static/style/_footer.scss b/attack-theme/static/style/_footer.scss deleted file mode 100644 index 4d700db2adf..00000000000 --- a/attack-theme/static/style/_footer.scss +++ /dev/null @@ -1,106 +0,0 @@ -/*Footer styling*/ -.footer { - background-color: color(footer); - color: on-color(secondary); - padding: 1rem 3rem; - @include font("Roboto-Thin"); - - // place footer at the bottom - &.sticky-footer { - position: fixed; - bottom: 0; - left: 0; - right: 0; - } - - > .container-fluid { - padding-right: 0 !important; - padding-left: 0 !important; - } - - // space block between text block and buttons in footer - .footer-responsive-break { - display: none; - } - - // place buttons to the right of footer - .footer-float-right-responsive-brand { - float: right; - height: 100%; - display: flex; - align-items: center; - } - - // place button to the right of footer; vertically centered - .footer-float-right-responsive-centered { - display: flex; - justify-content: flex-end; - align-items:center; - } - - .footer-link-group { - display: flex; - flex-direction: column; - justify-content: center; - } - - .footer-link { - color: on-color(footer); - - &:hover { - //add some link color to this so that it resembles a link, but is still visible if normal link color is not visible on footer color - color: mix(on-color(footer), color(link)); - } - } -} - -.col { - .col-footer { - border-right: 1px solid; - } -} - -.p-footer { - padding-left: 25px; -} - -.btn-footer { - color: white; - padding: .375rem; -} - -.btn-footer:hover { - color: white; -} - -// phones and small tablets view -@media screen and (max-width: 47.9875rem) { - .footer { - // space block between text block and buttons in footer - .footer-responsive-break { - display: block !important; - } - - // extend buttons width to 100% in the footer - .footer-float-right-responsive-brand { - float: none !important; - } - - .footer-float-right-responsive-centered { - float: none !important; - display: block !important; - justify-content: none !important; - align-items: none !important; - } - } -} -/******/ - -//Hides the footer when the user tries to print out a page so that the page looks clean and only the relevant information is displayed - -@media print { - .footer { - visibility: hidden; - display: none; - } -} \ No newline at end of file diff --git a/attack-theme/static/style/_layouts.scss b/attack-theme/static/style/_layouts.scss deleted file mode 100644 index 7f67f004d8f..00000000000 --- a/attack-theme/static/style/_layouts.scss +++ /dev/null @@ -1,1516 +0,0 @@ -/*General styling*/ -html { height: 100%; } -body { - height: 100%; - background: color(body); - color: on-color(body); - @include font("Roboto-Regular"); - display: flex; - flex-direction: column; -} -//footer IE compatability -@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { - body { - height: auto; //fix footer bug - } -} -// .maincontent { //grow the page content to fill space before footer -// flex-grow: 1; -// } - -.attack-website-wrapper { - max-height: 100vh; - overflow-y: auto; -} - -h1, -h2, -h3, -h4, -h5 { - @include font("Roboto-Light"); -} - -strong { - @include font("Roboto-Bold"); -} - -.jumbotron { - padding: 0; - background: color(body); - color: on-color(body); - - code { - color: on-color-emphasis(body); - background-color: color-alternate(body, 2); - border-radius: 3px; - font-family: courier, monospace; - padding: 0 3px; - } -} - -a { - color: color(link); - - .anchor::before { - content: ""; - display: block; - margin-top: to-rem(-80); - position: absolute; - } -} - -.marker-none { - list-style-type: none; -} - -.overflow-x-auto { - overflow-x: auto; -} - -.fs-s { - font-size: small; -} - -.capec-card { - background: rgb(128,0,0); - - img { - margin: to-rem(8); - max-width: to-rem(160); - max-height: to-rem(55); - margin-left: auto; - margin-right: auto; - display: block; - } -} - -.maec-card { - background: #212121; - - img { - margin: to-rem(8); - max-width: to-rem(146); - margin-left: auto; - margin-right: auto; - display: block; - } -} - -.default-img-size { - width: 100%; - max-width: to-rem(1000); -} - -.mitre-logo-wtrans { - width: to-rem(144); - height: to-rem(66); -} - -// left column in the home page -.quick-links { - width: 100%; - text-align: center; - table-layout: fixed; - td { - padding: to-rem(5) 0; - } - tr+tr { - border-top: 1px solid border-color(body); - } -} -.row-main-page { - display: flex; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px; -} - -@media screen and (max-width: 47.9875rem) { - .row-main-page { - display: inline; - } -} - -// p for home page -.p-line { - p { - border-top: 0.0625rem solid #1c2226; - } -} - -// button style in the side navigation of MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE -.btn-default { - background: color(body); - border-color: on-color-deemphasis(body); - color: on-color(body); - &:hover { - color: on-color-emphasis(body); - } -} - -.website-button { - font-size: 16px; - border-radius: 5px; - cursor: pointer; - position: relative; - overflow: hidden; - font-family: Arial; - display: inline-flex; - align-items: center; - border-style: solid; -} - -.slide-icon-button { - border-style: none; - background: none; -} - -.slide-button { - @extend .website-button; - border-color: color(active); - color: #ffffff; - background: color(active); - padding: 6px 16px; - a & { text-decoration: none !important; } -} - -.slide-button-secondary { - @extend .website-button; - color: color(active); - background: #ffffff; - border-color: color(active); - padding: 6px 16px; - a & { text-decoration: none !important; } -} - -.slide-button-text { - position: relative; -} - -.slide-button-icon { - position: relative; - padding-left: 8px; -} - -.slide-button:hover { - background: color(secondary); - border-color: color(secondary); -} - -.slide-button-secondary:hover { - background: on-color(active); - border-color: color(secondary); - color: color(secondary); -} - -// used for data sources filter dropdown -.dropdown { - position: relative; - display: inline-block; -} - -.dropdown-content { - display: none; - position: absolute; - background-color: on-color(secondary); - min-width: 160px; - box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); -} - -.dropdown:hover .dropdown-content { - display: block; -} - -// placeholder for base style of all navy colored buttons -%button-style { - color: on-color(secondary); - border-color: to-rem(1) solid color(secondary); -} - -// navy buttons are in the home page and in MATRICES -.btn-navy { - @extend %button-style; - background-color: color(secondary); - color: on-color(secondary); - - &:hover { - // Extending placeholder 'button-style' is necessary to keep on-color white. Else, the on-color will change to the tag on-color when hovering the button. - @extend %button-style; - background-color: scale-color(color(secondary), $lightness: 5%); - background-image: none; - } -} - -// Style for changelog markdown section -.markdown-body { - - h1:not(:first-child) { - padding-top: 2rem; - } - h1 { - padding-bottom: rem(0.5); - font-size: rem(1.5); - } - h2 { - font-size: rem(1.0); - } - h3 { - font-size: rem(0.8); - } -} -/******/ - -/*Table styling*/ -.table, .blog-post table, .changelog table { - empty-cells: hide; - - td { - p:last-child { - margin-bottom: 0; - } - padding: .75rem; - vertical-align: top; - } - th { - padding: rem(0.3); - vertical-align: top; - font-size: rem(0.6); - } - - .active { - color: color(primary); - } -} - -.blog-post table { - margin-bottom: 1.5rem; -} - -// background color for tables in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE -.table-alternate, .blog-post table, .changelog table { - @extend .bg-alternate; - tbody { - background: color(body); - color: on-color(body); - } -} - -// table for techniques -.table-techniques { - - thead tr { - background: #f2f2f2; - border-bottom: 2px solid #dee2e6; - } - table { - border-collapse: collapse; - } - td { - vertical-align: top; - padding: 10px; - border: 1px solid #dfdfdf; - } - tr:last-child { - border-bottom: 1px solid #dfdfdf;; - } - .sub.technique { - border-left: none; - } - .technique td:first-child { - border-bottom: none; - } - .sub.technique td:first-child { - width: 5ex; - border-top: none; border-bottom: none; - } - .sub.technique td:not(:nth-child(4)) { - color: #4f7cac; - } - .technique:not(.sub) td:not(:nth-child(3)) { - color: #4f7cac; - } -} - -// Styling for techniques used table -.techniques-used { - table { - border-collapse: collapse; - } - td { - vertical-align: top; - padding: 10px; - border: 1px solid #dfdfdf; - } - tr:last-child { - border-bottom: 1px solid #dfdfdf;; - } - .sub.technique { - border-left: none; - } - .technique td:first-child { - border-bottom: none; - } - .technique td:nth-child(2) { - border-bottom: none; - } - .sub.technique:not(.noparent) td:nth-child(2) { - width: 5ex; - border-top: none; - border-bottom: none; - } - .sub.technique:not(.noparent) td:first-child { - width: 5ex; - border-top: none; border-bottom: none; - } -} - -.techniques-used.background { - thead tr { - background: #f2f2f2; - border-bottom: 2px solid #dee2e6; - } -} - -// .table td.border { -// border-color: on-color-deemphasis(body); -// } - -// Styling for datasources table -.datasources-table { - table { - border-collapse: collapse; - } - thead tr { - background: #f2f2f2; - border-bottom: 2px solid #dee2e6; - } - td { - vertical-align: top; - padding: 10px; - border: 1px solid #dfdfdf; - } - tr:last-child { - border-bottom: 1px solid #dfdfdf;; - } - .datacomponent.datasource { - border-left: none; - } - .datasource td:first-child { - border-bottom: none; - } - .datasource td:nth-child(2) { - border-bottom: none; - } - .datacomponent.datasource:not(.noparent) td:nth-child(2) { - width: 5ex; - border-top: none; - border-bottom: none; - } - .datacomponent.datasource:not(.noparent) td:first-child { - width: 5ex; - border-top: none; border-bottom: none; - } - - .nowrap { - white-space:nowrap; - } -} - -.tables-mobile { - overflow-y: auto; -} - -.table-bordered, .blog-post table, .changelog table { - &, & td, & th { - border: 1px solid border-color(body); - } - th { - border-bottom: 2px solid border-color(body) !important; - } -} - -// border style for empty cells in the home page matrix and in MATRICES -@mixin no-border($property) { - #{$property}: none !important; -} - -// vertically aligned text -@mixin align($text, $vertical) { - text-align: $text !important; - vertical-align: $vertical !important; -} - -// matrix style in home page and in MATRICES -.table-matrix { - @include no-border(border); - - thead th { - @include align(center, middle); - border: to-rem(1) solid border-color(body) !important; - } - - td, - th { - @include align(center, middle); - @include no-border(border-top); - padding: to-rem(2) !important; - font-size: to-rem(12) !important; - - &.border { - border: to-rem(1) solid border-color(body) !important; - } - - &.no-border { - @include no-border(border); - } - } - - td { - background: color(body); - color: on-color(body); - } -} - -// table expands/contracts depending on the cell's content -%table-nowrap { - white-space: nowrap; - width: 1%; -} - -// mitigation tables -.table-mitigations { - @extend %table-nowrap; - - th, - td { - @extend %table-nowrap; - } -} - - - -// number of table rows in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE -.div-count { - margin-top: auto; - margin-bottom: 0 -} - -.table-object-count { - display: flex; - justify-content: flex-end; -} - -// links in header row of matrices in the home page matrix and in MATRICES -.matrix-tactics-url { - color: on-color(primary); - - &:visited, - &:hover, - &:active { - color: on-color(primary); - } -} -/******/ - -/*BANNER*/ -.banner-message { - padding: to-rem(5) 0; - text-align: center; - background-color: color-alternate(body, 2); -} - -// basic banner -.version-banner { - @extend .banner-message; -} -/******/ - -/*IMG/SVG ICON in BANNER*/ -.icon-inline { - display: inline-flex; - align-self: center; - - svg, - img { - height: rem(0.7); - width: rem(0.7); - fill: currentColor; - top: rem(-0.175); - position: relative; - } -} -/******/ - -/*Pre-block in SIGHTINGS*/ -// style for inline code blocks -pre { - color: on-color(body); - background-color: color-alternate(body, 3); - border-radius: 5px; - padding: 1rem; -} -code { - color: #c63e1f; -} -/******/ - -/*CARDS*/ -// cards are used in the General Information, Staying Informed, and Related Projects page, and in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE -.card { - background: color(body); - color: on-color(body); - border-color: border-color(body); -} - -.button-group { - display: flex; - justify-content: end; - a.button + a.button { - margin-left: 22px; - } - button { - justify-content: center; - width: 100%; - } - a.w-40 { width: 40%; } -} - -.card-filter { - width: 20%; - top: 9.3rem; - float: right; - background: on-color(active); -} - -@media screen and (max-width: 90.62rem) { - .card-filter { - display: contents; - } -} - -.card-presentation { - margin-bottom: 30px; -} - -.card-attackcon { - width: 100%; -} - -.card-data { - margin-bottom: rem(0.2); -} - -.card-header { - color: on-color(body); - background: rgba(on-color(body), 0.03); - border-bottom-color: border-color(body); -} - -a.partial-underline { - text-decoration: none; - .hover-line { - text-decoration: underline; - } -} - -.contact-card { - border-radius: .75em; - overflow: hidden; - .card-footer { - padding: 0 1.25rem 1.25rem; - &.button-group { - display: flex; - justify-content: center; - flex-wrap: wrap; - gap: 12px; - } - } - .card-footer-no-button { - padding: 0.5rem 1.25rem; - min-height: 4rem; - max-height: fit-content; - } - .card-header { - padding: 1.25rem 1.25rem 0; - &.background { - background: color(footer); - color: white; - padding-bottom: 1.25rem; - } - } - .card-header, .card-footer { - &.no-background { - background: color(body); - color: on-color(body); - border: unset; - } - } - .card-body { - p { - margin: 0; - } - &.background { - background: on-color(active); - } - } -} - -.card-body { - // Remove extra whitespace from tables inside of cards - // Source: https://github.com/philipnewcomer/bootstrap4-card-tables/blob/master/src/bootstrap4-card-tables.scss - > .table { - border-right: 0; - border-left: 0; - margin-bottom: 0; - - &:last-child { - border-bottom: 0; - } - - &:not(.table-sm) th, - &:not(.table-sm) td { - padding: 0.75rem 1.25rem; - } - - td:first-child, - th:first-child { - border-left: 0; - } - - td:last-child, - th:last-child { - border-right: 0; - } - - tr:first-child td, - tr:first-child th { - border-top: 0; - } - - tr:last-child td { - border-bottom: 0; - } - } - - .card-header + .table { - border-top: 0; - } -} -// remove botton margin from last item in the card -.card-data:last-of-type { - margin-bottom: 0; -} - -.card-title { - font-size: rem(0.8); - color: on-color-emphasis(body); -} - -.contact-card-title { - font-size: 1.1rem; - font-weight: bold; -} - -.card-title-icon { - float: right; - color: color(active); -} -/******/ - -/*TWITTER*/ -// twitter container in the home page -.attack-box { - width: to-rem(352); - max-width: 100%; - height: to-rem(432); - margin: 0 auto; - border: 3px solid #dfdfdf; - padding: 3px; - display: flex; - flex-direction: column; - iframe { - border: 1px solid border-color(body) !important; - border-radius: .25rem; - } -} - -/******/ - -/*BREADCRUMBS*/ -.breadcrumb { - font-size: 90%; - background-color: color(body); - max-width: 1140px; - padding: 0 15px; - - .breadcrumb-item + .breadcrumb-item::before { - content: ">"; - color: on-color-deemphasis(body); - } -} -/******/ - -.nestedlist { - counter-reset: item; -} - -.nestedlist-item { - display: block; -} - -.nestedlist-item::before { - content: counters(item, ".") ". "; - counter-increment: item; -} - -.danger-card { - .card-header { - background: color(primary); - color: on-color(primary); - } - border-color: color(primary); -} -/******/ - -/*ATT&CKCON*/ -// collapsible expansion panels - light -.bg-accord-light { - color: on-color(body); - background-color: color-alternate(body); -} - -// collapsible expansion panels - dark -.bg-accord-dark { - color: on-color(body); - background-color: color-alternate(body, 3); -} -/******/ - -/*CONTRIBUTE*/ -.contribution-headers { - @include font("Roboto-Regular"); -} - -.usa-card-group { - display: flex; - flex-direction: row; -} - -.usa-card__header { - @include font("Roboto-Regular"); - color: color(body); - background: color(secondary); - border-bottom-color: border-color(body); - border-radius: .3rem .3rem 0 0; -} - - -/*CONTRIBUTE Examples*/ -.new-examples { - padding: to-rem(10) to-rem(10) 0 to-rem(10); - width: 100%; - - &.second-example { - margin-top: to-rem(10); - margin-bottom: to-rem(20); - } - - .example-container { - padding: to-rem(15); - - .examples-div { - display: flex; - - .margin-contribute-a { - margin-left: to-rem(25); - } - - .margin-contribute-b { - margin-left: to-rem(183); - } - } - - .examples-p { - margin-left: to-rem(5); - margin-bottom: to-rem(10); - word-break: break-word; - } - - .nested-examples-div { - padding-left: to-rem(50); - } - - .example-fields { - @include font("Roboto-Bold"); - - + ul { - padding-left: to-rem(100); - } - } - } -} -/******/ - - -/*CONTRIBUTORS*/ -.scrollable-box { - width: 100%; - height: 500px; - overflow: auto; - // border: 1px solid black; /* just to show the box */ - padding: to-rem(15); - background-color: color-alternate(body); - border-radius: to-rem(3); - } -/******/ - -img.yt-core-image { - width: 100%; -} -.iframe-width { - width: 500px; - height: 275px; -} - -@media screen and (max-width: 47.9875rem) { - .iframe-width { - width: 100%; - height: 140px; - } -} - -/* No transition */ -.notransition:after { - transition: none !important; -} - -/*FAQ*/ -.faq { - .faq-section { - padding-bottom: 2rem; - } - .faq-question { - padding: 6px 0; - } - .relevant-links { - margin-bottom: 1rem; - border-radius: 3px; - .faq-link ~ .faq-link::before { - content: ', '; - } - } -} -/******/ - -@mixin collapsible($direction) { - display: flex; - flex-direction: row; - - :first-child { - cursor: pointer; - display: inline-block; - flex-grow: 1; - } - - &:#{$direction}, &::#{$direction} { - content: ""; - cursor: pointer; - width: to-rem(24); - height: to-rem(24); - background-repeat: no-repeat; - display: inline-block; - vertical-align: top; - background-position: center; - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='#{escape-color(on-color(body))}' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); - z-index: 1; - transition: all 0.2s ease; - } - - - @if $direction == "before" { - &.collapsed:#{$direction}, &.collapsed::#{$direction} { - transform: rotate(-90deg); - } - } @else { - &:not(.collapsed):#{$direction}, &:not(.collapsed)::#{$direction} { - transform: rotate(-180deg); - } - } -} - -.attackcon-columns { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: flex-start; -} -@media screen and (max-width: 47.9875rem) { - .attackcon-columns { - flex-direction: column; - } -} - -/* Ensure the sponsors block is below and not affected by the top image */ - -/*Card Blocks*/ -// container of groups of cards -.card-block { - // style of card headers in collapsable cards in Getting Started and FAQ - .card-header { - - h5 { - @include font("Roboto-Regular"); - } - @include collapsible("after"); - } - - // style of card titles in Related Projects - .card-title { - display: inline-block; - flex-grow: 1; - @include font("Roboto-Regular"); - } -} -/******/ - -/*GENERAL INFORMATION*/ -.general-info { - // cards with image in General Information page - .card-img-top { - width: 100%; - height: 15vw; - object-fit: cover; - } - - .graphics .card-header { - flex-grow: 1; - } - - // show entire timeline - .showmore-btn { - display: block !important; - text-align: center; - - &.show { - display: none !important; - } - } -} -/******/ - -/*GETTING STARTED*/ -// move video to an item in the getting started list when in mobile or tablet view -.getting-started { - ul:not(.col) { - padding: 0 to-rem(15); - margin-left: to-rem(15); - } - .getting-started-content { - width:75%; - } - @media screen and (max-width: 90.62rem) { - .getting-started-content { - width:100%; - } - } - .getting-started-icon { - color: color(primary); - } - - .video-li { - /* don't display the video in the list itself except in mobile layout */ - display: none; - } - - @media screen and (max-width: 47.9875rem) { - .row ul.col { - margin-left: to-rem(30); - } - - .video-col { - display: none; - } - - .video-li { - display: list-item; - } - } -} - -.jump-to-section{ - position: -webkit-sticky; - position: sticky; - top: 14rem; - word-wrap: normal; - border-radius: 0.75em; -} -/******/ - -/*Timeline in GENERAL INFORMATION*/ -// base style of timeline -@mixin timeline($bg, $w, $h, $z) { - background: $bg; - position: absolute; - width: $w; - height: $h; - z-index: $z; - content: ""; -} - -.timeline { - $timeline-size: 20px; - $timeline-padding: 10px; - $timeline-hidden-height: 300px; - - overflow-y: hidden; - position: relative; - list-style-type: none; - padding-left: 0; - - // left line - &:before { - @include timeline(on-color-deemphasis(body), to-rem(1), 100%, 2); - left: (0.5 * $timeline-size) + $timeline-padding; - } - - &.collapse { - display: block !important; - } - - // hidden section of the timeline - &:not(.show) { - height: $timeline-hidden-height; - - // creating the 'faded' effect at the of the timeline when a section of the timelien is hidden - &:after { - @include timeline( - linear-gradient(to bottom, transparent, color(body)), - 100%, - $timeline-hidden-height / 4, - 4 - ); - bottom: 0; - pointer-events: none; //allow the user to click-through the overlay - } - } - - // milestones in timeline - .timeline-card { - margin: $timeline-size 0; - padding-left: $timeline-size + (2 * $timeline-padding); - - // roundel on the line indicating a milestone - &:before { - @include timeline(color(body), $timeline-size, $timeline-size, 3); - display: inline-block; - border-radius: 50%; - border: to-rem(2) solid on-color-deemphasis(body); - left: $timeline-padding; - } - - // title style of the milestone - .timeline-card-header { - width: 100%; - display: flex; - flex-direction: row; - clear: both; - - .title { - display: inline-block; - flex-grow: 1; - font-size: rem(0.95); - } - - .date { - display: inline-block; - font-size: rem(0.95); - text-align: right; - white-space: nowrap; - padding-left: to-rem(10); - } - } - - // content of each milestone - .timeline-card-body { - padding-top: to-rem(5); - } - } -} -/******/ - -/*Description formatting in TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE*/ -.description-body { - line-height: rem(1.5); -} - -.description-body.in-table { - padding: 0.75rem 1.25rem; - - p { - margin-bottom: 0; - } -} - -.description-body.card-description { - padding: 0.3rem 0 0 0; - - p { - margin-bottom: 0; - } -} -/******/ - -/*External link icon*/ -.external-icon { - width: to-rem(15); - margin-top: to-rem(-5); -} -/******/ - -/*ATTA&K Logo*/ -// attack logo in the home page -.attack-logo-bold { - width: 60%; -} - -// attack logo - menu -.attack-logo { - // vertically center - margin: 8px 0; - display: block; - height: 24px; -} - -/******/ - -/* anchor tag to bypass navbar */ -.anchor { - display: block; - position: relative; - top: to-rem(-66); - visibility: hidden; -} - -.section-view { - .anchor-section { - position: -webkit-sticky; - position: sticky; - top: 4.125rem; - background: color(body); - z-index: 100; - margin-bottom: 0; - } - - p { - margin-bottom: 0; - padding-bottom: 0.5rem; - } - - // don't show in mobile view - .section-mobile-view { - display: none; - } - - // show in desktop view - .section-desktop-view { - display: block; - } - - // collapsed view for phones and small tablets - @media screen and (max-width: 74.938rem) { - // show collapsed side navigation (mobile view) - .section-mobile-view { - display: block; - } - - // don't show side navigation in desktop view - .section-desktop-view { - display: none; - } - } - - .section-shadow { - border-bottom: 1px solid #dfdfdf !important; - } - - table { - margin-top: -1px; - } -} - -/******/ - -/******/ - -// how to display the sidebar -div#sidebars { - display: contents -} - -/*Plus/Minus expand icons*/ -// used in the expandable list items in the side navigation and in the expandable gray blocks in ATT&CKCON -.expand-icon { - font-size: 5%; - color: on-color(body); - margin-top: to-rem(7); -} -/******/ - -/* attackcon page */ -.attackcons { - border-top-width: 0px; - .sponsors{ - flex: 1; - padding-left: 25px; - } - .p-description{ - width: 90%; - } - .sponsors-block { - background: on-color(active); - text-align: center; - display: flex; - justify-content: space-evenly; - flex-wrap: wrap; - flex-direction: column; - width: 200%; - .img-container { - margin: 10px; - flex: 1 1 20%; - box-sizing: border-box; - img { - width: 100%; - margin: auto; - height: auto; - } - } - } - @media screen and (max-width: 47.9875rem) { - .sponsors-block { - width: 100%; - flex-direction: row; - } - } -} - -.support-box { - background-color: color-alternate(body, 2); - padding: 1.5em; - border-radius: .75em; - width: fit-content; -} - -.sponsor-list { - gap: 1.5em; -} - -.sponsor-square { - padding: 0px !important; - height: 150px; - display: flex; - a { - display: contents; - } - img.sponsor-logo { - background-color: color(body); - border-radius: 6px; - object-fit: contain; - object-position: center; - } -} -/******/ - -/* training pages */ -.training { - .exercise { - background: color-alternate(body); - } -} -.card-training { - margin-bottom: 30px; - width: 100%; -} -.training-card-body { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: left; - } - .training-text-container { - flex: 1; - margin-right: 20px; - } - .training-header { - display: flex; - justify-content: space-between; - } - .resources-container { - display: flex; - flex-wrap: wrap; - flex-direction: row; - gap: 10px; - } - .resource { - flex: 1; - background-color: on-color(active); - padding: 10px; - box-sizing: border-box; - } - .resource-links { - list-style-type: none; - margin-top: 5px; - padding: 0px !important; - margin-left: 0px !important; - } - .resource-links li { - margin-bottom: 5px; - } - .resource-links a { - text-decoration: underline; - } -/******/ - -// Decorative panels used for working-with-attack page - -.decorative-panels { - .decorative-panel { - // display: block; - .decorative-panel-header, .decorative-panel-body { padding: 10px; } - .decorative-panel-header { - h3, h4, .btn { - margin-bottom: 16px; - } - } - - .decorative-panel-body.show { - border-top: 1px solid border-color(body); - } - - - & + .decorative-panel { - margin-top: 25px; - } - - &:nth-of-type(even) { - border-radius: 8px; - background: color-alternate(body); - } - } - @media screen and (max-width: 47.9875rem) { - .row { - display: block; - &.collapse:not(.show) { - display: none; - } - } - } -} - -.working-with-attack { - .g-24 { gap: 24px; } - .g-12 { gap: 12px; } - .row.panels { - margin: 0; - } - img { - border-radius: .75em; - } - img.scale { - object-fit: cover; - object-position: left top; - border-radius: unset !important; - border: 1px solid border-color(body); - } - .panel { - padding: 0; - border: 1px solid border-color(body); - border-radius: .75em; - max-width: 100%; - } - img + .panel-body { - border-top: 1px solid border-color(body); - } - .panel-body { - p { - margin: 24px 0; - overflow: scroll; - } - &.fixed-height { - height: 30vh; - } - } - ul { - margin-bottom: 0; - } - @media screen and (max-width: 61.938rem) { - .panel-body { - &.fixed-height { - min-height: 40vh; - max-height: fit-content; - } - } - } - .table-of-contents { - position: static; - float: none; - width: 25%; - } -} - -.tip-box { - background: on-color(active); - padding: 1rem; -} - -/*Card Blocks*/ -// container of groups of cards -.expand-panel { - .card-block { - // style of card headers in collapsable cards in Getting Started and FAQ - .card-header { - - h5 { - @include font("Roboto-Regular"); - } - @include collapsible("after"); - - &:not(:last-child) { - border-bottom: none; - } - } - - // style of card titles in Related Projects - .card-title { - display: inline-block; - flex-grow: 1; - @include font("Roboto-Regular"); - } - - .first-card { - border-bottom: none; - border-radius: .25rem .25rem 0 0; - } - - .last-card { - border-radius: 0 0 .25rem .25rem; - } - - .middle-card { - border-bottom: none; - border-radius: 0; - } - } -} -/******/ - - -// Institutes page breaks when the user tries to print so that all the content gets printed out, not just the first page (if there is more than one page's -// worth of content) -@media print { - * { - overflow: visible !important; - break-before: always !important; - page-break-inside: avoid !important; - } -} \ No newline at end of file diff --git a/attack-theme/static/style/_matrix.scss b/attack-theme/static/style/_matrix.scss deleted file mode 100644 index 13b7e1cc600..00000000000 --- a/attack-theme/static/style/_matrix.scss +++ /dev/null @@ -1,334 +0,0 @@ -@import "./colors"; - -.matrix-container { - border: 1px solid border-color(body); - // border-top-width: 0; - background: color(body); - &+.matrix-container { - margin-top: to-rem(16); - } - - .matrix-border { - border-left: 1px solid border-color(body); - padding-left: 0.5rem; - display: flex; - justify-content: center; - align-items:center; - } - - .matrix-title { - border-bottom: 1px solid border-color(body); - margin-bottom: 1rem; - padding-bottom: 0.5rem; - } - .scroll-indicator-group { - white-space: nowrap; - display: flex; - .matrix-scroll-box { - flex-grow: 1; - display: inline-block; - } - .scroll-indicator { - width: 0px; - display: inline-block; - position: relative; - .cover { - width: 50px; - height: 100%; - position: absolute; - pointer-events: none; // doesn't prevent usage of things under the cover - } - //safari doesn't really work with transparent in gradients, but making something almost transparent works - $safari-transparent: rgba(255,255,255,0.001); - &.right { - .cover { right: 0; } - &.show .cover { - background: linear-gradient(to right, $safari-transparent, color(body)); - } - } - &.left { - .cover { left: 0; } - &.show .cover { - background: linear-gradient(to left, $safari-transparent, color(body)); - } - } - } - } -} - - - -$sizeunit: 14px; - -.matrix { - white-space: normal; - line-height: $sizeunit; - &.side { - // thead { - // background-color: color(matrix-header); - // color: on-color(matrix-header); - // } - // white-space: nowrap; - .tactic { - &:first-child { - padding: 2px 5px 2px 2px; - } - &:last-child { - padding: 2px 2px 2px 5px; - } - padding: 2px 5px; - width: 1%; - vertical-align: top; - // &:not(:last-child):not(.name, .count) { - // border-right: 1px solid border-color(body); - // } - &:hover:not(.name, .count) { - background: background-color(body); - // Apply background color to child when hovering - .sidebar.expanded .angle { - background: background-color(body); - } - } - &.name, &.count { - text-align: center; - font-size: $sizeunit + 2px; - } - &.name { - font-weight: bold; - } - &.count { - font-size: $sizeunit - 1px; - border-bottom: 1px solid black; - padding-bottom: 5px; - margin-bottom: 5px; - } - .techniques-table { - border-collapse: collapse; - width: 100%; - tr, td { - padding: 0; - } - tr { - height: 1px; - } - } - - .supertechnique { - border-collapse: collapse; - width: 100%; - padding: 0; - margin: 0; - - td { - padding: 0; - vertical-align: top; - - &.technique { - outline: 1px solid on-color-deemphasis(body); - outline-offset: -1px; - } - } - } - .subtechniques { - &.hidden { - display: none; - } - - // expand to entire height of row if it's smaller than supertechnique - display: flex; - flex-direction: column; - height: 100%; - - margin-left: -1px; - border-left: 2px solid on-color-deemphasis(body); - outline: 1px solid on-color-deemphasis(body); - outline-offset: -1px; - white-space: nowrap; - vertical-align: top; - - .subtechnique { - height: 100%; - flex-grow: 1; - } - } - - .handle { - text-align: center; - vertical-align: middle; - transform: rotate(-90deg); - color: color-alternate(body); - - width: 12px; height: 12px; - - font-size: 16px; - line-height: 12px; - - - } - - .sidebar { - min-width: 8px; - width: 12px; - - padding: 0; - background: on-color-deemphasis(body); - cursor: pointer; - position:relative; - vertical-align: middle; - .angle { - display: none; - } - &.expanded .angle { - margin: 0 auto; // internet explorer and edge compatability requires this for some reason - height: 12px; - display:block; - position: absolute; - background: color(body); - svg { - fill: on-color-deemphasis(body); - vertical-align: baseline; - } - &.top { - top: 0px; - } - &.bottom { - bottom: 0px; - } - } - } - } - } - &.flat { - .tactic { - margin-right: 5px; - width: 1%; - vertical-align: top; - - &.name, &.count { - text-align: center; - font-size: $sizeunit + 2px; - } - &.name { - font-weight: bold; - } - &.count { - font-size: $sizeunit - 1px; - border-bottom: 1px solid black; - padding-bottom: 5px; - margin-bottom: 5px; - } - - .subtechniques-row.hidden { - display: none; - } - .supertechnique { - border-collapse: collapse; - width: 100%; - padding: 0; - margin: 0; - td { - padding: 0; - vertical-align: top; - &.sidebar.technique { - min-width: 8px; - width: 12px; - padding: 0; - background: on-color-deemphasis(body); - cursor: pointer; - vertical-align: middle; - .handle { - text-align: center; - vertical-align: middle; - transform: rotate(-90deg); - color: color-alternate(body); - - width: 12px; height: 9px; - - font-size: 16px; - line-height: 12px; - } - } - &.sidebar.subtechniques { - svg { - fill: on-color-deemphasis(body); - vertical-align: baseline; - } - } - &.sidebar { - border-right: 2px solid on-color-deemphasis(body); - } - &.technique { - outline: 1px solid on-color-deemphasis(body); - outline-offset: -1px; - } - } - } - - .more-icon { - transition: all ease 0.125s; - vertical-align: top; - // TODO icon - transform: scale(0.5) rotate(-90deg); - width: 12px; height: 12px; - &.expanded { - transform: scale(0.5); - } - } - } - } - .technique-cell { - height: 100%; - display: flex; - align-items: center; - background-color: color(body); - - font-size: $sizeunit - 1px; - line-height: $sizeunit; - - a { - display: block; - width: 100%; - height: 100%; - padding: $sizeunit /2 3px; - } - - outline: 1px solid transparent; - outline-offset: -1px; - &:not(.colored):not(.supertechniquecell) { outline-color: border-color(body); } - } -} - - - -.matrix-controls { - margin: auto; - width: 50%; - padding: 1rem; - - button { - border-color: border-color(body); - background: color(body); - color: on-color(body); - &:hover { - background: color-alternate(body, 0.8); - } - } - .layout-button { - // active layout button should not use the .active style - // to prevent it looking like there's two active items in - // the menu when the user is clicking. Instead use the - // bootstrap hover style. - &:active { - color: #16181b; - text-decoration: none; - background-color: #f8f9fa; - } - } -} -.center-controls .matrix-controls .btn-toolbar { - justify-content: center; -} - -.btn-toolbar { - justify-content: center; -} \ No newline at end of file diff --git a/attack-theme/static/style/_nav.scss b/attack-theme/static/style/_nav.scss deleted file mode 100644 index 312388d8b26..00000000000 --- a/attack-theme/static/style/_nav.scss +++ /dev/null @@ -1,342 +0,0 @@ -@import "_layouts.scss"; - -/*Navigation styling*/ -// base style for nav-links in the top navigation bar (across the web site) -%ele-state { - border: to-rem(1) solid transparent; - border-top-left-radius: rem(-0.05); - border-top-right-radius: rem(-0.05); - text-decoration: underline; -} - -/*Top NAVIGATION*/ // top navigation bar across the web site -.navbar { - background-color: color(primary); - z-index: 1; - - // ATT&CK brand in the top navigation bar - .navbar-brand { - font-size: rem(1.7); - } - - .nav-tabs { - border-bottom: none; - - // list items - .nav-link { - color: on-color(primary); - @include font("Roboto-Light"); - - &:focus { - color: on-color(primary); - @extend %ele-state; - } - - &:hover:not(.active) { - color: on-color(primary); - background-color: transparent; - @extend %ele-state; - } - - &.active { - color: on-color(primary); - background-color: color(primary); - @extend %ele-state; - } - } - - .nav-item.show .nav-link { - color: on-color(primary); - background-color: color(primary); - border-color: transparent; - } - } - .search-button { - padding: .3rem to-rem(16); - font-size: 1rem; - border: to-rem(1) solid on-color(primary); - border-radius: .25rem; - color: on-color(primary); - line-height: to-rem(24); - - - opacity: 0.8; - - &:not(:has(.error-icon)):hover { opacity: 1;} - - .icon-button { - content: ""; - width: to-rem(24); - height: to-rem(24); - background-repeat: no-repeat; - display: inline-block; - vertical-align: middle; - background-position: center; - z-index: 1; - transition: all 0.2s ease; - } - - .search-icon { - cursor: pointer; - background-image: url("data:image/svg+xml;charset=utf8,%3Csvg fill='#{escape-color(on-color(primary))}' xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); - } - - .error-icon { - cursor: default; - background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg fill='#{escape-color(on-color(primary))}' xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 96 960 960' width='24'%3e%3cpath d='M479.982 776q14.018 0 23.518-9.482 9.5-9.483 9.5-23.5 0-14.018-9.482-23.518-9.483-9.5-23.5-9.5-14.018 0-23.518 9.482-9.5 9.483-9.5 23.5 0 14.018 9.482 23.518 9.483 9.5 23.5 9.5ZM453 623h60V370h-60v253Zm27.266 353q-82.734 0-155.5-31.5t-127.266-86q-54.5-54.5-86-127.341Q80 658.319 80 575.5q0-82.819 31.5-155.659Q143 347 197.5 293t127.341-85.5Q397.681 176 480.5 176q82.819 0 155.659 31.5Q709 239 763 293t85.5 127Q880 493 880 575.734q0 82.734-31.5 155.5T763 858.316q-54 54.316-127 86Q563 976 480.266 976Zm.234-60Q622 916 721 816.5t99-241Q820 434 721.188 335 622.375 236 480 236q-141 0-240.5 98.812Q140 433.625 140 576q0 141 99.5 240.5t241 99.5Zm-.5-340Z'/%3e%3c/svg%3e"); - } - } -} -/******/ - -.nav, -.faq { - - /*NAVIGATION Dropdown*/ // dropdowns in top navigation bar - .dropdown:hover > .dropdown-menu { - display: block; - } - - .dropdown-menu { - background-color: color(primary); - - .dropdown-item { - color: on-color(primary); - - &:hover, - &:focus { - color: on-color(primary); - text-decoration: underline; - background-color: transparent; - } - } - } - /******/ - - /*Side NAVIGATION*/ - // bold list name for MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE - .heading { - font-size: rem(1.3); - color: on-color-deemphasis(body); - letter-spacing: to-rem(3); - pointer-events: none; - @media screen and (max-width: 74.938rem) { - pointer-events: all; - } - } - - .heading.collapsed .fa-chevron-up, - .heading .fa-chevron-down { - display: none; - } - - .heading.collapsed .fa-chevron-down, - .heading .fa-chevron-up { - display: inline-block; - } - - i.fa-solid { - visibility: hidden; - display: none; - @media screen and (max-width: 74.938rem) { - visibility: visible; - display: contents; - } - } - - .br-mobile { - display: none; - @media screen and (max-width: 74.938rem) { - display: inline-block; - } - } - - - // dropdown of the button in the side navigation. This button is in MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE - .heading-dropdown { - font-size: rem(0.9); - color: color(secondary); - letter-spacing: to-rem(3); - } - - border-color: border-color(body) !important; - - // smaller fon-size and letter spacin for phones and small tablets - @media screen and (max-width: 90.62rem) { - // bold list name for MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE - .heading { - font-size: rem(0.9); - color: on-color-deemphasis(body); - letter-spacing: to-rem(3); - } - - // dropdown of the button in the side navigation. This button is in MATRICES, TACTICS, TECHNIQUES, MITIGATIONS, GROUPS, and SOFTWARE - .heading-dropdown { - font-size: rem(0.7); - color: on-color(body); - letter-spacing: to-rem(1); - } - } - - /******/ - - // list items - .nav-link { - font-size: rem(0.7); - padding: rem(0) rem(0.7); - color: on-color-deemphasis(body); - - &.expand-title { - font-size: rem(0.8); - color: on-color(body); - } - - &.side { - padding: rem(0) rem(0); - word-break: break-word; - - &:hover { - background-color: color(primary); - color: on-color(primary); - } - - &.active { - color: color(primary); - background-color: color-alternate(body); - border-right: to-rem(3) solid color(primary); - } - } - } -} -/******/ - -.resizer { - width: 2px; - top: 0; - right: 0; - cursor: col-resize; - height: 100%; - position: absolute; - background-color: #dfdfdf; - } - - .data-sources-menu { - padding-top: 15px; - } - -.sidebar.nav { - // max-height: 60vh; - overflow-y: auto; - z-index: 0; //behind the header - min-width: min-content; - max-width: 20vw; - - // Remove overflow and sticky position for mobile view - @media screen and (max-width: 74.938rem) { - position: static; - min-width: fit-content; - } - - .sidenav-wrapper { - @media screen and (max-width: 74.938rem) { - display: block; - } - height: 100%; - display: flex; - flex-direction: column; - padding-right: 5px; - padding-left: 1rem; - .heading { - border-bottom: 1px solid color-alternate(body); - flex: 0 1 0; - } - .checkbox-div { - border-bottom: 1px solid color-alternate(body); - flex: 0 1 0; - } - .sidenav-list { - flex: 1 0 0; - overflow-y: auto; - .sidenav { - width: 100%; - word-break: break-word; - font-size: rem(0.8); - .sidenav-head { - display: flex; - flex-direction: row; - a, .expand-button { //any direct child - cursor: pointer; - color: black; - &:hover { - background: color-alternate(body); - } - } - a, span { - padding: rem(0); - padding-left: 0px; - display: inline-block; - flex-grow: 1; - height: 100%; - &:hover { - text-decoration: none; //disable underline - } - } - .expand-button { - padding: 5px; - border-left: 1px solid color-alternate(body); - display: inline-block; - @include collapsible("after"); - } - - &.active { //current page - &, &>a { - color: color(active) !important; - font-weight: bolder; - background: on-color(active); - font-family: "Roboto-Bold", sans-serif; - } - // background-color: color-alternate(body); - // border-right: to-rem(3) solid color(primary); - } - - } - .sidenav-body { - padding-left: 0.75rem; - } - .sidenav { //nested - padding-left: to-rem(12); - } - } - } - } -} - - -//Hides the navbar when the user tries to print out a page so that the page looks clean and only the relevant information is displayed - -@media print { - .nav { - visibility: hidden; - display:none; - } - .sidenav { - visibility: hidden; - display:none; - } - .sidebar.nav { - visibility: hidden; - display:none; - } - .sidenav-wrapper { - visibility: hidden; - display:none; - } - .side-nav-desktop-view { - visibility: hidden; - display:none; - } - .navbar { - visibility: hidden; - display:none; - } -} \ No newline at end of file diff --git a/attack-theme/static/style/_search.scss b/attack-theme/static/style/_search.scss deleted file mode 100644 index 25484493d0b..00000000000 --- a/attack-theme/static/style/_search.scss +++ /dev/null @@ -1,115 +0,0 @@ -@import '_colors.scss'; - -// highlight for found search words in preview and title -.search-word-found { - background: color(search-highlight); - color: on-color(search-highlight); -} - -.btn-group-text { - padding: .25rem, .5rem; - font-size: .875rem; - line-height: 1.5; - border-radius: .2rem; - border: 1px solid transparent; -} -.overlay.search { - position: fixed; - top: 0; left: 0; - width: 100%; height: 100%; - z-index: 1051; // header is 1050 and we need to overlay header - background: rgba(0,0,0,0.35); - padding: 50px; - - .overlay-inner { - border-radius: 25px; - background: color(body); - color: on-color(body); - width: 100%; - - display: flex; - flex-flow: column; - max-height: 100%; - - .search-header { - flex-shrink: 0; - position: relative; - .search-input { - padding: 10px; - input { - padding-left: 12.5px; - font-size: 25px; - line-height: 50px; - width: 100%; - border: 0; - background: color(body); - color: on-color(body); - &:focus { - outline: none; - } - - } - } - .search-icons { - position: absolute; - top: 0px; - right: 0px; - >div { - display: inline-block; - } - .search-parsing-icon { - height: 25px; - width: 25px; - margin-bottom: 8px; - opacity: 0.5; - } - .close-search-icon { - font-size: 50px; - width: 50px; line-height: 50px; - text-align: center; - margin: 10px; - - opacity: 0.8; - cursor: pointer; - &:hover { opacity: 1; } - } - } - - } - - .search-body { - flex: 1 1 auto; - padding: 0 50px; - border-top: 1px solid border-color(body); - margin-bottom: 25px; - overflow-y: auto; - - .results { - .search-result:first-child { - margin-top: 1.5rem; - } - } - .load-more-results { //button and stuff for showing more results - text-align: center; - } - - } - } -} - -.page-search { - float: right; - width: 50%; -} - -// internet explorer compatability override -@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { - .overlay.search .search-body { flex-basis: 50vh !important; } -} - -// mobile display search overrides -@media screen and (min-width: 1px) and (max-width: 767.8px) { - .search-input input { font-size: 20px !important; line-height: 25px !important; } - .close-search-icon { font-size: 25px !important; line-height: 25px !important; width: 25px !important; } - .search-parsing-icon { width: 14px !important; height: 14px !important; margin-bottom: 5px !important;} -} \ No newline at end of file diff --git a/attack-theme/static/style/_tour.scss b/attack-theme/static/style/_tour.scss deleted file mode 100644 index 697bd4a9519..00000000000 --- a/attack-theme/static/style/_tour.scss +++ /dev/null @@ -1,28 +0,0 @@ -@import "colors.scss"; -// .tour-backdrop { -// opacity: 0.3; -// position: fixed; -// } -.popover { - .popover-header { - background: color(primary); - color: on-color(primary); - } - - box-shadow: 0 0 5px 3px color(body); // give the popover a halo for readability - - //darker border - border-color: color(primary); - &.bs-popover-left .arrow::before { border-left-color: color(primary); } - &.bs-popover-right .arrow::before { border-right-color: color(primary); } - &.bs-popover-top .arrow::before { border-top-color: color(primary); } - &.bs-popover-bottom { - .arrow::before, .arrow::after, .popover-header::before { - border-bottom-color: color(primary); - } - } -} - -.tour-backdrop, .tour-highlight { //hide tour backdrop and highlight to prevent animations - opacity: 0; -} \ No newline at end of file diff --git a/attack-theme/static/style/_versioning.scss b/attack-theme/static/style/_versioning.scss deleted file mode 100644 index 54c1df682d3..00000000000 --- a/attack-theme/static/style/_versioning.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import "_misc.scss"; - -.version-button { - // hide the option not in use - &.permalink .live { - display: none; - } - &.live .permalink { - display: none; - } -} -.version-table .table-break-row { - border-right-color: color(body); - border-left-color: color(body); - padding: 1rem 0; -} \ No newline at end of file diff --git a/attack-theme/static/style/style.scss b/attack-theme/static/style/style.scss deleted file mode 100644 index f1a6323fe59..00000000000 --- a/attack-theme/static/style/style.scss +++ /dev/null @@ -1 +0,0 @@ -@import "_colors.scss", "_matrix.scss", "_misc.scss", "_nav.scss", "_footer.scss", "_fonts.scss", "_layouts.scss", "_search.scss", "_versioning.scss", "_tour.scss"; diff --git a/attack-theme/static/style/bootstrap-select.min.css b/attack-theme/static/style/vendors/bootstrap-select.min.css similarity index 100% rename from attack-theme/static/style/bootstrap-select.min.css rename to attack-theme/static/style/vendors/bootstrap-select.min.css diff --git a/attack-theme/static/style/bootstrap-tourist.css b/attack-theme/static/style/vendors/bootstrap-tourist.css similarity index 100% rename from attack-theme/static/style/bootstrap-tourist.css rename to attack-theme/static/style/vendors/bootstrap-tourist.css diff --git a/attack-theme/static/style/bootstrap.min.css b/attack-theme/static/style/vendors/bootstrap.min.css similarity index 100% rename from attack-theme/static/style/bootstrap.min.css rename to attack-theme/static/style/vendors/bootstrap.min.css diff --git a/attack-theme/static/style/fontawesome-6.5.1/css/brands.min.css b/attack-theme/static/style/vendors/fontawesome-6.5.1/css/brands.min.css similarity index 100% rename from attack-theme/static/style/fontawesome-6.5.1/css/brands.min.css rename to attack-theme/static/style/vendors/fontawesome-6.5.1/css/brands.min.css diff --git a/attack-theme/static/style/fontawesome-6.5.1/css/fontawesome.min.css b/attack-theme/static/style/vendors/fontawesome-6.5.1/css/fontawesome.min.css similarity index 100% rename from attack-theme/static/style/fontawesome-6.5.1/css/fontawesome.min.css rename to attack-theme/static/style/vendors/fontawesome-6.5.1/css/fontawesome.min.css diff --git a/attack-theme/static/style/fontawesome-6.5.1/css/solid.min.css b/attack-theme/static/style/vendors/fontawesome-6.5.1/css/solid.min.css similarity index 100% rename from attack-theme/static/style/fontawesome-6.5.1/css/solid.min.css rename to attack-theme/static/style/vendors/fontawesome-6.5.1/css/solid.min.css diff --git a/attack-theme/static/style/fontawesome-6.5.1/webfonts/fa-brands-400.woff2 b/attack-theme/static/style/vendors/fontawesome-6.5.1/webfonts/fa-brands-400.woff2 similarity index 100% rename from attack-theme/static/style/fontawesome-6.5.1/webfonts/fa-brands-400.woff2 rename to attack-theme/static/style/vendors/fontawesome-6.5.1/webfonts/fa-brands-400.woff2 diff --git a/attack-theme/static/style/fontawesome-6.5.1/webfonts/fa-solid-900.woff2 b/attack-theme/static/style/vendors/fontawesome-6.5.1/webfonts/fa-solid-900.woff2 similarity index 100% rename from attack-theme/static/style/fontawesome-6.5.1/webfonts/fa-solid-900.woff2 rename to attack-theme/static/style/vendors/fontawesome-6.5.1/webfonts/fa-solid-900.woff2 diff --git a/attack-theme/templates/general/base-template.html b/attack-theme/templates/general/base-template.html index 2b3cd5e3ec6..7f3543f108a 100644 --- a/attack-theme/templates/general/base-template.html +++ b/attack-theme/templates/general/base-template.html @@ -33,16 +33,19 @@ {{ title }} - - - + + + - - - - {% assets "style/style.scss", filters="pyscss", output="style.min.css" %} - - {% endassets %} + + + + {% if ATTACK_BRANDING %} + + {% else %} + + {% endif %} + {% endblock %} diff --git a/modules/site_config.py b/modules/site_config.py index 5f37b60d204..58c618a3047 100644 --- a/modules/site_config.py +++ b/modules/site_config.py @@ -53,19 +53,19 @@ def send_to_pelican(key, value): - """Method to stage key value pairs for pelican use""" + """Stage key value pairs for pelican use.""" staged_pelican[key] = value def check_versions_module(): - """Return if versions module is loaded""" + """Return if versions module is loaded.""" if [key["module_name"] for key in modules.run_ptr if key["module_name"] == "versions"]: return True return False def check_resources_module(): - """Return if resources module is loaded""" + """Return if resources module is loaded.""" if [key["module_name"] for key in modules.run_ptr if key["module_name"] == "resources"]: return True return False @@ -115,7 +115,6 @@ def set_subdirectory(subdirectory_str): # Static style pelican files directory static_style_dir = os.path.join("attack-theme", "static", "style/") - # Link to instance of the ATT&CK Navigator; change for to a custom location navigator_link = "https://mitre-attack.github.io/attack-navigator/" diff --git a/modules/website_build/website_build.py b/modules/website_build/website_build.py index b36e54c8fd7..41ae8bfd92c 100644 --- a/modules/website_build/website_build.py +++ b/modules/website_build/website_build.py @@ -1,22 +1,25 @@ +import hashlib import json import os import shutil import subprocess -import hashlib from string import Template from loguru import logger import modules -from modules import matrices, site_config, util, resources +from modules import matrices, site_config, util from . import website_build_config def generate_website(): - """Function that generates base template for HTML pages, - generates the index page of the website and - runs pelican content to convert markdown pages into html + """Generate the website. + + This function: + - generates base template for HTML pages + - generates the index page of the website + - runs pelican content to convert markdown pages into html """ logger.info("Generating the website") # Create content pages directory if does not already exist @@ -36,9 +39,7 @@ def generate_website(): generate_static_pages() generate_changelog_page() store_pelican_settings() - override_colors() pelican_content() - reset_override_colors() # this is nice to have if you want to run pelican manually later # remove_pelican_settings() remove_unwanted_output() @@ -47,7 +48,7 @@ def generate_website(): def generate_uuid_from_seeds(content_version, website_version): """ Generate a UUID based on the given content_version and website_version. - + Args: - content_version (str): Semantic version of the content without a leading 'v'. - website_version (str): Semantic version of the website with a leading 'v'. @@ -56,15 +57,15 @@ def generate_uuid_from_seeds(content_version, website_version): - str: A UUID generated based on the two versions. """ # Combine and hash the values - seed = f"{content_version}-{website_version}".encode('utf-8') + seed = f"{content_version}-{website_version}".encode("utf-8") hashed_seed = hashlib.md5(seed).hexdigest() # Convert the first 32 characters of the hash to a UUID format - return '-'.join([hashed_seed[i:i+length] for i, length in zip([0, 8, 12, 16, 20], [8, 4, 4, 4, 12])]) + return "-".join([hashed_seed[i : i + length] for i, length in zip([0, 8, 12, 16, 20], [8, 4, 4, 4, 12])]) def generate_javascript_settings(): - """Creates javascript settings file that will be used to other javascript files""" + """Create JavaS - {% endassets %} - -... will produce a minified css file with a version identifier that looks like: - -.. code-block:: html - - - -These filters can be combined. Here is an example that uses the SASS compiler -and minifies the output: - -.. code-block:: jinja - - {% assets filters="sass,cssmin", output="css/style.min.css", "css/style.scss" %} - - {% endassets %} - -Another example for Javascript: - -.. code-block:: jinja - - {% assets filters="uglifyjs", output="js/packed.js", "js/jquery.js", "js/base.js", "js/widgets.js" %} - - {% endassets %} - -The above will produce a minified JS file: - -.. code-block:: html - - - -Pelican's debug mode is propagated to Webassets to disable asset packaging -and instead work with the uncompressed assets. - -If you need to create named bundles (for example, if you need to compile SASS -files before minifying with other CSS files), you can use the ``ASSET_BUNDLES`` -variable in your settings file. This is an ordered sequence of 3-tuples, where -the 3-tuple is defined as ``(name, args, kwargs)``. This tuple is passed to the -`environment's register() method`_. The following will compile two SCSS files -into a named bundle, using the ``pyscss`` filter: - -.. code-block:: python - - ASSET_BUNDLES = ( - ('scss', ['colors.scss', 'main.scss'], {'filters': 'pyscss'}), - ) - -Many of Webasset's available compilers have additional configuration options -(i.e. 'Less', 'Sass', 'Stylus', 'Closure_js'). You can pass these options to -Webassets using the ``ASSET_CONFIG`` in your settings file. - -The following will handle Google Closure's compilation level and locate -LessCSS's binary: - -.. code-block:: python - - ASSET_CONFIG = (('closure_compressor_optimization', 'WHITESPACE_ONLY'), - ('less_bin', 'lessc.cmd'), ) - -If you wish to place your assets in locations other than the theme output -directory, you can use ``ASSET_SOURCE_PATHS`` in your settings file to provide -webassets with a list of additional directories to search, relative to the -theme's top-level directory: - -.. code-block:: python - - ASSET_SOURCE_PATHS = [ - 'vendor/css', - 'scss', - ] - -.. _Webassets: https://github.com/miracle2k/webassets -.. _Webassets documentation: http://webassets.readthedocs.org/en/latest/builtin_filters.html -.. _environment's register() method: http://webassets.readthedocs.org/en/latest/environment.html#registering-bundles \ No newline at end of file diff --git a/plugins/assets/__init__.py b/plugins/assets/__init__.py deleted file mode 100644 index 2d56709e666..00000000000 --- a/plugins/assets/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .assets import * \ No newline at end of file diff --git a/plugins/assets/assets.py b/plugins/assets/assets.py deleted file mode 100644 index e204dd65d85..00000000000 --- a/plugins/assets/assets.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Asset management plugin for Pelican -=================================== - -This plugin allows you to use the `webassets`_ module to manage assets such as -CSS and JS files. - -The ASSET_URL is set to a relative url to honor Pelican's RELATIVE_URLS -setting. This requires the use of SITEURL in the templates:: - - - -.. _webassets: https://webassets.readthedocs.org/ - -""" -from __future__ import unicode_literals - -import os -import logging - -from pelican import signals -logger = logging.getLogger(__name__) - -try: - import webassets - from webassets import Environment - from webassets.ext.jinja2 import AssetsExtension -except ImportError: - webassets = None - -def add_jinja2_ext(pelican): - """Add Webassets to Jinja2 extensions in Pelican settings.""" - - if 'JINJA_ENVIRONMENT' in pelican.settings: # pelican 3.7+ - pelican.settings['JINJA_ENVIRONMENT']['extensions'].append(AssetsExtension) - else: - pelican.settings['JINJA_EXTENSIONS'].append(AssetsExtension) - - -def create_assets_env(generator): - """Define the assets environment and pass it to the generator.""" - - theme_static_dir = generator.settings['THEME_STATIC_DIR'] - assets_destination = os.path.join(generator.output_path, theme_static_dir) - generator.env.assets_environment = Environment( - assets_destination, theme_static_dir) - - if 'ASSET_CONFIG' in generator.settings: - for item in generator.settings['ASSET_CONFIG']: - generator.env.assets_environment.config[item[0]] = item[1] - - if 'ASSET_BUNDLES' in generator.settings: - for name, args, kwargs in generator.settings['ASSET_BUNDLES']: - generator.env.assets_environment.register(name, *args, **kwargs) - - if 'ASSET_DEBUG' in generator.settings: - generator.env.assets_environment.debug = generator.settings['ASSET_DEBUG'] - elif logging.getLevelName(logger.getEffectiveLevel()) == "DEBUG": - generator.env.assets_environment.debug = True - - for path in (generator.settings['THEME_STATIC_PATHS'] + - generator.settings.get('ASSET_SOURCE_PATHS', [])): - full_path = os.path.join(generator.theme, path) - generator.env.assets_environment.append_path(full_path) - - -def register(): - """Plugin registration.""" - if webassets: - signals.initialized.connect(add_jinja2_ext) - signals.generator_init.connect(create_assets_env) - else: - logger.warning('`assets` failed to load dependency `webassets`.' - '`assets` plugin not loaded.') diff --git a/requirements.txt b/requirements.txt index 594d4df6733..e6a3d3befeb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,15 +5,13 @@ colorama==0.4.6 future==1.0.0 loguru==0.7.2 mitreattack-python==3.0.8 -pelican==4.8.0 -pyScss==1.4.0 +pelican==4.10.2 python-dotenv==1.0.1 requests==2.32.0 stix2==3.0.1 stix2-validator==3.2.0 toml==0.10.2 towncrier==24.7.1 -webassets==2.0 # dev dependencies black==24.3.0