/* a11y.css — accessibility + standalone-rendering fixes layered on top of the
   captured Squarespace theme CSS. Loaded last so these rules win.
   Brought in-house from Squarespace; see README. */

/* Squarespace fades images in via JS by toggling a "loaded" class and animating
   opacity. With the runtime JS removed, force all images fully visible. */
img,
.sqs-image img,
[data-sqsp-image],
.summary-thumbnail img,
.sqs-block-image img {
  opacity: 1 !important;
  visibility: visible !important;
  filter: none !important;
}

/* Squarespace "fluid image" / content-fit containers normally get their
   dimensions from JS. With the runtime removed they collapse to 0 height, so
   restore a natural layout: let the image size itself within its column. */
.fluid-image-container,
.fluid-image-container .content-fit,
.js-content-mode-element,
.js-content-mode-element-wrapper,
.sqs-image-content {
  position: static !important;
  height: auto !important;
  min-height: 0 !important;
}
.fluid-image-container img,
.content-fit img,
.sqs-image-content img,
.sqs-block-image .image-block-wrapper img {
  position: static !important;
  width: 100% !important;
  height: auto !important;
  max-width: 100% !important;
  object-fit: contain !important;
  object-position: center !important;
  top: auto !important; left: auto !important;
  transform: none !important;
}

/* Some Squarespace lazy/parallax wrappers start at opacity:0 awaiting JS. */
.sqs-block,
.fluid-image-container,
[data-animation-role],
.sqs-animation-tour,
section[data-section-id] {
  opacity: 1 !important;
  transform: none !important;
}

/* Colour contrast (WCAG 1.4.3). The accent body-copy colour (#61616d) passes
   on white sections (5.9:1) but only reaches 2.77:1 on the homepage's navy
   mission section (data-section-id 68ecea7294c17d56b7df23fb), where the section
   background is #1e1249 despite the theme being authored as "light". Lighten
   the accent text ONLY inside that navy section so the white sections are
   untouched. */
[data-section-id="68ecea7294c17d56b7df23fb"] .sqsrte-text-color--accent,
[data-section-id="68ecea7294c17d56b7df23fb"] .sqsrte-text-color--accent strong,
[data-section-id="68ecea7294c17d56b7df23fb"] .sqsrte-text-color--accent em {
  color: #d2d2dc !important;   /* ~9:1 on #1e1249 */
}

/* The custom "Services" code block + the "Get In Touch" headings ship several
   teal/navy combinations that fall below AA on their backgrounds. Darken (or,
   on dark sections, lighten) them just enough to clear 4.5:1 / 3:1 while
   keeping the brand teal/navy feel. */
.service-title {                 /* was #568a9d on #fff = 3.8:1 */
  color: #3a6271 !important;     /* ~5.0:1 on white */
}
.detail-head {                   /* was #4ad9d9 on #fff = 1.71:1 */
  color: #0c7a7a !important;     /* ~4.6:1 on white */
}
.process-step.bg-teal .step-title,
.bg-teal .step-title {           /* was #fff on #4ad9d9 = 1.71:1 */
  color: #08383f !important;     /* dark text on bright teal, ~8:1 */
}
/* "Get In Touch" (.sqsrte-text-color--black) renders navy on a dark section
   heading whose sibling text is white -> make it white to match and pass. */
h2 .sqsrte-text-color--black,
h2 .sqsrte-text-color--black strong {
  color: #ffffff !important;
}

/* Skip link for keyboard users (WCAG 2.4.1 Bypass Blocks). */
.skip-to-content-link {
  position: absolute;
  left: -9999px;
  top: 0;
  z-index: 10000;
  padding: 12px 20px;
  background: #04146d;
  color: #ffffff;
  font-weight: 700;
  border-radius: 0 0 6px 0;
  text-decoration: none;
}
.skip-to-content-link:focus {
  left: 0;
}

/* Visible focus indicator on all interactive elements (WCAG 2.4.7). */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible {
  outline: 3px solid #1763ff !important;
  outline-offset: 2px !important;
}

/* Visually-hidden utility for screen-reader-only text. */
.visually-hidden {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* Honour reduced-motion preference. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
}
