// Main sections: Hero, Services, Listings, Calculator, Testimonials, Team, Footer.
// Forms live in forms.jsx.

const { useState: useStateS, useMemo: useMemoS, useEffect: useEffectS } = React;

// ============================================================
// HERO
// ============================================================
function Hero({ lang, t }) {
  const isKo = lang === 'ko';
  return (
    <Section id="home" className="pt-28 md:pt-36 lg:pt-40 pb-20 md:pb-28 lg:pb-32">
      <div className="grid grid-cols-12 gap-6 md:gap-8 items-end">
        {/* Left: headline block */}
        <div className="col-span-12 lg:col-span-8">
          <Reveal>
            <Eyebrow className="mb-10 md:mb-14">{t.hero.eyebrow}</Eyebrow>
          </Reveal>

          <Reveal delay={120}>
            <h1 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-[14vw] md:text-[11vw] lg:text-[9.2vw] xl:text-[8.4vw] leading-[0.92]`}>
              {isKo ? (
                <>
                  <span className="block">{t.hero.titleA}</span>
                  <span className="block"><span className="display-italic text-accent-deep">{t.hero.titleItalic}</span>로 가는</span>
                  <span className="block">{t.hero.titleC}</span>
                </>
              ) : (
                <>
                  <span className="block">The key</span>
                  <span className="block">to your <span className="display-italic text-accent-deep">next</span></span>
                  <span className="block">move.</span>
                </>
              )}
            </h1>
          </Reveal>
        </div>

        {/* Right: sub + CTAs + Korean pill */}
        <div className="col-span-12 lg:col-span-4 lg:pb-3">
          <Reveal delay={260}>
            <div className={`flex items-center gap-2 mb-6 ${isKo ? 'lang-ko' : ''}`}>
              <div className="w-8 h-px bg-accent"></div>
              <span className="eyebrow text-accent-deep">{t.hero.koPill}</span>
            </div>
          </Reveal>
          <Reveal delay={320}>
            <p className={`text-ink/70 text-base md:text-lg leading-[1.55] max-w-md mb-10 ${isKo ? 'lang-ko' : ''}`}>
              {t.hero.sub}
            </p>
          </Reveal>
          <Reveal delay={400}>
            <div className="flex flex-col sm:flex-row lg:flex-col xl:flex-row gap-3 sm:gap-4 lg:gap-3 xl:gap-4 items-start">
              <a href="#listings" className={`btn-solid ${isKo ? 'lang-ko' : ''}`}>
                {t.hero.ctaPrimary}
                <IconArrow size={14} />
              </a>
              <a href="#valuation" className={`link-under text-sm tracking-wide text-ink/80 hover:text-ink py-3 ${isKo ? 'lang-ko' : ''}`}>
                {t.hero.ctaSecondary} <span aria-hidden="true">→</span>
              </a>
            </div>
          </Reveal>
        </div>
      </div>

      {/* Trust row */}
      <Reveal delay={600} className="mt-20 md:mt-28 lg:mt-32">
        <Hairline className="mb-6" />
        <div className={`flex flex-wrap items-center gap-x-10 gap-y-3 text-ink/55 ${isKo ? 'lang-ko' : ''}`}>
          <span className="eyebrow">{t.hero.trust1}</span>
          <span className="w-1 h-1 rounded-full bg-ink/30"></span>
          <span className="eyebrow">{t.hero.trust2}</span>
          <span className="w-1 h-1 rounded-full bg-ink/30"></span>
          <span className="eyebrow lang-ko text-accent-deep">한국어 상담 가능</span>
        </div>
      </Reveal>
    </Section>
  );
}

// ============================================================
// TEAM BANNER — full-width photo strip
// ============================================================
function TeamBanner({ lang, t }) {
  const isKo = lang === 'ko';
  return (
    <section className="relative bg-bone" data-screen-label="team-banner">
      <div className="mx-auto max-w-[1480px] px-6 md:px-10 lg:px-16">
        <Reveal>
          <div className="img-zoom relative aspect-[16/9] md:aspect-[21/9] lg:aspect-[24/9] overflow-hidden">
            <img
              src={IMAGES.teamPhoto}
              alt="The EC Real Estate Group team"
              loading="lazy"
              className="absolute inset-0 w-full h-full object-cover"
            />
            <div className="absolute inset-0 bg-gradient-to-t from-ink/35 via-transparent to-transparent"></div>
            <div className="absolute bottom-5 left-5 md:bottom-8 md:left-8 flex items-center gap-3">
              <div className="w-8 h-px bg-accent"></div>
              <span className={`eyebrow text-bone ${isKo ? 'lang-ko' : ''}`}>{isKo ? 'EC 부동산 그룹 팀' : 'The EC Real Estate Group Team'}</span>
            </div>
          </div>
        </Reveal>
      </div>
    </section>
  );
}

// ============================================================
// SERVICES
// ============================================================
function Services({ lang, t }) {
  const isKo = lang === 'ko';
  return (
    <Section id="services" className="py-24 md:py-32 lg:py-40">
      <div className="grid grid-cols-12 gap-6 md:gap-8 mb-16 md:mb-24">
        <div className="col-span-12 lg:col-span-5">
          <Reveal>
            <Eyebrow className="mb-8">{t.services.eyebrow}</Eyebrow>
          </Reveal>
          <Reveal delay={140}>
            <h2 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-[10vw] md:text-[6.4vw] lg:text-[4.6vw] xl:text-[4.2vw] leading-[0.98]`}>
              <span className="block">{t.services.title}</span>
              <span className="block display-italic text-accent-deep">{t.services.titleItalic}</span>
            </h2>
          </Reveal>
        </div>
        <div className="col-span-12 lg:col-span-5 lg:col-start-8 self-end">
          <Reveal delay={260}>
            <p className={`text-ink/70 text-base md:text-lg leading-[1.6] max-w-md ${isKo ? 'lang-ko' : ''}`}>
              {t.services.sub}
            </p>
          </Reveal>
        </div>
      </div>

      <Hairline />
      <div className="grid grid-cols-2 lg:grid-cols-4">
        {t.services.items.map((item, idx) => {
          const imgKey = SERVICE_IMAGES[idx] || 'buy';
          return (
            <Reveal
              key={item.num}
              delay={idx * 90}
              className={`group relative px-4 md:px-7 lg:px-8 border-b border-r last:border-r-0 [&:nth-child(2n)]:border-r-0 lg:[&:nth-child(2n)]:border-r lg:[&:nth-child(4)]:border-r-0 [&:nth-last-child(-n+2)]:border-b lg:[&:nth-child(3)]:border-b-0 lg:[&:nth-child(4)]:border-b-0 hairline`}
            >
              <a href="#contact" className="block py-7 md:py-12 lg:py-14">
                <div className="img-zoom relative aspect-[4/3] mb-4 md:mb-8 overflow-hidden bg-bone-soft">
                  <img
                    src={IMAGES[imgKey]}
                    alt={item.name}
                    loading="lazy"
                    className="absolute inset-0 w-full h-full object-cover"
                  />
                </div>
                <div className="flex items-baseline justify-between mb-2.5 md:mb-5">
                  <span className="num text-[10px] md:text-xs text-accent-deep tracking-wider-2">{item.num}</span>
                  <IconArrow size={14} className="text-ink/30 group-hover:text-accent-deep group-hover:translate-x-1 transition-all duration-500" />
                </div>
                <h3 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-2xl md:text-5xl lg:text-[3.2rem] mb-2.5 md:mb-5 leading-none`}>
                  {item.name}
                </h3>
                <ReadMore
                  lines={3}
                  more={isKo ? '더 보기' : 'Read more'}
                  less={isKo ? '접기' : 'Show less'}
                  textClassName={`text-ink/65 text-[13px] md:text-[15px] leading-[1.55] md:leading-[1.6] ${isKo ? 'lang-ko' : ''}`}
                >
                  {item.desc}
                </ReadMore>
              </a>
            </Reveal>
          );
        })}
      </div>
      <Hairline />

      {/* Extras row */}
      <Reveal delay={400} className={`mt-10 flex flex-wrap items-center gap-x-8 gap-y-3 text-ink/50 ${isKo ? 'lang-ko' : ''}`}>
        <span className="eyebrow text-ink/40">— Also</span>
        {t.services.extras.map((x, i) => (
          <React.Fragment key={i}>
            <span className="eyebrow">{x}</span>
            {i < t.services.extras.length - 1 ? <span className="w-1 h-1 rounded-full bg-ink/20"></span> : null}
          </React.Fragment>
        ))}
      </Reveal>
    </Section>
  );
}

// ============================================================
// LISTINGS — featured gallery with filter chips
// ============================================================
function Listings({ lang, t }) {
  const isKo = lang === 'ko';
  const [filter, setFilter] = useStateS('all');
  const filtered = useMemoS(() => {
    if (filter === 'all') return LISTINGS;
    return LISTINGS.filter(l => l.tagKey === filter);
  }, [filter]);

  const chips = [
    { key: 'all', label: t.listings.filters.all },
    { key: 'sale', label: t.listings.filters.sale },
    { key: 'new', label: t.listings.filters.new },
    { key: 'luxury', label: t.listings.filters.luxury },
  ];

  return (
    <Section id="listings" className="py-24 md:py-32 lg:py-40">
      <div className="grid grid-cols-12 gap-6 md:gap-8 mb-12 md:mb-16">
        <div className="col-span-12 lg:col-span-7">
          <Reveal>
            <Eyebrow className="mb-8">{t.listings.eyebrow}</Eyebrow>
          </Reveal>
          <Reveal delay={140}>
            <h2 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-[11vw] md:text-[7vw] lg:text-[5vw] xl:text-[4.6vw] leading-[0.98]`}>
              <span className="block">
                {isKo ? t.listings.title : <>A small,</>} <span className="display-italic text-accent-deep">{t.listings.titleItalic}</span>
              </span>
              <span className="block">{t.listings.titleB}</span>
            </h2>
          </Reveal>
        </div>
        <div className="col-span-12 lg:col-span-5 lg:pt-3">
          <Reveal delay={260}>
            <p className={`text-ink/70 text-base md:text-lg leading-[1.6] max-w-md ${isKo ? 'lang-ko' : ''}`}>
              {t.listings.sub}
            </p>
          </Reveal>
        </div>
      </div>

      {/* Filter chips */}
      <Reveal delay={320}>
        <div className="flex flex-wrap items-center gap-3 mb-10 md:mb-14">
          {chips.map(c => (
            <button
              key={c.key}
              type="button"
              onClick={() => setFilter(c.key)}
              className={`chip ${filter === c.key ? 'is-active' : ''} ${isKo ? 'lang-ko' : ''}`}
              aria-pressed={filter === c.key}
            >
              {c.label}
            </button>
          ))}
          <span className={`num text-xs text-ink/40 ml-auto hidden sm:block`}>{filtered.length.toString().padStart(2,'0')} / {LISTINGS.length.toString().padStart(2,'0')}</span>
        </div>
      </Reveal>

      {/* Grid */}
      <div className="grid grid-cols-2 lg:grid-cols-3 gap-x-4 gap-y-8 md:gap-x-10 md:gap-y-10 lg:gap-12">
        {filtered.map((l, idx) => {
          const realIdx = LISTINGS.findIndex(x => x.id === l.id);
          const imgKey = LISTING_IMAGES[realIdx] || 'banner1';
          return (
          <Reveal key={l.id} delay={(idx % 3) * 100} className="group">
            <a href={l.url || 'https://www.zillow.com/profile/evelynmkchang'} target="_blank" rel="noopener" className="block">
              <div className="img-zoom relative aspect-[4/5] mb-3 md:mb-5 overflow-hidden bg-bone-deep">
                <img
                  src={IMAGES[imgKey]}
                  alt={l.address[lang]}
                  loading="lazy"
                  className="absolute inset-0 w-full h-full object-cover"
                />
                <div className="absolute top-2 left-2 md:top-4 md:left-4 listing-badge">{l.tag[lang]}</div>
                <div className="absolute bottom-2 right-2 md:bottom-4 md:right-4 eyebrow text-bone/70 text-[9px] md:text-[10px] hidden sm:block">{`Listing — ${l.id.toUpperCase()}`}</div>
              </div>

              <div className="flex flex-col sm:flex-row sm:items-baseline sm:justify-between mb-1.5 md:mb-2 gap-0.5">
                <div className={`display text-ink text-2xl md:text-[2rem] leading-none font-medium`}>
                  {fmtPrice(l.price)}
                </div>
                <div className={`eyebrow text-ink/45 text-[10px] md:text-[11px] ${isKo ? 'lang-ko' : ''}`}>{l.neighborhood[lang]}</div>
              </div>

              <div className={`flex items-center gap-2 md:gap-5 text-[11px] md:text-[13px] text-ink/60 mb-2 md:mb-3 ${isKo ? 'lang-ko' : ''}`}>
                <span className="inline-flex items-center gap-1">
                  <IconBed size={12} /> <span className="num">{l.beds}</span>
                </span>
                <span className="inline-flex items-center gap-1">
                  <IconBath size={12} /> <span className="num">{l.baths}</span>
                </span>
                <span className="inline-flex items-center gap-1">
                  <IconRuler size={12} /> <span className="num">{fmtSqft(l.sqft)}</span>
                </span>
              </div>

              <div className={`text-[12px] md:text-sm text-ink/70 mb-2 md:mb-4 leading-snug ${isKo ? 'lang-ko' : ''}`}>
                {l.address[lang]}
              </div>

              <div className={`inline-flex items-center gap-2 text-[10px] md:text-xs tracking-wider-2 uppercase text-ink/80 link-under group-hover:text-accent-deep transition-colors ${isKo ? 'lang-ko' : ''}`}>
                {t.listings.cta}
                <IconArrow size={12} />
              </div>
            </a>
          </Reveal>
          );
        })}
      </div>

      <Reveal delay={400} className="mt-16 md:mt-20 flex justify-center">
        <a href="https://www.zillow.com/profile/evelynmkchang" target="_blank" rel="noopener" className={`link-under text-sm tracking-wide text-ink/80 hover:text-accent-deep ${isKo ? 'lang-ko' : ''}`}>
          {t.listings.zillow} <span aria-hidden="true">→</span>
        </a>
      </Reveal>
    </Section>
  );
}

// ============================================================
// CALCULATOR
// ============================================================
function Calculator({ lang, t }) {
  const isKo = lang === 'ko';
  const [price, setPrice] = useStateS(750000);
  const [downPct, setDownPct] = useStateS(20);
  const [rate, setRate] = useStateS(6.5);
  const [term, setTerm] = useStateS(30);

  const downAmt = price * (downPct / 100);
  const loanAmt = price - downAmt;
  const n = term * 12;
  const r = (rate / 100) / 12;
  const monthly = r === 0 ? (loanAmt / n) : (loanAmt * r) / (1 - Math.pow(1 + r, -n));
  const totalInt = monthly * n - loanAmt;

  return (
    <Section id="invest" className="py-24 md:py-32 lg:py-40 bg-bone-soft">
      <div className="grid grid-cols-12 gap-6 md:gap-8 mb-12 md:mb-16">
        <div className="col-span-12 lg:col-span-7">
          <Reveal>
            <Eyebrow className="mb-8">{t.calc.eyebrow}</Eyebrow>
          </Reveal>
          <Reveal delay={140}>
            <h2 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-[11vw] md:text-[6.6vw] lg:text-[4.8vw] xl:text-[4.4vw] leading-[0.98]`}>
              <span className="block">{t.calc.title} <span className="display-italic text-accent-deep">{t.calc.titleItalic}</span></span>
              <span className="block">{t.calc.titleB}</span>
            </h2>
          </Reveal>
        </div>
        <div className="col-span-12 lg:col-span-5 lg:pt-3">
          <Reveal delay={260}>
            <p className={`text-ink/70 text-base md:text-lg leading-[1.6] max-w-md ${isKo ? 'lang-ko' : ''}`}>
              {t.calc.sub}
            </p>
          </Reveal>
        </div>
      </div>

      <Reveal delay={300}>
        <div className="grid grid-cols-12 gap-8 md:gap-12 items-stretch">
          {/* Inputs */}
          <div className="col-span-12 lg:col-span-7 bg-bone p-8 md:p-12 border hairline">
            <div className="grid grid-cols-1 md:grid-cols-2 gap-x-10 gap-y-8">
              {/* Price */}
              <div>
                <div className="flex items-baseline justify-between mb-3">
                  <label className={`eyebrow text-ink/60 ${isKo ? 'lang-ko' : ''}`}>{t.calc.price}</label>
                  <span className="num text-sm text-ink">{fmtMoney(price)}</span>
                </div>
                <input
                  type="range"
                  min={150000} max={3000000} step={5000}
                  value={price}
                  onChange={(e) => setPrice(parseInt(e.target.value, 10))}
                  aria-label="Home price"
                />
                <div className="flex justify-between mt-2 num text-[10px] text-ink/40">
                  <span>$150K</span><span>$3M</span>
                </div>
              </div>

              {/* Down payment */}
              <div>
                <div className="flex items-baseline justify-between mb-3">
                  <label className={`eyebrow text-ink/60 ${isKo ? 'lang-ko' : ''}`}>{t.calc.down}</label>
                  <span className="num text-sm text-ink">{downPct}% · {fmtMoney(downAmt)}</span>
                </div>
                <input
                  type="range"
                  min={3} max={50} step={1}
                  value={downPct}
                  onChange={(e) => setDownPct(parseInt(e.target.value, 10))}
                  aria-label="Down payment percent"
                />
                <div className="flex justify-between mt-2 num text-[10px] text-ink/40">
                  <span>3%</span><span>50%</span>
                </div>
              </div>

              {/* Rate */}
              <div>
                <div className="flex items-baseline justify-between mb-3">
                  <label className={`eyebrow text-ink/60 ${isKo ? 'lang-ko' : ''}`}>{t.calc.rate}</label>
                  <span className="num text-sm text-ink">{rate.toFixed(2)}%</span>
                </div>
                <input
                  type="range"
                  min={2} max={10} step={0.05}
                  value={rate}
                  onChange={(e) => setRate(parseFloat(e.target.value))}
                  aria-label="Interest rate"
                />
                <div className="flex justify-between mt-2 num text-[10px] text-ink/40">
                  <span>2.00%</span><span>10.00%</span>
                </div>
              </div>

              {/* Term */}
              <div>
                <div className="flex items-baseline justify-between mb-3">
                  <label className={`eyebrow text-ink/60 ${isKo ? 'lang-ko' : ''}`}>{t.calc.term}</label>
                  <span className="num text-sm text-ink">{term} yr</span>
                </div>
                <div className="flex gap-2 mt-1">
                  {[15, 30].map(y => (
                    <button
                      key={y}
                      type="button"
                      onClick={() => setTerm(y)}
                      className={`flex-1 py-3 text-[12px] tracking-wider-2 uppercase border transition-all ${term === y ? 'bg-ink text-bone border-ink' : 'border-ink/15 text-ink/55 hover:border-ink/40 hover:text-ink'} ${isKo ? 'lang-ko' : ''}`}
                      aria-pressed={term === y}
                    >
                      {y === 15 ? t.calc.term15 : t.calc.term30}
                    </button>
                  ))}
                </div>
              </div>
            </div>
          </div>

          {/* Output */}
          <div className="col-span-12 lg:col-span-5 bg-ink text-bone p-8 md:p-12 flex flex-col justify-between min-h-[360px]">
            <div>
              <div className={`eyebrow text-bone/55 mb-6 ${isKo ? 'lang-ko' : ''}`}>{t.calc.monthly}</div>
              <div className="display text-bone text-[14vw] md:text-[7vw] lg:text-[5vw] leading-none">
                {fmtMoney(monthly)}
              </div>
              <div className={`num text-bone/55 text-xs tracking-wider-2 uppercase mt-3`}>/ month</div>
            </div>

            <div className="mt-10 grid grid-cols-3 gap-6 pt-6 border-t hairline-bone">
              <div>
                <div className={`eyebrow text-bone/45 mb-2 ${isKo ? 'lang-ko' : ''}`}>{t.calc.loanAmt}</div>
                <div className="num text-sm text-bone">{fmtMoney(loanAmt)}</div>
              </div>
              <div>
                <div className={`eyebrow text-bone/45 mb-2 ${isKo ? 'lang-ko' : ''}`}>{t.calc.downAmt}</div>
                <div className="num text-sm text-bone">{fmtMoney(downAmt)}</div>
              </div>
              <div>
                <div className={`eyebrow text-bone/45 mb-2 ${isKo ? 'lang-ko' : ''}`}>{t.calc.totalInt}</div>
                <div className="num text-sm text-bone">{fmtMoney(totalInt)}</div>
              </div>
            </div>
          </div>
        </div>
      </Reveal>

      <Reveal delay={500} className={`mt-8 num text-[11px] text-ink/45 tracking-wide ${isKo ? 'lang-ko' : ''}`}>
        {t.calc.disclaimer}
      </Reveal>
    </Section>
  );
}

// ============================================================
// TESTIMONIALS
// ============================================================
function Testimonials({ lang, t }) {
  const isKo = lang === 'ko';
  return (
    <Section id="testimonials" className="py-24 md:py-32 lg:py-40">
      <div className="grid grid-cols-12 gap-6 md:gap-8 mb-12 md:mb-16">
        <div className="col-span-12 lg:col-span-7">
          <Reveal>
            <Eyebrow className="mb-8">{t.testimonials.eyebrow}</Eyebrow>
          </Reveal>
          <Reveal delay={140}>
            <h2 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-[11vw] md:text-[6.6vw] lg:text-[4.8vw] xl:text-[4.4vw] leading-[0.98]`}>
              <span className="block">{t.testimonials.title} <span className="display-italic text-accent-deep">{t.testimonials.titleItalic}</span></span>
              <span className="block">{t.testimonials.titleB}</span>
            </h2>
          </Reveal>
        </div>
        <div className="col-span-12 lg:col-span-5 lg:pt-3">
          <Reveal delay={260}>
            <p className={`text-ink/70 text-base md:text-lg leading-[1.6] max-w-md ${isKo ? 'lang-ko' : ''}`}>
              {t.testimonials.sub}
            </p>
          </Reveal>
        </div>
      </div>

      <div className="grid grid-cols-2 gap-px bg-ink/10">
        {t.testimonials.items.map((item, idx) => (
          <Reveal key={idx} delay={(idx % 2) * 120} className="bg-bone p-4 md:p-10 lg:p-12 flex flex-col">
            <IconQuote size={22} className="text-accent-deep mb-3 md:mb-6 md:w-[28px] md:h-[28px]" strokeWidth={1} />
            <ReadMore
              lines={6}
              more={isKo ? '더 보기' : 'Read more'}
              less={isKo ? '접기' : 'Show less'}
              className="mb-4 md:mb-8 flex-1"
              textClassName={`display ${isKo ? 'lang-ko' : ''} text-ink text-[15px] md:text-[1.7rem] leading-[1.4] md:leading-[1.35]`}
            >
              {item.quote}
            </ReadMore>
            <div className="flex flex-col md:flex-row md:items-end md:justify-between gap-2 md:gap-4 pt-3 md:pt-6 border-t hairline">
              <div>
                <StarRow count={item.rating} className="mb-2 md:mb-3" />
                <div className={`text-xs md:text-sm text-ink ${isKo ? 'lang-ko' : ''}`}>{item.name}</div>
                <div className={`num text-[9px] md:text-[11px] text-ink/45 tracking-wider-2 uppercase mt-1`}>{item.neighborhood}</div>
              </div>
              <div className="num text-[9px] md:text-[11px] text-ink/35 tracking-wider-2 md:self-end">
                {String(idx + 1).padStart(2, '0')} / {String(t.testimonials.items.length).padStart(2, '0')}
              </div>
            </div>
          </Reveal>
        ))}
      </div>

      <Reveal delay={400} className="mt-12 flex flex-wrap items-center justify-between gap-4">
        <div className={`num text-[11px] text-ink/40 tracking-wide ${isKo ? 'lang-ko' : ''}`}>
          ※ {t.testimonials.placeholderNote}
        </div>
        <a href="https://www.zillow.com/profile/evelynmkchang" target="_blank" rel="noopener" className={`link-under text-sm tracking-wide text-ink/80 hover:text-accent-deep ${isKo ? 'lang-ko' : ''}`}>
          {t.testimonials.readMore} <span aria-hidden="true">→</span>
        </a>
      </Reveal>
    </Section>
  );
}

// ============================================================
// TEAM
// ============================================================
function Team({ lang, t }) {
  const isKo = lang === 'ko';
  return (
    <Section id="about" className="py-24 md:py-32 lg:py-40">
      <div className="grid grid-cols-12 gap-6 md:gap-8 mb-16 md:mb-20">
        <div className="col-span-12 lg:col-span-7">
          <Reveal>
            <Eyebrow className="mb-8">{t.team.eyebrow}</Eyebrow>
          </Reveal>
          <Reveal delay={140}>
            <h2 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-[11vw] md:text-[6.6vw] lg:text-[4.8vw] xl:text-[4.4vw] leading-[0.98]`}>
              <span className="block">{t.team.title}</span>
              <span className="block"><span className="display-italic text-accent-deep">{t.team.titleItalic}</span> {t.team.titleB}</span>
            </h2>
          </Reveal>
        </div>
        <div className="col-span-12 lg:col-span-5 lg:pt-3">
          <Reveal delay={260}>
            <p className={`text-ink/70 text-base md:text-lg leading-[1.6] max-w-md ${isKo ? 'lang-ko' : ''}`}>
              {t.team.sub}
            </p>
          </Reveal>
        </div>
      </div>

      <div className="grid grid-cols-1 lg:grid-cols-2 gap-10 md:gap-16 lg:gap-20">
        {t.team.members.map((m, idx) => {
          const portraitKey = TEAM_IMAGES[idx];
          return (
          <Reveal key={idx} delay={idx * 160}>
            <article className="grid grid-cols-12 gap-5 md:gap-7">
              <div className="col-span-12 sm:col-span-5">
                <div className="img-zoom">
                  <div className="relative aspect-[3/4] overflow-hidden bg-bone-soft">
                    <img
                      src={IMAGES[portraitKey]}
                      alt={m.name}
                      loading="lazy"
                      className="absolute inset-0 w-full h-full object-cover"
                    />
                  </div>
                </div>
              </div>
              <div className="col-span-12 sm:col-span-7 flex flex-col">
                <div className={`flex items-center gap-2 mb-4 ${isKo ? 'lang-ko' : ''}`}>
                  <div className="w-6 h-px bg-accent"></div>
                  <span className="eyebrow text-accent-deep">{t.team.koTag}</span>
                </div>
                <h3 className={`display ${isKo ? 'lang-ko' : ''} text-ink text-3xl md:text-4xl lg:text-[2.6rem] leading-[1.02] mb-3`}>
                  {m.name}
                </h3>
                <div className={`num text-[11px] tracking-wider-2 uppercase text-ink/55 mb-6 ${isKo ? 'lang-ko' : ''}`}>
                  {m.title}
                </div>

                <Hairline className="mb-5" />
                <div className={`flex items-center flex-wrap gap-x-5 gap-y-2 mb-6 ${isKo ? 'lang-ko' : ''}`}>
                  {m.creds.map((c, i) => (
                    <span key={i} className="eyebrow text-ink/55">· {c}</span>
                  ))}
                  {idx === 0 ? (
                    <img src={IMAGES.gri} alt="GRI — Graduate Realtor Institute" className="h-8 w-auto ml-1 opacity-80" loading="lazy" />
                  ) : null}
                </div>

                <ReadMore
                  lines={4}
                  more={isKo ? '더 보기' : 'Read more'}
                  less={isKo ? '접기' : 'Show less'}
                  className="mb-7"
                  textClassName={`text-ink/70 text-[15px] leading-[1.65] ${isKo ? 'lang-ko' : ''}`}
                >
                  {m.bio}
                </ReadMore>

                <div className="mt-auto flex flex-col gap-2.5">
                  <a href={`tel:${m.phone.replace(/[^0-9+]/g,'')}`} className={`inline-flex items-center gap-3 text-sm text-ink hover:text-accent-deep transition-colors`}>
                    <IconPhone size={14} className="text-ink/40" />
                    <span className="num">{m.phone}</span>
                  </a>
                  <a href={`mailto:${m.email}`} className={`inline-flex items-center gap-3 text-sm text-ink hover:text-accent-deep transition-colors break-all`}>
                    <IconMail size={14} className="text-ink/40" />
                    <span>{m.email}</span>
                  </a>
                </div>
              </div>
            </article>
          </Reveal>
          );
        })}
      </div>
    </Section>
  );
}

// ============================================================
// FOOTER
// ============================================================
function Footer({ lang, t, setLang }) {
  const isKo = lang === 'ko';
  const f = t.footer;
  return (
    <footer id="contact-info" className="bg-ink text-bone pt-20 md:pt-24 pb-10 relative">
      <div className="mx-auto max-w-[1480px] px-6 md:px-10 lg:px-16">
        <div className="grid grid-cols-12 gap-8 md:gap-10 mb-16">
          {/* Wordmark + tagline */}
          <div className="col-span-12 md:col-span-5 lg:col-span-5">
            <div className="display text-bone text-4xl md:text-5xl lg:text-[3.4rem] leading-[0.95] mb-6">
              EC <span className="display-italic text-accent">Real Estate</span><br/>Group
            </div>
            <div className={`text-bone/55 text-base md:text-lg max-w-sm leading-snug ${isKo ? 'lang-ko' : ''}`}>
              {f.tagline}
            </div>
          </div>

          {/* Contact */}
          <div className="col-span-6 md:col-span-3 lg:col-span-3">
            <div className={`eyebrow text-bone/45 mb-5 ${isKo ? 'lang-ko' : ''}`}>{f.contactHeading}</div>
            <ul className="space-y-3 text-sm text-bone/85">
              <li>
                <div className="text-bone">Evelyn MK Chang</div>
                <a href="tel:+14698190066" className="num text-bone/60 hover:text-accent transition-colors block">(469) 819-0066</a>
                <a href="mailto:Evelynmkchang@gmail.com" className="text-bone/60 hover:text-accent transition-colors break-all block">Evelynmkchang@gmail.com</a>
              </li>
              <li className="pt-2">
                <div className="text-bone">Amy Chon</div>
                <a href="tel:+14692130049" className="num text-bone/60 hover:text-accent transition-colors block">(469) 213-0049</a>
                <a href="mailto:AmyHKchon@gmail.com" className="text-bone/60 hover:text-accent transition-colors break-all block">AmyHKchon@gmail.com</a>
              </li>
            </ul>
          </div>

          {/* Follow + brokerage */}
          <div className="col-span-6 md:col-span-4 lg:col-span-4">
            <div className={`eyebrow text-bone/45 mb-5 ${isKo ? 'lang-ko' : ''}`}>{f.followHeading}</div>
            <div className="flex gap-2 mb-8">
              <a href="https://instagram.com/ec_realestategroup_dallas" target="_blank" rel="noopener" aria-label="Instagram" className="w-10 h-10 border hairline-bone flex items-center justify-center hover:bg-accent hover:border-accent hover:text-ink transition-all">
                <IconInstagram size={16} />
              </a>
              <a href="https://facebook.com/evelynmkchangrealtor" target="_blank" rel="noopener" aria-label="Facebook" className="w-10 h-10 border hairline-bone flex items-center justify-center hover:bg-accent hover:border-accent hover:text-ink transition-all">
                <IconFacebook size={16} />
              </a>
              <a href="https://linkedin.com/in/evelynmkchang" target="_blank" rel="noopener" aria-label="LinkedIn" className="w-10 h-10 border hairline-bone flex items-center justify-center hover:bg-accent hover:border-accent hover:text-ink transition-all">
                <IconLinkedin size={16} />
              </a>
            </div>

            <div className={`eyebrow text-bone/45 mb-3 ${isKo ? 'lang-ko' : ''}`}>{f.brokerage}</div>
            <div className={`text-sm text-bone/70 leading-relaxed mb-4 ${isKo ? 'lang-ko' : ''}`}>
              {f.address}
            </div>
            <img src={IMAGES.exp} alt="eXp Realty" className="h-9 w-auto opacity-70" loading="lazy" />
          </div>
        </div>

        <div className="border-t hairline-bone pt-10">
          <div className="grid grid-cols-12 gap-6 md:gap-10">
            <div className="col-span-12 md:col-span-8 lg:col-span-8">
              <div className={`eyebrow text-bone/45 mb-4 ${isKo ? 'lang-ko' : ''}`}>{f.legalHeading}</div>
              <ul className={`space-y-2 text-[12px] text-bone/50 leading-relaxed ${isKo ? 'lang-ko' : ''}`}>
                <li><a href="#" onClick={(e)=>e.preventDefault()} className="link-under text-bone/65 hover:text-accent">{f.legal1}</a></li>
                <li>{f.legal2} <a href="#" onClick={(e)=>e.preventDefault()} className="link-under text-bone/65 hover:text-accent">IABS Notice →</a></li>
                <li className="pt-2">{f.info}</li>
              </ul>
            </div>
            <div className="col-span-12 md:col-span-4 flex md:justify-end md:items-end">
              <div className="flex items-center gap-1 border hairline-bone p-1">
                <button
                  type="button"
                  onClick={() => setLang('en')}
                  className={`px-3 py-1.5 text-[11px] tracking-wider-2 uppercase transition-all ${lang === 'en' ? 'bg-bone text-ink' : 'text-bone/55 hover:text-bone'}`}
                >EN</button>
                <button
                  type="button"
                  onClick={() => setLang('ko')}
                  className={`px-3 py-1.5 text-[11px] tracking-wider-2 lang-ko transition-all ${lang === 'ko' ? 'bg-bone text-ink' : 'text-bone/55 hover:text-bone'}`}
                >한국어</button>
              </div>
            </div>
          </div>

          <div className="flex flex-wrap items-baseline justify-between gap-3 mt-12">
            <div className={`num text-[11px] text-bone/40 tracking-wide ${isKo ? 'lang-ko' : ''}`}>{f.copyright}</div>
            <div className="num text-[11px] text-bone/40 tracking-wider-2 uppercase">DFW · TX · USA</div>
          </div>
        </div>
      </div>
    </footer>
  );
}

Object.assign(window, { Hero, TeamBanner, Services, Listings, Calculator, Testimonials, Team, Footer });
