MRKW's picture
Add 2 files
8806957 verified
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>フェスルートプランナー - 音楽フェス最適ルート提案アプリ</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.gradient-bg {
background: linear-gradient(135deg, #6b21a8 0%, #1e40af 100%);
}
.schedule-item {
position: relative;
padding-left: 2.5rem;
}
.schedule-item:before {
content: "";
position: absolute;
left: 0.75rem;
top: 0;
height: 100%;
width: 2px;
background-color: #e5e7eb;
}
.schedule-dot {
position: absolute;
left: 0.5rem;
top: 0.5rem;
width: 1rem;
height: 1rem;
border-radius: 9999px;
border: 3px solid #4f46e5;
background-color: white;
}
.artist-card:hover {
transform: translateY(-4px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.food-card:hover {
transform: translateY(-4px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.fade-in {
animation: fadeIn 0.5s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body class="bg-gray-50 min-h-screen">
<!-- ヘッダー -->
<header class="gradient-bg text-white shadow-lg">
<div class="container mx-auto px-4 py-6">
<div class="flex justify-between items-center">
<div class="flex items-center space-x-2">
<i class="fas fa-music text-2xl"></i>
<h1 class="text-2xl font-bold">フェスルートプランナー</h1>
</div>
<button class="bg-white text-purple-800 px-4 py-2 rounded-full font-semibold hover:bg-purple-100 transition">
ログイン
</button>
</div>
<p class="mt-2 text-purple-200">音楽フェスを最大限楽しむための最適ルートを提案</p>
</div>
</header>
<!-- メインコンテンツ -->
<main class="container mx-auto px-4 py-8">
<!-- ステップ表示 -->
<div class="flex justify-center mb-8">
<div class="flex items-center">
<div class="flex flex-col items-center">
<div class="w-10 h-10 rounded-full bg-purple-600 text-white flex items-center justify-center font-bold">1</div>
<span class="mt-2 text-sm font-medium text-purple-600">基本情報</span>
</div>
<div class="w-16 h-1 bg-gray-300 mx-2"></div>
<div class="flex flex-col items-center">
<div class="w-10 h-10 rounded-full bg-gray-300 text-white flex items-center justify-center font-bold">2</div>
<span class="mt-2 text-sm font-medium text-gray-500">アーティスト選択</span>
</div>
<div class="w-16 h-1 bg-gray-300 mx-2"></div>
<div class="flex flex-col items-center">
<div class="w-10 h-10 rounded-full bg-gray-300 text-white flex items-center justify-center font-bold">3</div>
<span class="mt-2 text-sm font-medium text-gray-500">飲食店選択</span>
</div>
<div class="w-16 h-1 bg-gray-300 mx-2"></div>
<div class="flex flex-col items-center">
<div class="w-10 h-10 rounded-full bg-gray-300 text-white flex items-center justify-center font-bold">4</div>
<span class="mt-2 text-sm font-medium text-gray-500">確認</span>
</div>
</div>
</div>
<!-- 基本情報フォーム -->
<div class="bg-white rounded-xl shadow-md p-6 mb-8 fade-in">
<h2 class="text-xl font-bold mb-4 text-gray-800 flex items-center">
<i class="fas fa-user-circle text-purple-600 mr-2"></i>基本情報
</h2>
<div class="grid md:grid-cols-2 gap-6">
<!-- 名前 -->
<div>
<label class="block text-gray-700 font-medium mb-2" for="name">お名前</label>
<input type="text" id="name" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500">
</div>
<!-- 参加日 -->
<div>
<label class="block text-gray-700 font-medium mb-2" for="date">参加日</label>
<select id="date" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="day1">1日目 (7月28日)</option>
<option value="day2">2日目 (7月29日)</option>
<option value="day3">3日目 (7月30日)</option>
<option value="all">全日程参加</option>
</select>
</div>
<!-- 好きな音楽ジャンル -->
<div class="md:col-span-2">
<label class="block text-gray-700 font-medium mb-2">好きな音楽ジャンル (複数選択可)</label>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-2">
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>ロック</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>エレクトロニック</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>ヒップホップ</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>ジャズ</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>ポップス</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>R&B / ソウル</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>フォーク</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>レゲエ / スカ</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>ワールドミュージック</span>
</label>
<label class="flex items-center space-x-2">
<input type="checkbox" class="rounded text-purple-600 focus:ring-purple-500">
<span>その他</span>
</label>
</div>
</div>
<!-- 参加スタンス -->
<div class="md:col-span-2">
<label class="block text-gray-700 font-medium mb-2" for="stance">参加スタンス</label>
<select id="stance" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="active">がっつり回りたい(休憩時間は最小限)</option>
<option value="moderate">ゆったり回りたい(無理なく適度に休憩)</option>
<option value="family">子連れ向け(朝~夕方メインの活動時間、キッズランドを優先)</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
<div class="mt-6 flex justify-end">
<button id="nextStep1" class="bg-purple-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-purple-700 transition flex items-center">
次へ <i class="fas fa-arrow-right ml-2"></i>
</button>
</div>
</div>
<!-- アーティスト選択セクション (初期状態では非表示) -->
<div id="artistSection" class="bg-white rounded-xl shadow-md p-6 mb-8 hidden fade-in">
<h2 class="text-xl font-bold mb-4 text-gray-800 flex items-center">
<i class="fas fa-guitar text-purple-600 mr-2"></i>観たいアーティストを選択
</h2>
<div class="mb-4">
<input type="text" placeholder="アーティスト名で検索..." class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500">
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- アーティストカード (サンプル) -->
<div class="artist-card bg-white border border-gray-200 rounded-lg p-4 transition duration-300 cursor-pointer">
<div class="flex items-start">
<div class="w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center text-purple-600 mr-3">
<i class="fas fa-music text-2xl"></i>
</div>
<div>
<h3 class="font-bold text-gray-800">アーティスト名1</h3>
<p class="text-sm text-gray-600">12:00 - 13:00 @ GREEN STAGE</p>
<p class="text-xs text-purple-600 mt-1">ロック / オルタナティブ</p>
</div>
</div>
<div class="mt-3">
<label class="block text-sm font-medium text-gray-700 mb-1">観たい度</label>
<select class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="must">最初から最後まで観たい</option>
<option value="want">ほんの一部でもいいから観たい</option>
<option value="maybe">タイミング合えば観たい</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
<!-- 他のアーティストカードも同様に追加 -->
<div class="artist-card bg-white border border-gray-200 rounded-lg p-4 transition duration-300 cursor-pointer">
<div class="flex items-start">
<div class="w-16 h-16 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 mr-3">
<i class="fas fa-headphones text-2xl"></i>
</div>
<div>
<h3 class="font-bold text-gray-800">アーティスト名2</h3>
<p class="text-sm text-gray-600">14:30 - 15:30 @ RED STAGE</p>
<p class="text-xs text-blue-600 mt-1">エレクトロニック / テクノ</p>
</div>
</div>
<div class="mt-3">
<label class="block text-sm font-medium text-gray-700 mb-1">観たい度</label>
<select class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="must">最初から最後まで観たい</option>
<option value="want">ほんの一部でもいいから観たい</option>
<option value="maybe">タイミング合えば観たい</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
<div class="artist-card bg-white border border-gray-200 rounded-lg p-4 transition duration-300 cursor-pointer">
<div class="flex items-start">
<div class="w-16 h-16 bg-green-100 rounded-full flex items-center justify-center text-green-600 mr-3">
<i class="fas fa-drum text-2xl"></i>
</div>
<div>
<h3 class="font-bold text-gray-800">アーティスト名3</h3>
<p class="text-sm text-gray-600">16:00 - 17:00 @ BLUE STAGE</p>
<p class="text-xs text-green-600 mt-1">ヒップホップ / R&B</p>
</div>
</div>
<div class="mt-3">
<label class="block text-sm font-medium text-gray-700 mb-1">観たい度</label>
<select class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="must">最初から最後まで観たい</option>
<option value="want">ほんの一部でもいいから観たい</option>
<option value="maybe">タイミング合えば観たい</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
</div>
<div class="mt-6 flex justify-between">
<button id="backStep1" class="bg-gray-300 text-gray-800 px-6 py-2 rounded-lg font-medium hover:bg-gray-400 transition flex items-center">
<i class="fas fa-arrow-left mr-2"></i> 戻る
</button>
<button id="nextStep2" class="bg-purple-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-purple-700 transition flex items-center">
次へ <i class="fas fa-arrow-right ml-2"></i>
</button>
</div>
</div>
<!-- 飲食店選択セクション (初期状態では非表示) -->
<div id="foodSection" class="bg-white rounded-xl shadow-md p-6 mb-8 hidden fade-in">
<h2 class="text-xl font-bold mb-4 text-gray-800 flex items-center">
<i class="fas fa-utensils text-purple-600 mr-2"></i>立ち寄りたい飲食店を選択
</h2>
<div class="mb-4">
<input type="text" placeholder="飲食店名または料理ジャンルで検索..." class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-purple-500">
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- 飲食店カード (サンプル) -->
<div class="food-card bg-white border border-gray-200 rounded-lg p-4 transition duration-300 cursor-pointer">
<div class="flex items-start">
<div class="w-16 h-16 bg-red-100 rounded-full flex items-center justify-center text-red-600 mr-3">
<i class="fas fa-hamburger text-2xl"></i>
</div>
<div>
<h3 class="font-bold text-gray-800">グルメバーガー</h3>
<p class="text-sm text-gray-600">FOOD COURT A</p>
<p class="text-xs text-red-600 mt-1">アメリカン / ハンバーガー</p>
</div>
</div>
<div class="mt-3">
<label class="block text-sm font-medium text-gray-700 mb-1">食べたい/飲みたい度</label>
<select class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="must">絶対食べたい/飲みたい</option>
<option value="want">できれば食べたい/飲みたい</option>
<option value="maybe">少し興味はある</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
<!-- 他の飲食店カードも同様に追加 -->
<div class="food-card bg-white border border-gray-200 rounded-lg p-4 transition duration-300 cursor-pointer">
<div class="flex items-start">
<div class="w-16 h-16 bg-yellow-100 rounded-full flex items-center justify-center text-yellow-600 mr-3">
<i class="fas fa-beer text-2xl"></i>
</div>
<div>
<h3 class="font-bold text-gray-800">クラフトビアガーデン</h3>
<p class="text-sm text-gray-600">DRINK AREA B</p>
<p class="text-xs text-yellow-600 mt-1">ビール / クラフトビール</p>
</div>
</div>
<div class="mt-3">
<label class="block text-sm font-medium text-gray-700 mb-1">食べたい/飲みたい度</label>
<select class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="must">絶対食べたい/飲みたい</option>
<option value="want">できれば食べたい/飲みたい</option>
<option value="maybe">少し興味はある</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
<div class="food-card bg-white border border-gray-200 rounded-lg p-4 transition duration-300 cursor-pointer">
<div class="flex items-start">
<div class="w-16 h-16 bg-green-100 rounded-full flex items-center justify-center text-green-600 mr-3">
<i class="fas fa-ice-cream text-2xl"></i>
</div>
<div>
<h3 class="font-bold text-gray-800">スイーツパラダイス</h3>
<p class="text-sm text-gray-600">SWEET AREA C</p>
<p class="text-xs text-green-600 mt-1">スイーツ / アイスクリーム</p>
</div>
</div>
<div class="mt-3">
<label class="block text-sm font-medium text-gray-700 mb-1">食べたい/飲みたい度</label>
<select class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:ring-purple-500 focus:border-purple-500">
<option value="">選択してください</option>
<option value="must">絶対食べたい/飲みたい</option>
<option value="want">できれば食べたい/飲みたい</option>
<option value="maybe">少し興味はある</option>
<option value="none">特に無し</option>
</select>
</div>
</div>
</div>
<div class="mt-6 flex justify-between">
<button id="backStep2" class="bg-gray-300 text-gray-800 px-6 py-2 rounded-lg font-medium hover:bg-gray-400 transition flex items-center">
<i class="fas fa-arrow-left mr-2"></i> 戻る
</button>
<button id="nextStep3" class="bg-purple-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-purple-700 transition flex items-center">
次へ <i class="fas fa-arrow-right ml-2"></i>
</button>
</div>
</div>
<!-- 確認セクション (初期状態では非表示) -->
<div id="confirmSection" class="bg-white rounded-xl shadow-md p-6 mb-8 hidden fade-in">
<h2 class="text-xl font-bold mb-4 text-gray-800 flex items-center">
<i class="fas fa-check-circle text-purple-600 mr-2"></i>入力内容の確認
</h2>
<div class="bg-gray-50 p-4 rounded-lg mb-6">
<h3 class="font-semibold text-gray-700 mb-2 flex items-center">
<i class="fas fa-user text-purple-500 mr-2"></i>基本情報
</h3>
<div class="grid md:grid-cols-2 gap-4">
<div>
<p class="text-sm text-gray-600">お名前</p>
<p class="font-medium" id="confirmName">山田太郎</p>
</div>
<div>
<p class="text-sm text-gray-600">参加日</p>
<p class="font-medium" id="confirmDate">1日目 (7月28日)</p>
</div>
<div>
<p class="text-sm text-gray-600">好きな音楽ジャンル</p>
<p class="font-medium" id="confirmGenre">ロック, エレクトロニック, ヒップホップ</p>
</div>
<div>
<p class="text-sm text-gray-600">参加スタンス</p>
<p class="font-medium" id="confirmStance">がっつり回りたい(休憩時間は最小限)</p>
</div>
</div>
</div>
<div class="bg-gray-50 p-4 rounded-lg mb-6">
<h3 class="font-semibold text-gray-700 mb-2 flex items-center">
<i class="fas fa-guitar text-purple-500 mr-2"></i>観たいアーティスト
</h3>
<div class="space-y-3">
<div class="flex justify-between items-center border-b border-gray-200 pb-2">
<div>
<p class="font-medium">アーティスト名1</p>
<p class="text-sm text-gray-600">12:00 - 13:00 @ GREEN STAGE</p>
</div>
<span class="bg-purple-100 text-purple-800 px-2 py-1 rounded-full text-xs font-medium">必須</span>
</div>
<div class="flex justify-between items-center border-b border-gray-200 pb-2">
<div>
<p class="font-medium">アーティスト名2</p>
<p class="text-sm text-gray-600">14:30 - 15:30 @ RED STAGE</p>
</div>
<span class="bg-blue-100 text-blue-800 px-2 py-1 rounded-full text-xs font-medium">希望</span>
</div>
</div>
</div>
<div class="bg-gray-50 p-4 rounded-lg mb-6">
<h3 class="font-semibold text-gray-700 mb-2 flex items-center">
<i class="fas fa-utensils text-purple-500 mr-2"></i>立ち寄りたい飲食店
</h3>
<div class="space-y-3">
<div class="flex justify-between items-center border-b border-gray-200 pb-2">
<div>
<p class="font-medium">グルメバーガー</p>
<p class="text-sm text-gray-600">FOOD COURT A</p>
</div>
<span class="bg-red-100 text-red-800 px-2 py-1 rounded-full text-xs font-medium">必須</span>
</div>
<div class="flex justify-between items-center border-b border-gray-200 pb-2">
<div>
<p class="font-medium">クラフトビアガーデン</p>
<p class="text-sm text-gray-600">DRINK AREA B</p>
</div>
<span class="bg-yellow-100 text-yellow-800 px-2 py-1 rounded-full text-xs font-medium">興味あり</span>
</div>
</div>
</div>
<div class="mt-6 flex justify-between">
<button id="backStep3" class="bg-gray-300 text-gray-800 px-6 py-2 rounded-lg font-medium hover:bg-gray-400 transition flex items-center">
<i class="fas fa-arrow-left mr-2"></i> 戻る
</button>
<button id="generateRoute" class="bg-purple-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-purple-700 transition flex items-center">
最適ルートを生成 <i class="fas fa-magic ml-2"></i>
</button>
</div>
</div>
<!-- 結果表示セクション (初期状態では非表示) -->
<div id="resultSection" class="bg-white rounded-xl shadow-md p-6 mb-8 hidden fade-in">
<div class="flex justify-between items-center mb-6">
<h2 class="text-xl font-bold text-gray-800 flex items-center">
<i class="fas fa-route text-purple-600 mr-2"></i>あなたに最適なフェスルート
</h2>
<button class="text-purple-600 hover:text-purple-800 flex items-center">
<i class="fas fa-download mr-1"></i> PDFで保存
</button>
</div>
<div class="bg-purple-50 border-l-4 border-purple-600 p-4 rounded-r-lg mb-6">
<div class="flex">
<div class="flex-shrink-0">
<i class="fas fa-info-circle text-purple-600"></i>
</div>
<div class="ml-3">
<p class="text-sm text-purple-700">
このルートは、あなたが選択したアーティストや飲食店、移動時間を考慮して最適化されています。休憩ポイントやおすすめスポットも提案しています。
</p>
</div>
</div>
</div>
<!-- スケジュール表 -->
<div class="space-y-6">
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
10:00 - 10:30
</span>
<h3 class="mt-1 font-bold text-gray-800">会場到着</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-map-marker-alt mr-1"></i> メインゲート
</span>
</div>
<p class="mt-2 text-sm text-gray-600">会場に到着しました。まずは会場マップを確認しましょう。</p>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
10:30 - 11:30
</span>
<h3 class="mt-1 font-bold text-gray-800">グルメバーガーでランチ</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-utensils mr-1"></i> FOOD COURT A
</span>
</div>
<p class="mt-2 text-sm text-gray-600">人気店なので早めのランチがおすすめです。移動時間も考慮しています。</p>
<div class="mt-2 flex items-center text-sm text-purple-600">
<i class="fas fa-walking mr-1"></i> 次の目的地まで約10分
</div>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
12:00 - 13:00
</span>
<h3 class="mt-1 font-bold text-gray-800">アーティスト名1 ライブ</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-music mr-1"></i> GREEN STAGE
</span>
</div>
<p class="mt-2 text-sm text-gray-600">あなたが「必須」と指定したアーティストです。前から3列目がおすすめスポット。</p>
<div class="mt-3">
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-800">
<i class="fas fa-lightbulb mr-1"></i> おすすめ: 終了後すぐに移動するとRED STAGEまで5分で到着
</span>
</div>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
13:05 - 13:30
</span>
<h3 class="mt-1 font-bold text-gray-800">休憩 & 移動</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-coffee mr-1"></i> 休憩エリア
</span>
</div>
<p class="mt-2 text-sm text-gray-600">近くの休憩エリアで水分補給。トイレも利用できます。</p>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
14:30 - 15:30
</span>
<h3 class="mt-1 font-bold text-gray-800">アーティスト名2 ライブ</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-music mr-1"></i> RED STAGE
</span>
</div>
<p class="mt-2 text-sm text-gray-600">あなたが「希望」と指定したアーティストです。好きなジャンル「エレクトロニック」にマッチ。</p>
<div class="mt-3">
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-800">
<i class="fas fa-info-circle mr-1"></i> この後、クラフトビアガーデンまで約8分
</span>
</div>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
15:40 - 16:20
</span>
<h3 class="mt-1 font-bold text-gray-800">クラフトビアガーデン</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-beer mr-1"></i> DRINK AREA B
</span>
</div>
<p class="mt-2 text-sm text-gray-600">地元のクラフトビールが楽しめます。軽食も用意されています。</p>
<div class="mt-3">
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800">
<i class="fas fa-clock mr-1"></i> 16:30からのライブに間に合うように調整
</span>
</div>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
16:30 - 17:30
</span>
<h3 class="mt-1 font-bold text-gray-800">おすすめアーティスト ライブ</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-music mr-1"></i> BLUE STAGE
</span>
</div>
<p class="mt-2 text-sm text-gray-600">あなたの好きなジャンル「ヒップホップ」に合うアーティストです。新しい発見があるかも!</p>
<div class="mt-2 flex items-center text-sm text-purple-600">
<i class="fas fa-star mr-1"></i> システムおすすめ
</div>
</div>
</div>
<div class="schedule-item">
<div class="schedule-dot"></div>
<div class="bg-white border border-gray-200 rounded-lg p-4 shadow-sm">
<div class="flex justify-between items-start">
<div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-purple-100 text-purple-800">
17:40 - 18:30
</span>
<h3 class="mt-1 font-bold text-gray-800">自由時間</h3>
</div>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-gray-100 text-gray-800">
<i class="fas fa-map-marked-alt mr-1"></i> 会場内自由移動
</span>
</div>
<p class="mt-2 text-sm text-gray-600">グッズ購入や写真撮影、休憩などに使える自由時間です。</p>
<div class="mt-3">
<span class="inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-purple-100 text-purple-800">
<i class="fas fa-utensils mr-1"></i> おすすめ: 夕食はFOOD COURT Cの和食が人気
</span>
</div>
</div>
</div>
</div>
<div class="mt-8 bg-gray-50 p-4 rounded-lg">
<h3 class="font-semibold text-gray-700 mb-3 flex items-center">
<i class="fas fa-lightbulb text-yellow-500 mr-2"></i>追加のおすすめ
</h3>
<div class="grid md:grid-cols-2 gap-4">
<div class="bg-white p-3 rounded-lg border border-gray-200">
<h4 class="font-medium text-gray-800 flex items-center">
<i class="fas fa-music text-purple-500 mr-2"></i> おすすめアーティスト
</h4>
<p class="text-sm text-gray-600 mt-1">19:00 - 20:00 @ WHITE STAGE の「アーティスト名4」があなたの好みに合いそうです。</p>
</div>
<div class="bg-white p-3 rounded-lg border border-gray-200">
<h4 class="font-medium text-gray-800 flex items-center">
<i class="fas fa-ice-cream text-purple-500 mr-2"></i> おすすめ飲食店
</h4>
<p class="text-sm text-gray-600 mt-1">「スイーツパラダイス」の限定メニュー「ベリーアイス」がこの時間帯なら空いています。</p>
</div>
</div>
</div>
<div class="mt-6 flex justify-between">
<button id="backToForm" class="bg-gray-300 text-gray-800 px-6 py-2 rounded-lg font-medium hover:bg-gray-400 transition flex items-center">
<i class="fas fa-edit mr-2"></i> 入力内容を修正
</button>
<button class="bg-purple-600 text-white px-6 py-2 rounded-lg font-medium hover:bg-purple-700 transition flex items-center">
<i class="fas fa-share-alt mr-2"></i> 友達と共有
</button>
</div>
</div>
</main>
<!-- フッター -->
<footer class="bg-gray-800 text-white py-8">
<div class="container mx-auto px-4">
<div class="grid md:grid-cols-3 gap-8">
<div>
<h3 class="text-lg font-semibold mb-4 flex items-center">
<i class="fas fa-music mr-2"></i> フェスルートプランナー
</h3>
<p class="text-gray-400">音楽フェスを最大限楽しむための最適ルートを提案するサービスです。</p>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">リンク</h3>
<ul class="space-y-2">
<li><a href="#" class="text-gray-400 hover:text-white transition">利用規約</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">プライバシーポリシー</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">お問い合わせ</a></li>
</ul>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">SNSでフォロー</h3>
<div class="flex space-x-4">
<a href="#" class="text-gray-400 hover:text-white transition"><i class="fab fa-twitter text-xl"></i></a>
<a href="#" class="text-gray-400 hover:text-white transition"><i class="fab fa-instagram text-xl"></i></a>
<a href="#" class="text-gray-400 hover:text-white transition"><i class="fab fa-facebook text-xl"></i></a>
</div>
</div>
</div>
<div class="border-t border-gray-700 mt-8 pt-6 text-center text-gray-400">
<p>&copy; 2023 フェスルートプランナー All rights reserved.</p>
</div>
</div>
</footer>
<script>
// ステップ遷移の制御
document.getElementById('nextStep1').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(1) div').classList.remove('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(1) div').classList.add('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.remove('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.add('bg-purple-600');
document.getElementById('artistSection').classList.remove('hidden');
document.querySelector('.bg-white.rounded-xl.shadow-md.p-6.mb-8').classList.add('hidden');
});
document.getElementById('backStep1').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(1) div').classList.add('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(1) div').classList.remove('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.add('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.remove('bg-purple-600');
document.getElementById('artistSection').classList.add('hidden');
document.querySelector('.bg-white.rounded-xl.shadow-md.p-6.mb-8').classList.remove('hidden');
});
document.getElementById('nextStep2').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.remove('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.add('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.remove('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.add('bg-purple-600');
document.getElementById('foodSection').classList.remove('hidden');
document.getElementById('artistSection').classList.add('hidden');
});
document.getElementById('backStep2').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.add('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.remove('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.add('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.remove('bg-purple-600');
document.getElementById('foodSection').classList.add('hidden');
document.getElementById('artistSection').classList.remove('hidden');
});
document.getElementById('nextStep3').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.remove('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.add('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.remove('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.add('bg-purple-600');
document.getElementById('confirmSection').classList.remove('hidden');
document.getElementById('foodSection').classList.add('hidden');
});
document.getElementById('backStep3').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.add('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.remove('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.add('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.remove('bg-purple-600');
document.getElementById('confirmSection').classList.add('hidden');
document.getElementById('foodSection').classList.remove('hidden');
});
document.getElementById('generateRoute').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.remove('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.add('bg-green-500');
document.getElementById('resultSection').classList.remove('hidden');
document.getElementById('confirmSection').classList.add('hidden');
// スクロールをトップに移動
window.scrollTo(0, 0);
});
document.getElementById('backToForm').addEventListener('click', function() {
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.add('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(7) div').classList.remove('bg-green-500');
document.getElementById('resultSection').classList.add('hidden');
document.querySelector('.bg-white.rounded-xl.shadow-md.p-6.mb-8').classList.remove('hidden');
// ステップをリセット
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(1) div').classList.add('bg-purple-600');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(1) div').classList.remove('bg-green-500');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(3) div').classList.add('bg-gray-300');
document.querySelector('.flex.justify-center.mb-8 div div:nth-child(5) div').classList.add('bg-gray-300');
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=MRKW/20250412fesrouteplanner" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>