/*!
 * Fullloop GTM brand layer.
 *
 * Sits on top of css/styles.css (Start Bootstrap "Modern Business" v5.0.7,
 * MIT, which is itself compiled Bootstrap 5.2.3). Nothing in the template
 * file is edited -- every brand decision lives here, so the template can be
 * refreshed by replacing one file.
 *
 * Brand: dark #0F172A / #070D1D, gold #F4D25A, cyan #04D9FF, purple #BF94E4.
 */

:root {
  --fl-bg: #070D1D;
  --fl-panel: #0F172A;
  --fl-panel-2: #0b1220;
  --fl-ink: #E5E7EB;
  --fl-muted: #A7B3C8;
  --fl-gold: #F4D25A;
  --fl-cyan: #04D9FF;
  --fl-purple: #BF94E4;
  --fl-line: rgba(167, 179, 200, 0.22);

  /* Bootstrap theme hooks. */
  --bs-primary: #F4D25A;
  --bs-primary-rgb: 244, 210, 90;
  --bs-warning: #F4D25A;
  --bs-warning-rgb: 244, 210, 90;
  --bs-dark: #070D1D;
  --bs-dark-rgb: 7, 13, 29;
  --bs-light: #0F172A;
  --bs-light-rgb: 15, 23, 42;
  --bs-body-bg: #070D1D;
  --bs-body-color: #E5E7EB;
  --bs-emphasis-color: #FFFFFF;
  --bs-border-color: rgba(167, 179, 200, 0.22);
  --bs-link-color: #04D9FF;
  --bs-link-hover-color: #F4D25A;
  --bs-heading-color: #E5E7EB;
}

body {
  background-color: var(--fl-bg);
  color: var(--fl-ink);
}

/* ------------------------------------------------------------------ width
   The complaint this rebuild answers: a 1100px strip floating in dead side
   gutters. Bootstrap's container tops out at 1320px; widen it past that on
   large screens and give it more breathing room inside. Text blocks stay
   readable because they sit in col-* children, not the full container. */
.container,
.container-fluid {
  --bs-gutter-x: 3rem;
}
@media (min-width: 1400px) {
  .container { max-width: 1560px; }
}
@media (min-width: 1900px) {
  .container { max-width: 1720px; }
}

/* --------------------------------------------------------------- surfaces */
.bg-dark { background-color: var(--fl-bg) !important; }
.bg-light { background-color: var(--fl-panel) !important; }
.bg-light,
.bg-light h1, .bg-light h2, .bg-light h3, .bg-light h4, .bg-light h5, .bg-light .h5 {
  color: var(--fl-ink);
}
.text-muted { color: var(--fl-muted) !important; }
.text-white-50 { color: rgba(229, 231, 235, 0.72) !important; }
hr { border-color: var(--fl-line); opacity: 1; }

/* ------------------------------------------------------------------ navbar */
.navbar.navbar-dark {
  --bs-navbar-color: var(--fl-muted);
  --bs-navbar-hover-color: var(--fl-gold);
  --bs-navbar-active-color: var(--fl-gold);
  --bs-navbar-brand-color: var(--fl-ink);
  --bs-navbar-brand-hover-color: var(--fl-ink);
  border-bottom: 1px solid var(--fl-line);
  box-shadow: 0 1px 0 rgba(244, 210, 90, 0.18);
}
.navbar .navbar-brand img { height: 46px; width: auto; display: block; }
.navbar .nav-link { font-weight: 600; font-size: 0.95rem; }
.navbar .nav-link.active { color: var(--fl-gold); }
.navbar .nav-social {
  color: var(--fl-muted);
  display: inline-flex;
  align-items: center;
  padding: 0.5rem;
}
.navbar .nav-social:hover { color: var(--fl-gold); }
.navbar-toggler { border-color: var(--fl-line); }

/* ------------------------------------------------------- account control
   Plain text. No border, no fill, no pill -- the owner does not want more
   boxed chrome in the header, and this is status plus an action, not a CTA.
   Book Call is the only thing up here that should look like a button. */
.navbar .nav-account,
.navbar .nav-logout {
  color: var(--fl-muted);
  font-weight: 600;
  font-size: 0.9rem;
  background: none;
  border: 0;
  padding: 0;
  white-space: nowrap;
}
.navbar .nav-account:hover,
.navbar .nav-logout:hover { color: var(--fl-gold); }
/* An email is long; keep it from pushing the nav around on smaller screens. */
.navbar .nav-account.is-signed-in {
  color: var(--fl-ink);
  max-width: 15rem;
  overflow: hidden;
  text-overflow: ellipsis;
  display: inline-block;
  vertical-align: middle;
}

/* ------------------------------------------------------------------ buttons */
.btn-primary {
  --bs-btn-color: #0b1220;
  --bs-btn-bg: var(--fl-gold);
  --bs-btn-border-color: var(--fl-gold);
  --bs-btn-hover-color: #0b1220;
  --bs-btn-hover-bg: #ffe07a;
  --bs-btn-hover-border-color: #ffe07a;
  --bs-btn-active-color: #0b1220;
  --bs-btn-active-bg: #e6c34d;
  --bs-btn-active-border-color: #e6c34d;
  --bs-btn-disabled-color: #0b1220;
  --bs-btn-disabled-bg: var(--fl-gold);
  --bs-btn-disabled-border-color: var(--fl-gold);
  font-weight: 700;
}
.btn-outline-light {
  --bs-btn-color: var(--fl-ink);
  --bs-btn-border-color: var(--fl-purple);
  --bs-btn-hover-color: #0b1220;
  --bs-btn-hover-bg: var(--fl-purple);
  --bs-btn-hover-border-color: var(--fl-purple);
  --bs-btn-active-color: #0b1220;
  --bs-btn-active-bg: var(--fl-purple);
  --bs-btn-active-border-color: var(--fl-purple);
  font-weight: 700;
}
.nav-book { border-radius: 40px; padding-left: 1.25rem; padding-right: 1.25rem; }

/* -------------------------------------------------------------- feature tile
   Restores meaning to the service cards: the template's icon tile, carrying a
   real Bootstrap Icon instead of the numerals 1/2/3/4 the old site shipped. */
.feature {
  height: 3.25rem;
  width: 3.25rem;
  font-size: 1.5rem;
}
.feature.bg-primary { color: #0b1220 !important; }

/* Bootstrap Icons are inlined as <svg class="bi"> with a viewBox and no
   width/height, so without this they lay out at 0x0 and vanish. Measured:
   the nav social icons and the home-page build list were invisible until
   this rule existed. */
svg.bi {
  width: 1em;
  height: 1em;
  vertical-align: -0.125em;
  fill: currentColor;
  flex-shrink: 0;
}
.feature svg.bi { width: 1.5rem; height: 1.5rem; }
.navbar .nav-social svg.bi { width: 1.15rem; height: 1.15rem; }

/* -------------------------------------------------------------------- cards */
.card {
  --bs-card-bg: var(--fl-panel-2);
  --bs-card-color: var(--fl-ink);
  --bs-card-border-color: var(--fl-line);
  --bs-card-cap-bg: transparent;
}
.card.border-0 { border: 1px solid var(--fl-line) !important; }
.card .card-title { color: var(--fl-ink); }
.card ul { color: var(--fl-muted); padding-left: 1.15rem; margin-bottom: 0; }
.card ul li { margin-bottom: 0.25rem; }
.shadow { box-shadow: 0 0 0 1px rgba(191, 148, 228, 0.14), 0 10px 28px rgba(0, 0, 0, 0.45) !important; }

/* --------------------------------------------------------------------- CTA */
aside.bg-primary {
  background: linear-gradient(135deg, var(--fl-gold), #ffe07a) !important;
}
aside.bg-primary .text-white,
aside.bg-primary .fs-3 { color: #0b1220 !important; }
aside.bg-primary .text-white-50 { color: rgba(11, 18, 32, 0.72) !important; }

/* ------------------------------------------------------------------- forms */
.form-control,
.form-select {
  background-color: #020617;
  border: 1.5px solid rgba(191, 148, 228, 0.55);
  color: var(--fl-ink);
}
.form-control:focus,
.form-select:focus {
  background-color: #020617;
  color: var(--fl-ink);
  border-color: var(--fl-gold);
  box-shadow: 0 0 0 0.25rem rgba(244, 210, 90, 0.15);
}
.form-control::placeholder { color: rgba(167, 179, 200, 0.65); }
.form-floating > label { color: var(--fl-muted); }
.form-floating > .form-control:focus ~ label,
.form-floating > .form-control:not(:placeholder-shown) ~ label { color: var(--fl-muted); }

/* Prompt chips on the contact page. */
.fl-chip {
  display: block;
  width: 100%;
  text-align: left;
  background: var(--fl-panel-2);
  border: 1px solid rgba(191, 148, 228, 0.4);
  color: var(--fl-ink);
  border-radius: 10px;
  padding: 0.65rem 0.9rem;
  font-size: 0.875rem;
  margin-bottom: 0.6rem;
}
.fl-chip:hover { border-color: var(--fl-gold); color: var(--fl-gold); }

.fl-status.ok { color: #4ADE80; font-weight: 700; }
.fl-status.err { color: #F87171; font-weight: 700; }
.fl-status.err a { color: #F87171; }

/* ------------------------------------------------------------------ footer
   Compact agency chrome: one row, small type, identical on every page.
   Enforced byte-for-byte by tests/site_consistency_test.py. */
footer.fl-footer {
  background-color: var(--fl-bg) !important;
  border-top: 1px solid var(--fl-line);
  padding-top: 0.85rem !important;
  padding-bottom: 0.85rem !important;
}
footer.fl-footer .small { font-size: 0.78rem; }
footer.fl-footer a.link-light { color: var(--fl-muted) !important; }
footer.fl-footer a.link-light:hover { color: var(--fl-gold) !important; }
footer.fl-footer .sep { color: var(--fl-line); }

/* ------------------------------------------------------------------ modal
   Bootstrap's modal defaults to a white panel, which on this site meant grey
   text on white and an invisible white close button. Brand it. */
.modal-content {
  --bs-modal-bg: var(--fl-panel);
  --bs-modal-color: var(--fl-ink);
  --bs-modal-border-color: rgba(191, 148, 228, 0.35);
  --bs-modal-header-border-color: var(--fl-line);
  --bs-modal-footer-border-color: var(--fl-line);
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
}
.modal-title { color: var(--fl-ink); }
.modal-body legend.h6,
.modal-body .form-label { color: var(--fl-ink); }
.modal-body .form-text { color: var(--fl-muted); }
.modal-body .form-check-label { color: var(--fl-ink); font-size: 0.9rem; }
.form-check-input {
  background-color: #020617;
  border-color: rgba(191, 148, 228, 0.55);
}
.form-check-input:checked {
  background-color: var(--fl-gold);
  border-color: var(--fl-gold);
}
.form-check-input:focus {
  border-color: var(--fl-gold);
  box-shadow: 0 0 0 0.25rem rgba(244, 210, 90, 0.15);
}

/* ---------------------------------------------------------- consent banner */
body.has-consent-banner { padding-bottom: 96px; }
#fl-consent {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1030;
  background: var(--fl-bg);
  border-top: 1px solid rgba(4, 217, 255, 0.28);
  box-shadow: 0 -10px 34px rgba(0, 0, 0, 0.55);
}

/* -------------------------------------------------------------------- hero */
.fl-hero { border-bottom: 1px solid var(--fl-line); }
.fl-hero-mark {
  border: 1px solid rgba(191, 148, 228, 0.35);
  border-radius: 1rem;
  background: linear-gradient(180deg, var(--fl-panel-2), var(--fl-panel));
  padding: 2.5rem;
}
.fl-eyebrow {
  color: var(--fl-cyan);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-size: 0.78rem;
}
