/* global React, ReactDOM, MapMockup, DashboardMockup, PermissionMockup, PhoneMockup, PhoneActivityMockup, KakaoLoginMockup, ExcelMockup, CustomFieldMockup, TweaksPanel, useTweaks, TweakSection, TweakRadio, TweakSelect, TweakToggle, TweakText */

const { useState, useEffect, useRef } = React;

// =============================================================================
// Knockit landing — C v2 tone (map-as-hero, warm accent, light, beta-honest)
// =============================================================================

// 링크 설정 — 신규는 셀프서브 가입(/signup), 도입 문의는 메일, 기존 고객은 앱 로그인
const APP_URL = "https://app.knockit.app";
const SIGNUP_URL = `${APP_URL}/signup`;
const CONTACT_EMAIL = "nikkimj0625@gmail.com";
const MAILTO_CONTACT = `mailto:${CONTACT_EMAIL}?subject=${encodeURIComponent("[Knockit] 도입 문의")}`;

// Reveal-on-scroll
function useReveal() {
  useEffect(() => {
    const els = document.querySelectorAll(".reveal");
    const io = new IntersectionObserver((entries) => {
      entries.forEach((e) => {if (e.isIntersecting) {e.target.classList.add("in");io.unobserve(e.target);}});
    }, { threshold: 0.12, rootMargin: "0px 0px -60px 0px" });
    els.forEach((el) => io.observe(el));
    return () => io.disconnect();
  }, []);
}

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "showStats": true,
  "showPricing": true,
  "accentWord": "가볍게",
  "accent": "warm"
} /*EDITMODE-END*/;

const ACCENT_OPTIONS = [
{ value: "가볍게", label: "가볍게 (추천)" },
{ value: "쉽게", label: "쉽게" },
{ value: "함께", label: "함께" },
{ value: "지금", label: "지금" }];


const COLOR_OPTIONS = [
{ value: "warm", label: "키먹 (현재)" },
{ value: "indigo", label: "인디고 블루" },
{ value: "emerald", label: "에메랄드" },
{ value: "slate", label: "슬레이트" },
{ value: "coral", label: "코랄" },
{ value: "plum", label: "플럼" }];


function App() {
  const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS);
  useReveal();

  // Apply accent palette to <body>
  useEffect(() => {
    document.body.dataset.accent = tweaks.accent || "warm";
  }, [tweaks.accent]);

  return (
    <>
      <GlobalNav />
      <SubNav />
      <Hero accentWord={tweaks.accentWord} />
      <PainTile />
      <FitTile />
      <ExcelTile />
      <FeatureGrid />
      <PermissionsTile />
      <UtilityFeatures />
      <MobileTile />
      {tweaks.showStats && <StatsTile />}
      {tweaks.showPricing && <PricingTile />}
      <FaqTile />
      <CtaBand accentWord={tweaks.accentWord} />
      <FooterSlim />

      <TweaksPanel title="Tweaks">
        <TweakSection title="액센트 컬러">
          <TweakSelect
            label="팔레트"
            value={tweaks.accent}
            onChange={(v) => setTweak("accent", v)}
            options={COLOR_OPTIONS} />
          
        </TweakSection>
        <TweakSection title="히어로 카피">
          <TweakSelect
            label="액센트 단어"
            value={tweaks.accentWord}
            onChange={(v) => setTweak("accentWord", v)}
            options={ACCENT_OPTIONS} />
          
        </TweakSection>
        <TweakSection title="섹션">
          <TweakToggle label="신뢰 통계 밴드" value={tweaks.showStats} onChange={(v) => setTweak("showStats", v)} />
          <TweakToggle label="가격 섹션" value={tweaks.showPricing} onChange={(v) => setTweak("showPricing", v)} />
        </TweakSection>
      </TweaksPanel>
    </>);

}

// =============================================================================
// Brand
// =============================================================================
function BriefMark({ size = 22, palette = "light" }) {
  const c = palette === "dark" ?
  { tile: "#1F2430", k: "#F7F1E8", dot: "#C96F4A" } :
  { tile: "#F7F1E8", k: "#1F2430", dot: "#C96F4A" };
  return (
    <svg width={size} height={size} viewBox="0 0 100 100" aria-hidden="true">
      <rect x="2" y="2" width="96" height="96" rx="24" fill={c.tile} />
      <g stroke={c.k} strokeWidth="10.5" strokeLinecap="round" strokeLinejoin="round" fill="none">
        <path d="M36 22 L36 78" />
        <path d="M36 55 L55 39" />
        <path d="M36 54 Q45 62 57 78" />
      </g>
      <g fill={c.dot}>
        <circle cx="64" cy="62" r="3.4" opacity="0.6" />
        <circle cx="76" cy="44" r="5.2" />
      </g>
    </svg>);

}

function Wordmark({ size = 16, color }) {
  return (
    <span className="kw" style={{ fontSize: size, color }}>
      <span>knock</span>
      <span className="kw-i">i<span className="kw-i-dot"></span></span>
      <span>t</span>
    </span>);

}

// =============================================================================
// Top nav
// =============================================================================
function GlobalNav() {
  return (
    <nav className="global-nav-light" data-screen-label="Global Nav">
      <div className="global-nav-inner">
        <a href="#" className="brand">
          <BriefMark size={22} palette="light" />
          <span className="brand-lockup">
            <span className="brand-kr">노킷</span>
            <Wordmark size={13} color="var(--ink-muted-48)" />
          </span>
        </a>
        <div className="links">
          <a href="#features">기능</a>
          <a href="#pricing">가격</a>
          <a href={APP_URL}>로그인</a>
          <a href="#cta" className="nav-cta">무료로 시작하기</a>
        </div>
      </div>
    </nav>);

}

function SubNav() {return null;}

// =============================================================================
// Hero — C v2 (map-as-hero, light, warm accent on "가볍게")
// =============================================================================
function Hero({ accentWord }) {
  return (
    <section className="hero-cv2" data-screen-label="01 Hero">
      {/* full-bleed map background */}
      <div className="hero-cv2-map">
        <MapMockup compact animate />
      </div>
      <div className="hero-cv2-wash" />
      <div className="hero-cv2-vignette" />

      {/* copy overlay */}
      <div className="hero-cv2-copy">
        <div className="hero-cv2-copy-inner">
          <h1 className="hero-cv2-h1 reveal">
            <span className="hero-cv2-pre">현장에서 뛰는 영업팀의</span>
            <span className="hero-cv2-line">고객·방문 관리,</span>
            <span className="hero-cv2-line">
              <span className="hero-cv2-accent">{accentWord}</span> 시작하세요
            </span>
          </h1>

          <p className="hero-cv2-sub reveal">
            엑셀, 카톡, 개인 메모에 흩어져 있던 고객 정보와 방문 기록을<br />
            팀이 함께 보는 한 화면으로 옮겨드립니다.
          </p>

          <div className="cta-row hero-cv2-cta reveal">
            <a href="#cta" className="btn btn-primary-warm">무료로 시작하기</a>
            <a href="#cta" className="btn-text-link warm">
              도입 문의하기
              <svg viewBox="0 0 8 12" fill="none"><path d="M1 1l5 5-5 5" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" /></svg>
            </a>
          </div>

          <ul className="hero-cv2-bullets reveal">
            {[
            "카카오 로그인으로 1분 안에 시작",
            "초대 링크 한 번이면 팀원 합류",
            "모바일 웹에서도 그대로"].
            map((b, i) =>
            <li key={i}>
                <svg width="12" height="12" viewBox="0 0 12 12" fill="none">
                  <path d="M2.5 6.2 5 8.7l4.5-5.4" stroke="var(--warm-accent)" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" />
                </svg>
                {b}
              </li>
            )}
          </ul>
        </div>
      </div>

      {/* corner stat — bottom right */}
      <div className="hero-cv2-stat">
        <div>
          <div className="num">1분</div>
          <div className="lbl">카카오 로그인으로 시작</div>
        </div>
        <div className="div" />
        <div>
          <div className="num">한 곳</div>
          <div className="lbl">고객·지도·활동을 한 화면</div>
        </div>
      </div>
    </section>);

}

// =============================================================================
// Pain tile — directly reflects hero sub copy
// =============================================================================
function PainTile() {
  const items = [
  {
    tag: "거래처 정보",
    title: "거래처 정보가 여기저기 흩어져 있어요",
    detail: "엑셀, 카톡방, 개인 휴대폰에 나뉘어 있어 팀이 한 번에 확인하기 어렵습니다."
  },
  {
    tag: "방문 기록",
    title: "누가 언제 방문했는지 남지 않아요",
    detail: "담당자가 직접 말해주지 않으면 최근 방문 이력과 상담 내용을 파악하기 어렵습니다."
  },
  {
    tag: "A/S·정기점검",
    title: "A/S와 점검 이력이 개인 메모로 남아요",
    detail: "현장에서 처리한 내용이 회사의 기록으로 쌓이지 않습니다."
  },
  {
    tag: "다음 액션",
    title: "다음에 할 일이 쉽게 잊힙니다",
    detail: "재방문, 확인 요청, 후속 연락이 담당자 기억에만 의존하게 됩니다."
  },
  {
    tag: "인수인계",
    title: "담당자가 바뀌면 맥락도 끊깁니다",
    detail: "거래처별 히스토리가 남아 있지 않으면 새 담당자가 다시 처음부터 파악해야 합니다."
  }];

  return (
    <section className="tile pain-tile" data-screen-label="02 Pain">
      <div className="container">
        <div className="section-head reveal">
          <div className="t-eyebrow-en warm">THE BEFORE</div>
          <h2 className="t-display-lg">
            거래처 정보, 지금
            <br />우리 팀은 <span style={{ color: "var(--warm-accent)" }}>어떻게</span> 관리하고 있나요?
          </h2>
        </div>
        <div className="pain-grid">
          {items.map((it, i) =>
          <div className="pain-card reveal" key={i}>
              <div className="pain-tag">{it.tag}</div>
              <h3 className="pain-title">{it.title}</h3>
              <p className="pain-detail">{it.detail}</p>
            </div>
          )}
        </div>
        <div className="pain-arrow reveal">
          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round">
            <path d="M12 5v14M19 12l-7 7-7-7" />
          </svg>
          <span>Knockit이 한 화면에 모읍니다</span>
        </div>
      </div>
    </section>);

}

// =============================================================================
// Fit tile — "이런 팀에 잘 맞아요" (타깃 고객 메시징)
// =============================================================================
function FitTile() {
  const industries = [
  { kr: "식자재 · 주류 영업", en: "Food & beverage distribution" },
  { kr: "제조 · 설비 거래처 관리", en: "Manufacturing & equipment" },
  { kr: "프랜차이즈 가맹·매장 관리", en: "Franchise store ops" },
  { kr: "장비·설치·A/S 영업", en: "Equipment, installation & service" },
  { kr: "지역 대리점 · 파트너 관리", en: "Regional dealers & partners" },
  { kr: "도·소매 유통 영업", en: "Wholesale & retail sales" }];

  const situations = [
  "소규모 B2B 영업팀 (3~30명)",
  "지역 기반 방문 영업이 주력인 팀",
  "거래처를 정기적으로 관리해야 하는 팀",
  "엑셀·카톡·개인 메모로 고객 관리 중인 팀",
  "CRM은 부담스럽지만 기록 체계가 필요한 팀",
  "영업 인수인계가 자주 발생하는 조직"];

  return (
    <section className="tile fit-tile" data-screen-label="02b Fit">
      <div className="container">
        <div className="section-head reveal">
          <div className="t-eyebrow-en warm">A FIT FOR</div>
          <h2 className="t-display-lg">
            이런 팀에 <span style={{ color: "var(--warm-accent)" }}>잘 맞아요</span>
          </h2>
          <p className="t-body">여러 지역의 거래처를 방문하고, 기록이 흩어지기 시작한 팀을 위해 만들었습니다.</p>
        </div>

        <div className="fit-split">
          <div className="fit-col reveal">
            <div className="fit-col-head">
              <span className="fit-col-label">업종</span>
              <span className="fit-col-en">By industry</span>
            </div>
            <ul className="fit-industries">
              {industries.map((it, i) =>
              <li key={i}>
                  <span className="kr">{it.kr}</span>
                  <span className="en">{it.en}</span>
                </li>
              )}
            </ul>
          </div>

          <div className="fit-col reveal">
            <div className="fit-col-head">
              <span className="fit-col-label">상황</span>
              <span className="fit-col-en">By situation</span>
            </div>
            <ul className="fit-situations">
              {situations.map((s, i) =>
              <li key={i}>
                  <svg width="14" height="14" viewBox="0 0 14 14" fill="none">
                    <path d="M3 7.2 6 10l5-6" stroke="var(--warm-accent)" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" />
                  </svg>
                  <span>{s}</span>
                </li>
              )}
            </ul>
          </div>
        </div>
      </div>
    </section>);

}

// =============================================================================
// Feature grid (homepage 2-up tiles)
// =============================================================================
function FeatureGrid() {
  return (
    <section className="tile" id="features" data-screen-label="03 Feature Grid" style={{ padding: "12px 0" }}>
      <div className="two-up">
        <FeatureCard
          variant="dark"
          eyebrow="MAP"
          title="목록으로 보던 거래처를, 지도 위에서 확인하세요"
          blurb="엑셀에 줄 단위로 쌓여 있던 거래처를 지도 위에서 확인하고, 거래처별 상태와 기록을 함께 관리할 수 있습니다."
          ctaText={null}>
          
          <div style={{ width: "100%", maxWidth: 540, borderRadius: 14, overflow: "hidden", boxShadow: "var(--product-shadow)" }}>
            <MapMockup compact />
          </div>
        </FeatureCard>

        <FeatureCard
          variant="light"
          eyebrow="KAKAO LOGIN"
          title="카카오톡으로 간편하게 시작"
          blurb={<>Knockit은 별도 앱 설치 없이 모바일 웹에서 바로 열리고,<br />카카오톡 로그인으로 복잡한 가입 절차를 없앴습니다.</>}
          ctaText={null}>
          
          <KakaoLoginMockup />
        </FeatureCard>
      </div>
    </section>);

}

function FeatureCard({ variant, eyebrow, title, blurb, ctaText, children }) {
  return (
    <div className={`feature-card ${variant} reveal`}>
      <div className="t-eyebrow-en">{eyebrow}</div>
      <h3 className="t-display-md">{title}</h3>
      <p className="blurb">{blurb}</p>
      {ctaText &&
      <div className="cta-row">
          <a href="#" className={`btn-text-link ${variant === "dark" ? "on-dark" : "warm"}`}>
            {ctaText}
            <svg viewBox="0 0 8 12" fill="none"><path d="M1 1l5 5-5 5" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" /></svg>
          </a>
        </div>
      }
      <div className="visual">{children}</div>
    </div>);

}

// =============================================================================
// Permissions tile
// =============================================================================
function PermissionsTile() {
  return (
    <section className="tile tile-parchment" id="permissions" data-screen-label="04 Permissions">
      <div className="container">
        <div className="section-head reveal">
          <div className="t-eyebrow-en warm">PERMISSIONS</div>
          <h2 className="t-display-lg">관리자는 대시보드로, 담당자는 내 거래처로</h2>
          <p className="t-body">관리자는 대시보드로 현황을 보고, 담당자는 내 거래처와 방문 기록에 집중합니다.</p>
        </div>
        <div className="reveal" style={{ maxWidth: 880, margin: "0 auto" }}>
          <PermissionMockup />
        </div>
      </div>
    </section>);

}

// =============================================================================
// Dashboard tile
// =============================================================================
function DashboardTile() {
  return (
    <section className="tile tile-dark" id="dashboard" data-screen-label="05 Dashboard">
      <div className="container">
        <div className="section-head reveal">
          <div className="t-eyebrow-en warm">DASHBOARD</div>
          <h2 className="t-display-lg" style={{ color: "#fff" }}>오늘 무엇을 할지 한눈에</h2>
          <p className="t-body">영업담당자에겐 본인 담당 거래처와 활동만, 관리자에겐 전사 통계가 보입니다.</p>
        </div>
        <div className="reveal" style={{ maxWidth: 1080, margin: "0 auto", borderRadius: 18, overflow: "hidden", boxShadow: "var(--product-shadow)" }}>
          <DashboardMockup tone="dark" />
        </div>
      </div>
    </section>);

}

// =============================================================================
// Excel tile — dark, no CTA, sits above feature grid
// =============================================================================
function ExcelTile() {
  return (
    <section className="tile tile-dark" id="excel" data-screen-label="03 Excel">
      <div className="container">
        <div className="feature-row">
          <div className="feature-row-text reveal">
            <div className="t-eyebrow-en warm eyebrow">BULK IMPORT</div>
            <h3 className="t-display-lg" style={{ color: "#fff", fontSize: "clamp(24px, 2.6vw, 34px)", lineHeight: 1.2 }}>
              엑셀 거래처 목록,<br />그대로 옮겨오세요
            </h3>
            <p className="t-body" style={{ color: "var(--body-on-dark-muted)", fontWeight: "100" }}>거래처명, 담당자, 연락처, 주소까지 한 번에 불러와 바로 관리할 수 있습니다.


            </p>
          </div>
          <div className="reveal" style={{ borderRadius: 18, overflow: "hidden", boxShadow: "var(--product-shadow)" }}>
            <ExcelMockup />
          </div>
        </div>
      </div>
    </section>);

}

// =============================================================================
// Utility features grid
// =============================================================================
function UtilityFeatures() {
  const features = [
  {
    title: "거래처별 활동 기록",
    desc: "방문, 상담, A/S, 정기점검 내용을 거래처별로 누적해 관리합니다.",
    icon: "M9 11l3 3 8-8 M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"
  },
  {
    title: "팀이 함께 보는 거래처",
    desc: "담당자 개인에게만 있던 현장 정보를 팀이 같은 기준으로 확인합니다.",
    icon: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2 M9 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z M23 21v-2a4 4 0 0 0-3-3.87 M16 3.13a4 4 0 0 1 0 7.75"
  },
  {
    title: "엑셀 일괄 등록",
    desc: "기존에 관리하던 거래처 데이터를 기반으로 가볍게 시작할 수 있습니다.",
    icon: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8"
  },
  {
    title: "모바일 웹 지원",
    desc: "앱 설치 없이 외근 중에도 모바일 웹에서 접속할 수 있습니다.",
    icon: "M5 2h14a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2z M12 18h.01"
  }];

  return (
    <section className="tile tile-parchment" data-screen-label="07 Utility Features">
      <div className="container">
        <div className="section-head reveal">
          <div className="t-eyebrow-en warm">CORE FEATURES</div>
          <h2 className="t-display-lg">지금 바로 쓸 수 있는 거래처 관리 기능</h2>
        </div>
        <div className="utility-grid">
          {features.map((f, i) =>
          <div className="utility-card reveal" key={i}>
              <svg className="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" strokeLinejoin="round">
                <path d={f.icon} />
              </svg>
              <h4>{f.title}</h4>
              <p>{f.desc}</p>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// =============================================================================
// Mobile tile
// =============================================================================
function MobileTile() {
  return (
    <section className="tile tile-dark" id="mobile" data-screen-label="08 Mobile">
      <div className="container">
        <div className="feature-row reverse">
          <div className="feature-row-text reveal">
            <div className="t-eyebrow-en warm eyebrow">FIELD READY</div>
            <h3 className="t-display-lg" style={{ color: "#fff" }}>현장에서 바로<br />기록하는 팀</h3>
            <p className="t-body" style={{ color: "var(--body-on-dark-muted)" }}>
              납품, A/S, 정기점검 현장에서 마주친 내용을 그 자리에서 남깁니다.
              외근을 마치고 돌아와 다시 정리하지 않아도, 방문·상담·다음 액션이 거래처별로 남습니다.
            </p>
          </div>
          <div className="reveal mobile-visual">
            <div className="field-photo-card">
              <img
                src="uploads/field-photo.jpg"
                alt="현장에서 Knockit으로 거래처 정보를 확인하는 담당자"
                onError={(e) => {e.target.style.display = 'none';e.target.nextElementSibling.style.display = 'flex';}} />
              
              <div className="field-photo-fallback">
                <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round">
                  <rect x="3" y="3" width="18" height="18" rx="2" />
                  <circle cx="9" cy="9" r="2" />
                  <path d="m21 15-3.5-3.5L12 17l-3-3-6 6" />
                </svg>
                <div className="fallback-title">현장 사진 자리</div>
                <div className="fallback-sub">uploads/field-photo.jpg 에 이미지를 넣으면 표시됩니다</div>
              </div>
              <div className="field-photo-caption">거래처 앞에서 바로 기록</div>
            </div>
            <div className="field-phone-wrap">
              <PhoneActivityMockup />
            </div>
          </div>
        </div>
      </div>
    </section>);

}

// =============================================================================
// Stats band — trust signals (beta-honest)
// =============================================================================
function StatsTile() {
  const points = [
  { step: "01", title: "엑셀 그대로 가져오기", desc: "쓰던 거래처 목록을 한 번에 등록할 수 있습니다." },
  { step: "02", title: "지도에서 거래처 보기", desc: "지역별 거래처와 방문 대상을 한눈에 확인합니다." },
  { step: "03", title: "방문 후 바로 기록하기", desc: "방문 내용과 다음 할 일을 남겨 팀과 공유합니다." }];

  return (
    <section className="tile tile-parchment" data-screen-label="09 Stats">
      <div className="section-head reveal" style={{ marginBottom: 40 }}>
        <div className="t-eyebrow-en warm">WHY KNOCKIT</div>
        <h2 className="t-display-md">엑셀보다 쉽고, 시스템보다 가볍게</h2>
        <p className="t-body">거래처를 지도에 올리고, 방문 기록과 다음 할 일을 팀이 함께 관리합니다.</p>
      </div>
      <div className="why-points">
        {points.map((s, i) =>
        <div key={i} className="why-point reveal">
            <div className="step">{s.step}</div>
            <h3>{s.title}</h3>
            <p>{s.desc}</p>
          </div>
        )}
      </div>
    </section>);

}

// =============================================================================
// Pricing — beta-honest
// =============================================================================
function PricingTile() {
  const plans = [
  {
    name: "Team",
    ribbon: "14일 무료체험",
    price: "79,000",
    unit: "원 / 월",
    desc: "현장 영업팀에 필요한 기능을 모두 담은 기본 플랜입니다.",
    meta: "사용자 5명 · 거래처 500개 포함",
    cta: "14일 무료체험 시작",
    ctaClass: "btn btn-primary-warm",
    featured: true,
    badge: "가장 많이 선택",
    features: [
    "지도 기반 거래처 관리",
    "방문 기록",
    "후속 활동 관리",
    "모바일 사용",
    "엑셀 일괄등록"]

  },
  {
    name: "Business",
    price: "문의",
    unit: "",
    desc: "사용자 수가 많거나 거래처 데이터가 많은 팀을 위한 맞춤 플랜입니다.",
    meta: "사용자 10명 이상 또는 거래처 2,000개 이상 권장",
    cta: "도입 문의하기",
    ctaClass: "btn btn-secondary-pill on-warm",
    features: [
    "대량 데이터 이전",
    "권한 관리",
    "다중 조직 운영",
    "우선 지원 / 전담 지원"]

  }];

  return (
    <section className="tile" id="pricing" data-screen-label="10 Pricing" style={{ background: "var(--canvas)" }}>
      <div className="section-head reveal">
        <div className="t-eyebrow-en warm">PRICING</div>
        <h2 className="t-display-lg">현장 영업팀을 위한 단순한 요금제</h2>
        <p className="t-body">작은 팀은 바로 시작하고, 더 큰 조직은 운영 방식에 맞춰 상담하세요. 모든 팀은 14일 무료체험으로 시작할 수 있습니다.</p>
      </div>
      <div className="pricing-grid pricing-grid-2">
        {plans.map((p, i) =>
        <div className={`price-card reveal ${p.featured ? "featured" : ""}`} key={i}>
            {p.badge && <span className="badge">{p.badge}</span>}
            {p.ribbon && <span className="ribbon">{p.ribbon}</span>}
            <div className="plan">{p.name}</div>
            <div className="price-num">
              <span className="num">{p.price}</span>
              {p.unit && <span className="unit">{p.unit}</span>}
            </div>
            <div className="price-meta">{p.meta}</div>
            <div className="desc">{p.desc}</div>
            <ul>{p.features.map((f, j) => <li key={j}>{f}</li>)}</ul>
            <div className="cta">
              <a href={p.featured ? SIGNUP_URL : MAILTO_CONTACT} className={p.ctaClass}>{p.cta}</a>
            </div>
          </div>
        )}
      </div>
      <p className="pricing-note reveal">사용자 수와 거래처 수가 기본 제공 범위를 초과하는 경우 Business 플랜으로 상담해드립니다.</p>
    </section>);

}

// =============================================================================
// FAQ
// =============================================================================
function FaqTile() {
  const items = [
  { q: "앱을 설치해야 하나요?",
    a: "아니요. Knockit은 모바일 웹에서 바로 사용할 수 있습니다. PC와 모바일에서 같은 거래처와 활동 기록을 확인할 수 있습니다." },
  { q: "기존 엑셀 거래처 목록을 가져올 수 있나요?",
    a: "네. 엑셀 일괄등록으로 거래처명, 주소, 담당자, 연락처 등 기존 데이터를 가져와 시작할 수 있습니다." },
  { q: "거래처 위치를 지도에서 볼 수 있나요?",
    a: "네. 등록한 거래처를 지도 위에서 확인하고, 지역별 방문 대상과 주변 거래처를 함께 볼 수 있습니다." },
  { q: "방문 기록과 다음 할 일도 남길 수 있나요?",
    a: "네. 거래처별로 방문, 상담, A/S, 정기점검 같은 활동 기록을 남기고 후속 활동도 함께 관리할 수 있습니다." },
  { q: "담당자별로 보이는 거래처를 나눌 수 있나요?",
    a: "네. 관리자는 전체 현황을 확인하고, 담당자는 본인에게 배정된 거래처와 방문 기록을 중심으로 관리할 수 있습니다." },
  { q: "어떤 팀에 가장 잘 맞나요?",
    a: "여러 지역의 거래처를 방문하고, 엑셀이나 카톡에 방문 기록이 흩어지기 시작한 팀에 잘 맞습니다. 식자재·주류 영업, 장비·설비 영업, 프랜차이즈 매장 관리, 대리점 관리 같은 현장 중심 업무에 특히 적합합니다." }];

  return (
    <section className="tile tile-parchment" data-screen-label="11 FAQ">
      <div className="section-head reveal" style={{ marginBottom: 40 }}>
        <div className="t-eyebrow-en warm">QUESTIONS</div>
        <h2 className="t-display-md">자주 묻는 질문</h2>
      </div>
      <div className="faq reveal">
        {items.map((it, i) =>
        <details key={i} open={i === 0}>
            <summary>
              <span>{it.q}</span>
              <svg className="marker" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round"><path d="M12 5v14M5 12h14" /></svg>
            </summary>
            <div className="answer">{it.a}</div>
          </details>
        )}
      </div>
    </section>);

}

// =============================================================================
// CTA band — soft reprise of hero
// =============================================================================
function CtaBand({ accentWord }) {
  return (
    <section className="cta-band cta-band-warm" id="cta" data-screen-label="12 CTA">
      <div className="container reveal">
        <div className="t-eyebrow-en warm" style={{ marginBottom: 14 }}>GET STARTED</div>
        <h2 className="t-display-lg">
          흩어진 거래처, <span style={{ color: "var(--warm-accent)" }}>오늘 바로 지도 위에 올려보세요</span>.
        </h2>
        <p className="t-lead">엑셀로 관리하던 거래처를 불러오고, 방문 기록과 다음 할 일을 한곳에서 시작해보세요.</p>
        <div className="cta-row">
          <a href={SIGNUP_URL} className="btn btn-primary-warm btn-large">무료로 시작하기</a>
          <a href={MAILTO_CONTACT} className="btn-text-link warm">
            도입 문의하기
            <svg viewBox="0 0 8 12" fill="none"><path d="M1 1l5 5-5 5" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" /></svg>
          </a>
        </div>
      </div>
    </section>);

}

// =============================================================================
// Footer — slim
// =============================================================================
function FooterSlim() {
  return (
    <footer className="footer-slim" data-screen-label="Footer">
      <div className="footer-slim-inner">
        <span className="copy">
          © 2026 <span className="brand-kr-sm">노킷</span> <Wordmark size={11} color="var(--ink-muted-48)" />
        </span>
        <div className="links">
          <a href="#">서비스 약관</a>
          <a href="#">개인정보 처리방침</a>
          <a href={MAILTO_CONTACT}>문의하기</a>
        </div>
      </div>
    </footer>);

}

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