inserted by Slick.
+ .slick-slide div {
+ height: $slide-height; // force slick to set a height.
+ } // .slick-slide div
+
+ // Navigation buttons.
+ .slick-arrow {
+ @include position(absolute, 45% null null null);
+
+ z-index: 10;
+ } // .sick-arrow
+
+ // Next button.
+ .slick-next {
+ right: $gutter;
+
+ @include media($desktop) {
+ right: 0;
+ }
+ } // .slick-next
+
+ // Previous button.
+ .slick-prev {
+ left: $gutter;
+
+ @include media($desktop) {
+ left: 0;
+ }
+ } // .slick-prev
+
+ // Navigation dots/numbers.
+ .slick-dots {
+ @include list-reset;
+ @include position(absolute, null 0 0 0);
+
+ display: flex;
+ justify-content: center;
+ margin-left: auto;
+ margin-right: auto;
+ width: 80%;
+ z-index: 1;
+
+ // Each dot.
+ li {
+ flex-direction: row;
+ justify-content: center;
+ } // li
+ } // .slick-dots
+} // .carousel-block
+
+.slide {
+ margin-bottom: 0;
+ overflow-y: hidden;
+ position: relative;
+ z-index: 1;
+
+ // Content container.
+ &-content {
+ @include margin(0 auto);
+
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+ height: $slide-height;
+ justify-content: center;
+ position: relative;
+ text-align: center;
+ z-index: 3;
+ } // .slide-content
+
+ // Add padding to description.
+ &-description {
+ padding-bottom: $gutter * 2;
+ } // .slide-description
+
+ // Remove any text decoration.
+ .button-slide {
+ text-decoration: none;
+ } // a.button-slide
+} // .slide
+
+//-----------------------------------------
+// IE Fixes
+//-----------------------------------------
+.ie .slide {
+
+ // IE seems to have some width issues with flexbox,
+ // the text is rendered wider than its container
+ // and doesn't wrap. This fixes that.
+ .slide-title,
+ .slide-description {
+ width: 100%;
+ } // .slide-title, .slide-description
+} // .ie .slide
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_global.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_global.scss
new file mode 100644
index 00000000..4b97f8c5
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_global.scss
@@ -0,0 +1,114 @@
+//--------------------------------------------------------------
+// Global Content Block Styles
+//--------------------------------------------------------------
+.content-block {
+ @include padding($gutter * 2 null);
+
+ &.has-background:not(.alignfull) {
+ @include margin(0 auto);
+
+ &.container-width {
+ @include margin($gutter * 2 auto);
+ @include padding($gutter * 2 0);
+
+ @include media($container-offset) {
+ @include padding($gutter * 2 $gutter);
+ }
+ } // &.container-width.
+ } // &.has-background
+
+ // Remove the extra padding on nested no-background blocks.
+ &.no-background,
+ &.no-background.container-width,
+ &.has-background.container-width {
+
+ // Remove padding from nth no-background block.
+ & + .no-background,
+ & + .no-background.container-width {
+ padding-top: 0;
+ } // & + .no-background
+ } // &.no-background
+
+ // Make sure videos stay in their containers.
+ &.video-as-background {
+ overflow: hidden;
+ position: relative;
+ } // &.video-as-background
+
+ // Z-index container in ACF blocks.
+ .container {
+ z-index: 3;
+ }
+
+ // Content Block titles.
+ &-title {
+ text-align: center;
+
+ @include media($tablet-portrait) {
+ text-align: left;
+ }
+ } // .content-block-title
+} // .content-block
+
+
+//-----------------------------------------
+// Gutenberg Columns
+//-----------------------------------------
+.wp-block-column {
+
+ .content-block {
+
+ &.alignfull {
+ left: unset;
+ margin: unset;
+ max-width: 100%;
+ right: unset;
+ }
+ }
+} // .wp-column
+
+//-----------------------------------------
+// Overlay
+//-----------------------------------------
+// if overlay exists.
+.has-overlay {
+ overflow-y: hidden;
+ position: relative;
+ z-index: 0;
+
+ // Transparent overlay.
+ &::after {
+ @include position(absolute, 0 0 null null);
+ @include size(100%);
+
+ background-color: $color-overlay;
+ content: '';
+ z-index: 0;
+ } // &:after
+} // &.has-overlay
+
+
+//-----------------------------------------
+// Video Controls
+//-----------------------------------------
+.video-toggle {
+ @include position(absolute, null 1% 2% null);
+ @include size(rem(22));
+
+ background: url('assets/images/svg-icons/pause.svg') center center no-repeat transparent;
+ background-size: rem(16);
+ opacity: 0.2;
+ padding: 0;
+ transition: $transition-opacity;
+ z-index: 5;
+
+ &:active,
+ &:focus,
+ &:hover {
+ opacity: 2;
+ }
+
+ .video-toggled & {
+ background-image: url('assets/images/svg-icons/play.svg');
+ }
+} // .video-toggle
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_hero.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_hero.scss
new file mode 100644
index 00000000..5d640e6b
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_hero.scss
@@ -0,0 +1,47 @@
+//--------------------------------------------------------------
+// Hero Block
+//--------------------------------------------------------------
+.hero-block {
+
+ // Content container.
+ &-content {
+ @include margin(0 auto);
+
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+ height: rem(500);
+ justify-content: center;
+ max-width: 50%;
+ position: relative;
+ text-align: center;
+ } // .hero-content
+
+ // Add padding to description.
+ &-description {
+ padding-bottom: $gutter * 2;
+ } // .hero-description
+
+ // Remove any text decoration.
+ .button-hero {
+ font-size: inherit;
+ height: auto;
+ line-height: normal;
+ padding: rem(8) rem(20);
+ text-decoration: none;
+ } // a.button-hero
+} // .hero
+
+//-----------------------------------------
+// IE Fixes
+//-----------------------------------------
+.ie .hero {
+
+ // IE seems to have some width issues with flexbox,
+ // the text is rendered wider than its container
+ // and doesn't wrap. This fixes that.
+ .hero-title,
+ .hero-description {
+ width: 100%;
+ } // .hero-title, .hero-description
+} // .ie .hero
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_posts.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_posts.scss
new file mode 100644
index 00000000..4dcac5b2
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/_posts.scss
@@ -0,0 +1,12 @@
+//--------------------------------------------------------------
+// Related and Recent Posts Blocks
+//--------------------------------------------------------------
+
+
+//-----------------------------------------
+// Shared
+//-----------------------------------------
+.recent-posts-block,
+.related-posts-block {
+ padding-bottom: 0;
+} // .recent-posts-block, .related-posts-block
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/index.scss
new file mode 100644
index 00000000..ab048a93
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/content-blocks/index.scss
@@ -0,0 +1,10 @@
+//--------------------------------------------------------------
+// ACF Content Blocks
+//--------------------------------------------------------------
+
+@import 'accordion';
+@import 'call-to-action';
+@import 'carousel';
+@import 'global';
+@import 'hero';
+@import 'posts';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/index.scss
new file mode 100644
index 00000000..d93f6754
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/index.scss
@@ -0,0 +1,23 @@
+//--------------------------------------------------------------
+// Modules
+//--------------------------------------------------------------
+
+@import 'buttons';
+@import 'card';
+@import 'comments';
+@import 'content';
+@import 'footer';
+@import 'forms';
+@import 'header';
+@import 'icons';
+@import 'modal';
+@import 'tables';
+
+// ACF Blocks.
+@import 'content-blocks/index';
+
+// Navigation.
+@import 'navigation/index';
+
+// WP/Gutenberg blocks.
+@import 'wp-blocks/index';
\ No newline at end of file
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_footer-navigation.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_footer-navigation.scss
new file mode 100644
index 00000000..18c5f759
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_footer-navigation.scss
@@ -0,0 +1,22 @@
+//--------------------------------------------------------------
+// Footer Navigation.
+//--------------------------------------------------------------
+
+.footer-navigation {
+ @include margin(rem(12) auto);
+
+ align-items: center;
+ display: flex;
+ justify-content: center;
+
+ ul {
+ max-width: $max-width;
+
+ li {
+
+ a {
+ font-size: rem(16);
+ } // a
+ } // li
+ } // ul
+} // .footer-navigation
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_global-navigation.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_global-navigation.scss
new file mode 100644
index 00000000..622bb01c
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_global-navigation.scss
@@ -0,0 +1,60 @@
+//--------------------------------------------------------------
+// Global and Shared Navigation Styles.
+//--------------------------------------------------------------
+
+// Default menu (active after a fresh WordPress install).
+.menu {
+ @include list-reset;
+
+ ul {
+ @include list-reset;
+
+ // Dropdowns.
+ &.sub-menu {
+ @include padding(rem(10));
+
+ background: $color-background-submenu;
+
+ li {
+ @include margin(0);
+ } // li
+ } // &.sub-menu
+ } // ul
+
+ // For list items with menu items.
+ .menu-item-has-children {
+
+ .menu-item-has-children {
+
+ // Rotate to the right to point toward the direction of the dropdown.
+ .caret-down {
+ transform: rotate(-90deg) translateX(rem(2));
+ } // .caret-down
+ } // .menu-item-has-children
+ } // .menu-item-has-children
+
+ // Menu hyperlinks
+ a {
+ display: block;
+ text-decoration: none;
+ } // a
+
+ // Current items
+ .current_page_item a,
+ .current-menu-item a {
+ color: $color-link-hover;
+ } // .current_page_item a, .current-menu-item a
+} // .menu
+
+//-----------------------------------------
+// Caret down.
+//-----------------------------------------
+.caret-down {
+ @include size(rem(7), rem(10));
+
+ background: url('assets/images/svg-icons/caret-down.svg') no-repeat transparent;
+ background-size: 100%;
+ display: inline-block;
+ margin-left: rem(5);
+ vertical-align: middle;
+} // .angle-down
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_main-navigation.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_main-navigation.scss
new file mode 100644
index 00000000..f8492cb7
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_main-navigation.scss
@@ -0,0 +1,97 @@
+//--------------------------------------------------------------
+// Main Navigation — Desktop.
+//--------------------------------------------------------------
+.main-navigation {
+ display: none;
+
+ @include media($tablet-landscape) {
+ display: block;
+ }
+
+ // Menu area
+ ul {
+ display: none;
+
+ @include media($phone) {
+ @include margin(null auto);
+ @include padding(null $gutter);
+
+ align-items: center;
+ display: flex;
+ justify-content: flex-end;
+ max-width: $max-width;
+ width: auto;
+ }
+
+ @include media($container-offset) {
+ @include padding(null 0);
+ }
+
+ li {
+ @include margin(0 rem(26) 0 0);
+
+ display: inline-block;
+
+ &:last-of-type {
+ margin-right: 0;
+ }
+
+ } // li
+ } // ul
+
+ &.toggled ul {
+ display: block;
+ } // &.toggled ul
+} // .main-navigation
+
+//-----------------------------------------
+// Dropdown.
+//-----------------------------------------
+.dropdown {
+ position: relative;
+
+ // Sub-menu
+ ul {
+ @include position(absolute, rem(20) null null -999em);
+
+ border: rem(1) solid $color-alto;
+ border-radius: rem(4);
+ z-index: 99999;
+
+ // Sub-sub menu
+ ul {
+ left: -999em;
+ top: 0;
+ } // ul
+
+ // Sub-menu items
+ li {
+ text-align: center;
+ width: 100%;
+
+ &:hover > ul,
+ &.focus > ul {
+ left: 100%;
+ } // &:hover > ul, &.focus > ul
+ } // li
+
+ // Sub-menu links
+ a {
+ @include size(100%, auto);
+
+ min-width: rem(120);
+ width: auto;
+ } // a
+ } // ul
+
+ // Display sub-menu on hover
+ li:hover > ul,
+ .focus > ul {
+ left: auto;
+ } // li:hover > ul, .focus > ul
+
+ // Menu items
+ li {
+ position: relative;
+ } // li
+} // &.dropdown
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_mobile-navigation.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_mobile-navigation.scss
new file mode 100644
index 00000000..29525809
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_mobile-navigation.scss
@@ -0,0 +1,309 @@
+//--------------------------------------------------------------
+// Mobile Navigation.
+//
+// 1. Mobile Navigation Styles.
+// 2. Parent Indicator.
+// 3. Menu Item Has Children.
+// 4. Hamburger Button.
+// 5. Off Canvas Drawer.
+//
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// 1. Mobile Navigation Styles.
+//-----------------------------------------
+.mobile-menu {
+ @include list-reset;
+
+ ul {
+ @include list-reset;
+ } // ul
+
+ li {
+ @include padding(rem(5) rem(12));
+
+ list-style: none;
+ position: relative;
+ width: 100%;
+ } // li
+
+ a {
+ color: $color-mobile-menu-link;
+ display: block;
+ font-size: rem(14);
+ text-decoration: none;
+ width: 100%;
+
+ &:focus {
+ outline: none;
+ } // &:focus
+
+ &:visited {
+ color: $color-mobile-menu-link;
+ }
+
+ &:hover,
+ &:focus,
+ &:active {
+ border-bottom: rem(1) solid $color-robins-egg;
+ color: $color-mobile-menu-link-hover;
+ } // &:hover, &:focus, &:active
+ } // a
+
+ // Submenu dropdowns.
+ .sub-menu {
+ display: none;
+
+ // If submenu is open.
+ &.is-visible {
+ display: block;
+ opacity: 1;
+ visibility: visible;
+ } // &.is-visible
+ } // .sub-menu
+} // .mobile-menu
+
+//-----------------------------------------
+// 2. Create a down arrow on parent items.
+//-----------------------------------------
+.parent-indicator {
+ @include padding(0 rem(5));
+ @include position(absolute, rem(10) rem(10) null null);
+ @include size(rem(35), rem(25));
+
+ background-color: transparent;
+ display: inline-block;
+ z-index: 9999;
+
+ &:focus {
+ outline: 2px solid $color-mobile-menu-link;
+ } // &:focus
+} // .parent-indicator
+
+//-----------------------------------------
+// 3. Menu Item Has Children.
+//-----------------------------------------
+.mobile-menu {
+
+ // Parent menu items.
+ .menu-item-has-children {
+ transition: max-height 0.5s;
+
+ // Force menu link to accomodate down button.
+ a {
+ display: inline-block;
+ max-width: calc(100% - 40px);
+ } // a
+
+ &.is-visible {
+ max-height: rem(500);
+
+ // When visible, flip the down arrow.
+ .down-arrow {
+ transform: rotateX(180deg);
+ } // .down-arrow
+ } // .is-visible
+
+ .menu-item-has-children {
+
+ &:last-of-type {
+
+ .menu-item-has-children.is-visible {
+ margin-bottom: 0;
+ }
+ } // &:last-of-type
+
+ .down-arrow {
+ transform: rotateX(0);
+ } // .down-arrow
+
+ &.is-visible {
+
+ &:last-of-type {
+ margin-bottom: 0;
+ } // &:last-of-type
+
+ // When visible, flip the down arrow.
+ .down-arrow {
+ transform: rotateX(180deg);
+ } // .down-arrow
+ } // &.is-visible
+
+ .menu-item-has-children {
+
+ .down-arrow {
+ transform: rotateX(0);
+ } // .down-arrow
+
+ &.is-visible {
+ // When visible, flip the down arrow.
+ .down-arrow {
+ transform: rotateX(180deg);
+ } // .down-arrow
+ } // &.is-visible
+ } // .menu-item-has-children
+ } // .menu-item-has-children
+ } // .menu-item-has-children
+} // .mobile-menu
+
+//-----------------------------------------
+// 4. Hamburger Button.
+//-----------------------------------------
+.hamburger {
+ background-color: transparent;
+ outline: none;
+
+ &,
+ &::before,
+ &::after {
+ @include position(absolute, null null null 0);
+ @include size(rem(35), rem(5));
+
+ background: $color-background-hamburger;
+ border-radius: $border-radius-thin;
+ content: '';
+ cursor: pointer;
+ display: block;
+ transform-origin: center center;
+ transition: $transition-hamburger;
+ }
+
+ & {
+ @include position(absolute, 50% null null 0);
+
+ transform: translateY(-50%);
+ }
+
+ &::before {
+ transform: translateY(-200%);
+ }
+
+ &::after {
+ transform: translateY(200%);
+ }
+
+ .is-visible & {
+ background-color: transparent;
+
+ &::before {
+ transform: rotate(45deg);
+ }
+
+ &::after {
+ transform: rotate(-45deg);
+ }
+ } // .is-visible
+} // .hamburger
+
+//-----------------------------------------
+// 5. Off Canvas Drawer.
+//-----------------------------------------
+.off-canvas {
+
+ // The container.
+ &-container {
+ @include position(fixed, 0 auto 0 0);
+ @include size(rem(220), 100%);
+
+ -webkit-overflow-scrolling: touch;
+ background-color: $color-background-off-canvas;
+ overflow-y: auto;
+ transform: translateX(rem(-220));
+ transition: $transition-transform;
+ z-index: 9998;
+
+ &.is-visible {
+ transform: translateX(0);
+ }
+
+ // Deal with the admin bar.
+ .admin-bar & {
+ padding-top: rem(46);
+
+ @include media($wp-admin-bar) {
+ padding-top: rem(32);
+ }
+ } // .admin-bar &
+ } // .off-canvas-container
+
+ // The hamburger nav.
+ &-open {
+ @include padding(0);
+ @include position(absolute, $space $space null null);
+ @include size(rem(35));
+
+ background-color: transparent;
+ display: block;
+
+ @include media($tablet-landscape) {
+ display: none;
+ }
+
+ // Deal with the admin bar.
+ .admin-bar & {
+ @include position(absolute, rem(56) null null null);
+ } // .admin-bar &
+
+ &:focus,
+ &:hover {
+ background-color: transparent;
+ outline: 2px solid $color-mobile-menu-link;
+ } // &:focus, &:hover
+ } // .off-canvas-button
+
+ // The close "X" button.
+ &-close {
+ @include padding(rem(12) rem(5));
+ @include position(absolute, rem(10) rem(10) null null);
+ @include size(rem(35));
+
+ background-color: transparent;
+ display: none;
+ z-index: 9999;
+
+ &:focus,
+ &:hover {
+ background: transparent;
+ outline: 2px solid $color-mobile-menu-link;
+ } // &:focus, &:hover
+
+ .admin-bar & {
+ top: rem(60);
+
+ @include media($wp-admin-bar) {
+ top: rem(46);
+ }
+ } // .admin-bar &
+
+ .is-visible & {
+ display: inline-block;
+ } // .is-visible &
+ } // .off-canvas-close
+
+ // The background screen.
+ &-screen {
+ @include position(fixed, 0);
+
+ background: $color-background-off-canvas-screen;
+ opacity: 0;
+ transition: $transition-opacity;
+ visibility: hidden;
+ z-index: 9996;
+
+ &.is-visible {
+ opacity: 0.4;
+ visibility: visible;
+ }
+ } // .off-canvas-screen
+
+ // Content container.
+ &-content {
+ display: none;
+
+ .is-visible & {
+ @include margin($gutter * 2 null null);
+
+ display: block;
+ }
+ } // .off-canvas-content
+} // .off-canvas
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_post-navigation.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_post-navigation.scss
new file mode 100644
index 00000000..24691546
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/_post-navigation.scss
@@ -0,0 +1,56 @@
+//--------------------------------------------------------------
+// Navigation on Comment, Post and Posts.
+//--------------------------------------------------------------
+.comment-navigation,
+.posts-navigation,
+.post-navigation {
+ @include margin(null auto);
+ @include padding(null $gutter);
+
+ max-width: $max-width;
+
+ @include media($container-offset) {
+ @include padding(0);
+ }
+
+ .nav-links {
+ @include margin($space null null);
+
+ display: flex;
+ flex: 0 0 100%;
+ flex-flow: row wrap;
+ width: 100%; // For IE11.
+ } // .nav-links
+
+ .site-main & {
+ @include margin(0 0 $space);
+
+ overflow: hidden;
+ } // .site-main &
+
+ .nav-previous {
+ @include size(50%, auto);
+
+ margin-right: auto;
+ } // &.nav-previous
+
+ .nav-next {
+ @include size(50%, auto);
+
+ margin-left: auto;
+ text-align: right;
+ } // &.nav-next
+} // .comment-navigation, .posts-navigation, .post-navigation
+
+//-----------------------------------------
+// Numbered Pagination
+//-----------------------------------------
+.pagination-container {
+
+ .page-numbers {
+
+ &.current {
+ font-weight: 700;
+ } // &.current
+ } // .page-numbers
+} // .pagination-container
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/index.scss
new file mode 100644
index 00000000..cec06921
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/navigation/index.scss
@@ -0,0 +1,18 @@
+//--------------------------------------------------------------
+// Navigation
+//--------------------------------------------------------------
+
+// Globally utilized styles.
+@import 'global-navigation';
+
+// Primary header navigation.
+@import 'main-navigation';
+
+// Footer navigation.
+@import 'footer-navigation';
+
+// Mobile-only navigation.
+@import 'mobile-navigation';
+
+// Blog post navigation.
+@import 'post-navigation';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-button.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-button.scss
new file mode 100644
index 00000000..62aea58c
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-button.scss
@@ -0,0 +1,17 @@
+//--------------------------------------------------------------
+// WordPress Default Button Block
+//--------------------------------------------------------------
+// sass-lint:disable class-name-format
+// Reset button links to be more inline with our defaults.
+.wp-block-button {
+
+ // The class on the
.
+ .wp-block-button__link {
+
+ // The hover and focus states.
+ &:hover,
+ &:focus {
+ opacity: 0.8;
+ } // &:hover, &:focus
+ } // &__link
+} // .wp-block-button
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-gallery.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-gallery.scss
new file mode 100644
index 00000000..8e1ddab6
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-gallery.scss
@@ -0,0 +1,9 @@
+//--------------------------------------------------------------
+// WordPress Default Gallery Block
+//--------------------------------------------------------------
+
+// Remove the left margin/padding.
+.wp-block-gallery {
+ @include margin(0);
+ @include padding(0);
+} // .wp-block-gallery
\ No newline at end of file
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-pullquote.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-pullquote.scss
new file mode 100644
index 00000000..0c6fb215
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-pullquote.scss
@@ -0,0 +1,9 @@
+//--------------------------------------------------------------
+// WordPress Default Pullquote Block
+//--------------------------------------------------------------
+
+// Pullquote defaults.
+.wp-block-pullquote {
+ border-bottom: rem(2) solid $color-border-block;
+ border-top: rem(2) solid $color-border-block;
+} // .wp-block-pullquote
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-quote.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-quote.scss
new file mode 100644
index 00000000..12ded3a5
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-quote.scss
@@ -0,0 +1,12 @@
+//--------------------------------------------------------------
+// WordPress Default Blockquote Block
+//--------------------------------------------------------------
+
+// Match block quotes to current defaults.
+.wp-block-quote {
+
+ // Match our defaults current state.
+ cite {
+ font-style: italic;
+ } // cite
+} // .wp-block-quote
\ No newline at end of file
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-separator.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-separator.scss
new file mode 100644
index 00000000..0a105d72
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-separator.scss
@@ -0,0 +1,9 @@
+//--------------------------------------------------------------
+// WordPress Default Separator Block
+//--------------------------------------------------------------
+
+// Match the separator with our current default
+.wp-block-separator {
+ border-bottom: rem(1) solid $color-border-block;
+ max-width: 100%;
+} // .wp-block-separator.
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-table.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-table.scss
new file mode 100644
index 00000000..176b67f6
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-table.scss
@@ -0,0 +1,8 @@
+//--------------------------------------------------------------
+// WordPress Default Table Block
+//--------------------------------------------------------------
+
+// Remove the display block from default table.
+.wp-block-table {
+ display: table;
+} // .wp-block-table
\ No newline at end of file
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-video.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-video.scss
new file mode 100644
index 00000000..eda0e591
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/default-blocks/_wp-block-video.scss
@@ -0,0 +1,16 @@
+//--------------------------------------------------------------
+// WordPress Default Video Block
+//--------------------------------------------------------------
+
+.wp-block-video {
+ height: 0;
+ overflow: hidden;
+ padding-bottom: 56.25%; // For ratio 16:9. 75% if ratio is 4:3
+ position: relative;
+
+ video {
+ @include position(absolute, 0 null null 0);
+ @include size(100%);
+
+ } // video
+} // .wp-block-video
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/index.scss
new file mode 100644
index 00000000..e457f51a
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/index.scss
@@ -0,0 +1,16 @@
+//--------------------------------------------------------------
+// WP/Gutenberg Blocks
+//--------------------------------------------------------------
+
+// Default blocks.
+@import 'default-blocks/wp-block-button';
+@import 'default-blocks/wp-block-gallery';
+@import 'default-blocks/wp-block-pullquote';
+@import 'default-blocks/wp-block-quote';
+@import 'default-blocks/wp-block-separator';
+@import 'default-blocks/wp-block-table';
+@import 'default-blocks/wp-block-video';
+
+// WDS Blocks.
+@import 'wds-blocks/wds-cta';
+@import 'wds-blocks/wds-hero';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/wds-blocks/_wds-cta.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/wds-blocks/_wds-cta.scss
new file mode 100644
index 00000000..66e7e742
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/wds-blocks/_wds-cta.scss
@@ -0,0 +1,6 @@
+//--------------------------------------------------------------
+// WDS Call to Action
+//--------------------------------------------------------------
+
+.wp-block-wds-call-to-action {
+} // ..wp-block-wds-call-to-action
\ No newline at end of file
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/wds-blocks/_wds-hero.scss b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/wds-blocks/_wds-hero.scss
new file mode 100644
index 00000000..7a9222d8
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/modules/wp-blocks/wds-blocks/_wds-hero.scss
@@ -0,0 +1,7 @@
+//--------------------------------------------------------------
+// WDS Hero
+//--------------------------------------------------------------
+
+.wp-block-wds-hero {
+ text-align: center;
+} // .wp-block-wds-hero
\ No newline at end of file
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/plugins/_gravity-forms.scss b/web/wp-content/themes/dctx-v2/assets/sass/plugins/_gravity-forms.scss
new file mode 100644
index 00000000..556cee97
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/plugins/_gravity-forms.scss
@@ -0,0 +1,259 @@
+//--------------------------------------------------------------
+// Gravity Forms
+// Visit this link for CSS Targeting Examples - Very Helpful
+// https://www.gravityhelp.com/documentation/article/css-targeting-examples/
+//
+// BASE STYLES
+// FORM HEADER
+// FORM FOOTER
+// CONFIRMATION MESSAGE
+// SELECTS
+// CHOSEN SELECT
+// CONTENT OVERRIDES
+//--------------------------------------------------------------
+
+//--------------------------------------------------------------
+// LOCAL VARIABLES
+//--------------------------------------------------------------
+
+// Form
+$gf-padding: 0; // set outer padding on form
+$gf-bg: $color-white; // background color of form
+$gf-border-width: 0; // border-width on form
+$gf-border-color: $color-white; // border color
+
+// Fields / Rows
+$gf-field-margin-bottom: rem(25); // margin between field and label below (vertical spacing between rows)
+
+// Labels
+$gf-label-font-size: rem(16);
+$gf-label-font-color: $color-mineshaft;
+$gf-label-font-weight: 700;
+
+// Inputs
+$gf-input-color-background: $color-white;
+$gf-input-color-border: $color-border-input;
+$gf-input-color-text: $color-text-input;
+$gf-input-color-focus-text: $color-focus-text-input;
+$gf-input-padding: rem(6);
+
+//--------------------------------------------------------------
+// BASE STYLES
+//--------------------------------------------------------------
+.gform_wrapper { // the entire form
+ background: $gf-bg; // background for the form
+ border: $gf-border-width solid $gf-border-color; // outer form border
+ padding: $gf-padding; // form padding
+
+ // Single and two-column fields
+ &.gform_body .gform_fields .gfield,
+ &.gform_body .gform_fields .gfield.gf_left_half,
+ &.gform_body .gform_fields .gfield.gf_right_half {
+ margin-bottom: $gf-field-margin-bottom; // space between input and label below
+ } // &.gform_body .gform_fields .gfield, &.gform_body .gform_fields .gfield.gf_left_half, &.gform_body .gform_fields .gfield.gf_right_half
+
+ // Labels
+ .gfield_label {
+ color: $gf-label-font-color;
+ font-size: $gf-label-font-size;
+ font-weight: $gf-label-font-weight;
+ } // .gfield_label
+
+ // Standard fields
+ input[type='text'],
+ input[type='url'],
+ input[type='email'],
+ input[type='tel'],
+ input[type='number'],
+ input[type='password'],
+ input[type='file'],
+ textarea {
+ background: $gf-input-color-background;
+ } // input[type="text"], input[type="url"], input[type="email"], input[type="tel"], input[type="number"], input[type="password"], input[type="file"], textarea
+
+ textarea {
+ width: 100%;
+ } // textarea
+
+ // Default Drop-Down (Select) Field
+ // Feel free to change the svg icon being used
+ select {
+ appearance: none;
+ background: url('assets/images/svg-icons/caret-down.svg') no-repeat 97% transparent;
+ background-color: $gf-input-color-background;
+ background-size: rem(12);
+ border-color: $gf-input-color-border;
+ border-radius: 0;
+ line-height: 1.45;
+ padding: $gf-input-padding !important; // need to override GF's "browser" stylesheet
+ width: 100%;
+
+ @include media($tablet-portrait) {
+ width: 49%;
+ }
+
+ &::-ms-expand {
+ display: none; // Remove default dropdown arrow in IE11.
+ }
+ } // select
+
+ // Remove icon for default multi-select
+ select[multiple='multiple'] {
+ background: $gf-input-color-background;
+ } // select[multiple="multiple"]
+} // .gform_wrapper
+
+//--------------------------------------------------------------
+// SELECTS
+//--------------------------------------------------------------
+.gform_wrapper .gform_body .gform_fields .gfield select,
+.gform_wrapper.gf_browser_chrome .gform_body .gform_fields .gfield select {
+ margin-left: 0;
+ width: 100% !important; // overrides GF !important
+
+ @include media($tablet-portrait) {
+ width: 49% !important;
+ }
+} // .gform_wrapper .gform_body .gform_fields .gfield select, .gform_wrapper.gf_browser_chrome .gform_body .gform_fields .gfield select
+
+//--------------------------------------------------------------
+// CHOSEN SELECT
+//--------------------------------------------------------------
+.gform_wrapper .gfield .chosen-container-single {
+ font-size: rem(16);
+
+ // Link holding initial selection - what user first sees
+ .chosen-single {
+ background: $gf-input-color-background;
+ border-color: $gf-input-color-border;
+ border-radius: 0;
+ height: auto;
+ padding: $gf-input-padding;
+ } // .chosen-single
+
+ // Default state of icon for select
+ .chosen-single div b {
+ @include position(absolute, 40% rem(11) null null);
+
+ background: none; // hide the default chosen background
+
+ // adjust size and color for active icon
+ &::before {
+ border-color: $color-silver transparent transparent;
+ border-style: solid;
+ border-width: rem(12) (rem(12) / 2) 0;
+ content: '';
+ height: 0;
+ width: 0;
+ } // &::before
+ } // .chosen-single div b
+
+ // Selections drop-down
+ .chosen-drop {
+
+ // Search box by default has a small magnifying icon on right
+ .chosen-search input[type='text'] {
+ background: none;
+ } // .chosen-search input[type="text"]
+
+ // Search results list
+ .chosen-results li {
+ padding: rem(10) rem(5);
+ } // .chosen-results li
+ } // .chosen-drop
+
+ // For styling the icon when select is active
+ &.chosen-container-single.chosen-with-drop {
+
+ .chosen-single {
+ background-image: none;
+ } // .chosen-single
+
+ .chosen-single div b {
+ border: none; // hiding the previous triangle (border)
+
+ // adjust size and color for active icon
+ &::before {
+ border-color: transparent transparent $color-silver;
+ border-width: 0 1rem 1rem;
+ border-style: solid;
+ border-width: 0 (rem(12) / 2) rem(12);
+ content: '';
+ height: 0;
+ width: 0;
+ } // &::before
+ } // .chosen-single div b
+ } // &.chosen-container-single.chosen-with-drop
+} // .gform_wrapper .gfield .chosen-container-single
+
+//--------------------------------------------------------------
+// CONTENT OVERRIDES
+//--------------------------------------------------------------
+#content .gform_wrapper {
+ margin-right: 0; // allow for full width of containing element
+ max-width: 100%; // allow for full width of containing element
+
+ // Standard fields
+ input[type='text'],
+ input[type='url'],
+ input[type='email'],
+ input[type='tel'],
+ input[type='number'],
+ input[type='password'],
+ input[type='file'],
+ textarea {
+ padding: $gf-input-padding;
+ width: 100%;
+
+ @include media($tablet-portrait) {
+ width: 49%;
+ }
+ } // input[type="text"], input[type="url"], input[type="email"], input[type="tel"], input[type="number"], input[type="password"], input[type="file"], textarea
+
+ .chosen-search input[type='text'],
+ textarea {
+ width: 100%;
+ } // .chosen-search input[type="text"], textarea
+
+ // Two-column fields
+ .gf_left_half,
+ .gf_right_half {
+ width: 100%;
+
+ // Inputs
+ input[type='text'],
+ input[type='url'],
+ input[type='email'],
+ input[type='tel'],
+ input[type='number'],
+ input[type='password'],
+ input[type='file'] {
+
+ @include media($tablet-portrait) {
+ width: 100%;
+ }
+ } // input[type="text"], input[type="url"], input[type="email"], input[type="tel"], input[type="number"], input[type="password"], input[type="file"]
+
+ @include media($tablet-portrait) {
+ width: 49%;
+ }
+ } // .gf_left_half, .gf_right_half
+
+ // Target just left column on two-column row
+ .gf_left_half {
+
+ @include media($tablet-portrait) {
+ margin-right: 2%;
+ }
+ } // .gf_left_half
+
+ // Advanced fields
+ // https://www.gravityhelp.com/documentation/article/css-targeting-examples/#advanced-fields
+ .ginput_complex {
+
+ .name_first input[type='text'],
+ .name_last input[type='text'] {
+ width: 100%;
+ } // .name_first input[type="text"], .name_last input[type="text"]
+ } // .ginput_complex
+} // #content .gform_wrapper
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/plugins/_jetpack.scss b/web/wp-content/themes/dctx-v2/assets/sass/plugins/_jetpack.scss
new file mode 100644
index 00000000..716fd54a
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/plugins/_jetpack.scss
@@ -0,0 +1,14 @@
+//--------------------------------------------------------------
+// Infinite scroll
+//--------------------------------------------------------------
+
+// Globally hidden elements when Infinite Scroll is supported and in use.
+.infinite-scroll .posts-navigation, // Older / Newer Posts Navigation (always hidden)
+.infinite-scroll.neverending .site-footer { // Theme Footer (when set to scrolling)
+ display: none;
+} // .infinite-scroll .posts-navigation, .infinite-scroll.neverending .site-footer
+
+// When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before.
+.infinity-end.neverending .site-footer {
+ display: block;
+} // .infinity-end.neverending .site-footer
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/plugins/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/plugins/index.scss
new file mode 100644
index 00000000..1c7f0245
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/plugins/index.scss
@@ -0,0 +1,6 @@
+//--------------------------------------------------------------
+// Plugins overrides.
+//--------------------------------------------------------------
+
+@import 'gravity-forms';
+@import 'jetpack';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/structure/_layout.scss b/web/wp-content/themes/dctx-v2/assets/sass/structure/_layout.scss
new file mode 100644
index 00000000..989ec929
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/structure/_layout.scss
@@ -0,0 +1,128 @@
+//--------------------------------------------------------------
+// Base Layout
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Full-width Helper
+//-----------------------------------------
+.site-main {
+ @include margin(null null $gutter * 2 null);
+
+ width: 100%;
+
+ &.acf-content-blocks {
+ @include margin(0 null);
+ } // &.acf-content-blocks
+
+ // Styles internal elements to max-width unless it's full-width.
+ > *:not(.full-width) {
+ // @include margin($gutter * 2 auto);
+
+ max-width: $max-width;
+
+ &.container-width {
+ @include margin(0 auto);
+ } // &.container-width
+ } // > *:not(.full-width)
+
+ // Post elements.
+ .hentry {
+ @include margin(0 auto $space * 2);
+
+ max-width: $max-width;
+
+ &:last-of-type {
+ margin-bottom: 0;
+ } // &:last-child
+ } // .hentry
+
+ // Full-screen elements. Ignores sidebar issues.
+ .full-width:not(.content-block) {
+ @include full-width;
+ } // .full-width
+} // .site-main
+
+//-----------------------------------------
+// Bound Container at $container width
+//-----------------------------------------
+.container {
+ @include margin(null auto);
+ @include padding(null $gutter);
+
+ max-width: $max-width;
+ position: relative;
+
+ @include media($container-offset) {
+ @include padding(0);
+ }
+
+ .alignfull & {
+ padding: 0;
+
+ @include media($tablet-landscape) {
+ @include padding(rem(32) rem(30));
+ }
+ }
+} // .container
+
+// Adjusts padding for non-full-width content blocks with backgrounds.
+.content-block.has-background {
+ .container {
+ @include media($container-offset) {
+ padding-left: $gutter;
+ padding-right: $gutter;
+ }
+ }
+}
+
+//-----------------------------------------
+// Site Layout Wrapper and Grid Elements
+// and Grid Layout Wrapper
+//-----------------------------------------
+.site-wrapper,
+.display-flex {
+ display: flex;
+ flex: 0 0 100%;
+ flex-flow: row wrap;
+ width: 100%; // For IE11.
+
+ &.center {
+ justify-content: center;
+ } // .display-flex.center
+
+ &.end {
+ justify-content: flex-end;
+ } // .display-flex.end
+
+} // .site-wrapper, .display-flex
+
+
+//-----------------------------------------
+// Site Article
+// Flex
+//-----------------------------------------
+
+article {
+ &.display-flex {
+ display: inherit;
+
+ @include media($desktop) {
+ display: flex;
+ justify-content: space-between;
+ }
+
+ .header-wrap {
+ margin-left: auto;
+ margin-right: auto;
+
+ @include media($desktop) {
+ margin-left: initial;
+ margin-right: initial;
+ }
+ }
+
+ .entry-header {
+ max-width: 100%;
+ }
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/structure/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/structure/index.scss
new file mode 100644
index 00000000..3b04fbeb
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/structure/index.scss
@@ -0,0 +1,5 @@
+//--------------------------------------------------------------
+// Layout Styles
+//--------------------------------------------------------------
+
+@import 'layout';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/style.scss b/web/wp-content/themes/dctx-v2/assets/sass/style.scss
new file mode 100644
index 00000000..03f22355
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/style.scss
@@ -0,0 +1,59 @@
+/*
+Theme Name: dctx
+Theme URI: https://www.dctx.ph/
+Author: JC Palmes
+Author URI: https://khleomix.com/
+Description: Custom theme for DCTx
+Version: 1.0.0
+License: GNU General Public License v2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+Text Domain: dctx
+Tags: custom
+
+This theme, like WordPress, is licensed under the GPL.
+
+Based on Underscores http://underscores.me/, (C) 2012-2017 Automattic, Inc.
+*/
+
+//-----------------------------------------
+// Extras
+//-----------------------------------------
+@import 'vendor/sanitize/sanitize';
+
+//-----------------------------------------
+// Utilities
+//-----------------------------------------
+
+// Helper functions.
+@import 'utilities/functions/index';
+
+// Mixins.
+@import 'utilities/mixins/index';
+
+// Global variables.
+@import 'utilities/variables/index';
+
+// Quick Helpers.
+@import 'utilities/helpers/index';
+
+//-----------------------------------------
+// Theme Styles
+//-----------------------------------------
+
+// Global elements.
+@import 'base/index';
+
+// Layout.
+@import 'structure/index';
+
+// Modules.
+@import 'modules/index';
+
+// Plugin overrides.
+@import 'plugins/index';
+
+// Views/Pages.
+@import 'views/index';
+
+// WP Widgets.
+@import 'widgets/index';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_compact-shorthand.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_compact-shorthand.scss
new file mode 100644
index 00000000..6e086ee8
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_compact-shorthand.scss
@@ -0,0 +1,54 @@
+//--------------------------------------------------------------
+// Compact Shorthand
+//--------------------------------------------------------------
+
+// scss-lint:disable ElsePlacement
+
+/// Transforms shorthand to its shortest possible form.
+///
+/// @argument {list} $values
+/// List of directional values.
+///
+/// @example scss
+/// $values: _compact-shorthand(rem(10) rem(20) rem(10) rem(20));
+///
+/// // Output
+/// $values: 10px 20px;
+///
+/// @return {list}
+///
+/// @access private
+
+@function _compact-shorthand($values) {
+ $output: null;
+
+ $a: nth($values, 1);
+ $b: if(length($values) < 2, $a, nth($values, 2));
+ $c: if(length($values) < 3, $a, nth($values, 3));
+ $d: if(length($values) < 2, $a, nth($values, if(length($values) < 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;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_line-height.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_line-height.scss
new file mode 100644
index 00000000..a7662da5
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_line-height.scss
@@ -0,0 +1,26 @@
+//--------------------------------------------------------------
+// LINE HEIGHT
+//--------------------------------------------------------------
+
+////
+/// @group functions
+/// @author Jo Murgel
+////
+
+/// Calculates a unitless line-height.
+///
+/// @param {int} $line-height - The desired line-height.
+/// @param {int} $font-size [16px] - The font-size used to calculate the line-height.
+
+@function lh($line-height, $font-size: $base-context) {
+
+ @if not unitless($line-height) {
+ $line-height: strip-units($line-height);
+ }
+
+ @if not unitless($font-size) {
+ $font-size: strip-units($font-size);
+ }
+
+ @return $line-height / $font-size;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_reverse-list.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_reverse-list.scss
new file mode 100644
index 00000000..f855d7ef
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_reverse-list.scss
@@ -0,0 +1,24 @@
+// ----------------------------------------------------------------------
+// Reverse List
+// ----------------------------------------------------------------------
+
+////
+/// @group functions
+/// @author Aubrey Portwood
+////
+
+/// Reverses a Sass map's order. For use with the z-index mixin.
+
+@function reverse-list($list, $recursive: false) {
+ $result: ();
+
+ @for $i from length($list) * -1 through -1 {
+ @if type-of(nth($list, abs($i))) == list and $recursive {
+ $result: append($result, reverse-list(nth($list, abs($i)), $recursive));
+ } @else {
+ $result: append($result, nth($list, abs($i)));
+ }
+ }
+
+ @return $result;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_strip-units.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_strip-units.scss
new file mode 100644
index 00000000..a0a02dea
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_strip-units.scss
@@ -0,0 +1,20 @@
+//--------------------------------------------------------------
+// Strip Units
+//--------------------------------------------------------------
+
+/// 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/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_unpack-shorthand.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_unpack-shorthand.scss
new file mode 100644
index 00000000..173fd4fb
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/_unpack-shorthand.scss
@@ -0,0 +1,31 @@
+//--------------------------------------------------------------
+// Unpack Shorthand
+//--------------------------------------------------------------
+
+/// Transforms shorthand that can range from 1-to-4 values to be 4 values.
+///
+/// @argument {list} $shorthand
+///
+/// @example scss
+/// .element {
+/// margin: _unpack-shorthand(1em 2em);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin: 1em 2em 1em 2em;
+/// }
+///
+/// @access private
+
+@function _unpack-shorthand($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/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/index.scss
new file mode 100644
index 00000000..b81a697f
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/index.scss
@@ -0,0 +1,17 @@
+//--------------------------------------------------------------
+// Utility Functions.
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Validators
+//-----------------------------------------
+@import 'validators/index';
+
+//-----------------------------------------
+// Functions
+//-----------------------------------------
+@import 'compact-shorthand';
+@import 'line-height';
+@import 'reverse-list';
+@import 'strip-units';
+@import 'unpack-shorthand';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_contains-falsy.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_contains-falsy.scss
new file mode 100644
index 00000000..ab2098c4
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_contains-falsy.scss
@@ -0,0 +1,23 @@
+//--------------------------------------------------------------
+// Contains Falsy
+//--------------------------------------------------------------
+
+/// Checks if a list does not contain any values.
+///
+/// @argument {list} $list
+/// The list to check against.
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _contains-falsy($list) {
+
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_contains.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_contains.scss
new file mode 100644
index 00000000..40a07649
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_contains.scss
@@ -0,0 +1,28 @@
+//--------------------------------------------------------------
+// Contains
+//--------------------------------------------------------------
+
+/// Checks if a list contains a value(s).
+///
+/// @argument {list} $list
+/// The list to check against.
+///
+/// @argument {list} $values
+/// A single value or list of values to check for.
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _contains(
+ $list,
+ $values...
+) {
+ @each $value in $values {
+ @if type-of(index($list, $value)) != 'number' {
+ @return false;
+ }
+ }
+
+ @return true;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_is-length.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_is-length.scss
new file mode 100644
index 00000000..39893c24
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_is-length.scss
@@ -0,0 +1,17 @@
+//--------------------------------------------------------------
+// Is Length Mixin
+//--------------------------------------------------------------
+
+/// Checks for a valid CSS length.
+///
+/// @argument {string} $value
+///
+/// @return {boolean}
+///
+/// @access private
+
+@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/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_is-size.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_is-size.scss
new file mode 100644
index 00000000..c97ca638
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/_is-size.scss
@@ -0,0 +1,20 @@
+//--------------------------------------------------------------
+// Is Size Validator
+//--------------------------------------------------------------
+
+/// Checks for a valid CSS size.
+///
+/// @argument {string} $value
+///
+/// @return {boolean}
+///
+/// @require {function} _contains
+///
+/// @require {function} _is-length
+///
+/// @access private
+
+@function _is-size($value) {
+ @return _is-length($value)
+ or _contains('fill' 'fit-content' 'min-content' 'max-content', $value);
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/index.scss
new file mode 100644
index 00000000..21cae3ee
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/functions/validators/index.scss
@@ -0,0 +1,8 @@
+//--------------------------------------------------------------
+// Validators
+//--------------------------------------------------------------
+
+@import 'contains';
+@import 'contains-falsy';
+@import 'is-length';
+@import 'is-size';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/helpers/_spacing.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/helpers/_spacing.scss
new file mode 100644
index 00000000..3680d12f
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/helpers/_spacing.scss
@@ -0,0 +1,117 @@
+//--------------------------------------------------------------
+// Grid Helpers
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Padding
+//-----------------------------------------
+@for $i from 1 through length($spacing-options) {
+ $number: nth($spacing-options, $i);
+
+ .pad-#{$number} {
+ @include padding(rem($number));
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ @include padding(rem($number / 2));
+ }
+ }
+ } // .pad-#{$option}
+
+ .pad-#{$number}-0 {
+ @include padding(rem($number) null);
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ @include padding(rem($number / 2) null);
+ }
+ }
+ } // .pad-#{$option}-0
+
+ .pad-top-#{$number} {
+ padding-top: rem($number);
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ padding-top: rem($number / 2);
+ }
+ }
+ } // .pad-top-#{$option}
+
+ .pad-bottom-#{$number} {
+ padding-bottom: rem($number);
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ padding-bottom: rem($number / 2);
+ }
+ }
+ } // .pad-bottom-#{$option}
+
+ .pad-0-#{$number} {
+ @include padding(null rem($number));
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ @include padding(null rem($number / 2));
+ }
+ }
+ } // .pad-0-#{$option}
+} // end @for
+
+//-----------------------------------------
+// Margins
+//-----------------------------------------
+@for $i from 1 through length($spacing-options) {
+ $number: nth($spacing-options, $i);
+
+ .margin-#{$number} {
+ @include margin(rem($number));
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ @include margin(rem($number / 2));
+ }
+ }
+ } // .margin-#{$option}
+
+ .margin-#{$number}-0 {
+ @include margin(rem($number) null);
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ @include margin(rem($number / 2) null);
+ }
+ }
+ } // .margin-#{$option}-0
+
+ .margin-top-#{$number} {
+ margin-top: rem($number);
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ margin-top: rem($number / 2);
+ }
+ }
+ } // .margin-top-#{$option}
+
+ .margin-bottom-#{$number} {
+ margin-bottom: rem($number);
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ margin-bottom: rem($number / 2);
+ }
+ }
+ } // .margin-bottom-#{$option}
+
+ .margin-0-#{$number} {
+ @include margin(null rem($number));
+
+ @if $number > 75 {
+ @include media(null, $tablet-portrait) {
+ @include margin(null rem($number / 2));
+ }
+ }
+ } // .margin-0-#{$option}
+} // end @for
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/helpers/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/helpers/index.scss
new file mode 100644
index 00000000..48bba8a1
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/helpers/index.scss
@@ -0,0 +1,5 @@
+//--------------------------------------------------------------
+// Helpers.
+//--------------------------------------------------------------
+
+@import 'spacing';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_color-classes.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_color-classes.scss
new file mode 100644
index 00000000..f892afd8
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_color-classes.scss
@@ -0,0 +1,69 @@
+//--------------------------------------------------------------
+// COLORS CLASSES
+//--------------------------------------------------------------
+
+////
+/// @group mixins
+/// @author Carrie Forde
+////
+
+/// Quickly and easily create color presentational classes. Includes background-color, color, and fill clases.
+///
+/// @param {map} $colors [$theme-colors] - The theme color map.
+///
+/// @example scss - Basic usage.
+/// @include colors($theme-colors);
+///
+/// @example css - Output
+/// .background-blue {
+/// background-color: #00f;
+/// }
+/// .color-blue {
+/// color: #00f;
+/// }
+/// .fill-blue {
+/// fill: #00f;
+/// }
+
+@mixin colors($colors: $theme-colors) {
+ @if type-of($colors) != 'map' {
+ @error 'Sorry, $colors is not a Sass map!';
+ }
+
+ @each $name, $color in $colors {
+ // Create background color classes.
+ .background-#{$name},
+ .has-#{$name}-background-color {
+ background-color: $color;
+ }
+
+ // Create color classes.
+ .color-#{$name},
+ .has-#{$name}-color {
+ color: $color;
+ }
+
+ // Adds colors for gutenberg buttons.
+ .wp-block-button__link.has-text-color.has-#{$name}-color {
+ color: $color;
+ }
+
+ // Create fill classes.
+ .fill-#{$name} {
+ fill: $color;
+ }
+ }
+}
+
+@mixin gradients($gradients: $theme-gradients) {
+ @if type-of($gradients) != 'map' {
+ @error 'Sorry, $gradients is not a Sass map!';
+ }
+
+ @each $name, $gradient in $gradients {
+ // Create background gradient classes.
+ .background-gradient-#{$name} {
+ background: $gradient;
+ }
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_directional-property.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_directional-property.scss
new file mode 100644
index 00000000..c70f10ab
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_directional-property.scss
@@ -0,0 +1,90 @@
+//--------------------------------------------------------------
+// Directional Property Handler
+//--------------------------------------------------------------
+
+// scss-lint:disable SpaceAroundOperator
+
+/// Builds directional properties by parsing CSS shorthand values. For example,
+/// a value of `10px null` will output top and bottom directional properties,
+/// but the `null` skips left and right from being output.
+///
+/// @argument {string} $property
+/// Base property.
+///
+/// @argument {string} $suffix
+/// Suffix to append. Use `null` to omit.
+///
+/// @argument {list} $values
+/// List of values to set for the property.
+///
+/// @example scss
+/// .element {
+/// @include _directional-property(border, width, null 5px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-right-width: 5px;
+/// border-left-width: 5px;
+/// }
+///
+/// @require {function} _compact-shorthand
+///
+/// @require {function} _contains-falsy
+///
+/// @access private
+
+@mixin _directional-property(
+ $property,
+ $suffix,
+ $values
+) {
+ $top: $property + '-top' + if($suffix, '-#{$suffix}', '');
+ $bottom: $property + '-bottom' + if($suffix, '-#{$suffix}', '');
+ $left: $property + '-left' + if($suffix, '-#{$suffix}', '');
+ $right: $property + '-right' + if($suffix, '-#{$suffix}', '');
+ $all: $property + if($suffix, '-#{$suffix}', '');
+
+ $values: _compact-shorthand($values);
+
+ @if _contains-falsy($values) {
+ @if nth($values, 1) {
+ #{$top}: nth($values, 1);
+ }
+
+ @if length($values) == 1 {
+ @if nth($values, 1) {
+ #{$right}: nth($values, 1);
+ }
+ } @else {
+ @if nth($values, 2) {
+ #{$right}: nth($values, 2);
+ }
+ }
+
+ @if length($values) == 2 {
+ @if nth($values, 1) {
+ #{$bottom}: nth($values, 1);
+ }
+ @if nth($values, 2) {
+ #{$left}: nth($values, 2);
+ }
+ } @else if length($values) == 3 {
+ @if nth($values, 3) {
+ #{$bottom}: nth($values, 3);
+ }
+ @if nth($values, 2) {
+ #{$left}: nth($values, 2);
+ }
+ } @else if length($values) == 4 {
+ @if nth($values, 3) {
+ #{$bottom}: nth($values, 3);
+ }
+ @if nth($values, 4) {
+ #{$left}: nth($values, 4);
+ }
+ }
+ } @else {
+ #{$all}: $values;
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_grid.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_grid.scss
new file mode 100644
index 00000000..d1cf510f
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_grid.scss
@@ -0,0 +1,256 @@
+//--------------------------------------------------------------
+// Grid-related mixins
+// Flex grow, shrink, and basis required separate for IE11.
+//--------------------------------------------------------------
+@import '../variables/grid-var';
+
+//-----------------------------------------
+// https://flexgridlite.elliotdahl.com/
+//-----------------------------------------
+
+//-----------------------------------------
+// Full Width
+//-----------------------------------------
+@mixin full-width {
+ max-width: 100%;
+ width: 100%;
+}
+
+// The Flex Grid
+.grid {
+ box-sizing: border-box;
+ display: flex;
+ flex: 0 1 auto;
+ flex-direction: row;
+ flex-wrap: wrap;
+ margin: 0 calc(#{$gutter} * -1);
+
+ // Use this modifier to remove gutters
+ &.grid-nogutter {
+ margin: 0;
+
+ & > .col {
+ padding: 0;
+ }
+ }
+
+ // Modifications to work as expected inside a full-width section.
+ .alignfull & {
+ margin: 0;
+ }
+}
+
+.col {
+ @include margin(null null #{$gutter} null);
+ @include padding(0 #{$gutter});
+
+ box-sizing: border-box;
+ flex: 0 0 auto;
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%;
+ min-width: 0;
+}
+
+.grid-column {
+ flex-direction: column;
+}
+
+
+//-----------------------------------------
+// Half or 50% grid element.
+//-----------------------------------------
+@mixin half {
+
+ @include media($tablet-landscape) {
+ flex-basis: calc(50% - #{rem(25)});
+ flex-grow: 0;
+ flex-shrink: 0;
+ width: calc(50% - #{rem(25)}); // For IE11.
+ }
+
+ &:nth-child(odd) {
+ @include margin(0 0 rem(25) 0);
+
+ @include media($tablet-landscape) {
+ @include margin(0 rem(50) 0 0);
+ }
+ } // &:first-child
+}
+
+//-----------------------------------------
+// Third
+//-----------------------------------------
+@mixin third {
+ @include margin(0 0 rem(25) 0);
+
+ @include media($tablet-landscape) {
+ @include margin(0 rem(50) rem(50) 0);
+
+ flex: 0 0 calc(33.33% - #{rem(33.33)});
+ width: calc(33.33% - #{rem(33.33)}); // For IE11.
+ }
+
+ &:nth-child(3n + 3) {
+ @include margin(0 0 rem(50));
+
+ @include media($tablet-landscape) {
+ @include margin(0 0 rem(50));
+ }
+ } // &:first-child
+}
+
+//-----------------------------------------
+// Quarter
+//-----------------------------------------
+@mixin quarter {
+ @include margin(0 0 rem(25) 0);
+
+ @include media($tablet-landscape) {
+ @include margin(0 rem(50) rem(50) 0);
+
+ flex: 0 0 calc(25% - #{rem(37.5)});
+ width: calc(25% - #{rem(37.5)}); // For IE11.
+ }
+
+ &:nth-child(4n + 4) {
+ @include margin(0 0 rem(50));
+
+ @include media($tablet-landscape) {
+ @include margin(0 0 rem(50));
+ }
+ } // &:first-child
+}
+
+// Column Modifiers //
+// Column Vertical Alignment Classes
+.col-align-top {
+ align-self: flex-start;
+}
+
+.col-align-bottom {
+ align-self: flex-end;
+}
+
+.col-align-middle {
+ align-self: center;
+}
+
+// Column Content Alignment Classes
+.col-top {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+}
+
+.col-bottom {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+}
+
+.col-middle {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+}
+
+//Reordering Columns
+.col-first {
+ order: -1;
+}
+
+.col-last {
+ order: 1;
+}
+
+// Horizontal Grid Alignment
+.grid-start {
+ justify-content: flex-start;
+}
+
+.grid-center {
+ justify-content: center;
+}
+
+.grid-end {
+ justify-content: flex-end;
+}
+
+// Column Distribution
+.grid-around {
+ justify-content: space-around;
+}
+
+.grid-between {
+ justify-content: space-between;
+}
+
+// Reordering Columns
+.grid-reverse {
+ flex-direction: row-reverse;
+}
+
+// Column Sizing Classes //
+// Fixed Column Class
+// Give the column a min-width: ##px
+.col-fixed {
+ flex: initial;
+}
+
+// Can be used with .col-fixed to not collapse on mobile
+// This WILL break a layout if your min-width is wider than the mobile device
+.col-nocollapse {
+ flex: 0;
+}
+
+// Grow Based Columns
+@for $i from 2 through 11 {
+ .col-grow-#{$i} {
+ flex-grow: $i;
+ }
+}
+
+// Percent Based Columns
+@for $i from 1 through 12 {
+
+ // Collapse columns to full width on mobile devices
+ @media only screen and (min-width: $tablet-portrait) {
+ .col-#{$i} {
+ flex-basis: (100% / 12) * $i;
+ max-width: (100% / 12) * $i;
+ }
+ }
+
+ // Use a specific # of columns only on tablet portrait
+ // Don't use .col-md-12 or .col-lg-12 to go full width, just use .col-md or .col-lg
+ @media only screen and (min-width: $tablet-portrait) and (max-width: $tablet-landscape) {
+ .col-md-#{$i} {
+ flex-basis: (100% / 12) * $i;
+ max-width: (100% / 12) * $i;
+ }
+ }
+
+ // Use a specific # of columns only on tablet landscape
+ @media only screen and (min-width: $tablet-landscape) and (max-width: $desktop) {
+ .col-lg-#{$i} {
+ flex-basis: (100% / 12) * $i;
+ max-width: (100% / 12) * $i;
+ }
+ }
+}
+
+// Collapse columns to full width at a specific breakpoint
+@media only screen and (max-width: $tablet-portrait) {
+ .col {
+ flex: 100%;
+ max-width: 100%;
+ }
+}
+
+@media only screen and (max-width: $tablet-landscape) {
+ .col-lg {
+ flex: 100%;
+ max-width: 100%;
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_list-reset.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_list-reset.scss
new file mode 100644
index 00000000..ebe8d21c
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_list-reset.scss
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------
+// List Reset
+// ----------------------------------------------------------------------
+
+////
+/// @group mixins
+/// @author Greg Rickaby
+////
+
+/// Reset all padding and styles on both unordered and ordered lists.
+///
+/// @example scss - Basic Usage Sass
+/// .foo-list {
+/// @include list-reset;
+/// }
+///
+/// @example scss - Basic Usage CSS Output
+/// .foo-list {
+/// clear: both;
+/// content: "";
+/// display: table;
+/// margin: 0;
+/// padding: 0;
+/// list-style: none;
+/// }
+
+@mixin list-reset {
+ @include margin(0);
+ @include padding(0);
+
+ list-style: none;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_margin.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_margin.scss
new file mode 100644
index 00000000..c8618000
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_margin.scss
@@ -0,0 +1,39 @@
+//--------------------------------------------------------------
+// Margin Mixin
+//--------------------------------------------------------------
+
+/// Provides a concise, one-line method for setting `margin` on specific edges
+/// of a box. Use a `null` value to “skip” edges of the box with standard
+/// CSS shorthand.
+///
+/// @argument {list} $values
+/// List of margin values; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include margin(null auto);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin-left: auto;
+/// margin-right: auto;
+/// }
+///
+/// @example scss
+/// .element {
+/// @include margin(10px 3em 20vh null);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin-bottom: 20vh;
+/// margin-right: 3em;
+/// margin-top: 10px;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin margin($values) {
+ @include _directional-property(margin, null, $values);
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_media.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_media.scss
new file mode 100644
index 00000000..893202a6
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_media.scss
@@ -0,0 +1,87 @@
+//--------------------------------------------------------------
+// Media Query Mixin
+//--------------------------------------------------------------
+
+////
+/// @group mixins
+/// @author jomurgel
+////
+
+/// Easy mixin for media queries
+///
+/// @param {string} $min min width for breakpoint. Can be null.
+/// @param {string} $max max width if applicable. Default null.
+/// @param {string} $media default 'screen'.
+/// @param {string} $orientation. default null. portrait, landscape, etc.
+///
+/// @example scss - Usage.
+/// @mixin media($tablet-portrait) {
+/// .test {}
+/// }
+///
+/// @example css - Output
+/// @media screen and (min-width: 600px) {
+/// .test {}
+/// }
+/// @example scss - Usage 2.
+/// @mixin media(null, $tablet-portrait) {
+/// .test {}
+/// }
+///
+/// @example css - Output 2
+/// @media screen and (max-width: 600px) {
+/// .test {}
+/// }
+/// @example scss - Usage 3.
+/// @mixin media($desktop, $tablet-portrait, all, portrait) {
+/// .test {}
+/// }
+///
+/// @example css - Output 3
+/// @media all and (min-width: 1200px) and (max-width: 600px) and (orientation: portrait) {
+/// .test {}
+/// }
+
+@mixin media($min, $max: null, $media: 'screen', $orientation: null) {
+
+ @if $orientation == null {
+
+ @if $max == null and $min != null {
+ @media #{$media} and (min-width: #{$min}) {
+ @content;
+ }
+ } @else if $min == null and $max != null {
+ @media #{$media} and (max-width: #{($max - 1)}) {
+ @content;
+ }
+ } @else if $min == null and $max == null {
+ @media #{$media} {
+ @content;
+ }
+ } @else {
+ @media #{$media} and (min-width: #{$min}) and (max-width: #{($max - 1)}) {
+ @content;
+ }
+ }
+
+ } @else {
+
+ @if $max == null and $min != null {
+ @media #{$media} and (min-width: #{$min}) and (orientation: #{$orientation}) {
+ @content;
+ }
+ } @else if $min == null and $max != null {
+ @media #{$media} and (max-width: #{($max - 1)}) and (orientation: #{$orientation}) {
+ @content;
+ }
+ } @else if $min == null and $max == null and $orientation == null {
+ @media #{$media} {
+ @content;
+ }
+ } @else {
+ @media #{$media} and (min-width: #{$min}) and (max-width: #{($max - 1)}) and (orientation: #{$orientation}) {
+ @content;
+ }
+ }
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_padding.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_padding.scss
new file mode 100644
index 00000000..7b000a1d
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_padding.scss
@@ -0,0 +1,38 @@
+//--------------------------------------------------------------
+// Padding Mixin
+//--------------------------------------------------------------
+
+/// Provides a concise method for targeting `padding` on specific sides of a
+/// box. Use a `null` value to “skip” a side.
+///
+/// @argument {list} $values
+/// List of padding values; accepts CSS shorthand.
+///
+/// @example scss
+/// .element-one {
+/// @include padding(null 1rem);
+/// }
+///
+/// // CSS Output
+/// .element-one {
+/// padding-left: 1rem;
+/// padding-right: 1rem;
+/// }
+///
+/// @example scss
+/// .element-two {
+/// @include padding(10vh null 10px 5%);
+/// }
+///
+/// // CSS Output
+/// .element-two {
+/// padding-bottom: rem(10);
+/// padding-left: 5%;
+/// padding-top: 10vh;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin padding($values) {
+ @include _directional-property(padding, null, $values);
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_position.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_position.scss
new file mode 100644
index 00000000..69a4ec03
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_position.scss
@@ -0,0 +1,64 @@
+//--------------------------------------------------------------
+// Position
+//--------------------------------------------------------------
+
+/// Provides a concise, one-line method for setting an element’s positioning
+/// properties: `position`, `top`, `right`, `bottom` and `left`. Use a `null`
+/// value to “skip” an edge of the box.
+///
+/// @argument {string} $position
+/// A CSS position value.
+///
+/// @argument {list} $box-edge-values
+/// List of lengths; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include position(relative, 0 null null 10em);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// left: 10em;
+/// position: relative;
+/// top: 0;
+/// }
+///
+/// @example scss
+/// .element {
+/// @include position(absolute, 0);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// position: absolute;
+/// top: 0;
+/// right: 0;
+/// bottom: 0;
+/// left: 0;
+/// }
+///
+/// @require {function} _is-length
+///
+/// @require {function} _unpack-shorthand
+
+@mixin position(
+ $position,
+ $box-edge-values
+) {
+ $box-edge-values: _unpack-shorthand($box-edge-values);
+ $offsets: (
+ top: nth($box-edge-values, 1),
+ right: nth($box-edge-values, 2),
+ bottom: nth($box-edge-values, 3),
+ left: nth($box-edge-values, 4),
+ );
+
+ position: $position;
+
+ @each $offset, $value in $offsets {
+ @if _is-length($value) {
+ #{$offset}: $value;
+ }
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_pxtoem.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_pxtoem.scss
new file mode 100644
index 00000000..3d8f6e04
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_pxtoem.scss
@@ -0,0 +1,39 @@
+//--------------------------------------------------------------
+// PX to EM
+//--------------------------------------------------------------
+
+/// 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)
+///
+/// @example scss
+/// .element-one {
+/// font-size: em(16);
+/// }
+///
+/// // CSS Output
+/// .element-one {
+/// font-size: 1em;
+/// }
+///
+/// @example scss
+/// .element-two {
+/// font-size: em(32, 14);
+/// }
+///
+/// // CSS Output
+/// .element-two {
+/// font-size: 2.286em;
+/// }
+
+@function em($pxval, $base: 16) {
+
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+
+ @return ($pxval / $base) * 1em;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_pxtorem.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_pxtorem.scss
new file mode 100644
index 00000000..e5df4d9a
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_pxtorem.scss
@@ -0,0 +1,40 @@
+//--------------------------------------------------------------
+// PX to Rem
+//--------------------------------------------------------------
+
+/// Convert pixels to rems
+/// eg. for a relational value of 12px write rem(12)
+/// Assumes $em-base is the font-size of
+///
+/// @example scss
+/// .element-one {
+/// font-size: rem(16);
+/// }
+///
+/// // CSS Output
+/// .element-one {
+/// font-size: 1rem;
+/// }
+///
+/// @example scss
+/// .element-two {
+/// font-size: rem(32, 14);
+/// }
+///
+/// // CSS Output
+/// .element-two {
+/// font-size: 2.286rem;
+/// }
+
+@function rem($pxval, $base: 16) {
+
+ @if not unitless($pxval) {
+ $pxval: strip-units($pxval);
+ }
+
+ @if not unitless($base) {
+ $base: strip-units($base);
+ }
+
+ @return ($pxval / $base) * 1rem;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_size.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_size.scss
new file mode 100644
index 00000000..1f805f6b
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_size.scss
@@ -0,0 +1,50 @@
+//--------------------------------------------------------------
+// Size Mixin
+//--------------------------------------------------------------
+
+/// Sets the `width` and `height` of the element in one statement.
+///
+/// @argument {number (with unit) | string} $width
+///
+/// @argument {number (with unit) | string} $height [$width]
+///
+/// @example scss
+/// .first-element {
+/// @include size(2em);
+/// }
+///
+/// // CSS Output
+/// .first-element {
+/// width: 2em;
+/// height: 2em;
+/// }
+///
+/// @example scss
+/// .second-element {
+/// @include size(auto, 10em);
+/// }
+///
+/// // CSS Output
+/// .second-element {
+/// width: auto;
+/// height: 10em;
+/// }
+///
+/// @require {function} _is-size
+
+@mixin size(
+ $width,
+ $height: $width
+) {
+ @if _is-size($height) {
+ height: $height;
+ } @else {
+ @error '`#{$height}` is not a valid length for the `$height` argument ' + 'in the `size` mixin.';
+ }
+
+ @if _is-size($width) {
+ width: $width;
+ } @else {
+ @error '`#{$width}` is not a valid length for the `$width` argument ' + 'in the `size` mixin.';
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_sprites.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_sprites.scss
new file mode 100644
index 00000000..8d1bbad4
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/_sprites.scss
@@ -0,0 +1,67 @@
+// --------------------------------------------------------------
+// SCSS variables are information about icon's compiled state,
+// stored under its original file name
+
+// .icon-home {
+// width: $icon-home-width;
+// }
+
+// The large array-like variables contain all information about a single icon
+// $icon-home: x y offset_x offset_y width height total_width total_height image_path;
+
+// At the bottom of this section, we provide information about the spritesheet itself $spritesheet:
+// width height image $spritesheet-sprites;
+// --------------------------------------------------------------
+
+$spritesheet-width: 0;
+$spritesheet-height: 0;
+$spritesheet-image: 'assets/images/sprites.png';
+$spritesheet-sprites: ();
+$spritesheet: (0, 0, 'assets/images/sprites.png', $spritesheet-sprites, );
+
+// The provided mixins are intended to be used with the array-like variables
+// .icon-home {
+// @include sprite-width($icon-home);
+// }
+
+// .icon-email {
+// @include sprite($icon-email);
+// }
+
+@mixin sprite-width($sprite) {
+ width: nth($sprite, 5);
+}
+
+@mixin sprite-height($sprite) {
+ height: nth($sprite, 6);
+}
+
+@mixin sprite-position($sprite) {
+ $sprite-offset-x: nth($sprite, 3);
+ $sprite-offset-y: nth($sprite, 4);
+ background-position: $sprite-offset-x $sprite-offset-y;
+}
+
+@mixin sprite-image($sprite) {
+ $sprite-image: nth($sprite, 9);
+ background-image: url('#{$sprite-image}');
+}
+
+@mixin sprite($sprite) {
+ @include sprite-image($sprite);
+ @include sprite-position($sprite);
+ @include sprite-width($sprite);
+ @include sprite-height($sprite);
+}
+
+// The `sprites` mixin generates identical output to the CSS template but can be overridden inside of SCSS
+// @include sprites($spritesheet-sprites);
+@mixin sprites($sprites) {
+ @each $sprite in $sprites {
+ $sprite-name: nth($sprite, 10);
+
+ .#{$sprite-name} {
+ @include sprite($sprite);
+ }
+ }
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/index.scss
new file mode 100644
index 00000000..ad71bc09
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/mixins/index.scss
@@ -0,0 +1,17 @@
+//--------------------------------------------------------------
+// Mixins
+//--------------------------------------------------------------
+
+@import 'color-classes';
+@import 'directional-property';
+@import 'list-reset';
+@import 'margin';
+@import 'media';
+@import 'padding';
+@import 'position';
+@import 'pxtoem';
+@import 'pxtorem';
+@import 'size';
+@import 'sprites';
+
+@import 'grid';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_color-var.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_color-var.scss
new file mode 100644
index 00000000..a0b09f7f
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_color-var.scss
@@ -0,0 +1,339 @@
+//--------------------------------------------------------------
+// COLOR VARIABLES
+// - Primary Colors
+// - Grayscale Colors
+// - Social Media Colors
+// ELEMENTS & SKINNING
+// - General
+// - Accessibility
+// - Links
+// - Forms
+// - Buttons
+// - Tables
+// - Modals
+// - Icons
+// - Comments
+// - WP/Gutenberg Blocks
+// - Navigation
+// - Scaffolding
+// - Sass Map for Theme Colors
+// - Sass Map for Social Media Colors
+//--------------------------------------------------------------
+
+////
+/// @group variables
+/// @author WebDevStudios
+////
+
+// sass-lint:disable no-color-keywords
+
+//--------------------------------------------------------------
+// COLOR VARIABLES
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Primary Colors
+//-----------------------------------------
+$color-black: #000;
+$color-blue: #20739a;
+$color-light-yellow: #fff9c0;
+$color-white: #fff;
+
+//-----------------------------------------
+// Theme Colors
+//-----------------------------------------
+$color-tango: #ea641d;
+$color-corn: #e8ca04;
+$color-limeaid: #71b406;
+$color-electric-violet: #7f08ff;
+$color-gigas: #5641a5;
+$color-robins-egg: #00bcd4;
+$color-desert-storm: #f1f2f0;
+
+//-----------------------------------------
+// Grayscale Colors
+//-----------------------------------------
+$color-alto: #ddd;
+$color-cod-gray: #111;
+$color-dove-gray: #666;
+$color-gallery: #eee;
+$color-gray-alt: #929292;
+$color-gray: #808080;
+$color-mineshaft: #2a2a2a;
+$color-silver-chalice: #aaa;
+$color-silver: #ccc;
+$color-tundora: #454545;
+$color-whitesmoke: #f1f1f1;
+
+//-----------------------------------------
+// Social Media Colors
+//-----------------------------------------
+$color-facebook: #3b5998;
+$color-instagram: #517fa4;
+$color-linkedin: #007bb6;
+$color-pinterest: #cb2027;
+$color-rss: #f90;
+$color-twitter: #00aced;
+$color-youtube: #b00;
+
+
+//--------------------------------------------------------------
+// ELEMENTS & SKINNING
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// General
+//-----------------------------------------
+
+/// Background color.
+$color-background-body: $color-white;
+
+/// Main text color.
+$color-text-main: $color-mineshaft;
+
+/// Pre Background color.
+$color-background-pre: $color-whitesmoke;
+
+/// Pre Border color.
+$color-border-pre: $color-silver;
+
+/// Pre text color.
+$color-text-pre: $color-gray;
+
+/// Code background color.
+$color-background-code: $color-alto;
+
+/// Horizontal Rule.
+$color-background-hr: $color-silver;
+
+/// Abbreviations.
+$color-border-abbr: $color-dove-gray;
+
+/// Box shadows.
+$color-box-shadow: rgba($color-black, 0.5);
+
+/// Overlays.
+$color-overlay: rgba($color-black, 0.3);
+
+
+
+//-----------------------------------------
+// Linear Gradients
+//-----------------------------------------
+$gradient-purple: linear-gradient(45deg, $color-electric-violet 0%, $color-gigas 100%);
+
+
+//-----------------------------------------
+// Accessibility
+//-----------------------------------------
+
+/// Screen reader background color.
+$color-background-screen-reader: $color-whitesmoke;
+
+/// Screen reader text color.
+$color-text-screen-reader: $color-blue;
+
+
+//-----------------------------------------
+// Links
+//-----------------------------------------
+
+/// Links.
+$color-link: $color-black;
+
+/// Visited Links.
+$color-link-visited: $color-black;
+
+/// Hovered Links.
+$color-link-hover: $color-robins-egg;
+
+/// Focus LInks.
+$color-link-focus: $color-robins-egg;
+
+
+//-----------------------------------------
+// Forms
+//-----------------------------------------
+
+/// Button background.
+$color-background-button: $color-dove-gray;
+
+/// Button background on hover.
+$color-background-button-hover: $color-mineshaft;
+
+/// Button text.
+$color-text-button: $color-white;
+
+/// Input border.
+$color-border-input: $color-silver;
+
+/// Input focused color.
+$color-focus-text-input: $color-cod-gray;
+
+/// Input text.
+$color-text-input: $color-dove-gray;
+
+
+//-----------------------------------------
+// Buttons
+//-----------------------------------------
+
+/// CTA Link Color.
+$color-cta-link: $color-white;
+
+
+//-----------------------------------------
+// Tables
+//-----------------------------------------
+
+/// Table borders.
+$color-border-table: $color-silver;
+
+
+//-----------------------------------------
+// Modals
+//-----------------------------------------
+
+/// Modal Content Background.
+$color-background-modal: $color-white;
+
+/// Modal Close Background.
+$color-background-modal-close: $color-black;
+
+/// Modal Close Colors.
+$color-modal-close: $color-white;
+
+
+//-----------------------------------------
+// Icons
+//-----------------------------------------
+
+/// Close Icon Background.
+$color-background-icon-close: $color-cod-gray;
+
+/// Down Arrow Background Color.
+$color-background-down-arrow: $color-link;
+
+
+//-----------------------------------------
+// Comments
+//-----------------------------------------
+
+/// Comment border.
+$color-border-comment: $color-silver;
+
+/// Comment focus border.
+$color-border-comment-focus: $color-mineshaft;
+
+/// Comment even background.
+$color-background-even: $color-gallery;
+
+/// Comment odd background.
+$color-background-odd: $color-whitesmoke;
+
+/// Comment response background.
+$color-comment-response: $color-white;
+
+/// Comment meta links.
+$color-meta-links: $color-tundora;
+
+/// Comment post author background.
+$color-background-author: $color-light-yellow;
+
+
+//-----------------------------------------
+// WP/Gutenberg Blocks
+//-----------------------------------------
+
+/// Block button background.
+$color-background-block-button: $color-mineshaft;
+
+/// BLock pullquote.
+$color-border-block: $color-silver;
+
+
+//-----------------------------------------
+// Navigation Variables
+//-----------------------------------------
+
+/// Mobile menu link.
+$color-mobile-menu-link: $color-link;
+$color-mobile-menu-link-hover: $color-robins-egg;
+
+/// Hamburger background.
+$color-background-hamburger: $color-black;
+
+/// Off-canvas Container Background.
+$color-background-off-canvas: $color-desert-storm;
+
+/// Off-canvas Screen Background.
+$color-background-off-canvas-screen: $color-desert-storm;
+
+/// Submenu Background.
+$color-background-submenu: $color-desert-storm;
+
+
+//-----------------------------------------
+// Scaffolding
+//-----------------------------------------
+
+/// Scaffolding header border.
+$color-border-scaffolding: $color-alto;
+
+/// Scaffolding swatch border.
+$color-border-scaffolding-swatch: $color-alto;
+
+/// Scaffolding color.
+$color-scaffolding: $color-alto;
+
+/// Scaffolding background color.
+$color-background-scaffolding: $color-white;
+
+//-----------------------------------------
+// Sass Map for Theme Colors
+//-----------------------------------------
+
+/// Sass map used for creating color presentational classes.
+$theme-colors: (
+ alto: $color-alto,
+ black: $color-black,
+ blue: $color-blue,
+ cod-gray: $color-cod-gray,
+ dove-gray: $color-dove-gray,
+ gallery: $color-gallery,
+ gray-alt: $color-gray-alt,
+ gray: $color-gray,
+ light-yellow: $color-light-yellow,
+ mineshaft: $color-mineshaft,
+ silver-chalice: $color-silver-chalice,
+ silver: $color-silver,
+ tundora: $color-tundora,
+ white: $color-white,
+ whitesmoke: $color-whitesmoke,
+);
+
+$theme-gradients: (
+ purple: $gradient-purple,
+);
+
+//-----------------------------------------
+// Sass Map for Social Media Colors
+//-----------------------------------------
+
+/// Social media `$social-colors()` map
+$social-colors: (
+ facebook-square: $color-facebook,
+ facebook: $color-facebook,
+ instagram-square: $color-instagram,
+ instagram: $color-instagram,
+ linkedin-square: $color-linkedin,
+ linkedin: $color-linkedin,
+ pinterest-square: $color-pinterest,
+ pinterest: $color-pinterest,
+ rss-square: $color-rss,
+ rss: $color-rss,
+ twitter-square: $color-twitter,
+ twitter: $color-twitter,
+ youtube-square: $color-youtube,
+ youtube: $color-youtube,
+);
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_grid-var.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_grid-var.scss
new file mode 100644
index 00000000..13b7ce3f
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_grid-var.scss
@@ -0,0 +1,55 @@
+//--------------------------------------------------------------
+// Media Query Breakpoints and Grid Options
+//--------------------------------------------------------------
+
+////
+/// @group variables
+/// @author WebDevStudios
+////
+
+//-----------------------------------------
+// Grid Values – Used for general Sass/styling. Note the rem values!
+//-----------------------------------------
+$max-width: rem(1180);
+
+///-----------------------------------------
+// Breakpoints – Used for Media Query Mixins only. Note the px values!
+//-----------------------------------------
+
+/// Standard Desktops and Larger Laptops.
+$desktop: 1200px;
+
+/// Container width.
+$container: 1180px;
+
+/// Container width, $contaner plus $gutter padding.
+$container-offset: 1220px;
+
+/// Smaller Desktops and Standard iPad Tablet.
+$tablet-landscape: 1024px;
+
+/// Breakpoint for WP Admin Bar.
+$wp-admin-bar: 783px;
+
+/// Smaller Tablets and Standard iPad Portrait.
+$tablet-portrait: 768px;
+
+/// Phones Smaller Than 500px in Width.
+$phone: 360px;
+
+//-----------------------------------------
+// Numeric values for padding/margin helper classes.
+//-----------------------------------------
+$spacing-options: 15, 20, 30, 35, 40, 50, 100;
+
+//-----------------------------------------
+// Default width of the gutters
+// Used for padding on mobile.
+//-----------------------------------------
+$gutter: rem(15);
+
+//-----------------------------------------
+// Spacer
+// Utilized anywhere spacing is set.
+//-----------------------------------------
+$space: rem(24);
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_modal-var.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_modal-var.scss
new file mode 100644
index 00000000..abf28f85
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_modal-var.scss
@@ -0,0 +1,19 @@
+//--------------------------------------------------------------
+// Box Model
+//--------------------------------------------------------------
+
+////
+/// @group variables
+/// @author WebDevStudios
+////
+
+// Make sure all elements use `box-sizing: border-box;` by default.
+* {
+ box-sizing: border-box;
+}
+
+/// Define thin border radius.
+$border-radius-thin: rem(3);
+
+/// Define medium border radius.
+$border-radius-medium: rem(6);
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_transition-var.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_transition-var.scss
new file mode 100644
index 00000000..837cff12
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_transition-var.scss
@@ -0,0 +1,64 @@
+//--------------------------------------------------------------
+// TRANSITIONS
+//--------------------------------------------------------------
+
+////
+/// @group variables
+/// @author WebDevStudios
+////
+
+/// Speed.
+$speed: 0.3s;
+$ease: ease-in-out;
+
+/// Transition types.
+$bg-color: background-color $speed;
+$bg-image: background-image $speed;
+$bg-position: background-position $speed;
+$bg-size: background-size $speed;
+$border: border $speed;
+$color: color $speed;
+$height: height $speed;
+$max-height: max-height $speed;
+$opacity: opacity $speed;
+$transform: transform $speed;
+$visibility: visiblity $speed;
+
+/// Color transition
+$transition-color: $color $ease;
+
+/// Accordion transition
+$trasition-accordion: $visibility, $max-height, $opacity;
+
+/// Opacity transition.
+$transition-opacity: $opacity $ease;
+
+/// Border transition
+$transition-border: $border $ease;
+
+/// All transitions. Use only in emergencies!
+$transition-all: all $speed $ease;
+
+/// Transform height.
+$transition-height: $height $ease, $max-height $ease;
+
+/// Transform transitions.
+$transition-transform: $transform $ease;
+
+/// Transform Hamburger
+$transition-hamburger: $transform $ease, $bg-color $ease;
+
+/// Transform Visibility
+$transition-visibility: $visibility $ease;
+
+/// Transform Background Color
+$transition-bg-color: $bg-color $ease;
+
+/// Transform Background Image
+$transition-bg-image: $bg-image $ease;
+
+/// Transform Background Position
+$transition-bg-position: $bg-position $ease;
+
+/// Transform Background Size
+$transition-bg-size: $bg-size $ease;
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_type-var.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_type-var.scss
new file mode 100644
index 00000000..5be38b6b
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_type-var.scss
@@ -0,0 +1,26 @@
+//--------------------------------------------------------------
+// Typography
+//--------------------------------------------------------------
+
+////
+/// @group variables
+/// @author WebDevStudios
+////
+
+/// Define sans font.
+$font-sans: 'Work Sans', sans-serif;
+
+/// Define serif font.
+$font-serif: Roboto, Georgia, Times, 'Times New Roman', serif;
+
+/// Define monospace font.
+$font-code: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace;
+
+/// Define pre font.
+$font-pre: 'Courier 10 Pitch', Courier, monospace;
+
+/// Define global line-height.
+$line-height-body: lh(26, 16);
+
+/// Define line-height for ``.
+$line-height-pre: $line-height-body;
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_z-index-var.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_z-index-var.scss
new file mode 100644
index 00000000..9bacc7b2
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/_z-index-var.scss
@@ -0,0 +1,27 @@
+$z-index-99: -99;
+$z-index-1: -1;
+$z-index0: 0 !default;
+$z-index1: 1;
+$z-index2: 2;
+$z-index3: 3;
+$z-index4: 4;
+$z-index5: 5;
+$z-index10: 10;
+$z-index20: 20;
+$z-index30: 30;
+$z-index40: 40;
+$z-index50: 50;
+$z-index60: 60;
+$z-index70: 70;
+$z-index80: 80;
+$z-index90: 90;
+$z-index1000: 1000;
+$z-index2000: 2000;
+$z-index5000: 5000;
+$z-index6000: 6000;
+$z-index7000: 7000;
+$z-index8000: 8000;
+$z-index9000: 9000;
+$z-index9999: 9999;
+$z-index100000: 100000;
+$z-index999999: 999999;
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/index.scss
new file mode 100644
index 00000000..62172605
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/utilities/variables/index.scss
@@ -0,0 +1,12 @@
+//--------------------------------------------------------------
+// Global Variables
+//--------------------------------------------------------------
+
+@import 'grid-var';
+@import 'modal-var';
+@import 'transition-var';
+@import 'type-var';
+
+// Globally assigned variables.
+@import 'color-var';
+@import 'z-index-var'
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/vendor/sanitize/_sanitize.scss b/web/wp-content/themes/dctx-v2/assets/sass/vendor/sanitize/_sanitize.scss
new file mode 100644
index 00000000..7e67caf0
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/vendor/sanitize/_sanitize.scss
@@ -0,0 +1,565 @@
+//--------------------------------------------------------------
+//! sanitize.css v8.0.0
+// CC0 License
+// github.com/csstools/sanitize.css
+//--------------------------------------------------------------
+
+// sass-lint:disable property-sort-order, indentation, property-units, no-duplicate-properties
+
+//-----------------------------------------
+// Colors
+//-----------------------------------------
+$color-black: #000;
+$color-sail: #b3d4fc;
+$color-white: #fff;
+
+//--------------------------------------------------------------
+// Document
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// 1. Remove repeating backgrounds in all browsers (opinionated).
+// 2. Add border box sizing in all browsers (opinionated).
+//-----------------------------------------
+*,
+::before,
+::after {
+ background-repeat: no-repeat; // 1
+ box-sizing: border-box; // 2
+}
+
+//-----------------------------------------
+// 1. Add text decoration inheritance in all browsers (opinionated).
+// 2. Add vertical alignment inheritance in all browsers (opinionated).
+//-----------------------------------------
+::before,
+::after {
+ text-decoration: inherit; // 1
+ vertical-align: inherit; // 2
+}
+
+//-----------------------------------------
+// 1. Use the default cursor in all browsers (opinionated).
+// 2. Use the default user interface font in all browsers (opinionated).
+// 3. Correct the line height in all browsers.
+// 4. Use a 4-space tab width in all browsers (opinionated).
+// 5. Prevent adjustments of font size after orientation changes in
+// IE on Windows Phone and in iOS.
+// 6. Breaks words to prevent overflow in all browsers (opinionated).
+//-----------------------------------------
+html {
+ cursor: default; // 1
+ font-family: // 2
+ system-ui,
+ -apple-system, // macOS 10.11-10.12
+ Segoe UI, // Windows 6+
+ Roboto, // Android 4+
+ Ubuntu, // Ubuntu 10.10+
+ Cantarell, // Gnome 3+
+ Noto Sans, // KDE Plasma 5+
+ sans-serif, // fallback
+ 'Apple Color Emoji', // macOS emoji
+ 'Segoe UI Emoji', // Windows emoji
+ 'Segoe UI Symbol', // Windows emoji
+ 'Noto Color Emoji'; // Linux emoji
+ line-height: 1.15; // 3
+ -moz-tab-size: 4; // 4
+ tab-size: 4; // 4
+ -ms-text-size-adjust: 100%; // 5
+ -webkit-text-size-adjust: 100%; // 5
+ word-break: break-word; // 6
+}
+
+
+//--------------------------------------------------------------
+// Sections
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Remove the margin in all browsers (opinionated).
+//-----------------------------------------
+body {
+ margin: 0;
+}
+
+//-----------------------------------------
+// Correct the font size and margin on `h1` elements within `section` and
+// `article` contexts in Chrome, Firefox, and Safari.
+//-----------------------------------------
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+
+//--------------------------------------------------------------
+// Grouping content
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// 1. Add the correct sizing in Firefox.
+// 2. Show the overflow in Edge and IE.
+//-----------------------------------------
+hr {
+ height: 0; // 1
+ overflow: visible; // 2
+}
+
+//-----------------------------------------
+// Add the correct display in IE.
+//-----------------------------------------
+main {
+ display: block;
+}
+
+//-----------------------------------------
+// Remove the list style on navigation lists in all browsers (opinionated).
+//-----------------------------------------
+nav ol,
+nav ul {
+ list-style: none;
+}
+
+//-----------------------------------------
+// 1. Use the default monospace user interface font in all browsers (opinionated).
+// 2. Correct the odd `em` font sizing in all browsers.
+//-----------------------------------------
+pre {
+ font-family: // 1
+ Menlo, // macOS 10.10+
+ Consolas, // Windows 6+
+ Roboto Mono, // Android 4+
+ Ubuntu Monospace, // Ubuntu 10.10+
+ Noto Mono, // KDE Plasma 5+
+ Oxygen Mono, // KDE Plasma 4+
+ Liberation Mono, // Linux/OpenOffice fallback
+ monospace; // fallback
+ font-size: 1em; // 2
+}
+
+
+//--------------------------------------------------------------
+// Text-level semantics
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Remove the gray background on active links in IE 10.
+//-----------------------------------------
+a {
+ background-color: transparent;
+}
+
+//-----------------------------------------
+// Add the correct text decoration in Edge, IE, Opera, and Safari.
+//-----------------------------------------
+abbr[title] {
+ text-decoration: underline;
+ text-decoration: underline dotted;
+}
+
+//-----------------------------------------
+// Add the correct font weight in Chrome, Edge, and Safari.
+//-----------------------------------------
+b,
+strong {
+ font-weight: bolder;
+}
+
+//-----------------------------------------
+// 1. Use the default monospace user interface font in all browsers (opinionated).
+// 2. Correct the odd `em` font sizing in all browsers.
+//-----------------------------------------
+code,
+kbd,
+samp {
+ font-family:
+ Menlo, // macOS 10.10+
+ Consolas, // Windows 6+
+ Roboto Mono, // Android 4+
+ Ubuntu Monospace, // Ubuntu 10.10+
+ Noto Mono, // KDE Plasma 5+
+ Oxygen Mono, // KDE Plasma 4+
+ Liberation Mono, // Linux/OpenOffice fallback
+ monospace; // fallback
+ font-size: 1em; // 2
+}
+
+//-----------------------------------------
+// Add the correct font size in all browsers.
+//-----------------------------------------
+small {
+ font-size: 80%;
+}
+
+//-----------------------------------------
+// Remove the text shadow on text selections in Firefox 61- (opinionated).
+// 1. Restore the coloring undone by defining the text shadow in all browsers (opinionated).
+//-----------------------------------------
+::-moz-selection {
+ background-color: $color-sail; // 1
+ color: $color-black; // 1
+ text-shadow: none;
+}
+
+::selection {
+ background-color: $color-sail; // 1
+ color: $color-black; // 1
+ text-shadow: none;
+}
+
+
+//--------------------------------------------------------------
+// Embedded content
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Change the alignment on media elements in all browers (opinionated).
+//-----------------------------------------
+audio,
+canvas,
+iframe,
+img,
+svg,
+video {
+ vertical-align: middle;
+}
+
+//-----------------------------------------
+// Add the correct display in IE 9-.
+//-----------------------------------------
+audio,
+video {
+ display: inline-block;
+}
+
+//-----------------------------------------
+// Add the correct display in iOS 4-7.
+//-----------------------------------------
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+//-----------------------------------------
+// Remove the border on images inside links in IE 10-.
+//-----------------------------------------
+img {
+ border-style: none;
+}
+
+//-----------------------------------------
+// Change the fill color to match the text color in all browsers (opinionated).
+//-----------------------------------------
+svg:not([fill]) {
+ fill: currentColor;
+}
+
+//-----------------------------------------
+// Hide the overflow in IE.
+//-----------------------------------------
+svg:not(:root) {
+ overflow: hidden;
+}
+
+
+//--------------------------------------------------------------
+// Tabular data
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Collapse border spacing in all browsers (opinionated).
+//-----------------------------------------
+table {
+ border-collapse: collapse;
+}
+
+
+//--------------------------------------------------------------
+// Forms
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Inherit styling in all browsers (opinionated).
+//-----------------------------------------
+button,
+input,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+//-----------------------------------------
+// Remove the margin in Safari.
+//-----------------------------------------
+button,
+input,
+select {
+ margin: 0;
+}
+
+//-----------------------------------------
+// 1. Show the overflow in IE.
+// 2. Remove the inheritance of text transform in Edge, Firefox, and IE.
+//-----------------------------------------
+button {
+ overflow: visible; // 1
+ text-transform: none; // 2
+}
+
+//-----------------------------------------
+// Correct the inability to style clickable types in iOS and Safari.
+//-----------------------------------------
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button;
+}
+
+//-----------------------------------------
+// Correct the padding in Firefox.
+//-----------------------------------------
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+//-----------------------------------------
+// Show the overflow in Edge and IE.
+//-----------------------------------------
+input {
+ overflow: visible;
+}
+
+//-----------------------------------------
+// 1. Correct the text wrapping in Edge and IE.
+// 2. Correct the color inheritance from `fieldset` elements in IE.
+//-----------------------------------------
+legend {
+ color: inherit; // 2
+ display: table; // 1
+ max-width: 100%; // 1
+ white-space: normal; // 1
+}
+
+//-----------------------------------------
+// 1. Add the correct display in Edge and IE.
+// 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+//-----------------------------------------
+progress {
+ display: inline-block; // 1
+ vertical-align: baseline; // 2
+}
+
+//-----------------------------------------
+// Remove the inheritance of text transform in Firefox.
+//-----------------------------------------
+select {
+ text-transform: none;
+}
+
+//-----------------------------------------
+// 1. Remove the margin in Firefox and Safari.
+// 2. Remove the default vertical scrollbar in IE.
+// 3. Change the resize direction on textareas in all browsers (opinionated).
+//-----------------------------------------
+textarea {
+ margin: 0; // 1
+ overflow: auto; // 2
+ resize: vertical; // 3
+}
+
+//-----------------------------------------
+// Remove the padding in IE 10-.
+//-----------------------------------------
+[type='checkbox'],
+[type='radio'] {
+ padding: 0;
+}
+
+//-----------------------------------------
+// 1. Correct the odd appearance in Chrome and Safari.
+// 2. Correct the outline style in Safari.
+//-----------------------------------------
+[type='search'] {
+ -webkit-appearance: textfield; // 1
+ outline-offset: -2px; // 2
+}
+
+//-----------------------------------------
+// Correct the cursor style of increment and decrement buttons in Safari.
+//-----------------------------------------
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+//-----------------------------------------
+// Correct the text style of placeholders in Chrome, Edge, and Safari.
+//-----------------------------------------
+::-webkit-input-placeholder {
+ color: inherit;
+ opacity: 0.54;
+}
+
+//-----------------------------------------
+// Remove the inner padding in Chrome and Safari on macOS.
+//-----------------------------------------
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+//-----------------------------------------
+// 1. Correct the inability to style clickable types in iOS and Safari.
+// 2. Change font properties to `inherit` in Safari.
+//-----------------------------------------
+::-webkit-file-upload-button {
+-webkit-appearance: button; // 1
+ font: inherit; // 2
+}
+
+//-----------------------------------------
+// Remove the inner border and padding of focus outlines in Firefox.
+//-----------------------------------------
+::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+//-----------------------------------------
+// Restore the focus outline styles unset by the previous rule in Firefox.
+//-----------------------------------------
+:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+
+//--------------------------------------------------------------
+// Interactive
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Add the correct display in Edge and IE.
+//-----------------------------------------
+details {
+ display: block;
+}
+
+//-----------------------------------------
+// Add the correct styles in Edge, IE, and Safari.
+//-----------------------------------------
+dialog {
+ background-color: $color-white;
+ border: solid;
+ color: $color-black;
+ display: block;
+ height: -moz-fit-content;
+ height: -webkit-fit-content;
+ height: fit-content;
+ left: 0;
+ margin: auto;
+ padding: 1em;
+ position: absolute;
+ right: 0;
+ width: -moz-fit-content;
+ width: -webkit-fit-content;
+ width: fit-content;
+}
+
+dialog:not([open]) {
+ display: none;
+}
+
+//-----------------------------------------
+// Add the correct display in all browsers.
+//-----------------------------------------
+summary {
+ display: list-item;
+}
+
+
+//--------------------------------------------------------------
+// Scripting
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Add the correct display in IE 9-.
+//-----------------------------------------
+canvas {
+ display: inline-block;
+}
+
+//-----------------------------------------
+// Add the correct display in IE.
+//-----------------------------------------
+template {
+ display: none;
+}
+
+
+//--------------------------------------------------------------
+// User interaction
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// 1. Remove the tapping delay in IE 10.
+// 2. Remove the tapping delay on clickable elements in all browsers (opinionated).
+//-----------------------------------------
+a,
+area,
+button,
+input,
+label,
+select,
+summary,
+textarea,
+[tabindex] {
+ -ms-touch-action: manipulation; // 1
+ touch-action: manipulation; // 2
+}
+
+//-----------------------------------------
+// Add the correct display in IE 10-.
+//-----------------------------------------
+[hidden] {
+ display: none;
+}
+
+
+//--------------------------------------------------------------
+// Accessibility
+//--------------------------------------------------------------
+
+//-----------------------------------------
+// Change the cursor on busy elements in all browsers (opinionated).
+//-----------------------------------------
+[aria-busy='true'] {
+ cursor: progress;
+}
+
+//-----------------------------------------
+// Change the cursor on control elements in all browsers (opinionated).
+//-----------------------------------------
+[aria-controls] {
+ cursor: pointer;
+}
+
+//-----------------------------------------
+// Change the cursor on disabled, not-editable, or otherwise
+// inoperable elements in all browsers (opinionated).
+//-----------------------------------------
+[aria-disabled='true'],
+[disabled] {
+ cursor: not-allowed;
+}
+
+//-----------------------------------------
+// Change the display on visually hidden accessible elements
+// in all browsers (opinionated).
+//-----------------------------------------
+[aria-hidden='false'][hidden]:not(:focus) {
+ clip: rect(0, 0, 0, 0);
+ display: inherit;
+ position: absolute;
+}
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/views/_homepage.scss b/web/wp-content/themes/dctx-v2/assets/sass/views/_homepage.scss
new file mode 100644
index 00000000..8130cc09
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/views/_homepage.scss
@@ -0,0 +1,42 @@
+//--------------------------------------------------------------
+// Homepage
+//--------------------------------------------------------------
+
+.home {
+
+ .hero {
+
+ .wp-block-media-text__media {
+
+ img {
+ @include padding(rem(30));
+
+ height: auto;
+ width: 100%;
+
+ @include media($tablet-portrait) {
+ height: auto;
+ padding: 0;
+ }
+ } // img
+
+ } // .wp-block-media-text__media
+
+
+ @include media($tablet-portrait) {
+
+ .wp-block-media-text__media {
+ display: flex;
+ justify-content: center;
+ } // .wp-block-media-text__media
+
+ .wp-block-media-text__content {
+ padding-left: 0;
+
+ p {
+ font-size: rem(26);
+ } // p
+ } // .wp-block-media-text__content
+ }
+ } // .hero
+} // .home
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/views/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/views/index.scss
new file mode 100644
index 00000000..82f6a100
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/views/index.scss
@@ -0,0 +1,5 @@
+//--------------------------------------------------------------
+// Views
+//--------------------------------------------------------------
+
+@import 'homepage';
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/widgets/_widgets.scss b/web/wp-content/themes/dctx-v2/assets/sass/widgets/_widgets.scss
new file mode 100644
index 00000000..53ef860f
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/widgets/_widgets.scss
@@ -0,0 +1,90 @@
+//--------------------------------------------------------------
+// Widgets
+//--------------------------------------------------------------
+
+.widget {
+ @include margin(0 0 $space);
+
+ // Make sure select elements fit in widgets.
+ select {
+ max-width: 100%;
+ } // select
+
+ // Extend the h3 style for the widget titles.
+ .widget-title {
+ @extend .h3 !optional;
+
+ text-align: center;
+ text-transform: none;
+ } // .widget-title
+} // .widget
+
+// Search widget.
+.widget_search .search-submit {
+ display: none;
+} // .widget_search .search-submit
+
+// Galery widget.
+.widget_media_gallery {
+
+ .gallery {
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+ flex-wrap: wrap;
+ justify-content: center;
+ max-width: 100%;
+
+ @include media($tablet-portrait) {
+ flex-direction: row;
+ }
+
+ .gallery-item {
+ @include margin(rem(15) 0);
+ @include padding(rem(10) rem(15));
+
+ height: auto;
+ min-width: 80%;
+ overflow: hidden;
+ width: auto;
+
+ @include media($tablet-portrait) {
+ min-width: rem(200);
+ }
+
+ img {
+ height: auto;
+ object-fit: cover;
+ object-position: center;
+ width: 100%;
+ } // img
+ } // .gallery-item
+ } // .gallery
+} // .widget-media-gallery
+
+// Media image
+.widget_media_image {
+ display: flex;
+ justify-content: center;
+
+ .wp-caption {
+ margin-bottom: 0;
+ min-width: rem(400);
+ } //
+
+ .dctx-footer-logo {
+ height: auto;
+ width: rem(136);
+
+ + .wp-caption-text {
+ border: none;
+ color: $color-black;
+ font-size: rem(16);
+ font-weight: 600;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ text-align: center;
+ text-transform: uppercase;
+ } // .wp-caption-text
+ } // .dctx-footer-logo
+} // .widget_media_image
diff --git a/web/wp-content/themes/dctx-v2/assets/sass/widgets/index.scss b/web/wp-content/themes/dctx-v2/assets/sass/widgets/index.scss
new file mode 100644
index 00000000..0abd45fe
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/sass/widgets/index.scss
@@ -0,0 +1,5 @@
+//--------------------------------------------------------------
+// Widget Styles
+//--------------------------------------------------------------
+
+@import 'widgets';
diff --git a/web/wp-content/themes/dctx-v2/assets/scripts/babel-polyfill.min.js b/web/wp-content/themes/dctx-v2/assets/scripts/babel-polyfill.min.js
new file mode 100644
index 00000000..1d3348dd
--- /dev/null
+++ b/web/wp-content/themes/dctx-v2/assets/scripts/babel-polyfill.min.js
@@ -0,0 +1,3915 @@
+! ( function e( t, n, r ) {
+function s( o, u ) {
+if ( ! n[o] ) {
+if ( ! t[o] ) {
+var c = 'function' === typeof require && require;if ( ! u && c ) {
+return c( o, ! 0 );
+} if ( i ) {
+return i( o, ! 0 );
+} var a = new Error( 'Cannot find module \'' + o + '\'' );throw a.code = 'MODULE_NOT_FOUND', a;
+} var f = n[o] = {exports: {}};t[o][0].call( f.exports, function( n ) {
+var r = t[o][1][n];return s( r || n );
+}, f, f.exports, e, t, n, r );
+} return n[o].exports;
+} for ( var i = 'function' === typeof require && require, o = 0;o < r.length;o++ ) {
+s( r[o] );
+} return s;
+}( {1: [ function( t, n, r ) {
+( function( n ) {
+'use strict';function define( t, n, e ) {
+t[n] || Object[r]( t, n, {writable: ! 0, configurable: ! 0, value: e} );
+} if ( t( 327 ), t( 328 ), t( 2 ), n._babelPolyfill ) {
+throw new Error( 'only one instance of babel-polyfill is allowed' );
+}n._babelPolyfill = ! 0;var r = 'defineProperty';define( String.prototype, 'padLeft', ''.padStart ), define( String.prototype, 'padRight', ''.padEnd ), 'pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill'.split( ',' ).forEach( function( t ) {
+[][t] && define( Array, t, Function.call.bind( [][t] ) );
+} );
+} ).call( this, 'undefined' !== typeof global ? global : 'undefined' !== typeof self ? self : 'undefined' !== typeof window ? window : {} );
+}, {2: 2, 327: 327, 328: 328} ], 2: [ function( t, n, r ) {
+t( 130 ), n.exports = t( 23 ).RegExp.escape;
+}, {130: 130, 23: 23} ], 3: [ function( t, n, r ) {
+n.exports = function( t ) {
+if ( 'function' !== typeof t ) {
+throw TypeError( t + ' is not a function!' );
+} return t;
+};
+}, {} ], 4: [ function( t, n, r ) {
+var e = t( 18 );n.exports = function( t, n ) {
+if ( 'number' !== typeof t && 'Number' != e( t ) ) {
+throw TypeError( n );
+} return +t;
+};
+}, {18: 18} ], 5: [ function( t, n, r ) {
+var e = t( 128 )( 'unscopables' ),
+i = Array.prototype;void 0 == i[e] && t( 42 )( i, e, {} ), n.exports = function( t ) {
+i[e][t] = ! 0;
+};
+}, {128: 128, 42: 42} ], 6: [ function( t, n, r ) {
+n.exports = function( t, n, r, e ) {
+if ( ! ( t instanceof n ) || void 0 !== e && e in t ) {
+throw TypeError( r + ': incorrect invocation!' );
+} return t;
+};
+}, {} ], 7: [ function( t, n, r ) {
+var e = t( 51 );n.exports = function( t ) {
+if ( ! e( t ) ) {
+throw TypeError( t + ' is not an object!' );
+} return t;
+};
+}, {51: 51} ], 8: [ function( t, n, r ) {
+'use strict';var e = t( 119 ),
+i = t( 114 ),
+o = t( 118 );n.exports = [].copyWithin || function copyWithin( t, n ) {
+var r = e( this ),
+u = o( r.length ),
+c = i( t, u ),
+a = i( n, u ),
+f = 2 < arguments.length ? arguments[2] : void 0,
+s = Math.min( ( void 0 === f ? u : i( f, u ) ) - a, u - c ),
+l = 1;for ( a < c && c < a + s && ( l = -1, a += s - 1, c += s - 1 );0 < s--; ) {
+a in r ? r[c] = r[a] : delete r[c], c += l, a += l;
+} return r;
+};
+}, {114: 114, 118: 118, 119: 119} ], 9: [ function( t, n, r ) {
+'use strict';var e = t( 119 ),
+i = t( 114 ),
+o = t( 118 );n.exports = function fill( t ) {
+for ( var n = e( this ), r = o( n.length ), u = arguments.length, c = i( 1 < u ? arguments[1] : void 0, r ), a = 2 < u ? arguments[2] : void 0, f = void 0 === a ? r : i( a, r );f > c; ) {
+n[c++] = t;
+} return n;
+};
+}, {114: 114, 118: 118, 119: 119} ], 10: [ function( t, n, r ) {
+var e = t( 39 );n.exports = function( t, n ) {
+var r = [];return e( t, ! 1, r.push, r, n ), r;
+};
+}, {39: 39} ], 11: [ function( t, n, r ) {
+var e = t( 117 ),
+i = t( 118 ),
+o = t( 114 );n.exports = function( t ) {
+return function( n, r, u ) {
+var c,
+a = e( n ),
+f = i( a.length ),
+s = o( u, f );if ( t && r != r ) {
+for ( ;f > s; ) {
+if ( ( c = a[s++] ) != c ) {
+return ! 0;
+}
+}
+} else {
+for ( ;f > s;s++ ) {
+if ( ( t || s in a ) && a[s] === r ) {
+return t || s || 0;
+}
+}
+} return ! t && -1;
+};
+};
+}, {114: 114, 117: 117, 118: 118} ], 12: [ function( t, n, r ) {
+var e = t( 25 ),
+i = t( 47 ),
+o = t( 119 ),
+u = t( 118 ),
+c = t( 15 );n.exports = function( t, n ) {
+var r = 1 == t,
+a = 2 == t,
+f = 3 == t,
+s = 4 == t,
+l = 6 == t,
+h = 5 == t || l,
+v = n || c;return function( n, c, p ) {
+for ( var d, y, g = o( n ), m = i( g ), b = e( c, p, 3 ), x = u( m.length ), S = 0, w = r ? v( n, x ) : a ? v( n, 0 ) : void 0;x > S;S++ ) {
+if ( ( h || S in m ) && ( d = m[S], y = b( d, S, g ), t ) ) {
+if ( r ) {
+w[S] = y;
+} else if ( y ) {
+switch ( t ) {
+case 3:return ! 0;case 5:return d;case 6:return S;case 2:w.push( d );
+}
+} else if ( s ) {
+return ! 1;
+}
+}
+} return l ? -1 : f || s ? s : w;
+};
+};
+}, {118: 118, 119: 119, 15: 15, 25: 25, 47: 47} ], 13: [ function( t, n, r ) {
+var e = t( 3 ),
+i = t( 119 ),
+o = t( 47 ),
+u = t( 118 );n.exports = function( t, n, r, c, a ) {
+e( n );var f = i( t ),
+s = o( f ),
+l = u( f.length ),
+h = a ? l - 1 : 0,
+v = a ? -1 : 1;if ( 2 > r ) {
+for ( ;; ) {
+if ( h in s ) {
+c = s[h], h += v;break;
+} if ( h += v, a ? 0 > h : l <= h ) {
+throw TypeError( 'Reduce of empty array with no initial value' );
+}
+}
+} for ( ;a ? 0 <= h : l > h;h += v ) {
+h in s && ( c = n( c, s[h], h, f ) );
+} return c;
+};
+}, {118: 118, 119: 119, 3: 3, 47: 47} ], 14: [ function( t, n, r ) {
+var e = t( 51 ),
+i = t( 49 ),
+o = t( 128 )( 'species' );n.exports = function( t ) {
+var n;return i( t ) && ( n = t.constructor, 'function' !== typeof n || n !== Array && ! i( n.prototype ) || ( n = void 0 ), e( n ) && null === ( n = n[o] ) && ( n = void 0 ) ), void 0 === n ? Array : n;
+};
+}, {128: 128, 49: 49, 51: 51} ], 15: [ function( t, n, r ) {
+var e = t( 14 );n.exports = function( t, n ) {
+return new( e( t ) )( n );
+};
+}, {14: 14} ], 16: [ function( t, n, r ) {
+'use strict';var e = t( 3 ),
+i = t( 51 ),
+o = t( 46 ),
+u = [].slice,
+c = {},
+a = function( t, n, r ) {
+if ( ! ( n in c ) ) {
+for ( var e = [], i = 0;i < n;i++ ) {
+e[i] = 'a[' + i + ']';
+}c[n] = Function( 'F,a', 'return new F(' + e.join( ',' ) + ')' );
+} return c[n]( t, r );
+};n.exports = Function.bind || function bind( t ) {
+var n = e( this ),
+r = u.call( arguments, 1 ),
+c = function() {
+var e = r.concat( u.call( arguments ) );return this instanceof c ? a( n, e.length, e ) : o( n, e, t );
+};return i( n.prototype ) && ( c.prototype = n.prototype ), c;
+};
+}, {3: 3, 46: 46, 51: 51} ], 17: [ function( t, n, r ) {
+var e = t( 18 ),
+i = t( 128 )( 'toStringTag' ),
+o = 'Arguments' == e( function() {
+return arguments;
+}() ),
+u = function( t, n ) {
+try {
+return t[n];
+} catch ( t ) {}
+};n.exports = function( t ) {
+var n, r, c;return void 0 === t ? 'Undefined' : null === t ? 'Null' : 'string' === typeof( r = u( n = Object( t ), i ) ) ? r : o ? e( n ) : 'Object' == ( c = e( n ) ) && 'function' === typeof n.callee ? 'Arguments' : c;
+};
+}, {128: 128, 18: 18} ], 18: [ function( t, n, r ) {
+var e = {}.toString;n.exports = function( t ) {
+return e.call( t ).slice( 8, -1 );
+};
+}, {} ], 19: [ function( t, n, r ) {
+'use strict';var e = t( 72 ).f,
+i = t( 71 ),
+o = t( 93 ),
+u = t( 25 ),
+c = t( 6 ),
+a = t( 39 ),
+f = t( 55 ),
+s = t( 57 ),
+l = t( 100 ),
+h = t( 29 ),
+v = t( 66 ).fastKey,
+p = t( 125 ),
+d = h ? 'dctx' : 'size',
+y = function( t, n ) {
+var r,
+e = v( n );if ( 'F' !== e ) {
+return t._i[e];
+} for ( r = t._f;r;r = r.n ) {
+if ( r.k == n ) {
+return r;
+}
+}
+};n.exports = {getConstructor: function( t, n, r, f ) {
+var s = t( function( t, e ) {
+c( t, s, n, '_i' ), t._t = n, t._i = i( null ), t._f = void 0, t._l = void 0, t[d] = 0, void 0 != e && a( e, r, t[f], t );
+} );return o( s.prototype, {clear: function clear() {
+for ( var t = p( this, n ), r = t._i, e = t._f;e;e = e.n ) {
+e.r = ! 0, e.p && ( e.p = e.p.n = void 0 ), delete r[e.i];
+}t._f = t._l = void 0, t[d] = 0;
+}, delete: function( t ) {
+var r = p( this, n ),
+e = y( r, t );if ( e ) {
+var i = e.n,
+o = e.p;delete r._i[e.i], e.r = ! 0, o && ( o.n = i ), i && ( i.p = o ), r._f == e && ( r._f = i ), r._l == e && ( r._l = o ), r[d]--;
+} return !! e;
+}, forEach: function forEach( t ) {
+p( this, n );for ( var r, e = u( t, 1 < arguments.length ? arguments[1] : void 0, 3 );r = r ? r.n : this._f; ) {
+for ( e( r.v, r.k, this );r && r.r; ) {
+r = r.p;
+}
+}
+}, has: function has( t ) {
+return !! y( p( this, n ), t );
+}} ), h && e( s.prototype, 'size', {get: function() {
+return p( this, n )[d];
+}} ), s;
+}, def: function( t, n, r ) {
+var e, i,
+o = y( t, n );return o ? o.v = r : ( t._l = o = {i: i = v( n, ! 0 ), k: n, v: r, p: e = t._l, n: void 0, r: ! 1}, t._f || ( t._f = o ), e && ( e.n = o ), t[d]++, 'F' !== i && ( t._i[i] = o ) ), t;
+}, getEntry: y, setStrong: function( t, n, r ) {
+f( t, n, function( t, r ) {
+this._t = p( t, n ), this._k = r, this._l = void 0;
+}, function() {
+for ( var t = this, n = t._k, r = t._l;r && r.r; ) {
+r = r.p;
+} return t._t && ( t._l = r = r ? r.n : t._t._f ) ? 'keys' == n ? s( 0, r.k ) : 'values' == n ? s( 0, r.v ) : s( 0, [ r.k, r.v ] ) : ( t._t = void 0, s( 1 ) );
+}, r ? 'entries' : 'values', ! r, ! 0 ), l( n );
+}};
+}, {100: 100, 125: 125, 25: 25, 29: 29, 39: 39, 55: 55, 57: 57, 6: 6, 66: 66, 71: 71, 72: 72, 93: 93} ], 20: [ function( t, n, r ) {
+var e = t( 17 ),
+i = t( 10 );n.exports = function( t ) {
+return function toJSON() {
+if ( e( this ) != t ) {
+throw TypeError( t + '#toJSON isn\'t generic' );
+} return i( this );
+};
+};
+}, {10: 10, 17: 17} ], 21: [ function( t, n, r ) {
+'use strict';var e = t( 93 ),
+i = t( 66 ).getWeak,
+o = t( 7 ),
+u = t( 51 ),
+c = t( 6 ),
+a = t( 39 ),
+f = t( 12 ),
+s = t( 41 ),
+l = t( 125 ),
+h = f( 5 ),
+v = f( 6 ),
+p = 0,
+d = function( t ) {
+return t._l || ( t._l = new y );
+},
+y = function() {
+this.a = [];
+},
+g = function( t, n ) {
+return h( t.a, function( t ) {
+return t[0] === n;
+} );
+};y.prototype = {get: function( t ) {
+var n = g( this, t );if ( n ) {
+return n[1];
+}
+}, has: function( t ) {
+return !! g( this, t );
+}, set: function( t, n ) {
+var r = g( this, t );r ? r[1] = n : this.a.push( [ t, n ] );
+}, delete: function( t ) {
+var n = v( this.a, function( n ) {
+return n[0] === t;
+} );return ~n && this.a.splice( n, 1 ), !! ~n;
+}}, n.exports = {getConstructor: function( t, n, r, o ) {
+var f = t( function( t, e ) {
+c( t, f, n, '_i' ), t._t = n, t._i = p++, t._l = void 0, void 0 != e && a( e, r, t[o], t );
+} );return e( f.prototype, {delete: function( t ) {
+if ( ! u( t ) ) {
+return ! 1;
+} var r = i( t );return ! 0 === r ? d( l( this, n ) ).delete( t ) : r && s( r, this._i ) && delete r[this._i];
+}, has: function has( t ) {
+if ( ! u( t ) ) {
+return ! 1;
+} var r = i( t );return ! 0 === r ? d( l( this, n ) ).has( t ) : r && s( r, this._i );
+}} ), f;
+}, def: function( t, n, r ) {
+var e = i( o( n ), ! 0 );return ! 0 === e ? d( t ).set( n, r ) : e[t._i] = r, t;
+}, ufstore: d};
+}, {12: 12, 125: 125, 39: 39, 41: 41, 51: 51, 6: 6, 66: 66, 7: 7, 93: 93} ], 22: [ function( t, n, r ) {
+'use strict';var e = t( 40 ),
+i = t( 33 ),
+o = t( 94 ),
+u = t( 93 ),
+c = t( 66 ),
+a = t( 39 ),
+f = t( 6 ),
+s = t( 51 ),
+l = t( 35 ),
+h = t( 56 ),
+v = t( 101 ),
+p = t( 45 );n.exports = function( t, n, r, d, y, g ) {
+var m = e[t],
+b = m,
+x = y ? 'set' : 'add',
+S = b && b.prototype,
+w = {},
+_ = function( t ) {
+var n = S[t];o( S, t, 'delete' == t ? function( t ) {
+return ! ( g && ! s( t ) ) && n.call( this, 0 === t ? 0 : t );
+} : 'has' == t ? function has( t ) {
+return ! ( g && ! s( t ) ) && n.call( this, 0 === t ? 0 : t );
+} : 'get' == t ? function get( t ) {
+return g && ! s( t ) ? void 0 : n.call( this, 0 === t ? 0 : t );
+} : 'add' == t ? function add( t ) {
+return n.call( this, 0 === t ? 0 : t ), this;
+} : function set( t, r ) {
+return n.call( this, 0 === t ? 0 : t, r ), this;
+} );
+};if ( 'function' === typeof b && ( g || S.forEach && ! l( function() {
+( new b ).entries().next();
+} ) ) ) {
+var E = new b,
+O = E[x]( g ? {} : -0, 1 ) != E,
+P = l( function() {
+E.has( 1 );
+} ),
+M = h( function( t ) {
+new b( t );
+} ),
+F = ! g && l( function() {
+for ( var t = new b, n = 5;n--; ) {
+t[x]( n, n );
+} return ! t.has( -0 );
+} );M || ( b = n( function( n, r ) {
+f( n, b, t );var e = p( new m, n, b );return void 0 != r && a( r, y, e[x], e ), e;
+} ), b.prototype = S, S.constructor = b ), ( P || F ) && ( _( 'delete' ), _( 'has' ), y && _( 'get' ) ), ( F || O ) && _( x ), g && S.clear && delete S.clear;
+} else {
+b = d.getConstructor( n, t, y, x ), u( b.prototype, r ), c.NEED = ! 0;
+} return v( b, t ), w[t] = b, i( i.G + i.W + i.F * ( b != m ), w ), g || d.setStrong( b, t, y ), b;
+};
+}, {101: 101, 33: 33, 35: 35, 39: 39, 40: 40, 45: 45, 51: 51, 56: 56, 6: 6, 66: 66, 93: 93, 94: 94} ], 23: [ function( t, n, r ) {
+var e = n.exports = {version: '2.5.0'};'number' === typeof __e && ( __e = e );
+}, {} ], 24: [ function( t, n, r ) {
+'use strict';var e = t( 72 ),
+i = t( 92 );n.exports = function( t, n, r ) {
+n in t ? e.f( t, n, i( 0, r ) ) : t[n] = r;
+};
+}, {72: 72, 92: 92} ], 25: [ function( t, n, r ) {
+var e = t( 3 );n.exports = function( t, n, r ) {
+if ( e( t ), void 0 === n ) {
+return t;
+} switch ( r ) {
+case 1:return function( r ) {
+return t.call( n, r );
+};case 2:return function( r, e ) {
+return t.call( n, r, e );
+};case 3:return function( r, e, i ) {
+return t.call( n, r, e, i );
+};
+} return function() {
+return t.apply( n, arguments );
+};
+};
+}, {3: 3} ], 26: [ function( t, n, r ) {
+'use strict';var e = t( 35 ),
+i = Date.prototype.getTime,
+o = Date.prototype.toISOString,
+u = function( t ) {
+return 9 < t ? t : '0' + t;
+};n.exports = e( function() {
+return '0385-07-25T07:06:39.999Z' != o.call( new Date( -5e13 - 1 ) );
+} ) || ! e( function() {
+o.call( new Date( NaN ) );
+} ) ? function toISOString() {
+if ( ! isFinite( i.call( this ) ) ) {
+throw RangeError( 'Invalid time value' );
+} var t = this,
+n = t.getUTCFullYear(),
+r = t.getUTCMilliseconds(),
+e = 0 > n ? '-' : 9999 < n ? '+' : '';return e + ( '00000' + Math.abs( n ) ).slice( e ? -6 : -4 ) + '-' + u( t.getUTCMonth() + 1 ) + '-' + u( t.getUTCDate() ) + 'T' + u( t.getUTCHours() ) + ':' + u( t.getUTCMinutes() ) + ':' + u( t.getUTCSeconds() ) + '.' + ( 99 < r ? r : '0' + u( r ) ) + 'Z';
+} : o;
+}, {35: 35} ], 27: [ function( t, n, r ) {
+'use strict';var e = t( 7 ),
+i = t( 120 );n.exports = function( t ) {
+if ( 'string' !== t && 'number' !== t && 'default' !== t ) {
+throw TypeError( 'Incorrect hint' );
+} return i( e( this ), 'number' != t );
+};
+}, {120: 120, 7: 7} ], 28: [ function( t, n, r ) {
+n.exports = function( t ) {
+if ( void 0 == t ) {
+throw TypeError( 'Can\'t call method on ' + t );
+} return t;
+};
+}, {} ], 29: [ function( t, n, r ) {
+n.exports = ! t( 35 )( function() {
+return 7 != Object.defineProperty( {}, 'a', {get: function() {
+return 7;
+}} ).a;
+} );
+}, {35: 35} ], 30: [ function( t, n, r ) {
+var e = t( 51 ),
+i = t( 40 ).document,
+o = e( i ) && e( i.createElement );n.exports = function( t ) {
+return o ? i.createElement( t ) : {};
+};
+}, {40: 40, 51: 51} ], 31: [ function( t, n, r ) {
+n.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split( ',' );
+}, {} ], 32: [ function( t, n, r ) {
+var e = t( 81 ),
+i = t( 78 ),
+o = t( 82 );n.exports = function( t ) {
+var n = e( t ),
+r = i.f;if ( r ) {
+for ( var u, c = r( t ), a = o.f, f = 0;c.length > f; ) {
+a.call( t, u = c[f++] ) && n.push( u );
+}
+} return n;
+};
+}, {78: 78, 81: 81, 82: 82} ], 33: [ function( t, n, r ) {
+var e = t( 40 ),
+i = t( 23 ),
+o = t( 42 ),
+u = t( 94 ),
+c = t( 25 ),
+a = function( t, n, r ) {
+var f, s, l, h,
+v = t & a.F,
+p = t & a.G,
+d = t & a.S,
+y = t & a.P,
+g = t & a.B,
+m = p ? e : d ? e[n] || ( e[n] = {} ) : ( e[n] || {} ).prototype,
+b = p ? i : i[n] || ( i[n] = {} ),
+x = b.prototype || ( b.prototype = {} );p && ( r = n );for ( f in r ) {
+s = ! v && m && void 0 !== m[f], l = ( s ? m : r )[f], h = g && s ? c( l, e ) : y && 'function' === typeof l ? c( Function.call, l ) : l, m && u( m, f, l, t & a.U ), b[f] != l && o( b, f, h ), y && x[f] != l && ( x[f] = l );
+}
+};e.core = i, a.F = 1, a.G = 2, a.S = 4, a.P = 8, a.B = 16, a.W = 32, a.U = 64, a.R = 128, n.exports = a;
+}, {23: 23, 25: 25, 40: 40, 42: 42, 94: 94} ], 34: [ function( t, n, r ) {
+var e = t( 128 )( 'match' );n.exports = function( t ) {
+var n = /./;try {
+'/./'[t]( n );
+} catch ( r ) {
+try {
+return n[e] = ! 1, ! '/./'[t]( n );
+} catch ( t ) {}
+} return ! 0;
+};
+}, {128: 128} ], 35: [ function( t, n, r ) {
+n.exports = function( t ) {
+try {
+return !! t();
+} catch ( t ) {
+return ! 0;
+}
+};
+}, {} ], 36: [ function( t, n, r ) {
+'use strict';var e = t( 42 ),
+i = t( 94 ),
+o = t( 35 ),
+u = t( 28 ),
+c = t( 128 );n.exports = function( t, n, r ) {
+var a = c( t ),
+f = r( u, a, ''[t] ),
+s = f[0],
+l = f[1];o( function() {
+var n = {};return n[a] = function() {
+return 7;
+}, 7 != ''[t]( n );
+} ) && ( i( String.prototype, t, s ), e( RegExp.prototype, a, 2 == n ? function( t, n ) {
+return l.call( t, this, n );
+} : function( t ) {
+return l.call( t, this );
+} ) );
+};
+}, {128: 128, 28: 28, 35: 35, 42: 42, 94: 94} ], 37: [ function( t, n, r ) {
+'use strict';var e = t( 7 );n.exports = function() {
+var t = e( this ),
+n = '';return t.global && ( n += 'g' ), t.ignoreCase && ( n += 'i' ), t.multiline && ( n += 'm' ), t.unicode && ( n += 'u' ), t.sticky && ( n += 'y' ), n;
+};
+}, {7: 7} ], 38: [ function( t, n, r ) {
+'use strict';function flattenIntoArray( t, n, r, a, f, s, l, h ) {
+for ( var v, p, d = f, y = 0, g = !! l && u( l, h, 3 );y < a; ) {
+if ( y in r ) {
+if ( v = g ? g( r[y], y, n ) : r[y], p = ! 1, i( v ) && ( p = v[c], p = void 0 !== p ? !! p : e( v ) ), p && 0 < s ) {
+d = flattenIntoArray( t, n, v, o( v.length ), d, s - 1 ) - 1;
+} else {
+if ( 9007199254740991 <= d ) {
+throw TypeError();
+}t[d] = v;
+}d++;
+}y++;
+} return d;
+} var e = t( 49 ),
+i = t( 51 ),
+o = t( 118 ),
+u = t( 25 ),
+c = t( 128 )( 'isConcatSpreadable' );n.exports = flattenIntoArray;
+}, {118: 118, 128: 128, 25: 25, 49: 49, 51: 51} ], 39: [ function( t, n, r ) {
+var e = t( 25 ),
+i = t( 53 ),
+o = t( 48 ),
+u = t( 7 ),
+c = t( 118 ),
+a = t( 129 ),
+f = {},
+s = {},
+r = n.exports = function( t, n, r, l, h ) {
+var v, p, d, y,
+g = h ? function() {
+return t;
+} : a( t ),
+m = e( r, l, n ? 2 : 1 ),
+b = 0;if ( 'function' !== typeof g ) {
+throw TypeError( t + ' is not iterable!' );
+} if ( o( g ) ) {
+for ( v = c( t.length );v > b;b++ ) {
+if ( ( y = n ? m( u( p = t[b] )[0], p[1] ) : m( t[b] ) ) === f || y === s ) {
+return y;
+}
+}
+} else {
+for ( d = g.call( t );! ( p = d.next() ).done; ) {
+if ( ( y = i( d, m, p.value, n ) ) === f || y === s ) {
+return y;
+}
+}
+}
+};r.BREAK = f, r.RETURN = s;
+}, {118: 118, 129: 129, 25: 25, 48: 48, 53: 53, 7: 7} ], 40: [ function( t, n, r ) {
+var e = n.exports = 'undefined' !== typeof window && window.Math == Math ? window : 'undefined' !== typeof self && self.Math == Math ? self : Function( 'return this' )();'number' === typeof __g && ( __g = e );
+}, {} ], 41: [ function( t, n, r ) {
+var e = {}.hasOwnProperty;n.exports = function( t, n ) {
+return e.call( t, n );
+};
+}, {} ], 42: [ function( t, n, r ) {
+var e = t( 72 ),
+i = t( 92 );n.exports = t( 29 ) ? function( t, n, r ) {
+return e.f( t, n, i( 1, r ) );
+} : function( t, n, r ) {
+return t[n] = r, t;
+};
+}, {29: 29, 72: 72, 92: 92} ], 43: [ function( t, n, r ) {
+var e = t( 40 ).document;n.exports = e && e.documentElement;
+}, {40: 40} ], 44: [ function( t, n, r ) {
+n.exports = ! t( 29 ) && ! t( 35 )( function() {
+return 7 != Object.defineProperty( t( 30 )( 'div' ), 'a', {get: function() {
+return 7;
+}} ).a;
+} );
+}, {29: 29, 30: 30, 35: 35} ], 45: [ function( t, n, r ) {
+var e = t( 51 ),
+i = t( 99 ).set;n.exports = function( t, n, r ) {
+var o,
+u = n.constructor;return u !== r && 'function' === typeof u && ( o = u.prototype ) !== r.prototype && e( o ) && i && i( t, o ), t;
+};
+}, {51: 51, 99: 99} ], 46: [ function( t, n, r ) {
+n.exports = function( t, n, r ) {
+var e = void 0 === r;switch ( n.length ) {
+case 0:return e ? t() : t.call( r );case 1:return e ? t( n[0] ) : t.call( r, n[0] );case 2:return e ? t( n[0], n[1] ) : t.call( r, n[0], n[1] );case 3:return e ? t( n[0], n[1], n[2] ) : t.call( r, n[0], n[1], n[2] );case 4:return e ? t( n[0], n[1], n[2], n[3] ) : t.call( r, n[0], n[1], n[2], n[3] );
+} return t.apply( r, n );
+};
+}, {} ], 47: [ function( t, n, r ) {
+var e = t( 18 );n.exports = Object( 'z' ).propertyIsEnumerable( 0 ) ? Object : function( t ) {
+return 'String' == e( t ) ? t.split( '' ) : Object( t );
+};
+}, {18: 18} ], 48: [ function( t, n, r ) {
+var e = t( 58 ),
+i = t( 128 )( 'iterator' ),
+o = Array.prototype;n.exports = function( t ) {
+return void 0 !== t && ( e.Array === t || o[i] === t );
+};
+}, {128: 128, 58: 58} ], 49: [ function( t, n, r ) {
+var e = t( 18 );n.exports = Array.isArray || function isArray( t ) {
+return 'Array' == e( t );
+};
+}, {18: 18} ], 50: [ function( t, n, r ) {
+var e = t( 51 ),
+i = Math.floor;n.exports = function isInteger( t ) {
+return ! e( t ) && isFinite( t ) && i( t ) === t;
+};
+}, {51: 51} ], 51: [ function( t, n, r ) {
+n.exports = function( t ) {
+return 'object' === typeof t ? null !== t : 'function' === typeof t;
+};
+}, {} ], 52: [ function( t, n, r ) {
+var e = t( 51 ),
+i = t( 18 ),
+o = t( 128 )( 'match' );n.exports = function( t ) {
+var n;return e( t ) && ( void 0 !== ( n = t[o] ) ? !! n : 'RegExp' == i( t ) );
+};
+}, {128: 128, 18: 18, 51: 51} ], 53: [ function( t, n, r ) {
+var e = t( 7 );n.exports = function( t, n, r, i ) {
+try {
+return i ? n( e( r )[0], r[1] ) : n( r );
+} catch ( n ) {
+var o = t.return;throw void 0 !== o && e( o.call( t ) ), n;
+}
+};
+}, {7: 7} ], 54: [ function( t, n, r ) {
+'use strict';var e = t( 71 ),
+i = t( 92 ),
+o = t( 101 ),
+u = {};t( 42 )( u, t( 128 )( 'iterator' ), function() {
+return this;
+} ), n.exports = function( t, n, r ) {
+t.prototype = e( u, {next: i( 1, r )} ), o( t, n + ' Iterator' );
+};
+}, {101: 101, 128: 128, 42: 42, 71: 71, 92: 92} ], 55: [ function( t, n, r ) {
+'use strict';var e = t( 60 ),
+i = t( 33 ),
+o = t( 94 ),
+u = t( 42 ),
+c = t( 41 ),
+a = t( 58 ),
+f = t( 54 ),
+s = t( 101 ),
+l = t( 79 ),
+h = t( 128 )( 'iterator' ),
+v = ! ( [].keys && 'next' in [].keys() ),
+p = function() {
+return this;
+};n.exports = function( t, n, r, d, y, g, m ) {
+f( r, n, d );var b, x, S,
+w = function( t ) {
+if ( ! v && t in P ) {
+return P[t];
+} switch ( t ) {
+case 'keys':return function keys() {
+return new r( this, t );
+};case 'values':return function values() {
+return new r( this, t );
+};
+} return function entries() {
+return new r( this, t );
+};
+},
+_ = n + ' Iterator',
+E = 'values' == y,
+O = ! 1,
+P = t.prototype,
+M = P[h] || P['@@iterator'] || y && P[y],
+F = M || w( y ),
+I = y ? E ? w( 'entries' ) : F : void 0,
+A = 'Array' == n ? P.entries || M : M;if ( A && ( S = l( A.call( new t ) ) ) !== Object.prototype && S.next && ( s( S, _, ! 0 ), e || c( S, h ) || u( S, h, p ) ), E && M && 'values' !== M.name && ( O = ! 0, F = function values() {
+return M.call( this );
+} ), e && ! m || ! v && ! O && P[h] || u( P, h, F ), a[n] = F, a[_] = p, y ) {
+if ( b = {values: E ? F : w( 'values' ), keys: g ? F : w( 'keys' ), entries: I}, m ) {
+for ( x in b ) {
+x in P || o( P, x, b[x] );
+}
+} else {
+i( i.P + i.F * ( v || O ), n, b );
+}
+} return b;
+};
+}, {101: 101, 128: 128, 33: 33, 41: 41, 42: 42, 54: 54, 58: 58, 60: 60, 79: 79, 94: 94} ], 56: [ function( t, n, r ) {
+var e = t( 128 )( 'iterator' ),
+i = ! 1;try {
+var o = [ 7 ][e]();o.return = function() {
+i = ! 0;
+}, Array.from( o, function() {
+throw 2;
+} );
+} catch ( t ) {}n.exports = function( t, n ) {
+if ( ! n && ! i ) {
+return ! 1;
+} var r = ! 1;try {
+var o = [ 7 ],
+u = o[e]();u.next = function() {
+return {done: r = ! 0};
+}, o[e] = function() {
+return u;
+}, t( o );
+} catch ( t ) {} return r;
+};
+}, {128: 128} ], 57: [ function( t, n, r ) {
+n.exports = function( t, n ) {
+return {value: n, done: !! t};
+};
+}, {} ], 58: [ function( t, n, r ) {
+n.exports = {};
+}, {} ], 59: [ function( t, n, r ) {
+var e = t( 81 ),
+i = t( 117 );n.exports = function( t, n ) {
+for ( var r, o = i( t ), u = e( o ), c = u.length, a = 0;c > a; ) {
+if ( o[r = u[a++]] === n ) {
+return r;
+}
+}
+};
+}, {117: 117, 81: 81} ], 60: [ function( t, n, r ) {
+n.exports = ! 1;
+}, {} ], 61: [ function( t, n, r ) {
+var e = Math.expm1;n.exports = ! e || 22025.465794806718 < e( 10 ) || 22025.465794806718 > e( 10 ) || -2e-17 != e( -2e-17 ) ? function expm1( t ) {
+return 0 == ( t = +t ) ? t : -1e-6 < t && 1e-6 > t ? t + t * t / 2 : Math.exp( t ) - 1;
+} : e;
+}, {} ], 62: [ function( t, n, r ) {
+var e = t( 65 ),
+i = Math.pow,
+o = i( 2, -52 ),
+u = i( 2, -23 ),
+c = i( 2, 127 ) * ( 2 - u ),
+a = i( 2, -126 ),
+f = function( t ) {
+return t + 1 / o - 1 / o;
+};n.exports = Math.fround || function fround( t ) {
+var n, r,
+i = Math.abs( t ),
+s = e( t );return i < a ? s * f( i / a / u ) * a * u : ( n = ( 1 + u / o ) * i, r = n - ( n - i ), r > c || r != r ? s * ( 1 / 0 ) : s * r );
+};
+}, {65: 65} ], 63: [ function( t, n, r ) {
+n.exports = Math.log1p || function log1p( t ) {
+return -1e-8 < ( t = +t ) && 1e-8 > t ? t - t * t / 2 : Math.log( 1 + t );
+};
+}, {} ], 64: [ function( t, n, r ) {
+n.exports = Math.scale || function scale( t, n, r, e, i ) {
+return 0 === arguments.length || t != t || n != n || r != r || e != e || i != i ? NaN : t === 1 / 0 || t === -1 / 0 ? t : ( t - n ) * ( i - e ) / ( r - n ) + e;
+};
+}, {} ], 65: [ function( t, n, r ) {
+n.exports = Math.sign || function sign( t ) {
+return 0 == ( t = +t ) || t != t ? t : 0 > t ? -1 : 1;
+};
+}, {} ], 66: [ function( t, n, r ) {
+var e = t( 124 )( 'meta' ),
+i = t( 51 ),
+o = t( 41 ),
+u = t( 72 ).f,
+c = 0,
+a = Object.isExtensible || function() {
+return ! 0;
+},
+f = ! t( 35 )( function() {
+return a( Object.preventExtensions( {} ) );
+} ),
+s = function( t ) {
+u( t, e, {value: {i: 'O' + ++c, w: {}}} );
+},
+l = function( t, n ) {
+if ( ! i( t ) ) {
+return 'symbol' === typeof t ? t : ( 'string' === typeof t ? 'S' : 'P' ) + t;
+} if ( ! o( t, e ) ) {
+if ( ! a( t ) ) {
+return 'F';
+} if ( ! n ) {
+return 'E';
+}s( t );
+} return t[e].i;
+},
+h = function( t, n ) {
+if ( ! o( t, e ) ) {
+if ( ! a( t ) ) {
+return ! 0;
+} if ( ! n ) {
+return ! 1;
+}s( t );
+} return t[e].w;
+},
+v = function( t ) {
+return f && p.NEED && a( t ) && ! o( t, e ) && s( t ), t;
+},
+p = n.exports = {KEY: e, NEED: ! 1, fastKey: l, getWeak: h, onFreeze: v};
+}, {124: 124, 35: 35, 41: 41, 51: 51, 72: 72} ], 67: [ function( t, n, r ) {
+var e = t( 160 ),
+i = t( 33 ),
+o = t( 103 )( 'metadata' ),
+u = o.store || ( o.store = new( t( 266 ) ) ),
+c = function( t, n, r ) {
+var i = u.get( t );if ( ! i ) {
+if ( ! r ) {
+return;
+}u.set( t, i = new e );
+} var o = i.get( n );if ( ! o ) {
+if ( ! r ) {
+return;
+}i.set( n, o = new e );
+} return o;
+},
+a = function( t, n, r ) {
+var e = c( n, r, ! 1 );return void 0 !== e && e.has( t );
+},
+f = function( t, n, r ) {
+var e = c( n, r, ! 1 );return void 0 === e ? void 0 : e.get( t );
+},
+s = function( t, n, r, e ) {
+c( r, e, ! 0 ).set( t, n );
+},
+l = function( t, n ) {
+var r = c( t, n, ! 1 ),
+e = [];return r && r.forEach( function( t, n ) {
+e.push( n );
+} ), e;
+},
+h = function( t ) {
+return void 0 === t || 'symbol' === typeof t ? t : String( t );
+},
+v = function( t ) {
+i( i.S, 'Reflect', t );
+};n.exports = {store: u, map: c, has: a, get: f, set: s, keys: l, key: h, exp: v};
+}, {103: 103, 160: 160, 266: 266, 33: 33} ], 68: [ function( t, n, r ) {
+var e = t( 40 ),
+i = t( 113 ).set,
+o = e.MutationObserver || e.WebKitMutationObserver,
+u = e.process,
+c = e.Promise,
+a = 'process' == t( 18 )( u );n.exports = function() {
+var t, n, r,
+f = function() {
+var e, i;for ( a && ( e = u.domain ) && e.exit();t; ) {
+i = t.fn, t = t.next;try {
+i();
+} catch ( e ) {
+throw t ? r() : n = void 0, e;
+}
+}n = void 0, e && e.enter();
+};if ( a ) {
+r = function() {
+u.nextTick( f );
+};
+} else if ( o ) {
+var s = ! 0,
+l = document.createTextNode( '' );new o( f ).observe( l, {characterData: ! 0} ), r = function() {
+l.data = s = ! s;
+};
+} else if ( c && c.resolve ) {
+var h = c.resolve();r = function() {
+h.then( f );
+};
+} else {
+r = function() {
+i.call( e, f );
+};
+} return function( e ) {
+var i = {fn: e, next: void 0};n && ( n.next = i ), t || ( t = i, r() ), n = i;
+};
+};
+}, {113: 113, 18: 18, 40: 40} ], 69: [ function( t, n, r ) {
+'use strict';function PromiseCapability( t ) {
+var n, r;this.promise = new t( function( t, e ) {
+if ( void 0 !== n || void 0 !== r ) {
+throw TypeError( 'Bad Promise constructor' );
+}n = t, r = e;
+} ), this.resolve = e( n ), this.reject = e( r );
+} var e = t( 3 );n.exports.f = function( t ) {
+return new PromiseCapability( t );
+};
+}, {3: 3} ], 70: [ function( t, n, r ) {
+'use strict';var e = t( 81 ),
+i = t( 78 ),
+o = t( 82 ),
+u = t( 119 ),
+c = t( 47 ),
+a = Object.assign;n.exports = ! a || t( 35 )( function() {
+var t = {},
+n = {},
+r = Symbol(),
+e = 'abcdefghijklmnopqrst';return t[r] = 7, e.split( '' ).forEach( function( t ) {
+n[t] = t;
+} ), 7 != a( {}, t )[r] || Object.keys( a( {}, n ) ).join( '' ) != e;
+} ) ? function assign( t, n ) {
+for ( var r = u( t ), a = arguments.length, f = 1, s = i.f, l = o.f;a > f; ) {
+for ( var h, v = c( arguments[f++] ), p = s ? e( v ).concat( s( v ) ) : e( v ), d = p.length, y = 0;d > y; ) {
+l.call( v, h = p[y++] ) && ( r[h] = v[h] );
+}
+} return r;
+} : a;
+}, {119: 119, 35: 35, 47: 47, 78: 78, 81: 81, 82: 82} ], 71: [ function( t, n, r ) {
+var e = t( 7 ),
+i = t( 73 ),
+o = t( 31 ),
+u = t( 102 )( 'IE_PROTO' ),
+c = function() {},
+a = function() {
+var n,
+r = t( 30 )( 'iframe' ),
+e = o.length;for ( r.style.display = 'none', t( 43 ).appendChild( r ), r.src = 'javascript:', n = r.contentWindow.document, n.open(), n.write( '