/* ============================================
   HOSS LLC — SHARED STYLESHEET
   
   This one file is linked by every page (Home,
   Portfolio, Services, About, Contact) via:
   <link rel="stylesheet" href="style.css">
   
   Why separate the CSS out like this, instead of
   embedding it in each page like the practice sites?
   Because with 5 pages, embedding would mean 5 copies
   of the same code - and changing your brand color
   would mean editing it in 5 places instead of 1.
   One shared file = one source of truth.
   ============================================ */

:root {
  --ink: #1A1D21;          /* near-black - primary text, dark sections */
  --forest: #1B4332;    /* deep pine green - hero, dark sections */
  --forest-soft: #2F6B4F;
  --paper: #EEF1EE;        /* cool drafting-paper background */
  --paper-dark: #E2E7E1;
  --card: #FFFFFF;
  --accent: #4CAF6D;       /* kelly green accent, CTAs */
  --accent-dark: #3B8F58;
  --line: rgba(26,29,33,0.12);
  --line-on-dark: rgba(255,255,255,0.18);

  /* Solid (non-opacity) muted-text colors. Using opacity to mute text
     is an easy way to accidentally fail WCAG AA contrast (4.5:1) -
     these are real colors, checked to stay readable, instead. */
  --text-muted: #52585A;        /* muted body text on light backgrounds */
  --text-muted-on-dark: #C7CDC9; /* muted body text on dark backgrounds */

  --font-display: 'Space Grotesk', sans-serif;
  --font-body: 'IBM Plex Sans', sans-serif;
  --font-mono: 'IBM Plex Mono', monospace;
}

/* ============================================
   SKIP LINK
   Invisible until a keyboard user tabs to it, at
   which point it jumps into view at the top-left.
   Lets screen reader / keyboard users bypass the
   repeated nav menu and go straight to page content -
   without it, they'd have to tab through Home,
   Portfolio, Services, About, Contact on every
   single page before reaching anything new.
   ============================================ */
.skip-link {
  position: absolute;
  top: -60px;
  left: 12px;
  background: var(--accent);
  color: var(--ink);
  padding: 10px 18px;
  border-radius: 3px;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.9rem;
  z-index: 1000;
  text-decoration: none;
  transition: top 0.2s ease;
}
.skip-link:focus {
  top: 12px;
}

/* ============================================
   SMOOTH PAGE TRANSITIONS
   Tells supporting browsers (current Chrome, Edge,
   and recent Safari) to crossfade between pages on
   navigation instead of the default hard white flash.
   Browsers that don't support this yet just fall back
   to normal navigation - nothing breaks either way.
   ============================================ */
@view-transition {
  navigation: auto;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }

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

body {
  font-family: var(--font-body);
  color: var(--ink);
  background-color: var(--paper);
  line-height: 1.55;
  position: relative;
  overflow-x: hidden;

  /* Faint dot-grid texture, echoing the blueprint concept even in
     light sections - very low opacity so it reads as texture, not pattern. */
  background-image: radial-gradient(circle, rgba(26,29,33,0.045) 1px, transparent 1px);
  background-size: 28px 28px;
}

/* ============================================
   AMBIENT DRIFT
   Two soft, blurred color blobs that slowly move
   behind the page content. Meant to feel calm and
   "alive" rather than eye-catching - a subtle signal
   that this is a real, current, well-made site, not
   a static template. Sits behind everything (z-index -1)
   and never blocks clicks (pointer-events: none).
   ============================================ */
body::before {
  content: '';
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(circle at 15% 20%, rgba(76,175,109,0.24), transparent 45%),
    radial-gradient(circle at 85% 75%, rgba(27,67,50,0.22), transparent 48%),
    radial-gradient(circle at 50% 100%, rgba(76,175,109,0.14), transparent 40%);
  background-repeat: no-repeat;
  animation: ambientDrift 26s ease-in-out infinite alternate;
}

@keyframes ambientDrift {
  0%   { background-position: 0% 0%, 100% 100%, 50% 100%; }
  100% { background-position: 16% 24%, 78% 62%, 40% 85%; }
}

@media (prefers-reduced-motion: reduce) {
  body::before { animation: none; }
}

/* ============================================
   FLOATING RINGS
   Large soft outlined circles that slowly float and
   rotate behind the page - a common "agency site"
   background treatment for a bit more visual energy
   than the blobs alone. Markup: a single
   <div class="ambient-shapes"> block placed once near
   the top of <body> on each page.
   ============================================ */
.ambient-shapes {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
}
.shape {
  position: absolute;
  border-radius: 50%;
  border: 1.5px solid rgba(76,175,109,0.28);
}
.shape-1 {
  width: 460px; height: 460px;
  top: -140px; left: -100px;
  animation: floatShape1 22s ease-in-out infinite;
}
.shape-2 {
  width: 280px; height: 280px;
  bottom: -70px; right: 6%;
  border-color: rgba(27,67,50,0.32);
  animation: floatShape2 26s ease-in-out infinite;
}
.shape-3 {
  width: 170px; height: 170px;
  top: 38%; right: -70px;
  border-color: rgba(76,175,109,0.24);
  animation: floatShape3 18s ease-in-out infinite;
}
@keyframes floatShape1 {
  0%, 100% { transform: translate(0,0) rotate(0deg); }
  50% { transform: translate(34px,44px) rotate(14deg); }
}
@keyframes floatShape2 {
  0%, 100% { transform: translate(0,0) rotate(0deg); }
  50% { transform: translate(-28px,-38px) rotate(-11deg); }
}
@keyframes floatShape3 {
  0%, 100% { transform: translate(0,0); }
  50% { transform: translate(-22px,28px); }
}
@media (prefers-reduced-motion: reduce) {
  .shape { animation: none; }
}

a { color: inherit; }
.container { max-width: 1140px; margin: 0 auto; padding: 0 24px; }

/* ============================================
   NAV — shared across every page
   ============================================ */
.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--ink);
  padding: 16px 0;
}

.nav .container {
  display: flex;
  flex-wrap: wrap;
  row-gap: 10px;
  justify-content: space-between;
  align-items: center;
}

.nav-logo {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.4rem;
  color: var(--paper);
  text-decoration: none;
  letter-spacing: 0.01em;
}
.nav-logo span { color: var(--accent); }

.nav-links {
  display: flex;
  gap: 28px;
  list-style: none;
}

.nav-links a {
  text-decoration: none;
  font-size: 0.92rem;
  font-weight: 500;
  color: var(--paper);
  opacity: 0.8;
  transition: opacity 0.2s ease, color 0.2s ease;
  padding-bottom: 2px;
  border-bottom: 2px solid transparent;
}
.nav-links a:hover, .nav-links a:focus-visible {
  opacity: 1;
  color: var(--accent);
}
.nav-links a.active {
  opacity: 1;
  border-bottom-color: var(--accent);
}

.nav-cta {
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.85rem;
  background: var(--accent);
  color: var(--ink);
  padding: 10px 20px;
  border-radius: 2px;
  text-decoration: none;
}
.nav-cta:hover { background: #5FC17F; }

.nav-toggle {
  display: none;
  background: none;
  border: none;
  font-size: 1.5rem;
  cursor: pointer;
  color: var(--paper);
}

@media (max-width: 940px) {
  .nav-links {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    background: var(--ink);
    flex-direction: column;
    padding: 20px 24px;
    gap: 16px;
  }
  .nav-links.open { display: flex; }
  .nav-toggle { display: block; }
  .nav-cta { display: none; }
}

/* ============================================
   BUTTONS
   ============================================ */
.btn {
  display: inline-block;
  font-family: var(--font-body);
  font-weight: 600;
  font-size: 0.95rem;
  padding: 14px 28px;
  border-radius: 2px;
  text-decoration: none;
  border: 1.5px solid transparent;
  cursor: pointer;
  transition: transform 0.15s ease, background 0.2s ease;
}
.btn-primary { background: var(--accent); color: var(--ink); }
.btn-primary:hover { background: #5FC17F; transform: translateY(-1px); }
.btn-outline-dark { background: transparent; border-color: var(--ink); color: var(--ink); }
.btn-outline-dark:hover { background: rgba(26,29,33,0.06); }
.btn-outline-light { background: transparent; border-color: var(--paper); color: var(--paper); }
.btn-outline-light:hover { background: rgba(237,242,245,0.1); }
.btn-row { display: flex; gap: 14px; flex-wrap: wrap; }

/* ============================================
   SECTION LABELS / TITLES — shared pattern
   ============================================ */
.section-label {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--accent);
  margin-bottom: 10px;
}
.section-title {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: clamp(1.9rem, 3.6vw, 2.6rem);
  margin-bottom: 20px;
  max-width: 640px;
  line-height: 1.1;
}
.section-sub {
  font-size: 1.02rem;
  color: var(--text-muted);
  max-width: 560px;
  margin-bottom: 44px;
}

/* ============================================
   SIGNATURE ELEMENT: DIMENSION LINE DIVIDER
   Mimics an architectural blueprint's measurement
   line - a horizontal line with small tick-mark
   arrows on each end and a label in the middle.
   Used between major sections across every page.
   ============================================ */
.dim-divider {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 26px 0;
}
.dim-divider .line {
  flex: 1;
  height: 1px;
  background: var(--line);
  position: relative;
}
.dim-divider .line::before,
.dim-divider .line::after {
  content: '';
  position: absolute;
  top: -4px;
  width: 1px;
  height: 9px;
  background: var(--line);
}
.dim-divider .line::before { left: 0; }
.dim-divider .line::after { right: 0; }
.dim-divider .label {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  color: var(--text-muted);
  white-space: nowrap;
}

/* ============================================
   BLUEPRINT GRID TEXTURE
   Applied to dark hero-style sections for the
   drafting-paper grid look.
   ============================================ */
.blueprint-bg {
  background-image:
    linear-gradient(var(--line-on-dark) 1px, transparent 1px),
    linear-gradient(90deg, var(--line-on-dark) 1px, transparent 1px);
  background-size: 36px 36px;
  background-color: var(--forest);
}

/* ============================================
   STAMP — the "approved" corner mark
   ============================================ */
.stamp {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1.5px solid currentColor;
  border-radius: 50%;
  padding: 10px 16px;
  font-family: var(--font-mono);
  font-size: 0.68rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  transform: rotate(-6deg);
}

/* ============================================
   CARDS — reusable across Portfolio/Services
   ============================================ */
.card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 4px;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 14px 24px rgba(26,29,33,0.1);
}

/* ============================================
   FOOTER — shared across every page
   ============================================ */
.footer {
  background: var(--ink);
  color: var(--paper);
  padding: 50px 0 24px;
  font-size: 0.85rem;
}
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: 40px;
  margin-bottom: 30px;
}
.footer h4 {
  font-family: var(--font-mono);
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--accent);
  margin-bottom: 14px;
}
.footer ul { list-style: none; }
.footer li { margin-bottom: 8px; color: var(--text-muted-on-dark); }
.footer a { text-decoration: none; }
.footer a:hover { text-decoration: underline; }
.footer-legal {
  border-top: 1px solid var(--line-on-dark);
  padding-top: 20px;
  font-size: 0.78rem;
  color: var(--text-muted-on-dark);
}
@media (max-width: 760px) {
  .footer-grid { grid-template-columns: 1fr; }
}

/* ============================================
   SCROLL REVEAL — same pattern as the 3 practice sites
   ============================================ */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.reveal.in-view {
  opacity: 1;
  transform: translateY(0);
}

a:focus-visible, button:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}

/* ============================================
   INTERACTIVE GRID LIGHT
   Populated by main.js on every .blueprint-bg
   header. Squares near the cursor lift up and
   glow; distant ones stay fully transparent.
   pointer-events: none so the invisible grid
   layer never blocks clicking real buttons/links.
   ============================================ */
.grid-light-wrap {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.grid-light-sq {
  position: absolute;
  width: 36px;
  height: 36px;
  background: var(--accent);
  opacity: 0;
  border-radius: 1px;
  transform-origin: center bottom;
  transition: transform 0.35s ease, opacity 0.35s ease, box-shadow 0.35s ease;
}
