/* global React */ const { useState, useEffect, useRef } = React; // ========== Reveal on scroll ========== function Reveal({ children, delay = 0, className = "" }) { const ref = useRef(null); const [seen, setSeen] = useState(false); useEffect(() => { const el = ref.current; if (!el) return; // Fallback: show after a short delay even if IO doesn't fire const fallback = setTimeout(() => setSeen(true), 1200 + delay); if (typeof IntersectionObserver === "undefined") { setSeen(true); return () => clearTimeout(fallback); } const io = new IntersectionObserver( (entries) => { entries.forEach((e) => { if (e.isIntersecting) { clearTimeout(fallback); setTimeout(() => setSeen(true), delay); io.unobserve(el); } }); }, { threshold: 0.05, rootMargin: "0px 0px -40px 0px" } ); io.observe(el); return () => { io.disconnect(); clearTimeout(fallback); }; }, [delay]); return (
);
}
// ========== Nav ==========
function Nav({ onContactClick }) {
const [scrolled, setScrolled] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 20);
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, []);
return (
);
}
// ========== Hero ==========
function Hero() {
return (
アイデアと仕組みでファンを育て、忙しい毎日に「余白」を生み出します。
「インスタやLINE、やったほうがいいのは分かってるんだけど…」
これまで、そんな経営者さんの悩みをたくさん聞いてきました。
苦手なことや、時間がなくてできないことは、僕に任せてください。一緒に仕組みを作り、少しずつ成果が出てくると、苦痛だった「やらなきゃ」が、ファンと繋がる「やりたい」に変わっていきます。
本業もSNSも、もっと無理なく楽しめるペースを一緒に見つけましょう。
{p.desc}