/* global React, ReactDOM */
const { useState, useEffect } = React;

const C = window.SITE_CONTENT.ja;

// ───────────────────────────────────────────────────────────────
// Utility
// ───────────────────────────────────────────────────────────────
function cx(...xs) { return xs.filter(Boolean).join(" "); }
function fmtUSD(n) { return "$" + n.toLocaleString("en-US"); }
function fmtUSDRound(n) {
  return "$" + Math.round(n).toLocaleString("en-US");
}

// ───────────────────────────────────────────────────────────────
// Icon library — minimal line SVGs, 24×24, currentColor
// ───────────────────────────────────────────────────────────────
const ICON_PATHS = {
  cpu: (
    <React.Fragment>
      <rect x="6" y="6" width="12" height="12" rx="1.5" />
      <rect x="9.5" y="9.5" width="5" height="5" rx="0.5" />
      <line x1="9" y1="3" x2="9" y2="6" /><line x1="12" y1="3" x2="12" y2="6" /><line x1="15" y1="3" x2="15" y2="6" />
      <line x1="9" y1="18" x2="9" y2="21" /><line x1="12" y1="18" x2="12" y2="21" /><line x1="15" y1="18" x2="15" y2="21" />
      <line x1="3" y1="9" x2="6" y2="9" /><line x1="3" y1="12" x2="6" y2="12" /><line x1="3" y1="15" x2="6" y2="15" />
      <line x1="18" y1="9" x2="21" y2="9" /><line x1="18" y1="12" x2="21" y2="12" /><line x1="18" y1="15" x2="21" y2="15" />
    </React.Fragment>
  ),
  layers: (
    <React.Fragment>
      <polygon points="12,4 21,8.5 12,13 3,8.5" />
      <polyline points="3,12.5 12,17 21,12.5" />
      <polyline points="3,16.5 12,21 21,16.5" />
    </React.Fragment>
  ),
  megaphone: (
    <React.Fragment>
      <path d="M4 10 L4 14 L9 14 L18 19 L18 5 L9 10 Z" />
      <path d="M18 9 C20 9 20 15 18 15" />
    </React.Fragment>
  ),
  dashboard: (
    <React.Fragment>
      <rect x="3.5" y="3.5" width="7" height="9" rx="1" />
      <rect x="13.5" y="3.5" width="7" height="5" rx="1" />
      <rect x="13.5" y="11.5" width="7" height="9" rx="1" />
      <rect x="3.5" y="15.5" width="7" height="5" rx="1" />
    </React.Fragment>
  ),
  process: (
    <React.Fragment>
      <circle cx="6" cy="12" r="3" />
      <circle cx="18" cy="6" r="2.5" />
      <circle cx="18" cy="18" r="2.5" />
      <line x1="8.5" y1="10.5" x2="15.6" y2="7.1" />
      <line x1="8.5" y1="13.5" x2="15.6" y2="16.9" />
    </React.Fragment>
  ),
  group: (
    <React.Fragment>
      <circle cx="9" cy="9" r="3" />
      <circle cx="17" cy="10" r="2.4" />
      <path d="M3 19 C3 16 6 14 9 14 C12 14 15 16 15 19" />
      <path d="M14 19 C14 17 16 16 17 16 C18 16 21 17 21 19" />
    </React.Fragment>
  ),
  growth: (
    <React.Fragment>
      <line x1="3" y1="20" x2="21" y2="20" />
      <rect x="5" y="14" width="3" height="6" />
      <rect x="10.5" y="10" width="3" height="10" />
      <rect x="16" y="6" width="3" height="14" />
      <polyline points="5,9 11,11 16,5 19,3" />
      <polyline points="16,3 19,3 19,6" />
    </React.Fragment>
  ),
  social: (
    <React.Fragment>
      <path d="M4 5 H20 V15 H13 L8 19 V15 H4 Z" />
      <circle cx="9" cy="10" r="0.9" fill="currentColor" stroke="none" />
      <circle cx="12" cy="10" r="0.9" fill="currentColor" stroke="none" />
      <circle cx="15" cy="10" r="0.9" fill="currentColor" stroke="none" />
    </React.Fragment>
  ),
  search: (
    <React.Fragment>
      <rect x="6" y="3" width="10" height="16" rx="1.5" />
      <line x1="9" y1="6" x2="13" y2="6" />
      <circle cx="11" cy="13" r="2.5" />
      <line x1="12.8" y1="14.8" x2="14.5" y2="16.5" />
    </React.Fragment>
  ),
  bell: (
    <React.Fragment>
      <path d="M6 16 L18 16 L17 14 L17 10 C17 7 15 5 12 5 C9 5 7 7 7 10 L7 14 Z" />
      <line x1="11" y1="3" x2="13" y2="3" />
      <path d="M10.5 18 C10.7 19 11.3 19.6 12 19.6 C12.7 19.6 13.3 19 13.5 18" />
    </React.Fragment>
  ),
  "check-device": (
    <React.Fragment>
      <rect x="6" y="3" width="12" height="18" rx="1.8" />
      <line x1="10" y1="18" x2="14" y2="18" />
      <polyline points="9,11 11.5,13.5 16,9" />
    </React.Fragment>
  ),
  inbox: (
    <React.Fragment>
      <rect x="3.5" y="5" width="17" height="14" rx="1.5" />
      <polyline points="3.5,12 9,12 10.5,14 13.5,14 15,12 20.5,12" />
      <line x1="7" y1="9" x2="17" y2="9" />
    </React.Fragment>
  ),
  graduation: (
    <React.Fragment>
      <polygon points="2,9 12,4 22,9 12,14" />
      <path d="M6.5 11 L6.5 16 C6.5 17.5 9 19 12 19 C15 19 17.5 17.5 17.5 16 L17.5 11" />
      <line x1="20" y1="9" x2="20" y2="14" />
    </React.Fragment>
  ),
  package: (
    <React.Fragment>
      <polygon points="3,7 12,3 21,7 21,17 12,21 3,17" />
      <polyline points="3,7 12,11 21,7" />
      <line x1="12" y1="11" x2="12" y2="21" />
      <line x1="7.5" y1="5" x2="16.5" y2="9" />
    </React.Fragment>
  ),
  "process-2": (
    <React.Fragment>
      <circle cx="8" cy="8" r="3" />
      <circle cx="16" cy="16" r="3" />
      <path d="M11 8 H14 C15.5 8 16 8.6 16 10 V13" />
      <path d="M13 16 H10 C8.5 16 8 15.4 8 14 V11" />
    </React.Fragment>
  ),
  campaign: (
    <React.Fragment>
      <path d="M3 10 L3 14 L9 14 L19 19 L19 5 L9 10 Z" />
      <line x1="11" y1="14" x2="13" y2="20" />
      <line x1="9" y1="14" x2="11" y2="20" />
    </React.Fragment>
  ),
};

function Icon({ name, className }) {
  const path = ICON_PATHS[name];
  if (!path) return null;
  return (
    <svg
      className={cx("icon", className)}
      viewBox="0 0 24 24"
      fill="none"
      stroke="currentColor"
      strokeWidth="1.5"
      strokeLinecap="round"
      strokeLinejoin="round"
      aria-hidden="true"
    >
      {path}
    </svg>
  );
}

// ───────────────────────────────────────────────────────────────
// ImageSlot — gracefully falls back if asset missing
// ───────────────────────────────────────────────────────────────
function ImageSlot({ src, label, labelTop, labelBottom, caption, ratio = "16 / 10", className, overlay, dim }) {
  const [errored, setErrored] = useState(false);
  const hasImage = !errored && src;
  return (
    <figure className={cx("imgslot", className, hasImage && "imgslot--has-image")} style={{ "--ratio": ratio }}>
      <div className="imgslot__frame">
        {hasImage ? (
          <img src={src} alt={label || ""} onError={() => setErrored(true)} loading="lazy" />
        ) : (
          <div className="imgslot__ph" role="img" aria-label={label}>
            <div className="imgslot__ph-stripes" aria-hidden="true" />
            <div className="imgslot__ph-content">
              <div className="imgslot__ph-label">{label || "IMAGE"}</div>
              <div className="imgslot__ph-hint">画像差し替え枠 — <code>{src}</code></div>
            </div>
          </div>
        )}
        {hasImage && dim && <div className="imgslot__dim" aria-hidden="true" />}
        {overlay && hasImage && (
          <div className="imgslot__overlay">
            {labelTop && <div className="imgslot__overlay-top">{labelTop}</div>}
            {labelBottom && <div className="imgslot__overlay-bottom">{labelBottom}</div>}
          </div>
        )}
        {!overlay && hasImage && label && (
          <div className="imgslot__tag">{label}</div>
        )}
      </div>
      {caption && <figcaption className="imgslot__cap">{caption}</figcaption>}
    </figure>
  );
}

// ───────────────────────────────────────────────────────────────
// Nav
// ───────────────────────────────────────────────────────────────
function Nav() {
  const [scrolled, setScrolled] = useState(false);
  const [open, setOpen] = useState(false);
  useEffect(() => {
    const on = () => setScrolled(window.scrollY > 8);
    on();
    window.addEventListener("scroll", on, { passive: true });
    return () => window.removeEventListener("scroll", on);
  }, []);
  return (
    <header className={cx("nav", scrolled && "nav--scrolled")}>
      <div className="nav__inner">
        <a href="#top" className="nav__brand">
          <span className="nav__mark" aria-hidden="true"><span className="nav__mark-inner" /></span>
          <span className="nav__brand-text">
            <span className="nav__brand-1">{C.nav.brand}</span>
            <span className="nav__brand-2">{C.nav.brandSub}</span>
          </span>
        </a>
        <nav className="nav__links" aria-label="Primary">
          {C.nav.links.map((l) => <a key={l.id} href={`#${l.id}`}>{l.label}</a>)}
        </nav>
        <div className="nav__cta">
          <a href="#contact" className="btn btn--primary btn--sm">{C.nav.cta}</a>
        </div>
        <button className="nav__menu" aria-label="Menu" onClick={() => setOpen(v => !v)}>
          <span /><span /><span />
        </button>
      </div>
      {open && (
        <div className="nav__mobile">
          {C.nav.links.map((l) => (
            <a key={l.id} href={`#${l.id}`} onClick={() => setOpen(false)}>{l.label}</a>
          ))}
          <a href="#contact" className="btn btn--primary" onClick={() => setOpen(false)}>{C.nav.cta}</a>
        </div>
      )}
    </header>
  );
}

// ───────────────────────────────────────────────────────────────
// Hero — physical infrastructure visual
// ───────────────────────────────────────────────────────────────
function Hero() {
  const hi = C.hero.heroImage;
  return (
    <section id="top" className="hero" data-screen-label="01 Hero">
      <div className="hero__grid" aria-hidden="true" />
      <div className="container hero__inner">
        <div className="hero__lead">
          <div className="hero__eyebrow">
            <span className="hero__eyebrow-dot" aria-hidden="true" />
            {C.hero.eyebrow}
          </div>
          <h1 className="hero__title">
            {C.hero.title.split("\n").map((line, i) => (
              <span key={i} className="hero__title-line">{line}</span>
            ))}
          </h1>
          <p className="hero__sub">{C.hero.sub}</p>
          <div className="hero__ctas">
            <a href="#contact" className="btn btn--primary">
              {C.hero.ctaPrimary}<span className="btn__arrow" aria-hidden="true">→</span>
            </a>
            <a href="#partner" className="btn btn--ghost">{C.hero.ctaSecondary}</a>
          </div>
          <div className="hero__note">{C.hero.ctaNote}</div>
        </div>
        <div className="hero__visual">
          <div className="infrapanel">
            <div className="infrapanel__frame">
              <img
                src={hi.src}
                alt={hi.labelTop}
                className="infrapanel__img"
                loading="eager"
              />
              <div className="infrapanel__dim" aria-hidden="true" />
              <div className="infrapanel__grid" aria-hidden="true" />
              <div className="infrapanel__overlay">
                <div className="infrapanel__top">
                  <div className="infrapanel__label">
                    <span className="infrapanel__label-dot" aria-hidden="true" />
                    {hi.labelTop}
                  </div>
                  <div className="infrapanel__status">
                    <span className="infrapanel__status-led" aria-hidden="true" />
                    {hi.statusLabel}
                  </div>
                </div>
                <div className="infrapanel__bottom">
                  <div className="infrapanel__sublabel">{hi.labelBottom}</div>
                  <div className="infrapanel__badges">
                    {hi.badges.map((b, i) => (
                      <span key={i} className="infrapanel__badge">{b}</span>
                    ))}
                  </div>
                </div>
              </div>
            </div>
            <div className="infrapanel__caption">{hi.caption}</div>
          </div>
          <div className="hero__side-metrics">
            {C.hero.sideMetrics.map((m, i) => (
              <div key={i} className={cx("metric metric--scale", `metric--${m.tone}`)}>
                <div className="metric__v-row">
                  <div className="metric__v">{m.v}</div>
                  <div className="metric__u">{m.u}</div>
                </div>
                <div className="metric__k">{m.k}</div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Section head
// ───────────────────────────────────────────────────────────────
function SectionHead({ tag, title, sub }) {
  return (
    <div className="sec__head">
      <div className="sec__tag">{tag}</div>
      <h2 className="sec__title">{title}</h2>
      {sub && <p className="sec__sub">{sub}</p>}
    </div>
  );
}

// ───────────────────────────────────────────────────────────────
// Why Now — text + execution-shift flow
// ───────────────────────────────────────────────────────────────
function WhyNow() {
  return (
    <section id="why" className="sec sec--alt" data-screen-label="02 Why Now">
      <div className="container">
        <SectionHead tag={C.why.tag} title={C.why.title} />
        <div className="why__split">
          <div className="why__col">
            <div className="why__body">
              {C.why.body.map((p, i) => <p key={i}>{p}</p>)}
            </div>
            <div className="why__cards">
              {C.why.cards.map((c) => (
                <div key={c.num} className="why__card">
                  <div className="why__card-num">{c.num}</div>
                  <div>
                    <div className="why__card-t">{c.t}</div>
                    <div className="why__card-d">{c.d}</div>
                  </div>
                </div>
              ))}
            </div>
          </div>
          <div className="why__shift">
            <div className="shift">
              <div className="shift__h">
                <div className="shift__h-t">{C.why.shift.title}</div>
                <div className="shift__h-s">{C.why.shift.sub}</div>
              </div>
              <div className="shift__steps">
                {C.why.shift.steps.map((s, i) => (
                  <React.Fragment key={i}>
                    <div className={cx("shift__step", `shift__step--${s.tone}`)}>
                      <div className="shift__step-k">{s.k}</div>
                      <div className="shift__step-d">{s.d}</div>
                    </div>
                    {i < C.why.shift.steps.length - 1 && (
                      <div className="shift__arrow" aria-hidden="true">
                        <svg viewBox="0 0 16 28">
                          <line x1="8" y1="0" x2="8" y2="20" stroke="currentColor" strokeWidth="1.4" />
                          <polyline points="3,15 8,20 13,15" fill="none" stroke="currentColor" strokeWidth="1.4" />
                        </svg>
                      </div>
                    )}
                  </React.Fragment>
                ))}
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Problem
// ───────────────────────────────────────────────────────────────
function Problem() {
  return (
    <section id="problem" className="sec" data-screen-label="03 Problem">
      <div className="container problem">
        <div className="problem__left">
          <SectionHead tag={C.problem.tag} title={C.problem.title} />
          <p className="problem__body">{C.problem.body}</p>
        </div>
        <div className="problem__right">
          <div className="problem__list-head">
            <span className="problem__list-pin" aria-hidden="true" />
            <div>
              <div className="problem__list-label">{C.problem.listLabel}</div>
              <div className="problem__list-sub">{C.problem.listSub}</div>
            </div>
          </div>
          <ul className="problem__list">
            {C.problem.list.map((it, i) => (
              <li key={i}>
                <span className="problem__list-marker" aria-hidden="true">
                  <span className="problem__list-marker-i">{String(i + 1).padStart(2, "0")}</span>
                </span>
                <span>{it}</span>
              </li>
            ))}
          </ul>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Solution
// ───────────────────────────────────────────────────────────────
function Solution() {
  return (
    <section id="solution" className="sec sec--alt" data-screen-label="04 Solution">
      <div className="container">
        <SectionHead tag={C.solution.tag} title={C.solution.title} sub={C.solution.body} />
        <div className="solution__pillars">
          {C.solution.pillars.map((p) => (
            <div key={p.k} className={cx("pillar", `pillar--${p.tone}`)}>
              <div className="pillar__accent" aria-hidden="true" />
              <div className="pillar__k">{p.k}</div>
              <div className="pillar__t">{p.t}</div>
              <div className="pillar__d">{p.d}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Trust / Infrastructure Proof — left big image + right 4 cards
// ───────────────────────────────────────────────────────────────
function Trust() {
  return (
    <section id="trust" className="sec" data-screen-label="05 Trust">
      <div className="container">
        <SectionHead tag={C.trust.tag} title={C.trust.title} sub={C.trust.sub} />
        <div className="trust__split">
          <div className="trust__image">
            <ImageSlot
              src={C.trust.heroImage.src}
              labelTop={C.trust.heroImage.label}
              caption={C.trust.heroImage.caption}
              ratio="4 / 5"
              className="imgslot--trust"
              overlay
              dim
            />
          </div>
          <div className="trust__cards">
            {C.trust.blocks.map((b, i) => (
              <div key={i} className={cx("trust__card", `trust__card--${b.tone}`)}>
                <div className="trust__card-k">{b.k}</div>
                <div className="trust__card-t">{b.t}</div>
                <div className="trust__card-d">{b.d}</div>
              </div>
            ))}
          </div>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Units — BOX & Rack with real photos
// ───────────────────────────────────────────────────────────────
function Units() {
  return (
    <section id="units" className="sec sec--alt" data-screen-label="06 Units">
      <div className="container">
        <SectionHead tag={C.units.tag} title={C.units.title} sub={C.units.sub} />
        <div className="units__grid">
          {[C.units.box, C.units.rack].map((u, i) => (
            <div key={i} className={cx("unit", i === 0 ? "unit--cyan" : "unit--green")}>
              <ImageSlot
                src={u.img.src}
                labelTop={u.img.label}
                ratio="4 / 5"
                className="imgslot--unit"
                overlay
                dim
              />
              <div className="unit__body">
                <div className="unit__t">{u.t}</div>
                <div className="unit__d">{u.d}</div>
                <div className="unit__specs">
                  {u.specs.map((s, j) => (
                    <div key={j} className="unit__spec">
                      <div className="unit__spec-k">{s.k}</div>
                      <div className="unit__spec-v">{s.v}</div>
                    </div>
                  ))}
                </div>
              </div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Partner
// ───────────────────────────────────────────────────────────────
function Partner() {
  return (
    <section id="partner" className="sec" data-screen-label="07 Partner">
      <div className="container">
        <SectionHead tag={C.partner.tag} title={C.partner.title} sub={C.partner.body} />
        <div className="partner__flow">
          {C.partner.flow.map((s, i) => (
            <React.Fragment key={s.step}>
              <div className={cx("partner__flow-node", `partner__flow-node--${s.tone}`)}>
                <div className="partner__flow-step">{s.step}</div>
                <div className="partner__flow-t">{s.t}</div>
                <div className="partner__flow-d">{s.d}</div>
              </div>
              {i < C.partner.flow.length - 1 && (
                <div className="partner__flow-arrow" aria-hidden="true">
                  <svg viewBox="0 0 60 12">
                    <line x1="0" y1="6" x2="50" y2="6" stroke="currentColor" strokeWidth="1.2" />
                    <polyline points="44,1 50,6 44,11" fill="none" stroke="currentColor" strokeWidth="1.2" />
                  </svg>
                </div>
              )}
            </React.Fragment>
          ))}
        </div>
        <div className="partner__apply">
          <div className="partner__apply-h">想定される展開領域</div>
          <div className="partner__apply-grid">
            {C.partner.apply.map((a, i) => (
              <div key={i} className="partner__apply-item">
                <span className="partner__apply-dot" aria-hidden="true" />
                <span>{a}</span>
              </div>
            ))}
          </div>
        </div>
        <div className="sec__cta-row">
          <a href="#contact" className="btn btn--primary">
            {C.hero.ctaPrimary}<span className="btn__arrow" aria-hidden="true">→</span>
          </a>
          <a href="#contact" className="btn btn--ghost">Partner Programの説明を受ける</a>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Routing pipeline (5 steps with thumb)
// ───────────────────────────────────────────────────────────────
function Routing() {
  return (
    <section id="routing" className="sec sec--alt" data-screen-label="08 Routing">
      <div className="container">
        <SectionHead tag={C.routing.tag} title={C.routing.title} sub={C.routing.body} />
        <div className="pipeline">
          {C.routing.pipeline.map((step, i) => (
            <React.Fragment key={i}>
              <div className={cx("pipeline__node", `pipeline__node--${step.tone}`)}>
                <div className="pipeline__node-step">{String(i + 1).padStart(2, "0")}</div>
                <div className="pipeline__node-h">{step.k}</div>
                {step.thumb && (
                  <div className="pipeline__node-thumb">
                    <ImageSlot
                      src={step.thumb.src}
                      label={step.thumb.label}
                      ratio="16 / 10"
                      className="imgslot--thumb"
                    />
                  </div>
                )}
                <ul className="pipeline__list">
                  {step.items.map((it, j) => <li key={j}>{it}</li>)}
                </ul>
              </div>
              {i < C.routing.pipeline.length - 1 && (
                <div className="pipeline__arrow" aria-hidden="true">
                  <svg viewBox="0 0 28 60">
                    <line x1="14" y1="0" x2="14" y2="48" stroke="currentColor" strokeWidth="1.4" />
                    <polyline points="8,42 14,48 20,42" fill="none" stroke="currentColor" strokeWidth="1.4" />
                  </svg>
                </div>
              )}
            </React.Fragment>
          ))}
        </div>
        <p className="routing__notice">{C.routing.notice}</p>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Use Cases
// ───────────────────────────────────────────────────────────────
function UseCases() {
  return (
    <section id="usecases" className="sec" data-screen-label="09 Use Cases">
      <div className="container">
        <SectionHead tag={C.usecases.tag} title={C.usecases.title} />
        {C.usecases.groups.map((g, gi) => (
          <div key={gi} className={cx("usecase__group", `usecase__group--${g.tone}`)}>
            <div className="usecase__group-h">
              <span className="usecase__group-n">{String(gi + 1).padStart(2, "0")}</span>
              <span>{g.h}</span>
            </div>
            <div className="usecase__grid">
              {g.items.map((it, i) => (
                <div key={i} className="usecase__card">
                  <div className="usecase__card-icon" aria-hidden="true">
                    <Icon name={it.icon} />
                  </div>
                  <div className="usecase__card-t">{it.t}</div>
                  <div className="usecase__card-d">{it.d}</div>
                  {it.tags && (
                    <div className="usecase__card-tags">
                      {it.tags.map((tag, j) => (
                        <span key={j} className="usecase__card-tag">{tag}</span>
                      ))}
                    </div>
                  )}
                </div>
              ))}
            </div>
          </div>
        ))}
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Audience
// ───────────────────────────────────────────────────────────────
function Audience() {
  return (
    <section id="audience" className="sec sec--alt" data-screen-label="10 Audience">
      <div className="container">
        <SectionHead tag={C.audience.tag} title={C.audience.title} sub={C.audience.sub} />
        <div className="audience__grid">
          {C.audience.cards.map((c, i) => (
            <div key={i} className={cx("audience__card", `audience__card--${c.tone}`)}>
              <div className="audience__card-head">
                <div className="audience__card-icon" aria-hidden="true">
                  <Icon name={c.icon} />
                </div>
                <div className="audience__card-cat">{c.cat}</div>
              </div>
              <div className="audience__card-t">{c.t}</div>
              <div className="audience__card-d">{c.d}</div>
              <div className="audience__card-o">
                <span className="audience__card-o-bar" aria-hidden="true" />
                <span>{c.o}</span>
              </div>
              <div className="audience__card-n" aria-hidden="true">{String(i + 1).padStart(2, "0")}</div>
            </div>
          ))}
        </div>
        <div className="audience__notfor">{C.audience.notFor}</div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Pricing
// ───────────────────────────────────────────────────────────────
function Pricing() {
  return (
    <section id="pricing" className="sec" data-screen-label="11 Pricing">
      <div className="container">
        <SectionHead tag={C.pricing.tag} title={C.pricing.title} sub={C.pricing.sub} />
        <div className="pricing__capacity-note">
          <span className="pricing__capacity-dot" aria-hidden="true" />
          {C.pricing.capacityNote}
        </div>
        <div className="pricing__grid">
          {C.pricing.plans.map((p) => (
            <div key={p.id} className={cx("plan", `plan--${p.tone}`, p.highlight && "plan--highlight")}>
              {p.highlight && <div className="plan__ribbon">Recommended</div>}
              <div className="plan__capacity">
                <div className="plan__capacity-l">{p.capacity}</div>
                <div className="plan__capacity-s">{p.capacityNote}</div>
              </div>
              <div className="plan__name">{p.name}</div>
              <div className="plan__sub">{p.sub}</div>
              <div className="plan__metrics">
                <div className="plan__metric">
                  <div className="plan__metric-k">構成</div>
                  <div className="plan__metric-v">{p.boxes}</div>
                </div>
                <div className="plan__metric">
                  <div className="plan__metric-k">デバイス数</div>
                  <div className="plan__metric-v">{p.devices}</div>
                </div>
              </div>
              <div className="plan__price-block">
                <div className="plan__price-label">Fixed Price</div>
                <div className="plan__price-row">
                  <div className="plan__price">{fmtUSD(p.price)}</div>
                  <div className="plan__price-unit">USD</div>
                  {p.priceNote && <div className="plan__price-note">{p.priceNote}</div>}
                </div>
                <div className="plan__price-targets">
                  <div className="plan__price-target">
                    <div className="plan__price-target-k">月次売上目標</div>
                    <div className="plan__price-target-v">{fmtUSD(p.monthly)}</div>
                  </div>
                  <div className="plan__price-target">
                    <div className="plan__price-target-k">48か月累計目標</div>
                    <div className="plan__price-target-v">{fmtUSD(p.total48)}</div>
                  </div>
                </div>
              </div>
              <p className="plan__purpose">{p.purpose}</p>
              <ul className="plan__features">
                {p.features.map((f, i) => (
                  <li key={i}>
                    <span className="plan__check" aria-hidden="true">
                      <svg viewBox="0 0 16 16"><polyline points="3,8 7,12 13,4" fill="none" stroke="currentColor" strokeWidth="1.8" /></svg>
                    </span>
                    <span>{f}</span>
                  </li>
                ))}
              </ul>
              <a href="#contact" className={cx("btn", p.highlight ? "btn--primary" : "btn--outline", "btn--block")}>
                {p.cta}
              </a>
            </div>
          ))}
        </div>
        <ul className="pricing__notes">
          {C.pricing.notes.map((n, i) => <li key={i}>※ {n}</li>)}
        </ul>
        <div className="sec__cta-row">
          <a href="#contact" className="btn btn--primary">
            {C.hero.ctaPrimary}<span className="btn__arrow" aria-hidden="true">→</span>
          </a>
          <a href="#contact" className="btn btn--ghost">顧問税理士・会計担当者と一緒に相談する</a>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Revenue + Simulator
// ───────────────────────────────────────────────────────────────
function Revenue() {
  const [planId, setPlanId] = useState("half");
  const plan = C.pricing.plans.find(p => p.id === planId) || C.pricing.plans[0];
  const sim = C.revenue.simulator;
  const price = plan.price;
  const monthly = plan.monthly;
  const total48 = plan.total48;
  const targetPct = Math.round((total48 / price) * 100);
  const chartMax = Math.max(price, total48) * 1.05;

  return (
    <section id="revenue" className="sec sec--alt" data-screen-label="12 Revenue Model">
      <div className="container">
        <SectionHead tag={C.revenue.tag} title={C.revenue.title} />
        <div className="revenue__body">
          {C.revenue.body.map((p, i) => <p key={i}>{p}</p>)}
        </div>

        {/* Plan-level summary table */}
        {C.revenue.summary && (
          <div className="revenue__summary">
            <div className="revenue__summary-h">
              <div className="revenue__summary-t">{C.revenue.summary.title}</div>
              <div className="revenue__summary-s">{C.revenue.summary.sub}</div>
            </div>
            <div className="revenue__summary-table-wrap">
              <table className="revenue__summary-table">
                <thead>
                  <tr>{C.revenue.summary.head.map((h, i) => <th key={i}>{h}</th>)}</tr>
                </thead>
                <tbody>
                  {C.revenue.summary.rows.map((r, i) => (
                    <tr key={i}>
                      <td>
                        <div className="revenue__summary-plan">{r.plan}</div>
                        <div className="revenue__summary-plan-sub">{r.sub}</div>
                      </td>
                      <td className="revenue__summary-num">{r.price}</td>
                      <td className="revenue__summary-num">{r.monthly}</td>
                      <td className="revenue__summary-num revenue__summary-em">{r.total}</td>
                    </tr>
                  ))}
                </tbody>
              </table>
            </div>
          </div>
        )}

        <div className="sim">
          <div className="sim__h">
            <div className="sim__h-t">{sim.title}</div>
            <div className="sim__h-s">{sim.sub}</div>
          </div>

          <div className="sim__tabs" role="tablist">
            {C.pricing.plans.map((p) => (
              <button
                key={p.id}
                role="tab"
                aria-selected={planId === p.id}
                className={cx("sim__tab", `sim__tab--${p.tone}`, planId === p.id && "sim__tab--active")}
                onClick={() => setPlanId(p.id)}
              >
                <span className="sim__tab-n">{p.name}</span>
                <span className="sim__tab-d">{p.devices}</span>
              </button>
            ))}
          </div>

          <div className="sim__body">
            <div className="sim__stats">
              <div className="sim__stat">
                <div className="sim__stat-k">{sim.labels.plan}</div>
                <div className="sim__stat-v">{plan.name}</div>
                <div className="sim__stat-meta">{plan.boxes} / {plan.devices}</div>
              </div>
              <div className="sim__stat">
                <div className="sim__stat-k">{sim.labels.price}</div>
                <div className="sim__stat-v">{fmtUSD(price)}</div>
                <div className="sim__stat-meta">固定価格 ・ 税抜・ USD</div>
              </div>
              <div className="sim__stat sim__stat--em">
                <div className="sim__stat-k">{sim.labels.monthly}</div>
                <div className="sim__stat-v">{fmtUSD(monthly)}</div>
                <div className="sim__stat-meta">販売価格 × 約 2.8% / 月（モデル値）</div>
              </div>
              <div className="sim__stat sim__stat--em">
                <div className="sim__stat-k">{sim.labels.total}</div>
                <div className="sim__stat-v">{fmtUSD(total48)}</div>
                <div className="sim__stat-meta">月次目標 × 48か月（モデル値）</div>
              </div>
              <div className="sim__stat">
                <div className="sim__stat-k">{sim.labels.range}</div>
                <div className="sim__stat-v">約 {targetPct}%</div>
                <div className="sim__stat-meta">{sim.labels.rangeLabel}</div>
              </div>
            </div>

            <div className="sim__chart">
              <div className="sim__chart-h">{sim.labels.chart}</div>
              <div className="sim__chart-rows">
                <div className="sim__chart-row">
                  <div className="sim__chart-label">{sim.labels.axisPrice}</div>
                  <div className="sim__chart-track">
                    <div className="sim__chart-bar sim__chart-bar--price" style={{ width: `${(price / chartMax) * 100}%` }}>
                      <span className="sim__chart-bar-v">{fmtUSD(price)}</span>
                    </div>
                  </div>
                </div>
                <div className="sim__chart-row">
                  <div className="sim__chart-label">{sim.labels.axisTotal}</div>
                  <div className="sim__chart-track">
                    <div className="sim__chart-bar sim__chart-bar--total" style={{ width: `${(total48 / chartMax) * 100}%` }}>
                      <span className="sim__chart-bar-v">{fmtUSD(total48)}</span>
                    </div>
                  </div>
                </div>
              </div>
              <ul className="sim__legend">
                {sim.legend.map((l, i) => <li key={i}>{l}</li>)}
              </ul>
            </div>
          </div>

          <div className="sim__disclaimer">
            {sim.disclaimer.map((d, i) => <div key={i}>{d}</div>)}
          </div>
        </div>

        <div className="revenue__table-wrap">
          <div className="revenue__table-h">期間別の目標値（モデル値）</div>
          <table className="revenue__table">
            <thead><tr>{C.revenue.table.head.map((h, i) => <th key={i}>{h}</th>)}</tr></thead>
            <tbody>
              {C.revenue.table.rows.map((r, i) => (
                <tr key={i}>
                  {r.map((c, j) => (
                    <td key={j} className={j === 1 ? "revenue__table-em" : ""}>{c}</td>
                  ))}
                </tr>
              ))}
            </tbody>
          </table>
        </div>
        <div className="revenue__warning">
          {C.revenue.warning.map((w, i) => <div key={i}>{w}</div>)}
        </div>
        <div className="sec__cta-row">
          <a href="#contact" className="btn btn--primary">
            {C.hero.ctaPrimary}<span className="btn__arrow" aria-hidden="true">→</span>
          </a>
          <a href="#contact" className="btn btn--ghost">顧問税理士・会計担当者と一緒に相談する</a>
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Operating Flow
// ───────────────────────────────────────────────────────────────
function OperatingFlow() {
  return (
    <section id="operating" className="sec" data-screen-label="13 Operating Flow">
      <div className="container">
        <SectionHead tag={C.operating.tag} title={C.operating.title} sub={C.operating.sub} />
        <div className="opflow">
          <div className="opflow__rail" aria-hidden="true" />
          {C.operating.steps.map((s, i) => (
            <div key={s.n} className="opflow__step">
              <div className="opflow__node">{s.n}</div>
              <div className="opflow__body">
                <div className="opflow__t">{s.t}</div>
                <div className="opflow__d">{s.d}</div>
              </div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Safety
// ───────────────────────────────────────────────────────────────
function Safety() {
  return (
    <section id="safety" className="sec sec--alt" data-screen-label="14 Safety">
      <div className="container">
        <SectionHead tag={C.safety.tag} title={C.safety.title} sub={C.safety.sub} />
        <div className="safety__grid">
          {C.safety.items.map((it, i) => (
            <div key={i} className="safety__item">
              <div className="safety__item-n">{String(i + 1).padStart(2, "0")}</div>
              <div className="safety__item-t">{it.t}</div>
              <div className="safety__item-d">{it.d}</div>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// FAQ
// ───────────────────────────────────────────────────────────────
function FAQ() {
  const [open, setOpen] = useState(0);
  return (
    <section id="faq" className="sec" data-screen-label="15 FAQ">
      <div className="container">
        <SectionHead tag={C.faq.tag} title={C.faq.title} />
        <div className="faq__list">
          {C.faq.items.map((it, i) => {
            const isOpen = open === i;
            return (
              <div key={i} className={cx("faq__item", isOpen && "faq__item--open")}>
                <button className="faq__q" aria-expanded={isOpen} onClick={() => setOpen(isOpen ? -1 : i)}>
                  <span className="faq__q-n">Q.{String(i + 1).padStart(2, "0")}</span>
                  <span className="faq__q-t">{it.q}</span>
                  <span className="faq__q-icon" aria-hidden="true">
                    <svg viewBox="0 0 16 16">
                      <line x1="3" y1="8" x2="13" y2="8" stroke="currentColor" strokeWidth="1.6" />
                      <line x1="8" y1="3" x2="8" y2="13" stroke="currentColor" strokeWidth="1.6" className="faq__plus-v" />
                    </svg>
                  </span>
                </button>
                <div className="faq__a-wrap">
                  <div className="faq__a">{it.a}</div>
                </div>
              </div>
            );
          })}
        </div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Final CTA
// ───────────────────────────────────────────────────────────────
function FinalCTA() {
  return (
    <section id="contact" className="finalcta" data-screen-label="16 Final CTA">
      <div className="container finalcta__inner">
        <div className="finalcta__tag">{C.finalCta.tag}</div>
        <h2 className="finalcta__title">
          {C.finalCta.title.split("\n").map((l, i) => (
            <span key={i} className="finalcta__title-line">{l}</span>
          ))}
        </h2>
        <p className="finalcta__sub">{C.finalCta.sub}</p>
        <div className="finalcta__ctas">
          <a href="mailto:aicloud@gaming-gate.net" className="btn btn--primary-on-dark">
            {C.finalCta.primary}<span className="btn__arrow" aria-hidden="true">→</span>
          </a>
          <a href="mailto:aicloud@gaming-gate.net" className="btn btn--ghost-on-dark">{C.finalCta.secondary}</a>
          <a href="mailto:aicloud@gaming-gate.net" className="btn btn--ghost-on-dark">{C.finalCta.tertiary}</a>
        </div>
        <div className="finalcta__note">{C.finalCta.note}</div>
      </div>
    </section>
  );
}

// ───────────────────────────────────────────────────────────────
// Footer
// ───────────────────────────────────────────────────────────────
function Footer() {
  return (
    <footer className="footer">
      <div className="container footer__inner">
        <div className="footer__top">
          <div className="footer__brand">
            <div className="footer__brand-name">{C.footer.brand}</div>
            <div className="footer__brand-tag">{C.footer.tagline}</div>
            <div className="footer__brand-addr">{C.footer.address}</div>
          </div>
          <div className="footer__cols">
            {C.footer.cols.map((col, i) => (
              <div key={i} className="footer__col">
                <div className="footer__col-h">{col.h}</div>
                <ul>{col.links.map((l, j) => <li key={j}><a href="#">{l}</a></li>)}</ul>
              </div>
            ))}
          </div>
        </div>
        <div className="footer__notes">
          {C.footer.bottom.map((b, i) => <p key={i}>{b}</p>)}
        </div>
        <div className="footer__bottom">
          <div>{C.footer.copyright}</div>
          <div className="footer__lang">JA</div>
        </div>
      </div>
    </footer>
  );
}

// ───────────────────────────────────────────────────────────────
// App
// ───────────────────────────────────────────────────────────────
function App() {
  return (
    <React.Fragment>
      <Nav />
      <main>
        <Hero />
        <WhyNow />
        <Problem />
        <Solution />
        <Trust />
        <Units />
        <Partner />
        <Routing />
        <UseCases />
        <Audience />
        <Pricing />
        <Revenue />
        <OperatingFlow />
        <Safety />
        <FAQ />
        <FinalCTA />
      </main>
      <Footer />
    </React.Fragment>
  );
}

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