/* ============================================================
   Settles Finance: Complete Design System
   www.settles.com.au
   ─────────────────────────────────────────────────────────────
   Table of contents
     1.  Google Fonts import
     2.  Design tokens (CSS custom properties)
     3.  Reset & base
     4.  Typography scale
     5.  Layout utilities
     6.  Components
         6a. Buttons
         6b. Divider
     7.  Navigation
     8.  Hero section
     9.  Scroll-entry animations
    10.  Footer
    11.  Responsive (768px / 480px breakpoints)
   ============================================================ */


/* ============================================================
   1. Google Fonts import
      Metamorphous: display / brand name only (weight 400)
      DM Sans     : all body copy, nav, UI (weights 300 400 500)
   ============================================================ */

/* Fonts loaded via <link> tags in <head> for faster parallel fetch.
   @import removed to avoid duplicate request. */


/* ============================================================
   2. Design tokens
      All colour, type, space and motion values live here so
      they can be overridden per-section without touching
      component rules.
   ============================================================ */

:root {
  /* ── Brand colours ── */
  --color-moss:        #1f4d3a;
  --color-moss-light:  #285945;
  --color-beige:       #f9f6ed;
  --color-white:       #ffffff;
  --color-text-dark:   #1a1a1a;
  --color-text-mid:    #4a4a4a;
  --color-text-light:  #8a8a8a;

  /* ── Type families ── */
  --font-brand: 'Metamorphous', 'Cormorant Garamond', serif;
  --font-body:  'DM Sans', system-ui, sans-serif;

  /* ── Type scale ── */
  --text-xs:  0.7rem;    /*  11.2px */
  --text-sm:  0.8rem;    /*  12.8px */
  --text-base: 1rem;     /*  16px   */
  --text-lead: 1.2rem;   /*  19.2px */
  --text-h3:   1.3rem;   /*  20.8px */
  --text-h2:   2.2rem;   /*  35.2px */
  --text-h1:   3.5rem;   /*  56px   */

  /* ── Spacing scale ── */
  --space-xs:  0.5rem;
  --space-sm:  1rem;
  --space-md:  2rem;
  --space-lg:  4rem;
  --space-xl:  7rem;

  /* ── Layout ── */
  --container-max: 1100px;
  --nav-height:    72px;

  /* ── Motion ── */
  --ease-base:  0.3s ease;
  --ease-entry: 0.7s ease;

  /* ── Shadows ── */
  --shadow-sm:  0 2px 12px rgba(0, 0, 0, 0.08);
  --shadow-md:  0 8px 32px rgba(0, 0, 0, 0.12);
  --shadow-nav: 0 2px 20px rgba(0, 0, 0, 0.15);
}


/* ============================================================
   3. Reset & base
   ============================================================ */

*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  scroll-behavior: smooth;
  font-size: 16px;
  /* Prevent iOS auto-zoom on orientation change */
  -webkit-text-size-adjust: 100%;
}

body {
  background-color: var(--color-beige);
  font-family: var(--font-body);
  font-weight: 300;
  color: var(--color-text-dark);
  line-height: 1.7;
  /* Crisp subpixel rendering on macOS/iOS */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Sensible media defaults */
img,
video,
iframe,
svg {
  display: block;
  max-width: 100%;
}

/* Remove default list chrome */
ul,
ol {
  list-style: none;
}

/* Anchors inherit colour by default: individual components add colour */
a {
  color: inherit;
  text-decoration: none;
}

/* Buttons inherit the body font so they don't fall back to system-ui */
button,
input,
select,
textarea {
  font-family: inherit;
}


/* ============================================================
   4. Typography scale
   ============================================================ */

/* Utility class: apply Metamorphous to any element
   (normally only the logo wordmark and hero h1 use this). */
.font-brand {
  font-family: var(--font-brand);
}

/* ── Headings ── */

h1 {
  font-family: var(--font-brand);
  font-size: var(--text-h1);
  font-weight: 400;          /* Metamorphous has no bold: keep 400 */
  color: var(--color-moss);
  line-height: 1.12;
  letter-spacing: 0.02em;
}

h2 {
  font-family: var(--font-brand);
  font-size: var(--text-h2);
  font-weight: 400;
  color: var(--color-moss);
  line-height: 1.2;
  letter-spacing: 0.02em;
}

h3 {
  font-family: var(--font-body);
  font-size: var(--text-h3);
  font-weight: 500;
  color: var(--color-text-dark);
  line-height: 1.4;
}

/* ── Body copy ── */

p {
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.8;
}

/* Larger intro paragraph: e.g. section openers */
.lead {
  font-size: var(--text-lead);
  font-weight: 300;
  color: var(--color-text-mid);
  line-height: 1.75;
}

/* Caps label: small uppercase tag above a heading */
.eyebrow {
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-moss);
}

/* Overline rule used inside moss sections */
.section--moss .eyebrow {
  color: rgba(249, 246, 237, 0.6);
}

/* Heading colour overrides inside moss sections */
.section--moss h1,
.section--moss h2,
.section--moss h3 {
  color: var(--color-beige);
}

.section--moss p,
.section--moss .lead {
  color: rgba(249, 246, 237, 0.8);
}


/* ============================================================
   5. Layout utilities
   ============================================================ */

/* Centred content column */
.container {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 2rem;
}

/* Standard section vertical rhythm */
.section {
  padding: var(--space-xl) 0;
}

/* Background variants */
.section--moss {
  background-color: var(--color-moss);
  color: var(--color-beige);
}

.section--beige {
  background-color: var(--color-beige);
}

.section--white {
  background-color: var(--color-white);
}

/* Two-column grid: left text, right visual */
.grid-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5rem;
  align-items: center;
}

/* Three-column card row */
.grid-3 {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2.5rem;
}

/* Vertical stack with consistent gap */
.stack {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

/* Horizontal cluster */
.cluster {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1rem;
}


/* ============================================================
   6a. Buttons
       All share .btn base + a modifier class.
   ============================================================ */

.btn {
  display: inline-block;
  padding: 0.9rem 2.2rem;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 400;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  line-height: 1;
  border: none;
  border-radius: 0;       /* sharp corners are on-brand */
  cursor: pointer;
  text-decoration: none;
  transition:
    background-color var(--ease-base),
    color            var(--ease-base),
    border-color     var(--ease-base);
  /* Prevent text wrapping on small buttons */
  white-space: nowrap;
}

/* Primary: solid moss fill */
.btn--primary {
  background-color: var(--color-moss);
  color: var(--color-white);
}

.btn--primary:hover,
.btn--primary:focus-visible {
  background-color: var(--color-moss-light);
}

/* Outline: transparent with moss border */
.btn--outline {
  background-color: transparent;
  border: 1.5px solid var(--color-moss);
  color: var(--color-moss);
}

.btn--outline:hover,
.btn--outline:focus-visible {
  background-color: var(--color-moss);
  color: var(--color-white);
}

/* Outline-light: for use on dark (moss) backgrounds */
.btn--outline-light {
  background-color: transparent;
  border: 1.5px solid var(--color-beige);
  color: var(--color-beige);
}

.btn--outline-light:hover,
.btn--outline-light:focus-visible {
  background-color: var(--color-beige);
  color: var(--color-moss);
}

/* Focus ring: accessible keyboard indicator */
.btn:focus-visible {
  outline: 2px solid var(--color-beige);
  outline-offset: 3px;
}


/* ============================================================
   6b. Divider
       Short decorative rule below an eyebrow or above a CTA.
   ============================================================ */

.divider {
  width: 48px;
  height: 2px;
  background-color: var(--color-moss);
  border: none;
  margin: 1.5rem 0;
}

/* Beige variant for use inside moss sections */
.divider--light {
  background-color: var(--color-beige);
}


/* ============================================================
   7. Navigation
      Fixed top bar: transparent over the hero, transitions to
      solid moss once the page scrolls. JS adds .scrolled when
      window.scrollY > 10.
   ============================================================ */

.nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  height: var(--nav-height);
  display: flex;
  align-items: center;
  /* Both colour and shadow animate on scroll */
  transition:
    background-color 0.4s ease,
    box-shadow       0.4s ease;
}

/* Transparent default: the hero animation shows through */
.nav:not(.scrolled) {
  background-color: transparent;
}

/* Solid nav once user leaves the hero zone */
.nav.scrolled {
  background-color: var(--color-moss);
  box-shadow: var(--shadow-nav);
}

/* Inner flexbox */
.nav__inner {
  width: 100%;
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 2rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* ── Logo ── */

.nav__logo {
  display: flex;
  align-items: center;
  text-decoration: none;
  /* Prevent logo from shrinking on narrow viewports */
  flex-shrink: 0;
}

/* Full wordmark PNG: cream on transparent; always shows on dark nav bg */
.nav__logo-img {
  display: block;
  height: 34px;
  width: auto;
}

/* ── Desktop nav links ── */

.nav__links {
  display: flex;
  align-items: center;
  gap: 2.5rem;
  list-style: none;
}

.nav__link {
  font-size: var(--text-sm);
  font-weight: 400;
  color: var(--color-white);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  text-decoration: none;
  transition: opacity var(--ease-base);
  position: relative;
}

/* Underline reveal on hover */
.nav__link::after {
  content: '';
  position: absolute;
  bottom: -3px;
  left: 0;
  right: 0;
  height: 1px;
  background-color: var(--color-beige);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--ease-base);
}

.nav__link:hover::after,
.nav__link[aria-current="page"]::after {
  transform: scaleX(1);
}

/* ── Hamburger toggle (mobile) ── */

.nav__hamburger {
  display: none;  /* hidden on desktop */
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 4px;
  /* Sits above the mobile menu overlay during open/close */
  z-index: 200;
}

.nav__hamburger span {
  display: block;
  width: 24px;
  height: 1.5px;
  background-color: var(--color-white);
  transform-origin: center;
  transition:
    transform 0.35s ease,
    opacity   0.35s ease;
}

/* Three bars collapse into an × when menu is open */
.nav__hamburger.is-open span:nth-child(1) {
  transform: translateY(6.5px) rotate(45deg);
}

.nav__hamburger.is-open span:nth-child(2) {
  opacity: 0;
  transform: scaleX(0);
}

.nav__hamburger.is-open span:nth-child(3) {
  transform: translateY(-6.5px) rotate(-45deg);
}

/* ── Full-screen mobile menu overlay ── */

.nav__mobile-menu {
  /* Hidden by default; JS toggles .is-open */
  display: none;
  position: fixed;
  inset: 0;
  z-index: 150;
  background-color: var(--color-moss);
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 2.5rem;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.4s ease;
}

.nav__mobile-menu.is-open {
  display: flex;
  opacity: 1;
  pointer-events: auto;
}

/* Large display links inside the mobile menu */
.nav__mobile-link {
  font-family: var(--font-brand);
  font-size: 2.4rem;
  font-weight: 400;
  color: var(--color-beige);
  text-decoration: none;
  letter-spacing: 0.06em;
  transition: opacity var(--ease-base);
}

.nav__mobile-link:hover {
  opacity: 0.65;
}


/* ============================================================
   8. Hero section
      Full-viewport canvas. The hero animation iframe sits
      behind all content at position absolute; a gradient
      overlay bleeds the green down toward the next section.
   ============================================================ */

.hero {
  position: relative;
  width: 100%;
  height: 100vh;
  /* Minimum sensible height for very short viewports */
  min-height: 560px;
  overflow: hidden;
  /* Solid fallback (also shows through the photo's green scrim) */
  background-color: var(--color-moss);
  /* Canberra skyline underlay: Kingston Foreshore at dawn.
     The green scrim that keeps it on-brand and the text legible
     lives on .hero__gradient, which paints above this layer. */
  background-image: url('../assets/images/cbr-buildings-hero.jpg');
  background-size: cover;
  background-position: center 40%;
  background-repeat: no-repeat;
}

/* ── Animation iframe (or <video>) ── */

/* Shared positioning for both the iframe and video approaches */
.hero__animation,
.hero__video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: none;
  /* Iframe/video never captures mouse events:
     that keeps scroll and clicks on the page layer */
  pointer-events: none;
}

.hero__video {
  object-fit: cover;
  object-position: center;
}

/* ── Gradient overlay ── */

/* Full green scrim over the skyline photo. Three jobs: tint the warm
   photo back to the brand moss, protect the cream nav at the top, and
   darken the lower third so the headline + CTA stay legible. The 24-46%
   band is kept lightest so the buildings read through clearly. */
.hero__gradient {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to bottom,
    rgba(31, 77, 58, 0.90)  0%,
    rgba(31, 77, 58, 0.68) 22%,
    rgba(31, 77, 58, 0.68) 46%,
    rgba(31, 77, 58, 0.90) 72%,
    rgba(31, 77, 58, 0.98) 100%
  );
  pointer-events: none;
}

/* ── Static fallback overlay ── */

/* Revealed (via JS adding .is-visible) if the animation/video
   fails to load or the video element fires its 'ended' event. */
.hero__fallback {
  position: absolute;
  inset: 0;
  z-index: 5;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background-color: var(--color-moss);
  opacity: 0;
  pointer-events: none;
  transition: opacity 1.2s ease;
}

.hero__fallback.is-visible {
  opacity: 1;
  pointer-events: auto;
}

.hero__fallback-heading {
  font-family: var(--font-brand);
  /* Fluid type: scales with viewport, capped at 9rem */
  font-size: clamp(3rem, 10vw, 9rem);
  font-weight: 400;
  color: var(--color-beige);
  letter-spacing: 0.08em;
}

/* ── Content layer ── */

/* Any text/CTA placed inside the hero above the animation */
.hero__content {
  position: relative;
  z-index: 10;
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding-bottom: 5rem;
}

/* ── Scroll cue ── */

/* Animated chevron-down hint at the foot of the hero */
.hero__scroll-cue {
  position: absolute;
  bottom: 2rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.4rem;
  opacity: 0.65;
  animation: scrollCueBounce 2.2s ease-in-out infinite;
}

.hero__scroll-cue span {
  font-size: var(--text-xs);
  font-weight: 400;
  color: var(--color-beige);
  text-transform: uppercase;
  letter-spacing: 0.22em;
}

.hero__scroll-cue svg {
  width: 14px;
  height: 14px;
  stroke: var(--color-beige);
  fill: none;
  stroke-width: 1.5;
}

@keyframes scrollCueBounce {
  0%,  100% { transform: translateX(-50%) translateY(0);   }
  50%        { transform: translateX(-50%) translateY(7px); }
}


/* ============================================================
   9. Scroll-entry animations
      Elements start invisible and offset; the IntersectionObserver
      in main.js adds .animate-in when they enter the viewport.

      Usage in HTML:
        <div class="animate-on-scroll">...</div>

      To stagger siblings, pass a custom property:
        <div class="animate-on-scroll" style="--delay: 0.15s">

      Or rely on the nth-child defaults below for up to 6 items.
   ============================================================ */

.animate-on-scroll {
  opacity: 0;
  transform: translateY(30px);
  transition:
    opacity   var(--ease-entry),
    transform var(--ease-entry);
  /* Honour per-element delay set via inline style or nth-child rules */
  transition-delay: var(--delay, 0s);
}

.animate-on-scroll.animate-in {
  opacity: 1;
  transform: translateY(0);
}

/* Automatic stagger for up to 6 consecutive siblings.
   These override the --delay variable default of 0s. */
.animate-on-scroll:nth-child(1) { --delay: 0s;    }
.animate-on-scroll:nth-child(2) { --delay: 0.10s; }
.animate-on-scroll:nth-child(3) { --delay: 0.20s; }
.animate-on-scroll:nth-child(4) { --delay: 0.30s; }
.animate-on-scroll:nth-child(5) { --delay: 0.40s; }
.animate-on-scroll:nth-child(6) { --delay: 0.50s; }

/* Respect user motion preferences */
@media (prefers-reduced-motion: reduce) {
  .animate-on-scroll {
    opacity: 1;
    transform: none;
    transition: none;
  }
}


/* ============================================================
   10. Footer
       Dark moss background, light beige text.
       Layout: brand + tagline on the left, link columns on
       the right; copyright bar across the bottom.
   ============================================================ */

.footer {
  background-color: var(--color-moss);
  color: var(--color-beige);
  padding: 4.5rem 0 2.5rem;
}

.footer__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 2rem;
}

/* ── Top row: brand block + link columns ── */

.footer__top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 3rem;
  padding-bottom: 3rem;
  border-bottom: 1px solid rgba(249, 246, 237, 0.15);
  flex-wrap: wrap;
}

/* Brand block: full wordmark + tagline in the footer */
.footer__brand .nav__logo-img {
  height: 56px;
}

.footer__tagline {
  margin-top: 0.9rem;
  font-size: 0.875rem;
  font-weight: 300;
  color: rgba(249, 246, 237, 0.55);
  letter-spacing: 0.04em;
  max-width: 220px;
  line-height: 1.6;
}

/* Link columns container */
.footer__links {
  display: flex;
  gap: 4rem;
  flex-wrap: wrap;
}

/* Individual column */
.footer__col-heading {
  font-size: var(--text-xs);
  font-weight: 500;
  color: rgba(249, 246, 237, 0.4);
  text-transform: uppercase;
  letter-spacing: 0.2em;
  margin-bottom: 1.25rem;
}

.footer__col ul {
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  list-style: none;
}

.footer__col a {
  font-size: 0.9rem;
  font-weight: 300;
  color: rgba(249, 246, 237, 0.7);
  text-decoration: none;
  transition: color var(--ease-base);
}

.footer__col a:hover {
  color: var(--color-beige);
}

/* ── Bottom row: copyright + legal links ── */

.footer__bottom {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 2rem;
  flex-wrap: wrap;
  gap: 1rem;
}

.footer__copy {
  font-size: var(--text-xs);
  font-weight: 300;
  color: rgba(249, 246, 237, 0.35);
  letter-spacing: 0.04em;
}

.footer__legal {
  display: flex;
  gap: 1.75rem;
}

.footer__legal a {
  font-size: var(--text-xs);
  font-weight: 300;
  color: rgba(249, 246, 237, 0.35);
  text-decoration: none;
  letter-spacing: 0.04em;
  transition: color var(--ease-base);
}

.footer__legal a:hover {
  color: var(--color-beige);
}

/* Regulatory disclosure: full-width fine print beneath the bottom bar */
.footer__compliance {
  margin-top: 2rem;
  padding-top: 1.75rem;
  border-top: 1px solid rgba(249, 246, 237, 0.08);
  /* Span the full footer width (the .footer__inner container already
     supplies the side padding) so the disclosure reads as a few wide
     lines rather than a tall narrow column. */
  font-size: 0.5rem;
  font-weight: 300;
  line-height: 1.7;
  color: rgba(249, 246, 237, 0.30);
  text-align: center;
}

.footer__compliance p {
  margin: 0 0 0.6rem;
}

.footer__compliance p:last-child {
  margin-bottom: 0;
}

.footer__compliance a {
  color: rgba(249, 246, 237, 0.5);
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color var(--ease-base);
}

.footer__compliance a:hover {
  color: var(--color-beige);
}

/* Site credit: subtle 'Built by Pixel 95' line at the very foot */
.footer__credit {
  margin-top: 1.5rem;
  text-align: center;
  font-size: 0.6rem;
  font-weight: 300;
  letter-spacing: 0.06em;
  color: rgba(249, 246, 237, 0.28);
}

.footer__credit a {
  color: rgba(249, 246, 237, 0.5);
  text-decoration: none;
  border-bottom: 1px solid rgba(249, 246, 237, 0.22);
  padding-bottom: 1px;
  transition: color var(--ease-base);
}

.footer__credit a:hover {
  color: var(--color-beige);
}


/* ============================================================
   11. Responsive
       768px: tablet breakpoint (collapse nav, reflow grids)
       480px: mobile breakpoint (tighten spacing and type)
   ============================================================ */

@media (max-width: 768px) {

  /* Type scale down */
  h1 { font-size: 2.4rem; }
  h2 { font-size: 1.75rem; }

  /* Tighter section padding */
  .section { padding: 5rem 0; }

  /* Hide desktop links, show hamburger */
  .nav__links    { display: none; }
  .nav__hamburger { display: flex; }

  /* Grids collapse to a single column */
  .grid-2,
  .grid-3 {
    grid-template-columns: 1fr;
    gap: 3rem;
  }

  /* Footer reflows into a column */
  .footer__top {
    flex-direction: column;
    gap: 2.5rem;
  }

  .footer__links {
    gap: 2.5rem;
  }

  .footer__bottom {
    flex-direction: column;
    align-items: flex-start;
  }
}

@media (max-width: 480px) {

  h1 { font-size: 2rem; }
  h2 { font-size: 1.5rem; }

  /* Narrower side gutters on small phones */
  .container { padding: 0 1.25rem; }

  .section { padding: 3.5rem 0; }

  /* Slightly smaller button padding keeps them tappable */
  .btn { padding: 0.8rem 1.75rem; }

  .footer { padding: 3.5rem 0 2rem; }

  .footer__inner { padding: 0 1.25rem; }
}


/* ============================================================
   12. Video intro overlay
       Fixed full-screen splash. JS adds .is-done (fade out)
       then .is-hidden (removes from stacking context entirely).
   ============================================================ */

.video-intro {
  position: fixed;
  inset: 0;
  z-index: 9999;
  background-color: var(--color-moss);
  transition: opacity 0.9s ease;
}

/* JS adds this to trigger the CSS fade */
.video-intro.is-done {
  opacity: 0;
  pointer-events: none;
}

/* JS adds this after the transition ends */
.video-intro.is-hidden {
  display: none;
}

.video-intro__player {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

.video-intro__gradient {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to bottom,
    transparent 55%,
    rgba(31, 77, 58, 0.75) 100%
  );
  pointer-events: none;
}


/* ============================================================
   13. Hero section (post-video, full-viewport moss panel)
       Reuses .hero base from §8 but adds texture, headline
       scale and the white text-link variant.
   ============================================================ */

/* Override section padding: height is managed by 100vh */
.hero {
  padding: 0;
}

/* Dot-grid texture: subtle radial dots on the moss background */
.hero__texture {
  position: absolute;
  inset: 0;
  background-image: radial-gradient(
    rgba(249, 246, 237, 0.07) 1px,
    transparent 1px
  );
  background-size: 28px 28px;
  pointer-events: none;
}

/* Eyebrow inside hero: lighter tint than the standard colour */
.hero__eyebrow {
  font-size: var(--text-xs);
  font-weight: 400;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(249, 246, 237, 0.5);
  margin-bottom: 1.25rem;
  display: block;
}

/* Hero headline: fluid scale between 2.8rem and 5.5rem */
.hero__headline {
  font-size: clamp(2.8rem, 6.5vw, 5.5rem);
  color: var(--color-beige);
  line-height: 1.08;
  letter-spacing: 0.02em;
  margin-bottom: 1.5rem;
  max-width: 14ch;
}

/* Tagline paragraph */
.hero__tagline {
  font-size: var(--text-lead);
  font-weight: 300;
  color: rgba(249, 246, 237, 0.8);
  line-height: 1.65;
  max-width: 52ch;
  margin-bottom: 2.5rem;
}

/* Ghost text-link: white underline style */
.hero__text-link {
  color: var(--color-beige);
  font-size: var(--text-sm);
  font-weight: 400;
  letter-spacing: 0.06em;
  text-decoration: none;
  border-bottom: 1px solid rgba(249, 246, 237, 0.4);
  padding-bottom: 2px;
  transition: border-color var(--ease-base);
  white-space: nowrap;
}

.hero__text-link:hover {
  border-color: var(--color-beige);
}

/* Nav CTA: slight left margin on desktop to separate from links */
.nav__cta {
  margin-left: 1.5rem;
  flex-shrink: 0;
}

@media (max-width: 768px) {
  .hero__headline { font-size: clamp(2.2rem, 8vw, 3rem); }
  .nav__cta       { display: none; } /* CTA lives inside mobile menu */
}


/* ============================================================
   14. Brand statement section
       Centred editorial panel, max-width 700px.
   ============================================================ */

.brand-statement__inner {
  max-width: 700px;
  margin: 0 auto;
  text-align: center;
}

/* Remove default blockquote chrome */
.brand-statement__quote {
  margin: 0;
  padding: 0;
  border: none;
}

/* Pull-quote headline: fluid between 1.7rem and 2.5rem */
.brand-statement__quote-text {
  font-size: clamp(1.7rem, 3.2vw, 2.5rem);
  font-weight: 400;
  color: var(--color-moss);
  line-height: 1.3;
  letter-spacing: 0.02em;
}

/* Centre-align the divider inside the statement */
.brand-statement__divider {
  margin-left: auto;
  margin-right: auto;
}

.brand-statement__body {
  display: flex;
  flex-direction: column;
  gap: 1.2rem;
}

.brand-statement__body p {
  color: var(--color-text-mid);
}


/* ============================================================
   15. Services section
   ============================================================ */

.services__header {
  margin-bottom: 4rem;
}

.services__header h2 {
  margin-top: 0.5rem;
}

/* Card: left border accent, no box shadow */
.service-card {
  padding: 2.5rem 2rem 2rem 2rem;
  border-left: 3px solid var(--color-moss);
  display: flex;
  flex-direction: column;
  gap: 0;
  background: transparent;
}

/* Large faded ordinal above the card title */
.service-card__number {
  font-size: 3.2rem;
  line-height: 1;
  color: rgba(31, 77, 58, 0.12);
  margin-bottom: 1rem;
  display: block;
}

/* Short rule between number/title and body */
.service-card__rule {
  width: 32px;
  height: 1px;
  background-color: var(--color-moss);
  border: none;
  margin: 1rem 0;
}

.service-card__title {
  font-size: var(--text-h3);
  color: var(--color-text-dark);
}

.service-card__body {
  margin-top: 0.75rem;
  margin-bottom: 1.75rem;
  color: var(--color-text-mid);
  flex: 1;
}

.service-card__link {
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-moss);
  text-decoration: none;
  transition: opacity var(--ease-base);
  margin-top: auto;
}

.service-card__link:hover {
  opacity: 0.6;
}


/* ============================================================
   16. Journey / philosophy section
   ============================================================ */

.journey__steps {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
}

.journey__step {
  display: flex;
  align-items: flex-start;
  gap: 2rem;
  padding: 2.75rem 0;
  border-bottom: 1px solid rgba(249, 246, 237, 0.1);
}

.journey__step:last-child {
  border-bottom: none;
  padding-bottom: 0;
}

/* Large display ordinal: decorative, very low opacity */
.journey__step-number {
  font-size: 5rem;
  line-height: 1;
  color: rgba(249, 246, 237, 0.12);
  flex-shrink: 0;
  /* Fixed width so all content columns align */
  width: 4.5rem;
  text-align: right;
  /* Shift up slightly to optically align with title baseline */
  margin-top: -0.2rem;
}

.journey__step-content {
  flex: 1;
  padding-top: 0.5rem;
}

.journey__step-title {
  color: var(--color-beige);
  font-size: 1.15rem;
  margin-bottom: 0.6rem;
}

.journey__step-body {
  color: rgba(249, 246, 237, 0.7);
  font-size: 0.95rem;
  line-height: 1.75;
}

@media (max-width: 768px) {
  .journey__step-number { font-size: 3.5rem; width: 3rem; }
}


/* ============================================================
   17. Meet Van section
   ============================================================ */

.meet-van__figure {
  margin: 0;
  margin-top: 0.5rem;
  position: relative;
  overflow: hidden;
  border-radius: 0.75rem;
}

.meet-van__photo {
  width: 100%;
  display: block;
}

/* Default image: in-flow, sets the figure height */
.meet-van__photo--default {
  position: relative;
  height: auto;
  filter: grayscale(15%);
}

/* Hover image: absolute overlay, invisible by default, fades in on hover */
.meet-van__photo--hover {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 0.55s ease;
}

.meet-van__figure:hover .meet-van__photo--hover {
  opacity: 1;
}

/* Name headline: slightly smaller than h2 default */
.meet-van__name {
  font-size: clamp(2rem, 4vw, 2.8rem);
  color: var(--color-moss);
  margin-top: 0.4rem;
  line-height: 1.1;
}

/* Role / location label */
.meet-van__title {
  font-size: var(--text-xs);
  font-weight: 400;
  letter-spacing: 0.1em;
  color: var(--color-text-light);
  text-transform: uppercase;
  margin-top: 0.35rem;
  margin-bottom: 0;
  display: block;
}

.meet-van__body {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  margin-bottom: 2rem;
}

.meet-van__body p {
  color: var(--color-text-mid);
}

/* Contact address block */
.meet-van__contact {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  margin-bottom: 2.25rem;
  font-style: normal;
}

.meet-van__contact-link {
  display: flex;
  align-items: baseline;
  gap: 1rem;
  text-decoration: none;
  color: var(--color-text-dark);
  transition: color var(--ease-base);
}

.meet-van__contact-link:hover {
  color: var(--color-moss);
}

.meet-van__contact-label {
  font-size: var(--text-xs);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--color-text-light);
  flex-shrink: 0;
  /* Fixed width keeps values aligned */
  width: 3.5rem;
}

.meet-van__contact-value {
  font-size: 1rem;
  font-weight: 300;
  color: var(--color-text-dark);
}

@media (max-width: 768px) {
  .meet-van__figure { padding-top: 0; }
}


/* ============================================================
   18. Testimonials section
   ============================================================ */

.testimonials__header {
  margin-bottom: 4rem;
}

.testimonials__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 3rem;
}

/* Card: top border accent, no box shadow */
.testimonial {
  margin: 0;
  padding: 2.5rem 0 0;
  border-top: 2px solid var(--color-moss);
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

.testimonial__quote {
  font-size: 1.05rem;
  font-weight: 300;
  line-height: 1.85;
  color: var(--color-text-dark);
}

/* Large decorative opening quote mark */
.testimonial__quote p::before {
  content: '\201C';
  font-family: var(--font-brand);
  font-size: 3.5rem;
  line-height: 0;
  vertical-align: -0.55em;
  color: rgba(31, 77, 58, 0.18);
  margin-right: 0.08em;
}

.testimonial__attribution {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.testimonial__attribution strong {
  font-size: 0.9rem;
  font-weight: 500;
  color: var(--color-moss);
}

.testimonial__context {
  font-size: 0.8rem;
  font-weight: 300;
  color: var(--color-text-light);
  letter-spacing: 0.03em;
}

@media (max-width: 768px) {
  .testimonials__grid { grid-template-columns: 1fr; }
}


/* ============================================================
   19. Contact / CTA section
   ============================================================ */

/* Narrow inner column, centred */
.contact__inner {
  max-width: 680px;
  margin: 0 auto;
}

.contact__header {
  text-align: center;
  margin-bottom: 3.5rem;
}

.contact__header h2 {
  color: var(--color-beige);
  font-size: clamp(2rem, 4.5vw, 3rem);
  margin-bottom: 1rem;
}

.contact__subtext {
  font-size: var(--text-lead);
  font-weight: 300;
  color: rgba(249, 246, 237, 0.7);
  line-height: 1.65;
}

/* ── Form ── */

.contact-form {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  margin-bottom: 3.5rem;
}

/* Two-column row for name + email */
.contact-form__row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.5rem;
}

.contact-form__field {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.contact-form__label {
  font-size: var(--text-xs);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: rgba(249, 246, 237, 0.55);
}

/* Required asterisk: matches label colour */
.contact-form__required {
  color: rgba(249, 246, 237, 0.4);
  margin-left: 0.15em;
}

.contact-form__input {
  background-color: rgba(249, 246, 237, 0.07);
  border: 1px solid rgba(249, 246, 237, 0.18);
  border-radius: 0;
  color: var(--color-beige);
  font-family: var(--font-body);
  font-size: 0.95rem;
  font-weight: 300;
  padding: 0.9rem 1rem;
  width: 100%;
  outline: none;
  transition:
    border-color var(--ease-base),
    background-color var(--ease-base);
  /* Match the sharp-corner brand aesthetic */
  -webkit-appearance: none;
  appearance: none;
}

.contact-form__input::placeholder {
  color: rgba(249, 246, 237, 0.28);
}

.contact-form__input:focus {
  border-color: rgba(249, 246, 237, 0.55);
  background-color: rgba(249, 246, 237, 0.11);
}

/* Invalid state after user interaction */
.contact-form__input:invalid:not(:placeholder-shown) {
  border-color: rgba(249, 180, 150, 0.6);
}

.contact-form__input--textarea {
  resize: vertical;
  min-height: 140px;
  line-height: 1.7;
}

.contact-form__footer {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  flex-wrap: wrap;
}

.contact-form__note {
  font-size: var(--text-xs);
  color: rgba(249, 246, 237, 0.35);
  letter-spacing: 0.03em;
}

/* ── Large-format contact details ── */

.contact__details {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 3rem;
  flex-wrap: wrap;
  padding-top: 3rem;
  border-top: 1px solid rgba(249, 246, 237, 0.12);
  font-style: normal;
}

.contact__detail-link {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.4rem;
  text-decoration: none;
  color: var(--color-beige);
  transition: opacity var(--ease-base);
}

.contact__detail-link:hover {
  opacity: 0.7;
}

.contact__detail-label {
  font-size: var(--text-xs);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: rgba(249, 246, 237, 0.45);
}

/* Phone / email displayed large for easy tapping */
.contact__detail-value {
  font-size: 1.3rem;
  font-weight: 300;
  letter-spacing: 0.02em;
}

/* Thin vertical rule between phone and email */
.contact__detail-divider {
  display: block;
  width: 1px;
  height: 52px;
  background-color: rgba(249, 246, 237, 0.15);
  flex-shrink: 0;
}

@media (max-width: 768px) {
  .contact-form__row       { grid-template-columns: 1fr; }
  .contact__details        { gap: 2rem; }
  .contact__detail-divider { display: none; }
  .contact__detail-value   { font-size: 1.1rem; }
}


/* ============================================================
   20. Footer additions
       Legal note and placeholder style not in base footer rules.
   ============================================================ */

/* Small compliance text that sits between copyright and links */
.footer__legal-note {
  font-size: 0.68rem;
  font-weight: 300;
  color: rgba(249, 246, 237, 0.28);
  line-height: 1.65;
  /* Shrink and grow to fill available space between copyright and legal links */
  flex: 1;
  padding: 0 1.5rem;
  text-align: center;
}

/* Highlight the [PLACEHOLDER] tokens so they're easy to spot in the browser */
.footer__placeholder {
  color: rgba(249, 246, 237, 0.45);
  font-style: italic;
}

@media (max-width: 768px) {
  .footer__legal-note {
    order: 3;          /* stack below copyright and legal links */
    flex: unset;
    padding: 0;
    text-align: left;
  }
}


/* ============================================================
   21. Services snapshot: homepage three-column category list
       Replaces the three service cards with a full overview
       of Finance / Wealth / Insurance that links to the
       dedicated services page.
   ============================================================ */

/* Intro paragraph below the section heading */
.services__header-intro {
  margin-top: 1rem;
  font-size: var(--text-lead);
  font-weight: 300;
  color: var(--color-text-mid);
  max-width: 54ch;
  line-height: 1.75;
}

/* Three-column grid separated by 1px vertical rules */
.services__categories {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  border-top: 1px solid rgba(31, 77, 58, 0.1);
  margin-bottom: 3.5rem;
}

.services__category {
  padding: 2.75rem 2.5rem 2.75rem 0;
}

/* Left border on 2nd and 3rd columns; push their content right */
.services__category + .services__category {
  padding-left: 2.5rem;
  border-left: 1px solid rgba(31, 77, 58, 0.1);
}

/* Small uppercase category label */
.services__category-label {
  display: block;
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-text-light);
  margin-bottom: 1.5rem;
  padding-bottom: 1.1rem;
  border-bottom: 1px solid rgba(31, 77, 58, 0.08);
}

/* Service list */
.services__list {
  display: flex;
  flex-direction: column;
  list-style: none;
  padding: 0;
}

/* Each row: name left, arrow right */
.services__item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.875rem 0;
  border-bottom: 1px solid rgba(31, 77, 58, 0.07);
  font-size: var(--text-base);
  font-weight: 300;
  color: var(--color-text-dark);
  text-decoration: none;
  transition: color 0.22s ease, padding-left 0.22s ease;
}

.services__list li:last-child .services__item {
  border-bottom: none;
}

.services__item:hover {
  color: var(--color-moss);
  padding-left: 0.35rem;
}

.services__item-arrow {
  display: inline-block;
  flex-shrink: 0;
  margin-left: 0.75rem;
  color: var(--color-moss);
  opacity: 0.3;
  font-size: 0.8rem;
  transition: opacity 0.22s ease, transform 0.22s ease;
}

.services__item:hover .services__item-arrow {
  opacity: 0.75;
  transform: translateX(3px);
}

/* Footer row: tagline left, CTA button right */
.services__footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 2rem;
  padding-top: 3rem;
  border-top: 1px solid rgba(31, 77, 58, 0.1);
  flex-wrap: wrap;
}

.services__footer-text {
  font-size: 0.95rem;
  font-weight: 300;
  color: var(--color-text-mid);
  max-width: 46ch;
  line-height: 1.75;
}

@media (max-width: 768px) {
  .services__categories {
    grid-template-columns: 1fr;
    border-top: none;
  }

  .services__category {
    padding: 2rem 0;
    border-top: 1px solid rgba(31, 77, 58, 0.1);
  }

  .services__category + .services__category {
    padding-left: 0;
    border-left: none;
  }

  .services__footer {
    flex-direction: column;
    align-items: flex-start;
  }
}


/* ============================================================
   22. Services page: services.html
       Page-level hero, sticky category sub-nav, category
       sections (Finance / Wealth / Insurance), and individual
       service entries with a sticky left-column meta panel.
   ============================================================ */

/* ── Sub-nav height token ─────────────────────────────────── */
:root {
  --services-subnav-height: 50px;
}

/* ── Page hero (replaces the full-viewport hero) ─────────── */

.page-hero {
  background-color: var(--color-moss);
  padding: 11rem 0 6rem;
  position: relative;
  overflow: hidden;
}

.page-hero__texture {
  position: absolute;
  inset: 0;
  background-image: radial-gradient(
    rgba(249, 246, 237, 0.07) 1px,
    transparent 1px
  );
  background-size: 28px 28px;
  pointer-events: none;
}

.page-hero__content {
  position: relative;
  z-index: 1;
}

.page-hero__eyebrow {
  display: block;
  font-size: var(--text-xs);
  font-weight: 400;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(249, 246, 237, 0.5);
  margin-bottom: 1.25rem;
}

.page-hero__heading {
  font-family: var(--font-brand);
  font-size: clamp(2.4rem, 5.5vw, 4.5rem);
  font-weight: 400;
  color: var(--color-beige);
  line-height: 1.08;
  letter-spacing: 0.02em;
  margin-bottom: 1.5rem;
  max-width: 16ch;
}

.page-hero__subtext {
  font-size: var(--text-lead);
  font-weight: 300;
  color: rgba(249, 246, 237, 0.72);
  max-width: 52ch;
  line-height: 1.72;
}

/* ── Legal / long-form policy page ────────────────────────── */

.legal {
  background-color: var(--color-beige);
  padding: 5rem 0 7rem;
}

/* Comfortable reading measure, narrower than the full container */
.legal__inner {
  max-width: 760px;
  margin: 0 auto;
}

.legal__updated {
  font-size: var(--text-sm);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-text-light);
  margin-bottom: 3rem;
  padding-bottom: 2rem;
  border-bottom: 1px solid rgba(31, 77, 58, 0.14);
}

.legal h2 {
  font-family: var(--font-brand);
  font-size: 1.5rem;
  font-weight: 400;
  color: var(--color-moss);
  line-height: 1.3;
  letter-spacing: 0.01em;
  margin: 3rem 0 1rem;
}

.legal h2:first-of-type {
  margin-top: 0;
}

.legal p {
  color: var(--color-text-mid);
  font-size: 1rem;
  line-height: 1.8;
  margin-bottom: 1.15rem;
}

.legal ul {
  list-style: disc;
  padding-left: 1.4rem;
  margin: 0 0 1.15rem;
}

.legal li {
  color: var(--color-text-mid);
  line-height: 1.75;
  margin-bottom: 0.55rem;
  padding-left: 0.25rem;
}

/* Lettered a)/b) sub-list: markers are written into the text */
.legal__alpha {
  list-style: none;
  padding-left: 0.4rem;
}

.legal a {
  color: var(--color-moss);
  font-weight: 400;
  text-decoration: underline;
  text-underline-offset: 2px;
  transition: color var(--ease-base);
}

.legal a:hover {
  color: var(--color-moss-light);
}

.legal__signoff {
  margin-top: 3rem;
  padding-top: 2rem;
  border-top: 1px solid rgba(31, 77, 58, 0.14);
  font-size: var(--text-sm);
  color: var(--color-text-light);
}

/* ── Sticky category jump-nav ─────────────────────────────── */

.services-subnav {
  background-color: var(--color-white);
  border-bottom: 1px solid rgba(31, 77, 58, 0.08);
  position: sticky;
  top: var(--nav-height);
  z-index: 50;
}

.services-subnav__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 2rem;
  display: flex;
  align-items: center;
}

.services-subnav__link {
  display: block;
  padding: 0.9rem 1.5rem 0.9rem 0;
  margin-right: 1.5rem;
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-text-light);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  transition: color 0.22s ease, border-color 0.22s ease;
  white-space: nowrap;
}

.services-subnav__link:hover,
.services-subnav__link.is-active {
  color: var(--color-moss);
  border-bottom-color: var(--color-moss);
}

@media (max-width: 600px) {
  .services-subnav__inner {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .services-subnav__inner::-webkit-scrollbar { display: none; }
}

/* ── Category section ─────────────────────────────────────── */

.service-category-section {
  padding: var(--space-xl) 0;
  /* Ensure anchor links land below both fixed nav + sticky subnav */
  scroll-margin-top: calc(var(--nav-height) + var(--services-subnav-height));
}

.service-category-section__header {
  margin-bottom: 4.5rem;
}

.service-category-section__label {
  display: block;
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-moss);
  margin-bottom: 0.75rem;
}

.section--moss .service-category-section__label {
  color: rgba(249, 246, 237, 0.5);
}

.service-category-section__title {
  font-size: clamp(1.9rem, 3.5vw, 2.6rem);
  margin-bottom: 1.25rem;
}

.service-category-section__intro {
  font-size: var(--text-lead);
  font-weight: 300;
  color: var(--color-text-mid);
  max-width: 58ch;
  line-height: 1.75;
}

.section--moss .service-category-section__intro {
  color: rgba(249, 246, 237, 0.72);
}

/* ── Individual service entry ─────────────────────────────── */

.service-entry {
  display: grid;
  grid-template-columns: 260px 1fr;
  gap: 5rem;
  padding: 4rem 0;
  border-top: 1px solid rgba(31, 77, 58, 0.08);
  align-items: start;
  /* Anchor links clear both navs */
  scroll-margin-top: calc(var(--nav-height) + var(--services-subnav-height));
}

.section--moss .service-entry {
  border-top-color: rgba(249, 246, 237, 0.1);
}

/* Left meta panel: stays visible while the description scrolls */
.service-entry__meta {
  position: sticky;
  top: calc(var(--nav-height) + var(--services-subnav-height) + 1.5rem);
}

.service-entry__number {
  display: block;
  font-family: var(--font-brand);
  font-size: 2.8rem;
  line-height: 1;
  color: rgba(31, 77, 58, 0.1);
  margin-bottom: 1rem;
}

.section--moss .service-entry__number {
  color: rgba(249, 246, 237, 0.1);
}

.service-entry__name {
  font-size: 1.2rem;
  font-weight: 500;
  color: var(--color-text-dark);
  line-height: 1.3;
  margin-bottom: 0.45rem;
  font-family: var(--font-body);
}

.section--moss .service-entry__name {
  color: var(--color-beige);
}

.service-entry__tagline {
  font-size: 0.825rem;
  font-weight: 300;
  color: var(--color-text-light);
  line-height: 1.62;
}

.section--moss .service-entry__tagline {
  color: rgba(249, 246, 237, 0.45);
}

/* Right content column */
.service-entry__body {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.service-entry__body > p {
  color: var(--color-text-mid);
  line-height: 1.82;
}

.section--moss .service-entry__body > p {
  color: rgba(249, 246, 237, 0.75);
}

/* "What we cover" features block */
.service-entry__features {
  margin-top: 0.25rem;
  padding-top: 1.5rem;
  border-top: 1px solid rgba(31, 77, 58, 0.08);
}

.section--moss .service-entry__features {
  border-top-color: rgba(249, 246, 237, 0.08);
}

.service-entry__features-label {
  display: block;
  font-size: var(--text-xs);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--color-text-light);
  margin-bottom: 0.9rem;
}

.section--moss .service-entry__features-label {
  color: rgba(249, 246, 237, 0.4);
}

.service-entry__feature-list {
  list-style: none;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0;
}

.service-entry__feature-list li {
  width: 50%;
  font-size: 0.875rem;
  font-weight: 300;
  color: var(--color-text-mid);
  padding: 0.2rem 0 0.2rem 1rem;
  position: relative;
  line-height: 1.65;
}

.service-entry__feature-list li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0.62em;
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background-color: var(--color-moss);
}

.section--moss .service-entry__feature-list li {
  color: rgba(249, 246, 237, 0.65);
}

.section--moss .service-entry__feature-list li::before {
  background-color: rgba(249, 246, 237, 0.35);
}

/* CTA text-link */
.service-entry__cta {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  margin-top: 0.75rem;
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-moss);
  text-decoration: none;
  border-bottom: 1px solid rgba(31, 77, 58, 0.25);
  padding-bottom: 2px;
  transition: opacity 0.22s ease, border-color 0.22s ease;
}

.service-entry__cta:hover {
  opacity: 0.62;
  border-color: var(--color-moss);
}

.section--moss .service-entry__cta {
  color: rgba(249, 246, 237, 0.78);
  border-bottom-color: rgba(249, 246, 237, 0.2);
}

.section--moss .service-entry__cta:hover {
  opacity: 1;
  border-bottom-color: rgba(249, 246, 237, 0.55);
}

/* ── Responsive ─────────────────────────────────────────── */

@media (max-width: 960px) {
  .service-entry {
    grid-template-columns: 1fr;
    gap: 1.75rem;
    padding: 3rem 0;
  }

  .service-entry__meta {
    position: static;
  }

  .service-entry__feature-list li {
    width: 50%;
  }
}

/* ============================================================
   23. Calculators page: calculators.html
   ============================================================ */

/* ── Calculator picker sub-nav ───────────────────────────── */

.calc-subnav {
  background-color: var(--color-white);
  border-bottom: 1px solid rgba(31, 77, 58, 0.08);
  position: sticky;
  top: var(--nav-height);
  z-index: 50;
}

.calc-subnav__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 2rem;
  display: flex;
  align-items: center;
  gap: 0;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}

.calc-subnav__inner::-webkit-scrollbar { display: none; }

.calc-subnav__link {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.9rem 0;
  margin-right: 1.75rem;
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--color-text-light);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  transition: color 0.22s ease, border-color 0.22s ease;
  white-space: nowrap;
}

a.calc-subnav__link:hover {
  color: var(--color-moss);
}

.calc-subnav__link.is-active {
  color: var(--color-moss);
  border-bottom-color: var(--color-moss);
}

.calc-subnav__link.is-disabled {
  opacity: 0.4;
  cursor: default;
}

.calc-subnav__soon {
  display: inline-block;
  font-size: 0.6rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: rgba(31, 77, 58, 0.5);
  background: rgba(31, 77, 58, 0.08);
  padding: 0.15em 0.45em;
  border-radius: 2px;
}

/* ── Body: two-column input / results layout ─────────────── */

.calc-body {
  padding: var(--space-xl) 0;
  background: var(--color-beige);
}

.calc-header {
  margin-bottom: 3rem;
}

.calc-header__title {
  margin-top: 0.5rem;
}

.calc-layout {
  display: grid;
  grid-template-columns: 1fr 360px;
  gap: 3rem;
  align-items: start;
}

/* ── Input panel ─────────────────────────────────────────── */

.calc-panel {
  background: var(--color-white);
  padding: 2.5rem;
  border: 1px solid rgba(31, 77, 58, 0.1);
}

/* "INCOME" / "EXPENSES" section heads */
.calc-section-head {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding-top: 2rem;
  margin-top: 2rem;
  margin-bottom: 1.5rem;
  border-top: 1px solid rgba(31, 77, 58, 0.07);
}

.calc-section-head:first-child {
  margin-top: 0;
  padding-top: 0;
  border-top: none;
}

.calc-section-head__label {
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--color-moss);
  white-space: nowrap;
}

.calc-section-head__rule {
  flex: 1;
  height: 1px;
  background: rgba(31, 77, 58, 0.08);
}

/* Field wrapper */
.calc-field {
  margin-bottom: 1.1rem;
}

.calc-label {
  display: block;
  font-size: var(--text-xs);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--color-text-light);
  margin-bottom: 0.45rem;
}

/* Amount + frequency combo */
.calc-input-group {
  display: flex;
  align-items: stretch;
  border: 1px solid rgba(31, 77, 58, 0.18);
  background: var(--color-white);
  transition: border-color 0.22s ease;
}

.calc-input-group:focus-within {
  border-color: var(--color-moss);
}

.calc-currency-prefix,
.calc-suffix {
  display: flex;
  align-items: center;
  padding: 0 0.7rem;
  background: rgba(31, 77, 58, 0.04);
  font-size: 0.875rem;
  font-weight: 400;
  color: var(--color-text-light);
  border-right: 1px solid rgba(31, 77, 58, 0.12);
  flex-shrink: 0;
  user-select: none;
}

.calc-suffix {
  border-right: none;
  border-left: 1px solid rgba(31, 77, 58, 0.12);
}

.calc-input {
  flex: 1;
  min-width: 0;
  border: none;
  background: transparent;
  padding: 0.72rem 0.75rem;
  font-family: var(--font-body);
  font-size: 0.95rem;
  font-weight: 300;
  color: var(--color-text-dark);
  outline: none;
  -moz-appearance: textfield;
}

.calc-input::-webkit-outer-spin-button,
.calc-input::-webkit-inner-spin-button { -webkit-appearance: none; }

.calc-input::placeholder { color: rgba(26, 26, 26, 0.28); }

/* Frequency select */
.calc-freq {
  flex-shrink: 0;
  border: none;
  border-left: 1px solid rgba(31, 77, 58, 0.12);
  background: rgba(31, 77, 58, 0.04);
  padding: 0 1.6rem 0 0.6rem;
  font-family: var(--font-body);
  font-size: 0.68rem;
  font-weight: 400;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--color-text-mid);
  outline: none;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5' viewBox='0 0 8 5'%3E%3Cpath d='M1 1l3 3 3-3' stroke='%238a8a8a' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0.45rem center;
}

/* Standalone select (dependants) */
.calc-select-wrap {
  border: 1px solid rgba(31, 77, 58, 0.18);
  transition: border-color 0.22s ease;
}

.calc-select-wrap:focus-within { border-color: var(--color-moss); }

.calc-select {
  width: 100%;
  border: none;
  background: transparent;
  padding: 0.72rem 2rem 0.72rem 0.75rem;
  font-family: var(--font-body);
  font-size: 0.95rem;
  font-weight: 300;
  color: var(--color-text-dark);
  outline: none;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5' viewBox='0 0 8 5'%3E%3Cpath d='M1 1l3 3 3-3' stroke='%234a4a4a' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0.75rem center;
}

/* Yes/No toggle */
.calc-toggle-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1.1rem;
}

.calc-toggle {
  display: inline-flex;
  border: 1px solid rgba(31, 77, 58, 0.18);
  overflow: hidden;
  flex-shrink: 0;
}

.calc-toggle__btn {
  padding: 0.42rem 1rem;
  font-family: var(--font-body);
  font-size: 0.68rem;
  font-weight: 500;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--color-text-mid);
  background: transparent;
  border: none;
  border-right: 1px solid rgba(31, 77, 58, 0.18);
  cursor: pointer;
  transition: background-color 0.18s ease, color 0.18s ease;
}

.calc-toggle__btn:last-child { border-right: none; }

.calc-toggle__btn.is-active {
  background-color: var(--color-moss);
  color: var(--color-beige);
}

/* Conditional field (partner salary: shown when joint=yes) */
.calc-field--conditional { display: none; }
.calc-field--conditional.is-visible { display: block; }

/* ── Results panel ───────────────────────────────────────── */

.calc-results {
  background-color: var(--color-moss);
  padding: 2.25rem 2rem;
  position: sticky;
  top: calc(var(--nav-height) + var(--services-subnav-height));
}

.calc-results__eyebrow {
  display: block;
  font-size: var(--text-xs);
  font-weight: 400;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(249, 246, 237, 0.45);
  margin-bottom: 0.65rem;
}

.calc-results__amount {
  font-family: var(--font-brand);
  font-size: clamp(2rem, 3vw, 2.8rem);
  color: var(--color-beige);
  line-height: 1;
  margin-bottom: 0.4rem;
}

.calc-results__sub {
  font-size: 0.75rem;
  font-weight: 300;
  color: rgba(249, 246, 237, 0.4);
  margin-bottom: 0;
}

.calc-results__divider {
  height: 1px;
  background: rgba(249, 246, 237, 0.1);
  margin: 1.5rem 0;
}

.calc-results__row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  padding: 0.55rem 0;
  border-bottom: 1px solid rgba(249, 246, 237, 0.07);
}

.calc-results__row:last-of-type { border-bottom: none; }

.calc-results__row-label {
  font-size: 0.8rem;
  font-weight: 300;
  color: rgba(249, 246, 237, 0.55);
}

.calc-results__row-value {
  font-size: 1rem;
  font-weight: 300;
  color: var(--color-beige);
}

/* Balance chart */
.calc-chart-wrap {
  margin-top: 1.5rem;
  padding-top: 1.5rem;
  border-top: 1px solid rgba(249, 246, 237, 0.1);
}

.calc-chart-label {
  display: block;
  font-size: 0.65rem;
  font-weight: 400;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(249, 246, 237, 0.35);
  margin-bottom: 0.65rem;
}

/* All calculator balance charts (not just #balanceChart) */
.calc-chart-wrap canvas {
  display: block;
  width: 100%;
  height: 130px;
}

/* Assessment rate footnote inside results */
.calc-rate-note {
  margin-top: 1.25rem;
  font-size: 0.68rem;
  line-height: 1.6;
  color: rgba(249, 246, 237, 0.35);
}

/* ── Disclaimer ──────────────────────────────────────────── */

.calc-disclaimer {
  margin-top: 3rem;
  padding-top: 2rem;
  border-top: 1px solid rgba(31, 77, 58, 0.08);
  font-size: 0.78rem;
  color: var(--color-text-light);
  line-height: 1.72;
}

/* ── Talk to Van CTA ─────────────────────────────────────── */

.calc-cta {
  padding: var(--space-xl) 0;
  background: var(--color-moss);
}

.calc-cta__inner {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 4rem;
}

.calc-cta__heading {
  font-size: clamp(1.6rem, 3vw, 2.2rem);
  color: var(--color-beige);
  margin-top: 0.5rem;
  margin-bottom: 1rem;
}

.calc-cta__body {
  font-size: 1rem;
  font-weight: 300;
  color: rgba(249, 246, 237, 0.72);
  line-height: 1.75;
  max-width: 50ch;
}

.calc-cta__actions {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  align-items: flex-end;
  flex-shrink: 0;
}

/* ── Coming soon grid ────────────────────────────────────── */

.calc-coming-soon {
  padding: var(--space-xl) 0;
  background: var(--color-white);
}

.calc-coming-soon__header {
  margin-bottom: 3rem;
}

.calc-coming-soon__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.25rem;
}

.calc-coming-soon__card {
  padding: 1.75rem 1.5rem;
  border: 1px solid rgba(31, 77, 58, 0.1);
  opacity: 0.5;
}

.calc-coming-soon__name {
  font-size: 1rem;
  font-weight: 500;
  color: var(--color-text-dark);
  margin-bottom: 0.35rem;
}

.calc-coming-soon__badge {
  font-size: 0.65rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-moss);
}

/* ── Switchable calc section ─────────────────────────────── */

.calc-section.panel--hidden { display: none; }

/* ── Field hint text ─────────────────────────────────────── */

.calc-field-hint {
  font-size: 0.72rem;
  font-weight: 300;
  color: var(--color-text-light);
  margin-top: 0.35rem;
  line-height: 1.5;
}

/* ── Date input (Income Annualisation) ───────────────────── */

.calc-input[type="date"] {
  color-scheme: light;
  cursor: pointer;
}

/* ── Year-progress indicator (Income Annualisation) ──────── */

.calc-ia-progress {
  margin: 1.25rem 0 0.5rem;
}

.calc-ia-progress__label {
  font-size: 0.65rem;
  color: rgba(249, 246, 237, 0.38);
  letter-spacing: 0.13em;
  text-transform: uppercase;
  margin-bottom: 0.45rem;
}

.calc-ia-progress__track {
  height: 3px;
  background: rgba(249, 246, 237, 0.1);
  border-radius: 2px;
  overflow: hidden;
}

.calc-ia-progress__fill {
  height: 100%;
  background: rgba(249, 246, 237, 0.6);
  border-radius: 2px;
  transition: width 0.45s ease;
}

/* ── 3-way frequency tab selector (Loan Repayments) ─────── */

.calc-freq-tabs {
  display: flex;
  border: 1px solid rgba(31, 77, 58, 0.18);
  overflow: hidden;
}

.calc-freq-tab {
  flex: 1;
  padding: 0.65rem 0.5rem;
  font-family: var(--font-body);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--color-text-mid);
  background: transparent;
  border: none;
  border-right: 1px solid rgba(31, 77, 58, 0.18);
  cursor: pointer;
  transition: background-color 0.18s ease, color 0.18s ease;
  text-align: center;
}

.calc-freq-tab:last-child { border-right: none; }

.calc-freq-tab.is-active {
  background-color: var(--color-moss);
  color: var(--color-beige);
}

/* ── Amortisation table ──────────────────────────────────── */

.calc-amort {
  margin-top: 3rem;
  padding-top: 2.5rem;
  border-top: 1px solid rgba(31, 77, 58, 0.1);
}

.calc-amort__toggle {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  background: none;
  border: none;
  padding: 0 0 2px;
  cursor: pointer;
  font-family: var(--font-body);
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--color-moss);
  border-bottom: 1px solid rgba(31, 77, 58, 0.25);
  transition: opacity 0.22s ease;
}

.calc-amort__toggle:hover { opacity: 0.6; }

.calc-amort__toggle-icon {
  font-size: 0.95rem;
  font-weight: 300;
  line-height: 1;
}

.calc-amort__panel {
  display: none;
  overflow-x: auto;
  margin-top: 1.75rem;
  border: 1px solid rgba(31, 77, 58, 0.1);
}

.calc-amort__panel.is-open { display: block; }

.calc-amort__table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.85rem;
}

.calc-amort__table thead th {
  padding: 0.65rem 0.875rem;
  font-size: 0.68rem;
  font-weight: 500;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  color: var(--color-text-light);
  background: rgba(31, 77, 58, 0.04);
  border-bottom: 1px solid rgba(31, 77, 58, 0.1);
  text-align: right;
  white-space: nowrap;
}

.calc-amort__table thead th:first-child { text-align: left; }

.calc-amort__table tbody td {
  padding: 0.55rem 0.875rem;
  text-align: right;
  border-bottom: 1px solid rgba(31, 77, 58, 0.06);
  color: var(--color-text-mid);
  font-weight: 300;
}

.calc-amort__table tbody td:first-child {
  text-align: left;
  font-weight: 400;
  color: var(--color-text-dark);
}

.calc-amort__table tbody tr:last-child td {
  border-bottom: none;
  background: rgba(31, 77, 58, 0.03);
  font-weight: 400;
  color: var(--color-text-dark);
}

.calc-amort__table tbody tr:hover td { background: rgba(31, 77, 58, 0.02); }

/* ── Responsive ──────────────────────────────────────────── */

@media (max-width: 960px) {
  .calc-layout {
    grid-template-columns: 1fr;
    gap: 1.5rem;
  }

  /* Inputs first on mobile (industry standard: fill in → see results).
     Removed order:-1 so the panel appears below the input form. */
  .calc-results {
    position: static;
  }

  /* Sticky meta panel in service entries no longer applies */
  .service-entry__meta { position: static; }

  .calc-coming-soon__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 768px) {
  .calc-cta__inner {
    grid-template-columns: 1fr;
    gap: 2rem;
  }

  .calc-cta__actions {
    align-items: flex-start;
    flex-direction: row;
    flex-wrap: wrap;
  }

  .calc-coming-soon__grid {
    grid-template-columns: 1fr;
  }

  /* Compact section padding on tablet */
  .calc-body { padding: 3rem 0; }
  .calc-results { padding: 1.75rem 1.5rem; }

  /* Shorter chart on tablet */
  .calc-chart-wrap canvas { height: 110px; }
}

/* ── Small phones (≤ 600px) ──────────────────────────────── */
@media (max-width: 600px) {

  .calc-panel   { padding: 1.5rem 1.25rem; }
  .calc-results { padding: 1.5rem 1.25rem; }
  .calc-body    { padding: 2.5rem 0; }

  /* Chart takes up less space: still useful, not dominant */
  .calc-chart-wrap canvas { height: 90px; }

  /* Hero result number: fluid from 1.75 rem → clamp to viewport */
  .calc-results__amount {
    font-size: clamp(1.75rem, 7vw, 2.4rem);
  }

  /* Compact result rows */
  .calc-results__row { padding: 0.45rem 0; }
  .calc-results__row-label { font-size: 0.75rem; }
  .calc-results__row-value { font-size: 0.9rem; }

  /* Frequency tabs: prevent cramping on 375px phones */
  .calc-freq-tab {
    font-size: 0.65rem;
    letter-spacing: 0.04em;
    padding: 0.65rem 0.35rem;
  }

  /* Sub-nav tabs: slightly tighter on small screens */
  .calc-subnav__link {
    font-size: 0.65rem;
    letter-spacing: 0.1em;
    margin-right: 1.25rem;
  }

  /* Input groups: prevent overflow */
  .calc-input-group {
    flex-wrap: nowrap;
  }

  /* Results chart label */
  .calc-chart-label { font-size: 0.6rem; }

  /* Rate note */
  .calc-rate-note { font-size: 0.65rem; }

  /* Amort toggle button */
  .calc-amort__toggle { font-size: 0.65rem; }
}

@media (max-width: 480px) {
  .calc-panel   { padding: 1.25rem 1rem; }
  .calc-results { padding: 1.25rem 1rem; }
}

/* Panel hidden by tab switcher (services.js) */
.service-category-section.panel--hidden {
  display: none;
}

@media (max-width: 768px) {
  .page-hero {
    padding: 7rem 0 3rem;
  }

  .page-hero__heading {
    font-size: clamp(1.9rem, 7vw, 3rem);
  }

  .service-category-section__header {
    margin-bottom: 3rem;
  }

  .service-entry__feature-list li {
    width: 100%;
  }
}

@media (max-width: 480px) {
  .page-hero {
    padding: 6rem 0 2.5rem;
  }
}
