feat 整合多頁面 導覽列

This commit is contained in:
2026-05-09 01:00:07 +08:00
parent 16e89049de
commit 91d2f82a26
11 changed files with 1533 additions and 196 deletions
+204 -169
View File
@@ -9,7 +9,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
</head>
<body>
<body class="map-page">
<!-- 備註:本頁一定要是完整 HTML 文件(含 head 與 style.css),
否則會變成瀏覽器的「片段模式」,樣式常常吃不到或跑版。 -->
<header class="map-archive-header">
@@ -21,24 +21,76 @@
</div>
</header>
<nav class="member-tabs" aria-label="成員篩選">
<button class="tab-btn active" data-member="all" aria-pressed="true">全部行程</button>
<button class="tab-btn" data-member="kogo" aria-pressed="false">高高父子遊台灣</button>
<nav class="portal-nav" aria-label="水晶男孩推廣部導覽">
<a class="logo" href="index.html"><img src="./img/logov.svg" alt="SECHSKIES Logo"></a>
<ul>
<li><a href="index.html#intro">淪陷瞬間</a>
<ul class="portal-submenu">
<li><a href="index.html#mission">成立的初衷</a></li>
<li><a href="index.html#current">跨時空軌跡</a></li>
<li><a href="index.html#story">好奇的代價</a></li>
</ul>
</li>
<li><a href="chronicle.html">十六年約定</a>
<ul class="portal-submenu">
<li><a href="chronicle.html#challenge">無限挑戰</a></li>
<li><a href="chronicle.html#ssg2">六六歌第二季</a></li>
<li><a href="chronicle.html#sechskies-profile">水晶男孩</a></li>
<li><a href="chronicle.html#gather">召集</a></li>
<li><a href="chronicle.html#negotiate">正式交涉</a></li>
<li><a href="chronicle.html#variables">變數</a></li>
<li><a href="chronicle.html#surprise">驚喜</a></li>
<li><a href="chronicle.html#final-stage">登場</a></li>
</ul>
</li>
<li><a href="index.html#archive">黃色留聲機</a>
<ul class="portal-submenu">
<li><a href="classic.html">輝煌全盛期</a></li>
<li><a href="index.html#new">啟動新篇章</a></li>
</ul>
</li>
<li><a href="concert.html">現場的悸動</a>
<ul class="portal-submenu">
<li><a href="concert.html#classic-stage" data-coming-soon="true" aria-disabled="true">燦爛的最初</a></li>
<li><a href="concert.html#reunion-stage">永恆的重逢</a></li>
</ul>
</li>
<li class="coming-soon"><a href="variety.html" data-coming-soon="true" aria-disabled="true">綜藝熱播中</a>
<ul class="portal-submenu">
<li><a href="variety.html#jiwon" data-coming-soon="true" aria-disabled="true">瘋子與天才</a></li>
<li><a href="variety.html#group" data-coming-soon="true" aria-disabled="true">舞台外真實</a></li>
</ul>
</li>
<li><a href="map.html">聖地巡禮</a>
<ul class="portal-submenu">
<li><a href="map.html#taiwan">台灣聖地</a></li>
<li><a href="map.html#global">海外遠征</a></li>
</ul>
</li>
</ul>
</nav>
<div class="member-tabs" aria-label="成員篩選">
<button class="tab-btn active" data-member="all" aria-pressed="true">全部行程</button>
<button class="tab-btn" data-member="ko" aria-pressed="false">高高父子遊台灣</button>
<button class="tab-btn" data-member="eun" aria-pressed="false">殷空少搭飛機去台灣高雄</button>
</div>
<canvas id="particles"></canvas>
<input id="itinerary-search" type="search" aria-label="行程搜尋"
placeholder="搜尋地點、描述、標籤(例如:九份、夜市、Day 2)">
<main class="content-container map-layout">
<main id="taiwan" class="content-container map-layout">
<!-- 備註:地圖區固定使用你的 Google My Maps iframe。
這裡不改地圖資料來源,右側列表只負責敘事與導覽。 -->
<section class="map-sticky">
<h2 class="map-title">水晶男孩台灣行程地圖</h2>
<iframe id="member-map" title="SECHSKIES 踩點地圖" loading="lazy" referrerpolicy="no-referrer-when-downgrade"
src="https://www.google.com/maps/d/embed?mid=1xpAsSoO8gNmMiW4x2sfkndISFTtjMQDw&hl=zh-TW&ehbc=2E312F">
src="https://www.google.com/maps/d/embed?mid=1VGZ76SPPjm3NWCBQe-hkm08oe5WPRJI&ehbc=2E312F">
</iframe>
<a id="open-map-link" class="map-link" target="_blank"
href="https://www.google.com/maps/d/u/0/viewer?mid=1xpAsSoO8gNmMiW4x2sfkndISFTtjMQDw">
href="https://www.google.com/maps/d/u/0/viewer?mid=1VGZ76SPPjm3NWCBQe-hkm08oe5WPRJI">
在 Google My Maps 開啟完整地圖
</a>
</section>
@@ -46,7 +98,141 @@
<section class="itinerary-list">
<!-- 備註:每張卡的 data-* 是「細節面板的資料來源」。
你只要改 data-date/title/desc/quote/tag/link 和圖片,就會同步更新下方介紹。 -->
<article class="polaroid-card active" data-member="kogo" data-date="Day 1" data-title="臺灣桃園國際機場"
<article class="polaroid-card active" data-member="eun" data-date="殷志源 Day 1" data-title="仁川國際機場"
data-desc="殷空少搭飛機去台灣高雄 Day 1 起點,從仁川出發。"
data-quote="高雄,我們來了。" data-tag="#殷志源 #Day1 #出發"
data-link="https://maps.google.com/?q=仁川國際機場">
<div class="photo-frame">
<img src="https://picsum.photos/seed/eun-khh-day1-1/640/420" alt="殷志源高雄行程節目截圖-仁川國際機場">
</div>
<div class="card-content">
<span class="date">殷志源 Day 1</span>
<h3>仁川國際機場</h3>
<p class="description">殷志源高雄行程第一站。</p>
<div class="tag">#殷志源 #Day1</div>
</div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 1" data-title="高雄國際機場"
data-desc="抵達高雄,正式開始在地行程。"
data-quote="落地就是旅行模式開啟。" data-tag="#殷志源 #Day1 #高雄"
data-link="https://maps.google.com/?q=高雄國際機場">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day1-2/640/420" alt="殷志源高雄行程節目截圖-高雄國際機場"></div>
<div class="card-content"><span class="date">殷志源 Day 1</span><h3>高雄國際機場</h3><p class="description">殷志源高雄行程第二站。</p><div class="tag">#殷志源 #Day1</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 1" data-title="星巴克小港國際站門市"
data-desc="機場周邊補給點,為 Day 1 暖身。"
data-quote="先來一杯,狀態就到位。" data-tag="#殷志源 #Day1 #咖啡"
data-link="https://maps.google.com/?q=星巴克小港國際站門市">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day1-3/640/420" alt="殷志源高雄行程節目截圖-星巴克小港國際站門市"></div>
<div class="card-content"><span class="date">殷志源 Day 1</span><h3>星巴克小港國際站門市</h3><p class="description">殷志源高雄行程第三站。</p><div class="tag">#殷志源 #Day1</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 1" data-title="元帝廟北極亭"
data-desc="在地信仰文化路線,感受高雄生活節奏。"
data-quote="走進廟埕,城市的日常就有了溫度。" data-tag="#殷志源 #Day1 #文化"
data-link="https://maps.google.com/?q=元帝廟北極亭">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day1-4/640/420" alt="殷志源高雄行程節目截圖-元帝廟北極亭"></div>
<div class="card-content"><span class="date">殷志源 Day 1</span><h3>元帝廟北極亭</h3><p class="description">殷志源高雄行程第四站。</p><div class="tag">#殷志源 #Day1</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 1" data-title="桃子園餐廳"
data-desc="Day 1 用餐點,銜接下一天行程。"
data-quote="每一站都要有好吃的收尾。" data-tag="#殷志源 #Day1 #美食"
data-link="https://maps.google.com/?q=桃子園餐廳">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day1-5/640/420" alt="殷志源高雄行程節目截圖-桃子園餐廳"></div>
<div class="card-content"><span class="date">殷志源 Day 1</span><h3>桃子園餐廳</h3><p class="description">殷志源高雄行程第五站。</p><div class="tag">#殷志源 #Day1</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="哈囉市場"
data-desc="Day 2 從市場開始,走進高雄在地日常。"
data-quote="市場最能看見一座城市的生活感。" data-tag="#殷志源 #Day2 #市場"
data-link="https://maps.google.com/?q=哈囉市場">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-1/640/420" alt="殷志源高雄行程節目截圖-哈囉市場"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>哈囉市場</h3><p class="description">殷志源高雄行程 Day 2 第一站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="蓮池潭"
data-desc="高雄經典景點,白天景色與步行路線都很適合取景。"
data-quote="每一步都有風景可以拍。" data-tag="#殷志源 #Day2 #景點"
data-link="https://maps.google.com/?q=蓮池潭">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-2/640/420" alt="殷志源高雄行程節目截圖-蓮池潭"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>蓮池潭</h3><p class="description">殷志源高雄行程 Day 2 第二站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="龍虎塔"
data-desc="蓮池潭代表地標,適合搭配導覽與拍照段落。"
data-quote="高雄的經典場景之一。" data-tag="#殷志源 #Day2 #地標"
data-link="https://maps.google.com/?q=龍虎塔">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-3/640/420" alt="殷志源高雄行程節目截圖-龍虎塔"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>龍虎塔</h3><p class="description">殷志源高雄行程 Day 2 第三站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="輕軌高雄展覽館站(新光碼頭)"
data-desc="港區路線轉乘點,串接後續海線行程。"
data-quote="搭上輕軌,城市風景一路展開。" data-tag="#殷志源 #Day2 #輕軌"
data-link="https://maps.google.com/?q=輕軌高雄展覽館站(新光碼頭)">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-4/640/420" alt="殷志源高雄行程節目截圖-輕軌高雄展覽館站"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>輕軌高雄展覽館站(新光碼頭)</h3><p class="description">殷志源高雄行程 Day 2 第四站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="捷運哈瑪星站(輕軌哈瑪星站)"
data-desc="山海交界的人氣轉運點,步行動線完整。"
data-quote="到了哈瑪星,海港味就很濃。" data-tag="#殷志源 #Day2 #捷運"
data-link="https://maps.google.com/?q=捷運哈瑪星站">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-5/640/420" alt="殷志源高雄行程節目截圖-捷運哈瑪星站"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>捷運哈瑪星站(輕軌哈瑪星站)</h3><p class="description">殷志源高雄行程 Day 2 第五站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="仁武烤鴨"
data-desc="高雄人氣美食站,安排在中段補給。"
data-quote="好吃到會想直接再外帶一份。" data-tag="#殷志源 #Day2 #美食"
data-link="https://maps.google.com/?q=仁武烤鴨">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-6/640/420" alt="殷志源高雄行程節目截圖-仁武烤鴨"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>仁武烤鴨</h3><p class="description">殷志源高雄行程 Day 2 第六站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="握咖啡西子灣店(總店)"
data-desc="海邊咖啡節奏,適合休息和訪談。"
data-quote="在西子灣,時間會慢下來。" data-tag="#殷志源 #Day2 #咖啡"
data-link="https://maps.google.com/?q=握咖啡西子灣店(總店)">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-7/640/420" alt="殷志源高雄行程節目截圖-握咖啡西子灣店"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>握咖啡西子灣店(總店)</h3><p class="description">殷志源高雄行程 Day 2 第七站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="鼓山輪渡站"
data-desc="前往旗津的重要交通節點。"
data-quote="坐上渡輪,旅程感直接拉滿。" data-tag="#殷志源 #Day2 #輪渡"
data-link="https://maps.google.com/?q=鼓山輪渡站">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-8/640/420" alt="殷志源高雄行程節目截圖-鼓山輪渡站"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>鼓山輪渡站</h3><p class="description">殷志源高雄行程 Day 2 第八站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="旗津輪渡站"
data-desc="抵達旗津,展開海岸線路段。"
data-quote="到了旗津,風都不一樣。" data-tag="#殷志源 #Day2 #旗津"
data-link="https://maps.google.com/?q=旗津輪渡站">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-9/640/420" alt="殷志源高雄行程節目截圖-旗津輪渡站"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>旗津輪渡站</h3><p class="description">殷志源高雄行程 Day 2 第九站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="樂騎腳踏車、電動車、遊園車(旗津)"
data-desc="旗津移動工具租借點(和隔壁不是同一間)。"
data-quote="騎上車,海邊路線更完整。" data-tag="#殷志源 #Day2 #旗津"
data-link="https://maps.google.com/?q=樂騎腳踏車 旗津">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-10/640/420" alt="殷志源高雄行程節目截圖-樂騎腳踏車"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>樂騎腳踏車、電動車、遊園車(旗津)</h3><p class="description">殷志源高雄行程 Day 2 第十站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="旗津彩虹教堂"
data-desc="旗津拍照地標之一。"
data-quote="彩虹教堂是旗津必拍清單。" data-tag="#殷志源 #Day2 #旗津"
data-link="https://maps.google.com/?q=旗津彩虹教堂">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-11/640/420" alt="殷志源高雄行程節目截圖-旗津彩虹教堂"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>旗津彩虹教堂</h3><p class="description">殷志源高雄行程 Day 2 第十一站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="旗津貝殼館"
data-desc="旗津主題展點,補足海線內容。"
data-quote="一站一站把海線故事拼起來。" data-tag="#殷志源 #Day2 #旗津"
data-link="https://maps.google.com/?q=旗津貝殼館">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-12/640/420" alt="殷志源高雄行程節目截圖-旗津貝殼館"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>旗津貝殼館</h3><p class="description">殷志源高雄行程 Day 2 第十二站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="eun" data-date="殷志源 Day 2" data-title="海忠寶活海產店"
data-desc="高雄海線行程收尾美食站。"
data-quote="最後用海鮮把今天完美收尾。" data-tag="#殷志源 #Day2 #美食"
data-link="https://maps.google.com/?q=海忠寶活海產店">
<div class="photo-frame"><img src="https://picsum.photos/seed/eun-khh-day2-13/640/420" alt="殷志源高雄行程節目截圖-海忠寶活海產店"></div>
<div class="card-content"><span class="date">殷志源 Day 2</span><h3>海忠寶活海產店</h3><p class="description">殷志源高雄行程 Day 2 第十三站。</p><div class="tag">#殷志源 #Day2</div></div>
</article>
<article class="polaroid-card" data-member="kogo" data-date="高志溶 Day 1" data-title="臺灣桃園國際機場"
data-desc="高高父子遊台灣 Day 1 首站,從桃園機場正式開啟三天行程。"
data-quote="旅程從落地那一刻就開始了。" data-tag="#高高父子遊台灣 #Day1 #機場"
data-link="https://maps.google.com/?q=臺灣桃園國際機場">
@@ -54,7 +240,7 @@
<img src="https://picsum.photos/seed/day1-airport/640/420" alt="高高父子遊台灣節目截圖-臺灣桃園國際機場">
</div>
<div class="card-content">
<span class="date">Day 1</span>
<span class="date">高志溶 Day 1</span>
<h3>臺灣桃園國際機場</h3>
<p class="description">高高父子遊台灣 Day 1 第一站。</p>
<div class="tag">#高高父子遊台灣 #Day1</div>
@@ -332,167 +518,16 @@
</article>
</section>
</main>
<footer id="contact">
<div id="global"></div>
<p>SECHSKIES Fanpage &copy; 2026 - 黃色氣球永遠飄揚</p>
<a href="https://jekkinoopy.github.io/Portfolio/" class="studio-link" target="_blank">
Design by <strong>Jekkinoopy Studio</strong>
</a>
</footer>
<script>
(function () {
const tabs = Array.from(document.querySelectorAll(".tab-btn"));
const cards = Array.from(document.querySelectorAll(".polaroid-card"));
const searchInput = document.getElementById("itinerary-search");
const itineraryList = document.querySelector(".itinerary-list");
const detailPanel = document.getElementById("detail-panel");
const detailDate = document.getElementById("detail-date");
const detailTitle = document.getElementById("detail-title");
const detailDesc = document.getElementById("detail-desc");
const detailQuote = document.getElementById("detail-quote");
const detailTag = document.getElementById("detail-tag");
const detailLink = document.getElementById("detail-link");
const detailImage = document.getElementById("detail-image");
const dayGroups = new Map();
let currentMember = "all";
let currentKeyword = "";
function getCardSearchText(card) {
return [
card.dataset.date || "",
card.dataset.title || "",
card.dataset.desc || "",
card.dataset.tag || "",
].join(" ").toLowerCase();
}
function createDayGroup(dayLabel) {
const group = document.createElement("section");
group.className = "day-group";
group.dataset.day = dayLabel;
const toggle = document.createElement("button");
toggle.type = "button";
toggle.className = "day-toggle";
toggle.setAttribute("aria-expanded", "false");
toggle.innerHTML = "<span>" + dayLabel + "</span><i class='fa-solid fa-chevron-down'></i>";
const body = document.createElement("div");
body.className = "day-cards";
body.style.display = "none";
group.appendChild(toggle);
group.appendChild(body);
itineraryList.insertBefore(group, detailPanel);
dayGroups.set(dayLabel, { group, toggle, body });
return dayGroups.get(dayLabel);
}
function setDayExpanded(dayGroup, shouldExpand) {
dayGroup.toggle.setAttribute("aria-expanded", shouldExpand ? "true" : "false");
dayGroup.body.style.display = shouldExpand ? "grid" : "none";
dayGroup.group.classList.toggle("expanded", shouldExpand);
}
function initializeDayGroups() {
cards.forEach((card) => {
const dayLabel = card.dataset.date || "未分類";
const dayGroup = dayGroups.get(dayLabel) || createDayGroup(dayLabel);
dayGroup.body.appendChild(card);
});
}
function updateDayGroupVisibility() {
dayGroups.forEach(({ group, body, toggle }) => {
const visibleCards = Array.from(body.querySelectorAll(".polaroid-card")).filter((card) => card.style.display !== "none");
group.style.display = visibleCards.length ? "" : "none";
if (!visibleCards.length) {
setDayExpanded({ group, toggle, body }, false);
}
});
}
function ensureExpandedForCard(card) {
const dayGroup = dayGroups.get(card.dataset.date || "未分類");
if (!dayGroup) return;
setDayExpanded(dayGroup, true);
}
function setActiveCard(card, options = {}) {
const { expandDay = true } = options;
cards.forEach((item) => item.classList.remove("active"));
card.classList.add("active");
if (expandDay) {
ensureExpandedForCard(card);
}
detailDate.textContent = card.dataset.date || "";
detailTitle.textContent = card.dataset.title || "";
detailDesc.textContent = card.dataset.desc || "";
detailQuote.textContent = "「" + (card.dataset.quote || "") + "」";
detailTag.textContent = card.dataset.tag || "";
detailLink.href = card.dataset.link || "#";
detailImage.src = card.querySelector("img").src;
detailImage.alt = "節目截圖 - " + (card.dataset.title || "行程地點");
}
function applyFilter() {
let firstVisible = null;
cards.forEach((card) => {
const matchedMember = currentMember === "all" || card.dataset.member === currentMember;
const matchedKeyword = !currentKeyword || getCardSearchText(card).includes(currentKeyword);
const matched = matchedMember && matchedKeyword;
card.style.display = matched ? "" : "none";
if (matched && !firstVisible) firstVisible = card;
});
updateDayGroupVisibility();
const activeVisibleCard = cards.find((card) => card.classList.contains("active") && card.style.display !== "none");
const fallbackCard = activeVisibleCard || firstVisible;
if (fallbackCard) {
// 保持預設收合:篩選/初始化時只更新細節,不主動展開 Day 群組。
setActiveCard(fallbackCard, { expandDay: false });
}
}
tabs.forEach((tab) => {
tab.addEventListener("click", () => {
tabs.forEach((item) => {
item.classList.remove("active");
item.setAttribute("aria-pressed", "false");
});
tab.classList.add("active");
tab.setAttribute("aria-pressed", "true");
currentMember = tab.dataset.member;
applyFilter();
});
});
if (searchInput) {
searchInput.addEventListener("input", (event) => {
currentKeyword = event.target.value.trim().toLowerCase();
applyFilter();
});
}
itineraryList.addEventListener("click", (event) => {
const toggle = event.target.closest(".day-toggle");
if (!toggle) return;
const group = toggle.closest(".day-group");
if (!group) return;
const dayGroup = dayGroups.get(group.dataset.day);
if (!dayGroup) return;
const isExpanded = dayGroup.toggle.getAttribute("aria-expanded") === "true";
setDayExpanded(dayGroup, !isExpanded);
});
cards.forEach((card) => {
card.addEventListener("click", () => {
setActiveCard(card, { expandDay: true });
if (window.innerWidth < 920) {
detailPanel.scrollIntoView({ behavior: "smooth", block: "start" });
}
});
});
initializeDayGroups();
applyFilter();
})();
</script>
<script src="map.js"></script>
<script src="portal-nav.js"></script>
</body>