// Hero — light theme, brand red, real logo elsewhere

function MiniChart({ animate = true }) {
  const points = [12, 14, 13, 18, 22, 21, 28, 34, 33, 46, 58, 67, 82, 94, 108, 121];
  const max = Math.max(...points);
  const w = 480,h = 180,pad = 8;
  const stepX = (w - pad * 2) / (points.length - 1);
  const pts = points.map((p, i) => [pad + i * stepX, h - pad - p / max * (h - pad * 2)]);
  const d = pts.map((p, i) => i ? `L${p[0]},${p[1]}` : `M${p[0]},${p[1]}`).join(' ');
  const area = d + ` L${pts[pts.length - 1][0]},${h - pad} L${pts[0][0]},${h - pad} Z`;

  const ref = React.useRef(null);
  const [len, setLen] = React.useState(0);
  React.useEffect(() => {
    if (ref.current) setLen(ref.current.getTotalLength());
  }, []);

  return (
    <svg viewBox={`0 0 ${w} ${h}`} preserveAspectRatio="none" style={{ width: '100%', height: '100%', display: 'block' }}>
      <defs>
        <linearGradient id="ga" x1="0" x2="0" y1="0" y2="1">
          <stop offset="0%" stopColor="var(--accent)" stopOpacity=".22" />
          <stop offset="100%" stopColor="var(--accent)" stopOpacity="0" />
        </linearGradient>
      </defs>
      {[0, 1, 2, 3].map((i) =>
      <line key={i} x1={pad} x2={w - pad}
      y1={pad + (h - pad * 2) * (i / 3)} y2={pad + (h - pad * 2) * (i / 3)}
      stroke="var(--line)" strokeDasharray="2 4" />
      )}
      <path d={area} fill="url(#ga)" />
      <path ref={ref} d={d} fill="none" stroke="var(--accent)" strokeWidth="2.6" strokeLinecap="round" strokeLinejoin="round"
      style={{
        strokeDasharray: len, strokeDashoffset: animate ? 0 : len,
        transition: 'stroke-dashoffset 2s cubic-bezier(.2,.7,.2,1) .2s'
      }} />
      
      <circle cx={pts[pts.length - 1][0]} cy={pts[pts.length - 1][1]} r="6" fill="var(--accent)" opacity=".22" />
      <circle cx={pts[pts.length - 1][0]} cy={pts[pts.length - 1][1]} r="3.2" fill="var(--accent)" />
    </svg>);

}

function MapPlacard() {
  const items = [
  { rank: 1, name: "Кофейня «Зерно»", rating: "4.9", reviews: 482, calls: "+218%" },
  { rank: 2, name: "Кофейня «Севера»", rating: "4.7", reviews: 318, calls: null },
  { rank: 3, name: "Кофейня «Утро»", rating: "4.6", reviews: 244, calls: null }];

  return (
    <div className="map">
      <div className="map-head">
        <div className="map-search">
          <svg width="14" height="14" viewBox="0 0 14 14" fill="none">
            <circle cx="6" cy="6" r="4.2" stroke="currentColor" strokeWidth="1.5" />
            <path d="m9.2 9.2 3 3" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
          </svg>
          <span>кофейня рядом</span>
        </div>
        <span className="map-dot" />
      </div>
      <div className="map-list">
        {items.map((it, i) =>
        <div key={i} className={`map-item rank-${it.rank} ${i === 0 ? 'is-you' : ''}`}>
            <span className="map-rank"><span className="num mono">{it.rank}</span></span>
            <div className="map-body">
              <div className="map-name">
                {i === 0 ? "Ваша компания" : <span style={{ color: 'var(--mute)' }}>Конкурент</span>}
                {i === 0 && <span className="ours-tag mono">ВЫ</span>}
              </div>
              <div className="map-meta">
                <span className="stars" aria-hidden="true">
                  <svg width="12" height="12" viewBox="0 0 12 12" fill="none">
                    <path d="m6 1 1.6 3.3 3.6.5-2.6 2.5.6 3.6L6 9.2l-3.2 1.7.6-3.6L.8 4.8l3.6-.5L6 1Z" fill="#F2B900" />
                  </svg>
                  {it.rating}
                </span>
                <span className="dim">· {it.reviews} отзывов</span>
              </div>
            </div>
            {i === 0 &&
          <div className="map-stat">
                <span className="mono up">+218%</span>
                <span className="dim mono" style={{ fontSize: 10 }}>звонки</span>
              </div>
          }
          </div>
        )}
      </div>
      <div className="map-fab">
        <PinIcon size={16} color="#fff" />
      </div>
      <style>{`
        .map{
          position:relative;
          background:#fff;
          border:1px solid var(--line);border-radius:20px;
          padding:14px;display:flex;flex-direction:column;gap:12px;
          box-shadow:
            0 1px 0 rgba(0,0,0,.02),
            0 24px 60px -20px rgba(0,0,0,.18),
            0 8px 24px -12px rgba(0,0,0,.08);
          min-height:340px;
        }
        .map-head{display:flex;align-items:center;justify-content:space-between;padding:4px 6px}
        .map-search{display:inline-flex;align-items:center;gap:8px;
          background:var(--bg-2);border:1px solid var(--line);
          border-radius:999px;padding:8px 14px;color:var(--fg-2);font-size:13px;flex:1}
        .map-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);margin-left:10px;
          box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 22%, transparent);
          animation:pulse 1.6s ease-in-out infinite alternate}
        .map-list{display:flex;flex-direction:column;gap:6px}
        .map-item{
          display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;
          padding:14px;border-radius:12px;background:var(--surface-2);
          border:1px solid var(--line);
        }
        .map-item.is-you{
          background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 7%, white), white);
          border-color:color-mix(in srgb, var(--accent) 35%, transparent);
          box-shadow:0 0 0 1px color-mix(in srgb, var(--accent) 18%, transparent),
                     0 14px 36px -16px color-mix(in srgb, var(--accent) 40%, transparent);
        }
        .map-rank{
          width:32px;height:32px;border-radius:9px;display:grid;place-items:center;
          background:#fff;border:1px solid var(--line-2);
          font-size:13px;font-weight:600;color:var(--fg);
        }
        .map-item.is-you .map-rank{background:var(--accent);color:#fff;border-color:transparent}
        .map-name{font-weight:600;font-size:14px;display:flex;align-items:center;gap:8px;color:var(--fg)}
        .ours-tag{font-size:10px;letter-spacing:.12em;
          color:#fff;background:var(--accent);
          padding:3px 7px;border-radius:4px;font-weight:600}
        .map-meta{font-size:12px;color:var(--fg-2);display:flex;align-items:center;gap:6px;margin-top:3px}
        .stars{display:inline-flex;align-items:center;gap:4px}
        .dim{color:var(--mute)}
        .map-stat{display:flex;flex-direction:column;align-items:flex-end;gap:2px}
        .map-stat .up{color:var(--accent);font-size:14px;font-weight:600}
        .map-fab{
          position:absolute;right:-14px;bottom:-14px;
          width:54px;height:54px;border-radius:50%;
          background:var(--accent);display:grid;place-items:center;
          box-shadow:0 16px 36px -8px color-mix(in srgb, var(--accent) 50%, transparent),
                     inset 0 1px 0 rgba(255,255,255,.25);
        }
      `}</style>
    </div>);

}

function HeroMetric({ label, value, suffix, prefix }) {
  const [display, ref] = useCountUp(value, { duration: 1800 });
  return (
    <div className="hm" ref={ref}>
      <div className="hm-v mono">
        {prefix}{display}{suffix}
      </div>
      <div className="hm-l">{label}</div>
      <style>{`
        .hm{padding:18px 0}
        .hm + .hm{border-top:1px solid var(--line)}
        .hm-v{font-size:clamp(36px,5vw,56px);font-weight:700;letter-spacing:-.035em;line-height:1;color:var(--fg)}
        .hm-l{margin-top:8px;color:var(--mute);font-size:13px;letter-spacing:-.005em}
      `}</style>
    </div>);

}

function Hero() {
  return (
    <section id="top" className="hero">
      <div className="bg-glow" aria-hidden="true" />
      <div className="bg-grid" aria-hidden="true" />
      <div className="wrap hero-grid">
        <div className="hero-left reveal">
          <span className="eyebrow">
            <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6 }}>
              <PinIcon size={11} /> Yandex Maps · Geo-marketing
            </span>
          </span>
          <h1 className="h-headline">
            В <span className="h-em">ТОП</span><br />
            на Яндекс.Картах<br />
            <span className="em-mute">или вернём деньги.</span>
          </h1>
          <p className="lead h-lead">
            Продвижение без слитого бюджета. Своя система вместо слепого вливания
            в Яндекс.Бизнес — только реальные звонки, маршруты и заявки.
          </p>
          <div className="h-cta">
            <a href="#cta" className="btn primary">Получить бесплатный аудит <Arrow /></a>
            <a href="#process" className="btn ghost">Как это работает</a>
          </div>
          <div className="h-trust">
            <div className="h-trust-stars" aria-hidden="true">
              {[0, 1, 2, 3, 4].map((i) =>
              <svg key={i} width="14" height="14" viewBox="0 0 12 12" fill="none">
                  <path d="m6 1 1.6 3.3 3.6.5-2.6 2.5.6 3.6L6 9.2l-3.2 1.7.6-3.6L.8 4.8l3.6-.5L6 1Z" fill="#F2B900" />
                </svg>
              )}
            </div>
            <span><b style={{ color: 'var(--fg)' }}>4.9</b> <span style={{ color: 'var(--mute)' }}>· 200+ компаний работают с нами</span></span>
          </div>
        </div>

        <div className="hero-right reveal" style={{ transitionDelay: '.1s' }}>
          <div className="map-stage">
            <MapPlacard />
            <div className="chart-card">
              <div className="cc-head">
                <span className="eyebrow muted" style={{ fontSize: 10 }}>30 дней</span>
                <span className="mono cc-up">+365%</span>
              </div>
              <div className="cc-chart"><MiniChart /></div>
              <div className="cc-foot">
                <div>
                  <div className="cc-l mono">Звонки и маршруты</div>
                  <div className="mono cc-v">12 → 121 / день</div>
                </div>
                <span className="pill"><span className="dot" /> live</span>
              </div>
            </div>
          </div>
        </div>
      </div>

      <div className="wrap h-stats reveal">
        <HeroMetric prefix="+" value={365} suffix="%" label="Средний рост трафика за 90 дней" />
        <HeroMetric value={200} suffix="+" label="Клиентов в портфолио" />
        <HeroMetric value={99} suffix="%" label="Доля проектов с результатом" />
        <HeroMetric value={10} suffix=" лет" label="Опыт в digital и продажах" />
      </div>

      <style>{`
        .hero{position:relative;padding:48px 0 80px;overflow:hidden}
        @media (min-width:780px){.hero{padding:72px 0 120px}}
        .bg-glow{
          position:absolute;inset:-200px 0 auto 0;height:700px;pointer-events:none;z-index:0;
          background:radial-gradient(ellipse 70% 60% at 75% 0%, color-mix(in srgb, var(--accent) 10%, transparent) 0%, transparent 60%);
        }
        .bg-grid{
          position:absolute;inset:0;pointer-events:none;z-index:0;
          background-image:
            linear-gradient(to right, rgba(0,0,0,.04) 1px, transparent 1px),
            linear-gradient(to bottom, rgba(0,0,0,.04) 1px, transparent 1px);
          background-size:64px 64px;
          mask-image:radial-gradient(ellipse 60% 40% at 50% 30%, #000 0%, transparent 70%);
        }
        .hero-grid{position:relative;z-index:1;display:grid;gap:48px;align-items:center}
        @media (min-width:960px){.hero-grid{grid-template-columns:1.1fr .9fr;gap:64px}}
        .h-headline{margin-bottom:24px}
        .h-em{color:var(--accent)}
        .h-lead{margin-bottom:32px}
        .h-cta{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:32px}
        .h-trust{display:flex;align-items:center;gap:12px;color:var(--mute);font-size:13px}
        .h-trust-stars{display:inline-flex;gap:2px}

        .hero-right{position:relative}
        .map-stage{position:relative;padding:0 0 30px}
        .chart-card{
          position:absolute;right:-12px;bottom:-40px;width:min(78%, 320px);
          background:#fff;
          border:1px solid var(--line);border-radius:18px;padding:16px;
          box-shadow:0 24px 60px -20px rgba(0,0,0,.18), 0 6px 16px -8px rgba(0,0,0,.06);
        }
        @media (max-width:780px){
          .chart-card{position:relative;right:0;bottom:0;width:auto;margin-top:14px}
        }
        .cc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
        .cc-up{color:var(--accent);font-weight:700;font-size:18px}
        .cc-chart{height:90px}
        .cc-foot{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-top:8px}
        .cc-l{font-size:10px;color:var(--mute);text-transform:uppercase;letter-spacing:.1em}
        .cc-v{font-size:13px;color:var(--fg);margin-top:4px;font-weight:600}

        .h-stats{margin-top:64px;display:grid;gap:0;
          border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
        @media (min-width:780px){
          .h-stats{grid-template-columns:repeat(4,1fr)}
          .hm + .hm{border-top:0;border-left:1px solid var(--line)}
          .hm{padding:32px 28px}
        }
      `}</style>
    </section>);

}

window.Hero = Hero;