/**
 * Jarvis theme overrides — DXPR-style look via Bootstrap 5 CSS custom properties.
 * ponytail: theme at the variable level; add a SCSS pipeline only if this can't reach it.
 */
:root {
  --bs-primary: #2d6cdf;
  --bs-primary-rgb: 45, 108, 223;
  --bs-secondary: #1b2a4a;
  --bs-body-font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --bs-body-color: #1b2130;
  --bs-border-radius: 0.65rem;
  --bs-border-radius-lg: 1rem;
  --jarvis-section-gap: 4rem;
}

body {
  -webkit-font-smoothing: antialiased;
}

/* Page title bold by default — scoped to beat Bootstrap's heading weight. */
.jarvis-page-title h1,
.jarvis-page-title .page-title {
  font-weight: 700;
}

.btn-primary {
  --bs-btn-bg: var(--bs-primary);
  --bs-btn-border-color: var(--bs-primary);
  --bs-btn-hover-bg: #245ac0;
  --bs-btn-hover-border-color: #245ac0;
  --bs-btn-padding-x: 1.6rem;
  --bs-btn-padding-y: 0.7rem;
  font-weight: 600;
}

/* Jarvis spacing utilities — exact px, driven by the padding/margin SDC props.
   Bootstrap's rem scale can't hit 10/20/30px, so these are bespoke.
   small=10px, medium=20px, large=30px. */
.jp-p-all-small { padding: 10px; }
.jp-p-all-medium { padding: 20px; }
.jp-p-all-large { padding: 30px; }
.jp-p-top-small { padding-top: 10px; }
.jp-p-top-medium { padding-top: 20px; }
.jp-p-top-large { padding-top: 30px; }
.jp-p-bottom-small { padding-bottom: 10px; }
.jp-p-bottom-medium { padding-bottom: 20px; }
.jp-p-bottom-large { padding-bottom: 30px; }
.jp-p-left-small { padding-left: 10px; }
.jp-p-left-medium { padding-left: 20px; }
.jp-p-left-large { padding-left: 30px; }
.jp-p-right-small { padding-right: 10px; }
.jp-p-right-medium { padding-right: 20px; }
.jp-p-right-large { padding-right: 30px; }

.jp-m-all-small { margin: 10px; }
.jp-m-all-medium { margin: 20px; }
.jp-m-all-large { margin: 30px; }
.jp-m-top-small { margin-top: 10px; }
.jp-m-top-medium { margin-top: 20px; }
.jp-m-top-large { margin-top: 30px; }
.jp-m-bottom-small { margin-bottom: 10px; }
.jp-m-bottom-medium { margin-bottom: 20px; }
.jp-m-bottom-large { margin-bottom: 30px; }
.jp-m-left-small { margin-left: 10px; }
.jp-m-left-medium { margin-left: 20px; }
.jp-m-left-large { margin-left: 30px; }
.jp-m-right-small { margin-right: 10px; }
.jp-m-right-medium { margin-right: 20px; }
.jp-m-right-large { margin-right: 30px; }

/* Vertical padding button: 30px top + bottom. */
.jp-vpad { padding-top: 30px; padding-bottom: 30px; }

/* No-padding toggle: overrides jp-vpad's top/bottom so rows can touch
   vertically. !important because it must beat jp-vpad above. */
.jp-nopad { padding-top: 0 !important; padding-bottom: 0 !important; }

/* Site logo: cap at 400px, pin left. Branding block img has no class,
   so scope to the branding block in the header region. */
/* Site logo: cap at 400px, pin left. Same rule whether branding sits in the
   header region or the primary-menu (nav) region. */
.jarvis-header [id*="branding"],
.jarvis-primary-menu [id*="branding"] { text-align: left; }
.jarvis-header [id*="branding"] img,
.jarvis-primary-menu [id*="branding"] img { width: 400px; max-width: 100%; height: auto; }

/* Canvas renders the primary-menu blocks with random UUID ids, so the Twig
   split by block id never matches; js/nav-branding.js moves the logo link out
   of the offcanvas drawer into .jarvis-branding-wrap so it stays visible on
   mobile (the drawer is hidden until the hamburger is tapped). */
/* Break the nav row out of the centered .container so it spans the viewport;
   100px left pad pins the logo near the browser's left edge — desktop only,
   on mobile it would eat a quarter of the screen from the logo/hamburger row. */
.jarvis-primary-menu { max-width: none; }
@media (min-width: 992px) {
  .jarvis-primary-menu { padding-left: 100px; }
}
/* Logo left (capped 400px, shrinks on narrow screens), menu 50px to its right. */
.jarvis-branding-wrap { min-width: 0; }
.jarvis-branding-wrap img { width: 400px; max-width: 100%; height: auto; }
.jarvis-primary-menu .offcanvas-body > div { display: flex; align-items: center; }
.jarvis-primary-menu .offcanvas-body nav[role="navigation"] { margin-left: 50px; }

/* Full-width columns: kill container-fluid gutter, row negative margins, AND
   the Bootstrap col padding so the section reaches the screen edge. Without the
   last rule the col's --bs-gutter-x padding leaves a white strip on each side
   (shows as left padding on the hero). Trade-off: full-width multi-column
   sections lose their inter-column gutter — use the gap/padding props for that.
   ponytail: single-column full-bleed is the common case; revisit if multi-col
   full-width needs a between-columns gap. */
.jarvis-columns .container-fluid { padding-left: 0; padding-right: 0; }
.jarvis-columns .container-fluid > .row { margin-left: 0; margin-right: 0; }
.jarvis-columns .container-fluid > .row > [class*="col"] { padding-left: 0; padding-right: 0; }

/* Bootstrap's vertical gutter puts margin-top:-var(--bs-gutter-y) on .row and a
   matching padding-top on the cols. That negative margin escapes .jarvis-columns'
   padding box — pulling the grid up so the wrapper's vertical padding AND bottom
   margin read as ignored (sections have no .row, so they were fine). Swap the
   margin/padding hack for row-gap: same between-row spacing when columns wrap on
   mobile, without the negative margin. */
.jarvis-columns .row { margin-top: 0; row-gap: var(--bs-gutter-y); }
.jarvis-columns .row > * { padding-top: 0; }

/* Primary menu: superfish-style dropdowns. Pure CSS hover + :focus-within
   multi-level fly-outs — no jQuery/superfish plugin (native covers it).
   Menu block renders a bare <nav><ul><li> (no .menu / menu-item classes), so
   selectors target that structure; :has(> ul) marks parents for the caret.
   ponytail: skips hover-intent delay + touch tap-handling (JS); a dedicated
   mobile menu is separate scope — add if touch UX needs it. */
.jarvis-primary-menu nav ul { list-style: none; margin: 0; padding: 0; }

/* Top level = horizontal bar. */
.jarvis-primary-menu nav > ul { display: flex; flex-wrap: wrap; }

.jarvis-primary-menu li { position: relative; }
/* <nolink> menu items render as <span>, not <a> (e.g. dropdown-parent titles
   with no URL) — style both identically so they sit on the bar, bold, like real
   links. Scoped to nav so the hamburger's <span> bars aren't caught. */
.jarvis-primary-menu nav a,
.jarvis-primary-menu nav span {
  display: block;
  padding: 0.75rem 1rem;
  color: var(--bs-body-color);
  text-decoration: none;
  white-space: nowrap;
  font-weight: 600;
}
.jarvis-primary-menu nav a:hover,
.jarvis-primary-menu nav a:focus { color: var(--bs-primary); }

/* Caret on parents (items that contain a submenu). */
.jarvis-primary-menu li:has(> ul) > a::after,
.jarvis-primary-menu li:has(> ul) > span::after { content: " \25be"; opacity: 0.6; }

/* Submenus (nested ul): hidden, revealed on hover/focus. */
.jarvis-primary-menu li > ul {
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 240px;
  padding: 0.5rem;
  background: #fff;
  border: 1px solid rgba(27, 42, 74, 0.08);
  border-radius: var(--bs-border-radius-lg);
  box-shadow: 0 14px 36px rgba(27, 42, 74, 0.18);
  opacity: 0;
  visibility: hidden;
  transform: translateY(4px);
  transition: opacity 0.15s ease, transform 0.15s ease;
  z-index: 1000;
}
.jarvis-primary-menu li:hover > ul,
.jarvis-primary-menu li:focus-within > ul,
.jarvis-primary-menu li.jarvis-open > ul {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

/* Second level and deeper fly to the right. */
.jarvis-primary-menu li li > ul { top: 0; left: 100%; transform: translateX(4px); }
.jarvis-primary-menu li li:hover > ul,
.jarvis-primary-menu li li:focus-within > ul { transform: translateX(0); }

/* Dropdown items: roomier padding + hover highlight so they stand out.
   Scoped to items inside a submenu (li ul) — top-bar items keep their padding. */
.jarvis-primary-menu li ul a,
.jarvis-primary-menu li ul span {
  padding: 0.7rem 1.1rem;
  border-radius: var(--bs-border-radius);
  font-weight: 500;
  transition: background 0.12s ease, color 0.12s ease;
}
.jarvis-primary-menu li ul a:hover,
.jarvis-primary-menu li ul a:focus {
  background: rgba(var(--bs-primary-rgb), 0.10);
  color: var(--bs-primary);
}

/* Hamburger: 44px touch target. Visibility handled by .d-lg-none in markup. */
.jarvis-menu-toggle {
  display: inline-flex;
  width: 44px;
  height: 44px;
  align-items: center;
  justify-content: center;
  padding: 0;
  border: 1px solid var(--bs-border-color, #ccc);
  border-radius: var(--bs-border-radius);
  background: transparent;
  cursor: pointer;
}
.jarvis-menu-toggle__bar,
.jarvis-menu-toggle__bar::before,
.jarvis-menu-toggle__bar::after {
  content: "";
  display: block;
  width: 22px;
  height: 2px;
  background: var(--bs-body-color);
}
.jarvis-menu-toggle__bar { position: relative; }
.jarvis-menu-toggle__bar::before { position: absolute; top: -7px; left: 0; }
.jarvis-menu-toggle__bar::after { position: absolute; top: 7px; left: 0; }

/* Desktop (>=992px): menu sits left, 100px after the logo; the responsive
   offcanvas renders inline (bootstrap resets its panel styles). */
@media (min-width: 992px) {
  /* Logo now lives inside .jarvis-primary-nav, so no extra left offset here —
     the region's 100px pad positions the logo; the 50px logo→menu gap is on nav. */
  .jarvis-primary-nav { margin-left: 0; }
  .jarvis-primary-menu .offcanvas-body { padding: 0; }
}

/* Mobile (<992px): menu lives in the slide-out offcanvas drawer; stack it and
   keep submenus static + always open so every item is tappable. */
@media (max-width: 991.98px) {
  .jarvis-primary-menu nav > ul { flex-direction: column; }
  .jarvis-primary-menu li > ul {
    position: static;
    min-width: 0;
    padding: 0 0 0 1rem;
    background: transparent;
    box-shadow: none;
    opacity: 1;
    visibility: visible;
    transform: none;
  }
  .jarvis-primary-menu li li > ul { left: auto; }
}

/* Theme-settings colors: regions consume the vars set by hook_preprocess_html.
   An unset var makes the property invalid -> ignored, so the default look holds.
   Text rules also cover headings inside the region (specificity 0,0,1,1) so a
   region's own text color wins over the global heading color. */
/* Title bg/text also target the page-title block by id, since the block can be
   placed in any region (here it lives in `highlighted`, not `page_title`).
   ponytail: id couples to the jarvis_page_title block machine name; rename the
   block -> update this selector. */
/* 100px left pad aligns the title with the logo — desktop only. */
.jarvis-page-title { padding: 20px; }
@media (min-width: 992px) {
  .jarvis-page-title { padding-left: 100px; }
}
.jarvis-page-title,
#block-jarvis-page-title { background: var(--jarvis-title-bg); }
.jarvis-page-title,
.jarvis-page-title :is(h1, h2, h3, h4, h5, h6),
#block-jarvis-page-title,
#block-jarvis-page-title :is(h1, h2, h3, h4, h5, h6) { color: var(--jarvis-title-color); }

.jarvis-footer { background: var(--jarvis-footer-bg); margin-top: 50px; }
.jarvis-footer,
.jarvis-footer :is(h1, h2, h3, h4, h5, h6) { color: var(--jarvis-footer-color); }
/* Links follow the footer text color (not Bootstrap's link blue) so they stay
   legible on a dark footer bg. Falls back to the inherited region color when the
   footer text color isn't set. ADA contrast still depends on picking a light
   text color for a dark background. */
.jarvis-footer a,
.jarvis-footer a:hover,
.jarvis-footer a:focus { color: var(--jarvis-footer-color, inherit); }

.jarvis-header { background: var(--jarvis-header-bg); }
.jarvis-header,
.jarvis-header :is(h1, h2, h3, h4, h5, h6) { color: var(--jarvis-header-color); }
.jarvis-header a { color: var(--jarvis-header-link-color); }

h1, h2, h3, h4, h5, h6 { color: var(--jarvis-heading-color); }

/* Font sizes from theme settings. The --jarvis-fs-* variables are emitted by
   jarvis_preprocess_html (desktop on :root, mobile overrides under 768px).
   Base is px on <html> so the rem-based headings scale with it. The .h*
   utility classes are included so Bootstrap's responsive calc() sizes don't
   reassert themselves. */
html { font-size: var(--jarvis-fs-base, 100%); }
h1, .h1 { font-size: var(--jarvis-fs-h1, 2.5rem); }
h2, .h2 { font-size: var(--jarvis-fs-h2, 2rem); }
h3, .h3 { font-size: var(--jarvis-fs-h3, 1.75rem); }
h4, .h4 { font-size: var(--jarvis-fs-h4, 1.5rem); }
h5, .h5 { font-size: var(--jarvis-fs-h5, 1.25rem); }
h6, .h6 { font-size: var(--jarvis-fs-h6, 1rem); }

/* Canvas/editor: h2-h4 bold (Bootstrap defaults them to 500). */
h2, .h2, h3, .h3, h4, .h4 { font-weight: 700; }

/* Media-manager document table (core file_table formatter).
   Icon per file type + 20px gap between file name and size cell. */
:root {
  --jarvis-file-generic: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M6%202h8l4%204v16H6z%27%20fill%3D%27%23fff%27%20stroke%3D%27%23757575%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Cpath%20d%3D%27M14%202v4h4%27%20fill%3D%27none%27%20stroke%3D%27%23757575%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3C%2Fsvg%3E");
  --jarvis-file-pdf: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M6%202h8l4%204v16H6z%27%20fill%3D%27%23fff%27%20stroke%3D%27%23E53935%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Cpath%20d%3D%27M14%202v4h4%27%20fill%3D%27none%27%20stroke%3D%27%23E53935%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Crect%20x%3D%275%27%20y%3D%2712.4%27%20width%3D%2714%27%20height%3D%277%27%20rx%3D%271.2%27%20fill%3D%27%23E53935%27%2F%3E%3Ctext%20x%3D%2712%27%20y%3D%2718.1%27%20font-family%3D%27Arial%2CHelvetica%2Csans-serif%27%20font-size%3D%275%27%20font-weight%3D%27700%27%20fill%3D%27%23fff%27%20text-anchor%3D%27middle%27%3EPDF%3C%2Ftext%3E%3C%2Fsvg%3E");
  --jarvis-file-doc: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M6%202h8l4%204v16H6z%27%20fill%3D%27%23fff%27%20stroke%3D%27%231E88E5%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Cpath%20d%3D%27M14%202v4h4%27%20fill%3D%27none%27%20stroke%3D%27%231E88E5%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Crect%20x%3D%275%27%20y%3D%2712.4%27%20width%3D%2714%27%20height%3D%277%27%20rx%3D%271.2%27%20fill%3D%27%231E88E5%27%2F%3E%3Ctext%20x%3D%2712%27%20y%3D%2718.1%27%20font-family%3D%27Arial%2CHelvetica%2Csans-serif%27%20font-size%3D%275%27%20font-weight%3D%27700%27%20fill%3D%27%23fff%27%20text-anchor%3D%27middle%27%3EDOC%3C%2Ftext%3E%3C%2Fsvg%3E");
  --jarvis-file-xls: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M6%202h8l4%204v16H6z%27%20fill%3D%27%23fff%27%20stroke%3D%27%2343A047%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Cpath%20d%3D%27M14%202v4h4%27%20fill%3D%27none%27%20stroke%3D%27%2343A047%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Crect%20x%3D%275%27%20y%3D%2712.4%27%20width%3D%2714%27%20height%3D%277%27%20rx%3D%271.2%27%20fill%3D%27%2343A047%27%2F%3E%3Ctext%20x%3D%2712%27%20y%3D%2718.1%27%20font-family%3D%27Arial%2CHelvetica%2Csans-serif%27%20font-size%3D%275%27%20font-weight%3D%27700%27%20fill%3D%27%23fff%27%20text-anchor%3D%27middle%27%3EXLS%3C%2Ftext%3E%3C%2Fsvg%3E");
  --jarvis-file-ppt: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%3E%3Cpath%20d%3D%27M6%202h8l4%204v16H6z%27%20fill%3D%27%23fff%27%20stroke%3D%27%23FB8C00%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Cpath%20d%3D%27M14%202v4h4%27%20fill%3D%27none%27%20stroke%3D%27%23FB8C00%27%20stroke-width%3D%271.6%27%20stroke-linejoin%3D%27round%27%2F%3E%3Crect%20x%3D%275%27%20y%3D%2712.4%27%20width%3D%2714%27%20height%3D%277%27%20rx%3D%271.2%27%20fill%3D%27%23FB8C00%27%2F%3E%3Ctext%20x%3D%2712%27%20y%3D%2718.1%27%20font-family%3D%27Arial%2CHelvetica%2Csans-serif%27%20font-size%3D%275%27%20font-weight%3D%27700%27%20fill%3D%27%23fff%27%20text-anchor%3D%27middle%27%3EPPT%3C%2Ftext%3E%3C%2Fsvg%3E");
}
span.file {
  display: inline-flex;
  align-items: center;
}
span.file::before {
  content: "";
  flex: 0 0 auto;
  width: 1.15em;
  height: 1.15em;
  margin-right: 0.4em;
  background: var(--jarvis-file-generic) center / contain no-repeat;
}
span.file.file--application-pdf::before { background-image: var(--jarvis-file-pdf); }
span.file.file--x-office-document::before { background-image: var(--jarvis-file-doc); }
span.file.file--x-office-spreadsheet::before { background-image: var(--jarvis-file-xls); }
span.file.file--x-office-presentation::before { background-image: var(--jarvis-file-ppt); }
/* 20px gap between the name column and the size column. */
td:has(> span.file) { padding-right: 20px; }

/* oEmbed video: fill container width, native aspect-ratio height.
   Target the iframe directly — CKEditor media embeds render it with no
   .field--name-field-media-oembed-video wrapper and fixed width/height attrs
   (e.g. width="200"). width:100% + aspect-ratio is self-contained. */
.media-oembed-content {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  display: block;
  border: 0;
}
.video-frame {
  padding: 10px;
  filter: drop-shadow(grey 0.5rem 0.5rem 5px);
}

/* Section background colours (1/2/3-column components).
   Text + Bootstrap colour vars are overridden so ANY child component inherits
   ADA-compliant text. Fixed brand backgrounds use hardcoded #000/#fff text;
   the arbitrary Background 1/2 colours use a text colour computed for WCAG AA in
   jarvis_preprocess_html(). */
.jarvis-bg {
  padding-block: 2rem; /* breathing room so text isn't flush to the colour band edge */
}
.jarvis-bg--primary {
  background: var(--bs-primary, #2d6cdf);
}
.jarvis-bg--secondary {
  background: var(--bs-secondary, #1b2a4a);
}
/* Background 1/2: arbitrary theme-setting colours. Text/heading/link colour come
   from the ADA-safe companion var computed in jarvis_preprocess_html(). */
.jarvis-bg--bg1 {
  background: var(--jarvis-bg-1);
  color: var(--jarvis-bg-1-text);
  --bs-body-color: var(--jarvis-bg-1-text);
  --bs-body-color-rgb: var(--jarvis-bg-1-text-rgb);
  --bs-heading-color: var(--jarvis-bg-1-text);
  --jarvis-heading-color: var(--jarvis-bg-1-text);
  --bs-emphasis-color: var(--jarvis-bg-1-text);
  --bs-link-color: var(--jarvis-bg-1-text);
  --bs-link-color-rgb: var(--jarvis-bg-1-text-rgb);
  --bs-link-hover-color: var(--jarvis-bg-1-text);
}
.jarvis-bg--bg2 {
  background: var(--jarvis-bg-2);
  color: var(--jarvis-bg-2-text);
  --bs-body-color: var(--jarvis-bg-2-text);
  --bs-body-color-rgb: var(--jarvis-bg-2-text-rgb);
  --bs-heading-color: var(--jarvis-bg-2-text);
  --jarvis-heading-color: var(--jarvis-bg-2-text);
  --bs-emphasis-color: var(--jarvis-bg-2-text);
  --bs-link-color: var(--jarvis-bg-2-text);
  --bs-link-color-rgb: var(--jarvis-bg-2-text-rgb);
  --bs-link-hover-color: var(--jarvis-bg-2-text);
}
.jarvis-bg--dark {
  background: #1a1a1a;
}
.jarvis-bg--light {
  background: #f5f5f5;
}
/* White text on the dark backgrounds. */
.jarvis-bg--primary,
.jarvis-bg--secondary,
.jarvis-bg--dark {
  color: #fff;
  --bs-body-color: #fff;
  --bs-body-color-rgb: 255, 255, 255;
  --bs-heading-color: #fff;
  --jarvis-heading-color: #fff; /* theme headings read this var, not --bs-heading-color */
  --bs-emphasis-color: #fff;
  --bs-link-color: #fff;
  --bs-link-color-rgb: 255, 255, 255;
  --bs-link-hover-color: #e6e6e6;
}
/* Black text on the light background. */
.jarvis-bg--light {
  color: #000;
  --bs-body-color: #000;
  --bs-body-color-rgb: 0, 0, 0;
  --bs-heading-color: #000;
  --jarvis-heading-color: #000; /* theme headings read this var, not --bs-heading-color */
  --bs-emphasis-color: #000;
  --bs-link-color: #000;
  --bs-link-color-rgb: 0, 0, 0;
  --bs-link-hover-color: #333333;
}
/* Media image background: cover the section, darken with an adjustable overlay
   so light text stays ADA-readable regardless of the photo. */
.jarvis-bg--image {
  position: relative;
  background-size: cover;
  background-position: center;
  color: #fff;
  --bs-body-color: #fff;
  --bs-body-color-rgb: 255, 255, 255;
  --bs-heading-color: #fff;
  --jarvis-heading-color: #fff;
  --bs-emphasis-color: #fff;
  --bs-link-color: #fff;
  --bs-link-color-rgb: 255, 255, 255;
  --bs-link-hover-color: #e6e6e6;
}
.jarvis-bg--image > .jarvis-bg__overlay {
  position: absolute;
  inset: 0;
  background: #000;
  pointer-events: none;
}
/* Light overlay: used when the section's text is dark, so dark text stays
   readable over a bright image (mirror of the default dark overlay). */
.jarvis-bg--image > .jarvis-bg__overlay--light {
  background: #fff;
}
/* Keep the content above the overlay. */
.jarvis-bg--image > .container,
.jarvis-bg--image > .container-fluid {
  position: relative;
  z-index: 1;
}

/* Components with their own (light) background must keep dark text even inside a
   coloured section — otherwise the inherited white text is invisible on them.
   Reset the colour vars back to the light-surface defaults. */
.jarvis-columns .jarvis-person--card,
.jarvis-columns .jarvis-card:not(.jarvis-card--background) {
  color: #1a1a1a;
  --bs-body-color: #1a1a1a;
  --bs-body-color-rgb: 26, 26, 26;
  --bs-heading-color: #1a1a1a;
  --jarvis-heading-color: #1a1a1a;
  --bs-emphasis-color: #1a1a1a;
  --bs-link-color: var(--bs-primary);
  --bs-link-color-rgb: var(--bs-primary-rgb);
  --bs-link-hover-color: var(--bs-primary);
}

/* Site-wide: links have no underline. */
a {
  text-decoration: none;
}

/* Section text-colour override: cascades to every child component (text, wysiwyg,
   etc.) via the colour vars. Components with their own background (person card,
   standard card) reset above under .jarvis-columns, so they are unaffected.
   Manual override — NOT auto-checked for ADA contrast against the section bg. */
.jarvis-text-color--primary {
  color: var(--bs-primary);
  --bs-body-color: var(--bs-primary);
  --bs-heading-color: var(--bs-primary);
  --jarvis-heading-color: var(--bs-primary);
  --bs-emphasis-color: var(--bs-primary);
  --bs-link-color: var(--bs-primary);
  --bs-link-color-rgb: var(--bs-primary-rgb);
  --bs-link-hover-color: var(--bs-primary);
}
.jarvis-text-color--secondary {
  color: var(--bs-secondary);
  --bs-body-color: var(--bs-secondary);
  --bs-heading-color: var(--bs-secondary);
  --jarvis-heading-color: var(--bs-secondary);
  --bs-emphasis-color: var(--bs-secondary);
  --bs-link-color: var(--bs-secondary);
  --bs-link-color-rgb: var(--bs-secondary-rgb);
  --bs-link-hover-color: var(--bs-secondary);
}
.jarvis-text-color--black {
  color: #000;
  --bs-body-color: #000;
  --bs-heading-color: #000;
  --jarvis-heading-color: #000;
  --bs-emphasis-color: #000;
  --bs-link-color: #000;
  --bs-link-color-rgb: 0, 0, 0;
  --bs-link-hover-color: #000;
}
.jarvis-text-color--white {
  color: #fff;
  --bs-body-color: #fff;
  --bs-heading-color: #fff;
  --jarvis-heading-color: #fff;
  --bs-emphasis-color: #fff;
  --bs-link-color: #fff;
  --bs-link-color-rgb: 255, 255, 255;
  --bs-link-hover-color: #fff;
}

/* ---------------------------------------------------------------------------
   Webform styling. Drupal's default form markup uses form-text/form-email/
   form-textarea classes (not Bootstrap .form-control), so it renders bare.
   Style it directly, scoped to .webform-submission-form so search/admin forms
   stay untouched. Tokens reused from :root above (--bs-primary, radius, etc.).
   --------------------------------------------------------------------------- */
.webform-submission-form {
  max-width: 640px;
  margin-inline: auto;
  padding: clamp(1.5rem, 4vw, 2.75rem);
  background: #fff;
  border: 1px solid var(--bs-border-color, #dde1e7);
  border-radius: var(--bs-border-radius-lg);
  box-shadow: 0 10px 30px rgba(27, 42, 74, 0.08);
}

.webform-submission-form .form-item,
.webform-submission-form .js-form-item {
  margin-bottom: 1.25rem;
}

.webform-submission-form label {
  display: block;
  margin-bottom: 0.4rem;
  font-weight: 600;
  color: var(--bs-secondary);
}

.webform-submission-form label.form-required::after {
  content: " *";
  color: #d6336c;
}

.webform-submission-form input[type="text"],
.webform-submission-form input[type="email"],
.webform-submission-form input[type="tel"],
.webform-submission-form input[type="url"],
.webform-submission-form input[type="number"],
.webform-submission-form input[type="date"],
.webform-submission-form input[type="password"],
.webform-submission-form select,
.webform-submission-form textarea {
  width: 100%;
  padding: 0.7rem 0.9rem;
  font-size: 1rem;
  line-height: 1.4;
  color: var(--bs-body-color);
  background: #fbfbfd;
  border: 1px solid #cbd2dc;
  border-radius: var(--bs-border-radius);
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.webform-submission-form textarea {
  min-height: 8rem;
  resize: vertical;
}

.webform-submission-form input:focus,
.webform-submission-form select:focus,
.webform-submission-form textarea:focus {
  outline: none;
  border-color: var(--bs-primary);
  box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.25);
  background: #fff;
}

.webform-submission-form input::placeholder,
.webform-submission-form textarea::placeholder {
  color: #97a1b0;
}

/* Field help/description text. */
.webform-submission-form .description {
  margin-top: 0.35rem;
  font-size: 0.85rem;
  color: #6b7280;
}

/* Validation errors. */
.webform-submission-form input.error,
.webform-submission-form select.error,
.webform-submission-form textarea.error {
  border-color: #d6336c;
  box-shadow: 0 0 0 0.2rem rgba(214, 51, 108, 0.2);
}

/* Submit / actions. */
.webform-submission-form .form-actions {
  margin-top: 1.75rem;
}

.webform-submission-form .webform-button--submit,
.webform-submission-form input[type="submit"],
.webform-submission-form button[type="submit"] {
  padding: 0.75rem 2rem;
  font-weight: 600;
  color: #fff;
  background: var(--bs-primary);
  border: 1px solid var(--bs-primary);
  border-radius: var(--bs-border-radius);
  cursor: pointer;
  transition: background 0.15s ease, transform 0.05s ease;
}

.webform-submission-form .webform-button--submit:hover,
.webform-submission-form input[type="submit"]:hover,
.webform-submission-form button[type="submit"]:hover {
  background: #245ac0;
}

.webform-submission-form .webform-button--submit:active,
.webform-submission-form input[type="submit"]:active {
  transform: translateY(1px);
}

/* Radios & checkboxes: tidy inline spacing. */
.webform-submission-form .form-type-radio,
.webform-submission-form .form-type-checkbox,
.webform-submission-form .js-form-type-radio,
.webform-submission-form .js-form-type-checkbox {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0.5rem;
}

.webform-submission-form .form-type-radio label,
.webform-submission-form .form-type-checkbox label,
.webform-submission-form .js-form-type-radio label,
.webform-submission-form .js-form-type-checkbox label {
  margin-bottom: 0;
  font-weight: 400;
}
