/* ============================================================
   THE VERITAS COMPANIES — SHARED STYLESHEET
   ============================================================
   👋 START HERE TO EDIT YOUR SITE.

   Everything you'll commonly want to change — COLORS, FONTS,
   and SPACING — lives in the :root block right below.
   Change a value ONCE here and it updates everywhere.

   Want to swap a logo? See README.md (it's a 1-file drop-in).
   ============================================================ */

:root {
  /* -----------------------------------------------------------
     1) BRAND COLORS — edit these hex codes to rebrand instantly
     ----------------------------------------------------------- */

  /* VERITAS VENTURES (main page) */
  --vv-accent:        #F05510;  /* Burnt Orange  */
  --vv-accent-hover:  #d8480c;  /* darker orange on hover */
  --vv-charcoal:      #11161C;  /* Charcoal (page background) */
  --vv-slate:         #2A313B;  /* Slate (cards / panels) */

  /* VERITAS BUILDERS (builders page) */
  --vb-accent:        #0066FF;  /* Electric Blue */
  --vb-accent-hover:  #0052cc;  /* darker blue on hover */
  --vb-navy:          #00111F;  /* Dark Navy (page background) */
  --vb-slate:         #28313B;  /* Slate Gray (cards / panels) */

  /* PLANNED DIVISIONS — used as per-card accents on the Ventures home */
  --vpm-accent:       #10B981;  /* Emerald Green — Property Management */
  --vc-accent:        #8B5CF6;  /* Purple — Community / Nonprofit */

  /* Shared neutrals */
  --white:            #FFFFFF;
  --text-soft:        rgba(255, 255, 255, 0.72);
  --text-faint:       rgba(255, 255, 255, 0.50);
  --border-soft:      rgba(255, 255, 255, 0.10);
  --border-mid:       rgba(255, 255, 255, 0.16);

  /* -----------------------------------------------------------
     2) ACTIVE THEME — these point at one brand above.
        index.html sets data-brand="ventures" (default).
        builders.html sets data-brand="builders".
        You normally do NOT need to touch these.
     ----------------------------------------------------------- */
  --accent:       var(--vv-accent);
  --accent-hover: var(--vv-accent-hover);
  --bg:           var(--vv-charcoal);
  --panel:        var(--vv-slate);

  /* -----------------------------------------------------------
     3) FONTS — Ventures uses Montserrat, Builders uses Poppins.
        Both are loaded in the <head> of each HTML file.
     ----------------------------------------------------------- */
  --font-ventures: 'Montserrat', 'Helvetica Neue', Arial, sans-serif;
  --font-builders: 'Poppins', 'Helvetica Neue', Arial, sans-serif;
  --font:          var(--font-ventures);

  /* -----------------------------------------------------------
     4) TYPE SCALE (fluid — scales with screen size)
     ----------------------------------------------------------- */
  --text-xs:   clamp(0.75rem, 0.7rem + 0.25vw, 0.85rem);
  --text-sm:   clamp(0.875rem, 0.8rem + 0.35vw, 1rem);
  --text-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
  --text-lg:   clamp(1.125rem, 1rem + 0.6vw, 1.45rem);
  --text-xl:   clamp(1.6rem, 1.2rem + 1.5vw, 2.4rem);
  --text-2xl:  clamp(2.2rem, 1.4rem + 3.2vw, 4rem);
  --text-hero: clamp(2.8rem, 1.5rem + 5.5vw, 6rem);

  /* -----------------------------------------------------------
     5) SPACING (4px system)
     ----------------------------------------------------------- */
  --space-2:  0.5rem;
  --space-3:  0.75rem;
  --space-4:  1rem;
  --space-6:  1.5rem;
  --space-8:  2rem;
  --space-10: 2.5rem;
  --space-12: 3rem;
  --space-16: 4rem;
  --space-20: 5rem;
  --space-24: 6rem;

  --radius:    14px;
  --radius-sm: 8px;
  --content:   1180px;
  --ease:      cubic-bezier(0.16, 1, 0.3, 1);
}

/* When a page is the Builders page, swap the active theme tokens. */
[data-brand="builders"] {
  --accent:       var(--vb-accent);
  --accent-hover: var(--vb-accent-hover);
  --bg:           var(--vb-navy);
  --panel:        var(--vb-slate);
  --font:         var(--font-builders);
}

/* ============================================================
   BASE RESET (you rarely need to touch anything below here)
   ============================================================ */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

html {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  scroll-behavior: smooth;
  scroll-padding-top: 90px;
}

body {
  min-height: 100dvh;
  font-family: var(--font);
  font-size: var(--text-base);
  line-height: 1.65;
  color: var(--white);
  background: var(--bg);
  overflow-x: hidden;
}

img, svg, video { display: block; max-width: 100%; height: auto; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; }
button { cursor: pointer; background: none; border: none; color: inherit; font: inherit; }

h1, h2, h3, h4 { line-height: 1.1; text-wrap: balance; font-weight: 700; letter-spacing: -0.01em; }
p { text-wrap: pretty; }

::selection { background: var(--accent); color: var(--white); }

:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: var(--radius-sm); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================
   LAYOUT HELPERS
   ============================================================ */
.container {
  width: 100%;
  max-width: var(--content);
  margin-inline: auto;
  padding-inline: var(--space-6);
}

.section {
  padding-block: clamp(var(--space-16), 9vw, var(--space-24));
}

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--accent);
  margin-bottom: var(--space-4);
}
.eyebrow::before {
  content: "";
  width: 28px;
  height: 2px;
  background: var(--accent);
}

.section-title {
  font-size: var(--text-xl);
  margin-bottom: var(--space-4);
}
.section-lead {
  font-size: var(--text-base);
  color: var(--text-soft);
  max-width: 60ch;
}

/* ============================================================
   HEADER / NAV
   ============================================================ */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: color-mix(in srgb, var(--bg) 82%, transparent);
  backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--border-soft);
  transition: box-shadow 0.3s var(--ease);
}
.site-header.scrolled { box-shadow: 0 8px 30px rgba(0, 0, 0, 0.35); }

.nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 72px;
}
.nav-links {
  display: flex;
  align-items: center;
  gap: var(--space-8);
}
.nav-links a {
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-soft);
  transition: color 0.2s var(--ease);
}
.nav-links a:hover { color: var(--white); }

.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-sm);
  font-weight: 600;
  letter-spacing: 0.02em;
  padding: 0.7rem 1.4rem;
  border-radius: var(--radius-sm);
  transition: transform 0.2s var(--ease), background 0.2s var(--ease), box-shadow 0.2s var(--ease);
}
.btn-primary {
  background: var(--accent);
  color: var(--white);
  box-shadow: 0 6px 20px color-mix(in srgb, var(--accent) 35%, transparent);
}
.btn-primary:hover { background: var(--accent-hover); transform: translateY(-2px); }
.btn-ghost {
  border: 1px solid var(--border-mid);
  color: var(--white);
}
.btn-ghost:hover { border-color: var(--accent); color: var(--accent); }

/* Cross-brand modifier: ghost button points back to Veritas Ventures, so
   paint its hover state in the Ventures orange rather than Builders blue.
   The text/border tint a little orange even at rest so the parent-brand
   reference reads clearly. */
.btn-ghost.btn-ventures {
  color: var(--vv-accent);
  border-color: color-mix(in srgb, var(--vv-accent) 55%, transparent);
}
.btn-ghost.btn-ventures:hover {
  border-color: var(--vv-accent);
  color: var(--vv-accent-hover);
}

.nav-toggle { display: none; }

/* ============================================================
   LOGO (text/CSS version — swap for an <img> later, see README)
   ============================================================ */
.logo {
  display: inline-flex;
  align-items: center;
  gap: var(--space-3);
  font-weight: 800;
  letter-spacing: 0.04em;
}
.logo-mark {
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 9px;
  background: linear-gradient(145deg, var(--accent), color-mix(in srgb, var(--accent) 60%, #000));
  color: var(--white);
  font-weight: 800;
  font-size: 1.05rem;
  letter-spacing: 0;
  box-shadow: 0 4px 14px color-mix(in srgb, var(--accent) 30%, transparent);
}
.logo-text { display: flex; flex-direction: column; line-height: 1; }
.logo-text .lt-main { font-size: 1rem; font-weight: 800; }
.logo-text .lt-sub {
  font-size: 0.62rem;
  font-weight: 600;
  letter-spacing: 0.32em;
  color: var(--accent);
  margin-top: 3px;
}

/* ============================================================
   HERO
   ============================================================ */
.hero {
  position: relative;
  min-height: 88vh;
  display: flex;
  align-items: center;
  overflow: hidden;
}
.hero-bg {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(1100px 600px at 78% 18%, color-mix(in srgb, var(--accent) 22%, transparent), transparent 60%),
    radial-gradient(900px 700px at 12% 88%, color-mix(in srgb, var(--panel) 70%, transparent), transparent 60%);
  z-index: 0;
}
.hero-grid {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image:
    linear-gradient(var(--border-soft) 1px, transparent 1px),
    linear-gradient(90deg, var(--border-soft) 1px, transparent 1px);
  background-size: 64px 64px;
  mask-image: radial-gradient(ellipse 90% 70% at 50% 40%, #000 30%, transparent 75%);
  opacity: 0.5;
}
.hero-inner { position: relative; z-index: 1; max-width: 880px; }

/* Two-column hero: logo left, text right (in line with the title) */
.hero-split {
  max-width: var(--content);
  display: grid;
  grid-template-columns: minmax(220px, 320px) 1fr;
  gap: clamp(var(--space-8), 5vw, var(--space-20));
  align-items: center;
}
.hero-logo-col { display: flex; justify-content: center; }
.hero-text-col { min-width: 0; }
.hero-logo {
  width: 100%;
  max-width: 300px;
  height: auto;
}
.hero h1 {
  font-size: var(--text-hero);
  font-weight: 800;
  margin-bottom: var(--space-6);
}
.hero h1 .accent { color: var(--accent); }

/* Service landing pages: single-column hero, tighter H1 + lead. The marketing
   hero on builders.html scales the H1 up to 96px because it's in a 2-column
   split with the V3 logo; the service pages don't have that ballast, so the
   same size reads as oversized. Cap closer to 3.5rem and keep the lead at a
   readable measure. */
.hero.service-hero h1 {
  font-size: clamp(2rem, 1.2rem + 2.4vw, 3.25rem);
  line-height: 1.1;
}
.hero.service-hero .hero-lead {
  max-width: 62ch;
  font-size: var(--text-lg);
}
.hero-lead {
  font-size: var(--text-lg);
  color: var(--text-soft);
  max-width: 56ch;
  margin-bottom: var(--space-10);
}
.hero-actions { display: flex; flex-wrap: wrap; gap: var(--space-4); }

.tagline-strip {
  margin-top: var(--space-16);
  font-size: var(--text-sm);
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--text-faint);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
}
.tagline-strip .accent { color: var(--accent); font-weight: 600; }

/* ============================================================
   ABOUT  (asymmetric two-column)
   ============================================================ */
.about-grid {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  gap: clamp(var(--space-8), 5vw, var(--space-20));
  align-items: center;
}
.stat-cards {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-4);
}
.stat-card {
  background: var(--panel);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  padding: var(--space-6);
}
.stat-card .num {
  font-size: var(--text-xl);
  font-weight: 800;
  color: var(--accent);
}
.stat-card .lbl {
  font-size: var(--text-sm);
  color: var(--text-soft);
  margin-top: var(--space-2);
}

/* ============================================================
   COMPANIES CARDS
   ============================================================ */
.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--space-6);
  margin-top: var(--space-12);
}
.card {
  position: relative;
  background: var(--panel);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  padding: var(--space-8);
  transition: transform 0.3s var(--ease), border-color 0.3s var(--ease);
  overflow: hidden;
}
.card::after {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 3px;
  background: var(--card-accent, var(--accent));
}
.card:hover { transform: translateY(-6px); border-color: var(--border-mid); }
.card h3 { font-size: var(--text-lg); margin-bottom: var(--space-3); }
.card p { font-size: var(--text-sm); color: var(--text-soft); margin-bottom: var(--space-6); }
.card .card-link {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--card-accent, var(--accent));
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.card .card-link span { transition: transform 0.2s var(--ease); }
.card:hover .card-link span { transform: translateX(4px); }
.card .card-tag {
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-faint);
  margin-bottom: var(--space-4);
  display: block;
}

/* Thumbnail strip at the top of a blog card. Bleeds to the card edges
   (negates the card's inner padding) so it reads as a hero. 16/9 ratio
   keeps the cards visually consistent in the grid even when source
   images differ in aspect ratio. */
.card.has-thumb { padding-top: 0; }
.card .card-thumb {
  display: block;
  margin: 0 calc(-1 * var(--space-8)) var(--space-6);
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--accent) 22%, var(--panel)),
    color-mix(in srgb, var(--accent) 8%, var(--panel)));
  position: relative;
}
.card .card-thumb img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 0.5s var(--ease);
}
.card:hover .card-thumb img { transform: scale(1.04); }
/* Placeholder variant — no <img>, just the gradient with a faint
   grid pattern and a small "Cover image coming soon" label. */
.card .card-thumb.placeholder::after {
  content: "Cover image coming soon";
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: color-mix(in srgb, var(--accent) 70%, var(--white));
  background-image:
    linear-gradient(to right, color-mix(in srgb, var(--accent) 8%, transparent) 1px, transparent 1px),
    linear-gradient(to bottom, color-mix(in srgb, var(--accent) 8%, transparent) 1px, transparent 1px);
  background-size: 32px 32px;
}

/* ============================================================
   VALUES BAND
   ============================================================ */
.values {
  background: var(--panel);
  border-block: 1px solid var(--border-soft);
}
.values-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: var(--space-8);
}
.value h4 {
  font-size: var(--text-base);
  font-weight: 700;
  letter-spacing: 0.04em;
  margin-bottom: var(--space-2);
}
.value .v-icon {
  width: 44px; height: 44px;
  display: grid; place-items: center;
  border-radius: 10px;
  background: color-mix(in srgb, var(--accent) 16%, transparent);
  color: var(--accent);
  margin-bottom: var(--space-4);
}
.value p { font-size: var(--text-sm); color: var(--text-soft); }

/* ============================================================
   CONTACT / CTA
   ============================================================ */
.cta {
  text-align: center;
}
.cta-box {
  background: linear-gradient(160deg, var(--panel), color-mix(in srgb, var(--panel) 50%, var(--bg)));
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  padding: clamp(var(--space-12), 6vw, var(--space-24)) var(--space-8);
}
.cta h2 { font-size: var(--text-xl); margin-bottom: var(--space-4); }
.cta p { font-size: var(--text-base); color: var(--text-soft); max-width: 50ch; margin: 0 auto var(--space-8); }
.cta-actions { display: flex; flex-wrap: wrap; gap: var(--space-4); justify-content: center; }
.contact-meta {
  margin-top: var(--space-10);
  display: flex; flex-wrap: wrap; gap: var(--space-8); justify-content: center;
  font-size: var(--text-sm); color: var(--text-soft);
}
.contact-meta a:hover { color: var(--accent); }

/* ============================================================
   FOOTER
   ============================================================ */
.site-footer {
  border-top: 1px solid var(--border-soft);
  padding-block: var(--space-12);
}
.footer-grid {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-8);
  justify-content: space-between;
  align-items: center;
}
.footer-links { display: flex; flex-wrap: wrap; gap: var(--space-6); font-size: var(--text-sm); color: var(--text-soft); }
.footer-links a:hover { color: var(--accent); }
.footer-copy { font-size: var(--text-xs); color: var(--text-faint); }

/* Social icons row. Sits between the nav links and the copyright. Icons
   are inline SVG so we never pull from a CDN. Default tint is soft so
   they don't fight the copyright line; brand color on hover. */
.footer-social {
  display: flex;
  gap: var(--space-3);
  align-items: center;
}
.footer-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px; height: 36px;
  border-radius: 999px;
  border: 1px solid var(--border-soft);
  color: var(--text-soft);
  transition: color 0.2s var(--ease), border-color 0.2s var(--ease), transform 0.2s var(--ease);
}
.footer-social a:hover {
  color: var(--accent);
  border-color: var(--accent);
  transform: translateY(-1px);
}
.footer-social svg { width: 18px; height: 18px; fill: currentColor; }

/* ============================================================
   PROJECT GALLERY (Recent Projects on builders + service pages)
   Drop a photo into images/projects/ then add a .project tile.
   Tiles auto-flow into a responsive grid (3 / 2 / 1 columns).
   ============================================================ */
.project-gallery {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--space-6);
  margin-top: var(--space-10);
}
.project {
  position: relative;
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--panel);
  border: 1px solid var(--border-soft);
  transition: transform 0.3s var(--ease), border-color 0.3s var(--ease);
  cursor: default;
}
.project:hover { transform: translateY(-4px); border-color: var(--border-mid); }
.project-photo {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  background: var(--bg);
}
.project-meta {
  /* Match the inner padding of .card tiles so the text under a project
     image has the same breathing room from the box edges as the rest
     of the site's tiles (services, blog index, etc.).

     Note: only --space-6 / --space-8 are used here. --space-7 was
     tried earlier and silently broke the rule because it's not
     defined in the spacing scale — CSS invalidates the whole shorthand
     when one of its custom-property references is missing. */
  padding: var(--space-6) var(--space-8);
}
.project-meta .project-tag {
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent);
}
.project-meta h4 {
  font-size: var(--text-base);
  font-weight: 600;
  margin: 4px 0 4px;
  color: var(--white);
}
.project-meta p {
  font-size: var(--text-sm);
  color: var(--text-soft);
  margin: 0;
}
/* Empty-state placeholder used until real photos are added. Shows the V3
   mark on the brand background so the gallery layout reads correctly
   even before any project shots exist. */
.project.placeholder .project-photo {
  display: grid;
  place-items: center;
  background:
    radial-gradient(ellipse at 50% 40%, color-mix(in srgb, var(--accent) 20%, transparent), transparent 70%),
    var(--panel);
}
.project.placeholder .project-photo::before {
  content: "Photo coming soon";
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-faint);
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

/* ============================================================
   BLOG — hero banner + inline figure placeholders
   Two variants of the same class:
   - <div class="blog-hero"> renders a fixed 16:7 branded placeholder
   - <img class="blog-hero"> renders the real photo at its natural ratio
     (with a generous max-height so a tall photo doesn't blow up the page).
   ============================================================ */
.blog-hero {
  position: relative;
  width: 100%;
  border-radius: var(--radius);
  overflow: hidden;
  margin: var(--space-6) 0 var(--space-8);
  border: 1px solid var(--border-soft);
  display: block;
}
/* Placeholder div — fixed banner aspect with brand-accent glow. */
div.blog-hero {
  aspect-ratio: 16 / 7;
  background:
    radial-gradient(ellipse at 25% 30%, color-mix(in srgb, var(--accent) 35%, transparent), transparent 60%),
    radial-gradient(ellipse at 75% 70%, color-mix(in srgb, var(--accent) 18%, transparent), transparent 60%),
    var(--panel);
  display: grid;
  place-items: center;
}
div.blog-hero::after {
  content: "VERITAS BUILDERS";
  font-size: var(--text-xs);
  letter-spacing: 0.35em;
  color: var(--text-faint);
  position: absolute; bottom: 12px; right: 16px;
}
/* Real-photo variant — natural ratio, capped so a portrait shot doesn't dominate. */
img.blog-hero {
  height: auto;
  max-height: 560px;
  object-fit: cover;
  background: var(--panel);
}

/* Inline figure inside article body — same brand-on-brand styling. */
.blog-figure {
  margin: var(--space-8) 0;
  border-radius: var(--radius);
  overflow: hidden;
  border: 1px solid var(--border-soft);
  background: var(--panel);
}
.blog-figure img { width: 100%; height: auto; display: block; }
.blog-figure.placeholder {
  aspect-ratio: 16 / 9;
  background:
    radial-gradient(ellipse at 50% 40%, color-mix(in srgb, var(--accent) 22%, transparent), transparent 65%),
    var(--panel);
  display: grid;
  place-items: center;
}
.blog-figure.placeholder::after {
  content: attr(data-label);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-faint);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0 var(--space-6);
  text-align: center;
}
.blog-figcaption {
  font-size: var(--text-xs);
  color: var(--text-faint);
  text-align: center;
  margin-top: 6px;
}

/* ============================================================
   COMING SOON BADGE (divisions)
   ============================================================ */
.badge-soon {
  display: inline-block;
  font-size: var(--text-xs);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  /* Inherits per-card accent set by --card-accent, falls back to the page accent. */
  color: var(--card-accent, var(--accent));
  background: color-mix(in srgb, var(--card-accent, var(--accent)) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--card-accent, var(--accent)) 35%, transparent);
  border-radius: var(--radius-full);
  padding: 4px 12px;
  margin-bottom: var(--space-4);
}

/* ============================================================
   AREAS WE SERVE (chip list)
   ============================================================ */
.area-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
}
.area-list li {
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--white);
  background: color-mix(in srgb, var(--bg) 60%, #000);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-full);
  padding: 0.5rem 1rem;
}

/* ============================================================
   FAQ (accordion)
   ============================================================ */
.faq-list {
  display: grid;
  gap: var(--space-4);
  max-width: 820px;
}
.faq-item {
  background: var(--panel);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  padding: var(--space-4) var(--space-6);
  transition: border-color 0.25s var(--ease);
}
.faq-item[open] { border-color: var(--border-mid); }
.faq-item summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  list-style: none;
  cursor: pointer;
  font-size: var(--text-base);
  font-weight: 600;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: "+";
  font-size: 1.4rem;
  font-weight: 400;
  color: var(--accent);
  transition: transform 0.25s var(--ease);
  line-height: 1;
}
.faq-item[open] summary::after { content: "−"; }
.faq-item p {
  margin-top: var(--space-4);
  font-size: var(--text-sm);
  color: var(--text-soft);
}

/* Page-transition link back to Veritas Ventures from any Builders page.
   Uses the Ventures brand orange directly (not the Builders blue) so the
   link visually advertises the parent brand it points at.

   Selector is a.back-link rather than just .back-link so it beats
   '.nav-links a' on specificity (both compute to 0,1,1; later rule wins).
   Otherwise the soft-white nav-link color shows through and the link
   doesn't read as the Ventures brand. */
a.back-link {
  font-size: var(--text-sm);
  font-weight: 600;
  color: var(--vv-accent);
  display: inline-flex; align-items: center; gap: 6px;
}
a.back-link:hover { color: var(--vv-accent-hover); }

/* ============================================================
   TEXAS SERVICE-AREA MAP
   ============================================================ */
.map-wrap {
  background: color-mix(in srgb, var(--bg) 55%, #000);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  padding: clamp(var(--space-6), 4vw, var(--space-12));
}
#tx-map {
  width: 100%;
  max-width: 520px;
  height: auto;
  margin: 0 auto;
  display: block;
  overflow: hidden;
}
.tx-outline {
  fill: color-mix(in srgb, var(--panel) 80%, var(--bg));
  stroke: var(--border-mid);
  stroke-width: 2.5;
  stroke-linejoin: round;
}
.tx-triangle {
  fill: color-mix(in srgb, var(--accent) 18%, transparent);
  stroke: color-mix(in srgb, var(--accent) 55%, transparent);
  stroke-width: 2;
  stroke-dasharray: 8 6;
}
.tx-city { fill: var(--white); stroke: var(--accent); stroke-width: 3; }
.tx-city--faint { fill: var(--text-faint); stroke: var(--border-mid); }
.tx-label {
  fill: var(--white);
  font-family: var(--font);
  font-size: 22px;
  font-weight: 600;
}
.tx-label--faint { fill: var(--text-faint); font-weight: 500; font-size: 19px; }
.tx-label--hq { fill: var(--accent); font-weight: 700; }
.tx-label--left { text-anchor: end; }
.tx-hq { fill: var(--accent); }
.tx-hq-ring {
  fill: none;
  stroke: var(--accent);
  stroke-width: 2.5;
  opacity: 0.6;
  transform-origin: center;
  animation: tx-pulse 2.4s ease-out infinite;
}
@keyframes tx-pulse {
  0% { r: 12; opacity: 0.7; }
  100% { r: 30; opacity: 0; }
}
.tx-project {
  fill: var(--accent);
  stroke: var(--white);
  stroke-width: 2;
  cursor: pointer;
}
.tx-project:hover { fill: var(--accent-hover); }

.map-legend {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-6);
  margin-top: var(--space-8);
}
.legend-item {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--text-soft);
}
.legend-item .dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; }
.dot-hq { background: var(--accent); }
.dot-city { background: var(--white); border: 2px solid var(--accent); }
.dot-project { background: var(--accent); border: 2px solid var(--white); }
.map-note { text-align: center; margin-top: var(--space-4); font-size: var(--text-sm); color: var(--accent); font-weight: 600; }

@media (max-width: 600px) {
  .tx-label { font-size: 28px; }
  .tx-label--faint { font-size: 24px; }
}

/* ============================================================
   CHAT POP-UP WIDGET (self-contained, no third party)
   ============================================================ */
.chat-launcher {
  position: fixed;
  bottom: 24px;
  right: 24px;
  z-index: 200;
  width: 60px;
  height: 60px;
  border-radius: var(--radius-full);
  background: var(--accent);
  color: var(--white);
  display: grid;
  place-items: center;
  box-shadow: 0 10px 30px color-mix(in srgb, var(--accent) 45%, transparent), 0 4px 12px rgba(0,0,0,0.3);
  transition: transform 0.25s var(--ease), background 0.2s var(--ease);
}
.chat-launcher:hover { transform: translateY(-3px) scale(1.04); background: var(--accent-hover); }
.chat-launcher svg { width: 26px; height: 26px; }
.chat-launcher .icon-close { display: none; }
.chat-launcher.open .icon-chat { display: none; }
.chat-launcher.open .icon-close { display: block; }

.chat-panel {
  position: fixed;
  bottom: 96px;
  right: 24px;
  z-index: 200;
  width: min(360px, calc(100vw - 48px));
  background: var(--panel);
  border: 1px solid var(--border-mid);
  border-radius: var(--radius);
  box-shadow: 0 20px 50px rgba(0,0,0,0.5);
  overflow: hidden;
  transform: translateY(16px) scale(0.96);
  opacity: 0;
  pointer-events: none;
  transition: transform 0.28s var(--ease), opacity 0.28s var(--ease);
}
.chat-panel.open { transform: none; opacity: 1; pointer-events: auto; }

.chat-head {
  background: linear-gradient(135deg, var(--accent), color-mix(in srgb, var(--accent) 60%, #000));
  color: var(--white);
  padding: var(--space-6);
}
.chat-head h4 { font-size: var(--text-lg); margin-bottom: 4px; }
.chat-head p { font-size: var(--text-sm); opacity: 0.92; }

/* Message thread */
.chat-thread {
  height: 340px;
  max-height: 50vh;
  overflow-y: auto;
  padding: var(--space-4) var(--space-4) 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}
.chat-msg {
  max-width: 85%;
  font-size: var(--text-sm);
  line-height: 1.5;
  padding: 0.6rem 0.85rem;
  border-radius: 14px;
  white-space: pre-wrap;
  word-wrap: break-word;
}
.chat-msg.bot {
  align-self: flex-start;
  background: color-mix(in srgb, var(--bg) 55%, #000);
  border: 1px solid var(--border-soft);
  color: var(--white);
  border-bottom-left-radius: 4px;
}
.chat-msg.user {
  align-self: flex-end;
  background: var(--accent);
  color: var(--white);
  border-bottom-right-radius: 4px;
}
.chat-typing { align-self: flex-start; display: flex; gap: 4px; padding: 0.7rem 0.9rem; }
.chat-typing span {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--text-faint);
  animation: chat-bounce 1.2s infinite ease-in-out;
}
.chat-typing span:nth-child(2) { animation-delay: 0.15s; }
.chat-typing span:nth-child(3) { animation-delay: 0.3s; }
@keyframes chat-bounce { 0%,80%,100% { transform: translateY(0); opacity: 0.5; } 40% { transform: translateY(-5px); opacity: 1; } }

.chat-inputbar {
  display: flex;
  gap: var(--space-2);
  padding: var(--space-4);
  border-top: 1px solid var(--border-soft);
}
.chat-inputbar textarea {
  flex: 1;
  resize: none;
  height: 44px;
  max-height: 120px;
  background: var(--bg);
  border: 1px solid var(--border-mid);
  border-radius: var(--radius-sm);
  color: var(--white);
  font-size: var(--text-sm);
  padding: 0.6rem 0.75rem;
  line-height: 1.4;
}
.chat-inputbar textarea::placeholder { color: var(--text-faint); }
.chat-inputbar button {
  flex: none;
  width: 44px; height: 44px;
  display: grid; place-items: center;
  background: var(--accent);
  color: var(--white);
  border-radius: var(--radius-sm);
}
.chat-inputbar button:hover { background: var(--accent-hover); }
.chat-inputbar button:disabled { opacity: 0.5; cursor: default; }

/* Paperclip attach button — same size as Send but subtler so Send stays primary. */
.chat-inputbar button.chat-attach {
  background: transparent;
  color: var(--text-faint);
  border: 1px solid var(--border-mid);
}
.chat-inputbar button.chat-attach:hover { color: var(--white); border-color: var(--border-strong, var(--border-mid)); background: transparent; }

/* Staged-photo strip rendered above the input bar before sending. */
.chat-photo-preview {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 8px var(--space-4) 0;
}
.chat-photo-thumb {
  position: relative;
  width: 56px; height: 56px;
  border-radius: 8px;
  overflow: hidden;
  border: 1px solid var(--border-mid);
}
.chat-photo-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.chat-photo-thumb button {
  position: absolute; top: -6px; right: -6px;
  width: 18px; height: 18px;
  border-radius: 50%;
  background: rgba(0,0,0,0.8);
  color: #fff;
  font-size: 13px;
  line-height: 1;
  display: grid; place-items: center;
  border: 1px solid var(--border-mid);
  cursor: pointer;
}

/* Photos sent as part of a user message. */
.chat-msg.user .chat-msg-photos {
  display: flex; flex-wrap: wrap; gap: 4px;
  margin-top: 6px;
}
.chat-msg.user .chat-msg-photos img {
  width: 72px; height: 72px;
  object-fit: cover; border-radius: 6px; display: block;
}
.chat-disclaimer {
  font-size: 11px;
  color: var(--text-faint);
  text-align: center;
  padding: 0 var(--space-4) var(--space-3);
}

@media (max-width: 480px) {
  .chat-launcher { bottom: 16px; right: 16px; }
  .chat-panel { bottom: 84px; right: 16px; }
  .chat-thread { height: 300px; }
}

/* Reveal-on-scroll.
   Only hidden when JS is active (html.js). If JS fails/doesn't run,
   content stays fully visible — no blank sections. */
html.js .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); }
html.js .reveal.in { opacity: 1; transform: none; }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 860px) {
  .about-grid { grid-template-columns: 1fr; }
  .hero-split { grid-template-columns: 1fr; gap: var(--space-6); text-align: left; }
  .hero-logo-col { justify-content: flex-start; }
  .hero-logo { max-width: 200px; }
  .nav-links {
    position: fixed;
    inset: 72px 0 auto 0;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-6);
    padding: var(--space-8) var(--space-6);
    background: var(--bg);
    border-bottom: 1px solid var(--border-soft);
    transform: translateY(-120%);
    transition: transform 0.35s var(--ease);
  }
  .nav-links.open { transform: translateY(0); }
  .nav-toggle {
    display: grid;
    place-items: center;
    width: 42px; height: 42px;
    border: 1px solid var(--border-mid);
    border-radius: var(--radius-sm);
  }
}
