import React, { useState, useEffect, useRef } from 'react'; import { Dumbbell, GraduationCap, Briefcase, Trophy, ChevronRight, Menu, X, CheckCircle, Activity, Users, Quote, ArrowRight, Instagram, Facebook, Youtube, Play, Plus, Minus, ArrowUpRight, Star, MapPin, Clock, CalendarCheck, TrendingUp, Award, Zap } from 'lucide-react'; const App = () => { const [currentDesign, setCurrentDesign] = useState('A'); // A, B, C const [isMenuOpen, setIsMenuOpen] = useState(false); const [scrollY, setScrollY] = useState(0); const [selectedService, setSelectedService] = useState(null); // For Design C Modal const [count, setCount] = useState(0); // For Design A Counter // Scroll Handler useEffect(() => { const handleScroll = () => setScrollY(window.scrollY); window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); // Counter Animation for Design A useEffect(() => { if (currentDesign === 'A') { let start = 0; const end = 10000; const duration = 2000; const increment = end / (duration / 16); const timer = setInterval(() => { start += increment; if (start >= end) { setCount(end); clearInterval(timer); } else { setCount(Math.floor(start)); } }, 16); return () => clearInterval(timer); } }, [currentDesign]); // --- Design Configurations --- const designs = { A: { id: 'A', name: "案1:Ultimate Trust (çœŸã®æŽ¨å¥¨)", keyword: "Intellectual / Depth / High-End", theme: "bg-slate-50 text-slate-800", font: "font-sans", }, B: { id: 'B', name: "案2:Editorial (雑誌風)", keyword: "Elegant / Mincho / Narrative", theme: "bg-[#fcfaf7] text-[#3a342f]", font: "font-serif", }, C: { id: 'C', name: "案3:Brutalist (è¡æ’ƒ)", keyword: "Impact / Neon / Interactive", theme: "bg-[#050505] text-[#eeeeee]", font: "font-sans tracking-tight", } }; const theme = designs[currentDesign]; // --- Data --- const serviceData = [ { id: '01', title: "Personal Training", jp: "パーソナルトレーニング", shortDesc: "éª¨æ ¼ã‹ã‚‰æ•´ãˆã‚‹ã€ä¸€ç”Ÿãƒ¢ãƒŽã®èº«ä½“ã¥ãり。", fullDesc: "解剖å¦ã«åŸºã¥ã„ãŸã‚ªãƒ¼ãƒ€ãƒ¼ãƒ¡ã‚¤ãƒ‰ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã€ã‚ãªãŸã®èº«ä½“ã®ã€Œç™–ã€ã‚’見抜ãã€æ ¹æœ¬ã‹ã‚‰æ”¹å–„ã—ã¾ã™ã€‚å˜ãªã‚‹ãƒ€ã‚¤ã‚¨ãƒƒãƒˆã§ã¯ãªãã€ä¸€ç”Ÿå‹•ã‘る機能的ãªèº«ä½“ã¥ãりを目指ã—ã¾ã™ã€‚", price: "Â¥11,000 / 60min", features: ["éª¨æ ¼è©•ä¾¡", "姿勢改善", "食事指導(Option)"], img: "https://images.unsplash.com/photo-1534438327276-14e5300c3a48?q=80&w=2070&auto=format&fit=crop" }, { id: '02', title: "Trainer Education", jp: "トレーナー育æˆã‚¹ã‚¯ãƒ¼ãƒ«", shortDesc: "é¸ã°ã‚Œã‚‹ãƒˆãƒ¬ãƒ¼ãƒŠãƒ¼ã«ãªã‚‹ãŸã‚ã®å®Ÿå¦ã€‚", fullDesc: "è³‡æ ¼å–å¾—ã¯ã‚´ãƒ¼ãƒ«ã§ã¯ã‚りã¾ã›ã‚“。ç¾å ´ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®çµæžœã‚’出ã›ã‚‹ã€Œé¸ã°ã‚Œã‚‹ãƒˆãƒ¬ãƒ¼ãƒŠãƒ¼ã€ã«ãªã‚‹ãŸã‚ã®å®Ÿè·µçš„ãªçŸ¥è˜ã¨æŠ€è¡“ã‚’ã€å°‘人数制ã§å¾¹åº•çš„ã«æŒ‡å°Žã—ã¾ã™ã€‚", price: "Â¥330,000 / 3ヶ月", features: ["実技指導", "集客ノウãƒã‚¦", "å’æ¥å¾Œã‚µãƒãƒ¼ãƒˆ"], img: "https://images.unsplash.com/photo-1517963879466-db11b3872569?q=80&w=2070&auto=format&fit=crop" }, { id: '03', title: "Corporate Wellness", jp: "法人å‘ã‘å¥åº·çµŒå–¶", shortDesc: "組織ã®ãƒ‘フォーマンスを最大化ã™ã‚‹ã€‚", fullDesc: "従æ¥å“¡ã®å¥åº·ã¯ã€ä¼æ¥ã®è³‡ç”£ã§ã™ã€‚オフィスã§ã®å‡ºå¼µã‚¹ãƒˆãƒ¬ãƒƒãƒè¬›åº§ã‚„ã€å¥åº·ãƒªãƒ†ãƒ©ã‚·ãƒ¼å‘上セミナーを通ã˜ã¦ã€çµ„ç¹”ã®ãƒ‘フォーマンス最大化を支æ´ã—ã¾ã™ã€‚", price: "è¦ãŠè¦‹ç©ã‚‚り", features: ["出張レッスン", "å¥åº·ã‚»ãƒŸãƒŠãƒ¼", "ストレスãƒã‚§ãƒƒã‚¯"], img: "https://images.unsplash.com/photo-1574680096145-d05b474e2155?q=80&w=2069&auto=format&fit=crop" }, { id: '04', title: "Athlete Performance", jp: "アスリート指導", shortDesc: "å‹ã¤ãŸã‚ã®ãƒ•ィジカル戦略。", fullDesc: "トップアスリートã®å¸¯åŒçµŒé¨“ã‚’æ´»ã‹ã—ã€ç«¶æŠ€ç‰¹æ€§ã«åˆã‚ã›ãŸãƒ•ィジカル強化ã€å‹•作解æžã€ã‚³ãƒ³ãƒ‡ã‚£ã‚·ãƒ§ãƒ‹ãƒ³ã‚°ç®¡ç†ã‚’行ã„ã¾ã™ã€‚怪我をã—ãªã„å¼·ã„身体を作りã¾ã™ã€‚", price: "è¦ç›¸è«‡ (ãƒãƒ¼ãƒ 契約)", features: ["動作解æž", "怪我予防", "ピーã‚ング"], img: "https://images.unsplash.com/photo-1434608519344-49d77a699ded?q=80&w=2074&auto=format&fit=crop" }, ]; // --- Helper Components --- const FadeIn = ({ children, delay = 0, className = "" }) => { const [isVisible, setIsVisible] = useState(false); const domRef = useRef(); useEffect(() => { const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if(entry.isIntersecting) setIsVisible(true); }); }, { threshold: 0.1 }); if (domRef.current) observer.observe(domRef.current); return () => observer.disconnect(); }, []); return (
{children}
); }; const ServiceModal = () => { if (!selectedService) return null; return (
setSelectedService(null)}>
setSelectedService(null)} className="absolute top-0 right-0 p-6 z-20 hover:text-[#ccff00] transition-colors">
/{selectedService.id}
{selectedService.fullDesc}
Features
料金目安 {selectedService.price}
ã“ã®ãƒ—ランを予約ã™ã‚‹
); }; // --- HEADER --- const Header = () => { if (currentDesign === 'C') { return (
Morikawa.JP
{['Concept', 'Service', 'Voice', 'FAQ'].map((item) => ( {item} ))} Contact
setIsMenuOpen(!isMenuOpen)}> {isMenuOpen ? :
}
); } else if (currentDesign === 'B') { return (
50 ? 'bg-[#fcfaf7]/95 py-3 border-b border-[#e6e2dd]' : 'bg-transparent py-8'}`}>
MORIKAWA
ç§ã«ã¤ã„㦠æä¾›ã‚µãƒ¼ãƒ“ス ãŠå®¢æ§˜ã®å£° ãŠå•ã„åˆã‚ã›
setIsMenuOpen(!isMenuOpen)}>
); } else { // A: Ultimate Header return (
50 ? 'top-2' : 'top-6'}`}>
50 ? 'py-2' : 'py-3'}`}>
M
MORIKAWA.JP
{['Concept', 'Service', 'Voice', 'Contact'].map(item => ( {item} ))}
体験予約 setIsMenuOpen(!isMenuOpen)}>
); } }; // --- HERO SECTION --- const Hero = () => { if (currentDesign === 'C') { return (
Professional Physical Coach
「ケガã§è‹¦ã—む人をゼãƒã«ã™ã‚‹ã€
解剖å¦ã¨ãƒ‡ãƒ¼ã‚¿ã«åŸºã¥ã„ãŸæˆ¦ç•¥çš„アプãƒãƒ¼ãƒã§ã€
ã‚ãªãŸã®èº«ä½“機能を極é™ã¾ã§å¼•ã出ã™ã€‚
体験セッションを予約
Personal Training / Performance Strategy / Rehabilitation / Injury Prevention
); } else if (currentDesign === 'B') { return (
機能美
身体ã¨å‘ãåˆã†ã€é™ã‹ãªæ™‚間。
ãŸã ç‹è‚‰ã‚’ã¤ã‘ã‚‹ã ã‘ã§ã¯ã‚りã¾ã›ã‚“。
解剖å¦ã«åŸºã¥ãã€ã‚ãªãŸãŒæœ¬æ¥æŒã£ã¦ã„ã‚‹
「機能美ã€ã‚’呼ã³è¦šã¾ã™ã€‚
一生涯ã€å¿ƒåœ°ã‚ˆãå‹•ã‘る身体ã¸ã€‚
コンセプトをèªã‚€
"身体ã¯é‚ã®æ¥½å™¨ã§ã‚る。
ãã®éŸ³è‰²ã‚’æ•´ãˆã‚‹ã®ãŒç§ã®ä»•事ã§ã™ã€‚"
æ£®å· æ•之
); } else { // A: Ultimate Bento Hero (Overhauled) return (
{/* Advanced Background */}
{/* 1. Main Visual & Copy - The "Glass" Card */}
{/* Simulated Parallax Image */}
{/* Badge */}
JSPO-AT å…¬èªã‚¢ã‚¹ãƒ¬ãƒ†ã‚£ãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ãƒŠãƒ¼
æ„Ÿè¦šã‚„æ ¹æ€§è«–ã ã‘ã®æŒ‡å°Žã¯è¡Œã„ã¾ã›ã‚“。
解剖å¦ãƒ»ãƒã‚¤ã‚ªãƒ¡ã‚«ãƒ‹ã‚¯ã‚¹ã«åŸºã¥ã„ãŸã€Œãƒã‚¸ã‚«ãƒ«ãªã‚¢ãƒ—ãƒãƒ¼ãƒã€ã§ã€ã‚ãªãŸã®ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã‚’最çŸè·é›¢ã§æœ€å¤§åŒ–ã—ã¾ã™ã€‚
体験トレーニングを予約 詳ã—ã見る
{/* 2. Trainer Profile - Interactive Card */}
Representative
æ£®å· æ•之
TOSHIYUKI MORIKAWA
{/* 3. Live Stats - Animated */}
{count.toLocaleString()} +
Total Sessions
{/* 4. Latest News - Minimal */}
NEWS
2024.04.01
Webサイトをリニューアルオープンã—ã¾ã—ãŸã€‚春ã®ä½“験ã‚ャンペーン実施ä¸ã€‚
); } }; // --- ABOUT SECTION --- const About = () => { const specs = [ "日本スãƒãƒ¼ãƒ„å”ä¼šå…¬èª AT", "NSCAèªå®š CSCS", "ViPR èªå®šã‚¤ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼" ]; if (currentDesign === 'C') { return (
ケガã§è‹¦ã—む人をã€
ゼãƒã«ã™ã‚‹ã€‚
「ãªãœã€ã‚±ã‚¬ã‚’ã™ã‚‹ã®ã‹ï¼Ÿã€
ãã®ç”ãˆã¯å…¨ã¦è§£å‰–å¦ã«ã‚る。
精神論ã¯è¦ã‚‰ãªã„。
å¿…è¦ãªã®ã¯ã€èº«ä½“ã®æ§‹é€ ã«åŸºã¥ã„ãŸ
æ£ã—ã„å‹•ãã®å†æ•™è‚²ã 。
Read Full Profile
View Method
); } else if (currentDesign === 'B') { return (
01
Toshiyuki Morikawa
Head Trainer
å¦ç”Ÿæ™‚代ã®åº¦é‡ãªã‚‹æ€ªæˆ‘。リãƒãƒ“リã®è¾›ã•。「ãªãœè‡ªåˆ†ã ã‘?ã€ã¨ã„ã†è‘›è—¤ã€‚ãれãŒç§ã®åŽŸç‚¹ã§ã™ã€‚ç—›ã¿ã‚„ä¸èª¿ã¯ã€èº«ä½“ã‹ã‚‰ã®ã‚µã‚¤ãƒ³ã§ã™ã€‚
解剖å¦çš„ãªè¦–点ã§ãã®å£°ã‚’è´ãã€ç„¡ç†ãªãã€ç¾Žã—ãã€æ©Ÿèƒ½çš„ãªèº«ä½“ã¸ã¨å°ŽããŠæ‰‹ä¼ã„ã‚’ã„ãŸã—ã¾ã™ã€‚
ä¿æœ‰è³‡æ ¼
{specs.map((s, i) => ({s}))}
); } else { // A: Ultimate Bento About return (
{/* Left: Enhanced Image Composition */}
{/* Floating Glass Card */}
Experience
12 Years
{/* Right: Text Content */}
Our Mission
ç§ã¯å¦ç”Ÿæ™‚代ã€ã‚±ã‚¬ã§é¸æ‰‹ç”Ÿå‘½ã‚’è„…ã‹ã•れる経験をã—ã¾ã—ãŸã€‚ ãã®æ™‚感ã˜ãŸã€Œæ£ã—ã„知è˜ãŒã‚れã°é˜²ã’ãŸã¯ãšã€ã¨ã„ã†æ‚”ã—ã•ãŒã€ç§ã®åŽŸå‹•åŠ›ã§ã™ã€‚
解剖å¦ã«åŸºã¥ã‹ãªã„自己æµã®ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚°ã¯ã€æ™‚ã«èº«ä½“を壊ã—ã¾ã™ã€‚ ç§ãŸã¡ã¯ã€ç§‘å¦çš„æ ¹æ‹ ã«åŸºã¥ã„ãŸã€Œæ£ã—ã„å‹•ãã€ã‚’インストールã—ã€ä¸€ç”Ÿæ¶¯ã€ç—›ã¿ãªãå‹•ã‘る身体ã¥ãりをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
{specs.map((s,i) => (
{s}
))}
); } }; // --- SERVICES SECTION --- const Services = () => { if (currentDesign === 'C') { return (
Menu
{serviceData.map((s) => (
setSelectedService(s)} className="group relative border-b border-black last:border-b-0 py-12 px-6 md:px-12 hover:bg-white transition-colors cursor-pointer overflow-hidden">
/{s.id}
{s.jp}
))}
); } else if (currentDesign === 'B') { return (
æä¾›ãƒ—ãƒã‚°ãƒ©ãƒ
{serviceData.map((s, i) => (
{s.id}
{s.fullDesc}
詳細を見る
))}
); } else { // A: Ultimate Bento Services return (
Our Services
View All
{serviceData.map((s, i) => (
{/* Top Image Area */}
{s.id}
{s.title}
{s.shortDesc}
{s.price}
詳細を見る
))}
); } }; // --- VOICES & FOOTER --- const VoicesAndFooter = () => { if (currentDesign === 'C') { return ( <>
{[1,2].map(i => (
Verified
{[1,2,3,4,5].map(star => )}
é•·å¹´ã®è…°ç—›ãŒè§£æ¶ˆã—ãŸã ã‘ã§ãªãã€ç«¶æŠ€ãƒ‘ãƒ•ã‚©ãƒ¼ãƒžãƒ³ã‚¹ã®æ•°å€¤ãŒæ˜Žã‚‰ã‹ã«å‘上ã—ã¾ã—ãŸã€‚
ç”°ä¸ å¥ä¸€ 様
30代 / アスリート
))}
Tokyo, Japan
© 2024 MORIKAWA TOSHIYUKI.
) } else if (currentDesign === 'B') { return ( <>
Testimonials
{[1,2].map(i => (
“
å…ˆç”Ÿã®æŒ‡å°Žã®ãŠã‹ã’ã§ã€è‡ªåˆ†ã®èº«ä½“ã¨å‘ãåˆã†æ™‚é–“ãŒå¥½ãã«ãªã‚Šã¾ã—ãŸã€‚
30代 女性 / 会社員
))}
MORIKAWA.JP
機能的ãªç¾Žã—ã•ã¨ã€ä¸€ç”Ÿæ¶¯å‹•ã‘る身体を。
© 2024 Morikawa Toshiyuki
) } else { // A: Ultimate Bento Footer return ( <>
Testimonials
{[1,2].map(i => (
{[1,2,3,4,5].map(s => )}
è«–ç†çš„ãªæŒ‡å°Žã§ã€ãªãœç—›ã¿ãŒå‡ºã‚‹ã®ã‹ãŒç†è§£ã§ãã¾ã—ãŸã€‚日常生活ã§ã®å§¿å‹¢ã‚‚æ„è˜ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã€ã‚´ãƒ«ãƒ•ã®é£›è·é›¢ã‚‚伸ã³ã¾ã—ãŸã€‚
30代 男性 / 経営者
))}
{/* Background Decor */}
ã‚ãªãŸã®èº«ä½“ã®ç¾çŠ¶ã‚’æ£ã—ã評価ã—ã€æœ€é©ãªæ”¹å–„ãƒ—ãƒ©ãƒ³ã‚’ã”ææ¡ˆã—ã¾ã™ã€‚
ç„¡ç†ãªå‹§èª˜ã¯ä¸€åˆ‡ã”ã–ã„ã¾ã›ã‚“。
今ã™ã予約ã™ã‚‹
M
MORIKAWA.JP
ç§‘å¦çš„æ ¹æ‹ ã«åŸºã¥ã„ãŸãƒ‘ーソナルトレーニングã§ã€ä¸€ç”Ÿæ¶¯å‹•ã‘る機能的ãªèº«ä½“ã¥ãりをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
© 2024 MORIKAWA TOSHIYUKI. All Rights Reserved.
プライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼ 特定商å–引法ã«åŸºã¥ã表記
) } } return (
{/* Design Switcher */}
Design Mode {Object.keys(designs).map((key) => ( setCurrentDesign(key)} className={`group flex items-center gap-3 px-4 py-3 rounded-xl shadow-2xl backdrop-blur-xl border transition-all duration-300 w-64 text-left relative overflow-hidden ${ currentDesign === key ? 'bg-indigo-600 border-indigo-500 text-white scale-105' : 'bg-white/80 border-white/50 text-gray-800 hover:bg-white hover:scale-105' }`} >
{key}
{designs[key].name} {designs[key].keyword}
{currentDesign === key &&
} ))}
{/* --- Design C Modal --- */} {currentDesign === 'C' && }
); }; export default App;