diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100755
index 0000000..4b9fe7a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,154 @@
+# GitHub Handbook Content
+
+The GitHub Handbook website is a [Jekyll static site](https://jekyllrb.com/).
+
+Most of the content is editable as regular Markdown in files inside the ```_pages``` folder.
+
+If you want to modify HTML (e.g., create new pages that show in a sidebar), and you're not familiar with Jekyll, you'll want to ask a developer to help you.
+
+
+Configuration Variables
+
+
+Update the following variables to customize this site to your organization:
+
+
+_config.yml
+
+
+Update the values for the following variable groups:
+
+- contact-handbook
+- org
+- support
+- slack
+- conical_domain
+- url
+- baseurl
+- custom
+
+
+
+
+
+_main.scss
+
+
+Update the following to change the logo image:
+
+.usa-hero {
+ background-image:
+
+Image file is saved here:
+
+/docs/assets/img/logo/github-handbook.png
+
+
+
+
+
+
+
+
+Where Things Live
+
+
+* ```_data``` - simple .yml files containing data that is read into other pages
+
+* ```_includes``` - small pieces of HTML that are included into other pages, e.g., the header, the footer, etc.
+
+* ```_layouts``` - HTML structures for each page type:
+ * ```base``` - the basic HTML structure for all pages
+ * ```home``` - the HTML structure for the Home page
+ * ```jump-menu``` - the HTML structure for pages with a right side jump-down menu
+ * ```no-sidebar``` - the HTML structure for pages that do not have a sidebar, e.g., the contact page
+ * ```page``` - the HTML structure for pages with a sidebar
+
+* ```_posts``` - announcements that appear on the site
+
+* ```_sass``` - the uncompiled/editable CSS files
+
+* ```assets``` - the public assets folder for images, CSS, JS, etc
+
+* ```Gemfile``` and ```Gemfile.lock``` - no need to update unless you add new Gems
+
+* ```_config.yml``` - the file containing configuration information for Jekyll
+
+* ```manifest.json``` - the manifest file for mobile icons
+
+
+
+
+
+
+Page Structure
+
+
+### General
+
+All editable site pages live in the ```_pages``` folder.
+
+### Home page
+
+* The Home page is a custom page with its own layout -- ```_layouts/home.html```.
+
+* Most of the content is editable as [Jekyll front matter](https://jekyllrb.com/docs/front-matter/) in the ```_pages/index.md``` file.
+
+* Other editable content is noted in the Jekyll front matter in the same file.
+
+### Pages with Sidebars
+
+* Pages in the Delivery Guide and Resources section contain a sidebar and use the ```_layouts/page.html``` layout.
+
+* These pages are more complex, for example, they may use an include for secondary navigation or to include small bits of HTML.
+ * You can see where these pieces are included in the page file. For example, in the ```_pages/delivery/build-and-test-1.md``` file, you'll see ```{% include phase-planning.html phase="Build and Test" %}```. This says "include the ```_includes/phase-resources.html``` HTML and note the phase as *build and test*."
+ * Inside the ```_includes/phase-resources.html``` file, you'll see ```{{ site.data.phase-resources.guides | markdownify }}```. This says "include the content in the *guides* section of the ```_data/phase-resources``` file.
+
+* Most of the content is editable as Markdown below the three dashes (```---```) in the relevant ```_pages``` files, e.g., the ```_pages/delivery/build-and-test-1.md``` file.
+
+### Miscellaneous Pages
+
+> Contact and 404
+
+* These pages use the ```_layouts/no-sidebar.html``` layout.
+
+* Most of the content is editable as Markdown below the three dashes (```---```) in the relevant ```_pages``` files, e.g., the ```_pages/contact.md``` file.
+
+* Other editable content is noted in the Jekyll front matter in the same file.
+
+
+
+
+
+Using Markdown in Content
+
+
+### General
+
+You can use Markdown as normal in ```_pages``` files below the three dashes (```---```). E.g., paragraphs, bullet points, etc.
+
+The ```_sass/main.scss``` file styles all the Markdown.
+
+There is a special CSS style for a blockquote, which you can use by typing ```> content goes here``` in your Markdown. For example,
+> This is not a fancy blockquote.
+
+Markdown is not allowed in Jekyll front matter (the content between the three dashes (```---```).
+
+* If you need to style something in front matter, you'll need to use regular HTML tags.
+
+### Links
+
+To create links to pages inside the Handbook, use this format:
+
+* ```[User research guide]({{site.baseurl}}/resources/user-research)```
+ * The ```{{site.baseurl}}``` portion helps Jekyll create the proper link.
+
+To create links to pages outside the Handbook, use offsite links in this format:
+
+* ``````
+ * This opens the link in a new tab/page.
+
+
+
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..398dc4e
--- /dev/null
+++ b/README.md
@@ -0,0 +1,33 @@
+# GitHub Handbook
+
+## Information
+
+The `pages` site is driven by [Jekyll static site](https://jekyllrb.com/).
+
+GitHub `pages` sites can be `private` or `public` in github.com. However, the repository behind those pages sites can be `private` or `internal` (if hosted in an organization) which restricts the users that have `write-access` to those that have explicit permission.
+
+## Contributing as a member of the repository
+
+* See [CONTRIBUTING.md](/CONTRIBUTING.md) for
+ * How this Jekyll site is organized
+ * How to use Markdown for writing/editing content
+ * How to update the ```modified-date``` that displays on site pages.
+
+## Development
+
+This is a [Jekyll static site](https://jekyllrb.com/).
+
+### Setting up your local dev environment
+
+1. Clone/fork this repo.
+2. For best results (urls work correctly), run locally at 127.0.0.1:4000/
+
+ ```shell
+ bundle exec jekyll serve --incremental
+ ```
+
+3. Whenever you make a change to content, also change the ```modified-date``` in the yml at the top of the relevant ```.md``` file. See `Updating Page Dates` section on the [CONTRIBUTING.md](/CONTRIBUTE.md) page for more info.
+
+## Colophon
+
+* Jekyll front-end code inspired by [login.gov](https://www.login.gov)
diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100644
index 0000000..00fab16
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,21 @@
+source "https://rubygems.org"
+
+# Hello! This is where you manage which Jekyll version is used to run.
+# When you want to use a different version, change it below, save the
+# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
+#
+# bundle exec jekyll serve
+#
+# This will help ensure the proper Jekyll version is running.
+# Happy Jekylling!
+# gem "jekyll", "~> 3.8.3"
+
+# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
+# uncomment the line below. To upgrade, run `bundle update github-pages`.
+gem "github-pages", group: :jekyll_plugins
+
+# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
+gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby]
+
+# Performance-booster for watching directories on Windows
+gem "wdm", "~> 0.1.0" if Gem.win_platform?
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
new file mode 100644
index 0000000..7606526
--- /dev/null
+++ b/docs/Gemfile.lock
@@ -0,0 +1,274 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ activesupport (6.0.4)
+ concurrent-ruby (~> 1.0, >= 1.0.2)
+ i18n (>= 0.7, < 2)
+ minitest (~> 5.1)
+ tzinfo (~> 1.1)
+ zeitwerk (~> 2.2, >= 2.2.2)
+ addressable (2.8.0)
+ public_suffix (>= 2.0.2, < 5.0)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.11.1)
+ colorator (1.1.0)
+ commonmarker (0.17.13)
+ ruby-enum (~> 0.5)
+ concurrent-ruby (1.1.9)
+ dnsruby (1.61.7)
+ simpleidn (~> 0.1)
+ em-websocket (0.5.2)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0.6.0)
+ ethon (0.14.0)
+ ffi (>= 1.15.0)
+ eventmachine (1.2.7)
+ execjs (2.8.1)
+ faraday (1.4.3)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.1)
+ multipart-post (>= 1.2, < 3)
+ ruby2_keywords (>= 0.0.4)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-excon (1.1.0)
+ faraday-net_http (1.0.1)
+ faraday-net_http_persistent (1.1.0)
+ ffi (1.15.3)
+ forwardable-extended (2.6.0)
+ gemoji (3.0.1)
+ github-pages (215)
+ github-pages-health-check (= 1.17.2)
+ jekyll (= 3.9.0)
+ jekyll-avatar (= 0.7.0)
+ jekyll-coffeescript (= 1.1.1)
+ jekyll-commonmark-ghpages (= 0.1.6)
+ jekyll-default-layout (= 0.1.4)
+ jekyll-feed (= 0.15.1)
+ jekyll-gist (= 1.5.0)
+ jekyll-github-metadata (= 2.13.0)
+ 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.7.1)
+ jekyll-sitemap (= 1.4.0)
+ jekyll-swiss (= 1.0.0)
+ jekyll-theme-architect (= 0.1.1)
+ jekyll-theme-cayman (= 0.1.1)
+ jekyll-theme-dinky (= 0.1.1)
+ jekyll-theme-hacker (= 0.1.2)
+ jekyll-theme-leap-day (= 0.1.1)
+ jekyll-theme-merlot (= 0.1.1)
+ jekyll-theme-midnight (= 0.1.1)
+ jekyll-theme-minimal (= 0.1.1)
+ jekyll-theme-modernist (= 0.1.1)
+ jekyll-theme-primer (= 0.5.4)
+ jekyll-theme-slate (= 0.1.1)
+ jekyll-theme-tactile (= 0.1.1)
+ jekyll-theme-time-machine (= 0.1.1)
+ jekyll-titles-from-headings (= 0.5.3)
+ jemoji (= 0.12.0)
+ kramdown (= 2.3.1)
+ kramdown-parser-gfm (= 1.1.0)
+ liquid (= 4.0.3)
+ mercenary (~> 0.3)
+ minima (= 2.5.1)
+ nokogiri (>= 1.10.4, < 2.0)
+ rouge (= 3.26.0)
+ terminal-table (~> 1.4)
+ github-pages-health-check (1.17.2)
+ addressable (~> 2.3)
+ dnsruby (~> 1.60)
+ octokit (~> 4.0)
+ public_suffix (>= 2.0.2, < 5.0)
+ typhoeus (~> 1.3)
+ html-pipeline (2.14.0)
+ activesupport (>= 2)
+ nokogiri (>= 1.4)
+ http_parser.rb (0.6.0)
+ i18n (0.9.5)
+ concurrent-ruby (~> 1.0)
+ jekyll (3.9.0)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ em-websocket (~> 0.5)
+ i18n (~> 0.7)
+ 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.3.1)
+ commonmarker (~> 0.14)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-commonmark-ghpages (0.1.6)
+ commonmarker (~> 0.17.6)
+ jekyll-commonmark (~> 1.2)
+ rouge (>= 2.0, < 4.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-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.7.1)
+ jekyll (>= 3.8, < 5.0)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-swiss (1.0.0)
+ jekyll-theme-architect (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-cayman (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-dinky (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-hacker (0.1.2)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-leap-day (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-merlot (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-midnight (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-minimal (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-modernist (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-primer (0.5.4)
+ jekyll (> 3.5, < 5.0)
+ jekyll-github-metadata (~> 2.9)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-slate (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-tactile (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-time-machine (0.1.1)
+ jekyll (~> 3.5)
+ 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.1)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.3)
+ listen (3.5.1)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
+ mercenary (0.3.6)
+ mini_portile2 (2.6.1)
+ minima (2.5.1)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
+ minitest (5.14.4)
+ multipart-post (2.1.1)
+ nokogiri (1.12.5)
+ mini_portile2 (~> 2.6.1)
+ racc (~> 1.4)
+ octokit (4.21.0)
+ faraday (>= 0.9)
+ sawyer (~> 0.8.0, >= 0.5.3)
+ pathutil (0.16.2)
+ forwardable-extended (~> 2.6)
+ public_suffix (4.0.6)
+ racc (1.5.2)
+ rb-fsevent (0.11.0)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rexml (3.2.5)
+ rouge (3.26.0)
+ ruby-enum (0.9.0)
+ i18n
+ ruby2_keywords (0.0.4)
+ rubyzip (2.3.0)
+ 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.8.2)
+ addressable (>= 2.3.5)
+ faraday (> 0.8, < 2.0)
+ simpleidn (0.2.1)
+ unf (~> 0.1.4)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ thread_safe (0.3.6)
+ typhoeus (1.4.0)
+ ethon (>= 0.9.0)
+ tzinfo (1.2.9)
+ thread_safe (~> 0.1)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.7.7)
+ unicode-display_width (1.7.0)
+ zeitwerk (2.4.2)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ github-pages
+ tzinfo-data
+
+BUNDLED WITH
+ 2.1.4
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..c530555
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,93 @@
+# ----------------------------------
+# TABLE OF CONTENTS
+#
+# 1. Site Settings - Controls the content that appears in the html metadata Title and Description attributes for site pages. The title attribute is used as the first part of the browser page title, i.e., "GitHub Handbook - Page Title Here"
+#
+# 2. Ignore Everything Below This Line - content that follows control Jekyll and Github. Content Writers and Editors can ignore all of this.
+#
+# ----------------------------------
+
+# 1. Site Settings
+title: GitHub Handbook
+
+title_short: GitHub Handbook
+
+description: The GitHub Handbook helps an organization's users by providing a collection of guides and policies to help teams with work, including onboarding and how to use GitHub.
+
+tagline: Helping teams get started with GitHub and the Policies & Standards for using GitHub your organization.
+
+contact-handbook:
+ name: services@github.com
+ email: services.github.com
+
+org:
+ name: org-name
+ link: org-link
+
+support:
+ team-name: support-team-name
+ team-handle: support-handle
+ email: support-email
+ issue-link: support-issues
+
+slack:
+ workspace-name: slack-workspace-name
+ workspace-link: slack-workspace-link
+ channel-name: slack-channel-name
+ channel-link: slack-channel-link
+
+
+# ----------------------------------
+# 2. IGNORE EVERYTHING BELOW THIS LINE
+# ----------------------------------
+
+# Navigation Menu
+nav:
+ menu-button: Menu
+ skip_nav: Skip to main content
+
+
+# Additional Site Settings
+#image: /assets/img/logo/og-image.jpg
+canonical_domain: githubtraining.github.io
+url: https://githubtraining.github.io/
+baseurl: /github-handbook-template
+
+# Pages
+collections:
+ pages:
+ output: true
+ permalink: /:path/
+
+# Build settings
+kramdown:
+ hard_wrap: true
+
+# Defaults
+defaults:
+- scope:
+ path: ""
+ values:
+ layout: base
+
+exclude:
+ - Gemfile
+ - Gemfile.lock
+ - package.json
+ - package-lock.json
+ - node_modules
+ - LICENSE
+ - CONTRIBUTING
+ - README
+ - vendor
+
+sass:
+ # Either :compressed or :expanded
+ style: :compressed
+ # Where you keep your scss files
+ sass_dir: _sass
+ # Where sass should look for other scss
+ #load_paths:
+ #- node_modules/uswds/src/stylesheets
+ #- _sass/_variables.scss
+ #- _sass/_main.scss
diff --git a/docs/_data/footer.yml b/docs/_data/footer.yml
new file mode 100755
index 0000000..f14296b
--- /dev/null
+++ b/docs/_data/footer.yml
@@ -0,0 +1,10 @@
+# Footer menu
+---
+- title: Contact
+ linkto: contact
+ alt: Contact us
+
+- title: Privacy
+ linkto: your-link-here
+ alt: Go to Privacy Policy
+ target: yes
diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml
new file mode 100755
index 0000000..7c5fcc7
--- /dev/null
+++ b/docs/_data/navigation.yml
@@ -0,0 +1,52 @@
+# Navigation menu
+#
+# show-subitems AND show-tertitems appear in sidebar (not main navigation)
+#
+---
+- title: Contact Us
+ linkto: /contact
+ alt: Contact Us
+ show-subitems: yes
+
+- title: Policies & Standards
+ linkto: /policies
+ target: yes
+ alt: Policies & Standards
+ show-subitems: yes
+ subitems:
+ - title: Access Policies
+ linkto: /policies/access-policies
+ target: no
+ alt: Access Policies
+ - title: Usage Policies
+ linkto: /policies/usage-policies
+ target: no
+ alt: Usage Policies
+
+- title: Getting Started
+ linkto: /guides
+ alt: Getting Started
+ show-subitems: yes
+ subitems:
+ - title: Getting Access
+ linkto: /guides/onboarding/getting-access
+ target: no
+ alt: Getting Access
+ - title: Learn the basics
+ linkto: /videos
+ target: no
+ alt: Getting Started with Git and GitHub
+ - title: Guides
+ linkto: /guides
+ target: no
+ alt: Guides
+ - title: Resources
+ linkto: /resources
+ target: no
+ alt: Helpful Resources
+
+- title: Announcements
+ alt: Announcements
+ linkto: /announcements
+ target: no
+ show-subitems: no
diff --git a/docs/_includes/banner.html b/docs/_includes/banner.html
new file mode 100755
index 0000000..889d008
--- /dev/null
+++ b/docs/_includes/banner.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+ The .gov means it’s official.
+
+ Federal government websites often end in .gov or .mil. Before sharing sensitive information, make sure you’re on a federal government site.
+
+
+
+
+
+
+
+
+ The site is secure.
+
+ The https:// ensures that you are connecting to the official website and that any information you provide is encrypted and transmitted securely.
+
+
+ Resources
+
+ In writing these Digital Standards, we sought inspiration from the experiences and expertise of several government teams. In particular, we were inspired by USDS, Gov.uk, Ontario Digital Service, and 18F.
+
+
+{% endif %}
+
+
+
+
+
+
+
diff --git a/docs/_layouts/no-sidebar.html b/docs/_layouts/no-sidebar.html
new file mode 100644
index 0000000..5634269
--- /dev/null
+++ b/docs/_layouts/no-sidebar.html
@@ -0,0 +1,48 @@
+---
+layout: base
+---
+
+
+
+{% if page.page-type != "subpage" %}
+
+{% else %}
+
+{% endif %}
+
+ {{ page.title }}
+
+
+
+
+{% if page.page-type != "subpage" %}
+
+
+
+
+
+{% endif %}
+
+
+
+
+
+
+
+
+
+
+
+ {% if page.page-description == true %}
+
+ {{ page.description }}
+
+ {% endif %}
+
+ {{ content }}
+
+
+
+
+
+
diff --git a/docs/_layouts/page.html b/docs/_layouts/page.html
new file mode 100755
index 0000000..4608f25
--- /dev/null
+++ b/docs/_layouts/page.html
@@ -0,0 +1,83 @@
+---
+layout: base
+---
+
+
+
+
+
diff --git a/docs/_pages/404.md b/docs/_pages/404.md
new file mode 100644
index 0000000..c5e243a
--- /dev/null
+++ b/docs/_pages/404.md
@@ -0,0 +1,27 @@
+---
+#July 20, 2020
+#
+# You can use Markdown in the editable content below the three dashes (---)
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Page not found
+description: Page not found in the GitHub Handbook.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: no
+layout: no-sidebar
+page-type: subpage
+page-description: yes
+permalink: /404.html
+#
+---
+
+The page you're looking for wasn't found. Try using the global navigation, or return to the [home page]({{ site.baseurl }}/).
+
+
+
+
+
+
diff --git a/docs/_pages/announcements.md b/docs/_pages/announcements.md
new file mode 100644
index 0000000..9bbd672
--- /dev/null
+++ b/docs/_pages/announcements.md
@@ -0,0 +1,28 @@
+---
+#
+# You can use Markdown in the editable content below the three dashes (---)
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Announcements
+#
+# Don't edit items below - they control the page layout
+#
+return-top: no
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /announcements
+#
+---
+
+
+
+
+
diff --git a/docs/_pages/contact.md b/docs/_pages/contact.md
new file mode 100755
index 0000000..81f12be
--- /dev/null
+++ b/docs/_pages/contact.md
@@ -0,0 +1,38 @@
+---
+# You can use Markdown in the editable content below the three dashes (---)
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Contact us
+description: Contact us with feedback, comments, or questions.
+return-top: no
+layout: no-sidebar
+page-type: subpage
+page-description: yes
+permalink: /contact
+#
+---
+
+### GitHub issue `@mention` 🙋
+
+You can at mention the following team in any GitHub issue for help:
+@{{ site.support.team-handle}}
+
+### Ask a question ❓
+
+Submit an [issue]({{site.support.issue-link }} ':ignore') with your question.
+
+### Reach out to us in Slack 💬
+
+The GitHub team is also available via the following Slack workspaces:
+
+- [{{ site.slack.workspace-name }}]({{ site.slack.workspace-link }} ':ignore')
+- [{{ site.slack.channel-name }}]({{ site.slack.channel-link }} ':ignore')
+
+### Email ✉️
+
+If you cannot contact us via the options above, you can email the team at [{{ site.support.team-name }}](mailto:{{ site.support.email }}) .
+
+
+
+
diff --git a/docs/_pages/courses/index.md b/docs/_pages/courses/index.md
new file mode 100644
index 0000000..4d838d8
--- /dev/null
+++ b/docs/_pages/courses/index.md
@@ -0,0 +1,18 @@
+---
+#July 20, 2020
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Courses
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+permalink: /courses
+#
+---
+## Courses
+
+Home Page link should redirect to: GitHub Learning Lab.
diff --git a/docs/_pages/guides/features/access-permissions.md b/docs/_pages/guides/features/access-permissions.md
new file mode 100644
index 0000000..a61222b
--- /dev/null
+++ b/docs/_pages/guides/features/access-permissions.md
@@ -0,0 +1,71 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Access Permissions on GitHub
+description: Permissions can be given at the Enterprise level, Organization level, and Repository level. Some access permissions are best managed through teams.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/features/access-permissions
+#
+---
+## Enterprise Level
+
+At the enterprise level:
+
+- __Owners__ have the ultimate power over the entire enterprise account and can take every action
+- __Billing managers__ can manage the enterprise account's billing settings
+- __Members__ and __outside collaborators__ of organizations belonging to your enterprise account are automatically members of the enterprise account, but have no access to the enterprise account itself or its settings. __Members__ are enabled to create private and internal repositories.
+
+## Organization Level
+
+At the organization level:
+
+- __Owners__ have complete administrative access to the organization
+- __Billing managers__ can manage billing settings for the organization
+- __Member__ is the default role for everyone else; members should be organized using __teams__ for repository access
+
+## Repository Level
+
+At the repository level:
+
+- __Admin__: Recommended for people who need full access to the project, including sensitive and destructive actions like managing security or deleting a repository
+- __Maintain__: Recommended for project managers who need to manage the repository without access to sensitive or destructive actions
+- __Write__: Recommended for contributors who actively push to your project
+- __Triage__: Recommended for contributors who need to proactively manage issues and pull requests without write access
+- __Read__: Recommended for non-code contributors who want to view or discuss your project
+
+For a more granular breakdown of each level's ability to perform specific actions see the table [Repository access for each permission level](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#repository-access-for-each-permission-level) on [docs.github.com](https://docs.github.com/).
+
+## Teams
+
+Teams are groups of organization members that reflect the structure of your organization.
+
+- Teams can nest other teams within them to further reflect the structure's hierarchy and offer cascading access permissions from the parent team to the child teams
+- Permissions for teams is given by organization owners and __team maintainers__
+- Teams can be visible or secret
+ - Visible teams can be viewed and `@mentioned` by every organization member
+ - Secret teams are visible to the people on the team and those with owner permissions
+ - Secret teams are great for hiding teams with sensitive names or members
+ - Secret teams cannot be nested or have child teams
+
+## Repository Visibility
+
+For enterprise accounts, repositories can be public, private, or internal. Your enterprise account is set so enterprise members can create private and internal repositories. Public repositories can only be created by enterprise or organization owners.
+
+- __Public__: These repositories are accessible to everyone on the internet
+- __Private__: Private repositories are only accessible to people with whom access is explicitly shared and certain organization members
+- __Internal__: All enterprise members have read permissions to the internal repository
+ - Internal repositories are not visible to people outside of the enterprise account, including outside collaborators on organization repositories
+ - Internal repositories are great for practicing [innersource](https://resources.github.com/whitepapers/introduction-to-innersource/) within your enterprise account. Members of the enterprise can collaborate using open source methodologies without sharing information publicly.
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/features/git-config.md b/docs/_pages/guides/features/git-config.md
new file mode 100644
index 0000000..f09fc97
--- /dev/null
+++ b/docs/_pages/guides/features/git-config.md
@@ -0,0 +1,77 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Git Configurations
+description:
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/features/git-config
+#
+---
+## What are git configs and why set them up?
+
+Below are the basic configurations needed for Git Bash on Windows, commonly referred to as git configs. These steps are an initial setup that only needs to be completed once per machine or VM.
+
+## Configure username
+
+1. With Git Bash open, enter the following command:
+ ```shell
+ git config --global user.name “FirstName LastName”
+ ```
+1. Replace “FirstName” and “LastName” with your human-readable first and last name.
+ 
+
+## Configure e-mail
+
+1. With Git Bash open, enter the following command:
+ ```shell
+ git config --global user.email email@address.com
+ ```
+1. Replace “email@address.com" with your work e-mail address.
+ 
+
+## Configure an editor on Windows
+
+With a defined username and email associated with signing your commits, you might want to utilize your favorite editor when writing those commit messages. The following instructions are for individuals using Git Bash when interacting with git repositories.
+
+### Using Atom as your editor
+
+1. Install Atom.
+1. Open Git Bash.
+1. Enter the following command:
+ `git config --global core.editor “atom —wait”`
+ 
+
+### Using Visual Studio Code as your editor
+
+1. Instal Visual Studio Code.
+1. Open Git Bash.
+1. Enter the following command:
+ `git config --global core.editor “code --wait”`
+ 
+
+### Eclipse users
+
+1. Install Eclipse with EGit: [https://www.eclipse.org/egit/download/](https://www.eclipse.org/egit/download/)
+
+## Other helpful configs
+
+When you install newer versions of Git Bash on Windows, it will automatically set both of these up for you:
+
+- Set your credential manager for Windows:
+ `git config --global credential.helper wincred`
+- Windows and Unix operating systems handle line endings differently. You can tell git to automatically fix this issue for you.
+ For Windows, you set:
+ `git config --global core-autocrlf true`
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/features/github-actions.md b/docs/_pages/guides/features/github-actions.md
new file mode 100644
index 0000000..6115e65
--- /dev/null
+++ b/docs/_pages/guides/features/github-actions.md
@@ -0,0 +1,44 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Actions
+description: GitHub Actions allow you to automate software development workflows in your repository.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/features/github-actions
+#
+---
+## What are GitHub Actions and why should you use them?
+
+GitHub Actions are the way to natively automate things on github.com. It is a great idea to automate things such as version numbering or release notes to help save your team valuable time. Another benefit of automating things such as linters or testing is that it will not only save you time, but also improve the quality of your product/project.
+
+You can either create your very own, or discover existing Actions by other developers in the [Marketplace](https://github.com/marketplace?type=actions).
+
+
+## Example use cases with GitHub Actions
+
+- [Linters](https://github.com/github/super-linter)
+- [Close stale issues](https://github.com/marketplace/actions/close-stale-issues)
+- [Release Drafting](https://github.com/marketplace/actions/release-drafter)
+
+## GitHub Actions Basics
+
+An event would trigger a workflow which uses an action to complete the job
+
+
+| Events | ➡️ | Workflows | ➡️ | Actions |
+| ------ | - | --------- | - | ------- |
+| Events are essentially webhook events created from activity on GitHub
__Example events:__ - Someone pushes code - A new pull request is opened - A new comment has been posted to an issue | ➡️ | Workflows let you codify useful processes to your liking
They belong in YAML files in a special directory in your repository: `.github/workflows` | ➡️ | Actions are reusable units of code made available to your workflows
GitHub runs them in a Node.js runtime or in Docker containers and are referenced from workflows |
+
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/features/imgs/actions/marketplace-actions.png b/docs/_pages/guides/features/imgs/actions/marketplace-actions.png
new file mode 100644
index 0000000..2c11779
Binary files /dev/null and b/docs/_pages/guides/features/imgs/actions/marketplace-actions.png differ
diff --git a/docs/_pages/guides/features/imgs/actions/process-flow.png b/docs/_pages/guides/features/imgs/actions/process-flow.png
new file mode 100644
index 0000000..604a6f4
Binary files /dev/null and b/docs/_pages/guides/features/imgs/actions/process-flow.png differ
diff --git a/docs/_pages/guides/features/imgs/git-config/atom-editor.png b/docs/_pages/guides/features/imgs/git-config/atom-editor.png
new file mode 100644
index 0000000..589333f
Binary files /dev/null and b/docs/_pages/guides/features/imgs/git-config/atom-editor.png differ
diff --git a/docs/_pages/guides/features/imgs/git-config/email-address.png b/docs/_pages/guides/features/imgs/git-config/email-address.png
new file mode 100644
index 0000000..5480f17
Binary files /dev/null and b/docs/_pages/guides/features/imgs/git-config/email-address.png differ
diff --git a/docs/_pages/guides/features/imgs/git-config/user-name.png b/docs/_pages/guides/features/imgs/git-config/user-name.png
new file mode 100644
index 0000000..e6a3c5c
Binary files /dev/null and b/docs/_pages/guides/features/imgs/git-config/user-name.png differ
diff --git a/docs/_pages/guides/features/imgs/git-config/va-firewall.png b/docs/_pages/guides/features/imgs/git-config/va-firewall.png
new file mode 100644
index 0000000..c2e8806
Binary files /dev/null and b/docs/_pages/guides/features/imgs/git-config/va-firewall.png differ
diff --git a/docs/_pages/guides/features/imgs/git-config/vsc-editor.png b/docs/_pages/guides/features/imgs/git-config/vsc-editor.png
new file mode 100644
index 0000000..45ee0f3
Binary files /dev/null and b/docs/_pages/guides/features/imgs/git-config/vsc-editor.png differ
diff --git a/docs/_pages/guides/features/imgs/issues/issue.png b/docs/_pages/guides/features/imgs/issues/issue.png
new file mode 100644
index 0000000..9267f29
Binary files /dev/null and b/docs/_pages/guides/features/imgs/issues/issue.png differ
diff --git a/docs/_pages/guides/features/imgs/issues/search-issues.png b/docs/_pages/guides/features/imgs/issues/search-issues.png
new file mode 100644
index 0000000..0d08d7c
Binary files /dev/null and b/docs/_pages/guides/features/imgs/issues/search-issues.png differ
diff --git a/docs/_pages/guides/features/imgs/protected-branches/branch-name.png b/docs/_pages/guides/features/imgs/protected-branches/branch-name.png
new file mode 100644
index 0000000..3350a17
Binary files /dev/null and b/docs/_pages/guides/features/imgs/protected-branches/branch-name.png differ
diff --git a/docs/_pages/guides/features/imgs/protected-branches/branch-rules.png b/docs/_pages/guides/features/imgs/protected-branches/branch-rules.png
new file mode 100644
index 0000000..432cd99
Binary files /dev/null and b/docs/_pages/guides/features/imgs/protected-branches/branch-rules.png differ
diff --git a/docs/_pages/guides/features/imgs/protected-branches/branches.png b/docs/_pages/guides/features/imgs/protected-branches/branches.png
new file mode 100644
index 0000000..d66ec2b
Binary files /dev/null and b/docs/_pages/guides/features/imgs/protected-branches/branches.png differ
diff --git a/docs/_pages/guides/features/imgs/protected-branches/protection-options.png b/docs/_pages/guides/features/imgs/protected-branches/protection-options.png
new file mode 100644
index 0000000..9861a4b
Binary files /dev/null and b/docs/_pages/guides/features/imgs/protected-branches/protection-options.png differ
diff --git a/docs/_pages/guides/features/imgs/protected-branches/settings.png b/docs/_pages/guides/features/imgs/protected-branches/settings.png
new file mode 100644
index 0000000..85e2ffb
Binary files /dev/null and b/docs/_pages/guides/features/imgs/protected-branches/settings.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/binaries.png b/docs/_pages/guides/features/imgs/releases/binaries.png
new file mode 100644
index 0000000..c91c4d3
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/binaries.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/draft-new-release.png b/docs/_pages/guides/features/imgs/releases/draft-new-release.png
new file mode 100644
index 0000000..202bc06
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/draft-new-release.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/pre-release.png b/docs/_pages/guides/features/imgs/releases/pre-release.png
new file mode 100644
index 0000000..aa6a429
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/pre-release.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/publish-release.png b/docs/_pages/guides/features/imgs/releases/publish-release.png
new file mode 100644
index 0000000..28d907c
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/publish-release.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/release-title-description.png b/docs/_pages/guides/features/imgs/releases/release-title-description.png
new file mode 100644
index 0000000..e44a7f8
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/release-title-description.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/tag.png b/docs/_pages/guides/features/imgs/releases/tag.png
new file mode 100644
index 0000000..9159066
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/tag.png differ
diff --git a/docs/_pages/guides/features/imgs/releases/target-branch.png b/docs/_pages/guides/features/imgs/releases/target-branch.png
new file mode 100644
index 0000000..f25a653
Binary files /dev/null and b/docs/_pages/guides/features/imgs/releases/target-branch.png differ
diff --git a/docs/_pages/guides/features/imgs/team-management/team-management.png b/docs/_pages/guides/features/imgs/team-management/team-management.png
new file mode 100644
index 0000000..f79a200
Binary files /dev/null and b/docs/_pages/guides/features/imgs/team-management/team-management.png differ
diff --git a/docs/_pages/guides/features/issues.md b/docs/_pages/guides/features/issues.md
new file mode 100644
index 0000000..0c05c0b
--- /dev/null
+++ b/docs/_pages/guides/features/issues.md
@@ -0,0 +1,55 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Issues
+description: Issues are a quick, easy way to track ideas, enhancements, tasks, notes, or bugs for work on GitHub. You’ll get a notification if an issue is assigned to you, when you're mentioned in a comment, and for each new comment on issues you're following or tagged on.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/features/issues
+#
+---
+## What are GitHub issues?
+
+They’re kind of like email—except they can be shared and discussed with the rest of your team. Most software projects have a bug tracker of some kind. GitHub’s tracker is called Issues, and has its own section in every repository.
+
+### You can use issues to
+
+- Collect user feedback
+- Report software bugs
+- Record meeting notes
+- Organize tasks you'd like to accomplish with issues in a repository
+- Discuss tactical and strategic points with other stakeholders
+
+### Searching issues
+
+Search and manage your issues more effectively. You can filter your search results by author, label, projects, milestones, assignee, and open/closed state. You can also use the search bar to search for keywords within the content.
+
+
+## Working with issues
+
+With issues, you can:
+
+- Track and prioritize your work using project boards.
+- Create issue templates to help contributors open meaningful issues.
+- You can link a pull request to an issue to show that the corresponding work is in progress and to automatically close the issue when someone merges the pull request.
+- You can pin up to three important issues above the issues list in your repository.
+- You can use task lists to create a list of items with checkboxes within pull request and issue comments. • You can use issue attachments to upload images of proposed features or screenshots of bugs.
+- To stay updated on the most recent comments in an issue, you can watch an issue to receive notifications about the latest comments.
+
+
+
+## Learn more
+
+For more information on the features of issues and how to use them, please see [Managing your work with issues](https://help.github.com/en/github/managing-your-work-on-github/managing-your-work-with-issues).
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/features/protected-branches.md b/docs/_pages/guides/features/protected-branches.md
new file mode 100644
index 0000000..bd229fb
--- /dev/null
+++ b/docs/_pages/guides/features/protected-branches.md
@@ -0,0 +1,74 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Protected Branches
+description: Branch protections prevent users from making irrevocable changes to the branches the protections are configured for, such as for release branches. They are created and managed by repository administrators.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/features/protected-branches
+#
+---
+## What are branch protections and why should you use them?
+
+Branch protections prevent users from making irrevocable changes to the branches the protections are configured for, such as for release branches. They are created and managed by repository administrators.
+
+Working on Github enables collaboration across teams, so multiple people can make commits to the branches within a repository. By default, any pull request can be merged at any time (unless there are other conflicts that prevent merging).
+
+Protecting certain branches adds restrictions on how a pull request can be merged. You'll be able to automatically enforce your repository's security workflow policies without slowing down everyone's ability to collaborate.
+
+### You can use branch protections to
+
+- Require pull request reviews before merging
+- Restrict who can make commits on a branch
+- Prevent a branch from being accidentally deleted
+- Require successful automated checks to pass before the branch can be merged
+
+### Configuring branch protections
+
+To configure branch protections, you will need to be a repository owner, or have administrator permissions for the repository.
+
+For __any__ protected branch, by default:
+
+- The branch cannot be deleted, either accidentally or intentionally
+- The branch commit history cannot be overwritten with an alternate set of changes (force push)
+
+Steps to configure branch protection:
+
+1. On GitHub, navigate to the main page of the repository
+1. Under the repository name, click the “Settings” tab. If you do not see the “Settings” tab, you do not have permissions.
+ 
+1. In the left menu, click “Branches”
+ 
+1. Next to “Branch protection rules”, click “Add rule”
+ 
+1. Under “Branch name pattern”, type the branch name or pattern you want to protect
+ - You can create a branch rule for a specific branch, for all branches, or for any branch that matches a naming pattern (specified with regex syntax).
+ - For example, to require any branch containing the word release you would create a branch rule for the branch name pattern using wildcards (\*) on each side:
+ - \*release\*
+ 
+1. Optionally, you can configure specific branch rule settings
+ 
+1. To confirm you branch protection rule, click “Create” or “Save changes”
+
+## Recommended branch protections for repositories
+
+- Check the __Include administrators__ box at the bottom of the page to also apply this setting to organization and repository administrators
+- Enable branch protection on your main production branch or any branch meant for ongoing collaboration. Feel free to skip it for “work in progress” branches, which are meant to be eventually merged and deleted
+- Branch protection doesn’t prevent pushing commits which don’t alter the commit history. To disable the ability to push directly to the branch, use the setting __Require pull request reviews before merging__ instead
+- Enabled as a required status check for any automation (builds, testing, QA) needed prior to approval of a pull request by using __Enabling required status checks__
+
+## Learn more
+
+For more information on the features of protected branches and how to use them, please see [About Protected Branches](https://docs.github.com/en/github/administering-a-repository/about-protected-branches).
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/features/releases.md b/docs/_pages/guides/features/releases.md
new file mode 100644
index 0000000..1dd4d68
--- /dev/null
+++ b/docs/_pages/guides/features/releases.md
@@ -0,0 +1,51 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Releases
+description: Releases allow users to download and deploy your project’s source code as a package with binary files and release notes.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/features/releases
+#
+---
+The release notes describe any changes, improvements, and new features contained in the release.
+
+Releases are dependent on git __[tags](https://git-scm.com/book/en/v2/Git-Basics-Tagging)__ . Tags are a way to label a specific point in the repository’s history _(e.g. v1.0.3, v2.4.2)_.
+
+By tagging points in your project's history and creating releases from those tags, a user can determine which version of your project they want to to use and download it directly from your repository.
+
+## Creating a Release
+
+To create a release, you’ll need to have write access for the repository.
+
+1. Navigate to the main page of the repository and click the __Releases__ link in the right-hand column.
+1. If there are already releases, click __Draft a new release__. If this is the first release, click __Create a new release__.
+ 
+1. Type a version number for your release.
+ 
+1. Use the __Target__ drop-down menu to select the branch that contains the content you want to release.
+ 
+1. Type a title and description for your release.
+ 
+1. Optionally you can attach external files to your release. Attach files by dragging and dropping , selecting or pasting them into the __binaries__ box. These do not have to be binary files; any files needed for the release that are external to the repository are accepted.
+ 
+1. To notify users the release is not ready for production and may be unstable, select __This is a pre-release__.
+ 
+1. If you're ready to publicize your release, click __Publish release__. To work on the release later, click __Save draft__.
+ 
+
+## Learn More
+
+For more information about creating and managing releases, please see [Releasing Projects on GitHub](https://docs.github.com/en/enterprise/2.18/user/github/administering-a-repository/releasing-projects-on-github).
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/features/team-management.md b/docs/_pages/guides/features/team-management.md
new file mode 100644
index 0000000..695a2e8
--- /dev/null
+++ b/docs/_pages/guides/features/team-management.md
@@ -0,0 +1,94 @@
+---
+title: GitHub Teams
+layout: page
+page-style: subpage
+permalink: /github-teams
+---
+
+## Teams
+
+Teams are the best way to group users and provide access to repositories. Teams give you the ability to create groups of organization members with read, triage, write, maintain, or admin permissions to repositories that belong to the organization.
+
+Teams are also central to many of GitHub's collaborative features, such as team @mentions, which notify appropriate groups of people that you'd like their input or attention. Teams can be both project or subject-matter focused, and can relate to job titles or roles. Teams are also useful for [CODEOWNERS][5] files to define and automate the pull request review process.
+
+### Repository permission levels
+
+Teams allow you to create groups with separate levels of access and visibility within an organization:
+
+- **Read:** Recommended for non-code contributors who want to view or discuss your project
+- **Triage:** Recommended for contributors who need to proactively manage issues and pull requests without write access
+- **Write:** Recommended for contributors who actively push to your project
+- **Maintain:** Recommended for project managers who need to manage the repository without access to sensitive or destructive actions
+- **Admin:** Recommended for people who need full access to the project, including sensitive and destructive actions like managing security or deleting a repository
+
+To read more granular action-availability information for each permission level, see [repository access for each permission level][4].
+
+## Team maintainers
+
+**Team maintainers** are primarily responsible for [adding][2] and [removing][3] team members day-to-day, as needed. Each team should have at least a couple team maintainers, but could need more depending on team size. Team maintains should know what they're responsible for, including adding another appropriate maintainer if they leave the team.
+
+Members with team maintainer permissions can:
+
+- Change the team's name and description
+- Change the team's visibility
+- Request to add a child team
+- Request to add or change a parent team
+- Set the team profile picture
+- Edit team discussions
+- Delete team discussions
+- Add organization members to the team
+- Remove organization members from the team
+- Promote an existing team member to team maintainer
+- Remove the team's access to repositories
+- Manage code review assignment for the team
+- Manage scheduled reminders for pull requests
+
+## Adding and removing team members
+
+A maintainer needs to know the team and the GitHub.com username of the person they want to add or remove. There is only one [removal][3] process, but there are two processes to add team members:
+
+- [Adding users who are members of the {{ site.org.name }} organization](#adding-users-who-are-members-of-the-{{ site.org.name }}-organization)
+- [Adding users who are not members of the {{ site.org.name }} organization](#adding-users-who-are-not-members-of-the-{{ site.org.name }}-organization)
+
+### Adding users who are members of the {{ site.org.name }} organization
+
+As long as the users are already a part of the {{ site.org.name }} organization on GitHub.com, team maintainers can [add them without needing help organization owners][1].
+
+To **remove members** from a GitHub team, maintainers should:
+
+1. Ensure they're in the `members` area
+1. Search for the user or find them in the member list
+1. Check the box to the left of their username
+1. Click the dropdown for `member selected` at the top of the list
+1. Click `Remove from team...`
+1. Confirm the action by clicking `Remove members`
+
+**Note:** You can remove multiple members at once by checking multiple boxes next to the appropriate usernames.
+
+To **add members** to a GitHub team, maintainers should:
+
+1. Ensure they're in the `members` area
+1. Click on the `Add a Member` button at the top-right of the page
+1. Enter the GitHub.com username of the person they wish to invite to the team
+ - Ensure you have the correct username
+ - You could search for the user's email (the user must have this email address associated with their account)
+
+The invited user will get an email notifying them they have been invited to the team, and they must accept that invitation to complete the process.
+
+### Adding users who are not members of the {{ site.org.name }} organization
+
+If the users are not already members of the {{ site.org.name }} organization on GitHub.com, they will need to follow the process in [Getting Access to the organization]({{ site.baseurl }}/guides/onboarding/getting-access) guide.
+
+When maintainers attempt to add users that are not a part of the organization, they will be notified when searching for that username:
+
+
+
+[1]: https://docs.github.com/en/articles/organizing-members-into-teams
+[2]: https://docs.github.com/en/articles/adding-organization-members-to-a-team
+[3]: https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/removing-organization-members-from-a-team
+[4]: https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#repository-access-for-each-permission-level
+[5]: https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/images/code-release.gif b/docs/_pages/guides/images/code-release.gif
new file mode 100644
index 0000000..0176b6c
Binary files /dev/null and b/docs/_pages/guides/images/code-release.gif differ
diff --git a/docs/_pages/guides/images/desktop-schannel-error.png b/docs/_pages/guides/images/desktop-schannel-error.png
new file mode 100644
index 0000000..24e341e
Binary files /dev/null and b/docs/_pages/guides/images/desktop-schannel-error.png differ
diff --git a/docs/_pages/guides/images/github-product-release-data-diagram.png b/docs/_pages/guides/images/github-product-release-data-diagram.png
new file mode 100644
index 0000000..04c80c2
Binary files /dev/null and b/docs/_pages/guides/images/github-product-release-data-diagram.png differ
diff --git a/docs/_pages/guides/images/repository-template-picker.jpg b/docs/_pages/guides/images/repository-template-picker.jpg
new file mode 100644
index 0000000..398c168
Binary files /dev/null and b/docs/_pages/guides/images/repository-template-picker.jpg differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-1.png b/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-1.png
new file mode 100644
index 0000000..b090384
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-1.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-2.png b/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-2.png
new file mode 100644
index 0000000..491c69b
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-2.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-3.png b/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-3.png
new file mode 100644
index 0000000..92c7502
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/eclipse-step-3.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-1.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-1.png
new file mode 100644
index 0000000..cfbd3f3
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-1.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-2.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-2.png
new file mode 100644
index 0000000..0c69f3c
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-2.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-3.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-3.png
new file mode 100644
index 0000000..605d336
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-3.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-4.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-4.png
new file mode 100644
index 0000000..3d512b5
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-4.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-5.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-5.png
new file mode 100644
index 0000000..c4a9706
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-5.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-6.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-6.png
new file mode 100644
index 0000000..0a3de1f
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-6.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-7.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-7.png
new file mode 100644
index 0000000..5876550
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-7.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-8.png b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-8.png
new file mode 100644
index 0000000..de132c0
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ie-step-8.png differ
diff --git a/docs/_pages/guides/images/troubleshooting-java-tls/ps-step-1.png b/docs/_pages/guides/images/troubleshooting-java-tls/ps-step-1.png
new file mode 100644
index 0000000..e40d8ca
Binary files /dev/null and b/docs/_pages/guides/images/troubleshooting-java-tls/ps-step-1.png differ
diff --git a/docs/_pages/guides/images/vdd-checklist.gif b/docs/_pages/guides/images/vdd-checklist.gif
new file mode 100644
index 0000000..df4e868
Binary files /dev/null and b/docs/_pages/guides/images/vdd-checklist.gif differ
diff --git a/docs/_pages/guides/images/wordpad-find-gitconfig.png b/docs/_pages/guides/images/wordpad-find-gitconfig.png
new file mode 100644
index 0000000..5223485
Binary files /dev/null and b/docs/_pages/guides/images/wordpad-find-gitconfig.png differ
diff --git a/docs/_pages/guides/images/wordpad-gitconfig-edits.png b/docs/_pages/guides/images/wordpad-gitconfig-edits.png
new file mode 100644
index 0000000..5b251d3
Binary files /dev/null and b/docs/_pages/guides/images/wordpad-gitconfig-edits.png differ
diff --git a/docs/_pages/guides/index.md b/docs/_pages/guides/index.md
new file mode 100644
index 0000000..82f5dd5
--- /dev/null
+++ b/docs/_pages/guides/index.md
@@ -0,0 +1,74 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Guides
+description: Helpful guides on getting you and your team started in GitHub.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: /guides
+#
+---
+### Onboarding
+
+Guides to help get you signed up with GitHub, two-factor authentication, and the {{ site.org.name }} organization.
+
+- [Getting Access to the organization]({{ site.baseurl }}/guides/onboarding/getting-access)
+- [Requesting Repository/Team Access]({{ site.baseurl }}/guides/onboarding/requesting-repo-access)
+
+### GitHub Features
+
+- [GitHub Access Permissions]({{ site.baseurl }}/guides/features/access-permissions)
+- [GitConfig]({{ site.baseurl }}/guides/features/git-config)
+- [GitHub Issues]({{ site.baseurl }}/guides/features/issues)
+- [Protected Branches]({{ site.baseurl }}/guides/features/protected-branches)
+- [GitHub Actions]({{ site.baseurl }}/guides/features/github-actions)
+- [Releases]({{ site.baseurl }}/guides/features/releases)
+- [GitHub Teams]({{ site.baseurl }}/github-teams)
+- [Semantic Versioning]({{ site.baseurl }}/semantic-versioning)
+
+### Integrations
+
+- [Authenticating Resources in GitHub]({{ site.baseurl }}/guides/integrations/authenticating)
+
+### Security
+
+Guides for repository maintenance, settings and administration that are security focused.
+
+- [Security Policies]({{ site.baseurl }}/guides/security/security-policy)
+- [Removing PII, PHI and sensitive data]({{ site.baseurl }}/guides/org-admin/removing-pii)
+- [Security Advisories]({{ site.baseurl }}/guides/security/advisories)
+- [GitHub Dependabot]({{ site.baseurl }}/guides/security/dependabot)
+- [GitHub Advanced Security - Secret Scanning]({{ site.baseurl }}/guides/security/secrets)
+- [GitHub Advanced Security - Code Scanning]({{ site.baseurl }}/guides/security/code-scanning)
+
+### Organization Administration
+
+Guides for organizational administrators to manage users and third-party applications.
+
+- [Third Party Applications]({{ site.baseurl }}/guides/org-admin/third-party-apps)
+- [Adding Users]({{ site.baseurl }}/guides/org-admin/adding-users)
+- [Removing Users]({{ site.baseurl }}/guides/org-admin/removing-users)
+- [Review Pending Invites]({{ site.baseurl }}/guides/org-admin/pending-invites)
+- [User Invite Auditing]({{ site.baseurl }}/guides/org-admin/user-invite-audit)
+- [Changing Repo Visibility]({{ site.baseurl }}/guides/org-admin/change-repo-visibility)
+
+### Tools
+
+- [Tool Comparison: GitHub Actions & Jenkins](guides/tools/actions-v-jenkins)
+- [Tool Comparison: GitHub Actions & CircleCI](guides/tools/actions-v-circleci)
+
+### Troubleshooting
+
+- [General Troubleshooting]({{ site.baseurl }}/general-troubleshooting)
+- [TLS Errors]({{ site.baseurl }}/tls-errors)
+- [Java TLS Errors]({{ site.baseurl }}/java-tls-errors)
+
+### More Resources
+
+- [Resources]({{ site.baseurl }}/resources)
diff --git a/docs/_pages/guides/integrations/authenticating.md b/docs/_pages/guides/integrations/authenticating.md
new file mode 100644
index 0000000..4ca62fc
--- /dev/null
+++ b/docs/_pages/guides/integrations/authenticating.md
@@ -0,0 +1,147 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Authenticating Resources to GitHub
+description: There are many types of authentication within GitHub aside from the normal single user login. Here we cover what those authentication types are and when would the be useful.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/integrations/authenticating
+#
+---
+
+### GitHub Apps
+
+GitHub Apps are first-class actors within GitHub. A GitHub App acts on its own behalf, taking actions via the API directly using its own identity, which means you don't need to maintain a bot or service account as a separate user.
+
+GitHub Apps can be installed directly on organization and user accounts and granted access to specific repositories. They come with built-in webhooks and narrow, specific permissions.
+
+When you set up your GitHub App, you can select the repositories you want it to access. For example, you can set up an app called `MyGitHub` that writes issues in the `octocat` repository and only the `octocat` repository. To install a GitHub App, you must be an organization owner or have admin permissions in a repository.
+
+By default, only organization owners can manage the settings of GitHub Apps in an organization. To allow additional users to manage GitHub Apps in an organization, an owner can grant them [GitHub App manager](https://docs.github.com/en/articles/permission-levels-for-an-organization/#github-app-managers) permissions.
+
+GitHub Apps are applications that need to be hosted somewhere. For step-by-step instructions that cover servers and hosting, see "[Building Your First GitHub App](https://docs.github.com/en/apps/building-your-first-github-app)."
+
+To improve your workflow, you can create a GitHub App that contains multiple scripts or an entire application, and then connect that app to many other tools. For example, you can connect GitHub Apps to GitHub, Slack, other in-house apps you may have, email programs, or other APIs.
+
+Keep these ideas in mind when creating GitHub Apps:
+
+- A user or organization can own up to 100 GitHub Apps.
+- A GitHub App should take actions independent of a user (unless the app is using a [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) token).
+ - To keep user-to-server access tokens more secure, you can use access tokens that will expire after 8 hours, and a refresh token that can be exchanged for a new access token. For more information, see "[Refreshing user-to-server access tokens](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
+- Make sure the GitHub App integrates with specific repositories.
+- The GitHub App should connect to a personal account or an organization.
+- Don't expect the GitHub App to know and do everything a user can.
+- Don't use a GitHub App if you just need a "Login with GitHub" service. But a GitHub App can use a [user identification flow](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) to log users in and do other things.
+- Don't build a GitHub App if you only want to act as a GitHub user and do everything that user can do.
+- If you are using your app with GitHub Actions and want to modify workflow files, you must authenticate on behalf of the user with an OAuth token that includes the workflow scope. The user must have admin or write permission to the repository that contains the workflow file. For more information, see "[Understanding scopes for OAuth apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
+
+To begin developing GitHub Apps, start with "[Creating a GitHub App](https://docs.github.com/en/apps/building-github-apps/creating-a-github-app)." To learn how to use GitHub App Manifests, which allow people to create preconfigured GitHub Apps, see "[Creating GitHub Apps from a manifest](https://docs.github.com/en/apps/building-github-apps/creating-github-apps-from-a-manifest)."
+
+### OAuth Apps
+
+OAuth2 is a protocol that lets external applications request authorization to private details in a user's GitHub account without accessing their password. This is preferred over Basic Authentication because tokens can be limited to specific types of data and can be revoked by users at any time.
+
+> **Warning:** Revoking all permissions from an OAuth App deletes any SSH keys the application generated on behalf of the user, including [deploy keys](https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys).
+
+An OAuth App uses GitHub as an identity provider to authenticate as the user who grants access to the app. This means when a user grants an OAuth App access, they grant permissions to all repositories they have access to in their account, including any organizations they belong to that haven't blocked third-party access.
+
+Building an OAuth App is a good option if you are creating more complex processes than a simple script can handle. Note that OAuth Apps are applications that need to be hosted somewhere.
+
+Keep these ideas in mind when creating OAuth Apps:
+
+- A user or organization can own up to 100 OAuth apps.
+- An OAuth App should always act as the authenticated GitHub user across all of GitHub (for example, when providing user notifications).
+- An OAuth App can be used as an identity provider by enabling a "Login with GitHub" for the authenticated user.
+- Don't build an OAuth App if you want your application to act on a single repository. With the repo OAuth scope, OAuth Apps can act on all the authenticated user's repositories.
+- Don't build an OAuth App to act as an application for your team or company. OAuth Apps authenticate as a single user, so if one person creates an OAuth App for a company to use, and then they leave the company, no one else will have access to it.
+- If you are using your OAuth App with GitHub Actions and want to modify workflow files, your OAuth token must have the workflow scope and the user must have owner or write permission to the repository that contains the workflow file. For more information, see "[Understanding scopes for OAuth apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
+
+> For more on OAuth Apps, see "[Creating an OAuth App](https://docs.github.com/en/apps/building-oauth-apps/creating-an-oauth-app)" and "[Registering your app](https://docs.github.com/en/rest/guides/basics-of-authentication#registering-your-app)."
+
+### Personal Access Tokens
+
+A [personal access token](https://docs.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) is a string of characters that function similarly to an [OAuth token](https://docs.github.com/en/apps/building-oauth-apps/authorizing-oauth-apps) where you can specify its [scopes](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps).
+
+A personal access token is also similar to a password, but you can have many of them and you can revoke access to each one at any time.
+
+For example, you can enable a personal access token to write to your repositories. To run a cURL command or write a script that [creates an issue](https://docs.github.com/en/rest/reference/issues#create-an-issue) in your repository, you would pass the personal access token to authenticate. You can store the personal access token as an environment variable to avoid typing it every time you use it.
+
+Keep these ideas in mind when using personal access tokens:
+
+- Remember to use this token to represent yourself only.
+- You can perform one-off cURL requests.
+- You can run personal scripts.
+- Don't set up a script for your whole team or company to use.
+- Don't set up a shared user account to act as a bot user.
+
+### Deploy Keys
+
+You can launch projects from a GitHub repository to your server by using a deploy key, which is an SSH key that grants access to a single repository. GitHub attaches the public part of the key directly to your repository instead of a personal user account, and the private part of the key remains on your server. For more information, see "[Delivering deployments](https://docs.github.com/en/rest/guides/delivering-deployments)."
+
+Deploy keys with write access can perform the same actions as an organization member with admin access, or a collaborator on a personal repository. For more information, see "[Repository permission levels for an organization](https://docs.github.com/en/articles/repository-permission-levels-for-an-organization)" and "[Permission levels for a user account repository](https://docs.github.com/en/articles/permission-levels-for-a-user-account-repository)."
+
+#### Pros of Deploy Keys
+
+- Anyone with access to the repository and server can deploy the project.
+- Users don't have to change their local SSH settings.
+- Deploy keys are read-only by default, but you can give them write access when adding them to a repository.
+
+#### Cons of Deploy Keys
+
+- Deploy keys only grant access to a single repository. More complex projects may have many repositories to pull to the same server.
+- Deploy keys are usually not protected by a passphrase, making the key easily accessible if the server is compromised.
+
+> For more information on how to setup and use these, please see our documentation on "[Deploy Keys](https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys)."
+
+### Machine users
+
+If your server needs to access multiple repositories, you can create a new GitHub account and attach an SSH key that will be used exclusively for automation. Since this GitHub account won't be used by a human, it's called a machine user.
+
+You can add the machine user as:
+
+- A [collaborator](https://docs.github.com/en/articles/inviting-collaborators-to-a-personal-repository) on a personal repository (granting read and write access)
+- an [outside collaborator](https://docs.github.com/en/articles/adding-outside-collaborators-to-repositories-in-your-organization) on an organization repository (granting read, write, or admin access)
+- a [team](https://docs.github.com/en/articles/adding-organization-members-to-a-team) with access to the repositories it needs to automate (granting the permissions of the team).
+
+> Tip: Our [terms of service](https://docs.github.com/en/articles/github-terms-of-service) state:
+> > Accounts registered by "bots" or other automated methods are not permitted.
+>
+> This means that you cannot automate the creation of accounts. But if you want to create a single machine user for automating tasks such as deploy scripts in your project or organization, that is totally cool.
+
+#### Pros of a Machine User
+
+- Anyone with access to the repository and server can deploy the project.
+- No (human) users need to change their local SSH settings.
+- Multiple keys are not needed; one per server is adequate.
+
+#### Cons of a Machine User
+
+- Only organizations can restrict machine users to read-only access. Personal repositories always grant collaborators read/write access.
+- Machine user keys, like deploy keys, are usually not protected by a passphrase.
+
+> For more information on how to setup and use these, please see our documentation on "[Machine users](https://docs.github.com/en/developers/overview/managing-deploy-keys#machine-users)."
+
+## Which should you use?
+
+Before you get started creating integrations, you need to determine the best way to access, authenticate, and interact with the GitHub APIs. The following image offers some questions to ask yourself when deciding whether to use personal access tokens, GitHub Apps, or OAuth Apps for your integration.
+
+
+
+Consider these questions about how your integration needs to behave and what it needs to access:
+
+- Will my integration act only as me, or will it act more like an application?
+- Do I want it to act independently of me as its own entity?
+- Will it access everything that I can access, or do I want to limit its access?
+- Is it simple or complex? For example, personal access tokens are good for simple scripts and cURLs, whereas an OAuth App can handle more complex scripting.
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/integrations/imgs/autolink-references.png b/docs/_pages/guides/integrations/imgs/autolink-references.png
new file mode 100644
index 0000000..b191790
Binary files /dev/null and b/docs/_pages/guides/integrations/imgs/autolink-references.png differ
diff --git a/docs/_pages/guides/integrations/imgs/bot.png b/docs/_pages/guides/integrations/imgs/bot.png
new file mode 100644
index 0000000..50ee581
Binary files /dev/null and b/docs/_pages/guides/integrations/imgs/bot.png differ
diff --git a/docs/_pages/guides/integrations/imgs/github-jira.png b/docs/_pages/guides/integrations/imgs/github-jira.png
new file mode 100644
index 0000000..e651267
Binary files /dev/null and b/docs/_pages/guides/integrations/imgs/github-jira.png differ
diff --git a/docs/_pages/guides/integrations/imgs/jira-example.png b/docs/_pages/guides/integrations/imgs/jira-example.png
new file mode 100644
index 0000000..4d4c3e5
Binary files /dev/null and b/docs/_pages/guides/integrations/imgs/jira-example.png differ
diff --git a/docs/_pages/guides/integrations/imgs/linked-jira-tickets.png b/docs/_pages/guides/integrations/imgs/linked-jira-tickets.png
new file mode 100644
index 0000000..16d535b
Binary files /dev/null and b/docs/_pages/guides/integrations/imgs/linked-jira-tickets.png differ
diff --git a/docs/_pages/guides/integrations/imgs/va-jira-service.png b/docs/_pages/guides/integrations/imgs/va-jira-service.png
new file mode 100644
index 0000000..d438dfb
Binary files /dev/null and b/docs/_pages/guides/integrations/imgs/va-jira-service.png differ
diff --git a/docs/_pages/guides/onboarding/getting-access.md b/docs/_pages/guides/onboarding/getting-access.md
new file mode 100644
index 0000000..e460567
--- /dev/null
+++ b/docs/_pages/guides/onboarding/getting-access.md
@@ -0,0 +1,183 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Getting Access to the organization
+description: If you have colleagues that are having trouble getting access, please share the following steps with them.
+#
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/onboarding/getting-access
+#
+---
+There are several steps that __must__ be done to gain access to the [{{ site.org.name }}]({{ site.org.link }}) organization:
+
+- [Step 1: GitHub.com Account](#step-1-githubcom-account)
+- [Step 2: 2-Factor Authentication](#step-2-2-factor-authentication)
+- [Step 3: Access to the {{ site.org.name }} Organization](#step-3-access-to-the-{{ site.org.name }}-organization)
+- [Step 4: Accepting the Invitation](#step-4-accepting-the-invitation)
+
+
+## Step 1: GitHub.com Account
+
+If you do not already have a GitHub.com account, please follow the steps outlined below.
+
+If you already have a GitHub.com account, please add and/or verify you have done the following and proceed to [Step 2: 2-Factor Authentication](#step-2-2-factor-authentication):
+
+- Add your company email address, if you have one, to your [GitHub profile emails](https://github.com/settings/emails).
+- Add your human readable name to your [GitHub profile](https://github.com/settings/profile).
+
+### Signing up for a GitHub account
+
+To sign up for a GitHub.com account:
+
+1. Open [https://github.com/join](https://github.com/join) in a web browser.
+ *Note that Chrome, Firefox or Safari are preferred as Internet Explorer and Legacy Edge can have functionality issues.*
+ 
+
+1. Fill in the following information:
+ - Username
+ - This is a unique, personal username for yourself and can be whatever you like, as long as it is not already taken
+ - It will be visible to the public
+ - Email
+ - Use your company email if you have one
+ - You can add your personal email address in your profile later
+ - Password
+ - Your password needs to be unique to the site
+ - It must be at least 8 characters long and include a number and lowercase letters or 16 characters long with any combination of characters
+ - As you type your password into the field, it will be obscured for security reasons
+ - We recommend you use a password management tool if one is available
+
+1. Once you have an entered an available username, valid email address, and acceptable password, click on the "Sign up or GitHub" button
+
+1. The next page will verify that you are a human and not a robot
+ 
+
+1. Click the “Verify” button in the middle of the “Verify your account” box and work the puzzle as instructed
+
+1. Once the puzzle is completed and the site has verified you are a human, select the “Next: Select a Plan” button at the bottom of the screen
+ - On this page, you must select a plan. For the now, please select the “Choose Free” option
+
+ 
+
+1. GitHub would now like to know a little more about you as a user. Please select the information that best describes you and select “Complete Setup” at the bottom of the page
+ 
+
+1. Next, GitHub will send you an email to the address you registered. __You must go to your email and validate it as instructed.__
+ - If you do not find the email in your inbox, be sure to check your Spam/Junk folders
+ - Also, if you are using a “Focused” inbox, please be sure to go to your full Inbox if you do not find it as it may have been filtered from view
+
+ 
+
+1. Open the email with a subject line stating “[GitHub] Please verify your email address”
+ 
+
+1. In the body of the email, you will find a button labeled “Verify email address”. Select this button. It will open in a separate tab/window
+ 
+
+1. Now that you have your GitHub account, please add and/or verify you have done the following and continue to [Step 2: 2-Factor Authentication](#step-2-2-factor-authentication):
+ - Add your company email address, if you have one, to your [GitHub profile emails](https://github.com/settings/emails).
+ - Add your human readable name to your [GitHub profile](https://github.com/settings/profile).
+
+
+## Step 2: 2-Factor Authentication
+
+For the {{ site.org.name }}, you must set up Two-Factor Authentication on your GitHub.com account prior to joining. To get this set up, please follow the instructions below.
+
+If you already have a GitHub.com account and have 2FA set up, please proceed to [Step3: Requesting access to the {{ site.org.name }} Organization](#step-3-access-to-the-{{ site.org.name }}-organization).
+
+### Setting up two-factor authentication
+
+Your company requires you to have Two-Factor Authentication enabled on your GitHub.com account prior to joining their organization. Your GitHub.com account is a personal account, so you will need to utilize your personal phones to do so.
+
+Please follow the steps outlined below to set up your Two-Factor Authentication (2FA). Be sure to use Chrome, Firefox or Safari for this as there are know functionality issues with Internet Explorer and Legacy Edge.
+
+1. Log into GitHub.com with your personal account
+
+1. Go to your profile settings page by clicking on your profile icon in the top right of the page to open the drop down and select “Settings”
+ 
+
+1. Once you are on your profile settings page, select “Security” in the left menu
+ 
+
+1. Select the “Enable two-factor authentication” button in the middle of the page
+
+You now have two options for setting up two-factor authentication:
+
+- [Option 1: SMS text messages](#option-1)
+- [Option 2: Authenticator Application](#option-2)
+
+#### OPTION 1
+
+1. If you choose to use text messages (SMS) as your 2FA option, please use the steps below. If you prefer to a mobile app to setup 2FA, please skip to Option 2.
+
+1. Select the “Set up using SMS” option
+ 
+
+1. __Download, print, or save a copy of your recovery codes. You will not be able to recover your lost account if you do not__
+ 
+
+1. Once you have saved you recovery codes, select “Next”
+
+1. Select the correct country code, enter your cell phone number in the field, and select “Send authentication code”
+ 
+
+1. Retrieve the code from your cell phone, enter it into the correct field, and select “Enable”
+
+1. You have now completed the 2-Factor Authentication setup via SMS. Please continue to [Step3: Requesting access to the {{ site.org.name }} Organization](#step-3-access-to-the-{{ site.org.name }}-organization).
+
+#### Option 2
+
+If you choose to use a mobile app to setup 2FA such as ID.me, Authy or Google Authenticator (any app that supports the TOTP protocol will work, so you may already have one of these) follow the steps below.
+
+1. Select the “Set up using an app” option
+ 
+
+1. __Download, print, or save a copy of your recovery codes. You will not be able to recover your lost account if you do not__
+ 
+
+1. Once you have saved you recovery codes, select “Next”
+
+1. Follow the instructions provided by your app to scan the code
+ 
+
+1. Then confirm your setup by typing one of the 2FA numbers it provides.
+
+1. You have now completed the 2-Factor Authentication setup via mobile app. Please continue to [Step3: Requesting access to the {{ site.org.name }} Organization](#step-3-access-to-the-{{ site.org.name }}-organization).
+
+## Step 3: Access to the {{ site.org.name }} Organization
+
+Once you have your GitHub.com account and have set up 2FA, you will need to request access to the {{ site.org.name }} organization. You or someone who has access to the requesting site may need to request your access.
+
+## Step 4: Accepting the Invitation
+
+Once you have requested access, you will receive an email from GitHub.com to accept the invitation to the {{ site.org.name }} organization. Please follow the steps below to complete this.
+
+### Accepting your invitation to the organization
+
+To accept your invitation to the {{ site.org.name }} organization within GitHub.com:
+
+1. Open the invitation email you received. __It could be located in your Inbox, External box, Spam/Junk__
+ 
+
+1. Click on the “Join @…” link in the body of the email
+ 
+
+1. If you cannot find the invitation in your email, you can navigate directly to the organization’s page and select “View invitation”
+ 
+
+1. Select “Join …” for the organization want to join.
+ 
+
+1. You have now joined the organization and can be added to repositories and teams by the repository administrators.
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/onboarding/imgs/2fa-options.png b/docs/_pages/guides/onboarding/imgs/2fa-options.png
new file mode 100644
index 0000000..1a11467
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/2fa-options.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/complete-setup.png b/docs/_pages/guides/onboarding/imgs/complete-setup.png
new file mode 100644
index 0000000..c3c6039
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/complete-setup.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/contributors.png b/docs/_pages/guides/onboarding/imgs/contributors.png
new file mode 100644
index 0000000..7b10cbe
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/contributors.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/enable-2fa.png b/docs/_pages/guides/onboarding/imgs/enable-2fa.png
new file mode 100644
index 0000000..3d19a66
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/enable-2fa.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/enable-app-2fa.png b/docs/_pages/guides/onboarding/imgs/enable-app-2fa.png
new file mode 100644
index 0000000..a95b554
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/enable-app-2fa.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/enable-sms-2fa.png b/docs/_pages/guides/onboarding/imgs/enable-sms-2fa.png
new file mode 100644
index 0000000..da9bbe5
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/enable-sms-2fa.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/find-verification-email.png b/docs/_pages/guides/onboarding/imgs/find-verification-email.png
new file mode 100644
index 0000000..3816af4
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/find-verification-email.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/invitation-email.png b/docs/_pages/guides/onboarding/imgs/invitation-email.png
new file mode 100644
index 0000000..80feff2
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/invitation-email.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/invitation-link.png b/docs/_pages/guides/onboarding/imgs/invitation-link.png
new file mode 100644
index 0000000..f550c17
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/invitation-link.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/join-org.png b/docs/_pages/guides/onboarding/imgs/join-org.png
new file mode 100644
index 0000000..e0a0323
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/join-org.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/org-view-invitation.png b/docs/_pages/guides/onboarding/imgs/org-view-invitation.png
new file mode 100644
index 0000000..ed7bfef
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/org-view-invitation.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/profile-settings-dropdown.png b/docs/_pages/guides/onboarding/imgs/profile-settings-dropdown.png
new file mode 100644
index 0000000..0658892
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/profile-settings-dropdown.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/readme-location.png b/docs/_pages/guides/onboarding/imgs/readme-location.png
new file mode 100644
index 0000000..7e9cbae
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/readme-location.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/recovery-codes.png b/docs/_pages/guides/onboarding/imgs/recovery-codes.png
new file mode 100644
index 0000000..11e2c37
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/recovery-codes.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/repo-search-results.png b/docs/_pages/guides/onboarding/imgs/repo-search-results.png
new file mode 100644
index 0000000..cf10793
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/repo-search-results.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/repo-search.png b/docs/_pages/guides/onboarding/imgs/repo-search.png
new file mode 100644
index 0000000..c5c0582
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/repo-search.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/select-a-plan.png b/docs/_pages/guides/onboarding/imgs/select-a-plan.png
new file mode 100644
index 0000000..a8f326c
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/select-a-plan.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/signup.png b/docs/_pages/guides/onboarding/imgs/signup.png
new file mode 100644
index 0000000..c9b3170
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/signup.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/submit-issue.png b/docs/_pages/guides/onboarding/imgs/submit-issue.png
new file mode 100644
index 0000000..e040923
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/submit-issue.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/team-page.png b/docs/_pages/guides/onboarding/imgs/team-page.png
new file mode 100644
index 0000000..48933ea
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/team-page.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/team-request-to-join.png b/docs/_pages/guides/onboarding/imgs/team-request-to-join.png
new file mode 100644
index 0000000..4d3ec59
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/team-request-to-join.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/team-search.png b/docs/_pages/guides/onboarding/imgs/team-search.png
new file mode 100644
index 0000000..0ccc9bf
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/team-search.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/teams-tab.png b/docs/_pages/guides/onboarding/imgs/teams-tab.png
new file mode 100644
index 0000000..aed4d92
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/teams-tab.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/va-tool-integrations.png b/docs/_pages/guides/onboarding/imgs/va-tool-integrations.png
new file mode 100644
index 0000000..fdd4712
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/va-tool-integrations.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/verify-account.png b/docs/_pages/guides/onboarding/imgs/verify-account.png
new file mode 100644
index 0000000..cbf1a05
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/verify-account.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/verify-email-link.png b/docs/_pages/guides/onboarding/imgs/verify-email-link.png
new file mode 100644
index 0000000..6103d42
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/verify-email-link.png differ
diff --git a/docs/_pages/guides/onboarding/imgs/verify-email.png b/docs/_pages/guides/onboarding/imgs/verify-email.png
new file mode 100644
index 0000000..d07d7a9
Binary files /dev/null and b/docs/_pages/guides/onboarding/imgs/verify-email.png differ
diff --git a/docs/_pages/guides/onboarding/request-repo-access.md b/docs/_pages/guides/onboarding/request-repo-access.md
new file mode 100644
index 0000000..823561b
--- /dev/null
+++ b/docs/_pages/guides/onboarding/request-repo-access.md
@@ -0,0 +1,77 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Requesting Repository/Team Access
+description: Requesting access to certain repositories or teams can be daunting. Please use this guide to help you navigate whom you should ask.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+
+# same name for sidebar + pagination include
+permalink: /guides/onboarding/requesting-repo-access
+#
+---
+When trying to gain access to the repositories you need, there are two ways to find out whom to contact:
+
+- [Search for the Repository](#search-for-the-repository)
+- [Search for Teams](#search-for-teams)
+- [Team Maintainers](#team-maintainers)
+
+## Search for the Repository
+
+The `README.md` files in a repository can portray a lot of information, including how to get access, to users. When searching for repositories, you will only be able to see any `public` or `internal` repositories, you will not be able to see `private` repositories.
+
+To search for the needed repositories to see if this information is in it's `README.md`, please do the following:
+
+1. Navigate to the [{{ site.org.name }}]({{ site.org.link }}) organization
+1. In the "Find a repository..." box, type the name of the product you need access to
+ 
+
+1. Select the repository from the search results if the one you need is there
+ 
+
+1. View the repository's `README.md` file to see if there is mention of how to join the team.
+ 
+
+1. If there is no information in the `README.md` file, you can look at the contributors to the repository and message one of them.
+ 
+
+1. Another option is to submit an issue in the repository requesting access (if issues are enabled on the repository).
+ 
+
+## Search for Teams
+
+Another option is to search for teams associated with the product you need access to. When searching for teams, you will only be able to see teams marked as `visible`.
+
+To search for teams, please do the following:
+
+1. Navigate to the [{{ site.org.name }}]({{ site.org.link }}) organization
+
+1. Select the `Teams` tab
+ 
+
+1. In the "Find a team..." box, type in the product team you are searching for
+ 
+
+1. Select the needed team and navigate to the `Members` tab of the team page
+ 
+
+1. Select the "Request to join" button
+ 
+
+## Team Maintainers
+
+If you need to add a maintainer to a repository, there are two options. If there is a team maintainer already, then that person can add a new one. Otherwise, you should reach out on the [Contact us]({{ site.baseurl }}/contact) page so that an administrator can do that for you.
+
+## Still need help?
+
+If you still need help, please feel free to [Contact us]({{ site.baseurl }}/contact).
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/org-admin/adding-users.md b/docs/_pages/guides/org-admin/adding-users.md
new file mode 100644
index 0000000..0b75a63
--- /dev/null
+++ b/docs/_pages/guides/org-admin/adding-users.md
@@ -0,0 +1,32 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Adding Users
+description: Users can only be added to the organization on GitHub.com by requesting an invitation.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/adding-users
+#
+---
+
+### Adding Users Through *People*
+
+Official documentation on inviting users can be found [here](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/inviting-users-to-join-your-organization).
+
+* Open the [{{ site.org.name }}]({{ site.org.link }}) organization
+* Navigate to *People*
+
+* Select *Invite member*
+
+* Add the users email and click *Invite*
+**Note:** We do *NOT* invite users by GitHub Username due to the fact that typos can cause unwanted users to have access to the organization
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/org-admin/change-repo-visibility.md b/docs/_pages/guides/org-admin/change-repo-visibility.md
new file mode 100644
index 0000000..191727b
--- /dev/null
+++ b/docs/_pages/guides/org-admin/change-repo-visibility.md
@@ -0,0 +1,32 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Change Repo Visibility
+description: Organization Owners can change the visibility of repositories. Step by step instructions below.
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/change-repo-visibility
+#
+---
+*Note*: Official documentation is located [here](https://docs.github.com/en/github/administering-a-repository/setting-repository-visibility#changing-a-repositorys-visibility).
+
+## Changing Repo Visibility
+
+1. Navigate to the repository in you are attempting to change visibility of
+1. Click `Settings`
+
+1. Scroll down to the bottom of the page
+1. Click `Change visibility`
+
+1. Click the radio button selecting the new visibility
+1. Type in the full name of the repository including the organization name
+1. Click `I understand, change repository visibility.`
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/org-admin/imgs/3rd-party.1.png b/docs/_pages/guides/org-admin/imgs/3rd-party.1.png
new file mode 100644
index 0000000..8984a43
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/3rd-party.1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/3rd-party.2.png b/docs/_pages/guides/org-admin/imgs/3rd-party.2.png
new file mode 100644
index 0000000..aca2383
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/3rd-party.2.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/3rd-party.3.png b/docs/_pages/guides/org-admin/imgs/3rd-party.3.png
new file mode 100644
index 0000000..a220da5
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/3rd-party.3.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/3rd-party.4.png b/docs/_pages/guides/org-admin/imgs/3rd-party.4.png
new file mode 100644
index 0000000..1612150
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/3rd-party.4.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/audit-log.1.png b/docs/_pages/guides/org-admin/imgs/audit-log.1.png
new file mode 100644
index 0000000..9270614
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/audit-log.1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/audit-log.2.png b/docs/_pages/guides/org-admin/imgs/audit-log.2.png
new file mode 100644
index 0000000..760e7db
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/audit-log.2.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/invite-users.1.png b/docs/_pages/guides/org-admin/imgs/invite-users.1.png
new file mode 100644
index 0000000..e05c908
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/invite-users.1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/invite-users.2.png b/docs/_pages/guides/org-admin/imgs/invite-users.2.png
new file mode 100644
index 0000000..5abcfe3
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/invite-users.2.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/invite-users.3.png b/docs/_pages/guides/org-admin/imgs/invite-users.3.png
new file mode 100644
index 0000000..4b179a1
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/invite-users.3.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/manage-users.1.png b/docs/_pages/guides/org-admin/imgs/manage-users.1.png
new file mode 100644
index 0000000..ede0bf0
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/manage-users.1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/pending-invites.1.png b/docs/_pages/guides/org-admin/imgs/pending-invites.1.png
new file mode 100644
index 0000000..01ddba6
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/pending-invites.1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/pending-invites.2.png b/docs/_pages/guides/org-admin/imgs/pending-invites.2.png
new file mode 100644
index 0000000..c83283f
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/pending-invites.2.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/pending-invites.3.png b/docs/_pages/guides/org-admin/imgs/pending-invites.3.png
new file mode 100644
index 0000000..d254a7f
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/pending-invites.3.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/remove-users.1.png b/docs/_pages/guides/org-admin/imgs/remove-users.1.png
new file mode 100644
index 0000000..a0fa2e9
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/remove-users.1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/remove-users.2.png b/docs/_pages/guides/org-admin/imgs/remove-users.2.png
new file mode 100644
index 0000000..9c28678
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/remove-users.2.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/remove-users.3.png b/docs/_pages/guides/org-admin/imgs/remove-users.3.png
new file mode 100644
index 0000000..3f48698
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/remove-users.3.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/visibility-1.png b/docs/_pages/guides/org-admin/imgs/visibility-1.png
new file mode 100644
index 0000000..dbcea60
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/visibility-1.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/visibility-2.png b/docs/_pages/guides/org-admin/imgs/visibility-2.png
new file mode 100644
index 0000000..b1e4eb6
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/visibility-2.png differ
diff --git a/docs/_pages/guides/org-admin/imgs/visibility-3.png b/docs/_pages/guides/org-admin/imgs/visibility-3.png
new file mode 100644
index 0000000..5858ddb
Binary files /dev/null and b/docs/_pages/guides/org-admin/imgs/visibility-3.png differ
diff --git a/docs/_pages/guides/org-admin/pending-invites.md b/docs/_pages/guides/org-admin/pending-invites.md
new file mode 100644
index 0000000..f2a8f21
--- /dev/null
+++ b/docs/_pages/guides/org-admin/pending-invites.md
@@ -0,0 +1,34 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Reviewing Pending Invites
+description: Any user that has been sent an invitation will be listed in the Pending Invitations section of the organization's `People` page.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/pending-invites
+#
+---
+### Review Pending Invites
+
+Often it is useful to determine if a user has an invite pending and who invited them. Official documentation is located [here](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/canceling-or-editing-an-invitation-to-join-your-organization).
+
+* Open the [{{ site.org.name }}]({{ site.org.link }}) organization
+* Navigate to *People*
+
+* Navigate to *Pending Invitations*
+
+* Look through the pending invites to find the user in question
+* Select the *Gear* icon next to the user
+* Select *Edit invitation* from the new dropdown
+
+* Review the invite, notice in the description on top that it tells you who made the initial invite
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/org-admin/removing-users.md b/docs/_pages/guides/org-admin/removing-users.md
new file mode 100644
index 0000000..f9262c3
--- /dev/null
+++ b/docs/_pages/guides/org-admin/removing-users.md
@@ -0,0 +1,32 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Removing Users
+description: Users will be removed from the organization on GitHub.com according to "User Retention Policy".
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/removing-users
+#
+---
+### Removing Users Through *People*
+
+Official documentation on inviting users can be found [here](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/removing-a-member-from-your-organization).
+
+* Open the [{{ site.org.name }}]({{ site.org.link }}) organization
+* Navigate to *People*
+
+* Type in part of the name of the user you are removing into the search bar
+
+* Click the gear icon next to the user you are removing
+* Click *remove from organization...*
+
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/org-admin/third-party-apps.md b/docs/_pages/guides/org-admin/third-party-apps.md
new file mode 100644
index 0000000..8a9e576
--- /dev/null
+++ b/docs/_pages/guides/org-admin/third-party-apps.md
@@ -0,0 +1,38 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Third Party Applications
+description: Users can request 3rd party application access to the organization. This is used for integrations with outside tools as well as other parts of GitHub.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/third-party-apps
+#
+---
+*Note*: Official documentation is located [here](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/approving-oauth-apps-for-your-organization#:~:text=Under%20your%20organization%20name%2C%20click,requested%20application%2C%20click%20Grant%20access) and [here](https://docs.github.com/en/github/authenticating-to-github/connecting-with-third-party-applications).
+
+### Finding Pending and Existing 3rd Party Application Integrations
+
+* Open the [{{ site.org.name }}]({{ site.org.link }}) organization
+* Navigate to *Settings*
+
+* Navigate to *3rd party access*
+
+* Applications pending review will be at the top of the page with the user that requested it next to the name
+* Existing *approved* or *denied* applications will be listed below pending ones
+
+### Approving or Denying 3rd Party Applications
+
+* Select *review* on the application in question, notice the user that requested the application for further discussion if necessary
+
+* Consider the data that the 3rd party will have access to and if that is acceptable and allowable within company policy.
+* Click *grant access* or *deny this request*
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/org-admin/user-invite-audit.md b/docs/_pages/guides/org-admin/user-invite-audit.md
new file mode 100644
index 0000000..738ae29
--- /dev/null
+++ b/docs/_pages/guides/org-admin/user-invite-audit.md
@@ -0,0 +1,33 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: User Invite Auditing
+description: GitHub provides an audit log to Organization admins. You can use this to review the users that have been recently invited.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/user-invite-audit
+#
+---
+*Note*: Official documentation is located [here](https://docs.github.com/en/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization).
+
+## Revewing the Audit Log
+
+- Navigate to Settings
+ 
+- Open the Audit Log
+
+- Search for user invites
+ - Search for `action:org.invite_member`
+ 
+- Review the emails that have been invited for any inconsistencies
+ - The log can also be used to find when a certain user was invited
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/resources.md b/docs/_pages/guides/resources.md
new file mode 100644
index 0000000..73946b7
--- /dev/null
+++ b/docs/_pages/guides/resources.md
@@ -0,0 +1,69 @@
+---
+title: Resources
+layout: page
+page-style: subpage
+permalink: /resources
+---
+
+#### Learning
+
+* [Microsoft Learn for GitHub](https://docs.microsoft.com/en-us/learn/github/): With Microsoft Learn for GitHub, grow your skills by completing fun, realistic projects. Get advice and helpful feedback from our friendly Learning Lab bot.
+ * [Introduction to GitHub](https://lab.github.com/githubtraining/introduction-to-github)
+ * If you are looking for a quick and fun introduction to GitHub, you've found it. This class will get you started using GitHub in less than an hour.
+ * [Communicating using Markdown](https://lab.github.com/githubtraining/communicating-using-markdown)
+ * This course will walk you through everything you need to start organizing ideas and collaborating using Markdown, a lightweight language for text formatting.
+ * [First day on GitHub](https://lab.github.com/githubtraining/first-day-on-github)
+ * Welcome to GitHub! We're so glad you're here. We know it can look overwhelming at first, so we've put together a few of our favorite courses for people logging in for the first time.
+ * [First week on GitHub](https://lab.github.com/githubtraining/first-week-on-github)
+ * After you've mastered the basics, learn some of the fun things you can do on GitHub. From GitHub Pages to building projects with your friends, this path will give you plenty of new ideas.
+ * [GitHub Pages](https://lab.github.com/githubtraining/github-pages)
+ * Learn how to create a site or blog from your GitHub repositories with GitHub Pages.
+ * [Reviewing pull requests](https://lab.github.com/githubtraining/reviewing-pull-requests)
+ * See how collaboration works on GitHub and start building great things, together.
+ * [Managing merge conflicts](https://lab.github.com/githubtraining/managing-merge-conflicts)
+ * Merge conflicts are a normal part of working in Git. Learn why they happen and how to resolve them with ease.
+ * [Connect the dots in a GitHub repository](https://lab.github.com/githubtraining/connect-the-dots-in-a-github-repository)
+ * This course will teach you skills for finding relevant conversations, commits, and projects in a repository.
+* [The Official GitHub Training Manual](https://githubtraining.github.io/training-manual/#/)
+ * This is the open source manual used in GitHub's `GitHub for Developers` live training.
+
+#### Documentation
+
+* [GitHub Docs](https://docs.github.com/en)
+ * [Getting started with GitHub](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github)
+ * [Setting up and managing your GitHub user account](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-user-account)
+ * [Setting up and managing your GitHub profile](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-your-github-profile)
+ * [Authenticating to GitHub](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github)
+ * [Managing subscriptions and notifications on GitHub](https://docs.github.com/en/free-pro-team@latest/github/managing-subscriptions-and-notifications-on-github)
+ * [Setting up and managing organizations and teams](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-organizations-and-teams)
+ * [Writing on GitHub](https://docs.github.com/en/free-pro-team@latest/github/writing-on-github)
+ * [Creating, cloning, and archiving repositories](https://docs.github.com/en/free-pro-team@latest/github/creating-cloning-and-archiving-repositories)
+ * [Using Git](https://docs.github.com/en/free-pro-team@latest/github/using-git)
+ * [Committing changes to your project](https://docs.github.com/en/free-pro-team@latest/github/committing-changes-to-your-project)
+ * [Collaborating with issues and pull requests](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests)
+ * [Managing your work on GitHub](https://docs.github.com/en/free-pro-team@latest/github/managing-your-work-on-github)
+ * [Administering a repository](https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository)
+ * [Managing files in a repository](https://docs.github.com/en/free-pro-team@latest/github/managing-files-in-a-repository)
+ * [Managing large files](https://docs.github.com/en/free-pro-team@latest/github/managing-large-files)
+ * [Working with GitHub Pages](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-pages)
+ * [Working with GitHub Support](https://docs.github.com/en/free-pro-team@latest/github/working-with-github-support)
+ * [GitHub Discussions](https://docs.github.com/en/free-pro-team@latest/discussions)
+
+#### Tools
+
+* [GitHub Desktop](https://desktop.github.com/)
+ * [GitHub Desktop docs](https://docs.github.com/en/free-pro-team@latest/desktop)
+* [Atom editor](https://atom.io/)
+ * [Atom Flight Manual](https://flight-manual.atom.io/): Everything you need to use Atom.
+* [GitHub Super Linter](https://github.com/github/super-linter/): This repository is for the GitHub Action to run a Super-Linter. It is a simple combination of various linters, written in bash, to help validate your source code.
+ * Prevent broken code from being uploaded to the default branch (Usually master or main)
+ * Help establish coding best practices across multiple languages
+ * Build guidelines for code layout and format
+ * Automate the process to help streamline code reviews
+
+#### GitHub Pages
+
+* [GitHub Pages](https://pages.github.com/): What is GitHub Pages?
+* [Docsify](https://docsify.js.org/#/): A magical documentation site generator.
+* [Jekyll](https://jekyllrb.com/): Another magical documentation site generator.
+* [Just the Docs](https://pmarsceill.github.io/just-the-docs/): Just the Docs gives your documentation a jumpstart with a responsive Jekyll theme that is easily customizable and hosted on GitHub Pages.
diff --git a/docs/_pages/guides/security/advisories.md b/docs/_pages/guides/security/advisories.md
new file mode 100644
index 0000000..1de5d75
--- /dev/null
+++ b/docs/_pages/guides/security/advisories.md
@@ -0,0 +1,104 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Security Advisories
+description: GitHub security advisories are a tool that repository maintainers can use to privately identify, discuss, fix, and publish information related to security vulnerabilities within a project.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/security/advisories
+#
+---
+See [official documentation](https://docs.github.com/en/github/managing-security-vulnerabilities/about-github-security-advisories) for full details.
+
+#### Table Of Contents
+
+1. [Drafting a new Security Advisory](#drafting-a-new-security-advisory)
+1. [Adding Collaborators](#adding-collaborators)
+1. [Publishing](#publishing)
+ - [Requesting a CVE](#request-a-cve)
+ - [Publish Advisory](#publish-advisory)
+
+## Drafting a new Security Advisory
+
+See the [GitHub docs](https://docs.github.com/en/github/managing-security-vulnerabilities/creating-a-security-advisory) for full details
+
+1. Navigate to your repository
+1. Click `Security`
+
+1. Click `Security advisories`
+
+1. Click `New draft security advisory`
+
+1. Fill out the form attributes and click `Create security advisory`
+
+
+## Adding Collaborators
+
+See the [GitHub docs](https://docs.github.com/en/github/managing-security-vulnerabilities/adding-a-collaborator-to-a-security-advisory) for full details
+
+1. Navigate to your repository
+1. Click `Security`
+
+1. Click `Security advisories`
+
+1. In the "Security Advisories" list find the advisory you would like to add users to
+
+1. On the right side of the screen find the `Collaborators` section
+1. Search for a user name and select the `+` button
+
+
+## Creating Private Forks
+
+See the [GitHub docs](https://docs.github.com/en/github/managing-security-vulnerabilities/collaborating-in-a-temporary-private-fork-to-resolve-a-security-vulnerability) for full details
+
+1. Navigate to your repository
+1. Click `Security`
+
+1. Click `Security advisories`
+
+1. In the "Security Advisories" list find the advisory in which you would like to create a fork
+
+1. At the bottom right of the page click the `Start a temporary private fork` button
+
+1. GitHub will create a fork in the background and finally give you details on how to clone and work on the new private fork
+
+
+## Publishing
+
+### Request a CVE
+
+First you will need to request a CVE from GitHub. [Official documentation](https://docs.github.com/en/github/managing-security-vulnerabilities/publishing-a-security-advisory#requesting-a-cve-identification-number) on requesting a CVE.
+
+1. Navigate to your repository
+1. Click `Security`
+
+1. Click `Security advisories`
+
+1. In the "Security Advisories" list find the advisory in which you would like to create a fork
+
+1. At the bottom left of the page click the `Request CVE` button
+
+
+### Publish Advisory
+
+First you will need to request a CVE from GitHub. [Official documentation](https://docs.github.com/en/github/managing-security-vulnerabilities/publishing-a-security-advisory#publishing-a-security-advisory) on requesting a CVE.
+
+1. Navigate to your repository
+1. Click `Security`
+
+1. Click `Security advisories`
+
+1. In the "Security Advisories" list find the advisory in which you would like to create a fork
+
+1. Finally click the `Publish advisory` button on the bottom left, in the same spot that `Request CVE` was
+
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/security/code-scanning.md b/docs/_pages/guides/security/code-scanning.md
new file mode 100644
index 0000000..6fc1de6
--- /dev/null
+++ b/docs/_pages/guides/security/code-scanning.md
@@ -0,0 +1,41 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GHAS Code Scanning
+description: Write safer code from day one with end-to-end security. GitHub helps you address vulnerabilities earlier and ship secure applications with GitHub Advanced Security Code Scanning.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/security/code-scanning
+#
+---
+
+
+If your project uses any of the following languages then you can benefit from code scanning!
+
+- C/C++
+- C#
+- Go
+- **Java**
+- **JavaScript/TypeScript**
+- Python
+
+Code scanning is a feature that you use to analyze the code in a GitHub repository to find security vulnerabilities and coding errors. Any problems identified by the analysis are shown in GitHub.
+
+You can use code scanning to find, triage, and prioritize fixes for existing problems in your code. Code scanning also prevents developers from introducing new problems. You can schedule scans for specific days and times, or trigger scans when a specific event occurs in the repository, such as a push.
+
+If code scanning finds a potential vulnerability or error in your code, GitHub displays an alert in the repository. After you fix the code that triggered the alert, GitHub closes the alert.
+
+## Actions to take
+
+1. [Review language compatibility](https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/about-code-scanning#about-codeql)
+1. [Enable code scanning on your repository](https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/enabling-code-scanning-for-a-repository#enabling-code-scanning-using-actions)
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/security/dependabot.md b/docs/_pages/guides/security/dependabot.md
new file mode 100644
index 0000000..db0d235
--- /dev/null
+++ b/docs/_pages/guides/security/dependabot.md
@@ -0,0 +1,33 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Dependabot Alerts
+description: GitHub reviews every security vulnerability to identify and alert affected repositories. For project owners, we’ll always share the details you need to understand and remediate risks with confidence.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/security/dependabot
+#
+---
+
+
+If GitHub discovers vulnerable dependencies in your project, you can view them on the Dependabot alerts tab of your repository. Then, you can update your project to resolve or dismiss the vulnerability.
+
+Repository administrators and organization owners can view and update dependencies.
+
+Your repository's GitHub Dependabot alerts tab lists all open and closed GitHub Dependabot alerts and corresponding GitHub Dependabot security updates. You can sort the list of alerts using the drop-down menu, and you can click into specific alerts for more details. For more information, see [About alerts for vulnerable dependencies](https://docs.github.com/en/free-pro-team@latest/github/managing-security-vulnerabilities/about-alerts-for-vulnerable-dependencies).
+
+You can enable automatic security updates for any repository that uses GitHub Dependabot alerts and the dependency graph. For more information, see [Configuring GitHub Dependabot security updates](https://docs.github.com/en/free-pro-team@latest/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates).
+
+## Actions to take
+
+1. [Review ecosystem compatibility](https://docs.github.com/en/free-pro-team@latest/github/visualizing-repository-data-with-graphs/about-the-dependency-graph#supported-package-ecosystems)
+1. [Enable Dependabot on your repository](https://docs.github.com/en/free-pro-team@latest/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates#managing-github-dependabot-security-updates-for-your-repositories)
+
+---
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/security/imgs/Security-Policy-1.png b/docs/_pages/guides/security/imgs/Security-Policy-1.png
new file mode 100644
index 0000000..eb462ab
Binary files /dev/null and b/docs/_pages/guides/security/imgs/Security-Policy-1.png differ
diff --git a/docs/_pages/guides/security/imgs/Security-Policy-2.png b/docs/_pages/guides/security/imgs/Security-Policy-2.png
new file mode 100644
index 0000000..32f60de
Binary files /dev/null and b/docs/_pages/guides/security/imgs/Security-Policy-2.png differ
diff --git a/docs/_pages/guides/security/imgs/Security-Policy-3.png b/docs/_pages/guides/security/imgs/Security-Policy-3.png
new file mode 100644
index 0000000..193a048
Binary files /dev/null and b/docs/_pages/guides/security/imgs/Security-Policy-3.png differ
diff --git a/docs/_pages/guides/security/imgs/Security-Tab.png b/docs/_pages/guides/security/imgs/Security-Tab.png
new file mode 100644
index 0000000..0fccedb
Binary files /dev/null and b/docs/_pages/guides/security/imgs/Security-Tab.png differ
diff --git a/docs/_pages/guides/security/imgs/security-1.png b/docs/_pages/guides/security/imgs/security-1.png
new file mode 100644
index 0000000..6704ec3
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-1.png differ
diff --git a/docs/_pages/guides/security/imgs/security-2.png b/docs/_pages/guides/security/imgs/security-2.png
new file mode 100644
index 0000000..6080e91
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-2.png differ
diff --git a/docs/_pages/guides/security/imgs/security-3.png b/docs/_pages/guides/security/imgs/security-3.png
new file mode 100644
index 0000000..a41f2c1
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-3.png differ
diff --git a/docs/_pages/guides/security/imgs/security-4.png b/docs/_pages/guides/security/imgs/security-4.png
new file mode 100644
index 0000000..dbfd1b1
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-4.png differ
diff --git a/docs/_pages/guides/security/imgs/security-5.png b/docs/_pages/guides/security/imgs/security-5.png
new file mode 100644
index 0000000..c9c55a6
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-5.png differ
diff --git a/docs/_pages/guides/security/imgs/security-6.png b/docs/_pages/guides/security/imgs/security-6.png
new file mode 100644
index 0000000..f729d59
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-6.png differ
diff --git a/docs/_pages/guides/security/imgs/security-7.png b/docs/_pages/guides/security/imgs/security-7.png
new file mode 100644
index 0000000..13bf73a
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-7.png differ
diff --git a/docs/_pages/guides/security/imgs/security-8.png b/docs/_pages/guides/security/imgs/security-8.png
new file mode 100644
index 0000000..9bebd2e
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-8.png differ
diff --git a/docs/_pages/guides/security/imgs/security-9.png b/docs/_pages/guides/security/imgs/security-9.png
new file mode 100644
index 0000000..3d74ab5
Binary files /dev/null and b/docs/_pages/guides/security/imgs/security-9.png differ
diff --git a/docs/_pages/guides/security/removing-pii-phi-sensitive-data.md b/docs/_pages/guides/security/removing-pii-phi-sensitive-data.md
new file mode 100644
index 0000000..fff6ff9
--- /dev/null
+++ b/docs/_pages/guides/security/removing-pii-phi-sensitive-data.md
@@ -0,0 +1,49 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Removing PII, PHI, and sensitive data
+description: Git is a version control system that will save the entire history of changes to files. When PII, PHI, or sensitive data is committed you will need to follow the steps below to scrub it from the git database.
+
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/org-admin/removing-pii
+#
+---
+*Note*: Official documentation is located [here](https://docs.github.com/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository).
+
+## Removing PII and PHI
+
+Git is a version control system that stores the history of all changes in a repository. If PII/PHI is checked in to a repository, it cannot simply be deleted since a record of the changes will still reside in the `.git` folder for every time that the file was changed.
+
+To fix this we will use a 3rd party open source tool called [`git filter-repo`](https://github.com/newren/git-filter-repo). Git has an inbuilt facility to fix these, `filter-branch`, but it is not performant and has some undesired side effects so to the point that the [git maintainers suggest that it not be used.](https://git-scm.com/docs/git-filter-branch#_warning)
+
+### Prerequisites
+
+* Install [git filter-repo](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md)
+* Determine if the file(s) are tracked by Git LFS
+ * `cat .gitattributes`
+ * If the file or file extension is in `.gitattributes` then it is tracked by Git LFS
+ * Gather a list of the Git object id's for each file you are removing
+ * `git ls-files -s path/to/file`
+ * This will return "[6 Digit permission] [41 Digit OID] [size of the file] [file name]" you only need the 41 digit OID
+
+### How to remove PII and PHI
+
+* `git clone --mirror temp_name`
+* `cd temp_name`
+* `git filter-repo --path path/to/pii`
+* `git push --mirror https://url/to/repo`
+* Contact [GitHub Support](https://support.github.com/contact) or [GitHub Premium Support](https://premium.githubsupport.com/), asking them to remove cached views and references to the sensitive data in pull requests on GitHub.
+ * If the file(s) are tracked in LFS provide the OID's to customer support and ask them to remove them as well
+* Finally make sure all users of the repository rebase branches instead of merging them. If they do not do this the old tainted history will get re-added
+*See the [official docs](https://docs.github.com/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository) for more details*
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/security/secrets.md b/docs/_pages/guides/security/secrets.md
new file mode 100644
index 0000000..1b846e1
--- /dev/null
+++ b/docs/_pages/guides/security/secrets.md
@@ -0,0 +1,35 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Secret Scanning
+description: GitHub Advanced Security Secret Scanning scans repositories for known secret formats to prevent fraudulent use of credentials that were committed accidentally.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+permalink: guides/security/secrets
+#
+---
+
+Every developer has to manage credentials. Secret scanning watches public and private repositories for known secret formats and immediately notifies either the secret provider or private repository admins when secrets are found.
+
+
+
+If your project communicates with an external service, you might use a token or private key for authentication. Tokens and private keys are examples of secrets that a service provider can issue.
+
+If you check a secret into a repository, anyone who has read access to the repository can use the secret to access the external service with your privileges. We recommend that you store secrets in a dedicated, secure location outside of the repository for your project.
+
+Secret scanning happens by default on public repositories, and can be [enabled on private repositories](https://docs.github.com/en/github/administering-a-repository/configuring-secret-scanning-for-private-repositories) by repository administrators or organization owners.
+
+## Actions to take
+
+1. [Review service compatibility](https://docs.github.com/en/github/administering-a-repository/about-secret-scanning)
+1. [Enable Secrets scanning on your repository](https://docs.github.com/en/github/administering-a-repository/configuring-secret-scanning-for-private-repositories#enabling-secret-scanning-for-private-repositories)
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/security/security-policy.md b/docs/_pages/guides/security/security-policy.md
new file mode 100644
index 0000000..43a7049
--- /dev/null
+++ b/docs/_pages/guides/security/security-policy.md
@@ -0,0 +1,39 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Security Policy
+description: A Security Policy is a repository’s `SECURITY.MD` file which describes everything auditors and users need to report a potential vulnerability.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-description: yes
+sidebar: guides
+# same name for sidebar + pagination include
+#sidebar-page-type: /tldrs-and-guides
+permalink: guides/security/security-policy
+#
+---
+The recommendation is that **every repository containing code** has a `Security.md` file.
+
+## Examples
+
+
+
+
+
+## Create a policy
+
+To create a security policy from the template
+
+1. Navigate to your repository on [{{ site.org.name }}]({{ site.org.link }})
+1. Click on the "Security" tab
+ 
+1. Click on "Setup a security policy"
+ 
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/tools/actions-v-circleci.md b/docs/_pages/guides/tools/actions-v-circleci.md
new file mode 100644
index 0000000..69e34db
--- /dev/null
+++ b/docs/_pages/guides/tools/actions-v-circleci.md
@@ -0,0 +1,62 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Actions and CircleCI tool comparison
+description: You can find a range of tools to support the CI/CD process. GitHub Actions and CircleCI share several similarities in configuration, which makes migration to GitHub Actions relatively straightforward.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /guides/tools/actions-v-circleci
+#
+---
+## GitHub Actions and CircleCI tool comparison
+
+CircleCI and GitHub Actions both allow you to create workflows that automatically build, test, publish, release, and deploy code. CircleCI and GitHub Actions share some similarities in workflow configuration:
+
+- Workflow configuration files are written in YAML and stored in the repository.
+- Workflows include one or more jobs.
+- Jobs include one or more steps or individual commands.
+- Both CircleCI and GitHub Actions support running steps inside of a Docker image.
+- CircleCI and GitHub Actions support setting environment variables in the configuration file.
+- Steps or tasks can be reused and shared with the community. Both CircleCI and GitHub Actions provide a mechanism to reuse and share tasks in a workflow. CircleCI uses a concept called orbs, written in YAML, to provide tasks that people can reuse in a workflow.
+
+### Some key differences between GitHub Actions and CircleCI
+
+- CircleCI’s automatic test parallelism automatically groups tests according to user-specified rules or historical timing information. This functionality is not built into GitHub Actions.
+- Actions that execute in Docker containers are sensitive to permissions problems since containers have a different mapping of users.
+ - You can avoid many of these problems by not using the `USER` instruction in your _Dockerfile_.
+ - CircleCI provides a set of pre-built images with common dependencies. These images have the `USER` set to `circleci`, which causes permissions to conflict with GitHub Actions.
+ - We recommend that you move away from CircleCI's pre-built images if you migrate to GitHub Actions. In many cases, you can use actions to install the additional dependencies you need.
+
+### Migrating workflows and jobs
+
+CircleCI defines `workflows` in the _config.yml_ file, which allows you to configure more than one workflow. GitHub requires one workflow file per workflow, and as a consequence, does not require you to declare `workflows`. You'll need to create a new workflow file for each workflow configured in config.yml.
+
+Both CircleCI and GitHub Actions configure `jobs` in the configuration file using similar syntax. If you configure any dependencies between jobs using `requires` in your CircleCI workflow, you can use the equivalent GitHub Actions `needs` syntax.
+
+### Migrating orbs to actions
+
+Both CircleCI and GitHub Actions provide a mechanism to reuse and share tasks in a workflow. CircleCI uses a concept called orbs, written in YAML, to provide tasks that people can reuse in a workflow. GitHub Actions has powerful and flexible reusable components called actions, which you build with either JavaScript files or Docker images.
+
+You can create actions by writing custom code that interacts with your repository in any way you'd like, including integrating with GitHub's APIs and any publicly available third-party API. For example, an action can publish npm modules, send SMS alerts when urgent issues are created, or deploy production-ready code.
+
+CircleCI can reuse pieces of workflows with YAML anchors and aliases. GitHub Actions supports the most common need for reusability using build matrixes.
+
+### More information
+
+[Migrating from CircleCI to GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/migrating-from-circleci-to-github-actions)
+
+[Core Concepts for GitHub Actions](https://docs.github.com/en/actions/getting-started-with-github-actions/core-concepts-for-github-actions)
+
+[CircleCI integration with GitHub](https://circleci.com/integrations/github/)
+
+[CircleCI Documentation](https://circleci.com/docs/)
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/tools/actions-v-jenkins.md b/docs/_pages/guides/tools/actions-v-jenkins.md
new file mode 100644
index 0000000..964f19f
--- /dev/null
+++ b/docs/_pages/guides/tools/actions-v-jenkins.md
@@ -0,0 +1,74 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Actions and Jenkins tool comparison
+description: You can find a range of tools to support the CI/CD process. Jenkins and GitHub Actions outstandingly stand among them. This comparison will provide some insight to make the right choice for your process.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /guides/tools/actions-v-jenkins
+#
+---
+## GitHub Actions and Jenkins tool comparison
+
+Jenkins and GitHub Actions both allow you to create workflows that automatically build, test, publish, release, and deploy code. Jenkins and GitHub Actions share some similarities in workflow configuration:
+
+- Jenkins creates workflows using Declarative Pipelines, which are similar to GitHub Actions workflow files.
+- Jenkins uses stages to run a collection of steps, while GitHub Actions uses jobs to group one or more steps or individual commands.
+- Jenkins and GitHub Actions support container-based builds.
+- Steps or tasks can be reused and shared with the community.
+
+### Some key differences between GitHub Actions and Jenkins
+
+- Jenkins has two types of syntax for creating pipelines: Declarative Pipeline and Scripted Pipeline. GitHub Actions uses YAML to create workflows and configuration files.
+- Jenkins deployments are typically self-hosted, with users maintaining the servers in their own data centers. GitHub Actions offers a hybrid cloud approach by hosting its own runners that you can use to run jobs, while also supporting self-hosted runners.
+
+### Common struggles with Jenkins that GitHub performs well at
+
+- Keeping the plugins and the Jenkins server versions up to date can be tedious and difficult
+- In Jenkins pipelines must be written in Groovy while GitHub can use Javascript, Typescript, Go, BASH, etc.
+- Jenkins servers require server side setup and maintenance where github.com is managed for you
+
+### Jenkins is a great choice when
+
+- It is being used to deploy to production behind the company firewall
+
+---
+
+### Distributing your builds
+
+Jenkins lets you send builds to a single build agent, or you can distribute them across multiple agents. You can also classify these agents according to various attributes, such as operating system types.
+
+Similarly, GitHub Actions can send jobs to GitHub-hosted or self-hosted runners, and you can use labels to classify runners according to various attributes. The following table compares how the distributed build concept is implemented for both Jenkins and GitHub Actions.
+
+| GitHub Actions | Jenkins |
+| ----- | ----- |
+| `runners` `self-hosted runners`| `agents` |
+
+### Using sections to organize pipelines
+
+Jenkins splits its Declarative Pipelines into multiple sections. Similarly, GitHub Actions organizes its workflows into separate sections. The table below compares Jenkins sections with the GitHub Actions workflow.
+
+| GitHub Actions | Jenkins Directives |
+| ----- | ----- |
+| `jobs..runs-on` `jobs..container` | `agent` |
+|| `post` |
+| `jobs`| `stages` |
+| `jobs..steps`| `steps` |
+
+---
+
+### More information
+
+- [Examples of Common Tasks](https://docs.github.com/en/actions/learn-github-actions/migrating-from-jenkins-to-github-actions#examples-of-common-tasks)
+- To search for existing Actions workflows or integrations go to the [GitHub Marketplace](https://github.com/marketplace)
+- [Jenkins with GitHub](https://www.jenkins.io/solutions/github/)
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
\ No newline at end of file
diff --git a/docs/_pages/guides/troubleshooting/Troubleshooting-Java-TLS-Errors.md b/docs/_pages/guides/troubleshooting/Troubleshooting-Java-TLS-Errors.md
new file mode 100644
index 0000000..4f994c1
--- /dev/null
+++ b/docs/_pages/guides/troubleshooting/Troubleshooting-Java-TLS-Errors.md
@@ -0,0 +1,42 @@
+---
+title: Java TLS Errors
+layout: page
+page-style: subpage
+permalink: /java-tls-errors
+---
+
+In some cases, your company may require outbound internet traffic to go through a proxy. Your Windows Desktop is configured to trust this proxy and usually most operations should succeed.
+
+If you are encountering SSL/TLS errors when attempting to reach a resource on the internet (such as github.com), you need to configure Java to trust this proxy.
+
+#### Download your company's certificate
+
+1. Download your company's certificate.
+1. Move the downloaded file to `C:\Users\\Documents\.pem` where is your own username and is the PEM file you downloaded.
+
+## Find location of your Java Runtime Environment
+
+1. Launch Eclipse
+1. Navigate to Window > Preferences
+ 
+1. Navigate to Java > Installed JREs
+ 
+1. Open your active JRE
+ 
+1. Copy the path from JRE Home, we'll need it in a minute
+
+## Update Java keystore with the company's certificate
+
+1. Launch PowerShell (does not require admin rights unless your Java installation is in a protected location)
+1. Run the following commands, replacing the parameters with yours
+
+`cd "C:\Path\To\JRE\Home"`
+`.\jre\bin\keytool.exe -import -alias company-certificate-authority -file "C:\Users\\Documents\.pem" -keystore .\jre\lib\security\cacerts -storepass changeit -noprompt`
+
+
+
+Java should now trust your company's certificate authority, and your TLS issues should be resolved. 🎉
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/guides/troubleshooting/tls-troubleshooting.md b/docs/_pages/guides/troubleshooting/tls-troubleshooting.md
new file mode 100644
index 0000000..6589078
--- /dev/null
+++ b/docs/_pages/guides/troubleshooting/tls-troubleshooting.md
@@ -0,0 +1,82 @@
+---
+title: Troubleshooting TLS errors
+layout: page
+page-style: subpage
+permalink: /tls-errors
+modified-date: September 9, 2020
+---
+
+Refer to the section below for your tool to assist in resolving TLS errors when performing `git` operations.
+
+## Git Bash
+
+1. Launch Git Bash
+1. Run these commands to configure `git` to trust the company's network.
+
+```Bash
+git config --global http.sslBackend schannel
+git config --global credential.helper manager
+git config --global http.schannelCheckRevoke best-effort
+```
+
+### Git for Windows before v2.27.0
+
+Git versions before v2.27.0 do not have `best-effort` available as an option for `http.schannelCheckRevoke`. Use `false` instead.
+
+If you see an error like this:
+
+```Bash
+fatal: bad numeric config value 'best-effort' for 'http.schannelcheckrevoke': invalid unit
+```
+
+Run this command
+
+```Bash
+git config --global http.schannelCheckRevoke false
+```
+
+## Eclipse
+
+See [Java TLS Errors]({{ site.baseurl }}/java-tls-errors) for a complete walkthrough with screenshots.
+
+## Visual Studio
+
+### Visual Studio 2019
+
+1. In File Explorer, navigate to `C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\bin`
+ - NOTE: Your path may be slightly different based on the version of Visual Studio you have installed
+1. Hold `Shift` and right click in the whitespace
+1. Select **Open powershell window here** or **Open command prompt here**
+1. Run these commands to configure `git` to trust the VA's network.
+
+```Bash
+.\git.exe config --global http.sslBackend schannel
+.\git.exe config --global credential.helper manager
+.\git.exe config --global http.schannelCheckRevoke false
+```
+
+### Visual Studio 2017
+
+Visual Studio 2017 ships with a version of `git` that does not support disabling certificate revocation checks. We have to do a few extra steps to configure git properly.
+
+#### Download your company's certificate
+
+1. Download your company's certificate.
+1. Move the downloaded file to `C:\Users\\Documents\.pem` where is your own username and is the PEM file you downloaded.
+
+#### Configure git
+
+1. In File Explorer, navigate to `C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\bin`
+ - NOTE: Your path may be slightly different based on the version of Visual Studio you have installed
+1. Hold `Shift` and right click in the whitespace
+1. Select **Open powershell window here** or **Open command prompt here**
+1. Run these commands to configure `git` to trust the company's network. Remember to replace with your own username and is the PEM file you downloaded.
+
+```Bash
+.\git.exe config --global http.sslBackend openssl
+.\git.exe config --global http.sslCAInfo "C:\Users\\Documents\.pem"
+```
+
+---
+
+[Return to Guides]({{ site.baseurl }}/guides)
\ No newline at end of file
diff --git a/docs/_pages/guides/troubleshooting/troubleshooting.md b/docs/_pages/guides/troubleshooting/troubleshooting.md
new file mode 100644
index 0000000..f521e81
--- /dev/null
+++ b/docs/_pages/guides/troubleshooting/troubleshooting.md
@@ -0,0 +1,64 @@
+---
+title: General Troubleshooting
+layout: page
+page-style: subpage
+permalink: /general-troubleshooting
+---
+
+## Troubleshooting SSL connection errors
+
+Because of the network configuration some companies, both GitHub Desktop and command line git clients occasionally have trouble cloning repositories.
+
+The error may occur only when you're logged into the VPN, but when it occurs you'll see an error popup that mentions "certificate revocation":
+
+
+
+The fix here is to update your Git configuration by adding the following lines to the `.gitconfig` file in your home directory.
+
+- For details see [Certificate revocation check fails](https://github.com/desktop/desktop/blob/development/docs/known-issues.md#certificate-revocation-check-fails---3326) in the GitHub Desktop documentation.
+
+```shell
+[http]
+ schannelCheckRevoke = false
+```
+
+Read on for specific instructions on how to do this, depending on which Git client you use. (Both of these do the same thing -- so you'll need to apply just one of these fixes.)
+
+### Git for Windows or another command-line Git client
+
+Start a command prompt or your Git shell and type the following command:
+
+```shell
+git config --global http.schannelCheckRevoke false
+```
+
+### GitHub Desktop
+
+1. Launch **Wordpad**
+2. **File > Open**
+3. Navigate to your home directory -- which is typically `c:\Users\[YourUsername]`
+4. Show all files
+5. Select the GITCONFIG file named `.gitconfig`
+ 
+ Windows won't show the filename, but it will be identified as a GITCONFIG type file
+6. Add the following text, as shown highlighted in blue in the screenshot below:
+ ```shell
+ [http]
+ schannelCheckRevoke = false
+ ```
+ 
+7. Save the file and quit Wordpad
+
+Now launch GitHub Desktop and try to clone once again.
+
+## Troubleshooting Eclipse eGit Channel Error
+
+- eGit may refuse to clone a repository due to channel errors with no other information
+- To fix this you will need to make sure that [Git Bash](https://gitforwindows.org/) is installed
+- Check that you have a global git config
+ - `git config --list --global`
+- If the above gives you an error, you will need to create a global config
+ - `git config --global user.name "User Name"`
+- Close and restart Eclipse and if this was your issue you will be able to clone
+
+[Return to Guides]({{ site.baseurl }}/guides)
diff --git a/docs/_pages/index.md b/docs/_pages/index.md
new file mode 100644
index 0000000..ccbedd3
--- /dev/null
+++ b/docs/_pages/index.md
@@ -0,0 +1,62 @@
+---
+#
+# Title displays on the page and in HTML meta tags
+title: Welcome
+#
+# See layouts/home.html for Site Title + Description
+#
+# Editable - SECTION CONTENT
+#
+section-1-image: assets/img/icon/open-book.png
+section-1-title: Guides
+section-1-link: /guides
+section-1-alt: Guides and information
+section-1-copy: Guides on features and abilities of GitHub, including how to join the organization.
+#
+section-2-image: assets/img/icon/video-player.png
+section-2-title: Videos
+section-2-link: /videos
+section-2-alt: Videos
+section-2-copy: Recordings of past webinars and mini-lessons on how GitHub works and how to work in GitHub.
+#
+section-3-image: assets/img/icon/cap.png
+section-3-title: Courses
+section-3-link: https://docs.microsoft.com/en-us/learn/github/
+section-3-alt: Learn how to GitHub
+section-3-target: yes
+section-3-copy: Realistic projects with a bot (an automated being) to guide you on GitHub Learning Lab.
+#
+section-4-image: assets/img/icon/document.png
+section-4-title: Policies
+section-4-link: /policies
+section-4-alt: Policies
+section-4-copy: Policies & standards around organization membership, code visibility and security, repository and team structures, etc.
+#
+section-5-image: assets/img/icon/conversation.png
+section-5-title: Contact Us
+section-5-link: /contact
+section-5-alt: Contact Us
+section-5-copy: There are many ways to contact us for more information or help. Please reach out anytime.
+#
+# Editable - DESCRIPTION CONTENT
+#
+subhead: What is GitHub?
+p1: Github is a web-based graphical user interface for Git, a command-line tool, which adds many of its own features. GitHub also provides access control and several collaboration features, such as wikis and basic task management tools for each project. It can be used by product and project managers for better team communication, managing issues and sharing content.
+alert-title: Work in progress
+alert-copy: We're currently expanding and refining this Handbook.We encourage you to adopt as much of it as possible and share your feedback.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: no
+layout: home
+permalink: /
+page-type: home
+twitter_card: large
+section-image-1: assets/img/square-90.png
+section-image-2: assets/img/square-90.png
+section-image-3: assets/img/square-90.png
+section-image-4: assets/img/square-90.png
+#
+---
+
+{{ content }}
diff --git a/docs/_pages/policies/access-policies/index.md b/docs/_pages/policies/access-policies/index.md
new file mode 100644
index 0000000..096aa5b
--- /dev/null
+++ b/docs/_pages/policies/access-policies/index.md
@@ -0,0 +1,21 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Access Policies
+description: Policies and standards around access to the GitHub organization.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /policies/access-policies
+#
+---
+
+Company policies could be listed here.
+
+---
+Return to [Policies and Standards]({{ site.baseurl }}/policies)
diff --git a/docs/_pages/policies/access-policies/user-addition-request-policy.md b/docs/_pages/policies/access-policies/user-addition-request-policy.md
new file mode 100644
index 0000000..a45e910
--- /dev/null
+++ b/docs/_pages/policies/access-policies/user-addition-request-policy.md
@@ -0,0 +1,20 @@
+---
+title: User Addition Request Policy
+permalink: /add-users
+layout: page
+page-type: subpage
+---
+
+
+
+
+---
+
+User access policy would go here.
+
+---
+Return to [Policies and Standards]({{ site.baseurl }}/policies)
diff --git a/docs/_pages/policies/access-policies/user-removal-request-policy.md b/docs/_pages/policies/access-policies/user-removal-request-policy.md
new file mode 100644
index 0000000..b1463f3
--- /dev/null
+++ b/docs/_pages/policies/access-policies/user-removal-request-policy.md
@@ -0,0 +1,20 @@
+---
+title: User Removal Request Policy
+permalink: /remove-users
+layout: page
+page-type: subpage
+---
+
+
+
+
+---
+
+User removal policy would go here.
+
+---
+Return to [Policies and Standards]({{ site.baseurl }}/policies)
diff --git a/docs/_pages/policies/index.md b/docs/_pages/policies/index.md
new file mode 100644
index 0000000..466fe1e
--- /dev/null
+++ b/docs/_pages/policies/index.md
@@ -0,0 +1,25 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Policies & Standards
+description: Policies and standards for using GitHub.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /policies
+#
+---
+
+### Access Policies
+
+- [User Removal Requests]({{ site.baseurl }}/remove-users)
+- [User Addition Requests]({{ site.baseurl }}/add-users)
+
+### Usage Policies
+
+- [Activity Policy]({{ site.baseurl }}/activity-policy)
diff --git a/docs/_pages/policies/usage-policies/activity-policy.md b/docs/_pages/policies/usage-policies/activity-policy.md
new file mode 100644
index 0000000..87df050
--- /dev/null
+++ b/docs/_pages/policies/usage-policies/activity-policy.md
@@ -0,0 +1,22 @@
+---
+title: Activity Policy
+description: Users with no activity in the {{ site.org.name }} organization on GitHub per the company's activity policy.
+page-description: yes
+permalink: /activity-policy
+layout: page
+page-type: subpage
+---
+
+
+## How to keep access
+
+- Make a commit to a repository in the [{{ site.org.name }}]({{ site.org.link }}) organization
+- Create a Pull Request or issue in a repository in the [{{ site.org.name }}]({{ site.org.link }}) organization
+- Make a comment on a Pull Request or an issue in a repository in the [{{ site.org.name }}]({{ site.org.link }}) organization
+
+## How to get access restored
+
+- Request access following the [Getting Access]({{ site.baseurl }}/guides/onboarding/getting-access#step-3-access-to-the-{{ site.org.name }}-organization) guide
+
+---
+Return to [Policies and Standards]({{ site.baseurl }}/policies)
diff --git a/docs/_pages/policies/usage-policies/index.md b/docs/_pages/policies/usage-policies/index.md
new file mode 100644
index 0000000..09cc541
--- /dev/null
+++ b/docs/_pages/policies/usage-policies/index.md
@@ -0,0 +1,21 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Usage Policies
+description: Policies and standards around the usage of the GitHub organization.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: yes
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /policies/usage-policies
+#
+---
+
+- [Activity Policy]({{ site.baseurl }}/activity-policy)
+
+---
+Return to [Policies and Standards]({{ site.baseurl }}/policies)
diff --git a/docs/_pages/videos/index.md b/docs/_pages/videos/index.md
new file mode 100644
index 0000000..3969c31
--- /dev/null
+++ b/docs/_pages/videos/index.md
@@ -0,0 +1,15 @@
+---
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Videos
+page-description: yes
+description: Videos of past trainings and webinars can help you get started with GitHub.
+return-top: yes
+layout: page
+page-description: yes
+permalink: /videos
+#
+---
+
+Location of previously recorded trainings and webinars will be listed here.
diff --git a/docs/_posts/2021-04-01-welcome.md b/docs/_posts/2021-04-01-welcome.md
new file mode 100644
index 0000000..9c76f7f
--- /dev/null
+++ b/docs/_posts/2021-04-01-welcome.md
@@ -0,0 +1,25 @@
+---
+#
+#
+# You can use Markdown in the editable content below the three dashes (---)
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: GitHub Handbook has launched!!!
+#
+# Don't edit items below - they control the page layout
+#
+return-top: no
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /github-handbook-launch
+#
+---
+
+We have 🚀 a new GitHub Handbook 🎉!!! Please take a look around and provide us with your feedback.
+
+We ❤️ to make improvements that enrich your experiences with GitHub.
+
+
+[Return to Announcements]({{ site.baseurl }}/announcements)
diff --git a/docs/_sass/_main.scss b/docs/_sass/_main.scss
new file mode 100644
index 0000000..5000c17
--- /dev/null
+++ b/docs/_sass/_main.scss
@@ -0,0 +1,824 @@
+/* ===================================
+ Reset USWDS mobile headings
+====================================== */
+h1 {
+ font-size: 2.5rem;
+ @include media($medium-screen) {
+ font-size: 3rem;
+ line-height: 3;
+ }
+}
+h2 {
+ font-size: 2.25rem;
+ @include media($medium-screen) {
+ font-size: 2.5rem;
+ }
+}
+h3 {
+ font-size: 1.8rem;
+ font-family: $font-serif;
+ @include media($medium-screen) {
+ font-size: 2rem;
+ }
+}
+h4 {
+ font-size: 1.7rem;
+ font-family: $font-sans;
+}
+h6 {
+ //font-size: 1.7rem;
+ font-family: $font-sans;
+ text-transform: none;
+}
+
+
+/* ===================================
+ Updated USWDS header to use a logo image.
+ Used part of solution from this issue: https://github.com/uswds/uswds/issues/1594
+====================================== */
+
+// Vertically align .usa-nav-secondary with lockup
+.usa-header-extended {
+ border-bottom: none;
+}
+.usa-header-extended .usa-nav {
+ border-top: none;
+}
+.usa-header-extended .usa-nav-secondary {
+ @include media($nav-width) {
+ position: absolute;
+ top: -6.8rem;
+ }
+}
+.usa-logo a {
+ color: $color-blue-darkest;
+ font-size: 1.65rem;
+ display: flex;
+ align-items: center;
+ @include media($nav-width) {
+ font-size: 2rem;
+ }
+}
+.usa-logo img {
+ width: 2.25rem;
+ margin-right: 1rem;
+ @include media($nav-width) {
+ width: 2.75rem;
+ margin: 0 1rem 0 0;
+ }
+}
+
+// Hide gov banner until move to .gov domain
+.hide-banner .usa-banner-button[aria-expanded=false]::after {
+ background-image: none !important;
+}
+
+// Menus - increase font size of menu + submenus
+.usa-nav-primary>li>a,
+.usa-nav-primary button,
+.usa-nav-submenu>li {
+ font-size: 1.6rem;
+}
+
+// Menus - change font color for non-mobile
+.usa-nav-primary>li>a,
+.usa-nav-primary button {
+ @include media($nav-width) {
+ color: $color-blue;
+ }
+}
+
+// Menus - change arrow colors for non-mobile
+.usa-nav-primary button[aria-expanded=false] {
+ @include media($nav-width) {
+ background-image: url(../img/angle-arrow-down-primary.png);
+ background-image: url(../img/angle-arrow-down-primary.svg);
+ }
+}
+.usa-nav-primary button[aria-expanded=true] {
+ @include media($nav-width) {
+ background-image: url(../img/angle-arrow-up-primary.png);
+ background-image: url(../img/angle-arrow-up-primary.svg);
+ }
+}
+
+// Menus - change color of dropdown button states + reduce border height
+.usa-nav-primary .usa-nav-link:hover span {
+ @include media($nav-width) {
+ color: $color-blue;
+ border-bottom: 0.5rem solid $color-blue;
+ padding-bottom: 0.8rem;;
+ }
+}
+.usa-header-extended .usa-nav-primary button[aria-expanded=true] span {
+ @include media($nav-width) {
+ color: $color-white;
+ border-bottom-width: 0.5rem;
+ padding-bottom: 0.8rem;
+ }
+}
+
+// Menus - change active state color + mobile weight
+.usa-header-extended .usa-nav-link span.active {
+ font-weight: bold;
+ @include media($nav-width) {
+ border-bottom: 0.5rem solid $color-red;
+ padding-bottom: 0.8rem;
+ }
+}
+/* submenu selected state
+.usa-nav-submenu span.active {
+ font-weight: bold;
+ @include media($nav-width) {
+ font-weight: normal;
+ }
+}
+*/
+
+// Menu button - change color and weight
+.usa-menu-btn {
+ background-color: $color-gray;
+ font-weight: bold;
+ color: $color-white;
+}
+.usa-menu-btn:hover {
+ background-color: $color-primary;
+}
+
+
+/* ===================================
+ Update USWDS footer
+====================================== */
+
+.usa-footer-secondary_section {
+ background-color: $color-primary-darkest !important;
+ padding: 3rem 0 3rem 0;
+ @include media($medium-screen) {
+ padding: 2.25rem 0 2.25rem 0;
+ }
+}
+.footer-half {
+ float: left;
+ display: block;
+ width: 100%;
+ @include media($medium-screen) {
+ margin-right: 4.82916%;
+ width: 47.58542%;
+ }
+ p {
+ margin: 0;
+ }
+}
+.footer-half:last-child {
+ margin-right: 0;
+}
+.usa-footer-medium .usa-footer-logo {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+.usa-footer-logo {
+ img {
+ width: 3.75rem;
+ margin-right: .5rem;
+ @include media($medium-screen) {
+ width: 4.75rem;
+ }
+ }
+ .footer-group {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ align-items: center;
+ }
+}
+.usa-nav-secondary-links {
+ margin-top: 0;
+ @include media($medium-screen) {
+ float: right;
+ }
+}
+.usa-nav-secondary-links li {
+ display: block;
+ line-height: 2.25rem;
+ padding-top: 2rem;
+ padding-left: 0;
+ @include media($medium-screen) {
+ display: inline;
+ padding-top: 0;
+ padding-left: 3rem;
+ }
+}
+.footer-whole {
+ font-size: 1.5rem;
+ padding-top: 1.25rem;
+ color: white;
+}
+
+// Remove USWDS pipe
+.usa-nav-secondary-links li:not(:last-child)::after {
+ content: none;
+ padding-left: 0;
+}
+.usa-footer-secondary_section {
+ a {
+ font-size: 1.5rem;
+ color: $color-white;
+ text-decoration: none;
+ }
+ a:hover {
+ color: $color-white;
+ text-decoration: underline;
+ }
+}
+.modified-date {
+ font-size: 87%;
+}
+
+
+/* ===================================
+ Home page
+====================================== */
+// Update USWDS hero styles
+
+.handbook-hero .usa-grid {
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+.usa-hero {
+ background-color: $color-primary-darkest;
+ padding-top: 4rem;
+ padding-bottom: 1rem;
+ background-image: url(../../assets/img/logo/github-handbook.png);
+ background-position: center;
+ background-size: cover;
+ @include media($medium-screen) {
+ background-position: 20%;
+ background-size: 160px;
+ background-repeat: no-repeat;
+ }
+ @media (max-width: 600px) {
+ background-image: none;
+ }
+}
+.usa-section-dark {
+ background-color: $color-primary-darkest;
+ a {
+ color: $color-aqua;
+ }
+}
+.usa-hero-callout {
+ max-width: 100%;
+ padding: 3rem 0 1.5rem 0;
+ @include media($medium-screen) {
+ max-width: 66%;
+ float: right;
+ }
+ @media (max-width: 600px) {
+ max-width: 100%;
+ width: 100%;
+ float: none;
+ }
+}
+.hero-text {
+ p {
+ font-size: 1.9rem;
+ margin-bottom: 0;
+ }
+ a {
+ color: $color-primary-alt;
+ }
+}
+
+// Home grid
+.home-section {
+ padding-top: 1.5rem;
+}
+.home-block-container {
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+.home-block {
+ width: 100%;
+ margin-bottom: 3rem;
+}
+.home-block img {
+ display: block;
+ max-height: 175px;
+ margin-left: auto;
+ margin-right: auto;
+ align-content: center;
+}
+img.icon {
+ padding-left: 4rem;
+ padding-right: 4rem;
+ padding-bottom: 1rem;
+ object-position: center;
+ object-fit: contain;
+}
+@media screen and (min-width: 600px) {
+ .home-block {
+ float: left;
+ width: 20%;
+ padding-left: 1.75rem;
+ padding-right: 1.75rem;
+ margin-bottom: 0;
+ align-content: center;
+ vertical-align: center;
+ }
+}
+.home-block h2 {
+ padding-bottom: 1rem;
+ margin-bottom: 1rem;
+ margin-top: 1rem;
+ font-size: 1.5rem;
+ border-bottom: 1px solid $color-gray-lighter;
+ //letter-spacing: .5px;
+ a {
+ color: $color-black-light;
+ text-decoration: none;
+ }
+}
+.home-block p {
+ margin-bottom: 0;
+}
+.home-secondary {
+ background-color: $color-gray-lightest;
+}
+
+.usa-alert-info::before {
+ background-color: $color-primary-darkest;
+}
+
+/* ===================================
+ Posts
+====================================== */
+.post {
+ background-color: $color-gray-lightest;
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+ font-weight: bold;
+ p {
+ text-align: center;
+ color: $color-primary-darker;
+ font-size: 1.9rem;
+ margin-bottom: 0rem;
+ margin-top: 0rem;
+ vertical-align: center;
+ }
+ a {
+ text-align: center;
+ color: $color-primary-darker;
+ vertical-align: center;
+ }
+ ul {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ list-style: none;
+ text-align: center;
+ }
+ li {
+ list-style: square;
+ text-align: center;
+ margin: 0;
+ border-bottom: 1px solid $color-white;
+ a {
+ font-weight: 700;
+ }
+ }
+ h1 {
+ font-size: 2.5rem;
+ @include media($medium-screen) {
+ font-size: 3rem;
+ }
+ }
+ h2 {
+ font-size: 2.25rem;
+ @include media($medium-screen) {
+ font-size: 2.5rem;
+ }
+ }
+ h3 {
+ font-size: 1.8rem;
+ font-family: $font-serif;
+ @include media($medium-screen) {
+ font-size: 2rem;
+ }
+ }
+ h4 {
+ font-size: 1.7rem;
+ font-family: $font-sans;
+ }
+ h6 {
+ //font-size: 1.7rem;
+ font-family: $font-sans;
+ text-transform: none;
+ }
+}
+/* ===================================
+ Pages
+====================================== */
+.pages-section {
+ padding-top: 3rem;
+ padding-bottom: 3rem;
+ @include media($nav-width) {
+ padding-top: 2rem;
+ padding-bottom: 1.75rem;
+ }
+}
+.subpage-hero-text {
+ padding-top: .5rem;
+ padding-bottom: .25rem;
+}
+.page-hero-text {
+ margin-right: 0;
+ @include media($nav-width) {
+ //padding-top: 2rem;
+ //padding-bottom: 1.75rem;
+ }
+}
+.page-hero-text h1,
+.subpage-hero-text h1 {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 3rem;
+ color: $color-white;
+ @include media($nav-width) {
+ line-height: 150px;
+ font-size: 4rem;
+ }
+}
+.subpage-hero-text h1 {
+ line-height: 1.2;
+}
+.page-hero-image {
+ text-align: center;
+ display: none;
+ @include media($nav-width) {
+ display: block;
+ }
+ img {
+ max-height: 150px !important;
+ }
+}
+
+
+
+/* ===================================
+ Content
+====================================== */
+.content-wrapper {
+ padding: 1.5rem;
+ @include media($medium-screen) {
+ padding: 3rem 3rem 4rem 3rem;
+ }
+}
+.column-reading {
+ margin-left: auto;
+ margin-right: auto;
+ width: 75%;
+}
+
+.page-intro {
+ font-size: 130%;
+ line-height: 140%;
+ padding-bottom: 3rem;
+ border-bottom: 1px solid $color-silver;
+}
+.page-markdown {
+ //margin-top: 3rem;
+}
+.page-sources {
+ margin-top: 3rem;
+ padding-top: 3rem;
+ padding-bottom: 3rem;
+ border-top: 1px solid $color-silver;
+ border-bottom: 1px solid $color-silver;
+}
+
+.jump-section {
+ margin-top: 3.5rem;
+}
+
+// dont display jumpdown menu for smaller screens
+.jump-menu {
+ display: none;
+ @include media($medium-screen) {
+ display: block;
+ }
+}
+.jump-menu-header {
+ //margin-left: 1.8rem;
+ margin-left: 1rem;
+ padding-bottom: 0;
+ margin-bottom: 0;
+ text-transform: uppercase;
+ font-size: 85%;
+ font-weight: 600;
+ color: $color-red;
+}
+.jump-menu-items {
+ //margin-top: .5rem;
+ margin-top: 1rem;
+ padding-left: 0;
+ margin-left: 1rem;
+ border-bottom: 1px solid $color-silver;
+ li {
+ list-style: none;
+ padding: .75rem;
+ margin-bottom: 0;
+ //list-style-image: url('../img/bullet-blue.png');
+ border-top: 1px solid $color-silver;
+ }
+ a {
+ font-size: 90%;
+ color: $color-blue;
+ text-decoration: none;
+ }
+ li:hover {
+ background-color: #f1f1f1;
+ color: #0071bc;
+ text-decoration: none;
+ }
+}
+
+.jump-content {
+ counter-reset: step-counter;
+ margin-left: 0;
+ padding-left: 0;
+ list-style: none;
+}
+.jump-content blockquote {
+ margin-top: 0;
+ //margin-bottom: 1rem;
+}
+.jump-items {
+ //margin-top: 3rem;
+}
+.jump-items h3 {
+ position: relative;
+ margin-top: 0;
+}
+.jump-items h3:before {
+ content: counter(step-counter);
+ counter-increment: step-counter;
+ position: absolute;
+ left: 0;
+ top: 3rem;
+ height: 50px;
+ width: 50px;
+ border-radius: 50%;
+ line-height: 50px;
+ text-align: center;
+ font-family: $font-sans;
+ font-size: 130%;
+ background-color: $color-red;
+ color: $color-white;
+}
+.jump-items h3 {
+ padding-top: 3rem;
+ margin-top: 3rem;
+ border-top: 1px solid $color-silver;
+}
+
+.jump-items h3:first-child {
+ margin-top: 0;
+ padding-top: 0;
+ border-top: none;
+}
+.jump-items h3:first-child:before {
+ top: 0;
+}
+.jump-items p {
+ padding-right: 4rem;
+}
+.jump-items h3,
+.jump-items h4,
+.jump-items p {
+ padding-left: 8rem;
+}
+.jump-items ul {
+ margin-left: 8rem;
+}
+.jump-items ul ul {
+ margin-left: 0;
+}
+.jump-items blockquote {
+ margin-left: 8rem;
+ p {
+ padding-left: 0;
+ }
+ ul {
+ margin-left: 0;
+ }
+}
+.jump-items h4+p {
+ margin-left: 1.5rem;
+}
+
+/*
+TODO - This solution is bizarre.
+At sizes above 1201, why doesn't the one-fourth column resize smaller so it doesn't push the three-fourths column below it?
+*/
+.one-fourth-sidebar {
+ // display sidebar for large screens
+ @media only screen and (max-width: 800px) {
+ display: none;
+ }
+ @media only screen and (min-width: 801px) {
+ display: block;
+ //margin-right: 2.35765%;
+ //width: 23.23176%;
+ margin-right: 7%;
+ width: 23%;
+ }
+}
+.three-fourths-with-sidebar {
+ @media only screen and (max-width: 800px) {
+ margin-right: 0;
+ width: 100%;
+ }
+ @media only screen and (min-width: 801px) {
+ margin-right: 0;
+ width: 70%;
+ }
+}
+
+
+/* ===================================
+ Sidebar - Accordion
+====================================== */
+
+.sidebar-accordion {
+ .usa-sidenav-list {
+ border: none;
+ }
+ .usa-sidenav-list>li {
+ background-color: $color-white;
+ margin-bottom: 0;
+ border-top: none;
+ border-bottom: 1px solid $color-silver;
+ }
+ .usa-sidenav-list>li:first-child {
+ border-top: 1px solid $color-silver;
+ }
+ .sidebar-button .usa-accordion-button {
+ background-color: $color-white;
+ padding: 0.85rem 3.5rem 0.85rem 1.5rem;
+ font-weight: normal;
+ line-height: 1.3;
+ background-size: 1.1rem;
+ color: $color-blue;
+ }
+ .usa-accordion-content {
+ padding: 0;
+ }
+ // No indent for sub-items
+ .usa-sidenav-sub_list a {
+ padding-left: 1.5rem;
+ }
+ .usa-sidenav-list a,
+ .usa-sidenav-sub_list a {
+ color: $color-blue;
+ }
+
+ .usa-sidenav-list a.level-1-current {
+ border-left: .4rem solid $color-red;
+ color: $color-black-light;
+ font-weight: 600;
+ margin-left: -.4rem;
+ }
+ .usa-sidenav-list a.level-1:hover {
+ background-color: $color-gray-lightest;
+ }
+
+
+ .accordion-current {
+ border-left: .4rem solid $color-red;
+ margin-left: -.4rem;
+ width: calc(100% + .4rem);
+ .usa-accordion-button {
+ font-weight: 600;
+ color: $color-black-light;
+ }
+ }
+ .sidebar-button .usa-accordion-button[aria-expanded=true] {
+ font-weight: 600;
+ background-color: $color-gray-lightest;
+ }
+
+ .accordion-current .usa-accordion-button[aria-expanded=true] {
+ color: $color-blue;
+ }
+
+ .sidebar-button .usa-accordion-button:hover {
+ background-color: $color-gray-lightest;
+ }
+
+ .usa-sidenav-sub_list a.level-2-current {
+ //border-left: .4rem solid $color-black-light;
+ color: $color-black-light;
+ font-weight: 600;
+ //margin-left: -.4rem;
+ }
+
+
+
+
+}
+
+
+/* ===================================
+ Utilities
+====================================== */
+
+.caps {
+ text-transform: uppercase;
+ letter-spacing: .3px;
+}
+
+// update style
+hr {
+ border-style: solid;
+ color: $color-silver;
+ border-width: .06rem;
+}
+
+// Style for default Markdown blockquote
+blockquote {
+ background-color: $color-gray-lightest;
+ border-left: .8rem solid $color-gray-light;
+ border-right: .8rem solid $color-gray-light;
+ margin: 1.5rem 0 1.5rem 0;
+ padding: 1.5rem;
+}
+blockquote p {
+ display: inline;
+}
+
+// Plain blockquote overrides default Markdown blockquote style
+.plain-blockquote {
+ background-color: none;
+ border-left: none;
+ border-right: none;
+}
+
+.todo {
+ color: $color-red;
+}
+
+
+.bullet-checkmark ul {
+ margin-top: 0px;
+ list-style: none;
+ margin-left: 0;
+ padding-left: 4.5rem;
+}
+
+.bullet-checkmark li {
+ position: relative;
+}
+
+.bullet-checkmark li:before {
+ position: absolute;
+ left: -2.5rem;
+ display: inline-block;
+ font-style: normal;
+ font-variant: normal;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ font-family: "Font Awesome 5 Free";
+ content: "\f0c8"; //"\f14a";
+ //font-weight: 900;
+ color: $color-blue-darkest;
+}
+
+.list-files ul {
+ margin: 0;
+ padding: 0;
+ li {
+ list-style: none;
+ padding: 1.5rem 3rem 1.5rem 3rem;
+ margin: 0;
+ border-bottom: 1px solid $color-silver;
+ a {
+ font-weight: 700;
+ }
+ ul {
+ //border: 1px solid blue;
+ margin: 0;
+ padding: 0;
+ li {
+ padding: .75rem 3rem 0 0;
+ border-bottom: none;
+ }
+ }
+ }
+}
+.resources-index ul li:last-child{
+ border-bottom: none;
+}
diff --git a/docs/_sass/_variables.scss b/docs/_sass/_variables.scss
new file mode 100755
index 0000000..fc51789
--- /dev/null
+++ b/docs/_sass/_variables.scss
@@ -0,0 +1,18 @@
+/* ===================================
+ Override USWDS variables
+====================================== */
+
+$color-fuchsia: #f012be !default;
+$color-maroon: #85144b !default;
+$color-pink: #eb4d67 !default;
+$color-silver: #d9dadb !default;
+$color-white: #fff !default;
+
+$color-red: #e21c3d !default;
+$color-red-dark: #b41630 !default;
+$color-red-darkest: #871024 !default;
+$color-red-light: #e74963 !default;
+$color-red-lightest: #ed768a !default;
+
+$color-black-light: #5B616A !default;
+//uswds body color = #212121
diff --git a/docs/_sass/uswds/_all.scss b/docs/_sass/uswds/_all.scss
new file mode 100644
index 0000000..c86c3dc
--- /dev/null
+++ b/docs/_sass/uswds/_all.scss
@@ -0,0 +1 @@
+@import 'uswds';
diff --git a/docs/_sass/uswds/components/_accordions.scss b/docs/_sass/uswds/components/_accordions.scss
new file mode 100644
index 0000000..c229507
--- /dev/null
+++ b/docs/_sass/uswds/components/_accordions.scss
@@ -0,0 +1,150 @@
+// Variables
+
+$accordion-border: 3px solid $color-gray-lightest;
+
+// Accordion Styles
+
+$icon-size: $spacing-md-small;
+$h-padding: $spacing-medium;
+$v-padding: $spacing-md-small;
+
+@mixin accordion-list-styles {
+ @include unstyled-list;
+ color: $color-base;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+}
+
+@mixin accordion-list-item-styles {
+ background-color: $color-gray-lightest;
+ font-family: $font-sans;
+ list-style: none;
+ margin-bottom: $spacing-x-small;
+ width: 100%;
+}
+
+// scss-lint:disable PropertyCount
+@mixin accordion-button-styles {
+ @include button-unstyled;
+ background-color: $color-gray-lightest;
+ background-image: url('#{$image-path}/minus.png');
+ background-image: url('#{$image-path}/minus.svg');
+ background-position: right $h-padding center;
+ background-repeat: no-repeat;
+ background-size: $icon-size;
+ color: $color-base;
+ cursor: pointer;
+ display: inline-block;
+ font-family: $font-sans;
+ font-weight: $font-bold;
+ margin: 0;
+ padding: $v-padding ($h-padding * 2 + $icon-size) $v-padding $h-padding;
+ width: 100%;
+
+ &:hover {
+ background-color: $color-gray-lighter;
+ color: $color-base;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ margin: 0;
+ }
+}
+// scss-lint:enable PropertyCount
+
+@mixin accordion-button-unopened-styles {
+ background-image: url('#{$image-path}/plus.png');
+ background-image: url('#{$image-path}/plus.svg');
+ background-repeat: no-repeat;
+ background-size: $icon-size;
+}
+
+@mixin accordion-nested-list {
+ > ul li ul {
+ list-style: disc;
+ > li > ul {
+ list-style: circle;
+ > li > ul {
+ list-style: square;
+ }
+ }
+ }
+}
+
+.usa-accordion,
+.usa-accordion-bordered {
+ @include accordion-list-styles;
+ @include accordion-nested-list;
+
+ + .usa-accordion,
+ + .usa-accordion-bordered {
+ margin-top: $spacing-small;
+ }
+
+ // TODO deprecated ruleset based on old accordion.
+ > ul {
+ @include accordion-list-styles;
+
+ // TODO deprecated ruleset based on old accordion.
+ > li {
+ @include accordion-list-item-styles;
+ }
+
+ // TODO deprecated ruleset based on old accordion.
+ button {
+ @include accordion-button-styles;
+ }
+
+ // TODO deprecated ruleset based on old accordion.
+ [aria-expanded=false] {
+ @include accordion-button-unopened-styles;
+ }
+ }
+
+ > li {
+ @include accordion-list-item-styles;
+ }
+
+}
+
+.usa-accordion-bordered {
+ .usa-accordion-content {
+ border-bottom: $accordion-border;
+ border-left: $accordion-border;
+ border-right: $accordion-border;
+ }
+}
+
+.usa-accordion-content {
+ background-color: $color-white;
+ overflow: auto;
+ padding: $spacing-md-small $spacing-medium;
+
+ > *:first-child {
+ margin-top: 0;
+ }
+
+ > *:last-child {
+ margin-bottom: 0;
+ }
+
+ &:not([aria-hidden]) {
+ @include sr-only();
+ }
+
+ @include accessibly-hidden();
+}
+
+.usa-accordion-button {
+ @include accordion-button-styles;
+}
+
+.usa-accordion-button[aria-expanded=false] {
+ @include accordion-button-unopened-styles;
+}
diff --git a/docs/_sass/uswds/components/_alerts.scss b/docs/_sass/uswds/components/_alerts.scss
new file mode 100644
index 0000000..7f621ee
--- /dev/null
+++ b/docs/_sass/uswds/components/_alerts.scss
@@ -0,0 +1,128 @@
+// Alert variables ---------- //
+$usa-custom-alerts: () !default;
+$usa-custom-alerts-bar: () !default;
+
+$usa-alerts: (
+ success: $color-green-lightest,
+ warning: $color-gold-lightest,
+ error: $color-secondary-lightest,
+ info: $color-primary-alt-lightest
+);
+
+$usa-alerts-bar: (
+ success: $color-green,
+ warning: $color-gold,
+ error: $color-secondary,
+ info: $color-primary-alt
+);
+
+$alerts: map-merge($usa-alerts, $usa-custom-alerts);
+$alerts-bar: map-merge($usa-alerts-bar, $usa-custom-alerts-bar);
+
+$h-padding: $spacing-medium;
+$bar-size: $spacing-small;
+$left-padding: $h-padding + $bar-size;
+$icon-size: 3rem;
+
+.usa-alert {
+ background-color: $color-gray-lightest;
+ background-position: $h-padding $h-padding;
+ background-repeat: no-repeat;
+ background-size: 5.2rem; // TODO abrituary number based on svg size maybe?
+ padding-bottom: $h-padding * 0.7;
+ padding-left: $left-padding;
+ padding-right: $h-padding;
+ padding-top: $h-padding;
+ position: relative;
+
+ &::before {
+ background-color: darken($color-gray-lightest, 40%);
+ content: '';
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: $bar-size;
+ }
+
+ a {
+ color: $color-primary-darker;
+
+ &:focus,
+ &:hover {
+ color: $color-primary-darkest;
+ }
+ }
+
+ ul {
+ margin-bottom: 0;
+ margin-top: $spacing-small;
+ padding-left: $spacing-small;
+ }
+}
+
+.usa-alert-slim {
+ background-position: $h-padding $spacing-small;
+ padding-bottom: $spacing-small;
+ padding-top: $spacing-small;
+
+ .usa-alert-text:only-child {
+ margin-bottom: $spacing-x-small;
+ padding-top: $spacing-x-small;
+ }
+}
+
+.usa-alert-icon {
+ display: table-cell;
+ padding-right: $spacing-small;
+}
+
+.usa-alert-body {
+ display: table-cell;
+ vertical-align: top;
+}
+
+.usa-alert-heading {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.usa-alert-text {
+ font-family: $font-sans;
+ margin-bottom: 0;
+ margin-top: 0;
+}
+
+.usa-alert-text:only-child {
+ margin-bottom: $spacing-small;
+ padding-top: $spacing-x-small;
+}
+
+@each $name, $bgcolor in $alerts {
+ .usa-alert-#{$name} {
+ background-color: $bgcolor;
+ background-image: url('#{$image-path}/alerts/#{$name}.png');
+ background-image: url('#{$image-path}/alerts/#{$name}.svg');
+
+ &::before {
+ background-color: map-get($alerts-bar, $name);
+ }
+
+ .usa-alert-body {
+ padding-left: $icon-size + $h-padding;
+ }
+ }
+}
+
+.usa-alert-no_icon {
+ background-image: none;
+}
+
+.usa-alert-paragraph {
+ width: $text-max-width;
+}
+
+// Deprecated
+.usa-alert {
+ margin-top: 1.5em; // TODO deprecate
+}
diff --git a/docs/_sass/uswds/components/_banner.scss b/docs/_sass/uswds/components/_banner.scss
new file mode 100644
index 0000000..537dd95
--- /dev/null
+++ b/docs/_sass/uswds/components/_banner.scss
@@ -0,0 +1,203 @@
+.usa-banner {
+ background-color: $color-gray-lightest;
+ padding-bottom: 0.7rem;
+
+ @include media($small-screen) {
+ font-size: $h6-font-size;
+ padding-bottom: 0;
+ }
+}
+
+.usa-banner-content {
+ @include padding(null $site-margins-mobile 3px $site-margins-mobile);
+ background-color: transparent;
+ font-size: $h5-font-size;
+ padding-top: 2rem;
+ width: 100%;
+
+ @include media($medium-screen) {
+ padding-bottom: 2.3rem;
+ padding-top: 4rem;
+ }
+
+ @include media($nav-width) {
+ @include padding(null $site-margins);
+ }
+
+ p {
+ &:first-child {
+ margin-top: 1rem;
+
+ @include media($medium-screen) {
+ margin-top: 0;
+ }
+ }
+ }
+}
+
+.usa-banner-inner {
+ @include outer-container($site-max-width);
+ @include padding(null $site-margins-mobile);
+
+ @include media($nav-width) {
+ @include padding(null $site-margins);
+ }
+}
+
+.usa-banner-header {
+ @include padding(0.55rem null);
+ font-size: 1.2rem;
+ font-weight: $font-normal;
+
+ @include media($small-screen) {
+ @include padding(0 null);
+ }
+
+ p {
+ @include margin(0 null);
+ display: inline;
+ overflow: hidden;
+ vertical-align: middle;
+
+ @include media($small-screen) {
+ @include margin(2px null);
+ display: inline-block;
+ }
+ }
+
+ img {
+ float: left;
+ margin-right: 1rem;
+ margin-top: 1px;
+ width: 2.4rem;
+
+ @include media($small-screen) {
+ margin-right: 0.7rem;
+ width: 2rem;
+ }
+ }
+}
+
+.usa-banner-header-expanded {
+ align-items: center;
+ border-bottom: 1px solid $color-gray-light;
+ display: flex;
+ font-size: $h5-font-size;
+ min-height: 5.6rem;
+ padding-right: 3rem;
+
+ @include media($small-screen) {
+ border-bottom: none;
+ display: block;
+ font-size: 1.2rem;
+ font-weight: $font-normal;
+ min-height: 0;
+ padding-right: 0;
+ }
+
+ > .usa-banner-inner {
+ margin-left: 0;
+
+ @include media($small-screen) {
+ margin-left: auto;
+ }
+ }
+
+ img {
+ margin-right: 2.4rem;
+
+ @include media($small-screen) {
+ margin-right: 0.7rem;
+ }
+ }
+
+ p {
+ line-height: $heading-line-height;
+ vertical-align: top;
+
+ @include media($small-screen) {
+ line-height: $base-line-height;
+ vertical-align: middle;
+ }
+ }
+}
+
+.usa-banner-button {
+ @include button-unstyled;
+ @include padding(1.3rem null null 4.8rem);
+ background-position-x: right;
+ color: $color-primary;
+ display: block;
+ font-size: 1.2rem;
+ height: 4.3rem;
+ left: 0;
+ position: absolute;
+ text-decoration: underline;
+ top: 0;
+ width: 100%;
+
+ @include media($small-screen) {
+ @include padding(0 null null 0);
+ /* stylelint-disable declaration-block-no-ignored-properties */
+ display: inline;
+ height: auto;
+ margin-left: 3px;
+ position: relative;
+ vertical-align: middle;
+ width: auto;
+ /* stylelint-enable */
+ }
+
+ &:hover {
+ color: $color-primary-darker;
+ text-decoration: underline;
+ }
+
+ &[aria-expanded=false] {
+ @include display-icon(angle-arrow-down-primary, after, 1rem, 0, hover);
+ background-image: none;
+
+ &::after {
+ background-position-y: 1px;
+ }
+ }
+
+ &[aria-expanded=true] {
+ @include display-icon(close, after, 1.3rem, 0, no-hover);
+ background-image: none;
+ height: 5.6rem;
+
+ @include media($small-screen) {
+ @include display-icon(angle-arrow-up-primary, after, 1rem, 0, hover);
+ height: initial;
+ padding: 0;
+ position: relative;
+
+ &::after {
+ background-position-y: 1px;
+ }
+ }
+
+ &::after {
+ position: absolute;
+ right: 1.5rem;
+ top: 2.15rem;
+
+ @include media($small-screen) {
+ position: static;
+ }
+ }
+
+ .usa-banner-button-text {
+ display: none;
+
+ @include media($small-screen) {
+ display: inline;
+ }
+ }
+ }
+}
+
+.usa-banner-icon {
+ width: 3.8rem;
+}
diff --git a/docs/_sass/uswds/components/_footer.scss b/docs/_sass/uswds/components/_footer.scss
new file mode 100644
index 0000000..2b64fae
--- /dev/null
+++ b/docs/_sass/uswds/components/_footer.scss
@@ -0,0 +1,522 @@
+.usa-footer {
+ .usa-unstyled-list {
+ display: block;
+ }
+
+ .usa-footer-primary-link {
+ color: $color-base;
+ display: block;
+ font-weight: $font-bold;
+ margin-top: 0;
+ padding-bottom: $spacing-medium;
+ padding-top: $spacing-medium;
+ text-decoration: none;
+
+ @include media($medium-screen) {
+ border-top: none;
+ }
+
+ &:hover {
+ cursor: pointer;
+ text-decoration: underline;
+
+ @include media($medium-screen) {
+ cursor: auto;
+ text-decoration: none;
+ }
+ }
+ }
+
+ .usa-footer-primary-link ~ li a,
+ .usa-footer-secondary-link {
+ text-decoration: none;
+ }
+}
+
+.usa-footer-contact_info {
+ display: inline-block;
+
+ a {
+ color: $color-base;
+ text-decoration: none;
+ }
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+.usa-footer-return-to-top {
+ padding-bottom: $spacing-medium;
+ padding-top: $spacing-medium;
+}
+
+.usa-footer-primary-section {
+ background-color: $color-gray-lightest;
+
+ .usa-footer-primary-content {
+ padding-left: 1.5rem;
+ padding-right: 2.5rem;
+
+ @include media($medium-screen) {
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ li {
+ margin-left: 1rem;
+
+ @include media($medium-screen) {
+ margin-left: 0;
+ }
+ }
+ }
+
+ .usa-grid-full {
+ @include media($medium-screen) {
+ padding-left: 2.5rem;
+ padding-right: 2.5rem;
+ }
+ }
+}
+
+.usa-footer-medium {
+ .usa-footer-contact_info {
+ p {
+ margin: 0 $spacing-small 0 0;
+
+ @include media($medium-screen) {
+ margin: 0 0 0 $spacing-small;
+ }
+ }
+ }
+
+ .usa-footer-contact-heading {
+ margin-top: 0;
+
+ @include media($medium-screen) {
+ margin-top: $spacing-x-small;
+ margin-bottom: $spacing-x-small;
+ }
+ }
+
+ .usa-footer-logo {
+ padding: $spacing-small 0;
+
+ @include media($medium-screen) {
+ padding: $spacing-medium 0;
+ }
+ }
+
+ .usa-footer-primary-link {
+ padding-bottom: $spacing-md-small;
+ padding-top: $spacing-md-small;
+ }
+
+ .usa-footer-primary-section {
+ > .usa-grid {
+ padding: 0;
+
+ @include media($medium-screen) {
+ padding-left: $spacing-large;
+ padding-right: $spacing-large;
+ }
+ }
+
+ .usa-footer-primary-content {
+ @include media($large-screen) {
+ margin-right: 5%;
+ width: inherit;
+ }
+
+ &:last-child {
+ @include media($large-screen) {
+ margin-right: 0;
+ }
+ }
+ }
+ }
+
+ .usa-footer-nav ul {
+ @include media($medium-screen) {
+ align-items: center;
+ }
+ }
+}
+
+.usa-footer-slim {
+ .usa-footer-nav {
+ a {
+ display: block;
+ }
+
+ .usa-footer-primary-content {
+ @include media($large-screen) {
+ margin-right: 5%;
+ width: inherit;
+ }
+
+ &:last-child {
+ @include media($large-screen) {
+ margin-right: 0;
+ }
+ }
+ }
+ }
+
+ .usa-footer-primary-link {
+ padding-bottom: $spacing-md-small;
+ padding-top: $spacing-md-small;
+ }
+
+ .usa-footer-primary-section {
+ > .usa-grid {
+ padding: 0;
+
+ @include media($medium-screen) {
+ padding-left: $spacing-large;
+ padding-right: $spacing-large;
+ }
+ }
+
+ @include media($medium-screen) {
+ padding-bottom: 0;
+ padding-top: 0;
+
+ .usa-grid-full {
+ align-items: center;
+ }
+ }
+ }
+
+ .usa-footer-contact_info {
+ > * {
+ @include media($medium-screen) {
+ margin: 0;
+ }
+ }
+
+ @include media($medium-screen) {
+ @include padding ($spacing-md-small null);
+ }
+
+ @include media($medium-screen) {
+ width: 100%;
+ }
+
+ @include media($large-screen) {
+ @include span-columns(6);
+ }
+ }
+}
+
+/* stylelint-disable selector-no-qualifying-type */
+ul.usa-footer-primary-content,
+li.usa-footer-primary-content,
+li.usa-footer-primary-content {
+ border-top: 1px solid $color-gray-light;
+
+ @include media($medium-screen) {
+ border: none;
+ }
+
+ &:last-child {
+ border-bottom: 1px solid $color-gray-light;
+
+ @include media($medium-screen) {
+ border-bottom: none;
+ }
+ }
+}
+/* stylelint-enable */
+
+.usa-sign_up-block {
+ padding-bottom: 4.5rem;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+
+ @include media($medium-screen) {
+ float: right;
+ padding: 0;
+ }
+
+ label:first-of-type {
+ margin-top: 0;
+ }
+
+ button {
+ float: none;
+ margin-right: 0;
+ margin-top: 1.5rem;
+ }
+
+ input {
+ width: 100%;
+ }
+}
+
+.usa-footer-secondary_section {
+ background-color: $color-gray-lighter;
+ padding-bottom: $spacing-medium;
+ padding-top: $spacing-medium;
+
+ a {
+ color: $color-base;
+ }
+}
+
+.usa-footer-big-secondary-section {
+ @include media($medium-screen) {
+ padding-top: $spacing-medium;
+ padding-bottom: $spacing-medium;
+ }
+}
+
+.usa-footer-contact-links {
+ @include media($medium-screen) {
+ text-align: right;
+ }
+}
+
+.usa-social-links {
+ a {
+ text-decoration: none;
+ }
+}
+
+.usa-footer-big {
+ .usa-footer-contact_info {
+ display: block;
+
+ p {
+ margin: 0 $spacing-small 0 0;
+
+ @include media($medium-screen) {
+ margin: $spacing-x-small 0 0 $spacing-small;
+ }
+ }
+ }
+
+ .usa-footer-contact-links {
+ @include media($medium-screen) {
+ padding-top: $spacing-medium;
+ }
+ }
+
+ .usa-footer-logo {
+ padding: $spacing-small 0;
+
+ @include media($medium-screen) {
+ padding: $spacing-medium 0;
+ }
+ }
+
+ .usa-footer-primary-section {
+ @include media($medium-screen) {
+ padding-bottom: 4rem;
+ padding-top: 3rem;
+ }
+
+ > .usa-grid {
+ padding: 0;
+
+ @include media($medium-screen) {
+ padding-left: $spacing-large;
+ padding-right: $spacing-large;
+ }
+ }
+
+ .usa-footer-primary-content {
+ padding-left: 0;
+ padding-right: 0;
+
+ li {
+ margin-left: $spacing-md-small;
+
+ @include media($medium-screen) {
+ margin-left: 0;
+ }
+ }
+
+ .usa-footer-primary-link {
+ margin-left: 0;
+ }
+ }
+ }
+
+ ul {
+ padding-bottom: 2.4rem;
+
+ @include media($medium-screen) {
+ padding-bottom: 0;
+ }
+
+ &:last-child {
+ border-bottom: 1px solid $color-gray-light;
+
+ @include media($medium-screen) {
+ border-bottom: none;
+ }
+ }
+
+ li:not(.usa-footer-primary-link) {
+ line-height: $heading-line-height;
+ padding-bottom: 0.35em;
+ padding-top: 0.35em;
+ }
+
+ .usa-footer-primary-link {
+ background-image: url('#{$image-path}/arrow-down.png');
+ background-image: url('#{$image-path}/arrow-down.svg');
+ background-position: 1.5rem center;
+ background-repeat: no-repeat;
+ background-size: 1.3rem;
+ margin-left: 0;
+ padding-left: 3.5rem;
+
+ @include media($medium-screen) {
+ background: none;
+ margin-bottom: .8rem;
+ padding-bottom: 0;
+ padding-left: 0;
+ }
+
+ > * {
+ @include margin(0 null);
+ }
+ }
+
+ &.hidden { /* stylelint-disable-line selector-no-qualifying-type */
+ padding-bottom: 0;
+
+ li {
+ display: none;
+ }
+
+ .usa-footer-primary-link { /* stylelint-disable-line selector-no-qualifying-type */
+ background-image: url('#{$image-path}/arrow-right.png');
+ background-image: url('#{$image-path}/arrow-right.svg');
+ cursor: pointer;
+ display: block;
+
+ @include media($medium-screen) {
+ background: none;
+ padding-left: 0;
+ }
+ }
+ }
+ }
+}
+
+.usa-footer-topic {
+ margin: 0;
+ padding: 2rem 0;
+}
+
+.usa-sign_up-header {
+ @include media($medium-screen) {
+ margin: 0;
+ padding: 2rem 0;
+ }
+}
+
+.usa-footer-logo-img {
+ max-width: 8rem;
+
+ @include media($medium-screen) {
+ float: left;
+ }
+}
+
+.usa-footer-big-logo-img {
+ max-width: 10rem;
+}
+
+.usa-footer-slim-logo-img {
+ float: left;
+ max-width: 5rem;
+}
+
+.usa-footer-logo-heading {
+ display: block;
+ margin-top: $spacing-small;
+
+ @include media($medium-screen) {
+ display: inline-block;
+ margin-top: $spacing-large;
+ padding-left: $spacing-md-small;
+ }
+}
+
+.usa-footer-big-logo-heading {
+ margin-top: $spacing-md-small;
+
+ @include media($medium-screen) {
+ margin-top: $spacing-medium;
+ }
+}
+
+.usa-footer-slim-logo-heading {
+ display: inline-block;
+ margin-top: $spacing-md-small;
+ padding-left: $spacing-md-small;
+}
+
+.usa-footer-contact-heading {
+ margin-top: 0;
+
+ @include media($medium-screen) {
+ margin-top: 1rem;
+ }
+}
+
+.usa-social_link {
+ $background-height: 3rem; // Height of icon within hit area.
+ // Link hit target is 44 x 44 pixels following
+ // Apple iOS Human Interface Guidelines.
+ $hit-area: 4.4rem;
+
+ @include margin(2.5rem 1rem 1.5rem 0);
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: auto $background-height;
+ display: inline-block;
+ height: $hit-area;
+ left: -1.6rem; // relative left positioning
+ position: relative;
+ text-align: center;
+ width: $hit-area;
+
+ @include media($medium-screen) {
+ @include margin(0 0 0 $spacing-x-small);
+ left: $spacing-md-small;
+ }
+
+ span {
+ @include sr-only();
+ }
+}
+
+.usa-link-facebook {
+ @extend .usa-social_link;
+ background-image: url('#{$image-path}/social-icons/png/facebook25.png');
+ background-image: url('#{$image-path}/social-icons/svg/facebook25.svg');
+}
+
+.usa-link-twitter {
+ @extend .usa-social_link;
+ background-image: url('#{$image-path}/social-icons/png/twitter16.png');
+ background-image: url('#{$image-path}/social-icons/svg/twitter16.svg');
+}
+
+.usa-link-youtube {
+ @extend .usa-social_link;
+ background-image: url('#{$image-path}/social-icons/png/youtube15.png');
+ background-image: url('#{$image-path}/social-icons/svg/youtube15.svg');
+}
+
+.usa-link-rss {
+ @extend .usa-social_link;
+ background-image: url('#{$image-path}/social-icons/png/rss25.png');
+ background-image: url('#{$image-path}/social-icons/svg/rss25.svg');
+}
diff --git a/docs/_sass/uswds/components/_forms.scss b/docs/_sass/uswds/components/_forms.scss
new file mode 100644
index 0000000..957affe
--- /dev/null
+++ b/docs/_sass/uswds/components/_forms.scss
@@ -0,0 +1,144 @@
+$usa-form-width: 32rem;
+
+[type=submit] {
+ @include media($medium-screen) {
+ margin-top: calc(3rem - .2em); // Label margin minus input bottom margin
+ }
+}
+
+fieldset {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+.usa-form {
+ @include media($medium-screen) {
+ max-width: $usa-form-width;
+ }
+}
+
+.usa-input-tiny {
+ @include media($medium-screen) {
+ max-width: 6rem;
+ }
+}
+
+.usa-input-medium {
+ @include media($medium-screen) {
+ max-width: 12rem;
+ }
+}
+
+.usa-form-note {
+ float: right;
+ font-family: $font-sans;
+ font-size: $h5-font-size;
+ margin: 0 0 1.5rem;
+
+ + * {
+ clear: both;
+ }
+}
+
+.usa-form-large {
+ @include media($medium-screen) {
+ max-width: 46rem;
+ }
+}
+
+.usa-input-grid {
+ @include media($medium-screen) {
+ padding-right: 5%;
+ }
+}
+
+.usa-input-grid:last-of-type {
+ @include media($medium-screen) {
+ padding-right: 0;
+ }
+}
+
+.usa-input-grid-small {
+ @include media($medium-screen) {
+ float: left;
+ width: 35%;
+ }
+
+ input {
+ margin-bottom: 3rem;
+ }
+
+ select {
+ margin-bottom: 3rem;
+ }
+}
+
+.usa-input-grid-medium {
+ @include media($medium-screen) {
+ float: left;
+ width: 65%;
+ }
+
+ input {
+ margin-bottom: 3rem;
+ }
+
+ select {
+ margin-bottom: 3rem;
+ }
+}
+
+.usa-input-grid-large {
+ @include media($medium-screen) {
+ float: left;
+ width: 100%;
+ }
+
+ input {
+ margin-bottom: 3rem;
+ }
+
+ select {
+ margin-bottom: 3rem;
+ }
+}
+
+.usa-additional_text {
+ font-weight: normal;
+}
+
+// Reset password checklist
+
+.usa-checklist {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0;
+
+ li {
+ display: inline-block;
+ list-style: none;
+ margin-bottom: 0;
+ margin-top: 0;
+ padding-left: 3em;
+ text-indent: -2em;
+
+ &::before {
+ content: ' ';
+ display: inline-block;
+ height: .8em;
+ margin-right: .2em;
+ width: 1.8em;
+ }
+ }
+}
+
+.usa-checklist-checked {
+ &::before {
+ background-image: url('#{$image-path}/correct9.png');
+ background-image: url('#{$image-path}/correct9.svg');
+ background-position: 100%;
+ background-repeat: no-repeat;
+ background-size: 100%;
+ }
+}
diff --git a/docs/_sass/uswds/components/_graphic-list.scss b/docs/_sass/uswds/components/_graphic-list.scss
new file mode 100644
index 0000000..2bc03ab
--- /dev/null
+++ b/docs/_sass/uswds/components/_graphic-list.scss
@@ -0,0 +1,35 @@
+// A collection of media block objects
+
+.usa-graphic_list {
+ .usa-graphic_list-row {
+ .usa-media_block {
+ margin-bottom: $site-margins;
+
+ @include media($medium-screen) {
+ margin-bottom: $site-margins * 2;
+ }
+ }
+
+ &:last-child {
+ .usa-media_block {
+ @include media($medium-screen) {
+ margin-bottom: 0;
+ }
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+
+ .usa-media_block-img {
+ margin-right: $site-margins;
+ }
+
+ .usa-media_block-body {
+ > :first-child {
+ margin-top: 0;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/components/_header.scss b/docs/_sass/uswds/components/_header.scss
new file mode 100755
index 0000000..8e4f946
--- /dev/null
+++ b/docs/_sass/uswds/components/_header.scss
@@ -0,0 +1,216 @@
+// Header variables ---------- //
+
+$height-nav-secondary: 5rem;
+$width-nav-sidebar: 250px;
+
+// z-indexes - TODO refactor to a site-wide z-index management approach
+$z-index-header: 7000;
+$z-index-overlay: 8000;
+$z-index-nav: 9000;
+
+// Header ------------- //
+
+.usa-header {
+ width: 100%;
+ z-index: $z-index-header;
+
+ @include media($nav-width) {
+ border-bottom: 1px solid $color-gray-lighter;
+ }
+
+ a {
+ border-bottom: none;
+ }
+
+ .usa-search {
+ @include media($nav-width) {
+ float: right;
+ max-width: 21.5rem;
+ }
+ }
+}
+
+.usa-logo {
+ float: left;
+ line-height: 4rem;
+ margin-left: 1.5rem;
+
+ @include media($nav-width) {
+ line-height: 7.5rem;
+ margin-left: 0;
+ }
+
+ a {
+ color: $color-base;
+ text-decoration: none;
+ }
+
+ br {
+ display: none;
+
+ @include media($nav-width) {
+ display: block;
+ }
+ }
+}
+
+.usa-logo-text {
+ display: block;
+ font-size: $h5-font-size;
+ font-style: normal;
+ font-weight: $font-bold;
+ margin: 0;
+
+ @include media($nav-width) {
+ display: block;
+ font-size: 2.4rem;
+ line-height: $heading-line-height;
+ }
+}
+
+.usa-menu-btn {
+ /* stylelint-disable declaration-block-no-ignored-properties */
+ @include button-unstyled;
+ background-color: $color-primary;
+ color: $color-white;
+ display: inline;
+ float: right;
+ font-size: $h6-font-size;
+ height: 4rem;
+ line-height: 4rem;
+ text-align: center;
+ text-decoration: none;
+ text-transform: uppercase;
+ width: 5.8rem;
+ /* stylelint-enable */
+
+ @include media($nav-width) {
+ display: none;
+ }
+
+ &:hover {
+ color: $color-white;
+ background-color: $color-primary-darker;
+ }
+
+ &:visited {
+ color: $color-white;
+ }
+}
+
+.usa-overlay {
+ @include position(fixed, 0);
+ background: $color-black;
+ opacity: 0;
+ transition: opacity 0.2s ease-in-out;
+ visibility: hidden;
+ z-index: $z-index-overlay;
+
+ &.is-visible {
+ opacity: 0.1;
+ visibility: visible;
+ }
+}
+
+// Basic header ----------- //
+
+.usa-header-basic {
+ .usa-logo {
+ @include media($nav-width) {
+ bottom: 0;
+ position: absolute;
+ }
+ }
+
+ .usa-navbar {
+ @include media($nav-width) {
+ position: relative;
+ width: 18%; // TODO: review this more
+ }
+ }
+}
+
+// Extended header ----------- //
+
+.usa-header-extended {
+ .usa-header {
+ @include media($nav-width) {
+ border-bottom: none;
+ }
+ }
+
+ .usa-logo {
+ @include media($nav-width) {
+ @include margin(3rem null);
+ }
+ }
+
+ em {
+ @include media($nav-width) {
+ font-size: 3.2rem;
+ line-height: 1;
+ }
+ }
+
+ .usa-navbar {
+ @include media($nav-width) {
+ @include outer-container($site-max-width);
+ @include padding(null $site-margins);
+ display: block;
+ height: auto;
+ }
+ }
+
+ .usa-nav {
+ @include media($nav-width) {
+ border-top: 1px solid $color-gray-lighter;
+ float: none;
+ padding: 0;
+ width: 100%;
+ }
+ }
+
+ .usa-nav-inner {
+ @include media($nav-width) {
+ @include outer-container($site-max-width);
+ @include padding(null $site-margins null 1.5rem);
+ margin-top: -1px;
+ position: relative;
+ }
+ }
+
+ .usa-nav-primary {
+ @include media($nav-width) {
+ @include clearfix;
+ }
+
+ button {
+ &[aria-expanded=false],
+ &[aria-expanded=true] { /* stylelint-disable-line selector-no-qualifying-type */
+ @include media($nav-width) { /* stylelint-disable-line selector-no-qualifying-type */
+ background-position: right 1.5rem top 53%;
+ }
+ }
+ }
+ }
+
+ .usa-nav-link {
+ @include media($nav-width) {
+ @include padding(1.8rem null);
+ }
+ }
+
+ .usa-nav-submenu {
+ .usa-grid-full {
+ @include media($nav-width) {
+ padding-left: 1.2rem;
+ }
+ }
+ }
+
+ .usa-megamenu {
+ @include media($nav-width) {
+ padding-left: $site-margins;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/components/_hero.scss b/docs/_sass/uswds/components/_hero.scss
new file mode 100644
index 0000000..5ac90f4
--- /dev/null
+++ b/docs/_sass/uswds/components/_hero.scss
@@ -0,0 +1,37 @@
+// Hero feature
+// ==========================
+
+.usa-hero {
+ @include padding($site-margins null);
+ background-image: url('#{$image-path}/hero.png');
+ background-position: center;
+ background-size: cover;
+
+ .usa-button {
+ color: $color-white;
+ }
+}
+
+.usa-section-dark {
+ .usa-hero-link {
+ color: $color-primary-alt;
+ }
+}
+
+.usa-hero-callout {
+ background-color: $color-primary-darkest;
+ padding: 3rem;
+
+ @include media($small-screen) {
+ max-width: 30rem;
+ }
+
+ > *:first-child {
+ @include margin(0 null $spacing-medium null);
+ }
+}
+
+.usa-hero-callout-alt {
+ color: $color-white;
+ display: block;
+}
diff --git a/docs/_sass/uswds/components/_layout.scss b/docs/_sass/uswds/components/_layout.scss
new file mode 100644
index 0000000..817827d
--- /dev/null
+++ b/docs/_sass/uswds/components/_layout.scss
@@ -0,0 +1,36 @@
+// Flexbox positioning to move sidenav below main content on small screens
+.usa-layout-docs {
+ display: flex;
+ flex-direction: column;
+
+ @include media($large-screen) {
+ display: inherit;
+ }
+
+ .usa-grid {
+ > :first-child:not(.usa-width-*) {
+ margin-top: 0;
+ }
+
+ > :last-child:not(.usa-width-*) {
+ margin-bottom: 0;
+ }
+ }
+}
+
+.usa-layout-docs-sidenav {
+ order: 2;
+}
+
+.usa-layout-docs-main_content {
+ margin-bottom: $site-margins;
+ order: 1;
+
+ @include media($large-screen) {
+ margin-bottom: 0;
+ }
+
+ > :first-child {
+ margin-top: 0;
+ }
+}
diff --git a/docs/_sass/uswds/components/_media-block.scss b/docs/_sass/uswds/components/_media-block.scss
new file mode 100644
index 0000000..8e4c821
--- /dev/null
+++ b/docs/_sass/uswds/components/_media-block.scss
@@ -0,0 +1,12 @@
+@mixin media-block-img($margin-right: 1rem) {
+ float: left;
+ margin-right: $margin-right;
+}
+
+.usa-media_block-img {
+ @include media-block-img;
+}
+
+.usa-media_block-body {
+ overflow: hidden;
+}
diff --git a/docs/_sass/uswds/components/_navigation.scss b/docs/_sass/uswds/components/_navigation.scss
new file mode 100755
index 0000000..4805d0f
--- /dev/null
+++ b/docs/_sass/uswds/components/_navigation.scss
@@ -0,0 +1,561 @@
+// Header navigation ------------- //
+
+@mixin nav-border {
+ border-bottom: 0.4rem solid $color-primary;
+ padding-bottom: 0.6rem;
+}
+
+@mixin nav-border-thick {
+ border-bottom: 0.7rem solid $color-primary;
+ padding-bottom: 0.9rem;
+}
+
+.usa-navbar {
+ border-bottom: 1px solid $color-gray-light;
+ height: 4rem;
+
+ @include media($nav-width) {
+ border-bottom: none;
+ display: inline-block;
+ height: 7.8rem; // XXX magic number
+ }
+}
+
+.usa-nav-link {
+ @include font-smoothing;
+
+ &:hover {
+ span {
+ @include media($nav-width) {
+ @include nav-border;
+ }
+ }
+ }
+
+ &.usa-accordion-button {
+ span {
+ @include media($nav-width) {
+ margin-right: 0;
+ padding-right: 1.5rem;
+ }
+ }
+ }
+}
+
+.usa-nav-container {
+ @include media($nav-width) {
+ @include outer-container($site-max-width);
+ @include padding(null $site-margins);
+ }
+}
+
+.usa-nav {
+ $sliding-panel-width: 26rem;
+
+ @keyframes slidein-left {
+ from {
+ transform: translateX($sliding-panel-width);
+ }
+
+ to {
+ transform: translateX(0);
+ }
+ }
+
+ @include position(fixed, 0 0 0 auto);
+ background: $color-white;
+ border-left: 1px solid $color-gray-light;
+ border-right: 0;
+ display: none;
+ flex-direction: column;
+ overflow-y: auto;
+ padding: 2rem;
+ width: $sliding-panel-width;
+ z-index: $z-index-nav;
+
+ @include media($nav-width) {
+ @include padding(4.5rem 0 0 null);
+ border-left: none;
+ display: block;
+ float: right;
+ overflow-y: visible;
+ position: relative;
+ transform: translateX(0);
+ width: auto;
+ }
+
+ &.is-visible {
+ animation: slidein-left 0.3s ease-in-out;
+ display: flex;
+ }
+
+ nav {
+ margin-top: 6rem; // XXX magic number
+ min-height: 100%;
+
+ @include media($nav-width) {
+ margin-top: 0;
+ }
+ }
+
+ .usa-current {
+ border-left: 4px solid $color-primary;
+ color: $color-primary;
+ font-weight: $font-bold;
+ padding-left: 1.4rem;
+
+ @include media($nav-width) {
+ color: $color-base;
+ }
+ }
+
+ .usa-button {
+ width: 100%;
+ }
+
+ .usa-search {
+ @include media($nav-width) {
+ margin-left: 1.5rem; // XXX magic number
+ top: 4px;
+ }
+ }
+}
+
+// Primary navigation ------------- //
+
+.usa-nav-primary {
+ @include usa-sidenav-list;
+ margin-top: 1.5rem;
+ order: 2;
+
+ @include media($nav-width) {
+ display: inline;
+ }
+
+ li {
+ @include media($nav-width) {
+ border-top: none;
+ }
+ }
+
+ > li {
+ width: auto;
+
+ @include media($nav-width) {
+ display: inline-block;
+ // margin-left: -4px;
+ }
+
+ > a {
+ @include media($nav-width) {
+ @include padding(1.3rem 1.5rem 2.2rem 1.5rem);
+ color: $color-gray;
+ font-size: $h5-font-size;
+ font-weight: $font-bold;
+ line-height: 1;
+ }
+
+ &:hover {
+ @include media($nav-width) {
+ background-color: transparent;
+ }
+ }
+ }
+ }
+
+ a {
+ @include media($nav-width) {
+ @include padding(0.75rem null);
+ }
+
+ &:hover {
+ @include media($nav-width) {
+ // color: $color-base;
+ }
+ }
+ }
+
+ button {
+ $button-vertical-offset: 40%;
+
+ @include button-unstyled;
+ @include font-smoothing;
+ font-weight: $font-normal;
+ line-height: 1.3;
+ padding: 0.85rem 1.5rem 0.85rem 1.8rem;
+
+ @include media($nav-width) {
+ @include padding(1.3rem 1.5rem 2.2rem 1.5rem);
+ color: $color-gray;
+ font-size: $h5-font-size;
+ font-weight: $font-bold;
+ line-height: 1;
+ width: initial;
+ }
+
+ &:focus,
+ &:active {
+ box-shadow: $focus-outline;
+ }
+
+ &:hover {
+ background-color: $color-gray-lightest;
+ color: $color-primary;
+
+ @include media($nav-width) {
+ background-color: transparent;
+ // color: $color-base;
+ }
+ }
+
+ &[aria-expanded=false] { /* stylelint-disable-line selector-no-qualifying-type */
+ background-image: url('#{$image-path}/plus-alt.png');
+ background-image: url('#{$image-path}/plus-alt.svg');
+ background-repeat: no-repeat;
+ background-position: right 0 center;
+ background-size: 1rem;
+
+ @include media($nav-width) {
+ background-image: url('#{$image-path}/angle-arrow-down.png');
+ background-image: url('#{$image-path}/angle-arrow-down.svg');
+ background-position: right 1.5rem top $button-vertical-offset;
+ }
+
+ &:hover {
+ @include media($nav-width) {
+ background-image: url('#{$image-path}/angle-arrow-down-primary.png');
+ background-image: url('#{$image-path}/angle-arrow-down-primary.svg');
+ }
+ }
+ }
+
+ &[aria-expanded=true] { /* stylelint-disable-line selector-no-qualifying-type */
+ background-image: url('#{$image-path}/minus-alt.png');
+ background-image: url('#{$image-path}/minus-alt.svg');
+ background-repeat: no-repeat;
+ background-position: right 0 center;
+ background-size: 1rem;
+
+ @include media($nav-width) {
+ background-color: $color-primary-darkest;
+ color: $color-white;
+ background-image: url('#{$image-path}/angle-arrow-down-hover.png');
+ background-image: url('#{$image-path}/angle-arrow-down-hover.svg');
+ background-position: right 1.5rem top $button-vertical-offset;
+
+ &:hover {
+ background-color: $color-primary-darkest;
+ }
+
+ span {
+ @include nav-border;
+ color: $color-white;
+ }
+ }
+ }
+ }
+
+ @include media($nav-width) {
+ a.usa-current,
+ .usa-current { // stylelint-disable-line selector-no-qualifying-type
+ // undo the sidenav style
+ border-left: 0;
+ padding-left: 1.5rem;
+
+ &:hover {
+ span {
+ color: $color-primary;
+ }
+ }
+
+ span {
+ @include nav-border;
+ color: $color-base;
+ }
+ }
+ }
+}
+
+// Extended header navigation ------- //
+
+.usa-header-extended {
+ .usa-nav-link {
+ &:hover {
+ span {
+ @include media($nav-width) {
+ @include nav-border-thick;
+ }
+ }
+ }
+ }
+
+ .usa-nav-primary {
+ button[aria-expanded=true] { /* stylelint-disable-line selector-no-qualifying-type */
+ span {
+ @include media($nav-width) {
+ @include nav-border-thick;
+ }
+ }
+ }
+
+ .usa-current {
+ @include media($nav-width) {
+ span {
+ @include nav-border-thick;
+ }
+ }
+ }
+ }
+}
+
+// Secondary navigation ----------- //
+
+.usa-nav-secondary {
+ margin-top: 1.5rem;
+
+ @include media($nav-width) {
+ margin-top: 0;
+ position: absolute;
+ right: $site-margins;
+ top: -5.7rem; // XXX magic number
+ }
+
+ .usa-search {
+ @include margin(1.5rem null 0 null);
+
+ @include media($nav-width) {
+ @include margin(-0.9rem null 0 0);
+ float: left;
+ }
+ }
+}
+
+.usa-nav-secondary-links {
+ margin-top: 2.4rem;
+
+ @include media($nav-width) {
+ float: left;
+ margin-top: 0;
+ }
+
+ li {
+ @include media($nav-width) {
+ display: inline;
+ padding-left: 0.5rem;
+ }
+
+ &:not(:last-child)::after {
+ @include media($nav-width) {
+ color: $color-gray-lighter;
+ content: '|';
+ padding-left: 0.5rem;
+ }
+ }
+ }
+
+ a,
+ .usa-header-search-button {
+ color: $color-gray;
+ display: inline-block;
+ font-size: $h5-font-size;
+ text-decoration: none;
+
+ &:hover {
+ color: $color-primary;
+ text-decoration: underline;
+ }
+ }
+
+ .usa-header-search-button {
+ @include button-unstyled;
+ display: none;
+
+ @include media($nav-width) {
+ background-image: url('#{$image-path}/search-alt.png');
+ background-image: url('#{$image-path}/search-alt.svg');
+ background-repeat: no-repeat;
+ background-position: left center;
+ background-size: 2.2rem;
+ display: inline-block;
+ padding-left: 2.3rem;
+ }
+
+ &.is-hidden {
+ @include media($nav-width) {
+ display: none;
+ }
+ }
+ }
+
+ @include media($nav-width) {
+ a.usa-current { // stylelint-disable-line selector-no-qualifying-type
+ // undo the sidenav style
+ border-left: 0;
+ padding-left: 0;
+ }
+ }
+}
+
+// Navigation submenu (dropdown and mega menu) ----- //
+
+.usa-nav-submenu {
+ @include usa-sidenav-sublist;
+
+ @include media($nav-width) {
+ @include unstyled-list;
+ @include padding(0.75rem null 0.9rem null);
+ background-color: $color-primary-darkest;
+ width: 21.5rem;
+ position: absolute;
+ }
+
+ &[aria-hidden=true] {
+ display: none;
+ }
+
+ a {
+ @include media($nav-width) {
+ color: $color-white;
+ padding-left: 1.5rem; // XXX magic number
+ }
+
+ &:hover {
+ @include media($nav-width) {
+ background-color: $color-primary-darkest;
+ color: $color-white;
+ padding-left: 1.5rem;
+ text-decoration: underline;
+ }
+ }
+
+ // this used to be necessary to undo the `usa-sidenav-sublist`
+ // include, above
+ // &:hover,
+ // &.usa-current { /* stylelint-disable-line selector-no-qualifying-type */
+ // @include media($nav-width) {
+ // padding-left: 1.8rem;
+ // }
+ // }
+ }
+
+ li {
+ font-size: $h5-font-size;
+ margin-bottom: 0;
+ }
+}
+
+// Navigation close button -------- //
+
+.usa-nav-close {
+ @include button-unstyled;
+ @include margin(-1.2rem -1.5rem 1.5rem auto);
+ color: currentColor;
+ float: right;
+ height: $hit-area;
+ text-align: center;
+ width: $hit-area;
+
+ &:hover {
+ color: currentColor;
+ }
+
+ @include media($nav-width) {
+ display: none;
+ }
+
+ img {
+ width: 1.3rem;
+ }
+
+ + * {
+ clear: both;
+ }
+}
+
+.usa-mobile_nav-active {
+ overflow: hidden;
+}
+
+// Navigation mega menu -------- //
+
+@mixin outer-megamenu {
+ background-color: $color-primary-darkest;
+ content: '';
+ display: block;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 1000%;
+}
+
+.usa-megamenu {
+ @include media($nav-width) {
+ @include padding(3.15rem null); // XXX magic number
+ // XXX this is the difference between the 2rem padding-left
+ // of .usa-nav-inner and the $site-margins (3rem) padding-left
+ // of .usa-megamenu
+ left: -1rem;
+ width: 100%;
+ }
+
+ &::before {
+ @include media($nav-width) {
+ @include outer-megamenu;
+ right: 100%;
+ }
+ }
+
+ &::after {
+ @include media($nav-width) {
+ @include outer-megamenu;
+ left: 100%;
+ }
+ }
+}
+
+.usa-header-basic-megamenu {
+ .usa-nav {
+ @include media($nav-width) {
+ padding-left: 0;
+ padding-top: 0;
+ width: 100%;
+ }
+ }
+
+ .usa-nav-inner {
+ display: flex;
+ flex-direction: column;
+
+ @include media($nav-width) {
+ display: block;
+ float: right;
+ margin-top: -3.8rem;
+ }
+ }
+
+ .usa-nav-submenu {
+ .usa-grid-full {
+ @include media($nav-width) {
+ margin-left: -1.8rem; // XXX magic number
+ }
+ }
+ }
+}
+
+.usa-megamenu-col {
+ @include media($nav-width) {
+ @include span-columns(3);
+
+ &:nth-child(2n) {
+ @include span-columns(3);
+ }
+
+ &:nth-child(4n) {
+ margin-right: 0;
+ }
+ }
+
+ > ul {
+ @include unstyled-list;
+ }
+}
diff --git a/docs/_sass/uswds/components/_search.scss b/docs/_sass/uswds/components/_search.scss
new file mode 100644
index 0000000..2ea6673
--- /dev/null
+++ b/docs/_sass/uswds/components/_search.scss
@@ -0,0 +1,111 @@
+$usa-btn-small-width: 4.5rem;
+$usa-btn-medium-width: 8.5rem;
+$usa-btn-big-width: 11.6rem;
+
+@mixin search-icon {
+ background-image: url('#{$image-path}/search.png');
+ background-image: url('#{$image-path}/search.svg');
+ background-position: 50%;
+ background-repeat: no-repeat;
+}
+
+.usa-search {
+ @include clearfix;
+ max-width: none;
+ position: relative;
+
+ [type=submit],
+ .usa-search-submit {
+ @include search-icon;
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ height: 3.3rem;
+ margin: 0;
+ padding: 0;
+ width: $usa-btn-small-width;
+
+ @include media($small-screen) {
+ background-image: none;
+ width: $usa-btn-medium-width;
+ }
+ }
+
+ &.usa-search-big {
+ @include media($small-screen) {
+ $height: 4.4rem;
+ $width: $usa-btn-big-width;
+
+ [type=search],
+ .usa-search-input {
+ font-size: $base-font-size;
+ height: $height;
+ width: calc(100% - #{$width});
+ }
+
+ [type=submit],
+ .usa-search-submit {
+ font-size: $h3-font-size;
+ height: $height;
+ width: $width;
+ }
+ }
+ }
+
+ &.usa-search-small {
+ @include media($small-screen) {
+ $width: $usa-btn-small-width;
+
+ [type=search],
+ .usa-search-input {
+ width: calc(100% - #{$width});
+ }
+
+ [type=submit],
+ .usa-search-submit {
+ @include search-icon;
+ width: $width;
+ }
+ }
+
+ $lt-nav-width: $nav-width - 1px;
+
+ @media screen and (max-width: $lt-nav-width) {
+ &.usa-sr-only {
+ left: auto;
+ position: relative;
+ }
+ }
+ }
+}
+
+// Extra specificity to override rules set in reset.css.
+input[type=search] { /* stylelint-disable-line selector-no-qualifying-type */
+ box-sizing: border-box;
+ appearance: none;
+}
+
+[type=search],
+.usa-search-input {
+ @include padding(0 null);
+ border-bottom-right-radius: 0;
+ border-right: none;
+ border-top-right-radius: 0;
+ box-sizing: border-box;
+ float: left;
+ font-size: $small-font-size;
+ height: 3.3rem;
+ margin: 0;
+ width: calc(100% - #{$usa-btn-small-width});
+
+ @include media($small-screen) {
+ width: calc(100% - #{$usa-btn-medium-width});
+ }
+}
+
+.usa-search-submit-text {
+ @include sr-only;
+
+ @include media($small-screen) {
+ @include not-sr-only();
+ }
+}
diff --git a/docs/_sass/uswds/components/_section.scss b/docs/_sass/uswds/components/_section.scss
new file mode 100644
index 0000000..35659ea
--- /dev/null
+++ b/docs/_sass/uswds/components/_section.scss
@@ -0,0 +1,37 @@
+.usa-section {
+ @include padding($site-margins null);
+
+ @include media($medium-screen) {
+ @include padding(6rem null);
+ }
+}
+
+.usa-section-light {
+ background-color: $color-gray-lightest;
+}
+
+.usa-section-dark {
+ background-color: $color-primary-darkest;
+ color: $color-white;
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: $color-primary-alt;
+ }
+
+ p {
+ color: $color-white;
+ }
+
+ a {
+ color: $color-gray-lighter;
+
+ &:hover {
+ color: $color-white;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/components/_sidenav.scss b/docs/_sass/uswds/components/_sidenav.scss
new file mode 100644
index 0000000..b7be479
--- /dev/null
+++ b/docs/_sass/uswds/components/_sidenav.scss
@@ -0,0 +1,31 @@
+
+.usa-sidenav-list {
+ @include usa-sidenav-list;
+ border-bottom: 1px solid;
+ border-top: 1px solid;
+
+ @include media($large-screen) {
+ border-bottom: none;
+ border-top: none;
+ }
+
+ .usa-grid & {
+ @include margin(null (-$site-margins-mobile) null (-$site-margins-mobile));
+
+ @include media($medium-screen) {
+ @include margin(null 0);
+ }
+ }
+}
+
+.usa-sidenav-sub_list {
+ @include usa-sidenav-sublist;
+}
+
+.usa-layout-docs-sidenav {
+ padding-top: 2.4rem;
+
+ @include media($large-screen) {
+ padding-top: 0;
+ }
+}
diff --git a/docs/_sass/uswds/components/_skipnav.scss b/docs/_sass/uswds/components/_skipnav.scss
new file mode 100644
index 0000000..e38fb77
--- /dev/null
+++ b/docs/_sass/uswds/components/_skipnav.scss
@@ -0,0 +1,19 @@
+.usa-skipnav {
+ background: transparent;
+ color: $color-base;
+ left: 0;
+ padding: 1rem 1.5rem;
+ position: absolute;
+ top: -4.2rem;
+ transition: all 0.2s ease-in-out;
+ z-index: 100;
+
+ &:focus {
+ background: $color-white;
+ left: 0;
+ outline: 0;
+ position: absolute;
+ top: 0;
+ transition: all 0.2s ease-in-out;
+ }
+}
diff --git a/docs/_sass/uswds/core/_base.scss b/docs/_sass/uswds/core/_base.scss
new file mode 100644
index 0000000..6ec15d4
--- /dev/null
+++ b/docs/_sass/uswds/core/_base.scss
@@ -0,0 +1,36 @@
+// Apply a natural box layout model to all elements, but allowing components to
+// change
+
+html {
+ box-sizing: border-box;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+body {
+ background-color: $color-white;
+ color: $color-base;
+ overflow-x: hidden;
+}
+
+// Hack for clearfixes
+.lt-ie9 {
+ * {
+ filter: none !important; /* stylelint-disable-line declaration-no-important */
+ }
+}
+
+// for IE < 11, see:
+//
+[hidden] {
+ display: none !important; /* stylelint-disable-line declaration-no-important */
+}
+
+*:focus,
+.usa-focus {
+ @include focus;
+}
diff --git a/docs/_sass/uswds/core/_defaults.scss b/docs/_sass/uswds/core/_defaults.scss
new file mode 100644
index 0000000..9a0d70a
--- /dev/null
+++ b/docs/_sass/uswds/core/_defaults.scss
@@ -0,0 +1,8 @@
+// XXX This file has been deprecated in favor of _variables.scss, and is no
+// longer relevant. Instead, set any variables that you wish to override, then
+// @import '{path/to/uswds/}core/variables';
+
+// For backwards compatibility with consumers of _defaults.scss, we just
+// re-import _variables here. This should be a noop if it has already been
+// imported, since every variable is declared with `!default`.
+@import './variables';
diff --git a/docs/_sass/uswds/core/_fonts.scss b/docs/_sass/uswds/core/_fonts.scss
new file mode 100644
index 0000000..be48fcf
--- /dev/null
+++ b/docs/_sass/uswds/core/_fonts.scss
@@ -0,0 +1,65 @@
+/* stylelint-disable at-rule-empty-line-before */
+@include font-face(
+ 'Source Sans Pro',
+ '#{$font-path}/sourcesanspro-light-webfont',
+ 300,
+ normal,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Source Sans Pro',
+ '#{$font-path}/sourcesanspro-regular-webfont',
+ 400,
+ normal,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Source Sans Pro',
+ '#{$font-path}/sourcesanspro-italic-webfont',
+ 400,
+ italic,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Source Sans Pro',
+ '#{$font-path}/sourcesanspro-bold-webfont',
+ 700,
+ normal,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Merriweather',
+ '#{$font-path}/merriweather-light-webfont',
+ 300,
+ normal,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Merriweather',
+ '#{$font-path}/merriweather-regular-webfont',
+ 400,
+ normal,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Merriweather',
+ '#{$font-path}/merriweather-italic-webfont',
+ 400,
+ italic,
+ $file-formats: eot woff2 woff ttf
+);
+
+@include font-face(
+ 'Merriweather',
+ '#{$font-path}/merriweather-bold-webfont',
+ 700,
+ normal,
+ $file-formats: eot woff2 woff ttf
+);
+/* stylelint-enable */
diff --git a/docs/_sass/uswds/core/_grid-settings.scss b/docs/_sass/uswds/core/_grid-settings.scss
new file mode 100644
index 0000000..ca6a632
--- /dev/null
+++ b/docs/_sass/uswds/core/_grid-settings.scss
@@ -0,0 +1,3 @@
+// XXX This file has been deprecated. Grid size variables
+// ($grid-columns-*) are now declared in _variables.scss as !default, and
+// can be overridden individually.
diff --git a/docs/_sass/uswds/core/_grid.scss b/docs/_sass/uswds/core/_grid.scss
new file mode 100644
index 0000000..a4ed81c
--- /dev/null
+++ b/docs/_sass/uswds/core/_grid.scss
@@ -0,0 +1,198 @@
+// Grid container
+.usa-grid,
+.usa-grid-full {
+ @include outer-container($site-max-width);
+}
+
+.usa-grid {
+ @include padding(null $site-margins-mobile);
+
+ @include media($medium-screen) {
+ @include padding(null $site-margins);
+ }
+}
+
+.usa-grid-full {
+ padding: 0;
+}
+
+// Grid items
+@include media($medium) {
+ .usa-width-one-whole {
+ @include span-columns(6);
+ }
+
+ .usa-width-one-half {
+ @include span-columns(3);
+ }
+
+ .usa-width-one-third {
+ @include span-columns(2);
+ }
+
+ .usa-width-two-thirds {
+ @include span-columns(4);
+ }
+
+ .usa-width-one-fourth {
+ @include span-columns(3);
+
+ &:nth-child(2n) {
+ margin-right: 0;
+ }
+ }
+
+ .usa-width-three-fourths {
+ @include span-columns(6);
+ }
+
+ .usa-width-one-sixth {
+ @include span-columns(2);
+
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+ }
+
+ .usa-width-five-sixths {
+ @include span-columns(4);
+ }
+
+ .usa-width-one-twelfth {
+ @include span-columns(2);
+
+ &:nth-child(3n) {
+ margin-right: 0;
+ }
+ }
+
+ .usa-width-five-twelfths {
+ @include span-columns(2);
+ }
+
+ .usa-width-seven-twelfths {
+ @include span-columns(4);
+ }
+}
+
+@include media($large) {
+ .usa-width-one-whole {
+ @include span-columns(12);
+ }
+
+ .usa-width-one-half {
+ @include span-columns(6);
+ }
+
+ .usa-width-one-third {
+ @include span-columns(4);
+ }
+
+ .usa-width-two-thirds {
+ @include span-columns(8);
+ }
+
+ .usa-width-one-fourth {
+ @include span-columns(3);
+
+ &:nth-child(2n) {
+ @include span-columns(3);
+ }
+
+ &:nth-child(4n) {
+ margin-right: 0;
+ }
+ }
+
+ .usa-width-three-fourths {
+ @include span-columns(9);
+ }
+
+ .usa-width-one-sixth {
+ @include span-columns(2);
+
+ &:nth-child(3n) {
+ @include span-columns(2);
+ }
+
+ &:nth-child(6n) {
+ margin-right: 0;
+ }
+ }
+
+ .usa-width-five-sixths {
+ @include span-columns(10);
+ }
+
+ .usa-width-one-twelfth {
+ @include span-columns(1);
+
+ &:nth-child(3n) {
+ @include span-columns(1);
+ }
+
+ &:nth-child(12n) {
+ margin-right: 0;
+ }
+ }
+
+ .usa-width-five-twelfths {
+ @include span-columns(5);
+ }
+
+ .usa-width-seven-twelfths {
+ @include span-columns(7);
+ }
+}
+
+// Specifies end of a row.
+// Required if grid-box contains multiple rows.
+// Required if browser does not support :last-child
+.usa-end-row {
+ @include omega();
+}
+
+// Grid Offsets
+.usa-offset-one-twelfth {
+ @include shift(1 of 12);
+}
+
+.usa-offset-one-sixth {
+ @include shift(2 of 12);
+}
+
+.usa-offset-one-fourth {
+ @include shift(3 of 12);
+}
+
+.usa-offset-one-third {
+ @include shift(4 of 12);
+}
+
+.usa-offset-five-twelfths {
+ @include shift(5 of 12);
+}
+
+.usa-offset-one-half {
+ @include shift(6 of 12);
+}
+
+.usa-offset-seven-twelfths {
+ @include shift(7 of 12);
+}
+
+.usa-offset-two-thirds {
+ @include shift(8 of 12);
+}
+
+.usa-offset-three-fourths {
+ @include shift(9 of 12);
+}
+
+.usa-offset-five-sixths {
+ @include shift(10 of 12);
+}
+
+.usa-offset-eleven-twelfths {
+ @include shift(11 of 12);
+}
diff --git a/docs/_sass/uswds/core/_utilities.scss b/docs/_sass/uswds/core/_utilities.scss
new file mode 100644
index 0000000..27b714a
--- /dev/null
+++ b/docs/_sass/uswds/core/_utilities.scss
@@ -0,0 +1,252 @@
+// Heading mixins
+@mixin title {
+ font-size: $title-font-size;
+ font-weight: $font-bold;
+}
+
+@mixin h1 {
+ font-size: $h1-font-size;
+ font-weight: $font-bold;
+}
+
+@mixin h2 {
+ font-size: $h2-font-size;
+ font-weight: $font-bold;
+}
+
+@mixin h3 {
+ font-size: $h3-font-size;
+ font-weight: $font-bold;
+}
+
+@mixin h4 {
+ font-size: $h4-font-size;
+ font-weight: $font-bold;
+}
+
+@mixin h5 {
+ font-size: $h5-font-size;
+ font-weight: $font-bold;
+}
+
+@mixin h6 {
+ font-size: $h6-font-size;
+ font-weight: $font-normal;
+ line-height: $base-line-height;
+ text-transform: uppercase;
+}
+
+// Focus state mixin
+@mixin focus {
+ outline: $focus-outline;
+ outline-offset: $focus-spacing;
+}
+
+// Mobile-first media query helper
+@mixin media($bp) {
+ @media screen and (min-width: #{$bp}) {
+ @content;
+ }
+}
+
+// Screen reader only helper
+@mixin sr-only() {
+ position: absolute;
+ left: -999em;
+}
+
+// This "negates" the sr-only() helper; useful if
+// we want the default state of something to be
+// for screen readers only, but we want to force
+// it to show for sighted users under more specific
+// conditions.
+@mixin not-sr-only() {
+ position: static;
+}
+
+.usa-sr-only {
+ @include sr-only();
+}
+
+// Aria hidden helper
+@mixin accessibly-hidden() {
+ &[aria-hidden=true] {
+ display: none;
+ }
+}
+
+// Unstyled list helper
+@mixin unstyled-list() {
+ @include margin(0 null);
+ list-style-type: none;
+ padding-left: 0;
+
+ > li {
+ margin-bottom: 0;
+ }
+}
+
+// Font smoothing mixin
+// Only use for light text on dark background
+// TODO: Remove after adding PostCSS
+@mixin font-smoothing {
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+}
+
+// Content size helpers
+@mixin allow-layout-classes {
+ @include margin(null auto);
+
+ &.width-one-half {
+ @include media($medium-screen) {
+ width: 50%;
+ }
+ }
+
+ &.width-one-third {
+ @include media($medium-screen) {
+ width: 33%;
+ }
+ }
+
+ &.width-two-thirds {
+ @include media($medium-screen) {
+ width: 67%;
+ }
+ }
+
+ &.width-one-fourth {
+ @include media($medium-screen) {
+ width: 25%;
+ }
+ }
+
+ &.width-three-fourths {
+ @include media($medium-screen) {
+ width: 75%;
+ }
+ }
+
+ &.align-left {
+ @include media($medium-screen) {
+ float: left;
+ margin-right: 2em;
+ margin-top: 0.5em;
+ }
+ }
+
+ &.align-right {
+ @include media($medium-screen) {
+ float: right;
+ margin-left: 2em;
+ margin-top: 0.5em;
+ }
+ }
+}
+
+@mixin display-icon($icon, $direction, $size, $margin, $hover) {
+ &::#{$direction} {
+ background-image: url('#{$image-path}/#{$icon}.png');
+ background-image: url('#{$image-path}/#{$icon}.svg');
+ background-size: 100%;
+ content: '';
+ display: inline-block;
+ height: $size;
+ width: $size;
+
+ /* stylelint-disable block-closing-brace-newline-after, at-rule-empty-line-before */
+ @if $direction == 'after' {
+ margin-left: $margin;
+ } @else {
+ margin-right: $margin;
+ }
+ /* stylelint-enable */
+ }
+
+ @if $hover == 'hover' {
+ &:hover::#{$direction} {
+ background-image: url('#{$image-path}/#{$icon}-hover.png');
+ background-image: url('#{$image-path}/#{$icon}-hover.svg');
+ }
+ }
+}
+
+@mixin usa-sidenav-list {
+ @include unstyled-list();
+
+ > li {
+ background-color: transparent;
+ border-top: 1px solid $color-gray;
+ font-size: $h4-font-size;
+
+ &:first-child {
+ border-top: none;
+ }
+ }
+
+ a {
+ border: none;
+ color: $color-base;
+ display: block;
+ font-family: $font-sans;
+ line-height: 1.3;
+ padding: 0.85rem 1rem 0.85rem $site-margins-mobile;
+ text-decoration: none;
+
+ &:hover {
+ background-color: $color-gray-lightest;
+ color: $color-primary;
+ text-decoration: none;
+ }
+
+ &:focus {
+ outline-offset: 0;
+ position: relative;
+ z-index: 1;
+ }
+
+ &.usa-current { /* stylelint-disable-line selector-no-qualifying-type */
+ border-left: $sidenav-current-border-width solid $color-primary;
+ color: $color-primary;
+ font-weight: $font-bold;
+ padding-left: $site-margins-mobile - $sidenav-current-border-width;
+ }
+ }
+}
+
+@mixin usa-sidenav-sublist {
+ @include unstyled-list();
+ margin: 0;
+ width: 100%;
+
+ li {
+ border: none;
+ font-size: $h5-font-size;
+ }
+
+ a {
+ padding-left: 2.8rem;
+ line-height: $heading-line-height;
+
+ &:hover,
+ &.usa-current { /* stylelint-disable-line selector-no-qualifying-type */
+ border: none;
+ padding-left: 2.8rem;
+ }
+ }
+
+ .usa-sidenav-sub_list {
+ a {
+ padding-left: 3.8rem;
+
+ &:focus {
+ outline-offset: 0;
+ }
+
+ &:hover {
+ padding-left: 3.8rem;
+ }
+ }
+ }
+}
diff --git a/docs/_sass/uswds/core/_variables-vendor.scss b/docs/_sass/uswds/core/_variables-vendor.scss
new file mode 100644
index 0000000..c1edb81
--- /dev/null
+++ b/docs/_sass/uswds/core/_variables-vendor.scss
@@ -0,0 +1,12 @@
+/// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag.
+///
+/// @type Bool
+///
+/// @example css - CSS Output
+/// html {
+/// box-sizing: border-box; }
+///
+/// *, *::after, *::before {
+/// box-sizing: inherit;
+/// }
+$border-box-sizing: false;
diff --git a/docs/_sass/uswds/core/_variables.scss b/docs/_sass/uswds/core/_variables.scss
new file mode 100644
index 0000000..b1f96ca
--- /dev/null
+++ b/docs/_sass/uswds/core/_variables.scss
@@ -0,0 +1,159 @@
+// These variables drive almost every aspect of the U.S. Web Design
+// system. Every variable is declared as !default so that it can be
+// overridden by a previous import.
+//
+// XXX Do not modify this file!
+//
+// If you want to override a variable, set that variable in one of your
+// own partials, then @import '{path/to/uswds/}core/variables'.
+
+// Typography
+// Removing the !default from $em-base so we are not inheriting that
+// value from Bourbon.
+$em-base: 10px;
+$base-font-size: 1.7rem !default;
+$small-font-size: 1.4rem !default;
+$lead-font-size: 2rem !default;
+$title-font-size: 5.2rem !default;
+$h1-font-size: 4rem !default;
+$h2-font-size: 3rem !default;
+$h3-font-size: 2rem !default;
+$h4-font-size: 1.7rem !default;
+$h5-font-size: 1.5rem !default;
+$h6-font-size: 1.3rem !default;
+$base-line-height: 1.5 !default;
+$heading-line-height: 1.3 !default;
+$lead-line-height: 1.7 !default;
+
+$font-sans: 'Source Sans Pro', $helvetica !default;
+$font-serif: 'Merriweather', $georgia !default;
+
+// TODO these should be called font-weight-${}
+$font-normal: 400 !default;
+$font-bold: 700 !default;
+
+// Color
+$color-blue: #0071bc !default;
+$color-blue-darker: #205493 !default;
+$color-blue-darkest: #132F50 !default; //#112e51
+
+$color-aqua: #02bfe7 !default;
+$color-aqua-dark: #00a6d2 !default;
+$color-aqua-darkest: #046b99 !default;
+$color-aqua-light: #9bdaf1 !default;
+$color-aqua-lightest: #e1f3f8 !default;
+
+$color-red: #e31c3d !default;
+$color-red-dark: #cd2026 !default;
+$color-red-darkest: #981b1e !default;
+$color-red-light: #e59393 !default;
+$color-red-lightest: #f9dede !default;
+
+$color-white: #ffffff !default;
+$color-black: #000000 !default;
+$color-black-light: #212121 !default;
+
+$color-gray-dark: #323a45 !default;
+$color-gray: #5b616b !default;
+$color-gray-medium: #757575 !default;
+$color-gray-light: #aeb0b5 !default;
+$color-gray-lighter: #d6d7d9 !default;
+$color-gray-lightest: #f1f1f1 !default;
+
+$color-gray-warm-dark: #494440 !default;
+$color-gray-warm-light: #e4e2e0 !default;
+$color-gray-cool-light: #dce4ef !default;
+
+$color-gold: #fdb81e !default;
+$color-gold-light: #f9c642 !default;
+$color-gold-lighter: #fad980 !default;
+$color-gold-lightest: #fff1d2 !default;
+
+$color-green: #2e8540 !default;
+$color-green-light: #4aa564 !default;
+$color-green-lighter: #94bfa2 !default;
+$color-green-lightest: #e7f4e4 !default;
+
+$color-cool-blue: #205493 !default;
+$color-cool-blue-light: #4773aa !default;
+$color-cool-blue-lighter: #8ba6ca !default;
+$color-cool-blue-lightest: #dce4ef !default;
+
+$color-purple: #4c2c92 !default;
+
+// Functional colors
+$color-primary: $color-blue !default;
+$color-primary-darker: $color-blue-darker !default;
+$color-primary-darkest: $color-blue-darkest !default;
+
+$color-primary-alt: $color-aqua !default;
+$color-primary-alt-dark: $color-aqua-dark !default;
+$color-primary-alt-darkest: $color-aqua-darkest !default;
+$color-primary-alt-light: $color-aqua-light !default;
+$color-primary-alt-lightest: $color-aqua-lightest !default;
+
+$color-secondary: $color-red !default;
+$color-secondary-dark: $color-red-dark !default;
+$color-secondary-darkest: $color-red-darkest !default;
+$color-secondary-light: $color-red-light !default;
+$color-secondary-lightest: $color-red-lightest !default;
+
+$color-base: $color-black-light !default;
+$color-focus: $color-gray-light !default;
+$color-visited: $color-purple !default;
+
+$color-shadow: rgba(#000, 0.3) !default;
+$color-transparent: rgba(#000, 0) !default;
+
+// Mobile First Breakpoints
+$small-screen: 481px !default;
+$medium-screen: 600px !default;
+$large-screen: 1201px !default;
+
+// Grid column counts by screen size
+$grid-columns-small: 1 !default;
+$grid-columns-medium: 6 !default;
+$grid-columns-large: 12 !default;
+
+// @media single-keyword helpers
+$small: new-breakpoint(min-width $small-screen $grid-columns-small) !default;
+$medium: new-breakpoint(min-width $medium-screen $grid-columns-medium) !default;
+$large: new-breakpoint(min-width $large-screen $grid-columns-large) !default;
+
+// Set the base path for assets (used for font and image paths below)
+$asset-path: '../' !default;
+
+// Relative font and image file paths
+$font-path: '#{$asset-path}fonts' !default;
+$image-path: '#{$asset-path}img' !default;
+
+// Set $asset-pipeline to true if you're using the Rails Asset Pipeline
+$asset-pipeline: false !default;
+
+// Magic Numbers
+$text-max-width: 66ch !default; // 66 characters per line
+$lead-max-width: 77rem !default;
+$site-max-width: 1040px !default;
+$site-margins: 3rem !default;
+$site-margins-mobile: 1.5rem !default;
+$article-max-width: 600px !default;
+$input-max-width: 46rem !default;
+$label-border-radius: 2px !default;
+$checkbox-border-radius: 2px !default;
+$border-radius: 3px !default;
+$button-border-radius: 5px !default;
+$box-shadow: 0 0 2px $color-shadow !default;
+$focus-outline: 2px dotted $color-gray-light !default;
+$focus-spacing: 3px !default;
+$nav-width: 951px !default;
+$sidenav-current-border-width: 0.4rem !default; // must be in rem for math
+
+// 44 x 44 pixels hit target following Apple iOS Human Interface
+// Guidelines
+$hit-area: 4.4rem !default;
+
+$spacing-x-small: 0.5rem;
+$spacing-small: 1rem;
+$spacing-md-small: 1.5rem;
+$spacing-medium: 2rem;
+$spacing-large: 3rem;
diff --git a/docs/_sass/uswds/elements/_buttons.scss b/docs/_sass/uswds/elements/_buttons.scss
new file mode 100644
index 0000000..276a58f
--- /dev/null
+++ b/docs/_sass/uswds/elements/_buttons.scss
@@ -0,0 +1,217 @@
+// Buttons variables
+
+$button-stroke: inset 0 0 0 2px;
+
+// Buttons
+
+// This mixin is only needed until we fully remove the
+// deprecated usa-button-disabled style.
+@mixin disabledesque {
+ background-color: $color-gray-lighter;
+ pointer-events: none;
+
+ &:hover,
+ &.usa-button-hover,
+ &:active,
+ &.usa-button-active,
+ &:focus,
+ &.usa-focus {
+ background-color: $color-gray-lighter;
+ border: 0;
+ box-shadow: none;
+ }
+}
+
+/* stylelint-disable selector-no-qualifying-type */
+.usa-button,
+.usa-button-primary,
+.usa-button:visited,
+.usa-button-primary:visited,
+button,
+[type=button],
+[type=submit],
+[type=reset],
+[type=image] {
+ @include font-smoothing;
+ @include margin(0.5em 0.5em 0.5em null);
+ appearance: none;
+ background-color: $color-primary;
+ border: 0;
+ border-radius: $button-border-radius;
+ color: $color-white;
+ cursor: pointer;
+ display: inline-block;
+ font-family: $font-sans;
+ font-size: $base-font-size;
+ font-weight: $font-bold;
+ line-height: 1;
+ padding: 1rem 2rem;
+ text-align: center;
+ text-decoration: none;
+ width: 100%;
+
+ @include media($small-screen) {
+ width: auto;
+ }
+
+ &:hover,
+ &.usa-button-hover {
+ background-color: $color-primary-darker;
+ border-bottom: 0;
+ color: $color-white;
+ text-decoration: none;
+ }
+
+ &:active,
+ &.usa-button-active {
+ background-color: $color-primary-darkest;
+ }
+
+ &.usa-button-primary-alt {
+ background-color: $color-primary-alt;
+ color: $color-base;
+
+ &:hover,
+ &.usa-button-hover {
+ background-color: $color-primary-alt-dark;
+ }
+
+ &:active,
+ &.usa-button-active {
+ background-color: $color-primary-alt-darkest;
+ color: $color-white;
+ }
+ }
+
+ &.usa-button-secondary {
+ background-color: $color-white;
+ box-shadow: $button-stroke $color-primary;
+ color: $color-primary;
+
+ &:hover,
+ &.usa-button-hover {
+ box-shadow: $button-stroke $color-primary-darker;
+ color: $color-primary-darker;
+ }
+
+ &:active,
+ &.usa-button-active {
+ box-shadow: $button-stroke $color-primary-darkest;
+ color: $color-primary-darkest;
+ }
+ }
+
+ &.usa-button-secondary-inverse,
+ &.usa-button-outline-inverse { // Outline inverse to be deprecated in 2.0
+ background: transparent;
+ box-shadow: $button-stroke $color-white;
+ color: $color-white;
+
+ &:hover,
+ &.usa-button-hover {
+ box-shadow: $button-stroke $color-gray-lighter;
+ color: $color-gray-lighter;
+ }
+
+ &:active,
+ &.usa-button-active {
+ box-shadow: $button-stroke $color-gray-light;
+ color: $color-gray-lighter;
+ }
+ }
+
+ &.usa-button-gray {
+ background-color: $color-gray;
+
+ &:hover,
+ &.usa-button-hover {
+ background-color: $color-gray-dark;
+ }
+
+ &:active,
+ &.usa-button-active {
+ background-color: $color-base;
+ }
+ }
+
+ &.usa-button-red {
+ background-color: $color-secondary;
+
+ &:hover,
+ &.usa-button-hover {
+ background-color: $color-secondary-dark;
+ }
+
+ &:active,
+ &.usa-button-active {
+ background-color: $color-secondary-darkest;
+ }
+ }
+
+ &.usa-button-big {
+ border-radius: 8px;
+ font-size: 2.4rem;
+ padding: 1.5rem 3rem;
+ }
+
+ &:disabled {
+ @include disabledesque;
+ }
+}
+/* stylelint-disable */
+
+.usa-button-disabled // Deprecated
+{
+ @include disabledesque
+}
+
+.usa-button-secondary-disabled, // Deprecated
+.usa-button-secondary-inverse-disabled, // Deprecated
+.usa-button-secondary:disabled,
+.usa-button-secondary-inverse:disabled,
+.usa-button-outline-inverse:disabled { // Outline inverse to be deprecated in 2.0
+ box-shadow: $button-stroke $color-gray-lighter;
+ pointer-events: none;
+ color: $color-gray-lighter;
+
+ &:hover,
+ &.usa-button-hover,
+ &:active,
+ &.usa-button-active,
+ &:focus,
+ &.usa-focus {
+ background-color: $color-white;
+ border: 0;
+ }
+}
+
+html .usa-button-secondary-disabled, // Deprecated
+.usa-button-secondary:disabled {
+ background-color: $color-white;
+}
+
+html .usa-button-secondary-inverse-disabled, // Deprecated
+.usa-button-secondary-inverse:disabled {
+ background-color: transparent;
+ color: $color-gray;
+ box-shadow: $button-stroke $color-gray;
+}
+
+@mixin button-unstyled {
+ background-color: transparent;
+ border: 0;
+ border-radius: 0;
+ font-weight: $font-normal;
+ margin: 0;
+ padding: 0;
+ text-align: left;
+ -webkit-font-smoothing: auto;
+
+ &:hover {
+ background-color: transparent;
+ }
+}
+
+.usa-button-unstyled {
+ @include button-unstyled;
+}
diff --git a/docs/_sass/uswds/elements/_embed.scss b/docs/_sass/uswds/elements/_embed.scss
new file mode 100644
index 0000000..284678e
--- /dev/null
+++ b/docs/_sass/uswds/elements/_embed.scss
@@ -0,0 +1,26 @@
+$aspect-height: 9;
+$aspect-width: 16;
+
+@mixin embed-container ($height, $width) {
+ padding-bottom: percentage($height/$width);
+}
+
+.usa-embed-container {
+ iframe,
+ object,
+ embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+}
+
+.usa-embed-container {
+ @include embed-container($aspect-height, $aspect-width);
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ max-width: 100%;
+}
diff --git a/docs/_sass/uswds/elements/_figure.scss b/docs/_sass/uswds/elements/_figure.scss
new file mode 100644
index 0000000..7af1259
--- /dev/null
+++ b/docs/_sass/uswds/elements/_figure.scss
@@ -0,0 +1,13 @@
+img {
+ max-width: 100%;
+}
+
+// TODO: Add documentation instructions for using this class on image links
+@mixin media-link {
+ display: inline-block;
+ line-height: 0;
+}
+
+.media_link {
+ @include media-link();
+}
diff --git a/docs/_sass/uswds/elements/_inputs.scss b/docs/_sass/uswds/elements/_inputs.scss
new file mode 100644
index 0000000..f12e34b
--- /dev/null
+++ b/docs/_sass/uswds/elements/_inputs.scss
@@ -0,0 +1,368 @@
+// scss-lint:disable QualifyingElement, PropertyCount
+
+$input-line-height: 1.3;
+$input-border-width: 0.1rem; // Using rem instead of px so function uses same units
+$input-padding-vertical: 1rem;
+
+// input heights will vary by browser and type
+// if height not explicitly set
+$input-height-exact: (
+ ($base-font-size * $input-line-height) +
+ ($input-padding-vertical * 2) +
+ ($input-border-width * 2)
+);
+
+// truncated to 1 decimal place
+// (i.e., 1.21rem -> 1.2rem)
+$input-height: floor($input-height-exact * 10) / 10;
+
+// Block form elements
+/* stylelint-disable selector-no-qualifying-type */
+input,
+textarea,
+select {
+ appearance: none;
+ border: $input-border-width solid $color-gray;
+ border-radius: 0;
+ box-sizing: border-box;
+ color: $color-base; // standardize on firefox
+ display: block;
+ font-size: $base-font-size;
+ height: $input-height;
+ line-height: $input-line-height;
+ margin: 0.2em 0;
+ max-width: $input-max-width;
+ padding: $input-padding-vertical 0.7em;
+ width: 100%;
+
+ &.usa-input-success {
+ border: 3px solid $color-green-light;
+ }
+}
+/* stylelint-enable */
+
+.usa-input-error {
+ border-left: 4px solid $color-secondary-dark;
+ margin-top: 3rem;
+ padding-bottom: 0.8rem;
+ padding-left: 1.5rem;
+ padding-top: 0.8rem;
+ position: relative;
+ right: 1.9rem;
+
+ input,
+ textarea,
+ select {
+ border: 3px solid $color-secondary-dark;
+ width: calc(100% + 1.9rem); // 1.5rem left padding + 4px border from input error spacing
+ }
+
+ label {
+ margin-top: 0;
+ }
+
+ .usa-input-inline {
+ border: $input-border-width solid $color-gray;
+ width: inherit;
+ }
+
+ .usa-input-inline-error {
+ border: 3px solid $color-secondary-dark;
+ }
+}
+
+.usa-input-error-label {
+ display: block;
+ font-size: $base-font-size;
+ font-weight: $font-bold;
+}
+
+.usa-input-error-message {
+ color: $color-secondary-dark;
+ display: block;
+ font-size: $base-font-size;
+ font-weight: $font-bold;
+ padding-bottom: 3px;
+ padding-top: 3px;
+}
+
+// Deprecated: Some screen readers can't read CSS content.
+// Will be removed in 2.0.
+.usa-input-required:after {
+ color: $color-secondary-darkest;
+ content: ' (*required)';
+}
+
+// Deprecated: Some screen readers can't read CSS content.
+// Will be removed in 2.0.
+.usa-input-optional:after {
+ color: $color-gray-medium;
+ content: ' (optional)';
+}
+
+.usa-input-label-helper {
+ color: $color-gray-medium;
+}
+
+.usa-input-label-required {
+ color: $color-secondary-darkest;
+}
+
+label {
+ display: block;
+ margin-top: 3rem;
+ max-width: $input-max-width;
+}
+
+textarea {
+ height: 16rem;
+}
+
+select {
+ appearance: none;
+ background-color: $color-white;
+ background-image: url('#{$image-path}/arrow-both.png');
+ // Ensure browsers that don't support SVG in background-image (IE 11 and below) fall back to PNG.
+ // See https://www.broken-links.com/2010/06/14/using-svg-in-backgrounds-with-png-fallback/
+ background-image: none, url('#{$image-path}/arrow-both.svg'), url('#{$image-path}/arrow-both.png');
+ background-position: right 1.3rem center;
+ background-repeat: no-repeat;
+ background-size: 1rem;
+ padding-right: 3rem;
+
+ &::-ms-expand {
+ display: none;
+ }
+
+ // Show default webkit style on select element when autofilled to show icon
+ &:-webkit-autofill {
+ appearance: menulist;
+ }
+
+ // Remove dotted outline from select element on focus in Firefox
+ &:-moz-focusring {
+ color: transparent;
+ text-shadow: 0 0 0 $color-black;
+ }
+}
+
+option:first-child {
+ font-weight: $font-bold;
+}
+
+legend {
+ font-size: $h2-font-size;
+ font-weight: $font-bold;
+}
+
+.usa-fieldset-inputs {
+ label {
+ margin-top: 0;
+ }
+}
+
+// Hint text
+
+.usa-form-hint {
+ color: $color-gray-medium;
+ font-family: $font-sans;
+ margin-bottom: 0;
+}
+
+// Custom checkboxes
+
+[type=checkbox],
+[type=radio] {
+ // The actual input element is only visible to screen readers, because
+ // all visual styling is done via the label.
+ @include sr-only();
+
+ .lt-ie9 & {
+ border: 0;
+ float: left;
+ margin: 0.4em 0.4em 0 0;
+ position: static;
+ width: auto;
+ }
+}
+
+[type=checkbox] + label,
+[type=radio] + label {
+ cursor: pointer;
+ font-weight: 400;
+ margin-bottom: 0.65em;
+}
+
+[type=checkbox] + label::before,
+[type=radio] + label::before {
+ background: $color-white;
+ border-radius: $checkbox-border-radius;
+ box-shadow: 0 0 0 1px $color-gray-medium;
+ content: '\a0';
+ display: inline-block;
+ height: $spacing-medium;
+ line-height: $spacing-medium;
+ margin-right: 0.6em;
+ text-indent: 0.15em;
+ vertical-align: middle\0; // Target IE 11 and below to vertically center inputs
+ width: $spacing-medium;
+}
+
+[type=radio] + label::before {
+ border-radius: 100%;
+ box-shadow: 0 0 0 2px $color-white, 0 0 0 3px $color-gray-medium;
+ height: 1.4rem; // Size overrides to account for shape + checked styling
+ line-height: 1.4rem;
+ margin-right: 0.75em;
+ width: 1.4rem;
+}
+
+[type=checkbox]:checked + label::before,
+[type=radio]:checked + label::before {
+ background-color: $color-primary;
+ box-shadow: 0 0 0 1px $color-primary;
+}
+
+[type=radio]:checked + label::before {
+ box-shadow: 0 0 0 2px $color-white, 0 0 0 4px $color-primary;
+}
+
+[type=checkbox]:checked + label::before,
+[type=checkbox]:checked:disabled + label::before {
+ background-image: url('#{$image-path}/correct8.png');
+ background-image: url('#{$image-path}/correct8.svg');
+ background-position: 50%;
+ background-repeat: no-repeat;
+}
+
+[type=radio]:focus + label::before {
+ outline: $focus-outline;
+ outline-offset: $focus-spacing * 2; // Double the offset to account for circular shape
+}
+
+[type=checkbox]:disabled + label {
+ color: $color-gray-lighter;
+}
+
+[type=checkbox]:focus + label::before {
+ outline: $focus-outline;
+ outline-offset: $focus-spacing;
+}
+
+[type=checkbox]:disabled + label::before,
+[type=radio]:disabled + label::before {
+ background: $color-gray-lightest;
+ box-shadow: 0 0 0 1px $color-gray-light;
+ cursor: not-allowed;
+}
+
+// Range inputs
+
+[type=range] {
+ appearance: none;
+ border: none;
+ padding-left: 0;
+ width: 100%;
+}
+
+[type=range]::-webkit-slider-runnable-track {
+ background: $color-gray-light;
+ border: 1px solid $color-gray-medium;
+ cursor: pointer;
+ height: 1.2rem;
+ width: 100%;
+}
+
+[type=range]::-moz-range-track {
+ background: $color-primary;
+ border: 1px solid $color-gray-medium;
+ cursor: pointer;
+ height: 1.2rem;
+ width: 100%;
+}
+
+[type=range]::-ms-track {
+ background: transparent;
+ color: transparent;
+ cursor: pointer;
+ height: 1.2rem;
+ width: 100%;
+}
+
+[type=range]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ border: 1px solid $color-gray-medium;
+ height: 2.2rem;
+ border-radius: 1.5rem;
+ background: $color-gray-lightest;
+ cursor: pointer;
+ margin-top: -.65rem;
+ width: 2.2rem;
+}
+
+[type=range]::-moz-range-thumb {
+ background: $color-gray-lightest;
+ border: 1px solid $color-gray-medium;
+ border-radius: 1.5rem;
+ cursor: pointer;
+ height: 2.2rem;
+ width: 2.2rem;
+}
+
+[type=range]::-ms-thumb {
+ background: $color-gray-lightest;
+ border: 1px solid $color-gray-medium;
+ border-radius: 1.5rem;
+ cursor: pointer;
+ height: 2.2rem;
+ width: 2.2rem;
+}
+
+[type=range]::-ms-fill-lower {
+ background: $color-gray-light;
+ border: 1px solid $color-gray-medium;
+ border-radius: 2rem;
+}
+
+[type=range]::-ms-fill-upper {
+ background: $color-gray-light;
+ border: 1px solid $color-gray-medium;
+ border-radius: 2rem;
+}
+
+// File input type
+[type='file'] {
+ border: none;
+ padding-left: 0;
+}
+
+// Memorable dates
+
+.usa-date-of-birth {
+ label {
+ margin-top: 0;
+ }
+
+ [type=number]::-webkit-inner-spin-button,
+ [type=number]::-webkit-outer-spin-button {
+ appearance: none;
+ margin: 0;
+ }
+
+ [type=number] {
+ -moz-appearance: textfield;
+ }
+}
+
+.usa-form-group-day,
+.usa-form-group-month,
+.usa-form-group-year {
+ clear: none;
+ float: left;
+ margin-right: 1.5rem;
+ width: 5rem;
+}
+
+.usa-form-group-year {
+ width: 7rem;
+}
diff --git a/docs/_sass/uswds/elements/_labels.scss b/docs/_sass/uswds/elements/_labels.scss
new file mode 100644
index 0000000..99fa0f5
--- /dev/null
+++ b/docs/_sass/uswds/elements/_labels.scss
@@ -0,0 +1,20 @@
+.usa-label {
+ background-color: $color-gray;
+ border-radius: $label-border-radius;
+ color: $color-white;
+ font-size: $h5-font-size;
+ margin-right: 0.5rem;
+ padding: 0.1rem 0.7rem;
+ text-transform: uppercase;
+
+ &:only-of-type {
+ margin-right: 0;
+ }
+}
+
+.usa-label-big {
+ @extend .usa-label;
+ font-size: $base-font-size;
+ padding-left: 0.9rem;
+ padding-right: 0.9rem;
+}
diff --git a/docs/_sass/uswds/elements/_list.scss b/docs/_sass/uswds/elements/_list.scss
new file mode 100644
index 0000000..958450f
--- /dev/null
+++ b/docs/_sass/uswds/elements/_list.scss
@@ -0,0 +1,19 @@
+ul,
+ol {
+ @include margin(1em null);
+ padding-left: 1.94em; // Approximately 15px left padding at default font size
+}
+
+li {
+ line-height: $base-line-height;
+ margin-bottom: 0.5em;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+}
+
+// Unstyled lists
+.usa-unstyled-list {
+ @include unstyled-list;
+}
diff --git a/docs/_sass/uswds/elements/_table.scss b/docs/_sass/uswds/elements/_table.scss
new file mode 100644
index 0000000..6faff58
--- /dev/null
+++ b/docs/_sass/uswds/elements/_table.scss
@@ -0,0 +1,55 @@
+table {
+ border-spacing: 0;
+ margin: 2em 0;
+}
+
+thead {
+ th {
+ font-weight: $font-bold;
+ }
+
+ th,
+ td {
+ background-color: $color-gray-lightest;
+ }
+}
+
+th {
+ text-align: left;
+}
+
+th,
+td {
+ background-color: $color-white;
+ border: 1px solid $color-gray;
+ font-weight: $font-normal;
+ padding: 1rem 1.5rem;
+}
+
+.usa-table-borderless {
+ thead {
+ th {
+ background-color: transparent;
+ border-top: 0;
+ }
+ }
+
+ th,
+ td {
+ border-left: 0;
+ border-right: 0;
+ }
+
+ th {
+ &:first-child {
+ padding-left: 0;
+ }
+ }
+}
+
+caption {
+ @include h5;
+ font-family: $font-serif;
+ margin-bottom: 1.2rem;
+ text-align: left;
+}
diff --git a/docs/_sass/uswds/elements/_typography.scss b/docs/_sass/uswds/elements/_typography.scss
new file mode 100644
index 0000000..c2c70f3
--- /dev/null
+++ b/docs/_sass/uswds/elements/_typography.scss
@@ -0,0 +1,238 @@
+html {
+ font-family: $font-sans;
+ font-size: $em-base;
+}
+
+body {
+ font-size: $base-font-size;
+}
+
+p {
+ line-height: $base-line-height;
+ margin-bottom: 1em;
+ margin-top: 1em;
+}
+
+a {
+ color: $color-primary;
+ text-decoration: underline;
+
+ &:hover,
+ &:active {
+ color: $color-primary-darker;
+ }
+
+ &:focus {
+ @include focus;
+ }
+
+ &:visited {
+ color: $color-visited;
+ }
+}
+
+@mixin external-link($external-link, $external-link-hover) {
+ &::after {
+ background: url('#{$image-path}/#{$external-link}.png') no-repeat 0 0;
+ background: url('#{$image-path}/#{$external-link}.svg') no-repeat 0 0;
+ background-size: 100%;
+ content: '';
+ display: inline-block;
+ height: 0.65em;
+ margin-bottom: -1px;
+ margin-left: 4px;
+ width: 0.65em;
+ }
+
+ &:hover::after {
+ background-image: url('#{$image-path}/#{$external-link-hover}.png');
+ background-image: url('#{$image-path}/#{$external-link-hover}.svg');
+ }
+}
+
+// External link consider "effortless style approach":
+// [href^="http:"]:not([href*="my-domain.com"])
+// [href^="https:"]:not([href*="my-domain.com"])
+
+.usa-external_link {
+ @include external-link(external-link, external-link-hover);
+}
+
+.usa-external_link-alt {
+ @include external-link(external-link-alt, external-link-alt-hover);
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ clear: both;
+ font-family: $font-serif;
+ line-height: $heading-line-height;
+ margin-bottom: 0.5em;
+ margin-top: 1.5em;
+}
+
+h1 {
+ @include h1();
+}
+
+h2 {
+ @include h2();
+}
+
+h3 {
+ @include h3();
+}
+
+h4 {
+ @include h4();
+}
+
+h5 {
+ @include h5();
+}
+
+h6 {
+ @include h6();
+ font-family: $font-sans;
+}
+
+// Remove user agent styles
+
+cite,
+var,
+address,
+dfn {
+ font-style: normal;
+}
+
+// Custom typography
+
+.usa-content {
+ p,
+ ul:not(.usa-accordion):not(.usa-accordion-bordered),
+ ol:not(.usa-accordion):not(.usa-accordion-bordered) {
+ max-width: $text-max-width;
+ }
+}
+
+.usa-content-list {
+ max-width: $text-max-width;
+}
+
+.usa-sans {
+ p,
+ a,
+ li,
+ span {
+ font-family: $font-sans;
+ }
+
+ a {
+ border-bottom: none;
+ font-weight: $font-bold;
+ }
+}
+
+.usa-serif {
+ p,
+ a,
+ li,
+ span {
+ font-family: $font-serif;
+ }
+}
+
+.usa-display {
+ @include h3();
+ margin-bottom: 0;
+
+ @include media($small-screen) {
+ @include h1();
+ }
+
+ @include media($medium-screen) {
+ @include title();
+ }
+}
+
+.usa-font-lead {
+ font-family: $font-serif;
+ font-size: $lead-font-size;
+ font-weight: $font-normal;
+ line-height: $lead-line-height;
+ max-width: $lead-max-width;
+}
+
+.usa-background-dark {
+ background-color: $color-gray-dark;
+
+ p,
+ span {
+ color: $color-white;
+ }
+
+ a {
+ color: $color-gray-lighter;
+
+ &:hover {
+ color: $color-white;
+ }
+ }
+}
+
+.usa-text-small {
+ font-size: $h6-font-size;
+ margin-top: 0;
+}
+
+// Removes top margin from first child and bottom margin from last child on
+// elements when they are within those layout elements.
+.usa-section,
+.usa-grid,
+.usa-grid-full {
+ > :first-child {
+ margin-top: 0;
+ }
+
+ > :last-child {
+ margin-bottom: 0;
+ }
+}
+
+.usa-width-one-whole,
+.usa-width-one-half,
+.usa-width-one-third,
+.usa-width-two-thirds,
+.usa-width-one-fourth,
+.usa-width-three-fourths,
+.usa-width-one-sixth,
+.usa-width-five-sixths,
+.usa-width-one-twelfth {
+ &:first-child {
+ > :first-child {
+ margin-top: 0;
+ }
+ }
+
+ > :first-child {
+ @include media($medium-screen) {
+ margin-top: 0;
+ }
+ }
+
+ &:last-child {
+ > :last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ > :last-child {
+ @include media($medium-screen) {
+ margin-bottom: 0;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/_bourbon-deprecated-upcoming.scss b/docs/_sass/uswds/lib/_bourbon-deprecated-upcoming.scss
new file mode 100644
index 0000000..e6d1b8c
--- /dev/null
+++ b/docs/_sass/uswds/lib/_bourbon-deprecated-upcoming.scss
@@ -0,0 +1,411 @@
+// The following features have been deprecated and will be removed in the next MAJOR version release
+
+@mixin inline-block {
+ display: inline-block;
+
+ @warn "The inline-block mixin is deprecated and will be removed in the next major version release";
+}
+
+@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) {
+
+ @if type-of($style) == string and type-of($base-color) == color {
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == string and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: #4294f0;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == color {
+ $base-color: $style;
+ $style: simple;
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == color and type-of($base-color) == number {
+ $padding: $text-size;
+ $text-size: $base-color;
+ $base-color: $style;
+ $style: simple;
+
+ @if $padding == inherit {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ @if type-of($style) == number {
+ $padding: $base-color;
+ $text-size: $style;
+ $base-color: #4294f0;
+ $style: simple;
+
+ @if $padding == #4294f0 {
+ $padding: 7px 18px;
+ }
+
+ @include buttonstyle($style, $base-color, $text-size, $padding);
+ }
+
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 0.5;
+ }
+
+ @warn "The button mixin is deprecated and will be removed in the next major version release";
+}
+
+// Selector Style Button
+@mixin buttonstyle($type, $b-color, $t-size, $pad) {
+ // Grayscale button
+ @if $type == simple and $b-color == grayscale($b-color) {
+ @include simple($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == shiny and $b-color == grayscale($b-color) {
+ @include shiny($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == pill and $b-color == grayscale($b-color) {
+ @include pill($b-color, true, $t-size, $pad);
+ }
+
+ @if $type == flat and $b-color == grayscale($b-color) {
+ @include flat($b-color, true, $t-size, $pad);
+ }
+
+ // Colored button
+ @if $type == simple {
+ @include simple($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == shiny {
+ @include shiny($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == pill {
+ @include pill($b-color, false, $t-size, $pad);
+ }
+
+ @else if $type == flat {
+ @include flat($b-color, false, $t-size, $pad);
+ }
+}
+
+// Simple Button
+@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);
+ $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);
+ $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-decoration: none;
+ text-shadow: 0 1px 0 $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);
+ $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ }
+
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);
+ $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);
+
+ @if $grayscale == true {
+ $border-active: grayscale($border-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ border: 1px solid $border-active;
+ box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active;
+ }
+}
+
+// Shiny Button
+@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);
+ $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);
+ $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);
+ $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);
+ $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);
+ $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);
+ $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border: grayscale($border);
+ $border-bottom: grayscale($border-bottom);
+ $fourth-stop: grayscale($fourth-stop);
+ $inset-shadow: grayscale($inset-shadow);
+ $second-stop: grayscale($second-stop);
+ $text-shadow: grayscale($text-shadow);
+ $third-stop: grayscale($third-stop);
+ }
+
+ @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);
+
+ border: 1px solid $border;
+ border-bottom: 1px solid $border-bottom;
+ border-radius: 5px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+
+ &:hover:not(:disabled) {
+ $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);
+ $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);
+ $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);
+ $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);
+
+ @if $grayscale == true {
+ $first-stop-hover: grayscale($first-stop-hover);
+ $second-stop-hover: grayscale($second-stop-hover);
+ $third-stop-hover: grayscale($third-stop-hover);
+ $fourth-stop-hover: grayscale($fourth-stop-hover);
+ }
+
+ @include linear-gradient(top, $first-stop-hover 0%,
+ $second-stop-hover 50%,
+ $third-stop-hover 50%,
+ $fourth-stop-hover 100%);
+ cursor: pointer;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);
+
+ @if $grayscale == true {
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ }
+
+ box-shadow: inset 0 0 20px 0 $inset-shadow-active;
+ }
+}
+
+// Pill Button
+@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);
+ $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);
+ $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);
+ $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);
+ }
+
+ @if $grayscale == true {
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow: grayscale($inset-shadow);
+ $stop-gradient: grayscale($stop-gradient);
+ $text-shadow: grayscale($text-shadow);
+ }
+
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ border-radius: 16px;
+ box-shadow: inset 0 1px 0 0 $inset-shadow;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: normal;
+ line-height: 1;
+ @include linear-gradient ($base-color, $stop-gradient);
+ padding: $padding;
+ text-align: center;
+ text-decoration: none;
+ text-shadow: 0 -1px 1px $text-shadow;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled) {
+ $base-color-hover: adjust-color($base-color, $lightness: -4.5%);
+ $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);
+ $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);
+ $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);
+ $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);
+ $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);
+ $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ $border-bottom: grayscale($border-bottom);
+ $border-sides: grayscale($border-sides);
+ $border-top: grayscale($border-top);
+ $inset-shadow-hover: grayscale($inset-shadow-hover);
+ $stop-gradient-hover: grayscale($stop-gradient-hover);
+ $text-shadow-hover: grayscale($text-shadow-hover);
+ }
+
+ @include linear-gradient ($base-color-hover, $stop-gradient-hover);
+
+ background-clip: padding-box;
+ border: 1px solid $border-top;
+ border-color: $border-top $border-sides $border-bottom;
+ box-shadow: inset 0 1px 0 0 $inset-shadow-hover;
+ cursor: pointer;
+ text-shadow: 0 -1px 1px $text-shadow-hover;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);
+ $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);
+ $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);
+ $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);
+ $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);
+
+ @if $grayscale == true {
+ $active-color: grayscale($active-color);
+ $border-active: grayscale($border-active);
+ $border-bottom-active: grayscale($border-bottom-active);
+ $inset-shadow-active: grayscale($inset-shadow-active);
+ $text-shadow-active: grayscale($text-shadow-active);
+ }
+
+ background: $active-color;
+ border: 1px solid $border-active;
+ border-bottom: 1px solid $border-bottom-active;
+ box-shadow: inset 0 0 6px 3px $inset-shadow-active;
+ text-shadow: 0 -1px 1px $text-shadow-active;
+ }
+}
+
+// Flat Button
+@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {
+ $color: hsl(0, 0, 100%);
+
+ @if is-light($base-color) {
+ $color: hsl(0, 0, 20%);
+ }
+
+ background-color: $base-color;
+ border-radius: 3px;
+ border: 0;
+ color: $color;
+ display: inline-block;
+ font-size: $textsize;
+ font-weight: bold;
+ padding: $padding;
+ text-decoration: none;
+ background-clip: padding-box;
+
+ &:hover:not(:disabled){
+ $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%);
+
+ @if $grayscale == true {
+ $base-color-hover: grayscale($base-color-hover);
+ }
+
+ background-color: $base-color-hover;
+ cursor: pointer;
+ }
+
+ &:active:not(:disabled),
+ &:focus:not(:disabled) {
+ $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%);
+
+ @if $grayscale == true {
+ $base-color-active: grayscale($base-color-active);
+ }
+
+ background-color: $base-color-active;
+ cursor: pointer;
+ }
+}
+
+// Flexible grid
+@function flex-grid($columns, $container-columns: $fg-max-columns) {
+ $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($width / $container-width);
+
+ @warn "The flex-grid function is deprecated and will be removed in the next major version release";
+}
+
+// Flexible gutter
+@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($gutter / $container-width);
+
+ @warn "The flex-gutter function is deprecated and will be removed in the next major version release";
+}
+
+@function grid-width($n) {
+ @return $n * $gw-column + ($n - 1) * $gw-gutter;
+
+ @warn "The grid-width function is deprecated and will be removed in the next major version release";
+}
+
+@function golden-ratio($value, $increment) {
+ @return modular-scale($increment, $value, $ratio: $golden);
+
+ @warn "The golden-ratio function is deprecated and will be removed in the next major version release. Please use the modular-scale function, instead.";
+}
+
+@mixin box-sizing($box) {
+ @include prefixer(box-sizing, $box, webkit moz spec);
+
+ @warn "The box-sizing mixin is deprecated and will be removed in the next major version release. This property can now be used un-prefixed.";
+}
diff --git a/docs/_sass/uswds/lib/_bourbon.scss b/docs/_sass/uswds/lib/_bourbon.scss
new file mode 100644
index 0000000..635c680
--- /dev/null
+++ b/docs/_sass/uswds/lib/_bourbon.scss
@@ -0,0 +1,87 @@
+// Bourbon 4.2.7
+// http://bourbon.io
+// Copyright 2011-2015 thoughtbot, inc.
+// MIT License
+
+@import "settings/prefixer";
+@import "settings/px-to-em";
+@import "settings/asset-pipeline";
+
+@import "functions/assign-inputs";
+@import "functions/contains";
+@import "functions/contains-falsy";
+@import "functions/is-length";
+@import "functions/is-light";
+@import "functions/is-number";
+@import "functions/is-size";
+@import "functions/px-to-em";
+@import "functions/px-to-rem";
+@import "functions/shade";
+@import "functions/strip-units";
+@import "functions/tint";
+@import "functions/transition-property-name";
+@import "functions/unpack";
+@import "functions/modular-scale";
+
+@import "helpers/convert-units";
+@import "helpers/directional-values";
+@import "helpers/font-source-declaration";
+@import "helpers/gradient-positions-parser";
+@import "helpers/linear-angle-parser";
+@import "helpers/linear-gradient-parser";
+@import "helpers/linear-positions-parser";
+@import "helpers/linear-side-corner-parser";
+@import "helpers/radial-arg-parser";
+@import "helpers/radial-positions-parser";
+@import "helpers/radial-gradient-parser";
+@import "helpers/render-gradients";
+@import "helpers/shape-size-stripper";
+@import "helpers/str-to-num";
+
+@import "css3/animation";
+@import "css3/appearance";
+@import "css3/backface-visibility";
+@import "css3/background";
+@import "css3/background-image";
+@import "css3/border-image";
+@import "css3/calc";
+@import "css3/columns";
+@import "css3/filter";
+@import "css3/flex-box";
+@import "css3/font-face";
+@import "css3/font-feature-settings";
+@import "css3/hidpi-media-query";
+@import "css3/hyphens";
+@import "css3/image-rendering";
+@import "css3/keyframes";
+@import "css3/linear-gradient";
+@import "css3/perspective";
+@import "css3/placeholder";
+@import "css3/radial-gradient";
+@import "css3/selection";
+@import "css3/text-decoration";
+@import "css3/transform";
+@import "css3/transition";
+@import "css3/user-select";
+
+@import "addons/border-color";
+@import "addons/border-radius";
+@import "addons/border-style";
+@import "addons/border-width";
+@import "addons/buttons";
+@import "addons/clearfix";
+@import "addons/ellipsis";
+@import "addons/font-stacks";
+@import "addons/hide-text";
+@import "addons/margin";
+@import "addons/padding";
+@import "addons/position";
+@import "addons/prefixer";
+@import "addons/retina-image";
+@import "addons/size";
+@import "addons/text-inputs";
+@import "addons/timing-functions";
+@import "addons/triangle";
+@import "addons/word-wrap";
+
+@import "bourbon-deprecated-upcoming";
diff --git a/docs/_sass/uswds/lib/_neat-helpers.scss b/docs/_sass/uswds/lib/_neat-helpers.scss
new file mode 100644
index 0000000..2d6d808
--- /dev/null
+++ b/docs/_sass/uswds/lib/_neat-helpers.scss
@@ -0,0 +1,11 @@
+// Mixins
+@import "mixins/clearfix";
+
+// Functions
+@import "functions/private";
+@import "functions/new-breakpoint";
+
+// Settings
+@import "settings/grid";
+@import "settings/visual-grid";
+@import "settings/disable-warnings";
diff --git a/docs/_sass/uswds/lib/_neat.scss b/docs/_sass/uswds/lib/_neat.scss
new file mode 100644
index 0000000..e172171
--- /dev/null
+++ b/docs/_sass/uswds/lib/_neat.scss
@@ -0,0 +1,23 @@
+// Neat 1.8.0
+// http://neat.bourbon.io
+// Copyright 2012-2015 thoughtbot, inc.
+// MIT License
+
+// Helpers
+@import "neat-helpers";
+
+// Grid
+@import "grid/private";
+@import "grid/box-sizing";
+@import "grid/omega";
+@import "grid/outer-container";
+@import "grid/span-columns";
+@import "grid/row";
+@import "grid/shift";
+@import "grid/pad";
+@import "grid/fill-parent";
+@import "grid/media";
+@import "grid/to-deprecate";
+@import "grid/visual-grid";
+@import "grid/display-context";
+@import "grid/direction-context";
diff --git a/docs/_sass/uswds/lib/_normalize.scss b/docs/_sass/uswds/lib/_normalize.scss
new file mode 100644
index 0000000..5e5e3c8
--- /dev/null
+++ b/docs/_sass/uswds/lib/_normalize.scss
@@ -0,0 +1,424 @@
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS and IE text size adjust after device orientation change,
+ * without disabling user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability of focused elements when they are also in an
+ * active/hover state.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ box-sizing: content-box; /* 2 */
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
diff --git a/docs/_sass/uswds/lib/addons/_border-color.scss b/docs/_sass/uswds/lib/addons/_border-color.scss
new file mode 100644
index 0000000..6f6ab36
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_border-color.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// Provides a quick method for targeting `border-color` on specific sides of a box. Use a `null` value to “skip” a side.
+///
+/// @param {Arglist} $vals
+/// List of arguments
+///
+/// @example scss - Usage
+/// .element {
+/// @include border-color(#a60b55 #76cd9c null #e8ae1a);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// border-left-color: #e8ae1a;
+/// border-right-color: #76cd9c;
+/// border-top-color: #a60b55;
+/// }
+///
+/// @require {mixin} directional-property
+///
+/// @output `border-color`
+
+@mixin border-color($vals...) {
+ @include directional-property(border, color, $vals...);
+}
diff --git a/docs/_sass/uswds/lib/addons/_border-radius.scss b/docs/_sass/uswds/lib/addons/_border-radius.scss
new file mode 100644
index 0000000..1f65863
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_border-radius.scss
@@ -0,0 +1,48 @@
+@charset "UTF-8";
+
+/// Provides a quick method for targeting `border-radius` on both corners on the side of a box.
+///
+/// @param {Number} $radii
+/// List of arguments
+///
+/// @example scss - Usage
+/// .element-one {
+/// @include border-top-radius(5px);
+/// }
+///
+/// .element-two {
+/// @include border-left-radius(3px);
+/// }
+///
+/// @example css - CSS Output
+/// .element-one {
+/// border-top-left-radius: 5px;
+/// border-top-right-radius: 5px;
+/// }
+///
+/// .element-two {
+/// border-bottom-left-radius: 3px;
+/// border-top-left-radius: 3px;
+/// }
+///
+/// @output `border-radius`
+
+@mixin border-top-radius($radii) {
+ border-top-left-radius: $radii;
+ border-top-right-radius: $radii;
+}
+
+@mixin border-right-radius($radii) {
+ border-bottom-right-radius: $radii;
+ border-top-right-radius: $radii;
+}
+
+@mixin border-bottom-radius($radii) {
+ border-bottom-left-radius: $radii;
+ border-bottom-right-radius: $radii;
+}
+
+@mixin border-left-radius($radii) {
+ border-bottom-left-radius: $radii;
+ border-top-left-radius: $radii;
+}
diff --git a/docs/_sass/uswds/lib/addons/_border-style.scss b/docs/_sass/uswds/lib/addons/_border-style.scss
new file mode 100644
index 0000000..d86ee79
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_border-style.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides a quick method for targeting `border-style` on specific sides of a box. Use a `null` value to “skip” a side.
+///
+/// @param {Arglist} $vals
+/// List of arguments
+///
+/// @example scss - Usage
+/// .element {
+/// @include border-style(dashed null solid);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// border-bottom-style: solid;
+/// border-top-style: dashed;
+/// }
+///
+/// @require {mixin} directional-property
+///
+/// @output `border-style`
+
+@mixin border-style($vals...) {
+ @include directional-property(border, style, $vals...);
+}
diff --git a/docs/_sass/uswds/lib/addons/_border-width.scss b/docs/_sass/uswds/lib/addons/_border-width.scss
new file mode 100644
index 0000000..0ea2d4b
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_border-width.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides a quick method for targeting `border-width` on specific sides of a box. Use a `null` value to “skip” a side.
+///
+/// @param {Arglist} $vals
+/// List of arguments
+///
+/// @example scss - Usage
+/// .element {
+/// @include border-width(1em null 20px);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// border-bottom-width: 20px;
+/// border-top-width: 1em;
+/// }
+///
+/// @require {mixin} directional-property
+///
+/// @output `border-width`
+
+@mixin border-width($vals...) {
+ @include directional-property(border, width, $vals...);
+}
diff --git a/docs/_sass/uswds/lib/addons/_buttons.scss b/docs/_sass/uswds/lib/addons/_buttons.scss
new file mode 100644
index 0000000..debeabc
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_buttons.scss
@@ -0,0 +1,64 @@
+@charset "UTF-8";
+
+/// Generates variables for all buttons. Please note that you must use interpolation on the variable: `#{$all-buttons}`.
+///
+/// @example scss - Usage
+/// #{$all-buttons} {
+/// background-color: #f00;
+/// }
+///
+/// #{$all-buttons-focus},
+/// #{$all-buttons-hover} {
+/// background-color: #0f0;
+/// }
+///
+/// #{$all-buttons-active} {
+/// background-color: #00f;
+/// }
+///
+/// @example css - CSS Output
+/// button,
+/// input[type="button"],
+/// input[type="reset"],
+/// input[type="submit"] {
+/// background-color: #f00;
+/// }
+///
+/// button:focus,
+/// input[type="button"]:focus,
+/// input[type="reset"]:focus,
+/// input[type="submit"]:focus,
+/// button:hover,
+/// input[type="button"]:hover,
+/// input[type="reset"]:hover,
+/// input[type="submit"]:hover {
+/// background-color: #0f0;
+/// }
+///
+/// button:active,
+/// input[type="button"]:active,
+/// input[type="reset"]:active,
+/// input[type="submit"]:active {
+/// background-color: #00f;
+/// }
+///
+/// @require assign-inputs
+///
+/// @type List
+///
+/// @todo Remove double assigned variables (Lines 59–62) in v5.0.0
+
+$buttons-list: 'button',
+ 'input[type="button"]',
+ 'input[type="reset"]',
+ 'input[type="submit"]';
+
+$all-buttons: assign-inputs($buttons-list);
+$all-buttons-active: assign-inputs($buttons-list, active);
+$all-buttons-focus: assign-inputs($buttons-list, focus);
+$all-buttons-hover: assign-inputs($buttons-list, hover);
+
+$all-button-inputs: $all-buttons;
+$all-button-inputs-active: $all-buttons-active;
+$all-button-inputs-focus: $all-buttons-focus;
+$all-button-inputs-hover: $all-buttons-hover;
diff --git a/docs/_sass/uswds/lib/addons/_clearfix.scss b/docs/_sass/uswds/lib/addons/_clearfix.scss
new file mode 100644
index 0000000..11313d6
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_clearfix.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides an easy way to include a clearfix for containing floats.
+///
+/// @link http://cssmojo.com/latest_new_clearfix_so_far/
+///
+/// @example scss - Usage
+/// .element {
+/// @include clearfix;
+/// }
+///
+/// @example css - CSS Output
+/// .element::after {
+/// clear: both;
+/// content: "";
+/// display: table;
+/// }
+
+@mixin clearfix {
+ &::after {
+ clear: both;
+ content: "";
+ display: table;
+ }
+}
diff --git a/docs/_sass/uswds/lib/addons/_ellipsis.scss b/docs/_sass/uswds/lib/addons/_ellipsis.scss
new file mode 100644
index 0000000..a367f65
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_ellipsis.scss
@@ -0,0 +1,30 @@
+@charset "UTF-8";
+
+/// Truncates text and adds an ellipsis to represent overflow.
+///
+/// @param {Number} $width [100%]
+/// Max-width for the string to respect before being truncated
+///
+/// @example scss - Usage
+/// .element {
+/// @include ellipsis;
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// display: inline-block;
+/// max-width: 100%;
+/// overflow: hidden;
+/// text-overflow: ellipsis;
+/// white-space: nowrap;
+/// word-wrap: normal;
+/// }
+
+@mixin ellipsis($width: 100%) {
+ display: inline-block;
+ max-width: $width;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: normal;
+}
diff --git a/docs/_sass/uswds/lib/addons/_font-stacks.scss b/docs/_sass/uswds/lib/addons/_font-stacks.scss
new file mode 100644
index 0000000..57128f4
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_font-stacks.scss
@@ -0,0 +1,31 @@
+@charset "UTF-8";
+
+/// Georgia font stack.
+///
+/// @type List
+
+$georgia: "Georgia", "Cambria", "Times New Roman", "Times", serif;
+
+/// Helvetica font stack.
+///
+/// @type List
+
+$helvetica: "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif;
+
+/// Lucida Grande font stack.
+///
+/// @type List
+
+$lucida-grande: "Lucida Grande", "Tahoma", "Verdana", "Arial", sans-serif;
+
+/// Monospace font stack.
+///
+/// @type List
+
+$monospace: "Bitstream Vera Sans Mono", "Consolas", "Courier", monospace;
+
+/// Verdana font stack.
+///
+/// @type List
+
+$verdana: "Verdana", "Geneva", sans-serif;
diff --git a/docs/_sass/uswds/lib/addons/_hide-text.scss b/docs/_sass/uswds/lib/addons/_hide-text.scss
new file mode 100644
index 0000000..4caf20e
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_hide-text.scss
@@ -0,0 +1,27 @@
+/// Hides the text in an element, commonly used to show an image. Some elements will need block-level styles applied.
+///
+/// @link http://zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement
+///
+/// @example scss - Usage
+/// .element {
+/// @include hide-text;
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// overflow: hidden;
+/// text-indent: 101%;
+/// white-space: nowrap;
+/// }
+///
+/// @todo Remove height argument in v5.0.0
+
+@mixin hide-text($height: null) {
+ overflow: hidden;
+ text-indent: 101%;
+ white-space: nowrap;
+
+ @if $height {
+ @warn "The `hide-text` mixin has changed and no longer requires a height. The height argument will no longer be accepted in v5.0.0";
+ }
+}
diff --git a/docs/_sass/uswds/lib/addons/_margin.scss b/docs/_sass/uswds/lib/addons/_margin.scss
new file mode 100644
index 0000000..674f4e5
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_margin.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// Provides a quick method for targeting `margin` on specific sides of a box. Use a `null` value to “skip” a side.
+///
+/// @param {Arglist} $vals
+/// List of arguments
+///
+/// @example scss - Usage
+/// .element {
+/// @include margin(null 10px 3em 20vh);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// margin-bottom: 3em;
+/// margin-left: 20vh;
+/// margin-right: 10px;
+/// }
+///
+/// @require {mixin} directional-property
+///
+/// @output `margin`
+
+@mixin margin($vals...) {
+ @include directional-property(margin, false, $vals...);
+}
diff --git a/docs/_sass/uswds/lib/addons/_padding.scss b/docs/_sass/uswds/lib/addons/_padding.scss
new file mode 100644
index 0000000..40a5f00
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_padding.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// Provides a quick method for targeting `padding` on specific sides of a box. Use a `null` value to “skip” a side.
+///
+/// @param {Arglist} $vals
+/// List of arguments
+///
+/// @example scss - Usage
+/// .element {
+/// @include padding(12vh null 10px 5%);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// padding-bottom: 10px;
+/// padding-left: 5%;
+/// padding-top: 12vh;
+/// }
+///
+/// @require {mixin} directional-property
+///
+/// @output `padding`
+
+@mixin padding($vals...) {
+ @include directional-property(padding, false, $vals...);
+}
diff --git a/docs/_sass/uswds/lib/addons/_position.scss b/docs/_sass/uswds/lib/addons/_position.scss
new file mode 100644
index 0000000..e460f3f
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_position.scss
@@ -0,0 +1,48 @@
+@charset "UTF-8";
+
+/// Provides a quick method for setting an element’s position. Use a `null` value to “skip” a side.
+///
+/// @param {Position} $position [relative]
+/// A CSS position value
+///
+/// @param {Arglist} $coordinates [null null null null]
+/// List of values that correspond to the 4-value syntax for the edges of a box
+///
+/// @example scss - Usage
+/// .element {
+/// @include position(absolute, 0 null null 10em);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// left: 10em;
+/// position: absolute;
+/// top: 0;
+/// }
+///
+/// @require {function} is-length
+/// @require {function} unpack
+
+@mixin position($position: relative, $coordinates: null null null null) {
+ @if type-of($position) == list {
+ $coordinates: $position;
+ $position: relative;
+ }
+
+ $coordinates: unpack($coordinates);
+
+ $offsets: (
+ top: nth($coordinates, 1),
+ right: nth($coordinates, 2),
+ bottom: nth($coordinates, 3),
+ left: nth($coordinates, 4)
+ );
+
+ position: $position;
+
+ @each $offset, $value in $offsets {
+ @if is-length($value) {
+ #{$offset}: $value;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/addons/_prefixer.scss b/docs/_sass/uswds/lib/addons/_prefixer.scss
new file mode 100644
index 0000000..2b6f731
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_prefixer.scss
@@ -0,0 +1,66 @@
+@charset "UTF-8";
+
+/// A mixin for generating vendor prefixes on non-standardized properties.
+///
+/// @param {String} $property
+/// Property to prefix
+///
+/// @param {*} $value
+/// Value to use
+///
+/// @param {List} $prefixes
+/// Prefixes to define
+///
+/// @example scss - Usage
+/// .element {
+/// @include prefixer(border-radius, 10px, webkit ms spec);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// -webkit-border-radius: 10px;
+/// -moz-border-radius: 10px;
+/// border-radius: 10px;
+/// }
+///
+/// @require {variable} $prefix-for-webkit
+/// @require {variable} $prefix-for-mozilla
+/// @require {variable} $prefix-for-microsoft
+/// @require {variable} $prefix-for-opera
+/// @require {variable} $prefix-for-spec
+
+@mixin prefixer($property, $value, $prefixes) {
+ @each $prefix in $prefixes {
+ @if $prefix == webkit {
+ @if $prefix-for-webkit {
+ -webkit-#{$property}: $value;
+ }
+ } @else if $prefix == moz {
+ @if $prefix-for-mozilla {
+ -moz-#{$property}: $value;
+ }
+ } @else if $prefix == ms {
+ @if $prefix-for-microsoft {
+ -ms-#{$property}: $value;
+ }
+ } @else if $prefix == o {
+ @if $prefix-for-opera {
+ -o-#{$property}: $value;
+ }
+ } @else if $prefix == spec {
+ @if $prefix-for-spec {
+ #{$property}: $value;
+ }
+ } @else {
+ @warn "Unrecognized prefix: #{$prefix}";
+ }
+ }
+}
+
+@mixin disable-prefix-for-all() {
+ $prefix-for-webkit: false !global;
+ $prefix-for-mozilla: false !global;
+ $prefix-for-microsoft: false !global;
+ $prefix-for-opera: false !global;
+ $prefix-for-spec: false !global;
+}
diff --git a/docs/_sass/uswds/lib/addons/_retina-image.scss b/docs/_sass/uswds/lib/addons/_retina-image.scss
new file mode 100644
index 0000000..7febbd7
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_retina-image.scss
@@ -0,0 +1,25 @@
+@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) {
+ @if $asset-pipeline {
+ background-image: image-url("#{$filename}.#{$extension}");
+ } @else {
+ background-image: url("#{$filename}.#{$extension}");
+ }
+
+ @include hidpi {
+ @if $asset-pipeline {
+ @if $retina-filename {
+ background-image: image-url("#{$retina-filename}.#{$extension}");
+ } @else {
+ background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ } @else {
+ @if $retina-filename {
+ background-image: url("#{$retina-filename}.#{$extension}");
+ } @else {
+ background-image: url("#{$filename}#{$retina-suffix}.#{$extension}");
+ }
+ }
+
+ background-size: $background-size;
+ }
+}
diff --git a/docs/_sass/uswds/lib/addons/_size.scss b/docs/_sass/uswds/lib/addons/_size.scss
new file mode 100644
index 0000000..a2992a3
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_size.scss
@@ -0,0 +1,51 @@
+@charset "UTF-8";
+
+/// Sets the `width` and `height` of the element.
+///
+/// @param {List} $size
+/// A list of at most 2 size values.
+///
+/// If there is only a single value in `$size` it is used for both width and height. All units are supported.
+///
+/// @example scss - Usage
+/// .first-element {
+/// @include size(2em);
+/// }
+///
+/// .second-element {
+/// @include size(auto 10em);
+/// }
+///
+/// @example css - CSS Output
+/// .first-element {
+/// width: 2em;
+/// height: 2em;
+/// }
+///
+/// .second-element {
+/// width: auto;
+/// height: 10em;
+/// }
+///
+/// @todo Refactor in 5.0.0 to use a comma-separated argument
+
+@mixin size($value) {
+ $width: nth($value, 1);
+ $height: $width;
+
+ @if length($value) > 1 {
+ $height: nth($value, 2);
+ }
+
+ @if is-size($height) {
+ height: $height;
+ } @else {
+ @warn "`#{$height}` is not a valid length for the `$height` parameter in the `size` mixin.";
+ }
+
+ @if is-size($width) {
+ width: $width;
+ } @else {
+ @warn "`#{$width}` is not a valid length for the `$width` parameter in the `size` mixin.";
+ }
+}
diff --git a/docs/_sass/uswds/lib/addons/_text-inputs.scss b/docs/_sass/uswds/lib/addons/_text-inputs.scss
new file mode 100644
index 0000000..1eb7a54
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_text-inputs.scss
@@ -0,0 +1,113 @@
+@charset "UTF-8";
+
+/// Generates variables for all text-based inputs. Please note that you must use interpolation on the variable: `#{$all-text-inputs}`.
+///
+/// @example scss - Usage
+/// #{$all-text-inputs} {
+/// border: 1px solid #f00;
+/// }
+///
+/// #{$all-text-inputs-focus},
+/// #{$all-text-inputs-hover} {
+/// border: 1px solid #0f0;
+/// }
+///
+/// #{$all-text-inputs-active} {
+/// border: 1px solid #00f;
+/// }
+///
+/// @example css - CSS Output
+/// input[type="color"],
+/// input[type="date"],
+/// input[type="datetime"],
+/// input[type="datetime-local"],
+/// input[type="email"],
+/// input[type="month"],
+/// input[type="number"],
+/// input[type="password"],
+/// input[type="search"],
+/// input[type="tel"],
+/// input[type="text"],
+/// input[type="time"],
+/// input[type="url"],
+/// input[type="week"],
+/// textarea {
+/// border: 1px solid #f00;
+/// }
+///
+/// input[type="color"]:focus,
+/// input[type="date"]:focus,
+/// input[type="datetime"]:focus,
+/// input[type="datetime-local"]:focus,
+/// input[type="email"]:focus,
+/// input[type="month"]:focus,
+/// input[type="number"]:focus,
+/// input[type="password"]:focus,
+/// input[type="search"]:focus,
+/// input[type="tel"]:focus,
+/// input[type="text"]:focus,
+/// input[type="time"]:focus,
+/// input[type="url"]:focus,
+/// input[type="week"]:focus,
+/// textarea:focus,
+/// input[type="color"]:hover,
+/// input[type="date"]:hover,
+/// input[type="datetime"]:hover,
+/// input[type="datetime-local"]:hover,
+/// input[type="email"]:hover,
+/// input[type="month"]:hover,
+/// input[type="number"]:hover,
+/// input[type="password"]:hover,
+/// input[type="search"]:hover,
+/// input[type="tel"]:hover,
+/// input[type="text"]:hover,
+/// input[type="time"]:hover,
+/// input[type="url"]:hover,
+/// input[type="week"]:hover,
+/// textarea:hover {
+/// border: 1px solid #0f0;
+/// }
+///
+/// input[type="color"]:active,
+/// input[type="date"]:active,
+/// input[type="datetime"]:active,
+/// input[type="datetime-local"]:active,
+/// input[type="email"]:active,
+/// input[type="month"]:active,
+/// input[type="number"]:active,
+/// input[type="password"]:active,
+/// input[type="search"]:active,
+/// input[type="tel"]:active,
+/// input[type="text"]:active,
+/// input[type="time"]:active,
+/// input[type="url"]:active,
+/// input[type="week"]:active,
+/// textarea:active {
+/// border: 1px solid #00f;
+/// }
+///
+/// @require assign-inputs
+///
+/// @type List
+
+$text-inputs-list: 'input[type="color"]',
+ 'input[type="date"]',
+ 'input[type="datetime"]',
+ 'input[type="datetime-local"]',
+ 'input[type="email"]',
+ 'input[type="month"]',
+ 'input[type="number"]',
+ 'input[type="password"]',
+ 'input[type="search"]',
+ 'input[type="tel"]',
+ 'input[type="text"]',
+ 'input[type="time"]',
+ 'input[type="url"]',
+ 'input[type="week"]',
+ 'input:not([type])',
+ 'textarea';
+
+$all-text-inputs: assign-inputs($text-inputs-list);
+$all-text-inputs-active: assign-inputs($text-inputs-list, active);
+$all-text-inputs-focus: assign-inputs($text-inputs-list, focus);
+$all-text-inputs-hover: assign-inputs($text-inputs-list, hover);
diff --git a/docs/_sass/uswds/lib/addons/_timing-functions.scss b/docs/_sass/uswds/lib/addons/_timing-functions.scss
new file mode 100644
index 0000000..20e5f1d
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_timing-functions.scss
@@ -0,0 +1,34 @@
+@charset "UTF-8";
+
+/// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)
+///
+/// Timing functions are the same as demoed here: http://jqueryui.com/resources/demos/effect/easing.html
+///
+/// @type cubic-bezier
+
+$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);
+$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);
+$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);
+$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);
+$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);
+$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);
+
+$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);
+$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);
+$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);
+$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);
+$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);
+$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);
+$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);
+
+$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);
+$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);
+$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);
+$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);
+$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);
+$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);
+$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);
+$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);
diff --git a/docs/_sass/uswds/lib/addons/_triangle.scss b/docs/_sass/uswds/lib/addons/_triangle.scss
new file mode 100644
index 0000000..8a1ed9c
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_triangle.scss
@@ -0,0 +1,63 @@
+@mixin triangle($size, $color, $direction) {
+ $width: nth($size, 1);
+ $height: nth($size, length($size));
+ $foreground-color: nth($color, 1);
+ $background-color: if(length($color) == 2, nth($color, 2), transparent);
+ height: 0;
+ width: 0;
+
+ @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {
+ $width: $width / 2;
+ $height: if(length($size) > 1, $height, $height/2);
+
+ @if $direction == up {
+ border-bottom: $height solid $foreground-color;
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ } @else if $direction == right {
+ border-bottom: $width solid $background-color;
+ border-left: $height solid $foreground-color;
+ border-top: $width solid $background-color;
+ } @else if $direction == down {
+ border-left: $width solid $background-color;
+ border-right: $width solid $background-color;
+ border-top: $height solid $foreground-color;
+ } @else if $direction == left {
+ border-bottom: $width solid $background-color;
+ border-right: $height solid $foreground-color;
+ border-top: $width solid $background-color;
+ }
+ } @else if ($direction == up-right) or ($direction == up-left) {
+ border-top: $height solid $foreground-color;
+
+ @if $direction == up-right {
+ border-left: $width solid $background-color;
+ } @else if $direction == up-left {
+ border-right: $width solid $background-color;
+ }
+ } @else if ($direction == down-right) or ($direction == down-left) {
+ border-bottom: $height solid $foreground-color;
+
+ @if $direction == down-right {
+ border-left: $width solid $background-color;
+ } @else if $direction == down-left {
+ border-right: $width solid $background-color;
+ }
+ } @else if ($direction == inset-up) {
+ border-color: $background-color $background-color $foreground-color;
+ border-style: solid;
+ border-width: $height $width;
+ } @else if ($direction == inset-down) {
+ border-color: $foreground-color $background-color $background-color;
+ border-style: solid;
+ border-width: $height $width;
+ } @else if ($direction == inset-right) {
+ border-color: $background-color $background-color $background-color $foreground-color;
+ border-style: solid;
+ border-width: $width $height;
+ } @else if ($direction == inset-left) {
+ border-color: $background-color $foreground-color $background-color $background-color;
+ border-style: solid;
+ border-width: $width $height;
+ }
+}
diff --git a/docs/_sass/uswds/lib/addons/_word-wrap.scss b/docs/_sass/uswds/lib/addons/_word-wrap.scss
new file mode 100644
index 0000000..64856a9
--- /dev/null
+++ b/docs/_sass/uswds/lib/addons/_word-wrap.scss
@@ -0,0 +1,29 @@
+@charset "UTF-8";
+
+/// Provides an easy way to change the `word-wrap` property.
+///
+/// @param {String} $wrap [break-word]
+/// Value for the `word-break` property.
+///
+/// @example scss - Usage
+/// .wrapper {
+/// @include word-wrap(break-word);
+/// }
+///
+/// @example css - CSS Output
+/// .wrapper {
+/// overflow-wrap: break-word;
+/// word-break: break-all;
+/// word-wrap: break-word;
+/// }
+
+@mixin word-wrap($wrap: break-word) {
+ overflow-wrap: $wrap;
+ word-wrap: $wrap;
+
+ @if $wrap == break-word {
+ word-break: break-all;
+ } @else {
+ word-break: $wrap;
+ }
+}
diff --git a/docs/_sass/uswds/lib/css3/_animation.scss b/docs/_sass/uswds/lib/css3/_animation.scss
new file mode 100644
index 0000000..aac675f
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_animation.scss
@@ -0,0 +1,43 @@
+// http://www.w3.org/TR/css3-animations/#the-animation-name-property-
+// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.
+
+@mixin animation($animations...) {
+ @include prefixer(animation, $animations, webkit moz spec);
+}
+
+@mixin animation-name($names...) {
+ @include prefixer(animation-name, $names, webkit moz spec);
+}
+
+@mixin animation-duration($times...) {
+ @include prefixer(animation-duration, $times, webkit moz spec);
+}
+
+@mixin animation-timing-function($motions...) {
+ // ease | linear | ease-in | ease-out | ease-in-out
+ @include prefixer(animation-timing-function, $motions, webkit moz spec);
+}
+
+@mixin animation-iteration-count($values...) {
+ // infinite |
+ @include prefixer(animation-iteration-count, $values, webkit moz spec);
+}
+
+@mixin animation-direction($directions...) {
+ // normal | alternate
+ @include prefixer(animation-direction, $directions, webkit moz spec);
+}
+
+@mixin animation-play-state($states...) {
+ // running | paused
+ @include prefixer(animation-play-state, $states, webkit moz spec);
+}
+
+@mixin animation-delay($times...) {
+ @include prefixer(animation-delay, $times, webkit moz spec);
+}
+
+@mixin animation-fill-mode($modes...) {
+ // none | forwards | backwards | both
+ @include prefixer(animation-fill-mode, $modes, webkit moz spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_appearance.scss b/docs/_sass/uswds/lib/css3/_appearance.scss
new file mode 100644
index 0000000..abddc02
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_appearance.scss
@@ -0,0 +1,3 @@
+@mixin appearance($value) {
+ @include prefixer(appearance, $value, webkit moz ms o spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_backface-visibility.scss b/docs/_sass/uswds/lib/css3/_backface-visibility.scss
new file mode 100644
index 0000000..fc68e2d
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_backface-visibility.scss
@@ -0,0 +1,3 @@
+@mixin backface-visibility($visibility) {
+ @include prefixer(backface-visibility, $visibility, webkit spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_background-image.scss b/docs/_sass/uswds/lib/css3/_background-image.scss
new file mode 100644
index 0000000..6ed19ab
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_background-image.scss
@@ -0,0 +1,42 @@
+//************************************************************************//
+// Background-image property for adding multiple background images with
+// gradients, or for stringing multiple gradients together.
+//************************************************************************//
+
+@mixin background-image($images...) {
+ $webkit-images: ();
+ $spec-images: ();
+
+ @each $image in $images {
+ $webkit-image: ();
+ $spec-image: ();
+
+ @if (type-of($image) == string) {
+ $url-str: str-slice($image, 1, 3);
+ $gradient-type: str-slice($image, 1, 6);
+
+ @if $url-str == "url" {
+ $webkit-image: $image;
+ $spec-image: $image;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser($image);
+ $webkit-image: map-get($gradients, webkit-image);
+ $spec-image: map-get($gradients, spec-image);
+ }
+ }
+
+ $webkit-images: append($webkit-images, $webkit-image, comma);
+ $spec-images: append($spec-images, $spec-image, comma);
+ }
+
+ background-image: $webkit-images;
+ background-image: $spec-images;
+}
diff --git a/docs/_sass/uswds/lib/css3/_background.scss b/docs/_sass/uswds/lib/css3/_background.scss
new file mode 100644
index 0000000..019db0e
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_background.scss
@@ -0,0 +1,55 @@
+//************************************************************************//
+// Background property for adding multiple backgrounds using shorthand
+// notation.
+//************************************************************************//
+
+@mixin background($backgrounds...) {
+ $webkit-backgrounds: ();
+ $spec-backgrounds: ();
+
+ @each $background in $backgrounds {
+ $webkit-background: ();
+ $spec-background: ();
+ $background-type: type-of($background);
+
+ @if $background-type == string or $background-type == list {
+ $background-str: if($background-type == list, nth($background, 1), $background);
+
+ $url-str: str-slice($background-str, 1, 3);
+ $gradient-type: str-slice($background-str, 1, 6);
+
+ @if $url-str == "url" {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$background}");
+ $webkit-background: map-get($gradients, webkit-image);
+ $spec-background: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+ }
+
+ @else {
+ $webkit-background: $background;
+ $spec-background: $background;
+ }
+
+ $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma);
+ $spec-backgrounds: append($spec-backgrounds, $spec-background, comma);
+ }
+
+ background: $webkit-backgrounds;
+ background: $spec-backgrounds;
+}
diff --git a/docs/_sass/uswds/lib/css3/_border-image.scss b/docs/_sass/uswds/lib/css3/_border-image.scss
new file mode 100644
index 0000000..cf568ce
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_border-image.scss
@@ -0,0 +1,59 @@
+@mixin border-image($borders...) {
+ $webkit-borders: ();
+ $spec-borders: ();
+
+ @each $border in $borders {
+ $webkit-border: ();
+ $spec-border: ();
+ $border-type: type-of($border);
+
+ @if $border-type == string or list {
+ $border-str: if($border-type == list, nth($border, 1), $border);
+
+ $url-str: str-slice($border-str, 1, 3);
+ $gradient-type: str-slice($border-str, 1, 6);
+
+ @if $url-str == "url" {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ @else if $gradient-type == "linear" {
+ $gradients: _linear-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else if $gradient-type == "radial" {
+ $gradients: _radial-gradient-parser("#{$border}");
+ $webkit-border: map-get($gradients, webkit-image);
+ $spec-border: map-get($gradients, spec-image);
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+ }
+
+ @else {
+ $webkit-border: $border;
+ $spec-border: $border;
+ }
+
+ $webkit-borders: append($webkit-borders, $webkit-border, comma);
+ $spec-borders: append($spec-borders, $spec-border, comma);
+ }
+
+ -webkit-border-image: $webkit-borders;
+ border-image: $spec-borders;
+ border-style: solid;
+}
+
+//Examples:
+// @include border-image(url("image.png"));
+// @include border-image(url("image.png") 20 stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow));
+// @include border-image(linear-gradient(45deg, orange, yellow) stretch);
+// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);
+// @include border-image(radial-gradient(top, cover, orange, yellow, orange));
diff --git a/docs/_sass/uswds/lib/css3/_calc.scss b/docs/_sass/uswds/lib/css3/_calc.scss
new file mode 100644
index 0000000..0bfc738
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_calc.scss
@@ -0,0 +1,4 @@
+@mixin calc($property, $value) {
+ #{$property}: -webkit-calc(#{$value});
+ #{$property}: calc(#{$value});
+}
diff --git a/docs/_sass/uswds/lib/css3/_columns.scss b/docs/_sass/uswds/lib/css3/_columns.scss
new file mode 100644
index 0000000..9611767
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_columns.scss
@@ -0,0 +1,47 @@
+@mixin columns($arg: auto) {
+ // ||
+ @include prefixer(columns, $arg, webkit moz spec);
+}
+
+@mixin column-count($int: auto) {
+ // auto || integer
+ @include prefixer(column-count, $int, webkit moz spec);
+}
+
+@mixin column-gap($length: normal) {
+ // normal || length
+ @include prefixer(column-gap, $length, webkit moz spec);
+}
+
+@mixin column-fill($arg: auto) {
+ // auto || length
+ @include prefixer(column-fill, $arg, webkit moz spec);
+}
+
+@mixin column-rule($arg) {
+ // || ||
+ @include prefixer(column-rule, $arg, webkit moz spec);
+}
+
+@mixin column-rule-color($color) {
+ @include prefixer(column-rule-color, $color, webkit moz spec);
+}
+
+@mixin column-rule-style($style: none) {
+ // none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid
+ @include prefixer(column-rule-style, $style, webkit moz spec);
+}
+
+@mixin column-rule-width ($width: none) {
+ @include prefixer(column-rule-width, $width, webkit moz spec);
+}
+
+@mixin column-span($arg: none) {
+ // none || all
+ @include prefixer(column-span, $arg, webkit moz spec);
+}
+
+@mixin column-width($length: auto) {
+ // auto || length
+ @include prefixer(column-width, $length, webkit moz spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_filter.scss b/docs/_sass/uswds/lib/css3/_filter.scss
new file mode 100644
index 0000000..b8f8ffb
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_filter.scss
@@ -0,0 +1,4 @@
+@mixin filter($function: none) {
+ // [
+ @include prefixer(perspective, $depth, webkit moz spec);
+}
+
+@mixin perspective-origin($value: 50% 50%) {
+ @include prefixer(perspective-origin, $value, webkit moz spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_placeholder.scss b/docs/_sass/uswds/lib/css3/_placeholder.scss
new file mode 100644
index 0000000..5682fd0
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_placeholder.scss
@@ -0,0 +1,8 @@
+@mixin placeholder {
+ $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input";
+ @each $placeholder in $placeholders {
+ &:#{$placeholder}-placeholder {
+ @content;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/css3/_radial-gradient.scss b/docs/_sass/uswds/lib/css3/_radial-gradient.scss
new file mode 100644
index 0000000..18f7b5b
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_radial-gradient.scss
@@ -0,0 +1,39 @@
+// Requires Sass 3.1+
+@mixin radial-gradient($g1, $g2,
+ $g3: null, $g4: null,
+ $g5: null, $g6: null,
+ $g7: null, $g8: null,
+ $g9: null, $g10: null,
+ $pos: null,
+ $shape-size: null,
+ $fallback: null) {
+
+ $data: _radial-arg-parser($g1, $g2, $pos, $shape-size);
+ $g1: nth($data, 1);
+ $g2: nth($data, 2);
+ $pos: nth($data, 3);
+ $shape-size: nth($data, 4);
+
+ $full: $g1, $g2, $g3, $g4, $g5, $g6, $g7, $g8, $g9, $g10;
+
+ // Strip deprecated cover/contain for spec
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ // Set $g1 as the default fallback color
+ $first-color: nth($full, 1);
+ $fallback-color: nth($first-color, 1);
+
+ @if (type-of($fallback) == color) or ($fallback == "transparent") {
+ $fallback-color: $fallback;
+ }
+
+ // Add Commas and spaces
+ $shape-size: if($shape-size, "#{$shape-size}, ", null);
+ $pos: if($pos, "#{$pos}, ", null);
+ $pos-spec: if($pos, "at #{$pos}", null);
+ $shape-size-spec: if(($shape-size-spec != " ") and ($pos == null), "#{$shape-size-spec}, ", "#{$shape-size-spec} ");
+
+ background-color: $fallback-color;
+ background-image: -webkit-radial-gradient(#{$pos}#{$shape-size}#{$full});
+ background-image: radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full});
+}
diff --git a/docs/_sass/uswds/lib/css3/_selection.scss b/docs/_sass/uswds/lib/css3/_selection.scss
new file mode 100644
index 0000000..cd71d4f
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_selection.scss
@@ -0,0 +1,42 @@
+@charset "UTF-8";
+
+/// Outputs the spec and prefixed versions of the `::selection` pseudo-element.
+///
+/// @param {Bool} $current-selector [false]
+/// If set to `true`, it takes the current element into consideration.
+///
+/// @example scss - Usage
+/// .element {
+/// @include selection(true) {
+/// background-color: #ffbb52;
+/// }
+/// }
+///
+/// @example css - CSS Output
+/// .element::-moz-selection {
+/// background-color: #ffbb52;
+/// }
+///
+/// .element::selection {
+/// background-color: #ffbb52;
+/// }
+
+@mixin selection($current-selector: false) {
+ @if $current-selector {
+ &::-moz-selection {
+ @content;
+ }
+
+ &::selection {
+ @content;
+ }
+ } @else {
+ ::-moz-selection {
+ @content;
+ }
+
+ ::selection {
+ @content;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/css3/_text-decoration.scss b/docs/_sass/uswds/lib/css3/_text-decoration.scss
new file mode 100644
index 0000000..9222746
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_text-decoration.scss
@@ -0,0 +1,19 @@
+@mixin text-decoration($value) {
+// || ||
+ @include prefixer(text-decoration, $value, moz);
+}
+
+@mixin text-decoration-line($line: none) {
+// none || underline || overline || line-through
+ @include prefixer(text-decoration-line, $line, moz);
+}
+
+@mixin text-decoration-style($style: solid) {
+// solid || double || dotted || dashed || wavy
+ @include prefixer(text-decoration-style, $style, moz webkit);
+}
+
+@mixin text-decoration-color($color: currentColor) {
+// currentColor ||
+ @include prefixer(text-decoration-color, $color, moz);
+}
diff --git a/docs/_sass/uswds/lib/css3/_transform.scss b/docs/_sass/uswds/lib/css3/_transform.scss
new file mode 100644
index 0000000..8ee6509
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_transform.scss
@@ -0,0 +1,15 @@
+@mixin transform($property: none) {
+ // none |
+ @include prefixer(transform, $property, webkit moz ms o spec);
+}
+
+@mixin transform-origin($axes: 50%) {
+ // x-axis - left | center | right | length | %
+ // y-axis - top | center | bottom | length | %
+ // z-axis - length
+ @include prefixer(transform-origin, $axes, webkit moz ms o spec);
+}
+
+@mixin transform-style($style: flat) {
+ @include prefixer(transform-style, $style, webkit moz ms o spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_transition.scss b/docs/_sass/uswds/lib/css3/_transition.scss
new file mode 100644
index 0000000..3c785ed
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_transition.scss
@@ -0,0 +1,71 @@
+// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
+// Example: @include transition (all 2s ease-in-out);
+// @include transition (opacity 1s ease-in 2s, width 2s ease-out);
+// @include transition-property (transform, opacity);
+
+@mixin transition($properties...) {
+ // Fix for vendor-prefix transform property
+ $needs-prefixes: false;
+ $webkit: ();
+ $moz: ();
+ $spec: ();
+
+ // Create lists for vendor-prefixed transform
+ @each $list in $properties {
+ @if nth($list, 1) == "transform" {
+ $needs-prefixes: true;
+ $list1: -webkit-transform;
+ $list2: -moz-transform;
+ $list3: ();
+
+ @each $var in $list {
+ $list3: join($list3, $var);
+
+ @if $var != "transform" {
+ $list1: join($list1, $var);
+ $list2: join($list2, $var);
+ }
+ }
+
+ $webkit: append($webkit, $list1);
+ $moz: append($moz, $list2);
+ $spec: append($spec, $list3);
+ } @else {
+ $webkit: append($webkit, $list, comma);
+ $moz: append($moz, $list, comma);
+ $spec: append($spec, $list, comma);
+ }
+ }
+
+ @if $needs-prefixes {
+ -webkit-transition: $webkit;
+ -moz-transition: $moz;
+ transition: $spec;
+ } @else {
+ @if length($properties) >= 1 {
+ @include prefixer(transition, $properties, webkit moz spec);
+ } @else {
+ $properties: all 0.15s ease-out 0s;
+ @include prefixer(transition, $properties, webkit moz spec);
+ }
+ }
+}
+
+@mixin transition-property($properties...) {
+ -webkit-transition-property: transition-property-names($properties, "webkit");
+ -moz-transition-property: transition-property-names($properties, "moz");
+ transition-property: transition-property-names($properties, false);
+}
+
+@mixin transition-duration($times...) {
+ @include prefixer(transition-duration, $times, webkit moz spec);
+}
+
+@mixin transition-timing-function($motions...) {
+ // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
+ @include prefixer(transition-timing-function, $motions, webkit moz spec);
+}
+
+@mixin transition-delay($times...) {
+ @include prefixer(transition-delay, $times, webkit moz spec);
+}
diff --git a/docs/_sass/uswds/lib/css3/_user-select.scss b/docs/_sass/uswds/lib/css3/_user-select.scss
new file mode 100644
index 0000000..d4e5551
--- /dev/null
+++ b/docs/_sass/uswds/lib/css3/_user-select.scss
@@ -0,0 +1,3 @@
+@mixin user-select($value: none) {
+ @include prefixer(user-select, $value, webkit moz ms spec);
+}
diff --git a/docs/_sass/uswds/lib/functions/_assign-inputs.scss b/docs/_sass/uswds/lib/functions/_assign-inputs.scss
new file mode 100644
index 0000000..f8aba96
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_assign-inputs.scss
@@ -0,0 +1,11 @@
+@function assign-inputs($inputs, $pseudo: null) {
+ $list: ();
+
+ @each $input in $inputs {
+ $input: unquote($input);
+ $input: if($pseudo, $input + ":" + $pseudo, $input);
+ $list: append($list, $input, comma);
+ }
+
+ @return $list;
+}
diff --git a/docs/_sass/uswds/lib/functions/_contains-falsy.scss b/docs/_sass/uswds/lib/functions/_contains-falsy.scss
new file mode 100644
index 0000000..c096fdb
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_contains-falsy.scss
@@ -0,0 +1,20 @@
+@charset "UTF-8";
+
+/// Checks if a list does not contains a value.
+///
+/// @access private
+///
+/// @param {List} $list
+/// The list to check against.
+///
+/// @return {Bool}
+
+@function contains-falsy($list) {
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
diff --git a/docs/_sass/uswds/lib/functions/_contains.scss b/docs/_sass/uswds/lib/functions/_contains.scss
new file mode 100644
index 0000000..3dec27d
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_contains.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// Checks if a list contains a value(s).
+///
+/// @access private
+///
+/// @param {List} $list
+/// The list to check against.
+///
+/// @param {List} $values
+/// A single value or list of values to check for.
+///
+/// @example scss - Usage
+/// contains($list, $value)
+///
+/// @return {Bool}
+
+@function contains($list, $values...) {
+ @each $value in $values {
+ @if type-of(index($list, $value)) != "number" {
+ @return false;
+ }
+ }
+
+ @return true;
+}
diff --git a/docs/_sass/uswds/lib/functions/_is-length.scss b/docs/_sass/uswds/lib/functions/_is-length.scss
new file mode 100644
index 0000000..5826e78
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_is-length.scss
@@ -0,0 +1,11 @@
+@charset "UTF-8";
+
+/// Checks for a valid CSS length.
+///
+/// @param {String} $value
+
+@function is-length($value) {
+ @return type-of($value) != "null" and (str-slice($value + "", 1, 4) == "calc"
+ or index(auto inherit initial 0, $value)
+ or (type-of($value) == "number" and not(unitless($value))));
+}
diff --git a/docs/_sass/uswds/lib/functions/_is-light.scss b/docs/_sass/uswds/lib/functions/_is-light.scss
new file mode 100644
index 0000000..92d90ac
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_is-light.scss
@@ -0,0 +1,21 @@
+@charset "UTF-8";
+
+/// Programatically determines whether a color is light or dark.
+///
+/// @link http://robots.thoughtbot.com/closer-look-color-lightness
+///
+/// @param {Color (Hex)} $color
+///
+/// @example scss - Usage
+/// is-light($color)
+///
+/// @return {Bool}
+
+@function is-light($hex-color) {
+ $-local-red: red(rgba($hex-color, 1));
+ $-local-green: green(rgba($hex-color, 1));
+ $-local-blue: blue(rgba($hex-color, 1));
+ $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;
+
+ @return $-local-lightness > 0.6;
+}
diff --git a/docs/_sass/uswds/lib/functions/_is-number.scss b/docs/_sass/uswds/lib/functions/_is-number.scss
new file mode 100644
index 0000000..a64e0bf
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_is-number.scss
@@ -0,0 +1,11 @@
+@charset "UTF-8";
+
+/// Checks for a valid number.
+///
+/// @param {Number} $value
+///
+/// @require {function} contains
+
+@function is-number($value) {
+ @return contains("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 0 1 2 3 4 5 6 7 8 9, $value);
+}
diff --git a/docs/_sass/uswds/lib/functions/_is-size.scss b/docs/_sass/uswds/lib/functions/_is-size.scss
new file mode 100644
index 0000000..661789a
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_is-size.scss
@@ -0,0 +1,13 @@
+@charset "UTF-8";
+
+/// Checks for a valid CSS size.
+///
+/// @param {String} $value
+///
+/// @require {function} contains
+/// @require {function} is-length
+
+@function is-size($value) {
+ @return is-length($value)
+ or contains("fill" "fit-content" "min-content" "max-content", $value);
+}
diff --git a/docs/_sass/uswds/lib/functions/_modular-scale.scss b/docs/_sass/uswds/lib/functions/_modular-scale.scss
new file mode 100644
index 0000000..20fa388
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_modular-scale.scss
@@ -0,0 +1,69 @@
+// Scaling Variables
+$golden: 1.618;
+$minor-second: 1.067;
+$major-second: 1.125;
+$minor-third: 1.2;
+$major-third: 1.25;
+$perfect-fourth: 1.333;
+$augmented-fourth: 1.414;
+$perfect-fifth: 1.5;
+$minor-sixth: 1.6;
+$major-sixth: 1.667;
+$minor-seventh: 1.778;
+$major-seventh: 1.875;
+$octave: 2;
+$major-tenth: 2.5;
+$major-eleventh: 2.667;
+$major-twelfth: 3;
+$double-octave: 4;
+
+$modular-scale-ratio: $perfect-fourth !default;
+$modular-scale-base: em($em-base) !default;
+
+@function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) {
+ $v1: nth($value, 1);
+ $v2: nth($value, length($value));
+ $value: $v1;
+
+ // scale $v2 to just above $v1
+ @while $v2 > $v1 {
+ $v2: ($v2 / $ratio); // will be off-by-1
+ }
+ @while $v2 < $v1 {
+ $v2: ($v2 * $ratio); // will fix off-by-1
+ }
+
+ // check AFTER scaling $v2 to prevent double-counting corner-case
+ $double-stranded: $v2 > $v1;
+
+ @if $increment > 0 {
+ @for $i from 1 through $increment {
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
+ $value: $v2;
+ $v2: ($v2 * $ratio);
+ } @else {
+ $v1: ($v1 * $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @if $increment < 0 {
+ // adjust $v2 to just below $v1
+ @if $double-stranded {
+ $v2: ($v2 / $ratio);
+ }
+
+ @for $i from $increment through -1 {
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
+ $value: $v2;
+ $v2: ($v2 / $ratio);
+ } @else {
+ $v1: ($v1 / $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @return $value;
+}
diff --git a/docs/_sass/uswds/lib/functions/_new-breakpoint.scss b/docs/_sass/uswds/lib/functions/_new-breakpoint.scss
new file mode 100644
index 0000000..41ab955
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_new-breakpoint.scss
@@ -0,0 +1,49 @@
+@charset "UTF-8";
+
+/// Returns a media context (media query / grid context) that can be stored in a variable and passed to `media()` as a single-keyword argument. Media contexts defined using `new-breakpoint` are used by the visual grid, as long as they are defined before importing Neat.
+///
+/// @param {List} $query
+/// A list of media query features and values. Each `$feature` should have a corresponding `$value`.
+///
+/// If there is only a single `$value` in `$query`, `$default-feature` is going to be used.
+///
+/// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`). For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1).
+///
+/// @param {Number (unitless)} $total-columns [$grid-columns]
+/// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter.
+///
+/// @example scss - Usage
+/// $mobile: new-breakpoint(max-width 480px 4);
+///
+/// .element {
+/// @include media($mobile) {
+/// @include span-columns(4);
+/// }
+/// }
+///
+/// @example css - CSS Output
+/// @media screen and (max-width: 480px) {
+/// .element {
+/// display: block;
+/// float: left;
+/// margin-right: 7.42297%;
+/// width: 100%;
+/// }
+/// .element:last-child {
+/// margin-right: 0;
+/// }
+/// }
+
+@function new-breakpoint($query: $feature $value $columns, $total-columns: $grid-columns) {
+ @if length($query) == 1 {
+ $query: $default-feature nth($query, 1) $total-columns;
+ } @else if is-even(length($query)) {
+ $query: append($query, $total-columns);
+ }
+
+ @if is-not(belongs-to($query, $visual-grid-breakpoints)) {
+ $visual-grid-breakpoints: append($visual-grid-breakpoints, $query, comma) !global;
+ }
+
+ @return $query;
+}
diff --git a/docs/_sass/uswds/lib/functions/_private.scss b/docs/_sass/uswds/lib/functions/_private.scss
new file mode 100644
index 0000000..872d4dc
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_private.scss
@@ -0,0 +1,114 @@
+// Not function for Libsass compatibility
+// https://github.com/sass/libsass/issues/368
+@function is-not($value) {
+ @return if($value, false, true);
+}
+
+// Checks if a number is even
+@function is-even($int) {
+ @return $int % 2 == 0;
+}
+
+// Checks if an element belongs to a list or not
+@function belongs-to($tested-item, $list) {
+ @return is-not(not-belongs-to($tested-item, $list));
+}
+
+@function not-belongs-to($tested-item, $list) {
+ @return is-not(index($list, $tested-item));
+}
+
+// Contains display value
+@function contains-display-value($query) {
+ @return belongs-to(table, $query)
+ or belongs-to(block, $query)
+ or belongs-to(inline-block, $query)
+ or belongs-to(inline, $query);
+}
+
+// Parses the first argument of span-columns()
+@function container-span($span: $span) {
+ @if length($span) == 3 {
+ $container-columns: nth($span, 3);
+ @return $container-columns;
+ } @else if length($span) == 2 {
+ $container-columns: nth($span, 2);
+ @return $container-columns;
+ }
+
+ @return $grid-columns;
+}
+
+@function container-shift($shift: $shift) {
+ $parent-columns: $grid-columns !default !global;
+
+ @if length($shift) == 3 {
+ $container-columns: nth($shift, 3);
+ @return $container-columns;
+ } @else if length($shift) == 2 {
+ $container-columns: nth($shift, 2);
+ @return $container-columns;
+ }
+
+ @return $parent-columns;
+}
+
+// Generates a striped background
+@function gradient-stops($grid-columns, $color: $visual-grid-color) {
+ $transparent: transparent;
+
+ $column-width: flex-grid(1, $grid-columns);
+ $gutter-width: flex-gutter($grid-columns);
+ $column-offset: $column-width;
+
+ $values: ($transparent 0, $color 0);
+
+ @for $i from 1 to $grid-columns*2 {
+ @if is-even($i) {
+ $values: append($values, $transparent $column-offset, comma);
+ $values: append($values, $color $column-offset, comma);
+ $column-offset: $column-offset + $column-width;
+ } @else {
+ $values: append($values, $color $column-offset, comma);
+ $values: append($values, $transparent $column-offset, comma);
+ $column-offset: $column-offset + $gutter-width;
+ }
+ }
+
+ @return $values;
+}
+
+// Layout direction
+@function get-direction($layout, $default) {
+ $direction: null;
+
+ @if to-upper-case($layout) == "LTR" or to-upper-case($layout) == "RTL" {
+ $direction: direction-from-layout($layout);
+ } @else {
+ $direction: direction-from-layout($default);
+ }
+
+ @return $direction;
+}
+
+@function direction-from-layout($layout) {
+ $direction: null;
+
+ @if to-upper-case($layout) == "LTR" {
+ $direction: right;
+ } @else {
+ $direction: left;
+ }
+
+ @return $direction;
+}
+
+@function get-opposite-direction($direction) {
+ $opposite-direction: left;
+
+ @if $direction == "left" {
+ $opposite-direction: right;
+ }
+
+ @return $opposite-direction;
+}
diff --git a/docs/_sass/uswds/lib/functions/_px-to-em.scss b/docs/_sass/uswds/lib/functions/_px-to-em.scss
new file mode 100644
index 0000000..ae81a44
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_px-to-em.scss
@@ -0,0 +1,13 @@
+// Convert pixels to ems
+// eg. for a relational value of 12px write em(12) when the parent is 16px
+// if the parent is another value say 24px write em(12, 24)
+
+@function em($pxval, $base: $em-base) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1em;
+}
diff --git a/docs/_sass/uswds/lib/functions/_px-to-rem.scss b/docs/_sass/uswds/lib/functions/_px-to-rem.scss
new file mode 100644
index 0000000..0ac941e
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_px-to-rem.scss
@@ -0,0 +1,15 @@
+// Convert pixels to rems
+// eg. for a relational value of 12px write rem(12)
+// Assumes $em-base is the font-size of
+
+@function rem($pxval) {
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+
+ $base: $em-base;
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+ @return ($pxval / $base) * 1rem;
+}
diff --git a/docs/_sass/uswds/lib/functions/_shade.scss b/docs/_sass/uswds/lib/functions/_shade.scss
new file mode 100644
index 0000000..8aaf2c6
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_shade.scss
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+
+/// Mixes a color with black.
+///
+/// @param {Color} $color
+///
+/// @param {Number (Percentage)} $percent
+/// The amount of black to be mixed in.
+///
+/// @example scss - Usage
+/// .element {
+/// background-color: shade(#ffbb52, 60%);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// background-color: #664a20;
+/// }
+///
+/// @return {Color}
+
+@function shade($color, $percent) {
+ @return mix(#000, $color, $percent);
+}
diff --git a/docs/_sass/uswds/lib/functions/_strip-units.scss b/docs/_sass/uswds/lib/functions/_strip-units.scss
new file mode 100644
index 0000000..6c5f3e8
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_strip-units.scss
@@ -0,0 +1,17 @@
+@charset "UTF-8";
+
+/// Strips the unit from a number.
+///
+/// @param {Number (With Unit)} $value
+///
+/// @example scss - Usage
+/// $dimension: strip-units(10em);
+///
+/// @example css - CSS Output
+/// $dimension: 10;
+///
+/// @return {Number (Unitless)}
+
+@function strip-units($value) {
+ @return ($value / ($value * 0 + 1));
+}
diff --git a/docs/_sass/uswds/lib/functions/_tint.scss b/docs/_sass/uswds/lib/functions/_tint.scss
new file mode 100644
index 0000000..2e33814
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_tint.scss
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+
+/// Mixes a color with white.
+///
+/// @param {Color} $color
+///
+/// @param {Number (Percentage)} $percent
+/// The amount of white to be mixed in.
+///
+/// @example scss - Usage
+/// .element {
+/// background-color: tint(#6ecaa6, 40%);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// background-color: #a8dfc9;
+/// }
+///
+/// @return {Color}
+
+@function tint($color, $percent) {
+ @return mix(#fff, $color, $percent);
+}
diff --git a/docs/_sass/uswds/lib/functions/_transition-property-name.scss b/docs/_sass/uswds/lib/functions/_transition-property-name.scss
new file mode 100644
index 0000000..18348b9
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_transition-property-name.scss
@@ -0,0 +1,22 @@
+// Return vendor-prefixed property names if appropriate
+// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background
+//************************************************************************//
+@function transition-property-names($props, $vendor: false) {
+ $new-props: ();
+
+ @each $prop in $props {
+ $new-props: append($new-props, transition-property-name($prop, $vendor), comma);
+ }
+
+ @return $new-props;
+}
+
+@function transition-property-name($prop, $vendor: false) {
+ // put other properties that need to be prefixed here aswell
+ @if $vendor and $prop == transform {
+ @return unquote('-'+$vendor+'-'+$prop);
+ }
+ @else {
+ @return $prop;
+ }
+}
diff --git a/docs/_sass/uswds/lib/functions/_unpack.scss b/docs/_sass/uswds/lib/functions/_unpack.scss
new file mode 100644
index 0000000..4367935
--- /dev/null
+++ b/docs/_sass/uswds/lib/functions/_unpack.scss
@@ -0,0 +1,27 @@
+@charset "UTF-8";
+
+/// Converts shorthand to the 4-value syntax.
+///
+/// @param {List} $shorthand
+///
+/// @example scss - Usage
+/// .element {
+/// margin: unpack(1em 2em);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// margin: 1em 2em 1em 2em;
+/// }
+
+@function unpack($shorthand) {
+ @if length($shorthand) == 1 {
+ @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);
+ } @else if length($shorthand) == 2 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);
+ } @else if length($shorthand) == 3 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);
+ } @else {
+ @return $shorthand;
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_box-sizing.scss b/docs/_sass/uswds/lib/grid/_box-sizing.scss
new file mode 100644
index 0000000..b6d3fec
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_box-sizing.scss
@@ -0,0 +1,15 @@
+@charset "UTF-8";
+
+@if $border-box-sizing == true {
+ html { // http://bit.ly/1qk2tVR
+ box-sizing: border-box;
+ }
+
+ * {
+ &,
+ &::after,
+ &::before {
+ box-sizing: inherit;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_direction-context.scss b/docs/_sass/uswds/lib/grid/_direction-context.scss
new file mode 100644
index 0000000..7b0d46e
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_direction-context.scss
@@ -0,0 +1,33 @@
+@charset "UTF-8";
+
+/// Changes the direction property used by other mixins called in the code block argument.
+///
+/// @param {String} $direction [left-to-right]
+/// Layout direction to be used within the block. Can be `left-to-right` or `right-to-left`.
+///
+/// @example scss - Usage
+/// @include direction-context(right-to-left) {
+/// .right-to-left-block {
+/// @include span-columns(6);
+/// }
+/// }
+///
+/// @example css - CSS Output
+/// .right-to-left-block {
+/// float: right;
+/// ...
+/// }
+
+@mixin direction-context($direction: left-to-right) {
+ $scope-direction: $layout-direction;
+
+ @if to-lower-case($direction) == "left-to-right" {
+ $layout-direction: LTR !global;
+ } @else if to-lower-case($direction) == "right-to-left" {
+ $layout-direction: RTL !global;
+ }
+
+ @content;
+
+ $layout-direction: $scope-direction !global;
+}
diff --git a/docs/_sass/uswds/lib/grid/_display-context.scss b/docs/_sass/uswds/lib/grid/_display-context.scss
new file mode 100644
index 0000000..ed9b063
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_display-context.scss
@@ -0,0 +1,28 @@
+@charset "UTF-8";
+
+/// Changes the display property used by other mixins called in the code block argument.
+///
+/// @param {String} $display [block]
+/// Display value to be used within the block. Can be `table` or `block`.
+///
+/// @example scss
+/// @include display-context(table) {
+/// .display-table {
+/// @include span-columns(6);
+/// }
+/// }
+///
+/// @example css
+/// .display-table {
+/// display: table-cell;
+/// ...
+/// }
+
+@mixin display-context($display: block) {
+ $scope-display: $container-display-table;
+ $container-display-table: $display == table !global;
+
+ @content;
+
+ $container-display-table: $scope-display !global;
+}
diff --git a/docs/_sass/uswds/lib/grid/_fill-parent.scss b/docs/_sass/uswds/lib/grid/_fill-parent.scss
new file mode 100644
index 0000000..415f0b1
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_fill-parent.scss
@@ -0,0 +1,22 @@
+@charset "UTF-8";
+
+/// Forces the element to fill its parent container.
+///
+/// @example scss - Usage
+/// .element {
+/// @include fill-parent;
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// width: 100%;
+/// box-sizing: border-box;
+/// }
+
+@mixin fill-parent() {
+ width: 100%;
+
+ @if $border-box-sizing == false {
+ box-sizing: border-box;
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_media.scss b/docs/_sass/uswds/lib/grid/_media.scss
new file mode 100644
index 0000000..bd516e9
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_media.scss
@@ -0,0 +1,92 @@
+@charset "UTF-8";
+
+/// Outputs a media-query block with an optional grid context (the total number of columns used in the grid).
+///
+/// @param {List} $query
+/// A list of media query features and values, where each `$feature` should have a corresponding `$value`.
+/// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1).
+///
+/// If there is only a single `$value` in `$query`, `$default-feature` is going to be used.
+///
+/// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`).
+///
+///
+/// @param {Number (unitless)} $total-columns [$grid-columns]
+/// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter.
+///
+/// @example scss - Usage
+/// .responsive-element {
+/// @include media(769px) {
+/// @include span-columns(6);
+/// }
+/// }
+///
+/// .new-context-element {
+/// @include media(min-width 320px max-width 480px, 6) {
+/// @include span-columns(6);
+/// }
+/// }
+///
+/// @example css - CSS Output
+/// @media screen and (min-width: 769px) {
+/// .responsive-element {
+/// display: block;
+/// float: left;
+/// margin-right: 2.35765%;
+/// width: 48.82117%;
+/// }
+///
+/// .responsive-element:last-child {
+/// margin-right: 0;
+/// }
+/// }
+///
+/// @media screen and (min-width: 320px) and (max-width: 480px) {
+/// .new-context-element {
+/// display: block;
+/// float: left;
+/// margin-right: 4.82916%;
+/// width: 100%;
+/// }
+///
+/// .new-context-element:last-child {
+/// margin-right: 0;
+/// }
+/// }
+
+@mixin media($query: $feature $value $columns, $total-columns: $grid-columns) {
+ @if length($query) == 1 {
+ @media screen and ($default-feature: nth($query, 1)) {
+ $default-grid-columns: $grid-columns;
+ $grid-columns: $total-columns !global;
+ @content;
+ $grid-columns: $default-grid-columns !global;
+ }
+ } @else {
+ $loop-to: length($query);
+ $media-query: "screen and ";
+ $default-grid-columns: $grid-columns;
+ $grid-columns: $total-columns !global;
+
+ @if is-not(is-even(length($query))) {
+ $grid-columns: nth($query, $loop-to) !global;
+ $loop-to: $loop-to - 1;
+ }
+
+ $i: 1;
+ @while $i <= $loop-to {
+ $media-query: $media-query + "(" + nth($query, $i) + ": " + nth($query, $i + 1) + ") ";
+
+ @if ($i + 1) != $loop-to {
+ $media-query: $media-query + "and ";
+ }
+
+ $i: $i + 2;
+ }
+
+ @media #{$media-query} {
+ @content;
+ $grid-columns: $default-grid-columns !global;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_omega.scss b/docs/_sass/uswds/lib/grid/_omega.scss
new file mode 100644
index 0000000..80f918a
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_omega.scss
@@ -0,0 +1,87 @@
+@charset "UTF-8";
+
+/// Removes the element's gutter margin, regardless of its position in the grid hierarchy or display property. It can target a specific element, or every `nth-child` occurrence. Works only with `block` layouts.
+///
+/// @param {List} $query [block]
+/// List of arguments. Supported arguments are `nth-child` selectors (targets a specific pseudo element) and `auto` (targets `last-child`).
+///
+/// When passed an `nth-child` argument of type `*n` with `block` display, the omega mixin automatically adds a clear to the `*n+1` th element. Note that composite arguments such as `2n+1` do not support this feature.
+///
+/// **Deprecation warning**: The omega mixin will no longer take a `$direction` argument. To change the layout direction, use `row($direction)` or set `$default-layout-direction` instead.
+///
+/// @example scss - Usage
+/// .element {
+/// @include omega;
+/// }
+///
+/// .nth-element {
+/// @include omega(4n);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// margin-right: 0;
+/// }
+///
+/// .nth-element:nth-child(4n) {
+/// margin-right: 0;
+/// }
+///
+/// .nth-element:nth-child(4n+1) {
+/// clear: left;
+/// }
+
+@mixin omega($query: block, $direction: default) {
+ $table: belongs-to(table, $query);
+ $auto: belongs-to(auto, $query);
+
+ @if $direction != default {
+ @include -neat-warn("The omega mixin will no longer take a $direction argument. To change the layout direction, use the direction(){...} mixin.");
+ } @else {
+ $direction: get-direction($layout-direction, $default-layout-direction);
+ }
+
+ @if $table {
+ @include -neat-warn("The omega mixin no longer removes padding in table layouts.");
+ }
+
+ @if length($query) == 1 {
+ @if $auto {
+ &:last-child {
+ margin-#{$direction}: 0;
+ }
+ }
+
+ @else if contains-display-value($query) and $table == false {
+ margin-#{$direction}: 0;
+ }
+
+ @else {
+ @include nth-child($query, $direction);
+ }
+ } @else if length($query) == 2 {
+ @if $auto {
+ &:last-child {
+ margin-#{$direction}: 0;
+ }
+ } @else {
+ @include nth-child(nth($query, 1), $direction);
+ }
+ } @else {
+ @include -neat-warn("Too many arguments passed to the omega() mixin.");
+ }
+}
+
+@mixin nth-child($query, $direction) {
+ $opposite-direction: get-opposite-direction($direction);
+
+ &:nth-child(#{$query}) {
+ margin-#{$direction}: 0;
+ }
+
+ @if type-of($query) == number and unit($query) == "n" {
+ &:nth-child(#{$query}+1) {
+ clear: $opposite-direction;
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_outer-container.scss b/docs/_sass/uswds/lib/grid/_outer-container.scss
new file mode 100644
index 0000000..d3f6267
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_outer-container.scss
@@ -0,0 +1,34 @@
+@charset "UTF-8";
+
+/// Makes an element a outer container by centering it in the viewport, clearing its floats, and setting its `max-width`.
+/// Although optional, using `outer-container` is recommended. The mixin can be called on more than one element per page, as long as they are not nested.
+///
+/// @param {Number [unit]} $local-max-width [$max-width]
+/// Max width to be applied to the element. Can be a percentage or a measure.
+///
+/// @example scss - Usage
+/// .element {
+/// @include outer-container(100%);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// max-width: 100%;
+/// margin-left: auto;
+/// margin-right: auto;
+/// }
+///
+/// .element::after {
+/// clear: both;
+/// content: "";
+/// display: table;
+/// }
+
+@mixin outer-container($local-max-width: $max-width) {
+ @include clearfix;
+ max-width: $local-max-width;
+ margin: {
+ left: auto;
+ right: auto;
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_pad.scss b/docs/_sass/uswds/lib/grid/_pad.scss
new file mode 100644
index 0000000..d697e1b
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_pad.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Adds padding to the element.
+///
+/// @param {List} $padding [flex-gutter()]
+/// A list of padding value(s) to use. Passing `default` in the list will result in using the gutter width as a padding value.
+///
+/// @example scss - Usage
+/// .element {
+/// @include pad(30px -20px 10px default);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// padding: 30px -20px 10px 2.35765%;
+/// }
+
+@mixin pad($padding: flex-gutter()) {
+ $padding-list: null;
+ @each $value in $padding {
+ $value: if($value == 'default', flex-gutter(), $value);
+ $padding-list: join($padding-list, $value);
+ }
+ padding: $padding-list;
+}
diff --git a/docs/_sass/uswds/lib/grid/_private.scss b/docs/_sass/uswds/lib/grid/_private.scss
new file mode 100644
index 0000000..4c4e18c
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_private.scss
@@ -0,0 +1,35 @@
+$parent-columns: $grid-columns !default;
+$fg-column: $column;
+$fg-gutter: $gutter;
+$fg-max-columns: $grid-columns;
+$container-display-table: false !default;
+$layout-direction: LTR !default;
+
+@function flex-grid($columns, $container-columns: $fg-max-columns) {
+ $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($width / $container-width);
+}
+
+@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
+ $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
+ @return percentage($gutter / $container-width);
+}
+
+@function grid-width($n) {
+ @return $n * $gw-column + ($n - 1) * $gw-gutter;
+}
+
+@function get-parent-columns($columns) {
+ @if $columns != $grid-columns {
+ $parent-columns: $columns !global;
+ } @else {
+ $parent-columns: $grid-columns !global;
+ }
+
+ @return $parent-columns;
+}
+
+@function is-display-table($container-is-display-table, $display) {
+ @return $container-is-display-table == true or $display == table;
+}
diff --git a/docs/_sass/uswds/lib/grid/_row.scss b/docs/_sass/uswds/lib/grid/_row.scss
new file mode 100644
index 0000000..4d913a9
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_row.scss
@@ -0,0 +1,52 @@
+@charset "UTF-8";
+
+/// Designates the element as a row of columns in the grid layout. It clears the floats on the element and sets its display property. Rows can't be nested, but there can be more than one row element—with different display properties—per layout.
+///
+/// @param {String} $display [default]
+/// Sets the display property of the element and the display context that will be used by its children. Can be `block` or `table`.
+///
+/// @param {String} $direction [$default-layout-direction]
+/// Sets the layout direction. Can be `LTR` (left-to-right) or `RTL` (right-to-left).
+///
+/// @example scss - Usage
+/// .element {
+/// @include row();
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// *zoom: 1;
+/// display: block;
+/// }
+///
+/// .element:before, .element:after {
+/// content: " ";
+/// display: table;
+/// }
+///
+/// .element:after {
+/// clear: both;
+/// }
+
+@mixin row($display: default, $direction: $default-layout-direction) {
+ @if $direction != $default-layout-direction {
+ @include -neat-warn("The $direction argument will be deprecated in future versions in favor of the direction(){...} mixin.");
+ }
+
+ $layout-direction: $direction !global;
+
+ @if $display != default {
+ @include -neat-warn("The $display argument will be deprecated in future versions in favor of the display(){...} mixin.");
+ }
+
+ @if $display == table {
+ display: table;
+ @include fill-parent;
+ table-layout: fixed;
+ $container-display-table: true !global;
+ } @else {
+ @include clearfix;
+ display: block;
+ $container-display-table: false !global;
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_shift.scss b/docs/_sass/uswds/lib/grid/_shift.scss
new file mode 100644
index 0000000..c0f24cd
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_shift.scss
@@ -0,0 +1,50 @@
+@charset "UTF-8";
+
+/// Translates an element horizontally by a number of columns. Positive arguments shift the element to the active layout direction, while negative ones shift it to the opposite direction.
+///
+/// @param {Number (unitless)} $n-columns [1]
+/// Number of columns by which the element shifts.
+///
+/// @example scss - Usage
+/// .element {
+/// @include shift(-3);
+/// }
+///
+/// @example css - CSS output
+/// .element {
+/// margin-left: -25.58941%;
+/// }
+
+@mixin shift($n-columns: 1) {
+ @include shift-in-context($n-columns);
+}
+
+/// Translates an element horizontally by a number of columns, in a specific nesting context.
+///
+/// @param {List} $shift
+/// A list containing the number of columns to shift (`$columns`) and the number of columns of the parent element (`$container-columns`).
+///
+/// The two values can be separated with any string such as `of`, `/`, etc.
+///
+/// @example scss - Usage
+/// .element {
+/// @include shift(-3 of 6);
+/// }
+///
+/// @example css - CSS output
+/// .element {
+/// margin-left: -52.41458%;
+/// }
+
+@mixin shift-in-context($shift: $columns of $container-columns) {
+ $n-columns: nth($shift, 1);
+ $parent-columns: container-shift($shift) !global;
+
+ $direction: get-direction($layout-direction, $default-layout-direction);
+ $opposite-direction: get-opposite-direction($direction);
+
+ margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns);
+
+ // Reset nesting context
+ $parent-columns: $grid-columns !global;
+}
diff --git a/docs/_sass/uswds/lib/grid/_span-columns.scss b/docs/_sass/uswds/lib/grid/_span-columns.scss
new file mode 100644
index 0000000..a7f9b00
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_span-columns.scss
@@ -0,0 +1,94 @@
+@charset "UTF-8";
+
+/// Specifies the number of columns an element should span. If the selector is nested the number of columns of its parent element should be passed as an argument as well.
+///
+/// @param {List} $span
+/// A list containing `$columns`, the unitless number of columns the element spans (required), and `$container-columns`, the number of columns the parent element spans (optional).
+///
+/// If only one value is passed, it is assumed that it's `$columns` and that that `$container-columns` is equal to `$grid-columns`, the total number of columns in the grid.
+///
+/// The values can be separated with any string such as `of`, `/`, etc.
+///
+/// `$columns` also accepts decimals for when it's necessary to break out of the standard grid. E.g. Passing `2.4` in a standard 12 column grid will divide the row into 5 columns.
+///
+/// @param {String} $display [block]
+/// Sets the display property of the element. By default it sets the display property of the element to `block`.
+///
+/// If passed `block-collapse`, it also removes the margin gutter by adding it to the element width.
+///
+/// If passed `table`, it sets the display property to `table-cell` and calculates the width of the element without taking gutters into consideration. The result does not align with the block-based grid.
+///
+/// @example scss - Usage
+/// .element {
+/// @include span-columns(6);
+///
+/// .nested-element {
+/// @include span-columns(2 of 6);
+/// }
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// display: block;
+/// float: left;
+/// margin-right: 2.35765%;
+/// width: 48.82117%;
+/// }
+///
+/// .element:last-child {
+/// margin-right: 0;
+/// }
+///
+/// .element .nested-element {
+/// display: block;
+/// float: left;
+/// margin-right: 4.82916%;
+/// width: 30.11389%;
+/// }
+///
+/// .element .nested-element:last-child {
+/// margin-right: 0;
+/// }
+
+@mixin span-columns($span: $columns of $container-columns, $display: block) {
+ $columns: nth($span, 1);
+ $container-columns: container-span($span);
+
+ $parent-columns: get-parent-columns($container-columns) !global;
+
+ $direction: get-direction($layout-direction, $default-layout-direction);
+ $opposite-direction: get-opposite-direction($direction);
+
+ $display-table: is-display-table($container-display-table, $display);
+
+ @if $display-table {
+ display: table-cell;
+ width: percentage($columns / $container-columns);
+ } @else {
+ float: #{$opposite-direction};
+
+ @if $display != no-display {
+ display: block;
+ }
+
+ @if $display == collapse {
+ @include -neat-warn("The 'collapse' argument will be deprecated. Use 'block-collapse' instead.");
+ }
+
+ @if $display == collapse or $display == block-collapse {
+ width: flex-grid($columns, $container-columns) + flex-gutter($container-columns);
+
+ &:last-child {
+ width: flex-grid($columns, $container-columns);
+ }
+
+ } @else {
+ margin-#{$direction}: flex-gutter($container-columns);
+ width: flex-grid($columns, $container-columns);
+
+ &:last-child {
+ margin-#{$direction}: 0;
+ }
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/grid/_to-deprecate.scss b/docs/_sass/uswds/lib/grid/_to-deprecate.scss
new file mode 100644
index 0000000..aeea079
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_to-deprecate.scss
@@ -0,0 +1,97 @@
+@charset "UTF-8";
+
+@mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) {
+ @include -neat-warn("The breakpoint() mixin was renamed to media() in Neat 1.0. Please update your project with the new syntax before the next version bump.");
+
+ @if length($query) == 1 {
+ @media screen and ($default-feature: nth($query, 1)) {
+ $default-grid-columns: $grid-columns;
+ $grid-columns: $total-columns;
+ @content;
+ $grid-columns: $default-grid-columns;
+ }
+ } @else if length($query) == 2 {
+ @media screen and (nth($query, 1): nth($query, 2)) {
+ $default-grid-columns: $grid-columns;
+ $grid-columns: $total-columns;
+ @content;
+ $grid-columns: $default-grid-columns;
+ }
+ } @else if length($query) == 3 {
+ @media screen and (nth($query, 1): nth($query, 2)) {
+ $default-grid-columns: $grid-columns;
+ $grid-columns: nth($query, 3);
+ @content;
+ $grid-columns: $default-grid-columns;
+ }
+ } @else if length($query) == 4 {
+ @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) {
+ $default-grid-columns: $grid-columns;
+ $grid-columns: $total-columns;
+ @content;
+ $grid-columns: $default-grid-columns;
+ }
+ } @else if length($query) == 5 {
+ @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) {
+ $default-grid-columns: $grid-columns;
+ $grid-columns: nth($query, 5);
+ @content;
+ $grid-columns: $default-grid-columns;
+ }
+ } @else {
+ @include -neat-warn("Wrong number of arguments for breakpoint(). Read the documentation for more details.");
+ }
+}
+
+@mixin nth-omega($nth, $display: block, $direction: default) {
+ @include -neat-warn("The nth-omega() mixin is deprecated. Please use omega() instead.");
+ @include omega($nth $display, $direction);
+}
+
+/// Resets the active display property to `block`. Particularly useful when changing the display property in a single row.
+///
+/// @example scss - Usage
+/// .element {
+/// @include row(table);
+/// // Context changed to table display
+/// }
+///
+/// @include reset-display;
+/// // Context is reset to block display
+
+@mixin reset-display {
+ $container-display-table: false !global;
+ @include -neat-warn("Resetting $display will be deprecated in future versions in favor of the display(){...} mixin.");
+}
+
+/// Resets the active layout direction to the default value set in `$default-layout-direction`. Particularly useful when changing the layout direction in a single row.
+///
+/// @example scss - Usage
+/// .element {
+/// @include row($direction: RTL);
+/// // Context changed to right-to-left
+/// }
+///
+/// @include reset-layout-direction;
+/// // Context is reset to left-to-right
+
+@mixin reset-layout-direction {
+ $layout-direction: $default-layout-direction !global;
+ @include -neat-warn("Resetting $direction will be deprecated in future versions in favor of the direction(){...} mixin.");
+}
+
+/// Resets both the active layout direction and the active display property.
+///
+/// @example scss - Usage
+/// .element {
+/// @include row(table, RTL);
+/// // Context changed to table table and right-to-left
+/// }
+///
+/// @include reset-all;
+/// // Context is reset to block display and left-to-right
+
+@mixin reset-all {
+ @include reset-display;
+ @include reset-layout-direction;
+}
diff --git a/docs/_sass/uswds/lib/grid/_visual-grid.scss b/docs/_sass/uswds/lib/grid/_visual-grid.scss
new file mode 100644
index 0000000..1192d82
--- /dev/null
+++ b/docs/_sass/uswds/lib/grid/_visual-grid.scss
@@ -0,0 +1,42 @@
+@charset "UTF-8";
+
+@mixin grid-column-gradient($values...) {
+ background-image: -webkit-linear-gradient(left, $values);
+ background-image: -moz-linear-gradient(left, $values);
+ background-image: -ms-linear-gradient(left, $values);
+ background-image: -o-linear-gradient(left, $values);
+ background-image: unquote("linear-gradient(to left, #{$values})");
+}
+
+@if $visual-grid == true or $visual-grid == yes {
+ body:before {
+ @include grid-column-gradient(gradient-stops($grid-columns));
+ content: "";
+ display: inline-block;
+ height: 100%;
+ left: 0;
+ margin: 0 auto;
+ max-width: $max-width;
+ opacity: $visual-grid-opacity;
+ pointer-events: none;
+ position: fixed;
+ right: 0;
+ width: 100%;
+
+ @if $visual-grid-index == back {
+ z-index: -1;
+ }
+
+ @else if $visual-grid-index == front {
+ z-index: 9999;
+ }
+
+ @each $breakpoint in $visual-grid-breakpoints {
+ @if $breakpoint {
+ @include media($breakpoint) {
+ @include grid-column-gradient(gradient-stops($grid-columns));
+ }
+ }
+ }
+ }
+}
diff --git a/docs/_sass/uswds/lib/helpers/_convert-units.scss b/docs/_sass/uswds/lib/helpers/_convert-units.scss
new file mode 100644
index 0000000..e0a65a0
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_convert-units.scss
@@ -0,0 +1,21 @@
+//************************************************************************//
+// Helper function for str-to-num fn.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _convert-units($number, $unit) {
+ $strings: "px", "cm", "mm", "%", "ch", "pica", "in", "em", "rem", "pt", "pc", "ex", "vw", "vh", "vmin", "vmax", "deg", "rad", "grad", "turn";
+ $units: 1px, 1cm, 1mm, 1%, 1ch, 1pica, 1in, 1em, 1rem, 1pt, 1pc, 1ex, 1vw, 1vh, 1vmin, 1vmax, 1deg, 1rad, 1grad, 1turn;
+ $index: index($strings, $unit);
+
+ @if not $index {
+ @warn "Unknown unit `#{$unit}`.";
+ @return false;
+ }
+
+ @if type-of($number) != "number" {
+ @warn "`#{$number} is not a number`";
+ @return false;
+ }
+
+ @return $number * nth($units, $index);
+}
diff --git a/docs/_sass/uswds/lib/helpers/_directional-values.scss b/docs/_sass/uswds/lib/helpers/_directional-values.scss
new file mode 100644
index 0000000..6ee538d
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_directional-values.scss
@@ -0,0 +1,96 @@
+@charset "UTF-8";
+
+/// Directional-property mixins are shorthands for writing properties like the following
+///
+/// @ignore You can also use `false` instead of `null`.
+///
+/// @param {List} $vals
+/// List of directional values
+///
+/// @example scss - Usage
+/// .element {
+/// @include border-style(dotted null);
+/// @include margin(null 0 10px);
+/// }
+///
+/// @example css - CSS Output
+/// .element {
+/// border-bottom-style: dotted;
+/// border-top-style: dotted;
+/// margin-bottom: 10px;
+/// margin-left: 0;
+/// margin-right: 0;
+/// }
+///
+/// @require {function} contains-falsy
+///
+/// @return {List}
+
+@function collapse-directionals($vals) {
+ $output: null;
+
+ $a: nth($vals, 1);
+ $b: if(length($vals) < 2, $a, nth($vals, 2));
+ $c: if(length($vals) < 3, $a, nth($vals, 3));
+ $d: if(length($vals) < 2, $a, nth($vals, if(length($vals) < 4, 2, 4)));
+
+ @if $a == 0 { $a: 0; }
+ @if $b == 0 { $b: 0; }
+ @if $c == 0 { $c: 0; }
+ @if $d == 0 { $d: 0; }
+
+ @if $a == $b and $a == $c and $a == $d { $output: $a; }
+ @else if $a == $c and $b == $d { $output: $a $b; }
+ @else if $b == $d { $output: $a $b $c; }
+ @else { $output: $a $b $c $d; }
+
+ @return $output;
+}
+
+/// Output directional properties, for instance `margin`.
+///
+/// @access private
+///
+/// @param {String} $pre
+/// Prefix to use
+/// @param {String} $suf
+/// Suffix to use
+/// @param {List} $vals
+/// List of values
+///
+/// @require {function} collapse-directionals
+/// @require {function} contains-falsy
+
+@mixin directional-property($pre, $suf, $vals) {
+ // Property Names
+ $top: $pre + "-top" + if($suf, "-#{$suf}", "");
+ $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", "");
+ $left: $pre + "-left" + if($suf, "-#{$suf}", "");
+ $right: $pre + "-right" + if($suf, "-#{$suf}", "");
+ $all: $pre + if($suf, "-#{$suf}", "");
+
+ $vals: collapse-directionals($vals);
+
+ @if contains-falsy($vals) {
+ @if nth($vals, 1) { #{$top}: nth($vals, 1); }
+
+ @if length($vals) == 1 {
+ @if nth($vals, 1) { #{$right}: nth($vals, 1); }
+ } @else {
+ @if nth($vals, 2) { #{$right}: nth($vals, 2); }
+ }
+
+ @if length($vals) == 2 {
+ @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+ } @else if length($vals) == 3 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 2) { #{$left}: nth($vals, 2); }
+ } @else if length($vals) == 4 {
+ @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }
+ @if nth($vals, 4) { #{$left}: nth($vals, 4); }
+ }
+ } @else {
+ #{$all}: $vals;
+ }
+}
diff --git a/docs/_sass/uswds/lib/helpers/_font-source-declaration.scss b/docs/_sass/uswds/lib/helpers/_font-source-declaration.scss
new file mode 100644
index 0000000..7f17586
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_font-source-declaration.scss
@@ -0,0 +1,43 @@
+// Used for creating the source string for fonts using @font-face
+// Reference: http://goo.gl/Ru1bKP
+
+@function font-url-prefixer($asset-pipeline) {
+ @if $asset-pipeline == true {
+ @return font-url;
+ } @else {
+ @return url;
+ }
+}
+
+@function font-source-declaration(
+ $font-family,
+ $file-path,
+ $asset-pipeline,
+ $file-formats,
+ $font-url) {
+
+ $src: ();
+
+ $formats-map: (
+ eot: "#{$file-path}.eot?#iefix" format("embedded-opentype"),
+ woff2: "#{$file-path}.woff2" format("woff2"),
+ woff: "#{$file-path}.woff" format("woff"),
+ ttf: "#{$file-path}.ttf" format("truetype"),
+ svg: "#{$file-path}.svg##{$font-family}" format("svg")
+ );
+
+ @each $key, $values in $formats-map {
+ @if contains($file-formats, $key) {
+ $file-path: nth($values, 1);
+ $font-format: nth($values, 2);
+
+ @if $asset-pipeline == true {
+ $src: append($src, font-url($file-path) $font-format, comma);
+ } @else {
+ $src: append($src, url($file-path) $font-format, comma);
+ }
+ }
+ }
+
+ @return $src;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_gradient-positions-parser.scss b/docs/_sass/uswds/lib/helpers/_gradient-positions-parser.scss
new file mode 100644
index 0000000..07d30b6
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_gradient-positions-parser.scss
@@ -0,0 +1,13 @@
+@function _gradient-positions-parser($gradient-type, $gradient-positions) {
+ @if $gradient-positions
+ and ($gradient-type == linear)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _linear-positions-parser($gradient-positions);
+ }
+ @else if $gradient-positions
+ and ($gradient-type == radial)
+ and (type-of($gradient-positions) != color) {
+ $gradient-positions: _radial-positions-parser($gradient-positions);
+ }
+ @return $gradient-positions;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_linear-angle-parser.scss b/docs/_sass/uswds/lib/helpers/_linear-angle-parser.scss
new file mode 100644
index 0000000..e0401ed
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_linear-angle-parser.scss
@@ -0,0 +1,25 @@
+// Private function for linear-gradient-parser
+@function _linear-angle-parser($image, $first-val, $prefix, $suffix) {
+ $offset: null;
+ $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val));
+ $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val));
+
+ @if ($unit-long == "grad") or
+ ($unit-long == "turn") {
+ $offset: if($unit-long == "grad", -100grad * 3, -0.75turn);
+ }
+
+ @else if ($unit-short == "deg") or
+ ($unit-short == "rad") {
+ $offset: if($unit-short == "deg", -90 * 3, 1.6rad);
+ }
+
+ @if $offset {
+ $num: _str-to-num($first-val);
+
+ @return (
+ webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix,
+ spec-image: $image
+ );
+ }
+}
diff --git a/docs/_sass/uswds/lib/helpers/_linear-gradient-parser.scss b/docs/_sass/uswds/lib/helpers/_linear-gradient-parser.scss
new file mode 100644
index 0000000..48a8f77
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_linear-gradient-parser.scss
@@ -0,0 +1,41 @@
+@function _linear-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 1, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $has-multiple-vals: str-index($first-val, " ");
+ $has-single-position: unquote(_position-flipper($first-val) + "");
+ $has-angle: is-number(str-slice($first-val, 1, 1));
+
+ @if $has-multiple-vals {
+ $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals);
+ }
+
+ @else if $has-single-position != "" {
+ $pos: unquote($has-single-position + "");
+
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+
+ @else if $has-angle {
+ // Rotate degree for webkit
+ $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix);
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ );
+ }
+
+ @return $gradients;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_linear-positions-parser.scss b/docs/_sass/uswds/lib/helpers/_linear-positions-parser.scss
new file mode 100644
index 0000000..96d6a6d
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_linear-positions-parser.scss
@@ -0,0 +1,61 @@
+@function _linear-positions-parser($pos) {
+ $type: type-of(nth($pos, 1));
+ $spec: null;
+ $degree: null;
+ $side: null;
+ $corner: null;
+ $length: length($pos);
+ // Parse Side and corner positions
+ @if ($length > 1) {
+ @if nth($pos, 1) == "to" { // Newer syntax
+ $side: nth($pos, 2);
+
+ @if $length == 2 { // eg. to top
+ // Swap for backwards compatibility
+ $degree: _position-flipper(nth($pos, 2));
+ }
+ @else if $length == 3 { // eg. to top left
+ $corner: nth($pos, 3);
+ }
+ }
+ @else if $length == 2 { // Older syntax ("top left")
+ $side: _position-flipper(nth($pos, 1));
+ $corner: _position-flipper(nth($pos, 2));
+ }
+
+ @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") {
+ $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});
+ }
+ $spec: to $side $corner;
+ }
+ @else if $length == 1 {
+ // Swap for backwards compatibility
+ @if $type == string {
+ $degree: $pos;
+ $spec: to _position-flipper($pos);
+ }
+ @else {
+ $degree: -270 - $pos; //rotate the gradient opposite from spec
+ $spec: $pos;
+ }
+ }
+ $degree: unquote($degree + ",");
+ $spec: unquote($spec + ",");
+ @return $degree $spec;
+}
+
+@function _position-flipper($pos) {
+ @return if($pos == left, right, null)
+ if($pos == right, left, null)
+ if($pos == top, bottom, null)
+ if($pos == bottom, top, null);
+}
diff --git a/docs/_sass/uswds/lib/helpers/_linear-side-corner-parser.scss b/docs/_sass/uswds/lib/helpers/_linear-side-corner-parser.scss
new file mode 100644
index 0000000..7a69125
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_linear-side-corner-parser.scss
@@ -0,0 +1,31 @@
+// Private function for linear-gradient-parser
+@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) {
+ $val-1: str-slice($first-val, 1, $has-multiple-vals - 1);
+ $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val));
+ $val-3: null;
+ $has-val-3: str-index($val-2, " ");
+
+ @if $has-val-3 {
+ $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2));
+ $val-2: str-slice($val-2, 1, $has-val-3 - 1);
+ }
+
+ $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3);
+ $pos: unquote($pos + "");
+
+ // Use old spec for webkit
+ @if $val-1 == "to" {
+ @return (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ );
+ }
+
+ // Bring the code up to spec
+ @else {
+ @return (
+ webkit-image: -webkit- + $image,
+ spec-image: $prefix + "to " + $pos + $suffix
+ );
+ }
+}
diff --git a/docs/_sass/uswds/lib/helpers/_radial-arg-parser.scss b/docs/_sass/uswds/lib/helpers/_radial-arg-parser.scss
new file mode 100644
index 0000000..56c6030
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_radial-arg-parser.scss
@@ -0,0 +1,69 @@
+@function _radial-arg-parser($g1, $g2, $pos, $shape-size) {
+ @each $value in $g1, $g2 {
+ $first-val: nth($value, 1);
+ $pos-type: type-of($first-val);
+ $spec-at-index: null;
+
+ // Determine if spec was passed to mixin
+ @if type-of($value) == list {
+ $spec-at-index: if(index($value, at), index($value, at), false);
+ }
+ @if $spec-at-index {
+ @if $spec-at-index > 1 {
+ @for $i from 1 through ($spec-at-index - 1) {
+ $shape-size: $shape-size nth($value, $i);
+ }
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ @else if $spec-at-index == 1 {
+ @for $i from ($spec-at-index + 1) through length($value) {
+ $pos: $pos nth($value, $i);
+ }
+ }
+ $g1: null;
+ }
+
+ // If not spec calculate correct values
+ @else {
+ @if ($pos-type != color) or ($first-val != "transparent") {
+ @if ($pos-type == number)
+ or ($first-val == "center")
+ or ($first-val == "top")
+ or ($first-val == "right")
+ or ($first-val == "bottom")
+ or ($first-val == "left") {
+
+ $pos: $value;
+
+ @if $pos == $g1 {
+ $g1: null;
+ }
+ }
+
+ @else if
+ ($first-val == "ellipse")
+ or ($first-val == "circle")
+ or ($first-val == "closest-side")
+ or ($first-val == "closest-corner")
+ or ($first-val == "farthest-side")
+ or ($first-val == "farthest-corner")
+ or ($first-val == "contain")
+ or ($first-val == "cover") {
+
+ $shape-size: $value;
+
+ @if $value == $g1 {
+ $g1: null;
+ }
+
+ @else if $value == $g2 {
+ $g2: null;
+ }
+ }
+ }
+ }
+ }
+ @return $g1, $g2, $pos, $shape-size;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_radial-gradient-parser.scss b/docs/_sass/uswds/lib/helpers/_radial-gradient-parser.scss
new file mode 100644
index 0000000..5444d80
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_radial-gradient-parser.scss
@@ -0,0 +1,50 @@
+@function _radial-gradient-parser($image) {
+ $image: unquote($image);
+ $gradients: ();
+ $start: str-index($image, "(");
+ $end: str-index($image, ",");
+ $first-val: str-slice($image, $start + 1, $end - 1);
+
+ $prefix: str-slice($image, 1, $start);
+ $suffix: str-slice($image, $end, str-length($image));
+
+ $is-spec-syntax: str-index($first-val, "at");
+
+ @if $is-spec-syntax and $is-spec-syntax > 1 {
+ $keyword: str-slice($first-val, 1, $is-spec-syntax - 2);
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+ $pos: append($pos, $keyword, comma);
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ );
+ }
+
+ @else if $is-spec-syntax == 1 {
+ $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));
+
+ $gradients: (
+ webkit-image: -webkit- + $prefix + $pos + $suffix,
+ spec-image: $image
+ );
+ }
+
+ @else if str-index($image, "cover") or str-index($image, "contain") {
+ @warn "Radial-gradient needs to be updated to conform to latest spec.";
+
+ $gradients: (
+ webkit-image: null,
+ spec-image: $image
+ );
+ }
+
+ @else {
+ $gradients: (
+ webkit-image: -webkit- + $image,
+ spec-image: $image
+ );
+ }
+
+ @return $gradients;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_radial-positions-parser.scss b/docs/_sass/uswds/lib/helpers/_radial-positions-parser.scss
new file mode 100644
index 0000000..3c552ad
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_radial-positions-parser.scss
@@ -0,0 +1,18 @@
+@function _radial-positions-parser($gradient-pos) {
+ $shape-size: nth($gradient-pos, 1);
+ $pos: nth($gradient-pos, 2);
+ $shape-size-spec: _shape-size-stripper($shape-size);
+
+ $pre-spec: unquote(if($pos, "#{$pos}, ", null))
+ unquote(if($shape-size, "#{$shape-size},", null));
+ $pos-spec: if($pos, "at #{$pos}", null);
+
+ $spec: "#{$shape-size-spec} #{$pos-spec}";
+
+ // Add comma
+ @if ($spec != " ") {
+ $spec: "#{$spec},";
+ }
+
+ @return $pre-spec $spec;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_render-gradients.scss b/docs/_sass/uswds/lib/helpers/_render-gradients.scss
new file mode 100644
index 0000000..5765676
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_render-gradients.scss
@@ -0,0 +1,26 @@
+// User for linear and radial gradients within background-image or border-image properties
+
+@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {
+ $pre-spec: null;
+ $spec: null;
+ $vendor-gradients: null;
+ @if $gradient-type == linear {
+ @if $gradient-positions {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+ }
+ @else if $gradient-type == radial {
+ $pre-spec: nth($gradient-positions, 1);
+ $spec: nth($gradient-positions, 2);
+ }
+
+ @if $vendor {
+ $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);
+ }
+ @else if $vendor == false {
+ $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})";
+ $vendor-gradients: unquote($vendor-gradients);
+ }
+ @return $vendor-gradients;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_shape-size-stripper.scss b/docs/_sass/uswds/lib/helpers/_shape-size-stripper.scss
new file mode 100644
index 0000000..ee5eda4
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_shape-size-stripper.scss
@@ -0,0 +1,10 @@
+@function _shape-size-stripper($shape-size) {
+ $shape-size-spec: null;
+ @each $value in $shape-size {
+ @if ($value == "cover") or ($value == "contain") {
+ $value: null;
+ }
+ $shape-size-spec: "#{$shape-size-spec} #{$value}";
+ }
+ @return $shape-size-spec;
+}
diff --git a/docs/_sass/uswds/lib/helpers/_str-to-num.scss b/docs/_sass/uswds/lib/helpers/_str-to-num.scss
new file mode 100644
index 0000000..3ef1d87
--- /dev/null
+++ b/docs/_sass/uswds/lib/helpers/_str-to-num.scss
@@ -0,0 +1,50 @@
+//************************************************************************//
+// Helper function for linear/radial-gradient-parsers.
+// Source: http://sassmeister.com/gist/9647408
+//************************************************************************//
+@function _str-to-num($string) {
+ // Matrices
+ $strings: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9";
+ $numbers: 0 1 2 3 4 5 6 7 8 9;
+
+ // Result
+ $result: 0;
+ $divider: 0;
+ $minus: false;
+
+ // Looping through all characters
+ @for $i from 1 through str-length($string) {
+ $character: str-slice($string, $i, $i);
+ $index: index($strings, $character);
+
+ @if $character == "-" {
+ $minus: true;
+ }
+
+ @else if $character == "." {
+ $divider: 1;
+ }
+
+ @else {
+ @if not $index {
+ $result: if($minus, $result * -1, $result);
+ @return _convert-units($result, str-slice($string, $i));
+ }
+
+ $number: nth($numbers, $index);
+
+ @if $divider == 0 {
+ $result: $result * 10;
+ }
+
+ @else {
+ // Move the decimal dot to the left
+ $divider: $divider * 10;
+ $number: $number / $divider;
+ }
+
+ $result: $result + $number;
+ }
+ }
+ @return if($minus, $result * -1, $result);
+}
diff --git a/docs/_sass/uswds/lib/mixins/_clearfix.scss b/docs/_sass/uswds/lib/mixins/_clearfix.scss
new file mode 100644
index 0000000..e68efc4
--- /dev/null
+++ b/docs/_sass/uswds/lib/mixins/_clearfix.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides an easy way to include a clearfix for containing floats.
+///
+/// @link http://goo.gl/yP5hiZ
+///
+/// @example scss
+/// .element {
+/// @include clearfix;
+/// }
+///
+/// @example css
+/// .element::after {
+/// clear: both;
+/// content: "";
+/// display: block;
+/// }
+
+@mixin clearfix {
+ &::after {
+ clear: both;
+ content: "";
+ display: block;
+ }
+}
diff --git a/docs/_sass/uswds/lib/settings/_asset-pipeline.scss b/docs/_sass/uswds/lib/settings/_asset-pipeline.scss
new file mode 100644
index 0000000..4c6afc5
--- /dev/null
+++ b/docs/_sass/uswds/lib/settings/_asset-pipeline.scss
@@ -0,0 +1,7 @@
+@charset "UTF-8";
+
+/// A global setting to enable or disable the `$asset-pipeline` variable for all functions that accept it.
+///
+/// @type Bool
+
+$asset-pipeline: false !default;
diff --git a/docs/_sass/uswds/lib/settings/_disable-warnings.scss b/docs/_sass/uswds/lib/settings/_disable-warnings.scss
new file mode 100644
index 0000000..3f9b92a
--- /dev/null
+++ b/docs/_sass/uswds/lib/settings/_disable-warnings.scss
@@ -0,0 +1,13 @@
+@charset "UTF-8";
+
+/// Disable all deprecation warnings. Defaults to `false`. Set with a `!global` flag.
+///
+/// @type Bool
+
+$disable-warnings: false !default;
+
+@mixin -neat-warn($message) {
+ @if $disable-warnings == false {
+ @warn "#{$message}";
+ }
+}
diff --git a/docs/_sass/uswds/lib/settings/_grid.scss b/docs/_sass/uswds/lib/settings/_grid.scss
new file mode 100644
index 0000000..c1ab7fd
--- /dev/null
+++ b/docs/_sass/uswds/lib/settings/_grid.scss
@@ -0,0 +1,51 @@
+@charset "UTF-8";
+
+/// Sets the relative width of a single grid column. The unit used should be the same one used to define `$gutter`. Set with a `!global` flag.
+///
+/// @type Number (Unit)
+
+$column: 4.2358em !default;
+
+/// Sets the relative width of a single grid gutter. The unit used should be the same one used to define `$column`. Set with the `!global` flag.
+///
+/// @type Number (Unit)
+
+$gutter: 1.618em !default;
+
+/// Sets the total number of columns in the grid. Its value can be overridden inside a media query using the `media()` mixin. Set with the `!global` flag.
+///
+/// @type Number (Unitless)
+
+$grid-columns: 12 !default;
+
+/// Sets the max-width property of the element that includes `outer-container()`. Set with the `!global` flag.
+///
+/// @type Number (Unit)
+///
+$max-width: 1200px !default;
+
+/// When set to true, it sets the box-sizing property of all elements to `border-box`. Set with a `!global` flag.
+///
+/// @type Bool
+///
+/// @example css - CSS Output
+/// html {
+/// box-sizing: border-box; }
+///
+/// *, *::after, *::before {
+/// box-sizing: inherit;
+/// }
+
+$border-box-sizing: true !default;
+
+/// Sets the default [media feature](http://www.w3.org/TR/css3-mediaqueries/#media) that `media()` and `new-breakpoint()` revert to when only a breakpoint value is passed. Set with a `!global` flag.
+///
+/// @type String
+
+$default-feature: min-width; // Default @media feature for the breakpoint() mixin
+
+///Sets the default layout direction of the grid. Can be `LTR` or `RTL`. Set with a `!global` flag.
+///
+///@type String
+
+$default-layout-direction: LTR !default;
diff --git a/docs/_sass/uswds/lib/settings/_prefixer.scss b/docs/_sass/uswds/lib/settings/_prefixer.scss
new file mode 100644
index 0000000..8c39051
--- /dev/null
+++ b/docs/_sass/uswds/lib/settings/_prefixer.scss
@@ -0,0 +1,9 @@
+@charset "UTF-8";
+
+/// Global variables to enable or disable vendor prefixes
+
+$prefix-for-webkit: true !default;
+$prefix-for-mozilla: true !default;
+$prefix-for-microsoft: true !default;
+$prefix-for-opera: true !default;
+$prefix-for-spec: true !default;
diff --git a/docs/_sass/uswds/lib/settings/_px-to-em.scss b/docs/_sass/uswds/lib/settings/_px-to-em.scss
new file mode 100644
index 0000000..f2f9a3e
--- /dev/null
+++ b/docs/_sass/uswds/lib/settings/_px-to-em.scss
@@ -0,0 +1 @@
+$em-base: 16px !default;
diff --git a/docs/_sass/uswds/lib/settings/_visual-grid.scss b/docs/_sass/uswds/lib/settings/_visual-grid.scss
new file mode 100644
index 0000000..9cd1815
--- /dev/null
+++ b/docs/_sass/uswds/lib/settings/_visual-grid.scss
@@ -0,0 +1,27 @@
+@charset "UTF-8";
+
+/// Displays the visual grid when set to true. The overlaid grid may be few pixels off depending on the browser's rendering engine and pixel rounding algorithm. Set with the `!global` flag.
+///
+/// @type Bool
+
+$visual-grid: false !default;
+
+/// Sets the visual grid color. Set with `!global` flag.
+///
+/// @type Color
+
+$visual-grid-color: #eee !default;
+
+/// Sets the `z-index` property of the visual grid. Can be `back` (behind content) or `front` (in front of content). Set with `!global` flag.
+///
+/// @type String
+
+$visual-grid-index: back !default;
+
+/// Sets the opacity property of the visual grid. Set with `!global` flag.
+///
+/// @type Number (unitless)
+
+$visual-grid-opacity: 0.4 !default;
+
+$visual-grid-breakpoints: () !default;
diff --git a/docs/_sass/uswds/uswds.scss b/docs/_sass/uswds/uswds.scss
new file mode 100644
index 0000000..39ea747
--- /dev/null
+++ b/docs/_sass/uswds/uswds.scss
@@ -0,0 +1,42 @@
+/*! uswds @version */
+
+// Vendor -------------- //
+@import 'core/variables-vendor';
+@import 'lib/bourbon';
+@import 'lib/neat';
+@import 'lib/normalize';
+
+// Core -------------- //
+@import 'core/variables';
+@import 'core/fonts';
+@import 'core/grid';
+@import 'core/utilities';
+@import 'core/base';
+
+// Elements -------------- //
+// Styles basic HTML elements
+@import 'elements/buttons';
+@import 'elements/embed';
+@import 'elements/figure';
+@import 'elements/inputs';
+@import 'elements/labels';
+@import 'elements/list';
+@import 'elements/table';
+@import 'elements/typography';
+
+// Components -------------- //
+@import 'components/accordions';
+@import 'components/alerts';
+@import 'components/banner';
+@import 'components/footer';
+@import 'components/forms';
+@import 'components/graphic-list';
+@import 'components/header';
+@import 'components/hero';
+@import 'components/layout';
+@import 'components/media-block';
+@import 'components/navigation';
+@import 'components/search';
+@import 'components/section';
+@import 'components/sidenav';
+@import 'components/skipnav';
diff --git a/docs/assets/announcement-imgs/banner-outlinetocats.png b/docs/assets/announcement-imgs/banner-outlinetocats.png
new file mode 100644
index 0000000..ef395f7
Binary files /dev/null and b/docs/assets/announcement-imgs/banner-outlinetocats.png differ
diff --git a/docs/assets/announcement-imgs/changelog.png b/docs/assets/announcement-imgs/changelog.png
new file mode 100644
index 0000000..abc5e9b
Binary files /dev/null and b/docs/assets/announcement-imgs/changelog.png differ
diff --git a/docs/assets/announcement-imgs/public-roadmap.png b/docs/assets/announcement-imgs/public-roadmap.png
new file mode 100644
index 0000000..97e1895
Binary files /dev/null and b/docs/assets/announcement-imgs/public-roadmap.png differ
diff --git a/docs/assets/announcement-imgs/webinar-squirrels.png b/docs/assets/announcement-imgs/webinar-squirrels.png
new file mode 100644
index 0000000..a21bddb
Binary files /dev/null and b/docs/assets/announcement-imgs/webinar-squirrels.png differ
diff --git a/docs/assets/announcement-imgs/webinar-wednesdays-oct.png b/docs/assets/announcement-imgs/webinar-wednesdays-oct.png
new file mode 100644
index 0000000..9924b0f
Binary files /dev/null and b/docs/assets/announcement-imgs/webinar-wednesdays-oct.png differ
diff --git a/docs/assets/announcement-imgs/webinars-october.png b/docs/assets/announcement-imgs/webinars-october.png
new file mode 100644
index 0000000..9a414a5
Binary files /dev/null and b/docs/assets/announcement-imgs/webinars-october.png differ
diff --git a/docs/assets/css/style.scss b/docs/assets/css/style.scss
new file mode 100644
index 0000000..3e62c15
--- /dev/null
+++ b/docs/assets/css/style.scss
@@ -0,0 +1,8 @@
+---
+# this ensures Jekyll reads the file to be transformed into CSS later
+# only Main files contain this front matter, not partials.
+---
+@charset "UTF-8";
+@import '_variables.scss';
+@import 'uswds/_all.scss';
+@import '_main.scss';
diff --git a/docs/assets/fonts/merriweather-bold-webfont.eot b/docs/assets/fonts/merriweather-bold-webfont.eot
new file mode 100755
index 0000000..c77b53b
Binary files /dev/null and b/docs/assets/fonts/merriweather-bold-webfont.eot differ
diff --git a/docs/assets/fonts/merriweather-bold-webfont.ttf b/docs/assets/fonts/merriweather-bold-webfont.ttf
new file mode 100755
index 0000000..44f33c2
Binary files /dev/null and b/docs/assets/fonts/merriweather-bold-webfont.ttf differ
diff --git a/docs/assets/fonts/merriweather-bold-webfont.woff b/docs/assets/fonts/merriweather-bold-webfont.woff
new file mode 100755
index 0000000..a728400
Binary files /dev/null and b/docs/assets/fonts/merriweather-bold-webfont.woff differ
diff --git a/docs/assets/fonts/merriweather-bold-webfont.woff2 b/docs/assets/fonts/merriweather-bold-webfont.woff2
new file mode 100755
index 0000000..ff3bddf
Binary files /dev/null and b/docs/assets/fonts/merriweather-bold-webfont.woff2 differ
diff --git a/docs/assets/fonts/merriweather-italic-webfont.eot b/docs/assets/fonts/merriweather-italic-webfont.eot
new file mode 100755
index 0000000..8841854
Binary files /dev/null and b/docs/assets/fonts/merriweather-italic-webfont.eot differ
diff --git a/docs/assets/fonts/merriweather-italic-webfont.ttf b/docs/assets/fonts/merriweather-italic-webfont.ttf
new file mode 100755
index 0000000..3180e52
Binary files /dev/null and b/docs/assets/fonts/merriweather-italic-webfont.ttf differ
diff --git a/docs/assets/fonts/merriweather-italic-webfont.woff b/docs/assets/fonts/merriweather-italic-webfont.woff
new file mode 100755
index 0000000..d7071e3
Binary files /dev/null and b/docs/assets/fonts/merriweather-italic-webfont.woff differ
diff --git a/docs/assets/fonts/merriweather-italic-webfont.woff2 b/docs/assets/fonts/merriweather-italic-webfont.woff2
new file mode 100755
index 0000000..f8660d0
Binary files /dev/null and b/docs/assets/fonts/merriweather-italic-webfont.woff2 differ
diff --git a/docs/assets/fonts/merriweather-light-webfont.eot b/docs/assets/fonts/merriweather-light-webfont.eot
new file mode 100755
index 0000000..4115d28
Binary files /dev/null and b/docs/assets/fonts/merriweather-light-webfont.eot differ
diff --git a/docs/assets/fonts/merriweather-light-webfont.ttf b/docs/assets/fonts/merriweather-light-webfont.ttf
new file mode 100755
index 0000000..03cfa42
Binary files /dev/null and b/docs/assets/fonts/merriweather-light-webfont.ttf differ
diff --git a/docs/assets/fonts/merriweather-light-webfont.woff b/docs/assets/fonts/merriweather-light-webfont.woff
new file mode 100755
index 0000000..9b34275
Binary files /dev/null and b/docs/assets/fonts/merriweather-light-webfont.woff differ
diff --git a/docs/assets/fonts/merriweather-light-webfont.woff2 b/docs/assets/fonts/merriweather-light-webfont.woff2
new file mode 100755
index 0000000..e53e4b5
Binary files /dev/null and b/docs/assets/fonts/merriweather-light-webfont.woff2 differ
diff --git a/docs/assets/fonts/merriweather-regular-webfont.eot b/docs/assets/fonts/merriweather-regular-webfont.eot
new file mode 100755
index 0000000..c4cde6d
Binary files /dev/null and b/docs/assets/fonts/merriweather-regular-webfont.eot differ
diff --git a/docs/assets/fonts/merriweather-regular-webfont.ttf b/docs/assets/fonts/merriweather-regular-webfont.ttf
new file mode 100755
index 0000000..3889a60
Binary files /dev/null and b/docs/assets/fonts/merriweather-regular-webfont.ttf differ
diff --git a/docs/assets/fonts/merriweather-regular-webfont.woff b/docs/assets/fonts/merriweather-regular-webfont.woff
new file mode 100755
index 0000000..1969d2e
Binary files /dev/null and b/docs/assets/fonts/merriweather-regular-webfont.woff differ
diff --git a/docs/assets/fonts/merriweather-regular-webfont.woff2 b/docs/assets/fonts/merriweather-regular-webfont.woff2
new file mode 100755
index 0000000..3023ce7
Binary files /dev/null and b/docs/assets/fonts/merriweather-regular-webfont.woff2 differ
diff --git a/docs/assets/fonts/sourcesanspro-bold-webfont.eot b/docs/assets/fonts/sourcesanspro-bold-webfont.eot
new file mode 100644
index 0000000..f031b20
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-bold-webfont.eot differ
diff --git a/docs/assets/fonts/sourcesanspro-bold-webfont.ttf b/docs/assets/fonts/sourcesanspro-bold-webfont.ttf
new file mode 100644
index 0000000..02ae55e
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-bold-webfont.ttf differ
diff --git a/docs/assets/fonts/sourcesanspro-bold-webfont.woff b/docs/assets/fonts/sourcesanspro-bold-webfont.woff
new file mode 100644
index 0000000..1985bc0
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-bold-webfont.woff differ
diff --git a/docs/assets/fonts/sourcesanspro-bold-webfont.woff2 b/docs/assets/fonts/sourcesanspro-bold-webfont.woff2
new file mode 100644
index 0000000..59cbda5
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-bold-webfont.woff2 differ
diff --git a/docs/assets/fonts/sourcesanspro-italic-webfont.eot b/docs/assets/fonts/sourcesanspro-italic-webfont.eot
new file mode 100644
index 0000000..e01ae4d
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-italic-webfont.eot differ
diff --git a/docs/assets/fonts/sourcesanspro-italic-webfont.ttf b/docs/assets/fonts/sourcesanspro-italic-webfont.ttf
new file mode 100644
index 0000000..b513cae
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-italic-webfont.ttf differ
diff --git a/docs/assets/fonts/sourcesanspro-italic-webfont.woff b/docs/assets/fonts/sourcesanspro-italic-webfont.woff
new file mode 100644
index 0000000..a512221
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-italic-webfont.woff differ
diff --git a/docs/assets/fonts/sourcesanspro-italic-webfont.woff2 b/docs/assets/fonts/sourcesanspro-italic-webfont.woff2
new file mode 100644
index 0000000..c1a6d9f
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-italic-webfont.woff2 differ
diff --git a/docs/assets/fonts/sourcesanspro-light-webfont.eot b/docs/assets/fonts/sourcesanspro-light-webfont.eot
new file mode 100644
index 0000000..55d1c87
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-light-webfont.eot differ
diff --git a/docs/assets/fonts/sourcesanspro-light-webfont.ttf b/docs/assets/fonts/sourcesanspro-light-webfont.ttf
new file mode 100644
index 0000000..a4c674a
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-light-webfont.ttf differ
diff --git a/docs/assets/fonts/sourcesanspro-light-webfont.woff b/docs/assets/fonts/sourcesanspro-light-webfont.woff
new file mode 100644
index 0000000..eb2fd5a
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-light-webfont.woff differ
diff --git a/docs/assets/fonts/sourcesanspro-light-webfont.woff2 b/docs/assets/fonts/sourcesanspro-light-webfont.woff2
new file mode 100644
index 0000000..091b807
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-light-webfont.woff2 differ
diff --git a/docs/assets/fonts/sourcesanspro-regular-webfont.eot b/docs/assets/fonts/sourcesanspro-regular-webfont.eot
new file mode 100644
index 0000000..cddebbc
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-regular-webfont.eot differ
diff --git a/docs/assets/fonts/sourcesanspro-regular-webfont.ttf b/docs/assets/fonts/sourcesanspro-regular-webfont.ttf
new file mode 100644
index 0000000..ac42fa1
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-regular-webfont.ttf differ
diff --git a/docs/assets/fonts/sourcesanspro-regular-webfont.woff b/docs/assets/fonts/sourcesanspro-regular-webfont.woff
new file mode 100644
index 0000000..e057c48
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-regular-webfont.woff differ
diff --git a/docs/assets/fonts/sourcesanspro-regular-webfont.woff2 b/docs/assets/fonts/sourcesanspro-regular-webfont.woff2
new file mode 100644
index 0000000..43ec601
Binary files /dev/null and b/docs/assets/fonts/sourcesanspro-regular-webfont.woff2 differ
diff --git a/docs/assets/img/Actions.png b/docs/assets/img/Actions.png
new file mode 100644
index 0000000..5ef37bf
Binary files /dev/null and b/docs/assets/img/Actions.png differ
diff --git a/docs/assets/img/GraceHoppertoCat_onTransparent.png b/docs/assets/img/GraceHoppertoCat_onTransparent.png
new file mode 100644
index 0000000..509e999
Binary files /dev/null and b/docs/assets/img/GraceHoppertoCat_onTransparent.png differ
diff --git a/docs/assets/img/alerts/info.svg b/docs/assets/img/alerts/info.svg
new file mode 100644
index 0000000..8c9ea2a
--- /dev/null
+++ b/docs/assets/img/alerts/info.svg
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/docs/assets/img/angle-arrow-down-hover.png b/docs/assets/img/angle-arrow-down-hover.png
new file mode 100644
index 0000000..e611376
Binary files /dev/null and b/docs/assets/img/angle-arrow-down-hover.png differ
diff --git a/docs/assets/img/angle-arrow-down-hover.svg b/docs/assets/img/angle-arrow-down-hover.svg
new file mode 100644
index 0000000..63b09db
--- /dev/null
+++ b/docs/assets/img/angle-arrow-down-hover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/angle-arrow-down-primary-hover.png b/docs/assets/img/angle-arrow-down-primary-hover.png
new file mode 100644
index 0000000..2ea6989
Binary files /dev/null and b/docs/assets/img/angle-arrow-down-primary-hover.png differ
diff --git a/docs/assets/img/angle-arrow-down-primary-hover.svg b/docs/assets/img/angle-arrow-down-primary-hover.svg
new file mode 100644
index 0000000..0777e09
--- /dev/null
+++ b/docs/assets/img/angle-arrow-down-primary-hover.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/angle-arrow-down-primary.png b/docs/assets/img/angle-arrow-down-primary.png
new file mode 100644
index 0000000..ee7b9ed
Binary files /dev/null and b/docs/assets/img/angle-arrow-down-primary.png differ
diff --git a/docs/assets/img/angle-arrow-down-primary.svg b/docs/assets/img/angle-arrow-down-primary.svg
new file mode 100644
index 0000000..f522e71
--- /dev/null
+++ b/docs/assets/img/angle-arrow-down-primary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/angle-arrow-down.png b/docs/assets/img/angle-arrow-down.png
new file mode 100644
index 0000000..31a8190
Binary files /dev/null and b/docs/assets/img/angle-arrow-down.png differ
diff --git a/docs/assets/img/angle-arrow-down.svg b/docs/assets/img/angle-arrow-down.svg
new file mode 100644
index 0000000..87cfc3a
--- /dev/null
+++ b/docs/assets/img/angle-arrow-down.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/angle-arrow-up-primary-hover.png b/docs/assets/img/angle-arrow-up-primary-hover.png
new file mode 100644
index 0000000..0ae4cdd
Binary files /dev/null and b/docs/assets/img/angle-arrow-up-primary-hover.png differ
diff --git a/docs/assets/img/angle-arrow-up-primary-hover.svg b/docs/assets/img/angle-arrow-up-primary-hover.svg
new file mode 100644
index 0000000..d97d6f0
--- /dev/null
+++ b/docs/assets/img/angle-arrow-up-primary-hover.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/angle-arrow-up-primary.png b/docs/assets/img/angle-arrow-up-primary.png
new file mode 100644
index 0000000..0ae4cdd
Binary files /dev/null and b/docs/assets/img/angle-arrow-up-primary.png differ
diff --git a/docs/assets/img/angle-arrow-up-primary.svg b/docs/assets/img/angle-arrow-up-primary.svg
new file mode 100644
index 0000000..d97d6f0
--- /dev/null
+++ b/docs/assets/img/angle-arrow-up-primary.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/bullet-blue.png b/docs/assets/img/bullet-blue.png
new file mode 100644
index 0000000..e2d26f8
Binary files /dev/null and b/docs/assets/img/bullet-blue.png differ
diff --git a/docs/assets/img/bullet-red.png b/docs/assets/img/bullet-red.png
new file mode 100644
index 0000000..8b5b7f9
Binary files /dev/null and b/docs/assets/img/bullet-red.png differ
diff --git a/docs/assets/img/close.png b/docs/assets/img/close.png
new file mode 100644
index 0000000..677ac8f
Binary files /dev/null and b/docs/assets/img/close.png differ
diff --git a/docs/assets/img/close.svg b/docs/assets/img/close.svg
new file mode 100644
index 0000000..25f1087
--- /dev/null
+++ b/docs/assets/img/close.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/gracehoppertocat.jpg b/docs/assets/img/gracehoppertocat.jpg
new file mode 100644
index 0000000..cc85a8d
Binary files /dev/null and b/docs/assets/img/gracehoppertocat.jpg differ
diff --git a/docs/assets/img/hero.png b/docs/assets/img/hero.png
new file mode 100644
index 0000000..a088681
Binary files /dev/null and b/docs/assets/img/hero.png differ
diff --git a/docs/assets/img/home-section-1.png b/docs/assets/img/home-section-1.png
new file mode 100644
index 0000000..ee6a5b4
Binary files /dev/null and b/docs/assets/img/home-section-1.png differ
diff --git a/docs/assets/img/home-section-2.png b/docs/assets/img/home-section-2.png
new file mode 100644
index 0000000..5a3495b
Binary files /dev/null and b/docs/assets/img/home-section-2.png differ
diff --git a/docs/assets/img/home-section-3.png b/docs/assets/img/home-section-3.png
new file mode 100644
index 0000000..4188fed
Binary files /dev/null and b/docs/assets/img/home-section-3.png differ
diff --git a/docs/assets/img/icon-dot-gov.svg b/docs/assets/img/icon-dot-gov.svg
new file mode 100644
index 0000000..641cbb8
--- /dev/null
+++ b/docs/assets/img/icon-dot-gov.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/icon-https.svg b/docs/assets/img/icon-https.svg
new file mode 100644
index 0000000..4516323
--- /dev/null
+++ b/docs/assets/img/icon-https.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/icon/cap.png b/docs/assets/img/icon/cap.png
new file mode 100755
index 0000000..400f76f
Binary files /dev/null and b/docs/assets/img/icon/cap.png differ
diff --git a/docs/assets/img/icon/community-led-security-approach.png b/docs/assets/img/icon/community-led-security-approach.png
new file mode 100644
index 0000000..91a8998
Binary files /dev/null and b/docs/assets/img/icon/community-led-security-approach.png differ
diff --git a/docs/assets/img/icon/conversation.png b/docs/assets/img/icon/conversation.png
new file mode 100755
index 0000000..9c629d0
Binary files /dev/null and b/docs/assets/img/icon/conversation.png differ
diff --git a/docs/assets/img/icon/document.png b/docs/assets/img/icon/document.png
new file mode 100755
index 0000000..188be20
Binary files /dev/null and b/docs/assets/img/icon/document.png differ
diff --git a/docs/assets/img/icon/open-book.png b/docs/assets/img/icon/open-book.png
new file mode 100755
index 0000000..0c2969e
Binary files /dev/null and b/docs/assets/img/icon/open-book.png differ
diff --git a/docs/assets/img/icon/video-player.png b/docs/assets/img/icon/video-player.png
new file mode 100755
index 0000000..27f3485
Binary files /dev/null and b/docs/assets/img/icon/video-player.png differ
diff --git a/docs/assets/img/icon/warning-sign.png b/docs/assets/img/icon/warning-sign.png
new file mode 100755
index 0000000..e58e77f
Binary files /dev/null and b/docs/assets/img/icon/warning-sign.png differ
diff --git a/docs/assets/img/image-apis.png b/docs/assets/img/image-apis.png
new file mode 100644
index 0000000..174761f
Binary files /dev/null and b/docs/assets/img/image-apis.png differ
diff --git a/docs/assets/img/image-digital-delivery.png b/docs/assets/img/image-digital-delivery.png
new file mode 100644
index 0000000..224d5a7
Binary files /dev/null and b/docs/assets/img/image-digital-delivery.png differ
diff --git a/docs/assets/img/image-digital-standard.png b/docs/assets/img/image-digital-standard.png
new file mode 100644
index 0000000..8057109
Binary files /dev/null and b/docs/assets/img/image-digital-standard.png differ
diff --git a/docs/assets/img/image-resources.png b/docs/assets/img/image-resources.png
new file mode 100644
index 0000000..c832df7
Binary files /dev/null and b/docs/assets/img/image-resources.png differ
diff --git a/docs/assets/img/logo/android-chrome-192x192.png b/docs/assets/img/logo/android-chrome-192x192.png
new file mode 100644
index 0000000..dfc5908
Binary files /dev/null and b/docs/assets/img/logo/android-chrome-192x192.png differ
diff --git a/docs/assets/img/logo/android-chrome-512x512.png b/docs/assets/img/logo/android-chrome-512x512.png
new file mode 100644
index 0000000..2cc1f63
Binary files /dev/null and b/docs/assets/img/logo/android-chrome-512x512.png differ
diff --git a/docs/assets/img/logo/apple-touch-icon.png b/docs/assets/img/logo/apple-touch-icon.png
new file mode 100644
index 0000000..f3bfc93
Binary files /dev/null and b/docs/assets/img/logo/apple-touch-icon.png differ
diff --git a/docs/assets/img/logo/cover.png b/docs/assets/img/logo/cover.png
new file mode 100644
index 0000000..ea6ff54
Binary files /dev/null and b/docs/assets/img/logo/cover.png differ
diff --git a/docs/assets/img/logo/favicon-16x16.png b/docs/assets/img/logo/favicon-16x16.png
new file mode 100644
index 0000000..430331c
Binary files /dev/null and b/docs/assets/img/logo/favicon-16x16.png differ
diff --git a/docs/assets/img/logo/favicon-32x32.png b/docs/assets/img/logo/favicon-32x32.png
new file mode 100644
index 0000000..8637673
Binary files /dev/null and b/docs/assets/img/logo/favicon-32x32.png differ
diff --git a/docs/assets/img/logo/favicon.ico b/docs/assets/img/logo/favicon.ico
new file mode 100644
index 0000000..37fef6d
Binary files /dev/null and b/docs/assets/img/logo/favicon.ico differ
diff --git a/docs/assets/img/logo/github-handbook.png b/docs/assets/img/logo/github-handbook.png
new file mode 100644
index 0000000..4ecd97b
Binary files /dev/null and b/docs/assets/img/logo/github-handbook.png differ
diff --git a/docs/assets/img/minus-alt.png b/docs/assets/img/minus-alt.png
new file mode 100644
index 0000000..aaa386d
Binary files /dev/null and b/docs/assets/img/minus-alt.png differ
diff --git a/docs/assets/img/minus-alt.svg b/docs/assets/img/minus-alt.svg
new file mode 100644
index 0000000..177eedd
--- /dev/null
+++ b/docs/assets/img/minus-alt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/minus-white.png b/docs/assets/img/minus-white.png
new file mode 100644
index 0000000..9a825de
Binary files /dev/null and b/docs/assets/img/minus-white.png differ
diff --git a/docs/assets/img/minus-white.svg b/docs/assets/img/minus-white.svg
new file mode 100644
index 0000000..f7e1e61
--- /dev/null
+++ b/docs/assets/img/minus-white.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/minus.png b/docs/assets/img/minus.png
new file mode 100644
index 0000000..3e2000b
Binary files /dev/null and b/docs/assets/img/minus.png differ
diff --git a/docs/assets/img/minus.svg b/docs/assets/img/minus.svg
new file mode 100644
index 0000000..07c8aed
--- /dev/null
+++ b/docs/assets/img/minus.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/plus-alt.png b/docs/assets/img/plus-alt.png
new file mode 100644
index 0000000..746aaa1
Binary files /dev/null and b/docs/assets/img/plus-alt.png differ
diff --git a/docs/assets/img/plus-alt.svg b/docs/assets/img/plus-alt.svg
new file mode 100644
index 0000000..b97d4bf
--- /dev/null
+++ b/docs/assets/img/plus-alt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/plus-white.png b/docs/assets/img/plus-white.png
new file mode 100644
index 0000000..e47afee
Binary files /dev/null and b/docs/assets/img/plus-white.png differ
diff --git a/docs/assets/img/plus-white.svg b/docs/assets/img/plus-white.svg
new file mode 100644
index 0000000..32bb777
--- /dev/null
+++ b/docs/assets/img/plus-white.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/plus.png b/docs/assets/img/plus.png
new file mode 100644
index 0000000..a9c07d4
Binary files /dev/null and b/docs/assets/img/plus.png differ
diff --git a/docs/assets/img/plus.svg b/docs/assets/img/plus.svg
new file mode 100644
index 0000000..b73f155
--- /dev/null
+++ b/docs/assets/img/plus.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/docs/assets/img/search.png b/docs/assets/img/search.png
new file mode 100755
index 0000000..781d5b5
Binary files /dev/null and b/docs/assets/img/search.png differ
diff --git a/docs/assets/img/search.svg b/docs/assets/img/search.svg
new file mode 100755
index 0000000..a50fa62
--- /dev/null
+++ b/docs/assets/img/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/img/usa-flag.png b/docs/assets/img/usa-flag.png
new file mode 100644
index 0000000..33de9b4
Binary files /dev/null and b/docs/assets/img/usa-flag.png differ
diff --git a/docs/assets/index.md b/docs/assets/index.md
new file mode 100644
index 0000000..e9cd23e
--- /dev/null
+++ b/docs/assets/index.md
@@ -0,0 +1,26 @@
+---
+#
+# You can use Markdown in the editable content below the three dashes (---)
+#
+# Editable - Title and Description display on the page and in HTML meta tags
+#
+title: Page not found
+description: Page not found in the GitHub Handbook.
+#
+# Don't edit items below - they control the page layout
+#
+return-top: no
+layout: page
+page-type: subpage
+page-description: yes
+permalink: /assets/index.html
+#
+---
+
+There's no content for this page. Try using the global navigation, or return to the [home page]({{ site.baseurl }}/).
+
+
+
+
+
+
diff --git a/docs/assets/js/uswds.min.js b/docs/assets/js/uswds.min.js
new file mode 100644
index 0000000..e602672
--- /dev/null
+++ b/docs/assets/js/uswds.min.js
@@ -0,0 +1,2 @@
+!function(){function t(e,n,r){function o(u,c){if(!n[u]){if(!e[u]){var s="function"==typeof require&&require;if(!c&&s)return s(u,!0);if(i)return i(u,!0);var a=new Error("Cannot find module '"+u+"'");throw a.code="MODULE_NOT_FOUND",a}var f=n[u]={exports:{}};e[u][0].call(f.exports,function(t){var n=e[u][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u=e||n<0||A&&r>=y}function f(){var t=S();return a(t)?l(t):void(m=setTimeout(f,c(t)))}function l(t){return m=void 0,L&&b?o(t):(b=h=void 0,g)}function d(){void 0!==m&&clearTimeout(m),j=0,b=w=h=m=void 0}function p(){return void 0===m?g:l(S())}function v(){var t=S(),n=a(t);if(b=arguments,h=this,w=t,n){if(void 0===m)return i(w);if(A)return m=setTimeout(f,e),o(w)}return void 0===m&&(m=setTimeout(f,e)),g}var b,h,y,g,m,w,j=0,O=!1,A=!1,L=!0;if("function"!=typeof t)throw new TypeError(s);return e=u(e)||0,r(n)&&(O=!!n.leading,A="maxWait"in n,y=A?x(u(n.maxWait)||0,e):y,L="trailing"in n?!!n.trailing:L),v.cancel=d,v.flush=p,v}function r(t){var e="undefined"==typeof t?"undefined":c(t);return!!t&&("object"==e||"function"==e)}function o(t){return!!t&&"object"==("undefined"==typeof t?"undefined":c(t))}function i(t){return"symbol"==("undefined"==typeof t?"undefined":c(t))||o(t)&&w.call(t)==f}function u(t){if("number"==typeof t)return t;if(i(t))return a;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(l,"");var n=p.test(t);return n||v.test(t)?b(t.slice(2),n?2:8):d.test(t)?a:+t}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},s="Expected a function",a=NaN,f="[object Symbol]",l=/^\s+|\s+$/g,d=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,v=/^0o[0-7]+$/i,b=parseInt,h="object"==("undefined"==typeof t?"undefined":c(t))&&t&&t.Object===Object&&t,y="object"==("undefined"==typeof self?"undefined":c(self))&&self&&self.Object===Object&&self,g=h||y||Function("return this")(),m=Object.prototype,w=m.toString,x=Math.max,E=Math.min,S=function(){return g.Date.now()};e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],8:[function(t,e,n){"use strict";function r(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function o(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(t){o[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(i){return!1}}var i=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,c=Object.prototype.propertyIsEnumerable;e.exports=o()?Object.assign:function(t,e){for(var n,o,s=r(t),a=1;a-1?t.split(s).map(function(t){return o({type:t},d)}):(d.type=t,[d])},f=function(t,e){var n=t[e];return delete t[e],n};e.exports=function(t,e){var n=Object.keys(t).reduce(function(e,n){var r=a(n,t[n]);return e.concat(r)},[]);return o({add:function(t){n.forEach(function(e){t.addEventListener(e.type,e.delegate,e.options)})},remove:function(t){n.forEach(function(e){t.removeEventListener(e.type,e.delegate,e.options)})}},e)}},{"../delegate":11,"../delegateAll":12,"object-assign":8}],10:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.some(function(t){return t.call(this,e)===!1},this)}}},{}],11:[function(t,e,n){"use strict";t("element-closest"),e.exports=function(t,e){return function(n){var r=n.target.closest(t);if(r)return e.call(r,n)}}},{"element-closest":6}],12:[function(t,e,n){"use strict";var r=t("../delegate"),o=t("../compose"),i="*";e.exports=function(t){var e=Object.keys(t);if(1===e.length&&e[0]===i)return t[i];var n=e.reduce(function(e,n){return e.push(r(n,t[n])),e},[]);return o(n)}},{"../compose":10,"../delegate":11}],13:[function(t,e,n){"use strict";e.exports=function(t,e){return function(n){if(t!==n.target&&!t.contains(n.target))return e.call(this,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t,e){var n=function(r){return r.currentTarget.removeEventListener(r.type,n,e),t.call(this,r)};return n}},{}],15:[function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=/(^\s+)|(\s+$)/g,i=/\s+/,u=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(o,"")},c=function(t){return this.querySelector('[id="'+t.replace(/"/g,'\\"')+'"]')};e.exports=function(t,e){if("string"!=typeof t)throw new Error("Expected a string but got "+("undefined"==typeof t?"undefined":r(t)));e||(e=window.document);var n=e.getElementById?e.getElementById.bind(e):c.bind(e);return t=u(t).split(i),1===t.length&&""===t[0]?[]:t.map(function(t){var e=n(t);if(!e)throw new Error('no element with id: "'+t+'"');return e})}},{}],16:[function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=t("../utils/behavior"),i=t("array-filter"),u=t("array-foreach"),c=t("../utils/toggle"),s=t("../utils/is-in-viewport"),a=t("../events").CLICK,f=t("../config").prefix,l="."+f+"-accordion, ."+f+"-accordion-bordered",d="."+f+"-accordion-button[aria-controls]",p="aria-expanded",v="aria-multiselectable",b=function(t,e){var n=t.closest(l);if(!n)throw new Error(d+" is missing outer "+l);e=c(t,e);var r="true"===n.getAttribute(v);e&&!r&&u(g(n),function(e){e!==t&&c(e,!1)})},h=function(t){return b(t,!0)},y=function(t){return b(t,!1)},g=function(t){return i(t.querySelectorAll(d),function(e){return e.closest(l)===t})},m=o(r({},a,r({},d,function(t){t.preventDefault(),b(this),"true"===this.getAttribute(p)&&(s(this)||this.scrollIntoView())})),{init:function(t){u(t.querySelectorAll(d),function(t){var e="true"===t.getAttribute(p);b(t,e)})},ACCORDION:l,BUTTON:d,show:h,hide:y,toggle:b,getButtons:g}),w=function(t){this.root=t,m.on(this.root)},x=t("object-assign");x(w,m),w.prototype.show=h,w.prototype.hide=y,w.prototype.remove=function(){m.off(this.root)},e.exports=w},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/is-in-viewport":31,"../utils/toggle":35,"array-filter":1,"array-foreach":2,"object-assign":8}],17:[function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=t("../utils/behavior"),i=(t("../utils/toggle"),t("../events").CLICK),u=t("../config").prefix,c="."+u+"-banner-header",s=u+"-banner-header-expanded",a=function(t){return t.preventDefault(),this.closest(c).classList.toggle(s),!1};e.exports=o(r({},i,r({},c+" [aria-controls]",a)))},{"../config":25,"../events":26,"../utils/behavior":30,"../utils/toggle":35}],18:[function(t,e,n){"use strict";function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=(t("./accordion"),t("../utils/behavior")),i=t("lodash.debounce"),u=t("array-foreach"),c=t("../utils/select"),s=t("../events").CLICK,a=t("../config").prefix,f="hidden",l="."+a+"-footer-big",d=l+" nav",p=d+" ."+a+"-footer-primary-link",v=d+" ul",b=600,h=180,y=function(){if(window.innerWidth1&&void 0!==arguments[1]?arguments[1]:window,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:document.documentElement,r=t.getBoundingClientRect();return r.top>=0&&r.left>=0&&r.bottom<=(e.innerHeight||n.clientHeight)&&r.right<=(e.innerWidth||n.clientWidth)}e.exports=r},{}],32:[function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o=function(t){return t&&"object"===("undefined"==typeof t?"undefined":r(t))&&1===t.nodeType};e.exports=function(t,e){if("string"!=typeof t)return[];e&&o(e)||(e=window.document);var n=e.querySelectorAll(t);return Array.prototype.slice.call(n)}},{}],33:[function(t,e,n){"use strict";e.exports=function(t,e){t.setAttribute("autocapitalize","off"),t.setAttribute("autocorrect","off"),t.setAttribute("type",e?"password":"text")}},{}],34:[function(t,e,n){"use strict";var r=t("array-foreach"),o=t("resolve-id-refs"),i=(t("./select"),t("./toggle-field-mask")),u="aria-controls",c="aria-pressed",s="data-show-text",a="data-hide-text",f=function(t){return t.replace(/\bShow\b/i,function(t){return("S"===t[0]?"H":"h")+"ide"})};e.exports=function(t){var e=t.hasAttribute(c)&&"true"!==t.getAttribute(c),n=o(t.getAttribute(u));r(n,function(t){return i(t,e)}),t.hasAttribute(s)||t.setAttribute(s,t.textContent);var l=t.getAttribute(s),d=t.getAttribute(a)||f(l);return t.textContent=e?l:d,t.setAttribute(c,e),e}},{"./select":32,"./toggle-field-mask":33,"array-foreach":2,"resolve-id-refs":15}],35:[function(t,e,n){"use strict";var r="aria-expanded",o="aria-controls",i="aria-hidden";e.exports=function(t,e){"boolean"!=typeof e&&(e="false"===t.getAttribute(r)),t.setAttribute(r,e);var n=t.getAttribute(o),u=document.getElementById(n);if(!u)throw new Error('No toggle target found with id: "'+n+'"');return u.setAttribute(i,!e),e}},{}],36:[function(t,e,n){"use strict";var r=t("elem-dataset"),o=t("../config").prefix,i="aria-checked",u=o+"-checklist-checked";e.exports=function(t){var e=r(t),n=e.validationElement,o="#"===n.charAt(0)?document.querySelector(n):document.getElementById(n);if(!o)throw new Error('No validation element found with id: "'+n+'"');for(var c in e)if(c.startsWith("validate")){var s=c.substr("validate".length).toLowerCase(),a=new RegExp(e[c]),f='[data-validator="'+s+'"]',l=o.querySelector(f);if(!l)throw new Error('No validator checkbox found for: "'+s+'"');var d=a.test(t.value);l.classList.toggle(u,d),l.setAttribute(i,d)}}},{"../config":25,"elem-dataset":5}]},{},[29]);
+//# sourceMappingURL=uswds.min.js.map
diff --git a/docs/assets/js/uswds.min.js.map b/docs/assets/js/uswds.min.js.map
new file mode 100644
index 0000000..f589e98
--- /dev/null
+++ b/docs/assets/js/uswds.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browser-pack/_prelude.js","uswds.js","node_modules/array-filter/index.js","node_modules/array-foreach/index.js","node_modules/classlist-polyfill/src/index.js","node_modules/domready/ready.js","node_modules/elem-dataset/dist/index.js","node_modules/element-closest/element-closest.js","node_modules/lodash.debounce/index.js","node_modules/object-assign/index.js","node_modules/receptor/behavior/index.js","node_modules/receptor/compose/index.js","node_modules/receptor/delegate/index.js","node_modules/receptor/delegateAll/index.js","node_modules/receptor/ignore/index.js","node_modules/receptor/once/index.js","node_modules/resolve-id-refs/index.js","src/js/components/accordion.js","src/js/components/banner.js","src/js/components/footer.js","src/js/components/index.js","src/js/components/navigation.js","src/js/components/password.js","src/js/components/search.js","src/js/components/skipnav.js","src/js/components/validator.js","src/js/config.js","src/js/events.js","src/js/polyfills/element-hidden.js","src/js/polyfills/index.js","src/js/start.js","src/js/utils/behavior.js","src/js/utils/is-in-viewport.js","src/js/utils/select.js","src/js/utils/toggle-field-mask.js","src/js/utils/toggle-form-input.js","src/js/utils/toggle.js","src/js/utils/validate-input.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","arr","fn","self","filter","TypeError","ret","hasOwn","val","push","Object","prototype","hasOwnProperty","2","ary","callback","thisArg","forEach","3","window","document","createElement","createElementNS","view","classListProp","protoProp","elemCtrProto","Element","objCtr","strTrim","String","trim","this","replace","arrIndexOf","Array","indexOf","item","len","DOMEx","type","message","name","DOMException","checkTokenAndGetIndex","classList","token","test","ClassList","elem","trimmedClasses","getAttribute","classes","split","_updateClassName","setAttribute","toString","classListProto","classListGetter","contains","add","tokens","arguments","updated","remove","index","splice","toggle","force","result","method","join","defineProperty","classListPropDesc","get","enumerable","configurable","ex","undefined","number","__defineGetter__","testElement","createMethod","original","DOMTokenList","_toggle","4","_typeof","Symbol","iterator","obj","constructor","definition","define","amd","_listener","fns","doc","hack","documentElement","doScroll","domContentLoaded","loaded","readyState","addEventListener","removeEventListener","shift","setTimeout","5","useNative","Boolean","dataset","aB","nativeDataset","element","getter","value","setter","removeAttribute","map","attributes","j","attribute","prop","slice","charAt","toUpperCase","bind","set","6","ElementProto","matches","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","selector","elements","ownerDocument","querySelectorAll","closest","nodeType","parentNode","7","global","debounce","func","wait","options","invokeFunc","time","args","lastArgs","lastThis","lastInvokeTime","apply","leadingEdge","timerId","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","maxing","nativeMin","maxWait","shouldInvoke","now","trailingEdge","trailing","cancel","clearTimeout","flush","debounced","isInvoking","FUNC_ERROR_TEXT","toNumber","isObject","nativeMax","isObjectLike","isSymbol","objectToString","symbolTag","NAN","other","valueOf","reTrim","isBinary","reIsBinary","reIsOctal","freeParseInt","reIsBadHex","parseInt","freeGlobal","freeSelf","root","Function","objectProto","Math","max","min","Date","8","toObject","shouldUseNative","assign","test1","getOwnPropertyNames","test2","fromCharCode","order2","test3","letter","keys","err","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","target","source","from","symbols","to","key","9","delegate","delegateAll","DELEGATE_PATTERN","SPACE","getListeners","handler","match","capture","popKey","passive","listener","_type","events","props","listeners","reduce","memo","concat","../delegate","../delegateAll","object-assign","10","functions","some","11","event","element-closest","12","compose","SPLAT","selectors","delegates","../compose","13","14","wrapped","currentTarget","15","RE_TRIM","RE_SPLIT","str","queryById","id","querySelector","ids","getElementById","el","16","_defineProperty","writable","behavior","isElementInViewport","CLICK","PREFIX","prefix","ACCORDION","BUTTON","EXPANDED","MULTISELECTABLE","toggleButton","button","expanded","accordion","multiselectable","getAccordionButtons","showButton","hideButton","preventDefault","scrollIntoView","init","show","hide","getButtons","Accordion","on","off","../config","../events","../utils/behavior","../utils/is-in-viewport","../utils/toggle","array-filter","array-foreach","17","HEADER","EXPANDED_CLASS","toggleBanner","18","select","HIDDEN","SCOPE","NAV","LIST","HIDE_MAX_WIDTH","DEBOUNCE_RATE","showPanel","innerWidth","list","lists","resize","hidden","teardown","../utils/select","./accordion","lodash.debounce","19","banner","footer","navigation","password","search","skipnav","validator","./banner","./footer","./navigation","./password","./search","./skipnav","./validator","20","_CLICK","NAV_LINKS","OPENERS","CLOSE_BUTTON","OVERLAY","CLOSERS","TOGGLES","ACTIVE_CLASS","VISIBLE_CLASS","isActive","body","_focusTrap","trapContainer","trapTabKey","keyCode","shiftKey","activeElement","firstTabStop","lastTabStop","focus","toggleNav","focusableElementsString","focusableElements","enable","release","focusTrap","active","closeButton","menuButton","closer","getBoundingClientRect","width","acc","btn","21","toggleFormInput","LINK","../utils/toggle-form-input","22","ignore","FORM","INPUT","CONTEXT","VISUALLY_HIDDEN","lastButton","showSearch","toggleSearch","hideSearch","getForm","context","form","input","receptor/ignore","23","once","MAINCONTENT","setTabindex","style","outline","receptor/once","24","validate","change","keyup change","input[data-validation-element]","../utils/validate-input","25","26","27","elproto","HTMLElement","hasAttribute","28","./element-hidden","classlist-polyfill","29","domready","uswds","components","./components","./config","./polyfills","30","Behavior","sequence","seq","_this","receptor/behavior","31","win","docEl","rect","top","left","bottom","innerHeight","clientHeight","right","clientWidth","32","isElement","selection","33","field","mask","34","resolveIdRefs","toggleFieldMask","CONTROLS","PRESSED","SHOW_ATTR","HIDE_ATTR","getHideText","showText","pressed","fields","textContent","hideText","./select","./toggle-field-mask","resolve-id-refs","35","controls","36","CHECKED","CHECKED_CLASS","data","validationElement","checkList","startsWith","validatorName","substr","toLowerCase","validatorPattern","RegExp","validatorSelector","validatorCheckbox","checked","elem-dataset"],"mappings":"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","file":"uswds.min.js","sourcesContent":["(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function now() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n\nmodule.exports = debounce;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],8:[function(require,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar assign = require('object-assign');\nvar delegate = require('../delegate');\nvar delegateAll = require('../delegateAll');\n\nvar DELEGATE_PATTERN = /^(.+):delegate\\((.+)\\)$/;\nvar SPACE = ' ';\n\nvar getListeners = function getListeners(type, handler) {\n var match = type.match(DELEGATE_PATTERN);\n var selector;\n if (match) {\n type = match[1];\n selector = match[2];\n }\n\n var options;\n if ((typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object') {\n options = {\n capture: popKey(handler, 'capture'),\n passive: popKey(handler, 'passive')\n };\n }\n\n var listener = {\n selector: selector,\n delegate: (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)) === 'object' ? delegateAll(handler) : selector ? delegate(selector, handler) : handler,\n options: options\n };\n\n if (type.indexOf(SPACE) > -1) {\n return type.split(SPACE).map(function (_type) {\n return assign({ type: _type }, listener);\n });\n } else {\n listener.type = type;\n return [listener];\n }\n};\n\nvar popKey = function popKey(obj, key) {\n var value = obj[key];\n delete obj[key];\n return value;\n};\n\nmodule.exports = function behavior(events, props) {\n var listeners = Object.keys(events).reduce(function (memo, type) {\n var listeners = getListeners(type, events[type]);\n return memo.concat(listeners);\n }, []);\n\n return assign({\n add: function addBehavior(element) {\n listeners.forEach(function (listener) {\n element.addEventListener(listener.type, listener.delegate, listener.options);\n });\n },\n remove: function removeBehavior(element) {\n listeners.forEach(function (listener) {\n element.removeEventListener(listener.type, listener.delegate, listener.options);\n });\n }\n }, props);\n};\n\n},{\"../delegate\":11,\"../delegateAll\":12,\"object-assign\":8}],10:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function compose(functions) {\n return function (e) {\n return functions.some(function (fn) {\n return fn.call(this, e) === false;\n }, this);\n };\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\n// polyfill Element.prototype.closest\nrequire('element-closest');\n\nmodule.exports = function delegate(selector, fn) {\n return function delegation(event) {\n var target = event.target.closest(selector);\n if (target) {\n return fn.call(target, event);\n }\n };\n};\n\n},{\"element-closest\":6}],12:[function(require,module,exports){\n'use strict';\n\nvar delegate = require('../delegate');\nvar compose = require('../compose');\n\nvar SPLAT = '*';\n\nmodule.exports = function delegateAll(selectors) {\n var keys = Object.keys(selectors);\n\n // XXX optimization: if there is only one handler and it applies to\n // all elements (the \"*\" CSS selector), then just return that\n // handler\n if (keys.length === 1 && keys[0] === SPLAT) {\n return selectors[SPLAT];\n }\n\n var delegates = keys.reduce(function (memo, selector) {\n memo.push(delegate(selector, selectors[selector]));\n return memo;\n }, []);\n return compose(delegates);\n};\n\n},{\"../compose\":10,\"../delegate\":11}],13:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function ignore(element, fn) {\n return function ignorance(e) {\n if (element !== e.target && !element.contains(e.target)) {\n return fn.call(this, e);\n }\n };\n};\n\n},{}],14:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function once(listener, options) {\n var wrapped = function wrappedOnce(e) {\n e.currentTarget.removeEventListener(e.type, wrapped, options);\n return listener.call(this, e);\n };\n return wrapped;\n};\n\n},{}],15:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar RE_TRIM = /(^\\s+)|(\\s+$)/g;\nvar RE_SPLIT = /\\s+/;\n\nvar trim = String.prototype.trim ? function (str) {\n return str.trim();\n} : function (str) {\n return str.replace(RE_TRIM, '');\n};\n\nvar queryById = function queryById(id) {\n return this.querySelector('[id=\"' + id.replace(/\"/g, '\\\\\"') + '\"]');\n};\n\nmodule.exports = function resolveIds(ids, doc) {\n if (typeof ids !== 'string') {\n throw new Error('Expected a string but got ' + (typeof ids === 'undefined' ? 'undefined' : _typeof(ids)));\n }\n\n if (!doc) {\n doc = window.document;\n }\n\n var getElementById = doc.getElementById ? doc.getElementById.bind(doc) : queryById.bind(doc);\n\n ids = trim(ids).split(RE_SPLIT);\n\n // XXX we can short-circuit here because trimming and splitting a\n // string of just whitespace produces an array containing a single,\n // empty string\n if (ids.length === 1 && ids[0] === '') {\n return [];\n }\n\n return ids.map(function (id) {\n var el = getElementById(id);\n if (!el) {\n throw new Error('no element with id: \"' + id + '\"');\n }\n return el;\n });\n};\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar filter = require('array-filter');\nvar forEach = require('array-foreach');\nvar toggle = require('../utils/toggle');\nvar isElementInViewport = require('../utils/is-in-viewport');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\n// XXX match .usa-accordion and .usa-accordion-bordered\nvar ACCORDION = '.' + PREFIX + '-accordion, .' + PREFIX + '-accordion-bordered';\nvar BUTTON = '.' + PREFIX + '-accordion-button[aria-controls]';\nvar EXPANDED = 'aria-expanded';\nvar MULTISELECTABLE = 'aria-multiselectable';\n\n/**\n * Toggle a button's \"pressed\" state, optionally providing a target\n * state.\n *\n * @param {HTMLButtonElement} button\n * @param {boolean?} expanded If no state is provided, the current\n * state will be toggled (from false to true, and vice-versa).\n * @return {boolean} the resulting state\n */\nvar toggleButton = function toggleButton(button, expanded) {\n var accordion = button.closest(ACCORDION);\n if (!accordion) {\n throw new Error(BUTTON + ' is missing outer ' + ACCORDION);\n }\n\n expanded = toggle(button, expanded);\n // XXX multiselectable is opt-in, to preserve legacy behavior\n var multiselectable = accordion.getAttribute(MULTISELECTABLE) === 'true';\n\n if (expanded && !multiselectable) {\n forEach(getAccordionButtons(accordion), function (other) {\n if (other !== button) {\n toggle(other, false);\n }\n });\n }\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} true\n */\nvar showButton = function showButton(button) {\n return toggleButton(button, true);\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} false\n */\nvar hideButton = function hideButton(button) {\n return toggleButton(button, false);\n};\n\n/**\n * Get an Array of button elements belonging directly to the given\n * accordion element.\n * @param {HTMLElement} accordion\n * @return {array}\n */\nvar getAccordionButtons = function getAccordionButtons(accordion) {\n return filter(accordion.querySelectorAll(BUTTON), function (button) {\n return button.closest(ACCORDION) === accordion;\n });\n};\n\nvar accordion = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, function (event) {\n event.preventDefault();\n toggleButton(this);\n\n if (this.getAttribute(EXPANDED) === 'true') {\n // We were just expanded, but if another accordion was also just\n // collapsed, we may no longer be in the viewport. This ensures\n // that we are still visible, so the user isn't confused.\n if (!isElementInViewport(this)) this.scrollIntoView();\n }\n})), {\n init: function init(root) {\n forEach(root.querySelectorAll(BUTTON), function (button) {\n var expanded = button.getAttribute(EXPANDED) === 'true';\n toggleButton(button, expanded);\n });\n },\n ACCORDION: ACCORDION,\n BUTTON: BUTTON,\n show: showButton,\n hide: hideButton,\n toggle: toggleButton,\n getButtons: getAccordionButtons\n});\n\n/**\n * TODO: for 2.0, remove everything below this comment and export the\n * behavior directly:\n *\n * module.exports = behavior({...});\n */\nvar Accordion = function Accordion(root) {\n this.root = root;\n accordion.on(this.root);\n};\n\n// copy all of the behavior methods and props to Accordion\nvar assign = require('object-assign');\nassign(Accordion, accordion);\n\nAccordion.prototype.show = showButton;\nAccordion.prototype.hide = hideButton;\n\nAccordion.prototype.remove = function () {\n accordion.off(this.root);\n};\n\nmodule.exports = Accordion;\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/is-in-viewport\":31,\"../utils/toggle\":35,\"array-filter\":1,\"array-foreach\":2,\"object-assign\":8}],17:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar toggle = require('../utils/toggle');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar HEADER = '.' + PREFIX + '-banner-header';\nvar EXPANDED_CLASS = PREFIX + '-banner-header-expanded';\n\nvar toggleBanner = function toggleBanner(event) {\n event.preventDefault();\n this.closest(HEADER).classList.toggle(EXPANDED_CLASS);\n return false;\n};\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, HEADER + ' [aria-controls]', toggleBanner)));\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/toggle\":35}],18:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar accordion = require('./accordion');\nvar behavior = require('../utils/behavior');\nvar debounce = require('lodash.debounce');\nvar forEach = require('array-foreach');\nvar select = require('../utils/select');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar HIDDEN = 'hidden';\nvar SCOPE = '.' + PREFIX + '-footer-big';\nvar NAV = SCOPE + ' nav';\nvar BUTTON = NAV + ' .' + PREFIX + '-footer-primary-link';\nvar LIST = NAV + ' ul';\n\nvar HIDE_MAX_WIDTH = 600;\nvar DEBOUNCE_RATE = 180;\n\nvar showPanel = function showPanel() {\n if (window.innerWidth < HIDE_MAX_WIDTH) {\n var list = this.closest(LIST);\n list.classList.toggle(HIDDEN);\n\n // NB: this *should* always succeed because the button\n // selector is scoped to \".{prefix}-footer-big nav\"\n var lists = list.closest(NAV).querySelectorAll('ul');\n\n forEach(lists, function (el) {\n if (el !== list) {\n el.classList.add(HIDDEN);\n }\n });\n }\n};\n\nvar resize = debounce(function () {\n var hidden = window.innerWidth < HIDE_MAX_WIDTH;\n forEach(select(LIST), function (list) {\n list.classList.toggle(HIDDEN, hidden);\n });\n}, DEBOUNCE_RATE);\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showPanel)), {\n // export for use elsewhere\n HIDE_MAX_WIDTH: HIDE_MAX_WIDTH,\n DEBOUNCE_RATE: DEBOUNCE_RATE,\n\n init: function init(target) {\n resize();\n window.addEventListener('resize', resize);\n },\n\n teardown: function teardown(target) {\n window.removeEventListener('resize', resize);\n }\n});\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/select\":32,\"./accordion\":16,\"array-foreach\":2,\"lodash.debounce\":7}],19:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n accordion: require('./accordion'),\n banner: require('./banner'),\n footer: require('./footer'),\n navigation: require('./navigation'),\n password: require('./password'),\n search: require('./search'),\n skipnav: require('./skipnav'),\n validator: require('./validator')\n};\n\n},{\"./accordion\":16,\"./banner\":17,\"./footer\":18,\"./navigation\":20,\"./password\":21,\"./search\":22,\"./skipnav\":23,\"./validator\":24}],20:[function(require,module,exports){\n'use strict';\n\nvar _CLICK;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar forEach = require('array-foreach');\nvar select = require('../utils/select');\nvar accordion = require('./accordion');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar NAV = '.' + PREFIX + '-nav';\nvar NAV_LINKS = NAV + ' a';\nvar OPENERS = '.' + PREFIX + '-menu-btn';\nvar CLOSE_BUTTON = '.' + PREFIX + '-nav-close';\nvar OVERLAY = '.' + PREFIX + '-overlay';\nvar CLOSERS = CLOSE_BUTTON + ', .' + PREFIX + '-overlay';\nvar TOGGLES = [NAV, OVERLAY].join(', ');\n\nvar ACTIVE_CLASS = 'usa-mobile_nav-active';\nvar VISIBLE_CLASS = 'is-visible';\n\nvar isActive = function isActive() {\n return document.body.classList.contains(ACTIVE_CLASS);\n};\n\nvar _focusTrap = function _focusTrap(trapContainer) {\n // Find all focusable children\n var focusableElementsString = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable]';\n var focusableElements = trapContainer.querySelectorAll(focusableElementsString);\n var firstTabStop = focusableElements[0];\n var lastTabStop = focusableElements[focusableElements.length - 1];\n\n function trapTabKey(e) {\n // Check for TAB key press\n if (e.keyCode === 9) {\n\n // SHIFT + TAB\n if (e.shiftKey) {\n if (document.activeElement === firstTabStop) {\n e.preventDefault();\n lastTabStop.focus();\n }\n\n // TAB\n } else {\n if (document.activeElement === lastTabStop) {\n e.preventDefault();\n firstTabStop.focus();\n }\n }\n }\n\n // ESCAPE\n if (e.keyCode === 27) {\n toggleNav.call(this, false);\n }\n }\n\n // Focus first child\n firstTabStop.focus();\n\n return {\n enable: function enable() {\n // Listen for and trap the keyboard\n trapContainer.addEventListener('keydown', trapTabKey);\n },\n release: function release() {\n trapContainer.removeEventListener('keydown', trapTabKey);\n }\n };\n};\n\nvar focusTrap = void 0;\n\nvar toggleNav = function toggleNav(active) {\n var body = document.body;\n if (typeof active !== 'boolean') {\n active = !isActive();\n }\n body.classList.toggle(ACTIVE_CLASS, active);\n\n forEach(select(TOGGLES), function (el) {\n el.classList.toggle(VISIBLE_CLASS, active);\n });\n\n if (active) {\n focusTrap.enable();\n } else {\n focusTrap.release();\n }\n\n var closeButton = body.querySelector(CLOSE_BUTTON);\n var menuButton = body.querySelector(OPENERS);\n\n if (active && closeButton) {\n // The mobile nav was just activated, so focus on the close button,\n // which is just before all the nav elements in the tab order.\n closeButton.focus();\n } else if (!active && document.activeElement === closeButton && menuButton) {\n // The mobile nav was just deactivated, and focus was on the close\n // button, which is no longer visible. We don't want the focus to\n // disappear into the void, so focus on the menu button if it's\n // visible (this may have been what the user was just focused on,\n // if they triggered the mobile nav by mistake).\n menuButton.focus();\n }\n\n return active;\n};\n\nvar resize = function resize() {\n var closer = document.body.querySelector(CLOSE_BUTTON);\n\n if (isActive() && closer && closer.getBoundingClientRect().width === 0) {\n // The mobile nav is active, but the close box isn't visible, which\n // means the user's viewport has been resized so that it is no longer\n // in mobile mode. Let's make the page state consistent by\n // deactivating the mobile nav.\n toggleNav.call(closer, false);\n }\n};\n\nvar navigation = behavior(_defineProperty({}, CLICK, (_CLICK = {}, _defineProperty(_CLICK, OPENERS, toggleNav), _defineProperty(_CLICK, CLOSERS, toggleNav), _defineProperty(_CLICK, NAV_LINKS, function () {\n // A navigation link has been clicked! We want to collapse any\n // hierarchical navigation UI it's a part of, so that the user\n // can focus on whatever they've just selected.\n\n // Some navigation links are inside accordions; when they're\n // clicked, we want to collapse those accordions.\n var acc = this.closest(accordion.ACCORDION);\n if (acc) {\n accordion.getButtons(acc).forEach(function (btn) {\n return accordion.hide(btn);\n });\n }\n\n // If the mobile navigation menu is active, we want to hide it.\n if (isActive()) {\n toggleNav.call(this, false);\n }\n}), _CLICK)), {\n init: function init() {\n var trapContainer = document.querySelector(NAV);\n\n if (trapContainer) {\n focusTrap = _focusTrap(trapContainer);\n }\n\n resize();\n window.addEventListener('resize', resize, false);\n },\n teardown: function teardown() {\n window.removeEventListener('resize', resize, false);\n }\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nvar assign = require('object-assign');\nmodule.exports = assign(function (el) {\n return navigation.on(el);\n}, navigation);\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/select\":32,\"./accordion\":16,\"array-foreach\":2,\"object-assign\":8}],21:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar toggleFormInput = require('../utils/toggle-form-input');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar LINK = '.' + PREFIX + '-show_password, .' + PREFIX + '-show_multipassword';\n\nvar toggle = function toggle(event) {\n event.preventDefault();\n toggleFormInput(this);\n};\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, toggle)));\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/toggle-form-input\":34}],22:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar forEach = require('array-foreach');\nvar ignore = require('receptor/ignore');\nvar select = require('../utils/select');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\n\nvar BUTTON = '.js-search-button';\nvar FORM = '.js-search-form';\nvar INPUT = '[type=search]';\nvar CONTEXT = 'header'; // XXX\nvar VISUALLY_HIDDEN = PREFIX + '-sr-only';\n\nvar lastButton = void 0;\n\nvar showSearch = function showSearch(event) {\n toggleSearch(this, true);\n lastButton = this;\n};\n\nvar hideSearch = function hideSearch(event) {\n toggleSearch(this, false);\n lastButton = undefined;\n};\n\nvar getForm = function getForm(button) {\n var context = button.closest(CONTEXT);\n return context ? context.querySelector(FORM) : document.querySelector(FORM);\n};\n\nvar toggleSearch = function toggleSearch(button, active) {\n var form = getForm(button);\n if (!form) {\n throw new Error('No ' + FORM + ' found for search toggle in ' + CONTEXT + '!');\n }\n\n button.hidden = active;\n form.classList.toggle(VISUALLY_HIDDEN, !active);\n\n if (active) {\n var input = form.querySelector(INPUT);\n if (input) {\n input.focus();\n }\n // when the user clicks _outside_ of the form w/ignore(): hide the\n // search, then remove the listener\n var listener = ignore(form, function (e) {\n if (lastButton) {\n hideSearch.call(lastButton);\n }\n document.body.removeEventListener(CLICK, listener);\n });\n\n // Normally we would just run this code without a timeout, but\n // IE11 and Edge will actually call the listener *immediately* because\n // they are currently handling this exact type of event, so we'll\n // make sure the browser is done handling the current click event,\n // if any, before we attach the listener.\n setTimeout(function () {\n document.body.addEventListener(CLICK, listener);\n }, 0);\n }\n};\n\nvar search = behavior(_defineProperty({}, CLICK, _defineProperty({}, BUTTON, showSearch)), {\n init: function init(target) {\n forEach(select(BUTTON, target), function (button) {\n toggleSearch(button, false);\n });\n },\n teardown: function teardown(target) {\n // forget the last button clicked\n lastButton = undefined;\n }\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nvar assign = require('object-assign');\nmodule.exports = assign(function (el) {\n return search.on(el);\n}, search);\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"../utils/select\":32,\"array-foreach\":2,\"object-assign\":8,\"receptor/ignore\":13}],23:[function(require,module,exports){\n'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar behavior = require('../utils/behavior');\nvar once = require('receptor/once');\n\nvar CLICK = require('../events').CLICK;\nvar PREFIX = require('../config').prefix;\nvar LINK = '.' + PREFIX + '-skipnav[href^=\"#\"], .' + PREFIX + '-footer-return-to-top [href^=\"#\"]';\nvar MAINCONTENT = 'main-content';\n\nvar setTabindex = function setTabindex(event) {\n // NB: we know because of the selector we're delegating to below that the\n // href already begins with '#'\n var id = this.getAttribute('href');\n var target = document.getElementById(id === '#' ? MAINCONTENT : id.slice(1));\n\n if (target) {\n target.style.outline = '0';\n target.setAttribute('tabindex', 0);\n target.focus();\n target.addEventListener('blur', once(function (event) {\n target.setAttribute('tabindex', -1);\n }));\n } else {\n // throw an error?\n }\n};\n\nmodule.exports = behavior(_defineProperty({}, CLICK, _defineProperty({}, LINK, setTabindex)));\n\n},{\"../config\":25,\"../events\":26,\"../utils/behavior\":30,\"receptor/once\":14}],24:[function(require,module,exports){\n'use strict';\n\nvar behavior = require('../utils/behavior');\nvar validate = require('../utils/validate-input');\nvar debounce = require('lodash.debounce');\n\nvar change = function change(event) {\n return validate(this);\n};\n\nvar validator = behavior({\n 'keyup change': {\n 'input[data-validation-element]': change\n }\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nvar assign = require('object-assign');\nmodule.exports = assign(function (el) {\n return validator.on(el);\n}, validator);\n\n},{\"../utils/behavior\":30,\"../utils/validate-input\":36,\"lodash.debounce\":7,\"object-assign\":8}],25:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n prefix: 'usa'\n};\n\n},{}],26:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n // This used to be conditionally dependent on whether the\n // browser supported touch events; if it did, `CLICK` was set to\n // `touchstart`. However, this had downsides:\n //\n // * It pre-empted mobile browsers' default behavior of detecting\n // whether a touch turned into a scroll, thereby preventing\n // users from using some of our components as scroll surfaces.\n //\n // * Some devices, such as the Microsoft Surface Pro, support *both*\n // touch and clicks. This meant the conditional effectively dropped\n // support for the user's mouse, frustrating users who preferred\n // it on those systems.\n CLICK: 'click'\n};\n\n},{}],27:[function(require,module,exports){\n'use strict';\n\nvar elproto = window.HTMLElement.prototype;\nvar HIDDEN = 'hidden';\n\nif (!(HIDDEN in elproto)) {\n Object.defineProperty(elproto, HIDDEN, {\n get: function get() {\n return this.hasAttribute(HIDDEN);\n },\n set: function set(value) {\n if (value) {\n this.setAttribute(HIDDEN, '');\n } else {\n this.removeAttribute(HIDDEN);\n }\n }\n });\n}\n\n},{}],28:[function(require,module,exports){\n'use strict';\n// polyfills HTMLElement.prototype.classList and DOMTokenList\n\nrequire('classlist-polyfill');\n// polyfills HTMLElement.prototype.hidden\nrequire('./element-hidden');\n\n},{\"./element-hidden\":27,\"classlist-polyfill\":3}],29:[function(require,module,exports){\n'use strict';\n\nvar domready = require('domready');\n\n/**\n * The 'polyfills' define key ECMAScript 5 methods that may be missing from\n * older browsers, so must be loaded first.\n */\nrequire('./polyfills');\n\nvar uswds = require('./config');\n\nvar components = require('./components');\nuswds.components = components;\n\ndomready(function () {\n var target = document.body;\n for (var name in components) {\n var behavior = components[name];\n behavior.on(target);\n }\n});\n\nmodule.exports = uswds;\n\n},{\"./components\":19,\"./config\":25,\"./polyfills\":28,\"domready\":4}],30:[function(require,module,exports){\n'use strict';\n\nvar assign = require('object-assign');\nvar forEach = require('array-foreach');\nvar Behavior = require('receptor/behavior');\n\nvar sequence = function sequence() {\n var seq = [].slice.call(arguments);\n return function (target) {\n var _this = this;\n\n if (!target) {\n target = document.body;\n }\n forEach(seq, function (method) {\n if (typeof _this[method] === 'function') {\n _this[method].call(_this, target);\n }\n });\n };\n};\n\n/**\n * @name behavior\n * @param {object} events\n * @param {object?} props\n * @return {receptor.behavior}\n */\nmodule.exports = function (events, props) {\n return Behavior(events, assign({\n on: sequence('init', 'add'),\n off: sequence('teardown', 'remove')\n }, props));\n};\n\n},{\"array-foreach\":2,\"object-assign\":8,\"receptor/behavior\":9}],31:[function(require,module,exports){\n\"use strict\";\n\n// https://stackoverflow.com/a/7557433\nfunction isElementInViewport(el) {\n var win = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n var docEl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.documentElement;\n\n var rect = el.getBoundingClientRect();\n\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (win.innerHeight || docEl.clientHeight) && rect.right <= (win.innerWidth || docEl.clientWidth);\n}\n\nmodule.exports = isElementInViewport;\n\n},{}],32:[function(require,module,exports){\n'use strict';\n\n/**\n * @name isElement\n * @desc returns whether or not the given argument is a DOM element.\n * @param {any} value\n * @return {boolean}\n */\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isElement = function isElement(value) {\n return value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.nodeType === 1;\n};\n\n/**\n * @name select\n * @desc selects elements from the DOM by class selector or ID selector.\n * @param {string} selector - The selector to traverse the DOM with.\n * @param {Document|HTMLElement?} context - The context to traverse the DOM\n * in. If not provided, it defaults to the document.\n * @return {HTMLElement[]} - An array of DOM nodes or an empty array.\n */\nmodule.exports = function select(selector, context) {\n\n if (typeof selector !== 'string') {\n return [];\n }\n\n if (!context || !isElement(context)) {\n context = window.document;\n }\n\n var selection = context.querySelectorAll(selector);\n return Array.prototype.slice.call(selection);\n};\n\n},{}],33:[function(require,module,exports){\n'use strict';\n\n/**\n * Flips given INPUT elements between masked (hiding the field value) and unmasked\n * @param {Array.HTMLElement} fields - An array of INPUT elements\n * @param {Boolean} mask - Whether the mask should be applied, hiding the field value\n */\nmodule.exports = function (field, mask) {\n field.setAttribute('autocapitalize', 'off');\n field.setAttribute('autocorrect', 'off');\n field.setAttribute('type', mask ? 'password' : 'text');\n};\n\n},{}],34:[function(require,module,exports){\n'use strict';\n\nvar forEach = require('array-foreach');\nvar resolveIdRefs = require('resolve-id-refs');\nvar select = require('./select');\nvar toggleFieldMask = require('./toggle-field-mask');\n\nvar CONTROLS = 'aria-controls';\nvar PRESSED = 'aria-pressed';\nvar SHOW_ATTR = 'data-show-text';\nvar HIDE_ATTR = 'data-hide-text';\n\n/**\n * Replace the word \"Show\" (or \"show\") with \"Hide\" (or \"hide\") in a string.\n * @param {string} showText\n * @return {strong} hideText\n */\nvar getHideText = function getHideText(showText) {\n return showText.replace(/\\bShow\\b/i, function (show) {\n return ('S' === show[0] ? 'H' : 'h') + 'ide';\n });\n};\n\n/**\n * Component that decorates an HTML element with the ability to toggle the\n * masked state of an input field (like a password) when clicked.\n * The ids of the fields to be masked will be pulled directly from the button's\n * `aria-controls` attribute.\n *\n * @param {HTMLElement} el Parent element containing the fields to be masked\n * @return {boolean}\n */\nmodule.exports = function (el) {\n // this is the *target* state:\n // * if the element has the attr and it's !== \"true\", pressed is true\n // * otherwise, pressed is false\n var pressed = el.hasAttribute(PRESSED) && el.getAttribute(PRESSED) !== 'true';\n\n var fields = resolveIdRefs(el.getAttribute(CONTROLS));\n forEach(fields, function (field) {\n return toggleFieldMask(field, pressed);\n });\n\n if (!el.hasAttribute(SHOW_ATTR)) {\n el.setAttribute(SHOW_ATTR, el.textContent);\n }\n\n var showText = el.getAttribute(SHOW_ATTR);\n var hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText);\n\n el.textContent = pressed ? showText : hideText;\n el.setAttribute(PRESSED, pressed);\n return pressed;\n};\n\n},{\"./select\":32,\"./toggle-field-mask\":33,\"array-foreach\":2,\"resolve-id-refs\":15}],35:[function(require,module,exports){\n'use strict';\n\nvar EXPANDED = 'aria-expanded';\nvar CONTROLS = 'aria-controls';\nvar HIDDEN = 'aria-hidden';\n\nmodule.exports = function (button, expanded) {\n\n if (typeof expanded !== 'boolean') {\n expanded = button.getAttribute(EXPANDED) === 'false';\n }\n button.setAttribute(EXPANDED, expanded);\n\n var id = button.getAttribute(CONTROLS);\n var controls = document.getElementById(id);\n if (!controls) {\n throw new Error('No toggle target found with id: \"' + id + '\"');\n }\n\n controls.setAttribute(HIDDEN, !expanded);\n return expanded;\n};\n\n},{}],36:[function(require,module,exports){\n'use strict';\n\nvar dataset = require('elem-dataset');\n\nvar PREFIX = require('../config').prefix;\nvar CHECKED = 'aria-checked';\nvar CHECKED_CLASS = PREFIX + '-checklist-checked';\n\nmodule.exports = function validate(el) {\n var data = dataset(el);\n var id = data.validationElement;\n var checkList = id.charAt(0) === '#' ? document.querySelector(id) : document.getElementById(id);\n\n if (!checkList) {\n throw new Error('No validation element found with id: \"' + id + '\"');\n }\n\n for (var key in data) {\n if (key.startsWith('validate')) {\n var validatorName = key.substr('validate'.length).toLowerCase();\n var validatorPattern = new RegExp(data[key]);\n var validatorSelector = '[data-validator=\"' + validatorName + '\"]';\n var validatorCheckbox = checkList.querySelector(validatorSelector);\n if (!validatorCheckbox) {\n throw new Error('No validator checkbox found for: \"' + validatorName + '\"');\n }\n\n var checked = validatorPattern.test(el.value);\n validatorCheckbox.classList.toggle(CHECKED_CLASS, checked);\n validatorCheckbox.setAttribute(CHECKED, checked);\n }\n }\n};\n\n},{\"../config\":25,\"elem-dataset\":5}]},{},[29])\n\n","\n/**\n * Array#filter.\n *\n * @param {Array} arr\n * @param {Function} fn\n * @param {Object=} self\n * @return {Array}\n * @throw TypeError\n */\n\nmodule.exports = function (arr, fn, self) {\n if (arr.filter) return arr.filter(fn, self);\n if (void 0 === arr || null === arr) throw new TypeError;\n if ('function' != typeof fn) throw new TypeError;\n var ret = [];\n for (var i = 0; i < arr.length; i++) {\n if (!hasOwn.call(arr, i)) continue;\n var val = arr[i];\n if (fn.call(self, val, i, arr)) ret.push(val);\n }\n return ret;\n};\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n","/**\n * array-foreach\n * Array#forEach ponyfill for older browsers\n * (Ponyfill: A polyfill that doesn't overwrite the native method)\n * \n * https://github.com/twada/array-foreach\n *\n * Copyright (c) 2015-2016 Takuto Wada\n * Licensed under the MIT license.\n * https://github.com/twada/array-foreach/blob/master/MIT-LICENSE\n */\n'use strict';\n\nmodule.exports = function forEach (ary, callback, thisArg) {\n if (ary.forEach) {\n ary.forEach(callback, thisArg);\n return;\n }\n for (var i = 0; i < ary.length; i+=1) {\n callback.call(thisArg, ary[i], i, ary);\n }\n};\n","/*\n * classList.js: Cross-browser full element.classList implementation.\n * 1.1.20170427\n *\n * By Eli Grey, http://eligrey.com\n * License: Dedicated to the public domain.\n * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md\n */\n\n/*global self, document, DOMException */\n\n/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */\n\nif (\"document\" in window.self) {\n\n// Full polyfill for browsers with no classList support\n// Including IE < Edge missing SVGElement.classList\nif (!(\"classList\" in document.createElement(\"_\")) \n\t|| document.createElementNS && !(\"classList\" in document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\"))) {\n\n(function (view) {\n\n\"use strict\";\n\nif (!('Element' in view)) return;\n\nvar\n\t classListProp = \"classList\"\n\t, protoProp = \"prototype\"\n\t, elemCtrProto = view.Element[protoProp]\n\t, objCtr = Object\n\t, strTrim = String[protoProp].trim || function () {\n\t\treturn this.replace(/^\\s+|\\s+$/g, \"\");\n\t}\n\t, arrIndexOf = Array[protoProp].indexOf || function (item) {\n\t\tvar\n\t\t\t i = 0\n\t\t\t, len = this.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\t// Vendors: please allow content code to instantiate DOMExceptions\n\t, DOMEx = function (type, message) {\n\t\tthis.name = type;\n\t\tthis.code = DOMException[type];\n\t\tthis.message = message;\n\t}\n\t, checkTokenAndGetIndex = function (classList, token) {\n\t\tif (token === \"\") {\n\t\t\tthrow new DOMEx(\n\t\t\t\t \"SYNTAX_ERR\"\n\t\t\t\t, \"An invalid or illegal string was specified\"\n\t\t\t);\n\t\t}\n\t\tif (/\\s/.test(token)) {\n\t\t\tthrow new DOMEx(\n\t\t\t\t \"INVALID_CHARACTER_ERR\"\n\t\t\t\t, \"String contains an invalid character\"\n\t\t\t);\n\t\t}\n\t\treturn arrIndexOf.call(classList, token);\n\t}\n\t, ClassList = function (elem) {\n\t\tvar\n\t\t\t trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\")\n\t\t\t, classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : []\n\t\t\t, i = 0\n\t\t\t, len = classes.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tthis.push(classes[i]);\n\t\t}\n\t\tthis._updateClassName = function () {\n\t\t\telem.setAttribute(\"class\", this.toString());\n\t\t};\n\t}\n\t, classListProto = ClassList[protoProp] = []\n\t, classListGetter = function () {\n\t\treturn new ClassList(this);\n\t}\n;\n// Most DOMException implementations don't allow calling DOMException's toString()\n// on non-DOMExceptions. Error's toString() is sufficient here.\nDOMEx[protoProp] = Error[protoProp];\nclassListProto.item = function (i) {\n\treturn this[i] || null;\n};\nclassListProto.contains = function (token) {\n\ttoken += \"\";\n\treturn checkTokenAndGetIndex(this, token) !== -1;\n};\nclassListProto.add = function () {\n\tvar\n\t\t tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tif (checkTokenAndGetIndex(this, token) === -1) {\n\t\t\tthis.push(token);\n\t\t\tupdated = true;\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.remove = function () {\n\tvar\n\t\t tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t\t, index\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tindex = checkTokenAndGetIndex(this, token);\n\t\twhile (index !== -1) {\n\t\t\tthis.splice(index, 1);\n\t\t\tupdated = true;\n\t\t\tindex = checkTokenAndGetIndex(this, token);\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.toggle = function (token, force) {\n\ttoken += \"\";\n\n\tvar\n\t\t result = this.contains(token)\n\t\t, method = result ?\n\t\t\tforce !== true && \"remove\"\n\t\t:\n\t\t\tforce !== false && \"add\"\n\t;\n\n\tif (method) {\n\t\tthis[method](token);\n\t}\n\n\tif (force === true || force === false) {\n\t\treturn force;\n\t} else {\n\t\treturn !result;\n\t}\n};\nclassListProto.toString = function () {\n\treturn this.join(\" \");\n};\n\nif (objCtr.defineProperty) {\n\tvar classListPropDesc = {\n\t\t get: classListGetter\n\t\t, enumerable: true\n\t\t, configurable: true\n\t};\n\ttry {\n\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t} catch (ex) { // IE 8 doesn't support enumerable:true\n\t\t// adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n\t\t// modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n\t\tif (ex.number === undefined || ex.number === -0x7FF5EC54) {\n\t\t\tclassListPropDesc.enumerable = false;\n\t\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t\t}\n\t}\n} else if (objCtr[protoProp].__defineGetter__) {\n\telemCtrProto.__defineGetter__(classListProp, classListGetter);\n}\n\n}(window.self));\n\n}\n\n// There is full or partial native classList support, so just check if we need\n// to normalize the add/remove and toggle APIs.\n\n(function () {\n\t\"use strict\";\n\n\tvar testElement = document.createElement(\"_\");\n\n\ttestElement.classList.add(\"c1\", \"c2\");\n\n\t// Polyfill for IE 10/11 and Firefox <26, where classList.add and\n\t// classList.remove exist but support only one argument at a time.\n\tif (!testElement.classList.contains(\"c2\")) {\n\t\tvar createMethod = function(method) {\n\t\t\tvar original = DOMTokenList.prototype[method];\n\n\t\t\tDOMTokenList.prototype[method] = function(token) {\n\t\t\t\tvar i, len = arguments.length;\n\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\ttoken = arguments[i];\n\t\t\t\t\toriginal.call(this, token);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tcreateMethod('add');\n\t\tcreateMethod('remove');\n\t}\n\n\ttestElement.classList.toggle(\"c3\", false);\n\n\t// Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n\t// support the second argument.\n\tif (testElement.classList.contains(\"c3\")) {\n\t\tvar _toggle = DOMTokenList.prototype.toggle;\n\n\t\tDOMTokenList.prototype.toggle = function(token, force) {\n\t\t\tif (1 in arguments && !this.contains(token) === !force) {\n\t\t\t\treturn force;\n\t\t\t} else {\n\t\t\t\treturn _toggle.call(this, token);\n\t\t\t}\n\t\t};\n\n\t}\n\n\ttestElement = null;\n}());\n\n}\n","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n */\n!function (name, definition) {\n\n if (typeof module != 'undefined') module.exports = definition()\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)\n else this[name] = definition()\n\n}('domready', function () {\n\n var fns = [], listener\n , doc = document\n , hack = doc.documentElement.doScroll\n , domContentLoaded = 'DOMContentLoaded'\n , loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)\n\n\n if (!loaded)\n doc.addEventListener(domContentLoaded, listener = function () {\n doc.removeEventListener(domContentLoaded, listener)\n loaded = 1\n while (listener = fns.shift()) listener()\n })\n\n return function (fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn)\n }\n\n});\n","'use strict';\n\n// <3 Modernizr\n// https://raw.githubusercontent.com/Modernizr/Modernizr/master/feature-detects/dom/dataset.js\n\nfunction useNative() {\n\tvar elem = document.createElement('div');\n\telem.setAttribute('data-a-b', 'c');\n\n\treturn Boolean(elem.dataset && elem.dataset.aB === 'c');\n}\n\nfunction nativeDataset(element) {\n\treturn element.dataset;\n}\n\nmodule.exports = useNative() ? nativeDataset : function (element) {\n\tvar map = {};\n\tvar attributes = element.attributes;\n\n\tfunction getter() {\n\t\treturn this.value;\n\t}\n\n\tfunction setter(name, value) {\n\t\tif (typeof value === 'undefined') {\n\t\t\tthis.removeAttribute(name);\n\t\t} else {\n\t\t\tthis.setAttribute(name, value);\n\t\t}\n\t}\n\n\tfor (var i = 0, j = attributes.length; i < j; i++) {\n\t\tvar attribute = attributes[i];\n\n\t\tif (attribute) {\n\t\t\tvar name = attribute.name;\n\n\t\t\tif (name.indexOf('data-') === 0) {\n\t\t\t\tvar prop = name.slice(5).replace(/-./g, function (u) {\n\t\t\t\t\treturn u.charAt(1).toUpperCase();\n\t\t\t\t});\n\n\t\t\t\tvar value = attribute.value;\n\n\t\t\t\tObject.defineProperty(map, prop, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: getter.bind({ value: value || '' }),\n\t\t\t\t\tset: setter.bind(element, name)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn map;\n};\n\n","// element-closest | CC0-1.0 | github.com/jonathantneal/closest\n\n(function (ElementProto) {\n\tif (typeof ElementProto.matches !== 'function') {\n\t\tElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) {\n\t\t\tvar element = this;\n\t\t\tvar elements = (element.document || element.ownerDocument).querySelectorAll(selector);\n\t\t\tvar index = 0;\n\n\t\t\twhile (elements[index] && elements[index] !== element) {\n\t\t\t\t++index;\n\t\t\t}\n\n\t\t\treturn Boolean(elements[index]);\n\t\t};\n\t}\n\n\tif (typeof ElementProto.closest !== 'function') {\n\t\tElementProto.closest = function closest(selector) {\n\t\t\tvar element = this;\n\n\t\t\twhile (element && element.nodeType === 1) {\n\t\t\t\tif (element.matches(selector)) {\n\t\t\t\t\treturn element;\n\t\t\t\t}\n\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n})(window.Element.prototype);\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","const assign = require('object-assign');\nconst delegate = require('../delegate');\nconst delegateAll = require('../delegateAll');\n\nconst DELEGATE_PATTERN = /^(.+):delegate\\((.+)\\)$/;\nconst SPACE = ' ';\n\nconst getListeners = function(type, handler) {\n var match = type.match(DELEGATE_PATTERN);\n var selector;\n if (match) {\n type = match[1];\n selector = match[2];\n }\n\n var options;\n if (typeof handler === 'object') {\n options = {\n capture: popKey(handler, 'capture'),\n passive: popKey(handler, 'passive')\n };\n }\n\n var listener = {\n selector: selector,\n delegate: (typeof handler === 'object')\n ? delegateAll(handler)\n : selector\n ? delegate(selector, handler)\n : handler,\n options: options\n };\n\n if (type.indexOf(SPACE) > -1) {\n return type.split(SPACE).map(function(_type) {\n return assign({type: _type}, listener);\n });\n } else {\n listener.type = type;\n return [listener];\n }\n};\n\nvar popKey = function(obj, key) {\n var value = obj[key];\n delete obj[key];\n return value;\n};\n\nmodule.exports = function behavior(events, props) {\n const listeners = Object.keys(events)\n .reduce(function(memo, type) {\n var listeners = getListeners(type, events[type]);\n return memo.concat(listeners);\n }, []);\n\n return assign({\n add: function addBehavior(element) {\n listeners.forEach(function(listener) {\n element.addEventListener(\n listener.type,\n listener.delegate,\n listener.options\n );\n });\n },\n remove: function removeBehavior(element) {\n listeners.forEach(function(listener) {\n element.removeEventListener(\n listener.type,\n listener.delegate,\n listener.options\n );\n });\n }\n }, props);\n};\n","module.exports = function compose(functions) {\n return function(e) {\n return functions.some(function(fn) {\n return fn.call(this, e) === false;\n }, this);\n };\n};\n","// polyfill Element.prototype.closest\nrequire('element-closest');\n\nmodule.exports = function delegate(selector, fn) {\n return function delegation(event) {\n var target = event.target.closest(selector);\n if (target) {\n return fn.call(target, event);\n }\n }\n};\n","const delegate = require('../delegate');\nconst compose = require('../compose');\n\nconst SPLAT = '*';\n\nmodule.exports = function delegateAll(selectors) {\n const keys = Object.keys(selectors)\n\n // XXX optimization: if there is only one handler and it applies to\n // all elements (the \"*\" CSS selector), then just return that\n // handler\n if (keys.length === 1 && keys[0] === SPLAT) {\n return selectors[SPLAT];\n }\n\n const delegates = keys.reduce(function(memo, selector) {\n memo.push(delegate(selector, selectors[selector]));\n return memo;\n }, []);\n return compose(delegates);\n};\n","module.exports = function ignore(element, fn) {\n return function ignorance(e) {\n if (element !== e.target && !element.contains(e.target)) {\n return fn.call(this, e);\n }\n };\n};\n","module.exports = function once(listener, options) {\n var wrapped = function wrappedOnce(e) {\n e.currentTarget.removeEventListener(e.type, wrapped, options);\n return listener.call(this, e);\n };\n return wrapped;\n};\n\n","'use strict';\n\nvar RE_TRIM = /(^\\s+)|(\\s+$)/g;\nvar RE_SPLIT = /\\s+/;\n\nvar trim = String.prototype.trim\n ? function(str) { return str.trim(); }\n : function(str) { return str.replace(RE_TRIM, ''); };\n\nvar queryById = function(id) {\n return this.querySelector('[id=\"' + id.replace(/\"/g, '\\\\\"') + '\"]');\n};\n\nmodule.exports = function resolveIds(ids, doc) {\n if (typeof ids !== 'string') {\n throw new Error('Expected a string but got ' + (typeof ids));\n }\n\n if (!doc) {\n doc = window.document;\n }\n\n var getElementById = doc.getElementById\n ? doc.getElementById.bind(doc)\n : queryById.bind(doc);\n\n ids = trim(ids).split(RE_SPLIT);\n\n // XXX we can short-circuit here because trimming and splitting a\n // string of just whitespace produces an array containing a single,\n // empty string\n if (ids.length === 1 && ids[0] === '') {\n return [];\n }\n\n return ids\n .map(function(id) {\n var el = getElementById(id);\n if (!el) {\n throw new Error('no element with id: \"' + id + '\"');\n }\n return el;\n });\n};\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst filter = require('array-filter');\nconst forEach = require('array-foreach');\nconst toggle = require('../utils/toggle');\nconst isElementInViewport = require('../utils/is-in-viewport');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\n// XXX match .usa-accordion and .usa-accordion-bordered\nconst ACCORDION = `.${PREFIX}-accordion, .${PREFIX}-accordion-bordered`;\nconst BUTTON = `.${PREFIX}-accordion-button[aria-controls]`;\nconst EXPANDED = 'aria-expanded';\nconst MULTISELECTABLE = 'aria-multiselectable';\n\n/**\n * Toggle a button's \"pressed\" state, optionally providing a target\n * state.\n *\n * @param {HTMLButtonElement} button\n * @param {boolean?} expanded If no state is provided, the current\n * state will be toggled (from false to true, and vice-versa).\n * @return {boolean} the resulting state\n */\nconst toggleButton = (button, expanded) => {\n var accordion = button.closest(ACCORDION);\n if (!accordion) {\n throw new Error(`${BUTTON} is missing outer ${ACCORDION}`);\n }\n\n expanded = toggle(button, expanded);\n // XXX multiselectable is opt-in, to preserve legacy behavior\n const multiselectable = accordion.getAttribute(MULTISELECTABLE) === 'true';\n\n if (expanded && !multiselectable) {\n forEach(getAccordionButtons(accordion), other => {\n if (other !== button) {\n toggle(other, false);\n }\n });\n }\n};\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} true\n */\nconst showButton = button => toggleButton(button, true);\n\n/**\n * @param {HTMLButtonElement} button\n * @return {boolean} false\n */\nconst hideButton = button => toggleButton(button, false);\n\n/**\n * Get an Array of button elements belonging directly to the given\n * accordion element.\n * @param {HTMLElement} accordion\n * @return {array}\n */\nconst getAccordionButtons = accordion => {\n return filter(accordion.querySelectorAll(BUTTON), button => {\n return button.closest(ACCORDION) === accordion;\n });\n};\n\nconst accordion = behavior({\n [ CLICK ]: {\n [ BUTTON ]: function (event) {\n event.preventDefault();\n toggleButton(this);\n\n if (this.getAttribute(EXPANDED) === 'true') {\n // We were just expanded, but if another accordion was also just\n // collapsed, we may no longer be in the viewport. This ensures\n // that we are still visible, so the user isn't confused.\n if (!isElementInViewport(this)) this.scrollIntoView();\n }\n },\n },\n}, {\n init: root => {\n forEach(root.querySelectorAll(BUTTON), button => {\n const expanded = button.getAttribute(EXPANDED) === 'true';\n toggleButton(button, expanded);\n });\n },\n ACCORDION,\n BUTTON,\n show: showButton,\n hide: hideButton,\n toggle: toggleButton,\n getButtons: getAccordionButtons,\n});\n\n/**\n * TODO: for 2.0, remove everything below this comment and export the\n * behavior directly:\n *\n * module.exports = behavior({...});\n */\nconst Accordion = function (root) {\n this.root = root;\n accordion.on(this.root);\n};\n\n// copy all of the behavior methods and props to Accordion\nconst assign = require('object-assign');\nassign(Accordion, accordion);\n\nAccordion.prototype.show = showButton;\nAccordion.prototype.hide = hideButton;\n\nAccordion.prototype.remove = function () {\n accordion.off(this.root);\n};\n\nmodule.exports = Accordion;\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst toggle = require('../utils/toggle');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst HEADER = `.${PREFIX}-banner-header`;\nconst EXPANDED_CLASS = `${PREFIX}-banner-header-expanded`;\n\nconst toggleBanner = function (event) {\n event.preventDefault();\n this.closest(HEADER).classList.toggle(EXPANDED_CLASS);\n return false;\n};\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ `${HEADER} [aria-controls]` ]: toggleBanner,\n },\n});\n","'use strict';\nconst accordion = require('./accordion');\nconst behavior = require('../utils/behavior');\nconst debounce = require('lodash.debounce');\nconst forEach = require('array-foreach');\nconst select = require('../utils/select');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst HIDDEN = 'hidden';\nconst SCOPE = `.${PREFIX}-footer-big`;\nconst NAV = `${SCOPE} nav`;\nconst BUTTON = `${NAV} .${PREFIX}-footer-primary-link`;\nconst LIST = `${NAV} ul`;\n\nconst HIDE_MAX_WIDTH = 600;\nconst DEBOUNCE_RATE = 180;\n\nconst showPanel = function () {\n if (window.innerWidth < HIDE_MAX_WIDTH) {\n const list = this.closest(LIST);\n list.classList.toggle(HIDDEN);\n\n // NB: this *should* always succeed because the button\n // selector is scoped to \".{prefix}-footer-big nav\"\n const lists = list.closest(NAV)\n .querySelectorAll('ul');\n\n forEach(lists, el => {\n if (el !== list) {\n el.classList.add(HIDDEN);\n }\n });\n }\n};\n\nconst resize = debounce(() => {\n const hidden = window.innerWidth < HIDE_MAX_WIDTH;\n forEach(select(LIST), list => {\n list.classList.toggle(HIDDEN, hidden);\n });\n}, DEBOUNCE_RATE);\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ BUTTON ]: showPanel,\n },\n}, {\n // export for use elsewhere\n HIDE_MAX_WIDTH,\n DEBOUNCE_RATE,\n\n init: target => {\n resize();\n window.addEventListener('resize', resize);\n },\n\n teardown: target => {\n window.removeEventListener('resize', resize);\n },\n});\n","module.exports = {\n accordion: require('./accordion'),\n banner: require('./banner'),\n footer: require('./footer'),\n navigation: require('./navigation'),\n password: require('./password'),\n search: require('./search'),\n skipnav: require('./skipnav'),\n validator: require('./validator'),\n};\n\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst forEach = require('array-foreach');\nconst select = require('../utils/select');\nconst accordion = require('./accordion');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst NAV = `.${PREFIX}-nav`;\nconst NAV_LINKS = `${NAV} a`;\nconst OPENERS = `.${PREFIX}-menu-btn`;\nconst CLOSE_BUTTON = `.${PREFIX}-nav-close`;\nconst OVERLAY = `.${PREFIX}-overlay`;\nconst CLOSERS = `${CLOSE_BUTTON}, .${PREFIX}-overlay`;\nconst TOGGLES = [ NAV, OVERLAY ].join(', ');\n\nconst ACTIVE_CLASS = 'usa-mobile_nav-active';\nconst VISIBLE_CLASS = 'is-visible';\n\nconst isActive = () => document.body.classList.contains(ACTIVE_CLASS);\n\nconst _focusTrap = (trapContainer) => {\n // Find all focusable children\n const focusableElementsString = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable]';\n const focusableElements = trapContainer.querySelectorAll(focusableElementsString);\n const firstTabStop = focusableElements[ 0 ];\n const lastTabStop = focusableElements[ focusableElements.length - 1 ];\n\n function trapTabKey (e) {\n // Check for TAB key press\n if (e.keyCode === 9) {\n\n // SHIFT + TAB\n if (e.shiftKey) {\n if (document.activeElement === firstTabStop) {\n e.preventDefault();\n lastTabStop.focus();\n }\n\n // TAB\n } else {\n if (document.activeElement === lastTabStop) {\n e.preventDefault();\n firstTabStop.focus();\n }\n }\n }\n\n // ESCAPE\n if (e.keyCode === 27) {\n toggleNav.call(this, false);\n }\n }\n\n // Focus first child\n firstTabStop.focus();\n\n return {\n enable () {\n // Listen for and trap the keyboard\n trapContainer.addEventListener('keydown', trapTabKey);\n },\n\n release () {\n trapContainer.removeEventListener('keydown', trapTabKey);\n },\n };\n};\n\nlet focusTrap;\n\nconst toggleNav = function (active) {\n const body = document.body;\n if (typeof active !== 'boolean') {\n active = !isActive();\n }\n body.classList.toggle(ACTIVE_CLASS, active);\n\n forEach(select(TOGGLES), el => {\n el.classList.toggle(VISIBLE_CLASS, active);\n });\n\n if (active) {\n focusTrap.enable();\n } else {\n focusTrap.release();\n }\n\n const closeButton = body.querySelector(CLOSE_BUTTON);\n const menuButton = body.querySelector(OPENERS);\n\n if (active && closeButton) {\n // The mobile nav was just activated, so focus on the close button,\n // which is just before all the nav elements in the tab order.\n closeButton.focus();\n } else if (!active && document.activeElement === closeButton &&\n menuButton) {\n // The mobile nav was just deactivated, and focus was on the close\n // button, which is no longer visible. We don't want the focus to\n // disappear into the void, so focus on the menu button if it's\n // visible (this may have been what the user was just focused on,\n // if they triggered the mobile nav by mistake).\n menuButton.focus();\n }\n\n return active;\n};\n\nconst resize = () => {\n const closer = document.body.querySelector(CLOSE_BUTTON);\n\n if (isActive() && closer && closer.getBoundingClientRect().width === 0) {\n // The mobile nav is active, but the close box isn't visible, which\n // means the user's viewport has been resized so that it is no longer\n // in mobile mode. Let's make the page state consistent by\n // deactivating the mobile nav.\n toggleNav.call(closer, false);\n }\n};\n\nconst navigation = behavior({\n [ CLICK ]: {\n [ OPENERS ]: toggleNav,\n [ CLOSERS ]: toggleNav,\n [ NAV_LINKS ]: function () {\n // A navigation link has been clicked! We want to collapse any\n // hierarchical navigation UI it's a part of, so that the user\n // can focus on whatever they've just selected.\n\n // Some navigation links are inside accordions; when they're\n // clicked, we want to collapse those accordions.\n const acc = this.closest(accordion.ACCORDION);\n if (acc) {\n accordion.getButtons(acc).forEach(btn => accordion.hide(btn));\n }\n\n // If the mobile navigation menu is active, we want to hide it.\n if (isActive()) {\n toggleNav.call(this, false);\n }\n },\n },\n}, {\n init () {\n const trapContainer = document.querySelector(NAV);\n\n if (trapContainer) {\n focusTrap = _focusTrap(trapContainer);\n }\n\n resize();\n window.addEventListener('resize', resize, false);\n },\n teardown () {\n window.removeEventListener('resize', resize, false);\n },\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nconst assign = require('object-assign');\nmodule.exports = assign(\n el => navigation.on(el),\n navigation\n);\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst toggleFormInput = require('../utils/toggle-form-input');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst LINK = `.${PREFIX}-show_password, .${PREFIX}-show_multipassword`;\n\nconst toggle = function (event) {\n event.preventDefault();\n toggleFormInput(this);\n};\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ LINK ]: toggle,\n },\n});\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst forEach = require('array-foreach');\nconst ignore = require('receptor/ignore');\nconst select = require('../utils/select');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\n\nconst BUTTON = '.js-search-button';\nconst FORM = '.js-search-form';\nconst INPUT = '[type=search]';\nconst CONTEXT = 'header'; // XXX\nconst VISUALLY_HIDDEN = `${PREFIX}-sr-only`;\n\nlet lastButton;\n\nconst showSearch = function (event) {\n toggleSearch(this, true);\n lastButton = this;\n};\n\nconst hideSearch = function (event) {\n toggleSearch(this, false);\n lastButton = undefined;\n};\n\nconst getForm = button => {\n const context = button.closest(CONTEXT);\n return context\n ? context.querySelector(FORM)\n : document.querySelector(FORM);\n};\n\nconst toggleSearch = (button, active) => {\n const form = getForm(button);\n if (!form) {\n throw new Error(`No ${FORM} found for search toggle in ${CONTEXT}!`);\n }\n\n button.hidden = active;\n form.classList.toggle(VISUALLY_HIDDEN, !active);\n\n if (active) {\n const input = form.querySelector(INPUT);\n if (input) {\n input.focus();\n }\n // when the user clicks _outside_ of the form w/ignore(): hide the\n // search, then remove the listener\n const listener = ignore(form, e => {\n if (lastButton) {\n hideSearch.call(lastButton);\n }\n document.body.removeEventListener(CLICK, listener);\n });\n\n // Normally we would just run this code without a timeout, but\n // IE11 and Edge will actually call the listener *immediately* because\n // they are currently handling this exact type of event, so we'll\n // make sure the browser is done handling the current click event,\n // if any, before we attach the listener.\n setTimeout(() => {\n document.body.addEventListener(CLICK, listener);\n }, 0);\n }\n};\n\nconst search = behavior({\n [ CLICK ]: {\n [ BUTTON ]: showSearch,\n },\n}, {\n init: (target) => {\n forEach(select(BUTTON, target), button => {\n toggleSearch(button, false);\n });\n },\n teardown: (target) => {\n // forget the last button clicked\n lastButton = undefined;\n },\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nconst assign = require('object-assign');\nmodule.exports = assign(\n el => search.on(el),\n search\n);\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst once = require('receptor/once');\n\nconst CLICK = require('../events').CLICK;\nconst PREFIX = require('../config').prefix;\nconst LINK = `.${PREFIX}-skipnav[href^=\"#\"], .${PREFIX}-footer-return-to-top [href^=\"#\"]`;\nconst MAINCONTENT = 'main-content';\n\nconst setTabindex = function (event) {\n // NB: we know because of the selector we're delegating to below that the\n // href already begins with '#'\n const id = this.getAttribute('href');\n const target = document.getElementById((id === '#') ? MAINCONTENT : id.slice(1));\n\n if (target) {\n target.style.outline = '0';\n target.setAttribute('tabindex', 0);\n target.focus();\n target.addEventListener('blur', once(event => {\n target.setAttribute('tabindex', -1);\n }));\n } else {\n // throw an error?\n }\n};\n\nmodule.exports = behavior({\n [ CLICK ]: {\n [ LINK ]: setTabindex,\n },\n});\n","'use strict';\nconst behavior = require('../utils/behavior');\nconst validate = require('../utils/validate-input');\nconst debounce = require('lodash.debounce');\n\nconst change = function (event) {\n return validate(this);\n};\n\nconst validator = behavior({\n 'keyup change': {\n 'input[data-validation-element]': change,\n },\n});\n\n/**\n * TODO for 2.0, remove this statement and export `navigation` directly:\n *\n * module.exports = behavior({...});\n */\nconst assign = require('object-assign');\nmodule.exports = assign(\n el => validator.on(el),\n validator\n);\n","module.exports = {\n prefix: 'usa',\n};\n","module.exports = {\n // This used to be conditionally dependent on whether the\n // browser supported touch events; if it did, `CLICK` was set to\n // `touchstart`. However, this had downsides:\n //\n // * It pre-empted mobile browsers' default behavior of detecting\n // whether a touch turned into a scroll, thereby preventing\n // users from using some of our components as scroll surfaces.\n //\n // * Some devices, such as the Microsoft Surface Pro, support *both*\n // touch and clicks. This meant the conditional effectively dropped\n // support for the user's mouse, frustrating users who preferred\n // it on those systems.\n CLICK: 'click',\n};\n","'use strict';\nconst elproto = window.HTMLElement.prototype;\nconst HIDDEN = 'hidden';\n\nif (!(HIDDEN in elproto)) {\n Object.defineProperty(elproto, HIDDEN, {\n get: function () {\n return this.hasAttribute(HIDDEN);\n },\n set: function (value) {\n if (value) {\n this.setAttribute(HIDDEN, '');\n } else {\n this.removeAttribute(HIDDEN);\n }\n },\n });\n}\n","'use strict';\n// polyfills HTMLElement.prototype.classList and DOMTokenList\nrequire('classlist-polyfill');\n// polyfills HTMLElement.prototype.hidden\nrequire('./element-hidden');\n","'use strict';\nconst domready = require('domready');\n\n/**\n * The 'polyfills' define key ECMAScript 5 methods that may be missing from\n * older browsers, so must be loaded first.\n */\nrequire('./polyfills');\n\nconst uswds = require('./config');\n\nconst components = require('./components');\nuswds.components = components;\n\ndomready(() => {\n const target = document.body;\n for (let name in components) {\n const behavior = components[ name ];\n behavior.on(target);\n }\n});\n\nmodule.exports = uswds;\n","'use strict';\nconst assign = require('object-assign');\nconst forEach = require('array-foreach');\nconst Behavior = require('receptor/behavior');\n\nconst sequence = function () {\n const seq = [].slice.call(arguments);\n return function (target) {\n if (!target) {\n target = document.body;\n }\n forEach(seq, method => {\n if (typeof this[ method ] === 'function') {\n this[ method ].call(this, target);\n }\n });\n };\n};\n\n/**\n * @name behavior\n * @param {object} events\n * @param {object?} props\n * @return {receptor.behavior}\n */\nmodule.exports = (events, props) => {\n return Behavior(events, assign({\n on: sequence('init', 'add'),\n off: sequence('teardown', 'remove'),\n }, props));\n};\n","// https://stackoverflow.com/a/7557433\nfunction isElementInViewport (el, win=window,\n docEl=document.documentElement) {\n var rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (win.innerHeight || docEl.clientHeight) &&\n rect.right <= (win.innerWidth || docEl.clientWidth)\n );\n}\n\nmodule.exports = isElementInViewport;\n","'use strict';\n\n/**\n * @name isElement\n * @desc returns whether or not the given argument is a DOM element.\n * @param {any} value\n * @return {boolean}\n */\nconst isElement = value => {\n return value && typeof value === 'object' && value.nodeType === 1;\n};\n\n/**\n * @name select\n * @desc selects elements from the DOM by class selector or ID selector.\n * @param {string} selector - The selector to traverse the DOM with.\n * @param {Document|HTMLElement?} context - The context to traverse the DOM\n * in. If not provided, it defaults to the document.\n * @return {HTMLElement[]} - An array of DOM nodes or an empty array.\n */\nmodule.exports = function select (selector, context) {\n\n if (typeof selector !== 'string') {\n return [];\n }\n\n if (!context || !isElement(context)) {\n context = window.document;\n }\n\n const selection = context.querySelectorAll(selector);\n return Array.prototype.slice.call(selection);\n};\n","/**\n * Flips given INPUT elements between masked (hiding the field value) and unmasked\n * @param {Array.HTMLElement} fields - An array of INPUT elements\n * @param {Boolean} mask - Whether the mask should be applied, hiding the field value\n */\nmodule.exports = (field, mask) => {\n field.setAttribute('autocapitalize', 'off');\n field.setAttribute('autocorrect', 'off');\n field.setAttribute('type', mask ? 'password' : 'text');\n};\n","'use strict';\nconst forEach = require('array-foreach');\nconst resolveIdRefs = require('resolve-id-refs');\nconst select = require('./select');\nconst toggleFieldMask = require('./toggle-field-mask');\n\nconst CONTROLS = 'aria-controls';\nconst PRESSED = 'aria-pressed';\nconst SHOW_ATTR = 'data-show-text';\nconst HIDE_ATTR = 'data-hide-text';\n\n/**\n * Replace the word \"Show\" (or \"show\") with \"Hide\" (or \"hide\") in a string.\n * @param {string} showText\n * @return {strong} hideText\n */\nconst getHideText = showText => {\n return showText.replace(/\\bShow\\b/i, show => {\n return ('S' === show[ 0 ] ? 'H' : 'h') + 'ide';\n });\n};\n\n/**\n * Component that decorates an HTML element with the ability to toggle the\n * masked state of an input field (like a password) when clicked.\n * The ids of the fields to be masked will be pulled directly from the button's\n * `aria-controls` attribute.\n *\n * @param {HTMLElement} el Parent element containing the fields to be masked\n * @return {boolean}\n */\nmodule.exports = el => {\n // this is the *target* state:\n // * if the element has the attr and it's !== \"true\", pressed is true\n // * otherwise, pressed is false\n const pressed = el.hasAttribute(PRESSED)\n && el.getAttribute(PRESSED) !== 'true';\n\n const fields = resolveIdRefs(el.getAttribute(CONTROLS));\n forEach(fields, field => toggleFieldMask(field, pressed));\n\n if (!el.hasAttribute(SHOW_ATTR)) {\n el.setAttribute(SHOW_ATTR, el.textContent);\n }\n\n const showText = el.getAttribute(SHOW_ATTR);\n const hideText = el.getAttribute(HIDE_ATTR) || getHideText(showText);\n\n el.textContent = pressed ? showText : hideText;\n el.setAttribute(PRESSED, pressed);\n return pressed;\n};\n","'use strict';\nconst EXPANDED = 'aria-expanded';\nconst CONTROLS = 'aria-controls';\nconst HIDDEN = 'aria-hidden';\n\nmodule.exports = (button, expanded) => {\n\n if (typeof expanded !== 'boolean') {\n expanded = button.getAttribute(EXPANDED) === 'false';\n }\n button.setAttribute(EXPANDED, expanded);\n\n const id = button.getAttribute(CONTROLS);\n const controls = document.getElementById(id);\n if (!controls) {\n throw new Error(\n 'No toggle target found with id: \"' + id + '\"'\n );\n }\n\n controls.setAttribute(HIDDEN, !expanded);\n return expanded;\n};\n","'use strict';\nconst dataset = require('elem-dataset');\n\nconst PREFIX = require('../config').prefix;\nconst CHECKED = 'aria-checked';\nconst CHECKED_CLASS = `${PREFIX}-checklist-checked`;\n\nmodule.exports = function validate (el) {\n const data = dataset(el);\n const id = data.validationElement;\n const checkList = id.charAt(0) === '#'\n ? document.querySelector(id)\n : document.getElementById(id);\n\n if (!checkList) {\n throw new Error(\n `No validation element found with id: \"${id}\"`\n );\n }\n\n for (const key in data) {\n if (key.startsWith('validate')) {\n const validatorName = key.substr('validate'.length).toLowerCase();\n const validatorPattern = new RegExp(data[ key ]);\n const validatorSelector = `[data-validator=\"${validatorName}\"]`;\n const validatorCheckbox = checkList.querySelector(validatorSelector);\n if (!validatorCheckbox) {\n throw new Error(\n `No validator checkbox found for: \"${validatorName}\"`\n );\n }\n\n const checked = validatorPattern.test(el.value);\n validatorCheckbox.classList.toggle(CHECKED_CLASS, checked);\n validatorCheckbox.setAttribute(CHECKED, checked);\n }\n }\n};\n"]}
\ No newline at end of file
diff --git a/docs/favicon.ico b/docs/favicon.ico
new file mode 100644
index 0000000..37fef6d
Binary files /dev/null and b/docs/favicon.ico differ
diff --git a/docs/get-going-with-GitHub.md b/docs/get-going-with-GitHub.md
new file mode 100644
index 0000000..1674621
--- /dev/null
+++ b/docs/get-going-with-GitHub.md
@@ -0,0 +1,273 @@
+# 🎯 Purpose
+
+The purpose of this guide is to give you the basic information you need to get going with GitHub. This guide is intended to be used for GitHub in a common configuration. It is not the end all and be all of the information available to help you succeed with GitHub, but is a curated list of the following GitHub resources as well as other public sources of information:
+
+- [GitHub User Help Docs](https://help.github.com/)
+
+- [GitHub Enterprise Help Docs](https://help.github.com/enterprise)
+
+- [GitHub Services Resources](https://services.github.com/on-demand/resources/)
+
+- [GitHub Resources](https://resources.github.com/)
+
+- [GitHub Guides](https://guides.github.com/)
+
+- [GitHub Videos](https://www.youtube.com/user/GitHubGuides/)
+
+# :octocat: The GitHub Platform
+
+GitHub is more than "version control"; it is an all-inclusive and unified collaboration platform:
+
+
+
+
+
+
+# ⏩ Get Going!
+
+- 💻 [Get Distributed](#-get-distributed)
+- ⚙️ [Get Installed *](#️-get-installed-)
+- 🔧 [Get Configured *](#-get-configured-)
+- 📁 [Get Organized](#-get-organized)
+- :key: [Get Access](#key-get-access)
+- :nut_and_bolt: [Get Setup](#nut_and_bolt-get-setup)
+- 🌊 [Get Flowing](#-get-flowing)
+- ✅ [Get Managing](#-get-managing)
+- :books: [Get Documented](#books-get-documented)
+- 🔗 [Get Integrated](#-get-integrated)
+- ⬆️ [Get Upgraded *](#️-get-upgraded-)
+- 📢 [Get Informed](#-get-informed)
+- 🆘 [Get Help](#-get-help)
+- 🌐 [Get Open Sourcing](#-get-open-sourcing)
+
+* ENTERPRISE SERVER ONLY
+
+## 💻 Get Distributed
+
+Get familiarized with why modern distributed version control is an improvement over traditional centralized version control
+
+- [About Version Control](https://git-scm.com/book/en/Getting-Started-About-Version-Control) (Distributed vs. Centralized)
+
+- [Git Basics](https://git-scm.com/book/en/Getting-Started-Git-Basics) (Snapshots vs. Differences)
+
+- [Intro to Distributed Version Control](https://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/) (vs. Centralized Version Control)
+
+## ⚙️ Get Installed *
+
+Get your GitHub Enterprise Server instance installed and on a virtualization platform of your choice
+
+- [Provisioning and installation](https://help.github.com/enterprise/admin/guides/installation/provisioning-and-installation/)
+
+## 🔧 Get Configured *
+
+Get your GitHub Enterprise Server instance configured with the right authentication and backup infrastructure for your environment
+
+- [Web-based management console](https://help.github.com/enterprise/admin/guides/installation/web-based-management-console/)
+
+- [Authenticating users for your GitHub Enterprise Server instance](https://help.github.com/en/enterprise/2.21/admin/user-management/authenticating-users-for-your-github-enterprise-server-instance)
+
+- [High Availability configuration](https://help.github.com/enterprise/admin/guides/installation/high-availability-configuration/)
+
+- [Backups and disaster recovery](https://help.github.com/enterprise/admin/guides/installation/backups-and-disaster-recovery/)
+
+- [Using GHES with a load balancer](https://help.github.com/enterprise/admin/guides/installation/using-github-enterprise-with-a-load-balancer/)
+
+- [About Geo-replication](https://help.github.com/enterprise/admin/guides/installation/about-geo-replication/)
+
+- Recommended architecture:
+
+ 
+
+## 📁 Get Organized
+
+Get your people and code organized to optimize discoverability and reuse
+
+- [Organizing People for Successful Collaboration](https://vimeo.com/179075921/a774e76f4f) (5 min video)
+
+ - [Collaborating with groups in **organizations**](https://help.github.com/articles/collaborating-with-groups-in-organizations/)
+
+ - [Organizing members into **teams**](https://help.github.com/articles/organizing-members-into-teams/)
+
+ - [Creating **repositories**](https://help.github.com/articles/creating-a-repository-on-github/)
+
+ - e.g. @ [GitHub Desktop](https://github.com/desktop)
+
+- [Configuring GitHub for Collaboration and Compliance](https://docs.google.com/presentation/d/1UNAW-VKdCUHAAl2zi0Tksid-sEs2VFr_0M_tidslERI/edit?usp=sharing) (Presentation from [@elstudio](https://github.com/elstudio))
+
+- Why organization structure matters
+
+ - The immediate instinct may be to create an organization for every project or department at your company, leading to many divided groups that function in GitHub as siloes
+
+ - This may seem like a good way to manage permissions and reduce noise, but it’s not always the ideal strategy
+
+ - In fact, it is detrimental to cross-team collaboration and can result in administrative headaches down the line
+
+ - Instead of creating many organizations and siloing users, we suggest using one or few organizations for shared ownership of repositories and making use of teams to segment users within those organizations -- e.g.: [Google](https://github.com/google); [Microsoft](https://github.com/Microsoft)
+
+ 
+
+## :key: Get Access
+
+Get access and permissions in place to satisfy your security policies
+
+- [Permission levels for an organization](https://help.github.com/articles/permission-levels-for-an-organization/)
+
+- [Repository permission levels for an organization](https://help.github.com/articles/repository-permission-levels-for-an-organization/)
+
+- [Permission levels for a user account repository](https://help.github.com/articles/permission-levels-for-a-user-account-repository/)
+
+- [Administering a repository](https://help.github.com/categories/administering-a-repository/)
+
+ - [About protected branches](https://help.github.com/articles/about-protected-branches/)
+
+ - [About required status checks](https://help.github.com/articles/about-required-status-checks/)
+
+ - [About branch restrictions](https://help.github.com/articles/about-branch-restrictions/)
+
+## :nut_and_bolt: Get Setup
+
+Get Git and GitHub setup for the first time
+
+- [Git and GitHub Setup](https://help.github.com/categories/setup/)
+
+- [Connecting to GitHub with SSH](https://help.github.com/articles/connecting-to-github-with-ssh/)
+
+- [GitHub Desktop](https://desktop.github.com/): Extend your GitHub workflow beyond your browser
+
+- [Atom](https://atom.io/): A customizable text editor
+
+- [GitHub for Atom](https://github.atom.io/): Git and GitHub integration inside Atom
+
+## 🌊 Get Flowing
+
+Get your work flowing to the right people and reviewed by the right people
+
+- [Understanding the GitHub Flow](https://guides.github.com/introduction/flow/)
+
+- [About branches](https://help.github.com/articles/about-branches/)
+
+- [About commits](https://help.github.com/categories/commits/)
+
+- [About pull requests](https://help.github.com/articles/about-pull-requests/)
+
+- [About pull request reviews](https://help.github.com/articles/about-pull-request-reviews/)
+
+- [About pull request merges](https://help.github.com/articles/about-pull-request-merges/)
+
+- [Mentioning users and teams](https://help.github.com/articles/basic-writing-and-formatting-syntax/#mentioning-users-and-teams)
+
+- e.g. @ [Electron](https://github.com/electron/electron/pull/11658)
+
+
+
+## ✅ Get Managing
+
+Get your work and projects managed from start to finish
+
+- Describing and discussing work:
+
+ - [Managing your work with issues](https://help.github.com/articles/managing-your-work-with-issues/)
+
+ - [Labeling issues and pull requests](https://help.github.com/articles/labeling-issues-and-pull-requests/)
+
+ - [Finding information in a repository](https://help.github.com/articles/finding-information-in-a-repository/)
+
+ - e.g. @ [Atom](https://github.com/atom/atom/issues)
+
+- Planning and tracking work:
+
+ - [Tracking progress with project boards](https://help.github.com/articles/tracking-the-progress-of-your-work-with-project-boards/)
+
+ - [Tracking progress with milestones](https://help.github.com/articles/tracking-the-progress-of-your-work-with-milestones/)
+
+ - [Releases](https://help.github.com/categories/releases/)
+
+ - e.g. @ [Kubernetes](https://github.com/kubernetes/kubernetes/projects)
+
+## :books: Get Documented
+
+Get information about your work and projects documented to share right next to your code
+
+- [READMEs](https://help.github.com/articles/about-readmes/) -- e.g. : [Spotify](https://github.com/spotify/luigi/blob/master/README.rst) ; [Docker](https://github.com/docker/docker.github.io/blob/master/README.md)
+
+- [Wikis](https://help.github.com/categories/wiki/) -- e.g. : [D3](https://github.com/d3/d3/wiki) ; [Netflix Hystrix](https://github.com/Netflix/Hystrix/wiki) ; [Projects with great wikis](https://github.com/showcases/projects-with-great-wikis)
+
+- [GitHub Pages](https://help.github.com/categories/github-pages-basics/) -- e.g. : [Facebook React Native](https://facebook.github.io/react-native/) ; [Twitter](http://twitter.github.io/) ; [Best Buy](https://bestbuyapis.github.io/api-documentation/) ; [GitHub Pages examples](https://github.com/showcases/github-pages-examples)
+
+## 🔗 Get Integrated
+
+Get integrated with the rest of your development pipeline
+
+- [Products that integrate with the GitHub platform](https://github.com/works-with)
+
+- [GitHub Services Integration](https://github.com/github/github-services)
+
+- [GitHub Marketplace](https://github.com/marketplace)
+
+- [GitHub API](https://developer.github.com/)
+
+## 📢 Get Informed
+
+Get informed on what's new with GitHub
+
+- [GitHub Blog](https://github.com/blog/)
+
+- [GitHub Engineering](https://githubengineering.com/)
+
+- [The State of the Octoverse](https://octoverse.github.com/)
+
+- [@github on Twitter](https://twitter.com/github)
+
+## ⬆️ Get Upgraded *
+
+Get your GitHub Enterprise Server instance upgraded to the latest release
+
+- [Upgrading GitHub Enterprise Server](https://help.github.com/enterprise/admin/guides/installation/upgrading-github-enterprise/)
+
+- [GitHub Enterprise Server Releases](https://enterprise.github.com/releases)
+
+## ℹ️ Get Enabled
+
+Get enabled on the basics of Git and GitHub
+
+- [Git and GitHub learning resources](https://help.github.com/articles/git-and-github-learning-resources/)
+
+- [On Demand Training](https://services.github.com/on-demand/) : [GitHub Learning Resources](https://services.github.com/on-demand/resources/) ; [Learning Path](https://services.github.com/on-demand/resources/learning-path/)
+
+- [GitHub Guides @ YouTube](https://www.youtube.com/user/GitHubGuides) : [Git Basics • Training](https://www.youtube.com/playlist?list=PLg7s6cbtAD165JTRsXh8ofwRw0PqUnkVH) ; [Git and GitHub with Briana Swift](https://www.youtube.com/playlist?list=PLg7s6cbtAD17Gw5u8644bgKhgRLiJXdX4) (videos)
+
+## 🆘 Get Help
+
+Get dedicated help from GitHub to support your continued success
+
+- [GitHub Success Team](sales@github.com) | [GitHub Professional Services](https://services.github.com/)
+
+- [GitHub.com Support](https://github.com/support) | [GitHub Enterprise Support](https://enterprise.github.com/support)
+
+Get help from the GitHub community
+
+- [GitHub Community Forum](https://github.community/) | [GitHub Platform Forum](https://platform.github.community/)
+
+## 🌐 Get Open Sourcing
+
+Get collaborating with the Open Source community
+
+- [The largest open source community in the world](https://github.com/open-source)
+
+- [Open Source Guides](https://opensource.guide/)
+
+- [Explore GitHub](https://github.com/explore)
+
+- [Open source organizations](https://github.com/showcases/open-source-organizations) -- e.g.:
+
+ - [Open Source at Microsoft](https://opensource.microsoft.com/) : [TypeScript](https://github.com/Microsoft/TypeScript) ; [Azure Docs](https://github.com/MicrosoftDocs/azure-docs)
+
+ - [Capital One Open Source](https://developer.capitalone.com/open-source/)
+
+ - [Develop with Deere](https://developer.deere.com/)
+
+ - [Walmart Labs](http://walmartlabs.com/)
+
+ - [Spotify](https://spotify.github.io/)
+
+ - [Mapbox](https://github.com/mapbox)
diff --git a/docs/manifest.json b/docs/manifest.json
new file mode 100644
index 0000000..4d043b2
--- /dev/null
+++ b/docs/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "App",
+ "icons": [
+ {
+ "src": "\/assets/img/logo/android-icon-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": "0.75"
+ },
+ {
+ "src": "\/assets/img/logo/android-icon-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": "1.0"
+ },
+ {
+ "src": "\/assets/img/logo/android-icon-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": "1.5"
+ },
+ {
+ "src": "\/android-icon-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": "2.0"
+ },
+ {
+ "src": "\/assets/img/logo/android-icon-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ },
+ {
+ "src": "\/assets/img/logo/android-icon-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": "4.0"
+ }
+ ]
+}