/* ============================================================
   VoxLive Marketing Site — shared chrome + utilities
   Layered on top of foundations.css
   ============================================================ */

/* Full-viewport defaults — without these, pages whose content is
   shorter than the viewport (or wider monitors / vertically tall
   screens) leave a visible browser-default-color band below <body>
   because <html> had no background. Setting both elements to the
   page background AND giving body min-height 100vh covers it:
   short pages still have the paper / ink / whichever surface
   reaching the bottom of the screen. Dark-mode --bg flip on :root
   propagates here automatically via the var(). */
html { background: var(--bg); }
body { margin: 0; background: var(--bg); min-height: 100vh; }

/* ── Global nav ──────────────────────────────────────────── */
.nav {
  position: sticky; top: 0; z-index: 50;
  background: rgba(247,244,238,0.78);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur-med) var(--ease-out), background var(--dur-med) var(--ease-out);
}
.nav.scrolled {
  background: rgba(247,244,238,0.92);
  border-bottom-color: var(--border);
}
.nav-inner {
  max-width: 1200px; margin: 0 auto;
  padding: 14px 24px;
  /* Grid keeps the middle column (nav-links / "Pricing") dead-center
     of the viewport regardless of brand vs. cta widths. Flex with
     justify-content: space-between would pull it off-center. */
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 32px;
}
.nav-brand { grid-column: 1; justify-self: start; }
.nav-links { grid-column: 2; justify-self: center; }
.nav-cta   { grid-column: 3; justify-self: end; }
.nav-brand { display: inline-flex; align-items: center; gap: 8px; text-decoration: none; line-height: 1; }
.nav-brand img { height: 38px; display: block; }
.nav-links { display: flex; gap: 28px; align-items: center; }
.nav-links a {
  font-size: 14px; font-weight: 500;
  color: var(--fg-muted); text-decoration: none;
  line-height: 1.2;
  transition: color var(--dur-fast) var(--ease-out);
}
.nav-links a:hover { color: var(--fg); }
/* Active state — color + weight only. Previous underline sat 2px
   below the text which read as a disconnected rule; dropping it. */
.nav-links a.active { color: var(--fg); font-weight: 600; }
.nav-cta { display: flex; gap: 10px; align-items: center; }

/* ── Buttons ─────────────────────────────────────────────── */
.btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: 8px;
  font-family: var(--font-sans);
  font-weight: 500; font-size: 14px;
  padding: 9px 16px;
  border-radius: var(--r-md);
  border: 1px solid transparent;
  cursor: pointer;
  text-decoration: none;
  transition: background var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);
  white-space: nowrap;
  line-height: 1.2;
}
.btn-primary { background: var(--accent); color: var(--fg-on-accent); }
.btn-primary:hover { background: var(--accent-hover); color: var(--fg-on-accent); }
.btn-primary:active { transform: scale(0.99); }

.btn-secondary { background: var(--bg-paper); color: var(--fg); border-color: var(--border); box-shadow: var(--shadow-card); }
.btn-secondary:hover { background: var(--bg-elevated); }

.btn-ghost { background: transparent; color: var(--fg); }
.btn-ghost:hover { background: var(--wash-hover); }

.btn-outline { background: transparent; border-color: var(--fg); color: var(--fg); }
.btn-outline:hover { background: var(--fg); color: var(--bg); }

.btn-lg { padding: 13px 22px; font-size: 15px; border-radius: var(--r-md); }
.btn-sm { padding: 6px 12px; font-size: 13px; }

.btn .arr { transition: transform var(--dur-fast) var(--ease-out); }
.btn:hover .arr { transform: translateX(2px); }

/* ── Layout helpers ───────────────────────────────────────── */
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
.container-narrow { max-width: 920px; margin: 0 auto; padding: 0 24px; }
.container-prose { max-width: 680px; margin: 0 auto; padding: 0 24px; }

section.section { padding: 96px 0; }
section.section-tight { padding: 64px 0; }
section.section-loose { padding: 128px 0; }

.section-rule { border-top: 1px solid var(--border); }
.section-rule-ink { border-top: 1px solid var(--border-ink); }

/* Eyebrow with rule */
.eyebrow-rule { display: flex; align-items: center; gap: 12px; }
.eyebrow-rule::before {
  content: ''; width: 24px; height: 1px; background: var(--fg);
}

/* ── Footer ──────────────────────────────────────────────── */
footer.site {
  border-top: 1px solid var(--border-ink);
  padding: 80px 0 40px;
  margin-top: 0;
}
footer.site .grid {
  display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr;
  gap: 48px;
  padding-bottom: 64px;
}
footer.site h6 {
  font-family: var(--font-mono);
  font-size: 11px; font-weight: 500;
  letter-spacing: var(--track-caps);
  text-transform: uppercase;
  color: var(--fg-subtle);
  margin: 0 0 20px;
}
footer.site ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 12px; }
footer.site ul a {
  color: var(--fg); text-decoration: none; font-size: 14px;
  transition: color var(--dur-fast) var(--ease-out);
}
footer.site ul a:hover { color: var(--accent); }
footer.site .brand-block img { height: 22px; }
footer.site .brand-block p {
  font-family: var(--font-display); font-style: italic;
  font-size: 17px; color: var(--fg-muted);
  max-width: 28ch; margin: 16px 0 0;
}
footer.site .legal {
  border-top: 1px solid var(--border);
  padding-top: 32px;
  display: flex; justify-content: space-between; align-items: center;
  font-size: 13px; color: var(--fg-muted);
  font-family: var(--font-mono);
}
footer.site .legal a { color: var(--fg-muted); text-decoration: none; margin-left: 24px; }
footer.site .legal a:hover { color: var(--fg); }

/* ── Cards ───────────────────────────────────────────────── */
.card {
  background: var(--bg-paper);
  border: 1px solid var(--border);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-card), var(--shadow-inset);
  padding: 24px;
}

/* ── Logo row (proof) ─────────────────────────────────────── */
.proof-row {
  display: flex; gap: 48px; align-items: center; flex-wrap: wrap; justify-content: center;
  padding: 32px 0;
}
.proof-row .label {
  font-family: var(--font-mono); font-size: 11px;
  letter-spacing: var(--track-caps); text-transform: uppercase;
  color: var(--fg-subtle);
}
.proof-row .name {
  font-family: var(--font-display); font-size: 22px; font-weight: 500;
  letter-spacing: -0.015em; color: var(--fg-muted); opacity: 0.7;
}

/* ── Form controls ────────────────────────────────────────── */
.field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; }
.field label {
  font-size: 13px; font-weight: 500; color: var(--fg);
}
.field .hint {
  font-size: 12px; color: var(--fg-subtle);
}
.input {
  font-family: var(--font-sans);
  font-size: 15px;
  padding: 11px 14px;
  background: var(--bg-paper);
  border: 1px solid var(--border);
  border-radius: var(--r-md);
  color: var(--fg);
  box-shadow: var(--shadow-inset), inset 0 0 0 1px rgba(26,24,19,0.04);
  transition: border-color var(--dur-fast) var(--ease-out), box-shadow var(--dur-fast) var(--ease-out);
}
.input:focus { outline: none; border-color: var(--accent); box-shadow: var(--shadow-inset), 0 0 0 3px rgba(44,93,124,0.15); }
.input::placeholder { color: var(--fg-subtle); }

/* ── Inline icon ─────────────────────────────────────────── */
.icon { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
.icon-lg { width: 20px; height: 20px; stroke-width: 1.6; }

/* ── Pulse dot, override placement for inline use ────────── */
.live-pill {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-mono); font-size: 11px;
  letter-spacing: var(--track-caps); text-transform: uppercase;
  color: var(--live);
  padding: 4px 10px;
  background: var(--live-soft);
  border-radius: var(--r-pill);
}
.live-pill .dot {
  width: 7px; height: 7px; border-radius: 999px; background: var(--live);
  animation: pulse 1.8s ease-in-out infinite;
}

/* ── Generic link list reveal ────────────────────────────── */
.link-arrow {
  display: inline-flex; align-items: center; gap: 6px;
  color: var(--accent); text-decoration: none;
  font-weight: 500; font-size: 14px;
}
.link-arrow:hover { color: var(--accent-hover); }
.link-arrow .arr { transition: transform var(--dur-fast) var(--ease-out); }
.link-arrow:hover .arr { transform: translateX(3px); }

/* ── Mobile ──────────────────────────────────────────────── */
@media (max-width: 880px) {
  .nav-links { display: none; }
  /* Swap from desktop's `1fr auto 1fr` grid to flex space-between on
     mobile. The grid model forced each 1fr column to hold its item's
     min-content width, and when brand + CTA both expanded past their
     fair share the nav-inner overflowed the viewport, making the
     whole page horizontally scrollable. Flex with justify-content:
     space-between + min-width:0 on children keeps everything inside
     the padding. */
  .nav-inner {
    display: flex; flex-direction: row;
    justify-content: space-between; align-items: center;
    gap: 12px;
    padding: 10px 16px;
    width: 100%; box-sizing: border-box;
  }
  .nav-brand { grid-column: auto; justify-self: auto; min-width: 0; }
  .nav-cta   { grid-column: auto; justify-self: auto; min-width: 0; flex-shrink: 0; gap: 6px; }
  .nav-brand img { height: 28px; max-width: 100%; }
  .nav-cta .btn-sm { padding: 5px 9px; font-size: 12px; }
  footer.site .grid { grid-template-columns: 1fr 1fr; }
  footer.site .brand-block { grid-column: 1 / -1; }
}

/* Extra-narrow phones (≤360px): drop "Log in" to make room for the
   primary CTA. Users on tiny screens can tap Log in from the footer. */
@media (max-width: 360px) {
  .nav-cta .btn-ghost { display: none; }
}
