/*!
Theme Name: Direct Shower Door
Theme URI: https://directshowerdoor.com/
Author: SmartSites
Author URI: https://www.smartsites.com/
Description: Custom frameless glass shower door site for Southern California, built on the SmartSites _tw architecture.
Version: 0.1.0
Tested up to: 6.7
Requires at least: 6.0
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: LICENSE
Text Domain: direct-shower-door
Tags:

This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned.

Direct Shower Door is based on _tw https://underscoretw.com/, (C) 2021-2024 Greg Sullivan
_tw is distributed under the terms of the GNU GPL v2 or later.

_tw is based on Underscores https://underscores.me/ and Varia https://github.com/Automattic/themes/tree/master/varia, (C) 2012-2023 Automattic, Inc.
Underscores and Varia are distributed under the terms of the GNU GPL v2 or later.
*/

/**
 * NOTES
 *
 * - This file MUST be the first import in tailwind/tailwind.css.
 * - `Version` here is cosmetic. The real version is the DIRECT_SHOWER_DOOR_VERSION
 *   constant in functions.php, replaced with a base36 timestamp by
 *   node_scripts/zip.js on `npm run bundle`.
 * - `Text Domain` matches the slug used in every __() / esc_html__() call.
 */

/**
 * The line above injects the WordPress file header. It needs to be first,
 * before this comment — WordPress only reads a theme header at the very top of
 * style.css.
 */

/**
 * Custom `@font-face` rules and the icon-font glyph map. Imported before
 * Tailwind's base layer so faces are declared before anything uses them.
 */

/**
 * @font-face declarations + the icon-font glyph map.
 * tailwind/custom/fonts.css — imported before Tailwind's base layer.
 *
 * PATHS ARE RELATIVE TO THE BUILD OUTPUT (theme/style.css), so `fonts/x.woff2`
 * resolves to theme/fonts/x.woff2 — not relative to this source file.
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * TEXT FONTS — self-hosted from Google Fonts (downloaded, not a <link>).
 * Only the weights the design actually uses (per the Home page pull):
 * Poppins 300/400/500/600/700, Montserrat 600.
 * ═══════════════════════════════════════════════════════════════════════════ */

@font-face {
  font-family: 'Poppins';

  src: url('fonts/poppins-300.woff2') format('woff2');

  font-weight: 300;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'Poppins';

  src: url('fonts/poppins-400.woff2') format('woff2');

  font-weight: 400;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'Poppins';

  src: url('fonts/poppins-500.woff2') format('woff2');

  font-weight: 500;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'Poppins';

  src: url('fonts/poppins-600.woff2') format('woff2');

  font-weight: 600;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'Poppins';

  src: url('fonts/poppins-700.woff2') format('woff2');

  font-weight: 700;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'Montserrat';

  src: url('fonts/montserrat-600.woff2') format('woff2');

  font-weight: 600;

  font-style: normal;

  font-display: swap;
}

/*
 * Round 88: Inter — added after re-checking, per direct request, whether
 * Inter appeared beyond the single blog-post page originally assumed. It
 * does: identically across San Diego County/Orange County/Newport Beach's
 * testimonial module (quote body Inter Regular 16px, "Submitted <date>"
 * caption Inter Regular 14px, avatar-initials fallback Inter Bold 16px) —
 * the SAME confirmed values on every page that embeds testimonial-slider.php,
 * not a one-off. Only Regular/Bold are confirmed in use on already-built
 * pages; Free Estimate's pull also shows Inter Medium (500), but that page
 * isn't built yet — add that weight when it is, don't load it speculatively.
 */

@font-face {
  font-family: 'Inter';

  src: url('fonts/inter-400.woff2') format('woff2');

  font-weight: 400;

  font-style: normal;

  font-display: swap;
}

@font-face {
  font-family: 'Inter';

  src: url('fonts/inter-700.woff2') format('woff2');

  font-weight: 700;

  font-style: normal;

  font-display: swap;
}

/*
 * Preload the two render-blocking faces in header.php, after wp_head():
 *
 * <link rel="preload" as="font" type="font/woff2" crossorigin
 *       href="<?php echo esc_url( get_template_directory_uri() ); ?>/fonts/poppins-400.woff2">
 * <link rel="preload" as="font" type="font/woff2" crossorigin
 *       href="<?php echo esc_url( get_template_directory_uri() ); ?>/fonts/poppins-600.woff2">
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * ICON FONT (icomoon) — NOT YET SET UP.
 *
 * Generating a real icomoon font requires manually uploading SVGs to
 * icomoon.io and downloading the generated font + selection.json — an
 * external, interactive tool this session cannot drive. `fontFamily.icomoon`
 * stays defined in tailwind.config.js so nothing breaks when it's added, but
 * no @font-face exists yet and no component in this build references
 * `font-icomoon` or an `.icon-*` class — inline SVGs are used instead (see
 * theme/images/icons/). Swap them for icomoon classes once a real export
 * exists, following the workflow in ss-tailwind-setup/references/fonts-and-icons.md.
 * ═══════════════════════════════════════════════════════════════════════════ */

/**
 * Tailwind's base styles (plus any registered by plugins), then this theme's
 * element defaults and type scale.
 */

*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*/

/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box;
  /* 1 */
  border-width: 0;
  /* 2 */
  border-style: solid;
  /* 2 */
  border-color: #e5e7eb;
  /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5;
  /* 1 */
  -webkit-text-size-adjust: 100%;
  /* 2 */
  -moz-tab-size: 4;
  /* 3 */
  -o-tab-size: 4;
     tab-size: 4;
  /* 3 */
  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  /* 4 */
  font-feature-settings: normal;
  /* 5 */
  font-variation-settings: normal;
  /* 6 */
  -webkit-tap-highlight-color: transparent;
  /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0;
  /* 1 */
  line-height: inherit;
  /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0;
  /* 1 */
  color: inherit;
  /* 2 */
  border-top-width: 1px;
  /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  /* 1 */
  font-feature-settings: normal;
  /* 2 */
  font-variation-settings: normal;
  /* 3 */
  font-size: 1em;
  /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0;
  /* 1 */
  border-color: inherit;
  /* 2 */
  border-collapse: collapse;
  /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  /* 1 */
  font-feature-settings: inherit;
  /* 1 */
  font-variation-settings: inherit;
  /* 1 */
  font-size: 100%;
  /* 1 */
  font-weight: inherit;
  /* 1 */
  line-height: inherit;
  /* 1 */
  letter-spacing: inherit;
  /* 1 */
  color: inherit;
  /* 1 */
  margin: 0;
  /* 2 */
  padding: 0;
  /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button;
  /* 1 */
  background-color: transparent;
  /* 2 */
  background-image: none;
  /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield;
  /* 1 */
  outline-offset: -2px;
  /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button;
  /* 1 */
  font: inherit;
  /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/

dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1;
  /* 1 */
  color: #9ca3af;
  /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1;
  /* 1 */
  color: #9ca3af;
  /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/

:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block;
  /* 1 */
  vertical-align: middle;
  /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */

[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}

html,
	body {
  height: 100%;
  width: 100%;
}

/*
	 * Round 72: scroll-padding-top added — confirmed a real bug while testing
	 * toc-anchor-nav's jump links on a freshly-seeded Privacy Policy page:
	 * .site-header is `position:fixed` (see header.css), so a plain #anchor
	 * jump lands the target's top flush at viewport y=0 — exactly where the
	 * fixed header also sits, hiding/overlapping the target's own heading
	 * behind it (confirmed via getBoundingClientRect(): the jumped-to
	 * heading's own top measured 0, same position the header occupies).
	 * scroll-padding-top reserves that space for every anchor jump sitewide
	 * (not just toc-anchor-nav — any #hash link benefits), sized to the
	 * header's own real measured height at each range (102px mobile/tablet,
	 * 131px from lg up) plus a small breathing-room buffer.
	 */

html {
  scroll-padding-top: 7.375rem;
}

@media (min-width: 992px) {
  html {
    scroll-padding-top: 9.6875rem;
  }
}

body {
  margin: 0px;
  min-width: 320px;
  overflow-x: hidden;
  font-family: Poppins, system-ui, -apple-system, Segoe UI, Arial, sans-serif;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.site-wrapper {
  position: relative;
  margin-top: 0px;
  margin-bottom: 0px;
  margin-left: auto;
  margin-right: auto;
  display: flex;
  min-height: 100%;
  flex-direction: column;
  align-items: stretch;
  overflow: hidden;
}

.site-content {
  flex-grow: 1;
}

.site-header,
	.site-content,
	.site-footer {
  flex-shrink: 0;
}

/* ── Media ───────────────────────────────────────────────────────────── */

picture,
	figure {
  margin-bottom: 1rem;
  display: block;
  vertical-align: middle;
}

img {
  display: inline;
  height: auto;
  width: auto;
  max-width: 100%;
  vertical-align: middle;
}

/* ── Text ────────────────────────────────────────────────────────────── */

p {
  margin-bottom: 1rem;
}

a {
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

a:hover {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

hr {
  margin-top: 1rem;
  margin-bottom: 1rem;
}

/* Shared heading properties. Only SIZE (and, for h1/h2, tracking) differs
	 * per level below. Keep the .h1–.h6 aliases: templates use <h3 class="h2">
	 * to get a size without breaking semantic heading order. */

h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
  margin-bottom: 0.5rem;
  font-family: Poppins, sans-serif;
  font-weight: 600;
  line-height: 1.25;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

@media (min-width: 1310px) {
  h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {
    margin-bottom: 1rem;
  }
}

h1, .h1 {
  font-size: 2.25rem;
  letter-spacing: -0.14rem;
}

@media (min-width: 768px) {
  h1, .h1 {
    font-size: 2.75rem;
  }
}

@media (min-width: 1200px) {
  h1, .h1 {
    font-size: 3.25rem;
  }
}

@media (min-width: 1310px) {
  h1, .h1 {
    font-size: 3.75rem;
  }
}

h2, .h2 {
  font-size: 1.5rem;
  letter-spacing: -0.14rem;
}

@media (min-width: 992px) {
  h2, .h2 {
    font-size: 1.75rem;
  }
}

@media (min-width: 1200px) {
  h2, .h2 {
    font-size: 2.25rem;
  }
}

@media (min-width: 1310px) {
  h2, .h2 {
    font-size: 2.5rem;
  }
}

h3, .h3 {
  font-size: 1.125rem;
}

@media (min-width: 1310px) {
  h3, .h3 {
    font-size: 1.5rem;
  }
}

h4, .h4 {
  font-size: 1rem;
}

@media (min-width: 1310px) {
  h4, .h4 {
    font-size: 1.125rem;
  }
}

h4, .h4 {
  /* 16 / 18px — DERIVED, no h4 seen in the pull yet */
}

h5, .h5 {
  font-size: 0.9375rem;
}

@media (min-width: 1310px) {
  h5, .h5 {
    font-size: 1rem;
  }
}

h5, .h5 {
  /* 15 / 16px — DERIVED */
}

h6, .h6 {
  font-size: 0.875rem;
}

@media (min-width: 992px) {
  h6, .h6 {
    font-size: 0.9375rem;
  }
}

@media (min-width: 1310px) {
  h6, .h6 {
    font-size: 1rem;
  }
}

h6, .h6 {
  /* 14 / 15 / 16px — DERIVED */
}

strong,
	b {
  font-weight: 600;
}

/* ── Lists ───────────────────────────────────────────────────────────────
	 * Structural lists (nav, socials, pills) reset these with
	 * `list-none m-0 p-0 space-y-0`.
	 * ─────────────────────────────────────────────────────────────────────── */

ul,
	ol {
  margin-bottom: 1rem;
  margin-left: 1.125rem;
}

ul > :not([hidden]) ~ :not([hidden]),
	ol > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
}

@media (min-width: 992px) {
  ul > :not([hidden]) ~ :not([hidden]),
	ol > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(1rem * var(--tw-space-y-reverse));
  }
}

ul {
  list-style-type: disc;
}

ol {
  list-style-type: decimal;
}

dl {
  margin-bottom: 1rem;
}

dl dt {
  font-weight: 700;
}

dl dd {
  margin-left: 1rem;
}

/* ── Tables ──────────────────────────────────────────────────────────── */

table {
  width: 100%;
  border-collapse: collapse;
}

caption {
  margin-bottom: 0.5rem;
  text-align: center;
  font-size: 1.125rem;
  line-height: 1.75rem;
  font-weight: 700;
}

th,
	td {
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(179 179 179 / var(--tw-border-opacity, 1));
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}

/* ── Quotes, code, misc ──────────────────────────────────────────────── */

blockquote {
  margin-bottom: 1rem;
  border-left-width: 3px;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  background-color: rgb(107 166 202 / 0.1);
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  padding-left: 1rem;
  font-style: italic;
}

abbr,
	acronym,
	dfn {
  border-bottom-width: 1px;
  border-style: dashed;
  --tw-border-opacity: 1;
  border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity, 1));
}

pre {
  margin-bottom: 1rem;
  overflow-x: auto;
  background-color: rgb(107 166 202 / 0.05);
  padding: 1rem;
}

code,
	tt {
  --tw-bg-opacity: 1;
  background-color: rgb(229 229 229 / var(--tw-bg-opacity, 1));
  padding: 0.25rem;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

kbd {
  border-radius: 0.25rem;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(179 179 179 / var(--tw-border-opacity, 1));
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

var,
	samp {
  border-radius: 0.25rem;
  --tw-bg-opacity: 1;
  background-color: rgb(229 229 229 / var(--tw-bg-opacity, 1));
  padding-left: 0.25rem;
  padding-right: 0.25rem;
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

address {
  margin-bottom: 1rem;
}

/* ── Focus ───────────────────────────────────────────────────────────── */

:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

/**
 * Element defaults, responsive type scale and layout scaffolding.
 * tailwind/custom/base.css — injected right after Tailwind's `base` layer.
 *
 * Type scale source: Home page pull (node 33880:17503/17865). Desktop values are
 * confirmed from Figma; mobile values for h4-h6 are DERIVED (no h4-h6 use was
 * visible in what was pulled) using the ratio rule from figma-intake.md —
 * confirm against more pages as they're built.
 */

/**
 * Tailwind's component classes, then this theme's.
 *
 * `@import-glob` (postcss-import-ext-glob) pulls in every file in
 * `./custom/components/` ALPHABETICALLY, excluding `components.css` — so
 * dropping a new file in that directory wires it up with no edit here.
 *
 * `components.css` is then imported explicitly LAST, which lets it override the
 * other component files without `!important`.
 */

.container {
  width: 100%;
  margin-right: auto;
  margin-left: auto;
  padding-right: 1rem;
  padding-left: 1rem;
}

@media (min-width: 576px) {
  .container {
    max-width: 576px;
  }
}

@media (min-width: 768px) {
  .container {
    max-width: 768px;
  }
}

@media (min-width: 992px) {
  .container {
    max-width: 992px;
  }
}

@media (min-width: 1200px) {
  .container {
    max-width: 1200px;
  }
}

@media (min-width: 1310px) {
  .container {
    max-width: 1310px;
  }
}

.prose {
  color: var(--tw-prose-body);
}

.prose :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}

.prose :where([class~="lead"], [class~="is-style-lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-lead);
  font-size: 1.25em;
  line-height: 1.6;
  margin-top: 1.2em;
  margin-bottom: 1.2em;
}

.prose :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-links);
  text-decoration: underline;
  font-weight: 500;
}

.prose :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-bold);
  font-weight: 600;
}

.prose :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: decimal;
  margin-top: 1.25em;
  margin-bottom: 1.25em;
  padding-inline-start: 1.625em;
}

.prose :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-alpha;
}

.prose :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-alpha;
}

.prose :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-alpha;
}

.prose :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-alpha;
}

.prose :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-roman;
}

.prose :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-roman;
}

.prose :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: upper-roman;
}

.prose :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: lower-roman;
}

.prose :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: decimal;
}

.prose :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  list-style-type: disc;
  margin-top: 1.25em;
  margin-bottom: 1.25em;
  padding-inline-start: 1.625em;
}

.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
  font-weight: 400;
  color: var(--tw-prose-counters);
}

.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
  color: var(--tw-prose-bullets);
}

.prose :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  margin-top: 1.25em;
}

.prose :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-color: var(--tw-prose-hr);
  border-top-width: 1px;
  margin-top: 3em;
  margin-bottom: 3em;
  border-bottom: none;
}

.prose :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 500;
  font-style: italic;
  color: var(--tw-prose-quotes);
  border-inline-start-width: 0.25rem;
  border-inline-start-color: var(--tw-prose-quote-borders);
  quotes: "\201C""\201D""\2018""\2019";
  margin-top: 1.6em;
  margin-bottom: 1.6em;
  padding-inline-start: 1em;
}

.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: open-quote;
}

.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
  content: close-quote;
}

.prose :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 800;
  font-size: 2.25em;
  margin-top: 0;
  margin-bottom: 0.8888889em;
  line-height: 1.1111111;
}

.prose :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 900;
  color: inherit;
}

.prose :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 700;
  font-size: 1.5em;
  margin-top: 2em;
  margin-bottom: 1em;
  line-height: 1.3333333;
}

.prose :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 800;
  color: inherit;
}

.prose :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  font-size: 1.25em;
  margin-top: 1.6em;
  margin-bottom: 0.6em;
  line-height: 1.6;
}

.prose :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 700;
  color: inherit;
}

.prose :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  margin-top: 1.5em;
  margin-bottom: 0.5em;
  line-height: 1.5;
}

.prose :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 700;
  color: inherit;
}

.prose :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  display: block;
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  font-weight: 500;
  font-family: inherit;
  color: var(--tw-prose-kbd);
  box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);
  font-size: 0.875em;
  border-radius: 0.3125rem;
  padding-top: 0.1875em;
  padding-inline-end: 0.375em;
  padding-bottom: 0.1875em;
  padding-inline-start: 0.375em;
}

.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-code);
  font-weight: 600;
  font-size: 0.875em;
}

.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: "`";
}

.prose :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
  content: "`";
}

.prose :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
  font-size: 0.875em;
}

.prose :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
  font-size: 0.9em;
}

.prose :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: inherit;
}

.prose :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-pre-code);
  background-color: var(--tw-prose-pre-bg);
  overflow-x: auto;
  font-weight: 400;
  font-size: 0.875em;
  line-height: 1.7142857;
  margin-top: 1.7142857em;
  margin-bottom: 1.7142857em;
  border-radius: 0.375rem;
  padding-top: 0.8571429em;
  padding-inline-end: 1.1428571em;
  padding-bottom: 0.8571429em;
  padding-inline-start: 1.1428571em;
}

.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  background-color: transparent;
  border-width: 0;
  border-radius: 0;
  padding: 0;
  font-weight: inherit;
  color: inherit;
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
}

.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: none;
}

.prose :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
  content: none;
}

.prose :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  width: 100%;
  table-layout: auto;
  margin-top: 2em;
  margin-bottom: 2em;
  font-size: 0.875em;
  line-height: 1.7142857;
}

.prose :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-bottom-width: 1px;
  border-bottom-color: var(--tw-prose-th-borders);
}

.prose :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-headings);
  font-weight: 600;
  vertical-align: bottom;
  padding-inline-end: 0.5714286em;
  padding-bottom: 0.5714286em;
  padding-inline-start: 0.5714286em;
}

.prose :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-bottom-width: 1px;
  border-bottom-color: var(--tw-prose-td-borders);
}

.prose :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-bottom-width: 0;
}

.prose :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  vertical-align: baseline;
}

.prose :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  border-top-width: 1px;
  border-top-color: var(--tw-prose-th-borders);
}

.prose :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  vertical-align: top;
}

.prose :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  text-align: start;
}

.prose :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
  margin-bottom: 0;
}

.prose :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-captions);
  font-size: 0.875em;
  line-height: 1.4285714;
  margin-top: 0.8571429em;
}

.prose {
  --tw-prose-body: #374151;
  --tw-prose-headings: #111827;
  --tw-prose-lead: #4b5563;
  --tw-prose-links: #111827;
  --tw-prose-bold: #111827;
  --tw-prose-counters: #6b7280;
  --tw-prose-bullets: #d1d5db;
  --tw-prose-hr: #e5e7eb;
  --tw-prose-quotes: #111827;
  --tw-prose-quote-borders: #e5e7eb;
  --tw-prose-captions: #6b7280;
  --tw-prose-kbd: #111827;
  --tw-prose-kbd-shadows: rgb(17 24 39 / 10%);
  --tw-prose-code: #111827;
  --tw-prose-pre-code: #e5e7eb;
  --tw-prose-pre-bg: #1f2937;
  --tw-prose-th-borders: #d1d5db;
  --tw-prose-td-borders: #e5e7eb;
  --tw-prose-invert-body: #d1d5db;
  --tw-prose-invert-headings: #fff;
  --tw-prose-invert-lead: #9ca3af;
  --tw-prose-invert-links: #fff;
  --tw-prose-invert-bold: #fff;
  --tw-prose-invert-counters: #9ca3af;
  --tw-prose-invert-bullets: #4b5563;
  --tw-prose-invert-hr: #374151;
  --tw-prose-invert-quotes: #f3f4f6;
  --tw-prose-invert-quote-borders: #374151;
  --tw-prose-invert-captions: #9ca3af;
  --tw-prose-invert-kbd: #fff;
  --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
  --tw-prose-invert-code: #fff;
  --tw-prose-invert-pre-code: #d1d5db;
  --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
  --tw-prose-invert-th-borders: #4b5563;
  --tw-prose-invert-td-borders: #374151;
  font-size: 1rem;
  line-height: 1.75;
}

.prose :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
  margin-bottom: 0;
}

.prose :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

.prose :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-inline-start: 0.375em;
}

.prose :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-inline-start: 0.375em;
}

.prose :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.75em;
  margin-bottom: 0.75em;
}

.prose :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
}

.prose :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-bottom: 1.25em;
}

.prose :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
}

.prose :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-bottom: 1.25em;
}

.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.75em;
  margin-bottom: 0.75em;
}

.prose :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 1.25em;
  margin-bottom: 1.25em;
}

.prose :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0.5em;
  padding-inline-start: 1.625em;
}

.prose :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}

.prose :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}

.prose :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}

.prose :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}

.prose :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-inline-start: 0;
}

.prose :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-inline-end: 0;
}

.prose :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-top: 0.5714286em;
  padding-inline-end: 0.5714286em;
  padding-bottom: 0.5714286em;
  padding-inline-start: 0.5714286em;
}

.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-inline-start: 0;
}

.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  padding-inline-end: 0;
}

.prose :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 2em;
  margin-bottom: 2em;
}

.prose :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-top: 0;
}

.prose :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  margin-bottom: 0;
}

.prose :where(blockquote > cite):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  color: var(--tw-prose-body);
  font-style: normal;
  font-weight: 400;
}

.prose :where(blockquote > cite):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
  content: "\2014";
}

.prose :where(table.has-fixed-layout):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
  table-layout: fixed;
  width: 100%;
}

.prose-neutral {
  --tw-prose-body: #404040;
  --tw-prose-headings: #171717;
  --tw-prose-lead: #525252;
  --tw-prose-links: #171717;
  --tw-prose-bold: #171717;
  --tw-prose-counters: #737373;
  --tw-prose-bullets: #d4d4d4;
  --tw-prose-hr: #e5e5e5;
  --tw-prose-quotes: #171717;
  --tw-prose-quote-borders: #e5e5e5;
  --tw-prose-captions: #737373;
  --tw-prose-kbd: #171717;
  --tw-prose-kbd-shadows: rgb(23 23 23 / 10%);
  --tw-prose-code: #171717;
  --tw-prose-pre-code: #e5e5e5;
  --tw-prose-pre-bg: #262626;
  --tw-prose-th-borders: #d4d4d4;
  --tw-prose-td-borders: #e5e5e5;
  --tw-prose-invert-body: #d4d4d4;
  --tw-prose-invert-headings: #fff;
  --tw-prose-invert-lead: #a3a3a3;
  --tw-prose-invert-links: #fff;
  --tw-prose-invert-bold: #fff;
  --tw-prose-invert-counters: #a3a3a3;
  --tw-prose-invert-bullets: #525252;
  --tw-prose-invert-hr: #404040;
  --tw-prose-invert-quotes: #f5f5f5;
  --tw-prose-invert-quote-borders: #404040;
  --tw-prose-invert-captions: #a3a3a3;
  --tw-prose-invert-kbd: #fff;
  --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);
  --tw-prose-invert-code: #fff;
  --tw-prose-invert-pre-code: #d4d4d4;
  --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
  --tw-prose-invert-th-borders: #525252;
  --tw-prose-invert-td-borders: #404040;
}

.prose .wp-block-table td, .prose .wp-block-table th {
  border: 0;
}

.prose .wp-block-table thead, .prose .wp-block-table tfoot {
  border-color: var(--tw-prose-th-borders);
}

.prose .wp-block-table thead {
  border-bottom-width: 1px;
}

.prose .wp-block-table tfoot {
  border-top-width: 1px;
}

/* ═══════════════════════════════════════════════════════════════════════
	 * Shell
	 * The header is FIXED, so theme/header.php sets a matching top margin on
	 * .site-content (mt-[…] per breakpoint). Take the heights from the token
	 * spec sheet's HEADER block and keep the two in sync.
	 * ═══════════════════════════════════════════════════════════════════════ */

.site-header {
  position: fixed;
  top: 0px;
  left: 0px;
  right: 0px;
  z-index: 99;
  width: 100%;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

/* WP's admin bar (#wpadminbar) is ALSO fixed/top-0 with a higher z-index,
	 * so while logged in it sits on top of and hides this header. `header.php`
	 * deliberately cancels WP's own `html.wp-toolbar { margin-top }` spacer
	 * (the banner needs to stay flush at the real viewport top for visitors),
	 * so nothing else pushes the header down — offset it here instead, scoped
	 * to `.admin-bar` so the logged-out/live site is untouched. 782px is WP
	 * core's own admin-bar breakpoint (32px→46px), not one of this theme's. */

.admin-bar .site-header {
  top: 2rem;
}

@media (max-width: 782px) {
  .admin-bar .site-header {
    top: 46px;
  }
}

/* Confirmed from Figma (Nav Bar, node 33880:462, 1440 desktop frame):
	 * pill x80/y40/w1280/h84, content x95.9/y56/w1249.6/h52 → flat 16px
	 * vertical padding (56-40 top, 124-108 bottom) and a 40px top margin —
	 * NOT the 2xl:py-7 (28px) escalation or mt-4 (16px) this had before.
	 * rgba(40,55,74,0.5) — secondary/50 exactly — with a 10px radius,
	 * floating with a top margin rather than flush to the viewport edge.
	 * Transparent by design (it overlays the hero image).
	 *
	 * Round 186: `backdrop-blur-sm` added — this translucent pill was a flat
	 * color tint with nothing behind it blurred, missing the frosted-glass
	 * read a translucent-over-photo nav bar is meant to have (same blur
	 * strength already established on the mobile navbar-collapse below,
	 * kept consistent rather than picking a new value). Backdrop-filter
	 * degrades safely on its own — unsupported browsers just ignore the
	 * property and fall back to the plain rgba(40,55,74,0.5) tint that was
	 * already here, so no @supports fork is needed. */

/* `backdrop-blur-sm` scoped to `xl:` only (not unconditional) — `filter`/
	 * `backdrop-filter` on an ancestor creates a new containing block for
	 * `position:fixed` descendants. `.navbar-collapse` (the mobile off-canvas
	 * panel) is `position:fixed` below xl and a descendant of `.site-nav`,
	 * so an unconditional blur here was trapping it inside .site-nav's own
	 * small box instead of the viewport — it rendered as a tiny clipped
	 * strip instead of a full-height slide-in panel. The off-canvas panel
	 * already has its own `max-xl:backdrop-blur-sm`, so mobile keeps the
	 * frosted-glass look; only this thin top bar's blur is desktop-only now,
	 * which matches the Figma pull anyway (confirmed against the 1440
	 * desktop frame, node 33880:462 — no mobile nav bar frame was checked). */

.site-nav {
  margin-top: 2.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  border-radius: 10px;
  background-color: rgb(40 55 74 / 0.5);
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

@media (min-width: 992px) {
  .site-nav {
    padding-left: 1.5rem;
    padding-right: 1.5rem;
    padding-top: 1rem;
    padding-bottom: 1rem;
  }
}

@media (min-width: 1200px) {
  .site-nav {
    --tw-backdrop-blur: blur(4px);
    -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
    backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  }
}

.site-nav ul {
  margin: 0px;
  list-style-type: none;
}

/* Round 186: dropped the solid `bg-secondary` override here — now that
	 * `.site-nav`'s base state has `backdrop-blur-sm`, going fully opaque on
	 * scroll makes the blur pointless (nothing behind an opaque layer to
	 * blur) and reads flat/dull stacked against other dark-navy sections
	 * (e.g. trust-stats-bar.php's own bg-secondary) as they scroll past
	 * underneath it.
	 *
	 * Round 187: staying at the base /50 opacity while sticky turned out to
	 * have the opposite problem over WHITE page content — 50% navy over
	 * white blends to a light gray-blue (~rgb(147,155,164)), which is too
	 * pale for the white nav links and light-blue brand text to read
	 * against (confirmed by the math, not just the /50 default which was
	 * only ever confirmed against the dark hero photo, not arbitrary
	 * scrolled-under content). Bumped to /85 for the sticky state
	 * specifically — still translucent + blurred (not the flat opaque
	 * bg-secondary this used to be), just dark enough to hold contrast
	 * over anything scrolling underneath it, white or navy alike. */

.stickyHeader .site-nav {
  background-color: rgb(40 55 74 / 0.85);
  --tw-shadow: 0 0 4px rgba(0,0,0,.2);
  --tw-shadow-colored: 0 0 4px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

@media (min-width: 992px) {
  .stickyHeader .site-nav {
    padding-top: 0.75rem;
    padding-bottom: 0.75rem;
  }
}

.site-header .navbar-brand {
  margin-right: 0.5rem;
  display: inline-block;
  max-width: 11.25rem;
  flex: none;
  line-height: 1;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

@media (min-width: 576px) {
  .site-header .navbar-brand {
    margin-right: 1.5rem;
  }
}

@media (min-width: 1200px) {
  .site-header .navbar-brand {
    max-width: 12.5rem;
  }
}

@media (min-width: 1310px) {
  .site-header .navbar-brand {
    max-width: 20rem;
  }
}

.site-header .navbar-brand figure {
  margin-bottom: 0px;
}

/* ═══════════════════════════════════════════════════════════════════════
	 * Off-canvas panel below xl, inline row above.
	 * Closed: -left-[17.5rem] (wider than max-w so it's fully off-screen).
	 * Open:   .show → left-0
	 * ═══════════════════════════════════════════════════════════════════════ */

.site-header .navbar-collapse {
  width: 100%;
  gap: 1rem;
}

@media not all and (min-width: 1200px) {
  .site-header .navbar-collapse {
    position: fixed;
    left: -17.5rem;
    top: 0px;
    bottom: 0px;
    z-index: 10000;
    height: auto;
    width: 100%;
    max-width: 16rem;
    overflow-y: auto;
    background-color: rgb(107 166 202 / 0.9);
    padding-top: 5rem;
    padding-bottom: 5rem;
    --tw-text-opacity: 1;
    color: rgb(255 255 255 / var(--tw-text-opacity, 1));
    --tw-shadow: 0 0 25px rgba(0,0,0,.2);
    --tw-shadow-colored: 0 0 25px var(--tw-shadow-color);
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
    --tw-backdrop-blur: blur(4px);
    -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
    backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
    transition-property: all;
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    transition-duration: 150ms;
  }
}

@media (min-width: 1200px) {
  .site-header .navbar-collapse {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 2rem;
  }
}

@media not all and (min-width: 1200px) {
  .site-header .navbar-collapse.show {
    left: 0px;
  }
}

.site-header .navbar-collapse ul > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

/* ═══════════════════════════════════════════════════════════════════════
	 * Top-level items
	 * Round 68: removed the ::before "current item" dot — confirmed NOT a
	 * real design element via the Homepage's own nav bar pull
	 * (design-context-33880-8089-san-diego-county.md, node 33880:8385):
	 * Home/About/services/contact/blog are all styled IDENTICALLY (same
	 * white color, same Poppins Regular weight, no dot, no distinguishing
	 * treatment at all). This was leftover boilerplate inherited from the
	 * generic starter template, never actually verified against this
	 * project's Figma. Kept the text-primary/font-semibold color+weight
	 * distinction for the current page — Figma's static export naturally
	 * doesn't model a live "current page" interaction state, and that pair
	 * is a reasonable, unobtrusive real-site affordance on its own; the
	 * dot specifically read as generic-template noise, not a deliberate
	 * design choice.
	 * ═══════════════════════════════════════════════════════════════════════ */

.site-header .navbar-nav {
  row-gap: 0.5rem;
}

.site-header .navbar-nav > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

@media (min-width: 1200px) {
  .site-header .navbar-nav {
    display: flex;
    width: 100%;
    flex-wrap: wrap;
    -moz-column-gap: 1.5rem;
         column-gap: 1.5rem;
  }
}

.site-header .navbar-nav .nav-item > a {
  text-decoration-line: none;
}

/*
	 * FIXED: `xl:text-secondary-800` (near-black) was inherited from the generic
	 * template, which assumes a solid white header at desktop widths. Ours is
	 * ALWAYS dark (semi-transparent navy floating pill, solid navy once
	 * .stickyHeader) per Figma, so nav text must stay white at every
	 * breakpoint — the dark override made links unreadable except when some
	 * other state happened to win the cascade.
	 */

.site-header .navbar-nav .nav-link {
  position: relative;
  display: block;
  width: 100%;
  border-bottom-width: 1px;
  border-bottom-color: rgb(255 255 255 / 0.3);
  padding: 0.875rem;
  font-size: 0.9375rem;
  line-height: 1.5;
  letter-spacing: 0.32px;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
}

.site-header .navbar-nav .nav-link:hover {
  opacity: 1;
}

@media (min-width: 1200px) {
  .site-header .navbar-nav .nav-link {
    width: auto;
    border-bottom-width: 0px;
    padding: 0px;
    padding-left: 0.375rem;
  }

  .site-header .navbar-nav .nav-link:hover {
    --tw-text-opacity: 1;
    color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  }
}

@media (min-width: 1310px) {
  .site-header .navbar-nav .nav-link {
    font-size: 1rem;
  }
}

@media (min-width: 1200px) {
  .site-header .navbar-nav > .nav-item {
    padding-top: 1rem;
    padding-bottom: 1rem;
  }
}

.site-header .current-menu-item .nav-link {
  font-weight: 600;
}

@media (min-width: 1200px) {
  .site-header .current-menu-item .nav-link {
    --tw-text-opacity: 1;
    color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  }

  .site-header .navbar-nav > .menu-item-has-children:hover>.caret {
    --tw-text-opacity: 1;
    color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  }

  .site-header .navbar-nav > .menu-item-has-children:hover>.nav-link {
    --tw-text-opacity: 1;
    color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  }
}

.site-header .menu-item-has-children {
  position: relative;
}

.site-header .menu-item-has-children .nav-link {
  padding-right: 2.75rem;
}

@media (min-width: 1200px) {
  .site-header .menu-item-has-children .nav-link {
    padding-right: 0.875rem;
  }
}

.site-header .navbar-nav .menu-item-has-children .dropdown-menu .nav-link {
  border-bottom-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  padding-left: 0.5rem;
  padding-right: 0.5rem;
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  font-weight: 400;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

@media (min-width: 1200px) {
  .site-header .navbar-nav .menu-item-has-children .dropdown-menu .nav-link {
    padding-top: 0.375rem;
    padding-bottom: 0.375rem;
  }
}

.site-header .navbar-nav .menu-item-has-children .dropdown-menu .menu-item:hover > .nav-link {
  background-color: rgb(107 166 202 / 0.7);
}

.site-header .navbar-nav .menu-item-has-children .dropdown-menu .nav-item:last-child .nav-link {
  border-style: none;
}

.site-header .current-menu-item > .dropdown-item {
  font-weight: 600;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

@media (min-width: 1200px) {
  .site-header .current-menu-item > .dropdown-item {
    font-weight: 500;
  }
}

/* ═══════════════════════════════════════════════════════════════════════
	 * Caret
	 * Above xl it is pointer-events-none on top-level items (hover opens the
	 * dropdown); below xl it is the tap target that slide-toggles the submenu.
	 * ═══════════════════════════════════════════════════════════════════════ */

/* `.caret` sits inside the `<a>` (navwalker: `<a>Title <i class="caret">
	 * </i></a>`), not as a direct child of the `<li>` — the old `> .caret`
	 * chain never matched anything. */

@media (min-width: 1200px) {
  .site-header .navbar-nav > .menu-item-has-children > .nav-link > .caret {
    pointer-events: none;
  }
}

.site-header .menu-item-has-children .caret {
  position: absolute;
  top: 50%;
  right: 0.5rem;
  display: inline;
  width: 2rem;
  height: 2rem;
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  place-items: center;
  text-align: center;
  font-size: 0.625rem;
  font-style: normal;
  line-height: 2rem;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 5ms;
}

@media not all and (min-width: 1200px) {
  .site-header .menu-item-has-children .caret {
    transition-property: transform;
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    transition-duration: 200ms;
  }
}

@media (min-width: 1200px) {
  .site-header .menu-item-has-children .caret {
    position: static;
    right: auto;
    width: auto;
    height: auto;
    transform: none;
    line-height: 1;
  }
}

/* Mobile: rotate to point down while its submenu is open (JS toggles
	 * aria-expanded on click in ss.dropdown()). */

@media not all and (min-width: 1200px) {
  .site-header .menu-item-has-children .caret[aria-expanded='true'] {
    --tw-rotate: 90deg;
    transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  }
}

/* The top-level "Services" caret is deliberately glyph-less on desktop
	 * (see Round 192 below — Figma shows no arrow there, hover opens the
	 * dropdown instead). Mobile has no hover state, so its tap-to-expand
	 * caret needs a visible affordance of its own — nested-level carets
	 * already get one from `.navbar-nav .menu-item .dropdown-menu .caret`
	 * since they sit inside an (eventually) open .dropdown-menu; this is
	 * only the top-level one, which that selector doesn't reach. */

@media not all and (min-width: 1200px) {
  .site-header .navbar-nav > .menu-item-has-children > .nav-link > .caret::before {
    font-size: 0.875rem;
    line-height: 1;
    --tw-text-opacity: 1;
    color: rgb(255 255 255 / var(--tw-text-opacity, 1));
    --tw-content: '>';
    content: var(--tw-content);
  }
}

/* ═══════════════════════════════════════════════════════════════════════
	 * Dropdowns — hover-opened above xl, slide-toggled below.
	 * Multi-level: nested menus fly out to the right.
	 *
	 * Round 191: recolored/resized to match Figma exactly (Nav Dropdown,
	 * node 33880:18204/18224/18233, fileKey 9AXAriC56tjHmx6m2bKAfG) — this
	 * was a generic light dropdown (bg-secondary-50, colored borders,
	 * min-w-220px) never actually checked against the one real menu it's
	 * used for. Confirmed: solid bg-secondary (#28374a) panel, white text,
	 * ~150px-wide columns (auto-width here instead of Figma's fixed
	 * per-column px, since real menu labels vary), rounded BOTTOM corners
	 * only on the first-level flyout (it sits flush under the nav pill),
	 * thin low-opacity white divider lines between rows (not the primary-
	 * colored border this had), and a nested (2nd-level) flyout that adds
	 * rounded-tr since its top-right corner is the only one left exposed
	 * once it's snug against column 1's right edge.
	 * ═══════════════════════════════════════════════════════════════════════ */

/*
	 * xl:top-[60px] (not a %) is deliberate: `.nav-link` has xl:p-0, so the
	 * <li> this dropdown is positioned against (position:relative) is only
	 * ~24px tall — just the text — while the visual nav pill is much
	 * taller via .site-nav's own py-3/py-4. A %-based top anchors to the
	 * <li>'s own short box and lands inside the pill instead of below it.
	 * 60px = li's own height + the gap down to the pill's real bottom edge
	 * (confirmed via direct measurement), matching Figma's near-flush gap. */

.navbar-nav .menu-item .dropdown-menu {
  line-height: 1.4;
}

@media not all and (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu {
    display: none;
    background-color: rgb(40 55 74 / 0.95);
  }
}

@media (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu {
    visibility: hidden;
    position: absolute;
    top: 60px;
    left: -1rem;
    min-width: 160px;
    white-space: nowrap;
    border-bottom-left-radius: 10px;
    border-bottom-right-radius: 10px;
    --tw-bg-opacity: 1;
    background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
    font-size: 1rem;
    opacity: 0;
    --tw-shadow: 0px 2px 15px 0px rgba(0,0,0,0.20);
    --tw-shadow-colored: 0px 2px 15px 0px var(--tw-shadow-color);
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
    transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
    transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
    transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    transition-duration: 500ms;
  }

  .navbar-nav .menu-item-has-children:hover > .dropdown-menu {
    visibility: visible;
    top: 60px;
    opacity: 1;
  }
}

.navbar-nav .menu-item .dropdown-menu .menu-item .dropdown-item {
  display: block;
  border-bottom-width: 1px;
  border-bottom-color: rgb(255 255 255 / 0.1);
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  font-size: 0.875rem;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.navbar-nav .menu-item .dropdown-menu .menu-item:hover > .dropdown-item,
	.navbar-nav .menu-item .dropdown-menu .menu-item:focus > .dropdown-item {
  text-decoration-line: none;
}

@media (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu .menu-item:hover > .dropdown-item,
	.navbar-nav .menu-item .dropdown-menu .menu-item:focus > .dropdown-item {
    --tw-bg-opacity: 1;
    background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
    --tw-text-opacity: 1;
    color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  }
}

.navbar-nav .menu-item .dropdown-menu .menu-item:last-child .dropdown-item {
  border-bottom-width: 0px;
}

/* Third level */

@media (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu .menu-item-has-children:hover .dropdown-menu {
    top: 0px;
  }
}

.navbar-nav .menu-item .dropdown-menu .menu-item-has-children .dropdown-item {
  padding-right: 1.75rem !important;
}

@media not all and (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu .menu-item .dropdown-menu .dropdown-item {
    padding-left: 1.75rem;
  }
}

@media (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu .dropdown-menu {
    left: 100%;
    right: auto;
    top: 0px;
    border-top-right-radius: 10px;
    --tw-shadow: 0 0 #0000;
    --tw-shadow-colored: 0 0 #0000;
    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
  }
}

/* Keep the last few flyouts opening rightward rather than off-screen.
	 * If the design has deep menus near the right edge, revisit this. */

@media (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu .dropdown-menu:nth-last-child(-n + 3) {
    left: 100% !important;
    right: auto !important;
  }
}

/* Round 192: the caret has ALWAYS been an empty `<i class="caret
	 * icon-chevron-down">` — icomoon was never actually set up (see
	 * fonts.css's own "NOT YET SET UP" note), so this glyph has been
	 * invisible sitewide since the theme was built. It only became
	 * noticeable now that "Services" is the first menu item to ever get
	 * real children. Figma shows no arrow on the top-level nav item itself
	 * (only the nested dropdown rows get one: "Frameless >" etc.) — matched
	 * that exactly via a plain CSS `content` character instead of relying
	 * on the unset-up icon font, scoped to nested-level carets only so the
	 * top-level "Services" caret stays glyph-less as confirmed. */

.navbar-nav .menu-item .dropdown-menu .caret {
  font-size: 0.875rem;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

.navbar-nav .menu-item .dropdown-menu .caret::before {
  content: '>';
}

@media (min-width: 1200px) {
  .navbar-nav .menu-item .dropdown-menu .menu-item-has-children:hover .caret {
    --tw-text-opacity: 1;
    color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  }
}

/* ═══════════════════════════════════════════════════════════════════════
	 * Hamburger → X
	 * Three spans of decreasing width; .collapsed rotates the outer two into a
	 * cross and collapses the middle. The delay-300 on the rotations lets the
	 * middle bar disappear first.
	 * ═══════════════════════════════════════════════════════════════════════ */

.site-header .navbar-toggler {
  position: relative;
  display: block;
  height: 2.375rem;
  width: 2.75rem;
  border-radius: 0.375rem;
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  padding: 0.5rem;
  transition-property: all;
  transition-duration: 300ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.site-header .navbar-toggler:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

@media (min-width: 1200px) {
  .site-header .navbar-toggler {
    display: none;
  }
}

.site-header .navbar-toggler span {
  display: block;
  height: 0.1875rem;
  border-radius: 9999px;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  transition-property: all;
  transition-duration: 150ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.site-header .navbar-toggler span:nth-child(2) {
  margin-top: 0.3125rem;
  margin-bottom: 0.3125rem;
  width: calc(100% - 8px);
  transition-property: all;
  transition-duration: 300ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.site-header .navbar-toggler span:nth-child(3) {
  width: calc(100% - 15px);
  transition-property: all;
  transition-duration: 300ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.site-header .navbar-toggler.collapsed span:first-child {
  width: 100%;
  --tw-translate-y: 9px;
  --tw-rotate: 45deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transition-property: all;
  transition-delay: 300ms;
  transition-duration: 300ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.site-header .navbar-toggler.collapsed span:nth-child(2) {
  visibility: hidden;
  width: 0px;
  opacity: 0;
  transition-property: all;
  transition-duration: 300ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

.site-header .navbar-toggler.collapsed span:last-child {
  width: 100%;
  --tw-translate-y: -7px;
  --tw-rotate: 130deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  transition-property: all;
  transition-delay: 300ms;
  transition-duration: 300ms;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

/**
 * Buttons — tailwind/custom/components/buttons.css
 *
 * Markup: <a class="btn">Label</a>  (icons are inline SVG in this build — see
 * fonts.css note on icomoon not being set up yet)
 *
 * Home page pull: buttons are NOT full-pill — a confirmed 5px radius, NOT
 * uppercase (capitalize/sentence case). Deviates from the generic default.
 *
 * Round 183: briefly removed `capitalize` here, reasoning the file's own
 * comment ("sentence case, not uppercase") contradicted the utility
 * (title-cases every word). WRONG — reverted after sampling 35+ cached
 * Figma pulls sitewide (every button node across Orange/Dana Point/
 * Huntington Beach/Laguna Niguel/Irvine/Contact/etc.): every single one has
 * `capitalize` in its own className. The old comment's wording was just
 * imprecise, not the applied utility — `capitalize` (title case) really is
 * Figma's confirmed, consistent, sitewide button style.
 */

.btn {
  display: inline-flex;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 5px;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  padding-top: 15px;
  padding-bottom: 15px;
  padding-left: 30px;
  padding-right: 30px;
  text-align: center;
  font-family: Poppins, sans-serif;
  font-size: 18px;
  font-weight: 400;
  text-transform: capitalize;
  line-height: 1.5;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

.btn:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

.btn:not(.btn-disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

/* Inverted — for use on primary/dark sections. */

.btn-white {
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.btn-white:focus-visible {
  outline-color: #fff;
}

.btn-white:not(.btn-disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

/* Solid navy fill — confirmed in the design (e.g. the nav/hero "Call" button),
 * distinct from the accent-blue .btn default. Added because the design
 * genuinely uses two button fills, not one — see ss-figma-to-html's fidelity
 * table ("a brand-specific... use an arbitrary value and say why"). */

.btn-secondary {
  --tw-border-opacity: 1;
  border-color: rgb(40 55 74 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.btn-secondary:focus-visible {
  outline-color: #28374a;
}

.btn-secondary:not(.btn-disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

/* Outline — used on the hero over the dark image (white border, no fill). */

.btn-outline {
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.btn-outline:not(.btn-disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

/* Applied by JS while a request is in flight, and to "no more results" pills. */

.btn-disabled {
  pointer-events: none;
  cursor: default;
  opacity: 0.8;
}

/* Small variant. */

.btn-sm {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  font-size: 15px;
}

/*
 * CONTRAST CHECK before committing:
 *   - white text on bg-primary (#6ba6ca)         ≥ 4.5:1  — VERIFY, mid-tone blue is borderline
 *   - primary text on white (hover state)        ≥ 4.5:1
 *   - white text on bg-secondary (#28374a)       ≥ 4.5:1  — passes, dark navy
 *   - focus ring against both surfaces           ≥ 3:1
 */

/**
 * Forms — tailwind/custom/components/forms.css
 *
 * Gravity Forms ships NO CSS (`add_filter('gform_disable_css','__return_true')`),
 * so this file owns 100% of form styling. Also covers the WP search form and
 * comment form.
 *
 * This file carries over between projects almost unchanged — RETINT to the new
 * palette rather than rewriting, then verify every field type on the Components
 * page.
 *
 * Variants available to templates:
 *   .form-white       inverted, for forms on dark sections
 *   .subscribe-form   inline newsletter — button overlaid inside the input
 * Variants set as Gravity Forms field CSS classes (Field ▸ Appearance):
 *   .gform-icon .gform-icon--send | --phone | --pin | --mail
 *   .gfield--width-half | --width-third | --width-quarter   (GF's own)
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * Wrapper and labels
 * ═══════════════════════════════════════════════════════════════════════════ */

.gform_wrapper {
  max-width: 100%;
  font-size: 1rem;
  line-height: 1.5rem;
}

/*
 * base.css sets a global `ul { list-disc }` for genuine WYSIWYG content,
 * with structural lists expected to opt out via `.list-none` individually
 * (see its comment) — Gravity Forms' own structural <ul>s (the field list,
 * and choice-field <ul>s for checkbox/radio groups) were never added to
 * that opt-out list, so they rendered with bullet points nothing else in
 * the form ever intended.
 */

.gform_wrapper .gform_fields,
.gform_wrapper .gfield_checkbox,
.gform_wrapper .gfield_radio {
  margin: 0px;
  list-style-type: none;
}

.gform_wrapper .gform_fields > :not([hidden]) ~ :not([hidden]),
.gform_wrapper .gfield_checkbox > :not([hidden]) ~ :not([hidden]),
.gform_wrapper .gfield_radio > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

.gform_wrapper .gform_fields,
.gform_wrapper .gfield_checkbox,
.gform_wrapper .gfield_radio {
  padding: 0px;
}

.gform_wrapper .gform_required_legend {
  display: none;
}

.gform_wrapper .hidden_label label,
.gform_wrapper .hidden_label legend.gfield_label {
  display: none;
}

/*
 * Confirmed from Figma (node 33880:378, the estimate-form card): fields show
 * placeholder-style text INSIDE the empty input ("First Name", "Phone Number",
 * etc.) with no separate visible label anywhere above them — matching the
 * project's pre-Gravity-Forms static markup, which used `sr-only` labels +
 * real `placeholder` attributes for exactly this reason. GF renders real
 * <label> elements by default (a master label plus per-sub-input labels for
 * complex fields like Name) — visually hidden here rather than removed, so
 * the accessible name survives; the per-field `placeholder` property (set on
 * the form itself, not here) supplies the visible text instead.
 */

.gform_wrapper label,
.gform_wrapper legend.gfield_label {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.gform_wrapper .gfield_required {
  margin-left: 0.125rem;
  --tw-text-opacity: 1;
  color: rgb(239 68 68 / var(--tw-text-opacity, 1));
}

.gform_wrapper h3 {
  font-size: 1.125rem;
}

@media (min-width: 576px) {
  .gform_wrapper h3 {
    font-size: 1.25rem;
  }
}

@media (min-width: 1200px) {
  .gform_wrapper h3 {
    font-size: 1.375rem;
  }
}

@media (min-width: 1310px) {
  .gform_wrapper h3 {
    font-size: 1.5rem;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Layout — same negative-margin flex grid as the rest of the theme.
 * .gfield--width-* are Gravity Forms' own classes, mapped to breakpoints here.
 * ═══════════════════════════════════════════════════════════════════════════ */

.gform_wrapper .gform_fields {
  margin-left: -0.625rem;
  margin-right: -0.625rem;
  display: flex;
  flex-wrap: wrap;
  row-gap: 1.25rem;
}

@media (min-width: 1310px) {
  .gform_wrapper .gform_fields {
    margin-left: -1rem;
    margin-right: -1rem;
  }
}

.gform_wrapper .gfield {
  width: 100%;
  flex-grow: 1;
  padding-left: 0.625rem;
  padding-right: 0.625rem;
}

@media (min-width: 1310px) {
  .gform_wrapper .gfield {
    padding-left: 1rem;
    padding-right: 1rem;
  }
}

@media (min-width: 768px) {
  .gform_wrapper .gfield--width-half {
    width: 50%;
  }

  .gform_wrapper .gfield--width-third {
    width: 50%;
  }
}

@media (min-width: 992px) {
  .gform_wrapper .gfield--width-third {
    width: 33.333333%;
  }
}

@media (min-width: 768px) {
  .gform_wrapper .gfield--width-quarter {
    width: 50%;
  }
}

@media (min-width: 992px) {
  .gform_wrapper .gfield--width-quarter {
    width: 25%;
  }
}

/* Complex fields (Name, Address) lay out their sub-inputs via GF's own
 * .gform-grid-row/-col classes — pure structural markup, no layout CSS of
 * its own once gform_disable_css/gform_disable_form_theme_css are on, so
 * without this, sub-inputs (e.g. First/Last) stack instead of sitting
 * side by side. */

.gform_wrapper .gform-grid-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
}

.gform_wrapper .gform-grid-col {
  min-width: 8rem;
  flex: 1 1 0%;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Inputs, selects, textareas
 * ═══════════════════════════════════════════════════════════════════════════ */

/*
 * Confirmed from Figma get_design_context on node 33880:378 (the global
 * estimate-form card): bg-white + border-black/10 (a near-black raw value,
 * not one of the site's named secondary tints — kept literal rather than
 * substituted for a token, since it wasn't confirmed to BE one) + rounded-[4px],
 * not the bg-secondary-50/border-secondary-100/5px this used to carry over
 * unverified from the reference skill's generic default. Height (50px) WAS
 * already confirmed correct from an earlier pull.
 */

.gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']),
.gform_wrapper select,
.gform_wrapper textarea {
  height: 3rem;
  width: 100%;
  resize: none;
  border-radius: 4px;
  border-width: 1px;
  border-color: rgb(0 0 0 / 0.1);
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit'])::-moz-placeholder, .gform_wrapper select::-moz-placeholder, .gform_wrapper textarea::-moz-placeholder {
  color: rgb(40 55 74 / 0.8);
}

.gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit'])::placeholder,
.gform_wrapper select::placeholder,
.gform_wrapper textarea::placeholder {
  color: rgb(40 55 74 / 0.8);
}

.gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']):focus,
.gform_wrapper select:focus,
.gform_wrapper textarea:focus {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

@media (min-width: 576px) {
  .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']),
.gform_wrapper select,
.gform_wrapper textarea {
    font-size: 1rem;
  }
}

@media (min-width: 992px) {
  .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']),
.gform_wrapper select,
.gform_wrapper textarea {
    height: 3.5rem;
  }
}

@media (min-width: 1310px) {
  .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']),
.gform_wrapper select,
.gform_wrapper textarea {
    height: 3.125rem;
  }
}

/* Native select arrow replaced with an inline data-URI SVG so it can be tinted.
 * The %23 in the fill is a URL-encoded '#'. */

.gform_wrapper select {
  cursor: pointer;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2215%22%20height%3D%229%22%20viewBox%3D%220%200%2015%209%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M.428%201.003a1%201%200%200%201%201.414%200l5.293%205.293%205.293-5.293a1%201%200%201%201%201.414%201.414l-6%206a1%201%200%200%201-1.414%200l-6-6a1%201%200%200%201%200-1.414%22%20fill%3D%22%236b7280%22%2F%3E%3C%2Fsvg%3E');
  background-position: calc(100% - 16px) center;
  background-repeat: no-repeat;
  padding-right: 2.5rem;
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
}

.gform_wrapper select option {
  --tw-text-opacity: 1;
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
}

.gform_wrapper textarea {
  min-height: 6.75rem;
}

@media (min-width: 1200px) {
  .gform_wrapper textarea {
    min-height: 8rem;
    padding-top: 1.25rem;
  }
}

/* File upload — strip the input back so the native control shows plainly. */

.gform_wrapper .gfield--type-fileupload input {
  height: auto !important;
  border-radius: 0px !important;
  border-width: 0px !important;
  background-color: transparent !important;
  padding: 0px !important;
}

.gform_wrapper .gfield--type-fileupload .gform_fileupload_multifile {
  margin-top: 0.5rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
}

/* List field */

.gform_wrapper .gfield_list {
  width: 100%;
}

.gform_wrapper .gfield_list thead th {
  padding-bottom: 0.25rem;
  text-align: left;
  font-size: 0.875rem;
  line-height: 1.25rem;
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
}

.gform_wrapper .gfield_list td input {
  height: 2.5rem;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Consent, radio, checkbox
 * hue-rotate-180 recolours the native control without an appearance reset.
 * ═══════════════════════════════════════════════════════════════════════════ */

.gform_wrapper .ginput_container_consent,
.gform_wrapper .gchoice {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
}

.gform_wrapper .ginput_container_consent input,
.gform_wrapper .gchoice input {
  position: relative;
  top: 0.25rem;
  width: 1rem;
  height: 1rem;
  flex: none;
  --tw-hue-rotate: hue-rotate(180deg);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.gform_wrapper .ginput_container_consent label,
.gform_wrapper .ginput_container_consent input,
.gform_wrapper .gchoice label,
.gform_wrapper .gchoice input {
  cursor: pointer;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Validation and confirmation
 * Round 71: per-field validation_message text visually hidden (per direct
 * request — it was pushing later fields down every time it appeared, a
 * real layout shift on every failed validation). Using `sr-only` rather
 * than `hidden`/`display:none`: the message stays in the accessibility
 * tree for screen readers (the "errors must not rely on colour alone"
 * principle this comment used to describe), it just no longer occupies
 * visual space. The red border on the input itself (.gfield_error input
 * etc. below) is the sighted-user signal now.
 * ═══════════════════════════════════════════════════════════════════════════ */

.gform_wrapper .gform_submission_error {
  font-size: 1.125rem;
  line-height: 1.75rem;
  --tw-text-opacity: 1;
  color: rgb(239 68 68 / var(--tw-text-opacity, 1));
}

.gform_wrapper .validation_message {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

/* Round 71: `.gform_validation_errors .validation_error` (a descendant
   selector) never actually matched — GF puts BOTH classes on the SAME
   element (`class="gform_validation_errors validation_error"`), not one
   nested inside the other. Confirmed via the live DOM: this banner was
   rendering with zero styling from this rule, as plain unstyled text —
   which was the real, main contributor to the layout shift (the top
   summary banner, not the per-field messages, which were already a
   comparatively small mt-2 each). Fixed the selector (no space, compound
   class) AND changed it to sr-only, consistent with hiding error TEXT
   sitewide in favor of the red input borders as the sighted-user signal —
   this was the single biggest visible shift of the two. */

.gform_validation_errors.validation_error {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.gfield_error input,
.gfield_error select,
.gfield_error textarea {
  /* !border-red-500 required: the base input rule
	   (.gform_wrapper input:not(...):not(...):not(...)) has three :not()
	   pseudo-classes, each contributing attribute-selector-level
	   specificity — its plain `border-black/10` was winning over this
	   rule's border color regardless of source order (confirmed via
	   computed style: border stayed rgba(0,0,0,0.1) on a field with
	   .gfield_error already applied). This is why the border never
	   actually turned red despite the class being present. */
  --tw-border-opacity: 1 !important;
  border-color: rgb(239 68 68 / var(--tw-border-opacity, 1)) !important;
}

.gform_confirmation_message {
  display: inline-block;
  width: 100%;
  border-radius: 0.75rem;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  padding: 1rem;
  text-align: center;
  font-size: 1rem;
  font-weight: 500;
  line-height: 1.5rem;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Footer, submit, loader
 * ═══════════════════════════════════════════════════════════════════════════ */

.gform_footer {
  position: relative;
  margin-top: 1.25rem;
}

.gform-button--width-full {
  width: 100%;
}

/*
 * Confirmed from Figma (node 33880:378, form submit button): rounded-[10px]
 * (NOT .btn's 5px — a genuine inconsistency vs the adjacent "Call" button in
 * the same composite, flagged rather than changed site-wide), px-5 py-4
 * (20px/16px, NOT .btn's 30px/15px), font-semibold (NOT .btn's font-normal).
 * `!` since these override .btn/.btn-secondary applied on the same element.
 *
 * Width: Figma has this button at a literal w-[415px] — the SAME fixed width
 * as every input field above it (they're all w-[415px] too, at that one
 * 1440px frame). The confirmed relationship is "button matches the fields'
 * width", not a specific pixel value — reproduced as `w-full` (the fields
 * are already effectively edge-to-edge via .gform_fields' negative-margin
 * trick canceling each .gfield's own padding) so it holds at every
 * breakpoint instead of only being correct at exactly one frame width.
 */

.gform-submit-btn {
  display: flex !important;
  width: 100% !important;
  border-radius: 10px !important;
  padding-left: 1.25rem !important;
  padding-right: 1.25rem !important;
  padding-top: 1rem !important;
  padding-bottom: 1rem !important;
  font-weight: 600 !important;
}

/*
 * One-off exception: the Free Estimate page's process-info-form-split card
 * embeds this SAME form (id 1) a second time, and Figma's own raw markup for
 * THAT specific button (node 33880:16929) has no width class at all —
 * `shrink-0`, sized to its own content, not stretched to match the fields
 * above it like every other confirmed instance. Scoped so the sitewide
 * w-full default (confirmed elsewhere) isn't disturbed.
 */

.process-form-narrow-submit .gform-submit-btn {
  width: auto !important;
}

/* CSS-only spinner, no image. */

.gform-loader {
  position: absolute;
  top: 50%;
  right: 0.5rem;
  z-index: 10;
  display: block !important;
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.gform-loader::after {
  display: block;
  height: 0.75rem;
  content: var(--tw-content);
  width: 0.75rem;
}

@keyframes spin {
  to {
    content: var(--tw-content);
    transform: rotate(360deg);
  }
}

.gform-loader::after {
  animation: spin 1s linear infinite;
  border-radius: 9999px;
  border-width: 2px;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  border-top-color: rgb(0 0 0 / var(--tw-border-opacity, 1));
  content: var(--tw-content);
  --tw-border-opacity: 1;
  border-left-color: rgb(0 0 0 / var(--tw-border-opacity, 1));
}

/* Multi-page nav. `only:ml-auto` right-aligns Next when Previous is absent. */

.gform_page_footer {
  margin-top: 1.25rem;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 1rem;
}

.gform_page_footer .btn {
  min-width: 9.0625rem;
}

.gform_page_footer .btn:only-child {
  margin-left: auto;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Variant: .form-white — forms on dark sections
 * ═══════════════════════════════════════════════════════════════════════════ */

.form-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.form-white .gform_wrapper label,
.form-white .gform_wrapper legend.gfield_label {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.form-white .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']),
.form-white .gform_wrapper select,
.form-white .gform_wrapper textarea {
  background-color: rgb(255 255 255 / 0.1);
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.form-white .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit'])::-moz-placeholder, .form-white .gform_wrapper select::-moz-placeholder, .form-white .gform_wrapper textarea::-moz-placeholder {
  color: rgb(255 255 255 / 0.5);
}

.form-white .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit'])::placeholder,
.form-white .gform_wrapper select::placeholder,
.form-white .gform_wrapper textarea::placeholder {
  color: rgb(255 255 255 / 0.5);
}

.form-white .gform_wrapper select {
  background-image: url('./images/arrow-down-white.png');
  color: rgb(255 255 255 / 0.5);
}

/* ⚠ CONTRAST: white/50 placeholder on white/10 over a dark section is usually
 * below 4.5:1. Verify, and raise to white/70 if it fails. */

/* ═══════════════════════════════════════════════════════════════════════════
 * Variant: suffix icons inside fields
 * Applied as a Gravity Forms field CSS class: `gform-icon gform-icon--send`
 * ⚠ Hardcoded icomoon codepoints — verify if the icon set is re-exported.
 * ═══════════════════════════════════════════════════════════════════════════ */

.gform_wrapper .gform-icon .ginput_container {
  position: relative;
}

.gform_wrapper .gform-icon .ginput_container::after {
  position: absolute;
  top: 50%;
  right: 1.5rem;
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  font-family: icomoon;
  font-size: 0.875rem;
  line-height: 1;
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
  --tw-content: '';
  content: var(--tw-content);
}

.gform_wrapper .gform-icon .ginput_container input {
  padding-right: 2.5rem !important;
}

@media (min-width: 1310px) {
  .gform_wrapper .gform-icon .ginput_container input {
    padding-right: 2.75rem !important;
  }
}

.gform_wrapper .gform-icon .ginput_container textarea {
  padding-top: 0.875rem;
}

@media (min-width: 1310px) {
  .gform_wrapper .gform-icon .ginput_container textarea {
    padding-right: 2.75rem !important;
  }
}

.gform_wrapper .gform-icon .ginput_container.ginput_container_textarea::after {
  top: 1.25rem;
  --tw-translate-y: -0px;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.gform_wrapper .gform-icon.gform-icon--send .ginput_container::after {
  --tw-content: '\e90a';
  content: var(--tw-content);
}

.gform_wrapper .gform-icon.gform-icon--phone .ginput_container::after {
  --tw-content: '\e903';
  content: var(--tw-content);
}

.gform_wrapper .gform-icon.gform-icon--pin .ginput_container::after {
  --tw-content: '\e900';
  content: var(--tw-content);
}

.gform_wrapper .gform-icon.gform-icon--mail .ginput_container::after {
  --tw-content: '\e901';
  content: var(--tw-content);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Variant: .subscribe-form — inline newsletter, button inside the input
 * ═══════════════════════════════════════════════════════════════════════════ */

.subscribe-form form {
  position: relative;
}

.subscribe-form .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']) {
  border-radius: 9999px;
  --tw-border-opacity: 1;
  border-color: rgb(179 179 179 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  letter-spacing: 0.3px;
}

.subscribe-form .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit'])::-moz-placeholder {
  --tw-text-opacity: 1;
  color: rgb(153 153 153 / var(--tw-text-opacity, 1));
}

.subscribe-form .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit'])::placeholder {
  --tw-text-opacity: 1;
  color: rgb(153 153 153 / var(--tw-text-opacity, 1));
}

@media (min-width: 576px) {
  .subscribe-form .gform_wrapper input:not([type='radio']):not([type='checkbox']):not([type='submit']) {
    height: 3.25rem;
    padding-left: 1.25rem;
    padding-right: 9rem;
  }
}

.subscribe-form .gform_footer {
  margin-top: 0.75rem;
}

@media (min-width: 576px) {
  .subscribe-form .gform_footer {
    position: absolute;
    right: 0.25rem;
    top: 0.25rem;
    z-index: 1;
    margin-top: 0px;
  }
}

.subscribe-form .btn {
  padding-top: 9px;
  padding-bottom: 9px;
  padding-left: 2rem;
  padding-right: 2rem;
  font-size: 1rem;
  font-weight: 400;
  text-transform: capitalize;
  letter-spacing: 0.3px;
}

@media not all and (min-width: 576px) {
  .subscribe-form .btn {
    width: 100%;
  }
}

.subscribe-form .btn i {
  display: none;
}

.subscribe-form .gform_validation_errors {
  margin-bottom: 1rem;
  border-radius: 0.375rem;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding: 1rem;
}

.subscribe-form .gfield_validation_message {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

/* ═══════════════════════════════════════════════════════════════════════════
 * jQuery UI datepicker (Gravity Forms date fields)
 * ═══════════════════════════════════════════════════════════════════════════ */

.ui-datepicker {
  z-index: 10 !important;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  font-size: 0.75rem;
}

.ginput_container_date {
  position: relative;
}

.gdatepicker_with_icon {
  padding-right: 3.5rem !important;
}

.ui-datepicker-trigger {
  position: absolute;
  top: 50%;
  right: 1.25rem;
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

@media not all and (min-width: 1310px) {
  .ui-datepicker-trigger {
    height: 6px;
    width: 12px;
  }
}

.ui-datepicker a {
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.ui-datepicker-header {
  display: flex;
  cursor: pointer;
  flex-wrap: wrap;
  justify-content: space-between;
}

.ui-datepicker-header a {
  margin-bottom: 1px;
  width: 49.8%;
  border-width: 1px;
  border-bottom-width: 0px;
  border-style: solid;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  padding: 5px;
  text-align: center;
  font-weight: 500;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.ui-datepicker-header a:not(:last-of-type) {
  --tw-border-opacity: 1;
  border-right-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
}

.ui-datepicker-header a:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar {
  width: 100%;
  border-collapse: collapse;
  border-width: 1px;
  border-style: solid;
  --tw-border-opacity: 1;
  border-color: rgb(179 179 179 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-shadow: 0 0 5px rgba(0,0,0,0.1);
  --tw-shadow-colored: 0 0 5px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.ui-datepicker-calendar th,
.ui-datepicker-calendar td {
  border-width: 1px;
  border-style: solid;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  padding: 0.25rem;
  text-align: center;
  --tw-text-opacity: 1;
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar td.ui-state-disabled {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(229 229 229 / var(--tw-bg-opacity, 1)) !important;
  --tw-text-opacity: 1;
  color: rgb(153 153 153 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar .ui-state-hover,
.ui-datepicker-calendar .ui-state-active {
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar td:not(.ui-state-disabled):hover {
  cursor: pointer;
  background-color: rgb(107 166 202 / 0.6);
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar td:not(.ui-state-disabled):hover a {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar td.ui-datepicker-today {
  --tw-bg-opacity: 1 !important;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1)) !important;
}

.ui-datepicker-calendar td.ui-datepicker-today a,
.ui-datepicker-calendar td.ui-datepicker-current-day a {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.ui-datepicker-calendar td.ui-datepicker-week-end {
  background-color: rgb(107 166 202 / .1);
}

.ui-datepicker-calendar td.ui-datepicker-current-day {
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
}

.ui-datepicker-title {
  flex-shrink: 1;
  flex-grow: 1;
  flex-basis: 100%;
}

.ui-datepicker-title select {
  width: 50%;
  cursor: pointer;
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  border-width: 1px;
  border-bottom-width: 0px;
  border-style: solid;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2215%22%20height%3D%229%22%20viewBox%3D%220%200%2015%209%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M.428%201.003a1%201%200%200%201%201.414%200l5.293%205.293%205.293-5.293a1%201%200%201%201%201.414%201.414l-6%206a1%201%200%200%201-1.414%200l-6-6a1%201%200%200%201%200-1.414%22%20fill%3D%22%237f7f7f%22%2F%3E%3C%2Fsvg%3E');
  background-size: 14px;
  background-position: calc(100% - 16px) center;
  background-repeat: no-repeat;
  padding: 3px;
  padding-right: 1.5rem;
  text-align: center;
  font-size: 0.8125rem;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.ui-datepicker-title select:first-child {
  border-right-width: 0px;
}

.ui-datepicker-title select:focus {
  outline-width: 0px;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * WordPress search form
 * ═══════════════════════════════════════════════════════════════════════════ */

form[role='search'] {
  position: relative;
  display: flex;
}

.search-form > label {
  flex-shrink: 0;
  flex-grow: 1;
  flex-basis: 0px;
}

.search-form input[type='search'],
.search-form input[type='text'] {
  height: 50px;
  width: 100%;
  border-top-left-radius: 9999px;
  border-bottom-left-radius: 9999px;
  border-width: 1px;
  border-style: solid;
  border-color: rgb(40 55 74 / 0.5);
  background-color: transparent;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  padding-left: 1.25rem;
  padding-right: 1.25rem;
  font-size: 0.9375rem;
  line-height: 1;
  letter-spacing: 1px;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.search-form input[type='search']:focus,
.search-form input[type='text']:focus {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
}

@media (min-width: 576px) {
  .search-form input[type='search'],
.search-form input[type='text'] {
    border-right-width: 0px;
  }
}

@media (min-width: 992px) {
  .search-form input[type='search'],
.search-form input[type='text'] {
    height: 52px;
  }
}

@media (min-width: 1310px) {
  .search-form input[type='search'],
.search-form input[type='text'] {
    height: 60px;
  }
}

.search-form input[type='submit'] {
  border-top-left-radius: 0px !important;
  border-bottom-left-radius: 0px !important;
  display: inline-flex;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: 5px;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  padding-top: 15px;
  padding-bottom: 15px;
  padding-left: 30px;
  padding-right: 30px;
  text-align: center;
  font-family: Poppins, sans-serif;
  font-size: 18px;
  font-weight: 400;
  text-transform: capitalize;
  line-height: 1.5;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

.search-form input[type='submit']:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

.search-form input[type='submit']:not(.btn-disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.gform_page_footer .search-form input[type='submit'] {
  min-width: 9.0625rem;
}

.gform_page_footer .search-form input[type='submit']:only-child {
  margin-left: auto;
}

.subscribe-form .search-form input[type='submit'] {
  padding-top: 9px;
  padding-bottom: 9px;
  padding-left: 2rem;
  padding-right: 2rem;
  font-size: 1rem;
  font-weight: 400;
  text-transform: capitalize;
  letter-spacing: 0.3px;
}

@media not all and (min-width: 576px) {
  .subscribe-form .search-form input[type='submit'] {
    width: 100%;
  }
}

.subscribe-form .search-form input[type='submit'] i {
  display: none;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Comment form
 * ═══════════════════════════════════════════════════════════════════════════ */

#commentform > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}

@media (min-width: 1310px) {
  #commentform > :not([hidden]) ~ :not([hidden]) {
    --tw-space-y-reverse: 0;
    margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
    margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
  }
}

#commentform p {
  margin-bottom: 0px;
}

#commentform input:not([type='radio']):not([type='checkbox']):not([type='file']):not([type='submit']),
#commentform textarea {
  height: 3rem;
  width: 100%;
  resize: none;
  border-radius: 0.25rem;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(179 179 179 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
  outline: 2px solid transparent;
  outline-offset: 2px;
}

#commentform input:not([type='radio']):not([type='checkbox']):not([type='file']):not([type='submit'])::-moz-placeholder, #commentform textarea::-moz-placeholder {
  --tw-text-opacity: 1;
  color: rgb(153 153 153 / var(--tw-text-opacity, 1));
}

#commentform input:not([type='radio']):not([type='checkbox']):not([type='file']):not([type='submit'])::placeholder,
#commentform textarea::placeholder {
  --tw-text-opacity: 1;
  color: rgb(153 153 153 / var(--tw-text-opacity, 1));
}

#commentform input:not([type='radio']):not([type='checkbox']):not([type='file']):not([type='submit']):focus,
#commentform textarea:focus {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

#commentform textarea {
  min-height: 6.75rem;
}

.comment-reply-title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem;
}

/**
 * Header and navigation — tailwind/custom/components/header.css
 *
 * Written against WP_Bootstrap_Navwalker's output — the walker and this file
 * travel together. Restyle here; don't swap the walker.
 *
 * Walker classes: .nav-item · .nav-link · .dropdown-menu · .dropdown-item ·
 *                 .menu-item-has-children · .current-menu-item ·
 *                 <i class="caret icon-chevron-down"> injected after parent links
 * JS classes (javascript/script.js → ss.nav()):
 *                 .stickyHeader on scroll >60px, .navbar-collapse.show,
 *                 .navbar-toggler.collapsed
 *
 * xl (1200px) is the mobile↔desktop switch point. `max-xl:` = below it.
 * Change `screens.xl` and this whole file's behaviour moves with it.
 */

/*
 * ACCESSIBILITY — the reference theme omits all of this. Add it:
 *   - aria-expanded on .navbar-toggler, toggled by ss.nav()
 *   - aria-expanded on .caret buttons
 *   - a .skip-link as the first child of .site-wrapper (see components.css)
 *   - focus trap in the open off-canvas panel, and remove it from the tab order
 *     when closed (the CSS above only moves it off-screen)
 *   - Escape closes the panel
 */

/**
 * Editor output, pagination, search results.
 * tailwind/custom/components/site-content.css
 *
 * `.default-block` is the wrapper for WYSIWYG and Gutenberg content in modules and
 * pages. It is DISTINCT from Tailwind Typography's `prose` (configured in
 * tailwind-typography.config.js, used for blog the_content()). Never put both
 * classes on the same element.
 *
 * Everything here styles markup you don't control, which is why it's a component
 * file rather than inline utilities.
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * .default-block — WYSIWYG / Gutenberg
 * ═══════════════════════════════════════════════════════════════════════════ */

.default-block {
  color: rgb(40 55 74 / 0.8);
}

@media (min-width: 1310px) {
  .default-block p + p {
    margin-top: 1.25rem;
  }
}

.default-block :is(h1, h2, h3, h4, h5, h6) {
  letter-spacing: 0em;
  --tw-text-opacity: 1;
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
}

.default-block p + :is(h1, h2, h3, h4, h5, h6),
.default-block blockquote + :is(h1, h2, h3, h4, h5, h6) {
  margin-top: 1.25rem;
}

.default-block ul > :not([hidden]) ~ :not([hidden]),
.default-block ol > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}

.default-block ul li *::marker,
.default-block ol li *::marker {
  color: inherit;
}

.default-block ul li::marker,
.default-block ol li::marker {
  color: inherit;
}

/* Links inside body copy inherit colour and underline — distinguishable without
 * relying on colour alone. */

.default-block ul a,
.default-block ol a,
.default-block p a {
  color: inherit;
  text-decoration-line: underline;
}

.default-block ul a:hover,
.default-block ol a:hover,
.default-block p a:hover {
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.default-block .wp-block-quote {
  margin-top: 1.25rem;
  margin-bottom: 1.25rem;
}

@media (min-width: 992px) {
  .default-block .wp-block-quote {
    margin-top: 1.75rem;
    margin-bottom: 1.75rem;
  }
}

@media (min-width: 1310px) {
  .default-block .wp-block-quote {
    margin-top: 2.25rem;
    margin-bottom: 2.25rem;
  }
}

.default-block .wp-block-quote p:last-of-type {
  margin-bottom: 0px;
}

.default-block p + .wp-block-buttons,
.default-block .wp-block-buttons + p {
  margin-top: 1.5rem;
}

@media (min-width: 992px) {
  .default-block p + .wp-block-buttons,
.default-block .wp-block-buttons + p {
    margin-top: 2rem;
  }
}

@media (min-width: 1310px) {
  .default-block p + .wp-block-buttons,
.default-block .wp-block-buttons + p {
    margin-top: 2.5rem;
  }
}

/* ── Images ─────────────────────────────────────────────────────────────── */

.default-block .wp-block-image {
  margin-top: 1.5rem;
  margin-bottom: 1.5rem;
  text-align: center;
}

@media (min-width: 576px) {
  .default-block .wp-block-image {
    margin-top: 2rem;
    margin-bottom: 2rem;
  }
}

@media (min-width: 992px) {
  .default-block .wp-block-image {
    margin-top: 2.5rem;
    margin-bottom: 2.5rem;
  }
}

.default-block .wp-block-image img {
  margin-left: auto;
  margin-right: auto;
}

.default-block img {
  border-radius: 1rem;
}

/* ── Columns and media-text ─────────────────────────────────────────────────
 * Gutenberg's own flex/grid rules are overridden with !flex / !grid so the
 * theme's gutter system applies. `max-sm:block` stacks them on mobile.
 * ────────────────────────────────────────────────────────────────────────── */

.default-block .wp-block-columns {
  display: flex !important;
}

.default-block .wp-block-media-text {
  display: grid !important;
}

.default-block .wp-block-columns,
.default-block .wp-block-media-text {
  margin-left: -1rem;
  margin-right: -1rem;
  align-items: center !important;
  row-gap: 1.5rem;
}

@media not all and (min-width: 576px) {
  .default-block .wp-block-columns,
.default-block .wp-block-media-text {
    display: block;
  }
}

@media (min-width: 768px) {
  .default-block .wp-block-columns,
.default-block .wp-block-media-text {
    margin-top: 1.5rem;
    margin-bottom: 1.5rem;
  }
}

@media (min-width: 992px) {
  .default-block .wp-block-columns,
.default-block .wp-block-media-text {
    margin-top: 2.25rem;
    margin-bottom: 2.25rem;
  }
}

.default-block .wp-block-column,
.default-block .wp-block-media-text__media,
.default-block .wp-block-media-text__content {
  padding-left: 1rem;
  padding-right: 1rem;
}

.default-block .wp-block-column:nth-child(2n),
.default-block .wp-block-media-text__media:nth-child(2n),
.default-block .wp-block-media-text__content:nth-child(2n) {
  margin-left: 0px;
}

.default-block .wp-block-columns .wp-block-image {
  margin-top: 0px;
}

@media not all and (min-width: 576px) {
  .default-block .wp-block-columns .wp-block-image {
    margin-top: 0.5rem;
  }
}

@media (min-width: 768px) {
  .default-block .wp-block-columns .wp-block-image {
    margin-bottom: 1.5rem;
  }
}

.default-block .wp-block-columns .wp-block-image {
  margin-bottom: 0px;
}

.default-block .wp-block-columns .wp-block-gallery,
.default-block .wp-block-columns .blocks-gallery-item {
  margin: 0px;
  padding: 0px;
}

.default-block .wp-block-columns .wp-block-gallery {
  list-style-type: none;
}

.default-block .wp-block-columns .blocks-gallery-item::before {
  content: var(--tw-content);
  display: none;
}

/* ── Two-column list utility (add the class in the editor) ─────────────── */

.default-block .list-columns-2 ul *::marker,
.default-block ul.list-columns-2 *::marker {
  color: rgb(107 166 202 );
}

.default-block .list-columns-2 ul::marker,
.default-block ul.list-columns-2::marker {
  color: rgb(107 166 202 );
}

@media (min-width: 992px) {
  .default-block .list-columns-2 ul,
.default-block ul.list-columns-2 {
    -moz-columns: 2;
         columns: 2;
  }
}

.default-block .list-columns-2 ul li,
.default-block ul.list-columns-2 li {
  -moz-column-break-inside: avoid;
       break-inside: avoid;
}

.default-block .list-columns-2 ul li>strong,
.default-block ul.list-columns-2 li>strong {
  font-weight: 600;
}

/* Uncomment to make editor buttons use the theme button. Left off by default
 * because it fights Gutenberg's own button style controls.
 *
 * .default-block .wp-block-button__link { @apply btn; }
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * Search results and entry meta
 * ═══════════════════════════════════════════════════════════════════════════ */

.search-result-article {
  margin-bottom: 1rem;
  border-width: 1px;
  border-style: solid;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
  padding-left: 1rem;
  padding-right: 1rem;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.search-result-article:hover {
  background-color: rgb(107 166 202 / .1);
}

@media (min-width: 576px) {
  .search-result-article {
    margin-bottom: 2rem;
    padding: 1.5rem;
    padding-top: 2rem;
    padding-bottom: 2rem;
  }
}

.search-result-article>*:empty {
  display: none;
}

.search-result-article p a {
  margin-left: 0.25rem;
}

/* Pipe-separated meta items, with the trailing separator removed. */

.entry-footer > *,
.entry-meta > * {
  margin-right: 0.5rem;
  border-right-width: 1px;
  border-right-color: rgb(153 153 153 / 0.8);
  padding-right: 0.5rem;
}

.entry-footer > *:last-child,
.entry-meta > *:last-child {
  margin-right: 0px;
  border-width: 0px;
  padding-right: 0px;
}

.entry-footer > * time+time,
.entry-meta > * time+time {
  margin-left: 0.5rem;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Pagination — output by the_posts_pagination() / ss_theme_the_posts_navigation()
 * ═══════════════════════════════════════════════════════════════════════════ */

.pagination {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  row-gap: 0.75rem;
}

.pagination .page-numbers {
  display: flex;
  width: 1.75rem;
  height: 1.75rem;
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(83 95 110 / var(--tw-border-opacity, 1));
  padding: 0.125rem;
  font-size: 0.875rem;
  line-height: 1;
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.pagination .page-numbers:hover {
  text-decoration-line: none;
}

.pagination .page-numbers:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

.pagination .page-numbers.current {
  pointer-events: none;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.pagination .page-numbers.disabled {
  opacity: 0.5;
}

.pagination .page-numbers:not(.disabled):hover {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.pagination-arrow .page-numbers {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.pagination-arrow .page-numbers:not(.disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

/* ═══════════════════════════════════════════════════════════════════════════
 * fancybox lightbox
 * ═══════════════════════════════════════════════════════════════════════════ */

@media not all and (min-width: 576px) {
  .fancybox-slide {
    padding-left: 0.375rem;
    padding-right: 0.375rem;
  }
}

/**
 * slick slider overrides — tailwind/custom/components/slider.css
 *
 * Styles slick's own generated markup. The slide-count behaviour itself lives in
 * javascript/script.js → ss.slider() as .slider-col-1 … .slider-col-7,
 * .ss-logo-slider, .timeline-slider, .product-slider, .slider-for/.slider-nav.
 *
 * Arrow icon confirmed from Figma (Homepage testimonial carousel, nodes
 * 33880:17695/17696): Font Awesome 6 Solid "arrow-right", both prev/next
 * reusing the SAME glyph — prev is just the same icon mirrored, not a
 * separate left-pointing asset. Saved locally as
 * theme/images/icons/slider-arrow.svg (official FA6 solid path, confirmed
 * by name in the design pull, not hand-drawn). Applied via `mask-image` +
 * `bg-current` (not a background-image) specifically because this button
 * swaps icon color on hover (white -> primary) — a plain background-image
 * bakes in one fixed color and can't respond to that. Replaces the old
 * icomoon codepoints (\e917 prev, \e918 next), which never had a real font
 * file backing them.
 */

/* ── Track and slides ───────────────────────────────────────────────────────
 * Gutter on the slide, matching negative margin on the track. Keep these two in
 * sync or slides sit flush to the container edge.
 * ────────────────────────────────────────────────────────────────────────── */

.slick-slider .slick-slide {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}

@media (min-width: 1310px) {
  .slick-slider .slick-slide {
    padding-left: 0.75rem;
    padding-right: 0.75rem;
  }
}

.slick-list {
  margin-left: -0.5rem;
  margin-right: -0.5rem;
}

@media (min-width: 1310px) {
  .slick-list {
    margin-left: -0.75rem;
    margin-right: -0.75rem;
  }
}

/* ── Arrows ─────────────────────────────────────────────────────────────────
 * text-[0px] hides slick's default "Previous"/"Next" text; the glyph comes from
 * the ::before content.
 * ────────────────────────────────────────────────────────────────────────── */

.slick-arrow {
  position: absolute;
  bottom: 0px;
  z-index: 10;
  margin-left: 0.25rem;
  margin-right: 0.25rem;
  height: 2.5rem;
  width: 2.5rem;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  font-size: 0px;
  line-height: 1;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

.slick-arrow::before {
  display: inline-block;
  width: 1.25rem;
  height: 1.25rem;
  background-color: currentColor;
  --tw-content: '';
  -webkit-mask-image: url('./images/icons/slider-arrow.svg');
          mask-image: url('./images/icons/slider-arrow.svg');
  -webkit-mask-position: center;
          mask-position: center;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  content: var(--tw-content);
  -webkit-mask-size: contain;
          mask-size: contain;
}

.slick-arrow:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

@media (min-width: 768px) {
  .slick-arrow {
    margin-left: 0.375rem;
    margin-right: 0.375rem;
  }
}

@media (min-width: 1200px) {
  .slick-arrow {
    margin-left: 0.625rem;
    margin-right: 0.625rem;
  }
}

.slick-arrow:not(.slick-disabled):hover {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.slick-prev {
  right: 50%;
}

.slick-prev::before {
  content: var(--tw-content);
  --tw-scale-x: -1;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.slick-next {
  left: 50%;
}

.slick-arrow.slick-disabled {
  cursor: not-allowed;
  opacity: 0.75;
}

/* Variant: bare chevrons pinned to the vertical centre, outside the slides. */

.slick-arrow-alt .slick-arrow {
  top: 50%;
  bottom: auto;
  height: auto;
  width: auto;
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  border-color: transparent;
  background-color: transparent;
}

.slick-arrow-alt .slick-arrow:hover {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.slick-arrow-alt .slick-prev {
  left: 0px;
  right: auto;
}

.slick-arrow-alt .slick-next {
  right: 0px;
  left: auto;
}

/* ── Dots ─────────────────────────────────────────────────────────────────── */

.slick-dots {
  margin-bottom: 0px;
  display: flex;
  list-style-type: none;
  flex-wrap: wrap;
  justify-content: center;
}

.slick-dots > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

.slick-dots {
  padding-left: 0px;
}

.slick-dots li {
  margin-top: 2rem !important;
  line-height: 1;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

@media (min-width: 1310px) {
  .slick-dots li {
    margin-top: 3rem !important;
  }
}

.slick-dots li.slick-active button {
  --tw-scale-x: 1.3;
  --tw-scale-y: 1.3;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}

.slick-dots li:only-child {
  display: none;
}

.slick-dots button {
  position: relative;
  height: 0.5rem;
  width: 0.5rem;
  border-radius: 9999px;
  border-width: 2px;
  border-color: transparent;
  background-color: rgb(107 166 202 / 0.5);
  text-indent: -9999px;
}

.slick-dots button:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
}

.slick-dots button:focus-visible {
  outline-style: solid;
  outline-width: 2px;
  outline-offset: 2px;
  outline-color: #6ba6ca;
}

/* Variant: numbered step badges ("01"/"02"/"03") instead of plain dots — used
 * by process-steps in slider mode (confirmed Figma tab/carousel treatment,
 * Homepage node 33880:18064-18073). CSS counters generate the zero-padded
 * number regardless of slide count, rather than relying on slick's own
 * (un-padded, "1"/"2"/"3") auto-inserted dot text.
 *
 * IMPORTANT: `.slick-dots-numbered` goes on the SLIDER CONTAINER (the element
 * with `.slider-col-N`), not on `.slick-dots` itself — slick generates its
 * own `<ul class="slick-dots">` as a child of the container at init time, so
 * these must be descendant selectors, not a class applied directly to it. */

.slick-dots-numbered .slick-dots {
  counter-reset: ss-step-counter;
  justify-content: flex-start;
}

.slick-dots-numbered .slick-dots > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(1rem * var(--tw-space-x-reverse));
  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
}

.slick-dots-numbered .slick-dots li {
  counter-increment: ss-step-counter;
}

.slick-dots-numbered .slick-dots button {
  position: relative;
  width: 47px;
  height: 47px;
  border-radius: 0.5rem;
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
  text-indent: 0px;
  color: transparent;
}

.slick-dots-numbered .slick-dots button::before {
  content: counter(ss-step-counter, decimal-leading-zero);
  position: absolute;
  inset: 0px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 600;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.slick-dots-numbered .slick-dots li.slick-active button {
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  border-color: transparent;
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
}

/* Variant: hides the default prev/next arrows entirely — some sliders
 * (process-steps in slider mode) confirm dot/badge-only navigation, no
 * arrows. `!important` is required: slick.js itself toggles arrow visibility
 * via an inline `style="display: ..."` (e.g. hiding them when slidesToShow >=
 * slide count), which beats any external stylesheet rule regardless of CSS
 * specificity — confirmed via computed-style testing, plain `display: none`
 * here silently lost to slick's inline style. */

.slick-arrows-hidden .slick-arrow {
  display: none !important;
}

/* Variant: outlined white dots, for dark sections. */

.slick-dots-alt .slick-dots > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
}

.slick-dots-alt .slick-dots li.slick-active button {
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}

.slick-dots-alt .slick-dots button {
  height: 0.75rem;
  width: 0.75rem;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  background-color: transparent;
}

.slick-dots-alt .slick-dots button:hover {
  background-color: rgb(255 255 255 / 0.7);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * CLS FIX — keep this.
 *
 * Before slick initialises, slides are plain block children and stack
 * vertically, causing a visible jump. These rules lay them out flex and hide
 * them until slick adds `.slick-slider`.
 *
 * ADD ANY NEW SLIDER CLASS TO BOTH SELECTOR LISTS.
 * ═══════════════════════════════════════════════════════════════════════════ */

[class^='slider-col-'],
[class*='slider-col-'],
.ss-logo-slider,
.timeline-slider {
  visibility: hidden;
  display: flex;
}

[class^='slider-col-'].slick-slider,
[class*='slider-col-'].slick-slider,
.ss-logo-slider.slick-slider,
.timeline-slider.slick-slider {
  visibility: visible;
  display: block;
}

/*
 * Edge-fade for marquee sliders — set the `from-*` colour to the section
 * background. Applied on the slider wrapper in the template, not here:
 *
 * <div class="ss-logo-slider relative
 *      before:absolute before:inset-y-0 before:left-0 before:-translate-x-1/2
 *      sm:before:w-[100px] xl:before:w-[174px] before:z-[1]
 *      before:bg-gradient-to-r before:from-secondary-50 before:via-secondary-50
 *      before:to-secondary-50/0">
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * REVIEW CARD NAV (Round 39) — testimonial-slider's card IS the slick
 * container (`.slider-col-1` sits directly on the card div), so slick's
 * auto-inserted `.slick-arrow`/`.slick-dots` land as DIRECT CHILDREN of the
 * card, not nested inside a slide — hence descendant selectors here, not a
 * class placed directly on `.slick-dots` (that class doesn't exist until
 * slick inserts it at runtime). Confirmed from the user-supplied mockup
 * screenshot: plain icon-only arrows (no button box) flanking a "01 / 02"
 * current/total counter, all bottom-right INSIDE the card.
 *
 * The counter is a hybrid: "01" is CSS-counter-driven off slick's own
 * `.slick-active` li (always accurate, no JS needed), "/ 02" is a static
 * PHP-echoed total (post_count never changes after page load, so it doesn't
 * need to be reactive).
 * ═══════════════════════════════════════════════════════════════════════════ */

/* flex-wrap: .slick-list is forced to its own full-width row (basis-full),
 * which wraps the arrows+counter onto a second row together (DOM/visual
 * order controlled by the `order` utilities below) — then `ml-auto` on the
 * visually-first of the three (.slick-prev, order-1) pushes that whole
 * trailing group to the right edge, a standard flex "auto margin" push. */

.review-card-nav {
  /* !flex: the CLS-fix rule below (`[class*='slider-col-'].slick-slider {
	   display: block }`) has HIGHER specificity than a plain `.review-card-nav`
	   class selector and sets display back to block once slick adds its own
	   `.slick-slider` class — confirmed via computed-style testing (order
	   values were all correctly assigned to children, but had zero visual
	   effect because the parent silently wasn't a flex container at all).

	   Round 61: gap-x-1.5 added — replaces the old ad-hoc per-element
	   margins (mx-3 on .slick-dots, mx-1 on its ::after) that produced
	   visibly UNEVEN spacing (12px before "01", 4px before "/", 16px before
	   "02", 0px before the next-arrow) — one consistent gap value across
	   every item in this row instead.

	   tabular-nums added — an attempt to fix "01"/"02" being proportional-
	   font digits that shift width slide to slide (e.g. "1" narrower than
	   "2" in most fonts), which — since the whole prev+counter+next group
	   is right-anchored via `ml-auto` on .slick-prev — was shifting where
	   that group starts. Kept as a harmless, correct-in-principle
	   declaration, but it turned out NOT to actually equalize digit widths
	   with this font (measured "01" vs "02" still rendering at different
	   widths despite tabular-nums being correctly computed/inherited —
	   likely this font doesn't ship the OpenType tabular-figure glyph
	   variants the feature depends on). The real fix is the fixed `w-8` on
	   `.review-card-nav::before` below, which sidesteps the font
	   dependency entirely.

	   relative added — .review-author-group is absolutely positioned (see
	   its own rule below) and needs this as its containing block. Also:
	   after adding tabular-nums, .slick-prev STILL shifted between slides
	   — turned out to be a second source of the same class of bug, not
	   the same one: .review-author-group (added this round, holding the
	   per-slide author name) was sharing this SAME flex row, and author
	   names vary in length ("John C." vs "James R."), which ALSO shifts
	   where `ml-auto` starts the right-anchored group — confirmed via
	   getBoundingClientRect() (.slick-prev still moved even with
	   tabular-nums in place). Fixed by taking .review-author-group out of
	   this flex flow entirely (position:absolute) so it can no longer
	   affect the arrow group's layout at all, regardless of name length. */
  position: relative;
  display: flex !important;
  flex-wrap: wrap;
  align-items: center;
  -moz-column-gap: 0.375rem;
       column-gap: 0.375rem;
  --tw-numeric-spacing: tabular-nums;
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
}

.review-card-nav > .slick-list {
  order: 0;
  width: 100%;
  flex-basis: 100%;
}

.review-card-nav > .slick-arrow {
  position: static;
  width: auto;
  height: auto;
  border-radius: 0px;
  border-width: 0px;
  background-color: transparent;
  padding: 0px;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.review-card-nav > .slick-arrow:hover {
  background-color: transparent;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.review-card-nav > .slick-arrow::before {
  /* Round 61: size-4 (16px) -> size-[25px] — confirmed from Figma
	   (design-context-33880-8089-san-diego-county.md, node 33880:8376):
	   the arrow-right glyph is text-[25px], noticeably bigger than the
	   "01 / 02" counter (16px) next to it, not the same size. */
  width: 25px;
  height: 25px;
}

.review-card-nav > .slick-prev {
  order: 1;
  margin-left: auto;
  margin-top: 1.5rem;
}

.review-card-nav > .slick-next {
  order: 3;
  margin-top: 1.5rem;
}

/* Round 61: absolutely positioned (see .review-card-nav's own comment for
 * why) — bottom-10/left-8 match review-card-nav's own pb-10/p-8 padding,
 * so this lands flush with where the quote text and .slick-list content
 * are already inset (offsets for an absolutely positioned element are
 * relative to the containing block's PADDING box, so left-8 here reproduces
 * the same 32px visual inset the parent's own p-8 padding gives its normal-
 * flow content, not an extra 32px on top of it). */

.review-card-nav > .review-author-group {
  position: absolute;
  bottom: 2.5rem;
  left: 2rem;
}

/* Round 61: the previous "01" implementation (CSS counter driven off
 * slick's own .slick-active li) had a real, deeper bug found while
 * verifying this round's other fixes — CSS counters do NOT increment on
 * display:none elements, and only the .slick-active li was ever visible
 * here (every other li stayed display:none). That means exactly one li was
 * EVER "counted" on any given render, so the counter always evaluated to 1
 * ("01") no matter which slide was actually active — confirmed via
 * screenshot: after clicking to slide 2 (author correctly updated to the
 * second testimonial), the counter still read "01 / 02" instead of
 * "02 / 02". This wasn't introduced this round — it's how the counter was
 * originally built (Round 39/41) and evidently was never checked past
 * slide 1.
 *
 * Fixed by hiding .slick-dots entirely (no longer needed for display, just
 * an unavoidable side effect of slick's shared `dots:true` config) and
 * driving "01 / " directly off a data-current attribute that the
 * afterChange handler keeps in sync (it already tracks the true index for
 * the author-name sync) — same attr()-driven technique the existing
 * data-total/"02" already used successfully. This also more closely
 * matches the actually-confirmed Figma source (design-context-33880-8089-
 * san-diego-county.md, node 33880:8378), where "01 / " was always ONE
 * text run, not "01" + a separately-styled "/" — no longer needs its own
 * margin-juggling between two separate generated-content points. */

.review-card-nav > .slick-dots {
  /* !hidden required: slick.js sets an inline `style="display:..."` on
	   .slick-dots at runtime, which beats a plain (non-important) `hidden`
	   utility regardless of selector specificity — the same pattern already
	   documented elsewhere in this file (.slick-arrows-hidden .slick-arrow).
	   Confirmed necessary here too: with plain `hidden`, .slick-dots still
	   measured a real, non-zero width and kept shifting .slick-prev's
	   position slide to slide. */
  display: none !important;
}

.review-card-nav::before {
  /* "01" and "/" are one text run (no flex gap applies WITHIN a single
	   pseudo-element's own content), so the space between them has to be
	   baked into the string itself — but no trailing space after "/": the
	   parent's gap-x-1.5 already provides that spacing consistently before
	   every item in this row (prev, this, the ::after total, next), so
	   adding a second space there would double it up unevenly instead of
	   matching it. */
  content: attr(data-current) ' /';
  /* w-8 (fixed width, not w-auto): the parent's `tabular-nums` turned out
	   NOT to actually equalize digit widths here — measured "01 /" at
	   27.09px vs "02 /" at 30.22px despite font-variant-numeric:
	   tabular-nums being correctly computed and inherited; the active font
	   evidently doesn't ship the OpenType `tnum` glyph variants tabular-nums
	   depends on, a real limitation of that CSS feature (it's a request to
	   the font, not a guarantee). That residual width difference was still
	   shifting .slick-prev between slides. A fixed box width sidesteps the
	   font dependency entirely: "01 /" / "02 /" (etc.) just render
	   left-aligned with a bit more or less trailing empty space inside a
	   CONSTANT-width box, so nothing after it in the flex row ever moves. */
  order: 2;
  margin-top: 1.5rem;
  display: flex;
  height: 1rem;
  width: 2rem;
  align-items: center;
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 700;
  line-height: 1;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.review-card-nav::after {
  content: attr(data-total);
  /* Same run, but dimmed — confirmed from the same node: only the
	   trailing total number is rgba(40,55,74,0.4), "01 / " stays
	   full-color. */
  order: 2;
  margin-top: 1.5rem;
  display: flex;
  height: 1rem;
  align-items: center;
  font-size: 1rem;
  line-height: 1.5rem;
  font-weight: 700;
  line-height: 1;
  color: rgb(40 55 74 / 0.4);
}

/* Round 61: author info — one .review-author-item per testimonial, only
 * the one matching the active slide shown, synced via the inline script's
 * afterChange handler (same show/hide-by-index technique already used for
 * process-steps' thumbnail nav). Non-active items are display:none, so they
 * contribute zero size to .review-author-group's layout — no absolute
 * overlay stacking needed since there's no simultaneous-visibility/
 * transition requirement here. */

.review-author-item {
  display: none;
}

.review-author-item.is-active {
  display: flex;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * PROCESS STEPS THUMBNAIL NAV (Round 41) — process-steps.php in slider mode
 * replaces slick's auto-dots with hand-built photo thumbnails (wired via a
 * small scoped inline script, see the module) — hide slick's own default
 * dots here so both nav UIs don't show at once.
 * ═══════════════════════════════════════════════════════════════════════════ */

.process-steps-slider > .slick-dots {
  /* !hidden: same lesson as .slick-arrows-hidden above — slick.js sets an
	   inline display style on elements it manages at runtime, which beats a
	   plain (non-important) CSS rule regardless of selector specificity. */
  display: none !important;
}

/* Round 51: the reference used to build this (Round 49/50) turned out to be
 * a ZOOMED screenshot — opacity-0 (fully transparent) was correct in concept
 * but the user clarified the active state should show a translucent WHITE
 * tint (image still visible through it), not a hard on/off switch to zero
 * tint. `bg-none` is required alongside `bg-white`: the span's own markup
 * classes originally set a gradient `background-image`, which paints on top
 * of `background-color` regardless of which rule set the color — without
 * clearing the image too, the tint underneath wouldn't show through
 * untouched. Round 54 dropped the gradient itself (see PHP markup), so
 * `bg-none` is now belt-and-suspenders, but harmless to keep.
 *
 * Round 54: opacity-30 -> opacity-50 — still not matching the mockup at 30%,
 * bumped for a more visible white wash. */

.process-thumb.is-active .process-thumb-overlay {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  background-image: none;
  opacity: 0.5;
}

/* Round 49: with the overlay gone on the active thumbnail, white caption
 * text sat directly on the bare photo and read as a washed-out white patch
 * ("white opacity background") — switch to dark text once there's no tint
 * behind it. */

.process-thumb.is-active .process-thumb-caption {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

/* Round 50: confirmed from a reference screenshot — the active thumbnail
 * has a distinct WHITE border + shadow (a "floating card" look, visually
 * cut out from the main image it overlaps), not just the same thin border
 * every thumbnail has at rest. `!border-2` overrides the base `border`
 * (1px) — needs !important since both rules target the same .process-thumb
 * element and Tailwind's border-width utilities share the same specificity
 * regardless of source order.
 *
 * Round 51: border-4 -> border-2 — that reference screenshot was a ZOOMED
 * crop, so border-4 (calibrated against its apparent proportions) came out
 * too thick at real scale. */

.process-thumb.is-active {
  border-width: 2px !important;
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

/* Round 48: centered caption (was items-end justify-start / bottom-left). */

.process-thumb {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0.75rem;
}

/* !grid: the slick VENDOR library's own CSS (slick.css, not ours) ships
 * `.slick-initialized .slick-slide { display: block }` at (0,2,0)
 * specificity, beating a plain single-class `.grid` utility (0,1,0)
 * regardless of file order — confirmed by walking every matching stylesheet
 * rule via `document.styleSheets`, not by guessing. Each process-steps slide
 * needs `display: grid` (for its `lg:grid-cols-2` image+text layout) to
 * actually take effect. */

.process-steps-slider.slick-initialized .slick-slide {
  display: grid !important;
}

/* ── Before/After compare slider ──────────────────────────────────────────
 * Round 158: real drag-to-compare — was a static fixed 50/50 split with a
 * purely decorative handle icon since early in this project (flagged then,
 * built now per direct request). `.ba-slider-after`'s `clip-path` and
 * `.ba-slider-handle`'s `left` are both set inline (initial 50%) and then
 * driven by ss.beforeAfterSlider() in script.js on drag — the CSS below
 * only owns layout/appearance, never the position itself, so JS and CSS
 * can't fight over the same value. */

.ba-slider {
  position: relative;
  width: 100%;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
  overflow: hidden;
}

.ba-slider-before,
.ba-slider-after img {
  pointer-events: none;
  position: absolute;
  inset: 0px;
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

.ba-slider-after {
  position: absolute;
  inset: 0px;
  overflow: hidden;
}

/* Round 158 fix: the icon was a flex CHILD of this 3px-wide line, sized via
 * `size-10` + `shrink-0` — worked in isolation but rendered as a squashed
 * capsule in the real card (flex-basis/min-width interactions with a 3px
 * flex container, even with shrink disabled). Switched to the same pattern
 * the old static handle already used and was confirmed working: the icon is
 * its OWN absolutely-positioned circle, centered independently of the line's
 * width, not a flex child depending on it. */

.ba-slider-handle {
  position: absolute;
  top: 0px;
  bottom: 0px;
  z-index: 10;
  width: 3px;
  --tw-translate-x: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  cursor: ew-resize;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  touch-action: none;
}

/* Round 158 SECOND fix — the actual root cause of the capsule shape (the
 * flex-to-absolute change above wasn't it): the sitewide `img { max-width:
 * 100%; height: auto }` reset (base.css) resolves `max-width: 100%` against
 * this icon's CONTAINING BLOCK, which is `.ba-slider-handle` itself
 * (position:absolute, only 3px wide) — clamping the icon's width down to a
 * sliver of its intended 40px while height stays uncapped, producing a tall
 * narrow pill instead of a circle. `max-w-none` overrides that inherited
 * constraint. */

.ba-slider-handle-icon {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 2.5rem;
  height: 2.5rem;
  max-width: none;
  --tw-translate-x: -50%;
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  border-radius: 9999px;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding: 0.625rem;
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

/**
 * Named components — tailwind/custom/components/components.css
 *
 * IMPORTED LAST in the components layer, so anything here overrides the other
 * component files without needing !important. Put cross-cutting overrides here.
 *
 * Only add a class once a pattern has appeared THREE times inline.
 */

/* ═══════════════════════════════════════════════════════════════════════════
 * Post / page titles — also applied to the post title in the block editor.
 * Round 80: font-medium (500) -> font-semibold (600) — confirmed from Figma
 * (design-context-33880-17267-privacy-policy.md, node 33880:17355):
 * font-['Poppins:SemiBold'] on the exact "Privacy Policy" H1 node. font-medium
 * was never actually checked against Figma; font-semibold also matches the
 * sitewide h1-h6 default weight (base.css), so this removes an inconsistency
 * rather than introducing one.
 * ═══════════════════════════════════════════════════════════════════════════ */

.page-title,
.entry-title {
  margin-bottom: 1.5rem;
  font-family: Poppins, sans-serif;
  font-weight: 600;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Gutenberg alignment. max-w-wide comes from theme.json via @_tw/themejson.
 * ═══════════════════════════════════════════════════════════════════════════ */

.entry-content > .alignwide {
  max-width: 81.875rem;
}

.entry-content > .alignfull {
  max-width: none;
}

.entry-content > .alignleft {
  float: left;
  margin-right: 2rem;
}

.entry-content > .alignright {
  float: right;
  margin-left: 2rem;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * SECTION HEADING BLOCK
 *
 *   <header class="block-title text-center">
 *     <small class="title-small has-lines-both">Eyebrow</small>
 *     <h2>Heading with <span>accent words</span></h2>
 *   </header>
 *
 * Line variants:  has-lines-both | has-line-left | has-line-right
 * Dark sections:  add `block-title--white` to the header, `has-lines-white` to
 *                 the eyebrow.
 *
 * `font-tertiary` here is the main consumer of the third font role. If the design
 * has no distinct accent font, point `tertiary` at the same family as `secondary`
 * rather than deleting the role.
 * ═══════════════════════════════════════════════════════════════════════════ */

/*
 * The Home page pull shows a single flat dash (a small SVG in Figma, ~60.5px
 * wide) before the eyebrow — 3px thick (the vector's `inset-[-1.5px_0]` on a
 * 0-height box expands it 1.5px each direction = 3px total). Some titles show
 * it on BOTH sides. Uses flex + gap rather than padding-reserved absolute
 * lines — the padding approach didn't scale the gap consistently with the
 * line width across breakpoints.
 *
 * Gap is a CONFIRMED flat 8px in every eyebrow instance pulled (Home AND the
 * FAQ) — no breakpoint escalation. The previous pass added lg:/2xl: steps
 * with no evidence, which is why it read as "too wide."
 *
 * Colour is NOT uniform across the file: Home's eyebrows ("The Direct
 * Difference", "client reviews", etc.) are `#6ba6ca` (primary), but the
 * Services-page FAQ eyebrow ("FaQ's") is `#28374a` (secondary). Default stays
 * primary (the more common case); use `.title-small--secondary` for the FAQ-
 * style instances so the component is correct on both kinds of page.
 */

.block-title .title-small {
  margin-bottom: 0.5rem;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: Montserrat, sans-serif;
  font-size: 1rem;
  font-weight: 400;
  text-transform: uppercase;
  line-height: 1.25;
  letter-spacing: 1px;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.block-title .title-small::before,
.block-title .title-small::after {
  display: block;
  display: none;
  height: 3px;
  width: 2.5rem;
  flex-shrink: 0;
  background-color: currentColor;
  --tw-content: '';
  content: var(--tw-content);
}

@media (min-width: 992px) {
  .block-title .title-small::before,
.block-title .title-small::after {
    width: 2.75rem;
  }
}

@media (min-width: 1310px) {
  .block-title .title-small::before,
.block-title .title-small::after {
    width: 3.78rem;
  }
}

.block-title .title-small.has-lines-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.block-title .title-small--secondary {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.block-title .title-small.has-lines-both::before,
.block-title .title-small.has-lines-both::after,
.block-title .title-small.has-line-left::before,
.block-title .title-small.has-line-right::after {
  display: block;
}

/*
 * The section H2. Note `[&_span]:text-primary` — editors add the accent colour by
 * wrapping words in <span> inside a plain Text field, which is why templates echo
 * headings with wp_kses_post() rather than esc_html().
 */

.block-title h2 {
  font-weight: 600;
  line-height: 1.375;
  letter-spacing: -0.14rem;
}

@media (min-width: 1310px) {
  .block-title h2 {
    line-height: 1.5;
  }
}

.block-title h2 span {
  font-weight: 500;
  font-style: normal;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.block-title h2 strong {
  font-style: normal;
}

/* Dark-section variant: accent words go white instead of primary. */

.block-title--white h2>span {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

/* ═══════════════════════════════════════════════════════════════════════════
 * FEATURE TILE — one shared card shell, TWO confirmed media variants:
 *   (a) icon  — 48px icon, seen on city-page "Why choose us"
 *   (b) number — 67px navy badge with "01"/"Step", seen on the Services page
 *       "Our 3-Step Installation Process"
 * Both pulls confirm an IDENTICAL card shell (border-secondary/[0.16],
 * rounded-2xl, p-6, 24px semibold title, 16px/80% body) — only the media
 * slot differs. Background: the icon-tile pull (city page) showed a subtle
 * blue-tinted gradient, the number-tile pull (Services page) showed plain
 * white — kept plain white as the shared default since it's the simpler,
 * more recently confirmed value; the blue tint can be added back as a
 * variant if a specific page needs it.
 *
 *   <div class="feature-tile">
 *     <img src="…" class="feature-tile-icon" alt="">          \3c !-- (a) -->
 *     <div class="feature-tile-number"><span>01</span><small>Step</small></div>  \3c !-- (b) -->
 *     <p class="feature-tile-title">Title</p>
 *     <p class="feature-tile-text">Text</p>
 *   </div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.feature-tile {
  flex: 1 1 0%;
  border-radius: 1rem;
  border-width: 1px;
  border-color: rgb(40 55 74 / 0.16);
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding: 1.5rem;
}

.feature-tile-icon {
  margin-bottom: 1.5rem;
  width: 3rem;
  height: 3rem;
}

.feature-tile-number {
  margin-bottom: 1.5rem;
  display: flex;
  width: 67px;
  height: 67px;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  border-radius: 0.5rem;
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.feature-tile-number span {
  font-size: 2rem;
  font-weight: 600;
  line-height: 1;
}

.feature-tile-number small {
  font-size: 0.75rem;
  line-height: 1rem;
}

.feature-tile-title {
  margin-bottom: 0.625rem;
  font-size: 1.5rem;
  font-weight: 600;
  text-transform: capitalize;
  line-height: 1.3;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.feature-tile-text {
  margin-bottom: 0px;
  font-size: 1rem;
  line-height: 1.5rem;
  text-transform: capitalize;
  line-height: 1.5;
  color: rgb(40 55 74 / 0.8);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * STATS BAR — "40 years / 5 Counties / 100% In-House / USA-Made" — confirmed
 * identical on Home and the Services page.
 *   <div class="stats-bar">
 *     <div class="stat-item"><p class="stat-number">40 years</p><p class="stat-label">Family-owned & operated</p></div>
 *     …
 *   </div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.stats-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  row-gap: 1.5rem;
}

.stats-bar > :not([hidden]) ~ :not([hidden]) {
  border-color: rgb(255 255 255 / 0.2);
}

.stats-bar {
  border-radius: 20px;
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
  padding-left: 2rem;
  padding-right: 2rem;
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}

@media (min-width: 768px) {
  .stats-bar > :not([hidden]) ~ :not([hidden]) {
    --tw-divide-x-reverse: 0;
    border-right-width: calc(1px * var(--tw-divide-x-reverse));
    border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
  }
}

.stat-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.75rem;
  padding-left: 2rem;
  padding-right: 2rem;
  text-align: center;
  line-height: 1.25;
}

.stat-number {
  margin-bottom: 0px;
  font-size: 2.5rem;
  font-weight: 600;
  text-transform: capitalize;
  letter-spacing: -0.14rem;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.stat-label {
  margin-bottom: 0px;
  font-size: 1rem;
  line-height: 1.5rem;
  color: rgb(255 255 255 / 0.8);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * CARD, PHOTO — confirmed from the Services hub "What We Install" grid AND
 * Home's style showcase. Photo fills the card top-to-bottom; a white text
 * panel OVERLAPS the bottom of the photo (not a separate section below it).
 * DIFFERENT from card-post (blog) and card-media (below) — three real card
 * types exist in this design, not one.
 *
 * Clickable via .stretched-link on the title anchor (needs `relative` on the
 * card, already present). Panel height is FIXED and the description is
 * line-clamped to 2 lines — the overlap is absolutely positioned and so
 * doesn't affect the card's overall height either way, but an unclamped
 * panel can grow tall enough to visually cover more of the photo on cards
 * with longer copy, which reads as inconsistent even though the outer card
 * height (driven by the image's aspect-ratio box) is already uniform.
 *   <article class="card-photo">
 *     <img class="card-photo-img" src="…" alt="">
 *     <div class="card-photo-body">
 *       <p class="card-photo-title"><a href="…" class="stretched-link">Title</a></p>
 *       <p class="card-photo-text">Text</p>
 *     </div>
 *   </article>
 * ═══════════════════════════════════════════════════════════════════════════ */

.card-photo {
  position: relative;
  overflow: hidden;
  border-radius: 20px;
}

.card-photo-img {
  aspect-ratio: 398/506;
  width: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

.card-photo-body {
  position: absolute;
  left: 0px;
  right: 0px;
  bottom: 0px;
  display: flex;
  height: 12.0625rem;
  flex-direction: column;
  justify-content: center;
  border-radius: 20px;
  border-width: 1px;
  border-color: rgb(107 166 202 / 0.4);
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding: 1.5rem;
}

.card-photo-title {
  margin-bottom: 0.625rem;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 1.5rem;
  font-weight: 600;
  text-transform: capitalize;
  line-height: 1.3;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.card-photo-title a {
  color: inherit;
  text-decoration-line: none;
}

.card-photo-text {
  margin-bottom: 0px;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 1rem;
  line-height: 1.5rem;
  text-transform: capitalize;
  line-height: 1.5;
  color: rgb(40 55 74 / 0.8);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * CARD, MEDIA — confirmed from the single-service "Our Options" section
 * (glass/hardware option cards). Image sits INSIDE the padded white card,
 * text follows below it — not overlapping like card-photo.
 *
 * Clickable via .stretched-link on the title anchor (needs `relative`, added
 * below — the confirmed Figma data didn't need it since nothing overlapped,
 * but a clickable card does). Height varies with description length more
 * than card-photo (nothing here is a fixed-ratio image box) — apply
 * `data-fix="height"` (matchHeight, wired in script.js) to the ROW wrapping
 * these cards so every row of card-media stays equal height regardless of
 * copy length; that's a page-level concern, not something this class alone
 * can guarantee.
 *   <div class="flex flex-wrap gap-8" data-fix="height">
 *     <article class="card-media relative">
 *       <img class="card-media-img" src="…" alt="">
 *       <p class="card-photo-title"><a href="…" class="stretched-link">Title</a></p>
 *       <p class="card-photo-text">Text</p>
 *     </article>
 *   </div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.card-media {
  position: relative;
  flex: 1 1 0%;
  border-radius: 1rem;
  border-width: 1px;
  border-color: rgb(40 55 74 / 0.16);
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding: 1.5rem;
}

.card-media-img {
  margin-bottom: 1.5rem;
  height: 350px;
  width: 100%;
  border-radius: 0.5rem;
  -o-object-fit: cover;
     object-fit: cover;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * CARD, OVERLAY — a FOURTH distinct card type, confirmed from the Services
 * hub grid's first row ("Door & Inline Panel Installation" + the two
 * half-height cards beside it). Text sits DIRECTLY on the photo under a
 * dark gradient (transparent at the 50% mark → solid secondary at the
 * bottom) — no white panel like card-photo. rounded-2xl (16px), not
 * card-photo's 20px.
 *
 * Used as one large "featured" card (h-full in a row) beside a column of
 * two half-height ones — build that layout with plain flex, not a variant
 * class: the large card is h-full, the pair is a flex-col column with the
 * same gap as the row gap so 2×half + gap = the large card's height.
 *   <div class="flex gap-6">
 *     <a href="…" class="card-overlay flex-1">
 *       <img class="card-overlay-img" src="…" alt="">
 *       <div class="card-overlay-body">
 *         <p class="card-overlay-title">Title</p>
 *         <p class="card-overlay-text">Text</p>
 *       </div>
 *     </a>
 *     <div class="flex flex-1 flex-col gap-6">
 *       <a href="…" class="card-overlay h-full">…</a>
 *       <a href="…" class="card-overlay h-full">…</a>
 *     </div>
 *   </div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.card-overlay {
  position: relative;
  display: block;
  min-height: 22rem;
  overflow: hidden;
  border-radius: 1rem;
  text-decoration-line: none;
}

.card-overlay-img {
  position: absolute;
  inset: 0px;
  z-index: 0;
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

.card-overlay::after {
  position: absolute;
  inset: 0px;
  z-index: 1;
  border-radius: 1rem;
  background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(40 55 74 / 0.1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-from-position: 50%;
  --tw-gradient-to: #28374a var(--tw-gradient-to-position);
  --tw-content: '';
  content: var(--tw-content);
}

.card-overlay-body {
  position: absolute;
  left: 0px;
  right: 0px;
  bottom: 0px;
  z-index: 2;
  display: flex;
  flex-direction: column;
  gap: 0.625rem;
  padding: 2rem;
}

.card-overlay-title {
  margin-bottom: 0px;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 1.5rem;
  font-weight: 600;
  text-transform: capitalize;
  line-height: 1.3;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.card-overlay-text {
  margin-bottom: 0px;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 1rem;
  line-height: 1.5rem;
  text-transform: capitalize;
  line-height: 1.5;
  color: rgb(255 255 255 / 0.8);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * CARD, POST — the blog listing card, confirmed from the Blog page grid
 * (node 33880:16452, "Frameless vs. Sliding Shower Doors"). A FIFTH distinct
 * card type — do not reuse .card-photo/.card-media/.card-overlay for this;
 * it was previously built generically (image/title/excerpt/"Learn More")
 * with no basis in the actual design, missing the category badge, read-time,
 * and separate Read More block entirely.
 *
 * Confirmed structure: outer flex-col gap-8 (32px) holding THREE siblings —
 * the image, a gap-2.5 (10px) content block (meta row + title), and a
 * separate Read More link. The Read More block is NOT nested inside the
 * title/content group; it sits its own 32px away, same as the image is.
 *
 * Meta row is `justify-between`: a category pill (bg-secondary/10, its own
 * border-secondary/10, rounded-full, px-3 py-1) on the left, plain read-time
 * text (no background — px-3 py-1 kept only for baseline alignment with the
 * pill) on the right. Read-time isn't a Figma-supplied field — there's no
 * CPT/ACF field for it yet (Blog stays native `post` until Phase 5), so it's
 * computed from word count via `ss_reading_time()` in template-tags.php
 * rather than hardcoded or guessed per post.
 *
 * Clickable via .stretched-link on the Read More anchor (needs the card
 * itself `relative`). Equal-height rows: use `data-fix="height"` on the
 * wrapping grid, same convention as .card-media.
 *   <div class="flex flex-wrap gap-8" data-fix="height">
 *     <article class="card-post">
 *       <img class="card-post-img" src="…" alt="">
 *       <div class="card-post-content">
 *         <div class="card-post-meta">
 *           <span class="card-post-category">Category</span>
 *           <span class="card-post-time">4 min read</span>
 *         </div>
 *         <h3 class="card-post-title">Title</h3>
 *       </div>
 *       <a href="…" class="card-post-readmore stretched-link">
 *         Read More <svg>…arrow-right…</svg>
 *       </a>
 *     </article>
 *   </div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.card-post {
  position: relative;
  display: flex;
  height: 100%;
  flex-direction: column;
  gap: 2rem;
  border-radius: 1rem;
  border-width: 1px;
  border-color: rgb(40 55 74 / 0.16);
  background-image: linear-gradient(to top, var(--tw-gradient-stops));
  --tw-gradient-from: rgb(255 255 255 / 0) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
  --tw-gradient-to: rgb(107 166 202 / 0.2) var(--tw-gradient-to-position);
  padding: 1.5rem;
}

.card-post-img {
  aspect-ratio: 16 / 9;
  width: 100%;
  border-radius: 0.5rem;
  --tw-bg-opacity: 1;
  background-color: rgb(217 217 217 / var(--tw-bg-opacity, 1));
  -o-object-fit: cover;
     object-fit: cover;
}

.card-post-content {
  display: flex;
  flex: 1 1 0%;
  flex-direction: column;
  gap: 0.625rem;
}

.card-post-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.card-post-category {
  border-radius: 9999px;
  border-width: 1px;
  border-color: rgb(40 55 74 / 0.1);
  background-color: rgb(40 55 74 / 0.1);
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
  text-transform: capitalize;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.card-post-time {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
  font-size: 0.75rem;
  line-height: 1rem;
  text-transform: capitalize;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.card-post-title {
  margin-bottom: 0px;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  font-size: 1.5rem;
  font-weight: 600;
  text-transform: capitalize;
  line-height: 1.3;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.card-post-readmore {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 600;
  text-transform: capitalize;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * ICON LIST — wrap a WYSIWYG <ul> to swap bullets for a checkmark badge.
 *   <div class="list-icon"><?php echo $content; ?></div>
 *
 * Confirmed from Figma (nodes 33880:871/872, "Custom Frameless Glass Shower
 * Door Installation" page): a 24x24 bg-primary circle (rounded-[12px] = a
 * circle at this exact size) with a centered 14x14 white checkmark
 * (M11.6644 3.5L5.24841 9.9162L2.33203 6.99975, stroke-width 2, round caps).
 * This is a WYSIWYG <ul> with no control over inner markup, so the whole
 * badge — circle + check — is one `::before` background-image (same
 * data-URI-background technique already used for the select dropdown
 * arrow), replacing the old icomoon codepoint (\e932) that never had a
 * real font file backing it and rendered as nothing.
 * ═══════════════════════════════════════════════════════════════════════════ */

.list-icon ul,
ul.list-icon {
  margin-left: 0px;
  list-style-type: none;
}

.list-icon ul li,
ul.list-icon li {
  position: relative;
  padding-left: 2.25rem;
}

.list-icon ul li::before,
ul.list-icon li::before {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 1.5rem;
  height: 1.5rem;
  border-radius: 9999px;
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20fill%3D%22none%22%3E%3Cpath%20d%3D%22M11.6644%203.5L5.24841%209.9162L2.33203%206.99975%22%20stroke%3D%22white%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%2F%3E%3C%2Fsvg%3E');
  background-size: 14px 14px;
  background-position: center;
  background-repeat: no-repeat;
  --tw-content: '';
  content: var(--tw-content);
}

@media (min-width: 992px) {
  .list-icon ul li,
ul.list-icon li {
    padding-left: 2.5rem;
  }
}

.list-icon ul li strong,
ul.list-icon li strong {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

/* ═══════════════════════════════════════════════════════════════════════════
 * ACCORDION (FAQ) — confirmed from the Services page FAQ pull.
 * Light-blue card, NOT a plus/minus swap — a chevron that rotates 180°.
 *   <div class="accordion space-y-4">
 *     <div class="accordion-item itemActive">
 *       <button type="button" class="accordionBtn active" aria-expanded="true">
 *         <span>Question</span>
 *         <svg class="accordion-chevron">…</svg>
 *       </button>
 *       <div class="accordionBody">Answer</div>
 *     </div>
 *   </div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.accordion-item {
  border-radius: 1rem;
  border-width: 1px;
  border-color: rgb(40 55 74 / 0.1);
  --tw-bg-opacity: 1;
  background-color: rgb(225 237 244 / var(--tw-bg-opacity, 1));
  padding: 1rem;
}

.accordionBtn {
  display: flex;
  width: 100%;
  cursor: pointer;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  text-align: left;
}

.accordionBtn > span {
  font-size: 1.5rem;
  font-weight: 600;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.accordion-chevron {
  width: 1.5rem;
  height: 1.5rem;
  flex-shrink: 0;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
  transition-property: transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

.accordionBtn.active .accordion-chevron {
  --tw-rotate: 180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.accordionBody {
  margin-top: 1rem;
  font-size: 0.875rem;
  line-height: 1.25rem;
  font-weight: 300;
  color: rgb(40 55 74 / 0.8);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * PILL — confirmed from the San Diego city page "Styles Available" pull.
 * Two states: active (filled) and inactive (tinted outline). Icon is inline
 * SVG using currentColor so one glyph works for both colour states — Figma
 * exports it as two separately-coloured assets, but currentColor is simpler
 * and exact.
 *   <a href="#" class="pill">Label <svg class="pill-icon">…</svg></a>
 *   <a href="#" class="pill pill-active">Label <svg class="pill-icon">…</svg></a>
 * ═══════════════════════════════════════════════════════════════════════════ */

.pill {
  display: inline-flex;
  align-items: center;
  gap: 1rem;
  white-space: nowrap;
  border-radius: 10px;
  border-width: 1px;
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  background-color: rgb(107 166 202 / 0.2);
  padding-left: 1.5rem;
  padding-right: 1.5rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
  font-size: 1rem;
  line-height: 1.5rem;
  text-transform: uppercase;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  text-decoration-line: none;
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 300ms;
}

.pill-active,
.pill:hover {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

/* Round 48 correction: 24x24 is the confirmed CONTAINER/frame size — 18x20
 * is the PATH size drawn within that frame (the pin glyph doesn't fill the
 * whole square, it has natural margin around it), not the icon's outer box.
 * Round 47 wrongly stretched the whole container to 18x20 with
 * preserveAspectRatio="none", distorting the glyph. Reverted to the plain
 * 24x24 square container with normal aspect-ratio preservation. */

.pill-icon {
  width: 1.5rem;
  height: 1.5rem;
  flex-shrink: 0;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Skip link — first child of .site-wrapper:
 *   <a class="skip-link" href="#main">Skip to content</a>
 * ═══════════════════════════════════════════════════════════════════════════ */

.skip-link {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.skip-link:focus {
  position: static;
  width: auto;
  height: auto;
  padding: 0;
  margin: 0;
  overflow: visible;
  clip: auto;
  white-space: normal;
  position: fixed;
  left: 1rem;
  top: 1rem;
  z-index: 100000;
  border-radius: 0.25rem;
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * .form-group — vertical spacing wrapper for custom (non-Gravity-Forms) fields.
 *   <div class="form-group"><label>…</label><input>…</div>
 * ═══════════════════════════════════════════════════════════════════════════ */

.form-group {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * .scrollbar-hide — hides the native scrollbar on horizontal-scroll strips
 * (e.g. product-card-grid's small-card row) while keeping scroll functional.
 * No Tailwind scrollbar plugin is installed, so this is plain CSS, not @apply.
 * ═══════════════════════════════════════════════════════════════════════════ */

.scrollbar-hide {
  -ms-overflow-style: none;
  scrollbar-width: none;
}

.scrollbar-hide::-webkit-scrollbar {
  display: none;
}

/* ═══════════════════════════════════════════════════════════════════════════
 * Blog article pull-quote — theme/template-parts/content/content-single.php
 * wraps the article in `.blog-article`, scoping this to blog posts only.
 * Confirmed from Figma (design-context-33880-16543-blog-individual.md, node
 * 33880:16647): editors add a pull-quote via the block editor's native
 * Quote block, which renders a plain <blockquote>. Tailwind Typography's
 * default blockquote (left border, italic, font-weight 500, quote-mark
 * pseudo-elements) is overridden here to match the confirmed filled
 * bg-primary rounded box instead — not applied to `.prose` globally, since
 * text-block.php (CMS legal pages) reuses `.prose` too and Figma shows no
 * such treatment there.
 *
 * Round 86: two things Round 83 missed. (1) font-size/leading/weight were
 * never set, so it was silently inheriting Typography's default 500-weight
 * blockquote instead of the confirmed `Inter:Regular` (400) / 18px /
 * leading-[28px]. (2) Typography's quote-mark decoration is generated on
 * the INNER <p> (`blockquote p:first-of-type::before` /
 * `:last-of-type::after`), not the blockquote itself — resetting only the
 * blockquote's own pseudo-elements left the auto-generated marks active,
 * doubling up with the literal “ ” characters already in the confirmed
 * copy (Figma's own text content types the quotes by hand, it doesn't rely
 * on CSS-generated ones).
 *
 * Round 87: padding still read as too generous — the blockquote's OWN
 * padding (py-4/px-8) was already exactly 16px/32px, confirmed correct via
 * computed style. The actual culprit was the INNER <p>'s own Typography
 * default vertical margin (~22.5px, unrelated to the blockquote's padding)
 * stacking on top of it, so the real visual gap was ~38.5px, not 16px.
 * Zeroed with `[&_p]:my-0` — the confirmed mockup has no separate
 * paragraph-level margin, just the one flex container with its own padding.
 * ═══════════════════════════════════════════════════════════════════════════ */

.blog-article .prose blockquote {
  margin-top: 2rem;
  margin-bottom: 2rem;
  border-radius: 1rem;
  border-left-width: 0px;
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
  padding-left: 2rem;
  padding-right: 2rem;
  padding-top: 1rem;
  padding-bottom: 1rem;
  font-family: Inter, sans-serif;
  font-size: 1.125rem;
  font-weight: 400;
  font-style: normal;
  line-height: 1.75rem;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.blog-article .prose blockquote::before {
  --tw-content: none;
  content: var(--tw-content);
}

.blog-article .prose blockquote::after {
  --tw-content: none;
  content: var(--tw-content);
}

.blog-article .prose blockquote p {
  margin-top: 0px;
  margin-bottom: 0px;
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.blog-article .prose blockquote p::before {
  --tw-content: none;
  content: var(--tw-content);
}

.blog-article .prose blockquote p::after {
  --tw-content: none;
  content: var(--tw-content);
}

/* Round 88: body paragraphs are confirmed Inter Regular too (same node
 * range as the pull-quote/h3 above) — font-quaternary, sized/leading
 * already correct sitewide (16px/28px matches the confirmed values, no
 * override needed beyond the family itself). Color is handled by the
 * UNSCOPED `.prose` rule below — Inter is blog-specific, but the color
 * bug it's riding along with turned out not to be. */

.blog-article .prose p {
  font-family: Inter, sans-serif;
}

/* Round 89: EVERY `.prose` usage sitewide — not just the blog post — was
 * silently wrong on body-text color. This project never opts into the
 * named `prose-direct_shower_door` typography variant (see
 * tailwind-typography.config.js's own comment: "does nothing until you
 * swap the class"), so Typography's DEFAULT prose variant's built-in
 * `--tw-prose-body` gray (rgb(55,65,81), Tailwind's gray-700) was
 * rendering everywhere instead of this project's palette. Confirmed via a
 * live check on Privacy Policy (already signed off in Phase 6, uses the
 * same bare `.prose max-w-none` in text-block.php) — identical wrong
 * color there too, not something specific to the blog post. Both
 * confirm the same value: `rgba(40,55,74,0.8)` (secondary/80) for
 * paragraphs AND lists (Privacy Policy's own bulleted clauses). Fixed
 * unscoped, not `.blog-article`-scoped, since this is a real sitewide gap
 * — Privacy Policy stays on Poppins (confirmed `Poppins:Regular` there),
 * only the color was ever wrong, not the font. */

.prose p,
.prose li {
  color: rgb(40 55 74 / 0.8);
}

/* Round 87: Tailwind Typography sizes `.prose` headings with its own
 * em-relative scale (h3 ≈ 1.25em → 20px), which wins over the sitewide
 * `h3, .h3` rule (base.css, confirmed 18px/24px at 2xl) inside `.prose` —
 * Typography's plugin CSS loads in the components layer, after base.css's
 * base-layer rule, so it wins the cascade tie even though both are
 * effectively bare-h3-specificity. Re-asserted the sitewide scale here
 * instead of letting article body h3s drift to a size never confirmed
 * against Figma. */

.blog-article .prose h3 {
  font-size: 1.125rem;
  font-weight: 600;
  line-height: 1.3;
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

@media (min-width: 1310px) {
  .blog-article .prose h3 {
    font-size: 1.5rem;
  }
}

/* Content image, e.g. after "Which Style Fits Your Bathroom?" — confirmed
 * from Figma (same node range as the pull-quote above, node 33880:16652):
 * rounded-[20px], object-cover. Scoped the same way as the pull-quote. */

.blog-article .prose img {
  border-radius: 1.25rem;
}

/**
 * Tailwind's utility classes, then this theme's. Utilities that need variants
 * (hover:, lg:, group-hover:) belong in the config's `plugins` array instead.
 */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

.pointer-events-none {
  pointer-events: none;
}

.visible {
  visibility: visible;
}

.invisible {
  visibility: hidden;
}

.collapse {
  visibility: collapse;
}

.static {
  position: static;
}

.fixed {
  position: fixed;
}

.absolute {
  position: absolute;
}

.relative {
  position: relative;
}

.inset-0 {
  inset: 0px;
}

.inset-x-6 {
  left: 1.5rem;
  right: 1.5rem;
}

.inset-y-0 {
  top: 0px;
  bottom: 0px;
}

.bottom-0 {
  bottom: 0px;
}

.bottom-6 {
  bottom: 1.5rem;
}

.right-0 {
  right: 0px;
}

.right-8 {
  right: 2rem;
}

.top-2 {
  top: 0.5rem;
}

.top-\[668px\] {
  top: 668px;
}

.isolate {
  isolation: isolate;
}

.z-0 {
  z-index: 0;
}

.z-10 {
  z-index: 10;
}

.z-\[-1\] {
  z-index: -1;
}

.z-\[1\] {
  z-index: 1;
}

.z-\[3\] {
  z-index: 3;
}

.col-span-2 {
  grid-column: span 2 / span 2;
}

.m-0 {
  margin: 0px;
}

.-mx-3 {
  margin-left: -0.75rem;
  margin-right: -0.75rem;
}

.-mx-4 {
  margin-left: -1rem;
  margin-right: -1rem;
}

.mx-auto {
  margin-left: auto;
  margin-right: auto;
}

.my-2 {
  margin-top: 0.5rem;
  margin-bottom: 0.5rem;
}

.my-8 {
  margin-top: 2rem;
  margin-bottom: 2rem;
}

.my-9 {
  margin-top: 2.25rem;
  margin-bottom: 2.25rem;
}

.\!mb-2 {
  margin-bottom: 0.5rem !important;
}

.\!mt-0 {
  margin-top: 0px !important;
}

.-mb-6 {
  margin-bottom: -1.5rem;
}

.-mb-\[20\.375rem\] {
  margin-bottom: -20.375rem;
}

.-mt-10 {
  margin-top: -2.5rem;
}

.-mt-2 {
  margin-top: -0.5rem;
}

.-mt-5 {
  margin-top: -1.25rem;
}

.-mt-8 {
  margin-top: -2rem;
}

.mb-0 {
  margin-bottom: 0px;
}

.mb-0\.5 {
  margin-bottom: 0.125rem;
}

.mb-10 {
  margin-bottom: 2.5rem;
}

.mb-12 {
  margin-bottom: 3rem;
}

.mb-16 {
  margin-bottom: 4rem;
}

.mb-2 {
  margin-bottom: 0.5rem;
}

.mb-2\.5 {
  margin-bottom: 0.625rem;
}

.mb-3 {
  margin-bottom: 0.75rem;
}

.mb-4 {
  margin-bottom: 1rem;
}

.mb-5 {
  margin-bottom: 1.25rem;
}

.mb-6 {
  margin-bottom: 1.5rem;
}

.mb-8 {
  margin-bottom: 2rem;
}

.mb-9 {
  margin-bottom: 2.25rem;
}

.mb-\[5px\] {
  margin-bottom: 5px;
}

.mb-\[60px\] {
  margin-bottom: 60px;
}

.ml-0 {
  margin-left: 0px;
}

.ml-auto {
  margin-left: auto;
}

.mt-0 {
  margin-top: 0px;
}

.mt-10 {
  margin-top: 2.5rem;
}

.mt-2 {
  margin-top: 0.5rem;
}

.mt-2\.5 {
  margin-top: 0.625rem;
}

.mt-4 {
  margin-top: 1rem;
}

.mt-5 {
  margin-top: 1.25rem;
}

.mt-6 {
  margin-top: 1.5rem;
}

.mt-8 {
  margin-top: 2rem;
}

.mt-9 {
  margin-top: 2.25rem;
}

.mt-\[12\.375rem\] {
  margin-top: 12.375rem;
}

.mt-\[22px\] {
  margin-top: 22px;
}

.mt-\[30px\] {
  margin-top: 30px;
}

.line-clamp-2 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
}

.block {
  display: block;
}

.inline {
  display: inline;
}

.flex {
  display: flex;
}

.inline-flex {
  display: inline-flex;
}

.table {
  display: table;
}

.grid {
  display: grid;
}

.hidden {
  display: none;
}

.aspect-\[280\/120\] {
  aspect-ratio: 280/120;
}

.aspect-\[350\/357\] {
  aspect-ratio: 350/357;
}

.aspect-\[397\/353\] {
  aspect-ratio: 397/353;
}

.aspect-\[4\/5\] {
  aspect-ratio: 4/5;
}

.aspect-\[403\/353\] {
  aspect-ratio: 403/353;
}

.aspect-\[596\/512\] {
  aspect-ratio: 596/512;
}

.aspect-video {
  aspect-ratio: 16 / 9;
}

.size-10 {
  width: 2.5rem;
  height: 2.5rem;
}

.size-12 {
  width: 3rem;
  height: 3rem;
}

.size-3\.5 {
  width: 0.875rem;
  height: 0.875rem;
}

.size-32 {
  width: 8rem;
  height: 8rem;
}

.size-5 {
  width: 1.25rem;
  height: 1.25rem;
}

.size-6 {
  width: 1.5rem;
  height: 1.5rem;
}

.size-\[1\.0625rem\] {
  width: 1.0625rem;
  height: 1.0625rem;
}

.size-\[14px\] {
  width: 14px;
  height: 14px;
}

.size-\[22px\] {
  width: 22px;
  height: 22px;
}

.size-\[3\.3125rem\] {
  width: 3.3125rem;
  height: 3.3125rem;
}

.size-\[30px\] {
  width: 30px;
  height: 30px;
}

.size-\[43\.231px\] {
  width: 43.231px;
  height: 43.231px;
}

.size-\[67px\] {
  width: 67px;
  height: 67px;
}

.size-\[70px\] {
  width: 70px;
  height: 70px;
}

.size-full {
  width: 100%;
  height: 100%;
}

.h-40 {
  height: 10rem;
}

.h-6 {
  height: 1.5rem;
}

.h-\[1\.965px\] {
  height: 1.965px;
}

.h-\[13\.75rem\] {
  height: 13.75rem;
}

.h-\[182px\] {
  height: 182px;
}

.h-\[28\.5rem\] {
  height: 28.5rem;
}

.h-\[3\.125rem\] {
  height: 3.125rem;
}

.h-\[350px\] {
  height: 350px;
}

.h-\[45\.625rem\] {
  height: 45.625rem;
}

.h-\[720px\] {
  height: 720px;
}

.h-auto {
  height: auto;
}

.h-full {
  height: 100%;
}

.h-px {
  height: 1px;
}

.min-h-0 {
  min-height: 0px;
}

.min-h-\[22rem\] {
  min-height: 22rem;
}

.min-h-\[26rem\] {
  min-height: 26rem;
}

.min-h-\[28rem\] {
  min-height: 28rem;
}

.min-h-\[350px\] {
  min-height: 350px;
}

.w-1\/2 {
  width: 50%;
}

.w-16 {
  width: 4rem;
}

.w-64 {
  width: 16rem;
}

.w-\[11px\] {
  width: 11px;
}

.w-\[169\.143px\] {
  width: 169.143px;
}

.w-\[18px\] {
  width: 18px;
}

.w-\[19px\] {
  width: 19px;
}

.w-\[240px\] {
  width: 240px;
}

.w-\[85\.479px\] {
  width: 85.479px;
}

.w-fit {
  width: -moz-fit-content;
  width: fit-content;
}

.w-full {
  width: 100%;
}

.w-px {
  width: 1px;
}

.min-w-0 {
  min-width: 0px;
}

.min-w-\[170px\] {
  min-width: 170px;
}

.max-w-2xl {
  max-width: 42rem;
}

.max-w-3xl {
  max-width: 48rem;
}

.max-w-\[65rem\] {
  max-width: 65rem;
}

.max-w-\[720px\] {
  max-width: 720px;
}

.max-w-md {
  max-width: 28rem;
}

.max-w-none {
  max-width: none;
}

.max-w-xl {
  max-width: 36rem;
}

.flex-1 {
  flex: 1 1 0%;
}

.shrink {
  flex-shrink: 1;
}

.shrink-0 {
  flex-shrink: 0;
}

.flex-grow {
  flex-grow: 1;
}

.grow-0 {
  flex-grow: 0;
}

.basis-full {
  flex-basis: 100%;
}

.-translate-y-\[60px\] {
  --tw-translate-y: -60px;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.translate-y-1\/3 {
  --tw-translate-y: 33.333333%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.-rotate-180 {
  --tw-rotate: -180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.rotate-180 {
  --tw-rotate: 180deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.-scale-x-100 {
  --tw-scale-x: -1;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.-scale-y-100 {
  --tw-scale-y: -1;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}

.cursor-pointer {
  cursor: pointer;
}

.scroll-mt-28 {
  scroll-margin-top: 7rem;
}

.list-disc {
  list-style-type: disc;
}

.list-none {
  list-style-type: none;
}

.grid-cols-1 {
  grid-template-columns: repeat(1, minmax(0, 1fr));
}

.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.grid-cols-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.flex-col {
  flex-direction: column;
}

.flex-wrap {
  flex-wrap: wrap;
}

.flex-nowrap {
  flex-wrap: nowrap;
}

.items-start {
  align-items: flex-start;
}

.items-end {
  align-items: flex-end;
}

.items-center {
  align-items: center;
}

.items-baseline {
  align-items: baseline;
}

.items-stretch {
  align-items: stretch;
}

.justify-end {
  justify-content: flex-end;
}

.justify-center {
  justify-content: center;
}

.justify-between {
  justify-content: space-between;
}

.gap-1 {
  gap: 0.25rem;
}

.gap-1\.5 {
  gap: 0.375rem;
}

.gap-10 {
  gap: 2.5rem;
}

.gap-12 {
  gap: 3rem;
}

.gap-2 {
  gap: 0.5rem;
}

.gap-2\.5 {
  gap: 0.625rem;
}

.gap-3 {
  gap: 0.75rem;
}

.gap-4 {
  gap: 1rem;
}

.gap-5 {
  gap: 1.25rem;
}

.gap-6 {
  gap: 1.5rem;
}

.gap-8 {
  gap: 2rem;
}

.gap-\[1\.875rem\] {
  gap: 1.875rem;
}

.gap-\[10px\] {
  gap: 10px;
}

.gap-\[11\.422px\] {
  gap: 11.422px;
}

.gap-\[14\.738px\] {
  gap: 14.738px;
}

.gap-\[15\.72px\] {
  gap: 15.72px;
}

.gap-\[15px\] {
  gap: 15px;
}

.gap-\[20px\] {
  gap: 20px;
}

.gap-\[30px\] {
  gap: 30px;
}

.gap-\[4\.913px\] {
  gap: 4.913px;
}

.gap-\[40px\] {
  gap: 40px;
}

.gap-\[6\.878px\] {
  gap: 6.878px;
}

.gap-\[7\.86px\] {
  gap: 7.86px;
}

.gap-\[8\.843px\] {
  gap: 8.843px;
}

.gap-\[80px\] {
  gap: 80px;
}

.gap-\[8px\] {
  gap: 8px;
}

.gap-x-20 {
  -moz-column-gap: 5rem;
       column-gap: 5rem;
}

.gap-y-6 {
  row-gap: 1.5rem;
}

.gap-y-8 {
  row-gap: 2rem;
}

.space-y-0 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}

.space-y-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}

.space-y-2\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.625rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.625rem * var(--tw-space-y-reverse));
}

.space-y-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
}

.space-y-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}

.space-y-6 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
}

.divide-x > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-x-reverse: 0;
  border-right-width: calc(1px * var(--tw-divide-x-reverse));
  border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
}

.divide-y > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-y-reverse: 0;
  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
}

.divide-secondary\/20 > :not([hidden]) ~ :not([hidden]) {
  border-color: rgb(40 55 74 / 0.2);
}

.self-center {
  align-self: center;
}

.self-stretch {
  align-self: stretch;
}

.overflow-hidden {
  overflow: hidden;
}

.overflow-x-auto {
  overflow-x: auto;
}

.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.whitespace-nowrap {
  white-space: nowrap;
}

.rounded {
  border-radius: 0.25rem;
}

.rounded-2xl {
  border-radius: 1rem;
}

.rounded-\[0\.3125rem\] {
  border-radius: 0.3125rem;
}

.rounded-\[10px\] {
  border-radius: 10px;
}

.rounded-\[16px\] {
  border-radius: 16px;
}

.rounded-\[20px\] {
  border-radius: 20px;
}

.rounded-\[2px\] {
  border-radius: 2px;
}

.rounded-\[5px\] {
  border-radius: 5px;
}

.rounded-full {
  border-radius: 9999px;
}

.rounded-lg {
  border-radius: 0.5rem;
}

.rounded-xl {
  border-radius: 0.75rem;
}

.rounded-t-\[20px\] {
  border-top-left-radius: 20px;
  border-top-right-radius: 20px;
}

.border {
  border-width: 1px;
}

.border-2 {
  border-width: 2px;
}

.border-4 {
  border-width: 4px;
}

.border-b {
  border-bottom-width: 1px;
}

.border-t {
  border-top-width: 1px;
}

.border-solid {
  border-style: solid;
}

.\!border-primary {
  --tw-border-opacity: 1 !important;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1)) !important;
}

.border-\[\#6ba6ca\] {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
}

.border-\[\#c4c7c7\] {
  --tw-border-opacity: 1;
  border-color: rgb(196 199 199 / var(--tw-border-opacity, 1));
}

.border-black\/20 {
  border-color: rgb(0 0 0 / 0.2);
}

.border-primary {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
}

.border-primary\/20 {
  border-color: rgb(107 166 202 / 0.2);
}

.border-primary\/40 {
  border-color: rgb(107 166 202 / 0.4);
}

.border-secondary-100 {
  --tw-border-opacity: 1;
  border-color: rgb(223 228 233 / var(--tw-border-opacity, 1));
}

.border-secondary\/10 {
  border-color: rgb(40 55 74 / 0.1);
}

.border-secondary\/\[0\.16\] {
  border-color: rgb(40 55 74 / 0.16);
}

.border-white {
  --tw-border-opacity: 1;
  border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));
}

.border-white\/20 {
  border-color: rgb(255 255 255 / 0.2);
}

.border-white\/50 {
  border-color: rgb(255 255 255 / 0.5);
}

.border-t-white\/20 {
  border-top-color: rgb(255 255 255 / 0.2);
}

.bg-\[\#28374a\] {
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
}

.bg-\[\#e1edf4\] {
  --tw-bg-opacity: 1;
  background-color: rgb(225 237 244 / var(--tw-bg-opacity, 1));
}

.bg-\[rgba\(107\2c 166\2c 202\2c 0\.2\)\] {
  background-color: rgba(107,166,202,0.2);
}

.bg-current {
  background-color: currentColor;
}

.bg-primary {
  --tw-bg-opacity: 1;
  background-color: rgb(107 166 202 / var(--tw-bg-opacity, 1));
}

.bg-primary\/20 {
  background-color: rgb(107 166 202 / 0.2);
}

.bg-primary\/70 {
  background-color: rgb(107 166 202 / 0.7);
}

.bg-primary\/80 {
  background-color: rgb(107 166 202 / 0.8);
}

.bg-secondary {
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
}

.bg-secondary-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(242 244 246 / var(--tw-bg-opacity, 1));
}

.bg-secondary\/20 {
  background-color: rgb(40 55 74 / 0.2);
}

.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}

.bg-white\/10 {
  background-color: rgb(255 255 255 / 0.1);
}

.bg-white\/20 {
  background-color: rgb(255 255 255 / 0.2);
}

.bg-white\/25 {
  background-color: rgb(255 255 255 / 0.25);
}

.bg-white\/40 {
  background-color: rgb(255 255 255 / 0.4);
}

.bg-white\/\[0\.18\] {
  background-color: rgb(255 255 255 / 0.18);
}

.bg-gradient-to-b {
  background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
}

.bg-gradient-to-l {
  background-image: linear-gradient(to left, var(--tw-gradient-stops));
}

.bg-gradient-to-t {
  background-image: linear-gradient(to top, var(--tw-gradient-stops));
}

.bg-none {
  background-image: none;
}

.from-\[\#28374a\] {
  --tw-gradient-from: #28374a var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-\[\#e1edf4\] {
  --tw-gradient-from: #e1edf4 var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(225 237 244 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-\[rgba\(255\2c 255\2c 255\2c 0\)\] {
  --tw-gradient-from: rgba(255,255,255,0) var(--tw-gradient-from-position);
  --tw-gradient-to: rgba(255, 255, 255, 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-\[rgba\(40\2c 55\2c 74\2c 0\)\] {
  --tw-gradient-from: rgba(40,55,74,0) var(--tw-gradient-from-position);
  --tw-gradient-to: rgba(40, 55, 74, 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-primary\/20 {
  --tw-gradient-from: rgb(107 166 202 / 0.2) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(107 166 202 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-primary\/80 {
  --tw-gradient-from: rgb(107 166 202 / 0.8) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(107 166 202 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-secondary\/10 {
  --tw-gradient-from: rgb(40 55 74 / 0.1) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-white {
  --tw-gradient-from: #fff var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.from-white\/0 {
  --tw-gradient-from: rgb(255 255 255 / 0) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.via-primary\/50 {
  --tw-gradient-to: rgb(107 166 202 / 0)  var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), rgb(107 166 202 / 0.5) var(--tw-gradient-via-position), var(--tw-gradient-to);
}

.via-secondary\/40 {
  --tw-gradient-to: rgb(40 55 74 / 0)  var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), rgb(40 55 74 / 0.4) var(--tw-gradient-via-position), var(--tw-gradient-to);
}

.via-secondary\/85 {
  --tw-gradient-to: rgb(40 55 74 / 0)  var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), rgb(40 55 74 / 0.85) var(--tw-gradient-via-position), var(--tw-gradient-to);
}

.to-\[\#28374a\] {
  --tw-gradient-to: #28374a var(--tw-gradient-to-position);
}

.to-primary\/20 {
  --tw-gradient-to: rgb(107 166 202 / 0.2) var(--tw-gradient-to-position);
}

.to-secondary {
  --tw-gradient-to: #28374a var(--tw-gradient-to-position);
}

.to-transparent {
  --tw-gradient-to: transparent var(--tw-gradient-to-position);
}

.to-white {
  --tw-gradient-to: #fff var(--tw-gradient-to-position);
}

.to-white\/20 {
  --tw-gradient-to: rgb(255 255 255 / 0.2) var(--tw-gradient-to-position);
}

.bg-cover {
  background-size: cover;
}

.bg-center {
  background-position: center;
}

.bg-no-repeat {
  background-repeat: no-repeat;
}

.object-cover {
  -o-object-fit: cover;
     object-fit: cover;
}

.p-0 {
  padding: 0px;
}

.p-10 {
  padding: 2.5rem;
}

.p-4 {
  padding: 1rem;
}

.p-6 {
  padding: 1.5rem;
}

.p-8 {
  padding: 2rem;
}

.p-\[33px\] {
  padding: 33px;
}

.\!px-0 {
  padding-left: 0px !important;
  padding-right: 0px !important;
}

.px-0 {
  padding-left: 0px;
  padding-right: 0px;
}

.px-10 {
  padding-left: 2.5rem;
  padding-right: 2.5rem;
}

.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}

.px-4 {
  padding-left: 1rem;
  padding-right: 1rem;
}

.px-8 {
  padding-left: 2rem;
  padding-right: 2rem;
}

.px-\[1\.875rem\] {
  padding-left: 1.875rem;
  padding-right: 1.875rem;
}

.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}

.py-12 {
  padding-top: 3rem;
  padding-bottom: 3rem;
}

.py-16 {
  padding-top: 4rem;
  padding-bottom: 4rem;
}

.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}

.py-2\.5 {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
}

.py-20 {
  padding-top: 5rem;
  padding-bottom: 5rem;
}

.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem;
}

.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}

.py-\[0\.9375rem\] {
  padding-top: 0.9375rem;
  padding-bottom: 0.9375rem;
}

.pb-10 {
  padding-bottom: 2.5rem;
}

.pb-16 {
  padding-bottom: 4rem;
}

.pb-20 {
  padding-bottom: 5rem;
}

.pb-3 {
  padding-bottom: 0.75rem;
}

.pb-6 {
  padding-bottom: 1.5rem;
}

.pb-\[1\.875rem\] {
  padding-bottom: 1.875rem;
}

.pl-6 {
  padding-left: 1.5rem;
}

.pl-\[1\.6875rem\] {
  padding-left: 1.6875rem;
}

.pr-6 {
  padding-right: 1.5rem;
}

.pt-28 {
  padding-top: 7rem;
}

.pt-32 {
  padding-top: 8rem;
}

.pt-6 {
  padding-top: 1.5rem;
}

.pt-\[1\.875rem\] {
  padding-top: 1.875rem;
}

.pt-\[17\.125rem\] {
  padding-top: 17.125rem;
}

.text-left {
  text-align: left;
}

.text-center {
  text-align: center;
}

.font-primary {
  font-family: Poppins, sans-serif;
}

.font-quaternary {
  font-family: Inter, sans-serif;
}

.text-2xl {
  font-size: 1.5rem;
  line-height: 2rem;
}

.text-\[0\.9375rem\] {
  font-size: 0.9375rem;
}

.text-\[1\.125rem\] {
  font-size: 1.125rem;
}

.text-\[1\.5rem\] {
  font-size: 1.5rem;
}

.text-\[1\.625rem\] {
  font-size: 1.625rem;
}

.text-\[16px\] {
  font-size: 16px;
}

.text-\[2\.3rem\] {
  font-size: 2.3rem;
}

.text-\[2\.5rem\] {
  font-size: 2.5rem;
}

.text-\[32px\] {
  font-size: 32px;
}

.text-\[40px\] {
  font-size: 40px;
}

.text-\[60px\] {
  font-size: 60px;
}

.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}

.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}

.text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}

.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}

.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}

.font-bold {
  font-weight: 700;
}

.font-light {
  font-weight: 300;
}

.font-medium {
  font-weight: 500;
}

.font-normal {
  font-weight: 400;
}

.font-semibold {
  font-weight: 600;
}

.uppercase {
  text-transform: uppercase;
}

.capitalize {
  text-transform: capitalize;
}

.italic {
  font-style: italic;
}

.leading-7 {
  line-height: 1.75rem;
}

.leading-\[1\.2\] {
  line-height: 1.2;
}

.leading-\[1\.3\] {
  line-height: 1.3;
}

.leading-\[1\.5\] {
  line-height: 1.5;
}

.leading-\[28px\] {
  line-height: 28px;
}

.leading-tight {
  line-height: 1.25;
}

.tracking-\[0\.15px\] {
  letter-spacing: 0.15px;
}

.tracking-\[1\.4px\] {
  letter-spacing: 1.4px;
}

.tracking-\[1px\] {
  letter-spacing: 1px;
}

.tracking-tight {
  letter-spacing: -0.025em;
}

.\!text-primary {
  --tw-text-opacity: 1 !important;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1)) !important;
}

.\!text-secondary {
  --tw-text-opacity: 1 !important;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1)) !important;
}

.\!text-secondary\/80 {
  color: rgb(40 55 74 / 0.8) !important;
}

.text-\[\#28374a\] {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.text-\[\#333\] {
  --tw-text-opacity: 1;
  color: rgb(51 51 51 / var(--tw-text-opacity, 1));
}

.text-amber-400 {
  --tw-text-opacity: 1;
  color: rgb(251 191 36 / var(--tw-text-opacity, 1));
}

.text-primary {
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

.text-secondary {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.text-secondary-500 {
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
}

.text-secondary\/60 {
  color: rgb(40 55 74 / 0.6);
}

.text-secondary\/70 {
  color: rgb(40 55 74 / 0.7);
}

.text-secondary\/80 {
  color: rgb(40 55 74 / 0.8);
}

.text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.text-white\/80 {
  color: rgb(255 255 255 / 0.8);
}

.text-white\/90 {
  color: rgb(255 255 255 / 0.9);
}

.text-white\/95 {
  color: rgb(255 255 255 / 0.95);
}

.underline {
  text-decoration-line: underline;
}

.opacity-0 {
  opacity: 0;
}

.opacity-10 {
  opacity: 0.1;
}

.opacity-30 {
  opacity: 0.3;
}

.opacity-60 {
  opacity: 0.6;
}

.opacity-80 {
  opacity: 0.8;
}

.shadow {
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.shadow-\[0px_1px_1px_0px_rgba\(0\2c 0\2c 0\2c 0\.05\)\] {
  --tw-shadow: 0px 1px 1px 0px rgba(0,0,0,0.05);
  --tw-shadow-colored: 0px 1px 1px 0px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.shadow-\[0px_4px_14px_0px_rgba\(0\2c 0\2c 0\2c 0\.1\)\] {
  --tw-shadow: 0px 4px 14px 0px rgba(0,0,0,0.1);
  --tw-shadow-colored: 0px 4px 14px 0px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.shadow-\[4px_4px_10px_0px_rgba\(0\2c 0\2c 0\2c 0\.1\)\] {
  --tw-shadow: 4px 4px 10px 0px rgba(0,0,0,0.1);
  --tw-shadow-colored: 4px 4px 10px 0px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}

.outline-none {
  outline: 2px solid transparent;
  outline-offset: 2px;
}

.ring {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}

.blur {
  --tw-blur: blur(8px);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.drop-shadow {
  --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}

.backdrop-blur {
  --tw-backdrop-blur: blur(8px);
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}

.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-colors {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.transition-opacity {
  transition-property: opacity;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

.duration-300 {
  transition-duration: 300ms;
}

.stretched-link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 10;
}

.title-white :is(h1,h2,h3,h4,h5,h6) {
  color: #ffffff;
}

.\[mask-image\:linear-gradient\(to_right\2c transparent\2c white_55\%\)\] {
  -webkit-mask-image: linear-gradient(to right,transparent,white 55%);
          mask-image: linear-gradient(to right,transparent,white 55%);
}

/**
 * Custom styles to immediately follow Tailwind's `utilities` layer.
 * tailwind/custom/utilities.css
 *
 * For PLAIN utility classes that never need a variant. Usually empty.
 */

/* Hide scrollbars on the horizontally-scrolling style-pill row. */

.no-scrollbar {
  -ms-overflow-style: none;
  scrollbar-width: none;
}

.no-scrollbar::-webkit-scrollbar {
  display: none;
}

.marker\:text-white *::marker {
  color: rgb(255 255 255 );
}

.marker\:text-white::marker {
  color: rgb(255 255 255 );
}

.placeholder\:text-secondary-500::-moz-placeholder {
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
}

.placeholder\:text-secondary-500::placeholder {
  --tw-text-opacity: 1;
  color: rgb(83 95 110 / var(--tw-text-opacity, 1));
}

.after\:absolute::after {
  content: var(--tw-content);
  position: absolute;
}

.after\:inset-0::after {
  content: var(--tw-content);
  inset: 0px;
}

.after\:z-\[1\]::after {
  content: var(--tw-content);
  z-index: 1;
}

.after\:z-\[2\]::after {
  content: var(--tw-content);
  z-index: 2;
}

.after\:bg-gradient-to-b::after {
  content: var(--tw-content);
  background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
}

.after\:bg-gradient-to-r::after {
  content: var(--tw-content);
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
}

.after\:from-secondary::after {
  content: var(--tw-content);
  --tw-gradient-from: #28374a var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.after\:from-secondary\/0::after {
  content: var(--tw-content);
  --tw-gradient-from: rgb(40 55 74 / 0) var(--tw-gradient-from-position);
  --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}

.after\:via-secondary\/40::after {
  content: var(--tw-content);
  --tw-gradient-to: rgb(40 55 74 / 0)  var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), rgb(40 55 74 / 0.4) var(--tw-gradient-via-position), var(--tw-gradient-to);
}

.after\:via-secondary\/85::after {
  content: var(--tw-content);
  --tw-gradient-to: rgb(40 55 74 / 0)  var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), rgb(40 55 74 / 0.85) var(--tw-gradient-via-position), var(--tw-gradient-to);
}

.after\:to-secondary\/0::after {
  content: var(--tw-content);
  --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
}

.after\:to-secondary\/50::after {
  content: var(--tw-content);
  --tw-gradient-to: rgb(40 55 74 / 0.5) var(--tw-gradient-to-position);
}

.after\:to-secondary\/80::after {
  content: var(--tw-content);
  --tw-gradient-to: rgb(40 55 74 / 0.8) var(--tw-gradient-to-position);
}

.hover\:border-transparent:hover {
  border-color: transparent;
}

.hover\:bg-secondary:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(40 55 74 / var(--tw-bg-opacity, 1));
}

.hover\:bg-secondary-800:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(16 22 30 / var(--tw-bg-opacity, 1));
}

.hover\:bg-white\/20:hover {
  background-color: rgb(255 255 255 / 0.2);
}

.focus\:border-primary:focus {
  --tw-border-opacity: 1;
  border-color: rgb(107 166 202 / var(--tw-border-opacity, 1));
}

.group:hover .group-hover\:text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.group:hover .group-hover\:text-white\/80 {
  color: rgb(255 255 255 / 0.8);
}

.group:hover .group-hover\:opacity-100 {
  opacity: 1;
}

.prose-a\:text-primary :is(:where(a):not(:where([class~="not-prose"],[class~="not-prose"] *))) {
  --tw-text-opacity: 1;
  color: rgb(107 166 202 / var(--tw-text-opacity, 1));
}

@media not all and (min-width: 1200px) {
  .max-xl\:m-4 {
    margin: 1rem;
  }

  .max-xl\:hidden {
    display: none;
  }
}

@media (min-width: 576px) {
  .sm\:col-span-2 {
    grid-column: span 2 / span 2;
  }

  .sm\:my-12 {
    margin-top: 3rem;
    margin-bottom: 3rem;
  }

  .sm\:-mt-10 {
    margin-top: -2.5rem;
  }

  .sm\:mb-12 {
    margin-bottom: 3rem;
  }

  .sm\:mt-12 {
    margin-top: 3rem;
  }

  .sm\:h-\[350px\] {
    height: 350px;
  }

  .sm\:min-h-\[30rem\] {
    min-height: 30rem;
  }

  .sm\:w-1\/2 {
    width: 50%;
  }

  .sm\:w-24 {
    width: 6rem;
  }

  .sm\:w-72 {
    width: 18rem;
  }

  .sm\:w-\[calc\(50\%-0\.75rem\)\] {
    width: calc(50% - 0.75rem);
  }

  .sm\:basis-\[calc\(\(100\%-2rem\)\/2\)\] {
    flex-basis: calc((100% - 2rem) / 2);
  }

  .sm\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .sm\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .sm\:p-10 {
    padding: 2.5rem;
  }

  .sm\:py-14 {
    padding-top: 3.5rem;
    padding-bottom: 3.5rem;
  }

  .sm\:pb-8 {
    padding-bottom: 2rem;
  }

  .sm\:pt-40 {
    padding-top: 10rem;
  }

  .sm\:text-2xl {
    font-size: 1.5rem;
    line-height: 2rem;
  }

  .sm\:text-\[1rem\] {
    font-size: 1rem;
  }
}

@media (min-width: 768px) {
  .md\:min-h-\[34rem\] {
    min-height: 34rem;
  }

  .md\:w-1\/3 {
    width: 33.333333%;
  }

  .md\:w-\[calc\(50\%-1rem\)\] {
    width: calc(50% - 1rem);
  }

  .md\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .md\:flex-row {
    flex-direction: row;
  }

  .md\:items-end {
    align-items: flex-end;
  }

  .md\:justify-between {
    justify-content: space-between;
  }

  .md\:p-10 {
    padding: 2.5rem;
  }

  .md\:py-20 {
    padding-top: 5rem;
    padding-bottom: 5rem;
  }

  .md\:py-24 {
    padding-top: 6rem;
    padding-bottom: 6rem;
  }

  .md\:pb-24 {
    padding-bottom: 6rem;
  }

  .md\:text-right {
    text-align: right;
  }
}

@media (min-width: 992px) {
  .lg\:absolute {
    position: absolute;
  }

  .lg\:bottom-0 {
    bottom: 0px;
  }

  .lg\:right-0 {
    right: 0px;
  }

  .lg\:order-1 {
    order: 1;
  }

  .lg\:order-2 {
    order: 2;
  }

  .lg\:my-16 {
    margin-top: 4rem;
    margin-bottom: 4rem;
  }

  .lg\:-mt-10 {
    margin-top: -2.5rem;
  }

  .lg\:-mt-12 {
    margin-top: -3rem;
  }

  .lg\:mb-10 {
    margin-bottom: 2.5rem;
  }

  .lg\:mb-12 {
    margin-bottom: 3rem;
  }

  .lg\:mb-16 {
    margin-bottom: 4rem;
  }

  .lg\:mb-24 {
    margin-bottom: 6rem;
  }

  .lg\:mb-8 {
    margin-bottom: 2rem;
  }

  .lg\:mt-0 {
    margin-top: 0px;
  }

  .lg\:mt-10 {
    margin-top: 2.5rem;
  }

  .lg\:mt-12 {
    margin-top: 3rem;
  }

  .lg\:mt-16 {
    margin-top: 4rem;
  }

  .lg\:mt-\[14\.6875rem\] {
    margin-top: 14.6875rem;
  }

  .lg\:h-\[45\.625rem\] {
    height: 45.625rem;
  }

  .lg\:h-auto {
    height: auto;
  }

  .lg\:min-h-\[36rem\] {
    min-height: 36rem;
  }

  .lg\:min-h-\[450px\] {
    min-height: 450px;
  }

  .lg\:w-1\/3 {
    width: 33.333333%;
  }

  .lg\:w-3\/5 {
    width: 60%;
  }

  .lg\:w-80 {
    width: 20rem;
  }

  .lg\:w-\[15\%\] {
    width: 15%;
  }

  .lg\:w-\[16\%\] {
    width: 16%;
  }

  .lg\:w-\[23\.5625rem\] {
    width: 23.5625rem;
  }

  .lg\:w-\[380px\] {
    width: 380px;
  }

  .lg\:w-\[44\%\] {
    width: 44%;
  }

  .lg\:w-\[calc\(33\.333\%-1rem\)\] {
    width: calc(33.333% - 1rem);
  }

  .lg\:flex-1 {
    flex: 1 1 0%;
  }

  .lg\:shrink-0 {
    flex-shrink: 0;
  }

  .lg\:basis-\[calc\(\(100\%-4rem\)\/3\)\] {
    flex-basis: calc((100% - 4rem) / 3);
  }

  .lg\:basis-\[calc\(\(100\%-6rem\)\/4\)\] {
    flex-basis: calc((100% - 6rem) / 4);
  }

  .lg\:-translate-y-\[60px\] {
    --tw-translate-y: -60px;
    transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
  }

  .lg\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .lg\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .lg\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }

  .lg\:grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }

  .lg\:grid-cols-\[544fr_680fr\] {
    grid-template-columns: 544fr 680fr;
  }

  .lg\:grid-cols-\[56fr_45fr\] {
    grid-template-columns: 56fr 45fr;
  }

  .lg\:grid-cols-\[596fr_630fr\] {
    grid-template-columns: 596fr 630fr;
  }

  .lg\:flex-row {
    flex-direction: row;
  }

  .lg\:items-center {
    align-items: center;
  }

  .lg\:gap-11 {
    gap: 2.75rem;
  }

  .lg\:gap-12 {
    gap: 3rem;
  }

  .lg\:gap-14 {
    gap: 3.5rem;
  }

  .lg\:gap-16 {
    gap: 4rem;
  }

  .lg\:gap-\[4\.75rem\] {
    gap: 4.75rem;
  }

  .lg\:gap-\[5\.8125rem\] {
    gap: 5.8125rem;
  }

  .lg\:p-14 {
    padding: 3.5rem;
  }

  .lg\:px-\[3\.75rem\] {
    padding-left: 3.75rem;
    padding-right: 3.75rem;
  }

  .lg\:py-16 {
    padding-top: 4rem;
    padding-bottom: 4rem;
  }

  .lg\:py-24 {
    padding-top: 6rem;
    padding-bottom: 6rem;
  }

  .lg\:py-5 {
    padding-top: 1.25rem;
    padding-bottom: 1.25rem;
  }

  .lg\:py-\[1\.475rem\] {
    padding-top: 1.475rem;
    padding-bottom: 1.475rem;
  }

  .lg\:pb-10 {
    padding-bottom: 2.5rem;
  }

  .lg\:pb-14 {
    padding-bottom: 3.5rem;
  }

  .lg\:pb-16 {
    padding-bottom: 4rem;
  }

  .lg\:pb-20 {
    padding-bottom: 5rem;
  }

  .lg\:pb-24 {
    padding-bottom: 6rem;
  }

  .lg\:pr-12 {
    padding-right: 3rem;
  }

  .lg\:pr-16 {
    padding-right: 4rem;
  }

  .lg\:pt-10 {
    padding-top: 2.5rem;
  }

  .lg\:pt-12 {
    padding-top: 3rem;
  }

  .lg\:pt-20 {
    padding-top: 5rem;
  }

  .lg\:after\:to-secondary\/0::after {
    content: var(--tw-content);
    --tw-gradient-to: rgb(40 55 74 / 0) var(--tw-gradient-to-position);
  }
}

@media (min-width: 1200px) {
  .xl\:-mx-4 {
    margin-left: -1rem;
    margin-right: -1rem;
  }

  .xl\:my-20 {
    margin-top: 5rem;
    margin-bottom: 5rem;
  }

  .xl\:-mb-\[20\.375rem\] {
    margin-bottom: -20.375rem;
  }

  .xl\:-mb-\[24rem\] {
    margin-bottom: -24rem;
  }

  .xl\:-mt-\[3\.25rem\] {
    margin-top: -3.25rem;
  }

  .xl\:mb-20 {
    margin-bottom: 5rem;
  }

  .xl\:mt-20 {
    margin-top: 5rem;
  }

  .xl\:hidden {
    display: none;
  }

  .xl\:min-h-\[\.\.\.\] {
    min-height: ...;
  }

  .xl\:w-\[11\%\] {
    width: 11%;
  }

  .xl\:w-\[24\%\] {
    width: 24%;
  }

  .xl\:w-\[8\%\] {
    width: 8%;
  }

  .xl\:flex-row {
    flex-direction: row;
  }

  .xl\:items-center {
    align-items: center;
  }

  .xl\:gap-4 {
    gap: 1rem;
  }

  .xl\:gap-x-\[11\.0625rem\] {
    -moz-column-gap: 11.0625rem;
         column-gap: 11.0625rem;
  }

  .xl\:gap-y-8 {
    row-gap: 2rem;
  }

  .xl\:px-4 {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .xl\:pb-16 {
    padding-bottom: 4rem;
  }

  .xl\:pb-24 {
    padding-bottom: 6rem;
  }

  .xl\:pt-14 {
    padding-top: 3.5rem;
  }

  .xl\:pt-24 {
    padding-top: 6rem;
  }

  .xl\:pt-\[17\.125rem\] {
    padding-top: 17.125rem;
  }
}

@media (min-width: 1310px) {
  .\32xl\:my-24 {
    margin-top: 6rem;
    margin-bottom: 6rem;
  }

  .\32xl\:mb-24 {
    margin-bottom: 6rem;
  }

  .\32xl\:mt-24 {
    margin-top: 6rem;
  }

  .\32xl\:min-h-\[45rem\] {
    min-height: 45rem;
  }

  .\32xl\:px-5 {
    padding-left: 1.25rem;
    padding-right: 1.25rem;
  }

  .\32xl\:py-6 {
    padding-top: 1.5rem;
    padding-bottom: 1.5rem;
  }

  .\32xl\:pb-12 {
    padding-bottom: 3rem;
  }

  .\32xl\:pb-14 {
    padding-bottom: 3.5rem;
  }

  .\32xl\:pb-20 {
    padding-bottom: 5rem;
  }

  .\32xl\:pb-32 {
    padding-bottom: 8rem;
  }

  .\32xl\:pt-\[3\.75rem\] {
    padding-top: 3.75rem;
  }
}

.hover\:\[\&_a\:not\(\.btn\)\]\:text-white a:not(.btn):hover {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}

.\[\&_a\:not\(\:hover\)\]\:text-white\/70 a:not(:hover) {
  color: rgb(255 255 255 / 0.7);
}

.\[\&_a\]\:text-inherit a {
  color: inherit;
}

.\[\&_a\]\:text-secondary a {
  --tw-text-opacity: 1;
  color: rgb(40 55 74 / var(--tw-text-opacity, 1));
}

.\[\&_a\]\:underline a {
  text-decoration-line: underline;
}

.\[\&_h1\]\:mb-4 h1 {
  margin-bottom: 1rem;
}

.\[\&_p\]\:mb-0 p {
  margin-bottom: 0px;
}
