/* ============================================================================
   cfp-2026.css — Carbon Footprint Ltd design system (2026 refresh)
   Source of truth for the new look: Cormorant Garamond + DM Sans, forest-green
   palette, grid-line backgrounds, "wireframe" image frames, alternating split
   rows, dark sections. Link this on a page and use the markup classes below.
   Fonts: self-hosted woff2 in /assets/fonts/, preloaded + @font-face declared
   inline in each page <head> (see _build_cfp2026.py) so they are same-origin and
   ready at first paint (no swap/pop-in). Do NOT re-add the Google Fonts <link>.
   ========================================================================== */

:root {
  --dark: #0d1f12;
  --forest: #1a3a22;
  --green: #2d6a3f;
  --mid: #3e8a52;
  --light-green: #5aad6e;
  --mint: #e8f4eb;
  --pale: #f2f9f4;
  --white: #ffffff;
  --text: #1a2e20;
  --muted: #5a7362;
  --border: #d0e8d5;
  --gold: #c8a84b;
  --grid-line: rgba(45,106,63,0.05);
  --maxw: 1160px;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body { font-family: 'DM Sans', 'DM Sans Fallback', sans-serif; background: var(--white); color: var(--text); overflow-x: hidden; }
img { max-width: 100%; }

/* ── TOP BAR ── */
.top-bar { position: relative; z-index: 1000; background: var(--dark); color: rgba(255,255,255,0.75); font-size: 0.78rem; padding: 9px 40px; display: flex; align-items: center; gap: 28px; flex-wrap: wrap; }
.top-bar a { color: rgba(255,255,255,0.75); text-decoration: none; }
.top-bar a:hover { color: var(--light-green); }
.top-bar .spacer { flex: 1; }

/* ── NAV ── */
.site-nav { position: sticky; top: 0; z-index: 1000; background: rgba(255,255,255,0.97); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); padding: 0 40px; display: flex; align-items: center; height: 72px; }
.nav-logo img { height: 58px; }
.nav-links { display: flex; align-items: stretch; gap: 4px; margin-left: 36px; list-style: none; height: 72px; }
.nav-links > li { position: relative; display: flex; align-items: center; }
.nav-links > li > a { color: var(--text); text-decoration: none; font-size: 0.85rem; font-weight: 500; padding: 8px 13px; border-radius: 6px; display: block; transition: background 0.2s, color 0.2s; letter-spacing: 0.02em; }
.nav-links > li > a:hover { background: var(--mint); color: var(--green); }
.nav-links > li > a.has-drop::after { content: ' ▾'; font-size: 0.7rem; }
/* dropdown touches the bottom of the full-height nav item (no gap to cross),
   so it stays open while the cursor travels from the link down into the menu */
.dropdown { display: none; position: absolute; top: 100%; left: 0; background: #fff; border: 1px solid var(--border); border-radius: 0 0 10px 10px; padding: 8px 0; min-width: 230px; box-shadow: 0 12px 36px rgba(0,0,0,0.1); z-index: 200; }
.nav-links > li:hover .dropdown, .nav-links > li:focus-within .dropdown { display: block; }
.dropdown a { display: block; padding: 8px 18px; color: var(--text); font-size: 0.83rem; text-decoration: none; transition: background 0.15s; }
.dropdown a:hover { background: var(--mint); color: var(--green); }
.dropdown .section-label { padding: 10px 18px 4px; font-size: 0.7rem; font-weight: 600; color: var(--muted); text-transform: uppercase; letter-spacing: 0.08em; pointer-events: none; }
.dropdown hr { border: none; border-top: 1px solid var(--border); margin: 6px 0; }
.nav-spacer { flex: 1; }
.nav-actions { display: flex; align-items: center; gap: 10px; }
.nav-login { color: var(--text); text-decoration: none; font-size: 0.85rem; font-weight: 500; padding: 8px 6px; white-space: nowrap; transition: color 0.2s; }
.nav-login:hover { color: var(--green); }

/* In-site page search (injected by cfp-2026-styles.js) */
.nav-search { position: relative; display: flex; align-items: center; }
.nav-search-toggle { display: flex; align-items: center; justify-content: center; width: 38px; height: 38px; padding: 0; border: 1px solid var(--border); border-radius: 8px; background: var(--white); color: var(--green); cursor: pointer; transition: background 0.2s, border-color 0.2s; }
.nav-search-toggle:hover { background: var(--mint); border-color: var(--green); }
.nav-search-toggle svg { width: 18px; height: 18px; }
.nav-search-panel { display: none; position: absolute; top: calc(100% + 10px); right: 0; width: 380px; max-width: 90vw; background: var(--white); border: 1px solid var(--border); border-radius: 12px; box-shadow: 0 16px 48px rgba(13,31,18,0.18); padding: 10px; z-index: 1100; }
.nav-search.open .nav-search-panel { display: block; animation: cfpFadeIn 0.16s ease; }
.nav-search.open .nav-search-toggle { background: var(--green); border-color: var(--green); color: #fff; }
.nav-search-input { width: 100%; padding: 10px 14px; font-family: inherit; font-size: 0.95rem; color: var(--text); border: 1px solid var(--border); border-radius: 8px; outline: none; }
.nav-search-input:focus { border-color: var(--green); box-shadow: 0 0 0 3px var(--mint); }
.nav-search-results { list-style: none; margin: 8px 0 0; padding: 0; max-height: 56vh; overflow-y: auto; }
.nav-search-results li { margin: 0; }
.nav-search-results a { display: block; padding: 9px 11px; border-radius: 8px; text-decoration: none; color: var(--text); }
.nav-search-results a:hover, .nav-search-results li.is-active a { background: var(--pale); }
.nav-search-results .r-title { display: block; font-weight: 600; font-size: 0.92rem; color: var(--green); overflow-wrap: anywhere; }
.nav-search-results .r-context { display: block; font-size: 0.8rem; color: var(--muted); margin-top: 2px; overflow-wrap: anywhere; }
.nav-search-results mark { background: #fbeec2; color: inherit; padding: 0 1px; border-radius: 2px; }
.nav-search-empty { padding: 16px 12px; text-align: center; color: var(--muted); font-size: 0.9rem; }
.nav-search-hint { padding: 8px 12px 2px; font-size: 0.72rem; color: var(--muted); }
.nav-toggle { display: none; background: none; border: none; cursor: pointer; font-size: 1.5rem; color: var(--dark); }

/* ── BUTTONS ── */
.btn { display: inline-block; padding: 10px 22px; border-radius: 50px; font-weight: 500; font-size: 0.85rem; text-decoration: none; cursor: pointer; transition: all 0.2s; border: none; }
.btn-outline { border: 1.5px solid var(--green); color: var(--green); background: transparent; }
.btn-outline:hover { background: var(--green); color: #fff; border-color: var(--green); }
.btn-primary { background: var(--green); color: #fff; }
.btn-primary:hover { background: var(--forest); transform: translateY(-1px); box-shadow: 0 6px 20px rgba(45,106,63,0.35); }
.btn-dark { background: var(--dark); color: #fff; }
.btn-dark:hover { background: var(--forest); }
.btn-white { background: #fff; color: var(--dark); }
.btn-white:hover { background: var(--mint); }
.btn-ghost { border: 1.5px solid rgba(255,255,255,0.25); color: rgba(255,255,255,0.85); }
.btn-ghost:hover { border-color: rgba(255,255,255,0.6); color: #fff; }
.btn-lg { padding: 14px 32px; font-size: 0.95rem; }

/* ── SHARED: grid-line background + section header + tags ── */
.grid-bg { position: relative; overflow: hidden; }
.grid-bg::after { content: ''; position: absolute; inset: 0; background-image: linear-gradient(var(--grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--grid-line) 1px, transparent 1px); background-size: 60px 60px; pointer-events: none; }
.glow::before { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse 70% 60% at 50% 20%, rgba(90,173,110,0.12) 0%, transparent 70%), radial-gradient(ellipse 40% 40% at 80% 80%, rgba(45,106,63,0.07) 0%, transparent 60%); pointer-events: none; }

.section-tag { display: inline-block; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--green); margin-bottom: 14px; }
.row.dark .section-tag, .dark .section-tag { color: var(--light-green); }
.section-header { text-align: center; max-width: 660px; margin: 0 auto 64px; position: relative; z-index: 1; }
.section-header h2 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: clamp(2rem, 3.5vw, 3rem); font-weight: 600; color: var(--dark); line-height: 1.15; margin-bottom: 16px; }
.section-header h2 em { color: var(--green); font-style: italic; }
.section-header p { color: var(--muted); font-size: 1rem; line-height: 1.65; font-weight: 300; }

/* ── HERO (homepage, centered) ── */
.hero { min-height: 88vh; background: var(--pale); position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 90px 40px 80px; overflow: hidden; }
.hero video { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; opacity: 0.5; pointer-events: none; }
.hero h1 { text-shadow: 0 1px 24px rgba(242,249,244,0.7); }
.hero::before, .hero::after { z-index: 0; }
/* liquid-glass panel keeps hero text readable over the video */
.hero-panel { position: relative; z-index: 1; width: 100%; max-width: 760px; margin: 0 auto 52px; padding: 32px 44px 36px; text-align: center; background: rgba(255,255,255,0.3); backdrop-filter: blur(16px) saturate(180%) brightness(1.05); -webkit-backdrop-filter: blur(16px) saturate(180%) brightness(1.05); border: 1px solid rgba(255,255,255,0.7); border-radius: 28px; box-shadow: 0 18px 60px rgba(13,31,18,0.2), inset 0 2px 1px rgba(255,255,255,1), inset 0 -14px 34px rgba(255,255,255,0.25), inset 0 0 0 1px rgba(255,255,255,0.12); overflow: hidden; }
/* glossy specular sheen across the top — the "liquid" highlight */
.hero-panel::before, .hero-stats::before { content: ''; position: absolute; inset: 0 0 auto 0; height: 58%; background: linear-gradient(180deg, rgba(255,255,255,0.6) 0%, rgba(255,255,255,0.08) 60%, rgba(255,255,255,0) 100%); pointer-events: none; z-index: 0; }
.hero-panel > *, .hero-stats > * { position: relative; z-index: 1; }
.hero-panel .hero-sub { color: var(--text); margin: 0 auto 28px; text-shadow: 0 1px 3px rgba(255,255,255,0.7); }
.hero-panel .hero-actions { margin-bottom: 0; }
@media (max-width: 560px) { .hero-panel { padding: 28px 22px 32px; } }
/* Clean eyebrow label above the hero heading (no pill, no dot) */
.hero-badge { display: inline-block; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--green); margin-bottom: 18px; position: relative; z-index: 1; }
.hero-badge .dot { display: none; }
.hero h1 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', Georgia, serif; font-size: clamp(2.9rem, 6vw, 5.4rem); font-weight: 600; line-height: 1.05; color: var(--dark); max-width: 900px; position: relative; z-index: 1; margin-bottom: 26px; }
.hero h1 em { color: var(--green); font-style: italic; }
.hero-sub { font-size: clamp(1rem, 1.5vw, 1.18rem); color: var(--muted); max-width: 640px; line-height: 1.65; position: relative; z-index: 1; margin-bottom: 40px; font-weight: 300; }
.hero-actions { display: flex; gap: 14px; flex-wrap: wrap; justify-content: center; position: relative; z-index: 1; margin-bottom: 64px; }
.hero-stats { display: flex; gap: 0; position: relative; z-index: 1; width: 100%; max-width: 760px; margin: 0 auto; background: rgba(255,255,255,0.42); backdrop-filter: blur(18px) saturate(180%) brightness(1.05); -webkit-backdrop-filter: blur(18px) saturate(180%) brightness(1.05); border: 1px solid rgba(255,255,255,0.85); border-radius: 20px; overflow: hidden; box-shadow: 0 18px 60px rgba(13,31,18,0.28), inset 0 2px 1px rgba(255,255,255,1), inset 0 -14px 34px rgba(255,255,255,0.3), inset 0 0 0 1px rgba(255,255,255,0.18); flex-wrap: wrap; }
.stat-item { padding: 22px 34px; text-align: center; border-right: 1px solid rgba(13,31,18,0.08); flex: 1 1 auto; color: inherit; text-decoration: none; transition: background 0.2s; }
.stat-item:last-child { border-right: none; }
a.stat-item:hover { background: rgba(255,255,255,0.4); }
.stat-num { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 2.4rem; font-weight: 600; color: var(--green); line-height: 1; text-shadow: 0 1px 3px rgba(255,255,255,0.7); }
.stat-label { font-size: 0.75rem; color: var(--muted); margin-top: 4px; font-weight: 400; text-shadow: 0 1px 2px rgba(255,255,255,0.7); }

/* ── PAGE HERO (inner pages, split text + visual) ── */
.page-hero { background: var(--pale); position: relative; padding: 72px 40px; overflow: hidden; }
.page-hero-inner { max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: 1.05fr 1fr; gap: 72px; align-items: center; position: relative; z-index: 1; }
.page-hero h1 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', Georgia, serif; font-size: clamp(2.4rem, 4.5vw, 4rem); font-weight: 600; line-height: 1.05; color: var(--dark); margin-bottom: 22px; }
.page-hero h1 em { color: var(--green); font-style: italic; }
.page-hero .hero-sub { text-align: left; margin: 0 0 32px; max-width: none; }
.page-hero .hero-actions { justify-content: flex-start; margin-bottom: 0; }

/* ── BREADCRUMB ── */
.breadcrumb { background: var(--pale); padding: 14px 40px; font-size: 0.8rem; color: var(--muted); border-bottom: 1px solid var(--border); }
.breadcrumb-inner { max-width: var(--maxw); margin: 0 auto; }
.breadcrumb a { color: var(--muted); text-decoration: none; transition: color 0.2s; }
.breadcrumb a:hover { color: var(--green); }
.breadcrumb .sep { margin: 0 8px; color: var(--border); }
.breadcrumb .current { color: var(--green); font-weight: 500; }

/* ── IMAGE FRAME (the "wireframe" — real image OR placeholder) ── */
.img-frame { position: relative; border-radius: 20px; overflow: hidden; aspect-ratio: 4 / 3; background: linear-gradient(135deg, var(--mint) 0%, #d4ead8 100%); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; box-shadow: 0 12px 40px rgba(13,31,18,0.08); }
.img-frame img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* A link wrapping a framed image must fill the frame, otherwise the img sizes to
   the link's natural size and overflows (zoomed / cropped). */
.img-frame > a { display: flex; width: 100%; height: 100%; align-items: center; justify-content: center; }
.img-frame.contain { background: var(--pale); }
.img-frame.contain img { object-fit: contain; padding: 28px; }
/* Opaque (non-transparent) images: fill the curved box on a clean white background. */
.img-frame.solid { background: #fff; }
.img-frame.solid img { padding: 0; }
.img-frame .placeholder { color: var(--green); font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-style: italic; font-size: 1rem; opacity: 0.55; padding: 24px; text-align: center; }
.img-frame .placeholder::before { content: '◇'; display: block; font-size: 1.6rem; margin-bottom: 8px; font-style: normal; }
.img-frame.tall { aspect-ratio: 3 / 4; }
.img-frame.wide { aspect-ratio: 16 / 10; }
/* Full-size: show the whole image at its natural ratio instead of cropping to the frame */
.img-frame.natural { aspect-ratio: auto; background: var(--pale); }
.img-frame.natural img { height: auto; object-fit: contain; }
.row-visual video { border: none; outline: none; display: block; width: 100%; }
/* Caption shown below an image frame (no longer overlaid on the image) */
.img-caption { display: inline-flex; align-items: center; gap: 8px; margin-top: 12px; font-size: 0.8rem; font-weight: 500; color: var(--muted); letter-spacing: 0.01em; }
.img-caption::before { content: ''; width: 6px; height: 6px; background: var(--light-green); border-radius: 50%; flex-shrink: 0; }

/* ── SPLIT ROWS (alternating text + visual) ── */
section.row { padding: 100px 40px; position: relative; }
.row-inner { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; position: relative; z-index: 1; }
.row.alt { background: var(--pale); }
.row.dark { background: var(--dark); color: #fff; }
.row.reverse .row-inner > .row-text { order: 2; }
.row.reverse .row-inner > .row-visual { order: 1; }
.row-text h2 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: clamp(1.9rem, 3vw, 2.6rem); font-weight: 600; color: var(--dark); line-height: 1.15; margin-bottom: 18px; }
.row.dark .row-text h2 { color: #fff; }
.row-text h2 em { color: var(--green); font-style: italic; }
.row.dark .row-text h2 em { color: var(--light-green); }
.row-text p { color: var(--muted); font-size: 1rem; line-height: 1.7; font-weight: 300; margin-bottom: 16px; }
.row.dark .row-text p { color: rgba(255,255,255,0.7); }

.feature-list { list-style: none; margin-top: 22px; display: flex; flex-direction: column; gap: 14px; }
.feature-list li { display: flex; gap: 12px; font-size: 0.92rem; color: var(--text); line-height: 1.55; position: relative; }
.row.dark .feature-list li { color: rgba(255,255,255,0.85); }
.feature-list li::before { content: ''; width: 18px; height: 18px; border-radius: 50%; background: var(--mint); flex-shrink: 0; margin-top: 3px; }
.row.dark .feature-list li::before { background: rgba(90,173,110,0.2); }
.feature-list li::after { content: '✓'; position: absolute; transform: translate(4px, 2px); color: var(--green); font-size: 0.7rem; font-weight: 700; }
.feature-list li strong { color: var(--dark); font-weight: 600; }
.row.dark .feature-list li strong { color: #fff; }

/* ── CARD GRID (platforms / generic feature cards) ── */
.card-grid { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; position: relative; z-index: 1; }
.card-grid.cols-3 { grid-template-columns: repeat(3, 1fr); }
.card-grid.cols-4 { grid-template-columns: repeat(4, 1fr); }
.card-grid.full { max-width: none; }
.feature-card { border: 1px solid var(--border); border-radius: 20px; padding: 38px; transition: all 0.3s; text-decoration: none; color: inherit; display: block; position: relative; overflow: hidden; background: #fff; }
.feature-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--card-accent, linear-gradient(90deg, var(--green), var(--light-green))); transform: scaleX(0); transition: transform 0.3s; }
.feature-card:hover { border-color: var(--card-accent, var(--light-green)); box-shadow: 0 12px 40px rgba(45,106,63,0.12); box-shadow: 0 12px 40px color-mix(in srgb, var(--card-accent, #2d6a3f) 18%, transparent); transform: translateY(-3px); }
.feature-card:hover::before { transform: scaleX(1); }
/* Per-platform hover accent line (brand colours) */
.feature-card.accent-sustrax { --card-accent: #9662cb; }
.feature-card.accent-comp    { --card-accent: #1ca941; }
.feature-card.accent-crisp   { --card-accent: #f5a623; }
.feature-card.accent-cadi    { --card-accent: #2f6fb0; }
.feature-card.accent-nzs     { --card-accent: #2d6a3f; }
.feature-card.accent-ffp     { --card-accent: #0288d1; }
.feature-card .card-icon { width: 52px; height: 52px; border-radius: 14px; background: var(--mint); display: flex; align-items: center; justify-content: center; font-size: 1.4rem; color: var(--green); margin-bottom: 22px; }
.feature-card .platform-logo { height: 56px; margin-bottom: 22px; display: flex; align-items: center; }
.feature-card .platform-logo img { max-height: 56px; max-width: 200px; object-fit: contain; }
.feature-card h3 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.6rem; font-weight: 600; color: var(--dark); margin-bottom: 12px; }
.feature-card p { color: var(--muted); font-size: 0.9rem; line-height: 1.65; font-weight: 300; margin-bottom: 22px; }
.tag { display: inline-block; background: var(--mint); color: var(--green); font-size: 0.72rem; font-weight: 600; padding: 4px 12px; border-radius: 20px; margin-right: 6px; margin-bottom: 6px; }
.card-link { margin-top: 22px; display: inline-flex; align-items: center; gap: 6px; color: var(--green); font-size: 0.85rem; font-weight: 500; text-decoration: none; }
.card-link::after { content: '→'; transition: transform 0.2s; }
.feature-card:hover .card-link::after { transform: translateX(4px); }
/* Static label that shares the card-link style but is not a link (e.g. price). */
.card-link.no-arrow::after { content: none; }

/* ── PATHWAY (numbered step cards) ── */
.pathway-grid { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; position: relative; z-index: 1; }
.pathway-grid.cols-6 { grid-template-columns: repeat(6, 1fr); }
.pathway-grid.cols-3 { grid-template-columns: repeat(3, 1fr); }
.path-card { background: #fff; border: 1px solid var(--border); border-radius: 16px; padding: 28px 24px; transition: all 0.3s; position: relative; display: block; text-decoration: none; color: inherit; }
.path-card:hover { border-color: var(--light-green); box-shadow: 0 8px 28px rgba(45,106,63,0.1); transform: translateY(-2px); }
.path-num { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 0.9rem; color: var(--green); font-weight: 600; margin-bottom: 8px; letter-spacing: 0.1em; }
.path-card h4 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.25rem; font-weight: 600; color: var(--dark); margin-bottom: 8px; line-height: 1.2; }
.path-card p { font-size: 0.85rem; color: var(--muted); line-height: 1.55; font-weight: 300; }

/* ── REVIEWS ── */
.reviews-grid { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.reviews-grid.cols-4 { max-width: 1500px; grid-template-columns: repeat(4, 1fr); }
.review-card { background: var(--pale); border: 1px solid var(--border); border-radius: 16px; padding: 30px 34px 36px; position: relative; overflow: hidden; text-align: center; }
/* White banner across the top — gives logos with non-transparent backgrounds a clean ground */
.review-client { margin: -30px -34px 22px; padding: 20px 24px; min-height: 86px; background: #fff; border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: center; }
.review-logo { height: 50px; max-width: 160px; object-fit: contain; transition: transform 0.3s ease; }
.review-card:hover .review-logo { transform: scale(1.12); }
.review-stars { color: var(--gold); font-size: 0.85rem; letter-spacing: 3px; margin-bottom: 4px; }
.review-text { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.05rem; font-style: italic; line-height: 1.7; color: var(--text); margin: 18px 0 0; }
/* Quote marks at the start & end of the text — green and slightly larger */
.review-text::before, .review-text::after { color: var(--green); font-style: normal; font-weight: 600; font-size: 1.35em; line-height: 0; vertical-align: -0.28em; }
.review-text::before { content: '\201C'; margin-right: 2px; }
.review-text::after { content: '\201D'; margin-left: 2px; }

/* ── CLIENT LOGO TICKER (proven seamless-scroll technique from the old homepage) ── */
.logo-ticker-section { padding: 64px 40px; background: var(--white); border-top: 1px solid var(--border); }
.logo-ticker-section .ticker-label { text-align: center; font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 36px; }
.logo-ticker-container { overflow: hidden; width: 100%; white-space: nowrap; -webkit-mask-image: linear-gradient(to right, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(to right, transparent, #000 8%, #000 92%, transparent); }
.logo-ticker-track { display: inline-block; animation: logo-scroll 55s linear infinite; }
.logo-ticker-container:hover .logo-ticker-track { animation-play-state: paused; }
.logo-item { display: inline-flex; align-items: center; height: 72px; margin-right: 60px; vertical-align: middle; }
.logo-item img { max-height: 52px; max-width: 150px; width: auto; object-fit: contain; transition: transform 0.3s ease; }
.logo-item img:hover { transform: scale(1.18); }
@keyframes logo-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }

/* ── PROJECT CARDS (image top) ── */
.projects-grid { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; position: relative; z-index: 1; }
.project-card { border-radius: 16px; overflow: hidden; text-decoration: none; color: inherit; display: block; position: relative; background: #fff; border: 1px solid var(--border); transition: transform 0.3s, box-shadow 0.3s; }
.project-card:hover { transform: translateY(-4px); box-shadow: 0 16px 48px rgba(0,0,0,0.1); }
.project-card img { width: 100%; height: 200px; object-fit: cover; display: block; }
.project-info { padding: 24px; }
.project-info h4 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.25rem; font-weight: 600; color: var(--dark); margin-bottom: 8px; }
.project-info p { color: var(--muted); font-size: 0.85rem; line-height: 1.6; font-weight: 300; }

/* ── PILLS (frameworks / standards) ── */
.pill-row { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: 8px; position: relative; z-index: 1; }
.pill { background: #fff; border: 1.5px solid var(--border); border-radius: 50px; padding: 10px 24px; font-size: 0.85rem; font-weight: 500; color: var(--text); text-decoration: none; transition: all 0.2s; }
a.pill { cursor: pointer; }
a.pill:hover { border-color: var(--green); background: var(--mint); color: var(--green); }

/* ── TWO-UP CARDS (marketplace / pricing) ── */
.duo { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: 1fr 1fr; gap: 28px; position: relative; z-index: 1; }
.duo-card { border-radius: 20px; padding: 44px; }
.duo-card.dark { background: var(--dark); color: #fff; }
.duo-card.light { background: var(--mint); border: 1px solid var(--border); }
.duo-card h3 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.6rem; font-weight: 600; margin-bottom: 8px; }
.duo-card.dark h3 { color: #fff; } .duo-card.light h3 { color: var(--dark); }
.duo-label { font-size: 0.72rem; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 14px; }
.duo-card.dark .duo-label { color: var(--light-green); } .duo-card.light .duo-label { color: var(--green); }
.duo-card p { font-size: 0.9rem; line-height: 1.65; font-weight: 300; margin-bottom: 22px; }
.duo-card.dark p { color: rgba(255,255,255,0.65); } .duo-card.light p { color: var(--muted); }
.check-list { list-style: none; margin-bottom: 28px; display: flex; flex-direction: column; gap: 10px; }
.check-list li { display: flex; align-items: flex-start; gap: 10px; font-size: 0.88rem; }
.duo-card.dark .check-list li { color: rgba(255,255,255,0.8); } .duo-card.light .check-list li { color: var(--text); }
.check-list li::before { content: '✦'; color: var(--green); font-size: 0.75rem; flex-shrink: 0; margin-top: 3px; }
.duo-card.dark .check-list li::before { color: var(--light-green); }

/* ── SECTION SHELLS (light / pale / dark wrappers with a centered header) ── */
.section { padding: 110px 40px; position: relative; }
.section.pale { background: var(--pale); }
.section.dark { background: var(--dark); }
.section.dark .section-header h2 { color: #fff; } .section.dark .section-header h2 em { color: var(--light-green); }
.section.dark .section-header p { color: rgba(255,255,255,0.65); }

/* ── FINAL CTA ── */
.final-cta { padding: 110px 40px; background: var(--dark); text-align: center; position: relative; overflow: hidden; }
.final-cta::before { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse 60% 60% at 50% 50%, rgba(90,173,110,0.12) 0%, transparent 70%); pointer-events: none; }
.final-cta h2 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: clamp(2.2rem, 4.5vw, 4rem); font-weight: 600; color: #fff; max-width: 760px; margin: 0 auto 18px; line-height: 1.12; position: relative; z-index: 1; }
.final-cta h2 em { color: var(--light-green); font-style: italic; }
.final-cta p { color: rgba(255,255,255,0.6); font-size: 1rem; max-width: 540px; margin: 0 auto 40px; line-height: 1.65; font-weight: 300; position: relative; z-index: 1; }
.final-cta-actions { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; position: relative; z-index: 1; }

/* ── FOOTER (uses <footer class="site-footer"> so the legacy footer snippet won't clobber it) ── */
.site-footer { background: #090f0a; color: rgba(255,255,255,0.6); padding: 72px 40px 40px; }
.footer-inner { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 48px; margin-bottom: 48px; }
.footer-brand img { height: 36px; margin-bottom: 16px; filter: brightness(0) invert(1) opacity(0.8); }
.footer-brand p { font-size: 0.83rem; line-height: 1.65; color: rgba(255,255,255,0.5); margin-bottom: 16px; font-weight: 300; }
.footer-brand .contact a { color: rgba(255,255,255,0.6); text-decoration: none; font-size: 0.82rem; display: block; margin-bottom: 4px; }
.footer-brand .contact a:hover { color: var(--light-green); }
.footer-col h5 { color: rgba(255,255,255,0.85); font-size: 0.8rem; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 18px; }
.footer-col a { display: block; color: #66ad6c !important; text-decoration: none; font-size: 0.82rem; margin-bottom: 8px; transition: color 0.2s; }
.footer-col a:hover { color: #fff !important; }
.footer-bottom { max-width: var(--maxw); margin: 0 auto; padding-top: 32px; border-top: 1px solid rgba(255,255,255,0.06); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; font-size: 0.78rem; color: rgba(255,255,255,0.35); }
.footer-bottom a { color: rgba(255,255,255,0.35); text-decoration: none; }
.footer-bottom a:hover { color: rgba(255,255,255,0.6); }

/* ── SPEC / COMPARISON TABLE ── */
.spec-wrap { max-width: var(--maxw); margin: 0 auto; overflow-x: auto; border: 1px solid var(--border); border-radius: 16px; background: #fff; position: relative; z-index: 1; }
.spec-table { width: 100%; min-width: 760px; border-collapse: collapse; font-size: 0.88rem; }
.spec-table th, .spec-table td { padding: 14px 18px; text-align: center; border-bottom: 1px solid var(--border); }
.spec-table thead th { background: var(--green); color: #fff; font-weight: 600; font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.05rem; }
.spec-table thead th:first-child, .spec-table tbody td:first-child { text-align: left; }
.spec-table tbody td:first-child { font-weight: 600; color: var(--dark); background: var(--pale); }
.spec-table tbody tr:hover td { background: var(--mint); }
.spec-table .yes { color: var(--green); font-weight: 700; }
.spec-table .no { color: #c0cfc4; }
.spec-table .section-row td { background: var(--forest); color: #fff; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; font-size: 0.74rem; text-align: left; }

/* ── PRICE TABLE — inherits the page accent (theme token driven) ── */
.price-wrap { max-width: 860px; margin: 0 auto; overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--border); border-radius: 16px; background: var(--pale); position: relative; z-index: 1; box-shadow: 0 12px 40px rgba(13,31,18,0.06); }
.price-table { width: 100%; min-width: 560px; border-collapse: collapse; font-size: 0.92rem; }
.price-table thead th { background: var(--green); color: #fff; font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.1rem; font-weight: 600; padding: 16px 24px; text-align: left; }
.price-table tbody td { padding: 16px 24px; border-bottom: 1px solid var(--border); color: var(--text); vertical-align: middle; }
.price-table tbody tr:last-child td { border-bottom: none; }
.price-table tbody tr:nth-child(even) td { background: var(--mint); }
.price-table td:first-child { font-weight: 600; color: var(--forest); }
.price-table .price { font-weight: 700; color: var(--green); white-space: nowrap; }
.price-table .card-link { margin-top: 0; }

/* Flat, non-interactive pill (e.g. hero reassurance ticks) — not a button. */
.pill.static { background: transparent; border: none; padding: 4px 2px; color: var(--muted); font-weight: 500; }
.pill.static:hover { background: transparent; border: none; color: var(--muted); }

/* ── LEGAL / PROSE (terms, policy) ── */
.legal { max-width: 820px; margin: 0 auto; color: var(--text); font-size: 1rem; line-height: 1.75; }
.legal h2 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.9rem; font-weight: 600; color: var(--dark); margin: 36px 0 14px; }
.legal h3 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; font-size: 1.35rem; font-weight: 600; color: var(--dark); margin: 28px 0 10px; }
.legal h2:first-child, .legal h3:first-child { margin-top: 0; }
.legal p { margin: 0 0 16px; color: var(--muted); }
.legal ul, .legal ol { margin: 0 0 16px; padding-left: 22px; color: var(--muted); }
.legal li { margin: 0 0 8px; }
.legal a { color: var(--green); text-decoration: underline; }
.legal a:hover { color: var(--forest); }
.legal strong { color: var(--dark); }

/* ── LEGACY FOOTER restyled for cfp-2026 (snippet-managed bare <footer>; new fonts, full-width dark, keeps the square logo + ISO trust mark + social) ── */
footer { background: var(--dark); color: rgba(255,255,255,0.6); padding: 66px 40px 36px; margin: 0; font-family: 'DM Sans', 'DM Sans Fallback', sans-serif; font-size: 1rem; }
footer .container { max-width: none; margin: 0; padding: 0; width: auto; }
footer .container > .row { display: grid; grid-template-columns: 1.7fr 1fr 1fr 1fr 1.5fr; gap: 48px; margin: 0; }
footer .col-md-12 { width: 100%; padding: 0; }
footer .footer-widget h4 { font-family: 'Cormorant Garamond', 'Cormorant Fallback', serif; color: #fff; font-size: 1.35rem; font-weight: 600; margin: 0 0 16px; }
footer .footer-widget p { font-size: 0.84rem; line-height: 1.6; color: rgba(255,255,255,0.55); margin: 0 0 6px; }
footer .footer-widget img { max-width: 100%; height: auto; }
footer .footer-links { list-style: none; padding: 0; margin: 0; }
footer .footer-links li { margin: 0 0 9px; padding: 0; background: none; }
footer .footer-links a, footer .footer-widget > a { color: rgba(255,255,255,0.55); text-decoration: none; font-size: 0.84rem; transition: color 0.2s; }
footer .footer-links a:hover { color: var(--light-green); }
footer a { color: var(--light-green); text-decoration: none; }
footer a:hover { color: #fff; }
footer .footer-share-button { list-style: none; padding: 0; margin: 16px 0 0; display: flex; gap: 14px; }
footer .footer-share-button li { margin: 0; padding: 0; background: none; }
footer .footer-share-button a { color: rgba(255,255,255,0.6); font-size: 1.15rem; }
footer .footer-share-button a:hover { color: var(--light-green); }
/* NB: must match/beat the specificity of `footer .container > .row` above, or
   the columns never collapse and the footer overflows the screen on mobile. */
@media (max-width: 960px) { footer { padding: 56px 24px 32px; } footer .container > .row { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) {
  footer .container > .row { grid-template-columns: 1fr; gap: 36px; text-align: center; }
  /* Declutter the footer on phones: drop the two middle link columns
     (Our Platforms + Company) — those links also live in the top nav. */
  footer .container > .row > div:nth-child(3),
  footer .container > .row > div:nth-child(4) { display: none; }
  /* Centre and clean up the stacked footer on phones. */
  footer .footer-widget img { margin-left: auto; margin-right: auto; }
  footer .footer-share-button { justify-content: center; }
  /* Stack the legal bar (terms/cookie links, registration blurb, copyright) in a
     single centred column. The flex container has an inline justify-content that
     would otherwise win, so switch to a centred column where alignment is driven
     by align-items (not the inline justify-content). */
  footer .footer-legal > div { flex-direction: column; align-items: center; text-align: center; gap: 10px; }
  /* The middle blurb carries an inline `flex: 1 1 320px`; in the new column
     layout that 320px basis becomes a 320px height and flex-grow:1 stretches it,
     leaving a large empty gap before the copyright line. Force the blocks to
     size to their content so the stack stays tight. */
  footer .footer-legal > div > div { text-align: center !important; flex: 0 0 auto !important; }
}

/* ── ANIMATIONS ── */
@keyframes fadeUp { from { opacity: 0; transform: translateY(22px); } to { opacity: 1; transform: translateY(0); } }
.fade-up { animation: fadeUp 0.7s ease forwards; }
.delay-1 { animation-delay: 0.1s; opacity: 0; }
.delay-2 { animation-delay: 0.25s; opacity: 0; }
.delay-3 { animation-delay: 0.4s; opacity: 0; }
.delay-4 { animation-delay: 0.55s; opacity: 0; }

/* ── RESPONSIVE ── */

/* Compact the full desktop nav on mid-size laptops (≈1280–1440) so the six
   menu items + login + two buttons + search fit on one line instead of
   wrapping onto two rows ("crushed" buttons). Below 1200px the nav collapses
   to the hamburger (see next block); above 1500px the full-spacing nav has
   room again. */
@media (min-width: 1201px) and (max-width: 1500px) {
  .site-nav { padding: 0 26px; }
  .nav-links { margin-left: 18px; gap: 0; }
  .nav-links > li > a { padding: 8px 9px; font-size: 0.8rem; }
  .nav-actions { gap: 8px; }
  .nav-login { font-size: 0.8rem; padding: 8px 4px; }
  .nav-actions .btn { padding: 9px 16px; font-size: 0.8rem; }
}

/* Collapse the nav to the hamburger ("waffle") menu on tablets and smaller
   laptops. Raised from 960px → 1200px because the full nav doesn't fit below
   ~1200px and the top buttons would otherwise wrap/crush. */
@media (max-width: 1200px) {
  .top-bar { padding: 9px 20px; }
  .site-nav { padding: 0 20px; flex-wrap: wrap; height: auto; min-height: 72px; }
  /* When open, the menu becomes a full-height overlay: the logo stays top-left,
     the close (X) toggle stays top-right, the dropdown options scroll in the
     middle, and the search + action buttons are anchored to the bottom so they
     always stay on screen no matter how many accordion rows are expanded. */
  .site-nav.open { position: fixed; inset: 0; z-index: 1000; height: 100dvh; max-height: 100dvh; flex-direction: column; flex-wrap: nowrap; align-items: stretch; overflow: hidden; padding: 0 20px 14px; background: var(--white); }
  /* Keep the logo + toggle on the first row; menu + actions wrap below. */
  .nav-logo { order: 0; }
  .site-nav.open .nav-logo { flex: 0 0 auto; height: 72px; display: flex; align-items: center; }
  .nav-toggle { display: block; order: 1; margin-left: auto; }
  .site-nav.open .nav-toggle { position: absolute; top: 0; right: 20px; height: 72px; margin-left: 0; }
  .nav-links { order: 2; display: none; flex-basis: 100%; flex-direction: column; align-items: stretch; height: auto; margin-left: 0; gap: 0; margin-top: 6px; border-top: 1px solid var(--border); }
  .site-nav.open .nav-links { display: flex; flex: 1 1 auto; min-height: 0; margin-top: 0; overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }
  .nav-links > li { display: block; border-bottom: 1px solid var(--border); }
  .nav-links > li > a { padding: 13px 8px; font-size: 0.95rem; border-radius: 0; }
  /* Turn each dropdown into a tap-to-expand accordion row so the open menu
     stays short and the search + action buttons are reachable without a long
     scroll. The caret flips when the row is expanded (li.open, set by JS). */
  .nav-links > li > a.has-drop { display: flex; align-items: center; justify-content: space-between; }
  .nav-links > li > a.has-drop::after { content: '⌄'; margin-left: 8px; font-size: 1.15em; line-height: 1; transition: transform 0.2s ease; }
  .nav-links > li.open > a.has-drop::after { transform: rotate(180deg); }
  .dropdown { position: static; display: none; border: none; box-shadow: none; padding: 2px 0 10px 14px; min-width: 0; }
  /* Neutralise the desktop hover/focus-within reveal in the menu: on touch the
     tapped link keeps :focus-within, which would otherwise hold the dropdown
     open even after JS clears `.open`, making rows impossible to collapse. */
  .nav-links > li:hover > .dropdown, .nav-links > li:focus-within > .dropdown { display: none; }
  .nav-links > li.open > .dropdown { display: block; }
  .dropdown a { padding: 9px 10px; font-size: 0.9rem; }
  .dropdown .section-label { padding: 8px 10px 2px; }
  .nav-spacer { display: none; }
  /* Action buttons stack full-width so they never crush. Anchored to the bottom
     of the open overlay (flex: 0 0 auto) with the search on top, so they stay on
     screen while the options scroll above. */
  .nav-actions { order: 3; display: none; flex-basis: 100%; flex-direction: column; align-items: stretch; gap: 10px; margin-top: 12px; }
  .site-nav.open .nav-actions { display: flex; flex: 0 0 auto; margin-top: 0; padding-top: 14px; border-top: 1px solid var(--border); }
  .nav-actions .btn, .nav-login { width: 100%; text-align: center; }
  .nav-login { padding: 11px 6px; border: 1px solid var(--border); border-radius: 50px; }
  /* In-menu search: show a full-width input inline instead of the tiny
     38px toggle+popover (which rendered only 38px wide and was unusable). */
  .nav-search { order: -1; width: 100%; display: block; }
  .nav-search-toggle { display: none; }
  .nav-search-panel { display: block; position: static; width: 100%; max-width: 100%; padding: 0; border: none; box-shadow: none; }
  .nav-search-input { font-size: 1rem; }
  /* Cap in-menu search results so the action buttons below stay on screen. */
  .nav-search-results { max-height: 38vh; }
}
@media (max-width: 960px) {
  .page-hero-inner, .row-inner { grid-template-columns: 1fr; gap: 40px; }
  .row.reverse .row-inner > .row-text { order: 1; } .row.reverse .row-inner > .row-visual { order: 2; }
  .card-grid, .card-grid.cols-3, .reviews-grid, .projects-grid, .duo { grid-template-columns: 1fr; }
  .reviews-grid.cols-4, .card-grid.cols-4 { grid-template-columns: 1fr 1fr; }
  .pathway-grid, .pathway-grid.cols-6 { grid-template-columns: 1fr 1fr; }
  .footer-inner { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 560px) {
  .pathway-grid, .pathway-grid.cols-6, .pathway-grid.cols-3, .footer-inner, .reviews-grid.cols-4, .card-grid.cols-4 { grid-template-columns: 1fr; }
  .hero, .page-hero, section.row, .section, .final-cta { padding-left: 22px; padding-right: 22px; }
  .hero-stats { flex-direction: column; } .stat-item { border-right: none; border-bottom: 1px solid rgba(13,31,18,0.08); }
}

/* ── "My Footprint" B2C nudge — non-modal slide-in card (injected by cfp-2026-styles.js).
   Warm-orange accent deliberately contrasts the green B2B CTAs to flag "this one's
   for individuals". Non-blocking + dismissible (see APG guidance / SEO interstitials). ── */
:root { --vita-accent: #e8612e; --vita-accent-dark: #cf5424; }

/* ── Per-page colour themes ──
   Remap the green-family design tokens on <body> so an entire page (nav, grid,
   buttons, badges, links, search) adopts a different accent. Add the class to
   the page's <body>. Add more themes here by copying a block. ── */
body.theme-vita {            /* Sustrax Vita — warm orange (B2C / personal) */
  --green: #e8612e; --forest: #b9491d; --mid: #e8612e; --light-green: #f2935f;
  --mint: #fdeee6; --pale: #fdf3ec; --border: #f6dccd;
  --grid-line: rgba(232,97,46,0.06);
}
body.theme-cadi {            /* CaDI database — pale blue */
  --green: #2f6fb0; --forest: #1f4f80; --mid: #3f82c4; --light-green: #6fa8d6;
  --mint: #e9f1fa; --pale: #f1f7fc; --border: #cfe1f1;
  --grid-line: rgba(47,111,176,0.06);
}
body.theme-sustrax {         /* Sustrax MX — purple (B2B platform) */
  --green: #5b3a96; --forest: #3f2768; --mid: #6f4bb0; --light-green: #9170c6;
  --mint: #ede5f9; --pale: #f7f3fd; --border: #e2d6f4;
  --grid-line: rgba(91,58,150,0.06);
}
/* Per-page themes recolour the page body only — keep the global header (nav,
   top bar) and footer on the brand green palette so their links don't get tinted. */
.top-bar, .site-nav, footer {
  --green: #2d6a3f; --forest: #1a3a22; --mid: #3e8a52; --light-green: #5aad6e;
  --mint: #e8f4eb; --pale: #f2f9f4; --border: #d0e8d5;
  --grid-line: rgba(45,106,63,0.05);
}
/* Dark-footer legibility: brighter green (easier for low-vision / colour-blind
   users to pick out against the dark-green footer) and higher-contrast links. */
footer { --light-green: #82cf98; }
footer .footer-links a, footer .footer-widget > a { color: #66ad6c !important; }
footer .footer-links a:hover, footer .footer-widget > a:hover { color: #fff !important; }
/* Email link + social icons: match the same green as the footer links. */
footer .footer-widget p a, footer .footer-share-button a { color: #66ad6c !important; }
footer .footer-widget p a:hover, footer .footer-share-button a:hover { color: #fff !important; }
.vita-cta { position: fixed; right: 22px; bottom: 22px; z-index: 1200; width: 340px; max-width: calc(100vw - 44px);
  background: #fff;
  border: none; border-top: 4px solid var(--vita-accent);
  border-radius: 16px; box-shadow: 0 18px 48px rgba(13,31,18,0.28), inset 0 1px 0 rgba(255,255,255,0.5); padding: 18px 20px 18px 18px;
  font-family: 'DM Sans', 'DM Sans Fallback', sans-serif; transform: translateY(150%); opacity: 0;
  transition: transform .42s cubic-bezier(.16,.84,.44,1), opacity .42s ease; }
.vita-cta.show { transform: translateY(0); opacity: 1; }
.vita-cta-close { position: absolute; top: 8px; right: 10px; width: 28px; height: 28px; padding: 0; border: none;
  background: transparent; color: var(--muted); font-size: 1.3rem; line-height: 1; cursor: pointer; border-radius: 6px; }
.vita-cta-close:hover { background: var(--pale); color: var(--text); }
.vita-cta-eyebrow { font-size: .72rem; letter-spacing: .12em; text-transform: uppercase; color: var(--vita-accent); font-weight: 700; }
.vita-cta-title { font-family: 'Cormorant Garamond', 'Cormorant Fallback', Georgia, serif; font-size: 1.5rem; line-height: 1.12; color: var(--text); margin: 4px 24px 6px 0; text-shadow: 0 1px 3px rgba(255,255,255,0.7); }
.vita-cta-text { font-size: .9rem; color: var(--muted); margin: 0 0 14px; line-height: 1.4; text-shadow: 0 1px 2px rgba(255,255,255,0.7); }
.vita-cta-btn { display: inline-block; background: var(--vita-accent); color: #fff; text-decoration: none; font-weight: 600;
  font-size: .92rem; padding: 10px 18px; border-radius: 8px; transition: background .2s, transform .2s; }
.vita-cta-btn:hover { background: var(--vita-accent-dark); transform: translateY(-1px); }
/* On phones the nudge shrinks to a sleek, title-first toast: the descriptive
   paragraph is dropped so it's just the eyebrow + title + button. */
@media (max-width: 560px) {
  .vita-cta { left: 12px; right: 12px; bottom: 12px; width: auto; padding: 13px 16px; border-radius: 13px; }
  .vita-cta-title { font-size: 1.15rem; margin: 2px 28px 0 0; }
  .vita-cta-text { display: none; }
  .vita-cta-btn { margin-top: 11px; font-size: .85rem; padding: 8px 16px; }
}
@media (prefers-reduced-motion: reduce) { .vita-cta { transition: opacity .3s ease; transform: none; } }

/* ── Cookie consent (cdnjs cookieconsent2 v3.0.3) restyled for cfp-2026 ──────
   The library ships a tall, full-width banner pinned to the top of the page.
   On the newer pages we keep that top placement (so it never collides with the
   homepage corner nudges below) but slim it down into a sleek, low-profile bar:
   reduced height, smaller text, a subtle translucent dark backdrop and a pill
   button. The library stylesheet loads after cfp-2026.css and the palette sets
   inline background styles, so the layout overrides need !important to win.
   This is purely a restyle — the consent behaviour (dismiss + remembered in the
   cookieconsent_status cookie) is untouched. */
.cc-window.cc-banner {
  padding: 9px 18px !important;
  display: flex !important; flex-wrap: wrap; align-items: center !important;
  justify-content: center; gap: 6px 18px;
  background: rgba(20, 28, 23, 0.96) !important;
  box-shadow: 0 6px 22px rgba(13, 31, 18, 0.22);
  font-family: 'DM Sans', 'DM Sans Fallback', sans-serif;
}
.cc-window.cc-banner .cc-message {
  flex: 0 1 auto; margin: 0 !important;
  font-size: 0.8rem; line-height: 1.45; color: rgba(255, 255, 255, 0.82);
}
.cc-window .cc-link { padding: 0; opacity: 1; }
.cc-window .cc-compliance { flex: 0 0 auto; margin: 0; }
.cc-window .cc-btn {
  border: none !important; border-radius: 50px !important;
  min-height: 0 !important; padding: 7px 20px !important;
  font-size: 0.8rem; font-weight: 600; white-space: nowrap;
}
@media (max-width: 560px) {
  .cc-window.cc-banner { padding: 6px 12px !important; gap: 4px 10px; }
  .cc-window.cc-banner .cc-message {
    font-size: 0.68rem; line-height: 1.3; flex-basis: 100%; text-align: center;
  }
  .cc-window .cc-compliance { flex-basis: auto; }
  .cc-window .cc-btn { padding: 5px 16px !important; font-size: 0.72rem; }
}

/* ---- Section-links banner (generated by scripts/rebuild-section-links.js) ----
   A compact, image-free strip above the footer linking to sibling pages in the
   same nav group. One per grouped page; drives contextual internal linking. */
.section-links { background: var(--dark); border-top: 1px solid rgba(255,255,255,0.08); padding: 26px 40px; }
.section-links-inner { max-width: var(--maxw); margin: 0 auto; display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 22px; }
.section-links-tag { font-size: .78rem; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; color: rgba(255,255,255,0.85); white-space: nowrap; flex: 0 0 auto; }
.section-links-nav { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.section-links-nav a { font-size: .9rem; line-height: 1.5; color: rgba(255,255,255,0.6); text-decoration: none; transition: color 0.2s; }
.section-links-nav a:hover { color: var(--light-green); }
@media (max-width: 640px) { .section-links { padding: 22px 16px; } .section-links-nav a { font-size: .88rem; } }

/* ---- Long-form content pages (migrated from legacy) ----
   These carry free prose/lists, not just cards, so: keep the reading measure
   sane, style inline links (cfp-2026 previously only styled buttons/nav/footer,
   so prose <a> fell back to browser blue), rein in stray full-width images, and
   normalise the preserved legacy archive font. All scoped to direct children of
   .section (or .legacy-content) so header-page card/row layouts are untouched. */
.section > p,
.section > ul,
.section > ol,
.section > h3,
.section > h4,
.section > .feature-list,
.section > .feature-card { max-width: 760px; margin-left: auto; margin-right: auto; }
.section > .feature-list { margin-top: 0; }
.section > p,
.section > .feature-list > p,
.section > .feature-card > p { font-size: 1rem; line-height: 1.7; color: var(--text); margin-bottom: 16px; }
.section > .img-frame { max-width: 860px; margin: 24px auto 0; }

/* Inline prose links (anything that isn't a button/card link or whole-card link) */
.section a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill),
.row a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill) { color: var(--green); text-decoration: underline; text-underline-offset: 2px; }
.section a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill):hover,
.row a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill):hover { color: var(--forest); }
.row.dark a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill),
.section.dark a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill) { color: var(--light-green); }
.row.dark a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill):hover,
.section.dark a:not(.btn):not(.card-link):not(.feature-card):not(.path-card):not(.project-card):not(.pill):hover { color: #fff; }

/* Preserved legacy archive content (e.g. weekly_tips) — force the site font
   over the old CMS's inline font-family declarations. */
.legacy-content, .legacy-content * { font-family: 'DM Sans', 'DM Sans Fallback', sans-serif !important; }
.legacy-content a { color: var(--green); }

/* Reference / further-reading lists — clean divided rows, no benefit-style
   checkmarks (use this instead of .feature-list for links & citations). */
.link-list { list-style: none; max-width: 820px; margin: 0 auto; padding: 0; }
.link-list li { padding: 18px 2px; border-bottom: 1px solid var(--border); font-size: 0.95rem; line-height: 1.65; color: var(--muted); }
.link-list li:last-child { border-bottom: none; }
.link-list li > a:first-child { font-weight: 600; font-size: 1.02rem; color: var(--green); text-decoration: none; }
.link-list li > a:first-child:hover { text-decoration: underline; }
.link-list .ll-desc { display: block; color: var(--muted); margin-top: 3px; }

/* Sustrax calculator embeds — give the iframe a solid white backdrop so the
   page's grid background can't show through the (transparent) embed, and keep
   it full-width. (Targets the *_iframe ids and .sustrax-frame, not video/booking
   iframes.) */
iframe[id$="_iframe"], iframe.sustrax-frame { background: #fff; width: 100%; }

/* ── White-paper download modal (email capture before download) ── */
@keyframes wpFadeIn { from { opacity: 0; } to { opacity: 1; } }
.wp-modal { position: fixed; inset: 0; z-index: 1300; display: none; align-items: center; justify-content: center; padding: 20px; background: rgba(13,31,18,0.55); -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); }
.wp-modal.show { display: flex; animation: wpFadeIn 0.16s ease; }
.wp-modal-card { position: relative; width: 100%; max-width: 440px; background: #fff; border-radius: 18px; padding: 34px 32px 28px; box-shadow: 0 24px 70px rgba(13,31,18,0.3); }
.wp-modal-card h3 { font-size: 1.45rem; margin-bottom: 6px; }
.wp-modal-paper { color: var(--green); font-weight: 600; font-size: 0.9rem; margin-bottom: 18px; }
.wp-modal-paper:empty { display: none; }
.wp-modal-close { position: absolute; top: 12px; right: 16px; background: none; border: none; font-size: 1.7rem; line-height: 1; color: var(--muted); cursor: pointer; }
.wp-modal-close:hover { color: var(--text); }
.wp-modal-label { display: block; font-size: 0.82rem; font-weight: 600; margin: 14px 0 6px; color: var(--text); }
.wp-modal-row { display: flex; gap: 12px; }
.wp-modal-row .wp-modal-label { margin-top: 0; }
.wp-modal-field { flex: 1 1 0; min-width: 0; }
.wp-opt { font-weight: 400; color: var(--muted); }
.wp-modal-input { width: 100%; padding: 13px 16px; font-family: inherit; font-size: 0.95rem; color: var(--text); border: 1.5px solid var(--border); border-radius: 10px; outline: none; transition: border-color 0.2s, box-shadow 0.2s; }
.wp-modal-input:focus { border-color: var(--green); box-shadow: 0 0 0 3px var(--mint); }
.wp-modal-submit { width: 100%; margin-top: 16px; justify-content: center; }
.wp-modal-msg { margin-top: 12px; font-size: 0.9rem; font-weight: 500; }
.wp-modal-msg.ok { color: var(--green); }
.wp-modal-msg.err { color: #c0392b; }
.wp-modal-consent { margin-top: 14px; font-size: 0.75rem; color: var(--muted); line-height: 1.5; }
.wp-modal-consent a { color: var(--green); }
.wp-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; opacity: 0; }

/* ── Split feature: title in the left column (vertically centred to the
   cards), a 2x2 block of compact cards in the right column. No sticky. ── */
.split-feature { max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: 2fr 3fr; gap: 48px; align-items: center; position: relative; z-index: 1; }
.split-feature-head { max-width: none; margin: 0; }
.split-feature-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.split-feature-cards .feature-card { padding: 22px 24px; border-radius: 16px; display: flex; flex-direction: column; justify-content: center; }
.split-feature-cards .feature-card h3 { margin-bottom: 6px; }
.split-feature-cards .feature-card p { margin-bottom: 0; }
@media (max-width: 860px) { .split-feature { grid-template-columns: 1fr; gap: 28px; } }
@media (max-width: 560px) { .split-feature-cards { grid-template-columns: 1fr; } }

/* ── YouTube facade: thumbnail + play button that loads the real player only
   on click. Keeps YouTube's chrome (share, "watch on YouTube", info panels)
   off the page until the visitor opts in, and speeds up page load. ── */
.yt-facade { position: absolute; inset: 0; width: 100%; height: 100%; padding: 0; margin: 0; border: 0; cursor: pointer; background: #000; overflow: hidden; display: block; }
.yt-facade-thumb { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.yt-facade::after { content: ''; position: absolute; inset: 0; background: rgba(13,31,18,0.18); transition: background 0.2s; }
.yt-facade:hover::after, .yt-facade:focus-visible::after { background: rgba(13,31,18,0.05); }
.yt-facade-play { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 74px; height: 52px; border-radius: 14px; background: rgba(13,31,18,0.72); display: flex; align-items: center; justify-content: center; transition: transform 0.2s, background 0.2s; z-index: 1; }
.yt-facade:hover .yt-facade-play, .yt-facade:focus-visible .yt-facade-play { background: var(--green); transform: translate(-50%, -50%) scale(1.08); }
.yt-facade-play::after { content: ''; border-style: solid; border-width: 10px 0 10px 17px; border-color: transparent transparent transparent #fff; margin-left: 4px; }
.yt-facade::before { content: attr(data-title); position: absolute; top: 0; left: 0; right: 0; z-index: 2; padding: 14px 18px 34px; background: linear-gradient(to bottom, rgba(13,31,18,0.78) 0%, rgba(13,31,18,0) 100%); color: #fff; font-weight: 600; font-size: 1rem; line-height: 1.3; text-align: left; pointer-events: none; }

