import React, { useState, useEffect, useRef } from 'react'; import { ArrowRight, Menu, X, ArrowUpRight, Play, Heart, BookOpen, Activity, Sparkles, MessageCircle, Send } from 'lucide-react'; // --- Gemini API Configuration --- const apiKey = ""; // API Key is injected at runtime const callGemini = async (userPrompt) => { const systemPrompt = ` あなたは『ANYO式リフレクソロジー協会』の熟練したAIセラピストです。 ユーザーの入力(体調、悩み、気分の不調など)に基づいて、以下の3つのセクションで構成された、上品で癒やしのある日本語の回答を作成してください。 決して医療的な診断はせず、あくまでリフレクソロジーの観点からのアドバイスに留めてください。 1. 【足からのナラティブ】 足が持ち主(ユーザー)に対して語りかけるような、詩的で少し神秘的なメッセージ。 例:「私たちは、あなたが言えなかった言葉を重さとして受け止めています...」 2. 【セルフケアの処方箋】 具体的な足の反射区(指先、土踏まず、かかと等)のマッサージ方法や、日常生活で取り入れられる簡単なアドバイス。 3. 【あなたへの招待状】 ユーザーの関心度合いに合わせて、以下のいずれかのコースを優しく提案してください。 - 初心者・ケア重視なら「家庭療法師コース」 - 本格的に学びたいなら「セラピストコース」 - 深い不調なら「メディカルコース」 トーン&マナー: - 文体は「〜ですよ」「〜しましょう」といった丁寧で落ち着いた敬語。 - 漢字とひらがなのバランスを美しく。 - ユーザーを包み込むような優しさを持つこと。 `; const payload = { contents: [{ parts: [{ text: userPrompt }] }], systemInstruction: { parts: [{ text: systemPrompt }] }, generationConfig: { temperature: 0.7, maxOutputTokens: 800, } }; const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); const maxRetries = 5; let retries = 0; while (retries < maxRetries) { try { const response = await fetch( `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) } ); if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`); const data = await response.json(); return data.candidates?.[0]?.content?.parts?.[0]?.text || "申し訳ありません。足の声を聞き取ることができませんでした。もう一度お試しください。"; } catch (error) { console.error("API Error:", error); retries++; if (retries === maxRetries) return "アクセスが集中しており、現在AIセラピストが応答できません。しばらく経ってから再度お試しください。"; await delay(Math.pow(2, retries) * 1000); } } }; // --- Custom CSS & Fonts Injection --- const GlobalStyles = () => ( ); // --- Custom Hook for Scroll Animations --- const useOnScreen = (options) => { const ref = useRef(null); const [visible, setVisible] = useState(false); useEffect(() => { const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { setVisible(true); observer.unobserve(entry.target); } }, options); if (ref.current) { observer.observe(ref.current); } return () => { if (ref.current) observer.unobserve(ref.current); }; }, [ref, options]); return [ref, visible]; }; // --- Custom Cursor Component --- const CustomCursor = () => { const dotRef = useRef(null); const outlineRef = useRef(null); useEffect(() => { const moveCursor = (e) => { const { clientX, clientY } = e; if(dotRef.current) { dotRef.current.style.left = `${clientX}px`; dotRef.current.style.top = `${clientY}px`; } if(outlineRef.current) { outlineRef.current.animate({ left: `${clientX}px`, top: `${clientY}px` }, { duration: 500, fill: "forwards" }); } }; const addHoverClass = () => outlineRef.current?.classList.add('hovered'); const removeHoverClass = () => outlineRef.current?.classList.remove('hovered'); document.addEventListener('mousemove', moveCursor); const hoverables = document.querySelectorAll('a, button, .hover-trigger'); hoverables.forEach(el => { el.addEventListener('mouseenter', addHoverClass); el.addEventListener('mouseleave', removeHoverClass); }); // Dynamic check for new elements const observer = new MutationObserver(() => { const newHoverables = document.querySelectorAll('a, button, .hover-trigger'); newHoverables.forEach(el => { el.removeEventListener('mouseenter', addHoverClass); // prevent dupes el.removeEventListener('mouseleave', removeHoverClass); el.addEventListener('mouseenter', addHoverClass); el.addEventListener('mouseleave', removeHoverClass); }); }); observer.observe(document.body, { childList: true, subtree: true }); return () => { document.removeEventListener('mousemove', moveCursor); hoverables.forEach(el => { el.removeEventListener('mouseenter', addHoverClass); el.removeEventListener('mouseleave', removeHoverClass); }); observer.disconnect(); }; }, []); return ( <>
); }; // --- Components --- const Nav = () => { const [isOpen, setIsOpen] = useState(false); const [scrolled, setScrolled] = useState(false); useEffect(() => { const handleScroll = () => setScrolled(window.scrollY > 50); window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); return ( ); }; const Hero = () => { const [ref, visible] = useOnScreen({ threshold: 0.1 }); return (
{/* Abstract Background Elements */}

PREVENTIVE MEDICINE REFLEXOLOGY

足から読み解く、 心と身体の Narrative

足裏は、あなただけの地図。内臓の疲れから、言葉にできない心の傷、そして未来の健康まで。私たちは「足」を通じて、その人の全てを読み解き、本来あるべき健やかさへと導きます。

AI FOOT NARRATIVE
{/* Image Frame */}
Foot Reflexology
• READ THE BODY • HEAL THE MIND
); }; const Philosophy = () => { const [ref, visible] = useOnScreen({ threshold: 0.2 }); return (
01

病気になる前の "しるし"に気づく

ANYO式リフレクソロジーは、単なるリラクゼーションではありません。 足裏に現れる、ほくろ、しわ、角質、色...それらは身体からの無言のメッセージです。

「一家にひとり足揉み師を」。
私たちは、足を通じて未病を防ぎ、 本来の生命力を呼び覚ます技術を伝承しています。

{/* Scrolling Text Banner */}
HOLISTIC ANALYSIS PREVENTIVE CARE MENTAL HEALTH FAMILY THERAPY TRADITIONAL MEDICINE HOLISTIC ANALYSIS PREVENTIVE CARE MENTAL HEALTH
); }; const AnalysisCard = ({ title, desc, icon: Icon, delay }) => { const [ref, visible] = useOnScreen({ threshold: 0.2 }); return (

{title}

{desc}

); }; const Method = () => { return (

Analytical Method

足から読み取れる、3つの領域

Massage
分析・施術の様子を見る
); }; const AISection = () => { const [input, setInput] = useState(''); const [response, setResponse] = useState(''); const [loading, setLoading] = useState(false); const [ref, visible] = useOnScreen({ threshold: 0.1 }); const handleSubmit = async (e) => { e.preventDefault(); if (!input.trim()) return; setLoading(true); setResponse(''); const res = await callGemini(input); setResponse(res); setLoading(false); }; return (
{/* Decor */}
Powered by Gemini

足の声に、
耳を澄ませる。

AI足裏ナラティブ診断へようこそ。
今のあなたの心身の状態、気になっている不調、あるいはふと感じる違和感を教えてください。
ANYO式の視点から、足が語りかけるメッセージと、明日への処方箋をお届けします。