From c11137b402d90653ac509ebbfb7a61b3b1f5aaa9 Mon Sep 17 00:00:00 2001 From: Vanessa Sochat Date: Wed, 27 Feb 2019 17:47:01 -0500 Subject: [PATCH] moving contributing docs into subfolder, docs Signed-off-by: Vanessa Sochat --- docs/_config.yml | 32 + docs/_includes/head.html | 26 + docs/_includes/nav.html | 44 + docs/_layouts/about.html | 5 + docs/_layouts/default.html | 78 + docs/_layouts/home.html | 5 + docs/_layouts/page.html | 5 + docs/_layouts/post.html | 5 + docs/assets/css/just-the-docs.css | 6727 ++++++++++++++++++++ docs/assets/images/just-the-docs.png | Bin 0 -> 20992 bytes docs/assets/images/search.svg | 1 + docs/assets/js/just-the-docs.js | 177 + docs/assets/js/search-data.json | 12 + docs/assets/js/vendor/lunr.min.js | 6 + docs/docs/about.md | 26 + docs/docs/contributing/contributing.md | 117 + docs/docs/introduction/container-images.md | 204 + docs/docs/introduction/digests.md | 67 + docs/docs/introduction/distribution.md | 35 + docs/docs/introduction/introduction.md | 55 + docs/docs/introduction/oci-projects.md | 155 + docs/index.md | 30 + 22 files changed, 7812 insertions(+) create mode 100644 docs/_config.yml create mode 100644 docs/_includes/head.html create mode 100644 docs/_includes/nav.html create mode 100644 docs/_layouts/about.html create mode 100644 docs/_layouts/default.html create mode 100644 docs/_layouts/home.html create mode 100644 docs/_layouts/page.html create mode 100644 docs/_layouts/post.html create mode 100644 docs/assets/css/just-the-docs.css create mode 100644 docs/assets/images/just-the-docs.png create mode 100644 docs/assets/images/search.svg create mode 100644 docs/assets/js/just-the-docs.js create mode 100644 docs/assets/js/search-data.json create mode 100644 docs/assets/js/vendor/lunr.min.js create mode 100644 docs/docs/about.md create mode 100644 docs/docs/contributing/contributing.md create mode 100644 docs/docs/introduction/container-images.md create mode 100644 docs/docs/introduction/digests.md create mode 100644 docs/docs/introduction/distribution.md create mode 100644 docs/docs/introduction/introduction.md create mode 100644 docs/docs/introduction/oci-projects.md create mode 100644 docs/index.md diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..6b15337 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,32 @@ +# Welcome to Jekyll! +# +# This config file is meant for settings that affect your whole site, values +# which you are expected to set up once and rarely edit after that. If you find +# yourself editing these this file very often, consider using Jekyll's data files +# feature for the data you need to update frequently. +# +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'jekyll serve'. If you change this file, please restart the server process. + +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.github_repo }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. +title: OpenContainers +description: Open containers man pages +baseurl: "/org/" # the subpath of your site, e.g. /blog +# url: "" # the base hostname & protocol for your site, e.g. http://example.com + +repo: https://www.github.com/opencontainers/org + +permalink: pretty +exclude: + - "*.gem" + - "Gemfile" + - "Gemfile.lock" + +# Aux links for the upper right navigation +aux_links: + "OpenContainers on GitHub": + - "//github.com/opencontainers" diff --git a/docs/_includes/head.html b/docs/_includes/head.html new file mode 100644 index 0000000..fa5dee7 --- /dev/null +++ b/docs/_includes/head.html @@ -0,0 +1,26 @@ + + + + {% if page.description %} + + {% endif %} + + {{ page.title }} - {{ site.title }} + + + {% if site.ga_tracking != nil %} + + + {% endif %} + + {% if site.search_enabled != nil %} + + {% endif %} + + + + diff --git a/docs/_includes/nav.html b/docs/_includes/nav.html new file mode 100644 index 0000000..2c4bf1e --- /dev/null +++ b/docs/_includes/nav.html @@ -0,0 +1,44 @@ + diff --git a/docs/_layouts/about.html b/docs/_layouts/about.html new file mode 100644 index 0000000..5e71126 --- /dev/null +++ b/docs/_layouts/about.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{{ content }} diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000..06662ee --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,78 @@ + + + +{% include head.html %} + + +
+ +
+ +
+ {% unless page.url == "/" %} + {% if page.parent %} + + {% endif %} + {% endunless %} +
+ {{ content }} + + {% if page.has_children == true and page.has_toc != false %} +
+

Table of contents

+ {% assign children_list = site.pages | sort:"nav_order" %} +
    + {% for child in children_list %} + {% if child.parent == page.title and child.title != page.title %} +
  • + {{ child.title }} +
  • + {% endif %} + {% endfor %} +
+ {% endif %} +
+
+
+
+ + + diff --git a/docs/_layouts/home.html b/docs/_layouts/home.html new file mode 100644 index 0000000..5e71126 --- /dev/null +++ b/docs/_layouts/home.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{{ content }} diff --git a/docs/_layouts/page.html b/docs/_layouts/page.html new file mode 100644 index 0000000..5e71126 --- /dev/null +++ b/docs/_layouts/page.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{{ content }} diff --git a/docs/_layouts/post.html b/docs/_layouts/post.html new file mode 100644 index 0000000..5e71126 --- /dev/null +++ b/docs/_layouts/post.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +{{ content }} diff --git a/docs/assets/css/just-the-docs.css b/docs/assets/css/just-the-docs.css new file mode 100644 index 0000000..30ee353 --- /dev/null +++ b/docs/assets/css/just-the-docs.css @@ -0,0 +1,6727 @@ +/*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */ + +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden], +template { + display: none +} + +a { + background-color: transparent +} + +a:active, +a:hover { + outline: 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, +strong { + font-weight: bold +} + +dfn { + font-style: italic +} + +h1 { + font-size: 2em; + margin: 0.67em 0 +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -0.5em +} + +sub { + bottom: -0.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 1em 40px +} + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0 +} + +pre { + overflow: auto +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +button, +input, +optgroup, +select, +textarea { + color: inherit; + font: inherit; + margin: 0 +} + +button { + overflow: visible +} + +button, +select { + text-transform: none +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled], +html input[disabled] { + cursor: default +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0 +} + +input { + line-height: normal +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0 +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto +} + +input[type="search"] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em +} + +legend { + border: 0; + padding: 0 +} + +textarea { + overflow: auto +} + +optgroup { + font-weight: bold +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +td, +th { + padding: 0 +} + +* { + box-sizing: border-box +} + +::selection { + color: #fff; + background: #474eb5 +} + +html { + font-size: 14px !important +} + +@media (min-width: 31.25rem) { + html { + font-size: 16px !important + } +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif; + font-size: inherit; + line-height: 1.4; + color: #5c5962; + background-color: #fff +} + +p, +h1, +h2, +h3, +h4, +h5, +h6, +ol, +ul, +pre, +address, +blockquote, +dl, +div, +fieldset, +form, +hr, +noscript, +table { + margin-top: 0 +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 1.2em; + margin-bottom: 0.8em; + font-weight: 500; + line-height: 1.15; + color: #27262b +} + +p { + margin-bottom: 1em +} + +a { + color: #474eb5; + text-decoration: none +} + +a:not([class]) { + text-decoration: none; + background-image: linear-gradient(#eeebee 0%, #eeebee 100%); + background-repeat: repeat-x; + background-position: 0 100%; + background-size: 1px 1px +} + +a:not([class]):hover { + background-image: linear-gradient(rgba(114, 83, 237, 0.45) 0%, rgba(114, 83, 237, 0.45) 100%); + background-size: 1px 1px +} + +code { + font-family: "SFMono-Regular", Menlo, Consolas, Monospace; + font-size: 12px; + line-height: 1.4 +} + +figure { + margin: 0 +} + +li { + margin: 0.25em 0 +} + +img { + max-width: 100%; + height: auto +} + +hr { + height: 1px; + padding: 0; + margin: 2rem 0; + background-color: #eeebee; + border: 0 +} + +@media (min-width: 46.25rem) { + .page-wrap { + position: absolute; + top: 0; + left: 0; + display: flex; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: hidden + } +} + +.side-bar { + z-index: 100; + display: flex; + flex-wrap: wrap; + padding-top: 1rem; + padding-bottom: 1rem; + background-color: #f5f6fa +} + +@media (min-width: 46.25rem) { + .side-bar { + flex-wrap: nowrap; + position: absolute; + width: 248px; + height: 100%; + padding-top: 4rem; + padding-bottom: 0; + flex-direction: column; + border-right: 1px solid #eeebee; + align-items: flex-end + } +} + +@media (min-width: 70rem) { + .side-bar { + width: calc((100% - 1032px) / 2 + 232px); + min-width: 232px + } +} + +@media (min-width: 46.25rem) { + .main-content-wrap { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + min-height: 600px; + -webkit-overflow-scrolling: touch; + overflow-x: hidden; + overflow-y: scroll + } +} + +.main-content { + padding-top: 1rem; + padding-right: 1rem; + padding-left: 1rem +} + +@media (min-width: 46.25rem) { + .main-content { + padding-right: 2rem; + padding-left: 2rem + } +} + +@media (min-width: 46.25rem) { + .main-content { + position: relative; + max-width: 800px; + padding-top: 2rem; + padding-bottom: 2rem; + padding-left: 3rem; + margin-left: 232px + } +} + +@media (min-width: 70rem) { + .main-content { + padding-left: 2rem; + margin-left: calc((100% - 1032px) / 2 + 232px) + } +} + +.js-main-content:focus { + outline: none +} + +.page-header { + background-color: #f5f6fa +} + +@media (min-width: 46.25rem) { + .page-header { + background-color: #fff + } +} + +.page-header .main-content { + padding-top: 0 +} + +@media (min-width: 46.25rem) { + .page-header .main-content { + display: flex; + justify-content: flex-end; + height: 60px; + padding-top: 1rem; + padding-bottom: 1rem; + border-bottom: 1px solid #eeebee + } +} + +.navigation, +.site-title, +.site-footer { + padding-right: 1rem; + padding-left: 1rem; + width: 100% +} + +@media (min-width: 46.25rem) { + .navigation, + .site-title, + .site-footer { + padding-right: 2rem; + padding-left: 2rem + } +} + +@media (min-width: 70rem) { + .navigation, + .site-title, + .site-footer { + width: 264px + } +} + +@media (min-width: 46.25rem) { + .navigation { + padding-top: 3rem; + overflow-y: auto; + flex: 1 1 auto + } +} + +body { + position: relative; + padding-bottom: 4rem +} + +@media (min-width: 46.25rem) { + body { + position: static; + padding-bottom: 0 + } +} + +.site-footer { + position: absolute; + bottom: 0; + padding-top: 1rem; + padding-bottom: 1rem +} + +@media (min-width: 46.25rem) { + .site-footer { + position: static; + align-self: flex-end; + justify-self: end; + background-color: #f5f6fa + } +} + +.page-content a { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.page-content ul, +.page-content ol { + padding-left: 1.5em +} + +.page-content ol { + list-style-type: none; + counter-reset: step-counter +} + +.page-content ol>li { + position: relative +} + +.page-content ol>li::before { + position: absolute; + top: 0.2em; + left: -1.6em; + color: #959396; + content: counter(step-counter); + counter-increment: step-counter; + font-size: 12px !important +} + +@media (min-width: 31.25rem) { + .page-content ol>li::before { + font-size: 14px !important + } +} + +@media (min-width: 31.25rem) { + .page-content ol>li::before { + top: 0.11em + } +} + +.page-content ol>li ol { + counter-reset: sub-counter +} + +.page-content ol>li ol li::before { + content: counter(sub-counter, lower-alpha); + counter-increment: sub-counter +} + +.page-content ul { + list-style: none +} + +.page-content ul>li::before { + position: absolute; + margin-left: -1.4em; + color: #959396; + content: "•" +} + +.page-content .task-list { + padding-left: 0 +} + +.page-content .task-list-item { + display: flex; + align-items: center +} + +.page-content .task-list-item::before { + content: "" +} + +.page-content .task-list-item-checkbox { + margin-right: 0.6em +} + +.page-content hr+* { + margin-top: 0 +} + +.page-content h1:first-of-type { + margin-top: 0.5em +} + +.page-content dl { + display: grid; + grid-template-columns: max-content 1fr +} + +.page-content dt, +.page-content dd { + margin: 0.25em 0 +} + +.page-content dt { + text-align: right +} + +.page-content dt::after { + content: ":" +} + +.page-content dd { + margin-left: 1em; + font-weight: 500 +} + +.site-title { + display: block; + flex: 1 1 auto; + color: #27262b; + background-color: #f5f6fa +} + +@media (min-width: 46.25rem) { + .site-title { + position: absolute; + top: 0; + right: 0; + z-index: 101; + height: 60px; + padding-top: 1rem; + border-bottom: 1px solid #eeebee + } +} + +.navigation-list { + padding: 0; + margin-top: 1rem; + margin-bottom: 0; + list-style: none +} + +@media (min-width: 46.25rem) { + .navigation-list { + margin-top: 0 + } +} + +.navigation-list-child-list { + padding-left: .75rem; + list-style: none +} + +.navigation-list-child-list .navigation-list-link { + color: #5c5962 +} + +.navigation-list-child-list .navigation-list-item { + position: relative +} + +.navigation-list-child-list .navigation-list-item::before { + position: absolute; + margin-top: 0.3em; + margin-left: -0.8em; + color: rgba(92, 89, 98, 0.3); + content: "- " +} + +.navigation-list-child-list .navigation-list-item.active::before { + color: #5c5962 +} + +.navigation-list-item { + font-size: 14px !important; + margin: 0 +} + +@media (min-width: 31.25rem) { + .navigation-list-item { + font-size: 16px !important + } +} + +@media (min-width: 46.25rem) { + .navigation-list-item { + font-size: 12px !important + } +} + +@media (min-width: 46.25rem) and (min-width: 31.25rem) { + .navigation-list-item { + font-size: 14px !important + } +} + +.navigation-list-item .navigation-list-child-list { + display: none +} + +.navigation-list-item.active .navigation-list-child-list { + display: block +} + +.navigation-list-link { + display: block; + padding-top: .25rem; + padding-bottom: .25rem +} + +.navigation-list-link.active { + font-weight: 600; + color: #27262b; + text-decoration: none +} + +.main-nav, +.aux-nav { + display: none +} + +.main-nav.nav-open, +.aux-nav.nav-open { + display: block +} + +@media (min-width: 46.25rem) { + .main-nav, + .aux-nav { + display: block + } +} + +.navigation-list-toggle { + position: absolute; + right: 1rem +} + +@media (min-width: 46.25rem) { + .navigation-list-toggle { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .breadcrumb-nav { + margin-top: -1rem + } +} + +.breadcrumb-nav-list { + padding-left: 0; + margin-bottom: .75rem; + list-style: none +} + +.breadcrumb-nav-list-item { + display: table-cell; + font-size: 11px !important +} + +@media (min-width: 31.25rem) { + .breadcrumb-nav-list-item { + font-size: 12px !important + } +} + +.breadcrumb-nav-list-item::before { + display: none +} + +.breadcrumb-nav-list-item::after { + display: inline-block; + margin-right: .5rem; + margin-left: .5rem; + color: #959396; + content: "/" +} + +.breadcrumb-nav-list-item:last-child::after { + content: "" +} + +h1, +.text-alpha { + font-size: 32px !important; + font-weight: 300 +} + +@media (min-width: 31.25rem) { + h1, + .text-alpha { + font-size: 36px !important + } +} + +h2, +.text-beta { + font-size: 18px !important +} + +@media (min-width: 31.25rem) { + h2, + .text-beta { + font-size: 24px !important + } +} + +h3, +.text-gamma { + font-size: 16px !important +} + +@media (min-width: 31.25rem) { + h3, + .text-gamma { + font-size: 18px !important + } +} + +h4, +.text-delta { + font-size: 11px !important; + font-weight: 300; + text-transform: uppercase; + letter-spacing: 0.1em +} + +@media (min-width: 31.25rem) { + h4, + .text-delta { + font-size: 12px !important + } +} + +h5, +.text-epsilon { + font-size: 12px !important; + color: #44434d +} + +@media (min-width: 31.25rem) { + h5, + .text-epsilon { + font-size: 14px !important + } +} + +h6, +.text-zeta { + font-size: 11px !important; + color: #44434d +} + +@media (min-width: 31.25rem) { + h6, + .text-zeta { + font-size: 12px !important + } +} + +li .highlight { + margin-top: .5rem +} + +.text-small { + font-size: 11px !important +} + +@media (min-width: 31.25rem) { + .text-small { + font-size: 12px !important + } +} + +.text-mono { + font-family: "SFMono-Regular", Menlo, Consolas, Monospace !important +} + +.text-center { + text-align: center !important +} + +.label, +.label-blue { + display: inline-block; + padding-top: 0.16em; + padding-right: 0.42em; + padding-bottom: 0.16em; + padding-left: 0.42em; + margin-right: .25rem; + margin-left: .25rem; + color: #fff; + text-transform: uppercase; + vertical-align: middle; + background-color: #2869e6; + font-size: 11px !important +} + +@media (min-width: 31.25rem) { + .label, + .label-blue { + font-size: 12px !important + } +} + +.label-green { + background-color: #009c7b +} + +.label-purple { + background-color: #5e41d0 +} + +.label-red { + background-color: #e94c4c +} + +.label-yellow { + color: #44434d; + background-color: #f7d12e +} + +.btn { + display: inline-block; + box-sizing: border-box; + padding-top: 0.3em; + padding-right: 1em; + padding-bottom: 0.3em; + padding-left: 1em; + margin: 0; + font-family: inherit; + font-size: inherit; + font-weight: 500; + line-height: 1.5; + color: #474eb5; + text-decoration: none; + vertical-align: baseline; + cursor: pointer; + background-color: #f7f7f7; + border-width: 0; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); + appearance: none +} + +.btn:focus { + text-decoration: none; + outline: none; + box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25) +} + +.btn:focus:hover, +.btn.selected:focus { + box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.25) +} + +.btn:hover, +.btn.zeroclipboard-is-hover { + color: #6a4aec +} + +.btn:hover, +.btn:active, +.btn.zeroclipboard-is-hover, +.btn.zeroclipboard-is-active { + text-decoration: none; + background-color: #f4f4f4 +} + +.btn:active, +.btn.selected, +.btn.zeroclipboard-is-active { + background-color: #efefef; + background-image: none; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15) +} + +.btn.selected:hover { + background-color: #cfcfcf +} + +.btn:disabled, +.btn:disabled:hover, +.btn.disabled, +.btn.disabled:hover { + color: rgba(102, 102, 102, 0.5); + cursor: default; + background-color: rgba(229, 229, 229, 0.5); + background-image: none; + box-shadow: none +} + +.btn-outline { + color: #474eb5; + background: transparent; + box-shadow: inset 0 0 0 2px #e6e1e8 +} + +.btn-outline:hover, +.btn-outline:active, +.btn-outline.zeroclipboard-is-hover, +.btn-outline.zeroclipboard-is-active { + color: #6341eb; + text-decoration: none; + background-color: transparent; + box-shadow: inset 0 0 0 3px #e6e1e8 +} + +.btn-outline:focus { + text-decoration: none; + outline: none; + box-shadow: inset 0 0 0 2px #5c5962, 0 0 0 3px rgba(0, 0, 255, 0.25) +} + +.btn-outline:focus:hover, +.btn-outline.selected:focus { + box-shadow: inset 0 0 0 2px #5c5962 +} + +.btn-primary { + color: #fff; + background-color: #5739ce; + background-image: linear-gradient(#6f55d5, #5739ce); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12) +} + +.btn-primary:hover, +.btn-primary.zeroclipboard-is-hover { + color: #fff; + background-color: #5132cb; + background-image: linear-gradient(#6549d2, #5132cb) +} + +.btn-primary:active, +.btn-primary.selected, +.btn-primary.zeroclipboard-is-active { + background-color: #4f31c6; + background-image: none; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15) +} + +.btn-primary.selected:hover { + background-color: #472cb2 +} + +.btn-purple { + color: #fff; + background-color: #5739ce; + background-image: linear-gradient(#6f55d5, #5739ce); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12) +} + +.btn-purple:hover, +.btn-purple.zeroclipboard-is-hover { + color: #fff; + background-color: #5132cb; + background-image: linear-gradient(#6549d2, #5132cb) +} + +.btn-purple:active, +.btn-purple.selected, +.btn-purple.zeroclipboard-is-active { + background-color: #4f31c6; + background-image: none; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15) +} + +.btn-purple.selected:hover { + background-color: #472cb2 +} + +.btn-blue { + color: #fff; + background-color: #227efa; + background-image: linear-gradient(#4593fb, #227efa); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12) +} + +.btn-blue:hover, +.btn-blue.zeroclipboard-is-hover { + color: #fff; + background-color: #1878fa; + background-image: linear-gradient(#368afa, #1878fa) +} + +.btn-blue:active, +.btn-blue.selected, +.btn-blue.zeroclipboard-is-active { + background-color: #1375f9; + background-image: none; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15) +} + +.btn-blue.selected:hover { + background-color: #0669ed +} + +.btn-green { + color: #fff; + background-color: #10ac7d; + background-image: linear-gradient(#13cc95, #10ac7d); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12) +} + +.btn-green:hover, +.btn-green.zeroclipboard-is-hover { + color: #fff; + background-color: #0fa276; + background-image: linear-gradient(#12be8b, #0fa276) +} + +.btn-green:active, +.btn-green.selected, +.btn-green.zeroclipboard-is-active { + background-color: #0f9e73; + background-image: none; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15) +} + +.btn-green.selected:hover { + background-color: #0d8662 +} + +.search { + position: relative; + z-index: 99; + display: none; + flex-grow: 1; + padding: .5rem; + margin-bottom: .75rem; + background-color: #fff; + border-radius: 3px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07), 0 3px 10px rgba(0, 0, 0, 0.05) +} + +@media (min-width: 46.25rem) { + .search { + display: block; + padding-top: .25rem; + padding-right: 0; + padding-bottom: 0; + padding-left: 0; + margin-bottom: 0; + background-color: transparent; + box-shadow: none + } +} + +.search.nav-open { + display: block +} + +.search-results-wrap { + display: none +} + +.search-results-wrap.active { + position: absolute; + top: .25rem; + z-index: 100; + display: block; + width: 300px; + margin-top: 2rem; + background: #fff; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05) +} + +.search-input-wrap { + display: flex; + background-color: #fff +} + +.search-input { + width: 100%; + padding-top: .25rem; + padding-bottom: .25rem; + background-color: #fff; + border-top: 0; + border-right: 0; + border-bottom: 0; + border-left: 0; + order: 2; + font-size: 16px !important +} + +.search-input:focus { + outline: 0; + box-shadow: none +} + +.search-input:focus+.search-icon { + fill: #474eb5 +} + +@media (min-width: 31.25rem) { + .search-input { + font-size: 18px !important + } +} + +@media (min-width: 31.25rem) { + .search-input { + font-size: 12px !important + } +} + +@media (min-width: 31.25rem) and (min-width: 31.25rem) { + .search-input { + font-size: 14px !important + } +} + +@media (min-width: 46.25rem) { + .search-input { + font-size: 11px !important + } +} + +@media (min-width: 46.25rem) and (min-width: 31.25rem) { + .search-input { + font-size: 12px !important + } +} + +.search-icon { + align-self: center; + margin-right: .5rem; + fill: #959396; + order: 1 +} + +.search-results-list { + padding-left: 0; + margin-top: .25rem; + margin-bottom: .25rem; + list-style: none; + font-size: 12px !important +} + +@media (min-width: 31.25rem) { + .search-results-list { + font-size: 14px !important + } +} + +.search-results-list-item { + padding: 0; + margin: 0 +} + +.search-results-link { + display: block; + padding-top: .25rem; + padding-right: .75rem; + padding-bottom: .25rem; + padding-left: .75rem +} + +.search-results-link:hover { + color: #27262b; + background-color: #fafafa +} + +table { + display: block; + width: 100%; + max-width: 100%; + margin-bottom: 1.5rem; + overflow-x: auto; + border-collapse: separate; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05) +} + +@media (min-width: 31.25rem) { + table { + display: table + } +} + +th, +td { + font-size: 12px !important; + min-width: 120px; + padding-top: .5rem; + padding-right: .75rem; + padding-bottom: .5rem; + padding-left: .75rem; + background-color: #fff; + border-bottom: 1px solid rgba(238, 235, 238, 0.5); + border-left: 1px solid #eeebee +} + +@media (min-width: 31.25rem) { + th, + td { + font-size: 14px !important + } +} + +th:first-of-type, +td:first-of-type { + border-left: 0 +} + +thead tr:first-of-type th:first-of-type, +thead tr:first-of-type td:first-of-type, +tbody:first-child tr:first-of-type th:first-of-type, +tbody:first-child tr:first-of-type td:first-of-type { + border-top-left-radius: 4px +} + +thead tr:first-of-type th:last-of-type, +thead tr:first-of-type td:last-of-type, +tbody:first-child tr:first-of-type th:last-of-type, +tbody:first-child tr:first-of-type td:last-of-type { + border-top-right-radius: 4px +} + +tbody tr:last-of-type th, +tbody tr:last-of-type td { + border-bottom: 0 +} + +tbody tr:last-of-type th:first-of-type, +tbody tr:last-of-type td:first-of-type { + border-bottom-left-radius: 4px +} + +tbody tr:last-of-type th:last-of-type, +tbody tr:last-of-type td:last-of-type { + border-bottom-right-radius: 4px +} + +thead th { + border-bottom: 1px solid #eeebee +} + +code { + padding: 0.2em 0.15em; + font-weight: 400; + background-color: #f5f6fa; + border: 1px solid #eeebee; + border-radius: 4px +} + +pre.highlight { + padding: .75rem; + margin-bottom: 0; + -webkit-overflow-scrolling: touch; + background-color: #f5f6fa +} + +pre.highlight code { + padding: 0; + border: 0 +} + +.highlighter-rouge { + margin-bottom: .75rem; + overflow: hidden; + border-radius: 4px +} + +.highlight .c { + color: #586e75 +} + +.highlight .err { + color: #93a1a1 +} + +.highlight .g { + color: #93a1a1 +} + +.highlight .k { + color: #859900 +} + +.highlight .l { + color: #93a1a1 +} + +.highlight .n { + color: #93a1a1 +} + +.highlight .o { + color: #859900 +} + +.highlight .x { + color: #cb4b16 +} + +.highlight .p { + color: #93a1a1 +} + +.highlight .cm { + color: #586e75 +} + +.highlight .cp { + color: #859900 +} + +.highlight .c1 { + color: #586e75 +} + +.highlight .cs { + color: #859900 +} + +.highlight .gd { + color: #2aa198 +} + +.highlight .ge { + font-style: italic; + color: #93a1a1 +} + +.highlight .gr { + color: #dc322f +} + +.highlight .gh { + color: #cb4b16 +} + +.highlight .gi { + color: #859900 +} + +.highlight .go { + color: #93a1a1 +} + +.highlight .gp { + color: #93a1a1 +} + +.highlight .gs { + font-weight: bold; + color: #93a1a1 +} + +.highlight .gu { + color: #cb4b16 +} + +.highlight .gt { + color: #93a1a1 +} + +.highlight .kc { + color: #cb4b16 +} + +.highlight .kd { + color: #268bd2 +} + +.highlight .kn { + color: #859900 +} + +.highlight .kp { + color: #859900 +} + +.highlight .kr { + color: #268bd2 +} + +.highlight .kt { + color: #dc322f +} + +.highlight .ld { + color: #93a1a1 +} + +.highlight .m { + color: #2aa198 +} + +.highlight .s { + color: #2aa198 +} + +.highlight .na { + color: #93a1a1 +} + +.highlight .nb { + color: #b58900 +} + +.highlight .nc { + color: #268bd2 +} + +.highlight .no { + color: #cb4b16 +} + +.highlight .nd { + color: #268bd2 +} + +.highlight .ni { + color: #cb4b16 +} + +.highlight .ne { + color: #cb4b16 +} + +.highlight .nf { + color: #268bd2 +} + +.highlight .nl { + color: #93a1a1 +} + +.highlight .nn { + color: #93a1a1 +} + +.highlight .nx { + color: #555 +} + +.highlight .py { + color: #93a1a1 +} + +.highlight .nt { + color: #268bd2 +} + +.highlight .nv { + color: #268bd2 +} + +.highlight .ow { + color: #859900 +} + +.highlight .w { + color: #93a1a1 +} + +.highlight .mf { + color: #2aa198 +} + +.highlight .mh { + color: #2aa198 +} + +.highlight .mi { + color: #2aa198 +} + +.highlight .mo { + color: #2aa198 +} + +.highlight .sb { + color: #586e75 +} + +.highlight .sc { + color: #2aa198 +} + +.highlight .sd { + color: #93a1a1 +} + +.highlight .s2 { + color: #2aa198 +} + +.highlight .se { + color: #cb4b16 +} + +.highlight .sh { + color: #93a1a1 +} + +.highlight .si { + color: #2aa198 +} + +.highlight .sx { + color: #2aa198 +} + +.highlight .sr { + color: #dc322f +} + +.highlight .s1 { + color: #2aa198 +} + +.highlight .ss { + color: #2aa198 +} + +.highlight .bp { + color: #268bd2 +} + +.highlight .vc { + color: #268bd2 +} + +.highlight .vg { + color: #268bd2 +} + +.highlight .vi { + color: #268bd2 +} + +.highlight .il { + color: #2aa198 +} + +.code-example { + padding: .75rem; + margin-bottom: .75rem; + overflow: auto; + border: 1px solid #eeebee; + border-radius: 4px +} + +.code-example+.highlighter-rouge, +.code-example+figure.highlight { + position: relative; + margin-top: -1rem; + border-right: 1px solid #eeebee; + border-bottom: 1px solid #eeebee; + border-left: 1px solid #eeebee; + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.text-grey-dk-000 { + color: #959396 !important +} + +.text-grey-dk-100 { + color: #5c5962 !important +} + +.text-grey-dk-200 { + color: #44434d !important +} + +.text-grey-dk-250 { + color: #302d36 !important +} + +.text-grey-dk-300 { + color: #27262b !important +} + +.text-grey-lt-000 { + color: #f5f6fa !important +} + +.text-grey-lt-100 { + color: #eeebee !important +} + +.text-grey-lt-200 { + color: #ecebed !important +} + +.text-grey-lt-300 { + color: #e6e1e8 !important +} + +.text-blue-000 { + color: #2c84fa !important +} + +.text-blue-100 { + color: #2869e6 !important +} + +.text-blue-200 { + color: #264caf !important +} + +.text-blue-300 { + color: #183385 !important +} + +.text-green-000 { + color: #41d693 !important +} + +.text-green-100 { + color: #11b584 !important +} + +.text-green-200 { + color: #009c7b !important +} + +.text-green-300 { + color: #026e57 !important +} + +.text-purple-000 { + color: #474eb5 !important +} + +.text-purple-100 { + color: #5e41d0 !important +} + +.text-purple-200 { + color: #4e26af !important +} + +.text-purple-300 { + color: #381885 !important +} + +.text-yellow-000 { + color: #ffeb82 !important +} + +.text-yellow-100 { + color: #fadf50 !important +} + +.text-yellow-200 { + color: #f7d12e !important +} + +.text-yellow-300 { + color: #e7af06 !important +} + +.text-red-000 { + color: #f77e7e !important +} + +.text-red-100 { + color: #f96e65 !important +} + +.text-red-200 { + color: #e94c4c !important +} + +.text-red-300 { + color: #dd2e2e !important +} + +.bg-grey-dk-000 { + background-color: #959396 !important +} + +.bg-grey-dk-100 { + background-color: #5c5962 !important +} + +.bg-grey-dk-200 { + background-color: #44434d !important +} + +.bg-grey-dk-250 { + background-color: #302d36 !important +} + +.bg-grey-dk-300 { + background-color: #27262b !important +} + +.bg-grey-lt-000 { + background-color: #f5f6fa !important +} + +.bg-grey-lt-100 { + background-color: #eeebee !important +} + +.bg-grey-lt-200 { + background-color: #ecebed !important +} + +.bg-grey-lt-300 { + background-color: #e6e1e8 !important +} + +.bg-blue-000 { + background-color: #2c84fa !important +} + +.bg-blue-100 { + background-color: #2869e6 !important +} + +.bg-blue-200 { + background-color: #264caf !important +} + +.bg-blue-300 { + background-color: #183385 !important +} + +.bg-green-000 { + background-color: #41d693 !important +} + +.bg-green-100 { + background-color: #11b584 !important +} + +.bg-green-200 { + background-color: #009c7b !important +} + +.bg-green-300 { + background-color: #026e57 !important +} + +.bg-purple-000 { + background-color: #474eb5 !important +} + +.bg-purple-100 { + background-color: #5e41d0 !important +} + +.bg-purple-200 { + background-color: #4e26af !important +} + +.bg-purple-300 { + background-color: #381885 !important +} + +.bg-yellow-000 { + background-color: #ffeb82 !important +} + +.bg-yellow-100 { + background-color: #fadf50 !important +} + +.bg-yellow-200 { + background-color: #f7d12e !important +} + +.bg-yellow-300 { + background-color: #e7af06 !important +} + +.bg-red-000 { + background-color: #f77e7e !important +} + +.bg-red-100 { + background-color: #f96e65 !important +} + +.bg-red-200 { + background-color: #e94c4c !important +} + +.bg-red-300 { + background-color: #dd2e2e !important +} + +.d-block { + display: block !important +} + +.d-flex { + display: flex !important +} + +.d-inline { + display: inline !important +} + +.d-inline-block { + display: inline-block !important +} + +.d-none { + display: none !important +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 20rem) { + .d-xs-block { + display: block !important + } + .d-xs-flex { + display: flex !important + } + .d-xs-inline { + display: inline !important + } + .d-xs-inline-block { + display: inline-block !important + } + .d-xs-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 31.25rem) { + .d-sm-block { + display: block !important + } + .d-sm-flex { + display: flex !important + } + .d-sm-inline { + display: inline !important + } + .d-sm-inline-block { + display: inline-block !important + } + .d-sm-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 46.25rem) { + .d-md-block { + display: block !important + } + .d-md-flex { + display: flex !important + } + .d-md-inline { + display: inline !important + } + .d-md-inline-block { + display: inline-block !important + } + .d-md-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 70rem) { + .d-lg-block { + display: block !important + } + .d-lg-flex { + display: flex !important + } + .d-lg-inline { + display: inline !important + } + .d-lg-inline-block { + display: inline-block !important + } + .d-lg-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +@media (min-width: 87.5rem) { + .d-xl-block { + display: block !important + } + .d-xl-flex { + display: flex !important + } + .d-xl-inline { + display: inline !important + } + .d-xl-inline-block { + display: inline-block !important + } + .d-xl-none { + display: none !important + } +} + +.v-align-baseline { + vertical-align: baseline !important +} + +.v-align-bottom { + vertical-align: bottom !important +} + +.v-align-middle { + vertical-align: middle !important +} + +.v-align-text-bottom { + vertical-align: text-bottom !important +} + +.v-align-text-top { + vertical-align: text-top !important +} + +.v-align-top { + vertical-align: top !important +} + +.fs-1 { + font-size: 9px !important +} + +@media (min-width: 31.25rem) { + .fs-1 { + font-size: 10px !important + } +} + +.fs-2 { + font-size: 11px !important +} + +@media (min-width: 31.25rem) { + .fs-2 { + font-size: 12px !important + } +} + +.fs-3 { + font-size: 12px !important +} + +@media (min-width: 31.25rem) { + .fs-3 { + font-size: 14px !important + } +} + +.fs-4 { + font-size: 14px !important +} + +@media (min-width: 31.25rem) { + .fs-4 { + font-size: 16px !important + } +} + +.fs-5 { + font-size: 16px !important +} + +@media (min-width: 31.25rem) { + .fs-5 { + font-size: 18px !important + } +} + +.fs-6 { + font-size: 18px !important +} + +@media (min-width: 31.25rem) { + .fs-6 { + font-size: 24px !important + } +} + +.fs-7 { + font-size: 24px !important +} + +@media (min-width: 31.25rem) { + .fs-7 { + font-size: 32px !important + } +} + +.fs-8 { + font-size: 32px !important +} + +@media (min-width: 31.25rem) { + .fs-8 { + font-size: 36px !important + } +} + +.fs-9 { + font-size: 36px !important +} + +@media (min-width: 31.25rem) { + .fs-9 { + font-size: 42px !important + } +} + +.fs-10 { + font-size: 42px !important +} + +@media (min-width: 31.25rem) { + .fs-10 { + font-size: 48px !important + } +} + +.fw-300 { + font-weight: 300 !important +} + +.fw-400 { + font-weight: 400 !important +} + +.fw-500 { + font-weight: 500 !important +} + +.fw-700 { + font-weight: 700 !important +} + +.lh-0 { + line-height: 0 !important +} + +.lh-default { + line-height: 1.4 +} + +.lh-tight { + line-height: 1.15 +} + +.ls-5 { + letter-spacing: 0.05em !important +} + +.ls-10 { + letter-spacing: 0.1em !important +} + +.ls-0 { + letter-spacing: 0 !important +} + +.text-uppercase { + text-transform: uppercase !important +} + +.list-style-none { + padding: 0 !important; + margin: 0 !important; + list-style: none !important +} + +.m-0 { + margin: 0 !important +} + +.mt-0 { + margin-top: 0 !important +} + +.mr-0 { + margin-right: 0 !important +} + +.mb-0 { + margin-bottom: 0 !important +} + +.ml-0 { + margin-left: 0 !important +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important +} + +.mxn-0 { + margin-right: -0 !important; + margin-left: -0 !important +} + +.m-1 { + margin: .25rem !important +} + +.mt-1 { + margin-top: .25rem !important +} + +.mr-1 { + margin-right: .25rem !important +} + +.mb-1 { + margin-bottom: .25rem !important +} + +.ml-1 { + margin-left: .25rem !important +} + +.mx-1 { + margin-right: .25rem !important; + margin-left: .25rem !important +} + +.my-1 { + margin-top: .25rem !important; + margin-bottom: .25rem !important +} + +.mxn-1 { + margin-right: -.25rem !important; + margin-left: -.25rem !important +} + +.m-2 { + margin: .5rem !important +} + +.mt-2 { + margin-top: .5rem !important +} + +.mr-2 { + margin-right: .5rem !important +} + +.mb-2 { + margin-bottom: .5rem !important +} + +.ml-2 { + margin-left: .5rem !important +} + +.mx-2 { + margin-right: .5rem !important; + margin-left: .5rem !important +} + +.my-2 { + margin-top: .5rem !important; + margin-bottom: .5rem !important +} + +.mxn-2 { + margin-right: -.5rem !important; + margin-left: -.5rem !important +} + +.m-3 { + margin: .75rem !important +} + +.mt-3 { + margin-top: .75rem !important +} + +.mr-3 { + margin-right: .75rem !important +} + +.mb-3 { + margin-bottom: .75rem !important +} + +.ml-3 { + margin-left: .75rem !important +} + +.mx-3 { + margin-right: .75rem !important; + margin-left: .75rem !important +} + +.my-3 { + margin-top: .75rem !important; + margin-bottom: .75rem !important +} + +.mxn-3 { + margin-right: -.75rem !important; + margin-left: -.75rem !important +} + +.m-4 { + margin: 1rem !important +} + +.mt-4 { + margin-top: 1rem !important +} + +.mr-4 { + margin-right: 1rem !important +} + +.mb-4 { + margin-bottom: 1rem !important +} + +.ml-4 { + margin-left: 1rem !important +} + +.mx-4 { + margin-right: 1rem !important; + margin-left: 1rem !important +} + +.my-4 { + margin-top: 1rem !important; + margin-bottom: 1rem !important +} + +.mxn-4 { + margin-right: -1rem !important; + margin-left: -1rem !important +} + +.m-5 { + margin: 1.5rem !important +} + +.mt-5 { + margin-top: 1.5rem !important +} + +.mr-5 { + margin-right: 1.5rem !important +} + +.mb-5 { + margin-bottom: 1.5rem !important +} + +.ml-5 { + margin-left: 1.5rem !important +} + +.mx-5 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important +} + +.my-5 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important +} + +.mxn-5 { + margin-right: -1.5rem !important; + margin-left: -1.5rem !important +} + +.m-6 { + margin: 2rem !important +} + +.mt-6 { + margin-top: 2rem !important +} + +.mr-6 { + margin-right: 2rem !important +} + +.mb-6 { + margin-bottom: 2rem !important +} + +.ml-6 { + margin-left: 2rem !important +} + +.mx-6 { + margin-right: 2rem !important; + margin-left: 2rem !important +} + +.my-6 { + margin-top: 2rem !important; + margin-bottom: 2rem !important +} + +.mxn-6 { + margin-right: -2rem !important; + margin-left: -2rem !important +} + +.m-7 { + margin: 2.5rem !important +} + +.mt-7 { + margin-top: 2.5rem !important +} + +.mr-7 { + margin-right: 2.5rem !important +} + +.mb-7 { + margin-bottom: 2.5rem !important +} + +.ml-7 { + margin-left: 2.5rem !important +} + +.mx-7 { + margin-right: 2.5rem !important; + margin-left: 2.5rem !important +} + +.my-7 { + margin-top: 2.5rem !important; + margin-bottom: 2.5rem !important +} + +.mxn-7 { + margin-right: -2.5rem !important; + margin-left: -2.5rem !important +} + +.m-8 { + margin: 3rem !important +} + +.mt-8 { + margin-top: 3rem !important +} + +.mr-8 { + margin-right: 3rem !important +} + +.mb-8 { + margin-bottom: 3rem !important +} + +.ml-8 { + margin-left: 3rem !important +} + +.mx-8 { + margin-right: 3rem !important; + margin-left: 3rem !important +} + +.my-8 { + margin-top: 3rem !important; + margin-bottom: 3rem !important +} + +.mxn-8 { + margin-right: -3rem !important; + margin-left: -3rem !important +} + +.m-9 { + margin: 3.5rem !important +} + +.mt-9 { + margin-top: 3.5rem !important +} + +.mr-9 { + margin-right: 3.5rem !important +} + +.mb-9 { + margin-bottom: 3.5rem !important +} + +.ml-9 { + margin-left: 3.5rem !important +} + +.mx-9 { + margin-right: 3.5rem !important; + margin-left: 3.5rem !important +} + +.my-9 { + margin-top: 3.5rem !important; + margin-bottom: 3.5rem !important +} + +.mxn-9 { + margin-right: -3.5rem !important; + margin-left: -3.5rem !important +} + +.m-10 { + margin: 4rem !important +} + +.mt-10 { + margin-top: 4rem !important +} + +.mr-10 { + margin-right: 4rem !important +} + +.mb-10 { + margin-bottom: 4rem !important +} + +.ml-10 { + margin-left: 4rem !important +} + +.mx-10 { + margin-right: 4rem !important; + margin-left: 4rem !important +} + +.my-10 { + margin-top: 4rem !important; + margin-bottom: 4rem !important +} + +.mxn-10 { + margin-right: -4rem !important; + margin-left: -4rem !important +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important +} + +@media (min-width: 20rem) { + .m-xs-0 { + margin: 0 !important + } + .mt-xs-0 { + margin-top: 0 !important + } + .mr-xs-0 { + margin-right: 0 !important + } + .mb-xs-0 { + margin-bottom: 0 !important + } + .ml-xs-0 { + margin-left: 0 !important + } + .mx-xs-0 { + margin-right: 0 !important; + margin-left: 0 !important + } + .my-xs-0 { + margin-top: 0 !important; + margin-bottom: 0 !important + } + .mxn-xs-0 { + margin-right: -0 !important; + margin-left: -0 !important + } +} + +@media (min-width: 20rem) { + .m-xs-1 { + margin: .25rem !important + } + .mt-xs-1 { + margin-top: .25rem !important + } + .mr-xs-1 { + margin-right: .25rem !important + } + .mb-xs-1 { + margin-bottom: .25rem !important + } + .ml-xs-1 { + margin-left: .25rem !important + } + .mx-xs-1 { + margin-right: .25rem !important; + margin-left: .25rem !important + } + .my-xs-1 { + margin-top: .25rem !important; + margin-bottom: .25rem !important + } + .mxn-xs-1 { + margin-right: -.25rem !important; + margin-left: -.25rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-2 { + margin: .5rem !important + } + .mt-xs-2 { + margin-top: .5rem !important + } + .mr-xs-2 { + margin-right: .5rem !important + } + .mb-xs-2 { + margin-bottom: .5rem !important + } + .ml-xs-2 { + margin-left: .5rem !important + } + .mx-xs-2 { + margin-right: .5rem !important; + margin-left: .5rem !important + } + .my-xs-2 { + margin-top: .5rem !important; + margin-bottom: .5rem !important + } + .mxn-xs-2 { + margin-right: -.5rem !important; + margin-left: -.5rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-3 { + margin: .75rem !important + } + .mt-xs-3 { + margin-top: .75rem !important + } + .mr-xs-3 { + margin-right: .75rem !important + } + .mb-xs-3 { + margin-bottom: .75rem !important + } + .ml-xs-3 { + margin-left: .75rem !important + } + .mx-xs-3 { + margin-right: .75rem !important; + margin-left: .75rem !important + } + .my-xs-3 { + margin-top: .75rem !important; + margin-bottom: .75rem !important + } + .mxn-xs-3 { + margin-right: -.75rem !important; + margin-left: -.75rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-4 { + margin: 1rem !important + } + .mt-xs-4 { + margin-top: 1rem !important + } + .mr-xs-4 { + margin-right: 1rem !important + } + .mb-xs-4 { + margin-bottom: 1rem !important + } + .ml-xs-4 { + margin-left: 1rem !important + } + .mx-xs-4 { + margin-right: 1rem !important; + margin-left: 1rem !important + } + .my-xs-4 { + margin-top: 1rem !important; + margin-bottom: 1rem !important + } + .mxn-xs-4 { + margin-right: -1rem !important; + margin-left: -1rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-5 { + margin: 1.5rem !important + } + .mt-xs-5 { + margin-top: 1.5rem !important + } + .mr-xs-5 { + margin-right: 1.5rem !important + } + .mb-xs-5 { + margin-bottom: 1.5rem !important + } + .ml-xs-5 { + margin-left: 1.5rem !important + } + .mx-xs-5 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important + } + .my-xs-5 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important + } + .mxn-xs-5 { + margin-right: -1.5rem !important; + margin-left: -1.5rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-6 { + margin: 2rem !important + } + .mt-xs-6 { + margin-top: 2rem !important + } + .mr-xs-6 { + margin-right: 2rem !important + } + .mb-xs-6 { + margin-bottom: 2rem !important + } + .ml-xs-6 { + margin-left: 2rem !important + } + .mx-xs-6 { + margin-right: 2rem !important; + margin-left: 2rem !important + } + .my-xs-6 { + margin-top: 2rem !important; + margin-bottom: 2rem !important + } + .mxn-xs-6 { + margin-right: -2rem !important; + margin-left: -2rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-7 { + margin: 2.5rem !important + } + .mt-xs-7 { + margin-top: 2.5rem !important + } + .mr-xs-7 { + margin-right: 2.5rem !important + } + .mb-xs-7 { + margin-bottom: 2.5rem !important + } + .ml-xs-7 { + margin-left: 2.5rem !important + } + .mx-xs-7 { + margin-right: 2.5rem !important; + margin-left: 2.5rem !important + } + .my-xs-7 { + margin-top: 2.5rem !important; + margin-bottom: 2.5rem !important + } + .mxn-xs-7 { + margin-right: -2.5rem !important; + margin-left: -2.5rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-8 { + margin: 3rem !important + } + .mt-xs-8 { + margin-top: 3rem !important + } + .mr-xs-8 { + margin-right: 3rem !important + } + .mb-xs-8 { + margin-bottom: 3rem !important + } + .ml-xs-8 { + margin-left: 3rem !important + } + .mx-xs-8 { + margin-right: 3rem !important; + margin-left: 3rem !important + } + .my-xs-8 { + margin-top: 3rem !important; + margin-bottom: 3rem !important + } + .mxn-xs-8 { + margin-right: -3rem !important; + margin-left: -3rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-9 { + margin: 3.5rem !important + } + .mt-xs-9 { + margin-top: 3.5rem !important + } + .mr-xs-9 { + margin-right: 3.5rem !important + } + .mb-xs-9 { + margin-bottom: 3.5rem !important + } + .ml-xs-9 { + margin-left: 3.5rem !important + } + .mx-xs-9 { + margin-right: 3.5rem !important; + margin-left: 3.5rem !important + } + .my-xs-9 { + margin-top: 3.5rem !important; + margin-bottom: 3.5rem !important + } + .mxn-xs-9 { + margin-right: -3.5rem !important; + margin-left: -3.5rem !important + } +} + +@media (min-width: 20rem) { + .m-xs-10 { + margin: 4rem !important + } + .mt-xs-10 { + margin-top: 4rem !important + } + .mr-xs-10 { + margin-right: 4rem !important + } + .mb-xs-10 { + margin-bottom: 4rem !important + } + .ml-xs-10 { + margin-left: 4rem !important + } + .mx-xs-10 { + margin-right: 4rem !important; + margin-left: 4rem !important + } + .my-xs-10 { + margin-top: 4rem !important; + margin-bottom: 4rem !important + } + .mxn-xs-10 { + margin-right: -4rem !important; + margin-left: -4rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-0 { + margin: 0 !important + } + .mt-sm-0 { + margin-top: 0 !important + } + .mr-sm-0 { + margin-right: 0 !important + } + .mb-sm-0 { + margin-bottom: 0 !important + } + .ml-sm-0 { + margin-left: 0 !important + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important + } + .mxn-sm-0 { + margin-right: -0 !important; + margin-left: -0 !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-1 { + margin: .25rem !important + } + .mt-sm-1 { + margin-top: .25rem !important + } + .mr-sm-1 { + margin-right: .25rem !important + } + .mb-sm-1 { + margin-bottom: .25rem !important + } + .ml-sm-1 { + margin-left: .25rem !important + } + .mx-sm-1 { + margin-right: .25rem !important; + margin-left: .25rem !important + } + .my-sm-1 { + margin-top: .25rem !important; + margin-bottom: .25rem !important + } + .mxn-sm-1 { + margin-right: -.25rem !important; + margin-left: -.25rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-2 { + margin: .5rem !important + } + .mt-sm-2 { + margin-top: .5rem !important + } + .mr-sm-2 { + margin-right: .5rem !important + } + .mb-sm-2 { + margin-bottom: .5rem !important + } + .ml-sm-2 { + margin-left: .5rem !important + } + .mx-sm-2 { + margin-right: .5rem !important; + margin-left: .5rem !important + } + .my-sm-2 { + margin-top: .5rem !important; + margin-bottom: .5rem !important + } + .mxn-sm-2 { + margin-right: -.5rem !important; + margin-left: -.5rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-3 { + margin: .75rem !important + } + .mt-sm-3 { + margin-top: .75rem !important + } + .mr-sm-3 { + margin-right: .75rem !important + } + .mb-sm-3 { + margin-bottom: .75rem !important + } + .ml-sm-3 { + margin-left: .75rem !important + } + .mx-sm-3 { + margin-right: .75rem !important; + margin-left: .75rem !important + } + .my-sm-3 { + margin-top: .75rem !important; + margin-bottom: .75rem !important + } + .mxn-sm-3 { + margin-right: -.75rem !important; + margin-left: -.75rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-4 { + margin: 1rem !important + } + .mt-sm-4 { + margin-top: 1rem !important + } + .mr-sm-4 { + margin-right: 1rem !important + } + .mb-sm-4 { + margin-bottom: 1rem !important + } + .ml-sm-4 { + margin-left: 1rem !important + } + .mx-sm-4 { + margin-right: 1rem !important; + margin-left: 1rem !important + } + .my-sm-4 { + margin-top: 1rem !important; + margin-bottom: 1rem !important + } + .mxn-sm-4 { + margin-right: -1rem !important; + margin-left: -1rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-5 { + margin: 1.5rem !important + } + .mt-sm-5 { + margin-top: 1.5rem !important + } + .mr-sm-5 { + margin-right: 1.5rem !important + } + .mb-sm-5 { + margin-bottom: 1.5rem !important + } + .ml-sm-5 { + margin-left: 1.5rem !important + } + .mx-sm-5 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important + } + .my-sm-5 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important + } + .mxn-sm-5 { + margin-right: -1.5rem !important; + margin-left: -1.5rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-6 { + margin: 2rem !important + } + .mt-sm-6 { + margin-top: 2rem !important + } + .mr-sm-6 { + margin-right: 2rem !important + } + .mb-sm-6 { + margin-bottom: 2rem !important + } + .ml-sm-6 { + margin-left: 2rem !important + } + .mx-sm-6 { + margin-right: 2rem !important; + margin-left: 2rem !important + } + .my-sm-6 { + margin-top: 2rem !important; + margin-bottom: 2rem !important + } + .mxn-sm-6 { + margin-right: -2rem !important; + margin-left: -2rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-7 { + margin: 2.5rem !important + } + .mt-sm-7 { + margin-top: 2.5rem !important + } + .mr-sm-7 { + margin-right: 2.5rem !important + } + .mb-sm-7 { + margin-bottom: 2.5rem !important + } + .ml-sm-7 { + margin-left: 2.5rem !important + } + .mx-sm-7 { + margin-right: 2.5rem !important; + margin-left: 2.5rem !important + } + .my-sm-7 { + margin-top: 2.5rem !important; + margin-bottom: 2.5rem !important + } + .mxn-sm-7 { + margin-right: -2.5rem !important; + margin-left: -2.5rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-8 { + margin: 3rem !important + } + .mt-sm-8 { + margin-top: 3rem !important + } + .mr-sm-8 { + margin-right: 3rem !important + } + .mb-sm-8 { + margin-bottom: 3rem !important + } + .ml-sm-8 { + margin-left: 3rem !important + } + .mx-sm-8 { + margin-right: 3rem !important; + margin-left: 3rem !important + } + .my-sm-8 { + margin-top: 3rem !important; + margin-bottom: 3rem !important + } + .mxn-sm-8 { + margin-right: -3rem !important; + margin-left: -3rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-9 { + margin: 3.5rem !important + } + .mt-sm-9 { + margin-top: 3.5rem !important + } + .mr-sm-9 { + margin-right: 3.5rem !important + } + .mb-sm-9 { + margin-bottom: 3.5rem !important + } + .ml-sm-9 { + margin-left: 3.5rem !important + } + .mx-sm-9 { + margin-right: 3.5rem !important; + margin-left: 3.5rem !important + } + .my-sm-9 { + margin-top: 3.5rem !important; + margin-bottom: 3.5rem !important + } + .mxn-sm-9 { + margin-right: -3.5rem !important; + margin-left: -3.5rem !important + } +} + +@media (min-width: 31.25rem) { + .m-sm-10 { + margin: 4rem !important + } + .mt-sm-10 { + margin-top: 4rem !important + } + .mr-sm-10 { + margin-right: 4rem !important + } + .mb-sm-10 { + margin-bottom: 4rem !important + } + .ml-sm-10 { + margin-left: 4rem !important + } + .mx-sm-10 { + margin-right: 4rem !important; + margin-left: 4rem !important + } + .my-sm-10 { + margin-top: 4rem !important; + margin-bottom: 4rem !important + } + .mxn-sm-10 { + margin-right: -4rem !important; + margin-left: -4rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-0 { + margin: 0 !important + } + .mt-md-0 { + margin-top: 0 !important + } + .mr-md-0 { + margin-right: 0 !important + } + .mb-md-0 { + margin-bottom: 0 !important + } + .ml-md-0 { + margin-left: 0 !important + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important + } + .mxn-md-0 { + margin-right: -0 !important; + margin-left: -0 !important + } +} + +@media (min-width: 46.25rem) { + .m-md-1 { + margin: .25rem !important + } + .mt-md-1 { + margin-top: .25rem !important + } + .mr-md-1 { + margin-right: .25rem !important + } + .mb-md-1 { + margin-bottom: .25rem !important + } + .ml-md-1 { + margin-left: .25rem !important + } + .mx-md-1 { + margin-right: .25rem !important; + margin-left: .25rem !important + } + .my-md-1 { + margin-top: .25rem !important; + margin-bottom: .25rem !important + } + .mxn-md-1 { + margin-right: -.25rem !important; + margin-left: -.25rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-2 { + margin: .5rem !important + } + .mt-md-2 { + margin-top: .5rem !important + } + .mr-md-2 { + margin-right: .5rem !important + } + .mb-md-2 { + margin-bottom: .5rem !important + } + .ml-md-2 { + margin-left: .5rem !important + } + .mx-md-2 { + margin-right: .5rem !important; + margin-left: .5rem !important + } + .my-md-2 { + margin-top: .5rem !important; + margin-bottom: .5rem !important + } + .mxn-md-2 { + margin-right: -.5rem !important; + margin-left: -.5rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-3 { + margin: .75rem !important + } + .mt-md-3 { + margin-top: .75rem !important + } + .mr-md-3 { + margin-right: .75rem !important + } + .mb-md-3 { + margin-bottom: .75rem !important + } + .ml-md-3 { + margin-left: .75rem !important + } + .mx-md-3 { + margin-right: .75rem !important; + margin-left: .75rem !important + } + .my-md-3 { + margin-top: .75rem !important; + margin-bottom: .75rem !important + } + .mxn-md-3 { + margin-right: -.75rem !important; + margin-left: -.75rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-4 { + margin: 1rem !important + } + .mt-md-4 { + margin-top: 1rem !important + } + .mr-md-4 { + margin-right: 1rem !important + } + .mb-md-4 { + margin-bottom: 1rem !important + } + .ml-md-4 { + margin-left: 1rem !important + } + .mx-md-4 { + margin-right: 1rem !important; + margin-left: 1rem !important + } + .my-md-4 { + margin-top: 1rem !important; + margin-bottom: 1rem !important + } + .mxn-md-4 { + margin-right: -1rem !important; + margin-left: -1rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-5 { + margin: 1.5rem !important + } + .mt-md-5 { + margin-top: 1.5rem !important + } + .mr-md-5 { + margin-right: 1.5rem !important + } + .mb-md-5 { + margin-bottom: 1.5rem !important + } + .ml-md-5 { + margin-left: 1.5rem !important + } + .mx-md-5 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important + } + .my-md-5 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important + } + .mxn-md-5 { + margin-right: -1.5rem !important; + margin-left: -1.5rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-6 { + margin: 2rem !important + } + .mt-md-6 { + margin-top: 2rem !important + } + .mr-md-6 { + margin-right: 2rem !important + } + .mb-md-6 { + margin-bottom: 2rem !important + } + .ml-md-6 { + margin-left: 2rem !important + } + .mx-md-6 { + margin-right: 2rem !important; + margin-left: 2rem !important + } + .my-md-6 { + margin-top: 2rem !important; + margin-bottom: 2rem !important + } + .mxn-md-6 { + margin-right: -2rem !important; + margin-left: -2rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-7 { + margin: 2.5rem !important + } + .mt-md-7 { + margin-top: 2.5rem !important + } + .mr-md-7 { + margin-right: 2.5rem !important + } + .mb-md-7 { + margin-bottom: 2.5rem !important + } + .ml-md-7 { + margin-left: 2.5rem !important + } + .mx-md-7 { + margin-right: 2.5rem !important; + margin-left: 2.5rem !important + } + .my-md-7 { + margin-top: 2.5rem !important; + margin-bottom: 2.5rem !important + } + .mxn-md-7 { + margin-right: -2.5rem !important; + margin-left: -2.5rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-8 { + margin: 3rem !important + } + .mt-md-8 { + margin-top: 3rem !important + } + .mr-md-8 { + margin-right: 3rem !important + } + .mb-md-8 { + margin-bottom: 3rem !important + } + .ml-md-8 { + margin-left: 3rem !important + } + .mx-md-8 { + margin-right: 3rem !important; + margin-left: 3rem !important + } + .my-md-8 { + margin-top: 3rem !important; + margin-bottom: 3rem !important + } + .mxn-md-8 { + margin-right: -3rem !important; + margin-left: -3rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-9 { + margin: 3.5rem !important + } + .mt-md-9 { + margin-top: 3.5rem !important + } + .mr-md-9 { + margin-right: 3.5rem !important + } + .mb-md-9 { + margin-bottom: 3.5rem !important + } + .ml-md-9 { + margin-left: 3.5rem !important + } + .mx-md-9 { + margin-right: 3.5rem !important; + margin-left: 3.5rem !important + } + .my-md-9 { + margin-top: 3.5rem !important; + margin-bottom: 3.5rem !important + } + .mxn-md-9 { + margin-right: -3.5rem !important; + margin-left: -3.5rem !important + } +} + +@media (min-width: 46.25rem) { + .m-md-10 { + margin: 4rem !important + } + .mt-md-10 { + margin-top: 4rem !important + } + .mr-md-10 { + margin-right: 4rem !important + } + .mb-md-10 { + margin-bottom: 4rem !important + } + .ml-md-10 { + margin-left: 4rem !important + } + .mx-md-10 { + margin-right: 4rem !important; + margin-left: 4rem !important + } + .my-md-10 { + margin-top: 4rem !important; + margin-bottom: 4rem !important + } + .mxn-md-10 { + margin-right: -4rem !important; + margin-left: -4rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-0 { + margin: 0 !important + } + .mt-lg-0 { + margin-top: 0 !important + } + .mr-lg-0 { + margin-right: 0 !important + } + .mb-lg-0 { + margin-bottom: 0 !important + } + .ml-lg-0 { + margin-left: 0 !important + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important + } + .mxn-lg-0 { + margin-right: -0 !important; + margin-left: -0 !important + } +} + +@media (min-width: 70rem) { + .m-lg-1 { + margin: .25rem !important + } + .mt-lg-1 { + margin-top: .25rem !important + } + .mr-lg-1 { + margin-right: .25rem !important + } + .mb-lg-1 { + margin-bottom: .25rem !important + } + .ml-lg-1 { + margin-left: .25rem !important + } + .mx-lg-1 { + margin-right: .25rem !important; + margin-left: .25rem !important + } + .my-lg-1 { + margin-top: .25rem !important; + margin-bottom: .25rem !important + } + .mxn-lg-1 { + margin-right: -.25rem !important; + margin-left: -.25rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-2 { + margin: .5rem !important + } + .mt-lg-2 { + margin-top: .5rem !important + } + .mr-lg-2 { + margin-right: .5rem !important + } + .mb-lg-2 { + margin-bottom: .5rem !important + } + .ml-lg-2 { + margin-left: .5rem !important + } + .mx-lg-2 { + margin-right: .5rem !important; + margin-left: .5rem !important + } + .my-lg-2 { + margin-top: .5rem !important; + margin-bottom: .5rem !important + } + .mxn-lg-2 { + margin-right: -.5rem !important; + margin-left: -.5rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-3 { + margin: .75rem !important + } + .mt-lg-3 { + margin-top: .75rem !important + } + .mr-lg-3 { + margin-right: .75rem !important + } + .mb-lg-3 { + margin-bottom: .75rem !important + } + .ml-lg-3 { + margin-left: .75rem !important + } + .mx-lg-3 { + margin-right: .75rem !important; + margin-left: .75rem !important + } + .my-lg-3 { + margin-top: .75rem !important; + margin-bottom: .75rem !important + } + .mxn-lg-3 { + margin-right: -.75rem !important; + margin-left: -.75rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-4 { + margin: 1rem !important + } + .mt-lg-4 { + margin-top: 1rem !important + } + .mr-lg-4 { + margin-right: 1rem !important + } + .mb-lg-4 { + margin-bottom: 1rem !important + } + .ml-lg-4 { + margin-left: 1rem !important + } + .mx-lg-4 { + margin-right: 1rem !important; + margin-left: 1rem !important + } + .my-lg-4 { + margin-top: 1rem !important; + margin-bottom: 1rem !important + } + .mxn-lg-4 { + margin-right: -1rem !important; + margin-left: -1rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-5 { + margin: 1.5rem !important + } + .mt-lg-5 { + margin-top: 1.5rem !important + } + .mr-lg-5 { + margin-right: 1.5rem !important + } + .mb-lg-5 { + margin-bottom: 1.5rem !important + } + .ml-lg-5 { + margin-left: 1.5rem !important + } + .mx-lg-5 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important + } + .my-lg-5 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important + } + .mxn-lg-5 { + margin-right: -1.5rem !important; + margin-left: -1.5rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-6 { + margin: 2rem !important + } + .mt-lg-6 { + margin-top: 2rem !important + } + .mr-lg-6 { + margin-right: 2rem !important + } + .mb-lg-6 { + margin-bottom: 2rem !important + } + .ml-lg-6 { + margin-left: 2rem !important + } + .mx-lg-6 { + margin-right: 2rem !important; + margin-left: 2rem !important + } + .my-lg-6 { + margin-top: 2rem !important; + margin-bottom: 2rem !important + } + .mxn-lg-6 { + margin-right: -2rem !important; + margin-left: -2rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-7 { + margin: 2.5rem !important + } + .mt-lg-7 { + margin-top: 2.5rem !important + } + .mr-lg-7 { + margin-right: 2.5rem !important + } + .mb-lg-7 { + margin-bottom: 2.5rem !important + } + .ml-lg-7 { + margin-left: 2.5rem !important + } + .mx-lg-7 { + margin-right: 2.5rem !important; + margin-left: 2.5rem !important + } + .my-lg-7 { + margin-top: 2.5rem !important; + margin-bottom: 2.5rem !important + } + .mxn-lg-7 { + margin-right: -2.5rem !important; + margin-left: -2.5rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-8 { + margin: 3rem !important + } + .mt-lg-8 { + margin-top: 3rem !important + } + .mr-lg-8 { + margin-right: 3rem !important + } + .mb-lg-8 { + margin-bottom: 3rem !important + } + .ml-lg-8 { + margin-left: 3rem !important + } + .mx-lg-8 { + margin-right: 3rem !important; + margin-left: 3rem !important + } + .my-lg-8 { + margin-top: 3rem !important; + margin-bottom: 3rem !important + } + .mxn-lg-8 { + margin-right: -3rem !important; + margin-left: -3rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-9 { + margin: 3.5rem !important + } + .mt-lg-9 { + margin-top: 3.5rem !important + } + .mr-lg-9 { + margin-right: 3.5rem !important + } + .mb-lg-9 { + margin-bottom: 3.5rem !important + } + .ml-lg-9 { + margin-left: 3.5rem !important + } + .mx-lg-9 { + margin-right: 3.5rem !important; + margin-left: 3.5rem !important + } + .my-lg-9 { + margin-top: 3.5rem !important; + margin-bottom: 3.5rem !important + } + .mxn-lg-9 { + margin-right: -3.5rem !important; + margin-left: -3.5rem !important + } +} + +@media (min-width: 70rem) { + .m-lg-10 { + margin: 4rem !important + } + .mt-lg-10 { + margin-top: 4rem !important + } + .mr-lg-10 { + margin-right: 4rem !important + } + .mb-lg-10 { + margin-bottom: 4rem !important + } + .ml-lg-10 { + margin-left: 4rem !important + } + .mx-lg-10 { + margin-right: 4rem !important; + margin-left: 4rem !important + } + .my-lg-10 { + margin-top: 4rem !important; + margin-bottom: 4rem !important + } + .mxn-lg-10 { + margin-right: -4rem !important; + margin-left: -4rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-0 { + margin: 0 !important + } + .mt-xl-0 { + margin-top: 0 !important + } + .mr-xl-0 { + margin-right: 0 !important + } + .mb-xl-0 { + margin-bottom: 0 !important + } + .ml-xl-0 { + margin-left: 0 !important + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important + } + .mxn-xl-0 { + margin-right: -0 !important; + margin-left: -0 !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-1 { + margin: .25rem !important + } + .mt-xl-1 { + margin-top: .25rem !important + } + .mr-xl-1 { + margin-right: .25rem !important + } + .mb-xl-1 { + margin-bottom: .25rem !important + } + .ml-xl-1 { + margin-left: .25rem !important + } + .mx-xl-1 { + margin-right: .25rem !important; + margin-left: .25rem !important + } + .my-xl-1 { + margin-top: .25rem !important; + margin-bottom: .25rem !important + } + .mxn-xl-1 { + margin-right: -.25rem !important; + margin-left: -.25rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-2 { + margin: .5rem !important + } + .mt-xl-2 { + margin-top: .5rem !important + } + .mr-xl-2 { + margin-right: .5rem !important + } + .mb-xl-2 { + margin-bottom: .5rem !important + } + .ml-xl-2 { + margin-left: .5rem !important + } + .mx-xl-2 { + margin-right: .5rem !important; + margin-left: .5rem !important + } + .my-xl-2 { + margin-top: .5rem !important; + margin-bottom: .5rem !important + } + .mxn-xl-2 { + margin-right: -.5rem !important; + margin-left: -.5rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-3 { + margin: .75rem !important + } + .mt-xl-3 { + margin-top: .75rem !important + } + .mr-xl-3 { + margin-right: .75rem !important + } + .mb-xl-3 { + margin-bottom: .75rem !important + } + .ml-xl-3 { + margin-left: .75rem !important + } + .mx-xl-3 { + margin-right: .75rem !important; + margin-left: .75rem !important + } + .my-xl-3 { + margin-top: .75rem !important; + margin-bottom: .75rem !important + } + .mxn-xl-3 { + margin-right: -.75rem !important; + margin-left: -.75rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-4 { + margin: 1rem !important + } + .mt-xl-4 { + margin-top: 1rem !important + } + .mr-xl-4 { + margin-right: 1rem !important + } + .mb-xl-4 { + margin-bottom: 1rem !important + } + .ml-xl-4 { + margin-left: 1rem !important + } + .mx-xl-4 { + margin-right: 1rem !important; + margin-left: 1rem !important + } + .my-xl-4 { + margin-top: 1rem !important; + margin-bottom: 1rem !important + } + .mxn-xl-4 { + margin-right: -1rem !important; + margin-left: -1rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-5 { + margin: 1.5rem !important + } + .mt-xl-5 { + margin-top: 1.5rem !important + } + .mr-xl-5 { + margin-right: 1.5rem !important + } + .mb-xl-5 { + margin-bottom: 1.5rem !important + } + .ml-xl-5 { + margin-left: 1.5rem !important + } + .mx-xl-5 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important + } + .my-xl-5 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important + } + .mxn-xl-5 { + margin-right: -1.5rem !important; + margin-left: -1.5rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-6 { + margin: 2rem !important + } + .mt-xl-6 { + margin-top: 2rem !important + } + .mr-xl-6 { + margin-right: 2rem !important + } + .mb-xl-6 { + margin-bottom: 2rem !important + } + .ml-xl-6 { + margin-left: 2rem !important + } + .mx-xl-6 { + margin-right: 2rem !important; + margin-left: 2rem !important + } + .my-xl-6 { + margin-top: 2rem !important; + margin-bottom: 2rem !important + } + .mxn-xl-6 { + margin-right: -2rem !important; + margin-left: -2rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-7 { + margin: 2.5rem !important + } + .mt-xl-7 { + margin-top: 2.5rem !important + } + .mr-xl-7 { + margin-right: 2.5rem !important + } + .mb-xl-7 { + margin-bottom: 2.5rem !important + } + .ml-xl-7 { + margin-left: 2.5rem !important + } + .mx-xl-7 { + margin-right: 2.5rem !important; + margin-left: 2.5rem !important + } + .my-xl-7 { + margin-top: 2.5rem !important; + margin-bottom: 2.5rem !important + } + .mxn-xl-7 { + margin-right: -2.5rem !important; + margin-left: -2.5rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-8 { + margin: 3rem !important + } + .mt-xl-8 { + margin-top: 3rem !important + } + .mr-xl-8 { + margin-right: 3rem !important + } + .mb-xl-8 { + margin-bottom: 3rem !important + } + .ml-xl-8 { + margin-left: 3rem !important + } + .mx-xl-8 { + margin-right: 3rem !important; + margin-left: 3rem !important + } + .my-xl-8 { + margin-top: 3rem !important; + margin-bottom: 3rem !important + } + .mxn-xl-8 { + margin-right: -3rem !important; + margin-left: -3rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-9 { + margin: 3.5rem !important + } + .mt-xl-9 { + margin-top: 3.5rem !important + } + .mr-xl-9 { + margin-right: 3.5rem !important + } + .mb-xl-9 { + margin-bottom: 3.5rem !important + } + .ml-xl-9 { + margin-left: 3.5rem !important + } + .mx-xl-9 { + margin-right: 3.5rem !important; + margin-left: 3.5rem !important + } + .my-xl-9 { + margin-top: 3.5rem !important; + margin-bottom: 3.5rem !important + } + .mxn-xl-9 { + margin-right: -3.5rem !important; + margin-left: -3.5rem !important + } +} + +@media (min-width: 87.5rem) { + .m-xl-10 { + margin: 4rem !important + } + .mt-xl-10 { + margin-top: 4rem !important + } + .mr-xl-10 { + margin-right: 4rem !important + } + .mb-xl-10 { + margin-bottom: 4rem !important + } + .ml-xl-10 { + margin-left: 4rem !important + } + .mx-xl-10 { + margin-right: 4rem !important; + margin-left: 4rem !important + } + .my-xl-10 { + margin-top: 4rem !important; + margin-bottom: 4rem !important + } + .mxn-xl-10 { + margin-right: -4rem !important; + margin-left: -4rem !important + } +} + +.p-0 { + padding: 0 !important +} + +.pt-0 { + padding-top: 0 !important +} + +.pr-0 { + padding-right: 0 !important +} + +.pb-0 { + padding-bottom: 0 !important +} + +.pl-0 { + padding-left: 0 !important +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important +} + +.p-1 { + padding: .25rem !important +} + +.pt-1 { + padding-top: .25rem !important +} + +.pr-1 { + padding-right: .25rem !important +} + +.pb-1 { + padding-bottom: .25rem !important +} + +.pl-1 { + padding-left: .25rem !important +} + +.px-1 { + padding-right: .25rem !important; + padding-left: .25rem !important +} + +.py-1 { + padding-top: .25rem !important; + padding-bottom: .25rem !important +} + +.p-2 { + padding: .5rem !important +} + +.pt-2 { + padding-top: .5rem !important +} + +.pr-2 { + padding-right: .5rem !important +} + +.pb-2 { + padding-bottom: .5rem !important +} + +.pl-2 { + padding-left: .5rem !important +} + +.px-2 { + padding-right: .5rem !important; + padding-left: .5rem !important +} + +.py-2 { + padding-top: .5rem !important; + padding-bottom: .5rem !important +} + +.p-3 { + padding: .75rem !important +} + +.pt-3 { + padding-top: .75rem !important +} + +.pr-3 { + padding-right: .75rem !important +} + +.pb-3 { + padding-bottom: .75rem !important +} + +.pl-3 { + padding-left: .75rem !important +} + +.px-3 { + padding-right: .75rem !important; + padding-left: .75rem !important +} + +.py-3 { + padding-top: .75rem !important; + padding-bottom: .75rem !important +} + +.p-4 { + padding: 1rem !important +} + +.pt-4 { + padding-top: 1rem !important +} + +.pr-4 { + padding-right: 1rem !important +} + +.pb-4 { + padding-bottom: 1rem !important +} + +.pl-4 { + padding-left: 1rem !important +} + +.px-4 { + padding-right: 1rem !important; + padding-left: 1rem !important +} + +.py-4 { + padding-top: 1rem !important; + padding-bottom: 1rem !important +} + +.p-5 { + padding: 1.5rem !important +} + +.pt-5 { + padding-top: 1.5rem !important +} + +.pr-5 { + padding-right: 1.5rem !important +} + +.pb-5 { + padding-bottom: 1.5rem !important +} + +.pl-5 { + padding-left: 1.5rem !important +} + +.px-5 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important +} + +.py-5 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important +} + +.p-6 { + padding: 2rem !important +} + +.pt-6 { + padding-top: 2rem !important +} + +.pr-6 { + padding-right: 2rem !important +} + +.pb-6 { + padding-bottom: 2rem !important +} + +.pl-6 { + padding-left: 2rem !important +} + +.px-6 { + padding-right: 2rem !important; + padding-left: 2rem !important +} + +.py-6 { + padding-top: 2rem !important; + padding-bottom: 2rem !important +} + +.p-7 { + padding: 2.5rem !important +} + +.pt-7 { + padding-top: 2.5rem !important +} + +.pr-7 { + padding-right: 2.5rem !important +} + +.pb-7 { + padding-bottom: 2.5rem !important +} + +.pl-7 { + padding-left: 2.5rem !important +} + +.px-7 { + padding-right: 2.5rem !important; + padding-left: 2.5rem !important +} + +.py-7 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important +} + +.p-8 { + padding: 3rem !important +} + +.pt-8 { + padding-top: 3rem !important +} + +.pr-8 { + padding-right: 3rem !important +} + +.pb-8 { + padding-bottom: 3rem !important +} + +.pl-8 { + padding-left: 3rem !important +} + +.px-8 { + padding-right: 3rem !important; + padding-left: 3rem !important +} + +.py-8 { + padding-top: 3rem !important; + padding-bottom: 3rem !important +} + +.p-9 { + padding: 3.5rem !important +} + +.pt-9 { + padding-top: 3.5rem !important +} + +.pr-9 { + padding-right: 3.5rem !important +} + +.pb-9 { + padding-bottom: 3.5rem !important +} + +.pl-9 { + padding-left: 3.5rem !important +} + +.px-9 { + padding-right: 3.5rem !important; + padding-left: 3.5rem !important +} + +.py-9 { + padding-top: 3.5rem !important; + padding-bottom: 3.5rem !important +} + +.p-10 { + padding: 4rem !important +} + +.pt-10 { + padding-top: 4rem !important +} + +.pr-10 { + padding-right: 4rem !important +} + +.pb-10 { + padding-bottom: 4rem !important +} + +.pl-10 { + padding-left: 4rem !important +} + +.px-10 { + padding-right: 4rem !important; + padding-left: 4rem !important +} + +.py-10 { + padding-top: 4rem !important; + padding-bottom: 4rem !important +} + +@media (min-width: 20rem) { + .p-xs-0 { + padding: 0 !important + } + .pt-xs-0 { + padding-top: 0 !important + } + .pr-xs-0 { + padding-right: 0 !important + } + .pb-xs-0 { + padding-bottom: 0 !important + } + .pl-xs-0 { + padding-left: 0 !important + } + .px-xs-0 { + padding-right: 0 !important; + padding-left: 0 !important + } + .py-xs-0 { + padding-top: 0 !important; + padding-bottom: 0 !important + } + .p-xs-1 { + padding: .25rem !important + } + .pt-xs-1 { + padding-top: .25rem !important + } + .pr-xs-1 { + padding-right: .25rem !important + } + .pb-xs-1 { + padding-bottom: .25rem !important + } + .pl-xs-1 { + padding-left: .25rem !important + } + .px-xs-1 { + padding-right: .25rem !important; + padding-left: .25rem !important + } + .py-xs-1 { + padding-top: .25rem !important; + padding-bottom: .25rem !important + } + .p-xs-2 { + padding: .5rem !important + } + .pt-xs-2 { + padding-top: .5rem !important + } + .pr-xs-2 { + padding-right: .5rem !important + } + .pb-xs-2 { + padding-bottom: .5rem !important + } + .pl-xs-2 { + padding-left: .5rem !important + } + .px-xs-2 { + padding-right: .5rem !important; + padding-left: .5rem !important + } + .py-xs-2 { + padding-top: .5rem !important; + padding-bottom: .5rem !important + } + .p-xs-3 { + padding: .75rem !important + } + .pt-xs-3 { + padding-top: .75rem !important + } + .pr-xs-3 { + padding-right: .75rem !important + } + .pb-xs-3 { + padding-bottom: .75rem !important + } + .pl-xs-3 { + padding-left: .75rem !important + } + .px-xs-3 { + padding-right: .75rem !important; + padding-left: .75rem !important + } + .py-xs-3 { + padding-top: .75rem !important; + padding-bottom: .75rem !important + } + .p-xs-4 { + padding: 1rem !important + } + .pt-xs-4 { + padding-top: 1rem !important + } + .pr-xs-4 { + padding-right: 1rem !important + } + .pb-xs-4 { + padding-bottom: 1rem !important + } + .pl-xs-4 { + padding-left: 1rem !important + } + .px-xs-4 { + padding-right: 1rem !important; + padding-left: 1rem !important + } + .py-xs-4 { + padding-top: 1rem !important; + padding-bottom: 1rem !important + } + .p-xs-5 { + padding: 1.5rem !important + } + .pt-xs-5 { + padding-top: 1.5rem !important + } + .pr-xs-5 { + padding-right: 1.5rem !important + } + .pb-xs-5 { + padding-bottom: 1.5rem !important + } + .pl-xs-5 { + padding-left: 1.5rem !important + } + .px-xs-5 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important + } + .py-xs-5 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important + } + .p-xs-6 { + padding: 2rem !important + } + .pt-xs-6 { + padding-top: 2rem !important + } + .pr-xs-6 { + padding-right: 2rem !important + } + .pb-xs-6 { + padding-bottom: 2rem !important + } + .pl-xs-6 { + padding-left: 2rem !important + } + .px-xs-6 { + padding-right: 2rem !important; + padding-left: 2rem !important + } + .py-xs-6 { + padding-top: 2rem !important; + padding-bottom: 2rem !important + } + .p-xs-7 { + padding: 2.5rem !important + } + .pt-xs-7 { + padding-top: 2.5rem !important + } + .pr-xs-7 { + padding-right: 2.5rem !important + } + .pb-xs-7 { + padding-bottom: 2.5rem !important + } + .pl-xs-7 { + padding-left: 2.5rem !important + } + .px-xs-7 { + padding-right: 2.5rem !important; + padding-left: 2.5rem !important + } + .py-xs-7 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important + } + .p-xs-8 { + padding: 3rem !important + } + .pt-xs-8 { + padding-top: 3rem !important + } + .pr-xs-8 { + padding-right: 3rem !important + } + .pb-xs-8 { + padding-bottom: 3rem !important + } + .pl-xs-8 { + padding-left: 3rem !important + } + .px-xs-8 { + padding-right: 3rem !important; + padding-left: 3rem !important + } + .py-xs-8 { + padding-top: 3rem !important; + padding-bottom: 3rem !important + } + .p-xs-9 { + padding: 3.5rem !important + } + .pt-xs-9 { + padding-top: 3.5rem !important + } + .pr-xs-9 { + padding-right: 3.5rem !important + } + .pb-xs-9 { + padding-bottom: 3.5rem !important + } + .pl-xs-9 { + padding-left: 3.5rem !important + } + .px-xs-9 { + padding-right: 3.5rem !important; + padding-left: 3.5rem !important + } + .py-xs-9 { + padding-top: 3.5rem !important; + padding-bottom: 3.5rem !important + } + .p-xs-10 { + padding: 4rem !important + } + .pt-xs-10 { + padding-top: 4rem !important + } + .pr-xs-10 { + padding-right: 4rem !important + } + .pb-xs-10 { + padding-bottom: 4rem !important + } + .pl-xs-10 { + padding-left: 4rem !important + } + .px-xs-10 { + padding-right: 4rem !important; + padding-left: 4rem !important + } + .py-xs-10 { + padding-top: 4rem !important; + padding-bottom: 4rem !important + } +} + +@media (min-width: 31.25rem) { + .p-sm-0 { + padding: 0 !important + } + .pt-sm-0 { + padding-top: 0 !important + } + .pr-sm-0 { + padding-right: 0 !important + } + .pb-sm-0 { + padding-bottom: 0 !important + } + .pl-sm-0 { + padding-left: 0 !important + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important + } + .p-sm-1 { + padding: .25rem !important + } + .pt-sm-1 { + padding-top: .25rem !important + } + .pr-sm-1 { + padding-right: .25rem !important + } + .pb-sm-1 { + padding-bottom: .25rem !important + } + .pl-sm-1 { + padding-left: .25rem !important + } + .px-sm-1 { + padding-right: .25rem !important; + padding-left: .25rem !important + } + .py-sm-1 { + padding-top: .25rem !important; + padding-bottom: .25rem !important + } + .p-sm-2 { + padding: .5rem !important + } + .pt-sm-2 { + padding-top: .5rem !important + } + .pr-sm-2 { + padding-right: .5rem !important + } + .pb-sm-2 { + padding-bottom: .5rem !important + } + .pl-sm-2 { + padding-left: .5rem !important + } + .px-sm-2 { + padding-right: .5rem !important; + padding-left: .5rem !important + } + .py-sm-2 { + padding-top: .5rem !important; + padding-bottom: .5rem !important + } + .p-sm-3 { + padding: .75rem !important + } + .pt-sm-3 { + padding-top: .75rem !important + } + .pr-sm-3 { + padding-right: .75rem !important + } + .pb-sm-3 { + padding-bottom: .75rem !important + } + .pl-sm-3 { + padding-left: .75rem !important + } + .px-sm-3 { + padding-right: .75rem !important; + padding-left: .75rem !important + } + .py-sm-3 { + padding-top: .75rem !important; + padding-bottom: .75rem !important + } + .p-sm-4 { + padding: 1rem !important + } + .pt-sm-4 { + padding-top: 1rem !important + } + .pr-sm-4 { + padding-right: 1rem !important + } + .pb-sm-4 { + padding-bottom: 1rem !important + } + .pl-sm-4 { + padding-left: 1rem !important + } + .px-sm-4 { + padding-right: 1rem !important; + padding-left: 1rem !important + } + .py-sm-4 { + padding-top: 1rem !important; + padding-bottom: 1rem !important + } + .p-sm-5 { + padding: 1.5rem !important + } + .pt-sm-5 { + padding-top: 1.5rem !important + } + .pr-sm-5 { + padding-right: 1.5rem !important + } + .pb-sm-5 { + padding-bottom: 1.5rem !important + } + .pl-sm-5 { + padding-left: 1.5rem !important + } + .px-sm-5 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important + } + .py-sm-5 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important + } + .p-sm-6 { + padding: 2rem !important + } + .pt-sm-6 { + padding-top: 2rem !important + } + .pr-sm-6 { + padding-right: 2rem !important + } + .pb-sm-6 { + padding-bottom: 2rem !important + } + .pl-sm-6 { + padding-left: 2rem !important + } + .px-sm-6 { + padding-right: 2rem !important; + padding-left: 2rem !important + } + .py-sm-6 { + padding-top: 2rem !important; + padding-bottom: 2rem !important + } + .p-sm-7 { + padding: 2.5rem !important + } + .pt-sm-7 { + padding-top: 2.5rem !important + } + .pr-sm-7 { + padding-right: 2.5rem !important + } + .pb-sm-7 { + padding-bottom: 2.5rem !important + } + .pl-sm-7 { + padding-left: 2.5rem !important + } + .px-sm-7 { + padding-right: 2.5rem !important; + padding-left: 2.5rem !important + } + .py-sm-7 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important + } + .p-sm-8 { + padding: 3rem !important + } + .pt-sm-8 { + padding-top: 3rem !important + } + .pr-sm-8 { + padding-right: 3rem !important + } + .pb-sm-8 { + padding-bottom: 3rem !important + } + .pl-sm-8 { + padding-left: 3rem !important + } + .px-sm-8 { + padding-right: 3rem !important; + padding-left: 3rem !important + } + .py-sm-8 { + padding-top: 3rem !important; + padding-bottom: 3rem !important + } + .p-sm-9 { + padding: 3.5rem !important + } + .pt-sm-9 { + padding-top: 3.5rem !important + } + .pr-sm-9 { + padding-right: 3.5rem !important + } + .pb-sm-9 { + padding-bottom: 3.5rem !important + } + .pl-sm-9 { + padding-left: 3.5rem !important + } + .px-sm-9 { + padding-right: 3.5rem !important; + padding-left: 3.5rem !important + } + .py-sm-9 { + padding-top: 3.5rem !important; + padding-bottom: 3.5rem !important + } + .p-sm-10 { + padding: 4rem !important + } + .pt-sm-10 { + padding-top: 4rem !important + } + .pr-sm-10 { + padding-right: 4rem !important + } + .pb-sm-10 { + padding-bottom: 4rem !important + } + .pl-sm-10 { + padding-left: 4rem !important + } + .px-sm-10 { + padding-right: 4rem !important; + padding-left: 4rem !important + } + .py-sm-10 { + padding-top: 4rem !important; + padding-bottom: 4rem !important + } +} + +@media (min-width: 46.25rem) { + .p-md-0 { + padding: 0 !important + } + .pt-md-0 { + padding-top: 0 !important + } + .pr-md-0 { + padding-right: 0 !important + } + .pb-md-0 { + padding-bottom: 0 !important + } + .pl-md-0 { + padding-left: 0 !important + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important + } + .p-md-1 { + padding: .25rem !important + } + .pt-md-1 { + padding-top: .25rem !important + } + .pr-md-1 { + padding-right: .25rem !important + } + .pb-md-1 { + padding-bottom: .25rem !important + } + .pl-md-1 { + padding-left: .25rem !important + } + .px-md-1 { + padding-right: .25rem !important; + padding-left: .25rem !important + } + .py-md-1 { + padding-top: .25rem !important; + padding-bottom: .25rem !important + } + .p-md-2 { + padding: .5rem !important + } + .pt-md-2 { + padding-top: .5rem !important + } + .pr-md-2 { + padding-right: .5rem !important + } + .pb-md-2 { + padding-bottom: .5rem !important + } + .pl-md-2 { + padding-left: .5rem !important + } + .px-md-2 { + padding-right: .5rem !important; + padding-left: .5rem !important + } + .py-md-2 { + padding-top: .5rem !important; + padding-bottom: .5rem !important + } + .p-md-3 { + padding: .75rem !important + } + .pt-md-3 { + padding-top: .75rem !important + } + .pr-md-3 { + padding-right: .75rem !important + } + .pb-md-3 { + padding-bottom: .75rem !important + } + .pl-md-3 { + padding-left: .75rem !important + } + .px-md-3 { + padding-right: .75rem !important; + padding-left: .75rem !important + } + .py-md-3 { + padding-top: .75rem !important; + padding-bottom: .75rem !important + } + .p-md-4 { + padding: 1rem !important + } + .pt-md-4 { + padding-top: 1rem !important + } + .pr-md-4 { + padding-right: 1rem !important + } + .pb-md-4 { + padding-bottom: 1rem !important + } + .pl-md-4 { + padding-left: 1rem !important + } + .px-md-4 { + padding-right: 1rem !important; + padding-left: 1rem !important + } + .py-md-4 { + padding-top: 1rem !important; + padding-bottom: 1rem !important + } + .p-md-5 { + padding: 1.5rem !important + } + .pt-md-5 { + padding-top: 1.5rem !important + } + .pr-md-5 { + padding-right: 1.5rem !important + } + .pb-md-5 { + padding-bottom: 1.5rem !important + } + .pl-md-5 { + padding-left: 1.5rem !important + } + .px-md-5 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important + } + .py-md-5 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important + } + .p-md-6 { + padding: 2rem !important + } + .pt-md-6 { + padding-top: 2rem !important + } + .pr-md-6 { + padding-right: 2rem !important + } + .pb-md-6 { + padding-bottom: 2rem !important + } + .pl-md-6 { + padding-left: 2rem !important + } + .px-md-6 { + padding-right: 2rem !important; + padding-left: 2rem !important + } + .py-md-6 { + padding-top: 2rem !important; + padding-bottom: 2rem !important + } + .p-md-7 { + padding: 2.5rem !important + } + .pt-md-7 { + padding-top: 2.5rem !important + } + .pr-md-7 { + padding-right: 2.5rem !important + } + .pb-md-7 { + padding-bottom: 2.5rem !important + } + .pl-md-7 { + padding-left: 2.5rem !important + } + .px-md-7 { + padding-right: 2.5rem !important; + padding-left: 2.5rem !important + } + .py-md-7 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important + } + .p-md-8 { + padding: 3rem !important + } + .pt-md-8 { + padding-top: 3rem !important + } + .pr-md-8 { + padding-right: 3rem !important + } + .pb-md-8 { + padding-bottom: 3rem !important + } + .pl-md-8 { + padding-left: 3rem !important + } + .px-md-8 { + padding-right: 3rem !important; + padding-left: 3rem !important + } + .py-md-8 { + padding-top: 3rem !important; + padding-bottom: 3rem !important + } + .p-md-9 { + padding: 3.5rem !important + } + .pt-md-9 { + padding-top: 3.5rem !important + } + .pr-md-9 { + padding-right: 3.5rem !important + } + .pb-md-9 { + padding-bottom: 3.5rem !important + } + .pl-md-9 { + padding-left: 3.5rem !important + } + .px-md-9 { + padding-right: 3.5rem !important; + padding-left: 3.5rem !important + } + .py-md-9 { + padding-top: 3.5rem !important; + padding-bottom: 3.5rem !important + } + .p-md-10 { + padding: 4rem !important + } + .pt-md-10 { + padding-top: 4rem !important + } + .pr-md-10 { + padding-right: 4rem !important + } + .pb-md-10 { + padding-bottom: 4rem !important + } + .pl-md-10 { + padding-left: 4rem !important + } + .px-md-10 { + padding-right: 4rem !important; + padding-left: 4rem !important + } + .py-md-10 { + padding-top: 4rem !important; + padding-bottom: 4rem !important + } +} + +@media (min-width: 70rem) { + .p-lg-0 { + padding: 0 !important + } + .pt-lg-0 { + padding-top: 0 !important + } + .pr-lg-0 { + padding-right: 0 !important + } + .pb-lg-0 { + padding-bottom: 0 !important + } + .pl-lg-0 { + padding-left: 0 !important + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important + } + .p-lg-1 { + padding: .25rem !important + } + .pt-lg-1 { + padding-top: .25rem !important + } + .pr-lg-1 { + padding-right: .25rem !important + } + .pb-lg-1 { + padding-bottom: .25rem !important + } + .pl-lg-1 { + padding-left: .25rem !important + } + .px-lg-1 { + padding-right: .25rem !important; + padding-left: .25rem !important + } + .py-lg-1 { + padding-top: .25rem !important; + padding-bottom: .25rem !important + } + .p-lg-2 { + padding: .5rem !important + } + .pt-lg-2 { + padding-top: .5rem !important + } + .pr-lg-2 { + padding-right: .5rem !important + } + .pb-lg-2 { + padding-bottom: .5rem !important + } + .pl-lg-2 { + padding-left: .5rem !important + } + .px-lg-2 { + padding-right: .5rem !important; + padding-left: .5rem !important + } + .py-lg-2 { + padding-top: .5rem !important; + padding-bottom: .5rem !important + } + .p-lg-3 { + padding: .75rem !important + } + .pt-lg-3 { + padding-top: .75rem !important + } + .pr-lg-3 { + padding-right: .75rem !important + } + .pb-lg-3 { + padding-bottom: .75rem !important + } + .pl-lg-3 { + padding-left: .75rem !important + } + .px-lg-3 { + padding-right: .75rem !important; + padding-left: .75rem !important + } + .py-lg-3 { + padding-top: .75rem !important; + padding-bottom: .75rem !important + } + .p-lg-4 { + padding: 1rem !important + } + .pt-lg-4 { + padding-top: 1rem !important + } + .pr-lg-4 { + padding-right: 1rem !important + } + .pb-lg-4 { + padding-bottom: 1rem !important + } + .pl-lg-4 { + padding-left: 1rem !important + } + .px-lg-4 { + padding-right: 1rem !important; + padding-left: 1rem !important + } + .py-lg-4 { + padding-top: 1rem !important; + padding-bottom: 1rem !important + } + .p-lg-5 { + padding: 1.5rem !important + } + .pt-lg-5 { + padding-top: 1.5rem !important + } + .pr-lg-5 { + padding-right: 1.5rem !important + } + .pb-lg-5 { + padding-bottom: 1.5rem !important + } + .pl-lg-5 { + padding-left: 1.5rem !important + } + .px-lg-5 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important + } + .py-lg-5 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important + } + .p-lg-6 { + padding: 2rem !important + } + .pt-lg-6 { + padding-top: 2rem !important + } + .pr-lg-6 { + padding-right: 2rem !important + } + .pb-lg-6 { + padding-bottom: 2rem !important + } + .pl-lg-6 { + padding-left: 2rem !important + } + .px-lg-6 { + padding-right: 2rem !important; + padding-left: 2rem !important + } + .py-lg-6 { + padding-top: 2rem !important; + padding-bottom: 2rem !important + } + .p-lg-7 { + padding: 2.5rem !important + } + .pt-lg-7 { + padding-top: 2.5rem !important + } + .pr-lg-7 { + padding-right: 2.5rem !important + } + .pb-lg-7 { + padding-bottom: 2.5rem !important + } + .pl-lg-7 { + padding-left: 2.5rem !important + } + .px-lg-7 { + padding-right: 2.5rem !important; + padding-left: 2.5rem !important + } + .py-lg-7 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important + } + .p-lg-8 { + padding: 3rem !important + } + .pt-lg-8 { + padding-top: 3rem !important + } + .pr-lg-8 { + padding-right: 3rem !important + } + .pb-lg-8 { + padding-bottom: 3rem !important + } + .pl-lg-8 { + padding-left: 3rem !important + } + .px-lg-8 { + padding-right: 3rem !important; + padding-left: 3rem !important + } + .py-lg-8 { + padding-top: 3rem !important; + padding-bottom: 3rem !important + } + .p-lg-9 { + padding: 3.5rem !important + } + .pt-lg-9 { + padding-top: 3.5rem !important + } + .pr-lg-9 { + padding-right: 3.5rem !important + } + .pb-lg-9 { + padding-bottom: 3.5rem !important + } + .pl-lg-9 { + padding-left: 3.5rem !important + } + .px-lg-9 { + padding-right: 3.5rem !important; + padding-left: 3.5rem !important + } + .py-lg-9 { + padding-top: 3.5rem !important; + padding-bottom: 3.5rem !important + } + .p-lg-10 { + padding: 4rem !important + } + .pt-lg-10 { + padding-top: 4rem !important + } + .pr-lg-10 { + padding-right: 4rem !important + } + .pb-lg-10 { + padding-bottom: 4rem !important + } + .pl-lg-10 { + padding-left: 4rem !important + } + .px-lg-10 { + padding-right: 4rem !important; + padding-left: 4rem !important + } + .py-lg-10 { + padding-top: 4rem !important; + padding-bottom: 4rem !important + } +} + +@media (min-width: 87.5rem) { + .p-xl-0 { + padding: 0 !important + } + .pt-xl-0 { + padding-top: 0 !important + } + .pr-xl-0 { + padding-right: 0 !important + } + .pb-xl-0 { + padding-bottom: 0 !important + } + .pl-xl-0 { + padding-left: 0 !important + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important + } + .p-xl-1 { + padding: .25rem !important + } + .pt-xl-1 { + padding-top: .25rem !important + } + .pr-xl-1 { + padding-right: .25rem !important + } + .pb-xl-1 { + padding-bottom: .25rem !important + } + .pl-xl-1 { + padding-left: .25rem !important + } + .px-xl-1 { + padding-right: .25rem !important; + padding-left: .25rem !important + } + .py-xl-1 { + padding-top: .25rem !important; + padding-bottom: .25rem !important + } + .p-xl-2 { + padding: .5rem !important + } + .pt-xl-2 { + padding-top: .5rem !important + } + .pr-xl-2 { + padding-right: .5rem !important + } + .pb-xl-2 { + padding-bottom: .5rem !important + } + .pl-xl-2 { + padding-left: .5rem !important + } + .px-xl-2 { + padding-right: .5rem !important; + padding-left: .5rem !important + } + .py-xl-2 { + padding-top: .5rem !important; + padding-bottom: .5rem !important + } + .p-xl-3 { + padding: .75rem !important + } + .pt-xl-3 { + padding-top: .75rem !important + } + .pr-xl-3 { + padding-right: .75rem !important + } + .pb-xl-3 { + padding-bottom: .75rem !important + } + .pl-xl-3 { + padding-left: .75rem !important + } + .px-xl-3 { + padding-right: .75rem !important; + padding-left: .75rem !important + } + .py-xl-3 { + padding-top: .75rem !important; + padding-bottom: .75rem !important + } + .p-xl-4 { + padding: 1rem !important + } + .pt-xl-4 { + padding-top: 1rem !important + } + .pr-xl-4 { + padding-right: 1rem !important + } + .pb-xl-4 { + padding-bottom: 1rem !important + } + .pl-xl-4 { + padding-left: 1rem !important + } + .px-xl-4 { + padding-right: 1rem !important; + padding-left: 1rem !important + } + .py-xl-4 { + padding-top: 1rem !important; + padding-bottom: 1rem !important + } + .p-xl-5 { + padding: 1.5rem !important + } + .pt-xl-5 { + padding-top: 1.5rem !important + } + .pr-xl-5 { + padding-right: 1.5rem !important + } + .pb-xl-5 { + padding-bottom: 1.5rem !important + } + .pl-xl-5 { + padding-left: 1.5rem !important + } + .px-xl-5 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important + } + .py-xl-5 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important + } + .p-xl-6 { + padding: 2rem !important + } + .pt-xl-6 { + padding-top: 2rem !important + } + .pr-xl-6 { + padding-right: 2rem !important + } + .pb-xl-6 { + padding-bottom: 2rem !important + } + .pl-xl-6 { + padding-left: 2rem !important + } + .px-xl-6 { + padding-right: 2rem !important; + padding-left: 2rem !important + } + .py-xl-6 { + padding-top: 2rem !important; + padding-bottom: 2rem !important + } + .p-xl-7 { + padding: 2.5rem !important + } + .pt-xl-7 { + padding-top: 2.5rem !important + } + .pr-xl-7 { + padding-right: 2.5rem !important + } + .pb-xl-7 { + padding-bottom: 2.5rem !important + } + .pl-xl-7 { + padding-left: 2.5rem !important + } + .px-xl-7 { + padding-right: 2.5rem !important; + padding-left: 2.5rem !important + } + .py-xl-7 { + padding-top: 2.5rem !important; + padding-bottom: 2.5rem !important + } + .p-xl-8 { + padding: 3rem !important + } + .pt-xl-8 { + padding-top: 3rem !important + } + .pr-xl-8 { + padding-right: 3rem !important + } + .pb-xl-8 { + padding-bottom: 3rem !important + } + .pl-xl-8 { + padding-left: 3rem !important + } + .px-xl-8 { + padding-right: 3rem !important; + padding-left: 3rem !important + } + .py-xl-8 { + padding-top: 3rem !important; + padding-bottom: 3rem !important + } + .p-xl-9 { + padding: 3.5rem !important + } + .pt-xl-9 { + padding-top: 3.5rem !important + } + .pr-xl-9 { + padding-right: 3.5rem !important + } + .pb-xl-9 { + padding-bottom: 3.5rem !important + } + .pl-xl-9 { + padding-left: 3.5rem !important + } + .px-xl-9 { + padding-right: 3.5rem !important; + padding-left: 3.5rem !important + } + .py-xl-9 { + padding-top: 3.5rem !important; + padding-bottom: 3.5rem !important + } + .p-xl-10 { + padding: 4rem !important + } + .pt-xl-10 { + padding-top: 4rem !important + } + .pr-xl-10 { + padding-right: 4rem !important + } + .pb-xl-10 { + padding-bottom: 4rem !important + } + .pl-xl-10 { + padding-left: 4rem !important + } + .px-xl-10 { + padding-right: 4rem !important; + padding-left: 4rem !important + } + .py-xl-10 { + padding-top: 4rem !important; + padding-bottom: 4rem !important + } +} diff --git a/docs/assets/images/just-the-docs.png b/docs/assets/images/just-the-docs.png new file mode 100644 index 0000000000000000000000000000000000000000..81c33065f2794814cbe1a53791d8bc4bfbb91cb1 GIT binary patch literal 20992 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/search.svg b/docs/assets/images/search.svg new file mode 100644 index 0000000..421ca4d --- /dev/null +++ b/docs/assets/images/search.svg @@ -0,0 +1 @@ +Search diff --git a/docs/assets/js/just-the-docs.js b/docs/assets/js/just-the-docs.js new file mode 100644 index 0000000..50e4e13 --- /dev/null +++ b/docs/assets/js/just-the-docs.js @@ -0,0 +1,177 @@ +// Event handling + +function addEvent(el, type, handler) { + if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler); +} +function removeEvent(el, type, handler) { + if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler); +} + +// Show/hide mobile menu + +function toggleNav(){ + const nav = document.querySelector('.js-main-nav'); + const auxNav = document.querySelector('.js-aux-nav'); + const navTrigger = document.querySelector('.js-main-nav-trigger'); + const search = document.querySelector('.js-search'); + + addEvent(navTrigger, 'click', function(){ + var text = navTrigger.innerText; + var textToggle = navTrigger.getAttribute('data-text-toggle'); + + nav.classList.toggle('nav-open'); + auxNav.classList.toggle('nav-open'); + navTrigger.classList.toggle('nav-open'); + search.classList.toggle('nav-open'); + navTrigger.innerText = textToggle; + navTrigger.setAttribute('data-text-toggle', text); + textToggle = text; + }) +} + +// Site search + +function initSearch() { + var index = lunr(function () { + this.ref('id'); + this.field('title', { boost: 20 }); + this.field('content', { boost: 10 }); + this.field('url'); + }); + + // Get the generated search_data.json file so lunr.js can search it locally. + + sc = document.getElementsByTagName("script"); + source = ''; + + for(idx = 0; idx < sc.length; idx++) + { + s = sc.item(idx); + + if(s.src && s.src.match(/just-the-docs\.js$/)) + { source = s.src; } + } + + jsPath = source.replace('just-the-docs.js', ''); + + jsonPath = jsPath + 'search-data.json'; + + var request = new XMLHttpRequest(); + request.open('GET', jsonPath, true); + + request.onload = function() { + if (request.status >= 200 && request.status < 400) { + // Success! + var data = JSON.parse(request.responseText); + var keys = Object.keys(data); + + for(var i in data) { + index.add({ + id: data[i].id, + title: data[i].title, + content: data[i].content, + url: data[i].url + }); + } + searchResults(data); + } else { + // We reached our target server, but it returned an error + console.log('Error loading ajax request. Request status:' + request.status); + } + }; + + request.onerror = function() { + // There was a connection error of some sort + console.log('There was a connection error'); + }; + + request.send(); + + function searchResults(dataStore) { + var searchInput = document.querySelector('.js-search-input'); + var searchResults = document.querySelector('.js-search-results'); + var store = dataStore; + + function hideResults() { + searchResults.innerHTML = ''; + searchResults.classList.remove('active'); + } + + addEvent(searchInput, 'keyup', function(e){ + var query = this.value; + + searchResults.innerHTML = ''; + searchResults.classList.remove('active'); + + if (query === '') { + hideResults(); + } else { + var results = index.search(query); + + if (results.length > 0) { + searchResults.classList.add('active'); + var resultsList = document.createElement('ul'); + searchResults.appendChild(resultsList); + + for (var i in results) { + var resultsListItem = document.createElement('li'); + var resultsLink = document.createElement('a'); + var resultsUrlDesc = document.createElement('span'); + var resultsUrl = store[results[i].ref].url; + var resultsRelUrl = store[results[i].ref].relUrl; + var resultsTitle = store[results[i].ref].title; + + resultsLink.setAttribute('href', resultsUrl); + resultsLink.innerText = resultsTitle; + resultsUrlDesc.innerText = resultsRelUrl; + + resultsList.classList.add('search-results-list'); + resultsListItem.classList.add('search-results-list-item'); + resultsLink.classList.add('search-results-link'); + resultsUrlDesc.classList.add('fs-2','text-grey-dk-000','d-block'); + + resultsList.appendChild(resultsListItem); + resultsListItem.appendChild(resultsLink); + resultsLink.appendChild(resultsUrlDesc); + } + } + + // When esc key is pressed, hide the results and clear the field + if (e.keyCode == 27) { + hideResults(); + searchInput.value = ''; + } + } + }); + + addEvent(searchInput, 'blur', function(){ + setTimeout(function(){ hideResults() }, 300); + }); + } +} + +function pageFocus() { + var mainContent = document.querySelector('.js-main-content'); + mainContent.focus(); + console.log(mainContent) +} + + +// Document ready + +function ready(){ + toggleNav(); + pageFocus(); + if (typeof lunr !== 'undefined') { + initSearch(); + } +} + +// in case the document is already rendered +if (document.readyState!='loading') ready(); +// modern browsers +else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready); +// IE <= 8 +else document.attachEvent('onreadystatechange', function(){ + if (document.readyState=='complete') ready(); +}); diff --git a/docs/assets/js/search-data.json b/docs/assets/js/search-data.json new file mode 100644 index 0000000..49cbc9d --- /dev/null +++ b/docs/assets/js/search-data.json @@ -0,0 +1,12 @@ +--- +--- +{ + {% for page in site.html_pages %}{% if page.search_exclude != true %}"{{ forloop.index0 }}": { + "id": "{{ forloop.index0 }}", + "title": "{{ page.title | replace: '&', '&' }}", + "content": "{{ page.content | markdownify | strip_html | escape_once | remove: 'Table of contents' | remove: '```' | remove: '---' | replace: '\', ' ' | normalize_whitespace }}", + "url": "{{ page.url | absolute_url }}", + "relUrl": "{{ page.url }}" + }{% unless forloop.last %},{% endunless %} + {% endif %}{% endfor %} +} diff --git a/docs/assets/js/vendor/lunr.min.js b/docs/assets/js/vendor/lunr.min.js new file mode 100644 index 0000000..9960ccd --- /dev/null +++ b/docs/assets/js/vendor/lunr.min.js @@ -0,0 +1,6 @@ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 1.0.0 + * Copyright (C) 2017 Oliver Nightingale + * @license MIT + */ +!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="1.0.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.separator):[]},t.tokenizer.separator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n Where do I go from here? + +We suggest that you start with our introductory material. + +[Introduction]({{ site.baseurl }}introduction){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/contributing/contributing.md b/docs/docs/contributing/contributing.md new file mode 100644 index 0000000..7e11aee --- /dev/null +++ b/docs/docs/contributing/contributing.md @@ -0,0 +1,117 @@ +--- +layout: default +title: Contributing +nav_order: 4 +has_children: true +permalink: /contributing +--- + +# Contributing +{: .no_toc } + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +--- + +# Open Container Initiative Contributions + +Before you are ready to contribute, make sure that you understand: + + 1. What are the different OCI specifications, on an abstract level? + 2. What are applied usage examples of the specifications? + 3. How do I ask for help or clarification? + +You can have a gentle introduction to containers [here]({{ site.baseurl }}introduction/container-images/), and read about the OCI types [here]({{ site.baseurl }}introduction/oci-projects/). + +## Kinds of contribution? + +When you understand what a container is, and what the goals are behind each of the specifications provided by OCI, you are then in the right mindset to contribute. +Generally, you might fit into one of the following scenarios: + + 1. **Definition** You have a goal or need that is not addressed by a specification. + 2. **Documentation** An idea or concept is not explained enough for you to use it. + 3. **Feature Request** You have a new idea for an extension to a specification. + +To serve these various contribution use cases, we have an [issue tracker](https://www.github.com/vsoch/oci-contribution/issues) with templates to guide you through the contribution process. +Each contribution request, whether it be asking a question or a feature, will happen via discussion on the issue board. The final decision for a request might result in the opening of new issues on other [opencontainers](https://www.github.com/opencontainers) boards, per the collaborative discussion and decision of those involved. + +We have provided several templates to help guide you in your question, issue, or feature request. [Open an issue](https://www.github.com/vsoch/oci-contribution/issues) to get started with the process. +Now let's walk through what interactions and discussions on the issue tracker might look like. + +## How do I Contribute? + +### 1. Develop an Idea + +You are on this page in first place, and reading about how to contribute, because you found a hole that isn't addressed by the specification, or have an idea for an extension to make it better. +The first thing you should do is grab your computer, go to a comfortable working spot, and write. +What is your use case or need? How did you try to use current software that implements OCI (and how did it fail?) +Tell your problem like a story. +It may be easier for experts and non-experts alike to follow your train of thought, and understand the issue you are trying to address. +If you fail to capture their understanding off the bat you may have a hard time getting support for change. + +### 2. Discussion + +Once you've written up your idea, post it to the [issue tracker](https://www.github.com/vsoch/oci-contribution/issues). +You might also [post to the development list](https://groups.google.com/a/opencontainers.org/forum/#!forum/dev) to capture people's attention, and point them to your issue. +Why would you want to use the issue tracker in combination with the list? +The issue tracker will allow you to keep a clean record of progress. +You can easily link to code you are working on, and the discussion. +It's a central place for *all the things*. +The mailing list is important for reach and perspective. +You can challenge others that have different use cases for interaction with containers to give feedback on your idea. + +### 3. Support and Action + +Once discussion starts to die down, it's important to try and synthesize the content discussed into a concrete action. +The maintainers will likely be doing this without thinking about it. For example: + + - *Documentation Action* if there is functionality you thought was missing and it actually existed? This calls for an improvement to the documentation. The maintainer can assign issues to developers to address your concern, and ask for your feedback. + - *Show Me Action*: The most likely result of you wanting a new thing will be a request for a dummy implementation. It doesn't need to be perfect, but you must *show* that your idea has feet, and solves the problem that you stated. + - *Feature Request Action* It could be that your idea was succinct and strong, and a new feature is called for development. This likely will result in one or more developers (including you!) coming up with a plan of action. This is less likely an option, because changes to the specifications tend to be more conservative. + +Generally, you will want to find support for your action, whether it be advice or actual help from others in the list. +We do this step before detailed feedback in the case that your idea doesn't need further investigation (already solved or being worked on, for example). +What should never happen is anything that goes against the [code of conduct](https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md). +You should not be put down, ridiculed for your ideas, or otherwise have someone treat you poorly. + +### 4. Detailed Feedback + +After you've posted your idea to the list, I can almost guarantee you someone else will be interested or +excited to give you feedback. +The list (or a GitHub issue) itself isn't really the place to hash out the details. +Your final post on the discussion might be to share a link to a more formal write up of your idea. +You probably already have it written into a document, and it makes sense to share this writeup with others for feedback (Google Docs, GitHub markdown, HackMD, etc.). +How long should you wait to get feedback? +This is up to you. +Make sure to give others credit and thanks for their contribution. +If it's on GitHub, use an AUTHORS.md file. +If it's a Google Doc, allow collaborators to write their name in a section, if desired. +It's important to stress that the idea is a group effort. +At this point, since you have others' attention, you might want to consider creating a working group to continue progress on your idea. +What is a working group? It can be a small email list, a group of contributors subscribed to a common repository, or a slack channel. +It's basically a way to communicate, and that way should be your preferred method(s). + + - [Development Google Group](https://groups.google.com/a/opencontainers.org/forum/#!forum/dev) + - [OCI Organizational Repository](https://www.github.com/opencontainers/org) + - [Opencontainers Slack](https://opencontainers.slack.com) + + +### 5. Implementation + +Great! You now have created the idea, posted to the list, and you are tracking progress on the GitHub issue tracker. +Here is the fun (and challenging) part. You need to *show* that your idea has feet. +This comes down to a dummy implementation that, paired with your writeup, can tag team to convince others of your idea. +This step will likely require several iterations. When you present your work to the OCI maintainers again, you need to stress the following points: + + 1. Restate the problem, and what you couldn't previously do to lead to your idea + 2. Show them what is now improved, and possible, with your approach. + 3. Be transparent about limitations. Ask again for feedback and help to address them. + +### 6. Contribution to OCI + +Given a strong idea, a proof of concept, and support, the discussion might next move to how and when the idea can be integrated with OCI, or it could serve as a tool to supplement it. +This final stage will vary depending on the proposal. diff --git a/docs/docs/introduction/container-images.md b/docs/docs/introduction/container-images.md new file mode 100644 index 0000000..818dfdd --- /dev/null +++ b/docs/docs/introduction/container-images.md @@ -0,0 +1,204 @@ +--- +layout: default +title: Container Images +nav_order: 2 +parent: Introduction +--- + +# Introduction to Containers + +A container is a portable encapsulation of an environment [1]. +It's a way for you to package an entire operating system, libraries, and software into a package that you can move and run anywhere. +That is the quick and dirty definition, but today we are going to delive a little more into what this actually means. + +{: .no_toc } + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +--- + +## Container Basics + +### What problems do containers solve? + + +#### Reproducibility +{: .no_toc } + +We have differences in environments, hardware, and even security, and this makes sharing of applications challenging. +A *reproducible* workflow that uses containers helps us get around this problem, and (hopefully) reduce the frequency of uttering the phrase _But it ran on my computer!_ + +#### Portability +{: .no_toc } + +The ability to easily move a container from one machine to another is easily afforded by the fact that many container formats are variations on a compressed filesystem. +If you wanted to share your entire computer, right now, you would have a hard time doing that. + +#### Development Environments +{: .no_toc } + +It used to be the case that to develop a simple model - view - control (MVC) application with some application, database, and web server, you would need to install and run the components on your host. +It would be very challenging to work on multiple projects at once, because different projects might have different dependencies. +Containers are essential for developers because they allow us to spin up an entire set of components for a specific development environment, and then bring it down just as easily. + +#### Continuous Integration +{: .no_toc } + +The same is true for testing, using containers one can easily test across operating systems from a single host. + +#### Flexible +{: .no_toc } + +The technologies that we use must be flexible to change. +The resources that we invest in are ephemeral, and change is unavoidable. +For a concrete example. let's say you are running a complex (containerized) application on a cloud provider. +The costs of the provider changes, and you need to do a quick switch! +Since your application is containerized, you can easily change providers. +You aren't forced becoming locked into a cloud vendor. You are a free container whale! + +#### Isolation +{: .no_toc } + +While the level of isolation can vary based on the container technology, containers generally allow you to isolate an application or component from your host. +This is incredibly useful if you have packages with conflicting dependencies that need to run on the same host. + +## Virtualization +{: .no_toc } + +You might be familiar with the idea of a [virtual machine](https://en.wikipedia.org/wiki/Virtual_machine) (VM), which was, for some of us, our first foray into virtualization. In a bucket: + + - A hypervisor is based on emulating hardware. + - When we emulate hardware, this is called virtualization. + +While the term "virtual machine" is used in different contexts and can spawn much disagreement about its definition, for the time being let's abstractly talk about the differences between *containers* and *hypervisors*. +The biggest difference was already stated - **hypervisor emulation is based on emulating hardware**. +With this kind of technology, we take a machine and it emulates virtual hardware, and then bring up another operating system on top of that hardware. +There is a nice slide to show [hypervisor based virutualization here](https://www.slideshare.net/Docker/introduction-to-docker-2017/18). + +Containers are about virtualizing the subsystems of the operating system itself. +We take services that the operating system provides (networking, filesystem, etc.) and provide them in a way that is virtuaizable. +This means that I can bring up different copies of an operating system on the same kernel. +We are using features of the kernel. +So you can think of containers as running at the level of the kernel, and this is different from hypervisors that run one level down, and try to emulate the hardware. + + - Containers: have a **single** kernels running underneath them + - Hypervisors: have **multiple** kernels + +A cool result of this, given that you have a single kernel, is that if you fix or update that kernel, all the "guests" running off it also get patched. + +For memory, a hypervisor can only see pages. +It doesn't know what each guest is doing. +With a container, under a single kernel the single kernel can see all objects and usage inside each container to make resource decisions. +For this reason the resource decisions are made much more efficient. + +### What is a virtual machine? + +Now we can tell you that a virtual machine runs on a hypervisor, and we have a hardware layer, an entire entire operating system, and then libraries and applications on top of it. A VM is a very needy fellow: + + - Each VM requires CPU, storage, memory, and an entire operating system + - More VMs == more resources! + - Portability is not guaranteed + +The need to allocate more system resources makes them a lot fatter and less portable than containers. +For a ballpark comparison, a hypervisor image is typically gigabytes, and a container can be in the order of megabytes. +You've probably heard people talk about containers and use terms like "lightweight" and "efficient." +I found a nice slide to show the differences [here](https://www.slideshare.net/Docker/introduction-to-docker-2017/22). + +### Linux Container API + +So if containers are so great, why did they only "become a thing" around 2014? +The short answer is that Docker came along and gave us "mere mortals" an ecosystem for building, pushing, pulling and running containers. +This was a product that simplified the complexity of underlying linux' isolation APIs: cgroups and namespaces. + + - *cgroups*: controls resources within the kernel (io, cpu, devices, memory, network). There is something called a "freezer" that you put a bunch of processes into and put them to sleep without worrying about resources between them. + - *namespaces*: provide a pure isolation layer inside the kernel. Most of the time, resources only belong to a single one, for example: + - networking devices go in networking namespaces + - ipc namespace for messages between containers + - mount namespace for filesystem tree + - pid namespace - init in linux needs to be running as pid 1 it isolates the process tree between containers + - UTS namespace because each container needs a separate hostname, + - User namespace is important for "pretending to be root" without being root.) + +For those interested, there is a good talk about the history of the Linux Containers API development [here](https://www.youtube.com/watch?v=YsYzMPptB-k#t=18m10s). +In early containers, you could break from a container and become root on the host. +While running as root is a desired or necessary feature for many applications, unexpected container breakouts are a bad security risk that container runtimes have worked hard to prohibit. +These core isolation APIs are for the most part the same for all linux distros. + +A fun history fact (and maybe you already figured this about because you watched the video links above!). +These two things (cgroups and namespaces) were developed by different open source groups. +This came from an agreement at a conference in 2011 called the [Kernel Summit](https://lwn.net/Articles/KernelSummit2011/), literally a bunch of people sitting in a room that had both developed technologies they wanted added to the linux kernel, and had to go through the feature process and argue their case independently. +At the end we did get a single container isolation API, but it had these two different components. +If you are interested in learning about platform specific runtime differences, see the [runtime-spec](https://github.com/opencontainers/runtime-spec/blob/master/implementations.md) repository. + +## Containers + +Everything that claims to be a container technology is basically orchestrating these components. +You can draw boxes on your powerpoint, call the boxes containers "packages" or "encapsulated environments" or what not - but low level container runtimes must include system isolation. + +Containers: + + - are encapsulations of an environment + - have their own process namespace + - the root process of the container container on the host is still associated with one parent process, and when you start the root process the set of child processes within the container might kick off, and when you kill the root process the container's child processes are also killed. + +### Container Namespaces + +Akin to the namespaces on your host, a container also has its own namespace, or may be associated with a namespace shared by a group of containers. +Here it is helpful to think of a container like a little packaged environment, one that you can actually shell into like you would a server. +When I shell inside the container I find that it has its own little process namespace. + +### Container Cgroups + +A cgroup is a "control group" and it's exactly that - a feature of the kernel that lets you allocate permissions for resources. +So, for example, I might allocate a particular amount of memory, or CPU time, or network bandwidth to a set of tasks (processes that are running on my computer.) +What else can we do? +We can monitor them, reconfigure them, and even deny them access to resources. +Containers also have their own set of cgroups. + +## What about a container image? + +The words "container" and "image" are sometimes used synonymously, but are subtly two different things. +You can think of a container image as a template, and a container is one or more running instances of that template. +In more concrete terms, the image is one or more binary blobs sitting on your filesystem, ready to instantiate to create an isolated, encapsulated environment. + +## Example Interactions + +Let's give a concrete example of how you might use a container. +Let's say you are a scientist, and a life changing paper just came out that describes how to estimate an optimal cheese eating time based on measured properties of the cheese. +You've been collecting cheeses for decades, you can easily collect the metrics needed, and you just need the software. + +### 1. You find container images in a registry +{: .no-toc } + +Thankfully, the scientist created the container you need and pushed it to [Docker Hub](https://hub.docker.com/) so all you need to do is: + + 1. Install a container runtime, such as Docker, to manage OCI containers + 2. Run the container with your input parameters (if the container isn't in your cache, it will be pulled) + +That is it, and truly it is that easy! + +### 2. You want to change the cheese algorithm +{: .no-toc } + +Uhoh, the scientist calculated the relationship between the moisture content of cheese completely wrong, and you need to modify his code and then write your own paper to refute his claims. +Dry cheese, like cheddar, deserves just as high of a rating! +In this case, you would: + + 1. Find the container recipe, which is an Docker build specification file in this case + 2. Build and run your new container + 3. Modify it as desired, and continue testing and modifying until you get the desired result + +And you could equally publish your container and findings. +This is a good example of how containers support reproducible science. + +Resources: + + - [VMWare: Ben Corrie Sr. Staff Engineer](https://www.vmware.com/solutions/cloud-native-apps.html) + - [RedHat: Control Groups](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/ch01) + - [Beginners Guide to Containers Technology](https://www.youtube.com/watch?v=YsYzMPptB-k) + +[1]: https://en.wikipedia.org/wiki/Container_(virtualization) diff --git a/docs/docs/introduction/digests.md b/docs/docs/introduction/digests.md new file mode 100644 index 0000000..47ae283 --- /dev/null +++ b/docs/docs/introduction/digests.md @@ -0,0 +1,67 @@ +--- +layout: default +title: Content Addressability +nav_order: 4 +parent: Introduction +--- + +# Content Addressability + +Content addressability is important so that you can ask for what you want. +When you are asking for (pulling) a container from a registry, the registry may provide [content addressable storage](https://en.wikipedia.org/wiki/Content-addressable_storage), or some similar mechanism, to ensure that you get *exactly* what you are requesting. + +## Unique Resource Identifiers + +How do we ask for containers? We ask for a unique resource identifier (uri) which broadly comes in this form: + +``` +//:@ +``` + +The example above is given in a familiar format for many users - one where we have a server (the registry) with some higher level project or organization (project), and under this project some set of container names that have different versions (tags and digets). +Some might clump the entire first address into a general tag, the "namespace": + +``` +:@ +``` + +For our purposes, let's use language to describe a concrete example of a repository on Docker Hub (the registry): + +``` +//:@ +``` + + - *registry*: is usually a server running software with an API to interact with to pull images. Docker Hub is our registry in this example. + - *organization*: is part of the namespace, and is the (more humanly interpretable) portion of the address. + - *repository* is the specific container. On Docker Hub this might come from a user pushing containers directly, or an automated build from a connected webhook. + +Let's make this example more specific. +Here [is the busybox](https://hub.docker.com/_/busybox) container on Docker Hub. +I want to pull it! +I might be tempted to do this: + +```bash +$ Using default tag: latest +latest: Pulling from library/busybox +697743189b6d: Pull complete +Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f +Status: Downloaded newer image for busybox:latest +``` + +That's great, and I ultimately get a specific tag (the default is "latest" and the digest of my container is shown) but if I wanted to pull the container again, and I did it in the same fashion? +Well, take a look at the changes to "latest" (it was updated recently) and [you'll see](https://hub.docker.com/_/busybox?tab=tags) that I'd likely get a different container. + +A (slightly) better interaction might have been asking for a particular tag: + +```bash +$ docker pull busybox:1.30.1 +1.30.1: Pulling from library/busybox +Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f +Status: Downloaded newer image for busybox:1.30.1 +``` + +There is likely not one best way to reference containers, thus the methodology used will vary by project. + +```bash +$ docker pull busybox@sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149f +``` diff --git a/docs/docs/introduction/distribution.md b/docs/docs/introduction/distribution.md new file mode 100644 index 0000000..a0cd689 --- /dev/null +++ b/docs/docs/introduction/distribution.md @@ -0,0 +1,35 @@ +--- +layout: default +title: Distributing Container Images +nav_order: 5 +parent: Introduction +--- + +# Distributing Container Images +{:.no_toc} + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +--- + +[Distribution](https://www.merriam-webster.com/dictionary/distribution): + +> _the action of sharing something out among a number of recipients._ + +Distribution, or sharing of container images, is just as important as building them in the first place. +If you can't easily distribute your container, you lose a [lot of the benefits]({{ site.baseurl }}docs/introduction/container-images/#what-problems-do-containers-solve) that we outlined in the first place. + +Generally, you can think of distribution eco-system as having different use cases. +I should be able to easily: + + - *share*: the container images that I create, across hosts, institutions, and time zones. + - *search*: I should be able to find the container that I'm looking for. + - *obtain*: If I find a container, and given I have permission to do so, I should be able to get it + - *verify*: that the container I requested is the one that I wanted, and not some malicious entity. + +Generally, a distribution comes down to a strategy that includes software, servers, and databases to fulfill these goals. +The [distribution specification](https://github.com/opencontainers/distribution-spec/blob/master/spec.md) helps to outline a lot of the interactions to make this possible. diff --git a/docs/docs/introduction/introduction.md b/docs/docs/introduction/introduction.md new file mode 100644 index 0000000..8fd991b --- /dev/null +++ b/docs/docs/introduction/introduction.md @@ -0,0 +1,55 @@ +--- +layout: default +title: Introduction +nav_order: 3 +has_children: true +permalink: /introduction +--- + +# Introduction +{: .no_toc } + +## Table of contents +{: .no_toc .text-delta } + +1. TOC +{:toc} + +--- + +If you are looking for a gentle introduction to containers and the Open Container +Initiative, you've come to the right place! + +## Containers + +A container is generally an encapsulated environment that is created from one or more binaries (images) to provide some form of isolation. Read more about [containers here]({{ site.baseurl }}docs/introduction/container-images/). + +## What is OCI? + +OCI stands for the "Open Container Initiative" and encompasses a group of people and a set of projects for describing container formats and interactions. +For more information about OCI, see [About the Open Container Initiative]({{ site.baseurl }}about/). + +## OCI Project Types + +The runtime-spec, image-spec, and distribution-spec, provide details for how a container is built, or interacted with. +To give you a good understanding of OCI projects, let's talk about the goals of [OCI projects]({{ site.baseurl }}docs/introduction/oci-projects/). +When you understand the goals of each one, this puts you in a position to understand how they are used, why they are used, and how you can contribute. + +## Content Addressability + +How does somebody find your house to mail a letter? They have an address, or a unique +identifier for the location of your house. Containers are no different - we can calculate +hashes of their content called _digests_ and then use these addresses as unique identifiers +to reference the containers. Read more about [Content Addressability]({{ site.baseurl }}docs/introduction/digests/) here. + +## Distributing Container Images + +Let's say I have a container on my host. How do I get it to you? How can you be sure +that your containers are safe if your laptop crashes? The task of distributing containers +offers an entire new space of challenges. Read about +[distributing container images here]({{ site.baseurl }}docs/introduction/distribution/) + + +You made it to the bottom! Now that have an understanding of containers and the specifications, you should next read about how to contribute. + +[Contributing]({{ site.baseurl }}contributing){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/docs/introduction/oci-projects.md b/docs/docs/introduction/oci-projects.md new file mode 100644 index 0000000..6ceb752 --- /dev/null +++ b/docs/docs/introduction/oci-projects.md @@ -0,0 +1,155 @@ +--- +layout: default +title: OCI Projects +nav_order: 3 +parent: Introduction +--- + +# OCI Projects +{:.no_toc} + +1. TOC +{:toc} + +--- + +## Understanding How The Projects Meet Goals + +The core of OCI are the projects for container images, registry interactions (for the distribution of containers) and runtime interactions. +Let's step back and talk about what this actually means. +If you are a developer, as we discuss these projects, think about them in the context of answering these questions: + + - How would I want to use this to solve a particular problem? + - Where might I have seen this in the wild, and not realized it's a part of OCI? + +Specific examples will be given to help guide your thinking. + +### The Image Specification + +The [image specification](https://github.com/opencontainers/image-spec/blob/master/spec.md) generally is a grouping of things to describe a container image. +While there is a definition for a [filesystem](https://github.com/opencontainers/image-spec/blob/master/layer.md) and [configuration](https://github.com/opencontainers/image-spec/blob/master/config.md), the most general entity to describe is the image manifest: + +#### Manifest + +The [manifest](https://github.com/opencontainers/image-spec/blob/master/manifest.md) comes down to a json blob of properties for the container such as contents (in Docker, we refer to image layers since the image is a bunch of .tar.gz assembled at runtime), annotations, and a unique identifier for a configuration object. For example, here is a json dump that describes a Docker container: + +``` +{ + "schemaVersion": 2, + "config": { + "mediaType": "application/vnd.oci.image.config.v1+json", + "size": 7023, + "digest": "sha256:b5b2b2c507a0944348e0303114d8d93aaaa081732b86451d9bce1f432a537bc7" + }, + "layers": [ + { + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", + "size": 32654, + "digest": "sha256:9834876dcfb05cb167a5c24953eba58c4ac89b1adf57f28f2f9d09af107ee8f0" + }, + { + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", + "size": 16724, + "digest": "sha256:3c3a4604a545cdc127456d94e421cd355bca5b528f4a9c1905b15da2eb4a4c6b" + }, + { + "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip", + "size": 73109, + "digest": "sha256:ec4b8955958665577945c89419d1af06b5f7636b4ac3da7f12184802ad867736" + } + ], + "annotations": { + "com.example.key1": "value1", + "com.example.key2": "value2" + } +} +``` + +**Where would I find an image manifest?** + +An image manifest would be served by a registry, and would help the user to obtain the content (in the example above, the .tar.gz layers assembled at runtime to create the image). + +**What would I do with the image manifest?** + +The manifest helps you to download image layers. +I might query the registry API to find the image manifest for an image I'm interested in, get back this json blob, and then use the client to pull the image layers (the digests). +Depending on the design of the registry, there would be another endpoint that I know to query with the blob digests to actually download them. + +**What are the annotations for?** + +Annotations are key value pairs of metadata to describe the image of interest. They are fairly flexible to allow for the registry and user to use as they see fit. + +**How would I want to use this to solve a particular problem?** + +The image manifest definition should be able to describe some kind of content blobs for an application like a registry. + +**Where might I have seen this in the wild?** + +An image manifest is what you see delivered by the [Docker registry](http://hub.docker.com/) to get metadata for a particular [container tag](https://docs.docker.com/engine/reference/commandline/manifest/). + + +### The Distribution Specification + +The [distribution specification](https://github.com/opencontainers/distribution-spec/blob/master/spec.md) describes the API that might be used by a registry to distribute images. +This means actions like pull, push, along with how images are named, and errors are presented. +You can think of the distribution specification as a collection of endpoints served by a registry to communicate with. Do you want a manifest? Use the manifest endpoint: + +``` +GET /v2//manifests/ +``` + +Do you want to upload a blob? There is an endpoint to POST to for that: + +``` +POST /v2//blobs/uploads/ +``` + +**Where would I find a distribution specification?** + +An implementation of this specification would be found with a container registry that implements the OCI standard. For example, Docker Hub implements the specification. A developer could also roll their own registry (such as [this one](https://github.com/atlaskerr/stori)) that implements it. + +**What would I do with the distribution specification?** + +The specification outlines a method of interaction. If you are writing a client, for example, these are the endpoints that the client would use. If you are creating a new registry that you wanted to conform to OCI, these are the API endpoints you would implement. + +**How might I contribute to the distribution specification?** + +Generally, since the goals are to move (push and pull) images, and provide endpoints for a client, if you are designing a registry or a client and find that you are missing some key function of an endpoint, or information provided by an endpoint, you might want to suggest a change to the specification. + +### The Runtime Specification + +The [runtime specification](https://github.com/opencontainers/runtime-spec/blob/master/spec.md) is another description of an interaction, but this time it's with a container binary. Specifically, this means the execution environment, configuration, and lifecycle of a container. + +**What do you mean by execution environment?** + +What is the host operating system of your computer, Windows? Linux? +These are different execution environments that come with different rules and standards for generating (what feels like) the same running container. +If you look at the [runtime specification](https://github.com/opencontainers/runtime-spec/blob/master/spec.md) entry page, you'll actually find that there is a different specification file for each base operating system. + +**Why do we need runtime specifications?** + +As a user, you expect a container run on a Windows machine to generally feel like and act the same as a container run on a Linux host. +The runtime specifications are catered toward this goal, with different configuration files (called config.json) to drive the creation, execution enviroinment, and actions for the container. + +**How might I contribute?** + +You might have an entirely different operating system or technology that you want to explore running containers on, in which case you would want to contribute a new specification. +You might find that there is an ambiguity or bug for one runtime, and ask a question about how to work on it. + +### Runc + +The project [opencontainers/runc](https://www.github.com/opencontainers/runc) is perhaps one of the most important of all the OCI projects. + +**Why do we need runc?** + +This project includes code used by container runtimes to implement the OCI specification. +You can think of the runtime specification as a set of rules, and runc the actual implementation of those rules that you will find in code bases for popular container software. + +**How might I contribute?** + +It could be the case that you find a security hole in a container runtime that is possibly related to, or might be addressed by runc. +Realistically, if you want to change runc, the first step would be to start discussion around the runtime specification itself. + +What are you waiting for? We want to hear from you! + +[Contribute]({{ site.baseurl }}docs/contribute/){: .btn .btn-primary .fs-5 .mb-4 .mb-md-0 .mr-2 } diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..d2cf73d --- /dev/null +++ b/docs/index.md @@ -0,0 +1,30 @@ +--- +layout: default +title: The Open Container Initiative +nav_order: 1 +permalink: / +--- + +# The Open Container Initiative + +Welcome to the Open Container Initiative (OCI) documentation site! The Open Container +Initiative cares about open, industry standards for container technology. +Broadly, technology encompasses two prominent ideas: + + - *formats*: What exactly *is* a container? + - *interaction*: How do we run, create, pull, or otherwise interact with a container? + +## What will I find here? + +This is a collection of introductory material to help you to understand containers, +the specifications that were created to support them, and finally, how +you can contribute to OCI. + + - [About the Open Container Initiative]({{ site.baseurl }}about) + - [Introductory Material]({{ site.baseurl }}introduction) + - [Contributing]({{ site.baseurl }}contributing) + + +{: .fs-6 .fw-300 } + +---