* { box-sizing: border-box; }
body { margin: 0; }
.root {
  /* premium light-first system: ~70% paper, ~20% charcoal, ~10% gold accent */
  --paper: #F8F6F0;
  --paper-2: #F1EDE3;
  --paper-ink: #1A170F;
  --paper-ink-dim: #6B6558;
  --paper-line: #E2DDCE;
  --charcoal: #15130F;
  --charcoal-2: #201D17;
  --hair: #33302A;
  --ink: #F5F2E9;
  --ink-dim: #A79E8B;
  --gold: #A9812F;
  --gold-deep: #83651F;
  --gold-soft: #C7A968;
  /* legacy aliases kept so nothing silently breaks mid-refactor */
  --void: var(--charcoal);
  --void-2: var(--charcoal-2);
  --void-3: #262219;
  --lime: var(--gold);
  --lime-dim: var(--gold-deep);
  --blue: var(--gold);
  --blue-deep: var(--gold-deep);
  font-family: 'Space Grotesk', 'Helvetica Neue', Arial, sans-serif;
  background: var(--paper);
  color: var(--paper-ink);
  position: relative;
  width: 100%;
  overflow-x: hidden;
}
.grain {
  position: absolute;
  inset: 0;
  pointer-events: none;
  opacity: 0.05;
  mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-repeat: repeat;
  z-index: 1;
}
.display {
  font-family: 'Space Grotesk', 'Helvetica Neue', Arial, sans-serif;
  font-weight: 700;
  letter-spacing: -0.01em;
  line-height: 1.08;
}
.eyebrow {
  font-family: 'Space Grotesk', sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  font-size: 11px;
  font-weight: 600;
  color: var(--gold);
}
a { color: var(--lime); text-decoration: none; }
a:hover { color: var(--ink); }
.wrap {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 64px;
  position: relative;
  z-index: 2;
}
.btn-solid {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: var(--lime);
  color: var(--void);
  font-family: 'Space Grotesk', sans-serif;
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 0.02em;
  padding: 16px 28px;
  border: 1px solid var(--lime);
  cursor: pointer;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.btn-solid:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(201,255,58,0.22); }
.btn-line {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: transparent;
  color: var(--ink);
  font-family: 'Space Grotesk', sans-serif;
  font-weight: 600;
  font-size: 14px;
  letter-spacing: 0.02em;
  padding: 15px 27px;
  border: 1px solid var(--hair);
  cursor: pointer;
  transition: border-color 0.25s ease, color 0.25s ease;
}
.btn-line:hover { border-color: var(--lime); color: var(--lime); }
.hair-rule { height: 1px; background: var(--hair); border: none; margin: 0; }
.placeholder-block {
  background-color: var(--void-2);
  background-image: repeating-linear-gradient(45deg, var(--void-3) 0px, var(--void-3) 1px, transparent 1px, transparent 13px);
  border: 1px solid var(--hair);
}

/* ---- motion ---- */
@keyframes pulse-ring {
  0% { transform: scale(0.85); opacity: 0.45; }
  100% { transform: scale(1.9); opacity: 0; }
}
/* scroll reveals: AOS's CSS (assets/vendor/aos/aos.css) supplies the
   built-in presets (fade-up, fade-left, fade-right); the two custom
   presets below are ours, driven by the same .aos-animate class via
   our own IntersectionObserver in main.js (reliable both-direction
   replay — AOS's own scroll math didn't retrigger on scroll-up). */
[data-aos="draw-line"] {
  transform: scaleX(0);
  transform-origin: 0% 50%;
  transition-property: transform;
  transition-duration: 1.1s;
  transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
}
[data-aos="draw-line"].aos-animate {
  transform: scaleX(1);
}
.reveal-wrap { position: relative; display: inline-block; overflow: hidden; max-width: 100%; }
.reveal-wrap .reveal-bar {
  position: absolute;
  inset: 0;
  transform: scaleX(1);
  transform-origin: 100% 50%;
  transition: transform 0.85s cubic-bezier(0.76, 0, 0.24, 1);
  pointer-events: none;
}
.reveal-wrap.aos-animate .reveal-bar { transform: scaleX(0); }
.stagger > *:nth-child(1) { transition-delay: 0ms; }
.stagger > *:nth-child(2) { transition-delay: 70ms; }
.stagger > *:nth-child(3) { transition-delay: 140ms; }
.stagger > *:nth-child(4) { transition-delay: 210ms; }
.stagger > *:nth-child(5) { transition-delay: 280ms; }
.stagger > *:nth-child(6) { transition-delay: 350ms; }
.stagger > *:nth-child(7) { transition-delay: 420ms; }
.stagger > *:nth-child(8) { transition-delay: 490ms; }
.stagger > *:nth-child(9) { transition-delay: 560ms; }

/* ---- hover language ---- */
.nav-link { position: relative; padding-bottom: 4px; transition: color 0.25s ease; }
.nav-link::after {
  content: ""; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px;
  background: var(--lime); transform: scaleX(0); transform-origin: 0% 50%; transition: transform 0.3s ease;
}
.nav-link:hover { color: var(--ink) !important; }
.nav-link:hover::after { transform: scaleX(1); }
.cta-btn { transition: transform 0.25s ease, box-shadow 0.25s ease; }
.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(0,0,0,0.18); }
.trust-pill { transition: transform 0.2s ease, box-shadow 0.2s ease; }
.trust-pill:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.08); }
@keyframes tag-cycle {
  0%   { opacity: 0; transform: translateY(14px); }
  3%   { opacity: 1; transform: translateY(0); }
  14%  { opacity: 1; transform: translateY(0); }
  17%  { opacity: 0; transform: translateY(-14px); }
  100% { opacity: 0; transform: translateY(-14px); }
}
.tag-slot {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  gap: 2px; animation: tag-cycle 9s infinite;
  animation-fill-mode: backwards;
}
@keyframes word-cycle {
  0%   { opacity: 0; transform: translateY(14px); }
  3%   { opacity: 1; transform: translateY(0); }
  22%  { opacity: 1; transform: translateY(0); }
  25%  { opacity: 0; transform: translateY(-14px); }
  100% { opacity: 0; transform: translateY(-14px); }
}
.word-slot {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: flex-start;
  white-space: nowrap; animation: word-cycle 8s infinite;
  animation-fill-mode: backwards;
}
@keyframes star-pop {
  0% { transform: scale(0); opacity: 0; }
  70% { transform: scale(1.25); opacity: 1; }
  100% { transform: scale(1); opacity: 1; }
}
.star-pop { animation: star-pop 0.5s cubic-bezier(0.34,1.56,0.64,1) both; }
.product-card { transition: background 0.3s ease; }
.product-card:hover { background: var(--void-2); }
.view-more svg { transition: transform 0.25s ease; }
.product-card:hover .view-more svg { transform: translateX(4px); }
.why-card { transition: background 0.3s ease; }
.why-card:hover { background: var(--void-2); }
.why-card-light { transition: background 0.3s ease; }
.why-card-light:hover { background: #EFEBDC; }
.testi-card { position: relative; transition: transform 0.3s ease; }
.testi-card:hover { transform: translateY(-4px); }

/* ---- testimonial slider ---- */
.testi-track {
  display: flex;
  gap: 20px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -ms-overflow-style: none;
  padding-bottom: 4px;
}
.testi-track::-webkit-scrollbar { display: none; }
.testi-slide {
  flex: 0 0 auto;
  width: 340px;
  scroll-snap-align: start;
  background: var(--paper-2);
  border: 1px solid var(--paper-line);
  padding: 26px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  min-height: 268px;
  transition: transform 0.3s ease, border-color 0.3s ease;
}
.testi-slide:hover { transform: translateY(-4px); border-color: var(--lime); }
.testi-slide p {
  display: -webkit-box;
  -webkit-line-clamp: 6;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.testi-avatar {
  width: 38px; height: 38px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 700; color: var(--void);
  flex-shrink: 0;
}
.testi-nav-btn {
  width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--hair);
  background: var(--void); color: var(--ink); display: flex; align-items: center; justify-content: center;
  cursor: pointer; transition: border-color 0.25s ease, background 0.25s ease;
}
.testi-nav-btn:hover { border-color: var(--lime); background: var(--void-2); }

/* ---- faq accordion ---- */
.faq-item { border-bottom: 1px solid var(--paper-line); }
.faq-item summary {
  list-style: none; display: flex; align-items: center; justify-content: space-between;
  gap: 24px; cursor: pointer; padding: 24px 0; font-size: 18px; font-weight: 600; color: var(--paper-ink);
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary:hover { color: var(--gold-deep); }
.faq-icon { position: relative; width: 18px; height: 18px; flex-shrink: 0; }
.faq-icon::before, .faq-icon::after {
  content: ""; position: absolute; background: var(--lime); transition: transform 0.3s ease;
}
.faq-icon::before { top: 50%; left: 0; width: 100%; height: 1.5px; transform: translateY(-50%); }
.faq-icon::after { left: 50%; top: 0; width: 1.5px; height: 100%; transform: translateX(-50%); }
.faq-item[open] .faq-icon::after { transform: translateX(-50%) rotate(90deg); }
.faq-item p { color: var(--paper-ink-dim); font-size: 14.5px; line-height: 1.7; margin: 0 0 26px; max-width: 640px; }
.social-btn { transition: background 0.25s ease, color 0.25s ease, border-color 0.25s ease; }
.social-btn:hover { background: var(--lime); color: var(--void); border-color: var(--lime); }
.chat-btn { transition: transform 0.25s ease; }
.chat-btn:hover { transform: scale(1.07); }
.pulse-ring {
  position: fixed; bottom: 32px; right: 32px; width: 56px; height: 56px; border-radius: 50%;
  border: 1px solid var(--lime); pointer-events: none; z-index: 4;
  animation: pulse-ring 2.6s ease-out infinite;
}
.float-btn {
  display: block;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
}
.float-btn.is-shown {
  opacity: 1;
  pointer-events: auto;
}
@keyframes wa-bounce {
  0%, 78%, 100% { transform: translateY(0); }
  84% { transform: translateY(-9px); }
  90% { transform: translateY(0); }
  94% { transform: translateY(-4px); }
  97% { transform: translateY(0); }
}
.wa-bounce .chat-btn { animation: wa-bounce 4.5s ease-in-out infinite; }

/* ============================================================
   RESPONSIVE
   ============================================================ */

/* ---- hamburger toggle ---- */
.nav-toggle {
  display: none;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 5px;
  width: 40px;
  height: 40px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 0;
}
.nav-toggle span {
  display: block;
  width: 22px;
  height: 1.5px;
  background: var(--ink);
  transition: transform 0.3s ease, opacity 0.3s ease;
}
.nav-toggle.is-open span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.nav-toggle.is-open span:nth-child(2) { opacity: 0; }
.nav-toggle.is-open span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }

/* ---- mobile nav panel ---- */
.nav-mobile-panel {
  position: fixed;
  top: 0;
  right: 0;
  height: 100%;
  width: 78%;
  max-width: 340px;
  background: var(--void-2);
  border-left: 1px solid var(--hair);
  z-index: 6;
  padding: 110px 32px 32px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  overflow-y: auto;
  transform: translateX(100%);
  transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
}
.nav-mobile-panel.is-open { transform: translateX(0); }
.nav-close {
  position: absolute;
  top: 24px;
  right: 24px;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--hair);
  background: none;
  color: var(--ink);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: border-color 0.25s ease, color 0.25s ease;
}
.nav-close:hover { border-color: var(--lime); color: var(--lime); }
.nav-mobile-link {
  color: var(--ink);
  font-size: 16px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 16px 0;
  border-bottom: 1px solid var(--hair);
  display: block;
}
.nav-mobile-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  z-index: 5;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
}
.nav-mobile-backdrop.is-open { opacity: 1; pointer-events: auto; }

@media (min-width: 901px) {
  .nav-mobile-panel, .nav-mobile-backdrop { display: none; }
  .nav-logo { height: 60px !important; }
}
@media (min-width: 1200px) {
  .nav-logo { height: 68px !important; }
  .footer-logo { height: 64px !important; }
}

@media (max-width: 900px) {
  .nav-links-desktop, .nav-cta-desktop { display: none !important; }
  .nav-toggle { display: flex; }
}

/* ---- fluid type for the two headline classes ---- */
@media (max-width: 1024px) {
  h1.display { font-size: clamp(40px, 8.5vw, 96px) !important; }
  h2.display { font-size: 40px !important; }
}
@media (max-width: 640px) {
  h1.display { font-size: clamp(34px, 11vw, 96px) !important; }
  h2.display { font-size: 32px !important; }
  .reveal-wrap h2.display { line-height: 1.05; }
}

/* ---- container gutters ---- */
@media (max-width: 1024px) {
  .wrap { padding-left: 32px !important; padding-right: 32px !important; }
}
@media (max-width: 640px) {
  .wrap { padding-left: 20px !important; padding-right: 20px !important; }
}

/* ---- card grids: stagger is shared by products / how-it-works /
   why-choose / gallery, so one rule tiers all four ---- */
@media (max-width: 1024px) {
  .stagger { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 640px) {
  .stagger { grid-template-columns: 1fr !important; }
  .product-card { min-height: 320px !important; }
}

/* ---- grids that need to fully stack on mobile ---- */
@media (max-width: 768px) {
  .grid-hero, .grid-before-after, .grid-proof, .grid-2col {
    display: block !important;
  }
  .grid-hero > [style*="grid-column"],
  .grid-before-after > [style*="grid-column"] {
    margin-bottom: 32px;
  }
  .grid-hero > [style*="grid-column"]:last-child,
  .grid-before-after > [style*="grid-column"]:last-child {
    margin-bottom: 0;
  }
  .grid-proof > div { border-bottom: 1px solid var(--hair); }
  .grid-proof > div:last-child { border-bottom: none; }
  .grid-2col > div:first-child { margin-bottom: 0; }
}

/* ---- footer ---- */
@media (max-width: 768px) {
  .grid-footer { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 480px) {
  .grid-footer { grid-template-columns: 1fr !important; gap: 32px !important; }
}

/* ---- trust bar: the desktop version uses 320px side padding and
   260px flanking images, both of which break a phone screen outright ---- */
@media (max-width: 900px) {
  .trust-band { height: 190px !important; }
  .trust-wrap { padding-left: 20px !important; padding-right: 20px !important; }
  .trust-tag-box { height: 72px !important; }
  .tag-slot { font-size: 48px !important; }
  .trust-flow-img { width: 90px !important; height: 90px !important; top: 20px !important; opacity: 0.5; }
}
@media (max-width: 480px) {
  .trust-band { height: 145px !important; }
  .trust-tag-box { height: 54px !important; }
  .tag-slot { font-size: 36px !important; letter-spacing: 0.02em; }
  .trust-flow-img { display: none !important; }
}

/* ---- testimonial slider: narrower cards so the next one peeks in ---- */
@media (max-width: 640px) {
  .testi-slide { width: 82vw !important; min-height: auto !important; }
}

/* ---- map ---- */
@media (max-width: 640px) {
  .map-frame, .map-frame iframe { height: 320px !important; }
}

/* ---- misc section spacing on small screens: the ~100px top/bottom
   padding used throughout is set inline per-section, so this needs
   !important to actually shorten the scroll on a phone ---- */
@media (max-width: 640px) {
  .wrap[style*="padding-top:100px"],
  .wrap[style*="padding-top: 100px"] {
    padding-top: 56px !important;
    padding-bottom: 56px !important;
  }
  /* hero's extra padding-top clears the fixed nav on desktop; on mobile
     the nav is shorter so it only needs a little clearance */
  .wrap[style*="padding-top:120px"],
  .wrap[style*="padding-top: 120px"] {
    padding-top: 40px !important;
    padding-bottom: 56px !important;
  }
}

/* ---- section dividers (the jagged/spike cut-shapes and the plain
   hairline lines) fully removed on mobile, not just faded ---- */
@media (max-width: 640px) {
  .divider { display: none !important; }
}

/* ---- service cards ---- */
.service-card img { transition: transform 0.4s ease; }
.service-card:hover img { transform: scale(1.05); }

/* ---- fixed mobile bottom action bar (replaces the floating buttons
   on small screens per the client's request) ---- */
.mobile-bottom-bar {
  display: none;
  position: fixed;
  left: 0; right: 0; bottom: 0;
  z-index: 7;
  background: var(--charcoal);
  border-top: 1px solid var(--hair);
}
.mobile-bottom-bar a {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 10px 0 calc(10px + env(safe-area-inset-bottom));
  color: var(--ink-dim);
  font-size: 11px;
  letter-spacing: 0.02em;
  text-decoration: none;
}
.mobile-bottom-bar a.is-accent { color: var(--gold); }
@media (max-width: 900px) {
  .mobile-bottom-bar { display: flex; }
  .float-btn-desktop-only { display: none !important; }
  body { padding-bottom: 62px; }
}
