/* Stream Translations — section components. Exports to window. */ const { useState, useEffect, useRef } = React; /* Reveal-on-scroll wrapper */ function Reveal({ children, delay, as, className, ...rest }) { const ref = useRef(null); const [seen, setSeen] = useState(false); useEffect(() => { const el = ref.current; if (!el) return; // immediate check — anything already in view reveals at once if (el.getBoundingClientRect().top < window.innerHeight * 0.92) { setSeen(true); return; } const io = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) { setSeen(true); io.unobserve(el); } }); }, { threshold: 0.15, rootMargin: "0px 0px -8% 0px" }); io.observe(el); // safety fallback: never leave content hidden const fb = setTimeout(() => setSeen(true), 2200); return () => { io.disconnect(); clearTimeout(fb); }; }, []); const Tag = as || "div"; const cls = ["reveal", delay ? "d" + delay : "", seen ? "in" : "", className || ""].join(" ").trim(); return {children}; } const Arrow = () => ( ); /* ---------- Header ---------- */ function Header({ c, lang, setLang, scrolled, overHero, onNav, onContact }) { return ( window.scrollTo({ top: 0, behavior: "smooth" })}> S{c.brand} {c.nav.map((n) => ( onNav(n.id)}>{n.label} ))} setLang("ja")}>JA setLang("en")}>EN {c.navCta} ); } /* ---------- Hero ---------- */ function Hero({ c, variant, parallax, onContact, scrollLabel }) { return ( {c.hero.eyebrow} {c.hero.title} {c.hero.lede} {c.hero.cta} {c.hero.ctaSub} {scrollLabel} ); } /* ---------- Problem ---------- */ function Problem({ c }) { return ( {c.problem.eyebrow} {c.problem.title} {c.problem.items.map((it, i) => ( {it.k} {it.t} {it.d} ))} ); } /* ---------- Strengths ---------- */ function Strengths({ c }) { return ( {c.strengths.eyebrow} {c.strengths.title} {c.strengths.items.map((it, i) => ( {it.k} {it.t} {it.d} ))} ); } /* ---------- Scope ---------- */ function Scope({ c }) { const s = c.scope; return ( {s.eyebrow} {s.title} {s.langs.label} {s.langs.items.map((x, i) => {x})} {s.industries.label} {s.industries.items.map((x) => {x})} {s.docs.label} {s.docs.items.map((x) => {x})} {s.docs.body} {s.langs.items.join(" ・ ")} ); } /* ---------- Work ---------- */ function Work({ c }) { const w = c.work; return ( {w.eyebrow} {w.title} {w.body} {w.stats.map((st) => ( {st.v} {st.l} ))} {w.sectors.map((x) => {x})} {w.note} ); } /* ---------- Process ---------- */ function Process({ c }) { const p = c.process; return ( {p.eyebrow} {p.title} {p.steps.map((st, i) => ( {st.k} {st.t} {st.d} ))} {p.note} ); } /* ---------- FAQ ---------- */ function Faq({ c }) { const [open, setOpen] = useState(0); return ( {c.faq.eyebrow} {c.faq.title} {c.faq.items.map((it, i) => { const isOpen = open === i; return ( setOpen(isOpen ? -1 : i)} aria-expanded={isOpen}> {it.q} {it.a} ); })} ); } Object.assign(window, { Reveal, Arrow, Header, Hero, Problem, Strengths, Scope, Work, Process, Faq });
{c.hero.eyebrow}
{c.hero.lede}
{c.problem.eyebrow}
{it.d}
{c.strengths.eyebrow}
{s.eyebrow}
{s.langs.items.join(" ・ ")}
{w.eyebrow}
{w.body}
{w.note}
{p.eyebrow}
{st.d}
{c.faq.eyebrow}