diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/_variables.base.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/_variables.base.scss
deleted file mode 100644
index 64704c20a6..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/_variables.base.scss
+++ /dev/null
@@ -1,479 +0,0 @@
-//
-// CivicTheme base default variables.
-//
-// Do not copy this file for customisations.
-// Use `components/variables.base.scss` instead.
-//
-// Variables are split into 2 files:
-// - _variables.base.scss - base variables that are used to calculate other
-// variables' values.
-// - _variables.components.scss - variables that control the look of components.
-//
-// These are split into 2 files to allow changing base variables without the
-// need to provide component variables in custom themes (e.g., to override
-// heading color in child theme and have it propagate to components).
-//
-
-@use 'sass:map';
-@use 'sass:math';
-@use 'sass:color';
-@import 'mixins';
-
-//
-// Particle.
-//
-// The most basic unit of measurement.
-// Using pixels to tie to the design grid which is in pixels as well.
-// Depending on the context, most of the values will be using conversion to
-// rem with rem() function.
-//
-// Do not use these directly.
-// Use ct-particle() function instead.
-//
-// Use ct-spacing() function for spacing.
-//
-$ct-particle: 8px !default;
-
-//
-// Assets directory.
-//
-$ct-assets-directory: './assets/' !default;
-
-//
-// Colors.
-//
-// Components are using colors defined in the color palette variables.
-//
-// Color palette variables can have custom color values or can be based on
-// the brand colors to allow quick mapping.
-//
-
-// Use $ct-colors-brands to provide brand color values.
-// It is available (and empty) so that consumer site implementations could
-// specify their custom brand color values an *additional* colors to extend the
-// brand color set.
-$ct-colors-brands: () !default;
-
-// Default CivicTheme colors palette.
-// Use $ct-colors to override and extend color palette values.
-// It is available (and empty) so that consumer site implementations could
-// specify their custom color values (to override defaults) and *additional*
-// colors to extend the color palette set. This allows CivicTheme to make
-// color palette additions without breaking consumer site implementations.
-$ct-colors: () !default;
-$ct-colors-default: (
- 'light': (
- 'heading': ct-color-shade(ct-color-constant-light('brand1'), 60),
- 'body': ct-color-tint(ct-color-shade(ct-color-constant-light('brand1'), 80), 20),
- 'background-light': ct-color-tint(ct-color-constant-light('brand2'), 90),
- 'background': ct-color-constant-light('brand2'),
- 'background-dark': ct-color-shade(ct-color-constant-light('brand2'), 20),
- 'border-light': ct-color-shade(ct-color-constant-light('brand2'), 25),
- 'border': ct-color-shade(ct-color-constant-light('brand2'), 60),
- 'border-dark': ct-color-shade(ct-color-constant-light('brand2'), 90),
- 'interaction-text': ct-color-tint(ct-color-constant-light('brand2'), 80),
- 'interaction-background': ct-color-constant-light('brand1'),
- 'interaction-hover-text': ct-color-tint(ct-color-constant-light('brand2'), 80),
- 'interaction-hover-background': ct-color-shade(ct-color-constant-light('brand1'), 40),
- 'interaction-focus': #8b5cd7,
- 'highlight': ct-color-constant-light('brand3'),
- 'information': #007cbf,
- 'warning': #c95100,
- 'error': #ce3836,
- 'success': #008482,
- ),
- 'dark': (
- 'heading': ct-color-tint(ct-color-constant-dark('brand1'), 95),
- 'body': ct-color-tint(ct-color-constant-dark('brand1'), 85),
- 'background-light': ct-color-tint(ct-color-constant-dark('brand2'), 5),
- 'background': ct-color-constant-dark('brand2'),
- 'background-dark': ct-color-shade(ct-color-constant-dark('brand2'), 30),
- 'border-light': ct-color-tint(ct-color-constant-dark('brand2'), 65),
- 'border': ct-color-tint(ct-color-constant-dark('brand2'), 10),
- 'border-dark': ct-color-shade(ct-color-constant-dark('brand2'), 30),
- 'interaction-text': ct-color-constant-dark('brand2'),
- 'interaction-background': ct-color-constant-dark('brand1'),
- 'interaction-hover-text': ct-color-shade(ct-color-constant-dark('brand2'), 30),
- 'interaction-hover-background': ct-color-tint(ct-color-constant-dark('brand1'), 40),
- 'interaction-focus': #8b5cd7,
- 'highlight': ct-color-constant-dark('brand3'),
- 'information': #4cc4fc,
- 'warning': #e38444,
- 'error': #e85653,
- 'success': #12b0ae,
- )
-);
-
-//
-// Fonts.
-//
-
-// Use $ct-fonts to override any font family values. It is available
-// (and empty) so that any consumer sites could specify their fonts in here to
-// override the defaults. This allows CivicTheme to make font additions without
-// breaking consumer sites.
-$ct-fonts: () !default;
-$ct-fonts-default: (
- 'primary': (
- 'family': '"Lexend", sans-serif',
- 'types': (
- (
- 'uri': 'https://fonts.googleapis.com/css2?family=Lexend:wght@400;500;600;700&display=swap',
- ),
- ),
- ),
- 'secondary': (
- 'family': '"Public Sans", sans-serif',
- 'types': (
- (
- 'uri': 'https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;600&display=swap',
- ),
- ),
- ),
-);
-
-// Add custom fonts to $ct-fonts with the same key as above to override
-// fonts or with a new key to add a new font kind.
-// 'uri' can be a URL to the external font or a list of local files with
-// extensions to be imported. The font type will be taken from the file
-// extensions.
-// Use $ct-assets-directory to provide a relative path.
-//
-// IMPORTANT: Make sure to put commas at the end of every list or SASS will not
-// be able to distinguish lists and values.
-//
-// Example:
-//
-// $ct-fonts: (
-// 'tertiary': (
-// 'family': 'Roboto',
-// 'types': (
-// (
-// 'uri': (
-// '#{$ct-assets-directory}fonts/roboto/Roboto-Regular.ttf',
-// '#{$ct-assets-directory}fonts/roboto/Roboto-Regular.woff',
-// '#{$ct-assets-directory}fonts/roboto/Roboto-Regular.eot',
-// ),
-// ),
-// (
-// 'italic': true,
-// 'weight': 'bold',
-// 'uri': (
-// '#{$ct-assets-directory}fonts/roboto/Roboto-BoldItalic.ttf',
-// '#{$ct-assets-directory}fonts/roboto/Roboto-BoldItalic.woff',
-// '#{$ct-assets-directory}fonts/roboto/Roboto-BoldItalic.eot',
-// ),
-// ),
-// ),
-// ),
-// );
-
-//
-// Font weights.
-//
-
-// These directly correlate with font weight values set in the $ct-fonts-default
-// and $ct-fonts above.
-$ct-font-weights: ();
-$ct-font-weights-default: (
- 'thin': 100,
- 'extralight': 200,
- 'regular': 400,
- 'medium': 500,
- 'semibold': 600,
- 'bold': 700,
- 'extrabold': 800,
- 'black': 900,
-);
-
-// Average character width. Used for calculating spacing based on font size.
-// @todo: This should be calculated based on the font itself and added to the
-// font definition map.
-$ct-font-average-character-width: 0.25 !default;
-
-// Font smoothing.
-$ct-font-smoothing-enable: true !default;
-
-//
-// Typography.
-//
-
-// Base font size.
-$ct-font-base-size: ct-particle-px(2) !default;
-
-// Base font line height.
-$ct-font-base-line-height: $ct-font-base-size !default;
-
-// Use $ct-typography to override any typography values. It is available
-// (and empty) so that any consumer sites could specify their typography in here to
-// override the defaults. This allows CivicTheme to make typography additions
-// without breaking consumer sites.
-$ct-typography: () !default;
-$ct-typography-default: (
- // Headings.
- 'heading-1': (
- 'xxs': ($ct-font-base-size * 2, $ct-font-base-line-height * 2.5, 'bold', 'primary', -0.6px),
- 'm': ($ct-font-base-size * 3, $ct-font-base-line-height * 3.75, 'bold', 'primary', -1px)
- ),
- 'heading-2': (
- 'xxs': ($ct-font-base-size * 1.75, $ct-font-base-line-height * 2.25, 'bold', 'primary', -0.5px),
- 'm': ($ct-font-base-size * 2.5, $ct-font-base-line-height * 3, 'bold', 'primary', -0.8px)
- ),
- 'heading-3': (
- 'xxs': ($ct-font-base-size * 1.5, $ct-font-base-line-height * 2, 'bold', 'primary', -0.35px),
- 'm': ($ct-font-base-size * 2, $ct-font-base-line-height * 2.5, 'bold', 'primary', -0.6px)
- ),
- 'heading-4': (
- 'xxs': ($ct-font-base-size * 1.25, $ct-font-base-line-height * 1.5, 'bold', 'primary', -0.25px),
- 'm': ($ct-font-base-size * 1.5, $ct-font-base-line-height * 2, 'bold', 'primary', -0.4px)
- ),
- 'heading-5': (
- 'xxs': ($ct-font-base-size, $ct-font-base-line-height * 1.375, 'bold', 'primary', 0),
- 'm': ($ct-font-base-size * 1.25, $ct-font-base-line-height * 1.5, 'bold', 'primary', -0.2px)
- ),
- 'heading-6': ($ct-font-base-size, $ct-font-base-line-height * 1.625, 'bold', 'primary', 0),
- // Text.
- 'text-extra-large': (
- 'xxs': ($ct-font-base-size * 1.25, $ct-font-base-line-height * 1.5, 'regular', 'primary', -0.1px),
- 'm': ($ct-font-base-size * 1.5, $ct-font-base-line-height * 1.5, 'regular', 'primary', 0)
- ),
- 'text-large': (
- 'xxs': ($ct-font-base-size * 1.125, $ct-font-base-line-height * 1.75, 'regular', 'primary', 0),
- 'm': ($ct-font-base-size * 1.25, $ct-font-base-line-height * 2.125, 'regular', 'primary', 0)
- ),
- 'text-regular': (
- 'xxs': ($ct-font-base-size * 0.875, $ct-font-base-line-height * 1.5, 'regular', 'primary', 0),
- 'm': ($ct-font-base-size, $ct-font-base-line-height * 1.75, 'regular', 'primary', 0)
- ),
- 'text-small': (
- 'xxs': ($ct-font-base-size * 0.75, $ct-font-base-line-height * 1.25, 'regular', 'primary', 0),
- 'm': ($ct-font-base-size * 0.875, $ct-font-base-line-height * 1.5, 'regular', 'primary', 0),
- ),
- // Labels.
- 'label-extra-large': (
- 'xxs': ($ct-font-base-size * 1.25, $ct-font-base-line-height * 1.5, 'semibold', 'primary', -0.1px),
- 'm': ($ct-font-base-size * 1.5, $ct-font-base-line-height * 1.5, 'semibold', 'primary', 0)
- ),
- 'label-large': (
- 'xxs': ($ct-font-base-size * 1.125, $ct-font-base-line-height * 1.5, 'semibold', 'primary', -0.1px),
- 'm': ($ct-font-base-size * 1.125, $ct-font-base-line-height * 1.5, 'semibold', 'primary', 0)
- ),
- 'label-regular': (
- 'xxs': ($ct-font-base-size, $ct-font-base-line-height * 1.25, 'semibold', 'primary', -0.1px),
- 'm': ($ct-font-base-size, $ct-font-base-line-height * 1.25, 'semibold', 'primary', -0.1px)
- ),
- 'label-small': (
- 'xxs': ($ct-font-base-size, $ct-font-base-line-height * 1.25, 'regular', 'primary', -0.1px),
- 'm': ($ct-font-base-size, $ct-font-base-line-height * 1.25, 'regular', 'primary', -0.1px)
- ),
- 'label-extra-small': (
- 'xxs': ($ct-font-base-size * 0.875, $ct-font-base-line-height * 1.25, 'regular', 'primary', -0.1px),
- 'm': ($ct-font-base-size * 0.875, $ct-font-base-line-height * 1.125, 'regular', 'primary', 0)
- ),
- // Special elements.
- 'quote': (
- 'xxs': ($ct-font-base-size * 1.125, $ct-font-base-line-height * 1.815, 'regular', 'primary', -0.15px),
- 'm': ($ct-font-base-size * 1.5, $ct-font-base-size * 2.5, 'regular', 'primary', -0.35px)
- ),
-);
-
-//
-// Spacing.
-//
-// Used to control spacing for elements.
-//
-// Do not use these directly.
-// Use ct-spacing() function instead.
-//
-// Use ct-spacing() function for spacing.
-//
-$ct-spacing: ct-particle() !default;
-
-//
-// Breakpoints.
-//
-// The value denotes the "start" of the breakpoint range.
-//
-// Do not use these directly.
-// Use @include ct-breakpoint() mixin instead.
-//
-// We are not basing these on $ct-particle as these are dimensions of the real
-// screens.
-$ct-breakpoints: (
- 'xxs': 0,
- 'xs': 368px,
- 's': 576px,
- 'm': 768px,
- 'l': 992px,
- 'xl': 1280px,
- 'xxl': 1440px,
-) !default;
-
-//
-// Grid.
-//
-
-// Number of grid columns.
-$ct-grid-columns: 12 !default;
-
-// Grid spacing used to calculate gutter spacings. Since the grid is based on
-// pixel values instead of rems (for consistency), the spacing is also based on
-// pixel values.
-$ct-grid-space: ct-particle-px() !default;
-
-// The lowest breakpoint where column classes should start applying.
-$ct-grid-lowest-breakpoint: 'xxs' !default;
-
-// The lowest breakpoint where *responsive* grid classes should start applying.
-// Must align with the value in the auto-generated column_class in
-// the Grid component.
-$ct-grid-responsive-breakpoint: 'm' !default;
-
-// Horizontal spacing between grid items depending on the responsive
-// context.
-$ct-grid-gutters: (
- 'xxs': $ct-grid-space * 2,
- 'xs': $ct-grid-space * 2,
- 's': $ct-grid-space * 3
-) !default;
-
-// Horizontal spacing between grid items depending on the responsive
-// context.
-$ct-grid-vertical-gutters: (
- 'xxs': $ct-grid-space * 2,
- 'xs': $ct-grid-space * 2,
- 's': $ct-grid-space * 3
-) !default;
-
-// Side spacing between the edge of the viewport and a start of the grid.
-$ct-grid-offsets: (
- 'xxs': $ct-grid-space * 3,
- 'xs': $ct-grid-space * 3,
- 's': $ct-grid-space * 3,
- 'm': $ct-grid-space * 3,
- 'l': $ct-grid-space * 6,
- 'xl': $ct-grid-space * 6,
- 'xxl': $ct-grid-space * 12,
-) !default;
-
-//
-// Item list.
-//
-$ct-item-list-horizontal-large-column-gap: ct-spacing(4);
-$ct-item-list-horizontal-large-row-gap: ct-spacing(4);
-$ct-item-list-horizontal-regular-column-gap: ct-spacing(2);
-$ct-item-list-horizontal-regular-row-gap: ct-spacing(2);
-$ct-item-list-horizontal-small-column-gap: ct-spacing(1);
-$ct-item-list-horizontal-small-row-gap: ct-spacing(1);
-$ct-item-list-vertical-large-column-gap: ct-spacing(4);
-$ct-item-list-vertical-large-row-gap: ct-spacing(4);
-$ct-item-list-vertical-regular-column-gap: ct-spacing(2);
-$ct-item-list-vertical-regular-row-gap: ct-spacing(2);
-$ct-item-list-vertical-small-column-gap: ct-spacing(1);
-$ct-item-list-vertical-small-row-gap: ct-spacing(1);
-
-//
-// Visibility.
-//
-
-// The lowest breakpoint where visibility classes should apply.
-$ct-visibility-lowest-breakpoint: 'xxs' !default;
-
-//
-// Icon size.
-//
-
-// Use $ct-icon-sizes to override any icon size values. It is available
-// (and empty) so that any consumer sites could specify their icons sizes here
-// to override the defaults. This allows CivicTheme to make icon sizes additions
-// without breaking consumer sites.
-$ct-icon-sizes: () !default;
-$ct-icon-sizes-default: (
- 'extra-large': (
- 'xxs': (ct-particle-px(6), ct-particle-px(6)),
- 'm': (ct-particle-px(6), ct-particle-px(6)),
- ),
- 'large': (
- 'xxs': (ct-particle-px(5), ct-particle-px(5)),
- 'm': (ct-particle-px(5), ct-particle-px(5)),
- ),
- 'regular': (
- 'xxs': (ct-particle-px(2.5), ct-particle-px(2.5)),
- 'm': (ct-particle-px(2.5), ct-particle-px(2.5)),
- ),
- 'small': (
- 'xxs': (ct-particle-px(2), ct-particle-px(2)),
- 'm': (ct-particle-px(2), ct-particle-px(2)),
- ),
- 'extra-small': (
- 'xxs': (ct-particle-px(1.75), ct-particle-px(1.75)),
- 'm': (ct-particle-px(1.75), ct-particle-px(1.75)),
- )
-);
-
-//
-// Elevations.
-//
-$ct-elevations: (
- 0 ct-particle(0.25) ct-particle(1) rgba(0, 0, 0, 25%),
- 0 ct-particle(0.5) ct-particle(2) rgba(0, 0, 0, 20%),
- 0 ct-particle(1) ct-particle(3) rgba(0, 0, 0, 20%),
- 0 ct-particle(2) ct-particle(8) rgba(0, 0, 0, 20%),
-) !default;
-
-//
-// Flyout.
-//
-
-// Flyout animation duration.
-$ct-flyout-duration: 0.5s !default;
-
-// Flyout animation direction.
-$ct-flyout-direction-transforms: (
- 'right': translateX(100%),
- 'left': translateX(-100%),
- 'top': translateY(-100%),
- 'bottom': translateY(100%),
-) !default;
-
-// Flyout z-index.
-$ct-flyout-zindex: 1000 !default;
-
-//
-// Misc Variables.
-//
-
-// Border radius.
-$ct-border-radius: ct-particle(0.5) !default;
-
-// Width or height of the highlight stripe.
-$ct-stripe-size: ct-particle(0.75) !default;
-
-// Background blend modes.
-$ct-background-blend-modes: (
- normal,
- color,
- color-burn,
- color-dodge,
- darken,
- difference,
- exclusion,
- hard-light,
- hue,
- lighten,
- luminosity,
- multiply,
- overlay,
- saturation,
- screen,
- soft-light,
-) !default;
-
-// Enable CSS animations.
-$ct-animation-enabled: true !default;
-$ct-animation-duration: 0.25s !default;
-
-// Outline.
-$ct-outline-offset: 0 !default;
-$ct-outline-width: ct-particle(0.375) !default;
-$ct-outline-border-radius: $ct-border-radius !default;
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/_variables.components.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/_variables.components.scss
deleted file mode 100644
index 65e8bc6d49..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/_variables.components.scss
+++ /dev/null
@@ -1,1328 +0,0 @@
-//
-// CivicTheme components default variables.
-//
-//
-// Do not copy this file for customisations.
-// Use `components/variables.components.scss` instead.
-//
-// Variables are split into 2 files:
-// - _variables.base.scss - base variables that are used to calculate other
-// variables' values.
-// - _variables.components.scss - variables that control look of components.
-//
-// These are split into 2 files to allow changing base variables without the
-// need to provide component variables in custom themes (e.g., to apply custom
-// heading color and have it propagated to components).
-//
-// Variables organisation rules:
-// 1. Variables are grouped by their atomic type alphabetically.
-// 2. For every component, variables are ordered by:
-// a. generic values
-// b. light theme
-// c. dark theme
-// 3. For every light theme variable, there is a dark theme counterpart.
-// 4. Variables named according to the pattern:
-// $ct-[component]-[theme]-[?subcomponent]-[?state]-[rule]
-// where:
-// a. [component] is a hyphen delimited name of the component
-// b. [theme] is a theme name (light or dark)
-// c. [subcomponent] is an optional hyphen-delimited name of the subcomponent
-// d. [state] is a single or multiple hyphen-delimited name of the state
-// e. [rule] is an exact CSS rule name
-//
-// Example 1:
-// $ct-link-light-visited-hover-background
-// [component]=link
-// [theme]=light
-// [state]=hover over visited
-// [rule]=background-color
-//
-// Example 2:
-// $ct-navigation-light-dropdown-menu-item-active-background-color
-// [component]=secondary-navigation
-// [theme]=light
-// [subcomponent]=menu-item
-// [state]=active
-// [rule]=background-color
-
-@use 'sass:map';
-@use 'sass:math';
-@use 'sass:color';
-@import 'mixins';
-
-////////////////////////////////////////////////////////////////////////////////
-// BASE //
-////////////////////////////////////////////////////////////////////////////////
-
-//
-// Collapsible.
-//
-$ct-collapsible-icon-size: 'm' !default;
-$ct-collapsible-light-color: ct-color-light('body') !default;
-$ct-collapsible-light-icon-color: $ct-collapsible-light-color !default;
-$ct-collapsible-dark-color: ct-color-dark('body') !default;
-$ct-collapsible-dark-icon-color: $ct-collapsible-dark-color !default;
-
-//
-// Layout.
-//
-$ct-layout-columns: $ct-grid-columns;
-$ct-layout-sidebar-left-columns: 3;
-$ct-layout-sidebar-right-columns: 3;
-$ct-layout-column-gap: ct-spacing(3);
-$ct-layout-column-gap-left-only: ct-spacing(8);
-$ct-layout-column-gap-right-only: ct-spacing(8);
-$ct-layout-row-gap: ct-spacing(3);
-$ct-layout-row-gap-left-only: ct-spacing(3);
-$ct-layout-row-gap-right-only: ct-spacing(3);
-$ct-layout-breakpoint: l;
-
-// Outline.
-$ct-outline-light: ct-color-light('interaction-focus') !default;
-$ct-outline-dark: ct-color-dark('interaction-focus') !default;
-
-////////////////////////////////////////////////////////////////////////////////
-// ATOMS //
-////////////////////////////////////////////////////////////////////////////////
-
-//
-// Chip.
-//
-$ct-chip-border-width: ct-particle(0.125) !default;
-$ct-chip-light-background-color: ct-color-light('interaction-text') !default;
-$ct-chip-light-border-color: ct-color-light('interaction-background') !default;
-$ct-chip-light-color: ct-color-light('interaction-background') !default;
-$ct-chip-light-selected-background-color: ct-color-light('interaction-background') !default;
-$ct-chip-light-selected-border-color: $ct-chip-light-selected-background-color !default;
-$ct-chip-light-selected-color: ct-color-light('interaction-hover-text') !default;
-$ct-chip-light-selected-hover-color: $ct-chip-light-background-color !default;
-$ct-chip-light-selected-hover-background-color: ct-color-light('interaction-hover-background') !default;
-$ct-chip-light-selected-hover-border-color: $ct-chip-light-selected-hover-background-color !default;
-$ct-chip-light-hover-background-color: $ct-chip-light-background-color !default;
-$ct-chip-light-hover-color: ct-color-light('interaction-hover-background') !default;
-$ct-chip-light-hover-border-color: $ct-chip-light-hover-color !default;
-$ct-chip-light-focus-background-color: false !default;
-$ct-chip-light-focus-border-color: false !default;
-$ct-chip-light-focus-color: false !default;
-$ct-chip-light-focus-outline-color: ct-color-light('interaction-focus') !default;
-$ct-chip-dark-background-color: ct-color-dark('interaction-text') !default;
-$ct-chip-dark-border-color: ct-color-dark('interaction-background') !default;
-$ct-chip-dark-color: ct-color-dark('interaction-background') !default;
-$ct-chip-dark-selected-background-color: ct-color-dark('interaction-background') !default;
-$ct-chip-dark-selected-border-color: $ct-chip-dark-selected-background-color !default;
-$ct-chip-dark-selected-color: ct-color-dark('interaction-hover-text') !default;
-$ct-chip-dark-selected-hover-color: $ct-chip-dark-background-color !default;
-$ct-chip-dark-selected-hover-background-color: ct-color-dark('interaction-hover-background') !default;
-$ct-chip-dark-selected-hover-border-color: $ct-chip-dark-selected-hover-background-color !default;
-$ct-chip-dark-hover-background-color: $ct-chip-dark-background-color !default;
-$ct-chip-dark-hover-color: ct-color-dark('interaction-hover-background') !default;
-$ct-chip-dark-hover-border-color: $ct-chip-dark-hover-color !default;
-$ct-chip-dark-focus-background-color: false !default;
-$ct-chip-dark-focus-border-color: false !default;
-$ct-chip-dark-focus-color: false !default;
-$ct-chip-dark-focus-outline-color: ct-color-dark('interaction-focus') !default;
-
-//
-// Content Link.
-//
-$ct-content-link-light-color: ct-color-light('interaction-background') !default;
-$ct-content-link-light-hover-background-color: ct-color-light('interaction-hover-background') !default;
-$ct-content-link-light-hover-color: ct-color-light('interaction-hover-text') !default;
-$ct-content-link-light-visited-color: ct-color-light('body') !default;
-$ct-content-link-light-visited-hover-color: ct-color-light('interaction-hover-text') !default;
-$ct-content-link-light-visited-hover-border-color: ct-color-light('interaction-focus') !default;
-$ct-content-link-dark-color: ct-color-dark('interaction-background') !default;
-$ct-content-link-dark-hover-background-color: ct-color-dark('interaction-hover-background') !default;
-$ct-content-link-dark-hover-color: ct-color-dark('interaction-hover-text') !default;
-$ct-content-link-dark-visited-color: ct-color-dark('body') !default;
-$ct-content-link-dark-visited-hover-color: ct-color-dark('interaction-hover-text') !default;
-$ct-content-link-dark-visited-hover-border-color: ct-color-dark('interaction-focus') !default;
-
-//
-// Heading.
-//
-$ct-heading-light-color: ct-color-light('heading') !default;
-$ct-heading-dark-color: ct-color-dark('heading') !default;
-
-//
-// Iframe.
-//
-$ct-iframe-space-horizontal: ct-spacing(7) !default;
-$ct-iframe-light-wrapper-background-color: ct-color-light('background-light') !default;
-$ct-iframe-dark-wrapper-background-color: ct-color-dark('background-light') !default;
-
-//
-// Link.
-//
-$ct-link-light-color: ct-color-light('interaction-background') !default;
-$ct-link-light-hover-color: ct-color-light('interaction-hover-background') !default;
-$ct-link-light-visited-color: $ct-link-light-color !default;
-$ct-link-light-active-color: ct-color-light('body') !default;
-$ct-link-dark-color: ct-color-dark('interaction-background') !default;
-$ct-link-dark-hover-color: ct-color-dark('interaction-hover-background') !default;
-$ct-link-dark-visited-color: $ct-link-dark-color !default;
-$ct-link-dark-active-color: ct-color-dark('body') !default;
-
-//
-// Popover.
-//
-$ct-popover-min-width: ct-particle(35) !default;
-$ct-popover-description-border-radius: $ct-border-radius !default;
-$ct-popover-z-index: 99 !default;
-$ct-popover-top-offset: ct-particle(2) !default;
-$ct-popover-light-content-background-color: ct-color-light('background-light') !default;
-$ct-popover-dark-content-background-color: ct-color-dark('background') !default;
-
-//
-// Table.
-//
-$ct-table-breakpoint: 'm' !default;
-$ct-table-cell-vertical-align: top !default;
-$ct-table-light-background-color: ct-color-light('background-light') !default;
-$ct-table-light-border-color: ct-color-light('border') !default;
-$ct-table-light-caption-color: ct-color-light('body') !default;
-$ct-table-light-color: ct-color-light('body') !default;
-$ct-table-light-footer-border-color: ct-color-light('border') !default;
-$ct-table-light-footer-color: ct-color-light('heading') !default;
-$ct-table-light-header-border-color: ct-color-light('border') !default;
-$ct-table-light-header-color: ct-color-light('heading') !default;
-$ct-table-light-row-even-background-color: ct-color-light('background') !default;
-$ct-table-light-row-even-color: ct-color-light('body') !default;
-$ct-table-light-row-odd-background-color: ct-color-light('background-light') !default;
-$ct-table-light-row-odd-color: ct-color-light('body') !default;
-$ct-table-dark-background-color: ct-color-dark('background') !default;
-$ct-table-dark-border-color: ct-color-dark('border') !default;
-$ct-table-dark-caption-color: ct-color-dark('body') !default;
-$ct-table-dark-color: ct-color-dark('body') !default;
-$ct-table-dark-footer-border-color: ct-color-dark('border') !default;
-$ct-table-dark-footer-color: ct-color-dark('heading') !default;
-$ct-table-dark-header-border-color: ct-color-dark('border') !default;
-$ct-table-dark-header-color: ct-color-dark('heading') !default;
-$ct-table-dark-row-even-background-color: ct-color-dark('background-light') !default;
-$ct-table-dark-row-even-color: ct-color-dark('body') !default;
-$ct-table-dark-row-odd-background-color: ct-color-dark('background') !default;
-$ct-table-dark-row-odd-color: ct-color-dark('body') !default;
-
-//
-// Tag.
-//
-$ct-tag-border-radius: $ct-border-radius !default;
-$ct-tag-border-width: ct-particle(0.125) !default;
-$ct-tag-light-primary-background-color: ct-color-light('interaction-background') !default;
-$ct-tag-light-primary-border-color: $ct-tag-light-primary-background-color !default;
-$ct-tag-light-primary-color: ct-color-light('interaction-text') !default;
-$ct-tag-light-secondary-background-color: transparent !default;
-$ct-tag-light-secondary-border-color: ct-color-light('interaction-background') !default;
-$ct-tag-light-secondary-color: ct-color-light('interaction-background') !default;
-$ct-tag-light-tertiary-background-color: transparent !default;
-$ct-tag-light-tertiary-border-color: transparent !default;
-$ct-tag-light-tertiary-color: ct-color-light('interaction-background') !default;
-$ct-tag-dark-primary-background-color: ct-color-dark('interaction-background') !default;
-$ct-tag-dark-primary-border-color: $ct-tag-dark-primary-background-color !default;
-$ct-tag-dark-primary-color: ct-color-dark('interaction-text') !default;
-$ct-tag-dark-secondary-background-color: transparent !default;
-$ct-tag-dark-secondary-border-color: ct-color-dark('interaction-background') !default;
-$ct-tag-dark-secondary-color: ct-color-dark('interaction-background') !default;
-$ct-tag-dark-tertiary-background-color: transparent !default;
-$ct-tag-dark-tertiary-border-color: transparent !default;
-$ct-tag-dark-tertiary-color: ct-color-dark('interaction-background') !default;
-
-//
-// Video
-//
-$ct-video-ratio-width: 16 !default;
-$ct-video-ratio-height: 9 !default;
-
-//
-// Form Control/Button.
-//
-$ct-button-border-radius: ct-particle(0.5) !default;
-$ct-button-border-width: ct-particle(0.25) !default;
-$ct-button-outline-offset: ct-particle(0.25) !default;
-$ct-button-outline-width: ct-particle(0.375) !default;
-$ct-button-animation-duration: $ct-animation-duration;
-
-// Primary button.
-$ct-button-light-primary-background-color: ct-color-light('interaction-background') !default;
-$ct-button-light-primary-border-color: $ct-button-light-primary-background-color !default;
-$ct-button-light-primary-color: ct-color-light('interaction-text') !default;
-$ct-button-light-primary-hover-background-color: ct-color-light('interaction-hover-background') !default;
-$ct-button-light-primary-hover-border-color: $ct-button-light-primary-hover-background-color !default;
-$ct-button-light-primary-hover-color: ct-color-light('interaction-hover-text') !default;
-$ct-button-light-primary-visited-background-color: $ct-button-light-primary-background-color !default;
-$ct-button-light-primary-visited-border-color: $ct-button-light-primary-border-color !default;
-$ct-button-light-primary-visited-color: $ct-button-light-primary-color !default;
-$ct-button-light-primary-active-background-color: $ct-button-light-primary-hover-background-color !default;
-$ct-button-light-primary-active-border-color: $ct-button-light-primary-hover-border-color !default;
-$ct-button-light-primary-active-color: $ct-button-light-primary-hover-color !default;
-$ct-button-light-primary-focus-background-color: false !default;
-$ct-button-light-primary-focus-border-color: false !default;
-$ct-button-light-primary-focus-color: false !default;
-$ct-button-light-primary-focus-outline-color: ct-color-light('interaction-focus') !default;
-$ct-button-dark-primary-background-color: ct-color-dark('interaction-background') !default;
-$ct-button-dark-primary-border-color: $ct-button-dark-primary-background-color !default;
-$ct-button-dark-primary-color: ct-color-dark('interaction-text') !default;
-$ct-button-dark-primary-hover-background-color: ct-color-dark('interaction-hover-background') !default;
-$ct-button-dark-primary-hover-border-color: $ct-button-dark-primary-hover-background-color !default;
-$ct-button-dark-primary-hover-color: ct-color-dark('interaction-hover-text') !default;
-$ct-button-dark-primary-visited-background-color: $ct-button-dark-primary-background-color !default;
-$ct-button-dark-primary-visited-border-color: $ct-button-dark-primary-border-color !default;
-$ct-button-dark-primary-visited-color: $ct-button-dark-primary-color !default;
-$ct-button-dark-primary-active-background-color: $ct-button-dark-primary-hover-background-color !default;
-$ct-button-dark-primary-active-border-color: $ct-button-dark-primary-hover-border-color !default;
-$ct-button-dark-primary-active-color: $ct-button-dark-primary-hover-color !default;
-$ct-button-dark-primary-focus-background-color: false !default;
-$ct-button-dark-primary-focus-border-color: false !default;
-$ct-button-dark-primary-focus-color: false !default;
-$ct-button-dark-primary-focus-outline-color: ct-color-dark('interaction-focus') !default;
-
-// Secondary button.
-$ct-button-light-secondary-background-color: transparent !default;
-$ct-button-light-secondary-border-color: ct-color-light('interaction-background') !default;
-$ct-button-light-secondary-color: $ct-button-light-secondary-border-color !default;
-$ct-button-light-secondary-hover-background-color: $ct-button-light-secondary-background-color !default;
-$ct-button-light-secondary-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-button-light-secondary-hover-color: $ct-button-light-secondary-hover-border-color !default;
-$ct-button-light-secondary-visited-background-color: $ct-button-light-secondary-background-color !default;
-$ct-button-light-secondary-visited-border-color: $ct-button-light-secondary-border-color !default;
-$ct-button-light-secondary-visited-color: $ct-button-light-secondary-color !default;
-$ct-button-light-secondary-active-background-color: $ct-button-light-secondary-hover-background-color !default;
-$ct-button-light-secondary-active-border-color: $ct-button-light-secondary-hover-border-color !default;
-$ct-button-light-secondary-active-color: $ct-button-light-secondary-hover-color !default;
-$ct-button-light-secondary-focus-background-color: false !default;
-$ct-button-light-secondary-focus-border-color: false !default;
-$ct-button-light-secondary-focus-color: false !default;
-$ct-button-light-secondary-focus-outline-color: ct-color-light('interaction-focus') !default;
-$ct-button-dark-secondary-background-color: transparent !default;
-$ct-button-dark-secondary-border-color: ct-color-dark('interaction-background') !default;
-$ct-button-dark-secondary-color: $ct-button-dark-secondary-border-color !default;
-$ct-button-dark-secondary-hover-background-color: $ct-button-dark-secondary-background-color !default;
-$ct-button-dark-secondary-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-button-dark-secondary-hover-color: $ct-button-dark-secondary-hover-border-color !default;
-$ct-button-dark-secondary-visited-background-color: $ct-button-dark-secondary-background-color !default;
-$ct-button-dark-secondary-visited-border-color: $ct-button-dark-secondary-border-color !default;
-$ct-button-dark-secondary-visited-color: $ct-button-dark-secondary-color !default;
-$ct-button-dark-secondary-active-background-color: $ct-button-dark-secondary-hover-background-color !default;
-$ct-button-dark-secondary-active-border-color: $ct-button-dark-secondary-hover-border-color !default;
-$ct-button-dark-secondary-active-color: $ct-button-dark-secondary-hover-color !default;
-$ct-button-dark-secondary-focus-background-color: false !default;
-$ct-button-dark-secondary-focus-border-color: false !default;
-$ct-button-dark-secondary-focus-color: false !default;
-$ct-button-dark-secondary-focus-outline-color: ct-color-dark('interaction-focus') !default;
-
-// Tertiary button.
-$ct-button-light-tertiary-background-color: transparent !default;
-$ct-button-light-tertiary-border-color: $ct-button-light-tertiary-background-color !default;
-$ct-button-light-tertiary-color: ct-color-light('interaction-background') !default;
-$ct-button-light-tertiary-hover-background-color: $ct-button-light-tertiary-background-color !default;
-$ct-button-light-tertiary-hover-border-color: $ct-button-light-tertiary-border-color !default;
-$ct-button-light-tertiary-hover-color: ct-color-light('interaction-hover-background') !default;
-$ct-button-light-tertiary-visited-background-color: $ct-button-light-tertiary-background-color !default;
-$ct-button-light-tertiary-visited-border-color: $ct-button-light-tertiary-border-color !default;
-$ct-button-light-tertiary-visited-color: $ct-button-light-tertiary-color !default;
-$ct-button-light-tertiary-active-background-color: $ct-button-light-tertiary-hover-background-color !default;
-$ct-button-light-tertiary-active-border-color: $ct-button-light-tertiary-hover-border-color !default;
-$ct-button-light-tertiary-active-color: $ct-button-light-tertiary-hover-color !default;
-$ct-button-light-tertiary-focus-background-color: false !default;
-$ct-button-light-tertiary-focus-border-color: false !default;
-$ct-button-light-tertiary-focus-color: false !default;
-$ct-button-light-tertiary-focus-outline-color: ct-color-light('interaction-focus') !default;
-$ct-button-dark-tertiary-background-color: transparent !default;
-$ct-button-dark-tertiary-border-color: $ct-button-dark-tertiary-background-color !default;
-$ct-button-dark-tertiary-color: ct-color-dark('interaction-background') !default;
-$ct-button-dark-tertiary-hover-background-color: $ct-button-dark-tertiary-background-color !default;
-$ct-button-dark-tertiary-hover-border-color: $ct-button-dark-tertiary-border-color !default;
-$ct-button-dark-tertiary-hover-color: ct-color-dark('interaction-hover-background') !default;
-$ct-button-dark-tertiary-visited-background-color: $ct-button-dark-tertiary-background-color !default;
-$ct-button-dark-tertiary-visited-border-color: $ct-button-dark-tertiary-border-color !default;
-$ct-button-dark-tertiary-visited-color: $ct-button-dark-tertiary-color !default;
-$ct-button-dark-tertiary-active-background-color: $ct-button-dark-tertiary-hover-background-color !default;
-$ct-button-dark-tertiary-active-border-color: $ct-button-dark-tertiary-hover-border-color !default;
-$ct-button-dark-tertiary-active-color: $ct-button-dark-tertiary-hover-color !default;
-$ct-button-dark-tertiary-focus-background-color: false !default;
-$ct-button-dark-tertiary-focus-border-color: false !default;
-$ct-button-dark-tertiary-focus-color: false !default;
-$ct-button-dark-tertiary-focus-outline-color: ct-color-dark('interaction-focus') !default;
-
-//
-// Form Control/Checkbox.
-//
-$ct-checkbox-border-radius: $ct-border-radius !default;
-$ct-checkbox-check: url("data:image/svg+xml,%3Csvg viewBox='' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.9 0H17.1C17.3387 0 17.5676 0.0948211 17.7364 0.263604C17.9052 0.432387 18 0.661305 18 0.9V17.1C18 17.3387 17.9052 17.5676 17.7364 17.7364C17.5676 17.9052 17.3387 18 17.1 18H0.9C0.661305 18 0.432387 17.9052 0.263604 17.7364C0.0948211 17.5676 0 17.3387 0 17.1V0.9C0 0.661305 0.0948211 0.432387 0.263604 0.263604C0.432387 0.0948211 0.661305 0 0.9 0ZM6.48885 14.1746C6.57252 14.259 6.67206 14.326 6.78173 14.3716C6.8914 14.4173 7.00904 14.4409 7.12785 14.4409C7.24666 14.4409 7.3643 14.4173 7.47397 14.3716C7.58364 14.326 7.68318 14.259 7.76685 14.1746L15.9388 6.00264C16.1083 5.83317 16.2035 5.60331 16.2035 5.36364C16.2035 5.12397 16.1083 4.89412 15.9388 4.72464C15.7694 4.55517 15.5395 4.45996 15.2998 4.45996C15.0602 4.45996 14.8303 4.55517 14.6608 4.72464L7.12785 12.2666L4.23885 9.36864C4.06938 9.19917 3.83952 9.10396 3.59985 9.10396C3.36018 9.10396 3.13032 9.19917 2.96085 9.36864C2.79138 9.53812 2.69617 9.76797 2.69617 10.0076C2.69617 10.2473 2.79138 10.4772 2.96085 10.6466L6.48885 14.1746Z' fill='currentcolor'/%3E%3C/svg%3E%0A");
-$ct-checkbox-animation-duration: 0.1s !default;
-$ct-checkbox-disabled-opacity: 40% !default;
-$ct-checkbox-outline-width: 2px !default;
-$ct-checkbox-outline-offset: 2px !default;
-$ct-checkbox-light-background-color: transparent !default;
-$ct-checkbox-light-border-color: ct-color-light('border-light') !default;
-$ct-checkbox-light-color: ct-color-light('body') !default;
-$ct-checkbox-light-hover-background-color: $ct-checkbox-light-background-color !default;
-$ct-checkbox-light-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-checkbox-light-hover-color: $ct-checkbox-light-color !default;
-$ct-checkbox-light-checked-background-color: $ct-checkbox-light-background-color !default;
-$ct-checkbox-light-checked-border-color: ct-color-light('interaction-background') !default;
-$ct-checkbox-light-checked-color: $ct-checkbox-light-color !default;
-$ct-checkbox-light-checked-hover-background-color: $ct-checkbox-light-hover-background-color !default;
-$ct-checkbox-light-checked-hover-border-color: $ct-checkbox-light-hover-border-color !default;
-$ct-checkbox-light-checked-hover-color: $ct-checkbox-light-hover-color !default;
-$ct-checkbox-light-invalid-background-color: $ct-checkbox-light-hover-background-color !default;
-$ct-checkbox-light-invalid-border-color: ct-color-light('error') !default;
-$ct-checkbox-light-invalid-color: ct-color-light('error') !default;
-$ct-checkbox-light-outline-color: $ct-outline-light !default;
-$ct-checkbox-dark-background-color: transparent !default;
-$ct-checkbox-dark-border-color: ct-color-dark('border-light') !default;
-$ct-checkbox-dark-color: ct-color-dark('body') !default;
-$ct-checkbox-dark-hover-background-color: $ct-checkbox-dark-background-color !default;
-$ct-checkbox-dark-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-checkbox-dark-hover-color: $ct-checkbox-dark-color !default;
-$ct-checkbox-dark-checked-background-color: $ct-checkbox-dark-background-color !default;
-$ct-checkbox-dark-checked-border-color: ct-color-dark('interaction-background') !default;
-$ct-checkbox-dark-checked-color: $ct-checkbox-dark-color !default;
-$ct-checkbox-dark-checked-hover-background-color: $ct-checkbox-dark-hover-background-color !default;
-$ct-checkbox-dark-checked-hover-border-color: $ct-checkbox-dark-hover-border-color !default;
-$ct-checkbox-dark-checked-hover-color: $ct-checkbox-dark-hover-color !default;
-$ct-checkbox-dark-invalid-background-color: $ct-checkbox-dark-hover-background-color !default;
-$ct-checkbox-dark-invalid-border-color: ct-color-dark('error') !default;
-$ct-checkbox-dark-invalid-color: ct-color-dark('error') !default;
-$ct-checkbox-dark-outline-color: $ct-outline-dark !default;
-
-//
-// Form Control/Field description.
-//
-$ct-field-description-light-color: ct-color-light('body') !default;
-$ct-field-description-dark-color: ct-color-dark('body') !default;
-
-//
-// Form Control/Field message.
-//
-$ct-field-message-border-radius: $ct-border-radius !default;
-$ct-field-message-light-error-background-color: ct-color-tint(ct-color-constant-light('error'), 85) !default;
-$ct-field-message-light-error-border-color: ct-color-light('error') !default;
-$ct-field-message-light-error-color: ct-color-light('body') !default;
-$ct-field-message-light-error-icon-color: $ct-field-message-light-error-color !default;
-$ct-field-message-light-information-background-color: ct-color-tint(ct-color-constant-light('information'), 85) !default;
-$ct-field-message-light-information-border-color: ct-color-light('information') !default;
-$ct-field-message-light-information-color: ct-color-light('body') !default;
-$ct-field-message-light-information-icon-color: $ct-field-message-light-information-color !default;
-$ct-field-message-light-success-border-color: ct-color-light('success') !default;
-$ct-field-message-light-success-background-color: ct-color-tint(ct-color-constant-light('success'), 85) !default;
-$ct-field-message-light-success-color: ct-color-light('body') !default;
-$ct-field-message-light-success-icon-color: $ct-field-message-light-success-color !default;
-$ct-field-message-light-warning-background-color: ct-color-tint(ct-color-constant-light('warning'), 85) !default;
-$ct-field-message-light-warning-border-color: ct-color-light('warning') !default;
-$ct-field-message-light-warning-color: ct-color-light('body') !default;
-$ct-field-message-light-warning-icon-color: $ct-field-message-light-warning-color !default;
-$ct-field-message-dark-error-background-color: ct-color-shade(ct-color-constant-dark('error'), 20) !default;
-$ct-field-message-dark-error-border-color: ct-color-dark('error') !default;
-$ct-field-message-dark-error-color: ct-color-dark('body') !default;
-$ct-field-message-dark-error-icon-color: $ct-field-message-dark-error-color !default;
-$ct-field-message-dark-information-background-color: ct-color-shade(ct-color-constant-dark('information'), 20) !default;
-$ct-field-message-dark-information-border-color: ct-color-dark('information') !default;
-$ct-field-message-dark-information-color: ct-color-dark('body') !default;
-$ct-field-message-dark-information-icon-color: $ct-field-message-dark-information-color !default;
-$ct-field-message-dark-success-border-color: ct-color-dark('success') !default;
-$ct-field-message-dark-success-background-color: ct-color-shade(ct-color-constant-dark('success'), 20) !default;
-$ct-field-message-dark-success-color: ct-color-dark('body') !default;
-$ct-field-message-dark-success-icon-color: $ct-field-message-dark-success-color !default;
-$ct-field-message-dark-warning-background-color: ct-color-shade(ct-color-constant-dark('warning'), 20) !default;
-$ct-field-message-dark-warning-border-color: ct-color-dark('warning') !default;
-$ct-field-message-dark-warning-color: ct-color-dark('body') !default;
-$ct-field-message-dark-warning-icon-color: $ct-field-message-dark-warning-color !default;
-
-//
-// Form/Fieldset.
-//
-$ct-fieldset-stripe-width: $ct-stripe-size !default;
-$ct-fieldset-light-required-color: ct-color-light('error') !default;
-$ct-fieldset-light-stripe-border-color: ct-color-light('highlight') !default;
-$ct-fieldset-dark-required-color: ct-color-dark('error') !default;
-$ct-fieldset-light-stripe-border-color: ct-color-dark('highlight') !default;
-
-//
-// Form Control/Input.
-//
-$ct-input-border-radius: $ct-border-radius !default;
-$ct-input-outline-width: 2px !default;
-$ct-input-outline-offset: 2px !default;
-$ct-input-disabled-opacity: 40% !default;
-$ct-input-light-background-color: ct-color-light('background-light') !default;
-$ct-input-light-border-color: ct-color-light('border') !default;
-$ct-input-light-color: ct-color-light('body') !default;
-$ct-input-light-hover-background-color: $ct-input-light-background-color !default;
-$ct-input-light-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-input-light-hover-color: $ct-input-light-color !default;
-$ct-input-light-focus-background-color: $ct-input-light-background-color !default;
-$ct-input-light-focus-border-color: ct-color-light('interaction-background') !default;
-$ct-input-light-focus-color: $ct-input-light-color !default;
-$ct-input-light-invalid-background-color: ct-color-light('background-light') !default;
-$ct-input-light-invalid-border-color: ct-color-light('error') !default;
-$ct-input-light-invalid-color: ct-color-light('body') !default;
-$ct-input-light-outline-color: $ct-outline-light !default;
-$ct-input-dark-background-color: ct-color-dark('background-dark') !default;
-$ct-input-dark-border-color: ct-color-dark('border-light') !default;
-$ct-input-dark-color: ct-color-dark('body') !default;
-$ct-input-dark-hover-background-color: $ct-input-dark-background-color !default;
-$ct-input-dark-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-input-dark-hover-color: $ct-input-dark-color !default;
-$ct-input-dark-focus-background-color: ct-color-dark('background') !default;
-$ct-input-dark-focus-border-color: ct-color-dark('interaction-background') !default;
-$ct-input-dark-focus-color: $ct-input-dark-color !default;
-$ct-input-dark-invalid-background-color: ct-color-dark('background-dark') !default;
-$ct-input-dark-invalid-border-color: ct-color-dark('error') !default;
-$ct-input-dark-invalid-color: ct-color-dark('body') !default;
-$ct-input-dark-outline-color: $ct-outline-dark !default;
-
-//
-// Form Control/Label.
-//
-$ct-label-required-content: '*';
-$ct-label-light-color: ct-color-light('heading') !default;
-$ct-label-light-required-color: ct-color-light('error') !default;
-$ct-label-dark-color: ct-color-dark('heading') !default;
-$ct-label-dark-required-color: ct-color-dark('error') !default;
-
-//
-// Form Control/Radio.
-//
-$ct-radio-disabled-opacity: 40% !default;
-$ct-radio-animation-duration: 0.1s !default;
-$ct-radio-outline-width: 2px !default;
-$ct-radio-outline-offset: 2px !default;
-$ct-radio-light-background-color: transparent !default;
-$ct-radio-light-border-color: ct-color-light('border-light') !default;
-$ct-radio-light-color: ct-color-light('body') !default;
-$ct-radio-light-hover-background-color: $ct-radio-light-background-color !default;
-$ct-radio-light-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-radio-light-hover-color: $ct-radio-light-color !default;
-$ct-radio-light-checked-background-color: $ct-radio-light-background-color !default;
-$ct-radio-light-checked-border-color: ct-color-light('interaction-background') !default;
-$ct-radio-light-checked-color: $ct-radio-light-color !default;
-$ct-radio-light-checked-hover-background-color: $ct-radio-light-hover-background-color !default;
-$ct-radio-light-checked-hover-border-color: $ct-radio-light-hover-border-color !default;
-$ct-radio-light-checked-hover-color: $ct-radio-light-hover-color !default;
-$ct-radio-light-invalid-background-color: $ct-radio-light-hover-background-color !default;
-$ct-radio-light-invalid-border-color: ct-color-light('error') !default;
-$ct-radio-light-invalid-color: ct-color-light('error') !default;
-$ct-radio-light-outline-color: $ct-outline-light !default;
-$ct-radio-dark-background-color: transparent !default;
-$ct-radio-dark-border-color: ct-color-dark('border-light') !default;
-$ct-radio-dark-color: ct-color-dark('body') !default;
-$ct-radio-dark-hover-background-color: $ct-radio-dark-background-color !default;
-$ct-radio-dark-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-radio-dark-hover-color: $ct-radio-dark-color !default;
-$ct-radio-dark-checked-background-color: $ct-radio-dark-background-color !default;
-$ct-radio-dark-checked-border-color: ct-color-dark('interaction-background') !default;
-$ct-radio-dark-checked-color: $ct-radio-dark-color !default;
-$ct-radio-dark-checked-hover-background-color: $ct-radio-dark-hover-background-color !default;
-$ct-radio-dark-checked-hover-border-color: $ct-radio-dark-hover-border-color !default;
-$ct-radio-dark-checked-hover-color: $ct-radio-dark-hover-color !default;
-$ct-radio-dark-invalid-background-color: $ct-radio-dark-hover-background-color !default;
-$ct-radio-dark-invalid-border-color: ct-color-dark('error') !default;
-$ct-radio-dark-invalid-color: ct-color-dark('error') !default;
-$ct-radio-dark-outline-color: $ct-outline-dark !default;
-
-//
-// Form Control/Select.
-//
-$ct-select-border-radius: $ct-border-radius !default;
-$ct-select-outline-width: 2px !default;
-$ct-select-outline-offset: 2px !default;
-$ct-select-disabled-opacity: 40% !default;
-$ct-select-light-background-color: ct-color-light('background-light') !default;
-$ct-select-light-border-color: ct-color-light('border') !default;
-$ct-select-light-color: ct-color-light('body') !default;
-$ct-select-light-option-background-color: ct-color-light('background') !default;
-$ct-select-light-option-color: inherit !default;
-$ct-select-light-hover-background-color: $ct-select-light-background-color !default;
-$ct-select-light-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-select-light-hover-color: $ct-select-light-color !default;
-$ct-select-light-focus-background-color: $ct-select-light-background-color !default;
-$ct-select-light-focus-border-color: ct-color-light('interaction-background') !default;
-$ct-select-light-focus-color: $ct-select-light-color !default;
-$ct-select-light-invalid-background-color: ct-color-light('background-light') !default;
-$ct-select-light-invalid-border-color: ct-color-light('error') !default;
-$ct-select-light-invalid-color: ct-color-light('body') !default;
-$ct-select-light-outline-color: $ct-outline-light !default;
-$ct-select-light-icon: url("data:image/svg+xml,%3Csvg width='38' height='28' viewBox='0 0 38 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 0H0V28H1V0Z' fill='black' fill-opacity='0.6'/%3E%3Cpath d='M17.0916 13.1714L19 13.1666C19 13.1666 20.7334 13.1666 20.9083 13.1666C21.0831 13.1666 21.0831 13.1666 21.0831 13.1666L21.5 13.1714C21.5 13.1714 21.7189 13.1497 21.8204 13.1074C21.922 13.0651 22.0141 13.0031 22.0916 12.9249C22.1697 12.8475 22.2317 12.7553 22.274 12.6538C22.3163 12.5522 22.3381 12.4433 22.3381 12.3333C22.3381 12.2233 22.3163 12.1144 22.274 12.0128C22.2317 11.9113 22.1697 11.8191 22.0916 11.7416L19.5916 9.24162C19.5141 9.16351 19.422 9.10151 19.3204 9.05921C19.2189 9.0169 19.11 8.99512 19 8.99512C18.8899 8.99512 18.781 9.0169 18.6795 9.05921C18.5779 9.10151 18.4858 9.16351 18.4083 9.24162L15.9083 11.7416C15.7514 11.8985 15.6632 12.1114 15.6632 12.3333C15.6632 12.5552 15.7514 12.768 15.9083 12.9249C16.0652 13.0819 16.278 13.17 16.5 13.17C16.7219 13.17 17.0916 13.1714 17.0916 13.1714ZM20.9083 15.6666H19H17.0916C16.9165 15.6666 16.9165 15.6632 16.8202 15.6632C16.4998 15.6632 16.6098 15.6632 16.5 15.6632C16.3901 15.6632 16.2813 15.6848 16.1797 15.7269C16.0782 15.7689 15.986 15.8306 15.9083 15.9083C15.8306 15.986 15.769 16.0782 15.7269 16.1797C15.6849 16.2813 15.6632 16.3901 15.6632 16.4999C15.6632 16.6098 15.6849 16.7186 15.7269 16.8202C15.769 16.9217 15.8306 17.0139 15.9083 17.0916L18.4083 19.5916C18.4858 19.6697 18.5779 19.7317 18.6795 19.774C18.781 19.8163 18.8899 19.8381 19 19.8381C19.11 19.8381 19.2189 19.8163 19.3204 19.774C19.422 19.7317 19.5141 19.6697 19.5916 19.5916L22.0916 17.0916C22.2485 16.9347 22.3367 16.7219 22.3367 16.4999C22.3367 16.278 22.2485 16.0652 22.0916 15.9083C21.9347 15.7514 21.7219 15.6632 21.5 15.6632C21.278 15.6632 21.0831 15.6666 20.9083 15.6666Z' fill='black' fill-opacity='0.6'/%3E%3C/svg%3E%0A");
-$ct-select-dark-background-color: ct-color-dark('background-dark') !default;
-$ct-select-dark-border-color: ct-color-dark('border-light') !default;
-$ct-select-dark-color: ct-color-dark('body') !default;
-$ct-select-dark-option-background-color: ct-color-dark('background-light') !default;
-$ct-select-dark-option-color: inherit !default;
-$ct-select-dark-hover-background-color: $ct-select-dark-background-color !default;
-$ct-select-dark-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-select-dark-hover-color: $ct-select-dark-color !default;
-$ct-select-dark-focus-background-color: ct-color-dark('background') !default;
-$ct-select-dark-focus-border-color: ct-color-dark('interaction-background') !default;
-$ct-select-dark-focus-color: $ct-select-dark-color !default;
-$ct-select-dark-invalid-background-color: ct-color-dark('background') !default;
-$ct-select-dark-invalid-border-color: ct-color-dark('error') !default;
-$ct-select-dark-invalid-color: ct-color-dark('body') !default;
-$ct-select-dark-outline-color: $ct-outline-dark !default;
-$ct-select-dark-icon: url("data:image/svg+xml,%3Csvg width='38' height='28' viewBox='0 0 38 28' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 0H0V28H1V0Z' fill='white' fill-opacity='0.9'/%3E%3Cpath d='M17.0916 13.1714L19 13.1666C19 13.1666 20.7334 13.1666 20.9083 13.1666C21.0831 13.1666 21.0831 13.1666 21.0831 13.1666L21.5 13.1714C21.5 13.1714 21.7189 13.1497 21.8204 13.1074C21.922 13.0651 22.0141 13.0031 22.0916 12.9249C22.1697 12.8475 22.2317 12.7553 22.274 12.6538C22.3163 12.5522 22.3381 12.4433 22.3381 12.3333C22.3381 12.2233 22.3163 12.1144 22.274 12.0128C22.2317 11.9113 22.1697 11.8191 22.0916 11.7416L19.5916 9.24162C19.5141 9.16351 19.422 9.10151 19.3204 9.05921C19.2189 9.0169 19.11 8.99512 19 8.99512C18.8899 8.99512 18.781 9.0169 18.6795 9.05921C18.5779 9.10151 18.4858 9.16351 18.4083 9.24162L15.9083 11.7416C15.7514 11.8985 15.6632 12.1114 15.6632 12.3333C15.6632 12.5552 15.7514 12.768 15.9083 12.9249C16.0652 13.0819 16.278 13.17 16.5 13.17C16.7219 13.17 17.0916 13.1714 17.0916 13.1714ZM20.9083 15.6666H19H17.0916C16.9165 15.6666 16.9165 15.6632 16.8202 15.6632C16.4998 15.6632 16.6098 15.6632 16.5 15.6632C16.3901 15.6632 16.2813 15.6848 16.1797 15.7269C16.0782 15.7689 15.986 15.8306 15.9083 15.9083C15.8306 15.986 15.769 16.0782 15.7269 16.1797C15.6849 16.2813 15.6632 16.3901 15.6632 16.4999C15.6632 16.6098 15.6849 16.7186 15.7269 16.8202C15.769 16.9217 15.8306 17.0139 15.9083 17.0916L18.4083 19.5916C18.4858 19.6697 18.5779 19.7317 18.6795 19.774C18.781 19.8163 18.8899 19.8381 19 19.8381C19.11 19.8381 19.2189 19.8163 19.3204 19.774C19.422 19.7317 19.5141 19.6697 19.5916 19.5916L22.0916 17.0916C22.2485 16.9347 22.3367 16.7219 22.3367 16.4999C22.3367 16.278 22.2485 16.0652 22.0916 15.9083C21.9347 15.7514 21.7219 15.6632 21.5 15.6632C21.278 15.6632 21.0831 15.6666 20.9083 15.6666Z' fill='white' fill-opacity='0.9'/%3E%3C/svg%3E%0A");
-
-//
-// Form Control/Textarea.
-//
-$ct-textarea-border-radius: $ct-border-radius !default;
-$ct-textarea-outline-width: 2px !default;
-$ct-textarea-outline-offset: 2px !default;
-$ct-textarea-disabled-opacity: 40% !default;
-$ct-textarea-light-background-color: ct-color-light('background-light') !default;
-$ct-textarea-light-border-color: ct-color-light('border') !default;
-$ct-textarea-light-color: ct-color-light('body') !default;
-$ct-textarea-light-hover-background-color: $ct-textarea-light-background-color !default;
-$ct-textarea-light-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-textarea-light-hover-color: $ct-textarea-light-color !default;
-$ct-textarea-light-focus-background-color: $ct-textarea-light-background-color !default;
-$ct-textarea-light-focus-border-color: ct-color-light('interaction-background') !default;
-$ct-textarea-light-focus-color: $ct-textarea-light-color !default;
-$ct-textarea-light-invalid-background-color: ct-color-light('background-light') !default;
-$ct-textarea-light-invalid-border-color: ct-color-light('error') !default;
-$ct-textarea-light-invalid-color: ct-color-light('body') !default;
-$ct-textarea-light-outline-color: $ct-outline-light !default;
-$ct-textarea-dark-background-color: ct-color-dark('background-dark') !default;
-$ct-textarea-dark-border-color: ct-color-dark('border-light') !default;
-$ct-textarea-dark-color: ct-color-dark('body') !default;
-$ct-textarea-dark-hover-background-color: $ct-textarea-dark-background-color !default;
-$ct-textarea-dark-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-textarea-dark-hover-color: $ct-textarea-dark-color !default;
-$ct-textarea-dark-focus-background-color: ct-color-dark('background') !default;
-$ct-textarea-dark-focus-border-color: ct-color-dark('interaction-background') !default;
-$ct-textarea-dark-focus-color: $ct-textarea-dark-color !default;
-$ct-textarea-dark-invalid-background-color: ct-color-dark('background-dark') !default;
-$ct-textarea-dark-invalid-border-color: ct-color-dark('error') !default;
-$ct-textarea-dark-invalid-color: ct-color-dark('body') !default;
-$ct-textarea-dark-outline-color: $ct-outline-dark !default;
-
-//
-// Form Control/Textfield.
-//
-$ct-textfield-border-radius: $ct-border-radius !default;
-$ct-textfield-outline-width: 2px !default;
-$ct-textfield-outline-offset: 2px !default;
-$ct-textfield-disabled-opacity: 40% !default;
-$ct-textfield-light-background-color: ct-color-light('background-light') !default;
-$ct-textfield-light-border-color: ct-color-light('border') !default;
-$ct-textfield-light-color: ct-color-light('body') !default;
-$ct-textfield-light-hover-background-color: $ct-textfield-light-background-color !default;
-$ct-textfield-light-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-textfield-light-hover-color: $ct-textfield-light-color !default;
-$ct-textfield-light-focus-background-color: $ct-textfield-light-background-color !default;
-$ct-textfield-light-focus-border-color: ct-color-light('interaction-background') !default;
-$ct-textfield-light-focus-color: $ct-textfield-light-color !default;
-$ct-textfield-light-invalid-background-color: ct-color-light('background-light') !default;
-$ct-textfield-light-invalid-border-color: ct-color-light('error') !default;
-$ct-textfield-light-invalid-color: ct-color-light('body') !default;
-$ct-textfield-light-outline-color: $ct-outline-light !default;
-$ct-textfield-dark-background-color: ct-color-dark('background-dark') !default;
-$ct-textfield-dark-border-color: ct-color-dark('border-light') !default;
-$ct-textfield-dark-color: ct-color-dark('body') !default;
-$ct-textfield-dark-hover-background-color: $ct-textfield-dark-background-color !default;
-$ct-textfield-dark-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-textfield-dark-hover-color: $ct-textfield-dark-color !default;
-$ct-textfield-dark-focus-background-color: ct-color-dark('background') !default;
-$ct-textfield-dark-focus-border-color: ct-color-dark('interaction-background') !default;
-$ct-textfield-dark-focus-color: $ct-textfield-dark-color !default;
-$ct-textfield-dark-invalid-background-color: ct-color-dark('background-dark') !default;
-$ct-textfield-dark-invalid-border-color: ct-color-dark('error') !default;
-$ct-textfield-dark-invalid-color: ct-color-dark('body') !default;
-$ct-textfield-dark-outline-color: $ct-outline-dark !default;
-
-////////////////////////////////////////////////////////////////////////////////
-// MOLECULES //
-////////////////////////////////////////////////////////////////////////////////
-
-//
-// Accordion.
-//
-$ct-accordion-button-border-radius: $ct-border-radius !default;
-$ct-accordion-header-border-radius: $ct-border-radius !default;
-$ct-accordion-item-border-radius: $ct-border-radius !default;
-$ct-accordion-stripe-width: $ct-stripe-size !default;
-$ct-accordion-space-horizontal: ct-spacing(7) !default;
-$ct-accordion-light-background-color: ct-color-light('background-light') !default;
-$ct-accordion-light-border-color: ct-color-light('border-light') !default;
-$ct-accordion-light-color: ct-color-light('body') !default;
-$ct-accordion-light-button-background-color: ct-color-light('background-light') !default;
-$ct-accordion-light-button-color: ct-color-light('heading') !default;
-$ct-accordion-light-icon-color: ct-color-light('interaction-background') !default;
-$ct-accordion-light-stripe-background-color: ct-color-light('highlight') !default;
-$ct-accordion-light-wrapper-background-color: ct-color-light('background') !default;
-$ct-accordion-button-border-radius: $ct-border-radius !default;
-$ct-accordion-header-border-radius: $ct-border-radius !default;
-$ct-accordion-item-border-radius: $ct-border-radius !default;
-$ct-accordion-dark-background-color: ct-color-dark('background-light') !default;
-$ct-accordion-dark-border-color: ct-color-dark('border') !default;
-$ct-accordion-dark-color: ct-color-dark('body') !default;
-$ct-accordion-dark-button-background-color: ct-color-dark('background-light') !default;
-$ct-accordion-dark-button-color: ct-color-dark('heading') !default;
-$ct-accordion-dark-icon-color: ct-color-dark('interaction-background') !default;
-$ct-accordion-dark-stripe-background-color: ct-color-dark('highlight') !default;
-$ct-accordion-dark-wrapper-background-color: ct-color-dark('background-dark') !default;
-
-//
-// Attachment.
-//
-$ct-attachment-border-radius: $ct-border-radius !default;
-$ct-attachment-space-horizontal: ct-spacing(7) !default;
-$ct-attachment-light-background-color: ct-color-light('background-light') !default;
-$ct-attachment-light-border-color: ct-color-light('border-light') !default;
-$ct-attachment-light-color: ct-color-light('body') !default;
-$ct-attachment-light-wrapper-background-color: ct-color-light('background') !default;
-$ct-attachment-dark-background-color: ct-color-dark('background') !default;
-$ct-attachment-dark-border-color: ct-color-dark('border') !default;
-$ct-attachment-dark-color: ct-color-dark('body') !default;
-$ct-attachment-dark-wrapper-background-color: ct-color-dark('background') !default;
-
-//
-// Back to top.
-//
-$ct-back-to-top-space-bottom: ct-spacing(8) !default;
-$ct-back-to-top-space-right: ct-spacing(2) !default;
-$ct-back-to-top-background-color: ct-color-light('interaction-background') !default;
-$ct-back-to-top-border-color: ct-color-light('background-light') !default;
-$ct-back-to-top-color: ct-color-light('interaction-text') !default;
-$ct-back-to-top-outline-color: ct-color-light('interaction-focus') !default;
-
-//
-// Basic content.
-//
-$ct-basic-content-blockquote-border-radius: $ct-border-radius !default;
-$ct-basic-content-list-marker-margin: ct-particle(2) !default;
-$ct-basic-content-list-marker-width: ct-particle(3.5) !default;
-$ct-basic-content-space-horizontal: ct-spacing(7) !default;
-$ct-basic-content-vertical-spacing: 1.5rem !default;
-$ct-basic-content-light-base-color: ct-color-light('body') !default;
-$ct-basic-content-light-blockquote-stripe-background-color: ct-color-light('highlight') !default;
-$ct-basic-content-light-blockquote-color: ct-color-light('body') !default;
-$ct-basic-content-light-blockquote-background-color: ct-color-light('background-light') !default;
-$ct-basic-content-light-blockquote-author-color: ct-color-light('heading') !default;
-$ct-basic-content-light-heading-1-color: ct-color-light('heading') !default;
-$ct-basic-content-light-heading-2-color: ct-color-light('heading') !default;
-$ct-basic-content-light-heading-3-color: ct-color-light('heading') !default;
-$ct-basic-content-light-heading-4-color: ct-color-light('heading') !default;
-$ct-basic-content-light-heading-5-color: ct-color-light('heading') !default;
-$ct-basic-content-light-heading-6-color: ct-color-light('heading') !default;
-$ct-basic-content-light-ol-li-color: ct-color-light('body') !default;
-$ct-basic-content-light-ol-li-marker-color: ct-color-light('body') !default;
-$ct-basic-content-light-ul-li-color: ct-color-light('body') !default;
-$ct-basic-content-light-ul-li-marker-color: ct-color-light('body') !default;
-$ct-basic-content-light-background-color: ct-color-light('background') !default;
-$ct-basic-content-dark-base-color: ct-color-dark('body') !default;
-$ct-basic-content-dark-blockquote-stripe-background-color: ct-color-dark('highlight') !default;
-$ct-basic-content-dark-blockquote-color: ct-color-dark('body') !default;
-$ct-basic-content-dark-blockquote-background-color: ct-color-dark('background-light') !default;
-$ct-basic-content-dark-blockquote-author-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-heading-1-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-heading-2-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-heading-3-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-heading-4-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-heading-5-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-heading-6-color: ct-color-dark('heading') !default;
-$ct-basic-content-dark-ol-li-color: ct-color-dark('body') !default;
-$ct-basic-content-dark-ol-li-marker-color: ct-color-dark('body') !default;
-$ct-basic-content-dark-ul-li-color: ct-color-dark('body') !default;
-$ct-basic-content-dark-ul-li-marker-color: ct-color-dark('body') !default;
-$ct-basic-content-dark-background-color: ct-color-dark('background') !default;
-
-//
-// Breadcrumb.
-//
-$ct-breadcrumb-light-color: ct-color-light('body') !default;
-$ct-breadcrumb-light-active-color: $ct-breadcrumb-light-color !default;
-$ct-breadcrumb-dark-color: ct-color-dark('body') !default;
-$ct-breadcrumb-dark-active-color: $ct-breadcrumb-dark-color !default;
-
-//
-// Callout.
-//
-$ct-callout-border-radius: $ct-border-radius !default;
-$ct-callout-stripe-width: $ct-stripe-size !default;
-$ct-callout-light-background-color: ct-color-light('background') !default;
-$ct-callout-light-stripe-background-color: ct-color-light('highlight') !default;
-$ct-callout-dark-background-color: ct-color-dark('background') !default;
-$ct-callout-dark-stripe-background-color: ct-color-dark('highlight') !default;
-
-//
-// Field.
-//
-$ct-field-horizontal-label-min-width: auto !default;
-$ct-field-horizontal-label-max-width: 25% !default;
-$ct-field-label-fixed-widths: 15, 25 !default;
-
-//
-// Figure.
-//
-$ct-figure-border-radius: $ct-border-radius !default;
-$ct-figure-light-caption-color: ct-color-light('body') !default;
-$ct-figure-dark-caption-color: ct-color-dark('body') !default;
-
-//
-// Logo.
-//
-$ct-logo-breakpoint: 'l' !default;
-$ct-logo-image-height-max-desktop: ct-particle(5) !default;
-$ct-logo-image-height-max-mobile: ct-particle(5) !default;
-$ct-logo-light-stripe-background-color: ct-color-light('border-dark') !default;
-$ct-logo-dark-stripe-background-color: ct-color-dark('border-light') !default;
-
-//
-// Map.
-//
-$ct-map-padding-bottom: 56.25% !default;
-$ct-map-space-horizontal: ct-spacing(7) !default;
-$ct-map-light-wrapper-background-color: ct-color-light('background') !default;
-$ct-map-dark-wrapper-background-color: ct-color-dark('background') !default;
-
-//
-// Next steps.
-//
-$ct-next-step-border-radius: $ct-border-radius !default;
-$ct-next-step-stripe-width: $ct-stripe-size !default;
-$ct-next-step-light-background-color: ct-color-light('background-light') !default;
-$ct-next-step-light-border-color: ct-color-light('border-light') !default;
-$ct-next-step-light-stripe-background-color: ct-color-light('highlight') !default;
-$ct-next-step-dark-background-color: ct-color-dark('background') !default;
-$ct-next-step-dark-border-color: ct-color-dark('border') !default;
-$ct-next-step-dark-stripe-background-color: ct-color-dark('highlight') !default;
-
-//
-// Table Of Contents.
-//
-$ct-table-of-contents-link-active-border-radius: math.div($ct-border-radius, 2) !default;
-$ct-table-of-contents-max-width: 50% !default;
-$ct-table-of-contents-min-width: 50% !default;
-$ct-table-of-contents-light-link-background-color: ct-color-light('background-light') !default;
-$ct-table-of-contents-light-link-color: ct-color-light('heading') !default;
-$ct-table-of-contents-light-link-hover-background-color: ct-color-light('background') !default;
-$ct-table-of-contents-light-link-hover-border-color: ct-color-light('border-light') !default;
-$ct-table-of-contents-light-link-hover-color: $ct-table-of-contents-light-link-color !default;
-$ct-table-of-contents-light-link-stripe-background-color: ct-color-light('border-light') !default;
-$ct-table-of-contents-light-link-hover-stripe-background-color: ct-color-light('highlight') !default;
-$ct-table-of-contents-light-title-color: ct-color-light('heading') !default;
-$ct-table-of-contents-dark-link-background-color: ct-color-dark('background-light') !default;
-$ct-table-of-contents-dark-link-color: ct-color-dark('heading') !default;
-$ct-table-of-contents-dark-link-hover-background-color: ct-color-dark('background') !default;
-$ct-table-of-contents-dark-link-hover-border-color: ct-color-dark('border-light') !default;
-$ct-table-of-contents-dark-link-hover-color: $ct-table-of-contents-dark-link-color !default;
-$ct-table-of-contents-dark-link-stripe-background-color: ct-color-dark('border-light') !default;
-$ct-table-of-contents-dark-link-hover-stripe-background-color: ct-color-dark('highlight') !default;
-$ct-table-of-contents-dark-title-color: ct-color-dark('heading') !default;
-
-//
-// Tabs.
-//
-$ct-tabs-link-border-radius: $ct-border-radius * 2 !default;
-$ct-tabs-light-links-stripe-background-color: ct-color-light('border-light') !default;
-$ct-tabs-light-links-background-color: ct-color-light('background') !default;
-$ct-tabs-light-links-border-color: ct-color-light('border-light') !default;
-$ct-tabs-light-links-active-background-color: ct-color-light('background-light') !default;
-$ct-tabs-light-links-active-border-color: ct-color-light('border-light') !default;
-$ct-tabs-light-panel-background-color: ct-color-light('background') !default;
-$ct-tabs-light-panel-border-color: ct-color-light('border') !default;
-$ct-tabs-dark-links-stripe-background-color: ct-color-dark('border-light') !default;
-$ct-tabs-dark-links-background-color: ct-color-dark('background') !default;
-$ct-tabs-dark-links-border-color: ct-color-dark('border-light') !default;
-$ct-tabs-dark-links-active-background-color: ct-color-dark('background-light') !default;
-$ct-tabs-dark-links-active-border-color: ct-color-dark('border-light') !default;
-$ct-tabs-dark-panel-background-color: ct-color-dark('background') !default;
-$ct-tabs-dark-panel-border-color: ct-color-dark('border') !default;
-
-//
-// Tooltip.
-//
-$ct-tooltip-description-border-radius: $ct-border-radius !default;
-$ct-tooltip-width: ct-particle(60) !default;
-$ct-tooltip-width-mobile: ct-particle(40) !default;
-$ct-tooltip-triangle-width: ct-spacing(3.2) !default;
-$ct-tooltip-triangle-height: ct-spacing(2.6) !default;
-$ct-tooltip-z-index: 99 !default;
-$ct-tooltip-light-description-background-color: ct-color-light('interaction-background') !default;
-$ct-tooltip-light-description-color: ct-color-light('interaction-text') !default;
-$ct-tooltip-light-icon-color: ct-color-light('interaction-background') !default;
-$ct-tooltip-dark-description-background-color: ct-color-dark('interaction-background') !default;
-$ct-tooltip-dark-description-color: ct-color-dark('interaction-text') !default;
-$ct-tooltip-dark-icon-color: ct-color-dark('interaction-background') !default;
-
-//
-// List/Single filter.
-//
-$ct-single-filter-light-border-color: ct-color-light('border-light') !default;
-$ct-single-filter-dark-border-color: ct-color-dark('border') !default;
-
-//
-// List/Group filter.
-//
-$ct-group-filter-light-background-color: ct-color-light('background') !default;
-$ct-group-filter-light-border-color: ct-color-light('border-light') !default;
-$ct-group-filter-light-dropdown-filter-border-color: ct-color-light('border') !default;
-$ct-group-filter-light-filters-legend-color: ct-color-light('body') !default;
-$ct-group-filter-light-mobile-filter-title-color: ct-color-light('background') !default;
-$ct-group-filter-light-mobile-overlay-background-color: ct-color-light('background') !default;
-$ct-group-filter-light-mobile-toggle-background-color: ct-color-light('background') !default;
-$ct-group-filter-light-mobile-toggle-border-color: ct-color-light('border') !default;
-$ct-group-filter-light-mobile-toggle-color: ct-color-light('interaction-background') !default;
-$ct-group-filter-light-mobile-toggle-display-border-color: ct-color-light('border') !default;
-$ct-group-filter-light-mobile-toggle-display-color: ct-color-light('background') !default;
-$ct-group-filter-light-selected-filters-border-color: ct-color-light('border-light') !default;
-$ct-group-filter-light-selected-filters-title-color: ct-color-light('body') !default;
-$ct-group-filter-dark-background-color: ct-color-dark('background') !default;
-$ct-group-filter-dark-border-color: ct-color-dark('border') !default;
-$ct-group-filter-dark-dropdown-filter-border-color: ct-color-dark('interaction-background') !default;
-$ct-group-filter-dark-filters-legend-color: ct-color-dark('body') !default;
-$ct-group-filter-dark-mobile-filter-title-color: ct-color-dark('body') !default;
-$ct-group-filter-dark-mobile-overlay-background-color: ct-color-dark('background') !default;
-$ct-group-filter-dark-mobile-toggle-background-color: ct-color-dark('background') !default;
-$ct-group-filter-dark-mobile-toggle-border-color: ct-color-dark('interaction-background') !default;
-$ct-group-filter-dark-mobile-toggle-color: ct-color-dark('background') !default;
-$ct-group-filter-dark-mobile-toggle-display-border-color: ct-color-dark('interaction-background') !default;
-$ct-group-filter-dark-mobile-toggle-display-color: ct-color-dark('background') !default;
-$ct-group-filter-dark-selected-filters-border-color: ct-color-dark('border-light') !default;
-$ct-group-filter-dark-selected-filters-title-color: ct-color-dark('background') !default;
-
-//
-// List/Pagination.
-//
-$ct-pagination-light-color: ct-color-light('interaction-background') !default;
-$ct-pagination-light-border-color: ct-color-light('border-light') !default;
-$ct-pagination-dark-color: ct-color-dark('interaction-background') !default;
-$ct-pagination-dark-border-color: ct-color-dark('border') !default;
-
-//
-// List/Event card.
-//
-$ct-event-card-border-radius: $ct-border-radius !default;
-$ct-event-card-image-height-desktop: ct-particle(30) !default;
-$ct-event-card-image-height-mobile: ct-particle(25) !default;
-$ct-event-card-image-width-desktop: auto !default;
-$ct-event-card-image-width-mobile: auto !default;
-$ct-event-card-stripe-height: $ct-stripe-size !default;
-$ct-event-card-light-background-color: ct-color-light('background-light') !default;
-$ct-event-card-light-stripe-background-color: ct-color-light('highlight') !default;
-$ct-event-card-dark-background-color: ct-color-dark('background') !default;
-$ct-event-card-dark-stripe-background-color: ct-color-dark('highlight') !default;
-
-//
-// List/Navigation card.
-//
-$ct-navigation-card-border-radius: $ct-border-radius !default;
-$ct-navigation-card-image-height-mobile: ct-particle(35) !default;
-$ct-navigation-card-image-width-mobile: auto !default;
-$ct-navigation-card-image-min-height-desktop: ct-particle(32) !default;
-$ct-navigation-card-image-min-width-desktop: ct-particle(36) !default;
-$ct-navigation-card-image-max-width-desktop: 30% !default;
-$ct-navigation-card-orientation-threshold: $ct-navigation-card-image-min-width-desktop * 2 !default;
-$ct-navigation-card-light-background-color: ct-color-light('background-light') !default;
-$ct-navigation-card-light-icon-color: $ct-link-light-color !default;
-$ct-navigation-card-dark-background-color: ct-color-dark('background') !default;
-$ct-navigation-card-dark-icon-color: $ct-link-dark-color !default;
-
-//
-// List/Promo card.
-//
-$ct-promo-card-border-radius: $ct-border-radius !default;
-$ct-promo-card-image-height-desktop: ct-particle(30) !default;
-$ct-promo-card-image-height-mobile: ct-particle(25) !default;
-$ct-promo-card-image-width-desktop: auto !default;
-$ct-promo-card-image-width-mobile: auto !default;
-$ct-promo-card-stripe-height: $ct-stripe-size !default;
-$ct-promo-card-light-background-color: ct-color-light('background-light') !default;
-$ct-promo-card-light-stripe-background-color: ct-color-light('highlight') !default;
-$ct-promo-card-dark-background-color: ct-color-dark('background') !default;
-$ct-promo-card-dark-stripe-background-color: ct-color-dark('highlight') !default;
-
-//
-// List/Publication card.
-//
-$ct-publication-card-border-radius: $ct-border-radius !default;
-$ct-publication-card-image-height-mobile: ct-particle(23) !default;
-$ct-publication-card-image-width-mobile: auto !default;
-$ct-publication-card-image-height-desktop: ct-particle(23) !default;
-$ct-publication-card-image-width-desktop: 50% !default;
-$ct-publication-card-light-background-color: ct-color-light('background-light') !default;
-$ct-publication-card-dark-background-color: ct-color-dark('background') !default;
-
-//
-// List/Service card.
-//
-$ct-service-card-border-radius: $ct-border-radius !default;
-$ct-service-card-stripe-height: $ct-stripe-size !default;
-$ct-service-card-light-background-color: ct-color-light('background-light') !default;
-$ct-service-card-light-stripe-background-color: ct-color-light('highlight') !default;
-$ct-service-card-dark-background-color: ct-color-dark('background') !default;
-$ct-service-card-dark-stripe-background-color: ct-color-dark('highlight') !default;
-
-//
-// List/Subject card.
-//
-$ct-subject-card-border-radius: $ct-border-radius !default;
-$ct-subject-card-image-height-mobile: ct-particle(20) !default;
-$ct-subject-card-image-width-mobile: auto !default;
-$ct-subject-card-image-height-desktop: ct-particle(28) !default;
-$ct-subject-card-image-width-desktop: auto !default;
-$ct-subject-card-light-background-color: ct-color-light('background-light') !default;
-$ct-subject-card-light-image-opacity: 30% !default;
-$ct-subject-card-dark-background-color: ct-color-dark('background') !default;
-$ct-subject-card-dark-image-opacity: 20% !default;
-
-//
-// List/Snippet.
-//
-$ct-snippet-light-background-color: transparent !default;
-$ct-snippet-dark-background-color: transparent !default;
-
-////////////////////////////////////////////////////////////////////////////////
-// ORGANISMS //
-////////////////////////////////////////////////////////////////////////////////
-
-//
-// Alert.
-//
-$ct-alert-light-divider-color: ct-color-light('interaction-background') !default;
-$ct-alert-light-error-background-color: ct-color-tint(ct-color-constant-light('error'), 80) !default;
-$ct-alert-light-error-color: ct-color-light('body') !default;
-$ct-alert-light-error-icon-color: $ct-alert-light-error-color !default;
-$ct-alert-light-information-background-color: ct-color-tint(ct-color-constant-light('information'), 80) !default;
-$ct-alert-light-information-color: ct-color-light('body') !default;
-$ct-alert-light-information-icon-color: $ct-alert-light-information-color !default;
-$ct-alert-light-success-background-color: ct-color-tint(ct-color-constant-light('success'), 80) !default;
-$ct-alert-light-success-color: ct-color-light('body') !default;
-$ct-alert-light-success-icon-color: $ct-alert-light-success-color !default;
-$ct-alert-light-warning-background-color: ct-color-tint(ct-color-constant-light('warning'), 80) !default;
-$ct-alert-light-warning-color: ct-color-light('body') !default;
-$ct-alert-light-warning-icon-color: $ct-alert-light-warning-color !default;
-$ct-alert-dark-divider-color: ct-color-dark('interaction-background') !default;
-$ct-alert-dark-error-background-color: ct-color-shade(ct-color-constant-dark('error'), 20) !default;
-$ct-alert-dark-error-color: ct-color-dark('body') !default;
-$ct-alert-dark-error-icon-color: $ct-alert-dark-error-color !default;
-$ct-alert-dark-information-background-color: ct-color-shade(ct-color-constant-dark('information'), 20) !default;
-$ct-alert-dark-information-color: ct-color-dark('body') !default;
-$ct-alert-dark-information-icon-color: $ct-alert-dark-information-color !default;
-$ct-alert-dark-success-background-color: ct-color-shade(ct-color-constant-dark('success'), 20) !default;
-$ct-alert-dark-success-color: ct-color-dark('body') !default;
-$ct-alert-dark-success-icon-color: $ct-alert-dark-success-color !default;
-$ct-alert-dark-warning-background-color: ct-color-shade(ct-color-constant-dark('warning'), 20) !default;
-$ct-alert-dark-warning-color: ct-color-dark('body') !default;
-$ct-alert-dark-warning-icon-color: $ct-alert-dark-warning-color !default;
-
-//
-// Banner.
-//
-$ct-banner-decorative-mobile-clip-path: polygon(0% 0%, 100% 0%, 100% calc(100% - #{ct-spacing(2)}), 0% 100%) !default;
-$ct-banner-decorative-desktop-clip-path: polygon(0% 0%, 100% 0%, 100% calc(100% - #{ct-spacing(6)}), 0% 100%) !default;
-$ct-banner-featured-image-width: 40% !default;
-$ct-banner-featured-image-clip-path: polygon(13% 10%, 100% 0, 100% 100%, 0% 100%) !default;
-$ct-banner-light-background-color: ct-color-light('background') !default;
-$ct-banner-light-featured-image-shadow-color: ct-color-light('background-light') !default;
-$ct-banner-dark-background-color: ct-color-dark('background') !default;
-$ct-banner-dark-featured-image-shadow-color: ct-color-dark('background') !default;
-
-//
-// Campaign.
-//
-$ct-campaign-image-border-radius: $ct-border-radius !default;
-$ct-campaign-image-shadow-offset-x: ct-particle(2) !default;
-$ct-campaign-image-shadow-offset-y: ct-particle(2) !default;
-$ct-campaign-mobile-height: ct-particle(30) !default;
-$ct-campaign-light-background-color: ct-color-light('background-light') !default;
-$ct-campaign-light-image-shadow-color: ct-color-light('background') !default;
-$ct-campaign-dark-background-color: ct-color-dark('background') !default;
-$ct-campaign-dark-image-shadow-color: ct-color-dark('background-dark') !default;
-
-//
-// Footer.
-//
-$ct-footer-light-background-color: ct-color-light('background') !default;
-$ct-footer-light-border-color: ct-color-light('border-light') !default;
-$ct-footer-light-color: ct-color-light('body') !default;
-$ct-footer-dark-background-color: ct-color-dark('background-dark') !default;
-$ct-footer-dark-border-color: ct-color-dark('border') !default;
-$ct-footer-dark-color: ct-color-dark('body') !default;
-
-//
-// Header.
-//
-$ct-header-desktop-menu-breakpoint: 'm' !default;
-$ct-header-light-middle-background-color: ct-color-light('background-light') !default;
-$ct-header-light-middle-border-color: ct-color-light('border-light') !default;
-$ct-header-light-top-background-color: ct-color-light('background') !default;
-$ct-header-light-top-color: ct-color-light('body') !default;
-$ct-header-dark-middle-background-color: ct-color-dark('background') !default;
-$ct-header-dark-middle-border-color: ct-color-dark('border') !default;
-$ct-header-dark-top-background-color: ct-color-dark('background-dark') !default;
-$ct-header-dark-top-color: ct-color-dark('body') !default;
-
-//
-// List.
-//
-$ct-list-light-background-color: ct-color-light('background') !default;
-$ct-list-light-color: ct-color-light('body') !default;
-$ct-list-dark-background-color: ct-color-dark('background') !default;
-$ct-list-dark-color: ct-color-dark('body') !default;
-
-//
-// Message.
-//
-$ct-message-border-radius: $ct-border-radius !default;
-$ct-message-light-error-background-color: ct-color-tint(ct-color-constant-light('error'), 80) !default;
-$ct-message-light-error-border-color: ct-color-light('error') !default;
-$ct-message-light-error-color: ct-color-light('body') !default;
-$ct-message-light-error-icon-color: $ct-message-light-error-color !default;
-$ct-message-light-information-background-color: ct-color-tint(ct-color-constant-light('information'), 80) !default;
-$ct-message-light-information-border-color: ct-color-light('information') !default;
-$ct-message-light-information-color: ct-color-light('body') !default;
-$ct-message-light-information-icon-color: $ct-message-light-information-color !default;
-$ct-message-light-success-border-color: ct-color-light('success') !default;
-$ct-message-light-success-background-color: ct-color-tint(ct-color-constant-light('success'), 80) !default;
-$ct-message-light-success-color: ct-color-light('body') !default;
-$ct-message-light-success-icon-color: $ct-message-light-success-color !default;
-$ct-message-light-warning-background-color: ct-color-tint(ct-color-constant-light('warning'), 80) !default;
-$ct-message-light-warning-border-color: ct-color-light('warning') !default;
-$ct-message-light-warning-color: ct-color-light('body') !default;
-$ct-message-light-warning-icon-color: $ct-message-light-warning-color !default;
-$ct-message-dark-error-background-color: ct-color-shade(ct-color-constant-dark('error'), 20) !default;
-$ct-message-dark-error-border-color: ct-color-dark('error') !default;
-$ct-message-dark-error-color: ct-color-dark('body') !default;
-$ct-message-dark-error-icon-color: $ct-message-dark-error-color !default;
-$ct-message-dark-information-background-color: ct-color-shade(ct-color-constant-dark('information'), 20) !default;
-$ct-message-dark-information-border-color: ct-color-dark('information') !default;
-$ct-message-dark-information-color: ct-color-dark('body') !default;
-$ct-message-dark-information-icon-color: $ct-message-dark-information-color !default;
-$ct-message-dark-success-border-color: ct-color-dark('success') !default;
-$ct-message-dark-success-background-color: ct-color-shade(ct-color-constant-dark('success'), 20) !default;
-$ct-message-dark-success-color: ct-color-dark('body') !default;
-$ct-message-dark-success-icon-color: $ct-message-dark-success-color !default;
-$ct-message-dark-warning-background-color: ct-color-shade(ct-color-constant-dark('warning'), 20) !default;
-$ct-message-dark-warning-border-color: ct-color-dark('warning') !default;
-$ct-message-dark-warning-color: ct-color-dark('body') !default;
-$ct-message-dark-warning-icon-color: $ct-message-dark-warning-color !default;
-
-//
-// Navigation
-//
-// Navigation can be rendered in 3 ways: plain, with dropdown and with drawer.
-
-// Inline.
-$ct-navigation-inline-column-gutter: $ct-item-list-horizontal-regular-column-gap !default;
-$ct-navigation-inline-row-gutter: $ct-item-list-horizontal-regular-column-gap !default;
-
-// Dropdown.
-$ct-navigation-dropdown-zindex: 11 !default;
-$ct-navigation-dropdown-border-radius: $ct-border-radius !default;
-
-// Top offset for the drawer from the bottom of the trigger.
-$ct-navigation-dropdown-top-offset: ct-spacing() !default;
-
-// Colors.
-$ct-navigation-light-dropdown-sub-menu-background-color: ct-color-light('background-light') !default;
-$ct-navigation-dark-dropdown-sub-menu-background-color: ct-color-dark('background-light') !default;
-
-// Drawer.
-$ct-navigation-drawer-zindex: 10 !default;
-
-// Maximum number of columns a drawer may have.
-$ct-navigation-drawer-cols: 4 !default;
-
-// Top offset for the drawer from the bottom of the trigger.
-$ct-navigation-drawer-top-offset: ct-spacing(2) !default;
-
-// Gutter size between the drawer columns.
-$ct-navigation-drawer-column-gutter: ct-spacing(4) !default;
-
-// Colors.
-$ct-navigation-light-menu-border-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-menu-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-menu-hover-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-menu-active-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-menu-item-background-color: transparent !default;
-$ct-navigation-light-menu-item-border-color: transparent !default;
-$ct-navigation-light-menu-item-hover-background-color: transparent !default;
-$ct-navigation-light-menu-item-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-menu-item-active-background-color: transparent !default;
-$ct-navigation-light-menu-item-active-border-color: ct-color-light('highlight') !default;
-$ct-navigation-light-menu-item-active-trail-background-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-menu-item-active-trail-color: ct-color-light('background') !default;
-$ct-navigation-light-drawer-border-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-drawer-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-drawer-hover-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-drawer-active-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-drawer-menu-item-background-color: transparent !default;
-$ct-navigation-light-drawer-menu-item-border-color: transparent !default;
-$ct-navigation-light-drawer-menu-item-hover-background-color: transparent !default;
-$ct-navigation-light-drawer-menu-item-hover-border-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-drawer-menu-item-active-background-color: transparent !default;
-$ct-navigation-light-drawer-menu-item-active-border-color: ct-color-light('highlight') !default;
-$ct-navigation-light-drawer-menu-item-active-trail-background-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-drawer-menu-item-active-trail-color: ct-color-light('background') !default;
-$ct-navigation-light-drawer-sub-menu-background-color: ct-color-light('background-light') !default;
-$ct-navigation-light-drawer-sub-menu-item-background-color: transparent !default;
-$ct-navigation-light-drawer-sub-menu-item-heading-color: ct-color-light('heading') !default;
-$ct-navigation-light-drawer-sub-menu-item-heading-hover-color: ct-color-light('heading') !default;
-$ct-navigation-light-drawer-sub-menu-item-heading-active-color: ct-color-light('heading') !default;
-$ct-navigation-light-drawer-sub-menu-item-color: ct-color-light('interaction-background') !default;
-$ct-navigation-light-drawer-sub-menu-item-hover-background-color: ct-color-light('interaction-hover-background') !default;
-$ct-navigation-light-drawer-sub-menu-item-hover-color: ct-color-light('interaction-hover-text') !default;
-$ct-navigation-light-drawer-sub-menu-item-active-background-color: ct-color-light('body') !default;
-$ct-navigation-light-drawer-sub-menu-item-active-color: ct-color-light('background') !default;
-$ct-navigation-dark-menu-border-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-menu-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-menu-hover-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-menu-active-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-menu-item-background-color: transparent !default;
-$ct-navigation-dark-menu-item-border-color: transparent !default;
-$ct-navigation-dark-menu-item-hover-background-color: transparent !default;
-$ct-navigation-dark-menu-item-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-menu-item-active-background-color: transparent !default;
-$ct-navigation-dark-menu-item-active-border-color: ct-color-dark('highlight') !default;
-$ct-navigation-dark-menu-item-active-trail-background-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-menu-item-active-trail-color: ct-color-dark('background') !default;
-$ct-navigation-dark-drawer-border-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-drawer-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-drawer-hover-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-drawer-active-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-drawer-menu-item-background-color: transparent !default;
-$ct-navigation-dark-drawer-menu-item-border-color: transparent !default;
-$ct-navigation-dark-drawer-menu-item-hover-background-color: transparent !default;
-$ct-navigation-dark-drawer-menu-item-hover-border-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-drawer-menu-item-active-background-color: transparent !default;
-$ct-navigation-dark-drawer-menu-item-active-border-color: ct-color-dark('highlight') !default;
-$ct-navigation-dark-drawer-menu-item-active-trail-background-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-drawer-menu-item-active-trail-color: ct-color-dark('background') !default;
-$ct-navigation-dark-drawer-sub-menu-background-color: ct-color-dark('background-light') !default;
-$ct-navigation-dark-drawer-sub-menu-item-background-color: transparent !default;
-$ct-navigation-dark-drawer-sub-menu-item-heading-color: ct-color-dark('heading') !default;
-$ct-navigation-dark-drawer-sub-menu-item-heading-hover-color: ct-color-dark('heading') !default;
-$ct-navigation-dark-drawer-sub-menu-item-heading-active-color: ct-color-dark('heading') !default;
-$ct-navigation-dark-drawer-sub-menu-item-color: ct-color-dark('interaction-background') !default;
-$ct-navigation-dark-drawer-sub-menu-item-hover-background-color: ct-color-dark('interaction-hover-background') !default;
-$ct-navigation-dark-drawer-sub-menu-item-hover-color: ct-color-dark('interaction-hover-text') !default;
-$ct-navigation-dark-drawer-sub-menu-item-active-background-color: ct-color-dark('body') !default;
-$ct-navigation-dark-drawer-sub-menu-item-active-color: ct-color-dark('background') !default;
-
-// @todo Remove this in favour of inline classes.
-$ct-navigation-breakpoint: $ct-header-desktop-menu-breakpoint !default;
-
-//
-// Navigation/Side navigation.
-//
-$ct-side-navigation-link-active-border-radius: math.div($ct-border-radius, 2) !default;
-$ct-side-navigation-light-title-color: ct-color-light('heading') !default;
-$ct-side-navigation-light-link-expanded-icon-color: ct-color-light('heading') !default;
-$ct-side-navigation-light-link-parent-background-color: ct-color-light('background-light') !default;
-$ct-side-navigation-light-link-parent-border-color: ct-color-light('border-light') !default;
-$ct-side-navigation-light-link-parent-color: ct-color-light('heading') !default;
-$ct-side-navigation-light-link-parent-stripe-background-color: ct-color-light('border-light') !default;
-$ct-side-navigation-light-link-parent-hover-background-color: ct-color-light('background-dark') !default;
-$ct-side-navigation-light-link-parent-hover-border-color: $ct-side-navigation-light-link-parent-border-color !default;
-$ct-side-navigation-light-link-parent-hover-color: $ct-side-navigation-light-link-parent-color !default;
-$ct-side-navigation-light-link-parent-hover-stripe-background-color: ct-color-light('highlight') !default;
-$ct-side-navigation-light-link-parent-active-background-color: ct-color-light('background') !default;
-$ct-side-navigation-light-link-parent-active-border-color: $ct-side-navigation-light-link-parent-border-color !default;
-$ct-side-navigation-light-link-parent-active-color: $ct-side-navigation-light-link-parent-color !default;
-$ct-side-navigation-light-link-parent-active-stripe-background-color: ct-color-light('highlight') !default;
-$ct-side-navigation-light-link-child-background-color: $ct-side-navigation-light-link-parent-background-color !default;
-$ct-side-navigation-light-link-child-border-color: $ct-side-navigation-light-link-parent-border-color !default;
-$ct-side-navigation-light-link-child-color: $ct-side-navigation-light-link-parent-color !default;
-$ct-side-navigation-light-link-child-stripe-background-color: $ct-side-navigation-light-link-parent-stripe-background-color !default;
-$ct-side-navigation-light-link-child-hover-background-color: $ct-side-navigation-light-link-parent-hover-background-color !default;
-$ct-side-navigation-light-link-child-hover-border-color: $ct-side-navigation-light-link-child-border-color !default;
-$ct-side-navigation-light-link-child-hover-color: $ct-side-navigation-light-link-child-color !default;
-$ct-side-navigation-light-link-child-hover-stripe-background-color: ct-color-light('highlight') !default;
-$ct-side-navigation-light-link-child-active-background-color: ct-color-light('background') !default;
-$ct-side-navigation-light-link-child-active-border-color: $ct-side-navigation-light-link-child-border-color !default;
-$ct-side-navigation-light-link-child-active-color: $ct-side-navigation-light-link-child-color !default;
-$ct-side-navigation-light-link-child-active-stripe-background-color: $ct-side-navigation-light-link-child-hover-stripe-background-color !default;
-$ct-side-navigation-dark-title-color: ct-color-dark('heading') !default;
-$ct-side-navigation-dark-link-expanded-icon-color: ct-color-dark('heading') !default;
-$ct-side-navigation-dark-link-parent-background-color: ct-color-dark('background-light') !default;
-$ct-side-navigation-dark-link-parent-border-color: ct-color-dark('interaction-text') !default;
-$ct-side-navigation-dark-link-parent-color: ct-color-dark('heading') !default;
-$ct-side-navigation-dark-link-parent-stripe-background-color: ct-color-dark('interaction-text') !default;
-$ct-side-navigation-dark-link-parent-hover-background-color: ct-color-dark('background-dark') !default;
-$ct-side-navigation-dark-link-parent-hover-border-color: $ct-side-navigation-dark-link-parent-border-color !default;
-$ct-side-navigation-dark-link-parent-hover-color: $ct-side-navigation-dark-link-parent-color !default;
-$ct-side-navigation-dark-link-parent-hover-stripe-background-color: ct-color-dark('highlight') !default;
-$ct-side-navigation-dark-link-parent-active-background-color: ct-color-dark('background') !default;
-$ct-side-navigation-dark-link-parent-active-border-color: $ct-side-navigation-dark-link-parent-border-color !default;
-$ct-side-navigation-dark-link-parent-active-color: $ct-side-navigation-dark-link-parent-color !default;
-$ct-side-navigation-dark-link-parent-active-stripe-background-color: ct-color-dark('highlight') !default;
-$ct-side-navigation-dark-link-child-background-color: $ct-side-navigation-dark-link-parent-background-color !default;
-$ct-side-navigation-dark-link-child-border-color: $ct-side-navigation-dark-link-parent-border-color !default;
-$ct-side-navigation-dark-link-child-color: $ct-side-navigation-dark-link-parent-color !default;
-$ct-side-navigation-dark-link-child-stripe-background-color: $ct-side-navigation-dark-link-parent-stripe-background-color !default;
-$ct-side-navigation-dark-link-child-hover-background-color: $ct-side-navigation-dark-link-parent-hover-background-color !default;
-$ct-side-navigation-dark-link-child-hover-border-color: $ct-side-navigation-dark-link-child-border-color !default;
-$ct-side-navigation-dark-link-child-hover-color: $ct-side-navigation-dark-link-child-color !default;
-$ct-side-navigation-dark-link-child-hover-stripe-background-color: ct-color-dark('highlight') !default;
-$ct-side-navigation-dark-link-child-active-background-color: ct-color-dark('background') !default;
-$ct-side-navigation-dark-link-child-active-border-color: $ct-side-navigation-dark-link-child-border-color !default;
-$ct-side-navigation-dark-link-child-active-color: $ct-side-navigation-dark-link-child-color !default;
-$ct-side-navigation-dark-link-child-active-stripe-background-color: $ct-side-navigation-dark-link-child-hover-stripe-background-color !default;
-
-//
-// Navigation/Mobile navigation.
-//
-$ct-mobile-navigation-breakpoint: $ct-header-desktop-menu-breakpoint !default;
-$ct-mobile-navigation-light-panel-background-color: ct-color-light('background-light') !default;
-$ct-mobile-navigation-light-top-menu-background-color: $ct-mobile-navigation-light-panel-background-color !default;
-$ct-mobile-navigation-light-bottom-menu-background-color: ct-color-light('background') !default;
-$ct-mobile-navigation-light-menu-item-color: ct-color-light('interaction-background') !default;
-$ct-mobile-navigation-light-menu-item-hover-color: $ct-mobile-navigation-light-menu-item-color !default;
-$ct-mobile-navigation-light-menu-divider-border-color: ct-color-light('border-light') !default;
-$ct-mobile-navigation-light-subsection-heading-color: ct-color-light('heading') !default;
-$ct-mobile-navigation-light-subsection-heading-icon-color: $ct-mobile-navigation-light-subsection-heading-color !default;
-$ct-mobile-navigation-light-subsection-trigger-color: ct-color-light('interaction-background') !default;
-$ct-mobile-navigation-trigger-light-color: ct-color-light('interaction-background') !default;
-$ct-mobile-navigation-dark-panel-background-color: ct-color-dark('background') !default;
-$ct-mobile-navigation-dark-top-menu-background-color: $ct-mobile-navigation-dark-panel-background-color !default;
-$ct-mobile-navigation-dark-bottom-menu-background-color: ct-color-dark('background-dark') !default;
-$ct-mobile-navigation-dark-menu-item-color: ct-color-dark('interaction-background') !default;
-$ct-mobile-navigation-dark-menu-item-hover-color: $ct-mobile-navigation-dark-menu-item-color !default;
-$ct-mobile-navigation-dark-menu-divider-border-color: ct-color-dark('border') !default;
-$ct-mobile-navigation-dark-subsection-heading-color: ct-color-dark('heading') !default;
-$ct-mobile-navigation-dark-subsection-heading-icon-color: $ct-mobile-navigation-dark-subsection-heading-color !default;
-$ct-mobile-navigation-dark-subsection-trigger-color: ct-color-dark('interaction-background') !default;
-$ct-mobile-navigation-trigger-dark-color: ct-color-dark('interaction-background') !default;
-
-//
-// Promo.
-//
-$ct-promo-light-background-color: ct-color-light('background-light') !default;
-$ct-promo-light-border-color: ct-color-light('border-light') !default;
-$ct-promo-dark-background-color: ct-color-dark('background') !default;
-$ct-promo-dark-border-color: ct-color-dark('border') !default;
-$ct-promo-space-horizontal: ct-spacing(7) !default;
-
-//
-// Skip link.
-//
-$ct-skip-link-light-background-color: ct-color-light('background') !default;
-$ct-skip-link-dark-background-color: ct-color-dark('background') !default;
-
-//
-// Slider.
-//
-$ct-slider-border-radius: $ct-border-radius !default;
-$ct-slider-space-horizontal: ct-spacing(7) !default;
-$ct-slider-slide-desktop-min-height: ct-particle(35) !default;
-$ct-slider-slide-mobile-min-height: ct-particle(35) !default;
-$ct-slider-mobile-transition: 0.5s !default;
-$ct-slider-desktop-transition: 1s !default;
-$ct-slider-light-background-color: ct-color-light('background-light') !default;
-$ct-slider-light-slide-background-color: ct-color-light('background') !default;
-$ct-slider-dark-background-color: ct-color-dark('background') !default;
-$ct-slider-dark-slide-background-color: ct-color-dark('background-dark') !default;
-
-//
-// Webform.
-//
-$ct-webform-space-horizontal: ct-spacing(7) !default;
-$ct-webform-light-background-color: ct-color-light('background') !default;
-$ct-webform-dark-background-color: ct-color-dark('background') !default;
-
-//
-// Page.
-//
-$ct-page-light-background-color: ct-color-light('background-light') !default;
-$ct-page-dark-background-color: ct-color-dark('background-dark') !default;
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.js
deleted file mode 100644
index 28d82b721b..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// phpcs:ignoreFile
-import AboutCivicThemeStoryTemplate from './about-civictheme.stories.twig';
-
-export default {
- title: 'About CivicTheme',
- parameters: {
- layout: 'fullscreen',
- options: { showPanel: false },
- showPanel: false,
- },
-};
-
-export const AboutCivicTheme = () => AboutCivicThemeStoryTemplate({
- logos: {
- primary: {
- mobile: {
- url: LOGOS.light.civictheme.mobile,
- },
- desktop: {
- url: LOGOS.light.civictheme.desktop,
- },
- },
- },
-});
-
-AboutCivicTheme.storyName = 'About CivicTheme';
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.scss
deleted file mode 100644
index d96c9fd5e4..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-.story-about-civictheme {
- // CivicTheme's own brand color.
- background-color: #003f56;
-
- .ct-logo {
- .ct-logo__image--mobile {
- max-height: ct-particle(6);
- }
-
- .ct-logo__image--desktop {
- max-height: ct-particle(12);
- }
- }
-
- .ct-heading {
- margin-top: ct-spacing(3);
-
- @include ct-breakpoint(m) {
- margin-top: 0;
- }
- }
-
- .ct-item-list__item {
- display: flex;
- padding-left: 0;
- align-items: center;
-
- .ct-paragraph {
- padding-left: ct-spacing(2);
- margin-bottom: 0;
- }
-
- .ct-icon {
- overflow: visible;
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.twig
deleted file mode 100644
index 25c64f97be..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/about-civictheme/about-civictheme.stories.twig
+++ /dev/null
@@ -1,219 +0,0 @@
-{#
-/**
- * @file
- * About CivicTheme story template.
- */
-#}
-
-
-
-
-
- {% include '@molecules/logo/logo.twig' with {
- theme: 'light',
- logos: logos,
- url: 'https://civictheme.io/',
- } only %}
-
-
-
-
-
-
-
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'CivicTheme is an open-source design system build for modern web development. It offers a comprehensive suite of customisable components and templates designed to streamline the creation of visually appealing and highly functional websites.',
- } only %}
-
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'With a strong emphasis on accessibility compliance, CivicTheme ensures compliance with WCAG 2.2 standards and the platform\'s responsive design provides a seamless user experience across various devices and screen sizes. The rich library of pre-built components, such as buttons, forms, and navigation menus, allow developers to quickly integrate essential features into their projects, significantly reducing development time and costs.',
- } only %}
-
-
-
- {% include '@atoms/heading/heading.twig' with {
- theme: 'dark',
- content: 'Key benefits',
- level: 3,
- } only %}
-
- {% set list_item1 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'layer',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: list_item_icon_1 ~ ' Atomic design system of 60+ components',
- allow_html: true,
- } only %}
- {% endset %}
-
- {% set list_item2 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'eye',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Compliant with WCAG 2.2 AA Standards',
- } only %}
- {% endset %}
-
- {% set list_item3 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'water-drop',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Integrates with Drupal theme',
- } only %}
- {% endset %}
-
- {% set list_item4 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'open-source',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Open source and community-driven',
- } only %}
- {% endset %}
-
- {% include '@base/item-list/item-list.twig' with {
- direction: 'vertical',
- items: [
- list_item1,
- list_item2,
- list_item3,
- list_item4,
- ],
- } only %}
-
-
-
-
- {% include '@atoms/heading/heading.twig' with {
- theme: 'dark',
- content: 'Key features',
- level: 3,
- } only %}
-
- {% set list_item1 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'web',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Enhanced user experience',
- } only %}
- {% endset %}
-
- {% set list_item2 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'mobile',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Responsive design and consistent branding',
- } only %}
- {% endset %}
-
- {% set list_item3 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'layers',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Scalable and flexible for evolving needs',
- } only %}
- {% endset %}
-
- {% set list_item4 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'document',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Documentation and support',
- } only %}
- {% endset %}
-
- {% include '@base/item-list/item-list.twig' with {
- direction: 'vertical',
- items: [
- list_item1,
- list_item2,
- list_item3,
- list_item4,
- ],
- } only %}
-
-
-
-
-
-
-
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'CivicTheme\'s focus on consistent branding and design aims to ensure that organisations can maintain a cohesive online presence, reinforcing their brand identity across all digital touchpoints.',
- } only %}
-
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'Ultimately, CivicTheme\'s blend of flexibility, scalability, and cost efficiency makes it an ideal choice for organisations seeking to create professional, user-friendly websites without the need for extensive development resources.',
- } only %}
-
-
-
-
-
- {% include '@atoms/heading/heading.twig' with {
- theme: 'dark',
- content: 'Under the following conditions:',
- level: 5,
- } only %}
-
- {% set list_item1 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'lock-file',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'This page must remain in Figma.',
- } only %}
- {% endset %}
-
- {% set list_item2 %}
- {% include '@base/icon/icon.twig' with {
- symbol: 'lock-gallery',
- size: 'large',
- } only %}
- {% include '@atoms/paragraph/paragraph.twig' with {
- theme: 'dark',
- content: 'The co-branded logo must remain in Storybook and must not be deleted.',
- } only %}
- {% endset %}
-
- {% include '@base/item-list/item-list.twig' with {
- direction: 'vertical',
- items: [
- list_item1,
- list_item2,
- ],
- } only %}
-
-
-
-
-
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.scss
deleted file mode 100644
index 1fbc31733f..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Background component.
-//
-
-@mixin ct-background() {
- & {
- background-position: center;
- background-repeat: no-repeat;
- background-size: cover;
- }
-}
-
-.ct-background {
- @include ct-background();
-}
-
-// Generate .ct-background--[blend-mode] classes that can be added to elements.
-@include ct-generate-class-variations-from-map($ct-background-blend-modes, 'ct-background', true) using($key, $value, $index) {
- background-blend-mode: $value;
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.stories.js
deleted file mode 100644
index 4708d90901..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.stories.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// phpcs:ignoreFile
-import { knobColor, knobSelect, objectFromArray, shouldRender } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Background',
- parameters: {
- layout: 'centered',
- storyLayoutSize: 'large',
- storyLayoutClass: 'story-background-wrapper',
- },
-};
-
-export const Background = (parentKnobs = {}) => {
- const knobs = {
- url: knobSelect('Background', Object.keys(BACKGROUNDS), Object.keys(BACKGROUNDS)[0], parentKnobs.bgImageUrl, parentKnobs.knobTab),
- color: knobColor('Background color', '#003a4f', parentKnobs.bgColor, parentKnobs.knobTab),
- blend_mode: knobSelect(
- 'Blend mode',
- objectFromArray(SCSS_VARIABLES['ct-background-blend-modes']),
- SCSS_VARIABLES['ct-background-blend-modes'][0],
- parentKnobs.blendMode,
- parentKnobs.knobTab,
- ),
- };
-
- return shouldRender(parentKnobs)
- ? `
`
- : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.stories.scss
deleted file mode 100644
index df80adcc71..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.stories.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// Background component stories.
-//
-#root {
- > .story-layout {
- &.story-background-wrapper {
- position: absolute;
- width: 80%;
- height: 80%;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
-
- .ct-background {
- height: 100%;
- width: 100%;
- }
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.utils.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.utils.js
deleted file mode 100644
index 7cba385276..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/background/background.utils.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// phpcs:ignoreFile
-/**
- * @file
- * Background component utilities.
- */
-
-const fs = require('fs');
-const pathUtil = require('path');
-
-const dir = '../../../assets/backgrounds';
-const basePath = pathUtil.resolve(__dirname, dir);
-const paths = fs.readdirSync(basePath);
-
-function getBackgrounds() {
- const urls = {};
- paths.forEach((path) => {
- urls[path] = `${dir.replace('../../../', '')}/${path}`;
- });
- return urls;
-}
-
-module.exports = {
- getBackgrounds,
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.js
deleted file mode 100644
index 9979ca05b7..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.js
+++ /dev/null
@@ -1,463 +0,0 @@
-// phpcs:ignoreFile
-/**
- * @file
- * Collapsible component.
- *
- * Attaches to markup with 'data-collapsible' attribute.
- * Available attributes:
- * - data-collapsible-trigger - trigger for the collapsible. If not provided,
- * then the first descendant will be used.
- * - data-collapsible-panel - panel for the collapsible. If not provided,
- * then the second descendant will be used.
- * - data-collapsible-collapsed - indicate that a starting state is collapsed.
- * - data-collapsible-duration - duration in milliseconds. Defaults to 500.
- * - data-collapsible-group-enabled-breakpoint - enable grouping at breakpoint.
- * Needs 'data-responsive' attribute.
- */
-function CivicThemeCollapsible(el) {
- // Use "data-collapsible"'s attribute value to identify if this component was
- // already initialised.
- if (el.getAttribute('data-collapsible') === 'true' || this.el) {
- return;
- }
-
- const trigger = this.getTrigger(el);
- const panel = this.getPanel(el);
-
- // Exit early if trigger or panel were not found.
- if (!trigger || !panel) {
- return;
- }
-
- this.el = el;
- this.trigger = trigger;
- this.panel = panel;
- this.collapsed = this.isCollapsed(el);
- this.duration = this.el.hasAttribute('data-collapsible-duration') ? this.el.getAttribute('data-collapsible-duration') : 500;
- this.group = this.el.hasAttribute('data-collapsible-group') ? this.el.getAttribute('data-collapsible-group') : null;
- this.icon = ' ';
- this.iconGroupEnabled = this.el.hasAttribute('data-collapsible-icon-group');
-
- // Make sure that both trigger and a panel have required attributes set.
- this.trigger.setAttribute('data-collapsible-trigger', '');
- this.panel.setAttribute('data-collapsible-panel', '');
-
- if (!this.panel.hasAttribute('data-collapsible-trigger-no-icon') && !this.trigger.querySelector('.ct-collapsible__icon')) {
- const iconEl = this.htmlToElement(this.icon);
- iconEl.classList.add('ct-collapsible__icon');
- // If multiple words - use last word and icon grouping.
- if (this.iconGroupEnabled) {
- const text = this.trigger.innerText.trim();
- const lastWordIndex = text.lastIndexOf(' ');
- const lastWord = lastWordIndex >= 0 ? text.substring(lastWordIndex + 1) : text;
- const firstWords = lastWordIndex >= 0 ? text.substring(0, lastWordIndex + 1) : '';
- const iconGroupEl = this.htmlToElement(`${lastWord} `);
- iconGroupEl.append(iconEl);
- this.trigger.innerHTML = firstWords;
- this.trigger.append(iconGroupEl);
- } else {
- this.trigger.append(iconEl);
- }
- }
-
- // Attach event listener.
- this.trigger.addEventListener('click', this.clickEvent.bind(this));
- this.trigger.addEventListener('keydown', this.keydownEvent.bind(this.trigger));
- this.trigger.addEventListener('focusout', this.focusoutEvent.bind(this));
- this.panel.addEventListener('click', (e) => e.stopPropagation());
- this.panel.addEventListener('focusout', this.focusoutEvent.bind(this));
-
- // Collapse if was set as initially collapsed.
- if (this.collapsed) {
- this.collapse();
- // Init focusable elements for data-collapsible-collapsed only.
- this.initFocusableElements(this.panel);
- }
-
- this.el.addEventListener('ct.collapsible.collapse', (evt) => {
- // For some cases (like group collapse) - the animation should be disabled.
- const animate = (evt.detail && evt.detail.animate);
- const isCloseAllEvent = (evt.detail && evt.detail.closeAll);
- if ((isCloseAllEvent && this.isGroupsEnabled) || !isCloseAllEvent) {
- this.collapse(animate, evt);
- }
- });
-
- this.el.addEventListener('ct.collapsible.expand', () => {
- this.expand(true);
- });
-
- this.el.addEventListener('ct.collapsible.toggle', () => {
- if (this.isCollapsed(this.el)) {
- this.el.dispatchEvent(new CustomEvent('ct.collapsible.expand', { bubbles: true }));
- } else {
- this.el.dispatchEvent(new CustomEvent('ct.collapsible.collapse', { bubbles: true, detail: { animate: true } }));
- }
- });
-
- // Attach global keydown event listener to allow closing all collapsibles.
- document.addEventListener('keydown', CivicThemeCollapsible.prototype.keydownEvent);
- document.addEventListener('click', CivicThemeCollapsible.prototype.collapseAllGroups);
-
- // Responsive Collapsible Group.
- this.isGroupsEnabled = true;
- this.groupEnabledBreakpoint = this.el.getAttribute('data-collapsible-group-enabled-breakpoint');
- if (this.groupEnabledBreakpoint) {
- window.addEventListener('ct-responsive', (evt) => {
- const evaluationResult = evt.detail.evaluate(this.groupEnabledBreakpoint, () => {
- // Is within breakpoint.
- this.isGroupsEnabled = true;
- });
- if (evaluationResult === false) {
- // Not within breakpoint.
- this.isGroupsEnabled = false;
- }
- }, false);
- }
-
- // Mark as initialized.
- this.el.setAttribute('data-collapsible', 'true');
- this.trigger.setAttribute('aria-expanded', !this.collapsed);
-}
-
-/**
- * Destroy an instance.
- */
-CivicThemeCollapsible.prototype.destroy = function (el) {
- if (el.getAttribute('data-collapsible') !== 'true' || !this.el) {
- return;
- }
- const trigger = el.querySelector('[data-collapsible-trigger]') || el.firstElementChild;
- const panel = el.querySelector('[data-collapsible-panel]') || el.firstElementChild.nextElementSibling;
-
- // Exit early if trigger or panel were not found.
- if (!trigger || !panel) {
- return;
- }
-
- this.el = el;
- this.trigger = trigger;
- this.panel = panel;
-
- // Remove any attached event listeners.
- // eslint-disable-next-line no-self-assign
- this.trigger.outerHTML = this.trigger.outerHTML;
- // Remove inline overrides.
- this.panel.style.height = '';
- this.panel.style.overflow = '';
-
- this.trigger.removeAttribute('aria-expanded');
- this.panel.removeAttribute('aria-hidden');
-
- // Mark as non-initialized.
- this.el.setAttribute('data-collapsible', '');
-
- delete this.el;
- delete this.trigger;
- delete this.panel;
- delete this.collapsed;
- delete this.duration;
- delete this.group;
-};
-
-/**
- * Click event handler.
- */
-CivicThemeCollapsible.prototype.clickEvent = function (e) {
- e.stopPropagation();
- e.preventDefault();
- e.stopImmediatePropagation();
-
- if (this.group) {
- this.closeGroup(this.group);
- }
-
- if (this.collapsed) {
- this.el.dispatchEvent(new CustomEvent('ct.collapsible.expand', { bubbles: true }));
- } else {
- this.el.dispatchEvent(new CustomEvent('ct.collapsible.collapse', { bubbles: true, detail: { animate: true } }));
- }
-};
-
-/**
- * Focusout event handler.
- */
-CivicThemeCollapsible.prototype.focusoutEvent = function (e) {
- // Close when trigger or panel leaves a focus, but only for grouped ones.
- if (
- e.relatedTarget
- && !this.panel.contains(e.relatedTarget)
- && !this.trigger.contains(e.relatedTarget)
- && this.group
- && this.isGroupsEnabled
- ) {
- e.target.dispatchEvent(new CustomEvent('ct.collapsible.collapse', { bubbles: true }));
- }
-};
-
-/**
- * React on pressed keys.
- */
-CivicThemeCollapsible.prototype.keydownEvent = function (e) {
- if (!/(32|27|38|40)/.test(e.which) || e.altKey || e.ctrlKey || e.metaKey || /input|textarea|select|object/i.test(e.target.tagName)) {
- return;
- }
-
- e.stopPropagation();
- e.preventDefault();
-
- // ESC.
- if (e.which === 27) {
- CivicThemeCollapsible.prototype.collapseAllGroups();
- return;
- }
-
- if (this !== document) {
- // Up.
- if (e.which === 38 && !e.shiftKey) {
- this.dispatchEvent(new CustomEvent('ct.collapsible.collapse', { bubbles: true, detail: { animate: true, keydown: true } }));
- return;
- }
-
- // Down.
- if (e.which === 40 && !e.shiftKey) {
- this.dispatchEvent(new CustomEvent('ct.collapsible.expand', { bubbles: true }));
- }
-
- // Space.
- if (e.which === 32) {
- e.target.click();
- }
- }
-};
-
-/**
- * Close "other" instances in the group.
- */
-CivicThemeCollapsible.prototype.closeGroup = function (group) {
- if (this.isGroupsEnabled) {
- const currentEl = this.el;
- // eslint-disable-next-line prefer-template
- document.querySelectorAll('[data-collapsible-group=' + group + ']:not([data-collapsible-collapsed])').forEach((el) => {
- if (el !== currentEl) {
- el.dispatchEvent(new CustomEvent('ct.collapsible.collapse', { bubbles: true, detail: { closeGroup: true } }));
- }
- });
- }
-};
-
-/**
- * Close all grouped instances on the page.
- */
-CivicThemeCollapsible.prototype.collapseAllGroups = function () {
- document.querySelectorAll('[data-collapsible-group]').forEach((el) => {
- el.dispatchEvent(new CustomEvent('ct.collapsible.collapse', { bubbles: true, detail: { closeAll: true } }));
- });
-};
-
-/**
- * Collapse panel.
- *
- * @param {boolean} animate
- * Flag to collapse with animation.
- */
-CivicThemeCollapsible.prototype.collapse = function (animate, evt) {
- const t = this;
-
- if (this.isCollapsed(t.el)) {
- return;
- }
-
- if (evt && evt.target) {
- if (evt.detail && evt.detail.keydown && !evt.detail.closeGroup) {
- if (evt.target.closest('[data-collapsible="true"]') !== t.el) {
- return;
- }
- } else if (evt.currentTarget !== t.el || evt.target !== t.el) {
- return;
- }
- }
-
- t.disableElementsFocus(t.panel);
-
- // Helper to set attributes after collapsing.
- const setAttributes = function (obj) {
- obj.panel.style.transition = '';
- obj.panel.style.overflow = 'hidden';
- obj.el.setAttribute('data-collapsible-collapsed', '');
- obj.panel.setAttribute('aria-hidden', true);
- obj.trigger.setAttribute('aria-expanded', false);
- obj.collapsed = true;
- };
-
- if (animate && t.duration > 0) {
- // Support already set transitions.
- const transition = t.panel.style.transition || `height ${t.duration}ms ease-out`;
- // Reset transition and set overflow before animation starts.
- t.panel.style.transition = '';
- t.panel.style.overflow = 'hidden';
- // Get height before animation starts.
- const h = t.panel.scrollHeight;
- requestAnimationFrame(() => {
- // Prepare for animation by setting initial values.
- t.panel.style.transition = transition;
- t.panel.style.height = `${h}px`;
- // Set progress state.
- t.el.setAttribute('data-collapsible-collapsing', '');
- requestAnimationFrame(() => {
- // Register an event listener to fire at the end of the transition.
- t.panel.addEventListener('transitionend', function () {
- // Remove the event listener straight away.
- // eslint-disable-next-line no-caller, no-restricted-properties
- t.panel.removeEventListener('transitionend', arguments.callee);
- // Remove progress state.
- t.el.removeAttribute('data-collapsible-collapsing');
- // Set all required attributes.
- setAttributes(t);
- });
- // Finally, change the height, triggering the transition.
- t.panel.style.height = '0px';
- });
- });
- } else {
- // Store current transition before it will be reset.
- const transition = t.panel.style;
- setAttributes(t);
- // Restore transition.
- t.panel.style.transition = transition;
- }
-};
-
-/**
- * Expand panel.
- *
- * @param {boolean} animate
- * Flag to expand with animation.
- */
-CivicThemeCollapsible.prototype.expand = function (animate) {
- const t = this;
-
- if (!this.isCollapsed(t.el)) {
- return;
- }
-
- t.enableElementsFocus(t.panel);
-
- // Helper to set attributes after collapsing.
- const setAttributes = function (obj) {
- obj.panel.style.transition = '';
- obj.panel.style.overflow = '';
- obj.panel.style.height = '';
- obj.panel.setAttribute('aria-hidden', false);
- obj.trigger.setAttribute('aria-expanded', true);
- obj.el.removeAttribute('data-collapsible-collapsed');
- obj.collapsed = false;
- };
-
- if (animate && t.duration > 0) {
- // Get height before animation starts.
- const h = t.panel.scrollHeight;
-
- // Set progress state.
- t.el.setAttribute('data-collapsible-collapsing', '');
- t.panel.style.display = '';
- requestAnimationFrame(() => {
- // Prepare for animation by setting initial values.
- t.panel.style.transition = t.panel.style.transition || `height ${t.duration}ms ease-out`;
-
- requestAnimationFrame(() => {
- // Register an event listener to fire at the end of the transition.
- t.panel.addEventListener('transitionend', function () {
- // Remove the event listener straight away.
- // eslint-disable-next-line no-caller, no-restricted-properties
- t.panel.removeEventListener('transitionend', arguments.callee);
- // Set all required attributes.
- setAttributes(t);
- // Remove progress state.
- t.el.removeAttribute('data-collapsible-collapsing');
- });
- // Finally, change the height, triggering the transition.
- t.panel.style.height = `${h}px`;
- });
- });
- } else {
- const transition = t.panel.style;
- setAttributes(t);
- t.panel.style.transition = transition;
- }
-};
-
-/**
- * Check if the collapsible is collapsed.
- */
-CivicThemeCollapsible.prototype.isCollapsed = function (el) {
- return el.hasAttribute('data-collapsible-collapsed');
-};
-
-/**
- * Get trigger element.
- */
-CivicThemeCollapsible.prototype.getTrigger = function (el) {
- return el.querySelector('[data-collapsible-trigger]') || el.firstElementChild || null;
-};
-
-/**
- * Get panel element.
- */
-CivicThemeCollapsible.prototype.getPanel = function (el) {
- return el.querySelector('[data-collapsible-panel]') || this.getTrigger(el).nextElementSibling || null;
-};
-
-/**
- * Init focusable elements within a panel.
- */
-CivicThemeCollapsible.prototype.initFocusableElements = function (panel) {
- this.disableElementsFocus(panel);
-};
-
-/**
- * Disable elements focus.
- */
-CivicThemeCollapsible.prototype.disableElementsFocus = function (parent) {
- this.getFocusableElements(parent).forEach((el) => {
- el.setAttribute('tabindex', -1);
- });
-};
-
-/**
- * Enable elements focus.
- */
-CivicThemeCollapsible.prototype.enableElementsFocus = function (parent) {
- this.getFocusableElements(parent).forEach((el) => {
- el.removeAttribute('tabindex');
- });
-};
-
-/**
- * Get focusable elements within an element.
- */
-CivicThemeCollapsible.prototype.getFocusableElements = function (el) {
- return el.querySelectorAll('input, select, textarea, button, object, area, a');
-};
-
-/**
- * Convert HTML to a DOM element.
- */
-CivicThemeCollapsible.prototype.htmlToElement = function (html) {
- const template = document.createElement('template');
- template.innerHTML = html.trim();
- return template.content.firstChild;
-};
-
-document.querySelectorAll('[data-collapsible]').forEach((el) => {
- // Delay initialisation if should be responsive.
- const breakpointExpr = el.getAttribute('data-responsive');
- if (breakpointExpr) {
- window.addEventListener('ct-responsive', (evt) => {
- evt.detail.evaluate(breakpointExpr, CivicThemeCollapsible, el);
- }, false);
- return;
- }
-
- new CivicThemeCollapsible(el);
-});
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.scss
deleted file mode 100644
index fc06fade6e..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.scss
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Collapsible component.
-//
-
-@use 'sass:list';
-@use 'sass:map';
-
-[data-collapsible] {
- [data-collapsible-trigger] {
- cursor: pointer;
- }
-
- .ct-collapsible__icon {
- @include ct-icon-size();
- }
-
- &:not([data-collapsible-trigger-no-icon]) {
- [data-collapsible-trigger] {
- position: relative;
-
- .ct-collapsible__icon {
- transform: rotate(-180deg);
- }
- }
-
- &[data-collapsible-trigger-wide] {
- [data-collapsible-trigger] {
- display: flex;
-
- .ct-collapsible__icon {
- @include ct-flex-align-right();
- }
- }
- }
- }
-
- &:not([data-collapsible-duration='0']) {
- [data-collapsible-trigger] {
- .ct-collapsible__icon {
- transition: transform 0.5s;
- }
- }
- }
-
- &[data-collapsible-collapsing] {
- [data-collapsible-trigger] {
- .ct-collapsible__icon {
- transform: rotate(0deg);
- }
- }
-
- &[data-collapsible-collapsed] {
- [data-collapsible-trigger] {
- .ct-collapsible__icon {
- transform: rotate(-180deg);
- }
- }
- }
- }
-
- &[data-collapsible-collapsed] {
- [data-collapsible-trigger] {
- .ct-collapsible__icon {
- transform: rotate(0deg);
- }
- }
-
- [data-collapsible-panel] {
- height: 0;
- overflow: hidden;
-
- @include ct-print() {
- height: auto;
- visibility: visible;
- }
- }
- }
-}
-
-.no-js {
- [data-collapsible] {
- &[data-collapsible-collapsed] {
- [data-collapsible-panel] {
- height: auto;
- overflow: auto;
- }
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.stories.js
deleted file mode 100644
index 3ac110c7c8..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.stories.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// phpcs:ignoreFile
-import CollapsibleStoryTemplate from './collapsible.stories.twig';
-import './collapsible';
-
-export default {
- title: 'Base/Utilities/Collapsible',
- parameters: {
- layout: 'centered',
- storyLayoutSize: 'medium',
- },
-};
-
-export const Collapsible = CollapsibleStoryTemplate;
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.stories.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.stories.twig
deleted file mode 100644
index f2112da625..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/collapsible/collapsible.stories.twig
+++ /dev/null
@@ -1,538 +0,0 @@
-{#
-/**
- * @file
- * Collapsible story template.
- */
-#}
-
-
-
-
-
Initially expanded
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Initially collapsed
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Long animation
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
No animation
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Minimal data attributes
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
No trigger icon
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Trigger icon which wraps with last word
-
-
-
- TRIGGER with long text Lorem ipsum est in labore do laboris dolor dolor labore labore do dolor adipisicing.
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Wide trigger icon
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Themed
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Trigger is a link - Initially expanded
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Trigger is a button - Initially expanded
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Inline trigger
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
Absolute panel
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
- Text behind absolutely positioned panel.
-
-
-
-
-
-
-
-
Test Nested Collapsible Closed
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
- TRIGGER (click me) 1
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
- TRIGGER (click me) 2
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
- TRIGGER (click me) 2:1
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
- TRIGGER (click me) 2:2
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
- TRIGGER (click me) 3
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
-
-
Test Nested Collapsible Expanded
-
-
-
- TRIGGER (click me)
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
- TRIGGER (click me) 1
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
- TRIGGER (click me) 2
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
- TRIGGER (click me) 2:1
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
- TRIGGER (click me) 2:2
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
-
- TRIGGER (click me) 3
-
-
- Collapsible demo panel Lorem ipsum dolor sit amet, consectetur adipisicing
- elit. Consectetur harum magnam modi obcaecati vitae voluptatibus!
- Accusamus
- atque deleniti, distinctio esse facere, nam odio officiis omnis porro
- quibusdam quis repudiandae veritatis.
-
-
-
-
-
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.js
deleted file mode 100644
index 7fa7d46143..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.js
+++ /dev/null
@@ -1,125 +0,0 @@
-// phpcs:ignoreFile
-import ColorsStoryTemplate from './colors.stories.twig';
-import { themes } from '../storybook/storybook.generators.utils';
-
-export default {
- title: 'Base/Colors',
- parameters: {
- layout: 'fullscreen',
- },
-};
-
-function getColorMap(name) {
- const map = {};
-
- map.default = SCSS_VARIABLES[`ct-${name}-default`] || {};
- map.custom = SCSS_VARIABLES[`ct-${name}`];
-
- // Normalise colors as they may not be provided.
- if (!Object.prototype.hasOwnProperty.call(map.default, 'light') || !Object.prototype.hasOwnProperty.call(map.default, 'dark')) {
- map.default = {
- light: {},
- dark: {},
- };
- }
-
- if (!Object.prototype.hasOwnProperty.call(map.custom, 'light') || !Object.prototype.hasOwnProperty.call(map.custom, 'dark')) {
- map.custom = {
- light: {},
- dark: {},
- };
- }
-
- for (const theme in themes()) {
- map.custom[theme] = Object.keys(map.custom[theme]).filter((n) => Object.keys(map.default[theme]).indexOf(n) === -1)
- .reduce((obj2, key) => {
- if (key in map.custom[theme]) {
- obj2[key] = map.custom[theme][key];
- }
- return obj2;
- }, {});
- }
-
- return map;
-}
-
-export const Colors = () => {
- const sectionMap = {
- 'Brand colors': {
- Standard: [
- 'brand1',
- 'brand2',
- 'brand3',
- ],
- },
- 'Palette colors': {
- Typography: [
- 'heading',
- 'body',
- ],
- Backgrounds: [
- 'background-light',
- 'background',
- 'background-dark',
- ],
- Borders: [
- 'border-light',
- 'border',
- 'border-dark',
- ],
- Interaction: [
- 'interaction-text',
- 'interaction-background',
- 'interaction-hover-text',
- 'interaction-hover-background',
- 'interaction-focus',
- ],
- Highlight: [
- 'highlight',
- ],
- Status: [
- 'information',
- 'warning',
- 'error',
- 'success',
- ],
- Custom: [],
- },
- };
-
- const brandMap = getColorMap('colors-brands');
- const paletteMap = getColorMap('colors');
-
- const colorMap = {
- 'Brand colors': brandMap,
- 'Palette colors': paletteMap,
- };
-
- const sections = {};
-
- for (const theme in themes()) {
- for (const sectionTitle in sectionMap) {
- for (const sectionName in sectionMap[sectionTitle]) {
- sections[theme] = sections[theme] || {};
- sections[theme][sectionTitle] = sections[theme][sectionTitle] || {};
-
- if (sectionName === 'Custom') {
- if (Object.keys(colorMap[sectionTitle].custom[theme]).length > 0) {
- sections[theme][sectionTitle][sectionName] = sections[theme][sectionTitle][sectionName] || {};
- sections[theme][sectionTitle][sectionName] = colorMap[sectionTitle].custom[theme];
- }
- } else {
- const colorNames = sectionMap[sectionTitle][sectionName];
- for (let i = 0; i < colorNames.length; i++) {
- sections[theme][sectionTitle][sectionName] = sections[theme][sectionTitle][sectionName] || {};
- sections[theme][sectionTitle][sectionName][colorNames[i]] = colorMap[sectionTitle].default[theme][colorNames[i]];
- }
- }
- }
- }
- }
-
- return ColorsStoryTemplate({
- sections,
- });
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.scss
deleted file mode 100644
index 0a7dc65305..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.scss
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// Color stories.
-//
-
-@use 'sass:string';
-@use 'sass:math';
-@use 'sass:map';
-@use 'sass:color';
-
-//
-// Mixin to create a color box with specific dimensions.
-//
-@mixin ct-stories-color-box($key, $value, $width: ct-particle(12), $height: ct-particle(12)) {
- margin: 0 ct-spacing(2) ct-spacing(2) 0;
- position: relative;
- width: $width;
-
- .story-color-element {
- // @code
- // Uncomment below for more prominent borders.
- // $border-color: desaturate(color.invert($value, 100%), 100%);
- // @endcode
- $border-color: color.scale($value, $lightness: -40%);
-
- display: block;
- height: $height;
- box-shadow: inset 0 0 0 ct-particle(0.125) $border-color;
- position: relative;
- background-color: $value;
- }
-
- .story-color-text {
- display: block;
-
- @include ct-typography('label-extra-small');
-
- & {
- text-align: center;
- margin: ct-spacing() 0;
- }
-
- &::after {
- $content: string.to-upper-case(#{$value});
-
- content: '#{$content}';
- font-family: 'Courier New', monospace, sans-serif;
- text-align: center;
- display: block;
- position: absolute;
- line-height: 150%;
- width: 100%;
- }
- }
-}
-
-.story-colors-wrapper {
- display: flex;
- flex-flow: row wrap;
-
- $brand-colors: _ct-colors-brands();
- $colors: _ct-colors();
-
- @include ct-generate-class-variations-from-map(map-get($brand-colors, 'light'), 'story-color-light') using($key, $value, $index) {
- @include ct-stories-color-box($key, $value, ct-particle(12), ct-particle(7.5));
- }
-
- @include ct-generate-class-variations-from-map(map-get($brand-colors, 'dark'), 'story-color-dark') using($key, $value, $index) {
- @include ct-stories-color-box($key, $value, ct-particle(12), ct-particle(7.5));
- }
-
- @include ct-generate-class-variations-from-map(map-get($colors, 'light'), 'story-color-light') using($key, $value, $index) {
- @include ct-stories-color-box($key, $value, ct-particle(12), ct-particle(7.5));
- }
-
- @include ct-generate-class-variations-from-map(map-get($colors, 'dark'), 'story-color-dark') using($key, $value, $index) {
- @include ct-stories-color-box($key, $value, ct-particle(12), ct-particle(7.5));
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.twig
deleted file mode 100644
index b3488dee95..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/colors/colors.stories.twig
+++ /dev/null
@@ -1,42 +0,0 @@
-{#
-/**
- * @file
- * Colors story template.
- */
-#}
-
-
- {% for theme, theme_section in sections %}
-
- {% for section_title, section_colors in theme_section %}
-
-
{{ section_title }}
-
- {% for section_name, colors in section_colors %}
-
- {% if section_name != 'Standard' %}
-
{{ section_name }}
- {% endif %}
-
-
- {% for color_name, color in colors %}
-
- {{ color_name|capitalize|replace({'-': ' '}) }}
-
- {% endfor %}
-
-
-
- {% endfor %}
- {% endfor %}
-
- {% endfor %}
-
-
-{% if color_map_link is not empty %}
-
-{% endif %}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/datetime/datetime.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/datetime/datetime.stories.js
deleted file mode 100644
index 0d08cb3d73..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/datetime/datetime.stories.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// phpcs:ignoreFile
-import CivicThemeTimestamp from './datetime.twig';
-import { dateIsValid, knobText, shouldRender } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Utilities/Datetime',
- parameters: {
- layout: 'centered',
- },
-};
-
-export const Datetime = (parentKnobs = {}) => {
- const knobs = {
- start: knobText('Start', '20 Jan 2023 11:00', parentKnobs.start, parentKnobs.knobTab),
- end: knobText('End', '21 Jan 2023 15:00', parentKnobs.end, parentKnobs.knobTab),
- modifier_class: knobText('Additional classes', '', parentKnobs.modifier_class, parentKnobs.knobTab),
- attributes: knobText('Additional attributes', '', parentKnobs.attributes, parentKnobs.knobTab),
- };
-
- knobs.start_iso = dateIsValid(knobs.start) ? new Date(knobs.start).toISOString() : null;
- knobs.end_iso = dateIsValid(knobs.end) ? new Date(knobs.end).toISOString() : null;
-
- return shouldRender(parentKnobs) ? CivicThemeTimestamp(knobs) : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/datetime/datetime.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/datetime/datetime.twig
deleted file mode 100644
index 4e0271629e..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/datetime/datetime.twig
+++ /dev/null
@@ -1,24 +0,0 @@
-{#
-/**
- * @file
- * Datetime component.
- *
- * Variables:
- * - start: [string] Formatted start time.
- * - start_iso: [string] Start time in ISO format.
- * - end: [string] Formatted end time.
- * - end_iso: [string] End time in ISO format.
- * - attributes: [string] Additional attributes.
- * - modifier_class: [string] Additional classes.
- */
-#}
-
-{% if start is not empty %}
-
- {{ start|raw }}
- {% if end is not empty %}
- —
- {{ end|raw }}
- {% endif %}
-
-{% endif %}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/debug/_index.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/debug/_index.scss
deleted file mode 100644
index 2430d0eed4..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/debug/_index.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Debug helpers.
-//
-
-.ct-block-debug {
- @include ct-block-debug();
-}
-
-.ct-breakpoint-debug {
- @each $bp, $value in $ct-breakpoints {
- &::before {
- @include ct-breakpoint($bp) {
- content: '#{$bp}: >=#{$value}';
- position: fixed;
- bottom: 0;
- right: 0;
- background: rgba(purple, 0.75);
- display: block;
- padding: 0.25em 0.5em;
- z-index: 1000;
- }
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/elevation/elevation.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/elevation/elevation.stories.js
deleted file mode 100644
index bec03e257b..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/elevation/elevation.stories.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// phpcs:ignoreFile
-export default {
- title: 'Base/Elevation',
-};
-
-export const Elevation = () => {
- let html = ``;
-
- html += ``;
-
- for (let i = 1; i <= 4; i++) {
- html += `
`;
- html += `
Elevation ${i}
`;
- html += `
`;
- html += `
`;
- }
-
- html += `
`;
-
- return html;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/elevation/elevation.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/elevation/elevation.stories.scss
deleted file mode 100644
index fa8942c486..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/elevation/elevation.stories.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Elevation stories.
-//
-
-@use 'sass:string';
-
-.story-elevation-wrapper {
- display: flex;
- flex-flow: row wrap;
-
- @include ct-generate-class-variations-from-map($ct-elevations, 'story-elevation') using($key, $value, $index) {
- width: ct-particle(20);
- height: ct-particle(20);
- margin: ct-spacing(6) ct-spacing(10) ct-particle(12) 0;
- border-radius: ct-spacing(0.5);
- position: relative;
- background-color: white;
-
- @include ct-elevation($key);
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/flex/_index.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/flex/_index.scss
deleted file mode 100644
index 64e804c5a7..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/flex/_index.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Flex utilities.
-//
-
-.ct-flex-justify-content-start {
- display: flex;
- justify-content: flex-start;
-}
-
-.ct-flex-justify-content-center {
- display: flex;
- justify-content: center;
-}
-
-.ct-flex-justify-content-end {
- display: flex;
- justify-content: flex-end;
-}
-
-.ct-flex-row-align-middle {
- display: flex;
- flex-direction: row;
- align-items: center;
- height: 100%;
-}
-
-.ct-flex-align-self-start {
- align-self: flex-start;
-}
-
-.ct-flex-align-self-center {
- align-self: center;
-}
-
-.ct-flex-align-self-end {
- align-self: flex-end;
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.js
deleted file mode 100644
index d3f16643ad..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.js
+++ /dev/null
@@ -1,208 +0,0 @@
-// phpcs:ignoreFile
-/**
- * @file
- * Flyout component.
- *
- * Allows introducing "fly out" behaviour to a block-level HTML element on the
- * page by adding data attributes to elements. The component does not provide
- * any styles, except for z-index configuration and direction transformations.
- *
- * Also, provides a trigger to close a single (currently opened) panel and
- * another trigger to close all open panels.
- */
-function CivicThemeFlyout(el) {
- if (el.getAttribute('data-flyout') === 'true' || this.el) {
- return;
- }
-
- // Find all open triggers.
- const openTriggers = document.querySelectorAll('[data-flyout-open-trigger]');
- if (!openTriggers.length) {
- return;
- }
-
- // Find an open trigger.
- this.openTrigger = this.findOpenTrigger(openTriggers, el);
- if (!this.openTrigger) {
- return;
- }
-
- this.el = el;
-
- // Find "close trigger", but only search among triggers that are not a part
- // of descendant flyouts.
- this.closeTriggers = Array.from(this.el.querySelectorAll('[data-flyout-close-trigger]'));
- this.closeTriggers = this.closeTriggers.filter((item) => (item.closest('[data-flyout]') === this.el));
-
- this.closeAllTriggers = Array.from(this.el.querySelectorAll('[data-flyout-close-all-trigger]'));
- this.closeAllTriggers = this.closeAllTriggers.filter((item) => (item.closest('[data-flyout]') === this.el));
- this.panel = this.el.querySelector('[data-flyout-panel]');
- this.el.expanded = this.el.hasAttribute('data-flyout-expanded');
- this.duration = this.el.hasAttribute('data-flyout-duration') ? parseInt(this.el.getAttribute('data-flyout-duration'), 10) : 500;
- this.focusTargets = this.el.hasAttribute('data-flyout-focus') ? this.el.getAttribute('data-flyout-focus').split(',').filter((i) => i) : [];
-
- // Add event listener to element.
- if (this.openTrigger) {
- this.openTrigger.addEventListener('click', this.clickEvent.bind(this));
- this.openTrigger.expand = true;
- }
-
- if (this.closeTriggers) {
- this.closeTriggers.forEach((trigger) => {
- trigger.addEventListener('click', this.clickEvent.bind(this));
- trigger.expand = false;
- });
- }
-
- if (this.closeAllTriggers) {
- this.closeAllTriggers.forEach((trigger) => {
- trigger.addEventListener('click', this.closeAllTriggerClickEvent.bind(this));
- });
- }
-
- document.addEventListener('keydown', (event) => {
- if (event.key === 'Tab') {
- const flyoutElements = document.querySelectorAll('[data-flyout]');
- flyoutElements.forEach((flyout) => {
- const focusableElements = flyout.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
- const firstFocusable = focusableElements[0];
- const lastFocusable = focusableElements[focusableElements.length - 1];
- if (document.activeElement === lastFocusable && !event.shiftKey) {
- event.preventDefault();
- firstFocusable.focus();
- } else if (document.activeElement === firstFocusable && event.shiftKey) {
- event.preventDefault();
- lastFocusable.focus();
- }
- });
- }
- });
-
- // Mark as initialized.
- this.el.setAttribute('data-flyout', 'true');
-}
-
-/**
- * Find open trigger for the given flyout among provided triggers.
- */
-CivicThemeFlyout.prototype.findOpenTrigger = function (triggers, el) {
- // Find a trigger for the current flyout.
- for (const i in triggers) {
- if (Object.prototype.hasOwnProperty.call(triggers, i)) {
- if (triggers[i].hasAttribute('data-flyout-target')) {
- const found = document.querySelector(triggers[i].getAttribute('data-flyout-target'));
- if (found === el) {
- return triggers[i];
- }
- } else if (triggers[i].nextElementSibling && triggers[i].nextElementSibling.hasAttribute('data-flyout')) {
- // Try to get from the next element.
- const found = triggers[i].nextElementSibling;
- if (found === el) {
- return triggers[i];
- }
- }
- }
- }
- return null;
-};
-
-/**
- * Click event handler to toggle flyout state.
- */
-CivicThemeFlyout.prototype.clickEvent = function (e) {
- e.stopPropagation();
- if (e.target.hasAttribute('data-flyout-trigger-allow-default') !== true) {
- e.preventDefault();
- }
-
- return e.currentTarget.expand ? this.expand() : this.collapse();
-};
-
-/**
- * Event handler to close all flyout components.
- */
-CivicThemeFlyout.prototype.closeAllTriggerClickEvent = function (e) {
- e.stopPropagation();
- if (e.target.hasAttribute('data-flyout-trigger-allow-default') !== true) {
- e.preventDefault();
- }
-
- // Collapse all panels.
- document.querySelectorAll('[data-flyout-expanded]').forEach((flyout) => {
- flyout.removeAttribute('data-flyout-expanded');
- });
- document.querySelectorAll('[data-flyout-panel]').forEach((panel) => {
- panel.setAttribute('aria-hidden', true);
- const duration = panel.parentNode.hasAttribute('data-flyout-duration') ? parseInt(panel.parentNode.getAttribute('data-flyout-duration'), 10) : 500;
- setTimeout(() => {
- panel.style.visibility = null;
- document.body.style.overflow = null;
- }, duration);
- });
- document.querySelectorAll('[data-flyout-open-trigger]').forEach((trigger) => {
- trigger.setAttribute('aria-expanded', false);
- });
-
- if (this.focusTargets) {
- // Focus on the first trigger.
- setTimeout(() => {
- document.querySelector('[data-flyout-open-trigger]').focus();
- }, this.duration);
- }
-};
-
-/**
- * Expand flyout.
- */
-CivicThemeFlyout.prototype.expand = function () {
- this.el.expanded = true;
- this.openTrigger.setAttribute('aria-expanded', true);
- this.panel.style.visibility = 'visible';
-
- // Add required classes.
- this.el.setAttribute('data-flyout-expanded', true);
- this.panel.setAttribute('aria-hidden', false);
- document.body.style.overflow = 'hidden';
-
- if (this.focusTargets) {
- // Focus on the first available target or close button.
- const focusTargets = [
- ...this.focusTargets,
- '[data-flyout-close-trigger]',
- '[data-flyout-close-all-trigger]',
- ];
-
- for (let i = 0; i < focusTargets.length; i++) {
- let focusElements = Array.from(this.panel.querySelectorAll(focusTargets[i]));
- // Filter to only focus points found in this panel.
- focusElements = focusElements.filter((el) => (el.closest('[data-flyout-panel]') === this.panel));
- if (focusElements.length > 0) {
- setTimeout(() => focusElements[0].focus(), this.duration);
- break;
- }
- }
- }
-};
-
-/**
- * Collapse flyout.
- */
-CivicThemeFlyout.prototype.collapse = function () {
- this.el.expanded = false;
- this.openTrigger.setAttribute('aria-expanded', false);
- this.el.removeAttribute('data-flyout-expanded');
- this.panel.setAttribute('aria-hidden', true);
- setTimeout(() => {
- this.panel.style.visibility = null;
- document.body.style.overflow = null;
- if (this.focusTargets) {
- this.openTrigger.focus();
- }
- }, this.duration);
-};
-
-// Initialize CivicThemeFlyout on every element.
-document.querySelectorAll('[data-flyout]').forEach((flyout) => {
- // eslint-disable-next-line no-new
- new CivicThemeFlyout(flyout);
-});
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.scss
deleted file mode 100644
index ae443b37da..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// Flyout component.
-//
-
-[data-flyout] {
- $root: &;
-
- [data-flyout-panel] {
- overflow: hidden auto;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- visibility: hidden;
- transition: transform $ct-flyout-duration;
- }
-
- &[data-flyout-expanded] {
- > [data-flyout-panel] {
- transform: translate(0, 0);
- visibility: visible;
- transition: transform $ct-flyout-duration;
- z-index: $ct-flyout-zindex;
- }
- }
-
- @each $direction, $transform in $ct-flyout-direction-transforms {
- &[data-flyout-direction='#{$direction}'] {
- [data-flyout-panel] {
- transform: $transform;
- }
-
- &[data-flyout-expanded] {
- > [data-flyout-panel] {
- transform: translate(0, 0);
- }
- }
- }
- }
-}
-
-[data-flyout-open-trigger],
-[data-flyout-close-trigger],
-[data-flyout-close-all-trigger] {
- cursor: pointer;
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.js
deleted file mode 100644
index 40d9268d15..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.js
+++ /dev/null
@@ -1,32 +0,0 @@
-// phpcs:ignoreFile
-import './flyout';
-import FlyoutStoryTemplate from './flyout.stories.twig';
-import { knobBoolean, knobNumber, knobRadios, shouldRender } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Utilities/Flyout',
- parameters: {
- layout: 'centered',
- },
-};
-
-export const Flyout = (parentKnobs = {}) => {
- const knobs = {
- direction: knobRadios(
- 'Flyout from',
- {
- Top: 'top',
- Bottom: 'bottom',
- Left: 'left',
- Right: 'right',
- },
- 'right',
- parentKnobs.direction,
- parentKnobs.knobTab,
- ),
- expanded: knobBoolean('Expanded', false, parentKnobs.expanded, parentKnobs.knobTab),
- duration: knobNumber('Duration (ms)', 500, undefined, parentKnobs.duration, parentKnobs.knobTab),
- };
-
- return shouldRender(parentKnobs) ? FlyoutStoryTemplate(knobs) : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.scss
deleted file mode 100644
index d53d11f251..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.scss
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-// Flyout component.
-//
-
-#flyout-story1 {
- [data-flyout-panel] {
- box-shadow: 0 0 ct-particle(0.125) ct-particle(0.125) #f00 inset;
- padding: ct-spacing(2);
- }
-}
-
-#flyout-story2 {
- [data-flyout-panel] {
- box-shadow: 0 0 ct-particle(0.125) ct-particle(0.125) #00f inset;
- padding: ct-spacing(2);
- }
-}
-
-#flyout-story3 {
- [data-flyout-panel] {
- box-shadow: 0 0 ct-particle(0.125) ct-particle(0.125) #0f0 inset;
- padding: ct-spacing(2);
- }
-}
-
-#flyout-story4 {
- [data-flyout-panel] {
- box-shadow: 0 0 ct-particle(0.125) ct-particle(0.125) #c95100 inset;
- padding: ct-spacing(2);
- }
-}
-
-#flyout-story5 {
- [data-flyout-panel] {
- box-shadow: 0 0 ct-particle(0.125) ct-particle(0.125) #b388ff inset;
- padding: ct-spacing(2);
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.twig
deleted file mode 100644
index 9f22242d2f..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/flyout/flyout.stories.twig
+++ /dev/null
@@ -1,101 +0,0 @@
-{#
-/**
- * @file
- * Flyout story template.
- */
-#}
-
-Open flyout 1
-
-
-
-
-
- Close x
-
-
- Flyout 1
- Labore commodo sunt reprehenderit mollit ipsum adipisicing commodo nisi
- cupidatat mollit dolor commodo velit tempor laboris enim est sit labore
- deserunt enim ullamco irure anim do mollit deserunt Lorem aliquip dolore ex
- laboris ea consectetur aliquip adipisicing consectetur eu ad dolore ullamco
- nostrud reprehenderit quis cillum reprehenderit excepteur enim incididunt.
-
-
-
-
-
-Open flyout 2
-
-
-
-
-
- Close ❌
-
-
- Flyout 2
- Labore commodo sunt reprehenderit mollit ipsum adipisicing commodo nisi
- cupidatat mollit dolor commodo velit tempor laboris enim est sit labore
- deserunt enim ullamco irure anim do mollit deserunt Lorem aliquip dolore ex
- laboris ea consectetur aliquip adipisicing consectetur eu ad dolore ullamco
- nostrud reprehenderit quis cillum reprehenderit excepteur enim incididunt.
-
-
-
-
-
-Open flyout 3 (no trigger target)
-
-
-
-
- Close ❌
-
-
- Flyout 3
- Labore commodo sunt reprehenderit mollit ipsum adipisicing commodo nisi
- cupidatat mollit dolor commodo velit tempor laboris enim est sit labore
- deserunt enim ullamco irure anim do mollit deserunt Lorem aliquip dolore ex
- laboris ea consectetur aliquip adipisicing consectetur eu ad dolore ullamco
- nostrud reprehenderit quis cillum reprehenderit excepteur enim incididunt.
-
-
-
-
-
-Open flyout 4 (duration)
-
-
-
-
- Close ❌
-
-
- Flyout 4
- Labore commodo sunt reprehenderit mollit ipsum adipisicing commodo nisi
- cupidatat mollit dolor commodo velit tempor laboris enim est sit labore
- deserunt enim ullamco irure anim do mollit deserunt Lorem aliquip dolore ex
- laboris ea consectetur aliquip adipisicing consectetur eu ad dolore ullamco
- nostrud reprehenderit quis cillum reprehenderit excepteur enim incididunt.
-
-
-
-
-
-Open flyout 5 and close all
-
-
-
-
- Close all ❌
-
-
- Flyout 5
- Labore commodo sunt reprehenderit mollit ipsum adipisicing commodo nisi
- cupidatat mollit dolor commodo velit tempor laboris enim est sit labore
- deserunt enim ullamco irure anim do mollit deserunt Lorem aliquip dolore ex
- laboris ea consectetur aliquip adipisicing consectetur eu ad dolore ullamco
- nostrud reprehenderit quis cillum reprehenderit excepteur enim incididunt.
-
-
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/_index.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/_index.scss
deleted file mode 100644
index e9e33a788e..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/_index.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// Font component.
-//
-// stylelint-disable no-invalid-position-at-import-rule, scss/dollar-variable-pattern
-
-// Generate all fonts inclusions.
-@include ct-font-include(_ct-font-map-all());
-
-@if $ct-font-smoothing-enable {
- html {
- text-rendering: optimizelegibility;
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/fonts.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/fonts.stories.js
deleted file mode 100644
index c80eb7277f..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/fonts.stories.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// phpcs:ignoreFile
-import merge from 'deepmerge';
-import { capitalizeFirstLetter, cleanCssIdentifier } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Fonts',
- parameters: {
- layout: 'centered',
- storyLayoutSize: 'large',
- storyLayoutCenteredHorizontally: true,
- storyLayoutClass: 'story-fonts-wrapper story-wrapper-size--large',
- },
-};
-
-export const Fonts = () => {
- const fonts = Object.keys(merge(SCSS_VARIABLES['ct-fonts-default'], SCSS_VARIABLES['ct-fonts']));
- const weights = merge(SCSS_VARIABLES['ct-font-weights-default'], SCSS_VARIABLES['ct-font-weights']);
-
- let html = '';
-
- for (const i in Object.values(fonts)) {
- html += ``;
-
- html += `
${capitalizeFirstLetter(fonts[i])}
`;
-
- html += `
`;
- for (const weightName in weights) {
- html += `
${capitalizeFirstLetter(weightName)}
`;
- html += `
The quick brown fox jumps over the lazy dog
`;
-
- html += `
${capitalizeFirstLetter(weightName)} Italic
`;
- html += `
The quick brown fox jumps over the lazy dog
`;
- }
- html += `
`;
-
- html += `
`;
- }
-
- return html;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/fonts.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/fonts.stories.scss
deleted file mode 100644
index 6896037598..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/fonts/fonts.stories.scss
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Font component stories.
-//
-
-@use 'sass:string';
-
-.story-fonts-wrapper {
- $all-fonts: _ct-font-map-all();
- $all-weights: _ct-font-weights-all();
- $font-size: ct-particle(6);
-
- @each $weightName, $weight in $all-weights {
- $weightName: string.to-lower-case($weightName);
-
- @include ct-generate-class-variations-from-map($all-fonts, 'story-font--#{$weightName}') using($key, $value, $index) {
- font-family: ct-font($key);
- font-weight: $weight;
- font-size: $font-size;
- }
-
- @include ct-generate-class-variations-from-map($all-fonts, 'story-font--italic--#{$weightName}') using($key, $value, $index) {
- font-family: ct-font($key);
- font-weight: $weight;
- font-style: italic;
- font-size: $font-size;
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.scss
deleted file mode 100644
index 9ab8251acd..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.scss
+++ /dev/null
@@ -1,164 +0,0 @@
-//
-// Grid component.
-//
-
-@use 'sass:map';
-
-// Container class should wrap every row.
-.container {
- @include ct-container();
-}
-
-.container-fluid {
- @include ct-container(false);
-}
-
-.row {
- $root: &;
-
- @include ct-row($ct-grid-gutters);
-
- {$root}--no-gutters {
- margin-right: 0;
- margin-left: 0;
-
- > .col,
- > [class*='col-'] {
- padding-right: 0;
- padding-left: 0;
- }
- }
-
- {$root}--reverse {
- flex-direction: row-reverse;
- }
-
- {$root}--no-grow {
- > .col,
- > [class*='col-'] {
- flex-grow: initial;
- flex-basis: auto;
- }
- }
-
- {$root}--fill-width {
- > .col,
- > [class*='col-'] {
- max-width: 100%;
- flex-grow: 1;
- }
- }
-
- {$root}--equal-heights-content {
- > .col,
- > [class*='col-'] {
- > * {
- height: 100%;
- }
- }
- }
-
- {$root}--unequal-heights {
- > .col,
- > [class*='col-'] {
- margin-bottom: auto;
- }
- }
-
- {$root}--vertically-spaced {
- @each $bp, $gutter in $ct-grid-vertical-gutters {
- @if $bp == $ct-grid-lowest-breakpoint {
- row-gap: $gutter;
- margin-bottom: $gutter;
- }
- @else {
- @include ct-breakpoint($bp) {
- row-gap: $gutter;
- margin-bottom: $gutter;
- }
- }
- }
- }
-}
-
-ul.row {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.col {
- $root: &;
-
- // Make columns at the lowest breakpoint to act as a single column per row.
- @include _ct-grid-col($ct-grid-lowest-breakpoint, $ct-grid-columns);
-
- $next-bp: ct-map-get-next($ct-breakpoints, $ct-grid-lowest-breakpoint, map.get($ct-breakpoints, 'xxs'), key);
-
- // Spawn columns to fit into as single row for larger breakpoints.
- @include ct-breakpoint($next-bp) {
- @include _ct-grid-col();
- }
-}
-
-// Generate column classes.
-@each $breakpoint, $value in $ct-breakpoints {
- @if $breakpoint == $ct-grid-lowest-breakpoint {
- @include _ct-col-factory($breakpoint);
- }
- @else {
- @include ct-breakpoint($breakpoint) {
- @include _ct-col-factory($breakpoint);
- }
- }
-}
-
-// Utilities for fixed and auto columns.
-.col,
-[class*='col-'] {
- box-sizing: border-box;
-
- &.col--reverse {
- display: flex;
- flex-direction: column-reverse;
- }
-
- &.col--no-grow {
- flex-grow: initial;
- flex-basis: auto;
- }
-
- &.col--no-gap {
- // Remove the offsets starting from the next breakpoint from the lowest one.
- @include ct-breakpoint($ct-grid-responsive-breakpoint) {
- &:not(:first-child) {
- padding-left: 0;
- }
-
- &:not(:last-child) {
- padding-right: 0;
- }
- }
- }
-}
-
-@each $breakpoint, $value in $ct-breakpoints {
- @if $breakpoint == $ct-grid-lowest-breakpoint {
- .first {
- order: -1;
- }
-
- .last {
- order: 1;
- }
- }
- @else {
- @include ct-breakpoint($breakpoint) {
- .first-#{$breakpoint} {
- order: -1;
- }
- .last-#{$breakpoint} {
- order: 1;
- }
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.stories.js
deleted file mode 100644
index c2d6499a1f..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.stories.js
+++ /dev/null
@@ -1,559 +0,0 @@
-// phpcs:ignoreFile
-import CivicThemeGrid from './grid.twig';
-import { code, generateItems, knobBoolean, knobNumber, knobRadios, knobText, placeholder, randomSentence, shouldRender } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Grid',
- parameters: {
- layout: 'fullscreen',
- docs: 'Outline colors: Contained container Fluid container Row Template column Auto column Placeholder
',
- docsClass: 'story-docs--conditional',
- },
-};
-
-export const Grid = () => {
- const showOutline = knobBoolean('Show outlines', false);
-
- let cols = [];
-
- let html = ``;
-
- html += `
Container
`;
-
- html += `
Contained container ${code('.container')}
`;
- cols = [12];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j], placeholder(code(Math.floor(12 / cols[j])))),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- template_column_count: cols[j],
- });
- }
-
- html += `
Fluid container ${code('.container-fluid')}
`;
- cols = [12];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j], placeholder(code(Math.floor(12 / cols[j])))),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- template_column_count: cols[j],
- is_fluid: true,
- });
- }
-
- html += `
Columns
`;
-
- html += `
Template column in container ${code('.container > .row > .col-[breakpoint]-[column]')}
`;
- cols = [1, 2, 3, 4, 6, 12];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j], placeholder(code(Math.floor(12 / cols[j])))),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- template_column_count: cols[j],
- });
- }
-
- html += `
Template column in fluid container ${code('.container-fluid > .row > .col-[breakpoint]-[column]')}
`;
- cols = [1];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j], placeholder(code(Math.floor(12 / cols[j])))),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- template_column_count: cols[j],
- is_fluid: true,
- });
- }
-
- html += `
Auto column in container ${code('.container .row > .col')}
`;
- cols = [1, 2, 3, 4, 6, 12];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j], placeholder(code('auto'))),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- });
- }
-
- html += `
Offsets and order
`;
-
- html += `
Template column in container ${code('.container > .row > .col-[breakpoint]-offset-[column]')}
`;
- cols = [1, 2, 3, 4, 6, 12];
- let offsets = [1, 2, 3, 4, 6, 8];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(1, placeholder(`width ${code(Math.floor(12 / cols[j]))}, offset ${code(offsets[j])}`)),
- column_attributes: `data-story-total-columns="1"`,
- column_class: `col-m-offset-${offsets[j]}`,
- template_column_count: cols[j],
- });
- }
-
- html += `
Auto column in container ${code('.container > .row > .col.col-[breakpoint]-offset-[column]')}
`;
- cols = [1, 2, 3, 4, 6, 12];
- offsets = [1, 2, 3, 4, 6, 8];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(1, placeholder(`width ${code('auto')}, offset ${code(offsets[j])}`)),
- column_attributes: `data-story-total-columns="1"`,
- column_class: `col-m-offset-${offsets[j]}`,
- });
- }
-
- html += `
Content width
`;
-
- html += `
Filled ${code('width: 100%')}
`;
- cols = ['A', 'B', 'C', 'D', 'E'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- column_class: 'col',
- });
-
- html += `
Hugged ${code('width: auto')}
`;
- cols = ['A', 'B', 'C', 'D', 'E'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1], 0, 'story-placeholder--hugged')),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- column_class: 'col',
- });
-
- html += `
Fixed ${code('width: 184px')}
`;
- cols = ['A', 'B', 'C', 'D', 'E'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(`${cols[i - 1]} fixed width`, 0, 'story-placeholder--fixed')),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- column_class: 'col',
- });
-
- html += `
Nested Rows (container-less)
`;
-
- html += `
Template column wraps template column ${code('.row > .col-[breakpoint]-[column] > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: false,
- template_column_count: 3,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: false,
- template_column_count: 2,
- column_attributes: 'data-story-total-columns="2"',
- modifier_class: 'row--no-gutters',
- });
-
- html += `
Template column wraps auto column ${code('.row > .col-[breakpoint]-[column] > .row > .col')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: false,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: false,
- template_column_count: 2,
- column_attributes: 'data-story-total-columns="2"',
- modifier_class: 'row--no-gutters',
- });
-
- html += `
Auto column wraps auto-column ${code('.row > .col > .row > .col')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: false,
- }),
- placeholder('Parent'),
- ],
- use_container: false,
- modifier_class: 'row--no-gutters',
- });
-
- html += `
Auto column wraps template column ${code('.row > .col > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: false,
- template_column_count: 3,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: false,
- modifier_class: 'row--no-gutters',
- });
-
- html += `
Nested Containers
`;
-
- html += `
Container with template columns wraps container with template columns ${code('.container .row > .col-[breakpoint]-[column] .container > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: true,
- is_fluid: false,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: true,
- is_fluid: false,
- template_column_count: 2,
- column_attributes: 'data-story-total-columns="2"',
- });
-
- html += `
Fluid container with template columns wraps container with template columns ${code('.container-fluid .row > .col-[breakpoint]-[column] .container > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: true,
- is_fluid: false,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: true,
- is_fluid: true,
- template_column_count: 2,
- column_attributes: 'data-story-total-columns="2"',
- });
-
- html += `
Fluid container with template columns wraps container with template columns (single column) ${code('.container-fluid .row > .col-[breakpoint]-[column] .container > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: true,
- is_fluid: false,
- column_attributes: 'data-story-total-columns="3"',
- }),
- ],
- use_container: true,
- is_fluid: true,
- template_column_count: 1,
- });
-
- html += `
Container with template columns wraps fluid container with template columns ${code('.container .row > .col-[breakpoint]-[column] .container-fluid > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: true,
- is_fluid: true,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: true,
- is_fluid: false,
- template_column_count: 2,
- column_attributes: 'data-story-total-columns="2"',
- });
-
- html += `
Fluid container with template columns wraps fluid container with template columns ${code('.container-fluid .row > .col-[breakpoint]-[column] .container-fluid > .row > .col-[breakpoint]-[column]')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: [
- CivicThemeGrid({
- items: [
- placeholder('Nested'),
- placeholder('Nested'),
- placeholder('Nested'),
- ],
- use_container: true,
- is_fluid: true,
- column_attributes: 'data-story-total-columns="3"',
- }),
- placeholder('Parent'),
- ],
- use_container: true,
- is_fluid: true,
- template_column_count: 2,
- column_attributes: 'data-story-total-columns="2"',
- });
-
- html += `
Row utilities
`;
-
- html += `
No gutters ${code('.row.row--no-gutters')}
`;
- cols = ['A', 'B', 'C', 'D', 'E'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- use_container: false,
- row_class: 'row row--no-gutters',
- });
-
- html += `
No gutters within container ${code('.container > .row.row--no-gutters')}
`;
- cols = ['A', 'B', 'C', 'D', 'E'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- use_container: true,
- is_fluid: false,
- row_class: 'row row--no-gutters',
- });
-
- html += `
No gutters within fluid container ${code('.container-fluid > .row.row--no-gutters')}
`;
- cols = ['A', 'B', 'C', 'D', 'E'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- use_container: true,
- is_fluid: true,
- row_class: 'row row--no-gutters',
- });
-
- html += `
Reversed columns ${code('.row.row--reverse')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- row_class: 'row row--reverse',
- });
-
- html += `
Equal column heights by default
`;
- cols = [`
Content should not fill - height is not 100%. ${randomSentence(5, 'A')}`, randomSentence(30, 'B'), randomSentence(5, 'C'), randomSentence(5, 'D')];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- });
-
- html += `
Equal column heights propagated to content ${code('.row.row--equal-heights-content > .col-[breakpoint]-[column]')}
`;
- cols = [`
Content should fill - height is propagated to be 100%. ${randomSentence(5, 'A')}`, randomSentence(30, 'B'), randomSentence(5, 'C'), randomSentence(5, 'D')];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- row_class: 'row row--equal-heights-content',
- });
-
- html += `
Equal column heights propagated to content ${code('.row.row--equal-heights-content > .col')} - Auto column
`;
- cols = [`
Content should fill - height is propagated to be 100%. ${randomSentence(5, 'A')}`, randomSentence(30, 'B'), randomSentence(5, 'C'), randomSentence(5, 'D')];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- row_class: 'row row--equal-heights-content',
- });
-
- html += `
Unequal column heights ${code('.row.row--unequal-heights > .col-[breakpoint]-[column]')}
`;
- cols = [randomSentence(5, 'A'), randomSentence(20, 'B'), randomSentence(5, 'C'), randomSentence(5, 'D')];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- row_class: 'row row--unequal-heights',
- });
-
- html += `
Unequal column heights ${code('.row.row--unequal-heights > .col')} - Auto column
`;
- cols = [randomSentence(5, 'A'), randomSentence(20, 'B'), randomSentence(5, 'C'), randomSentence(5, 'D')];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- row_class: 'row row--unequal-heights',
- });
-
- html += `
Vertical spacing ${code('.row.row--vertically-spaced > .col-[breakpoint]-[column]')}
`;
- cols = [4, 3, 4];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j] + (j % 2), placeholder(code(Math.floor(12 / cols[j])))),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- template_column_count: cols[j],
- row_class: 'row row--vertically-spaced',
- });
- }
-
- html += `
Vertical spacing ${code('.row.row--vertically-spaced > .col')} - Autocolumn
`;
- cols = [4, 3, 4];
- for (let j = 0; j < cols.length; j++) {
- html += CivicThemeGrid({
- items: generateItems(cols[j] + (j % 2), placeholder(code(Math.floor(12 / cols[j])), 0, 'story-placeholder--fixed')),
- column_attributes: `data-story-total-columns="${cols[j]}"`,
- row_class: 'row row--vertically-spaced',
- });
- }
-
- html += `
Column utilities
`;
-
- html += `
Reversed items ${code('.row > .col-[breakpoint]-[column].col--reverse')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => `${placeholder(`${cols[i - 1]}-1`)} ${placeholder(`${cols[i - 1]}-2`)}`),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- column_class: 'col--reverse',
- });
-
- html += `
Reversed items ${code('.row > .col.col--reverse')} - Auto column
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => `${placeholder(`${cols[i - 1]}-1`)} ${placeholder(`${cols[i - 1]}-2`)}`),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- column_class: 'col col--reverse',
- });
-
- html += `
No grow ${code('.row > .col-[breakpoint]-[column].col--no-grow')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- column_class: 'col--no-grow',
- });
-
- html += `
No grow ${code('.row > .col.col--no-grow')} - Auto column
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- column_class: 'col col--no-grow',
- });
-
- html += `
No gap ${code('.row > .col-[breakpoint]-[column].col--no-gap')}
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- template_column_count: cols.length,
- column_class: 'col--no-gap',
- });
-
- html += `
No gap ${code('.row > .col.col--no-gap')} - Auto column
`;
- cols = ['A', 'B', 'C', 'D'];
- html += CivicThemeGrid({
- items: generateItems(cols.length, (i) => placeholder(cols[i - 1])),
- column_attributes: `data-story-total-columns="${cols.length}"`,
- column_class: 'col col--no-gap',
- });
-
- html += '
';
-
- return html;
-};
-
-export const GridGenerator = (parentKnobs = {}) => {
- const knobs = {
- number_of_items: knobNumber(
- 'Number of items',
- 4,
- {
- range: true,
- min: 0,
- max: 15,
- step: 1,
- },
- parentKnobs.number_of_items,
- parentKnobs.knobTab,
- ),
- template_column_count: parseInt(knobRadios(
- 'Template column count',
- {
- 'Not set (use auto columns)': '0',
- 1: '1',
- 2: '2',
- 3: '3',
- 4: '4',
- 6: '6',
- 12: '12',
- },
- '12',
- parentKnobs.template_column_count,
- parentKnobs.knobTab,
- ), 10),
- render_as: knobRadios(
- 'Render as',
- {
- 'div > div': 'divdiv',
- 'ul > li': 'ulli',
- },
- 'divdiv',
- parentKnobs.render_as,
- parentKnobs.knobTab,
- ),
- container_type: knobRadios(
- 'Container type',
- {
- None: '',
- Contained: 'contained',
- Fluid: 'fluid',
- },
- 'contained',
- parentKnobs.container_type,
- parentKnobs.knobTab,
- ),
- fill_width: knobBoolean('Fill width', false, parentKnobs.fill_width, parentKnobs.knobTab),
- row_class: knobText('Additional row class', '', parentKnobs.row_class, 'Attributes'),
- row_attributes: knobText('Additional row attributes', '', parentKnobs.row_attributes, 'Attributes'),
- column_class: knobText('Additional column class', '', parentKnobs.column_class, 'Attributes'),
- column_attributes: knobText('Additional column attributes', '', parentKnobs.column_attributes, 'Attributes'),
- modifier_class: knobText('Additional class', '', parentKnobs.modifier_class, 'Attributes'),
- attributes: knobText('Additional attributes', '', parentKnobs.attributes, 'Attributes'),
- };
-
- const showOutlines = knobBoolean('Show outlines', false, parentKnobs.show_outlines, parentKnobs.knobTab);
-
- const props = {
- items: generateItems(knobs.number_of_items, () => placeholder(Math.floor(12 / (knobs.template_column_count > 0 ? knobs.template_column_count : 12)))),
- row_element: knobs.render_as === 'ulli' ? 'ul' : 'div',
- row_class: knobs.row_class,
- row_attributes: knobs.row_attributes,
- column_element: knobs.render_as === 'ulli' ? 'li' : 'div',
- column_class: knobs.column_class,
- column_attributes: `data-story-total-columns="${knobs.number_of_items}"`,
- use_container: knobs.container_type !== 'none',
- is_fluid: knobs.container_type === 'fluid',
- template_column_count: knobs.template_column_count,
- fill_width: knobs.fill_width,
- attributes: knobs.attributes,
- modifier_class: knobs.modifier_class,
- };
-
- return shouldRender(parentKnobs) ? `${CivicThemeGrid(props)}
` : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.stories.scss
deleted file mode 100644
index 3437e8b1fa..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.stories.scss
+++ /dev/null
@@ -1,184 +0,0 @@
-//
-// Grid component stories.
-//
-
-@use 'sass:math';
-
-.story-grid-outlines {
- $_container-color: red;
- $_fluid-container-color: purple;
- $_row-color: orange;
- $_template-column-color: green;
- $_auto-column-color: blue;
- $_placeholder-text-color: grey;
- $_story-container-color: #25324d;
-
- .container,
- .container-fluid {
- background-color: rgba($_container-color, 0.025);
- box-shadow: 0 0 1px 1px $_container-color inset;
-
- .row,
- ul {
- counter-reset: story-coloumn-counter;
- background-color: rgba($_row-color, 0.2);
- outline: 1px solid rgba($_row-color, 0.2);
-
- // Column.
- > .col,
- > [class*='col-'],
- > li {
- counter-increment: story-coloumn-counter;
- position: relative;
-
- &::after {
- content: counter(story-coloumn-counter) ' of ' attr(data-story-total-columns);
- position: absolute;
- bottom: 2px;
- right: 0;
- left: 0;
- text-align: center;
- font-size: 0.6em;
- }
-
- .row,
- ul {
- counter-reset: story-column-nested-counter;
-
- > .col,
- > [class*='col-'],
- > li {
- counter-increment: story-column-nested-counter;
-
- &::after {
- content: 'Nested ' counter(story-column-nested-counter) ' of ' attr(data-story-total-columns);
- left: auto;
- font-size: 0.4em;
- }
- }
- }
-
- @mixin _ct-story-placeholder-meta($width) {
- position: relative;
-
- &::before {
- content: ct-string($width);
- color: $_placeholder-text-color;
- position: absolute;
- top: 2px;
- left: 0;
- right: 0;
- text-align: center;
- font-size: 0.6em;
- font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
- white-space: nowrap;
- }
- }
-
- // Column content.
- .story-placeholder {
- @include _ct-story-placeholder-meta('100%');
- }
-
- .story-placeholder--hugged {
- @include _ct-story-placeholder-meta('auto');
- }
-
- .story-placeholder--fixed {
- $_width: math.div(ct-breakpoint-next($ct-grid-lowest-breakpoint), 2);
-
- @include _ct-story-placeholder-meta($_width);
- }
- }
-
- // Column colors.
- > [class*='col-'] {
- background-color: rgba($_template-column-color, 0.1);
- outline: 1px solid rgba($_template-column-color, 0.5);
-
- &::after {
- color: $_template-column-color;
- }
- }
-
- > .col,
- > li {
- background-color: rgba($_auto-column-color, 0.1);
- outline: 1px solid rgba($_auto-column-color, 0.5);
-
- &::after {
- color: $_auto-column-color;
- }
- }
- }
- }
-
- .container-fluid {
- background-color: rgba($_fluid-container-color, 0.025);
- box-shadow: 0 0 1px 1px $_fluid-container-color inset;
- }
-
- &.grid-story-docs {
- row-gap: 1em;
-
- > * {
- margin-right: 1em;
- white-space: nowrap;
- }
-
- @mixin _ct-story-docs-color-square($color) {
- &::before {
- content: '';
- display: inline-block;
- height: 1em;
- width: 1em;
- background-color: $color;
- margin-right: 0.5em;
- vertical-align: top;
- }
- }
-
- .grid-story-docs-color-container-contained {
- @include _ct-story-docs-color-square($_container-color);
- }
-
- .grid-story-docs-color-container-fluid {
- @include _ct-story-docs-color-square($_fluid-container-color);
- }
-
- .grid-story-docs-color-row {
- @include _ct-story-docs-color-square($_row-color);
- }
-
- .grid-story-docs-color-template-column {
- @include _ct-story-docs-color-square($_template-column-color);
- }
-
- .grid-story-docs-color-auto-column {
- @include _ct-story-docs-color-square($_auto-column-color);
- }
-
- .grid-story-docs-color-placeholder {
- @include _ct-story-docs-color-square($_placeholder-text-color);
- }
- }
-
- .story-container__title,
- .story-container__subtitle {
- margin-top: 0;
- margin-bottom: 0;
- box-shadow: 0 0 1px 1px $_story-container-color inset;
- }
-
- .story-container__title {
- padding-bottom: ct-spacing(2);
- padding-top: ct-spacing(4);
- }
-
- .story-container__subtitle {
- padding-top: ct-spacing(3);
- padding-bottom: ct-spacing(2);
- }
-}
-
-@include ct-story-docs-conditional('.story-grid-outlines');
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.twig
deleted file mode 100644
index 1e0cb68a15..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/grid/grid.twig
+++ /dev/null
@@ -1,80 +0,0 @@
-{#
-/**
- * @file
- * Grid component.
- *
- * Variables:
- * - items: [array] Array of column items.
- * - row_element: [string] Row element.
- * - row_class: [string] Optional row class override. Deffaults to 'row'.
- * - row_attributes: [string] Additional row attributes.
- * - column_element: [string] Column element.
- * - column_class: [string] Optional column class override. Defaults to 'col' if
- * column auto-generation is not required (template_column_count is 0),
- * otherwise it is appended to the auto-generated column class list.
- * - column_attributes: [string] Additional column attributes.
- * - use_container: [boolean] Whether to use container or not.
- * - is_fluid: [boolean] Whether the grid is fluid or not. Defaults to false.
- * Applies only if `use_container` is true.
- * - template_column_count: [number] Number of columns in the row. If 0 - the
- * auto columns will be used where column width will be calculated
- * automatically. Defaults to 0.
- * - fill_width: [boolean] Stretch "hanging" items to the full width of the row.
- * - attributes: [string] Additional attributes.
- * - modifier_class: [string] Additional classes.
- */
-#}
-
-{% set use_container = use_container|default(true) %}
-{% set is_fluid = is_fluid|default(false) %}
-{% set fill_width = fill_width|default(false) %}
-{% set row_element = row_element|default('div') %}
-{% set column_element = column_element|default('div') %}
-{% set template_column_count = template_column_count|default(0) %}
-{% set row_class = row_class|default('') %}
-{% set modifier_class = modifier_class|default('') %}
-
-{% if template_column_count > 0 %}
- {% set column_class = column_class|default('') %}
- {% set template_column_count = template_column_count in [1, 2, 3, 4, 6, 12] ? template_column_count : 12 %}
- {% set column_class = 'col-xxs-12 col-m-%s %s'|format(12 // template_column_count, column_class)|trim %}
-{% else %}
- {% set column_class = ('col ' ~ column_class|default(''))|trim %}
-{% endif %}
-
-{% set row_classes = ['row'] %}
-{% if fill_width %}
- {% set row_classes = row_classes|merge(['row--fill-width']) %}
-{% endif %}
-{% set row_classes = row_classes|merge([row_class]) %}
-
-{% set container_class = '' %}
-{% if use_container %}
- {% set container_class = ((is_fluid ? 'container-fluid' : 'container') ~ ' ' ~ modifier_class)|trim %}
-{% else %}
- {# Propagade modifier class to row class if container is not used. #}
- {% if modifier_class is not empty %}
- {% set row_classes = row_classes|merge([modifier_class]) %}
- {% endif %}
- {% set row_attributes = (row_attributes ~ ' ' ~ attributes)|trim %}
-{% endif %}
-
-{% set row_class_string = row_classes|join(' ')|trim %}
-
-{% if items is not empty %}
- {% if use_container %}
-
- {% endif %}
- <{{ row_element }} class="{{ row_class_string }}" {% if row_attributes is not empty %}{{ row_attributes|raw }}{% endif %}>
- {% for item in items %}
- {% if item is not empty %}
- <{{ column_element }} class="{{ column_class }}" {% if column_attributes is not empty %}{{ column_attributes|raw }}{% endif %}>
- {{ item|raw }}
- {{ column_element }}>
- {% endif %}
- {% endfor %}
- {{ row_element }}>
- {% if use_container %}
-
- {% endif %}
-{% endif %}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.scss
deleted file mode 100644
index 4b34b26a7c..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Icon component.
-//
-
-@use 'sass:map';
-
-.ct-icon {
- fill: currentcolor;
-
- // Size-less icons inherit dimensions from container's font-size.
- width: 1em;
- height: 1em;
- vertical-align: middle;
-
- // Generate size classes for all pre-set sizes.
- @each $size, $values in _ct-icon-sizes-all() {
- &--size-#{$size} {
- @include ct-icon-size($size);
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.stories.js
deleted file mode 100644
index e2166a937d..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.stories.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// phpcs:ignoreFile
-import merge from 'deepmerge';
-import CivicThemeIcon from './icon.twig';
-import { arrayCombine, knobRadios, knobSelect, knobText, shouldRender, toLabels } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Icon',
- parameters: {
- layout: 'centered',
- },
-};
-
-export const Icon = (parentKnobs = {}) => {
- const defaultSizes = SCSS_VARIABLES['ct-icon-sizes-default'];
- const customSizes = SCSS_VARIABLES['ct-icon-sizes'];
- let sizes = Object.keys(merge(defaultSizes, customSizes));
-
- sizes = arrayCombine(toLabels(sizes), sizes);
- sizes = merge({ Auto: 'auto' }, sizes);
-
- const knobs = {
- symbol: knobSelect('Symbol', ICONS, ICONS[0], parentKnobs.symbol, parentKnobs.knobTab),
- alt: knobText('Alt', 'Icon alt text', parentKnobs.alt, parentKnobs.knobTab),
- size: knobRadios('Size', sizes, 'auto', parentKnobs.size, parentKnobs.knobTab),
- modifier_class: knobText('Additional classes', '', parentKnobs.modifier_class, parentKnobs.knobTab),
- attributes: knobText('Additional attributes', '', parentKnobs.attributes, parentKnobs.knobTab),
- };
-
- return shouldRender(parentKnobs) ? CivicThemeIcon(knobs) : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.twig
deleted file mode 100644
index 7af84d0ff7..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/icon/icon.twig
+++ /dev/null
@@ -1,30 +0,0 @@
-{#
-/**
- * @file
- * Icon component.
- *
- * Variables:
- * - symbol: [string] Required icon name.
- * - size: [string] Optional icon size.
- * - alt: [string] Optional alternate text of the image.
- * - attributes: [string] Optional additional attributes.
- * - modifier_class: [string] Optional additional classes.
- * - assets_dir: [string] Optional assets directory to get icons from.
- */
-#}
-
-{% set assets_dir = assets_dir|default('@civictheme/../assets') %}
-
-{% if symbol is not empty %}
- {% set source = source(assets_dir ~ '/icons/' ~ symbol ~ '.svg', true) %}
- {% if source is not empty %}
- {% set size_class = size ? 'ct-icon--size-' ~ size : '' %}
- {% set base_class = 'ct-icon ' ~ size_class %}
- {% set modifier = modifier_class|default('') %}
- {% set aria_attributes = 'aria-hidden="true" role="img"' %}
- {% set alt_attribute = alt is defined ? 'alt="' ~ alt ~ '"' : '' %}
- {% set additional_attributes = attributes|default('') %}
- {% set attributes = 'class="' ~ base_class ~ ' ' ~ modifier ~ '" ' ~ aria_attributes ~ ' ' ~ alt_attribute ~ ' ' ~ additional_attributes %}
- {{ source|replace({' {
- if (pathUtil.extname(file).toLowerCase() === EXTENSION) {
- iconPaths.push(`${basePath}/${file}`);
- }
- });
-
- return iconPaths;
-}
-
-function getIconNameFromPath(path) {
- return path.replace(basePath, '').substring(1).replace('.svg', '');
-}
-
-function getIcons() {
- return getIconPaths().map((path) => getIconNameFromPath(path));
-}
-
-module.exports = {
- getIcons,
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.scss
deleted file mode 100644
index 72a6ac2dac..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.scss
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// Item List component.
-//
-
-@use 'sass:math';
-@import '../mixins/reset';
-
-.ct-item-list {
- $root: &;
-
- @include ct-reset-box-model();
-
- list-style: none;
-
- {$root}--horizontal {
- display: flex;
- flex-wrap: wrap;
- column-gap: $ct-item-list-horizontal-regular-column-gap;
- row-gap: $ct-item-list-horizontal-regular-row-gap;
-
- {$root}--small {
- column-gap: $ct-item-list-horizontal-small-column-gap;
- row-gap: $ct-item-list-horizontal-small-row-gap;
- }
-
- {$root}--large {
- column-gap: math.div($ct-item-list-horizontal-large-column-gap, 2);
- row-gap: math.div($ct-item-list-horizontal-large-row-gap, 2);
-
- @include ct-breakpoint($ct-grid-responsive-breakpoint) {
- column-gap: $ct-item-list-horizontal-large-column-gap;
- row-gap: $ct-item-list-horizontal-large-row-gap;
- }
- }
-
- {$root}--no-gap {
- gap: unset;
- }
- }
-
- {$root}--vertical {
- display: flex;
- flex-direction: column;
- column-gap: $ct-item-list-vertical-regular-column-gap;
- row-gap: $ct-item-list-vertical-regular-row-gap;
-
- {$root}--small {
- column-gap: $ct-item-list-vertical-small-column-gap;
- row-gap: $ct-item-list-vertical-small-row-gap;
- }
-
- {$root}--large {
- column-gap: math.div($ct-item-list-vertical-large-column-gap, 2);
- row-gap: math.div($ct-item-list-vertical-large-row-gap, 2);
-
- @include ct-breakpoint($ct-grid-responsive-breakpoint) {
- column-gap: $ct-item-list-vertical-large-column-gap;
- row-gap: $ct-item-list-vertical-large-row-gap;
- }
- }
-
- {$root}--no-gap {
- gap: unset;
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.stories.js
deleted file mode 100644
index 25bb3eb77b..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.stories.js
+++ /dev/null
@@ -1,59 +0,0 @@
-// phpcs:ignoreFile
-import CivicThemeItemList from './item-list.twig';
-import { generateItems, knobBoolean, knobNumber, knobRadios, knobText, placeholder, randomSentence, shouldRender } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Item List',
- parameters: {
- layout: 'centered',
- storyLayoutSize: 'large',
- },
-};
-
-export const ItemList = (parentKnobs = {}) => {
- const knobs = {
- direction: knobRadios(
- 'Direction',
- {
- Horizontal: 'horizontal',
- Vertical: 'vertical',
- },
- 'horizontal',
- parentKnobs.direction,
- parentKnobs.knobTab,
- ),
- size: knobRadios(
- 'Size',
- {
- Large: 'large',
- Regular: 'regular',
- Small: 'small',
- },
- 'regular',
- parentKnobs.size,
- parentKnobs.knobTab,
- ),
- no_gap: knobBoolean('No gap', false, parentKnobs.no_gap, parentKnobs.knobTab),
- items_count: knobNumber(
- 'Items count',
- 5,
- {
- range: true,
- min: 0,
- max: 10,
- step: 1,
- },
- parentKnobs.items_count,
- parentKnobs.knobTab,
- ),
- long_placeholder_text: knobBoolean('Long placeholder text', false, parentKnobs.long_placeholder_text, parentKnobs.knobTab),
- attributes: knobText('Additional attributes', '', parentKnobs.attributes, parentKnobs.knobTab),
- modifier_class: knobText('Additional class', '', parentKnobs.modifier_class, parentKnobs.knobTab),
- };
- knobs.items = generateItems(
- knobs.items_count,
- placeholder(knobs.long_placeholder_text ? randomSentence(30) : 'Content placeholder'),
- );
-
- return shouldRender(parentKnobs) ? CivicThemeItemList(knobs) : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.twig
deleted file mode 100644
index 0183cc0e8b..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/item-list/item-list.twig
+++ /dev/null
@@ -1,33 +0,0 @@
-{#
-/**
- * @file
- * Link List component.
- *
- * Variables:
- * - direction: [string] Direction: horizontal, vertical. Defaults to horizontal.
- * - size: [string] Size: large, regular, small. Defaults to regular.
- * - no_gap: [boolean] Render without gaps.
- * - items: [array] Items array
- * - attributes: [string] Additional attributes.
- * - modifier_class: [string] Additional classes.
- */
-#}
-
-{% set direction = direction in ['horizontal', 'vertical'] ? direction : 'horizontal' %}
-{% set size = size in ['small', 'regular', 'large'] ? size : 'regular' %}
-{% set direction_class = 'ct-item-list--%s'|format(direction) %}
-{% set size_class = 'ct-item-list--%s'|format(size) %}
-{% set no_gap_class = no_gap ? 'ct-item-list--no-gap' : '' %}
-{% set modifier_class = '%s %s %s %s'|format(direction_class, size_class, no_gap_class, modifier_class|default('')) %}
-
-{% if items %}
-
- {% for item in items %}
- {% if item is not empty %}
-
- {{- item|raw -}}
-
- {% endif %}
- {% endfor %}
-
-{% endif %}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.js
deleted file mode 100644
index 8a905c8e0b..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.js
+++ /dev/null
@@ -1,98 +0,0 @@
-// phpcs:ignoreFile
-/**
- * @file
- * Layout component.
- */
-function CivicThemeLayout(el) {
- this.el = el;
- this.grid = el.querySelector(':scope > .ct-layout__inner');
- const gridStyle = getComputedStyle(this.grid);
-
- if (gridStyle.gridTemplateRows === 'masonry' || this.grid.hasAttribute('data-masonry')) {
- return;
- }
-
- this.grid.setAttribute('data-masonry', true);
-
- this.stl = this.grid.querySelector(':scope > .ct-layout__sidebar_top_left');
- this.str = this.grid.querySelector(':scope > .ct-layout__sidebar_top_right');
- this.sbl = this.grid.querySelector(':scope > .ct-layout__sidebar_bottom_left');
- this.sbr = this.grid.querySelector(':scope > .ct-layout__sidebar_bottom_right');
-
- // Only enable masonry if all 4 elements are present.
- if (this.stl && this.str && this.sbl && this.sbr) {
- // Prepare redraw variables.
- this.gap = parseFloat(gridStyle.gridRowGap);
- // Items include all children of the grid, not just the 4 sidebar regions.
- this.items = Array.from(this.grid.children);
- this.height = 0;
-
- // Listen for redraw events.
- this.resizeObserver = new ResizeObserver(() => {
- requestAnimationFrame(() => {
- this.masonryRedraw();
- });
- });
-
- // Observe all children of the grid items rather than the items themselves:
- // this allows us to detect changes in the height of the children rather
- // tnan of the grid items as their height will not change when children
- // combined heights is less than a single grid row height.
- this.items.forEach((item) => {
- Array.from(item.children).forEach((child) => {
- this.resizeObserver.observe(child);
- });
- });
-
- this.masonryRedraw();
- }
-}
-
-/**
- * Position element in relation to it's above element.
- */
-CivicThemeLayout.prototype.masonryPositionElement = function (el, aboveEl, gap) {
- const aboveChildIdx = aboveEl.children.length - 1;
- const aboveChild = (aboveChildIdx >= 0) ? aboveEl.children[aboveChildIdx] : null;
- const aboveBottom = aboveChild ? aboveChild.getBoundingClientRect().bottom : aboveEl.getBoundingClientRect().top;
- const currentTop = el.getBoundingClientRect().top;
- el.style.marginTop = `${aboveBottom + gap - currentTop}px`;
-};
-
-/**
- * Reposition grid elements.
- */
-CivicThemeLayout.prototype.masonryRedraw = function () {
- // Calculate the new height of all children.
- //
- // Although masonry layout is applied only if the element has the
- // CSS variable --js-masonry-enabled set and we could have check for this
- // variable to preserve height reclaulation, this variable can be assigned
- // within a specific media query. Therefore, we need to calculate the height
- // in case --js-masonry-enabled is assigned to the element after the viewport
- // has been resized.
- const newHeight = this.items.reduce((totalHeight, item) => {
- const childrenHeight = Array.from(item.children).reduce((childTotal, child) => childTotal + child.getBoundingClientRect().height, 0);
- return totalHeight + childrenHeight;
- }, 0);
-
- // Proceed only if the height has changed.
- if (newHeight !== this.height) {
- this.height = newHeight;
-
- // Clear existing positioning.
- this.sbl.style.removeProperty('margin-top');
- this.sbr.style.removeProperty('margin-top');
-
- // Set new position (if masonry css has been applied).
- if (getComputedStyle(this.grid).getPropertyValue('--js-masonry-enabled')) {
- this.masonryPositionElement(this.sbl, this.stl, this.gap);
- this.masonryPositionElement(this.sbr, this.str, this.gap);
- }
- }
-};
-
-document.querySelectorAll('.ct-layout').forEach((layout) => {
- // eslint-disable-next-line no-new
- new CivicThemeLayout(layout);
-});
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.scss
deleted file mode 100644
index 6112d43d2a..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.scss
+++ /dev/null
@@ -1,323 +0,0 @@
-//
-// Layout component.
-//
-
-.ct-layout {
- $root: &;
-
- &__sidebar_top_left,
- &__sidebar_top_right,
- &__sidebar_bottom_left,
- &__sidebar_bottom_right {
- @include ct-print-hide();
- }
-
- &.ct-vertical-spacing--top {
- #{$root}.ct-vertical-spacing--top,
- #{$root}.ct-vertical-spacing--both {
- margin-top: 0;
- }
-
- #{$root}.ct-vertical-spacing--bottom,
- #{$root}.ct-vertical-spacing--both {
- margin-bottom: 0;
- }
- }
-
- &__inner {
- $inner: &;
-
- display: grid;
- grid-template-columns: repeat($ct-layout-columns, 1fr);
- row-gap: $ct-layout-row-gap;
- grid-template-rows: auto 1fr;
- grid-template-rows: masonry;
-
- @include ct-breakpoint($ct-layout-breakpoint) {
- // Activate masonry layout.
- --js-masonry-enabled: 1;
-
- // See the responsive layout rules at the bottom of this file.
- column-gap: $ct-layout-column-gap;
- }
-
- & {
- --stl: 1;
- --str: 2;
- --m: 3;
- --sbl: 4;
- --sbr: 5;
- }
-
- #{$root}--no-top-left > & {
- --stl: 0;
- --str: 1;
- --m: 2;
- --sbl: 3;
- --sbr: 4;
- }
-
- #{$root}--no-top-right > & {
- --stl: 1;
- --str: 0;
- --m: 2;
- --sbl: 3;
- --sbr: 4;
- }
-
- #{$root}--no-bottom-left > & {
- --stl: 1;
- --str: 2;
- --m: 3;
- --sbl: 0;
- --sbr: 4;
- }
-
- #{$root}--no-bottom-right > & {
- --stl: 1;
- --str: 2;
- --m: 3;
- --sbl: 4;
- --sbr: 0;
- }
-
- #{$root}--no-top-left#{$root}--no-top-right > & {
- --stl: 0;
- --str: 0;
- --m: 1;
- --sbl: 2;
- --sbr: 3;
- }
-
- #{$root}--no-top-left#{$root}--no-bottom-left > & {
- --stl: 0;
- --str: 1;
- --m: 2;
- --sbl: 0;
- --sbr: 3;
- }
-
- #{$root}--no-top-left#{$root}--no-bottom-right > & {
- --stl: 0;
- --str: 1;
- --m: 2;
- --sbl: 3;
- --sbr: 0;
- }
-
- #{$root}--no-top-right#{$root}--no-bottom-left > & {
- --stl: 1;
- --str: 0;
- --m: 2;
- --sbl: 0;
- --sbr: 3;
- }
-
- #{$root}--no-top-right#{$root}--no-bottom-right > & {
- --stl: 1;
- --str: 0;
- --m: 2;
- --sbl: 3;
- --sbr: 0;
- }
-
- #{$root}--no-bottom-left#{$root}--no-bottom-right > & {
- --stl: 1;
- --str: 2;
- --m: 3;
- --sbl: 0;
- --sbr: 0;
- }
-
- #{$root}--no-top-left#{$root}--no-top-right#{$root}--no-bottom-left > & {
- --stl: 0;
- --str: 0;
- --m: 1;
- --sbl: 0;
- --sbr: 2;
- }
-
- #{$root}--no-top-left#{$root}--no-top-right#{$root}--no-bottom-right > & {
- --stl: 0;
- --str: 0;
- --m: 1;
- --sbl: 2;
- --sbr: 0;
- }
-
- #{$root}--no-top-left#{$root}--no-bottom-left#{$root}--no-bottom-right > & {
- --stl: 0;
- --str: 1;
- --m: 2;
- --sbl: 0;
- --sbr: 0;
- }
-
- #{$root}--no-top-right#{$root}--no-bottom-left#{$root}--no-bottom-right > & {
- --stl: 1;
- --str: 0;
- --m: 2;
- --sbl: 0;
- --sbr: 0;
- }
-
- #{$root}--no-top-left#{$root}--no-top-right#{$root}--no-bottom-left#{$root}--no-bottom-right > & {
- --stl: 0;
- --str: 0;
- --m: 1;
- --sbl: 0;
- --sbr: 0;
- }
- }
-
- &__sidebar_top_left {
- grid-column: 1 / span $ct-layout-columns;
- grid-row-start: var(--stl, 1);
-
- @include ct-breakpoint($ct-layout-breakpoint) {
- grid-column: 1 / span $ct-layout-sidebar-left-columns;
- grid-row: 1 / span 1;
- height: auto;
-
- #{$root}--no-bottom-left > #{$root}__inner > & {
- grid-row: 1 / span 2;
- }
- }
- }
-
- &__sidebar_top_right {
- grid-column: 1 / span $ct-layout-columns;
- grid-row-start: var(--str, 2);
-
- @include ct-breakpoint($ct-layout-breakpoint) {
- grid-column: ($ct-layout-columns - $ct-layout-sidebar-right-columns + 1) / span $ct-layout-sidebar-right-columns;
- grid-row: 1 / span 1;
- height: auto;
-
- #{$root}--no-bottom-right > #{$root}__inner > & {
- grid-row: 1 / span 2;
- }
- }
- }
-
- &__main {
- grid-column: 1 / span $ct-layout-columns;
- grid-row-start: var(--m, 3);
-
- @include ct-breakpoint($ct-layout-breakpoint) {
- grid-column: ($ct-layout-sidebar-left-columns + 1) / span ($ct-layout-columns - $ct-layout-sidebar-left-columns - $ct-layout-sidebar-right-columns);
- grid-row: 1 / span 2;
-
- #{$root}--no-top-left#{$root}--no-bottom-left > #{$root}__inner > & {
- grid-column: 1 / span ($ct-layout-columns - $ct-layout-sidebar-right-columns);
- }
-
- #{$root}--no-top-right#{$root}--no-bottom-right > #{$root}__inner > & {
- grid-column: ($ct-layout-sidebar-left-columns + 1) / span ($ct-layout-columns - $ct-layout-sidebar-left-columns);
- }
-
- #{$root}--no-top-left#{$root}--no-bottom-left#{$root}--no-top-right#{$root}--no-bottom-right > #{$root}__inner > & {
- grid-column: 1 / span $ct-layout-columns;
- }
- }
- }
-
- &__sidebar_bottom_left {
- grid-column: 1 / span $ct-layout-columns;
- grid-row-start: var(--sbl, 4);
-
- @include ct-breakpoint($ct-layout-breakpoint) {
- grid-column: 1 / span $ct-layout-sidebar-left-columns;
- grid-row: 2 / span 1;
- height: 100%;
-
- #{$root}--no-top-left > #{$root}__inner > & {
- grid-row: 1 / span 2;
- }
- }
- }
-
- &__sidebar_bottom_right {
- grid-column: 1 / span $ct-layout-columns;
- grid-row-start: var(--sbr, 5);
-
- @include ct-breakpoint($ct-layout-breakpoint) {
- grid-column: ($ct-layout-columns - $ct-layout-sidebar-right-columns + 1) / span $ct-layout-sidebar-right-columns;
- grid-row: 2 / span 1;
- height: 100%;
-
- #{$root}--no-top-right > #{$root}__inner > & {
- grid-row: 1 / span 2;
- }
- }
- }
-}
-
-//
-// Layout has larger gaps when only one sidebar is present.
-// Nested layouts should have the smae larger gaps when only one sidebar is
-// present, but only when the parent layout has no sidebars.
-//
-@include ct-breakpoint($ct-layout-breakpoint) {
- .ct-layout {
- $root: &;
-
- // stylelint-disable-next-line no-duplicate-selectors
- {$root}--no-top-left#{$root}--no-bottom-left > #{$root}__inner {
- column-gap: $ct-layout-column-gap-right-only;
- }
-
- // stylelint-disable-next-line no-duplicate-selectors
- {$root}--no-top-right#{$root}--no-bottom-right > #{$root}__inner {
- column-gap: $ct-layout-column-gap-left-only;
- }
-
- & > #{$root}__inner {
- #{$root} {
- > #{$root}__inner {
- column-gap: $ct-layout-column-gap;
- }
- }
- }
-
- // stylelint-disable-next-line no-duplicate-selectors
- {$root}--no-top-left#{$root}--no-bottom-left > #{$root}__inner {
- #{$root} {
- {$root}--no-top-left#{$root}--no-bottom-left,
- {$root}--no-top-right#{$root}--no-bottom-right {
- > #{$root}__inner {
- column-gap: $ct-layout-column-gap;
- }
- }
- }
- }
-
- // stylelint-disable-next-line no-duplicate-selectors
- {$root}--no-top-right#{$root}--no-bottom-right > #{$root}__inner {
- #{$root} {
- {$root}--no-top-left#{$root}--no-bottom-left,
- {$root}--no-top-right#{$root}--no-bottom-right {
- > #{$root}__inner {
- column-gap: $ct-layout-column-gap;
- }
- }
- }
- }
-
- {$root}--no-top-left#{$root}--no-bottom-left#{$root}--no-top-right#{$root}--no-bottom-right > #{$root}__inner {
- #{$root} {
- {$root}--no-top-left#{$root}--no-bottom-left {
- > #{$root}__inner {
- column-gap: $ct-layout-column-gap-right-only;
- }
- }
-
- {$root}--no-top-right#{$root}--no-bottom-right {
- > #{$root}__inner {
- column-gap: $ct-layout-column-gap-right-only;
- }
- }
- }
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.stories.js
deleted file mode 100644
index 882575643b..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.stories.js
+++ /dev/null
@@ -1,82 +0,0 @@
-// phpcs:ignoreFile
-import './layout';
-import CivicThemeLayout from './layout.twig';
-import { knobBoolean, knobRadios, knobText, placeholder, randomInt, shouldRender, slotKnobs } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Layout',
- parameters: {
- layout: 'fullscreen',
- },
-};
-
-export const Layout = (parentKnobs = {}) => {
- const useLargePlaceholders = knobBoolean('Use large placeholders', false, parentKnobs.use_large_placeholders, parentKnobs.knobTab);
-
- const knobs = {
- sidebar_top_left: knobBoolean('Show top left sidebar', true, parentKnobs.sidebar_top_left, parentKnobs.knobTab) ? placeholder('Top left sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- sidebar_bottom_left: knobBoolean('Show bottom left sidebar', true, parentKnobs.sidebar_bottom_left, parentKnobs.knobTab) ? placeholder('Bottom left sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- hide_sidebar_left: knobBoolean('Hide left sidebar', false, parentKnobs.hide_sidebar_left, parentKnobs.knobTab),
- content: knobBoolean('Show content', true, parentKnobs.content, parentKnobs.knobTab) ? placeholder('Content', useLargePlaceholders ? randomInt(500, 1000) : 0) : '',
- sidebar_top_right: knobBoolean('Show top right sidebar', true, parentKnobs.sidebar_top_right, parentKnobs.knobTab) ? placeholder('Top right sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- sidebar_bottom_right: knobBoolean('Show bottom right sidebar', true, parentKnobs.sidebar_bottom_right, parentKnobs.knobTab) ? placeholder('Bottom right sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- hide_sidebar_right: knobBoolean('Hide right sidebar', false, parentKnobs.hide_sidebar_right, parentKnobs.knobTab),
- is_contained: knobBoolean('Is contained', false, parentKnobs.is_contained, parentKnobs.knobTab),
- };
-
- const showNested = knobBoolean('Show nested layout', false, parentKnobs.show_nested_layout, parentKnobs.knobTab);
-
- // Show nested only if parent content is shown.
- knobs.content = knobs.content && showNested ? CivicThemeLayout({
- ...{
- sidebar_top_left: knobBoolean('Show nested top left sidebar', true, parentKnobs.nested_sidebar_top_left, parentKnobs.knobTab) ? placeholder('Nested top left sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- sidebar_top_left_attributes: 'data-story-nested-layout',
- sidebar_bottom_left: knobBoolean('Show nested bottom left sidebar', true, parentKnobs.nested_sidebar_bottom_left, parentKnobs.knobTab) ? placeholder('Nested bottom left sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- sidebar_bottom_left_attributes: 'data-story-nested-layout',
- content: knobBoolean('Show nested content', true, parentKnobs.nested_content, parentKnobs.knobTab) ? placeholder('Nested content', useLargePlaceholders ? randomInt(500, 1000) : 0) : '',
- content_attributes: 'data-story-nested-layout',
- sidebar_top_right: knobBoolean('Show nested top right sidebar', true, parentKnobs.nested_sidebar_top_right, parentKnobs.knobTab) ? placeholder('Nested top right sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- sidebar_top_right_attributes: 'data-story-nested-layout',
- sidebar_bottom_right: knobBoolean('Show nested bottom right sidebar', true, parentKnobs.nested_sidebar_bottom_right, parentKnobs.knobTab) ? placeholder('Nested bottom right sidebar', useLargePlaceholders ? randomInt(30, 100) : 0) : '',
- sidebar_bottom_right_attributes: 'data-story-nested-layout',
- attributes: 'data-story-nested-layout',
- },
- ...slotKnobs([
- 'content_top',
- 'content_bottom',
- ]),
- }) : knobs.content;
-
- const showOutlines = knobBoolean('Show outlines', false, parentKnobs.show_outlines, parentKnobs.knobTab);
-
- knobs.vertical_spacing = knobRadios(
- 'Vertical spacing',
- {
- None: 'none',
- Top: 'top',
- Bottom: 'bottom',
- Both: 'both',
- },
- 'none',
- parentKnobs.vertical_spacing,
- parentKnobs.knobTab,
- );
-
- const attributesTab = 'Attributes';
- knobs.sidebar_top_left_attributes = knobs.sidebar_top_left ? knobText('Top left sidebar attributes', '', parentKnobs.sidebar_top_left_attributes, attributesTab) : '';
- knobs.sidebar_bottom_left_attributes = knobs.sidebar_bottom_left ? knobText('Bottom left sidebar attributes', '', parentKnobs.sidebar_bottom_left_attributes, attributesTab) : '';
- knobs.content_attributes = knobs.content ? knobText('Content attributes', '', parentKnobs.content_attributes, attributesTab) : '';
- knobs.sidebar_top_right_attributes = knobs.sidebar_top_right ? knobText('Top right sidebar attributes', '', parentKnobs.sidebar_top_right_attributes, attributesTab) : '';
- knobs.sidebar_bottom_right_attributes = knobs.sidebar_bottom_right ? knobText('Bottom right sidebar attributes', '', parentKnobs.sidebar_bottom_right_attributes, attributesTab) : '';
- knobs.modifier_class = knobText('Additional class', '', parentKnobs.modifier_class, parentKnobs.knobTab);
-
- return shouldRender(parentKnobs)
- ? `${CivicThemeLayout({
- ...knobs,
- ...slotKnobs([
- 'content_top',
- 'content_bottom',
- ]),
- })}
`
- : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.stories.scss
deleted file mode 100644
index 4de51f0965..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.stories.scss
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Layout component stories.
-//
-
-@use 'sass:color';
-
-// Nested layout.
-.ct-layout {
- .ct-layout {
- .story-placeholder {
- $_color: #6b5394;
-
- background-color: color.adjust($_color, $alpha: -0.7);
- border: dashed 1px color.adjust($_color, $alpha: -0.3);
- color: color.adjust($_color, $lightness: -30%);
- }
- }
-}
-
-.story-layout-outlines {
- $_viewport-color: blue;
- $_layout-color: green;
- $_container-color: red;
- $_fluid-container-color: purple;
- $_grid-color: orange;
-
- overflow: auto;
- background-color: rgba($_viewport-color, 0.025);
- box-shadow: 0 0 1px 1px $_viewport-color inset;
-
- .ct-layout {
- background-color: rgba($_layout-color, 0.025);
- box-shadow: 0 0 1px 1px $_layout-color inset;
- }
-
- .ct-layout__main,
- .ct-layout__sidebar_top_left,
- .ct-layout__sidebar_top_right,
- .ct-layout__sidebar_bottom_left,
- .ct-layout__sidebar_bottom_right {
- background-color: rgba($_grid-color, 0.025);
- box-shadow: 0 0 1px 1px $_grid-color inset;
- }
-
- .container,
- .container-fluid {
- background-color: rgba($_container-color, 0.025);
- box-shadow: 0 0 1px 1px $_container-color inset;
- }
-
- .container-fluid {
- background-color: rgba($_fluid-container-color, 0.025);
- box-shadow: 0 0 1px 1px $_fluid-container-color inset;
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.twig
deleted file mode 100644
index 2d228bcb03..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/layout/layout.twig
+++ /dev/null
@@ -1,104 +0,0 @@
-{#
-/**
- * @file
- * Layout component.
- *
- * Variables:
- * - content_top: Content top slot.
- * - sidebar_top_left: Top left sidebar slot.
- * - sidebar_top_left_attributes: Top left sidebar attributes.
- * - sidebar_top_right: Top right sidebar slot.
- * - sidebar_top_right_attributes: Top right sidebar attributes.
- * - content: Content slot.
- * - content_attributes: Content attributes.
- * - sidebar_bottom_left: Bottom left sidebar slot.
- * - sidebar_bottom_left_attributes: Bottom left sidebar attributes.
- * - sidebar_bottom_right: Bottom right sidebar slot.
- * - sidebar_bottom_right_attributes: Bottom right sidebar attributes.
- * - content_bottom: Content bottom slot.
- * - hide_sidebar_left: Whether to force hide the left sidebar.
- * - hide_sidebar_right: Whether to force hide the right sidebar.
- * - is_contained: Whether the page is to be contained.
- * - vertical_spacing: [string] With top, bottom or both vertical spaces.
- * - attributes: [string] Additional attributes.
- * - modifier_class: [string] Additional classes.
- */
-#}
-
-{% set has_sidebar_left = (sidebar_top_left is not empty or sidebar_bottom_left is not empty) and not hide_sidebar_left|default(false) %}
-{% set has_sidebar_right = (sidebar_top_right is not empty or sidebar_bottom_right is not empty) and not hide_sidebar_right|default(false) %}
-
-{% set is_contained = is_contained|default(false) %}
-{% set is_contained = is_contained or has_sidebar_left or has_sidebar_right %}
-
-{% set vertical_spacing = has_sidebar_left or has_sidebar_right ? 'top' : vertical_spacing %}
-
-{% set no_sidebar_left_class = hide_sidebar_left ? 'ct-layout--no-sidebar-left' : '' %}
-{% set no_sidebar_right_class = hide_sidebar_right ? 'ct-layout--no-sidebar-right' : '' %}
-{% set no_tl_class = sidebar_top_left is empty or hide_sidebar_left ? 'ct-layout--no-top-left' : '' %}
-{% set no_tr_class = sidebar_top_right is empty or hide_sidebar_right ? 'ct-layout--no-top-right' : '' %}
-{% set no_bl_class = sidebar_bottom_left is empty or hide_sidebar_left ? 'ct-layout--no-bottom-left' : '' %}
-{% set no_br_class = sidebar_bottom_right is empty or hide_sidebar_right ? 'ct-layout--no-bottom-right' : '' %}
-{% set is_contained_class = is_contained ? 'container' : 'container-fluid' %}
-{% set vertical_spacing_class = vertical_spacing in ['top', 'bottom', 'both'] ? 'ct-vertical-spacing--%s'|format(vertical_spacing) : '' %}
-
-{% set modifier_class = '%s %s %s %s %s %s %s %s'|format(no_sidebar_left_class, no_sidebar_right_class, no_tl_class, no_tr_class, no_bl_class, no_br_class, vertical_spacing_class, modifier_class|default('')) %}
-{% set modifier_class = modifier_class|trim %}
-
-{% if content %}
-
- {% block content_top %}
- {% if content_top is not empty %}
- {{- content_top|raw -}}
- {% endif %}
- {% endblock %}
-
-
- {% if content is not empty %}
- {% block content %}
-
- {% endblock %}
- {% endif %}
-
- {% if sidebar_top_left is not empty and has_sidebar_left %}
- {% block sidebar_top_left %}
-
- {% endblock %}
- {% endif %}
-
- {% if sidebar_top_right is not empty and has_sidebar_right %}
- {% block sidebar_top_right %}
-
- {% endblock %}
- {% endif %}
-
- {% if sidebar_bottom_left is not empty and has_sidebar_left %}
- {% block sidebar_bottom_left %}
-
- {% endblock %}
- {% endif %}
-
- {% if sidebar_bottom_right is not empty and has_sidebar_right %}
- {% block sidebar_bottom_right %}
-
- {% endblock %}
- {% endif %}
-
-
- {% block content_bottom %}
- {% if content_bottom is not empty %}
- {{- content_bottom|raw -}}
- {% endif %}
- {% endblock %}
-
-{% endif %}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.stories.js b/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.stories.js
deleted file mode 100644
index 5a97d33753..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.stories.js
+++ /dev/null
@@ -1,30 +0,0 @@
-// phpcs:ignoreFile
-import CivicThemeMenu from './menu.twig';
-import getMenuLinks from './menu.utils';
-import { knobRadios, knobText, shouldRender } from '../storybook/storybook.utils';
-
-export default {
- title: 'Base/Utilities/Menu Generator',
- parameters: {
- layout: 'centered',
- },
-};
-
-export const MenuGenerator = (parentKnobs = {}) => {
- const knobs = {
- theme: knobRadios(
- 'Theme',
- {
- Light: 'light',
- Dark: 'dark',
- },
- 'light',
- parentKnobs.theme,
- parentKnobs.knobTab,
- ),
- items: getMenuLinks({ knobTab: parentKnobs.knobTab }, null),
- modifier_class: knobText('Additional class', '', parentKnobs.modifier_class, parentKnobs.knobTab),
- };
-
- return shouldRender(parentKnobs) ? CivicThemeMenu(knobs) : knobs;
-};
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.stories.scss b/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.stories.scss
deleted file mode 100644
index ebf856b3be..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.stories.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-//
-// Menu component stories.
-//
-
-.ct-menu__item--active-trail {
- > .ct-menu__item__link {
- &::after {
- content: ' (A)';
- }
- }
-}
diff --git a/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.twig b/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.twig
deleted file mode 100644
index d55b897f4c..0000000000
--- a/web/themes/contrib/civictheme/.components-civictheme/00-base/menu/menu.twig
+++ /dev/null
@@ -1,117 +0,0 @@
-{#
-/**
- * @file
- * Menu component.
- *
- * Used to output hierarchical menu structure.
- *
- * Variables:
- * - theme: [string] Theme: light, dark.
- * - items: [array] Menu links array. Each item contains:
- * - title: [string] The title of the link.
- * - url: [string] The link url.
- * - below: [array] Array of submenu items.
- * - is_expanded: [boolean] Flag if the current item has visible child.
- * - in_active_trail: [boolean] Flag if the current item is in the active trail.
- * - is_collapsible: [boolean] Flag whether to collapse the menu.
- * - modifier_class: [string] Additional classes.
- */
-#}
-
-{% set theme_class = 'ct-theme-%s'|format(theme|default('light')) %}
-{% set modifier_class = '%s %s'|format(theme_class, modifier_class|default('')) %}
-
-{% import _self as menus %}
-
-{% macro menu_links(items, menu_level, modifier_class, theme, is_collapsible, parent_key) %}
- {% if items %}
- {% if menu_level == 0 %}
-