/* ==========================================================================
   FHE Traders — Design System
   ========================================================================== */

:root {
  /* Ink — headings, copy and fine detail. Dark enough to read on the light
     surfaces below, never used as a page background any more. */
  --ink-900: #16304f;
  --ink-800: #21456b;
  --ink-700: #325a84;
  --ink-600: #47739f;

  /* Sky — the light surface family the whole site now sits on. 50/100/200 are
     backgrounds, 500/600/700 are fills and interactive states. */
  --sky-50:  #eaf3ff;
  --sky-100: #d5e7fa;
  --sky-200: #b9d5f2;
  --sky-300: #96bfe9;
  --sky-500: #4a8ed6;
  --sky-600: #2f6cb0;
  --sky-700: #1f5291;

  /* Amber stays the brand accent. 500/600 are fills, 700 is the text-safe
     shade — amber now lands on white instead of navy, so labels need it. */
  --amber-500: #f5a623;
  --amber-600: #dd8f10;
  --amber-700: #96600a;
  --amber-100: #fff4e0;

  --green-600: #16a34a;
  --green-700: #128a3e;
  --wa-green: #25d366;
  --wa-green-dark: #1ebe57;

  --bg: #eaf2fc;
  --surface: #ffffff;
  --text: #2a3f57;
  --text-muted: #61748c;
  --border: #cbdff2;

  --cat-solar-1: #f7b733; --cat-solar-2: #c9860a;
  --cat-inverter-1: #2f7bf6; --cat-inverter-2: #1a4fc4;
  --cat-battery-1: #22c55e; --cat-battery-2: #0f8a3e;
  --cat-distribution-1: #a855f7; --cat-distribution-2: #6d28d9;
  --cat-security-1: #f0384a; --cat-security-2: #b91c2c;
  --cat-appliances-1: #14b8a6; --cat-appliances-2: #0d7d70;
  --cat-fittings-1: #6366f1; --cat-fittings-2: #4338ca;
  --cat-stands-1: #78909c; --cat-stands-2: #455a64;
  --cat-vfd-1: #fb923c; --cat-vfd-2: #c2410c;
  --cat-fans-1: #22d3ee; --cat-fans-2: #0e7490;
  --cat-wiring-1: #d97706; --cat-wiring-2: #92400e;
  --cat-lighting-1: #facc15; --cat-lighting-2: #a16207;

  --red-600: #e11d2f;

  --fab-size: 56px;   /* diameter of every floating action button */

  --radius-sm: 8px;
  --radius-md: 14px;
  --radius-lg: 22px;
  --shadow-sm: 0 2px 8px rgba(38, 74, 117, 0.07);
  --shadow-md: 0 8px 24px rgba(38, 74, 117, 0.10);
  --shadow-lg: 0 20px 48px rgba(38, 74, 117, 0.14);

  --container: 1180px;
  --header-h: 76px;
}

/* ---------- Reset ---------- */
* , *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  color: var(--text);
  background: var(--bg);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 {
  font-family: 'Poppins', 'Inter', sans-serif;
  color: var(--ink-900);
  line-height: 1.22;
  margin: 0 0 0.5em;
  font-weight: 700;
}
p { margin: 0 0 1em; color: var(--text-muted); }
a { text-decoration: none; color: inherit; }
ul { list-style: none; margin: 0; padding: 0; }
img { max-width: 100%; display: block; }
/* These `display: block` rules outrank the browser's own [hidden] style, so a
   hidden <img>/<svg> would still render — as an empty white plate on a product
   with no photo yet. Put the hiding back. */
img[hidden], svg[hidden] { display: none; }
button { font-family: inherit; cursor: pointer; }
svg { display: block; }

.container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 24px;
}

.section { padding: 64px 0; }
.section-top-tight { padding-top: 26px; }
.section-tight { padding: 44px 0; }
.section-alt { background: var(--surface); }

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--amber-600);
  background: var(--amber-100);
  padding: 6px 14px;
  border-radius: 999px;
  margin-bottom: 16px;
}

.section-head {
  max-width: 640px;
  margin: 0 auto 34px;
  text-align: center;
}
.section-head h2 { font-size: clamp(28px, 4vw, 38px); }
.section-head p { font-size: 17px; }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  padding: 14px 28px;
  border-radius: 999px;
  font-weight: 600;
  font-size: 15px;
  border: 2px solid transparent;
  transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease, color 0.18s ease;
  white-space: nowrap;
}
.btn:hover { transform: translateY(-2px); }
.btn-primary { background: linear-gradient(135deg, var(--amber-500), var(--amber-600)); color: var(--ink-900); box-shadow: 0 8px 20px rgba(245,166,35,0.35); }
.btn-primary:hover { background: linear-gradient(135deg, var(--amber-600), var(--amber-600)); box-shadow: 0 10px 26px rgba(245,166,35,0.5); }
.btn-outline { background: var(--surface); border-color: var(--sky-300); color: var(--ink-800); }
.btn-outline:hover { background: var(--sky-100); border-color: var(--sky-500); }
.btn-outline-dark { background: var(--surface); border-color: var(--sky-300); color: var(--ink-800); }
.btn-outline-dark:hover { background: var(--sky-600); border-color: var(--sky-600); color: #fff; }
.btn-whatsapp {
  background: var(--wa-green);
  color: #fff;
  box-shadow: 0 8px 20px rgba(37, 211, 102, 0.35);
}
.btn-whatsapp:hover { background: var(--wa-green-dark); }
.btn-block { width: 100%; }
.btn-sm { padding: 10px 20px; font-size: 14px; }

/* ---------- Utility bar ---------- */
.utility-bar {
  background: var(--sky-100);
  color: var(--ink-700);
  border-bottom: 1px solid var(--sky-200);
  font-size: 12.5px;
  font-weight: 600;
}
.utility-bar .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-top: 8px;
  padding-bottom: 8px;
  flex-wrap: wrap;
}
.utility-bar .utility-item { display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.utility-bar .utility-item svg { color: var(--amber-700); flex-shrink: 0; }
.utility-bar a { color: var(--sky-700); font-weight: 700; }
.utility-bar a:hover { color: var(--amber-700); }

/* ---------- Header ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 500;
  background: rgba(252, 253, 255, 0.90);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border);
  height: var(--header-h);
}
.site-header .container {
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}
.logo {
  display: flex;
  align-items: center;
  gap: 10px;
  font-family: 'Poppins', sans-serif;
  font-weight: 800;
  font-size: 22px;
  color: var(--ink-900);
  flex-shrink: 0;
}
.logo .logo-mark {
  width: 46px;
  height: 46px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.logo .logo-mark img { width: 100%; height: 100%; object-fit: contain; }
.logo small {
  display: block;
  font-family: 'Inter', sans-serif;
  font-weight: 600;
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.main-nav { display: flex; align-items: center; gap: 4px; }
.main-nav a {
  padding: 10px 16px;
  border-radius: 999px;
  font-weight: 600;
  font-size: 14.5px;
  color: var(--text);
  transition: background 0.15s ease, color 0.15s ease;
}
.main-nav a:hover, .main-nav a.active { background: var(--sky-100); color: var(--sky-700); }

.header-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.header-actions .btn-whatsapp { padding: 11px 20px; font-size: 14px; margin-left: 4px; }

.icon-btn {
  position: relative;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--ink-900);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  transition: all 0.15s ease;
}
.icon-btn:hover { border-color: var(--amber-500); background: var(--amber-100); }
.icon-btn.active { background: var(--sky-600); border-color: var(--sky-600); color: #fff; }
.icon-badge-count {
  position: absolute;
  top: -4px;
  right: -4px;
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  border-radius: 999px;
  background: var(--red-600);
  color: #fff;
  font-size: 10.5px;
  font-weight: 800;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}
.icon-badge-count[hidden] { display: none; }

/* ---------- Nav dropdown (Categories mega-menu) ---------- */
.nav-dropdown { position: relative; }
.nav-dropdown > a { display: flex; align-items: center; gap: 5px; }
.nav-dropdown > a svg.chev { width: 12px; height: 12px; transition: transform 0.15s ease; }
.nav-dropdown > a .chev-btn { display: inline-flex; align-items: center; }
.nav-dropdown-panel {
  position: absolute;
  top: calc(100% + 10px);
  left: 50%;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  padding: 12px;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 4px;
  width: 460px;
  opacity: 0;
  visibility: hidden;
  transform: translateX(-50%) translateY(6px);
  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
  z-index: 400;
}
.nav-dropdown:hover .nav-dropdown-panel,
.nav-dropdown.open .nav-dropdown-panel {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(0);
}
.nav-dropdown:hover > a svg.chev, .nav-dropdown.open > a svg.chev { transform: rotate(180deg); }
.nav-dropdown-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border-radius: var(--radius-sm);
  font-weight: 600;
  font-size: 13.5px;
  color: var(--text);
}
.nav-dropdown-item:hover { background: var(--bg); }
.nav-dropdown-item svg { width: 18px; height: 18px; flex-shrink: 0; }
.nav-dropdown-item.cat-solar svg { color: var(--cat-solar-2); }
.nav-dropdown-item.cat-inverter svg { color: var(--cat-inverter-2); }
.nav-dropdown-item.cat-battery svg { color: var(--cat-battery-2); }
.nav-dropdown-item.cat-distribution svg { color: var(--cat-distribution-2); }
.nav-dropdown-item.cat-security svg { color: var(--cat-security-2); }
.nav-dropdown-item.cat-appliances svg { color: var(--cat-appliances-2); }
.nav-dropdown-item.cat-fittings svg { color: var(--cat-fittings-2); }
.nav-dropdown-item.cat-stands svg { color: var(--cat-stands-2); }
.nav-dropdown-item.cat-vfd svg { color: var(--cat-vfd-2); }
.nav-dropdown-item.cat-fans svg { color: var(--cat-fans-2); }
.nav-dropdown-item.cat-wiring svg { color: var(--cat-wiring-2); }
.nav-dropdown-item.cat-lighting svg { color: var(--cat-lighting-2); }
.nav-dropdown-item.view-all { grid-column: 1 / -1; justify-content: center; background: var(--bg); margin-top: 4px; }

/* ---------- Search ---------- */
.search-panel {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  background: var(--surface);
  border-bottom: 1px solid var(--border);
  box-shadow: var(--shadow-lg);
  padding: 18px 0 22px;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-8px);
  transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
  z-index: 450;
}
.search-panel.active { opacity: 1; visibility: visible; transform: translateY(0); }
.search-input-wrap { position: relative; }
.search-input-wrap svg.search-icon { position: absolute; left: 16px; top: 50%; transform: translateY(-50%); color: var(--text-muted); }
.search-input-wrap input {
  width: 100%;
  padding: 14px 16px 14px 46px;
  border-radius: 999px;
  border: 1.5px solid var(--border);
  font-size: 15px;
  font-family: inherit;
  background: var(--bg);
}
.search-input-wrap input:focus { outline: none; border-color: var(--amber-500); }
.search-results { margin-top: 14px; max-height: 360px; overflow-y: auto; display: grid; gap: 4px; }
.search-result-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-radius: var(--radius-sm);
}
.search-result-item:hover { background: var(--bg); }
.search-result-thumb {
  width: 38px; height: 38px; border-radius: 9px;
  display: flex; align-items: center; justify-content: center;
  color: #fff; flex-shrink: 0;
}
.search-result-thumb svg { width: 20px; height: 20px; }
.search-result-thumb.cat-solar-panels { background: linear-gradient(135deg, var(--cat-solar-1), var(--cat-solar-2)); }
.search-result-thumb.cat-inverters { background: linear-gradient(135deg, var(--cat-inverter-1), var(--cat-inverter-2)); }
.search-result-thumb.cat-batteries { background: linear-gradient(135deg, var(--cat-battery-1), var(--cat-battery-2)); }
.search-result-thumb.cat-distribution { background: linear-gradient(135deg, var(--cat-distribution-1), var(--cat-distribution-2)); }
.search-result-thumb.cat-security { background: linear-gradient(135deg, var(--cat-security-1), var(--cat-security-2)); }
.search-result-thumb.cat-appliances { background: linear-gradient(135deg, var(--cat-appliances-1), var(--cat-appliances-2)); }
.search-result-thumb.cat-fittings { background: linear-gradient(135deg, var(--cat-fittings-1), var(--cat-fittings-2)); }
.search-result-thumb.cat-solar-stands { background: linear-gradient(135deg, var(--cat-stands-1), var(--cat-stands-2)); }
.search-result-thumb.cat-vfd { background: linear-gradient(135deg, var(--cat-vfd-1), var(--cat-vfd-2)); }
.search-result-thumb.cat-fans { background: linear-gradient(135deg, var(--cat-fans-1), var(--cat-fans-2)); }
.search-result-thumb.cat-wiring { background: linear-gradient(135deg, var(--cat-wiring-1), var(--cat-wiring-2)); }
.search-result-thumb.cat-lighting { background: linear-gradient(135deg, var(--cat-lighting-1), var(--cat-lighting-2)); }
.search-result-name { font-weight: 700; font-size: 13.5px; color: var(--ink-900); }
.search-result-cat { font-size: 12px; color: var(--text-muted); text-transform: capitalize; }
.search-empty { padding: 20px; text-align: center; color: var(--text-muted); font-size: 14px; }

/* ---------- Floating side toolbar (share / scroll-to-top) ---------- */
/* Floating action stack. Sits directly on top of the WhatsApp button so the
   three controls read as one connected column: same diameter, no gaps. */
.side-toolbar {
  position: fixed;
  bottom: calc(26px + var(--fab-size));   /* flush on top of .wa-float */
  right: 26px;
  z-index: 590;
  display: flex;
  flex-direction: column;
  gap: 0;
}
.side-toolbar button {
  width: var(--fab-size); height: var(--fab-size);
  border-radius: 50%;
  background: var(--surface);
  border: 1px solid var(--border);
  color: var(--ink-900);
  display: flex; align-items: center; justify-content: center;
  box-shadow: var(--shadow-md);
  pointer-events: auto;
  transition: background 0.2s ease, border-color 0.2s ease;
}
/* Hidden buttons are removed from layout, not just faded — otherwise the
   scroll-top button (hidden until you scroll) leaves a hole in the stack. */
.side-toolbar button:not(.visible) { display: none; }
.side-toolbar button:hover { background: var(--amber-100); border-color: var(--amber-500); }

.nav-toggle {
  display: none;
  width: 42px;
  height: 42px;
  border-radius: 10px;
  border: 1px solid var(--border);
  background: var(--surface);
  align-items: center;
  justify-content: center;
  flex-direction: column;
  gap: 4px;
}
.nav-toggle span { width: 20px; height: 2px; background: var(--ink-900); border-radius: 2px; transition: all 0.2s ease; }
.nav-toggle.active span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.nav-toggle.active span:nth-child(2) { opacity: 0; }
.nav-toggle.active span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

/* ---------- Hero ---------- */
.hero {
  position: relative;
  overflow: hidden;
  background: radial-gradient(1200px 600px at 85% -10%, rgba(245,166,35,0.22), transparent 62%),
              linear-gradient(160deg, var(--sky-200) 0%, var(--sky-100) 52%, var(--sky-50) 100%);
  color: var(--text);
  padding: 96px 0 110px;
}
.hero h1 { color: var(--ink-900); font-size: clamp(34px, 5vw, 54px); }
.hero h1 .accent { color: var(--amber-700); }
.hero .eyebrow { margin-bottom: 18px; }
.hero p.lead { color: var(--text-muted); font-size: 16.5px; max-width: 640px; margin: 0 auto; }
.hero-actions { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 32px; }
.hero .hero-actions { justify-content: center; margin-top: 30px; }

/* ---------- Feature / Icon Cards ---------- */
.grid { display: grid; gap: 20px; }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }
.grid-2 { grid-template-columns: repeat(2, 1fr); }

.card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 32px 28px;
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.card:hover { transform: translateY(-6px); box-shadow: var(--shadow-md); border-color: transparent; }

.icon-badge {
  width: 56px;
  height: 56px;
  border-radius: 14px;
  background: var(--amber-100);
  color: var(--amber-700);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 20px;
}
.icon-badge.navy { background: var(--sky-100); color: var(--sky-700); }

.feature-card h3 { font-size: 19px; margin-bottom: 8px; }
.feature-card p { font-size: 14.5px; margin-bottom: 0; }

/* ---------- Service Cards (Home preview + Services page) ---------- */
.service-card { display: flex; flex-direction: column; height: 100%; }
.service-card .icon-badge { margin-bottom: 18px; }
.service-card h3 { font-size: 20px; }
.service-card p { flex-grow: 1; }
.service-card .btn { align-self: flex-start; margin-top: 12px; }
.service-tag {
  display: inline-block;
  font-size: 12px;
  font-weight: 700;
  color: var(--green-600);
  background: rgba(22,163,74,0.1);
  padding: 4px 10px;
  border-radius: 999px;
  margin-bottom: 14px;
  width: fit-content;
}

/* ---------- Product Grid ---------- */
.filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  justify-content: center;
  margin-bottom: 16px;
}
/* Compact chips so all thirteen categories fit without clipping any of them.
   An earlier single scrolling row hid the last few with no affordance —
   wrapping is better here: a filter set should show every option at once. */
.filter-bar .filter-btn { flex: 0 0 auto; white-space: nowrap; }
.filter-btn {
  padding: 7px 12px;
  border-radius: 999px;
  border: 1.5px solid var(--border);
  background: var(--surface);
  font-weight: 600;
  font-size: 14px;
  color: var(--text-muted);
  transition: all 0.15s ease;
}
.filter-btn:hover { border-color: var(--sky-500); color: var(--ink-900); }
.filter-btn.active { background: var(--sky-600); border-color: var(--sky-600); color: #fff; }

.product-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.product-card:hover { transform: translateY(-6px) scale(1.01); box-shadow: var(--shadow-lg); border-color: transparent; }
.product-thumb {
  aspect-ratio: 4 / 3;
  background: linear-gradient(135deg, var(--sky-500), var(--sky-600));
  display: flex;
  align-items: center;
  justify-content: center;
  color: rgba(255,255,255,0.92);
  position: relative;
  overflow: hidden;
}
.product-thumb::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(120px 90px at 25% 15%, rgba(255,255,255,0.22), transparent 70%);
}
.product-thumb svg { width: 42%; height: 42%; position: relative; z-index: 1; filter: drop-shadow(0 4px 10px rgba(0,0,0,0.18)); }
.product-card:hover .product-thumb svg { transform: scale(1.08); transition: transform 0.25s ease; }

/* Category-coded thumbnails — gives each line its own retail-shelf color */
.product-card[data-category="solar-panels"] .product-thumb,
.gallery-item[data-category="solar-panels"] { background: linear-gradient(135deg, var(--cat-solar-1), var(--cat-solar-2)); }
.product-card[data-category="inverters"] .product-thumb,
.gallery-item[data-category="inverters"] { background: linear-gradient(135deg, var(--cat-inverter-1), var(--cat-inverter-2)); }
.product-card[data-category="batteries"] .product-thumb,
.gallery-item[data-category="batteries"] { background: linear-gradient(135deg, var(--cat-battery-1), var(--cat-battery-2)); }
.product-card[data-category="distribution"] .product-thumb,
.gallery-item[data-category="distribution"] { background: linear-gradient(135deg, var(--cat-distribution-1), var(--cat-distribution-2)); }
.product-card[data-category="security"] .product-thumb,
.gallery-item[data-category="security"] { background: linear-gradient(135deg, var(--cat-security-1), var(--cat-security-2)); }
.product-card[data-category="appliances"] .product-thumb,
.gallery-item[data-category="appliances"] { background: linear-gradient(135deg, var(--cat-appliances-1), var(--cat-appliances-2)); }
.product-card[data-category="fittings"] .product-thumb { background: linear-gradient(135deg, var(--cat-fittings-1), var(--cat-fittings-2)); }
.product-card[data-category="solar-stands"] .product-thumb { background: linear-gradient(135deg, var(--cat-stands-1), var(--cat-stands-2)); }
.product-card[data-category="vfd"] .product-thumb { background: linear-gradient(135deg, var(--cat-vfd-1), var(--cat-vfd-2)); }
.product-card[data-category="fans"] .product-thumb { background: linear-gradient(135deg, var(--cat-fans-1), var(--cat-fans-2)); }
.product-card[data-category="wiring"] .product-thumb { background: linear-gradient(135deg, var(--cat-wiring-1), var(--cat-wiring-2)); }
.product-card[data-category="lighting"] .product-thumb { background: linear-gradient(135deg, var(--cat-lighting-1), var(--cat-lighting-2)); }

.product-category-pill {
  position: absolute;
  top: 12px;
  left: 12px;
  background: rgba(10,16,28,0.55);
  backdrop-filter: blur(4px);
  color: #fff;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  padding: 5px 11px;
  border-radius: 999px;
  z-index: 1;
}
.product-badge {
  position: absolute;
  top: 12px;
  right: 12px;
  background: var(--red-600);
  color: #fff;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  padding: 5px 10px;
  border-radius: 999px;
  z-index: 1;
  box-shadow: 0 4px 10px rgba(225,29,47,0.4);
}
.product-badge.badge-new { background: var(--green-600); box-shadow: 0 4px 10px rgba(22,163,74,0.4); }
.product-badge.badge-popular { background: var(--amber-600); box-shadow: 0 4px 10px rgba(224,147,15,0.4); }

.product-body { padding: 16px 18px 18px; display: flex; flex-direction: column; gap: 4px; flex-grow: 1; }
.product-body h3 { font-size: 16px; margin-bottom: 2px; }
.product-body p { font-size: 13px; margin-bottom: 10px; }
/* The description absorbs the leftover space, so everything after it — the
   "N options available" hint and the button row — is pinned to the bottom of
   the card. Cards in a row are equal height, so those all line up even when
   the descriptions run to different lengths. */
.product-body > p:not(.product-model-hint) { flex-grow: 1; margin-bottom: 10px; }
.product-actions { display: flex; gap: 8px; margin-top: 0; }
.product-actions .btn { flex: 1; margin-top: 0; }
/* Still needed for cards whose button is a direct child (related, recent, saved). */
.product-body > .btn { margin-top: auto; }

/* ---------- Gallery ---------- */
.gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.gallery-item {
  position: relative;
  border-radius: var(--radius-md);
  overflow: hidden;
  aspect-ratio: 4/3;
  background: linear-gradient(135deg, var(--sky-500), var(--sky-600));
  display: flex;
  align-items: center;
  justify-content: center;
  color: rgba(255,255,255,0.85);
  cursor: pointer;
}
.gallery-item svg { width: 34%; height: 34%; }
.gallery-caption {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 16px;
  background: linear-gradient(180deg, transparent, rgba(10,26,48,0.88));
  color: #fff;
  font-size: 13.5px;
  font-weight: 600;
}

.lightbox {
  position: fixed;
  inset: 0;
  background: rgba(22, 40, 66, 0.55);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 1000;
  padding: 40px;
}
.lightbox.active { display: flex; }
.lightbox-inner {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  max-width: 640px;
  width: 100%;
  padding: 40px;
  text-align: center;
  color: var(--text);
  box-shadow: var(--shadow-lg);
  position: relative;
}
.lightbox-inner h3 { color: var(--ink-900); }
.lightbox-inner svg { width: 120px; height: 120px; margin: 0 auto 20px; color: var(--amber-500); }
.lightbox-inner img { display: block; width: 100%; max-height: 60vh; object-fit: contain; border-radius: var(--radius-md); margin: 0 0 20px; }
.lightbox-inner img[hidden] { display: none; }
.lightbox-close {
  position: absolute;
  top: 18px; right: 18px;
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--sky-100);
  color: var(--ink-800);
  border: none;
  font-size: 18px;
  display: flex; align-items: center; justify-content: center;
}

/* ---------- Blog ---------- */
.blog-card { display: flex; flex-direction: column; overflow: hidden; }
.blog-thumb {
  aspect-ratio: 16/9;
  background: linear-gradient(135deg, var(--amber-100), #fff);
  display: flex; align-items: center; justify-content: center;
  color: var(--amber-700);
}
.blog-thumb svg { width: 30%; height: 30%; }
.blog-body { padding: 22px 22px 24px; }
.blog-date { font-size: 12.5px; font-weight: 700; color: var(--green-600); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 10px; display: block; }
.blog-body h3 { font-size: 19px; }
.blog-body a.read-more { font-weight: 700; color: var(--ink-900); display: inline-flex; align-items: center; gap: 6px; margin-top: 6px; }

/* ---------- Timeline / About ---------- */
.about-hero { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.value-list li { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 20px; }
.value-list .icon-badge { flex-shrink: 0; width: 44px; height: 44px; margin-bottom: 0; }
.value-list h4 { font-size: 16.5px; margin-bottom: 4px; }
.value-list p { font-size: 14px; margin-bottom: 0; }

/* ---------- CTA banner ---------- */
.cta-banner {
  border-radius: var(--radius-lg);
  background: linear-gradient(120deg, var(--sky-200), var(--amber-100) 85%);
  border: 1px solid var(--sky-200);
  color: var(--text);
  padding: 56px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  flex-wrap: wrap;
  position: relative;
  overflow: hidden;
}
.cta-banner::after {
  content: "";
  position: absolute;
  right: -60px; top: -60px;
  width: 260px; height: 260px;
  background: radial-gradient(circle, rgba(245,166,35,0.42), transparent 70%);
}
.cta-banner h2 { color: var(--ink-900); margin-bottom: 8px; }
.cta-banner p { color: var(--text-muted); margin-bottom: 0; }
.cta-text { max-width: 520px; position: relative; z-index: 1; }
.cta-actions { position: relative; z-index: 1; display: flex; gap: 14px; flex-wrap: wrap; }

/* ---------- Contact ---------- */
.contact-grid { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 48px; align-items: start; }
.contact-info-card {
  background: linear-gradient(160deg, var(--sky-100), var(--sky-50));
  border: 1px solid var(--sky-200);
  color: var(--text);
  border-radius: var(--radius-lg);
  padding: 40px;
}
.contact-info-card h3 { color: var(--ink-900); }
.contact-info-row { display: flex; gap: 16px; align-items: flex-start; margin-bottom: 26px; }
.contact-info-row:last-child { margin-bottom: 0; }
.contact-info-row .icon-badge { background: var(--amber-100); color: var(--amber-700); flex-shrink: 0; margin-bottom: 0; }
.contact-info-row h4 { color: var(--ink-900); font-size: 15px; margin-bottom: 4px; }
.contact-info-row p { color: var(--text-muted); margin-bottom: 0; font-size: 14.5px; }

.form-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 40px;
}
.form-row { margin-bottom: 20px; }
.form-row label { display: block; font-weight: 600; font-size: 14px; margin-bottom: 8px; color: var(--ink-900); }
.form-row input, .form-row textarea, .form-row select {
  width: 100%;
  padding: 13px 16px;
  border-radius: var(--radius-sm);
  border: 1.5px solid var(--border);
  font-family: inherit;
  font-size: 14.5px;
  background: #fbfcfe;
  transition: border-color 0.15s ease;
}
.form-row input:focus, .form-row textarea:focus, .form-row select:focus {
  outline: none;
  border-color: var(--amber-500);
}
.form-row textarea { resize: vertical; min-height: 120px; }
.form-note { font-size: 13px; color: var(--text-muted); margin-top: 14px; text-align: center; }

/* ---------- Footer ---------- */
.site-footer { background: var(--sky-100); border-top: 1px solid var(--sky-200); color: var(--text-muted); padding: 72px 0 28px; }
.footer-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr; gap: 40px; margin-bottom: 48px; }
.footer-logo img { width: 32px; height: 32px; object-fit: contain; }
.footer-logo { display: flex; align-items: center; gap: 10px; font-family: 'Poppins', sans-serif; font-weight: 800; font-size: 20px; color: var(--ink-900); margin-bottom: 16px; }
.footer-col h4 { color: var(--ink-900); font-size: 15px; margin-bottom: 18px; }
.footer-col ul li { margin-bottom: 12px; }
.footer-col a { font-size: 14px; color: var(--text-muted); transition: color 0.15s ease; }
.footer-col a:hover { color: var(--amber-700); }
.footer-social { display: flex; gap: 10px; margin-top: 18px; }
.footer-social a {
  width: 38px; height: 38px; border-radius: 50%;
  background: var(--surface);
  border: 1px solid var(--sky-200);
  display: flex; align-items: center; justify-content: center;
  color: var(--ink-800);
}
.footer-social a:hover { background: var(--amber-500); color: var(--ink-900); border-color: var(--amber-500); }
/* Same row of icons on the contact card, centred under the WhatsApp button. */
.contact-social { justify-content: center; margin-top: 20px; }
.footer-bottom {
  border-top: 1px solid var(--sky-200);
  padding-top: 24px;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  font-size: 13px;
  color: var(--text-muted);
}

/* ---------- Floating WhatsApp ---------- */
.wa-float {
  position: fixed;
  bottom: 26px;
  right: 26px;
  z-index: 600;
  width: var(--fab-size);
  height: var(--fab-size);
  border-radius: 50%;
  background: var(--wa-green);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 10px 28px rgba(37, 211, 102, 0.45);
  animation: wa-pulse 2.6s ease-in-out infinite;
}
.wa-float svg { width: 30px; height: 30px; color: #fff; }
@keyframes wa-pulse {
  0%, 100% { box-shadow: 0 10px 28px rgba(37, 211, 102, 0.45); }
  50% { box-shadow: 0 10px 28px rgba(37, 211, 102, 0.7); }
}

/* ---------- Page header (inner pages) ---------- */
.page-hero {
  background: linear-gradient(160deg, var(--sky-200), var(--sky-50));
  border-bottom: 1px solid var(--sky-200);
  color: var(--text);
  padding: 26px 0 30px;
  text-align: center;
}
.page-hero h1 { color: var(--ink-900); font-size: clamp(24px, 3.2vw, 32px); margin-bottom: 8px; }
.page-hero p { color: var(--text-muted); max-width: 680px; margin: 0 auto; font-size: 14.5px; }
.breadcrumb { display: flex; justify-content: center; gap: 8px; font-size: 12.5px; color: var(--text-muted); margin-bottom: 10px; }
.breadcrumb a { color: var(--sky-700); font-weight: 600; }

/* ---------- Utility ---------- */
.text-center { text-align: center; }

/* ---------- Responsive ---------- */

/* The full header — logo, strapline, seven nav items and three actions —
   needs about 1205px. Between there and 1080 it fits once the paddings are
   tightened; below 1140 it does not, so the nav becomes the drawer rather
   than overflowing the container and giving the page a horizontal scrollbar.
   (The drawer used to start at 760px, which left every laptop-ish width
   between 760 and 1205 scrolling sideways.) */
@media (max-width: 1210px) {
  .site-header .container { gap: 12px; }
  .main-nav a { padding: 10px 12px; }
  .header-actions .btn-whatsapp { padding: 11px 16px; margin-left: 0; }
}

@media (max-width: 1140px) {
  .main-nav, .header-actions .btn-whatsapp span.label { display: none; }
  .nav-toggle { display: flex; }
  .main-nav {
    position: fixed;
    top: var(--header-h);
    left: 0; right: 0;
    background: var(--surface);
    border-bottom: 1px solid var(--border);
    flex-direction: column;
    align-items: stretch;
    padding: 12px;
    display: none;
    box-shadow: var(--shadow-md);
  }
  .main-nav.active { display: flex; }
  .main-nav a { padding: 14px 16px; border-radius: var(--radius-sm); }

  /* Tapping "Products" opens the products page; only the chevron expands the
     category list, so the menu is never a dead end. */
  .nav-dropdown > a { justify-content: space-between; }
  .nav-dropdown > a .chev-btn {
    padding: 14px 16px;
    margin: -14px -16px -14px 0;
    border-radius: var(--radius-sm);
  }
  .nav-dropdown > a .chev-btn svg.chev { width: 15px; height: 15px; }
  .nav-dropdown-panel {
    position: static;
    width: auto;
    transform: none;
    display: none;
    opacity: 1;
    visibility: visible;
    border: 0;
    box-shadow: none;
    background: transparent;
    padding: 2px 0 6px 12px;
    grid-template-columns: 1fr 1fr;
    gap: 2px;
  }
  .nav-dropdown.open .nav-dropdown-panel { display: grid; transform: none; }
  .nav-dropdown-item { padding: 11px 10px; font-size: 13px; }
  .nav-dropdown-item.view-all { margin-top: 6px; }
}

@media (max-width: 980px) {
  .about-hero, .contact-grid { grid-template-columns: 1fr; }
  .grid-4 { grid-template-columns: repeat(3, 1fr); }
  .grid-3 { grid-template-columns: repeat(2, 1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .gallery-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 760px) {
  .grid-3, .grid-4 { grid-template-columns: repeat(2, 1fr); }
  .grid-2 { grid-template-columns: 1fr; }
  .gallery-grid { grid-template-columns: 1fr; }
  .cta-banner { flex-direction: column; text-align: center; padding: 40px 28px; }
  .cta-actions { justify-content: center; }
  .form-card, .contact-info-card { padding: 28px; }
}

/* ==========================================================================
   PRODUCT PHOTOGRAPHY
   Real product photos sit on a light plate inside the coloured category tile.
   When `image` is null in products-data.js the SVG icon shows instead, so the
   grid never breaks while photos are still being sourced.
   ========================================================================== */
.product-thumb img {
  position: relative;
  z-index: 1;
  width: 100%;
  height: 100%;
  object-fit: contain;
  padding: 14px;
  background: #ffffff;
  transition: transform 0.3s ease;
}
.product-card:hover .product-thumb img { transform: scale(1.05); }

/* ==========================================================================
   Card slideshow — products carrying an `images` list in products-data.js
   show their angles on the grid card itself. The slides are stacked and
   cross-faded rather than scrolled, so the tile never changes height and the
   grid does not reflow while a card is cycling. Everything below only ever
   applies to .has-slides, so single-photo cards are untouched.
   ========================================================================== */
.product-thumb.has-slides img.pslide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 0.5s ease, transform 0.3s ease;
  pointer-events: none;
}
.product-thumb.has-slides img.pslide.is-active { opacity: 1; }
/* On a single-photo tile the opaque photo sits over the pill and badge and
   hides them. The slides are mid-fade for half a second at a time, so without
   this they would flash into view on every step. Hidden here to match what a
   photo card already looks like. */
.product-thumb.has-slides .product-category-pill,
.product-thumb.has-slides .product-badge { display: none; }
/* A slide whose file 404s is taken out of the rotation entirely. */
.product-thumb.has-slides img.pslide.slide-failed { display: none; }

.product-dots {
  position: absolute;
  left: 0; right: 0; bottom: 10px;
  z-index: 3;
  display: flex;
  justify-content: center;
  gap: 6px;
  pointer-events: auto;
}
.product-dots button {
  width: 7px; height: 7px; padding: 0;
  border: 0; border-radius: 50%;
  background: rgba(10,16,28,0.28);
  cursor: pointer;
  transition: background 0.2s ease, transform 0.2s ease;
}
.product-dots button:hover { background: rgba(10,16,28,0.55); }
.product-dots button.is-active { background: var(--red-600); transform: scale(1.35); }
.product-dots button:focus-visible { outline: 2px solid var(--amber-500); outline-offset: 2px; }

/* A quiet hint that the tile holds more than one photo, shown until the
   card is hovered and the cycling takes over as its own signal. */
.product-thumb.has-slides .slide-count {
  position: absolute;
  right: 10px; bottom: 8px;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: rgba(10,16,28,0.6);
  color: #fff;
  font-size: 10.5px;
  font-weight: 700;
  padding: 3px 7px;
  border-radius: 999px;
  transition: opacity 0.2s ease;
}
.product-card:hover .product-thumb.has-slides .slide-count { opacity: 0; }

/* Motion is the whole point of the effect, so when it is not wanted the
   slides stop cycling and the dots become the only way through them. */
@media (prefers-reduced-motion: reduce) {
  .product-thumb.has-slides img.pslide { transition: none; }
}

/* Photo tiles get a white plate, so the category gradient reads only as a thin
   frame — keeps the shelf colour-coding without tinting the product itself. */
.product-thumb.has-photo { background: #ffffff !important; padding: 0; }
.product-thumb.has-photo::after { display: none; }
/* The icon stays in the markup as the onerror fallback — hide it while the
   photo is showing. If the image 404s, JS drops .has-photo and the icon returns. */
.product-thumb.has-photo > svg { display: none; }
.product-thumb.has-photo .product-category-pill { background: rgba(10,16,28,0.72); }

/* Broken/missing image: hide the <img> and let the icon fallback show */
.product-thumb img.img-failed { display: none; }

/* ==========================================================================
   MODEL / VARIANT CHIPS (product detail page)
   ========================================================================== */
.pdp-models { margin: 22px 0 6px; }
.pdp-models h3 {
  font-size: 14px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--text-muted);
  margin: 0 0 12px;
}
.pdp-model-chips { display: flex; flex-wrap: wrap; gap: 9px; }
.pdp-model-chip {
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--ink-900, #16304f);
  background: var(--surface);
  border: 1.5px solid var(--border);
  border-radius: 999px;
  padding: 8px 16px;
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease;
}
.pdp-model-chip:hover { border-color: var(--amber-500); transform: translateY(-1px); }
.pdp-model-chip.selected {
  background: var(--sky-600);
  border-color: var(--sky-600);
  color: #fff;
}
.pdp-model-note {
  font-size: 12.5px;
  color: var(--text-muted);
  margin: 12px 0 0;
  line-height: 1.55;
}

/* Brand tag under the product title */
.pdp-brands { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 0; }
.pdp-brand-tag {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--text-muted);
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 5px 13px;
}

/* Model count hint on the grid card */
.product-model-hint {
  font-size: 12px;
  font-weight: 700;
  color: var(--text-muted);
  letter-spacing: 0.02em;
  margin: 0 0 12px;
}

/* ==========================================================================
   SITE PHOTOGRAPHY & VIDEO
   Real imagery for the landing page, gallery, services, about and blog.
   Every rule degrades to the original gradient/icon look if a file is missing.
   ========================================================================== */

/* --- Hero with full-bleed video ------------------------------------------ */
.hero.hero-media-on { padding: 0; }
.hero-media {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  background: var(--sky-200);
}
.hero-media video,
.hero-media img.hero-fallback {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  /* The wash above is light, so lift the footage rather than deepen it */
  filter: saturate(0.88) brightness(1.06) contrast(0.98);
}
.hero-media img.hero-fallback { position: absolute; inset: 0; }
/* Scrim: a daylight wash rather than a dark one — the hero content is centred
   and set in ink, so the footage has to be pushed back towards white while
   staying visible. Opacities are high enough that any frame, including the
   dusk shots, keeps the headline and the glass panel legible. */
.hero-scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(180deg, rgba(228,240,253,0.90) 0%, rgba(235,244,254,0.80) 42%, rgba(222,236,252,0.93) 100%),
    radial-gradient(1100px 600px at 50% 42%, rgba(150,191,233,0.42), transparent 70%),
    radial-gradient(760px 420px at 88% 4%, rgba(245,166,35,0.26), transparent 64%);
}
.hero.hero-media-on .container { position: relative; z-index: 2; }
.hero-inner {
  max-width: 940px;
  margin: 0 auto;
  padding: 56px 0 66px;
  text-align: center;
}
.hero-badges { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 30px; }
.hero-badge {
  display: inline-flex; align-items: center; gap: 8px;
  background: rgba(255,255,255,0.80);
  border: 1px solid var(--sky-200);
  backdrop-filter: blur(6px);
  color: var(--ink-800); font-size: 13px; font-weight: 700;
  padding: 8px 15px; border-radius: 999px;
}
.hero-badge svg { color: var(--amber-700); flex-shrink: 0; }

/* Viewers who ask for less motion get the still poster instead of the loop */
@media (prefers-reduced-motion: reduce) {
  .hero-media video { display: none; }
  .hero-media img.hero-fallback { display: block !important; }
}

/* --- Stat strip under the hero ------------------------------------------- */
.stat-strip { background: var(--surface); border-bottom: 1px solid var(--border); }
.stat-strip .container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 24px;
  padding-top: 30px;
  padding-bottom: 30px;
}
.stat-item { display: flex; align-items: center; gap: 14px; }
.stat-item svg { color: var(--amber-700); flex-shrink: 0; }
.stat-num { font-size: 24px; font-weight: 800; color: var(--ink-900); line-height: 1.1; }
.stat-label { font-size: 13px; color: var(--text-muted); font-weight: 600; }

/* --- Photo tiles (gallery + recent installs) ----------------------------- */
.gallery-item img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 0;
  transition: transform 0.5s cubic-bezier(.2,.7,.3,1);
}
.gallery-item:hover img { transform: scale(1.07); }
/* Hide the placeholder icon once a photo is in place */
.gallery-item.has-photo > svg { display: none; }
.gallery-item.has-photo::after {
  content: "";
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(to top, rgba(7,15,29,0.82) 0%, rgba(7,15,29,0.20) 46%, rgba(7,15,29,0.04) 100%);
}
.gallery-item .gallery-caption { position: relative; z-index: 2; }

/* --- Media card: photo on top of a card (services, blog) ----------------- */
.media-top {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: linear-gradient(135deg, var(--sky-200), var(--sky-300));
}
.media-top img {
  width: 100%; height: 100%; object-fit: cover; display: block;
  transition: transform 0.45s cubic-bezier(.2,.7,.3,1);
}
.card:hover .media-top img,
.service-card:hover .media-top img { transform: scale(1.06); }
.media-top .media-tag {
  position: absolute; left: 14px; top: 14px; z-index: 2;
  background: rgba(10,16,28,0.62); backdrop-filter: blur(4px);
  color: #fff; font-size: 11px; font-weight: 800; letter-spacing: 0.04em;
  text-transform: uppercase; padding: 6px 12px; border-radius: 999px;
}

/* Service cards become image-led; the icon badge straddles the photo edge */
.service-card.has-media { padding: 0; overflow: hidden; }
.service-card.has-media .service-body {
  padding: 0 24px 26px; display: flex; flex-direction: column; flex-grow: 1;
}
.service-card.has-media .icon-badge {
  margin: -30px 0 14px 0; position: relative; z-index: 3;
  box-shadow: 0 8px 20px rgba(38,74,117,0.18);
}

/* Blog thumbnails */
.blog-thumb { position: relative; overflow: hidden; }
.blog-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.45s ease; }
.blog-thumb.has-photo > svg { display: none; }
.blog-card:hover .blog-thumb img { transform: scale(1.05); }

/* --- Split feature block (about / why-us) -------------------------------- */
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: center; }
.split-media {
  position: relative;
  border-radius: var(--radius-lg);
  overflow: hidden;
  aspect-ratio: 4 / 3;
  box-shadow: var(--shadow-lg);
  background: var(--sky-200);
}
.split-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Amber corner accent so photos feel designed rather than dropped in */
.split-media::after {
  content: "";
  position: absolute; left: 0; bottom: 0;
  width: 84px; height: 6px; background: var(--amber-500);
}

/* Overlapping duo used on the About page */
.media-duo { position: relative; padding-bottom: 54px; padding-right: 42px; }
.media-duo .split-media:last-child {
  position: absolute; right: 0; bottom: 0;
  width: 52%; aspect-ratio: 1/1;
  border: 6px solid var(--surface);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-md);
}

/* --- Full-width photo band ----------------------------------------------- */
.photo-band {
  position: relative;
  display: flex;
  align-items: center;
  overflow: hidden;
  background: var(--sky-100);
}
.photo-band > img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; z-index: 0;
}
.photo-band::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(95deg, rgba(222,236,252,0.96) 0%, rgba(228,240,253,0.84) 52%, rgba(234,243,255,0.52) 100%);
}
.photo-band .container { position: relative; z-index: 2; padding-top: 66px; padding-bottom: 66px; }
.photo-band h2, .photo-band h3 { color: var(--ink-900); }
.photo-band p { color: var(--text-muted); }

/* --- Page hero with a photo behind it ------------------------------------ */
.page-hero.has-photo { position: relative; overflow: hidden; }
.page-hero.has-photo > img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; z-index: 0;
}
.page-hero.has-photo::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(100deg, rgba(219,234,251,0.96) 0%, rgba(226,239,253,0.87) 55%, rgba(232,242,255,0.66) 100%);
}
.page-hero.has-photo .container { position: relative; z-index: 2; }

/* --- Responsive ----------------------------------------------------------- */
@media (max-width: 960px) {
  .split { grid-template-columns: 1fr; gap: 30px; }
  .media-duo { padding-bottom: 0; padding-right: 0; }
  .media-duo .split-media:last-child {
    position: static; width: 100%; aspect-ratio: 16/10; border: 0; margin-top: 16px;
  }
  .stat-strip .container { grid-template-columns: repeat(2, 1fr); gap: 20px; }
}
@media (max-width: 700px) {
  .photo-band::after { background: linear-gradient(180deg, rgba(222,236,252,0.95), rgba(228,240,253,0.91)); }
}
@media (max-width: 520px) {
  /* Two-up, not stacked — four full-width rows pushed the page content down
     further than the numbers were worth. */
  .stat-strip .container { grid-template-columns: repeat(2, 1fr); gap: 16px 12px; }
  .stat-item { gap: 10px; }
  .stat-item > svg { width: 24px; height: 24px; }
  .stat-num { font-size: 19px; }
  .stat-label { font-size: 11.5px; line-height: 1.35; }
}

/* ==========================================================================
   PAGE-HERO SLIDESHOW
   Same treatment as the single-photo page heroes, but the image crossfades
   through several shots. Only the hero band is affected — the rest of the
   page keeps its plain background.
   ========================================================================== */
/* The shared .has-photo scrim is tuned for a single, bright photo. These
   frames include dusk and aerial shots, so ease it off or they read as black. */
.page-hero.has-slides::after {
  background: linear-gradient(100deg,
    rgba(219,234,251,0.94) 0%,
    rgba(226,239,253,0.83) 52%,
    rgba(232,242,255,0.64) 100%);
}
.page-hero.has-slides > img {
  opacity: 0;
  animation: heroSlides 48s linear infinite;
  will-change: opacity;
}
/* 6 frames over 48s = 8s each, fades overlapping so there is never a blank beat.
   Every delay is shifted back by the 1.9s fade-in, so frame 1 is already at
   full opacity on load — otherwise the band flashes empty sky for ~2s. */
.page-hero.has-slides > img:nth-of-type(1) { animation-delay: -2s; }
.page-hero.has-slides > img:nth-of-type(2) { animation-delay:  6s; }
.page-hero.has-slides > img:nth-of-type(3) { animation-delay: 14s; }
.page-hero.has-slides > img:nth-of-type(4) { animation-delay: 22s; }
.page-hero.has-slides > img:nth-of-type(5) { animation-delay: 30s; }
.page-hero.has-slides > img:nth-of-type(6) { animation-delay: 38s; }

@keyframes heroSlides {
  0%     { opacity: 0; }
  4%     { opacity: 1; }
  16.67% { opacity: 1; }
  20.67% { opacity: 0; }
  100%   { opacity: 0; }
}

/* Reduced-motion viewers get the first frame as a still photo. */
@media (prefers-reduced-motion: reduce) {
  .page-hero.has-slides > img { animation: none; opacity: 0; }
  .page-hero.has-slides > img:nth-of-type(1) { opacity: 1; }
}

/* ==========================================================================
   MOBILE FIXES
   Appended last so these win over the earlier breakpoints.

   The header used to overflow to ~515px on a 360-390px screen: both .logo and
   .header-actions were flex-shrink:0, so nothing could compress and the
   hamburger ended up off-screen entirely — the menu was unreachable on a
   phone. These rules let the header shrink and drop what a phone doesn't need.
   ========================================================================== */

@media (max-width: 760px) {

  /* --- Utility bar: one compact line instead of three stacked rows (110px) - */
  .utility-bar .container {
    justify-content: center;
    gap: 0;
    padding-top: 7px;
    padding-bottom: 7px;
  }
  /* Keep only the actionable WhatsApp line; hours live in the footer. */
  .utility-bar .utility-item { display: none; }
  .utility-bar .utility-item:last-child { display: flex; font-size: 12px; }

  /* --- Header must fit the screen -------------------------------------- */
  .site-header .container { gap: 10px; }
  .logo {
    min-width: 0;
    flex-shrink: 1;
    font-size: 18px;
    gap: 8px;
  }
  .logo .logo-mark { width: 38px; height: 38px; flex-shrink: 0; }
  /* The strapline is the first thing to go — the brand name carries it. */
  .logo small { display: none; }

  .header-actions { gap: 6px; flex-shrink: 0; }
  /* The floating WhatsApp button already covers this action on mobile. */
  .header-actions .btn-whatsapp { display: none; }
  .icon-btn { width: 38px; height: 38px; }
  .nav-toggle { flex-shrink: 0; }

  /* --- Don't let the tightened catalog section get its padding back ----- */
  .section-top-tight { padding-top: 22px; }

  /* --- Page heroes stay compact ---------------------------------------- */
  .page-hero { padding: 22px 0 26px; }
  .page-hero p { font-size: 13.5px; }

  /* --- Filter chips: smaller so they take fewer rows ------------------- */
  .filter-bar { gap: 5px; margin-bottom: 14px; }
  .filter-btn { padding: 6px 11px; font-size: 12.5px; }
}

@media (max-width: 560px) {
  /* Two cards per row is still the right density, but side-by-side buttons
     are far too narrow at this width — stack them. */
  .product-actions { flex-direction: column; gap: 7px; }
  .product-actions .btn { width: 100%; flex: 0 0 auto; }
  .product-body { padding: 12px 13px 14px; }
  .product-body h3 { font-size: 14.5px; }
  .product-body p { font-size: 12.5px; }
  .product-model-hint { font-size: 11.5px; }

  /* Products (.grid-4) stay two-up — compact cards, and hundreds of them. But the
     service/feature cards (.grid-3) carry a photo, a heading and a paragraph
     each, which truncates badly at ~160px. Those go full width. */
  .grid-3 { grid-template-columns: 1fr; }

  .grid { gap: 14px; }
  .container { padding-left: 16px; padding-right: 16px; }

  /* Floating buttons shouldn't eat the screen */
  :root { --fab-size: 50px; }
  .side-toolbar, .wa-float { right: 14px; }
  .wa-float { bottom: 14px; }
  .side-toolbar { bottom: calc(14px + var(--fab-size)); }
}

@media (max-width: 340px) {
  /* Only the very narrowest phones drop to one column. 360px and 390px keep
     two, which is the norm for a catalog this size — hundreds of products in a single
     column is a punishing scroll. */
  .grid-3, .grid-4 { grid-template-columns: 1fr; }
  .logo { font-size: 16px; }
}

/* ==========================================================================
   HOME HERO — CATEGORY CHOOSER
   The landing page leads with a category picker over the hero footage instead
   of product cards: every tile deep-links to products.html#<category>, which
   wireProductFilter() picks up and applies as the active filter.
   ========================================================================== */

.choose-label {
  display: block;
  margin-top: 28px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink-700);
}

.cat-chooser {
  max-width: 860px;
  margin: 18px auto 0;
  padding: 26px 22px;
  border-radius: var(--radius-lg);
  background: rgba(255, 255, 255, 0.70);
  border: 1px solid rgba(255, 255, 255, 0.95);
  /* Falls back to the flat translucent white above where blur is unsupported */
  backdrop-filter: blur(14px) saturate(1.15);
  -webkit-backdrop-filter: blur(14px) saturate(1.15);
  box-shadow: 0 26px 64px rgba(38, 74, 117, 0.16);
}
.cat-chooser-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 4px;
}
.cat-tile {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: 11px;
  padding: 18px 8px 16px;
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  color: var(--ink-800);
  transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
}
.cat-tile svg {
  width: 34px;
  height: 34px;
  color: var(--sky-700);
  transition: color 0.18s ease;
}
.cat-tile span {
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.3;
}
.cat-tile:hover,
.cat-tile:focus-visible {
  background: rgba(255, 255, 255, 0.85);
  border-color: var(--sky-200);
  transform: translateY(-3px);
  outline: none;
}
.cat-tile:hover svg,
.cat-tile:focus-visible svg { color: var(--amber-700); }
.cat-tile:focus-visible { box-shadow: 0 0 0 2px rgba(245, 166, 35, 0.55); }

@media (max-width: 860px) {
  .hero-inner { padding: 58px 0 66px; }
  .cat-chooser-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 560px) {
  .hero-inner { padding: 40px 0 48px; }
  .hero p.lead { font-size: 14.5px; }
  .choose-label { margin-top: 26px; letter-spacing: 0.16em; }
  .cat-chooser { padding: 16px 12px; border-radius: var(--radius-md); }
  .cat-tile { padding: 14px 4px 12px; gap: 9px; }
  .cat-tile svg { width: 28px; height: 28px; }
  .cat-tile span { font-size: 12px; }
  .hero .hero-actions { gap: 10px; }
}
@media (max-width: 360px) {
  .cat-chooser-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (prefers-reduced-motion: reduce) {
  .cat-tile, .cat-tile svg { transition: none; }
  .cat-tile:hover, .cat-tile:focus-visible { transform: none; }
}


/* ==========================================================================
   BRAND INTRO (home page)
   A daylight curtain holds the logo centre-screen, then js/intro.js flies it into
   the header slot while the hero copy fades up. Everything here is additive:
   without .intro-pending on <body> the page renders exactly as normal, which
   is also the no-JS and reduced-motion state.
   ========================================================================== */

.brand-intro {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  background: radial-gradient(60% 60% at 50% 45%, #ffffff, var(--sky-200) 72%);
  transition: background 0.6s ease 0.1s;
}
/* The curtain clears while the logo is still in the air. */
.brand-intro.lifting { background: transparent; pointer-events: none; }

/* Stage holds the drawn outline and the finished artwork in register; the
   flight animates the stage, so both travel as one. */
.brand-intro-stage {
  position: relative;
  width: min(230px, 42vw);
  aspect-ratio: 1 / 1;
  opacity: 0;
  transform: scale(0.94);
  transition: opacity 0.4s ease, transform 0.6s cubic-bezier(0.2, 0.9, 0.3, 1);
  will-change: transform;
}
.brand-intro.ready .brand-intro-stage { opacity: 1; transform: scale(1); }

.brand-intro-draw,
.brand-intro-logo {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.brand-intro-draw {
  /* The curtain is white now, so the outline is deepened and the old red glow
     — which only read against navy — becomes a soft drop shadow instead. */
  color: #c9281f;
  filter: drop-shadow(0 2px 8px rgba(201, 40, 31, 0.20));
  transition: opacity 0.35s ease;
}
.brand-intro-draw path {
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
}
/* The pen stroke: each contour draws itself, staggered so the silhouette
   leads and the details follow. */
.brand-intro.drawing .brand-intro-draw path {
  animation: intro-draw 0.75s cubic-bezier(0.55, 0, 0.25, 1) forwards;
}
.brand-intro.drawing .brand-intro-draw path:nth-child(1) { animation-delay: 0.00s; }
.brand-intro.drawing .brand-intro-draw path:nth-child(2) { animation-delay: 0.05s; }
.brand-intro.drawing .brand-intro-draw path:nth-child(3) { animation-delay: 0.10s; }
.brand-intro.drawing .brand-intro-draw path:nth-child(4) { animation-delay: 0.14s; }
.brand-intro.drawing .brand-intro-draw path:nth-child(5) { animation-delay: 0.18s; }
.brand-intro.drawing .brand-intro-draw path:nth-child(6) { animation-delay: 0.22s; }
.brand-intro.drawing .brand-intro-draw path:nth-child(7) { animation-delay: 0.26s; }

@keyframes intro-draw { to { stroke-dashoffset: 0; } }

.brand-intro-logo {
  object-fit: contain;
  opacity: 0;
  transition: opacity 0.42s ease;
  filter: drop-shadow(0 18px 40px rgba(38, 74, 117, 0.28));
}
/* Outline hands over to the real artwork. */
.brand-intro.filled .brand-intro-logo { opacity: 1; }
.brand-intro.filled .brand-intro-draw { opacity: 0; }

/* The header mark stays empty until the flying logo lands on it. */
body.intro-pending .logo .logo-mark img { opacity: 0; }
body.intro-pending { overflow: hidden; }

/* Hero copy is held back, then staggered up behind the travelling logo. */
body.intro-pending .hero-inner > * {
  opacity: 0;
  transform: translateY(18px);
}
body.intro-revealing .hero-inner > * {
  animation: intro-rise 0.6s cubic-bezier(0.22, 0.8, 0.3, 1) forwards;
}
body.intro-revealing .hero-inner > *:nth-child(1) { animation-delay: 0.00s; }
body.intro-revealing .hero-inner > *:nth-child(2) { animation-delay: 0.08s; }
body.intro-revealing .hero-inner > *:nth-child(3) { animation-delay: 0.16s; }
body.intro-revealing .hero-inner > *:nth-child(4) { animation-delay: 0.24s; }
body.intro-revealing .hero-inner > *:nth-child(5) { animation-delay: 0.32s; }
body.intro-revealing .hero-inner > *:nth-child(6) { animation-delay: 0.40s; }

@keyframes intro-rise {
  to { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .brand-intro { display: none; }
  body.intro-pending { overflow: auto; }
  body.intro-pending .logo .logo-mark img,
  body.intro-pending .hero-inner > * { opacity: 1; transform: none; }
}

/* ==========================================================================
   CATALOG DRILL-DOWN  (products.html)
   Category → brand cards → that brand's products → product detail.
   The trail and the Back button are the only way back up on mobile, so they
   render in every view except the top-level "All".
   ========================================================================== */

.catalog-trail {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 18px;
}
.catalog-trail[hidden] { display: none; }
.catalog-back {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 8px 16px;
  border-radius: 999px;
  border: 1.5px solid var(--border);
  background: var(--surface);
  color: var(--ink-800);
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 700;
  transition: border-color 0.15s ease, background 0.15s ease;
}
.catalog-back:hover { border-color: var(--sky-500); background: var(--sky-100); }
.catalog-crumb {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13.5px;
  color: var(--text-muted);
  flex-wrap: wrap;
}
.catalog-crumb button {
  border: 0;
  background: none;
  padding: 0;
  font-family: inherit;
  font-size: inherit;
  font-weight: 700;
  color: var(--sky-700);
}
.catalog-crumb button:hover { text-decoration: underline; }
.catalog-crumb .current { font-weight: 700; color: var(--ink-900); }

/* ---------- Brand cards ---------- */
.brand-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  text-align: left;
  padding: 0;
  font-family: inherit;
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.brand-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lg);
  border-color: transparent;
}
.brand-card-thumb {
  aspect-ratio: 16 / 10;
  background: linear-gradient(135deg, var(--sky-500), var(--sky-600));
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
  color: rgba(255, 255, 255, 0.92);
}
.brand-card-thumb img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #fff;
  padding: 14px;
}
.brand-card-thumb svg { width: 32%; height: 32%; }
.brand-card-thumb img.img-failed { display: none; }
.brand-card-count {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 1;
  background: rgba(22, 48, 79, 0.72);
  backdrop-filter: blur(4px);
  color: #fff;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  padding: 5px 11px;
  border-radius: 999px;
}
.brand-card-body {
  padding: 18px 20px 20px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex-grow: 1;
}
.brand-card-body h3 {
  font-size: 17px;
  margin: 0;
  color: var(--ink-900);
}
/* No uppercase here: the range carries real units, and "kWh" must not be
   flattened to "KWH". */
.brand-card-range {
  font-size: 12.5px;
  font-weight: 800;
  letter-spacing: 0.02em;
  color: var(--amber-700);
  margin: 0;
}
.brand-card-items {
  font-size: 13.5px;
  color: var(--text-muted);
  margin: 0;
  flex-grow: 1;
}
.brand-card-go {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 8px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--sky-700);
}

/* ---------- Wattage chips on a product card ---------- */
/* The whole point of the drill-down: pick the capacity straight off the card
   rather than opening the product first. Each chip deep-links to the detail
   page with that model preselected. */
.card-watts {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 2px 0 12px;
}
.card-watt {
  font-size: 12px;
  font-weight: 700;
  line-height: 1;
  color: var(--ink-800);
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 6px 11px;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.card-watt:hover {
  background: var(--sky-600);
  border-color: var(--sky-600);
  color: #fff;
}
.card-watt.more {
  background: transparent;
  border-style: dashed;
  color: var(--text-muted);
}
.card-watt.more:hover { color: var(--ink-900); background: var(--sky-100); border-color: var(--sky-300); }

@media (max-width: 520px) {
  .card-watt { font-size: 11.5px; padding: 5px 9px; }
  .catalog-trail { gap: 10px; }
}

/* ---------- Warranty ----------
   Shown only where the manufacturer publishes a figure for that exact model,
   so an absent line means "we don't have it", not "there isn't one". */
.card-warranty {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--green-700);
  margin: 0 0 10px;
}
.card-warranty svg { flex-shrink: 0; }

.pdp-photo-note {
  margin: 12px 0 0;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--text-muted);
}
.pdp-photo-note[hidden] { display: none; }

.pdp-warranty {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  margin: 0 0 22px;
  padding: 12px 16px;
  border-radius: var(--radius-sm);
  background: rgba(22, 163, 74, 0.08);
  border: 1px solid rgba(22, 163, 74, 0.22);
  font-size: 14.5px;
  color: var(--text);
}
.pdp-warranty[hidden] { display: none; }
.pdp-warranty svg { color: var(--green-700); flex-shrink: 0; margin-top: 2px; }
.pdp-warranty strong { color: var(--ink-900); }

/* Incremental catalog paint: the sentinel row under the grid. */
.catalog-more {
  display: flex;
  justify-content: center;
  padding: 28px 0 4px;
}
.catalog-more[hidden] { display: none; }
