// sections.jsx — components for Kadim Studios site
// Each section is a self-contained component. App composes them.

const { useState, useEffect, useRef } = React;

/* ────────────── Icons (inline SVG, monoline) ────────────── */

const Icon = {
  web: () => (
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.4">
      <rect x="3" y="4" width="18" height="14" rx="1.5" />
      <path d="M3 8h18" />
      <circle cx="5.5" cy="6" r="0.5" fill="currentColor" />
      <circle cx="7.5" cy="6" r="0.5" fill="currentColor" />
      <path d="M8 21h8M12 18v3" />
    </svg>
  ),
  mobile: () => (
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.4">
      <rect x="7" y="2.5" width="10" height="19" rx="2" />
      <path d="M11 18h2" />
    </svg>
  ),
  code: () => (
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.4" strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 7l-5 5 5 5" />
      <path d="M16 7l5 5-5 5" />
      <path d="M14 4l-4 16" />
    </svg>
  ),
  arrow: () => (
    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round">
      <path d="M5 12h14M13 6l6 6-6 6" />
    </svg>
  ),
  check: () => (
    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round">
      <path d="M5 12l4 4 10-10" />
    </svg>
  ),
  menu: () => (
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round">
      <path d="M4 7h16M4 17h16" />
    </svg>
  ),
  close: () => (
    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round">
      <path d="M6 6l12 12M18 6L6 18" />
    </svg>
  ),
};

/* ────────────── Reveal helper ────────────── */

function useReveal() {
  const ref = useRef(null);
  useEffect(() => {
    const el = ref.current;
    if (!el) return;
    const io = new IntersectionObserver(
      (entries) => {
        entries.forEach((e) => {
          if (e.isIntersecting) {
            e.target.classList.add("in");
            io.unobserve(e.target);
          }
        });
      },
      { threshold: 0.12 }
    );
    el.querySelectorAll(".reveal").forEach((n) => io.observe(n));
    return () => io.disconnect();
  }, []);
  return ref;
}

/* ────────────── Brand mark ────────────── */

function BrandMark() {
  return (
    <span className="brand-mark" aria-hidden="true">
      <svg viewBox="0 0 32 32" fill="none">
        <circle cx="16" cy="16" r="14" stroke="currentColor" strokeWidth="1.2" opacity="0.5" />
        <path
          d="M11 9v14M11 16l8-7M11 16l8 7"
          stroke="var(--accent)"
          strokeWidth="1.6"
          strokeLinecap="round"
          strokeLinejoin="round"
        />
      </svg>
    </span>
  );
}

/* ────────────── Nav ────────────── */

function Nav({ onMenuOpen, onContactClick }) {
  const [scrolled, setScrolled] = useState(false);
  useEffect(() => {
    const onScroll = () => setScrolled(window.scrollY > 16);
    onScroll();
    window.addEventListener("scroll", onScroll, { passive: true });
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  return (
    <nav className={"nav" + (scrolled ? " scrolled" : "")}>
      <div className="container nav-inner">
        <a className="brand" href="#top">
          <BrandMark />
          <span>Kadim Studios</span>
          <small>est. 2019</small>
        </a>
        <div className="nav-links">
          <a href="#hizmetler">Hizmetler</a>
          <a href="#projeler">Projeler</a>
          <a href="#blog">Blog</a>
          <a href="#hakkimizda">Hakkımızda</a>
          <a href="#iletisim">İletişim</a>
        </div>
        <button className="btn btn-primary" onClick={onContactClick}>
          Proje Başlat <Icon.arrow />
        </button>
        <button className="hamburger" onClick={onMenuOpen} aria-label="Menüyü aç">
          <Icon.menu />
        </button>
      </div>
    </nav>
  );
}

/* ────────────── Mobile menu ────────────── */

function MobileMenu({ open, onClose }) {
  useEffect(() => {
    document.body.style.overflow = open ? "hidden" : "";
    return () => { document.body.style.overflow = ""; };
  }, [open]);
  const go = (id) => { onClose(); setTimeout(() => { location.hash = id; }, 50); };
  return (
    <div className={"mob-menu" + (open ? " open" : "")}>
      <div className="top">
        <a className="brand" href="#top" onClick={() => go("top")}>
          <BrandMark />
          <span>Kadim</span>
        </a>
        <button className="hamburger" onClick={onClose} aria-label="Kapat">
          <Icon.close />
        </button>
      </div>
      <ul>
        <li><a onClick={() => go("hizmetler")}>Hizmetler<em>.</em></a></li>
        <li><a onClick={() => go("hakkimizda")}>Hakkımızda<em>.</em></a></li>
        <li><a onClick={() => go("calismalar")}>Yaklaşım<em>.</em></a></li>
        <li><a onClick={() => go("iletisim")}>İletişim<em>.</em></a></li>
      </ul>
      <a className="btn btn-primary mob-cta" onClick={() => go("iletisim")}>
        Proje Başlat <Icon.arrow />
      </a>
    </div>
  );
}

/* ────────────── Hero ────────────── */

function Hero({ onContactClick, data }) {
  const d = data || {};
  const subtitle = d.subtitle || "Markaların dijital varlığını özenle inşa eden bir yazılım ve tasarım stüdyosu. Web, mobil ve özel yazılım çözümlerinde estetik ile mühendisliği birleştiriyoruz.";
  const stats = [
    { num: d.stat1num || "07+", lbl: d.stat1lbl || "Yıllık deneyim" },
    { num: d.stat2num || "120+", lbl: d.stat2lbl || "Tamamlanan proje" },
    { num: d.stat3num || "38+", lbl: d.stat3lbl || "Mutlu marka" },
  ];
  return (
    <header className="hero" id="top">
      <div className="container">
        <div className="hero-grid">
          <div>
            <div className="eyebrow reveal" style={{ marginBottom: 32 }}>
              Yazılım · Tasarım · Geliştirme
            </div>
            <h1 className="reveal">
              <span className="line">Kadim'den</span>
              <span className="line">moderne, <span className="accent-word">dijital</span></span>
              <span className="line">zanaat.</span>
            </h1>
            <p className="hero-sub reveal">{subtitle}</p>
            <div className="hero-actions reveal">
              <button className="btn btn-primary" onClick={onContactClick}>
                Birlikte çalışalım <Icon.arrow />
              </button>
              <a href="#hizmetler" className="btn btn-ghost">Hizmetleri gör</a>
            </div>
          </div>
        </div>

        <div className="hero-meta reveal">
          {stats.map((s, i) => (
            <div className="item" key={i}>
              <span className="num">{s.num}</span>
              <span className="lbl">{s.lbl}</span>
            </div>
          ))}
        </div>
      </div>

      <div className="hero-tag">
        <span className="dot" />
        <span>Yeni projeler için müsait — 2026</span>
      </div>
    </header>
  );
}

/* ────────────── Services ────────────── */

const SERVICES = [
  {
    idx: "01",
    icon: Icon.web,
    title: "Web",
    titleEm: "Tasarım",
    desc:
      "Markaya özel, hızlı yüklenen ve SEO uyumlu web siteleri. Tasarımdan canlıya, her piksel düşünülerek.",
    tags: ["Next.js", "WordPress", "E-Ticaret", "Headless CMS"],
  },
  {
    idx: "02",
    icon: Icon.mobile,
    title: "Mobil",
    titleEm: "Uygulama",
    desc:
      "iOS ve Android için native his veren cross-platform uygulamalar. App Store'dan kullanıcıya, akıcı bir deneyim.",
    tags: ["React Native", "Flutter", "iOS", "Android"],
  },
  {
    idx: "03",
    icon: Icon.code,
    title: "Özel",
    titleEm: "Yazılım",
    desc:
      "İşinize özel CRM, ERP ve SaaS çözümleri. API entegrasyonları, otomasyon ve ölçeklenebilir mimariler.",
    tags: ["SaaS", "API", "DevOps", "Cloud"],
  },
];

const ICON_MAP = { web: Icon.web, mobile: Icon.mobile, code: Icon.code, design: Icon.web, cloud: Icon.code };

function Services({ data }) {
  const wrap = useReveal();
  const list = (data && data.length > 0) ? data : SERVICES;
  const total = list.length;
  return (
    <section id="hizmetler" className="section-pad" ref={wrap}>
      <div className="container">
        <div className="sec-head">
          <div>
            <div className="eyebrow reveal">Hizmetler · {String(total).padStart(2,"0")}</div>
            <h2 className="reveal">
              {total === 3 ? <><span>Üç disiplin, </span><em>tek stüdyo.</em></> : <><span>Hizmetlerimiz, </span><em>tek stüdyo.</em></>}
            </h2>
          </div>
          <p className="lede reveal">
            Tasarım, kod ve strateji aynı masada. Projelerinizi parçalara bölmeden,
            uçtan uca düşünerek hayata geçiriyoruz.
          </p>
        </div>

        <div className="services">
          {list.map((s, i) => {
            const IconComp = s.icon && typeof s.icon === "function" ? s.icon : (ICON_MAP[s.icon] || Icon.code);
            const idx = String(i + 1).padStart(2, "0");
            return (
              <article key={s.id || s.idx || i} className="svc reveal">
                <div className="idx">
                  <span>{idx} / {String(total).padStart(2,"0")}</span>
                  <span className="icon"><IconComp /></span>
                </div>
                <h3>{s.title} <em>{s.titleEm}</em></h3>
                <p>{s.desc}</p>
                <div className="svc-tags">
                  {(s.tags||[]).map((t) => <span key={t}>{t}</span>)}
                </div>
                <span className="svc-cta">Detaylı incele <Icon.arrow /></span>
              </article>
            );
          })}
        </div>
      </div>
    </section>
  );
}

/* ────────────── Philosophy marquee ────────────── */

function Philo() {
  const items = ["Estetik", "Mühendislik", "Detay", "Performans", "Zanaat", "Sadelik"];
  const row = (
    <span>
      {items.map((it, i) => (
        <React.Fragment key={i}>
          <span>{i % 2 === 0 ? <em>{it}</em> : it}</span>
          <span className="sep">✦</span>
        </React.Fragment>
      ))}
    </span>
  );
  return (
    <section className="philo" aria-hidden="true">
      <div className="marquee">
        {row}
        {row}
      </div>
    </section>
  );
}

/* ────────────── About ────────────── */

function About({ data }) {
  const ref = useReveal();
  const d = data || {};
  const p1 = d.p1 || "Kadim Studios, 2019'dan bu yana İstanbul merkezli çalışan bir dijital tasarım ve yazılım stüdyosudur. Markaların hikâyesini kodla anlatıyor; hız, erişilebilirlik ve estetik üçgeninde ürünler inşa ediyoruz.";
  const p2 = d.p2 || "Küçük ama özenli bir ekibiz. Her projeye aynı kişiler başlar ve aynı kişiler bitirir — bu yüzden detay kaybolmaz, vaat tutulur.";
  const list = d.list && d.list.length > 0 ? d.list : ["Uçtan uca tasarım & geliştirme", "Şeffaf süreç & haftalık demo", "Performans odaklı mimari", "Lansman sonrası destek"];
  const quote = d.quote || "Detay, kadim olanın modern hâlidir.";
  const quoteAtt = d.quoteAtt || "— Stüdyo manifesto";
  return (
    <section id="hakkimizda" className="section-pad" ref={ref}>
      <div className="container">
        <div className="about-grid">
          <div className="about-text">
            <div className="eyebrow reveal" style={{ marginBottom: 24 }}>Hakkımızda</div>
            <h2 className="reveal">Sade tasarım, <em>sağlam kod.</em></h2>
            <p className="reveal"><strong>Kadim Studios</strong>, {p1.replace(/^Kadim Studios,?\s*/i, "")}</p>
            <p className="reveal">{p2}</p>
            <ul className="about-list reveal">
              {list.map((item, i) => <li key={i}>{item}</li>)}
            </ul>
          </div>
          <div className="about-visual reveal">
            <blockquote className="quote">
              {quote}
              <span className="att">{quoteAtt}</span>
            </blockquote>
          </div>
        </div>
      </div>
    </section>
  );
}

/* ────────────── Approach (calismalar) ────────────── */

const STEPS = [
  { n: "01", t: "Keşif", d: "İhtiyacı anlamak için derinlemesine konuşmalar, atölyeler ve hedef tanımı." },
  { n: "02", t: "Tasarım", d: "Marka diline uygun, kullanıcı dostu arayüzler ve prototipler." },
  { n: "03", t: "Geliştirme", d: "Temiz kod, ölçeklenebilir mimari, sürekli entegrasyon." },
  { n: "04", t: "Lansman", d: "Yayın günü ve sonrası: izleme, optimizasyon, sürekli iyileştirme." },
];

function Approach() {
  const ref = useReveal();
  return (
    <section id="calismalar" className="section-pad" ref={ref} style={{ borderTop: "1px solid var(--border-soft)" }}>
      <div className="container">
        <div className="sec-head">
          <div>
            <div className="eyebrow reveal">Yaklaşım · 04 Adım</div>
            <h2 className="reveal">Süreç, <em>şeffaf.</em></h2>
          </div>
          <p className="lede reveal">
            Her projede aynı disiplinli adımları takip ediyoruz: fikirden lansmana,
            tahmin edilebilir ritimle ilerleyen bir akış.
          </p>
        </div>

        <div className="approach-grid">
          {STEPS.map((s) => (
            <div key={s.n} className="step reveal">
              <div className="step-n">{s.n}</div>
              <h3 className="step-t">{s.t}</h3>
              <p className="step-d">{s.d}</p>
            </div>
          ))}
        </div>
      </div>

      <style>{`
        .approach-grid {
          display: grid;
          grid-template-columns: repeat(4, 1fr);
          gap: 0;
          border-top: 1px solid var(--border-soft);
        }
        .step {
          padding: 36px 28px 36px 0;
          border-right: 1px solid var(--border-soft);
          padding-left: 28px;
        }
        .step:last-child { border-right: none; }
        .step-n {
          font-family: var(--font-mono);
          font-size: 11px; letter-spacing: 0.14em;
          color: var(--accent);
          margin-bottom: 28px;
        }
        .step-t {
          font-family: var(--font-display);
          font-size: 32px; letter-spacing: -0.01em;
          margin-bottom: 12px;
        }
        .step-d {
          color: var(--fg-2);
          font-size: 14.5px;
          line-height: 1.6;
          margin: 0;
        }
        @media (max-width: 960px) {
          .approach-grid { grid-template-columns: 1fr 1fr; }
          .step:nth-child(2) { border-right: none; }
          .step:nth-child(1), .step:nth-child(2) { border-bottom: 1px solid var(--border-soft); }
        }
        @media (max-width: 560px) {
          .approach-grid { grid-template-columns: 1fr; }
          .step { border-right: none; border-bottom: 1px solid var(--border-soft); }
          .step:last-child { border-bottom: none; }
        }
      `}</style>
    </section>
  );
}

/* ────────────── Contact ────────────── */

const BUDGETS = ["< 50.000₺", "50–150K", "150–300K", "300K +"];

function Contact({ data: contactData = {} }) {
  const ref = useReveal();
  const [form, setForm] = useState({
    name: "", email: "", phone: "", company: "", service: "Web Tasarım", message: "",
  });
  const [budget, setBudget] = useState("50–150K");
  const [errors, setErrors] = useState({});
  const [sent, setSent] = useState(false);
  const [sending, setSending] = useState(false);

  const upd = (k) => (e) => setForm({ ...form, [k]: e.target.value });

  const validate = () => {
    const e = {};
    if (!form.name.trim()) e.name = "Adınızı girin.";
    if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) e.email = "Geçerli bir e-posta girin.";
    if (form.message.trim().length < 10) e.message = "Birkaç cümle daha yazar mısınız?";
    return e;
  };

  const submit = (ev) => {
    ev.preventDefault();
    const e = validate();
    setErrors(e);
    if (Object.keys(e).length > 0) return;
    setSending(true);
    const db = window.__firebaseDb;
    if (db) {
      db.collection("messages").add({
        name:    form.name,
        email:   form.email,
        phone:   form.phone || "",
        company: form.company || "",
        service: form.service,
        budget:  budget,
        message: form.message,
        read:    false,
        date:    firebase.firestore.FieldValue.serverTimestamp(),
      })
        .then(() => { setSent(true); setSending(false); })
        .catch(() => { setSent(true); setSending(false); });
    } else {
      setTimeout(() => { setSent(true); setSending(false); }, 600);
    }
  };

  return (
    <section id="iletisim" className="section-pad" ref={ref}>
      <div className="container">
        <div className="contact-grid">
          <div className="contact-info">
            <div className="eyebrow reveal" style={{ marginBottom: 24 }}>
              İletişim
            </div>
            <h2 className="reveal">
              Bir kahve, bir <em>fikir.</em>
            </h2>
            <p className="reveal">
              Aklınızdaki projeyi anlatın. 48 saat içinde dönüş yapıyor, ilk görüşmeyi
              ücretsiz gerçekleştiriyoruz.
            </p>

            <div className="reveal">
              <span className="contact-detail">
                <span className="k">E-posta</span>
                <a className="v lnk" href={"mailto:" + (contactData.email || "merhaba@kadimstudios.com")}>
                  {contactData.email || "merhaba@kadimstudios.com"}
                </a>
              </span>
              <span className="contact-detail">
                <span className="k">Telefon</span>
                <a className="v lnk" href={"tel:" + (contactData.phone || "").replace(/\s/g, "")}>
                  {contactData.phone || "+90 (212) 000 00 00"}
                </a>
              </span>
              <span className="contact-detail">
                <span className="k">Stüdyo</span>
                <span className="v">{contactData.address || "Cihangir, İstanbul"}</span>
              </span>
              <span className="contact-detail">
                <span className="k">Çalışma saatleri</span>
                <span className="v">{contactData.hours || "Pzt–Cum · 10:00 – 19:00"}</span>
              </span>
            </div>
          </div>

          <form className="contact-form reveal" onSubmit={submit} noValidate>
            {sent ? (
              <div className="form-sent">
                <div className="ico"><Icon.check /></div>
                <h3>Teşekkürler, <em>aldık.</em></h3>
                <p>En geç 48 saat içinde size dönüş yapacağız.</p>
              </div>
            ) : (
              <>
                <div className="form-row">
                  <div className={"field" + (errors.name ? " invalid" : "")}>
                    <label>Ad Soyad <span className="req">*</span></label>
                    <input
                      type="text"
                      value={form.name}
                      onChange={upd("name")}
                      placeholder="Adınız"
                      autoComplete="name"
                    />
                    {errors.name && <span className="err">{errors.name}</span>}
                  </div>
                  <div className={"field" + (errors.email ? " invalid" : "")}>
                    <label>E-posta <span className="req">*</span></label>
                    <input
                      type="email"
                      value={form.email}
                      onChange={upd("email")}
                      placeholder="siz@firma.com"
                      autoComplete="email"
                    />
                    {errors.email && <span className="err">{errors.email}</span>}
                  </div>
                </div>

                <div className="form-row">
                  <div className="field">
                    <label>Firma / Marka</label>
                    <input
                      type="text"
                      value={form.company}
                      onChange={upd("company")}
                      placeholder="Opsiyonel"
                    />
                  </div>
                  <div className="field">
                    <label>Telefon</label>
                    <input
                      type="tel"
                      value={form.phone}
                      onChange={upd("phone")}
                      placeholder="+90 5xx xxx xx xx"
                      autoComplete="tel"
                    />
                  </div>
                </div>

                <div className="form-row">
                  <div className="field" style={{ flex: 1 }}>
                    <label>Hizmet</label>
                    <select value={form.service} onChange={upd("service")}>
                      <option>Web Tasarım</option>
                      <option>Mobil Uygulama</option>
                      <option>Yazılım Geliştirme</option>
                      <option>UI / UX Tasarım</option>
                      <option>Marka &amp; Kimlik</option>
                      <option>Genel / Danışmanlık</option>
                      <option>Hepsi / Emin değilim</option>
                    </select>
                  </div>
                </div>

                <div className="field">
                  <label>Bütçe aralığı</label>
                  <div className="budget-chips">
                    {BUDGETS.map((b) => (
                      <button
                        type="button"
                        key={b}
                        className={budget === b ? "on" : ""}
                        onClick={() => setBudget(b)}
                      >
                        {b}
                      </button>
                    ))}
                  </div>
                </div>

                <div className={"field" + (errors.message ? " invalid" : "")}>
                  <label>Proje özeti <span className="req">*</span></label>
                  <textarea
                    value={form.message}
                    onChange={upd("message")}
                    placeholder="Kısaca neyi hayata geçirmek istiyorsunuz?"
                    rows={4}
                  />
                  {errors.message && <span className="err">{errors.message}</span>}
                </div>

                <div className="submit-row">
                  <span className="note">Bilgileriniz üçüncü taraflarla paylaşılmaz.</span>
                  <button type="submit" className="btn btn-primary" disabled={sending} style={{ opacity: sending ? 0.7 : 1 }}>
                    {sending ? "Gönderiliyor…" : <><span>Gönder</span> <Icon.arrow /></>}
                  </button>
                </div>
              </>
            )}
          </form>
        </div>
      </div>
    </section>
  );
}

/* ────────────── Footer ────────────── */

function Footer() {
  return (
    <footer className="footer">
      <div className="container">
        <div className="footer-grid">
          <div>
            <a className="brand" href="#top">
              <BrandMark />
              <span>Kadim Studios</span>
            </a>
            <p className="footer-blurb">
              İstanbul merkezli bir yazılım ve tasarım stüdyosu.
              Markaların dijital varlığını zanaatkâr titizliğiyle inşa eder.
            </p>
          </div>
          <div>
            <h4>Hizmetler</h4>
            <ul>
              <li><a href="#hizmetler">Web Tasarım</a></li>
              <li><a href="#hizmetler">Mobil Uygulama</a></li>
              <li><a href="#hizmetler">Özel Yazılım</a></li>
              <li><a href="#hizmetler">Marka Kimliği</a></li>
            </ul>
          </div>
          <div>
            <h4>Stüdyo</h4>
            <ul>
              <li><a href="#hakkimizda">Hakkımızda</a></li>
              <li><a href="#calismalar">Yaklaşım</a></li>
              <li><a href="#iletisim">İletişim</a></li>
              <li><a href="mailto:merhaba@kadimstudios.com">merhaba@kadimstudios.com</a></li>
            </ul>
          </div>
        </div>
        <div className="footer-bottom">
          <span>© 2026 Kadim Studios. Tüm hakları saklıdır.</span>
          <span>Cihangir / İstanbul</span>
        </div>
      </div>
    </footer>
  );
}

/* ────────────── Portfolio ────────────── */

const PROJECTS = [
  {
    id: "bahtname",
    title: "Bahtname",
    category: "Mobil Uygulama",
    year: "2024",
    desc: "Fal, astroloji ve kişilik analizi uygulaması. iOS ve Android için React Native ile geliştirildi. Türkiye'nin önde gelen dijital fal uygulamalarından.",
    tags: ["Flutter", "Android"],
    image: "",
  },
];

function Portfolio({ data }) {
  const ref = useReveal();
  const list = (data && data.length > 0) ? data : PROJECTS;
  return (
    <section id="projeler" className="section-pad" ref={ref} style={{ borderTop: "1px solid var(--border-soft)" }}>
      <div className="container">
        <div className="sec-head">
          <div>
            <div className="eyebrow reveal">Projeler</div>
            <h2 className="reveal">Seçili <em>çalışmalar.</em></h2>
          </div>
          <p className="lede reveal">
            Fikir aşamasından canlıya kadar yönettiğimiz projelerden bir seçki.
          </p>
        </div>
        <div className="portfolio-list">
          {list.map((p) => (
            <article key={p.id} className="portfolio-card reveal">
              <div className="portfolio-card-info">
                <div className="portfolio-card-top">
                  <span className="eyebrow">{p.category}</span>
                  <span className="portfolio-year">{p.year}</span>
                </div>
                <h3>{p.title}</h3>
                <p>{p.desc}</p>
                {p.link ? (
                  <a href={p.link} target="_blank" rel="noopener noreferrer" className="portfolio-link">
                    Projeye Git <Icon.arrow />
                  </a>
                ) : null}
                <div className="svc-tags" style={{ marginTop: "auto" }}>
                  {(p.tags || []).map((t) => <span key={t}>{t}</span>)}
                </div>
              </div>
              <div className="portfolio-card-visual">
                {p.image
                  ? <img src={p.image} alt={p.title} className="portfolio-banner" />
                  : <div className="portfolio-placeholder"><span>Banner Görseli</span></div>
                }
              </div>
            </article>
          ))}
        </div>
      </div>
      <style>{`
        .portfolio-list {
          display: flex;
          flex-direction: column;
          gap: 1px;
          background: var(--border-soft);
          border: 1px solid var(--border-soft);
          border-radius: var(--radius);
          overflow: hidden;
        }
        .portfolio-card {
          background: var(--bg);
          display: grid;
          grid-template-columns: 2fr 3fr;
          min-height: 340px;
          transition: background 0.3s;
        }
        .portfolio-card:hover { background: var(--bg-2); }
        .portfolio-card-info {
          padding: 44px 40px;
          display: flex; flex-direction: column; gap: 18px;
          border-right: 1px solid var(--border-soft);
        }
        .portfolio-card-top {
          display: flex; justify-content: space-between; align-items: center;
        }
        .portfolio-year {
          font-family: var(--font-mono);
          font-size: 11px; letter-spacing: 0.14em;
          color: var(--muted);
        }
        .portfolio-card-info h3 {
          font-size: clamp(28px, 3vw, 44px);
          line-height: 1.05;
        }
        .portfolio-card-info p {
          color: var(--fg-2); font-size: 15px; line-height: 1.6; margin: 0; flex: 1;
        }
        .portfolio-link {
          display: inline-flex; align-items: center; gap: 6px;
          font-size: 13px; font-family: var(--font-mono); letter-spacing: 0.04em;
          color: var(--accent); text-decoration: none;
        }
        .portfolio-link:hover { opacity: 0.75; }
        .portfolio-card-visual {
          position: relative;
          overflow: hidden;
          background: var(--bg-2);
        }
        .portfolio-banner {
          width: 100%; height: 100%;
          object-fit: cover;
          display: block;
          transition: transform 0.5s ease;
        }
        .portfolio-card:hover .portfolio-banner { transform: scale(1.03); }
        .portfolio-placeholder {
          width: 100%; height: 100%;
          display: flex; align-items: center; justify-content: center;
          color: var(--muted);
          font-family: var(--font-mono);
          font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase;
        }
        @media (max-width: 760px) {
          .portfolio-card { grid-template-columns: 1fr; }
          .portfolio-card-info { border-right: none; border-bottom: 1px solid var(--border-soft); padding: 32px 24px; }
          .portfolio-card-visual { min-height: 220px; }
        }
      `}</style>
    </section>
  );
}

/* ────────────── Blog ────────────── */

function Blog() {
  const ref = useReveal();
  const [posts, setPosts] = useState([]);
  const [loading, setLoading] = useState(true);
  const [active, setActive] = useState(null);

  useEffect(() => {
    const db = window.__firebaseDb;
    if (!db) { setLoading(false); return; }
    db.collection("posts")
      .where("published", "==", true)
      .orderBy("date", "desc")
      .limit(6)
      .get()
      .then((snap) => {
        setPosts(snap.docs.map((d) => ({ id: d.id, ...d.data() })));
        setLoading(false);
      })
      .catch(() => setLoading(false));
  }, []);

  const fmtDate = (ts) => {
    if (!ts) return "";
    const d = ts.toDate ? ts.toDate() : new Date(ts);
    return d.toLocaleDateString("tr-TR", { day: "numeric", month: "long", year: "numeric" });
  };

  if (!loading && posts.length === 0) return null;

  return (
    <section id="blog" className="section-pad" ref={ref} style={{ borderTop: "1px solid var(--border-soft)" }}>
      <div className="container">
        <div className="sec-head">
          <div>
            <div className="eyebrow reveal">Blog</div>
            <h2 className="reveal">Yazılar & <em>görüşler.</em></h2>
          </div>
          <p className="lede reveal">
            Yazılım, tasarım ve dijital strateji üzerine düşüncelerimiz.
          </p>
        </div>

        {loading ? (
          <p className="blog-loading reveal">Yükleniyor…</p>
        ) : (
          <div className="blog-grid">
            {posts.map((p) => (
              <article key={p.id} className="blog-card reveal" onClick={() => setActive(p)}>
                <div className="blog-card-meta">
                  <span className="eyebrow">{p.category || "Genel"}</span>
                  <span className="blog-date">{fmtDate(p.date)}</span>
                </div>
                <h3>{p.title}</h3>
                <p>{p.excerpt}</p>
                <span className="svc-cta">Devamını oku <Icon.arrow /></span>
              </article>
            ))}
          </div>
        )}
      </div>

      {active && (
        <div className="blog-overlay" onClick={() => setActive(null)}>
          <div className="blog-detail" onClick={(e) => e.stopPropagation()}>
            <button className="blog-detail-close" onClick={() => setActive(null)}><Icon.close /></button>
            <span className="eyebrow" style={{ marginBottom: 20, display: "block" }}>{active.category || "Genel"} · {fmtDate(active.date)}</span>
            <h2 style={{ marginBottom: 24 }}>{active.title}</h2>
            <div className="blog-detail-body" dangerouslySetInnerHTML={{ __html: active.content || active.excerpt }} />
          </div>
        </div>
      )}

      <style>{`
        .blog-grid {
          display: grid;
          grid-template-columns: repeat(3, 1fr);
          gap: 0;
          border-top: 1px solid var(--border-soft);
          border-bottom: 1px solid var(--border-soft);
        }
        .blog-card {
          padding: 36px 28px;
          border-right: 1px solid var(--border-soft);
          display: flex; flex-direction: column; gap: 14px;
          cursor: pointer;
          transition: background 0.3s;
        }
        .blog-card:last-child { border-right: none; }
        .blog-card:hover { background: var(--bg-2); }
        .blog-card-meta {
          display: flex; justify-content: space-between; align-items: center;
        }
        .blog-date {
          font-family: var(--font-mono);
          font-size: 11px; letter-spacing: 0.08em;
          color: var(--muted);
        }
        .blog-card h3 {
          font-family: var(--font-display);
          font-size: clamp(20px, 2vw, 26px);
          line-height: 1.2;
        }
        .blog-card p {
          color: var(--fg-2); font-size: 14.5px; line-height: 1.6; margin: 0; flex: 1;
        }
        .blog-loading {
          color: var(--muted); font-family: var(--font-mono);
          font-size: 13px; letter-spacing: 0.1em; padding: 60px 0;
        }
        .blog-overlay {
          position: fixed; inset: 0; z-index: 300;
          background: oklch(0.1 0.005 70 / 0.8);
          backdrop-filter: blur(12px);
          display: flex; align-items: center; justify-content: center;
          padding: 24px;
        }
        .blog-detail {
          background: var(--bg-2);
          border: 1px solid var(--border-soft);
          border-radius: var(--radius);
          padding: clamp(32px, 4vw, 56px);
          max-width: 760px; width: 100%;
          max-height: 85vh; overflow-y: auto;
          position: relative;
        }
        .blog-detail-close {
          position: absolute; top: 20px; right: 20px;
          background: transparent; border: 1px solid var(--border);
          border-radius: 8px; width: 36px; height: 36px;
          display: grid; place-items: center;
          color: var(--fg-2); cursor: pointer;
          transition: border-color 0.2s;
        }
        .blog-detail-close:hover { border-color: var(--fg-2); }
        .blog-detail-body {
          color: var(--fg-2); font-size: 16px; line-height: 1.8;
        }
        .blog-detail-body p { margin-bottom: 16px; }
        .blog-detail-body h2, .blog-detail-body h3 {
          font-family: var(--font-display);
          color: var(--fg); margin: 28px 0 12px;
        }
        @media (max-width: 960px) {
          .blog-grid { grid-template-columns: 1fr; }
          .blog-card { border-right: none; border-bottom: 1px solid var(--border-soft); }
          .blog-card:last-child { border-bottom: none; }
        }
      `}</style>
    </section>
  );
}

/* Expose to window so app.jsx can use them */
Object.assign(window, {
  KadimNav: Nav,
  KadimMobileMenu: MobileMenu,
  KadimHero: Hero,
  KadimServices: Services,
  KadimPhilo: Philo,
  KadimAbout: About,
  KadimApproach: Approach,
  KadimContact: Contact,
  KadimPortfolio: Portfolio,
  KadimBlog: Blog,
  KadimFooter: Footer,
});
