// ─── Top navigation + footer ────────────────────────────────────
const NAV_ITEMS = [
{ id: "home", label: "トップ", labelEn: "Home" },
{ id: "services", label: "サービス", labelEn: "Services" },
{ id: "wp-maint", label: "WP保守", labelEn: "Maintenance" },
{ id: "seo", label: "SEO対策", labelEn: "SEO" },
{ id: "works", label: "実績", labelEn: "Works" },
{ id: "company", label: "会社概要", labelEn: "Company" }];
function TopNav({ page, go }) {
const [scrolled, setScrolled] = React.useState(false);
const [menuOpen, setMenuOpen] = React.useState(false);
React.useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 10);
window.addEventListener("scroll", onScroll, { passive: true });
onScroll();
return () => window.removeEventListener("scroll", onScroll);
}, []);
React.useEffect(() => { setMenuOpen(false); }, [page]);
React.useEffect(() => {
document.body.style.overflow = menuOpen ? "hidden" : "";
return () => { document.body.style.overflow = ""; };
}, [menuOpen]);
const nav = (pageId, opts) => { setMenuOpen(false); go(pageId, opts); };
return (
<>
nav("home")} className="topnav__logo-btn">
{NAV_ITEMS.map((it) => {
const active = page === it.id;
return (
nav(it.id)}
className={`nav-item${active ? " nav-item--active" : ""}`}>
{it.label}
{active && }
);
})}
nav("contact", { tab: "form" })} className="btn btn-ghost btn-sm hide-mobile">
無料相談
nav("contact", { tab: "form" })} className="btn btn-primary btn-sm hide-mobile">
お問い合わせ
setMenuOpen(true)} className="topnav__hamburger" aria-label="メニューを開く">
{menuOpen &&
setMenuOpen(false)} />}
setMenuOpen(false)} className="mobile-menu__close" aria-label="閉じる">✕
{NAV_ITEMS.map(it => (
nav(it.id)}
className={`mobile-menu__item${page === it.id ? " mobile-menu__item--active" : ""}`}>
{it.labelEn}
{it.label}
))}
nav("contact", { tab: "form" })} className="btn btn-accent btn-lg" style={{ width: "100%" }}>
無料相談・お問い合わせ
>
);
}
function Logo() {
return (
);
}
function Footer({ go }) {
return (
Webの力で、価値ある未来を 共に創る。
平日 10:00–16:00
© 2026 UIARB LLC. All rights reserved.
PRIVACY · TERMS · SITEMAP
);
}
function FooterCol({ label, items, go, children }) {
return (
{label}
{children ||
{items.map((it, i) =>
go(it.p)} className="footer__col-btn">
{it.t}
)}
}
);
}
// Big CTA block used at the bottom of every page
function BigCTA({ go, tweaks }) {
const strong = tweaks?.ctaStrength === "strong";
const subtle = tweaks?.ctaStrength === "subtle";
return (
{!subtle &&
}
GET IN TOUCH
まずは、お話から。
30分の無料相談で、現状の課題・予算・ゴールを整理します。
その場での見積り・営業は一切行いません。
go("contact", { tab: "form" })} className={`btn ${strong ? "btn-lg" : ""} btn-accent`}>
無料相談を予約する
go("contact", { tab: "form" })} className={`btn ${subtle ? "btn-ghost" : "btn-dark"} ${strong ? "btn-lg" : ""}`}>
見積りシミュレーター
3営業日以内にご返信しています
);
}
function ScrollToTop() {
const [visible, setVisible] = React.useState(false);
React.useEffect(() => {
const onScroll = () => setVisible(window.scrollY > 400);
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, []);
return (
window.scrollTo({ top: 0, behavior: "smooth" })}
aria-label="ページトップへ戻る"
>
);
}
Object.assign(window, { TopNav, Footer, BigCTA, ScrollToTop, NAV_ITEMS });