// ============================================================
//  Digital Slap — Главная (home page) — v2
//  Пофикшено: шрифты, отступы, контрастность, анимации, фото.
// ============================================================

const { useState, useEffect, useRef } = React;

// ---------- HERO ----------
function HomeHero() {
  return (
    <section data-screen-label="Hero" style={{
      position: "relative", minHeight: "calc(100vh - 80px)",
      padding: "clamp(20px, 3vh, 40px) clamp(32px, 7vw, 120px) clamp(40px, 6vh, 72px)",
      display: "flex", flexDirection: "column",
      borderBottom: `1px solid ${DS_THEME.line}`,
    }}>
      <div aria-hidden="true" style={{
        position: "absolute", top: "-10%", right: "-15%", width: "55vw", height: "55vw",
        background: `radial-gradient(closest-side, ${DS_ACCENT.bg}22, transparent 70%)`,
        filter: "blur(40px)", pointerEvents: "none", zIndex: 0,
      }}/>

      <div style={{
        maxWidth: 1320, margin: "0 auto", width: "100%",
        position: "relative", zIndex: 1,
        display: "flex", flexDirection: "column", flex: 1,
        paddingTop: "clamp(20px, 4vh, 56px)",
      }}>
        <DSReveal delay={0.05}>
          <h1 style={{
            fontFamily: "'Archivo', sans-serif",
            fontSize: "clamp(42px, 7.4vw, 116px)",
            lineHeight: .92, letterSpacing: "-.045em", fontWeight: 800,
            margin: "clamp(16px, 2.5vh, 28px) 0 0", textTransform: "uppercase",
            maxWidth: "17ch", wordSpacing: ".15em",
          }}>
            Приводим <em style={{
              fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
              textTransform: "none", letterSpacing: "-.02em", whiteSpace: "nowrap",
            }}>клиентов</em> бизнесу в&nbsp;Чехии и&nbsp;Европе
          </h1>
        </DSReveal>

        <DSReveal delay={0.1}>
          <p style={{
            marginTop: "clamp(20px, 2.5vh, 28px)",
            fontFamily: "'Archivo', sans-serif", fontWeight: 400,
            fontSize: "clamp(15px, 1.3vw, 19px)", lineHeight: 1.5,
            maxWidth: 680, color: DS_THEME.fg, opacity: .85, margin: "clamp(20px, 2.5vh, 28px) 0 0",
          }}>
            Не гонимся за лидами ради красивых отчётов — считаем деньги до конца воронки
            и отвечаем за то, сколько из заявок стали клиентами. Берём на себя рекламу,
            контент и лендинги, чтобы вы занимались бизнесом, а не координацией подрядчиков.
          </p>
        </DSReveal>

        <DSReveal delay={0.15}>
          <div style={{
            marginTop: "clamp(24px, 3vh, 36px)", display: "flex", alignItems: "center", gap: 20, flexWrap: "wrap",
          }}>
            <DSButton size="lg">Получить бесплатную консультацию</DSButton>
          </div>
        </DSReveal>

        <div style={{ flex: 1, minHeight: 24 }}/>

        <DSReveal delay={0.2}>
          <div style={{
            marginTop: "clamp(28px, 3.5vh, 48px)",
            paddingTop: "clamp(20px, 2.5vh, 28px)",
            borderTop: `1px solid ${DS_THEME.line}`,
            display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 24,
          }} className="bullets">
            {[
              ["9+", "лет в маркетинге"],
              ["B2B · B2C", "бизнес и личные бренды"],
              ["RU · CZ · EN", "работаем на трёх языках"],
            ].map(([big, small], i) => (
              <div key={i} style={{ display: "flex", flexDirection: "column", gap: 6 }}>
                <div style={{
                  fontFamily: "'Archivo', sans-serif", fontWeight: 800, fontSize: "clamp(22px, 2.6vw, 34px)",
                  letterSpacing: "-.02em", lineHeight: 1,
                }}>{big}</div>
                <div style={{
                  fontFamily: "'Archivo', sans-serif", fontSize: 13, fontWeight: 500,
                  letterSpacing: ".02em", color: DS_THEME.dim,
                }}>{small}</div>
              </div>
            ))}
          </div>
        </DSReveal>
      </div>
    </section>
  );
}

// ---------- PROBLEM ----------
function ProblemGlyph({ kind, accent }) {
  const c = accent || DS_ACCENT.bg;
  const dim = DS_THEME.dim;
  if (kind === "metrics") return (
    <svg width="120" height="70" viewBox="0 0 120 70" fill="none">
      <rect x="2" y="40" width="14" height="28" fill={dim} opacity=".25"/>
      <rect x="22" y="30" width="14" height="38" fill={dim} opacity=".35"/>
      <rect x="42" y="22" width="14" height="46" fill={dim} opacity=".5"/>
      <rect x="62" y="14" width="14" height="54" fill={dim} opacity=".65"/>
      <rect x="82" y="8" width="14" height="60" fill={dim} opacity=".85"/>
      <path d="M4 20 Q30 18 56 14 T108 4" stroke={c} strokeWidth="2" fill="none"/>
      <circle cx="108" cy="4" r="3" fill={c}/>
      <text x="2" y="6" fill={c} fontFamily="Archivo" fontSize="8" fontWeight="700" letterSpacing=".12em">CTR ↑</text>
    </svg>
  );
  if (kind === "chain") return (
    <svg width="130" height="70" viewBox="0 0 130 70" fill="none">
      {[8, 40, 72, 104].map((x, i) => (
        <g key={i}>
          <circle cx={x + 7} cy="35" r="13" stroke={i === 3 ? c : dim} strokeWidth="1.6" opacity={i === 3 ? 1 : .6}/>
          <text x={x + 7} y="39" textAnchor="middle" fontFamily="Archivo" fontSize="9" fontWeight="700" fill={i === 3 ? c : dim}>
            {["T","S","W","?"][i]}
          </text>
          {i < 3 && <path d={`M${x + 22} 35 L${x + 32} 35`} stroke={dim} strokeWidth="1.2" strokeDasharray="2 2"/>}
        </g>
      ))}
      <path d="M0 58 Q65 68 130 58" stroke={c} strokeWidth="1.4" strokeDasharray="3 3" fill="none" opacity=".6"/>
    </svg>
  );
  if (kind === "funnel") return (
    <svg width="110" height="80" viewBox="0 0 110 80" fill="none">
      <path d="M5 10h100l-20 30v30h-60V40z" stroke={dim} strokeWidth="1.4" fill="none" opacity=".6"/>
      <path d="M5 10h100" stroke={c} strokeWidth="2"/>
      <circle cx="55" cy="72" r="3" fill={c}/>
      <circle cx="55" cy="72" r="7" stroke={c} opacity=".3"/>
      <path d="M35 50 L75 50" stroke={dim} strokeDasharray="2 2" opacity=".4"/>
      <path d="M25 30 L85 30" stroke={dim} strokeDasharray="2 2" opacity=".4"/>
      <text x="92" y="14" fill={c} fontFamily="Archivo" fontSize="7" fontWeight="700">100</text>
      <text x="90" y="52" fill={dim} fontFamily="Archivo" fontSize="7">?</text>
      <text x="62" y="75" fill={c} fontFamily="Archivo" fontSize="7" fontWeight="700">3</text>
    </svg>
  );
  // chaos
  return (
    <svg width="120" height="80" viewBox="0 0 120 80" fill="none">
      {[
        [12, 18], [42, 14], [78, 20], [102, 12],
        [8, 44], [34, 50], [68, 42], [94, 46],
        [20, 70], [54, 64], [82, 70], [108, 66]
      ].map(([x, y], i) => (
        <g key={i}>
          <circle cx={x} cy={y} r="3" fill={i % 4 === 0 ? c : dim} opacity={i % 4 === 0 ? 1 : .5}/>
        </g>
      ))}
      <path d="M12 18 L42 14 L8 44 L78 20 L34 50 L102 12 L68 42 L94 46 L20 70 L108 66 L54 64 L82 70"
            stroke={dim} strokeWidth=".8" fill="none" opacity=".35"/>
    </svg>
  );
}

function HomeProblem() {
  const cards = [
    { t: "Имитация бурной деятельности вместо продаж",
      b: "Вместо реальных денег в кассе вам показывают CTR и клики. Вы платите за процессы, а не за результат, поэтому связь между рекламным бюджетом и чистой прибылью остаётся туманной.",
      glyph: "metrics", span: 2, tone: "surface" },
    { t: "Нет ответственного за финальный результат",
      b: "Один делает таргет, второй — контент, третий — сайт, четвёртый — съёмки. Никто не отвечает за результат целиком. А сводить всех вместе приходится вам в WhatsApp по вечерам.",
      glyph: "chain", span: 1, tone: "outline" },
    { t: "Красивый маркетинг ≠ продажи",
      b: "Контент эстетичный, реклама в вашем стиле, сайт современный. А заявок всё равно мало. Непонятно, на каком этапе воронки теряются люди.",
      glyph: "funnel", span: 1, tone: "surface2" },
    { t: "Хаос в маркетинге",
      b: "Больше клиентов сегодня означает больше хаоса завтра. Масштабироваться страшно: непонятно, какой рычаг нажать, чтобы вырасти в два раза и не превратить себя в диспетчера на круглосуточной связи.",
      glyph: "chaos", span: 2, tone: "accent" },
  ];
  const cardBg = (tone) => ({
    surface: DS_THEME.surface,
    surface2: "#0F0F0F",
    outline: "transparent",
    accent: "#0F0F0F",
  }[tone]);
  return (
    <DSSection id="Проблема" pad="clamp(80px, 12vh, 160px)">
      <DSReveal delay={0.05}>
        <h2 style={{
          fontFamily: "'Archivo', sans-serif", fontWeight: 800,
          fontSize: "clamp(32px, 5vw, 68px)", lineHeight: .98, letterSpacing: "-.04em",
          wordSpacing: ".15em", textTransform: "uppercase", margin: "20px 0 0", maxWidth: "20ch",
        }}>
          Почему ваш маркетинг превратился в&nbsp;<em style={{
            fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
            textTransform: "none", letterSpacing: "0", whiteSpace: "nowrap", paddingRight: "0.05em",
          }}>«чёрный&nbsp;ящик»</em>
        </h2>
      </DSReveal>
      <DSReveal delay={0.1}>
        <p style={{
          marginTop: 24, fontFamily: "'Archivo', sans-serif",
          fontSize: "clamp(15px, 1.2vw, 18px)", lineHeight: 1.55,
          maxWidth: 780, color: DS_THEME.dim,
        }}>
          Вы ежемесячно вливаете деньги в продвижение. Таргетолог присылает отчёты об охватах,
          SMM-щик радуется лайкам, а вы не понимаете: три клиента, которые купили на неделе,
          пришли из рекламы или просто сработал «сарафан»?
        </p>
      </DSReveal>
      <div style={{
        marginTop: 72,
        display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 20,
      }} className="problem-grid">
        {cards.map((c, i) => {
          const isAccent = c.tone === "accent";
          const isOutline = c.tone === "outline";
          return (
            <DSReveal key={i} delay={i * 0.06}>
              <div style={{
                gridColumn: `span ${c.span}`,
                background: cardBg(c.tone),
                padding: "clamp(28px, 3.2vw, 44px)",
                borderRadius: 20,
                border: isOutline ? `1px dashed ${DS_THEME.line2}` : `1px solid ${isAccent ? DS_ACCENT.bg + "40" : DS_THEME.line}`,
                display: "grid",
                gridTemplateColumns: c.span === 2 ? "1fr auto" : "1fr",
                gap: 24, alignItems: "start", minHeight: 240, height: "100%",
                position: "relative", overflow: "hidden",
              }} className={`pc pc-span-${c.span}`}>
                {isAccent && (
                  <div aria-hidden="true" style={{
                    position: "absolute", inset: 0, pointerEvents: "none",
                    background: `radial-gradient(circle at 90% 0%, ${DS_ACCENT.bg}1A, transparent 55%)`,
                  }}/>
                )}
                <div style={{ display: "flex", flexDirection: "column", gap: 14, position: "relative" }}>
                  <div style={{
                    display: "inline-flex", alignItems: "center", gap: 10,
                    fontFamily: "'Archivo', sans-serif", fontSize: 12, fontWeight: 700,
                    letterSpacing: ".2em", textTransform: "uppercase",
                    color: isAccent ? DS_ACCENT.bg : DS_ACCENT.bg,
                  }}>
                    <span>{String(i + 1).padStart(2, "0")}</span>
                    <span style={{ width: 24, height: 1, background: "currentColor", opacity: .5 }}/>
                    <span style={{ color: DS_THEME.dim2, fontWeight: 600, letterSpacing: ".16em" }}>симптом</span>
                  </div>
                  <h3 style={{
                    fontFamily: "'Archivo', sans-serif", fontWeight: 700,
                    fontSize: c.span === 2 ? "clamp(22px, 2vw, 30px)" : "clamp(20px, 1.7vw, 25px)",
                    lineHeight: 1.15, letterSpacing: "-.015em", margin: 0,
                  }}>{c.t}</h3>
                  <p style={{
                    fontFamily: "'Archivo', sans-serif", fontSize: "clamp(14px, 1.05vw, 16px)",
                    lineHeight: 1.6, color: DS_THEME.dim, margin: 0,
                  }}>{c.b}</p>
                </div>
                {c.span === 2 && (
                  <div style={{
                    alignSelf: "end",
                    width: "clamp(120px, 14vw, 180px)", flex: "none",
                    display: "flex", justifyContent: "flex-end",
                  }} className="pc-glyph">
                    <ProblemGlyph kind={c.glyph}/>
                  </div>
                )}
                {c.span === 1 && (
                  <div style={{
                    marginTop: "auto", paddingTop: 18,
                    opacity: .75,
                  }} className="pc-glyph">
                    <ProblemGlyph kind={c.glyph}/>
                  </div>
                )}
              </div>
            </DSReveal>
          );
        })}
      </div>
    </DSSection>
  );
}

// ---------- DASHBOARD MOCK (для блока "Подход") ----------
function DashboardMock() {
  return (
    <div style={{
      background: "linear-gradient(180deg, #141414 0%, #0F0F0F 100%)",
      borderRadius: 20, border: `1px solid ${DS_THEME.line2}`,
      padding: 24, fontFamily: "'Archivo', sans-serif",
      overflow: "hidden", position: "relative",
    }}>
      {/* top bar */}
      <div style={{
        display: "flex", alignItems: "center", justifyContent: "space-between",
        paddingBottom: 16, borderBottom: `1px solid ${DS_THEME.line}`,
      }}>
        <div style={{ display: "flex", alignItems: "center", gap: 8 }}>
          <span style={{ width: 10, height: 10, borderRadius: 999, background: DS_ACCENT.bg }}/>
          <span style={{ fontSize: 12, fontWeight: 600, letterSpacing: ".1em", textTransform: "uppercase", color: DS_THEME.dim }}>Live · Октябрь 2026</span>
        </div>
        <span style={{ fontSize: 11, color: DS_THEME.dim2, letterSpacing: ".12em", textTransform: "uppercase" }}>Обновлено 4 мин назад</span>
      </div>

      {/* KPI row */}
      <div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 14, marginTop: 20 }}>
        {[
          { label: "Бюджет", val: "€ 4 820", delta: "−12%", up: false },
          { label: "Заявки", val: "127", delta: "+38%", up: true },
          { label: "Клиенты", val: "41", delta: "+24%", up: true },
        ].map((k, i) => (
          <div key={i} style={{
            background: "#0A0A0A", borderRadius: 12, border: `1px solid ${DS_THEME.line}`,
            padding: "14px 16px",
          }}>
            <div style={{ fontSize: 11, color: DS_THEME.dim, letterSpacing: ".12em", textTransform: "uppercase" }}>{k.label}</div>
            <div style={{ fontSize: 24, fontWeight: 800, letterSpacing: "-.02em", marginTop: 6 }}>{k.val}</div>
            <div style={{ fontSize: 11, marginTop: 4, color: k.up ? DS_ACCENT.bg : "#FF7A5C", fontWeight: 600 }}>{k.delta} мес.</div>
          </div>
        ))}
      </div>

      {/* Chart */}
      <div style={{
        marginTop: 20, background: "#0A0A0A", borderRadius: 12, border: `1px solid ${DS_THEME.line}`,
        padding: "18px 20px",
      }}>
        <div style={{ display: "flex", justifyContent: "space-between", alignItems: "baseline", marginBottom: 12 }}>
          <div style={{ fontSize: 12, color: DS_THEME.dim, letterSpacing: ".12em", textTransform: "uppercase" }}>CAC vs LTV · 8 недель</div>
          <div style={{ display: "flex", gap: 14, fontSize: 10.5, color: DS_THEME.dim, letterSpacing: ".12em", textTransform: "uppercase" }}>
            <span style={{ display: "flex", alignItems: "center", gap: 6 }}><span style={{ width: 8, height: 2, background: DS_ACCENT.bg }}/>LTV</span>
            <span style={{ display: "flex", alignItems: "center", gap: 6 }}><span style={{ width: 8, height: 2, background: DS_THEME.dim }}/>CAC</span>
          </div>
        </div>
        <svg viewBox="0 0 400 120" style={{ width: "100%", height: 120, display: "block" }}>
          {/* gridlines */}
          {[0, 1, 2, 3].map(i => (
            <line key={i} x1="0" x2="400" y1={i * 30 + 10} y2={i * 30 + 10} stroke={DS_THEME.line} strokeWidth="1"/>
          ))}
          {/* CAC (gray, descending) */}
          <polyline fill="none" stroke={DS_THEME.dim} strokeWidth="2" strokeDasharray="4 3"
            points="10,45 60,55 110,62 160,58 210,70 260,78 310,82 380,88"/>
          {/* LTV (lime, ascending) */}
          <polyline fill="none" stroke={DS_ACCENT.bg} strokeWidth="2.5"
            points="10,95 60,88 110,82 160,70 210,62 260,48 310,32 380,18"/>
          {/* dot */}
          <circle cx="380" cy="18" r="4" fill={DS_ACCENT.bg}/>
          <circle cx="380" cy="18" r="9" fill="none" stroke={DS_ACCENT.bg} strokeOpacity=".3" strokeWidth="1"/>
        </svg>
      </div>

      {/* Channel breakdown */}
      <div style={{ marginTop: 16, display: "grid", gridTemplateColumns: "1fr", gap: 10 }}>
        {[
          { ch: "Meta / Instagram", pct: 62, roas: "4.2×" },
          { ch: "Google Search", pct: 48, roas: "3.1×" },
          { ch: "YouTube Ads", pct: 28, roas: "2.4×" },
        ].map((c, i) => (
          <div key={i} style={{
            display: "grid", gridTemplateColumns: "1fr 120px 50px", gap: 14, alignItems: "center",
            fontSize: 12,
          }}>
            <span style={{ color: DS_THEME.fg }}>{c.ch}</span>
            <div style={{ position: "relative", height: 6, background: DS_THEME.line, borderRadius: 999, overflow: "hidden" }}>
              <div style={{ position: "absolute", inset: 0, width: `${c.pct}%`, background: DS_ACCENT.bg }}/>
            </div>
            <span style={{ textAlign: "right", color: DS_ACCENT.bg, fontWeight: 700 }}>{c.roas}</span>
          </div>
        ))}
      </div>
    </div>
  );
}

// ---------- APPROACH ----------
function HomeApproach() {
  return (
    <DSSection id="Подход" bg={DS_THEME.surface} pad="clamp(80px, 12vh, 160px)">
      <div style={{ display: "grid", gridTemplateColumns: "1fr 1.1fr", gap: 72, alignItems: "center" }} className="approach-grid">
        <div>
          <DSReveal delay={0.05}>
            <h2 style={{
              fontFamily: "'Archivo', sans-serif", fontWeight: 800,
              fontSize: "clamp(32px, 4.2vw, 60px)", lineHeight: .98, letterSpacing: "-.04em",
              wordSpacing: ".15em", textTransform: "uppercase", margin: "20px 0 0",
            }}>
              Маркетинг как&nbsp;<em style={{
                fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
                textTransform: "none", letterSpacing: "0", whiteSpace: "nowrap",
                paddingRight: "0.1em",
              }}>дашборд</em>,<br/>а не чёрный ящик
            </h2>
          </DSReveal>
          <DSReveal delay={0.1}>
            <p style={{
              marginTop: 28, fontFamily: "'Archivo', sans-serif", fontSize: "clamp(15px, 1.25vw, 18px)",
              lineHeight: 1.6, margin: "28px 0 0",
            }}>
              Мы выстраиваем работу так, чтобы вы в любой момент видели цифры, которые имеют смысл.
              Не охваты и клики, а <strong style={{ color: DS_ACCENT.bg, fontWeight: 700 }}>стоимость клиента и окупаемость</strong> —
              от первого показа рекламы до оплаченного счёта.
            </p>
          </DSReveal>
          <DSReveal delay={0.15}>
            <p style={{
              marginTop: 16, fontFamily: "'Archivo', sans-serif", fontSize: "clamp(14px, 1.1vw, 16px)",
              lineHeight: 1.6, margin: "16px 0 0", color: DS_THEME.dim,
            }}>
              Берём маркетинг целиком: одна команда ведёт стратегию, рекламу, контент и сайт.
              Масштабируем то, что окупается, и отключаем то, что перестало работать.
            </p>
          </DSReveal>
        </div>
        <DSReveal delay={0.2}>
          <DashboardMock/>
        </DSReveal>
      </div>
    </DSSection>
  );
}

// ---------- SERVICE ICONS ----------
function IconInstagram({ size = 36, color }) {
  return (
    <svg width={size} height={size} viewBox="0 0 48 48" fill="none">
      <rect x="6" y="6" width="36" height="36" rx="10" stroke={color} strokeWidth="2.2"/>
      <circle cx="24" cy="24" r="8" stroke={color} strokeWidth="2.2"/>
      <circle cx="34" cy="14" r="1.8" fill={color}/>
    </svg>
  );
}
function IconMeta({ size = 36, color }) {
  return (
    <svg width={size} height={size} viewBox="0 0 48 48" fill="none">
      <path d="M6 30c0-10 4-18 10-18 4 0 7 3 10 8 3-5 6-8 10-8 6 0 10 8 10 18 0 5-2 8-6 8-5 0-8-6-14-16-6 10-9 16-14 16-4 0-6-3-6-8z"
            stroke={color} strokeWidth="2.2" strokeLinejoin="round"/>
    </svg>
  );
}
function IconGoogle({ size = 36, color }) {
  return (
    <svg width={size} height={size} viewBox="0 0 48 48" fill="none">
      <path d="M24 20v8h11c-1.4 4-5.2 7-11 7-6.6 0-12-5.4-12-12s5.4-12 12-12c3 0 5.6 1.1 7.6 3l5.7-5.7C33.8 5.5 29.2 4 24 4 12.9 4 4 12.9 4 24s8.9 20 20 20c10.7 0 19.2-7.6 19.2-19 0-1.6-.2-3-.5-5H24z"
            stroke={color} strokeWidth="2.2" strokeLinejoin="round" fill="none"/>
    </svg>
  );
}
function IconLanding({ size = 36, color }) {
  return (
    <svg width={size} height={size} viewBox="0 0 48 48" fill="none">
      <rect x="5" y="8" width="38" height="32" rx="3" stroke={color} strokeWidth="2.2"/>
      <path d="M5 16h38" stroke={color} strokeWidth="2.2"/>
      <circle cx="10" cy="12" r="1.2" fill={color}/>
      <circle cx="14" cy="12" r="1.2" fill={color}/>
      <path d="M12 24h18M12 30h24M12 35h14" stroke={color} strokeWidth="2" strokeLinecap="round"/>
    </svg>
  );
}

// ---------- SERVICES ----------
function HomeServices() {
  const services = [
    { Icon: IconInstagram, name: "Reels под ключ", href: "/reels.html",
      desc: "От сценария до публикации. Контент, после которого пишут в директ и покупают, а не просто ставят лайки.",
      accent: true },
    { Icon: IconMeta, name: "Meta таргет", href: "/meta-target.html",
      desc: "Facebook и Instagram. Ведём клиента по воронке продаж, которая окупается." },
    { Icon: IconGoogle, name: "Google реклама", href: "/google-reklama.html",
      desc: "Search, Performance Max и YouTube. Ловим людей, которые уже ищут ваш продукт." },
    { Icon: IconLanding, name: "Лендинги", href: "/landings.html",
      desc: "Сайты, которые продают. Копирайтинг, дизайн, вёрстка и аналитика — в одной связке." },
  ];
  return (
    <DSSection id="Услуги" pad="clamp(80px, 12vh, 160px)">
      <DSReveal delay={0.05}>
        <h2 style={{
          fontFamily: "'Archivo', sans-serif", fontWeight: 800,
          fontSize: "clamp(32px, 5vw, 68px)", lineHeight: .98, letterSpacing: "-.04em",
          wordSpacing: ".15em", textTransform: "uppercase", margin: "20px 0 0", maxWidth: "16ch",
        }}>
          Как мы приводим <em style={{
            fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
            textTransform: "none", letterSpacing: "-.02em", whiteSpace: "nowrap",
          }}>клиентов</em> бизнесу
        </h2>
      </DSReveal>
      <div style={{
        marginTop: 72, display: "grid", gridTemplateColumns: "repeat(2, 1fr)", gap: 20,
      }} className="services-grid">
        {services.map((s, i) => {
          const iconColor = s.accent ? DS_ACCENT.ink : DS_ACCENT.bg;
          return (
            <DSReveal key={s.href} delay={i * 0.06}>
              <a href={s.href} className="service-card" style={{
                display: "flex", flexDirection: "column", gap: 14,
                padding: "clamp(28px, 3vw, 40px)", borderRadius: 20,
                border: s.accent ? `1px solid ${DS_ACCENT.bg}` : `1px solid ${DS_THEME.line2}`,
                background: s.accent ? DS_ACCENT.bg : "#181818",
                color: s.accent ? DS_ACCENT.ink : DS_THEME.fg,
                minHeight: 280, position: "relative", overflow: "hidden",
                transition: "transform .25s ease, background .25s ease",
              }}>
                <div style={{
                  display: "flex", justifyContent: "space-between", alignItems: "flex-start",
                }}>
                  <div style={{
                    width: 72, height: 72, borderRadius: 16,
                    background: s.accent ? "rgba(10,10,10,.08)" : "rgba(198,255,61,.08)",
                    border: s.accent ? `1px solid ${DS_ACCENT.ink}20` : `1px solid ${DS_ACCENT.bg}30`,
                    display: "grid", placeItems: "center",
                  }}>
                    <s.Icon size={38} color={iconColor}/>
                  </div>
                  <span style={{
                    width: 44, height: 44, borderRadius: 999,
                    border: s.accent ? `1px solid ${DS_ACCENT.ink}` : `1px solid ${DS_THEME.line2}`,
                    display: "grid", placeItems: "center",
                    color: s.accent ? DS_ACCENT.ink : DS_THEME.fg,
                  }}>
                    <DSArrow size={14}/>
                  </span>
                </div>
                <h3 style={{
                  fontFamily: "'Archivo', sans-serif", fontWeight: 800,
                  fontSize: "clamp(28px, 2.6vw, 42px)", lineHeight: 1, letterSpacing: "-.03em",
                  wordSpacing: ".15em", textTransform: "uppercase", marginTop: 20,
                }}>{s.name}</h3>
                <p style={{
                  fontFamily: "'Archivo', sans-serif", fontSize: "clamp(14px, 1.05vw, 16px)",
                  lineHeight: 1.55, margin: 0,
                  color: s.accent ? DS_ACCENT.ink : DS_THEME.dim,
                  opacity: s.accent ? .75 : 1,
                }}>{s.desc}</p>
                <div style={{ marginTop: "auto", paddingTop: 12,
                  fontFamily: "'Archivo', sans-serif", fontWeight: 600, fontSize: 13,
                  letterSpacing: ".16em", textTransform: "uppercase",
                  color: s.accent ? DS_ACCENT.ink : DS_ACCENT.bg,
                }}>Подробнее →</div>
              </a>
            </DSReveal>
          );
        })}
      </div>
    </DSSection>
  );
}

// ---------- PROCESS ----------
function HomeProcess() {
  const steps = [
    { t: "Консультация", sub: "30 минут",
      b: "На видеозвонке разбираем вашу ситуацию: что делаете сейчас, какие цифры, где застряли. На выходе подсветим слабые места маркетинга и варианты, как их закрыть. Если поймём, что вы не наш клиент — скажем прямо.",
      meta: [["Длительность", "30 мин"], ["Формат", "Zoom"], ["Цена", "Бесплатно"]],
      kind: "call",
    },
    { t: "Стратегия", sub: "Карта на 3–6 месяцев",
      b: "Строим план маркетинга: с какого канала начинаем, сколько закладываем на рекламу, прогноз по заявкам и окупаемости, KPI, по которым вы нас оцениваете.",
      meta: [["Сроки", "5–7 дней"], ["Горизонт", "3–6 мес"], ["KPI", "CAC · LTV · ROAS"]],
      kind: "plan",
    },
    { t: "Запуск", sub: "Всё под ключ", featured: true,
      b: "Берём на себя всё: сценарии, съёмки, креативы, рекламные кабинеты, лендинги, аналитику. Вы утверждаете оффер и ключевые макеты — остальное двигаем сами.",
      meta: [["До первых заявок", "7–14 дней"], ["Ваше время", "≈ 3 ч/нед"], ["Команда", "5 специалистов"]],
      kind: "launch",
    },
    { t: "Ведение", sub: "Дашборд 24/7",
      b: "В любой момент открываете дашборд и видите цифры: бюджет, заявки, стоимость клиента, окупаемость. Каждый день усиливаем то, что работает, и отключаем то, что нет.",
      meta: [["Отчётность", "Live дашборд"], ["Созвоны", "1 раз в неделю"], ["Оптимизация", "Ежедневно"]],
      kind: "ops",
    },
    { t: "Масштабирование", sub: "Когда связки окупаются",
      b: "Когда основной канал стабильно даёт положительный ROI — подключаем следующий. Каждый новый канал проходит тот же цикл: гипотеза → тест → оптимизация → масштаб.",
      meta: [["Старт", "после 2–3 мес"], ["Каналов", "2–4 паралл."], ["Цель", "×2–3 объёма"]],
      kind: "scale",
    },
  ];
  return (
    <DSSection id="Процесс" bg={DS_THEME.surface} pad="clamp(80px, 12vh, 160px)">
      <DSReveal delay={0.05}>
        <h2 style={{
          fontFamily: "'Archivo', sans-serif", fontWeight: 800,
          fontSize: "clamp(32px, 5vw, 68px)", lineHeight: .98, letterSpacing: "-.04em",
          wordSpacing: ".15em", textTransform: "uppercase", margin: "20px 0 0", maxWidth: "18ch",
        }}>
          Как устроена <em style={{
            fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
            textTransform: "none", letterSpacing: "-.02em", whiteSpace: "nowrap",
          }}>работа</em> <span style={{ whiteSpace: "nowrap" }}>с Digital Slap</span>
        </h2>
      </DSReveal>

      {/* Progress pills */}
      <DSReveal delay={0.1}>
        <div style={{
          marginTop: 40, display: "flex", gap: 8, flexWrap: "wrap",
        }}>
          {steps.map((s, i) => (
            <div key={i} style={{
              display: "flex", alignItems: "center", gap: 10,
              padding: "10px 16px 10px 12px", borderRadius: 999,
              background: s.featured ? DS_ACCENT.bg : DS_THEME.bg,
              color: s.featured ? DS_ACCENT.ink : DS_THEME.fg,
              border: `1px solid ${s.featured ? DS_ACCENT.bg : DS_THEME.line2}`,
              fontFamily: "'Archivo', sans-serif", fontSize: 13, fontWeight: 600,
            }}>
              <span style={{
                width: 22, height: 22, borderRadius: 999,
                display: "grid", placeItems: "center",
                background: s.featured ? DS_ACCENT.ink : DS_ACCENT.bg,
                color: s.featured ? DS_ACCENT.bg : DS_ACCENT.ink,
                fontSize: 11, fontWeight: 800,
              }}>{i + 1}</span>
              <span>{s.t}</span>
            </div>
          ))}
        </div>
      </DSReveal>

      <div style={{ marginTop: 56, position: "relative" }}>
        {/* Vertical connector line */}
        <div aria-hidden="true" style={{
          position: "absolute", left: "clamp(30px, 3.5vw, 54px)", top: 40, bottom: 40,
          width: 1, background: `repeating-linear-gradient(to bottom, ${DS_THEME.line2} 0 6px, transparent 6px 12px)`,
        }} className="process-line"/>

        {steps.map((s, i) => {
          const isEven = i % 2 === 0;
          return (
            <DSReveal key={i} delay={i * 0.05}>
              <div className="process-item" style={{
                position: "relative", marginBottom: i === steps.length - 1 ? 0 : 24,
              }}>
                <div style={{
                  display: "grid",
                  gridTemplateColumns: "clamp(60px, 7vw, 108px) 1fr",
                  gap: "clamp(20px, 3vw, 40px)", alignItems: "stretch",
                }} className="process-row">
                  {/* Big step number */}
                  <div style={{
                    display: "flex", flexDirection: "column", alignItems: "center", gap: 10,
                    position: "relative", zIndex: 1,
                  }}>
                    <div style={{
                      width: "clamp(60px, 7vw, 108px)", height: "clamp(60px, 7vw, 108px)",
                      borderRadius: 999,
                      background: s.featured ? DS_ACCENT.bg : DS_THEME.bg,
                      border: `2px solid ${s.featured ? DS_ACCENT.bg : DS_THEME.line2}`,
                      color: s.featured ? DS_ACCENT.ink : DS_ACCENT.bg,
                      fontFamily: "'Archivo', sans-serif", fontWeight: 800,
                      fontSize: "clamp(22px, 2.4vw, 36px)", letterSpacing: "-.03em",
                      display: "grid", placeItems: "center",
                      boxShadow: s.featured ? "0 0 0 8px rgba(198,255,61,.12)" : "none",
                    }}>
                      {String(i + 1).padStart(2, "0")}
                    </div>
                  </div>

                  {/* Card */}
                  <div style={{
                    background: s.featured ? DS_THEME.bg : "transparent",
                    border: s.featured ? `1px solid ${DS_ACCENT.bg}` : `1px solid ${DS_THEME.line2}`,
                    borderRadius: 20,
                    padding: "clamp(24px, 2.8vw, 36px)",
                    display: "grid",
                    gridTemplateColumns: s.featured ? "1fr" : "1.3fr 1fr",
                    gap: "clamp(20px, 2.5vw, 32px)", alignItems: "start",
                  }} className={`process-card ${s.featured ? "featured" : ""}`}>
                    <div>
                      <div style={{
                        fontFamily: "'Archivo', sans-serif", fontSize: 12, fontWeight: 600,
                        letterSpacing: ".18em", textTransform: "uppercase", color: DS_THEME.dim,
                      }}>Шаг {String(i + 1).padStart(2, "0")} · {s.sub}</div>
                      <h3 style={{
                        marginTop: 10,
                        fontFamily: "'Archivo', sans-serif", fontWeight: 800,
                        fontSize: "clamp(24px, 2.6vw, 42px)", lineHeight: 1.05,
                        letterSpacing: "-.025em", wordSpacing: ".15em",
                        textTransform: "uppercase",
                        color: DS_THEME.fg,
                      }}>{s.t}</h3>
                      <p style={{
                        marginTop: 14, fontFamily: "'Archivo', sans-serif",
                        fontSize: "clamp(14px, 1.1vw, 16px)", lineHeight: 1.6,
                        color: DS_THEME.dim, margin: "14px 0 0", maxWidth: 560,
                      }}>{s.b}</p>
                    </div>

                    {/* Meta chips */}
                    <div className="process-chips" style={{
                      display: "flex", flexDirection: s.featured ? "row" : "column",
                      gap: s.featured ? 12 : 10,
                      flexWrap: "wrap",
                      marginTop: s.featured ? 8 : 0,
                    }}>
                      {s.meta.map(([k, v], j) => (
                        <div key={j} className="process-chip" style={{
                          flex: s.featured ? "1 1 180px" : "none",
                          display: "flex", flexDirection: "column", gap: 4,
                          padding: "12px 16px",
                          background: s.featured ? DS_THEME.surface : DS_THEME.bg,
                          borderRadius: 12,
                          border: `1px solid ${DS_THEME.line2}`,
                        }}>
                          <span style={{
                            fontFamily: "'Archivo', sans-serif", fontSize: 10.5, fontWeight: 600,
                            letterSpacing: ".16em", textTransform: "uppercase", color: DS_THEME.dim,
                          }}>{k}</span>
                          <span style={{
                            fontFamily: "'Archivo', sans-serif", fontSize: 14, fontWeight: 700,
                            color: j === 0 && s.featured ? DS_ACCENT.bg : DS_THEME.fg,
                            letterSpacing: "-.01em",
                          }}>{v}</span>
                        </div>
                      ))}
                    </div>
                  </div>
                </div>
              </div>
            </DSReveal>
          );
        })}
      </div>

      <DSReveal>
        <div style={{
          marginTop: 56,
          display: "flex", gap: 20, alignItems: "center", flexWrap: "wrap",
          padding: "clamp(24px, 3vw, 40px)",
          background: DS_THEME.bg, borderRadius: 20,
          border: `1px solid ${DS_THEME.line2}`,
        }}>
          <div style={{ flex: 1, minWidth: 280 }}>
            <div style={{
              fontFamily: "'Archivo', sans-serif", fontSize: 12, fontWeight: 600,
              letterSpacing: ".18em", textTransform: "uppercase", color: DS_ACCENT.bg,
            }}>Начните с шага 01</div>
            <div style={{
              marginTop: 8, fontFamily: "'Archivo', sans-serif", fontWeight: 800,
              fontSize: "clamp(22px, 2.2vw, 32px)", letterSpacing: "-.02em",
              textTransform: "uppercase", wordSpacing: ".15em",
            }}>
              30 минут, чтобы понять, <em style={{
                fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
                textTransform: "none", letterSpacing: "-.02em",
              }}>подходим ли мы друг другу</em>
            </div>
          </div>
          <DSButton size="lg">Получить бесплатную консультацию</DSButton>
        </div>
      </DSReveal>
    </DSSection>
  );
}

// ---------- FOUNDER ----------
function HomeFounder() {
  return (
    <DSSection id="Основатель" pad="clamp(80px, 12vh, 160px)">
      <div style={{
        marginTop: 28,
        display: "grid", gridTemplateColumns: "1fr 1.1fr", gap: 72, alignItems: "center",
      }} className="founder-grid">
        <DSReveal delay={0.05}>
          <div style={{
            position: "relative", aspectRatio: "4 / 5",
            borderRadius: 20, overflow: "hidden",
            background: DS_THEME.surface, border: `1px solid ${DS_THEME.line}`,
          }}>
            <img src="photos/founder-main.jpg" alt="Степан Лаппо" style={{
              width: "100%", height: "100%", objectFit: "cover", objectPosition: "center 20%",
            }}/>
          </div>
        </DSReveal>
        <DSReveal delay={0.1}>
          <div>
            <h2 style={{
              fontFamily: "'Archivo', sans-serif", fontWeight: 800,
              fontSize: "clamp(32px, 4.2vw, 60px)", lineHeight: .98, letterSpacing: "-.04em",
              wordSpacing: ".15em", textTransform: "uppercase",
            }}>
              Основатель<br/>
              <em style={{
                fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
                textTransform: "none", letterSpacing: "-.02em",
              }}>агентства</em>
            </h2>
            <div style={{
              marginTop: 32, fontFamily: "'Archivo', sans-serif", fontWeight: 600,
              fontSize: 20, letterSpacing: "-.01em",
            }}>
              Степан Лаппо
            </div>
            <p style={{
              marginTop: 20, fontFamily: "'Archivo', sans-serif",
              fontSize: "clamp(15px, 1.2vw, 18px)", lineHeight: 1.6, margin: "20px 0 0",
            }}>
              9 лет строю маркетинг под ключ: от стратегии и позиционирования до управления
              командой и контроля за цифрами. Работал с Ed-Tech, клиниками, услугами и стартапами
              в Чехии и за её пределами.
            </p>
            <p style={{
              marginTop: 20, fontFamily: "'Archivo', sans-serif",
              fontSize: "clamp(14px, 1.1vw, 16px)", lineHeight: 1.6, color: DS_THEME.dim, margin: "20px 0 0",
            }}>
              Особенность подхода — считаю деньги бизнеса до конца воронки, а не до клика или заявки.
              Сначала разбираю, на чём ваш бизнес зарабатывает сегодня, и только потом предлагаю
              инструменты, которые встраиваются в эту экономику.
            </p>
            <div style={{
              marginTop: 32, display: "flex", gap: 18, flexWrap: "wrap",
              fontFamily: "'Archivo', sans-serif", fontSize: 12, fontWeight: 600,
              letterSpacing: ".16em", textTransform: "uppercase", color: DS_THEME.dim,
            }}>
              <span>Ed-Tech</span><span style={{ color: DS_THEME.line2 }}>·</span>
              <span>Клиники</span><span style={{ color: DS_THEME.line2 }}>·</span>
              <span>Услуги</span><span style={{ color: DS_THEME.line2 }}>·</span>
              <span>Стартапы</span>
            </div>
          </div>
        </DSReveal>
      </div>
    </DSSection>
  );
}

// ---------- FAQ ----------
function FAQItem({ q, a, idx, open, onToggle }) {
  const ref = React.useRef(null);
  React.useEffect(() => {
    if (open && ref.current) {
      // небольшой таймаут чтобы аккордеон успел раскрыться
      setTimeout(() => {
        const el = ref.current;
        if (!el) return;
        const rect = el.getBoundingClientRect();
        const header = document.querySelector("[data-ds-header]");
        const headerH = (header ? header.getBoundingClientRect().height : 0) + 20;
        // если верх элемента под хедером — подскроллим
        if (rect.top < headerH) {
          window.scrollTo({ top: window.scrollY + rect.top - headerH, behavior: "smooth" });
        }
      }, 60);
    }
  }, [open]);
  return (
    <div ref={ref} className="faq-item" style={{
      background: open ? DS_THEME.surface : "transparent",
      borderRadius: open ? 16 : 0,
      /* border → boxShadow inset: рисуется ВНУТРИ блока, не перекрывается соседями */
      boxShadow: open ? `inset 0 0 0 1.5px ${DS_ACCENT.bg}` : "none",
      borderBottom: open ? "none" : `1px solid ${DS_THEME.line2}`,
      borderTop: !open && idx === 0 ? `1px solid ${DS_THEME.line2}` : undefined,
      marginTop: open ? 12 : 0,
      marginBottom: open ? 12 : 0,
      transition: "background .25s ease, box-shadow .25s ease",
    }}>
      <button onClick={onToggle} style={{
        width: "100%", textAlign: "left", background: "transparent", border: "none",
        padding: open ? "28px clamp(20px, 2.5vw, 32px)" : "28px 0",
        display: "flex", alignItems: "center", gap: 24, cursor: "pointer",
        color: DS_THEME.fg,
      }}>
        <h3 style={{
          flex: 1, fontFamily: "'Archivo', sans-serif", fontWeight: 600,
          fontSize: "clamp(17px, 1.4vw, 21px)", lineHeight: 1.3, letterSpacing: "-.015em", margin: 0,
        }}>{q}</h3>
        <span style={{
          flex: "none", width: 40, height: 40, borderRadius: 999,
          background: open ? DS_ACCENT.bg : "transparent",
          border: open ? "none" : `1px solid ${DS_THEME.line2}`,
          display: "grid", placeItems: "center",
          color: open ? DS_ACCENT.ink : DS_THEME.fg,
          transition: "background .25s ease, color .25s ease",
        }}>
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" style={{
            transform: open ? "rotate(45deg)" : "rotate(0)", transition: "transform .25s ease",
          }}>
            <path d="M12 5v14M5 12h14" stroke="currentColor" strokeWidth="2.5" strokeLinecap="square"/>
          </svg>
        </span>
      </button>
      <div style={{
        display: "grid", gridTemplateRows: open ? "1fr" : "0fr",
        transition: "grid-template-rows .35s cubic-bezier(.2,.6,.2,1)",
      }}>
        <div style={{ overflow: "hidden" }}>
          <p style={{
            padding: open ? "0 clamp(20px, 2.5vw, 32px) 32px" : "0",
            fontFamily: "'Archivo', sans-serif",
            fontSize: "clamp(15px, 1.15vw, 17px)", lineHeight: 1.6, color: DS_THEME.dim, margin: 0,
            maxWidth: 820,
          }}>{a}</p>
        </div>
      </div>
    </div>
  );
}

function HomeFAQ() {
  const [open, setOpen] = useState(-1);
  const faq = [
    { q: "С каким бизнесом вы работаете?",
      a: "С владельцами бизнеса с оборотом от 250 000 евро в год. В основном — клиники, услуги, образовательные проекты и стартапы. Хотите поработать, но ваш бизнес меньше? На консультации поймём, подходим ли мы друг другу." },
    { q: "Сколько стоят ваши услуги?",
      a: "Зависит от услуги и объёма работ. Точную стоимость рассчитаем после консультации, когда поймём, какой канал имеет смысл запускать именно у вас и какого масштаба нужна команда под вашу задачу." },
    { q: "Как устроена бесплатная консультация?",
      a: "Мы встречаемся с вами на 30 минут по видеозвонку. Вы рассказываете про бизнес и текущий маркетинг, я задаю вопросы по цифрам, сайту, контенту. На выходе — конкретные слабые места и варианты, как их закрыть. Если увидим, что нам по пути, — обсуждаем, как мы могли бы это реализовать." },
    { q: "Можно ли работать с вами удалённо?",
      a: "Да. Большинство клиентов работают с нами удалённо — встречи по Zoom, дашборды и материалы в облаке. Съёмки Reels проходят в Праге или выезжаем на локацию клиента. Их мы также можем курировать удалённо." },
    { q: "На каких языках работаете?",
      a: "Русский, чешский, английский. Всю коммуникацию и дашборды ведём на удобном вам языке." },
    { q: "Как быстро видны результаты?",
      a: "Зависит от канала. Google и Meta дают первые заявки уже в первую неделю, но честную оценку канала нужно делать на горизонте 4–6 недель — за это время алгоритмы обучаются, а мы успеваем проверить несколько гипотез. Reels и органический контент обычно требуют 2–3 месяца до стабильных результатов. На консультации скажу реалистичный прогноз для вашей ниши." },
  ];
  return (
    <DSSection id="FAQ" pad="clamp(80px, 12vh, 160px)">
      <div style={{ display: "grid", gridTemplateColumns: "1fr 1.6fr", gap: 72, alignItems: "start" }} className="faq-grid">
        <div style={{ position: "sticky", top: 120 }} className="faq-left">
          <DSReveal delay={0.05}>
            <h2 style={{
              fontFamily: "'Archivo', sans-serif", fontWeight: 800,
              fontSize: "clamp(32px, 4.2vw, 60px)", lineHeight: .98, letterSpacing: "-.04em",
              wordSpacing: ".15em", textTransform: "uppercase", margin: "20px 0 0",
            }}>
              Частые <em style={{
                fontFamily: "'Instrument Serif', 'EB Garamond', Georgia, serif", fontStyle: "italic", fontWeight: 400,
                textTransform: "none", letterSpacing: "-.02em",
              }}>вопросы</em>
            </h2>
          </DSReveal>
          <DSReveal delay={0.1}>
            <p style={{
              marginTop: 24, fontFamily: "'Archivo', sans-serif",
              fontSize: "clamp(15px, 1.15vw, 17px)", lineHeight: 1.55,
              color: DS_THEME.dim, maxWidth: 380, margin: "24px 0 0",
            }}>
              Не нашли ответа? Задайте вопрос напрямую в Telegram или на консультации.
            </p>
          </DSReveal>
        </div>
        <div>
          {faq.map((f, i) => (
            <DSReveal key={i} delay={i * 0.03}>
              <FAQItem {...f} idx={i} open={open === i} onToggle={() => setOpen(open === i ? -1 : i)}/>
            </DSReveal>
          ))}
        </div>
      </div>
    </DSSection>
  );
}

// ---------- CONTACT FORM ----------
// Форма вынесена в общий компонент DSContactSection (в ds.jsx) —
// используется и главной, и страницами-заглушками.

function HomeContact() {
  return <DSContactSection sourceLabel="digital-slap.com — главная"/>;
}

// ---------- ROOT ----------
function HomeApp() {
  return (
    <DSPage active="/">
      <HomeHero/>
      <HomeProblem/>
      <HomeApproach/>
      <HomeServices/>
      <HomeProcess/>
      <HomeFounder/>
      <HomeFAQ/>
      <HomeContact/>
    </DSPage>
  );
}

ReactDOM.createRoot(document.getElementById("root")).render(<HomeApp/>);
