/* =========================================================
   Perfect Home Care — Production CSS Design System
   Hand-authored (no Tailwind runtime / no build step needed).
   Organized: Reset -> Tokens -> Layout utilities -> Components
========================================================= */

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body { font-family: 'Inter', system-ui, sans-serif; color: var(--ink-body); line-height: 1.5; background: var(--page-bg); transition: background-color .25s ease, color .25s ease; }
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button, input, textarea, select { font: inherit; color: inherit; }
ul { list-style: none; }
h1,h2,h3,h4,h5,h6 { font-family: 'Poppins', system-ui, sans-serif; line-height: 1.25; }

/* ---------- Design tokens ---------- */
:root {
  --brand-50:#eff6fb; --brand-100:#d9eaf4; --brand-500:#2f7ba3; --brand-600:#1f5f85;
  --brand-700:#15466b; --brand-800:#0d3357; --brand-900:#0a2640;
  --accent-400:#fb923c; --accent-500:#f3711a; --accent-600:#d65f0f;
  --amber-50:#fffbeb; --amber-100:#fef3c7; --amber-600:#d97706;
  --sky-100:#dbeafe; --sky-600:#0369a1;
  --blue-100:#dbeafe; --blue-600:#2563eb;
  --emerald-100:#d1fae5; --emerald-500:#10b981; --emerald-600:#059669; --emerald-700:#047857;
  --cyan-100:#cffafe; --cyan-700:#0e7490;
  --rose-100:#ffe4e6; --rose-600:#e11d48;
  --slate-50:#f8fafc; --slate-100:#f1f5f9; --gray-100:#f3f4f6; --gray-200:#e5e7eb;
  --gray-300:#d1d5db; --gray-400:#9ca3af; --gray-500:#6b7280; --gray-600:#4b5563; --gray-700:#374151; --gray-900:#111827;
  --radius-lg:1rem; --radius-xl:1.5rem; --radius-2xl:1.75rem; --radius-3xl:2rem; --radius-full:9999px;
  --shadow-md:0 10px 25px -5px rgba(10,38,64,.10), 0 4px 8px -4px rgba(10,38,64,.08);
  --shadow-lg:0 20px 40px -10px rgba(10,38,64,.18);
  --shadow-xl:0 25px 50px -12px rgba(10,38,64,.25);
  --container-max: 1280px;

  /* ---- Semantic "ink" (text) + "surface" tokens ----
     These are the ONLY tokens re-defined by dark mode (see the
     [data-theme="dark"] block near the end of this file). Every
     component below reads colors through these tokens instead of
     hardcoding #fff / #1f2937 / etc., so dark mode is just a token
     swap — no per-component dark rules needed except where a card
     deliberately uses a colour-tinted background (Stats, gradients). */
  --ink-body:#1f2937; --ink:var(--brand-900); --ink-2:var(--gray-700);
  --ink-3:var(--gray-600); --ink-muted:var(--gray-500); --ink-faint:var(--gray-400);
  --ink-strong:var(--gray-900);
  --surface:#fff; --surface-2:var(--slate-50); --page-bg:#fff;
  --border-c:var(--gray-100); --border-c2:var(--gray-200);
  --header-bg:rgba(255,255,255,.97); --input-bg:#fff; --pattern-dot:#dbeafe;
}

/* ---------- Dark mode ---------- */
/* Toggled by adding data-theme="dark" to <html> (see includes/header.php's
   anti-flash inline script + assets/js/app.js's togglePhcTheme()). Only the
   semantic tokens above are redefined — brand/accent colours used for
   deliberately-dark decorative sections (hero, footer, "Why Choose Us",
   the popular pricing card) are untouched, so those sections already look
   correct in both themes without extra rules. */
html[data-theme="dark"] {
  --ink-body:#c7d2e0; --ink:#eef4fb; --ink-2:#b6c3d6;
  --ink-3:#9db0c7; --ink-muted:#8394ac; --ink-faint:#647290;
  --ink-strong:#f3f6fa;
  --surface:#101d2e; --surface-2:#0c1826; --page-bg:#0a1420;
  --border-c:#1e304a; --border-c2:#26394f;
  --header-bg:rgba(10,20,32,.92); --input-bg:#0d1b28; --pattern-dot:#16283c;
}

/* ---------- Layout utilities ---------- */
.container { max-width: var(--container-max); margin-inline: auto; padding-inline: 1.25rem; }
@media (min-width: 1024px) { .container { padding-inline: 2rem; } }
.section { padding-block: 5rem; }
.grid { display: grid; gap: 1.75rem; }
.flex { display: flex; }
.flex-col { flex-direction: column; }
.items-center { align-items: center; }
.items-start { align-items: flex-start; }
.justify-between { justify-content: space-between; }
.justify-center { justify-content: center; }
.text-center { text-align: center; }
.gap-2 { gap: .5rem; } .gap-3 { gap: .75rem; } .gap-4 { gap: 1rem; } .gap-5 { gap: 1.25rem; } .gap-6 { gap: 1.5rem; }
.hidden { display: none !important; }
.relative { position: relative; }

@media (min-width: 640px)  { .sm-grid-2 { grid-template-columns: repeat(2, 1fr); } .sm-grid-3 { grid-template-columns: repeat(3, 1fr); } .sm-grid-4 { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 768px)  { .md-grid-2 { grid-template-columns: repeat(2, 1fr); } .md-grid-3 { grid-template-columns: repeat(3, 1fr); } .md-grid-4 { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 1024px) { .lg-grid-2 { grid-template-columns: repeat(2, 1fr); } .lg-grid-3 { grid-template-columns: repeat(3, 1fr); } .lg-grid-4 { grid-template-columns: repeat(4, 1fr); } .lg-grid-5 { grid-template-columns: repeat(5, 1fr); } }
.grid-cols-2 { grid-template-columns: repeat(2, 1fr); }

/* Real "4 columns, not 2" grid — used by Stats & Gallery so they read as a
   genuine 4-up grid on almost every screen (phones included), only dropping
   to 2 columns on very narrow (<380px) devices where 4 would be unreadably
   cramped. This replaces the old `grid-cols-2 md-grid-4` combo, which stayed
   at 2 columns all the way up to tablet width — that was the "why is this
   still 2 columns" complaint. */
.grid-4-always { grid-template-columns: repeat(2, 1fr); gap: .9rem; }
@media (min-width: 380px) { .grid-4-always { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 768px) { .grid-4-always { gap: 1.5rem; } }

/* ---------- Typography ---------- */
.h1 { font-weight: 800; font-size: clamp(2.1rem, 5vw, 3.75rem); letter-spacing: -0.02em; }
.h2 { font-weight: 800; font-size: clamp(1.75rem, 3.5vw, 2.5rem); letter-spacing: -0.01em; color: var(--ink); }
.h3 { font-weight: 700; font-size: 1.25rem; color: var(--ink); }
.eyebrow { color: var(--accent-600); font-weight: 700; letter-spacing: .12em; text-transform: uppercase; font-size: .75rem; }
.lede { color: var(--ink-3); margin-top: 1rem; }
.text-white { color: #fff; }
.text-muted { color: var(--ink-muted); }
.max-w-2xl { max-width: 42rem; margin-inline: auto; }
.max-w-xl { max-width: 38rem; }

/* ---------- Buttons ---------- */
.btn { display: inline-flex; align-items: center; gap: .5rem; font-weight: 600; padding: .85rem 1.75rem; border-radius: var(--radius-full); border: none; cursor: pointer; transition: all .25s ease; font-size: .95rem; }
.btn-accent { background: var(--accent-500); color: #fff; box-shadow: var(--shadow-md); }
.btn-accent:hover { background: var(--accent-600); transform: translateY(-1px); }
.btn-primary { background: var(--brand-800); color: #fff; }
.btn-primary:hover { background: var(--brand-900); }
.btn-outline { background: rgba(255,255,255,.1); border: 1px solid rgba(255,255,255,.3); color: #fff; backdrop-filter: blur(4px); }
.btn-outline:hover { background: rgba(255,255,255,.2); }
.btn-light { background: var(--brand-50); color: var(--brand-800); }
.btn-light:hover { background: var(--brand-100); }
.btn-block { width: 100%; justify-content: center; }
.btn:disabled { opacity: .7; cursor: not-allowed; }

/* ---------- Icons ---------- */
.icon { width: 1.15em; height: 1.15em; display: inline-block; vertical-align: -0.2em; }
.icon-lg { width: 1.5rem; height: 1.5rem; }
.icon-xl { width: 2rem; height: 2rem; }

/* ---------- Header / Nav ---------- */
.site-header { position: fixed; inset-inline: 0; top: 0; z-index: 50; background: var(--header-bg); backdrop-filter: blur(8px); box-shadow: 0 1px 2px rgba(0,0,0,.04); transition: box-shadow .3s, background-color .25s; }
.site-header.scrolled { box-shadow: var(--shadow-md); }
.nav-inner { height: 4.5rem; display: flex; align-items: center; justify-content: space-between; }
.brand { display: flex; align-items: center; gap: .65rem; }
.brand img, .brand .logo-fallback { width: 2.5rem; height: 2.5rem; border-radius: .75rem; object-fit: contain; }
.logo-fallback { background: var(--brand-800); color: #fff; display: grid; place-items: center; font-family: 'Poppins'; font-weight: 800; }
.brand-name { font-family: 'Poppins'; font-weight: 800; color: var(--ink); font-size: 1.1rem; letter-spacing: -.01em; line-height: 1.1; }
.brand-name span { color: var(--brand-700); }
.brand-sub { font-size: .62rem; text-transform: uppercase; letter-spacing: .12em; color: var(--accent-600); font-weight: 700; }
.nav-links { display: none; gap: 1.75rem; font-size: .92rem; font-weight: 500; color: var(--ink-2); }
.nav-links a:hover { color: var(--brand-700); }
@media (min-width: 1024px) { .nav-links { display: flex; } .nav-actions { display: flex; } .hamburger { display: none; } .mobile-only-action { display: none !important; } }
.nav-actions { display: none; align-items: center; gap: 1rem; }
.cart-icon-link { position: relative; color: var(--ink); font-size: 1.3rem; }

/* ---------- Dark-mode toggle button ---------- */
.theme-toggle { position: relative; width: 2.75rem; height: 2.75rem; border-radius: 50%; border: 1px solid var(--border-c2); background: var(--surface-2); color: var(--brand-700); display: grid; place-items: center; cursor: pointer; font-size: 1.05rem; flex-shrink: 0; transition: background .2s, border-color .2s, transform .15s; }
.theme-toggle:hover { transform: rotate(15deg) scale(1.05); }
html[data-theme="dark"] .theme-toggle { color: var(--amber-100); }
.theme-toggle .icon-sun { display: none; }
.theme-toggle .icon-moon { display: block; }
html[data-theme="dark"] .theme-toggle .icon-sun { display: block; }
html[data-theme="dark"] .theme-toggle .icon-moon { display: none; }
.mobile-theme-row { display: flex; align-items: center; justify-content: space-between; padding-top: .5rem; border-top: 1px solid var(--border-c); }
.cart-badge { position: absolute; top: -.5rem; right: -.6rem; background: var(--accent-500); color: #fff; font-size: .62rem; font-weight: 700; width: 1.25rem; height: 1.25rem; border-radius: 50%; display: grid; place-items: center; }
.hamburger { background: none; border: none; font-size: 1.5rem; color: var(--ink); cursor: pointer; }
.mobile-menu { display: none; background: var(--surface); border-top: 1px solid var(--border-c2); }
.mobile-menu.open { display: block; }
.mobile-menu ul { padding: 1rem 1.25rem; display: flex; flex-direction: column; gap: .9rem; font-weight: 500; color: var(--ink-2); }
.mobile-cart-row { display: flex; align-items: center; gap: 1rem; }

/* ---------- Hero ---------- */
.hero { min-height: 100vh; display: flex; align-items: center; padding-top: 6rem; padding-bottom: 4rem; position: relative; background-size: cover; background-position: center; background-attachment: fixed; }
.hero-grid { display: grid; gap: 3rem; align-items: center; }
@media (min-width: 1024px) { .hero-grid { grid-template-columns: 1fr 1fr; } }
.badge-pill { display: inline-flex; align-items: center; gap: .5rem; background: rgba(255,255,255,.15); border: 1px solid rgba(255,255,255,.2); backdrop-filter: blur(4px); padding: .45rem 1rem; border-radius: var(--radius-full); font-size: .72rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: #fff; }
.hero-checks { display: flex; flex-wrap: wrap; gap: 1.5rem; margin-top: 2.5rem; font-size: .9rem; color: rgba(255,255,255,.9); }
.hero-checks > span { display: flex; align-items: center; gap: .5rem; }
.hero-img-wrap { position: relative; display: none; }
@media (min-width: 1024px) { .hero-img-wrap { display: block; } }
.hero-img { border-radius: var(--radius-3xl); box-shadow: var(--shadow-xl); border: 4px solid rgba(255,255,255,.2); width: 100%; height: 30rem; object-fit: cover; animation: float 4s ease-in-out infinite; }
@keyframes float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }
.hero-card { position: absolute; background: #fff; border-radius: var(--radius-2xl); padding: 1rem; box-shadow: var(--shadow-xl); display: flex; align-items: center; gap: .75rem; width: 16rem; }
.hero-card.bottom-left { bottom: -1.5rem; left: -1.5rem; }
.hero-card-badge { position: absolute; top: -1.5rem; right: -1.5rem; background: var(--accent-500); color: #fff; border-radius: var(--radius-2xl); padding: 1rem; box-shadow: var(--shadow-xl); width: 14rem; }

/* ---------- Hero carousel (rotating slides: Electrical / RO / CCTV...) ---------- */
/* IMPORTANT: Alpine's x-show toggles the *inline* `display` style directly.
   When it shows a slide it sets `display: ''`, which then falls back to
   whatever the CSS cascade says for that element. The previous version of
   this file had `.hero-slide { display:none } .hero-slide.active { display:block }`
   — but the template never actually toggled an "active" class, it used
   x-show — so every slide after the first stayed permanently hidden behind
   the stylesheet rule even while Alpine was working correctly. That was the
   root cause of "the carousel doesn't work". Fix: don't hide slides via a
   persistent class/selector rule at all — x-show owns visibility completely.
   [x-cloak] only prevents a brief flash of ALL slides stacked before Alpine
   finishes booting (a few hundred ms), and is automatically removed by
   Alpine from the DOM once it takes over. */
.hero-carousel { position: relative; }
/* No-JS / pre-hydration fallback: show only the first slide by default so the
   hero still looks correct before Alpine boots (or if JS is disabled). Once
   Alpine loads, index.php's `:style="{ display: ... }"` binding sets an
   explicit inline display on every slide and always wins over this rule. */
.hero-slide:not(:first-of-type) { display: none; }
.hero-slide { animation: heroFade .5s ease; }
@keyframes heroFade { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.hero-dots { display: flex; gap: .5rem; margin-top: 2rem; }
.hero-dot { width: .6rem; height: .6rem; border-radius: 50%; background: rgba(255,255,255,.35); border: none; cursor: pointer; padding: 0; transition: background .2s, transform .2s; }
.hero-dot.active { background: var(--accent-400); transform: scale(1.25); }
.hero-slide-badge { display: inline-flex; align-items: center; gap: .5rem; color: var(--accent-400); font-weight: 700; font-size: .78rem; letter-spacing: .1em; text-transform: uppercase; }

/* [x-cloak] hides Alpine-controlled elements until Alpine finishes booting,
   preventing a flash of unstyled/overlapping content on first paint. */
[x-cloak] { display: none !important; }

/* ---------- Stats ("better view": icon tile + gradient backdrop + hover lift) ---------- */
.stats-section { background: linear-gradient(to bottom, var(--surface-2), var(--surface)); position: relative; }
.stat-card { text-align: center; padding: 1.75rem 1.25rem; border-radius: var(--radius-2xl); border: 1px solid var(--brand-100); background: linear-gradient(to bottom right, var(--brand-50), var(--surface)); box-shadow: var(--shadow-md); transition: transform .3s, box-shadow .3s; }
.stat-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }
.stat-card.alt { border-color: var(--amber-100); background: linear-gradient(to bottom right, var(--amber-50), var(--surface)); }
html[data-theme="dark"] .stat-card { background: linear-gradient(to bottom right, rgba(47,123,163,.14), var(--surface)); }
html[data-theme="dark"] .stat-card.alt { background: linear-gradient(to bottom right, rgba(217,119,6,.14), var(--surface)); }
.stat-icon { width: 3.25rem; height: 3.25rem; border-radius: var(--radius-xl); background: var(--brand-100); color: var(--brand-700); display: grid; place-items: center; margin-inline: auto; margin-bottom: .9rem; font-size: 1.35rem; }
.stat-card.alt .stat-icon { background: var(--amber-100); color: var(--amber-600); }
.stat-num { font-family: 'Poppins'; font-weight: 800; font-size: 2.25rem; color: var(--brand-800); }
.stat-num.accent { color: var(--accent-600); }
.stat-label { margin-top: .5rem; color: var(--ink-3); font-weight: 500; }

/* ---------- Cards ---------- */
.card { background: var(--surface); border-radius: var(--radius-3xl); border: 1px solid var(--border-c); box-shadow: var(--shadow-md); }
.pad-7 { padding: 1.75rem; }
.pad-8 { padding: 2rem; }
.pad-6 { padding: 1.5rem; }

.icon-tile { width: 3.5rem; height: 3.5rem; border-radius: var(--radius-xl); display: grid; place-items: center; font-size: 1.4rem; }
.icon-tile.amber { background: var(--amber-100); color: var(--amber-600); }
.icon-tile.sky { background: var(--sky-100); color: var(--sky-600); }
.icon-tile.blue { background: var(--blue-100); color: var(--blue-600); }
.icon-tile.emerald { background: var(--emerald-100); color: var(--emerald-700); }
.icon-tile.cyan { background: var(--cyan-100); color: var(--cyan-700); }
.icon-tile.rose { background: var(--rose-100); color: var(--rose-600); }
.icon-tile.white15 { background: rgba(255,255,255,.15); color: var(--accent-400); }
.icon-tile.brand { background: var(--brand-100); color: var(--brand-700); }

/* Services ("better view": strip accent stays on hover, subtle scale-in on the icon) */
.service-card { border-radius: var(--radius-3xl); overflow: hidden; border: 1px solid var(--border-c); box-shadow: var(--shadow-md); background: var(--surface); transition: transform .3s, box-shadow .3s, border-color .3s; cursor: pointer; text-decoration: none; display: block; position: relative; }
.service-card:hover { transform: translateY(-8px); box-shadow: var(--shadow-xl); border-color: var(--brand-100); }
.service-card:hover .icon-tile { transform: scale(1.08); }
.service-card .icon-tile { transition: transform .3s; }
.service-strip { height: .5rem; }
.grad-amber { background: linear-gradient(to right, #fbbf24, #d97706); }
.grad-sky { background: linear-gradient(to right, #38bdf8, #0891b2); }
.grad-blue { background: linear-gradient(to right, #60a5fa, #4f46e5); }
.grad-emerald { background: linear-gradient(to right, #34d399, #059669); }
.grad-cyan { background: linear-gradient(to right, #22d3ee, #0d9488); }
.grad-rose { background: linear-gradient(to right, #fb7185, #db2777); }

/* ---------- Pattern bg ---------- */
.pattern-bg { background-color: var(--surface-2); background-image: radial-gradient(var(--pattern-dot) 1px, transparent 1px); background-size: 22px 22px; }
.bg-white { background: var(--surface); }
.bg-slate { background: var(--surface-2); }
.bg-brand-900 { background: var(--brand-900); color: #fff; }
.bg-brand-grad { background: linear-gradient(135deg, var(--brand-800), var(--brand-700), var(--accent-500)); color: #fff; }

/* ---------- Pricing ---------- */
.pricing-card { border-radius: var(--radius-3xl); padding: 2rem; border: 1px solid var(--border-c); box-shadow: var(--shadow-md); background: var(--surface); transition: transform .3s, box-shadow .3s; }
.pricing-card:not(.popular):hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); }
.pricing-card.popular { background: linear-gradient(to bottom, var(--brand-900), var(--brand-800)); color: #fff; border: 2px solid var(--accent-500); box-shadow: var(--shadow-xl); transform: scale(1.03); position: relative; }
.popular-tag { position: absolute; top: -1rem; left: 50%; transform: translateX(-50%); background: var(--accent-500); color: #fff; font-size: .68rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; padding: .4rem 1rem; border-radius: var(--radius-full); box-shadow: var(--shadow-md); }
.price-row { display: flex; align-items: flex-end; gap: .3rem; margin-top: 1.25rem; }
.price-num { font-family: 'Poppins'; font-weight: 800; font-size: 1.9rem; }
.pricing-list { margin-top: 1.5rem; display: flex; flex-direction: column; gap: .75rem; font-size: .9rem; }
.pricing-list li { display: flex; align-items: flex-start; gap: .5rem; }

/* ---------- Process ---------- */
.process-grid { position: relative; margin-top: 4rem; }
.process-grid::before { content: ''; position: absolute; top: 2rem; left: 10%; right: 10%; height: 3px; background: repeating-linear-gradient(90deg, #bfdbfe 0 12px, transparent 12px 22px); z-index: 0; }
@media (max-width: 767px) { .process-grid::before { display: none; } }
.process-step { text-align: center; position: relative; z-index: 1; }
.process-num { margin-inline: auto; width: 4rem; height: 4rem; border-radius: 50%; background: #fff; border: 4px solid var(--brand-700); display: grid; place-items: center; font-family: 'Poppins'; font-weight: 800; font-size: 1.25rem; color: var(--brand-800); box-shadow: var(--shadow-md); }
.process-num.alt { border-color: var(--accent-500); color: var(--accent-600); }

/* ---------- Gallery ---------- */
.gallery-item { position: relative; border-radius: var(--radius-2xl); overflow: hidden; }
.gallery-item img { height: 16rem; width: 100%; object-fit: cover; transition: transform .5s; }
.gallery-item:hover img { transform: scale(1.08); }
.gallery-overlay { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,.65), transparent 60%); display: flex; align-items: flex-end; padding: 1rem; opacity: 0; transition: opacity .3s; }
.gallery-item:hover .gallery-overlay { opacity: 1; }
.gallery-overlay span { color: #fff; font-weight: 600; font-size: .9rem; }

/* ---------- Testimonials ---------- */
.testimonial-card { border-radius: var(--radius-3xl); padding: 1.75rem; border: 1px solid var(--border-c); box-shadow: var(--shadow-md); background: linear-gradient(to bottom, var(--surface-2), var(--surface)); transition: transform .3s, box-shadow .3s; }
.testimonial-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.stars { color: var(--accent-500); font-size: .9rem; display: flex; gap: .1rem; }
.avatar { width: 3rem; height: 3rem; border-radius: 50%; display: grid; place-items: center; font-weight: 700; }

/* ---------- Footer ---------- */
.site-footer { background: var(--brand-900); color: #fff; padding-top: 4rem; padding-bottom: 2rem; }
.footer-grid { display: grid; gap: 2.5rem; }
@media (min-width: 768px) { .footer-grid { grid-template-columns: repeat(4, 1fr); } }
.footer-heading { font-family: 'Poppins'; font-weight: 700; margin-bottom: 1rem; }
.footer-links { display: flex; flex-direction: column; gap: .55rem; font-size: .9rem; color: rgba(255,255,255,.75); }
.footer-links a:hover { color: var(--accent-400); }
.social-row { display: flex; gap: .75rem; margin-top: 1.25rem; }
.social-btn { width: 2.25rem; height: 2.25rem; border-radius: 50%; background: rgba(255,255,255,.1); display: grid; place-items: center; transition: background .2s; }
.social-btn:hover { background: var(--accent-500); }
.footer-bottom { max-width: var(--container-max); margin-inline: auto; padding-inline: 1.25rem; margin-top: 3rem; padding-top: 1.5rem; border-top: 1px solid rgba(255,255,255,.1); display: flex; flex-wrap: wrap; gap: .75rem; justify-content: space-between; font-size: .85rem; color: rgba(255,255,255,.6); }

/* ---------- Floating buttons ---------- */
.fab { position: fixed; right: 1.5rem; width: 3.5rem; height: 3.5rem; border-radius: 50%; display: grid; place-items: center; font-size: 1.4rem; box-shadow: var(--shadow-xl); z-index: 40; transition: transform .2s; color: #fff; }
.fab:hover { transform: scale(1.1); }
.fab-whatsapp { bottom: 1.5rem; background: #25D366; }
.fab-call { bottom: 6rem; background: var(--accent-500); }

/* ---------- Service Area (map + area pills) ---------- */
.area-pill { display: flex; align-items: center; gap: .75rem; background: var(--surface); border-radius: var(--radius-xl); padding: 1rem; border: 1px solid var(--border-c); box-shadow: var(--shadow-md); font-weight: 600; color: var(--ink-2); transition: transform .2s, box-shadow .2s; }
.area-pill:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }
.map-embed-wrap { position: relative; border-radius: var(--radius-3xl); overflow: hidden; box-shadow: var(--shadow-lg); }
.map-embed-wrap iframe { width: 100%; height: 22rem; border: 0; display: block; }
.map-badge { position: absolute; top: -1.25rem; left: -1.25rem; background: var(--surface); border-radius: var(--radius-2xl); padding: 1rem; box-shadow: var(--shadow-xl); display: none; align-items: center; gap: .75rem; }
@media (min-width: 768px) { .map-badge { display: flex; } }

/* ---------- Service Provider (KYC) form ---------- */
.file-input-wrap { border: 1.5px dashed var(--gray-300); border-radius: var(--radius-lg); padding: 1rem; text-align: center; color: var(--ink-muted); font-size: .85rem; background: var(--surface-2); }
.file-input-wrap input[type="file"] { width: 100%; margin-top: .5rem; }
.consent-row { display: flex; align-items: flex-start; gap: .6rem; font-size: .85rem; color: var(--gray-600); }
.consent-row input { margin-top: .2rem; }

/* ---------- Service page ---------- */
.service-hero { padding-top: 7rem; padding-bottom: 3.5rem; background-size: cover; background-position: center; position: relative; }
.breadcrumb { color: rgba(255,255,255,.8); font-size: .9rem; display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.breadcrumb a:hover { color: #fff; }
.service-hero-title { display: flex; align-items: center; gap: 1rem; margin-top: 1.25rem; }
.rating-row { display: flex; align-items: center; gap: 1rem; color: rgba(255,255,255,.9); font-size: .9rem; margin-top: 1rem; }
.rating-pill { display: inline-flex; align-items: center; gap: .4rem; background: rgba(255,255,255,.15); padding: .35rem .8rem; border-radius: var(--radius-full); }

.service-layout { display: grid; gap: 2rem; margin-top: 2rem; }
@media (min-width: 1024px) { .service-layout { grid-template-columns: 2fr 1fr; } }

.item-row { padding: 1.5rem; display: flex; align-items: center; gap: 1.25rem; border-bottom: 1px solid var(--border-c); transition: background-color .2s; }
.item-row:hover { background: var(--surface-2); }
.item-row:last-child { border-bottom: none; }
.item-icon { width: 3.5rem; height: 3.5rem; border-radius: var(--radius-xl); display: grid; place-items: center; font-size: 1.3rem; flex-shrink: 0; }
.item-name { font-weight: 600; color: var(--ink-strong); }
.item-desc { font-size: .875rem; color: var(--ink-muted); margin-top: .15rem; }
.item-price { margin-top: .35rem; font-family: 'Poppins'; font-weight: 700; color: var(--ink); }
.item-unit { font-size: .72rem; font-weight: 400; color: var(--ink-muted); }

.add-btn { border: 1.5px solid #7f56d9; color: #7f56d9; font-weight: 700; border-radius: .6rem; padding: .5rem 1.25rem; background: #fff; cursor: pointer; transition: all .2s; font-size: .85rem; }
.add-btn:hover { background: #7f56d9; color: #fff; }
.qty-pill { border: 1.5px solid #7f56d9; color: #7f56d9; border-radius: .6rem; display: flex; align-items: center; gap: 1rem; padding: .5rem .75rem; background: #fff; font-weight: 700; }
.qty-pill button { background: none; border: none; color: #7f56d9; cursor: pointer; font-size: 1rem; display: grid; place-items: center; width: 1.25rem; }
.qty-pill span { min-width: 1rem; text-align: center; color: var(--brand-900); }

.sticky-summary { position: sticky; top: 6rem; }
.summary-empty { font-size: .9rem; color: var(--ink-muted); margin-top: .75rem; }
.summary-line { display: flex; justify-content: space-between; font-size: .9rem; }
.summary-total { display: flex; justify-content: space-between; font-family: 'Poppins'; font-weight: 700; color: var(--ink); padding-top: .75rem; border-top: 1px solid var(--border-c); margin-top: .75rem; }
.summary-badges { margin-top: 1.5rem; padding-top: 1.25rem; border-top: 1px solid var(--border-c); font-size: .875rem; color: var(--ink-muted); display: flex; flex-direction: column; gap: .5rem; }
.summary-badges > div { display: flex; align-items: center; gap: .5rem; }

.sticky-cart-bar { position: fixed; inset-inline: 0; bottom: 0; background: var(--surface); border-top: 1px solid var(--border-c2); padding: 1rem 0; box-shadow: 0 -10px 30px -5px rgba(0,0,0,.15); z-index: 45; }
.sticky-cart-bar .container { display: flex; align-items: center; justify-content: space-between; }

/* ---------- Cart page ---------- */
.cart-row { padding: 1.5rem; display: flex; align-items: center; gap: 1.25rem; border-bottom: 1px solid var(--border-c); flex-wrap: wrap; }
.cart-row:last-child { border-bottom: none; }
.cart-item-flex { flex: 1; min-width: 8rem; }
.cart-item-cat { font-size: .68rem; color: var(--ink-faint); text-transform: uppercase; letter-spacing: .05em; }
.cart-line-total { width: 5rem; text-align: right; font-weight: 600; color: var(--ink-strong); }
.cart-total-row { padding: 1.5rem; display: flex; justify-content: space-between; align-items: center; background: var(--surface-2); }

.form-group { margin-bottom: 1.1rem; }
.form-label { font-size: .875rem; font-weight: 600; color: var(--ink-2); display: block; margin-bottom: .35rem; }
.form-input { width: 100%; padding: .75rem 1rem; border-radius: var(--radius-lg); border: 1px solid var(--border-c2); outline: none; transition: border-color .2s, background-color .25s, color .25s; font-size: .95rem; background: var(--input-bg); color: var(--ink-body); }
.form-input:focus { border-color: var(--brand-600); box-shadow: 0 0 0 3px var(--brand-100); }
textarea.form-input { resize: vertical; }

.alert { margin-top: 1.25rem; padding: 1rem; border-radius: var(--radius-lg); font-size: .875rem; display: flex; align-items: flex-start; gap: .5rem; }
.alert-success { background: #ecfdf5; border: 1px solid #a7f3d0; color: #065f46; }
.alert-error { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }
.alert a, .alert button.link { text-decoration: underline; font-weight: 600; background: none; border: none; color: inherit; cursor: pointer; padding: 0; }

.spinner { width: 1.1rem; height: 1.1rem; border-radius: 50%; border: 2.5px solid rgba(255,255,255,.4); border-top-color: #fff; animation: spin .7s linear infinite; display: inline-block; }
@keyframes spin { to { transform: rotate(360deg); } }

/* ---------- Reveal on scroll ---------- */
.reveal { opacity: 0; transform: translateY(28px); transition: all .7s cubic-bezier(.22,.61,.36,1); }
.reveal.visible { opacity: 1; transform: translateY(0); }

/* ---------- Page transition ---------- */
.page-fade { animation: pageFadeIn .3s ease; }
@keyframes pageFadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }

/* ---------- Toast ---------- */
.toast { position: fixed; top: 5.5rem; right: 1.25rem; z-index: 60; background: #16a34a; color: #fff; padding: .75rem 1.25rem; border-radius: .75rem; box-shadow: var(--shadow-lg); display: flex; align-items: center; gap: .5rem; font-size: .9rem; }

/* ---------- Empty state ---------- */
.empty-state { text-align: center; padding: 4rem 2rem; }
.empty-state .icon { width: 3rem; height: 3rem; color: var(--gray-300); }

/* ---------- Dark-mode: a couple of literal-white surfaces that would
   otherwise look washed out sitting on a dark page background. ---------- */
html[data-theme="dark"] .btn-light { background: var(--surface-2); color: var(--ink); }
html[data-theme="dark"] .btn-light:hover { background: var(--border-c2); }
html[data-theme="dark"] .process-num { background: var(--surface); }
html[data-theme="dark"] .add-btn, html[data-theme="dark"] .qty-pill { background: var(--surface); }
html[data-theme="dark"] .hero-card { background: var(--surface); }
html[data-theme="dark"] .alert-success { background: rgba(16,185,129,.12); border-color: rgba(16,185,129,.3); color: #6ee7b7; }
html[data-theme="dark"] .alert-error { background: rgba(225,29,72,.12); border-color: rgba(225,29,72,.3); color: #fda4af; }

/* ---------- Utility spacing (mirrors what templates need) ---------- */
.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}
.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}
