From ac583421686989263029e9857f97afde710ecec3 Mon Sep 17 00:00:00 2001 From: Ellen Kraffmiller Date: Mon, 18 Sep 2023 10:51:35 -0400 Subject: [PATCH] first commit --- .idea/.gitignore | 5 + .idea/modules.xml | 8 + .idea/ui.gdcc.io-repository.iml | 12 + .idea/vcs.xml | 6 + .jekyll-metadata | Bin 0 -> 1341 bytes CODE_OF_CONDUCT.md | 76 + Gemfile | 3 + Gemfile.lock | 266 ++ LICENSE | 121 + README.md | 31 +- _config.yml | 6 + _layouts/default.html | 154 ++ _site/CODE_OF_CONDUCT.md | 76 + _site/LICENSE | 121 + _site/README.md | 31 + _site/assets/css/style.css | 2883 ++++++++++++++++++++++ _site/backup.sh | 2 + _site/imgs/building-blocks.svg | 554 +++++ _site/imgs/gdcc_v2_lr_tb-07_homepage.png | Bin 0 -> 5257 bytes _site/imgs/harvard-logo.png | Bin 0 -> 5681 bytes _site/imgs/matrix.png | Bin 0 -> 11948 bytes _site/imgs/webb.png | Bin 0 -> 12240 bytes _site/imgs/zulip.png | Bin 0 -> 24706 bytes _site/proposal.txt | 158 ++ _site/run-incremental.sh | 8 + _site/run.sh | 8 + backup.sh | 2 + imgs/building-blocks.svg | 554 +++++ imgs/gdcc_v2_lr_tb-07_homepage.png | Bin 0 -> 5257 bytes imgs/harvard-logo.png | Bin 0 -> 5681 bytes imgs/matrix.png | Bin 0 -> 11948 bytes imgs/webb.png | Bin 0 -> 12240 bytes imgs/zulip.png | Bin 0 -> 24706 bytes index.md | 46 + proposal.txt | 158 ++ run-incremental.sh | 8 + run.sh | 8 + 37 files changed, 5304 insertions(+), 1 deletion(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/modules.xml create mode 100644 .idea/ui.gdcc.io-repository.iml create mode 100644 .idea/vcs.xml create mode 100644 .jekyll-metadata create mode 100644 CODE_OF_CONDUCT.md create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 LICENSE create mode 100644 _config.yml create mode 100644 _layouts/default.html create mode 100644 _site/CODE_OF_CONDUCT.md create mode 100644 _site/LICENSE create mode 100644 _site/README.md create mode 100644 _site/assets/css/style.css create mode 100755 _site/backup.sh create mode 100644 _site/imgs/building-blocks.svg create mode 100644 _site/imgs/gdcc_v2_lr_tb-07_homepage.png create mode 100644 _site/imgs/harvard-logo.png create mode 100644 _site/imgs/matrix.png create mode 100644 _site/imgs/webb.png create mode 100644 _site/imgs/zulip.png create mode 100644 _site/proposal.txt create mode 100755 _site/run-incremental.sh create mode 100755 _site/run.sh create mode 100755 backup.sh create mode 100644 imgs/building-blocks.svg create mode 100644 imgs/gdcc_v2_lr_tb-07_homepage.png create mode 100644 imgs/harvard-logo.png create mode 100644 imgs/matrix.png create mode 100644 imgs/webb.png create mode 100644 imgs/zulip.png create mode 100644 index.md create mode 100644 proposal.txt create mode 100755 run-incremental.sh create mode 100755 run.sh diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..42a0027 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/ui.gdcc.io-repository.iml b/.idea/ui.gdcc.io-repository.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/ui.gdcc.io-repository.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.jekyll-metadata b/.jekyll-metadata new file mode 100644 index 0000000000000000000000000000000000000000..906d15b1f8b8c810faf34e03bce15371ece0be2a GIT binary patch literal 1341 zcmbu9%Zt-M9LH-}(#LLLFX98NO9a6~lCldcCI>5R76RIW*1fC{^O&Y%=Mm;nyW2}| z`&W4M?oGUU5j+Xr1wAbYqIVIKvR%>?A>d(P2IlwqeZMo`nT_h~vZG!zIGY$R!1x#; z1CkI-bsQ?DVh?5&N3CN4F;J}1z>#KckjxvsZ_WAPm$$F#W`lTyx_0B%OPpRe8OH1y(?L7BZ)^4ZY zwcY-K+v)eZPdkJ37L#MWfPVkloR>=Tvq~OvH4Ay@bnM;}yIAG*Y~^G7LHCiJ@4B6Y zMftt;V_{{tytHz-lUK3A^1WazW1WwR>9~{C0dd3)UqTc@5@|l7!I 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.23.8) + concurrent-ruby (1.2.2) + dnsruby (1.61.9) + simpleidn (~> 0.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + ethon (0.16.0) + ffi (>= 1.15.0) + eventmachine (1.2.7) + execjs (2.8.1) + faraday (2.7.4) + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + ffi (1.15.5) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (228) + github-pages-health-check (= 1.17.9) + jekyll (= 3.9.3) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.4.0) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.8.0) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.2) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.4) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.13.6, < 2.0) + rouge (= 3.26.0) + terminal-table (~> 1.4) + github-pages-health-check (1.17.9) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.3) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.8.0) + i18n (1.12.0) + concurrent-ruby (~> 1.0) + jekyll (3.9.3) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (>= 0.7, < 2) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) + jekyll-commonmark-ghpages (0.4.0) + commonmarker (~> 0.23.7) + jekyll (~> 3.9.0) + jekyll-commonmark (~> 1.4.0) + rouge (>= 2.0, < 5.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.2) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.18.0) + nokogiri (1.14.2-arm64-darwin) + racc (~> 1.4) + nokogiri (1.14.2-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.14.2-x86_64-linux) + racc (~> 1.4) + octokit (4.25.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.7) + racc (1.6.2) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.9.2) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) + simpleidn (0.2.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (1.8.0) + webrick (1.8.1) + +PLATFORMS + arm64-darwin-22 + x86_64-darwin-18 + x86_64-linux + +DEPENDENCIES + github-pages + webrick + +BUNDLED WITH + 2.2.6 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/README.md b/README.md index 452177b..5157e93 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,31 @@ # ui.gdcc.io -Website for UI Component Working Group + +The source for https://ui.gdcc.io, the website for the UI Components Working Group. + +## Contributing + +Before committing changes to the website, build it locally to make sure everything looks fine with: + +``` +bundle install +``` + +Then run the server with: + +``` +bundle exec jekyll serve +``` + +You should be able to see the site at + +If you prefer running the site in Docker, you can try this: + +``` +./run.sh +``` + +To run with docker and allow incremental updates to the site, use: + +``` +./run-incremental.sh +``` diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..e6817cd --- /dev/null +++ b/_config.yml @@ -0,0 +1,6 @@ +locale: "en-US" +title: "UI Components Working Group [Draft Website]" +description: "The Dataverse Containerization Working Group aims to run the Dataverse software within containers, useful for many different scenarios from development to production." +github: [metadata] +plugins: + - jekyll-seo-tag diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..36b341b --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + {{site.title}} :: {{page.title}} + + + + +
+ +
+
+
+
+ + + +
+
+

+ The Global Dataverse Community Consortium +

+

Supporting Dataverse Repositories Around the World

+

+
+
+
+
+

{{ site.title }}

+
+
+ {{ content }} +
+
+
+ + + + diff --git a/_site/CODE_OF_CONDUCT.md b/_site/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..4204a1f --- /dev/null +++ b/_site/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at support at dataverse dot org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/_site/LICENSE b/_site/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/_site/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/_site/README.md b/_site/README.md new file mode 100644 index 0000000..5157e93 --- /dev/null +++ b/_site/README.md @@ -0,0 +1,31 @@ +# ui.gdcc.io + +The source for https://ui.gdcc.io, the website for the UI Components Working Group. + +## Contributing + +Before committing changes to the website, build it locally to make sure everything looks fine with: + +``` +bundle install +``` + +Then run the server with: + +``` +bundle exec jekyll serve +``` + +You should be able to see the site at + +If you prefer running the site in Docker, you can try this: + +``` +./run.sh +``` + +To run with docker and allow incremental updates to the site, use: + +``` +./run-incremental.sh +``` diff --git a/_site/assets/css/style.css b/_site/assets/css/style.css new file mode 100644 index 0000000..bc2033b --- /dev/null +++ b/_site/assets/css/style.css @@ -0,0 +1,2883 @@ +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ +/** 1. Change the default font family in all browsers (opinionated). 2. Prevent adjustments of font size after orientation changes in IE and iOS. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove the margin in all browsers (opinionated). */ +body { margin: 0; } + +/* HTML5 display definitions ========================================================================== */ +/** Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. 2. Add the correct display in IE. */ +article, aside, details, figcaption, figure, footer, header, main, menu, nav, section { /* 1 */ display: block; } + +summary { display: list-item; } + +/** Add the correct display in IE 9-. */ +audio, canvas, progress, video { display: inline-block; } + +/** Add the correct display in iOS 4-7. */ +audio:not([controls]) { display: none; height: 0; } + +/** Add the correct vertical alignment in Chrome, Firefox, and Opera. */ +progress { vertical-align: baseline; } + +/** Add the correct display in IE 10-. 1. Add the correct display in IE. */ +template, [hidden] { display: none !important; } + +/* Links ========================================================================== */ +/** Remove the gray background on active links in IE 10. */ +a { background-color: transparent; /* 1 */ } + +/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ +a:active, a:hover { outline-width: 0; } + +/* Text-level semantics ========================================================================== */ +/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ +abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */ } + +/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ +b, strong { font-weight: inherit; } + +/** Add the correct font weight in Chrome, Edge, and Safari. */ +b, strong { font-weight: bolder; } + +/** Add the correct font style in Android 4.3-. */ +dfn { font-style: italic; } + +/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Add the correct background and color in IE 9-. */ +mark { background-color: #ff0; color: #000; } + +/** Add the correct font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sub { bottom: -0.25em; } + +sup { top: -0.5em; } + +/* Embedded content ========================================================================== */ +/** Remove the border on images inside links in IE 10-. */ +img { border-style: none; } + +/** Hide the overflow in IE. */ +svg:not(:root) { overflow: hidden; } + +/* Grouping content ========================================================================== */ +/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ +code, kbd, pre, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } + +/** Add the correct margin in IE 8. */ +figure { margin: 1em 40px; } + +/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ +hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } + +/* Forms ========================================================================== */ +/** 1. Change font properties to `inherit` in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ +button, input, select, textarea { font: inherit; /* 1 */ margin: 0; /* 2 */ } + +/** Restore the font weight unset by the previous rule. */ +optgroup { font-weight: bold; } + +/** Show the overflow in IE. 1. Show the overflow in Edge. */ +button, input { /* 1 */ overflow: visible; } + +/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ +button, select { /* 1 */ text-transform: none; } + +/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ +button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } + +/** Remove the inner border and padding in Firefox. */ +button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } + +/** Restore the focus styles unset by the previous rule. */ +button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } + +/** Change the border, margin, and padding in all browsers (opinionated). */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ +legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } + +/** Remove the default vertical scrollbar in IE. */ +textarea { overflow: auto; } + +/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ +[type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** Correct the cursor style of increment and decrement buttons in Chrome. */ +[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } + +/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ +[type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } + +/** Remove the inner padding and cancel buttons in Chrome and Safari on OS X. */ +[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Correct the text style of placeholders in Chrome, Edge, and Safari. */ +::-webkit-input-placeholder { color: inherit; opacity: 0.54; } + +/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ +::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } + +* { box-sizing: border-box; } + +input, select, textarea, button { font-family: inherit; font-size: inherit; line-height: inherit; } + +body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 14px; line-height: 1.5; color: #24292e; background-color: #fff; } + +a { color: #0366d6; text-decoration: none; } +a:hover { text-decoration: underline; } + +b, strong { font-weight: 600; } + +hr, .rule { height: 0; margin: 15px 0; overflow: hidden; background: transparent; border: 0; border-bottom: 1px solid #dfe2e5; } +hr::before, .rule::before { display: table; content: ""; } +hr::after, .rule::after { display: table; clear: both; content: ""; } + +table { border-spacing: 0; border-collapse: collapse; } + +td, th { padding: 0; } + +button { cursor: pointer; border-radius: 0; } + +[hidden][hidden] { display: none !important; } + +details summary { cursor: pointer; } +details:not([open]) > *:not(summary) { display: none !important; } + +h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0; } + +h1 { font-size: 32px; font-weight: 600; } + +h2 { font-size: 24px; font-weight: 600; } + +h3 { font-size: 20px; font-weight: 600; } + +h4 { font-size: 16px; font-weight: 600; } + +h5 { font-size: 14px; font-weight: 600; } + +h6 { font-size: 12px; font-weight: 600; } + +p { margin-top: 0; margin-bottom: 10px; } + +small { font-size: 90%; } + +blockquote { margin: 0; } + +ul, ol { padding-left: 0; margin-top: 0; margin-bottom: 0; } + +ol ol, ul ol { list-style-type: lower-roman; } + +ul ul ol, ul ol ol, ol ul ol, ol ol ol { list-style-type: lower-alpha; } + +dd { margin-left: 0; } + +tt, code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; } + +pre { margin-top: 0; margin-bottom: 0; font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; } + +.octicon { vertical-align: text-bottom; } + +/* Fade in an element */ +.anim-fade-in { animation-name: fade-in; animation-duration: 1s; animation-timing-function: ease-in-out; } +.anim-fade-in.fast { animation-duration: 300ms; } + +@keyframes fade-in { 0% { opacity: 0; } + 100% { opacity: 1; } } +/* Fade out an element */ +.anim-fade-out { animation-name: fade-out; animation-duration: 1s; animation-timing-function: ease-out; } +.anim-fade-out.fast { animation-duration: 0.3s; } + +@keyframes fade-out { 0% { opacity: 1; } + 100% { opacity: 0; } } +/* Fade in and slide up an element */ +.anim-fade-up { opacity: 0; animation-name: fade-up; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-out; animation-delay: 1s; } + +@keyframes fade-up { 0% { opacity: 0.8; transform: translateY(100%); } + 100% { opacity: 1; transform: translateY(0); } } +/* Fade an element out and slide down */ +.anim-fade-down { animation-name: fade-down; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-in; } + +@keyframes fade-down { 0% { opacity: 1; transform: translateY(0); } + 100% { opacity: 0.5; transform: translateY(100%); } } +/* Grow an element width from 0 to 100% */ +.anim-grow-x { width: 0%; animation-name: grow-x; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease; animation-delay: 0.5s; } + +@keyframes grow-x { to { width: 100%; } } +/* Shrink an element from 100% to 0% */ +.anim-shrink-x { animation-name: shrink-x; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-in-out; animation-delay: 0.5s; } + +@keyframes shrink-x { to { width: 0%; } } +/* Fade in an element and scale it fast */ +.anim-scale-in { animation-name: scale-in; animation-duration: 0.15s; animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); } + +@keyframes scale-in { 0% { opacity: 0; transform: scale(0.5); } + 100% { opacity: 1; transform: scale(1); } } +/* Pulse an element's opacity */ +.anim-pulse { animation-name: pulse; animation-duration: 2s; animation-timing-function: linear; animation-iteration-count: infinite; } + +@keyframes pulse { 0% { opacity: 0.3; } + 10% { opacity: 1; } + 100% { opacity: 0.3; } } +/* Pulse in an element */ +.anim-pulse-in { animation-name: pulse-in; animation-duration: 0.5s; } + +@keyframes pulse-in { 0% { transform: scale3d(1, 1, 1); } + 50% { transform: scale3d(1.1, 1.1, 1.1); } + 100% { transform: scale3d(1, 1, 1); } } +/* Increase scale of an element on hover */ +.hover-grow { transition: transform 0.3s; backface-visibility: hidden; } +.hover-grow:hover { transform: scale(1.025); } + +/* Add a gray border on all sides */ +.border { border: 1px #e1e4e8 solid !important; } + +/* Add a gray border to the left and right */ +.border-y { border-top: 1px #e1e4e8 solid !important; border-bottom: 1px #e1e4e8 solid !important; } + +/* Remove borders from all sides */ +.border-0 { border: 0 !important; } + +.border-dashed { border-style: dashed !important; } + +/* Use with .border to turn the border blue */ +.border-blue { border-color: #0366d6 !important; } + +/* Use with .border to turn the border blue-light */ +.border-blue-light { border-color: #c8e1ff !important; } + +/* Use with .border to turn the border green */ +.border-green { border-color: #34d058 !important; } + +/* Use with .border to turn the border green light */ +.border-green-light { border-color: #a2cbac !important; } + +/* Use with .border to turn the border red */ +.border-red { border-color: #d73a49 !important; } + +/* Use with .border to turn the border red-light */ +.border-red-light { border-color: #cea0a5 !important; } + +/* Use with .border to turn the border purple */ +.border-purple { border-color: #6f42c1 !important; } + +/* Use with .border to turn the border yellow */ +.border-yellow { border-color: #d9d0a5 !important; } + +/* Use with .border to turn the border gray-light */ +.border-gray-light { border-color: #eaecef !important; } + +/* Use with .border to turn the border gray-dark */ +.border-gray-dark { border-color: #d1d5da !important; } + +/* Use with .border to turn the border rgba black 0.15 */ +.border-black-fade { border-color: rgba(27, 31, 35, 0.15) !important; } + +/* Add a gray border */ +/* Add a gray border to the top */ +.border-top { border-top: 1px #e1e4e8 solid !important; } + +/* Add a gray border to the right */ +.border-right { border-right: 1px #e1e4e8 solid !important; } + +/* Add a gray border to the bottom */ +.border-bottom { border-bottom: 1px #e1e4e8 solid !important; } + +/* Add a gray border to the left */ +.border-left { border-left: 1px #e1e4e8 solid !important; } + +/* Remove the top border */ +.border-top-0 { border-top: 0 !important; } + +/* Remove the right border */ +.border-right-0 { border-right: 0 !important; } + +/* Remove the bottom border */ +.border-bottom-0 { border-bottom: 0 !important; } + +/* Remove the left border */ +.border-left-0 { border-left: 0 !important; } + +/* Remove the border-radius */ +.rounded-0 { border-radius: 0 !important; } + +/* Add a border-radius to all corners */ +.rounded-1 { border-radius: 3px !important; } + +/* Add a 2x border-radius to all corners */ +.rounded-2 { border-radius: 6px !important; } + +.rounded-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } + +.rounded-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } + +.rounded-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } + +.rounded-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } + +.rounded-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } + +.rounded-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } + +.rounded-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } + +.rounded-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } + +.rounded-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } + +.rounded-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } + +.rounded-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } + +.rounded-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } + +@media (min-width: 544px) { /* Add a gray border */ + /* Add a gray border to the top */ + .border-sm-top { border-top: 1px #e1e4e8 solid !important; } + /* Add a gray border to the right */ + .border-sm-right { border-right: 1px #e1e4e8 solid !important; } + /* Add a gray border to the bottom */ + .border-sm-bottom { border-bottom: 1px #e1e4e8 solid !important; } + /* Add a gray border to the left */ + .border-sm-left { border-left: 1px #e1e4e8 solid !important; } + /* Remove the top border */ + .border-sm-top-0 { border-top: 0 !important; } + /* Remove the right border */ + .border-sm-right-0 { border-right: 0 !important; } + /* Remove the bottom border */ + .border-sm-bottom-0 { border-bottom: 0 !important; } + /* Remove the left border */ + .border-sm-left-0 { border-left: 0 !important; } + /* Remove the border-radius */ + .rounded-sm-0 { border-radius: 0 !important; } + /* Add a border-radius to all corners */ + .rounded-sm-1 { border-radius: 3px !important; } + /* Add a 2x border-radius to all corners */ + .rounded-sm-2 { border-radius: 6px !important; } + .rounded-sm-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } + .rounded-sm-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } + .rounded-sm-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } + .rounded-sm-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } + .rounded-sm-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } + .rounded-sm-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } + .rounded-sm-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } + .rounded-sm-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } + .rounded-sm-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } + .rounded-sm-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } + .rounded-sm-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } + .rounded-sm-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } +@media (min-width: 768px) { /* Add a gray border */ + /* Add a gray border to the top */ + .border-md-top { border-top: 1px #e1e4e8 solid !important; } + /* Add a gray border to the right */ + .border-md-right { border-right: 1px #e1e4e8 solid !important; } + /* Add a gray border to the bottom */ + .border-md-bottom { border-bottom: 1px #e1e4e8 solid !important; } + /* Add a gray border to the left */ + .border-md-left { border-left: 1px #e1e4e8 solid !important; } + /* Remove the top border */ + .border-md-top-0 { border-top: 0 !important; } + /* Remove the right border */ + .border-md-right-0 { border-right: 0 !important; } + /* Remove the bottom border */ + .border-md-bottom-0 { border-bottom: 0 !important; } + /* Remove the left border */ + .border-md-left-0 { border-left: 0 !important; } + /* Remove the border-radius */ + .rounded-md-0 { border-radius: 0 !important; } + /* Add a border-radius to all corners */ + .rounded-md-1 { border-radius: 3px !important; } + /* Add a 2x border-radius to all corners */ + .rounded-md-2 { border-radius: 6px !important; } + .rounded-md-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } + .rounded-md-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } + .rounded-md-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } + .rounded-md-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } + .rounded-md-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } + .rounded-md-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } + .rounded-md-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } + .rounded-md-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } + .rounded-md-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } + .rounded-md-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } + .rounded-md-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } + .rounded-md-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } +@media (min-width: 1012px) { /* Add a gray border */ + /* Add a gray border to the top */ + .border-lg-top { border-top: 1px #e1e4e8 solid !important; } + /* Add a gray border to the right */ + .border-lg-right { border-right: 1px #e1e4e8 solid !important; } + /* Add a gray border to the bottom */ + .border-lg-bottom { border-bottom: 1px #e1e4e8 solid !important; } + /* Add a gray border to the left */ + .border-lg-left { border-left: 1px #e1e4e8 solid !important; } + /* Remove the top border */ + .border-lg-top-0 { border-top: 0 !important; } + /* Remove the right border */ + .border-lg-right-0 { border-right: 0 !important; } + /* Remove the bottom border */ + .border-lg-bottom-0 { border-bottom: 0 !important; } + /* Remove the left border */ + .border-lg-left-0 { border-left: 0 !important; } + /* Remove the border-radius */ + .rounded-lg-0 { border-radius: 0 !important; } + /* Add a border-radius to all corners */ + .rounded-lg-1 { border-radius: 3px !important; } + /* Add a 2x border-radius to all corners */ + .rounded-lg-2 { border-radius: 6px !important; } + .rounded-lg-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } + .rounded-lg-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } + .rounded-lg-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } + .rounded-lg-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } + .rounded-lg-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } + .rounded-lg-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } + .rounded-lg-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } + .rounded-lg-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } + .rounded-lg-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } + .rounded-lg-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } + .rounded-lg-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } + .rounded-lg-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } +@media (min-width: 1280px) { /* Add a gray border */ + /* Add a gray border to the top */ + .border-xl-top { border-top: 1px #e1e4e8 solid !important; } + /* Add a gray border to the right */ + .border-xl-right { border-right: 1px #e1e4e8 solid !important; } + /* Add a gray border to the bottom */ + .border-xl-bottom { border-bottom: 1px #e1e4e8 solid !important; } + /* Add a gray border to the left */ + .border-xl-left { border-left: 1px #e1e4e8 solid !important; } + /* Remove the top border */ + .border-xl-top-0 { border-top: 0 !important; } + /* Remove the right border */ + .border-xl-right-0 { border-right: 0 !important; } + /* Remove the bottom border */ + .border-xl-bottom-0 { border-bottom: 0 !important; } + /* Remove the left border */ + .border-xl-left-0 { border-left: 0 !important; } + /* Remove the border-radius */ + .rounded-xl-0 { border-radius: 0 !important; } + /* Add a border-radius to all corners */ + .rounded-xl-1 { border-radius: 3px !important; } + /* Add a 2x border-radius to all corners */ + .rounded-xl-2 { border-radius: 6px !important; } + .rounded-xl-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } + .rounded-xl-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } + .rounded-xl-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } + .rounded-xl-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } + .rounded-xl-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } + .rounded-xl-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } + .rounded-xl-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } + .rounded-xl-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } + .rounded-xl-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } + .rounded-xl-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } + .rounded-xl-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } + .rounded-xl-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } +/* Add a 50% border-radius to make something into a circle */ +.circle { border-radius: 50% !important; } + +.box-shadow { box-shadow: 0 1px 1px rgba(27, 31, 35, 0.1) !important; } + +.box-shadow-medium { box-shadow: 0 1px 5px rgba(27, 31, 35, 0.15) !important; } + +.box-shadow-large { box-shadow: 0 1px 15px rgba(27, 31, 35, 0.15) !important; } + +.box-shadow-extra-large { box-shadow: 0 10px 50px rgba(27, 31, 35, 0.07) !important; } + +.box-shadow-none { box-shadow: none !important; } + +/* Set the background to $bg-white */ +.bg-white { background-color: #fff !important; } + +/* Set the background to $bg-blue */ +.bg-blue { background-color: #0366d6 !important; } + +/* Set the background to $bg-blue-light */ +.bg-blue-light { background-color: #f1f8ff !important; } + +/* Set the background to $bg-gray-dark */ +.bg-gray-dark { background-color: #24292e !important; } + +/* Set the background to $bg-gray */ +.bg-gray { background-color: #f6f8fa !important; } + +/* Set the background to $bg-gray-light */ +.bg-gray-light { background-color: #fafbfc !important; } + +/* Set the background to $bg-green */ +.bg-green { background-color: #28a745 !important; } + +/* Set the background to $bg-green-light */ +.bg-green-light { background-color: #dcffe4 !important; } + +/* Set the background to $bg-red */ +.bg-red { background-color: #d73a49 !important; } + +/* Set the background to $bg-red-light */ +.bg-red-light { background-color: #ffdce0 !important; } + +/* Set the background to $bg-yellow */ +.bg-yellow { background-color: #ffd33d !important; } + +/* Set the background to $bg-yellow-light */ +.bg-yellow-light { background-color: #fff5b1 !important; } + +/* Set the background to $bg-purple */ +.bg-purple { background-color: #6f42c1 !important; } + +/* Set the background to $bg-purple-light */ +.bg-purple-light { background-color: #f5f0ff !important; } + +.bg-shade-gradient { background-image: linear-gradient(180deg, rgba(27, 31, 35, 0.065), rgba(27, 31, 35, 0)) !important; background-repeat: no-repeat !important; background-size: 100% 200px !important; } + +/* Set the text color to $text-blue */ +.text-blue { color: #0366d6 !important; } + +/* Set the text color to $text-red */ +.text-red { color: #cb2431 !important; } + +/* Set the text color to $text-gray-light */ +.text-gray-light { color: #6a737d !important; } + +/* Set the text color to $text-gray */ +.text-gray { color: #586069 !important; } + +/* Set the text color to $text-gray-dark */ +.text-gray-dark { color: #24292e !important; } + +/* Set the text color to $text-green */ +.text-green { color: #28a745 !important; } + +/* Set the text color to $text-orange */ +.text-orange { color: #a04100 !important; } + +/* Set the text color to $text-orange-light */ +.text-orange-light { color: #e36209 !important; } + +/* Set the text color to $text-purple */ +.text-purple { color: #6f42c1 !important; } + +/* Set the text color to $text-white */ +.text-white { color: #fff !important; } + +/* Set the text color to inherit */ +.text-inherit { color: inherit !important; } + +.text-pending { color: #b08800 !important; } + +.bg-pending { color: #dbab09 !important; } + +.link-gray { color: #586069 !important; } +.link-gray:hover { color: #0366d6 !important; } + +.link-gray-dark { color: #24292e !important; } +.link-gray-dark:hover { color: #0366d6 !important; } + +/* Set the link color to $text-blue on hover Useful when you want only part of a link to turn blue on hover */ +.link-hover-blue:hover { color: #0366d6 !important; } + +/* Make a link $text-gray, then $text-blue on hover and removes the underline */ +.muted-link { color: #586069 !important; } +.muted-link:hover { color: #0366d6 !important; text-decoration: none; } + +.details-overlay[open] > summary::before { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 80; display: block; cursor: default; content: " "; background: transparent; } + +.details-overlay-dark[open] > summary::before { z-index: 99; background: rgba(27, 31, 35, 0.5); } + +.flex-row { flex-direction: row !important; } + +.flex-row-reverse { flex-direction: row-reverse !important; } + +.flex-column { flex-direction: column !important; } + +.flex-wrap { flex-wrap: wrap !important; } + +.flex-nowrap { flex-wrap: nowrap !important; } + +.flex-justify-start { justify-content: flex-start !important; } + +.flex-justify-end { justify-content: flex-end !important; } + +.flex-justify-center { justify-content: center !important; } + +.flex-justify-between { justify-content: space-between !important; } + +.flex-justify-around { justify-content: space-around !important; } + +.flex-items-start { align-items: flex-start !important; } + +.flex-items-end { align-items: flex-end !important; } + +.flex-items-center { align-items: center !important; } + +.flex-items-baseline { align-items: baseline !important; } + +.flex-items-stretch { align-items: stretch !important; } + +.flex-content-start { align-content: flex-start !important; } + +.flex-content-end { align-content: flex-end !important; } + +.flex-content-center { align-content: center !important; } + +.flex-content-between { align-content: space-between !important; } + +.flex-content-around { align-content: space-around !important; } + +.flex-content-stretch { align-content: stretch !important; } + +.flex-auto { flex: 1 1 auto !important; } + +.flex-shrink-0 { flex-shrink: 0 !important; } + +.flex-self-auto { align-self: auto !important; } + +.flex-self-start { align-self: flex-start !important; } + +.flex-self-end { align-self: flex-end !important; } + +.flex-self-center { align-self: center !important; } + +.flex-self-baseline { align-self: baseline !important; } + +.flex-self-stretch { align-self: stretch !important; } + +.flex-item-equal { flex-grow: 1; flex-basis: 0; } + +@media (min-width: 544px) { .flex-sm-row { flex-direction: row !important; } + .flex-sm-row-reverse { flex-direction: row-reverse !important; } + .flex-sm-column { flex-direction: column !important; } + .flex-sm-wrap { flex-wrap: wrap !important; } + .flex-sm-nowrap { flex-wrap: nowrap !important; } + .flex-sm-justify-start { justify-content: flex-start !important; } + .flex-sm-justify-end { justify-content: flex-end !important; } + .flex-sm-justify-center { justify-content: center !important; } + .flex-sm-justify-between { justify-content: space-between !important; } + .flex-sm-justify-around { justify-content: space-around !important; } + .flex-sm-items-start { align-items: flex-start !important; } + .flex-sm-items-end { align-items: flex-end !important; } + .flex-sm-items-center { align-items: center !important; } + .flex-sm-items-baseline { align-items: baseline !important; } + .flex-sm-items-stretch { align-items: stretch !important; } + .flex-sm-content-start { align-content: flex-start !important; } + .flex-sm-content-end { align-content: flex-end !important; } + .flex-sm-content-center { align-content: center !important; } + .flex-sm-content-between { align-content: space-between !important; } + .flex-sm-content-around { align-content: space-around !important; } + .flex-sm-content-stretch { align-content: stretch !important; } + .flex-sm-auto { flex: 1 1 auto !important; } + .flex-sm-shrink-0 { flex-shrink: 0 !important; } + .flex-sm-self-auto { align-self: auto !important; } + .flex-sm-self-start { align-self: flex-start !important; } + .flex-sm-self-end { align-self: flex-end !important; } + .flex-sm-self-center { align-self: center !important; } + .flex-sm-self-baseline { align-self: baseline !important; } + .flex-sm-self-stretch { align-self: stretch !important; } + .flex-sm-item-equal { flex-grow: 1; flex-basis: 0; } } +@media (min-width: 768px) { .flex-md-row { flex-direction: row !important; } + .flex-md-row-reverse { flex-direction: row-reverse !important; } + .flex-md-column { flex-direction: column !important; } + .flex-md-wrap { flex-wrap: wrap !important; } + .flex-md-nowrap { flex-wrap: nowrap !important; } + .flex-md-justify-start { justify-content: flex-start !important; } + .flex-md-justify-end { justify-content: flex-end !important; } + .flex-md-justify-center { justify-content: center !important; } + .flex-md-justify-between { justify-content: space-between !important; } + .flex-md-justify-around { justify-content: space-around !important; } + .flex-md-items-start { align-items: flex-start !important; } + .flex-md-items-end { align-items: flex-end !important; } + .flex-md-items-center { align-items: center !important; } + .flex-md-items-baseline { align-items: baseline !important; } + .flex-md-items-stretch { align-items: stretch !important; } + .flex-md-content-start { align-content: flex-start !important; } + .flex-md-content-end { align-content: flex-end !important; } + .flex-md-content-center { align-content: center !important; } + .flex-md-content-between { align-content: space-between !important; } + .flex-md-content-around { align-content: space-around !important; } + .flex-md-content-stretch { align-content: stretch !important; } + .flex-md-auto { flex: 1 1 auto !important; } + .flex-md-shrink-0 { flex-shrink: 0 !important; } + .flex-md-self-auto { align-self: auto !important; } + .flex-md-self-start { align-self: flex-start !important; } + .flex-md-self-end { align-self: flex-end !important; } + .flex-md-self-center { align-self: center !important; } + .flex-md-self-baseline { align-self: baseline !important; } + .flex-md-self-stretch { align-self: stretch !important; } + .flex-md-item-equal { flex-grow: 1; flex-basis: 0; } } +@media (min-width: 1012px) { .flex-lg-row { flex-direction: row !important; } + .flex-lg-row-reverse { flex-direction: row-reverse !important; } + .flex-lg-column { flex-direction: column !important; } + .flex-lg-wrap { flex-wrap: wrap !important; } + .flex-lg-nowrap { flex-wrap: nowrap !important; } + .flex-lg-justify-start { justify-content: flex-start !important; } + .flex-lg-justify-end { justify-content: flex-end !important; } + .flex-lg-justify-center { justify-content: center !important; } + .flex-lg-justify-between { justify-content: space-between !important; } + .flex-lg-justify-around { justify-content: space-around !important; } + .flex-lg-items-start { align-items: flex-start !important; } + .flex-lg-items-end { align-items: flex-end !important; } + .flex-lg-items-center { align-items: center !important; } + .flex-lg-items-baseline { align-items: baseline !important; } + .flex-lg-items-stretch { align-items: stretch !important; } + .flex-lg-content-start { align-content: flex-start !important; } + .flex-lg-content-end { align-content: flex-end !important; } + .flex-lg-content-center { align-content: center !important; } + .flex-lg-content-between { align-content: space-between !important; } + .flex-lg-content-around { align-content: space-around !important; } + .flex-lg-content-stretch { align-content: stretch !important; } + .flex-lg-auto { flex: 1 1 auto !important; } + .flex-lg-shrink-0 { flex-shrink: 0 !important; } + .flex-lg-self-auto { align-self: auto !important; } + .flex-lg-self-start { align-self: flex-start !important; } + .flex-lg-self-end { align-self: flex-end !important; } + .flex-lg-self-center { align-self: center !important; } + .flex-lg-self-baseline { align-self: baseline !important; } + .flex-lg-self-stretch { align-self: stretch !important; } + .flex-lg-item-equal { flex-grow: 1; flex-basis: 0; } } +@media (min-width: 1280px) { .flex-xl-row { flex-direction: row !important; } + .flex-xl-row-reverse { flex-direction: row-reverse !important; } + .flex-xl-column { flex-direction: column !important; } + .flex-xl-wrap { flex-wrap: wrap !important; } + .flex-xl-nowrap { flex-wrap: nowrap !important; } + .flex-xl-justify-start { justify-content: flex-start !important; } + .flex-xl-justify-end { justify-content: flex-end !important; } + .flex-xl-justify-center { justify-content: center !important; } + .flex-xl-justify-between { justify-content: space-between !important; } + .flex-xl-justify-around { justify-content: space-around !important; } + .flex-xl-items-start { align-items: flex-start !important; } + .flex-xl-items-end { align-items: flex-end !important; } + .flex-xl-items-center { align-items: center !important; } + .flex-xl-items-baseline { align-items: baseline !important; } + .flex-xl-items-stretch { align-items: stretch !important; } + .flex-xl-content-start { align-content: flex-start !important; } + .flex-xl-content-end { align-content: flex-end !important; } + .flex-xl-content-center { align-content: center !important; } + .flex-xl-content-between { align-content: space-between !important; } + .flex-xl-content-around { align-content: space-around !important; } + .flex-xl-content-stretch { align-content: stretch !important; } + .flex-xl-auto { flex: 1 1 auto !important; } + .flex-xl-shrink-0 { flex-shrink: 0 !important; } + .flex-xl-self-auto { align-self: auto !important; } + .flex-xl-self-start { align-self: flex-start !important; } + .flex-xl-self-end { align-self: flex-end !important; } + .flex-xl-self-center { align-self: center !important; } + .flex-xl-self-baseline { align-self: baseline !important; } + .flex-xl-self-stretch { align-self: stretch !important; } + .flex-xl-item-equal { flex-grow: 1; flex-basis: 0; } } +/* Set position to static */ +.position-static { position: static !important; } + +/* Set position to relative */ +.position-relative { position: relative !important; } + +/* Set position to absolute */ +.position-absolute { position: absolute !important; } + +/* Set position to fixed */ +.position-fixed { position: fixed !important; } + +/* Set top 0 */ +.top-0 { top: 0 !important; } + +/* Set right 0 */ +.right-0 { right: 0 !important; } + +/* Set bottom 0 */ +.bottom-0 { bottom: 0 !important; } + +/* Set left 0 */ +.left-0 { left: 0 !important; } + +/* Vertical align middle */ +.v-align-middle { vertical-align: middle !important; } + +/* Vertical align top */ +.v-align-top { vertical-align: top !important; } + +/* Vertical align bottom */ +.v-align-bottom { vertical-align: bottom !important; } + +/* Vertical align to the top of the text */ +.v-align-text-top { vertical-align: text-top !important; } + +/* Vertical align to the bottom of the text */ +.v-align-text-bottom { vertical-align: text-bottom !important; } + +/* Vertical align to the parent's baseline */ +.v-align-baseline { vertical-align: baseline !important; } + +/* Set the overflow hidden */ +.overflow-hidden { overflow: hidden !important; } + +/* Set the overflow scroll */ +.overflow-scroll { overflow: scroll !important; } + +/* Set the overflow auto */ +.overflow-auto { overflow: auto !important; } + +/* Clear floats around the element */ +.clearfix::before { display: table; content: ""; } +.clearfix::after { display: table; clear: both; content: ""; } + +/* Float to the left */ +.float-left { float: left !important; } + +/* Float to the right */ +.float-right { float: right !important; } + +/* No float */ +.float-none { float: none !important; } + +@media (min-width: 544px) { /* Float to the left */ + .float-sm-left { float: left !important; } + /* Float to the right */ + .float-sm-right { float: right !important; } + /* No float */ + .float-sm-none { float: none !important; } } +@media (min-width: 768px) { /* Float to the left */ + .float-md-left { float: left !important; } + /* Float to the right */ + .float-md-right { float: right !important; } + /* No float */ + .float-md-none { float: none !important; } } +@media (min-width: 1012px) { /* Float to the left */ + .float-lg-left { float: left !important; } + /* Float to the right */ + .float-lg-right { float: right !important; } + /* No float */ + .float-lg-none { float: none !important; } } +@media (min-width: 1280px) { /* Float to the left */ + .float-xl-left { float: left !important; } + /* Float to the right */ + .float-xl-right { float: right !important; } + /* No float */ + .float-xl-none { float: none !important; } } +/* Max width 100% */ +.width-fit { max-width: 100% !important; } + +/* Set the width to 100% */ +.width-full { width: 100% !important; } + +/* Max height 100% */ +.height-fit { max-height: 100% !important; } + +/* Set the height to 100% */ +.height-full { height: 100% !important; } + +/* Remove min-width from element */ +.min-width-0 { min-width: 0 !important; } + +/* Set the direction to rtl */ +.direction-rtl { direction: rtl !important; } + +/* Set the direction to ltr */ +.direction-ltr { direction: ltr !important; } + +@media (min-width: 544px) { /* Set the direction to rtl */ + .direction-sm-rtl { direction: rtl !important; } + /* Set the direction to ltr */ + .direction-sm-ltr { direction: ltr !important; } } +@media (min-width: 768px) { /* Set the direction to rtl */ + .direction-md-rtl { direction: rtl !important; } + /* Set the direction to ltr */ + .direction-md-ltr { direction: ltr !important; } } +@media (min-width: 1012px) { /* Set the direction to rtl */ + .direction-lg-rtl { direction: rtl !important; } + /* Set the direction to ltr */ + .direction-lg-ltr { direction: ltr !important; } } +@media (min-width: 1280px) { /* Set the direction to rtl */ + .direction-xl-rtl { direction: rtl !important; } + /* Set the direction to ltr */ + .direction-xl-ltr { direction: ltr !important; } } +/* Set a $size margin to all sides at $breakpoint */ +.m-0 { margin: 0 !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-0 { margin-top: 0 !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-0 { margin-right: 0 !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-0 { margin-bottom: 0 !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-0 { margin-left: 0 !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-0 { margin-right: 0 !important; margin-left: 0 !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + +/* Set a $size margin to all sides at $breakpoint */ +.m-1 { margin: 4px !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-1 { margin-top: 4px !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-1 { margin-right: 4px !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-1 { margin-bottom: 4px !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-1 { margin-left: 4px !important; } + +/* Set a negative $size margin on top at $breakpoint */ +.mt-n1 { margin-top: -4px !important; } + +/* Set a negative $size margin on the right at $breakpoint */ +.mr-n1 { margin-right: -4px !important; } + +/* Set a negative $size margin on the bottom at $breakpoint */ +.mb-n1 { margin-bottom: -4px !important; } + +/* Set a negative $size margin on the left at $breakpoint */ +.ml-n1 { margin-left: -4px !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-1 { margin-right: 4px !important; margin-left: 4px !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-1 { margin-top: 4px !important; margin-bottom: 4px !important; } + +/* Set a $size margin to all sides at $breakpoint */ +.m-2 { margin: 8px !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-2 { margin-top: 8px !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-2 { margin-right: 8px !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-2 { margin-bottom: 8px !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-2 { margin-left: 8px !important; } + +/* Set a negative $size margin on top at $breakpoint */ +.mt-n2 { margin-top: -8px !important; } + +/* Set a negative $size margin on the right at $breakpoint */ +.mr-n2 { margin-right: -8px !important; } + +/* Set a negative $size margin on the bottom at $breakpoint */ +.mb-n2 { margin-bottom: -8px !important; } + +/* Set a negative $size margin on the left at $breakpoint */ +.ml-n2 { margin-left: -8px !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-2 { margin-right: 8px !important; margin-left: 8px !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-2 { margin-top: 8px !important; margin-bottom: 8px !important; } + +/* Set a $size margin to all sides at $breakpoint */ +.m-3 { margin: 16px !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-3 { margin-top: 16px !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-3 { margin-right: 16px !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-3 { margin-bottom: 16px !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-3 { margin-left: 16px !important; } + +/* Set a negative $size margin on top at $breakpoint */ +.mt-n3 { margin-top: -16px !important; } + +/* Set a negative $size margin on the right at $breakpoint */ +.mr-n3 { margin-right: -16px !important; } + +/* Set a negative $size margin on the bottom at $breakpoint */ +.mb-n3 { margin-bottom: -16px !important; } + +/* Set a negative $size margin on the left at $breakpoint */ +.ml-n3 { margin-left: -16px !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-3 { margin-right: 16px !important; margin-left: 16px !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-3 { margin-top: 16px !important; margin-bottom: 16px !important; } + +/* Set a $size margin to all sides at $breakpoint */ +.m-4 { margin: 24px !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-4 { margin-top: 24px !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-4 { margin-right: 24px !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-4 { margin-bottom: 24px !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-4 { margin-left: 24px !important; } + +/* Set a negative $size margin on top at $breakpoint */ +.mt-n4 { margin-top: -24px !important; } + +/* Set a negative $size margin on the right at $breakpoint */ +.mr-n4 { margin-right: -24px !important; } + +/* Set a negative $size margin on the bottom at $breakpoint */ +.mb-n4 { margin-bottom: -24px !important; } + +/* Set a negative $size margin on the left at $breakpoint */ +.ml-n4 { margin-left: -24px !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-4 { margin-right: 24px !important; margin-left: 24px !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-4 { margin-top: 24px !important; margin-bottom: 24px !important; } + +/* Set a $size margin to all sides at $breakpoint */ +.m-5 { margin: 32px !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-5 { margin-top: 32px !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-5 { margin-right: 32px !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-5 { margin-bottom: 32px !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-5 { margin-left: 32px !important; } + +/* Set a negative $size margin on top at $breakpoint */ +.mt-n5 { margin-top: -32px !important; } + +/* Set a negative $size margin on the right at $breakpoint */ +.mr-n5 { margin-right: -32px !important; } + +/* Set a negative $size margin on the bottom at $breakpoint */ +.mb-n5 { margin-bottom: -32px !important; } + +/* Set a negative $size margin on the left at $breakpoint */ +.ml-n5 { margin-left: -32px !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-5 { margin-right: 32px !important; margin-left: 32px !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-5 { margin-top: 32px !important; margin-bottom: 32px !important; } + +/* Set a $size margin to all sides at $breakpoint */ +.m-6 { margin: 40px !important; } + +/* Set a $size margin on the top at $breakpoint */ +.mt-6 { margin-top: 40px !important; } + +/* Set a $size margin on the right at $breakpoint */ +.mr-6 { margin-right: 40px !important; } + +/* Set a $size margin on the bottom at $breakpoint */ +.mb-6 { margin-bottom: 40px !important; } + +/* Set a $size margin on the left at $breakpoint */ +.ml-6 { margin-left: 40px !important; } + +/* Set a negative $size margin on top at $breakpoint */ +.mt-n6 { margin-top: -40px !important; } + +/* Set a negative $size margin on the right at $breakpoint */ +.mr-n6 { margin-right: -40px !important; } + +/* Set a negative $size margin on the bottom at $breakpoint */ +.mb-n6 { margin-bottom: -40px !important; } + +/* Set a negative $size margin on the left at $breakpoint */ +.ml-n6 { margin-left: -40px !important; } + +/* Set a $size margin on the left & right at $breakpoint */ +.mx-6 { margin-right: 40px !important; margin-left: 40px !important; } + +/* Set a $size margin on the top & bottom at $breakpoint */ +.my-6 { margin-top: 40px !important; margin-bottom: 40px !important; } + +/* responsive horizontal auto margins */ +.mx-auto { margin-right: auto !important; margin-left: auto !important; } + +@media (min-width: 544px) { /* Set a $size margin to all sides at $breakpoint */ + .m-sm-0 { margin: 0 !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-0 { margin-top: 0 !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-0 { margin-right: 0 !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-0 { margin-bottom: 0 !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-0 { margin-left: 0 !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-sm-1 { margin: 4px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-1 { margin-top: 4px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-1 { margin-right: 4px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-1 { margin-bottom: 4px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-1 { margin-left: 4px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-sm-n1 { margin-top: -4px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-sm-n1 { margin-right: -4px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-sm-n1 { margin-bottom: -4px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-sm-n1 { margin-left: -4px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-1 { margin-right: 4px !important; margin-left: 4px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-1 { margin-top: 4px !important; margin-bottom: 4px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-sm-2 { margin: 8px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-2 { margin-top: 8px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-2 { margin-right: 8px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-2 { margin-bottom: 8px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-2 { margin-left: 8px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-sm-n2 { margin-top: -8px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-sm-n2 { margin-right: -8px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-sm-n2 { margin-bottom: -8px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-sm-n2 { margin-left: -8px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-2 { margin-right: 8px !important; margin-left: 8px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-2 { margin-top: 8px !important; margin-bottom: 8px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-sm-3 { margin: 16px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-3 { margin-top: 16px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-3 { margin-right: 16px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-3 { margin-bottom: 16px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-3 { margin-left: 16px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-sm-n3 { margin-top: -16px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-sm-n3 { margin-right: -16px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-sm-n3 { margin-bottom: -16px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-sm-n3 { margin-left: -16px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-3 { margin-right: 16px !important; margin-left: 16px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-3 { margin-top: 16px !important; margin-bottom: 16px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-sm-4 { margin: 24px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-4 { margin-top: 24px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-4 { margin-right: 24px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-4 { margin-bottom: 24px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-4 { margin-left: 24px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-sm-n4 { margin-top: -24px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-sm-n4 { margin-right: -24px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-sm-n4 { margin-bottom: -24px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-sm-n4 { margin-left: -24px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-4 { margin-right: 24px !important; margin-left: 24px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-4 { margin-top: 24px !important; margin-bottom: 24px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-sm-5 { margin: 32px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-5 { margin-top: 32px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-5 { margin-right: 32px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-5 { margin-bottom: 32px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-5 { margin-left: 32px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-sm-n5 { margin-top: -32px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-sm-n5 { margin-right: -32px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-sm-n5 { margin-bottom: -32px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-sm-n5 { margin-left: -32px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-5 { margin-right: 32px !important; margin-left: 32px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-5 { margin-top: 32px !important; margin-bottom: 32px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-sm-6 { margin: 40px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-sm-6 { margin-top: 40px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-sm-6 { margin-right: 40px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-sm-6 { margin-bottom: 40px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-sm-6 { margin-left: 40px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-sm-n6 { margin-top: -40px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-sm-n6 { margin-right: -40px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-sm-n6 { margin-bottom: -40px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-sm-n6 { margin-left: -40px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-sm-6 { margin-right: 40px !important; margin-left: 40px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-sm-6 { margin-top: 40px !important; margin-bottom: 40px !important; } + /* responsive horizontal auto margins */ + .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } } +@media (min-width: 768px) { /* Set a $size margin to all sides at $breakpoint */ + .m-md-0 { margin: 0 !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-0 { margin-top: 0 !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-0 { margin-right: 0 !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-0 { margin-bottom: 0 !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-0 { margin-left: 0 !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-md-1 { margin: 4px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-1 { margin-top: 4px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-1 { margin-right: 4px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-1 { margin-bottom: 4px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-1 { margin-left: 4px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-md-n1 { margin-top: -4px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-md-n1 { margin-right: -4px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-md-n1 { margin-bottom: -4px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-md-n1 { margin-left: -4px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-1 { margin-right: 4px !important; margin-left: 4px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-1 { margin-top: 4px !important; margin-bottom: 4px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-md-2 { margin: 8px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-2 { margin-top: 8px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-2 { margin-right: 8px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-2 { margin-bottom: 8px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-2 { margin-left: 8px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-md-n2 { margin-top: -8px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-md-n2 { margin-right: -8px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-md-n2 { margin-bottom: -8px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-md-n2 { margin-left: -8px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-2 { margin-right: 8px !important; margin-left: 8px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-2 { margin-top: 8px !important; margin-bottom: 8px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-md-3 { margin: 16px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-3 { margin-top: 16px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-3 { margin-right: 16px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-3 { margin-bottom: 16px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-3 { margin-left: 16px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-md-n3 { margin-top: -16px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-md-n3 { margin-right: -16px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-md-n3 { margin-bottom: -16px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-md-n3 { margin-left: -16px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-3 { margin-right: 16px !important; margin-left: 16px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-3 { margin-top: 16px !important; margin-bottom: 16px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-md-4 { margin: 24px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-4 { margin-top: 24px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-4 { margin-right: 24px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-4 { margin-bottom: 24px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-4 { margin-left: 24px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-md-n4 { margin-top: -24px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-md-n4 { margin-right: -24px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-md-n4 { margin-bottom: -24px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-md-n4 { margin-left: -24px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-4 { margin-right: 24px !important; margin-left: 24px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-4 { margin-top: 24px !important; margin-bottom: 24px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-md-5 { margin: 32px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-5 { margin-top: 32px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-5 { margin-right: 32px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-5 { margin-bottom: 32px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-5 { margin-left: 32px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-md-n5 { margin-top: -32px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-md-n5 { margin-right: -32px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-md-n5 { margin-bottom: -32px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-md-n5 { margin-left: -32px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-5 { margin-right: 32px !important; margin-left: 32px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-5 { margin-top: 32px !important; margin-bottom: 32px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-md-6 { margin: 40px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-md-6 { margin-top: 40px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-md-6 { margin-right: 40px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-md-6 { margin-bottom: 40px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-md-6 { margin-left: 40px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-md-n6 { margin-top: -40px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-md-n6 { margin-right: -40px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-md-n6 { margin-bottom: -40px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-md-n6 { margin-left: -40px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-md-6 { margin-right: 40px !important; margin-left: 40px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-md-6 { margin-top: 40px !important; margin-bottom: 40px !important; } + /* responsive horizontal auto margins */ + .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } } +@media (min-width: 1012px) { /* Set a $size margin to all sides at $breakpoint */ + .m-lg-0 { margin: 0 !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-0 { margin-top: 0 !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-0 { margin-right: 0 !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-0 { margin-bottom: 0 !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-0 { margin-left: 0 !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-lg-1 { margin: 4px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-1 { margin-top: 4px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-1 { margin-right: 4px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-1 { margin-bottom: 4px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-1 { margin-left: 4px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-lg-n1 { margin-top: -4px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-lg-n1 { margin-right: -4px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-lg-n1 { margin-bottom: -4px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-lg-n1 { margin-left: -4px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-1 { margin-right: 4px !important; margin-left: 4px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-1 { margin-top: 4px !important; margin-bottom: 4px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-lg-2 { margin: 8px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-2 { margin-top: 8px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-2 { margin-right: 8px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-2 { margin-bottom: 8px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-2 { margin-left: 8px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-lg-n2 { margin-top: -8px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-lg-n2 { margin-right: -8px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-lg-n2 { margin-bottom: -8px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-lg-n2 { margin-left: -8px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-2 { margin-right: 8px !important; margin-left: 8px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-2 { margin-top: 8px !important; margin-bottom: 8px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-lg-3 { margin: 16px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-3 { margin-top: 16px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-3 { margin-right: 16px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-3 { margin-bottom: 16px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-3 { margin-left: 16px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-lg-n3 { margin-top: -16px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-lg-n3 { margin-right: -16px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-lg-n3 { margin-bottom: -16px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-lg-n3 { margin-left: -16px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-3 { margin-right: 16px !important; margin-left: 16px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-3 { margin-top: 16px !important; margin-bottom: 16px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-lg-4 { margin: 24px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-4 { margin-top: 24px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-4 { margin-right: 24px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-4 { margin-bottom: 24px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-4 { margin-left: 24px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-lg-n4 { margin-top: -24px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-lg-n4 { margin-right: -24px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-lg-n4 { margin-bottom: -24px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-lg-n4 { margin-left: -24px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-4 { margin-right: 24px !important; margin-left: 24px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-4 { margin-top: 24px !important; margin-bottom: 24px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-lg-5 { margin: 32px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-5 { margin-top: 32px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-5 { margin-right: 32px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-5 { margin-bottom: 32px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-5 { margin-left: 32px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-lg-n5 { margin-top: -32px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-lg-n5 { margin-right: -32px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-lg-n5 { margin-bottom: -32px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-lg-n5 { margin-left: -32px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-5 { margin-right: 32px !important; margin-left: 32px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-5 { margin-top: 32px !important; margin-bottom: 32px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-lg-6 { margin: 40px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-lg-6 { margin-top: 40px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-lg-6 { margin-right: 40px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-lg-6 { margin-bottom: 40px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-lg-6 { margin-left: 40px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-lg-n6 { margin-top: -40px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-lg-n6 { margin-right: -40px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-lg-n6 { margin-bottom: -40px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-lg-n6 { margin-left: -40px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-lg-6 { margin-right: 40px !important; margin-left: 40px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-lg-6 { margin-top: 40px !important; margin-bottom: 40px !important; } + /* responsive horizontal auto margins */ + .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } } +@media (min-width: 1280px) { /* Set a $size margin to all sides at $breakpoint */ + .m-xl-0 { margin: 0 !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-0 { margin-top: 0 !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-0 { margin-right: 0 !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-0 { margin-bottom: 0 !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-0 { margin-left: 0 !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-xl-1 { margin: 4px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-1 { margin-top: 4px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-1 { margin-right: 4px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-1 { margin-bottom: 4px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-1 { margin-left: 4px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-xl-n1 { margin-top: -4px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-xl-n1 { margin-right: -4px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-xl-n1 { margin-bottom: -4px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-xl-n1 { margin-left: -4px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-1 { margin-right: 4px !important; margin-left: 4px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-1 { margin-top: 4px !important; margin-bottom: 4px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-xl-2 { margin: 8px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-2 { margin-top: 8px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-2 { margin-right: 8px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-2 { margin-bottom: 8px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-2 { margin-left: 8px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-xl-n2 { margin-top: -8px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-xl-n2 { margin-right: -8px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-xl-n2 { margin-bottom: -8px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-xl-n2 { margin-left: -8px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-2 { margin-right: 8px !important; margin-left: 8px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-2 { margin-top: 8px !important; margin-bottom: 8px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-xl-3 { margin: 16px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-3 { margin-top: 16px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-3 { margin-right: 16px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-3 { margin-bottom: 16px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-3 { margin-left: 16px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-xl-n3 { margin-top: -16px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-xl-n3 { margin-right: -16px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-xl-n3 { margin-bottom: -16px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-xl-n3 { margin-left: -16px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-3 { margin-right: 16px !important; margin-left: 16px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-3 { margin-top: 16px !important; margin-bottom: 16px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-xl-4 { margin: 24px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-4 { margin-top: 24px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-4 { margin-right: 24px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-4 { margin-bottom: 24px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-4 { margin-left: 24px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-xl-n4 { margin-top: -24px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-xl-n4 { margin-right: -24px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-xl-n4 { margin-bottom: -24px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-xl-n4 { margin-left: -24px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-4 { margin-right: 24px !important; margin-left: 24px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-4 { margin-top: 24px !important; margin-bottom: 24px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-xl-5 { margin: 32px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-5 { margin-top: 32px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-5 { margin-right: 32px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-5 { margin-bottom: 32px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-5 { margin-left: 32px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-xl-n5 { margin-top: -32px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-xl-n5 { margin-right: -32px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-xl-n5 { margin-bottom: -32px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-xl-n5 { margin-left: -32px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-5 { margin-right: 32px !important; margin-left: 32px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-5 { margin-top: 32px !important; margin-bottom: 32px !important; } + /* Set a $size margin to all sides at $breakpoint */ + .m-xl-6 { margin: 40px !important; } + /* Set a $size margin on the top at $breakpoint */ + .mt-xl-6 { margin-top: 40px !important; } + /* Set a $size margin on the right at $breakpoint */ + .mr-xl-6 { margin-right: 40px !important; } + /* Set a $size margin on the bottom at $breakpoint */ + .mb-xl-6 { margin-bottom: 40px !important; } + /* Set a $size margin on the left at $breakpoint */ + .ml-xl-6 { margin-left: 40px !important; } + /* Set a negative $size margin on top at $breakpoint */ + .mt-xl-n6 { margin-top: -40px !important; } + /* Set a negative $size margin on the right at $breakpoint */ + .mr-xl-n6 { margin-right: -40px !important; } + /* Set a negative $size margin on the bottom at $breakpoint */ + .mb-xl-n6 { margin-bottom: -40px !important; } + /* Set a negative $size margin on the left at $breakpoint */ + .ml-xl-n6 { margin-left: -40px !important; } + /* Set a $size margin on the left & right at $breakpoint */ + .mx-xl-6 { margin-right: 40px !important; margin-left: 40px !important; } + /* Set a $size margin on the top & bottom at $breakpoint */ + .my-xl-6 { margin-top: 40px !important; margin-bottom: 40px !important; } + /* responsive horizontal auto margins */ + .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } } +/* Set a $size padding to all sides at $breakpoint */ +.p-0 { padding: 0 !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-0 { padding-top: 0 !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-0 { padding-right: 0 !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-0 { padding-bottom: 0 !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-0 { padding-left: 0 !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-0 { padding-right: 0 !important; padding-left: 0 !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + +/* Set a $size padding to all sides at $breakpoint */ +.p-1 { padding: 4px !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-1 { padding-top: 4px !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-1 { padding-right: 4px !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-1 { padding-bottom: 4px !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-1 { padding-left: 4px !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-1 { padding-right: 4px !important; padding-left: 4px !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-1 { padding-top: 4px !important; padding-bottom: 4px !important; } + +/* Set a $size padding to all sides at $breakpoint */ +.p-2 { padding: 8px !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-2 { padding-top: 8px !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-2 { padding-right: 8px !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-2 { padding-bottom: 8px !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-2 { padding-left: 8px !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-2 { padding-right: 8px !important; padding-left: 8px !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-2 { padding-top: 8px !important; padding-bottom: 8px !important; } + +/* Set a $size padding to all sides at $breakpoint */ +.p-3 { padding: 16px !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-3 { padding-top: 16px !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-3 { padding-right: 16px !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-3 { padding-bottom: 16px !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-3 { padding-left: 16px !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-3 { padding-right: 16px !important; padding-left: 16px !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-3 { padding-top: 16px !important; padding-bottom: 16px !important; } + +/* Set a $size padding to all sides at $breakpoint */ +.p-4 { padding: 24px !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-4 { padding-top: 24px !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-4 { padding-right: 24px !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-4 { padding-bottom: 24px !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-4 { padding-left: 24px !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-4 { padding-right: 24px !important; padding-left: 24px !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-4 { padding-top: 24px !important; padding-bottom: 24px !important; } + +/* Set a $size padding to all sides at $breakpoint */ +.p-5 { padding: 32px !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-5 { padding-top: 32px !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-5 { padding-right: 32px !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-5 { padding-bottom: 32px !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-5 { padding-left: 32px !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-5 { padding-right: 32px !important; padding-left: 32px !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-5 { padding-top: 32px !important; padding-bottom: 32px !important; } + +/* Set a $size padding to all sides at $breakpoint */ +.p-6 { padding: 40px !important; } + +/* Set a $size padding to the top at $breakpoint */ +.pt-6 { padding-top: 40px !important; } + +/* Set a $size padding to the right at $breakpoint */ +.pr-6 { padding-right: 40px !important; } + +/* Set a $size padding to the bottom at $breakpoint */ +.pb-6 { padding-bottom: 40px !important; } + +/* Set a $size padding to the left at $breakpoint */ +.pl-6 { padding-left: 40px !important; } + +/* Set a $size padding to the left & right at $breakpoint */ +.px-6 { padding-right: 40px !important; padding-left: 40px !important; } + +/* Set a $size padding to the top & bottom at $breakpoint */ +.py-6 { padding-top: 40px !important; padding-bottom: 40px !important; } + +@media (min-width: 544px) { /* Set a $size padding to all sides at $breakpoint */ + .p-sm-0 { padding: 0 !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-0 { padding-top: 0 !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-0 { padding-right: 0 !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-0 { padding-bottom: 0 !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-0 { padding-left: 0 !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-sm-1 { padding: 4px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-1 { padding-top: 4px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-1 { padding-right: 4px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-1 { padding-bottom: 4px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-1 { padding-left: 4px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-1 { padding-right: 4px !important; padding-left: 4px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-1 { padding-top: 4px !important; padding-bottom: 4px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-sm-2 { padding: 8px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-2 { padding-top: 8px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-2 { padding-right: 8px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-2 { padding-bottom: 8px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-2 { padding-left: 8px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-2 { padding-right: 8px !important; padding-left: 8px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-2 { padding-top: 8px !important; padding-bottom: 8px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-sm-3 { padding: 16px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-3 { padding-top: 16px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-3 { padding-right: 16px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-3 { padding-bottom: 16px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-3 { padding-left: 16px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-3 { padding-right: 16px !important; padding-left: 16px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-3 { padding-top: 16px !important; padding-bottom: 16px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-sm-4 { padding: 24px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-4 { padding-top: 24px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-4 { padding-right: 24px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-4 { padding-bottom: 24px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-4 { padding-left: 24px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-4 { padding-right: 24px !important; padding-left: 24px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-4 { padding-top: 24px !important; padding-bottom: 24px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-sm-5 { padding: 32px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-5 { padding-top: 32px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-5 { padding-right: 32px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-5 { padding-bottom: 32px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-5 { padding-left: 32px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-5 { padding-right: 32px !important; padding-left: 32px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-5 { padding-top: 32px !important; padding-bottom: 32px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-sm-6 { padding: 40px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-sm-6 { padding-top: 40px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-sm-6 { padding-right: 40px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-sm-6 { padding-bottom: 40px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-sm-6 { padding-left: 40px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-sm-6 { padding-right: 40px !important; padding-left: 40px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-sm-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } +@media (min-width: 768px) { /* Set a $size padding to all sides at $breakpoint */ + .p-md-0 { padding: 0 !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-0 { padding-top: 0 !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-0 { padding-right: 0 !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-0 { padding-bottom: 0 !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-0 { padding-left: 0 !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-md-1 { padding: 4px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-1 { padding-top: 4px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-1 { padding-right: 4px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-1 { padding-bottom: 4px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-1 { padding-left: 4px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-1 { padding-right: 4px !important; padding-left: 4px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-1 { padding-top: 4px !important; padding-bottom: 4px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-md-2 { padding: 8px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-2 { padding-top: 8px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-2 { padding-right: 8px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-2 { padding-bottom: 8px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-2 { padding-left: 8px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-2 { padding-right: 8px !important; padding-left: 8px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-2 { padding-top: 8px !important; padding-bottom: 8px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-md-3 { padding: 16px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-3 { padding-top: 16px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-3 { padding-right: 16px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-3 { padding-bottom: 16px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-3 { padding-left: 16px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-3 { padding-right: 16px !important; padding-left: 16px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-3 { padding-top: 16px !important; padding-bottom: 16px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-md-4 { padding: 24px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-4 { padding-top: 24px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-4 { padding-right: 24px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-4 { padding-bottom: 24px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-4 { padding-left: 24px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-4 { padding-right: 24px !important; padding-left: 24px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-4 { padding-top: 24px !important; padding-bottom: 24px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-md-5 { padding: 32px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-5 { padding-top: 32px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-5 { padding-right: 32px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-5 { padding-bottom: 32px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-5 { padding-left: 32px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-5 { padding-right: 32px !important; padding-left: 32px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-5 { padding-top: 32px !important; padding-bottom: 32px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-md-6 { padding: 40px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-md-6 { padding-top: 40px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-md-6 { padding-right: 40px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-md-6 { padding-bottom: 40px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-md-6 { padding-left: 40px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-md-6 { padding-right: 40px !important; padding-left: 40px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-md-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } +@media (min-width: 1012px) { /* Set a $size padding to all sides at $breakpoint */ + .p-lg-0 { padding: 0 !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-0 { padding-top: 0 !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-0 { padding-right: 0 !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-0 { padding-bottom: 0 !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-0 { padding-left: 0 !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-lg-1 { padding: 4px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-1 { padding-top: 4px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-1 { padding-right: 4px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-1 { padding-bottom: 4px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-1 { padding-left: 4px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-1 { padding-right: 4px !important; padding-left: 4px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-1 { padding-top: 4px !important; padding-bottom: 4px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-lg-2 { padding: 8px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-2 { padding-top: 8px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-2 { padding-right: 8px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-2 { padding-bottom: 8px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-2 { padding-left: 8px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-2 { padding-right: 8px !important; padding-left: 8px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-2 { padding-top: 8px !important; padding-bottom: 8px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-lg-3 { padding: 16px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-3 { padding-top: 16px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-3 { padding-right: 16px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-3 { padding-bottom: 16px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-3 { padding-left: 16px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-3 { padding-right: 16px !important; padding-left: 16px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-3 { padding-top: 16px !important; padding-bottom: 16px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-lg-4 { padding: 24px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-4 { padding-top: 24px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-4 { padding-right: 24px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-4 { padding-bottom: 24px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-4 { padding-left: 24px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-4 { padding-right: 24px !important; padding-left: 24px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-4 { padding-top: 24px !important; padding-bottom: 24px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-lg-5 { padding: 32px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-5 { padding-top: 32px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-5 { padding-right: 32px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-5 { padding-bottom: 32px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-5 { padding-left: 32px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-5 { padding-right: 32px !important; padding-left: 32px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-5 { padding-top: 32px !important; padding-bottom: 32px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-lg-6 { padding: 40px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-lg-6 { padding-top: 40px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-lg-6 { padding-right: 40px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-lg-6 { padding-bottom: 40px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-lg-6 { padding-left: 40px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-lg-6 { padding-right: 40px !important; padding-left: 40px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-lg-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } +@media (min-width: 1280px) { /* Set a $size padding to all sides at $breakpoint */ + .p-xl-0 { padding: 0 !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-0 { padding-top: 0 !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-0 { padding-right: 0 !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-0 { padding-bottom: 0 !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-0 { padding-left: 0 !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-xl-1 { padding: 4px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-1 { padding-top: 4px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-1 { padding-right: 4px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-1 { padding-bottom: 4px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-1 { padding-left: 4px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-1 { padding-right: 4px !important; padding-left: 4px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-1 { padding-top: 4px !important; padding-bottom: 4px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-xl-2 { padding: 8px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-2 { padding-top: 8px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-2 { padding-right: 8px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-2 { padding-bottom: 8px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-2 { padding-left: 8px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-2 { padding-right: 8px !important; padding-left: 8px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-2 { padding-top: 8px !important; padding-bottom: 8px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-xl-3 { padding: 16px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-3 { padding-top: 16px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-3 { padding-right: 16px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-3 { padding-bottom: 16px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-3 { padding-left: 16px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-3 { padding-right: 16px !important; padding-left: 16px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-3 { padding-top: 16px !important; padding-bottom: 16px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-xl-4 { padding: 24px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-4 { padding-top: 24px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-4 { padding-right: 24px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-4 { padding-bottom: 24px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-4 { padding-left: 24px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-4 { padding-right: 24px !important; padding-left: 24px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-4 { padding-top: 24px !important; padding-bottom: 24px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-xl-5 { padding: 32px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-5 { padding-top: 32px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-5 { padding-right: 32px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-5 { padding-bottom: 32px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-5 { padding-left: 32px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-5 { padding-right: 32px !important; padding-left: 32px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-5 { padding-top: 32px !important; padding-bottom: 32px !important; } + /* Set a $size padding to all sides at $breakpoint */ + .p-xl-6 { padding: 40px !important; } + /* Set a $size padding to the top at $breakpoint */ + .pt-xl-6 { padding-top: 40px !important; } + /* Set a $size padding to the right at $breakpoint */ + .pr-xl-6 { padding-right: 40px !important; } + /* Set a $size padding to the bottom at $breakpoint */ + .pb-xl-6 { padding-bottom: 40px !important; } + /* Set a $size padding to the left at $breakpoint */ + .pl-xl-6 { padding-left: 40px !important; } + /* Set a $size padding to the left & right at $breakpoint */ + .px-xl-6 { padding-right: 40px !important; padding-left: 40px !important; } + /* Set a $size padding to the top & bottom at $breakpoint */ + .py-xl-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } +.p-responsive { padding-right: 16px !important; padding-left: 16px !important; } +@media (min-width: 544px) { .p-responsive { padding-right: 40px !important; padding-left: 40px !important; } } +@media (min-width: 1012px) { .p-responsive { padding-right: 16px !important; padding-left: 16px !important; } } + +/* Set the font size to 26px */ +.h1 { font-size: 26px !important; } +@media (min-width: 768px) { .h1 { font-size: 32px !important; } } + +/* Set the font size to 22px */ +.h2 { font-size: 22px !important; } +@media (min-width: 768px) { .h2 { font-size: 24px !important; } } + +/* Set the font size to 18px */ +.h3 { font-size: 18px !important; } +@media (min-width: 768px) { .h3 { font-size: 20px !important; } } + +/* Set the font size to 16px */ +.h4 { font-size: 16px !important; } + +/* Set the font size to 14px */ +.h5 { font-size: 14px !important; } + +/* Set the font size to 12px */ +.h6 { font-size: 12px !important; } + +.h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 600 !important; } + +/* Set the font size to 26px */ +.f1 { font-size: 26px !important; } +@media (min-width: 768px) { .f1 { font-size: 32px !important; } } + +/* Set the font size to 22px */ +.f2 { font-size: 22px !important; } +@media (min-width: 768px) { .f2 { font-size: 24px !important; } } + +/* Set the font size to 18px */ +.f3 { font-size: 18px !important; } +@media (min-width: 768px) { .f3 { font-size: 20px !important; } } + +/* Set the font size to 16px */ +.f4 { font-size: 16px !important; } +@media (min-width: 768px) { .f4 { font-size: 16px !important; } } + +/* Set the font size to 14px */ +.f5 { font-size: 14px !important; } + +/* Set the font size to 12px */ +.f6 { font-size: 12px !important; } + +/* Set the font size to 40px and weight to light */ +.f00-light { font-size: 40px !important; font-weight: 300 !important; } +@media (min-width: 768px) { .f00-light { font-size: 48px !important; } } + +/* Set the font size to 32px and weight to light */ +.f0-light { font-size: 32px !important; font-weight: 300 !important; } +@media (min-width: 768px) { .f0-light { font-size: 40px !important; } } + +/* Set the font size to 26px and weight to light */ +.f1-light { font-size: 26px !important; font-weight: 300 !important; } +@media (min-width: 768px) { .f1-light { font-size: 32px !important; } } + +/* Set the font size to 22px and weight to light */ +.f2-light { font-size: 22px !important; font-weight: 300 !important; } +@media (min-width: 768px) { .f2-light { font-size: 24px !important; } } + +/* Set the font size to 18px and weight to light */ +.f3-light { font-size: 18px !important; font-weight: 300 !important; } +@media (min-width: 768px) { .f3-light { font-size: 20px !important; } } + +/* Set the font size to ${#h6-size} */ +.text-small { font-size: 12px !important; } + +/* Large leading paragraphs */ +.lead { margin-bottom: 30px; font-size: 20px; font-weight: 300; color: #586069; } + +/* Set the line height to ultra condensed */ +.lh-condensed-ultra { line-height: 1 !important; } + +/* Set the line height to condensed */ +.lh-condensed { line-height: 1.25 !important; } + +/* Set the line height to default */ +.lh-default { line-height: 1.5 !important; } + +/* Set the line height to zero */ +.lh-0 { line-height: 0 !important; } + +/* Text align to the right */ +.text-right { text-align: right !important; } + +/* Text align to the left */ +.text-left { text-align: left !important; } + +/* Text align to the center */ +.text-center { text-align: center !important; } + +@media (min-width: 544px) { /* Text align to the right */ + .text-sm-right { text-align: right !important; } + /* Text align to the left */ + .text-sm-left { text-align: left !important; } + /* Text align to the center */ + .text-sm-center { text-align: center !important; } } +@media (min-width: 768px) { /* Text align to the right */ + .text-md-right { text-align: right !important; } + /* Text align to the left */ + .text-md-left { text-align: left !important; } + /* Text align to the center */ + .text-md-center { text-align: center !important; } } +@media (min-width: 1012px) { /* Text align to the right */ + .text-lg-right { text-align: right !important; } + /* Text align to the left */ + .text-lg-left { text-align: left !important; } + /* Text align to the center */ + .text-lg-center { text-align: center !important; } } +@media (min-width: 1280px) { /* Text align to the right */ + .text-xl-right { text-align: right !important; } + /* Text align to the left */ + .text-xl-left { text-align: left !important; } + /* Text align to the center */ + .text-xl-center { text-align: center !important; } } +/* Set the font weight to normal */ +.text-normal { font-weight: 400 !important; } + +/* Set the font weight to bold */ +.text-bold { font-weight: 600 !important; } + +/* Set the font to italic */ +.text-italic { font-style: italic !important; } + +/* Make text uppercase */ +.text-uppercase { text-transform: uppercase !important; } + +/* Underline text */ +.text-underline { text-decoration: underline !important; } + +/* Don't underline text */ +.no-underline { text-decoration: none !important; } + +/* Don't wrap white space */ +.no-wrap { white-space: nowrap !important; } + +/* Normal white space */ +.ws-normal { white-space: normal !important; } + +/* Allow long lines with no spaces to line break */ +.wb-break-all { word-break: break-all !important; } + +.text-emphasized { font-weight: 600; color: #24292e; } + +.list-style-none { list-style: none !important; } + +/* Add a dark text shadow */ +.text-shadow-dark { text-shadow: 0 1px 1px rgba(27, 31, 35, 0.25), 0 1px 25px rgba(27, 31, 35, 0.75); } + +/* Add a light text shadow */ +.text-shadow-light { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } + +/* Set to monospace font */ +.text-mono { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +/* Disallow user from selecting text */ +.user-select-none { user-select: none !important; } + +.d-block { display: block !important; } + +.d-flex { display: flex !important; } + +.d-inline { display: inline !important; } + +.d-inline-block { display: inline-block !important; } + +.d-inline-flex { display: inline-flex !important; } + +.d-none { display: none !important; } + +.d-table { display: table !important; } + +.d-table-cell { display: table-cell !important; } + +@media (min-width: 544px) { .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-inline-flex { display: inline-flex !important; } + .d-sm-none { display: none !important; } + .d-sm-table { display: table !important; } + .d-sm-table-cell { display: table-cell !important; } } +@media (min-width: 768px) { .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-inline-flex { display: inline-flex !important; } + .d-md-none { display: none !important; } + .d-md-table { display: table !important; } + .d-md-table-cell { display: table-cell !important; } } +@media (min-width: 1012px) { .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-inline-flex { display: inline-flex !important; } + .d-lg-none { display: none !important; } + .d-lg-table { display: table !important; } + .d-lg-table-cell { display: table-cell !important; } } +@media (min-width: 1280px) { .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-inline-flex { display: inline-flex !important; } + .d-xl-none { display: none !important; } + .d-xl-table { display: table !important; } + .d-xl-table-cell { display: table-cell !important; } } +.v-hidden { visibility: hidden !important; } + +.v-visible { visibility: visible !important; } + +@media (max-width: 544px) { .hide-sm { display: none !important; } } +@media (min-width: 544px) and (max-width: 768px) { .hide-md { display: none !important; } } +@media (min-width: 768px) and (max-width: 1012px) { .hide-lg { display: none !important; } } +@media (min-width: 1012px) { .hide-xl { display: none !important; } } +/* Set the table-layout to fixed */ +.table-fixed { table-layout: fixed !important; } + +.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); word-wrap: normal; border: 0; } + +.show-on-focus { position: absolute; width: 1px; height: 1px; margin: 0; overflow: hidden; clip: rect(1px, 1px, 1px, 1px); } +.show-on-focus:focus { z-index: 20; width: auto; height: auto; clip: auto; } + +.container { width: 980px; margin-right: auto; margin-left: auto; } +.container::before { display: table; content: ""; } +.container::after { display: table; clear: both; content: ""; } + +.container-md { max-width: 768px; margin-right: auto; margin-left: auto; } + +.container-lg { max-width: 1012px; margin-right: auto; margin-left: auto; } + +.container-xl { max-width: 1280px; margin-right: auto; margin-left: auto; } + +.columns { margin-right: -10px; margin-left: -10px; } +.columns::before { display: table; content: ""; } +.columns::after { display: table; clear: both; content: ""; } + +.column { float: left; padding-right: 10px; padding-left: 10px; } + +.one-third { width: 33.333333%; } + +.two-thirds { width: 66.666667%; } + +.one-fourth { width: 25%; } + +.one-half { width: 50%; } + +.three-fourths { width: 75%; } + +.one-fifth { width: 20%; } + +.four-fifths { width: 80%; } + +.centered { display: block; float: none; margin-right: auto; margin-left: auto; } + +.col-1 { width: 8.3333333333%; } + +.col-2 { width: 16.6666666667%; } + +.col-3 { width: 25%; } + +.col-4 { width: 33.3333333333%; } + +.col-5 { width: 41.6666666667%; } + +.col-6 { width: 50%; } + +.col-7 { width: 58.3333333333%; } + +.col-8 { width: 66.6666666667%; } + +.col-9 { width: 75%; } + +.col-10 { width: 83.3333333333%; } + +.col-11 { width: 91.6666666667%; } + +.col-12 { width: 100%; } + +@media (min-width: 544px) { .col-sm-1 { width: 8.3333333333%; } + .col-sm-2 { width: 16.6666666667%; } + .col-sm-3 { width: 25%; } + .col-sm-4 { width: 33.3333333333%; } + .col-sm-5 { width: 41.6666666667%; } + .col-sm-6 { width: 50%; } + .col-sm-7 { width: 58.3333333333%; } + .col-sm-8 { width: 66.6666666667%; } + .col-sm-9 { width: 75%; } + .col-sm-10 { width: 83.3333333333%; } + .col-sm-11 { width: 91.6666666667%; } + .col-sm-12 { width: 100%; } } +@media (min-width: 768px) { .col-md-1 { width: 8.3333333333%; } + .col-md-2 { width: 16.6666666667%; } + .col-md-3 { width: 25%; } + .col-md-4 { width: 33.3333333333%; } + .col-md-5 { width: 41.6666666667%; } + .col-md-6 { width: 50%; } + .col-md-7 { width: 58.3333333333%; } + .col-md-8 { width: 66.6666666667%; } + .col-md-9 { width: 75%; } + .col-md-10 { width: 83.3333333333%; } + .col-md-11 { width: 91.6666666667%; } + .col-md-12 { width: 100%; } } +@media (min-width: 1012px) { .col-lg-1 { width: 8.3333333333%; } + .col-lg-2 { width: 16.6666666667%; } + .col-lg-3 { width: 25%; } + .col-lg-4 { width: 33.3333333333%; } + .col-lg-5 { width: 41.6666666667%; } + .col-lg-6 { width: 50%; } + .col-lg-7 { width: 58.3333333333%; } + .col-lg-8 { width: 66.6666666667%; } + .col-lg-9 { width: 75%; } + .col-lg-10 { width: 83.3333333333%; } + .col-lg-11 { width: 91.6666666667%; } + .col-lg-12 { width: 100%; } } +@media (min-width: 1280px) { .col-xl-1 { width: 8.3333333333%; } + .col-xl-2 { width: 16.6666666667%; } + .col-xl-3 { width: 25%; } + .col-xl-4 { width: 33.3333333333%; } + .col-xl-5 { width: 41.6666666667%; } + .col-xl-6 { width: 50%; } + .col-xl-7 { width: 58.3333333333%; } + .col-xl-8 { width: 66.6666666667%; } + .col-xl-9 { width: 75%; } + .col-xl-10 { width: 83.3333333333%; } + .col-xl-11 { width: 91.6666666667%; } + .col-xl-12 { width: 100%; } } +.gutter { margin-right: -16px; margin-left: -16px; } +.gutter > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } + +.gutter-condensed { margin-right: -8px; margin-left: -8px; } +.gutter-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } + +.gutter-spacious { margin-right: -24px; margin-left: -24px; } +.gutter-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } + +@media (min-width: 544px) { .gutter-sm { margin-right: -16px; margin-left: -16px; } + .gutter-sm > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } + .gutter-sm-condensed { margin-right: -8px; margin-left: -8px; } + .gutter-sm-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } + .gutter-sm-spacious { margin-right: -24px; margin-left: -24px; } + .gutter-sm-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } +@media (min-width: 768px) { .gutter-md { margin-right: -16px; margin-left: -16px; } + .gutter-md > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } + .gutter-md-condensed { margin-right: -8px; margin-left: -8px; } + .gutter-md-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } + .gutter-md-spacious { margin-right: -24px; margin-left: -24px; } + .gutter-md-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } +@media (min-width: 1012px) { .gutter-lg { margin-right: -16px; margin-left: -16px; } + .gutter-lg > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } + .gutter-lg-condensed { margin-right: -8px; margin-left: -8px; } + .gutter-lg-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } + .gutter-lg-spacious { margin-right: -24px; margin-left: -24px; } + .gutter-lg-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } +@media (min-width: 1280px) { .gutter-xl { margin-right: -16px; margin-left: -16px; } + .gutter-xl > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } + .gutter-xl-condensed { margin-right: -8px; margin-left: -8px; } + .gutter-xl-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } + .gutter-xl-spacious { margin-right: -24px; margin-left: -24px; } + .gutter-xl-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } +.offset-1 { margin-left: 8.3333333333% !important; } + +.offset-2 { margin-left: 16.6666666667% !important; } + +.offset-3 { margin-left: 25% !important; } + +.offset-4 { margin-left: 33.3333333333% !important; } + +.offset-5 { margin-left: 41.6666666667% !important; } + +.offset-6 { margin-left: 50% !important; } + +.offset-7 { margin-left: 58.3333333333% !important; } + +.offset-8 { margin-left: 66.6666666667% !important; } + +.offset-9 { margin-left: 75% !important; } + +.offset-10 { margin-left: 83.3333333333% !important; } + +.offset-11 { margin-left: 91.6666666667% !important; } + +@media (min-width: 544px) { .offset-sm-1 { margin-left: 8.3333333333% !important; } + .offset-sm-2 { margin-left: 16.6666666667% !important; } + .offset-sm-3 { margin-left: 25% !important; } + .offset-sm-4 { margin-left: 33.3333333333% !important; } + .offset-sm-5 { margin-left: 41.6666666667% !important; } + .offset-sm-6 { margin-left: 50% !important; } + .offset-sm-7 { margin-left: 58.3333333333% !important; } + .offset-sm-8 { margin-left: 66.6666666667% !important; } + .offset-sm-9 { margin-left: 75% !important; } + .offset-sm-10 { margin-left: 83.3333333333% !important; } + .offset-sm-11 { margin-left: 91.6666666667% !important; } } +@media (min-width: 768px) { .offset-md-1 { margin-left: 8.3333333333% !important; } + .offset-md-2 { margin-left: 16.6666666667% !important; } + .offset-md-3 { margin-left: 25% !important; } + .offset-md-4 { margin-left: 33.3333333333% !important; } + .offset-md-5 { margin-left: 41.6666666667% !important; } + .offset-md-6 { margin-left: 50% !important; } + .offset-md-7 { margin-left: 58.3333333333% !important; } + .offset-md-8 { margin-left: 66.6666666667% !important; } + .offset-md-9 { margin-left: 75% !important; } + .offset-md-10 { margin-left: 83.3333333333% !important; } + .offset-md-11 { margin-left: 91.6666666667% !important; } } +@media (min-width: 1012px) { .offset-lg-1 { margin-left: 8.3333333333% !important; } + .offset-lg-2 { margin-left: 16.6666666667% !important; } + .offset-lg-3 { margin-left: 25% !important; } + .offset-lg-4 { margin-left: 33.3333333333% !important; } + .offset-lg-5 { margin-left: 41.6666666667% !important; } + .offset-lg-6 { margin-left: 50% !important; } + .offset-lg-7 { margin-left: 58.3333333333% !important; } + .offset-lg-8 { margin-left: 66.6666666667% !important; } + .offset-lg-9 { margin-left: 75% !important; } + .offset-lg-10 { margin-left: 83.3333333333% !important; } + .offset-lg-11 { margin-left: 91.6666666667% !important; } } +@media (min-width: 1280px) { .offset-xl-1 { margin-left: 8.3333333333% !important; } + .offset-xl-2 { margin-left: 16.6666666667% !important; } + .offset-xl-3 { margin-left: 25% !important; } + .offset-xl-4 { margin-left: 33.3333333333% !important; } + .offset-xl-5 { margin-left: 41.6666666667% !important; } + .offset-xl-6 { margin-left: 50% !important; } + .offset-xl-7 { margin-left: 58.3333333333% !important; } + .offset-xl-8 { margin-left: 66.6666666667% !important; } + .offset-xl-9 { margin-left: 75% !important; } + .offset-xl-10 { margin-left: 83.3333333333% !important; } + .offset-xl-11 { margin-left: 91.6666666667% !important; } } +.markdown-body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; line-height: 1.5; word-wrap: break-word; } +.markdown-body::before { display: table; content: ""; } +.markdown-body::after { display: table; clear: both; content: ""; } +.markdown-body > *:first-child { margin-top: 0 !important; } +.markdown-body > *:last-child { margin-bottom: 0 !important; } +.markdown-body a:not([href]) { color: inherit; text-decoration: none; } +.markdown-body .absent { color: #cb2431; } +.markdown-body .anchor { float: left; padding-right: 4px; margin-left: -20px; line-height: 1; } +.markdown-body .anchor:focus { outline: none; } +.markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { margin-top: 0; margin-bottom: 16px; } +.markdown-body hr { height: 0.25em; padding: 0; margin: 24px 0; background-color: #e1e4e8; border: 0; } +.markdown-body blockquote { padding: 0 1em; color: #6a737d; border-left: 0.25em solid #dfe2e5; } +.markdown-body blockquote > :first-child { margin-top: 0; } +.markdown-body blockquote > :last-child { margin-bottom: 0; } +.markdown-body kbd { display: inline-block; padding: 3px 5px; font-size: 11px; line-height: 10px; color: #444d56; vertical-align: middle; background-color: #fafbfc; border: solid 1px #c6cbd1; border-bottom-color: #959da5; border-radius: 3px; box-shadow: inset 0 -1px 0 #959da5; } + +.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { margin-top: 24px; margin-bottom: 16px; font-weight: 600; line-height: 1.25; } +.markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #1b1f23; vertical-align: middle; visibility: hidden; } +.markdown-body h1:hover .anchor, .markdown-body h2:hover .anchor, .markdown-body h3:hover .anchor, .markdown-body h4:hover .anchor, .markdown-body h5:hover .anchor, .markdown-body h6:hover .anchor { text-decoration: none; } +.markdown-body h1:hover .anchor .octicon-link, .markdown-body h2:hover .anchor .octicon-link, .markdown-body h3:hover .anchor .octicon-link, .markdown-body h4:hover .anchor .octicon-link, .markdown-body h5:hover .anchor .octicon-link, .markdown-body h6:hover .anchor .octicon-link { visibility: visible; } +.markdown-body h1 tt, .markdown-body h1 code, .markdown-body h2 tt, .markdown-body h2 code, .markdown-body h3 tt, .markdown-body h3 code, .markdown-body h4 tt, .markdown-body h4 code, .markdown-body h5 tt, .markdown-body h5 code, .markdown-body h6 tt, .markdown-body h6 code { font-size: inherit; } +.markdown-body h1 { padding-bottom: 0.3em; font-size: 2em; border-bottom: 1px solid #eaecef; } +.markdown-body h2 { padding-bottom: 0.3em; font-size: 1.5em; border-bottom: 1px solid #eaecef; } +.markdown-body h3 { font-size: 1.25em; } +.markdown-body h4 { font-size: 1em; } +.markdown-body h5 { font-size: 0.875em; } +.markdown-body h6 { font-size: 0.85em; color: #6a737d; } + +.markdown-body ul, .markdown-body ol { padding-left: 2em; } +.markdown-body ul.no-list, .markdown-body ol.no-list { padding: 0; list-style-type: none; } +.markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, .markdown-body ol ul { margin-top: 0; margin-bottom: 0; } +.markdown-body li { word-wrap: break-all; } +.markdown-body li > p { margin-top: 16px; } +.markdown-body li + li { margin-top: 0.25em; } +.markdown-body dl { padding: 0; } +.markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: 600; } +.markdown-body dl dd { padding: 0 16px; margin-bottom: 16px; } + +.markdown-body table { display: block; width: 100%; overflow: auto; } +.markdown-body table th { font-weight: 600; } +.markdown-body table th, .markdown-body table td { padding: 6px 13px; border: 1px solid #dfe2e5; } +.markdown-body table tr { background-color: #fff; border-top: 1px solid #c6cbd1; } +.markdown-body table tr:nth-child(2n) { background-color: #f6f8fa; } +.markdown-body table img { background-color: transparent; } + +.markdown-body img { max-width: 100%; box-sizing: content-box; background-color: #fff; } +.markdown-body img[align=right] { padding-left: 20px; } +.markdown-body img[align=left] { padding-right: 20px; } +.markdown-body .emoji { max-width: none; vertical-align: text-top; background-color: transparent; } +.markdown-body span.frame { display: block; overflow: hidden; } +.markdown-body span.frame > span { display: block; float: left; width: auto; padding: 7px; margin: 13px 0 0; overflow: hidden; border: 1px solid #dfe2e5; } +.markdown-body span.frame span img { display: block; float: left; } +.markdown-body span.frame span span { display: block; padding: 5px 0 0; clear: both; color: #24292e; } +.markdown-body span.align-center { display: block; overflow: hidden; clear: both; } +.markdown-body span.align-center > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: center; } +.markdown-body span.align-center span img { margin: 0 auto; text-align: center; } +.markdown-body span.align-right { display: block; overflow: hidden; clear: both; } +.markdown-body span.align-right > span { display: block; margin: 13px 0 0; overflow: hidden; text-align: right; } +.markdown-body span.align-right span img { margin: 0; text-align: right; } +.markdown-body span.float-left { display: block; float: left; margin-right: 13px; overflow: hidden; } +.markdown-body span.float-left span { margin: 13px 0 0; } +.markdown-body span.float-right { display: block; float: right; margin-left: 13px; overflow: hidden; } +.markdown-body span.float-right > span { display: block; margin: 13px auto 0; overflow: hidden; text-align: right; } + +.markdown-body code, .markdown-body tt { padding: 0.2em 0.4em; margin: 0; font-size: 85%; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; } +.markdown-body code br, .markdown-body tt br { display: none; } +.markdown-body del code { text-decoration: inherit; } +.markdown-body pre { word-wrap: normal; } +.markdown-body pre > code { padding: 0; margin: 0; font-size: 100%; word-break: normal; white-space: pre; background: transparent; border: 0; } +.markdown-body .highlight { margin-bottom: 16px; } +.markdown-body .highlight pre { margin-bottom: 0; word-break: normal; } +.markdown-body .highlight pre, .markdown-body pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f6f8fa; border-radius: 3px; } +.markdown-body pre code, .markdown-body pre tt { display: inline; max-width: auto; padding: 0; margin: 0; overflow: visible; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; } + +.markdown-body .csv-data td, .markdown-body .csv-data th { padding: 5px; overflow: hidden; font-size: 12px; line-height: 1; text-align: left; white-space: nowrap; } +.markdown-body .csv-data .blob-num { padding: 10px 8px 9px; text-align: right; background: #fff; border: 0; } +.markdown-body .csv-data tr { border-top: 0; } +.markdown-body .csv-data th { font-weight: 600; background: #f6f8fa; border-top: 0; } + +.highlight table td { padding: 5px; } + +.highlight table pre { margin: 0; } + +.highlight .cm { color: #999988; font-style: italic; } + +.highlight .cp { color: #999999; font-weight: bold; } + +.highlight .c1 { color: #999988; font-style: italic; } + +.highlight .cs { color: #999999; font-weight: bold; font-style: italic; } + +.highlight .c, .highlight .cd { color: #999988; font-style: italic; } + +.highlight .err { color: #a61717; background-color: #e3d2d2; } + +.highlight .gd { color: #000000; background-color: #ffdddd; } + +.highlight .ge { color: #000000; font-style: italic; } + +.highlight .gr { color: #aa0000; } + +.highlight .gh { color: #999999; } + +.highlight .gi { color: #000000; background-color: #ddffdd; } + +.highlight .go { color: #888888; } + +.highlight .gp { color: #555555; } + +.highlight .gs { font-weight: bold; } + +.highlight .gu { color: #aaaaaa; } + +.highlight .gt { color: #aa0000; } + +.highlight .kc { color: #000000; font-weight: bold; } + +.highlight .kd { color: #000000; font-weight: bold; } + +.highlight .kn { color: #000000; font-weight: bold; } + +.highlight .kp { color: #000000; font-weight: bold; } + +.highlight .kr { color: #000000; font-weight: bold; } + +.highlight .kt { color: #445588; font-weight: bold; } + +.highlight .k, .highlight .kv { color: #000000; font-weight: bold; } + +.highlight .mf { color: #009999; } + +.highlight .mh { color: #009999; } + +.highlight .il { color: #009999; } + +.highlight .mi { color: #009999; } + +.highlight .mo { color: #009999; } + +.highlight .m, .highlight .mb, .highlight .mx { color: #009999; } + +.highlight .sb { color: #d14; } + +.highlight .sc { color: #d14; } + +.highlight .sd { color: #d14; } + +.highlight .s2 { color: #d14; } + +.highlight .se { color: #d14; } + +.highlight .sh { color: #d14; } + +.highlight .si { color: #d14; } + +.highlight .sx { color: #d14; } + +.highlight .sr { color: #009926; } + +.highlight .s1 { color: #d14; } + +.highlight .ss { color: #990073; } + +.highlight .s { color: #d14; } + +.highlight .na { color: #008080; } + +.highlight .bp { color: #999999; } + +.highlight .nb { color: #0086B3; } + +.highlight .nc { color: #445588; font-weight: bold; } + +.highlight .no { color: #008080; } + +.highlight .nd { color: #3c5d5d; font-weight: bold; } + +.highlight .ni { color: #800080; } + +.highlight .ne { color: #990000; font-weight: bold; } + +.highlight .nf { color: #990000; font-weight: bold; } + +.highlight .nl { color: #990000; font-weight: bold; } + +.highlight .nn { color: #555555; } + +.highlight .nt { color: #000080; } + +.highlight .vc { color: #008080; } + +.highlight .vg { color: #008080; } + +.highlight .vi { color: #008080; } + +.highlight .nv { color: #008080; } + +.highlight .ow { color: #000000; font-weight: bold; } + +.highlight .o { color: #000000; font-weight: bold; } + +.highlight .w { color: #bbbbbb; } + +.highlight { background-color: #f8f8f8; } diff --git a/_site/backup.sh b/_site/backup.sh new file mode 100755 index 0000000..ac84af1 --- /dev/null +++ b/_site/backup.sh @@ -0,0 +1,2 @@ +#!/bin/sh +curl -L 'https://docs.google.com/document/d/14DHDB24Cp_kzpYqhHCKCtnzOw8_WuLOOONyqJHSsaYM/export?format=txt' > proposal.txt diff --git a/_site/imgs/building-blocks.svg b/_site/imgs/building-blocks.svg new file mode 100644 index 0000000..8e8802d --- /dev/null +++ b/_site/imgs/building-blocks.svg @@ -0,0 +1,554 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + More tooling(Integrations, Auth, ...) + + + + Images + + + + + + + + + + + + + + + + + + + + + + + + + + DVCLI + DATAVERSE FROM CMDLINE + + + + + + + + + + + Cloud &Container Guide + + + + + K8s Objects + + + + Operator + (tbd) + + + + + + + + + + ComposeSupport + + (tbd) + + + + + + CommunityProject + + + + + + + + + + + + + + diff --git a/_site/imgs/gdcc_v2_lr_tb-07_homepage.png b/_site/imgs/gdcc_v2_lr_tb-07_homepage.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffdaf9a8ccf7aabf97450547696eeefc263dc42 GIT binary patch literal 5257 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 IRx}IxAI1Bp1poj5 literal 0 HcmV?d00001 diff --git a/_site/imgs/webb.png b/_site/imgs/webb.png new file mode 100644 index 0000000000000000000000000000000000000000..a9df81f2f06867fa4461e84cae596ff707b932f9 GIT binary patch literal 12240 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 Nc9v*tYo;GW(M7{$1&SmZ78>&3kJ6{iNM6D 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 literal 0 HcmV?d00001 diff --git a/_site/imgs/zulip.png b/_site/imgs/zulip.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f2252fe2bea765bcfc94387a03a205357d5fe9 GIT binary patch literal 24706 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 proposal.txt diff --git a/imgs/building-blocks.svg b/imgs/building-blocks.svg new file mode 100644 index 0000000..8e8802d --- /dev/null +++ b/imgs/building-blocks.svg @@ -0,0 +1,554 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + More tooling(Integrations, Auth, ...) + + + + Images + + + + + + + + + + + + + + + + + + + + + + + + + + DVCLI + DATAVERSE FROM CMDLINE + + + + + + + + + + + Cloud &Container Guide + + + + + K8s Objects + + + + Operator + (tbd) + + + + + + + + + + ComposeSupport + + (tbd) + + + + + + CommunityProject + + + + + + + + + + + + + + diff --git a/imgs/gdcc_v2_lr_tb-07_homepage.png b/imgs/gdcc_v2_lr_tb-07_homepage.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffdaf9a8ccf7aabf97450547696eeefc263dc42 GIT binary patch literal 5257 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 IRx}IxAI1Bp1poj5 literal 0 HcmV?d00001 diff --git a/imgs/webb.png b/imgs/webb.png new file mode 100644 index 0000000000000000000000000000000000000000..a9df81f2f06867fa4461e84cae596ff707b932f9 GIT binary patch literal 12240 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 Nc9v*tYo;GW(M7{$1&SmZ78>&3kJ6{iNM6D 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 literal 0 HcmV?d00001 diff --git a/imgs/zulip.png b/imgs/zulip.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f2252fe2bea765bcfc94387a03a205357d5fe9 GIT binary patch literal 24706 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 diff --git a/proposal.txt b/proposal.txt new file mode 100644 index 0000000..77123c6 --- /dev/null +++ b/proposal.txt @@ -0,0 +1,158 @@ +Dataverse Containerization + + +This version: 1.0, April 18, 2023 +Oliver Bertuch, Philip Durbin, Guillermo Portas +Overview +Prioritization +Milestones +Milestone A: For backend (Java) developers +Milestone B: For API client testing +Milestone C: For an integration/frontend developer (w/o Java) +Milestone D: Improve developer experience +Milestone E: Demo or evaluation +Milestone F: Demo with some configurability +Milestone G: Run API tests in containers +Future/Production + + +Overview + + +Containerization is the generic term for Dockerization. Containerizing the Dataverse software entails making it more practical to run the software and its dependencies in Docker or similar drop-in replacements for Docker, such as Podman. For many years, the Dataverse community has expressed the need to run Dataverse in Docker for a variety of reasons, including: + + +* Sysadmins want to deploy Dataverse in production, staging, or demo environments. +* Integrators want to test their code that uses Dataverse APIs (e.g. clients) or modularity (e.g. external vocabulary). +* Contributors to the core Dataverse Java code or configuration (e.g. metadata blocks) want to test their features and bug fixes. + + +This proposal for how to proceed with containerization of Dataverse has been written by members of the Containerization Working Group which has taken into account the following facts: + + +* The core development team at IQSS is not especially familiar with Docker and containerization generally. +* While the community would like production-ready images immediately, it will take time for images to mature. Any images produced will be under the umbrella of the Global Dataverse Community Consortium (GDCC) rather than IQSS and should be considered highly experimental until otherwise indicated. That said, while moving forward, we are very much keeping in mind production use cases. + + +Given the facts above, the working group recommends the following: + + +1. Focus on the developer use cases first to increase familiarity with the technology. +2. Take advantage of the fact that a new client library is being written in JavaScript/TypeScript (to support the new, upcoming frontend) and offer images for integration testing. +3. Given a new frontend written in React, prepare backend images that frontend developers can use. +4. As a step toward production usage, explain how to use images for demo or evaluation purposes. +5. Take advantage of containers for API testing (and maybe future integration testing). + + +These steps are detailed below as milestones that will help make images more useful for non-production use cases. Production use cases are covered under a section on the future. + + +Feedback on this document is very welcome! Please simply leave a comment by May 3rd, 2023. +Prioritization + + +Because the Dataverse development process is oriented around a GitHub project called Dataverse Global Backlog, it would be useful to have a dedicated column called "Containerization" so that the working group can place items at the top that it feels should be prioritized. +Milestones +Milestone A: For backend (Java) developers + + +Now that pull request #9439 (and the work leading up to it) has been merged, backend Java developers can already make use of containers when writing code or running the code of others while they review it. + + +Milestone A represents this work that has already been completed as well as a few additional items that will benefit backend developers. + + +* Clean up documentation (Size: 3) + * Explain how to redeploy (the hard way) + * Explain how to view logs (Slack discussion) + * Update Windows dev page: https://guides.dataverse.org/en/5.13/developers/windows.html + * A cloned Dataverse by Git for Windows with the line-ending setting is set to always LF (core.autocrlf=input) + * Can use vanilla `docker compose up` instead of `mvn docker:run`: https://preview.guides.gdcc.io/en/develop/container/dev-usage.html +* Change image tag names from "stable" to "demo" to foster the message of “unsupported by IQSS” everywhere. (Size: 3) + + +Milestone B: For API client testing + + +For example, js-dataverse, pyDataverse, R, etc. + + +* Push app images to registries: #9447 (Size: 10) + * Develop and master go to Docker Hub, PRs go to GHCR. + * Document limitations: must clone main repo (or at least download the necessary files, similar to dvinstall.zip or download the whole repo as a zip), must run docker-final-setup.sh +* Remove some of the need to clone the whole repo (or equivalent) (Size: 33) + * Create a docker-compose file including curl calls to retrieve config files both for Solr and App image (docker-final-setup.sh). We can start from the current docker-compose-dev.yml file from the dataverse main repository and modify it to retrieve the files from the github repository instead of the local repository. Example: + * curl -O https://raw.githubusercontent.com/IQSS/dataverse/develop/conf/solr/8.11.1/schema_dv_mdb_fields.xml etc. (schema.xml) + * The curl/download calls might be from the containers entrypoint / command + + +Milestone C: For an integration/frontend developer (w/o Java) + + +* `docker compose up` with no Java/Maven installed + * Needs to add “ignore build” in POM and second Dockerfile with multistep build, see also discussion (Size: 10) + * Images should be preconfigured to not need a startup script (e.g. docker-final-setup.sh) + * Solr issue for this: #9516 (size: 80) + * Perhaps we could use a vanilla container but prepopulate the config using an init container. (Might also be beneficial for using SolrCloud, shipping config via Zookeeper) + * Alternatively, we could build our own Solr image. (discussion) + * Either way, instead of having schema.xml and solrconfig.xml in the code base, these could be generated from vanilla. (See mdbtool) + * Document how to modify the schema (and TSV) or defer this to a future milestone. + * For Dataverse application image, a few possibilities (size: 80) + * run docker-final-setup.sh from within "dataverse" container, this is what dataverse-docker does, scripts can be added/extended + * separate container (not in application image), waitfor script, polling, then do the necessary setup, make script extensible, people can add their own scripts. Needs a name (not "init container"), maybe "configuration container" or "bootstrapping container" + * not init container (but runs before application is running and docker compose doesn't know about it) +* Unify setup scripts for classic installer vs. bootstrapping of containers by creating an extensible framework for setup scripts. (Size: 80) + * Will include Metadata blocks, custom roles and groups, authentication providers +* Configurability (Size: 10) + * Make mail subsystem use MPCONFIG #7424 +Milestone D: Improve developer experience + + +* Smoke test within GitHub Actions: deploy and bootstrap, make logs available (Size: 33) +* Autoreloading code changes? #5593 + * Faster way to iterate on Java than `mvn -Pct clean package docker:run`? + * Prepare and document how to use JRebel (base+app image) + * Test docker:watch and enabled hot redeploy (app image) +* Under dev usage docs, explain debugging options. +* Storage options + * Ability to test S3 code (Minio or SeaweedFS or S3 Testcontainers, or possibly LocalStack? https://localstack.cloud/ ) + * Configurability: Make storage configuration use MPCONFIG (Size: 33) + * Location of Docroot: look into making the docroot location configurable or use some other hack to store this important data on some volume. Some Java code is directly using with the location for different tasks. Also relates to customization. (Size: 33) +Milestone E: Demo or evaluation +kick the tires (archive in a box), users will be less technical + + +* Create docker-compose-demo.yml with "demo" instead of "latest" +* Create docs page on demo usage (similar to development usage) + * “clone repo”, “run these commands”, “go to this port” +* Incorporate Reverse Proxy +* Incorporate Keycloak? +* Bundle additional tools like email catchers and pgadmin? +Milestone F: Demo with some configurability +* Change the root collection alias and name +* Customization + * Customization (JS/HTML/CSS) + * External Vocabularies +Milestone G: Run API tests in containers + + +* See also "smoke test" above. +* MPCONFIG for remaining dozen JVM settings (Size: 80) +* Refactor tests to use JUnit5 and helpers to manipulate the JVM settings during testing (Size: 33) +* Handle stored procedures in PostgreSQL (Size: 10) +* API tests from within the Dataverse codebase itself (SearchIT.java, etc.) +* Currently, these are triggered by a webhook and launched from jenkins.dataverse.org +* Github Workflows for API tests +Future/Production + + +* Provide examples (documentation) for different container environments: + * How to run on OpenShift (also requiring running as non-root) + * How to spin up simple infrastructures using Terraform/Ansible to run the containers on top + * Let the community provide more guides for more complex and more sophisticated use cases, to be included in the examples. + * How to run scalable and highly available deployments + * Links to tutorials and docs for clustered PostgreSQL + * Links to tutorials how to run SolrCloud and docs about how to create a deployment pipeline for the schema +* Compatibility of DB settings with MPCONFIG? (Envisioning a future single source of configuration in one file to rule them all, similar to dataverse-ansible's main.yml) +* Make Dataverse use Hazelcast and address https://guides.dataverse.org/en/5.13/installation/advanced.html#multiple-app-servers +* Operator to maintain a Dataverse installation on a Kubernetes, add Helm charts etc. \ No newline at end of file diff --git a/run-incremental.sh b/run-incremental.sh new file mode 100755 index 0000000..75dfc38 --- /dev/null +++ b/run-incremental.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# run the site locally at http://localhost:4000 +docker run --rm \ + -p 4000:4000 \ + --volume="$PWD:/srv/jekyll:Z" \ + --publish "[::1]:4000:4000" \ + jekyll/jekyll \ + jekyll serve --incremental diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..5b6a4a5 --- /dev/null +++ b/run.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# run the site locally at http://localhost:4000 +docker run --rm \ + -p 4000:4000 \ + --volume="$PWD:/srv/jekyll:Z" \ + --publish "[::1]:4000:4000" \ + jekyll/jekyll \ + jekyll serve