/** * AIRSTAR Hotel App - Complete Fixed Version * Path: /wp-content/themes/airstar-theme/js/app.js */ (function() { // --- エラーハンドリング --- function forceRemoveLoader() { const loader = document.getElementById('initial-loader'); if (loader) { loader.style.opacity = '0'; setTimeout(function() { if(loader.parentNode) loader.parentNode.removeChild(loader); }, 500); } } setTimeout(forceRemoveLoader, 4000); try { const { useState, useEffect, useRef, useMemo } = React; const { createRoot } = ReactDOM; // --- 1. 環境設定 --- const wpData = window.airstarData || {}; const themePath = wpData.themePath || ''; const imgBase = themePath ? themePath.replace(/\/$/, '') + '/images/' : 'images/'; const logoFileName = 'AIRSTAR_ロゴのみ透過.png'; const dynamicNews = wpData.news || []; const dynamicExperiences = wpData.experiences || []; const dynamicProperties = wpData.properties || []; const dynamicFaqs = wpData.faqs || []; // --- 2. アイコン --- const Icons = { ChevronLeft: () => , ChevronRight: () => , ChevronDown: () => , X: () => , Check: () => , MapPin: () => , ArrowRight: () => , Calendar: () => , Zoom: () => , // カテゴリアイコン Kitchen: () => , Tv: () => , Family: () => , Bath: () => , Laundry: () => , Safety: () => , Car: () => , Wind: () => , Utensils: () => , Coffee: () => , User: () => , Home: () => , Bed: () => , Tag: () => , }; // --- 3. データセット (完全版) --- const manualProperties = [ // ========================================== // 1件目:Second // ========================================== { id: 'second', type: 'special', region: 'FUKUOKA', name: 'AIRSTAR HOTEL Second', subtitle: '最大25名宿泊OK。福岡の中心に佇む177㎡・3階建て大型貸切邸宅', description: '「みんなで集まれる場所が欲しかった」というゲストの願いを叶えるために生まれた宿。博多・天神が徒歩圏内という圧倒的な利便性を持ちながら、一体感と安心感を両立。ReFaの最新美容家電や計4ヶ所のトイレなど、大人数の滞在でもストレスのない空間を提供します。', images: [ imgBase + "hero-1.avif", imgBase + "hero-2.avif", imgBase + "hero-3.jpeg", imgBase + "hero-4.jpeg" ], stats: { sqm: '177㎡', layout: '7LDK', beds: '15台', capacity: '25名' }, beds24_url: 'https://beds24.com/booking2.php?propid=271480', sidebarImg: imgBase + "detail-sidebar.avif", feature: { title: '極上の休息をお約束する、上質な寝室空間', description: '最大25名様でご宿泊いただける大型邸宅でありながら、お一人おひとりの「くつろぎ」を大切にした空間設計。\n落ち着いたトーンで統一されたメインベッドルームをはじめ、ゆとりある上質なベッドが旅の疲れを優しく包み込みます。大人数でのご滞在でも、ワンランク上の安らぎをお楽しみください。', image: imgBase + "mainbed.jpg" }, access: { address: '〒810-0003 福岡県福岡市中央区春吉1丁目15-1', mapLink: 'https://www.google.com/maps/search/?api=1&query=AIRSTAR+HOTEL+Second+〒810-0003+福岡県福岡市中央区春吉1丁目15-1', transport: ['福岡市地下鉄七隈線「渡辺通駅」2番出口から徒歩約4分', '西鉄バス「柳橋」バス停から徒歩約1分'] }, rooms: [ { title: 'LIVING & DINING', area: '1F Common Space', bedInfo: '65型TV / ソファ / ダイニング', gallery: [imgBase + "living.avif", imgBase + "living-2.avif", imgBase + "living-3.avif", imgBase + "living-4.avif"] }, { title: 'VENUS (金星)', area: "1F Kids Room", bedInfo: 'ソファベッド/布団 (プレイルーム)', gallery: [imgBase + "room-venus.avif", imgBase + "room-venus-2.avif", imgBase + "room-venus-3.avif"] }, { title: 'EARTH (地球)', area: '1F Bedroom', bedInfo: 'ダブルベッド×1 (定員2名)', gallery: [imgBase + "room-earth.jpeg", imgBase + "room-earth-3.jpeg", imgBase + "room-earth-2.avif"] }, { title: 'MERCURY (水星)', area: '2F Bedroom', bedInfo: 'ダブルベッド×1 (定員2名)', gallery: [imgBase + "room-mercury.avif", imgBase + "room-mercury-2.jpeg", imgBase + "room-mercury-4.jpeg", imgBase + "room-mercury-3.avif"] }, { title: 'JUPITER (木星)', area: '2F Large Room', bedInfo: 'ダブル×4 + ベビー (定員8名+幼児)', gallery: [imgBase + "room-jupiter.jpeg", imgBase + "room-jupiter-2.jpeg", imgBase + "room-jupiter-5.jpeg", imgBase + "room-jupiter-3.jpeg", imgBase + "room-jupiter-4.jpeg"] }, { title: 'SATURN (土星)', area: '2F Bedroom', bedInfo: 'シングル×5 (定員5名)', gallery: [imgBase + "room-saturn.avif", imgBase + "room-saturn-2.jpeg"] }, { title: 'MARS (火星)', area: '3F Bedroom', bedInfo: 'ダブル×3 (定員6名)', gallery: [imgBase + "room-mars.avif", imgBase + "room-mars-2.jpeg", imgBase + "room-mars-3.jpeg", imgBase + "room-mars-4.jpeg"] }, { title: 'NEPTUNE (海王星)', area: '3F Bedroom', bedInfo: 'ダブル×1 (定員2名)', gallery: [imgBase + "room-neptune.jpeg", imgBase + "room-neptune-3.jpeg", imgBase + "room-neptune-2.avif"] }, { title: 'KITCHEN', area: 'Kitchen', bedInfo: '充実設備のフルキッチン', gallery: [imgBase + "second-kitchen-1.avif", imgBase + "second-kitchen-2.avif", imgBase + "second-kitchen-3.avif", imgBase + "second-kitchen-4.avif", imgBase + "second-kitchen-5.avif", imgBase + "second-kitchen-6.avif"] }, { title: 'BATH & BEAUTY', area: 'Bath Room', bedInfo: 'ReFa製品完備で癒しの時間を', gallery: [imgBase + "second-bath-1.avif", imgBase + "second-bath-2.avif", imgBase + "second-bath-3.avif", imgBase + "second-bath-4.avif", imgBase + "second-bath-5.avif", imgBase + "second-bath-6.avif", imgBase + "second-bath-7.avif", imgBase + "second-bath-8.avif"] }, { title: 'EXTERIOR', area: 'Exterior', bedInfo: '無料駐車場2台完備', gallery: [imgBase + "second-exterior-1.jpg", imgBase + "second-exterior-2.jpg"] } ], amenitiesList: [ { id: 'kitchen', image: imgBase + 'second-amenity-kitchen.avif', title: 'Kitchen & Dining', subtitle: 'キッチンとダイニング', icon: 'Kitchen', desc: 'ゲストが料理できる充実のスペース', details: ['フルキッチン', 'IHコンロ', '冷蔵庫', '冷凍庫', '電子レンジ', '電気ポット', '炊飯器', '基本的な調理器具 (鍋・フライパン)', '油・塩・こしょう', '食器&カトラリー (ボウル、箸、皿、カップなど)', 'ワイングラス'] }, { id: 'entertainment', image: imgBase + 'second-amenity-ent.avif', title: 'Entertainment', subtitle: 'エンタメ・通信', icon: 'Tv', desc: '65型TVと高速ネット環境', details: ['65型ハイビジョンテレビ', 'Nintendo Switch', 'Netflix', 'Amazon Prime Video', '標準ケーブルテレビ', 'Wi-Fi (高速光回線)'] }, { id: 'family', image: imgBase + 'second-amenity-family.avif', title: 'For Family', subtitle: 'ファミリー向け', icon: 'Family', desc: 'お子様連れでも安心の設備', details: ['ベビーベッド', 'ベビーチェア', 'ベビーバス', '子ども用食器', '子供用プレイルーム (屋内)', '子ども向けの本・おもちゃ'] }, { id: 'bath', image: imgBase + 'second-amenity-bath.jpeg', title: 'Bath & Toiletary', subtitle: 'バスルーム', icon: 'Bath', desc: 'ReFa製品で癒やしの時間を', details: ['バスタブ (2箇所)', 'ReFa シャワーヘッド', 'ReFa ヘアドライヤー (3台)', 'ReFa ヘアアイロン (2台)', 'ウォシュレット (トイレ4箇所)', 'シャンプー', 'コンディショナー', 'ボディソープ', 'シャワージェル', '給湯システム', '清掃用品'] }, { id: 'laundry', image: imgBase + 'second-amenity-laundry.avif', title: 'Bedroom & Laundry', subtitle: '寝室とランドリー', icon: 'Laundry', desc: '長期滞在も快適な設備', details: ['洗濯機', '無料乾燥機 (室内)', '衣類収納スペース', 'ハンガー', 'シーツ類', '遮光カーテン'] }, { id: 'comfort', image: imgBase + 'second-amenity-comfort.avif', title: 'Comfort', subtitle: '冷暖房', icon: 'Wind', desc: '一年中快適な室温管理', details: ['エアコン', '暖房 (ダクトレス式個別空調)'] }, { id: 'safety', image: imgBase + 'second-amenity-safety.avif', title: 'Home Safety', subtitle: 'ホームセーフティ', icon: 'Safety', desc: '安心・安全のセキュリティ', details: ['防犯・監視カメラ (屋外・共用部)', 'スマートロック', '一酸化炭素検知器', '火災報知器', '消火器'] }, { id: 'parking', image: imgBase + 'second-amenity-parking.avif', title: 'Parking', subtitle: '駐車場', icon: 'Car', desc: '敷地内無料駐車場', details: ['敷地内住宅用無料駐車場 : 2台分'] }, ], floor_plans: [ { level: '1F', img: imgBase + "floor-1f.avif" }, { level: '2F', img: imgBase + "floor-2f.avif" }, { level: '3F', img: imgBase + "floor-3f.avif" } ] }, // ========================================== // 2件目:別府本邸 // ========================================== { id: 'beppu-hontei', type: 'special', region: 'OITA', name: 'AIRSTAR 別府本邸', subtitle: '非日常と遊び心を融合した、遊べる宿泊体験。', description: '「遊べる宿泊体験」をコンセプトに、大人も子供も胸が高鳴る空間をデザインしました。\n秘密の扉の先に広がる滑り台付きのキッズスペースや、プロジェクターで映画やライブ映像を楽しめる屋根裏の秘密基地シアター、そして別府の街並みを望みながらチルな時間を過ごせる開放的なルーフトップテラス。\nホテルでは味わえない、一棟まるごとがエンターテインメントになる特別な滞在を提供します。', images: [ imgBase + "beppu/hero-1.jpg", imgBase + "beppu/hero-3.jpg", imgBase + "beppu/dining-1.jpg", imgBase + "beppu/exterior-1.jpg" ], stats: { sqm: '120㎡', layout: '3LDK+', beds: '5台', capacity: '13名', price: '¥45,000〜' }, beds24_url: 'https://beds24.com/booking.php?propid=311853&type=0', sidebarImg: imgBase + "beppu/sidebar.jpg", feature: { title: '一棟まるごとが遊び場に。非日常のエンタメ空間', description: '隠し扉の先に広がる滑り台付きのキッズルームや、大画面で映画を楽しめる屋根裏の秘密基地シアター。\nそして別府の空を感じるルーフトップテラスなど、大人も子供も夢中になれる「遊べる宿泊体験」をデザインしました。', image: imgBase + "beppu/hero-3.jpg" }, access: { address: '〒874-0938 大分県別府市末広町9-4', mapLink: 'https://www.google.com/maps/search/?api=1&query=大分県別府市末広町9-4', transport: ['JR日豊本線「別府駅」から徒歩圏内', '東九州自動車道「別府IC」より車で約15分'] }, rooms: [ { title: 'SECRET THEATER', area: 'Loft Space', bedInfo: 'Ankerプロジェクター完備の秘密基地', gallery: [ imgBase + "beppu/loft-1.jpg", imgBase + "beppu/loft-2.jpg", imgBase + "beppu/loft-3.jpg" ] }, { title: 'KIDS PARADICE', area: 'Hidden Room', bedInfo: '隠し扉 / 滑り台 / こたつ完備', gallery: [ imgBase + "beppu/kids-1.jpg", imgBase + "beppu/kids-2.jpg", imgBase + "beppu/kids-3.jpg", imgBase + "beppu/kids-4.jpg", imgBase + "beppu/kids-5.jpg" ] }, { title: 'ROOFTOP TERRACE', area: 'Roof Top', bedInfo: 'chillな時間を過ごす開放的な屋上空間', gallery: [ imgBase + "beppu/roof-1.jpg", imgBase + "beppu/roof-2.jpg", imgBase + "beppu/roof-3.jpg", imgBase + "beppu/roof-4.jpg", imgBase + "beppu/roof-5.jpg", imgBase + "beppu/roof-6.jpg" ] }, { title: 'MAIN BEDROOMS', area: '1F-2F Bedrooms', bedInfo: 'ダブルベッド計5台+シングル1台', gallery: [ imgBase + "beppu/room-1.jpg", imgBase + "beppu/room-2.jpg", imgBase + "beppu/room-3.jpg" ] }, { title: 'BATH & BEAUTY', area: 'Bath Room', bedInfo: 'ReFa製品完備で癒しの時間を', gallery: [ imgBase + "beppu/bath-1.jpg", imgBase + "beppu/bath-2.jpg", imgBase + "beppu/bath-3.jpg", imgBase + "beppu/bath-4.jpg", imgBase + "beppu/bath-5.jpg", imgBase + "beppu/bath-6.jpg" ] }, { title: 'KITCHEN', area: 'Kitchen', bedInfo: 'BALMUDA製家電で揃えたフルキッチン', gallery: [ imgBase + "beppu/kitchen-1.jpg", imgBase + "beppu/kitchen-2.jpg", imgBase + "beppu/kitchen-3.jpg", imgBase + "beppu/kitchen-4.jpg", imgBase + "beppu/kitchen-5.jpg", imgBase + "beppu/kitchen-6.jpg", imgBase + "beppu/kitchen-7.jpg", imgBase + "beppu/kitchen-8.jpg", imgBase + "beppu/kitchen-9.jpg", imgBase + "beppu/kitchen-10.jpg" ] }, { title: 'DINING & LIVING', area: 'Dining', bedInfo: '大人数で囲める広々としたダイニング', gallery: [ imgBase + "beppu/dining-1.jpg", imgBase + "beppu/dining-2.jpg", imgBase + "beppu/dining-3.jpg", imgBase + "beppu/dining-4.jpg", imgBase + "beppu/dining-5.jpg", imgBase + "beppu/dining-6.jpg" ] }, { title: 'EXTERIOR', area: 'Exterior', bedInfo: '無料駐車場3台完備', gallery: [ imgBase + "beppu/exterior-1.jpg", imgBase + "beppu/exterior-2.jpg", imgBase + "beppu/exterior-3.jpg" ] } ], amenitiesList: [ { id: 'entertainment', image: imgBase + "beppu/amenity-tv.avif", title: 'Entertainment', subtitle: 'エンタメ設備', icon: 'Tv', desc: '屋根裏シアターと高速Wi-Fi', details: ['Ankerプロジェクター', '100インチ級スクリーン体験', '高速Wi-Fi', 'Netflix/YouTube対応'] }, { id: 'family', image: imgBase + "beppu/amenity-family.avif", title: 'For Family', subtitle: 'キッズ&ファミリー', icon: 'Family', desc: '隠し扉と滑り台のある遊び場', details: ['造作滑り台', '隠し扉仕掛け', 'キッズスペース', 'こたつ(冬季)', '子供用食器'] }, { id: 'bath', image: imgBase + "beppu/amenity-bath.avif", title: 'Bath & Beauty', subtitle: '美容とバスタイム', icon: 'Bath', desc: 'ReFa製品を完備した贅沢な時間', details: ['ReFa シャワーヘッド', 'ReFa ドライヤー', 'ReFa ヘアアイロン', 'バスルーム×2', 'トイレ×2'] }, { id: 'kitchen', image: imgBase + "beppu/amenity-kitchen.avif", title: 'Kitchen', subtitle: 'キッチン家電', icon: 'Kitchen', desc: 'BALMUDA製家電で揃えたキッチン', details: ['BALMUDA 電子レンジ', 'BALMUDA ケトル', 'フルキッチン', '大型冷蔵庫', '調理器具一式'] }, { id: 'exterior', image: imgBase + "beppu/amenity-exterior.avif", title: 'Exterior', subtitle: '駐車場', icon: 'Car', desc: '敷地内無料駐車場を完備', details: ['無料駐車場2台完備'] }, { id: 'plumbing', image: imgBase + "beppu/amenity-plumbing.avif", title: 'Plumbing', subtitle: '水回り設備', icon: 'Bath', desc: '清潔で使いやすいサニタリー', details: ['お風呂', 'トイレ', '洗面台'] } ], floor_plans: [ { level: '全体', img: imgBase + "beppu/floor.avif" } ] }, // ========================================== // 新規追加1:HOTEL STAR RESIDENCE(福岡・上呉服町) // ========================================== { id: 'star-residence-1', type: 'special', region: 'FUKUOKA', name: 'HOTEL STAR RESIDENCE', subtitle: '福岡の歴史と利便性を兼ね備えた上呉服町での快適な滞在。', description: 'ツインルームから最大6名様まで宿泊可能な広々としたお部屋まで、多様なニーズにお応えします。博多駅や繁華街へのアクセスも抜群で、ビジネスにも観光にも最適なロケーションです。', images: [ imgBase + "star1/hero-1.avif", imgBase + "star1/hero-2.jpg", imgBase + "star1/hero-3.avif", imgBase + "star1/hero-4.avif" ], stats: { sqm: '25〜40㎡', layout: '1R / 1LDK', beds: '2〜4台', capacity: '2〜6名', price: 'Check' }, beds24_url: 'https://beds24.com/booking.php?propid=230547&type=0&referer=BookingButton', sidebarImg: imgBase + "star1/hero-1.avif", feature: { title: '少人数からグループまで対応可能な多様なお部屋', description: 'コンパクトで使い勝手の良いツインルームから、ご家族やご友人とゆったり過ごせる最大6名様用の広々としたお部屋まで、滞在スタイルに合わせてお選びいただけます。', image: imgBase + "star1/feature.avif" }, access: { address: '〒812-0036 福岡県福岡市博多区上呉服町9-6', mapLink: 'https://www.google.com/maps/search/?api=1&query=〒812-0036+福岡県福岡市博多区上呉服町9-6', transport: ['地下鉄箱崎線「呉服町駅」徒歩圏内'] }, rooms: [ { title: 'FULL KITCHEN', area: '客室', bedInfo: 'フルキッチン', gallery: [imgBase + "star1/room-kitchen-1.avif", imgBase + "star1/room-kitchen-2.avif"] }, { title: 'DINING', area: '客室', bedInfo: 'ダイニング', gallery: [imgBase + "star1/room-dining-1.avif"] }, { title: 'TWIN BEDROOM', area: '客室', bedInfo: '使い勝手の良いツインルーム', gallery: [imgBase + "star1/room-bed-twin-1.avif", imgBase + "star1/room-bed-twin-2.avif"] }, { title: 'FULL BATHROOM', area: '客室', bedInfo: 'フルバスルーム', gallery: [imgBase + "star1/room-bath-1.avif"] }, { title: 'LAUNDRY', area: '客室', bedInfo: 'ランドリーエリア', gallery: [imgBase + "star1/room-laundry-1.avif"] }, { title: 'EXTERIOR', area: '客室', bedInfo: 'エクステリア・その他', gallery: [imgBase + "star1/room-exterior-1.avif", imgBase + "star1/room-exterior-2.avif", imgBase + "star1/room-exterior-3.avif"] } ], amenitiesList: [ { id: 'kitchen', image: imgBase + "star1/amenity-kitchen.avif", title: 'Kitchen & Dining', subtitle: 'キッチンとダイニング', icon: 'Kitchen', desc: '自炊に便利なフルキッチン完備', details: ['フルキッチン', '冷蔵庫', '電子レンジ', 'ガスコンロ', 'ケトル', '炊飯器', 'コーヒー', '基本的な調理器具 (鍋・フライパンなど)', '食器・カトラリー'] }, { id: 'bath', image: imgBase + "star1/amenity-bath.avif", title: 'Bath Room', subtitle: 'バスルーム', icon: 'Bath', desc: 'ゆったりくつろげるバスルーム', details: ['バスタブ', 'ヘアドライヤー', 'シャンプー・コンディショナー', 'ボディソープ', 'ウォシュレット', '給湯システム', '清掃用品'] }, { id: 'laundry', image: imgBase + "star1/amenity-laundry.avif", title: 'Bedroom & Laundry', subtitle: '寝室とランドリー', icon: 'Laundry', desc: '長期滞在でも快適な設備', details: ['洗濯機', '無料乾燥機 (室内)', 'タオル・シーツ類・石鹸', 'ハンガー・衣類用乾燥ラック', 'アイロン', '衣類収納 (クローゼット)', '遮光カバー'] }, { id: 'comfort', image: imgBase + "star1/amenity-comfort.avif", title: 'Comfort & Ent.', subtitle: '快適な滞在・エンタメ', icon: 'Tv', desc: '充実の室内設備とネット環境', details: ['エアコン・暖房', 'テレビ', '無料Wi-Fi', '仕事専用スペース'] }, { id: 'facilities', image: imgBase + "star1/amenity-exterior.avif", title: 'Facilities & Services', subtitle: '施設・サービス', icon: 'Safety', desc: '安心のセキュリティとサービス', details: ['スマートロック (セルフチェックイン)', 'エレベーター完備', '荷物預かりOK', '長期滞在OK (28泊以上)', 'ベビーバス (リクエスト制)', '防犯カメラ・火災報知器・消火器'] } ], floor_plans: [ // ※まだ間取り図画像がないため、一旦空にしてあります。 // 必要な場合は後日追加してください。 ] }, // ========================================== // 新規追加2:STAR RESIDENCE Ⅱ(福岡・春吉) // ========================================== { id: 'star-residence-2', type: 'special', region: 'FUKUOKA', name: 'STAR RESIDENCE Ⅱ', subtitle: '天神・博多へのアクセス抜群。春吉エリアのマンション型ホテル。', description: '【当ホテルについて】\nこちらはマンションの1フロアをホテルとして運営しており、同じフロアに全部で6部屋ございます。\n※部屋によって家具や間取りが多少異なります。掲載写真は各部屋タイプの一例となり、基本お部屋の指定はできませんのでご了承ください。\n客室内は丸ごと貸切となり、自由にご利用いただけます。\n\n【注意事項・ルール】\n・パジャマや浴衣のご用意はございません。ご持参をお願いいたします。\n・18歳以下の未成年のみでのご宿泊はご遠慮いただいております。\n・室内および施設周辺は全面禁煙です。\n・滞在中の途中清掃サービスはございません。洗濯機をご活用ください。\n・専用駐車場はございませんので、近隣のコインパーキングをご利用ください。', images: [ imgBase + "star2/hero-1.avif", imgBase + "star2/hero-2.avif", imgBase + "star2/hero-3.avif", imgBase + "star2/hero-4.avif" ], stats: { sqm: '約30㎡', layout: '1LDK', beds: '2〜3台', capacity: '4名', price: 'Check' }, beds24_url: 'https://beds24.com/booking.php?propid=276257&type=0&referer=BookingButton', sidebarImg: imgBase + "star2/hero-1.avif", feature: { title: '抜群の立地と快適な空間', description: '① 博多駅・天神駅までタクシーで5分、徒歩20分の中心地!中洲エリアや空港へのアクセスも良好です。\n② 落ち着いたインテリアと清潔感ある空間。高速Wi-Fiやデスク、キッチン・洗濯機も完備し長期滞在にも対応。\n③ 周辺に市場、コンビニ、飲食店が充実。川沿いの散歩も楽しめます。', image: imgBase + "star2/hero-2.avif" }, access: { address: '〒810-0003 福岡県福岡市中央区春吉1-5-1', mapLink: 'https://www.google.com/maps/search/?api=1&query=〒810-0003+福岡県福岡市中央区春吉1-5-1', transport: ['地下鉄七隈線「渡辺通駅」徒歩圏内'] }, rooms: [ { title: 'GUEST ROOMS', area: '客室一例', bedInfo: '家具や間取りは部屋により異なります', gallery: [ imgBase + "star2/room-1.avif", imgBase + "star2/room-2.avif", imgBase + "star2/room-3.avif", imgBase + "star2/room-4.avif", imgBase + "star2/room-5.avif", imgBase + "star2/room-6.avif", imgBase + "star2/room-7.avif", imgBase + "star2/room-8.avif", imgBase + "star2/room-9.avif", imgBase + "star2/room-10.avif" ] }, { title: 'BATH ROOM', area: 'バスルーム', bedInfo: '清潔なバスルーム', gallery: [ imgBase + "star2/room-bath-1.avif", imgBase + "star2/room-bath-2.avif", imgBase + "star2/room-bath-3.avif", imgBase + "star2/room-bath-4.avif", imgBase + "star2/room-bath-5.avif", imgBase + "star2/room-bath-6.avif", imgBase + "star2/room-bath-7.avif", imgBase + "star2/room-bath-8.avif", imgBase + "star2/room-bath-9.avif", imgBase + "star2/room-bath-10.avif", imgBase + "star2/room-bath-11.avif" ] }, { title: 'KITCHEN', area: 'キッチン', bedInfo: '自炊可能なキッチン', gallery: [ imgBase + "star2/room-kitchen-1.avif", imgBase + "star2/room-kitchen-2.avif", imgBase + "star2/room-kitchen-3.avif", imgBase + "star2/room-kitchen-4.avif", imgBase + "star2/room-kitchen-5.avif", imgBase + "star2/room-kitchen-6.avif", imgBase + "star2/room-kitchen-7.avif", imgBase + "star2/room-kitchen-8.avif", imgBase + "star2/room-kitchen-9.avif", imgBase + "star2/room-kitchen-10.avif" ] }, { title: 'LAUNDRY', area: 'ランドリー', bedInfo: '洗濯機完備', gallery: [ imgBase + "star2/room-laundry-1.avif", imgBase + "star2/room-laundry-2.avif" ] }, { title: 'EXTERIOR', area: '外観', bedInfo: '施設の外観', gallery: [ imgBase + "star2/room-exterior-1.avif" ] } ], amenitiesList: [ { id: 'kitchen', image: imgBase + "star2/room-kitchen-1.avif", title: 'Kitchen & Dining', subtitle: 'キッチンとダイニング', icon: 'Kitchen', desc: '自炊に便利な設備が揃ったキッチン', details: ['キッチン', '冷蔵庫', '電子レンジ', 'コンロ', '電気ポット', 'キッチン用品'] }, { id: 'bath', image: imgBase + "star2/room-bath-1.avif", title: 'Bath Room', subtitle: 'バスルーム', icon: 'Bath', desc: '清潔でリラックスできる専用バスルーム', details: ['専用バスルーム', 'バスタブ', 'シャワー', 'トイレ (ビデ付き)', 'ヘアドライヤー', '無料バスアメニティ', 'タオル・トイレットペーパー', 'スリッパ'] }, { id: 'laundry', image: imgBase + "star2/room-laundry-1.avif", title: 'Bedroom & Laundry', subtitle: '寝室とランドリー', icon: 'Laundry', desc: '快適な睡眠と長期滞在をサポート', details: ['洗濯機', 'リネン類'] }, { id: 'comfort', image: imgBase + "star2/room-1.avif", title: 'Comfort & Ent.', subtitle: '快適な滞在・エンタメ', icon: 'Tv', desc: '充実の室内設備とネット環境', details: ['エアコン・暖房', '無料Wi-Fi (全域)', '薄型テレビ', '全館禁煙・禁煙ルーム'] }, { id: 'facilities', image: imgBase + "star2/room-exterior-1.avif", title: 'Facilities & Security', subtitle: '施設・セキュリティ', icon: 'Safety', desc: '安心のセキュリティと館内設備', details: ['鍵で入室', 'エレベーター利用可', 'バルコニー・テラス', '消火器・火災警報器', '領収書発行可能', 'スタッフ対応 (英語/日本語)', '※駐車場なし'] } ], floor_plans: [ // ※まだ間取り図画像がないため、一旦空にしてあります。 // 必要な場合は後日追加してください。 ] }, // ========================================== // 新規追加3:Hotel Star Residence Ⅲ WEST(福岡・今宿) // ========================================== { id: 'star-residence-3-west', type: 'special', region: 'FUKUOKA', name: 'Hotel Star Residence Ⅲ WEST', subtitle: '海風を感じる今宿。ペットと一緒に過ごせるシアタールーム完備の宿。', description: '【当ホテルについて】\n大切な家族であるペットと一緒に宿泊可能なレジデンス型ホテルです。海まで歩いてすぐの好立地で、糸島エリアへの観光拠点としても最適です。\n\n【お部屋の特長】\nお部屋には大型プロジェクターを完備しており、プライベートシアターとして映画鑑賞などを大画面でお楽しみいただけます。自炊可能なキッチンや洗濯機も備え、まるで暮らすようにくつろげる空間です。', images: [ imgBase + "star3/hero-1.jpg", imgBase + "star3/hero-2.jpg", imgBase + "star3/hero-3.jpg", imgBase + "star3/hero-4.jpg" ], stats: { sqm: '約30〜40㎡', layout: '1LDK', beds: '2〜3台', capacity: '5名', price: 'Check' }, beds24_url: 'https://beds24.com/booking.php?propid=294197&type=0&referer=BookingButton', sidebarImg: imgBase + "star3/hero-1.jpg", feature: { title: '愛犬との旅行や、シアター体験を', description: 'ペットと一緒にリラックスできる専用空間をご用意。夜はプロジェクターの大画面で、ご家族や友人と特別な映画鑑賞のひとときをお楽しみください。充実した設備で長期滞在にも適しています。', image: imgBase + "star3/hero-2.jpg" }, access: { address: '〒819-0161 福岡県福岡市西区今宿東2-30-15 グランピア今宿2', mapLink: 'https://www.google.com/maps/search/?api=1&query=〒819-0161+福岡県福岡市西区今宿東2-30-15+グランピア今宿2', transport: ['JR筑肥線「今宿駅」から徒歩圏内'] }, rooms: [ { title: 'THEATER LIVING', area: '客室', bedInfo: 'プロジェクター完備', gallery: [imgBase + "star3/room-living-1.jpg", imgBase + "star3/room-living-2.jpg", imgBase + "star3/room-living-3.jpg"] }, { title: 'BEDROOM', area: '客室', bedInfo: 'ゆったり休めるベッドルーム', gallery: [imgBase + "star3/room-bed-1.jpg", imgBase + "star3/room-bed-2.jpg", imgBase + "star3/room-bed-3.jpg", imgBase + "star3/room-bed-4.jpg", imgBase + "star3/room-bed-5.jpg", imgBase + "star3/room-bed-6.jpg"] }, { title: 'KITCHEN', area: 'キッチン', bedInfo: '自炊可能なキッチン', gallery: [imgBase + "star3/room-kitchen-1.jpg", imgBase + "star3/room-kitchen-2.jpg", imgBase + "star3/room-kitchen-3.jpg", imgBase + "star3/room-kitchen-4.jpg", imgBase + "star3/room-kitchen-5.jpg", imgBase + "star3/room-kitchen-6.jpg", imgBase + "star3/room-kitchen-7.jpg", imgBase + "star3/room-kitchen-8.jpg", imgBase + "star3/room-kitchen-9.jpg", imgBase + "star3/room-kitchen-10.jpg"] }, { title: 'BATH ROOM', area: 'バスルーム', bedInfo: '清潔なバスルーム', gallery: [imgBase + "star3/room-bath-1.jpg", imgBase + "star3/room-bath-2.jpg", imgBase + "star3/room-bath-3.jpg", imgBase + "star3/room-bath-4.jpg", imgBase + "star3/room-bath-5.jpg"] }, { title: 'PET FRIENDLY', area: 'ペット対応', bedInfo: 'ペット同伴可', gallery: [imgBase + "star3/room-pet-1.jpg", imgBase + "star3/room-pet-2.jpg", imgBase + "star3/room-pet-3.jpg", imgBase + "star3/room-pet-4.jpg", imgBase + "star3/room-pet-5.jpg", imgBase + "star3/room-pet-6.jpg", imgBase + "star3/room-pet-7.jpg", imgBase + "star3/room-pet-8.jpg", imgBase + "star3/room-pet-9.jpg", imgBase + "star3/room-pet-10.jpg"] } ], amenitiesList: [ { id: 'entertainment', image: imgBase + "star3/room-living-1.jpg", title: 'Entertainment', subtitle: 'エンタメ・快適設備', icon: 'Tv', desc: '充実のネット環境と快適な室内', details: ['プロジェクター', '動画配信サービス(Netflixなど)', '無料Wi-Fi', 'エアコン・暖房', 'ベッド近くにコンセント', '衣類用ラック'] }, { id: 'family_pet', image: imgBase + "star3/room-pet-1.jpg", title: 'Family & Pet', subtitle: 'ファミリー・ペット', icon: 'Family', desc: '大切な家族と一緒に過ごせる空間', details: ['ペット宿泊可(追加料金あり)', 'ファミリールーム'] }, { id: 'kitchen', image: imgBase + "star3/room-kitchen-1.jpg", title: 'Kitchen & Dining', subtitle: 'キッチン・ダイニング', icon: 'Kitchen', desc: '自炊に必要な設備が充実', details: ['キッチン・コンロ', '冷蔵庫', '電子レンジ', '電気ポット', 'キッチン用品・食器類', 'ダイニングテーブル', '清掃用品'] }, { id: 'bath_laundry', image: imgBase + "star3/room-bath-1.jpg", title: 'Bath & Laundry', subtitle: 'バス・ランドリー', icon: 'Bath', desc: '清潔で快適な水回り設備', details: ['専用バスルーム (バスタブ・シャワー)', 'ウォシュレット (ビデ)', '無料バスアメニティ・タオル・スリッパ', 'ヘアドライヤー', '洗濯機'] }, { id: 'facilities', image: imgBase + "star3/hero-3.jpg", title: 'Facilities & Security', subtitle: '施設・セキュリティ', icon: 'Safety', desc: '安心のセキュリティと周辺設備', details: ['周辺エリア専用パーキング (要事前予約: ¥2,000/日)', 'バルコニー', '専用チェックイン / チェックアウト (鍵で入室)', '屋外に監視カメラ・火災警報器', '全館禁煙ルーム'] } ], floor_plans: [ { level: '1F', img: imgBase + "star3/floor.jpg" }, { level: '2F', img: imgBase + "star3/floor-2.jpg" } ] } ]; const allProperties = [...manualProperties, ...dynamicProperties]; const wpNews = dynamicNews.length > 0 ? dynamicNews : [ { id: 'd1', date: '2026.03.04', category: 'INFO', title: 'AIRSTAR 別府本邸がオープンしました', content: '別府に新しい体験型ヴィラが誕生しました。', link: '#' } ]; const experienceData = dynamicExperiences.length > 0 ? dynamicExperiences : [ { id: 'd_exp', title: '観光案内なし', img: imgBase + "hero-1.avif", tags: [], size: 'normal' } ]; const wpFaqs = dynamicFaqs.length > 0 ? dynamicFaqs : [ { q: "FAQなし", a: "" } ]; const regionData = [ { name: 'FUKUOKA', label: '福岡' }, { name: 'KUMAMOTO', label: '熊本' }, { name: 'NAGASAKI', label: '長崎' }, { name: 'OITA', label: '大分' }, { name: 'SAGA', label: '佐賀' }, { name: 'KYOTO', label: '京都' } ]; // --- 4. コンポーネント --- const FaqItem = ({ faq }) => { const [isOpen, setIsOpen] = useState(false); return (
); }; const Navigation = ({ scrolled, onNavigate }) => { const [adminBarOffset, setAdminBarOffset] = useState(0); useEffect(() => { if (document.body.classList.contains('admin-bar')) setAdminBarOffset(32); }, []); const bgColor = scrolled ? 'bg-white/95 backdrop-blur-md shadow-sm border-b' : 'bg-transparent'; return ( ); }; // Bento Grid Gallery (部屋詳細) const GalleryModal = ({ data, onClose }) => { if (!data) return null; return (

{data.area || 'Gallery'}

{data.title}

{data.bedInfo && ( {data.bedInfo} )}
{(data.gallery || []).map((img, i) => { let spanClass = "col-span-1 md:col-span-1"; if (i === 0) spanClass = "col-span-2 row-span-2 md:col-span-2 md:row-span-2"; else if (i === 3) spanClass = "col-span-2 md:col-span-2"; return (
); })}
— END OF GALLERY —
); }; // 詳細モーダル (アメニティ用・画像表示機能付き) const DetailModal = ({ data, onClose }) => { if (!data) return null; const Icon = Icons[data.icon] || Icons.Check; return (

{data.title}

{data.subtitle}

{data.image && (
{data.subtitle}
)}

Amenities List

    {data.details.map((item, i) => (
  • {item}
  • ))}
); }; const RegionListView = ({ region, items, onBack, onSelect }) => (

Explore Area

STAYS IN {region}

{items.length === 0 ?

No properties found in this region.

: items.map((item) => { if (!item) return null; const safeStats = item.stats || {}; const safeImages = Array.isArray(item.images) ? item.images : []; const mainImage = (safeImages.length > 0 && safeImages[0]) ? safeImages[0] : imgBase + "hero-1.avif"; const propName = item.name || 'No Name'; return (
onSelect(item)} className="group cursor-pointer bg-white rounded-lg border border-slate-200 shadow-sm hover:shadow-xl transition-all duration-300 overflow-hidden text-left flex flex-col">
{propName} { e.target.onerror = null; e.target.src = imgBase + "hero-1.avif"; }} />
View Details

{propName}

{safeStats.capacity &&
{safeStats.capacity}
} {safeStats.layout &&
{safeStats.layout}
} {safeStats.check_in &&
{safeStats.check_in}
}
Price / Night{safeStats.price || 'Check'}
); })}
); const NewsDetailView = ({ news, onBack }) => { useEffect(() => { window.scrollTo(0, 0); }, []); if (!news) return null; return (
Latest Updates
{news.date}{news.category}

{news.title}

); }; const StandardDetailView = ({ item, onBack }) => { useEffect(() => { window.scrollTo(0, 0); }, []); if (!item) return null; return (
AIRSTAR STAY

{item.name}

{item.subtitle}

Capacity

{item.stats?.capacity || '-'}

Size

{item.stats?.sqm || '-'}

Beds

{item.stats?.beds || '-'}

Check In / Out

{item.stats?.check_in || '-'}

About this space

{item.description}

Official Best Rate

{item.stats?.price || 'Check Availability'}

予約状況を確認する
); }; const SpecialDetailView = ({ item, onBack }) => { const [activeFloor, setActiveFloor] = useState('1F'); const [selectedGallery, setSelectedGallery] = useState(null); const [selectedAmenity, setSelectedAmenity] = useState(null); const [isBtnVisible, setIsBtnVisible] = useState(false); const scrollRef = useRef(null); // 初期化時に最初のフロアを選択状態にする useEffect(() => { if (item.floor_plans && item.floor_plans.length > 0) { setActiveFloor(item.floor_plans[0].level); } }, [item]); // ★追加:モーダルが開いている時は背景のスクロールを無効化する useEffect(() => { if (selectedGallery || selectedAmenity) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = ''; } return () => { document.body.style.overflow = ''; }; }, [selectedGallery, selectedAmenity]); useEffect(() => { const handleScroll = () => setIsBtnVisible(window.scrollY > 300); window.addEventListener('scroll', handleScroll); window.scrollTo(0, 0); return () => window.removeEventListener('scroll', handleScroll); }, []); const slide = (dir) => { if (scrollRef.current) { const { scrollLeft, clientWidth } = scrollRef.current; scrollRef.current.scrollTo({ left: dir === 'L' ? scrollLeft - clientWidth : scrollLeft + clientWidth, behavior: 'smooth' }); } }; if (!item) return null; return (
{selectedGallery && setSelectedGallery(null)} />} {selectedAmenity && setSelectedAmenity(null)} />}

Official Best Rate

{item.name}

ベストレートで予約する

{item.name}

{Object.entries({ 'Floor Area': item.stats?.sqm, 'Layout': item.stats?.layout, 'Beds': item.stats?.beds, 'Capacity': item.stats?.capacity }).map(([key, val]) => (
{val || '-'}{key}
))}

Concept

{item.subtitle}

{item.description}

{/* ★追加:強み訴求セクション (PCでは左画像・右テキスト) */} {item.feature && (

Feature

{item.feature.title}

{item.feature.description}

)} {item.floor_plans && item.floor_plans.length > 0 && (

Floor Plan

フロアプラン

{item.id === 'second' ? '【福岡最大級の一棟貸切戸建。最大25名まで宿泊可能な唯一無二の空間】' : '【一棟まるごとが遊び場に。多彩な滞在体験を集約したヴィラ】'}

{item.floor_plans.map(p => ( ))}
f.level === activeFloor)?.img} className="max-w-[1000px] w-full h-auto rounded-lg shadow-2xl mix-blend-multiply transition-opacity duration-500" alt="Floor Plan" />
)} {item.rooms && (

Rooms & Space

客室と空間

{item.rooms.map(room => (
setSelectedGallery(room)} className="flex-none w-[85vw] md:w-[calc(25%-24px)] group cursor-pointer bg-white rounded-xl shadow-md overflow-hidden hover:shadow-2xl transition-all duration-500 snap-start border border-slate-100 text-left text-left">
{room.area}

{room.title}

{room.bedInfo}

))}
)}

Amenities & Hospitality

{item.id === 'second' ? 大人数でも、手ぶらでも。
快適さを極めた充実の設備。
: 日常を忘れさせる、
ワンランク上のこだわり設備。
}

{item.amenitiesList?.map((a, i) => { const Icon = Icons[a.icon] || Icons.Check; return (
setSelectedAmenity(a)} className="bg-white text-slate-900 rounded-xl p-6 shadow-lg border border-slate-100 cursor-pointer hover:-translate-y-1 hover:shadow-xl transition-all duration-300 group flex flex-col items-center text-center h-full">

{a.subtitle}

{a.desc}

View Details
); })}
{/* FAQの出し分け処理(プランB用) */} {(() => { // 現在開いている物件(item.id)のチェックが入っているか、'common'が入っているFAQだけを残す const currentFaqs = wpFaqs.filter(faq => { if (!faq.categories) return false; return faq.categories.includes(item.id) || faq.categories.includes('common'); }); if (currentFaqs.length === 0) return null; return (

FAQ

よくある質問

{currentFaqs.map((faq, i) => )}
); })()}

Access

アクセス

{item.access.address}

{item.access.transport.map((line, i) => (

{line}

))}
Google Mapで開く
AIRSTAR

© 2026 AIRSTAR HOTEL. All rights reserved.

); }; // --- 5. アプリ本体 --- const App = () => { const { useState, useEffect, useMemo } = React; const [view, setView] = useState('home'); const [selectedProperty, setSelectedProperty] = useState(null); const [selectedNews, setSelectedNews] = useState(null); const [selectedRegion, setSelectedRegion] = useState(null); const [scrolled, setScrolled] = useState(false); const [heroIdx, setHeroIdx] = useState(0); // ブラウザバック(戻るボタン)対応 useEffect(() => { const handlePopState = (event) => { const state = event.state; if (state) { setView(state.view); if (state.view === 'detail') setSelectedProperty(allProperties.find(p => p.id === state.id)); else if (state.view === 'news-detail') setSelectedNews(wpNews.find(n => n.id === state.id)); else if (state.view === 'region-list') setSelectedRegion(state.region); } else { setView('home'); } }; window.addEventListener('popstate', handlePopState); window.history.replaceState({ view: 'home' }, '', ''); return () => window.removeEventListener('popstate', handlePopState); }, []); const heroImgs = useMemo(() => [ imgBase + "hero-1.avif", imgBase + "hero-2.avif", imgBase + "hero-3.jpeg", imgBase + "hero-4.jpeg" ], []); // 【重要】Reactからのローディング解除(成功時) useEffect(() => { const loader = document.getElementById('initial-loader'); if (loader) { setTimeout(() => { loader.style.opacity = '0'; setTimeout(() => loader.remove(), 500); }, 1000); } }, []); useEffect(() => { const handleScroll = () => setScrolled(window.scrollY > 50); window.addEventListener('scroll', handleScroll); const t = setInterval(() => setHeroIdx(p => (p + 1) % 4), 5000); return () => { window.removeEventListener('scroll', handleScroll); clearInterval(t); }; }, []); const onNavigate = (targetIdOrType) => { if (['concept', 'special', 'facilities', 'experience', 'news', 'home'].includes(targetIdOrType)) { if (view !== 'home') { setView('home'); window.history.pushState({ view: 'home' }, '', ''); // 履歴に追加 setTimeout(() => { if (targetIdOrType === 'home') window.scrollTo({top: 0, behavior: 'smooth'}); else { const el = document.getElementById(targetIdOrType); if (el) el.scrollIntoView({ behavior: 'smooth' }); } }, 100); } else { if (targetIdOrType === 'home') window.scrollTo({top: 0, behavior: 'smooth'}); else { const el = document.getElementById(targetIdOrType); if (el) el.scrollIntoView({ behavior: 'smooth' }); } } } }; const goToDetail = (item) => { setSelectedProperty(item); setView('detail'); window.history.pushState({ view: 'detail', id: item.id }, '', ''); window.scrollTo(0, 0); }; const goToNews = (newsItem) => { setSelectedNews(newsItem); setView('news-detail'); window.history.pushState({ view: 'news-detail', id: newsItem.id }, '', ''); window.scrollTo(0, 0); }; const goToRegion = (regionName) => { setSelectedRegion(regionName); setView('region-list'); window.history.pushState({ view: 'region-list', region: regionName }, '', ''); window.scrollTo(0, 0); }; const goBackHome = () => { setView('home'); window.history.pushState({ view: 'home' }, '', ''); window.scrollTo(0, 0); }; if (view === 'news-detail') return ; if (view === 'detail' && selectedProperty) { return selectedProperty.type === 'special' ? : ; } if (view === 'region-list') { const items = (allProperties || []).filter(p => { if (!p.region) return false; // ★追加:特別物件(AIRSTAR SECONDや別府本邸、その他の特別施設)は地域別一覧には表示しない if (p.type === 'special') return false; const r = String(p.region).toUpperCase().trim(); const s = String(selectedRegion).toUpperCase(); const match = r === s; const matchJP = (s === 'FUKUOKA' && r === '福岡') || (s === 'KUMAMOTO' && r === '熊本') || (s === 'NAGASAKI' && r === '長崎') || (s === 'OITA' && r === '大分') || (s === 'SAGA' && r === '佐賀') || (s === 'KYOTO' && r === '京都'); return match || matchJP; }); return (
goToDetail(item)} />
); } return (

The Art of Hospitality

Breath in
the Moment.

{heroImgs.map((_, i) => (

Our Philosophy

「みんなで集まれる場所が欲しかった」を、叶える。

思い出を刻むための拠点を創造しています。ただ泊まるだけではない、一体感と安心感を両立させた特別な空間。

Signature Stays

The Collection

{manualProperties.map(item => (
goToDetail(item)} className="group cursor-pointer text-center">

{item.region}

{item.name}

View Experience
))}

Explore Destinations

Destinations

{regionData.map(r => (
goToRegion(r.name)} className="group relative aspect-[16/10] rounded-xl overflow-hidden cursor-pointer shadow-md text-center" style={{ background: 'linear-gradient(135deg, #1e3a8a 0%, #0c1a40 100%)' }}>

{r.name}

{r.label}
))}

Local Discoveries

Experience

地域の魅力を再発見する旅。伝統、食、そして自然を深く味わうひととき。

{experienceData.map(exp => (
{exp.tags?.map(t => ({t}))}

{exp.title}

))}

Latest Updates

AIRSTAR

© 2026 AIRSTAR HOTEL. All rights reserved.

); }; const rootEl = document.getElementById('root'); if (rootEl) { const root = createRoot(rootEl); root.render(); } else { throw new Error('Root element not found'); } } catch (e) { console.error("AIRSTAR App Error:", e); // エラー発生時もローディング解除 const loader = document.getElementById('initial-loader'); if (loader) loader.style.display = 'none'; } })();