PageSourceSearch

https://storeasynewwebsite.vercel.app/_next/static/chunks/12arsdzc…?dpl=dpl_9mpvBi8hR9q4oHTbfvW8rWD14SaV

js storeasynewwebsite.vercel.app collected 2026-10-03 07:48:44 UTC 44,272 bytes, 244 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,761383,e=>{"use strict";var t=e.i(843476),r=e.i(853956),o=e.i(271645),n=e.i(566595),a=e.i(263676),i=e.i(102773),s=e.i(420865),l=e.i(849862),d=e.i(578344),c=e.i(678162),p=e.i(867927),m=e.i(716327),u=e.i(689664),g=e.i(975157),x=e.i(193186),h=e.i(893401),f=e.i(522016),b=e.i(618566),w=e.i(3303);function y(e){if(!e)return"旗艦據點";let t=e.match(/(?:[縣市])([^縣市區鄉鎮]{1,3}[區鄉鎮市])/);if(t&&t[1])return t[1];let r=e.match(/^([^縣市區鄉鎮]{1,3}[區鄉鎮市])/);return r&&r[1]?r[1]:"旗艦據點"}function v(e){if(!e)return"其他";let t=e.match(/^(台北市|新北市|基隆市|桃園市|新竹市|新竹縣|苗栗縣|台中市|彰化縣|南投縣|雲林縣|嘉義市|嘉義縣|台南市|高雄市|屏東縣|宜蘭縣|花蓮縣|台東縣)/);return t?t[1]:e.includes("台北")||e.includes("臺北")?"台北市":e.includes("新北")?"新北市":e.includes("台中")||e.includes("臺中")?"台中市":e.includes("台南")||e.includes("臺南")?"台南市":e.includes("高雄")?"高雄市":e.includes("桃園")?"桃園市":e.includes("新竹")?"新竹市":e.includes("基隆")?"基隆市":e.includes("屏東")?"屏東縣":"其他"}e.s(["StoreMapGrid",0,function({rawLocations:e}){let j=(0,b.useRouter)(),[k,N]=(0,o.useState)(""),[_,C]=(0,o.useState)("all"),[M,S]=(0,o.useState)(null),[F,E]=(0,o.useState)([]),[$,z]=(0,o.useState)(null),[A,P]=(0,o.useState)(!1),[I,B]=(0,o.useState)(!1),[D,W]=(0,o.useState)([]),[R,L]=(0,o.useState)(!1),[O,T]=(0,o.useState)(""),[U,q]=(0,o.useState)(null),[H,Y]=(0,o.useState)([]),Z=(0,o.useRef)(new Set),G=(0,o.useCallback)(e=>{if(!e)return"all";let t=decodeURIComponent(e).trim();return("台北"===t||"臺北"===t)&&(t="台北市"),"新北"===t&&(t="新北市"),("台中"===t||"臺中"===t)&&(t="台中市"),("台南"===t||"臺南"===t)&&(t="台南市"),"高雄"===t&&(t="高雄市"),"桃園"===t&&(t="桃園市"),"新竹"===t&&(t="新竹市"),"基隆"===t&&(t="基隆市"),"屏東"===t&&(t="屏東縣"),"苗栗"===t&&(t="苗栗縣"),"彰化"===t&&(t="彰化縣"),"宜蘭"===t&&(t="宜蘭縣"),"花蓮"===t&&(t="花蓮縣"),t.endsWith("市")||t.endsWith("縣")||"all"===t||(t+="市"),t},[]),V=(0,o.useCallback)(e=>{C(e),W([]),E([]);{let t=new URL(window.location.href);"all"===e?t.searchParams.delete("city"):t.searchParams.set("city",e),window.history.replaceState({},"",t.toString())}},[]);(0,o.useEffect)(()=>{let e=()=>{let e=new URLSearchParams(window.location.search).get("city");e&&(C(G(e)),W([]),E([]),setTimeout(()=>{el.current?.scrollIntoView({behavior:"smooth",block:"start"})},150))};return e(),window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)},[G]),(0,o.useEffect)(()=>{(async()=>{try{let e=(0,r.getApiUrl)(),t=await fetch(`${e}/api/promotions/active`),o=t.headers.get("content-type");if(t.ok&&o&&o.includes("application/json")){let e=await t.json();Y(e)}else t.ok||console.warn(`Promotions API returned status ${t.status}`)}catch(e){console.warn("Failed to fetch promotions",e)}})()},[]);let J=(0,o.useCallback)(e=>0===H.length?null:H.find(t=>Array.isArray(t.applicable_locations)&&t.applicable_locations.includes(e.name)),[H]),[Q,X]=(0,o.useState)(null),[K,ee]=(0,o.useState)(null),[et,er]=(0,o.useState)(0),eo=(0,o.useRef)(null),en=(0,o.useRef)(null),ea=(0,o.useRef)({}),ei=(0,o.useRef)({}),es=(0,o.useRef)(null),el=(0,o.useRef)(null),ed=(0,o.useRef)(null),ec=(0,o.useMemo)(()=>e.filter(e=>"inactive"!==e.status).map(e=>{let t=[];if(Array.isArray(e.image_urls)&&e.image_urls.length>0)t=e.image_urls;else if(Array.isArray(e.image_gallery)&&e.image_gallery.length>0)t=e.image_gallery;else if("string"==typeof e.image_gallery&&e.image_gallery.trim().startsWith("["))try{t=JSON.parse(e.image_gallery)}catch(e){}else e.image_url?t=[e.image_url]:Array.isArray(e.images)&&e.images.length>0&&(t=e.images);return{id:e.id,name:e.name,address:e.address,phone:e.phone||"0800-458-075",lat:Number(e.latitude??e.lat??e.seo?.latitude??25.033),lng:Number(e.longitude??e.lng??e.seo?.longitude??121.5654),category:"storeasy",hours:e.openHours||"24小時開放",features:e.features||[],color:"#3B82F6",image_urls:t,business_message:e.business_message||"",status:e.status||"active",note:e.note||"",youtube_url:e.youtube_url||"",slug:e.slug||e.id,original_path:e.original_path,google_map_url:e.google_map_url,city:e.city||v(e.address)}}),[e]),ep=(0,o.useMemo)(()=>{let e={};
1ec.forEach(t=>{let r=t.city||"其他";("台北"===r||"臺北"===r)&&(r="台北市"),"新北"===r&&(r="新北市"),("台中"===r||"臺中"===r)&&(r="台中市"),("台南"===r||"臺南"===r)&&(r="台南市"),"高雄"===r&&(r="高雄市"),"桃園"===r&&(r="桃園市"),"新竹"===r&&(r="新竹市"),"基隆"===r&&(r="基隆市"),"屏東"===r&&(r="屏東縣"),r.endsWith("市")||r.endsWith("縣")||"其他"===r||"全部據點"===r||(r+="市"),e[r]=(e[r]||0)+1});let t=Object.entries(e).map(([e,t])=>({id:e,name:e,count:t})),r=["台北市","新北市","基隆市","桃園市","新竹市","新竹縣","苗栗縣","台中市","彰化縣","南投縣","雲林縣","嘉義市","嘉義縣","台南市","高雄市","屏東縣","宜蘭縣","花蓮縣","台東縣"];return t.sort((e,t)=>{let o=r.indexOf(e.id),n=r.indexOf(t.id);return -1!==o&&-1!==n?o-n:-1!==o?-1:-1!==n?1:t.count-e.count}),[{id:"all",name:"全部據點",count:ec.length},...t]},[ec]),em=(0,o.useMemo)(()=>Array.from(new Set(ec.filter(e=>{let t=(e.name||"").includes(k)||(e.address||"").includes(k),r=e.city||"其他";("台北"===r||"臺北"===r)&&(r="台北市"),"新北"===r&&(r="新北市"),("台中"===r||"臺中"===r)&&(r="台中市"),("台南"===r||"臺南"===r)&&(r="台南市"),"高雄"===r&&(r="高雄市"),"桃園"===r&&(r="桃園市"),"新竹"===r&&(r="新竹市"),"基隆"===r&&(r="基隆市"),"屏東"===r&&(r="屏東縣"),r.endsWith("市")||r.endsWith("縣")||"其他"===r||"全部據點"===r||(r+="市");let o="all"===_||r===_;return t&&o}).map(e=>y(e.address)))).filter(Boolean).filter(e=>"旗艦據點"!==e).sort((e,t)=>e.localeCompare(t,"zh-TW")),[ec,k,_]),eu=(0,o.useMemo)(()=>{let e=ec.filter(e=>{let t=(e.name||"").includes(k)||(e.address||"").includes(k),r=e.city||"其他";("台北"===r||"臺北"===r)&&(r="台北市"),"新北"===r&&(r="新北市"),("台中"===r||"臺中"===r)&&(r="台中市"),("台南"===r||"臺南"===r)&&(r="台南市"),"高雄"===r&&(r="高雄市"),"桃園"===r&&(r="桃園市"),"新竹"===r&&(r="新竹市"),"基隆"===r&&(r="基隆市"),"屏東"===r&&(r="屏東縣"),r.endsWith("市")||r.endsWith("縣")||"其他"===r||"全部據點"===r||(r+="市");let o="all"===_||r===_,n=y(e.address),a=0===D.length||D.includes(n);return t&&o&&a}),t=["台北市","新北市","基隆市","桃園市","新竹市","新竹縣","苗栗縣","台中市","彰化縣","南投縣","雲林縣","嘉義市","嘉義縣","台南市","高雄市","屏東縣","宜蘭縣","花蓮縣","台東縣"];return e.sort((e,r)=>{let o=e=>{let t=e.city||v(e.address);return("台北"===t||"臺北"===t)&&(t="台北市"),"新北"===t&&(t="新北市"),("台中"===t||"臺中"===t)&&(t="台中市"),("台南"===t||"臺南"===t)&&(t="台南市"),"高雄"===t&&(t="高雄市"),"桃園"===t&&(t="桃園市"),"新竹"===t&&(t="新竹市"),"基隆"===t&&(t="基隆市"),"屏東"===t&&(t="屏東縣"),t.endsWith("市")||t.endsWith("縣")||"其他"===t||"全部據點"===t||(t+="市"),t},n=o(e),a=o(r),i=t.indexOf(n),s=t.indexOf(a),l=-1!==i?i:999,d=-1!==s?s:999;if(l!==d)return l-d;let c=y(e.address),p=y(r.address);if(c!==p)return c.localeCompare(p,"zh-TW");let m=e.sort_s_ino??999999,u=r.sort_s_ino??999999;return m!==u?m-u:e.name.localeCompare(r.name,"zh-TW")})},[ec,k,_,D]);(0,o.useEffect)(()=>{0!==H.length&&eu.forEach(e=>{let t=J(e);if(t&&!Z.current.has(`${e.id}-${t.id}`)){Z.current.add(`${e.id}-${t.id}`);let o=(0,r.getApiUrl)();fetch(`${o}/api/promotions/${t.id}/track`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"impression"})}).catch(console.error)}})},[eu,H]),(0,o.useEffect)(()=>{let e=["https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?auto=format&fit=crop&w=800&q=80","https://images.unsplash.com/photo-1601584115197-04ecc0da31d7?auto=format&fit=crop&w=800&q=80","https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&w=800&q=80"];return window.__openStoreYoutubeModal=e=>{X(e&&"undefined"!==e&&"null"!==e&&""!==e?e:"https://www.youtube.com/watch?v=F3wcooQ8B2M")},window.__openStoreImagesModal=t=>{let r=ec.find(e=>e.id===t);r&&(ee(r.image_urls&&r.image_urls.length>0?r.image_urls:e),er(0))},window.__viewStoreDetails=e=>{j.push(`/store/${e}`)},()=>{delete window.__openStoreYoutubeModal,delete window.__openStoreImagesModal,delete window.__viewStoreDetails}},[ec,j]);let eg=()=>{window.google&&window.google.maps&&"function"==typeof window.google.maps.Map?ex():(P(!0),B(!0))},ex=()=>
1{if(eo.current&&window.google&&window.google.maps&&"function"==typeof window.google.maps.Map)try{en.current=new window.google.maps.Map(eo.current,{center:{lat:25.033,lng:121.5654},zoom:12,disableDefaultUI:!0,zoomControl:!0,mapId:"STOREASY_MAP_ID"}),P(!0),B(!1),eh(eu)}catch(e){console.error(e),B(!0)}},eh=e=>{if(!en.current||!window.google)return;Object.values(ea.current).forEach(e=>e.map=null),ea.current={},ei.current={};let t=new window.google.maps.LatLngBounds;e.forEach(e=>{let r=J(e),o=document.createElement("img");o.src="/Favicon_white_border.png",o.width=32,o.height=32;let n=new window.google.maps.marker.AdvancedMarkerElement({position:{lat:e.lat,lng:e.lng},map:en.current,title:e.name,content:o}),a=e.image_urls&&e.image_urls.length>0?e.image_urls:["https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?auto=format&fit=crop&w=800&q=80","https://images.unsplash.com/photo-1601584115197-04ecc0da31d7?auto=format&fit=crop&w=800&q=80","https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&fit=crop&w=800&q=80"],i=e.youtube_url||"https://www.youtube.com/watch?v=F3wcooQ8B2M",s=a[0],l=e.image_urls&&e.image_urls.length>0,d=e.youtube_url&&""!==e.youtube_url.trim(),c=`
2        <div style="padding: 0; margin: 0; width: 290px; font-family: var(--font-sans), ui-sans-serif, system-ui, -apple-system, sans-serif; overflow: hidden; border-radius: 20px; box-shadow: 0 24px 48px -12px rgba(5, 26, 77, 0.22), 0 8px 16px -4px rgba(0, 0, 0, 0.06); border: 1px solid rgba(226, 232, 240, 0.8); background: #ffffff;">
3          <style>
4            /* Google InfoWindow Container Reset & Glassmorphic Overrides */
5            .gm-style-iw {
6              padding: 0 !important;
7              max-height: none !important;
8            }
9            .gm-style-iw-c {
10              padding: 0 !important;
11              border-radius: 20px !important;
12              box-shadow: 0 24px 48px -12px rgba(5, 26, 77, 0.22), 0 8px 16px -4px rgba(0, 0, 0, 0.06) !important;
13              background: #ffffff !important;
14              overflow: hidden !important;
15              border: none !important;
16              margin: 0 !important;
17            }
18            .gm-style-iw-d {
19              padding: 0 !important;
20              overflow: hidden !important;
21              margin: 0 !important;
22              max-height: none !important;
23            }
24            .gm-style .gm-style-iw-c {
25              padding: 0 !important;
26              margin: 0 !important;
27            }
28            .gm-style .gm-style-iw-d {
29              padding: 0 !important;
30              margin: 0 !important;
31              overflow: hidden !important;
32            }
33            /* 消除 Google Maps 新版 InfoWindow Header Row (.gm-style-iw-chr) 產生的頂部空白 */
34            .gm-style .gm-style-iw-chr,
35            .gm-style-iw-chr {
36              height: 0 !important;
37              min-height: 0 !important;
38              padding: 0 !important;
39              margin: 0 !important;
40              position: absolute !important;
41              top: 0 !important;
42              right: 0 !important;
43              z-index: 50 !important;
44            }
45
46            .gm-ui-hover-effect {
47              position: absolute !important;
48              top: 8px !important;
49              right: 8px !important;
50              width: 28px !important;
51              height: 28px !important;
52              background: rgba(15, 23, 42, 0.55) !important;
53              backdrop-filter: blur(8px) !important;
54              -webkit-backdrop-filter: blur(8px) !important;
55              border-radius: 50% !important;
56              display: flex !important;
57              align-items: center !important;
58              justify-content: center !important;
59              z-index: 60 !important;
60              transition: all 200ms cubic-bezier(0.23, 1, 0.32, 1) !important;
61              border: 1px solid rgba(255, 255, 255, 0.4) !important;
62              padding: 0 !important;
63              margin: 0 !important;
64            }
65            .gm-ui-hover-effect:hover {
66              background: rgba(15, 23, 42, 0.85) !important;
67              transform: scale(1.08) !important;
68            }
69            .gm-ui-hover-effect >
69 span {
70              background-color: #ffffff !important;
71              margin: 0 !important;
72            }
73            .gm-style-iw-tc::after {
74              background: #ffffff !important;
75            }
76
77            .store-btn {
78              transition: all 200ms cubic-bezier(0.23, 1, 0.32, 1) !important;
79              display: inline-flex !important;
80              align-items: center !important;
81              justify-content: center !important;
82              gap: 6px !important;
83              cursor: pointer !important;
84              border-radius: 11px !important;
85              font-size: 12px !important;
86              font-weight: 800 !important;
87              padding: 10px 12px !important;
88              flex: 1 !important;
89              text-decoration: none !important;
90              box-sizing: border-box !important;
91              border: 1px solid transparent !important;
92              line-height: 1.2 !important;
93            }
94            .store-btn:active {
95              transform: scale(0.97) !important;
96            }
97            
98            /* 主按鈕:門市詳情 */
99            .btn-primary-details {
100              background: #0B318F !important;
101              color: #FFFFFF !important;
102              border: 1px solid #0B318F !important;
103              box-shadow: 0 4px 12px rgba(11, 49, 143, 0.22) !important;
104            }
105            .btn-primary-details:hover {
106              background: #051A4D !important;
107              border-color: #051A4D !important;
108              box-shadow: 0 6px 16px rgba(5, 26, 77, 0.32) !important;
109            }
110
111            /* 次按鈕:地圖導航 */
112            .btn-secondary-nav {
113              background: #FFE100 !important;
114              color: #051A4D !important;
115              border: 1px solid #EAB308 !important;
116              box-shadow: 0 2px 8px rgba(234, 179, 8, 0.25) !important;
117            }
118            .btn-secondary-nav:hover {
119              background: #FACC15 !important;
120              border-color: #CA8A04 !important;
121              box-shadow: 0 4px 12px rgba(202, 138, 4, 0.35) !important;
122            }
123
124            /* 輔助按鈕:現場照片 & 影片介紹 */
125            .btn-auxiliary {
126              background: #F8FAFC !important;
127              color: #334155 !important;
128              border: 1px solid #E2E8F0 !important;
129              font-size: 11.5px !important;
130              font-weight: 700 !important;
131              padding: 8px 10px !important;
132            }
133            .btn-auxiliary:hover {
134              background: #F1F5F9 !important;
135              border-color: #CBD5E1 !important;
136              color: #051A4D !important;
137            }
138          </style>
139          
140          <!-- 滿版封面實景照片(頂部 100% 貼齊圓角,零 Padding、零白邊) -->
141          <div style="position: relative; width: 100%; height: 145px; overflow: hidden; margin: 0; padding: 0; background: #051A4D;">
142            <img 
143              src="${s}" 
144              alt="${e.name}" 
145              style="width: 100%; height: 100%; object-fit: cover; display: block; margin: 0; padding: 0;"
146              onerror="this.onerror=null;this.src='https://images.unsplash.com/photo-1586528116311-ad8dd3c8310d?auto=format&fit=crop&w=800&q=80';"
147            />
148            <div style="position: absolute; inset: 0; background: linear-gradient(180deg, rgba(5,26,77,0.1) 0%, rgba(0,0,0,0) 40%, rgba(5,26,77,0.75) 100%); pointer-events: none;"></div>
149            
150            <!-- 實景營業時段標籤(真實反映門市時段,例如 24H 或 10:00~19:00) -->
151            <div style="position: absolute; bottom: 10px; left: 12px; display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 700; color: #ffffff; background: rgba(15, 23, 42, 0.65); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); padding: 3px 8px; border-radius: 6px; border: 1px solid rgba(255, 255, 255, 0.25);">
152              <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
153              <span>${e.hours}</span>
154            </div>
155          </div>
156          
157          <div style="padding: 16px 18px 18px; background: #ffffff; box-sizing: border-box;">
158            <!-- 門市名稱與狀態 -->
159            <div style="display: flex; justify-content: space-between; align-items: flex-start; gap: 6px; margin-bottom: 6px;">
160              <h3 style="margin: 0; font-size: 18px; font-weight: 800; color: #051A4D; letter-spacing: -0.02em; line-height: 1.25;">
161                ${e.name}
162              </h3>
163              ${"籌備中"===e.status?`
164                <span style="display: inline-flex; align-items: center; padding: 2px 7px; background: #FEF3C7; color: #92400E; border: 1px solid #FDE68A; border-radius: 6px; font-size: 10px; font-weight: 800; shrink-0;">
165                  籌備中
166                </span>
167              `:""}
168            </div>
169            
170            <!-- 門市地址 -->
171            <p style="margin: 0 0 14px 0; font-size: 12.5px; color: #475569; font-weight: 500; display: flex; align-items: flex-start; gap: 5px; line-height: 1.45;">
172              <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#64748B" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink: 0; margin-top: 2px;"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"/><circle cx="12" cy="10" r="3"/></svg>
173              <span>${e.address}</span>
174            </p>
175
176            <!-- 當店促銷(僅在有真實專屬活動時精簡呈現) -->
177            ${r?`
178              <div style="margin: 0 0 14px 0; padding: 8px 10px; background: #FFF1F2; border: 1px solid #FECDD3; border-radius: 8px; font-size: 11px; color: #9F1239; font-weight: 700; line-height: 1.4; display: flex; align-items: center; gap: 6px;">
179                <span style="display:inline-flex; align-items:center; background: #E11D48; color: white; padding: 1px 5px; border-radius: 4px; font-size: 9.5px; font-weight: 800; letter-spacing: 0.02em;">${r.frontend_label||r.name}</span>
180                <span style="color: #475569; font-weight: 600; font-size: 10.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">${r.frontend_desc||"專屬限定優惠活動"}</span>
181              </div>
182            `:""}
183
184            <!-- 門市真實設備亮點(完全基於 loc.features,真實無造假) -->
185            ${e.features&&e.features.length>0?`
186              <div style="display: flex; gap: 5px; margin-bottom: 16px; flex-wrap: wrap;">
187                ${e.features.slice(0,4).map(e=>`
188                  <span style="padding: 3px 8px; background: #F1F5F9; color: #334155; border-radius: 6px; font-size: 11px; font-weight: 700; border: 1px solid #E2E8F0;">
189                    ${e}
190                  </span>
191                `).join("")}
192              </div>
193            `:""}
194            
195            <!-- 動作按鈕群組(清楚主次、操作直覺) -->
196            <div style="display: flex; flex-direction: column; gap: 8px; box-sizing: border-box; width: 100%;">
197              ${l||d?`
198                <div style="display: flex; gap: 6px; width: 100%; box-sizing: border-box;">
199                  ${l?`
200                    <button onclick="window.__openStoreImagesModal('${e.id}')" 
201                       class="store-btn btn-auxiliary">
202                      <svg style="width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; display: inline-block; vertical-align: middle;" viewBox="0 0 24 24">
203                        <path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/>
204                        <circle cx="12" cy="13" r="4"/>
205                      </svg>
206                      現場照片
207                    </button>
208                  `:""}
209                  ${d?`
210                    <button onclick="window.__openStoreYoutubeModal('${i}')" 
211                       class="store-btn btn-auxiliary">
212                      <svg style="width: 13px; height: 13px; fill: none; stroke: #DC2626; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; display: inline-block; vertical-align: middle;" viewBox="0 0 24 24">
213                        <path d="M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1 1.4 1.4 49.55 49.5
2135 0 0 1-16.2 0A2 2 0 0 1 2.5 17"/>
214                        <polygon points="10 15 15 12 10 9 10 15" fill="#DC2626" stroke="none" />
215                      </svg>
216                      影片介紹
217                    </button>
218                  `:""}
219                </div>
220              `:""}
221              
222              <div style="display: flex; gap: 6px; width: 100%; box-sizing: border-box;">
223                <button onclick="window.__viewStoreDetails('${e.original_path||e.slug}')"
224                   class="store-btn btn-primary-details">
225                  <svg style="width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round;" viewBox="0 0 24 24">
226                    <circle cx="11" cy="11" r="8"/>
227                    <line x1="21" y1="21" x2="16.65" y2="16.65"/>
228                  </svg>
229                  門市詳情
230                </button>
231                <a href="${(0,x.getStoreDirectionsUrl)(e)}" target="_blank" rel="noopener noreferrer" 
232                   class="store-btn btn-secondary-nav">
233                  <svg style="width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round;" viewBox="0 0 24 24">
234                    <circle cx="12" cy="12" r="10"/>
235                    <polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"/>
236                  </svg>
237                  地圖導航
238                </a>
239              </div>
240            </div>
241          </div>
242        </div>
243      `,p=new window.google.maps.InfoWindow({content:c,maxWidth:300});p.addListener("domready",()=>{document.querySelectorAll(".gm-style-iw-c, .gm-style-iw-d, .gm-style-iw-chr").forEach(e=>{e.style.padding="0",e.style.margin="0",e.classList.contains("gm-style-iw-chr")&&(e.style.height="0",e.style.minHeight="0",e.style.position="absolute")})}),ei.current[e.id]=p,n.addListener("click",()=>{ey(e)}),ea.current[e.id]=n,t.extend({lat:e.lat,lng:e.lng})}),e.length>0&&(en.current.fitBounds(t,{top:60,bottom:60,left:60,right:60}),window.google.maps.event.addListenerOnce(en.current,"idle",()=>{let t=en.current.getZoom();e.length>1&&t>14?en.current.setZoom(14):1===e.length&&t>15&&en.current.setZoom(15)}))};(0,o.useEffect)(()=>{A&&eh(eu)},[eu,A,H]),(0,o.useEffect)(()=>{es.current&&es.current.scrollTo({top:0,behavior:"smooth"})},[_,k]),(0,o.useEffect)(()=>{if(null===ed.current){ed.current=_;return}if(ed.current!==_){ed.current=_;let e=setTimeout(()=>{el.current?.scrollIntoView({behavior:"smooth",block:"start"})},150);return()=>clearTimeout(e)}},[_]),(0,o.useEffect)(()=>{let e=setInterval(()=>{window.google&&window.google.maps&&"function"==typeof window.google.maps.Map&&(clearInterval(e),A||I||ex())},300);return()=>clearInterval(e)},[A,I]);let[ef,eb]=(0,o.useState)(null),ew=e=>{if(en.current&&window.google){if(ef&&ea.current[ef]){let e=ea.current[ef];"function"==typeof e.setIcon?e.setIcon({url:"/Favicon_white_border.png",scaledSize:new window.google.maps.Size(32,32),origin:new window.google.maps.Point(0,0),anchor:new window.google.maps.Point(16,16)}):e.content&&e.content instanceof HTMLElement&&(e.content.style.transform="scale(1)",e.content.style.transition="transform 0.2s ease")}if(e&&ea.current[e.id]){eb(e.id);let t=ea.current[e.id];"function"==typeof t.setIcon?t.setIcon({url:"/Favicon_white_border.png",scaledSize:new window.google.maps.Size(42,42),origin:new window.google.maps.Point(0,0),anchor:new window.google.maps.Point(21,21)}):t.content&&t.content instanceof HTMLElement&&(t.content.style.transform="scale(1.35)",t.content.style.transition="transform 0.2s ease")}else eb(null)}},ey=e=>{if(S(e.id),en.current&&window.google){en.current.panTo({lat:e.lat,lng:e.lng}),en.current.setZoom(15);let t=ea.current[e.id],r=ei.current[e.id];t&&r&&(Object.values(ei.current).forEach(e=>e.close()),r.open(en.current,t))}};return(0,t.jsxs)("div",{className:"relative py-0 text-dark-bg",id:"store-locations",children:[(0,t.jsx)(w.default,{id:"google-maps-script",src:"https://maps.googleapis.com/maps/api/js?key=AIzaSyDYjoWzmUQYE0vVf9Uizid85MRIqV3CJWA&libraries=places,marker",strategy:"lazyOnload"}),(0,t.jsxs)("div",{ref:el,id:"location-grid",className:"bg-white border border-gray-200/90 rounded-[2rem] p-5 lg:p-6 mb-4 shadow-sm scroll-mt-24",children:[(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 pb-4 mb-5 border-b border-gray-100",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[(0,t.jsx)("div",{className:"inline-flex items-center justify-center w-10 h-10 rounded-2xl bg-primary/10 text-primary shrink-0",children:(0,t.jsx)(l.Map,{className:"w-5 h-5 text-primary"})}),(0,t.jsx)("div",{children:(0,t.jsxs)("h2",{className:"text-xl sm:text-2xl font-black text-dark-bg tracking-tight flex items-center gap-2.5",children:["全台迷你倉庫據點地圖",(0,t.jsx)("span",{className:"text-xs font-bold text-primary bg-blue-50 px-2.5 py-0.5 rounded-full border border-blue-100/60 hidden md:inline-block",children:"60+ 直營門市 ‧ 24H進出 ‧ 工業級除濕"})]})})]}),(0,t.jsxs)("button",{onClick:()=>{navigator.geolocation&&navigator.geolocation.getCurrentPosition(e=>{let{latitude:t,longitude:r}=e.coords;z({lat:t,lng:r}),E(ec.map(e=>{var o,n;let a,i,s;return{...e,distance:(o=e.lat,n=e.lng,2*Math.atan2(Math.sqrt(s=Math.sin((a=(o-t)*Math.PI/180)/2)*Math.sin(a/2)+Math.cos(t*Math.PI/180)*Math.cos(o*Math.PI/180)*Math.sin((i=(n-r)*Math.PI/180)/2)*Math.sin(i/2)),Math.sqrt(1-s))*6371)}}).sort((e,t)=>
243(e.distance||0)-(t.distance||0)).slice(0,3)),en.current&&window.google&&(en.current.panTo({lat:t,lng:r}),en.current.setZoom(13))},()=>{alert("無法取得您的位置,請確認是否允許瀏覽器存取位置資訊。")})},className:"px-4 py-2.5 bg-primary/5 hover:bg-primary/10 text-primary border border-primary/20 hover:border-primary/40 rounded-xl text-xs font-bold transition-all duration-200 flex items-center justify-center gap-2 cursor-pointer shrink-0 shadow-2xs active:scale-95",children:[(0,t.jsx)(c.LocateFixed,{className:"w-4 h-4 text-primary animate-pulse"}),(0,t.jsx)("span",{children:"定位我的位置"})]})]}),(0,t.jsxs)("div",{className:"flex flex-col lg:flex-row gap-2.5 items-stretch lg:items-center",children:[(0,t.jsxs)("div",{className:"relative w-full lg:w-[280px] xl:w-[320px] shrink-0",children:[(0,t.jsx)(n.Search,{className:"absolute left-3.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"}),(0,t.jsx)("input",{type:"text",placeholder:"搜尋據點名稱或行政區...",value:k,onChange:e=>{N(e.target.value),E([])},className:"w-full pl-10 pr-8 py-2 bg-gray-50/80 border border-gray-200/80 rounded-xl text-dark-bg placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-primary focus:bg-white text-xs md:text-sm font-semibold transition-all"}),k&&(0,t.jsx)("button",{onClick:()=>N(""),className:"absolute right-2.5 top-1/2 -translate-y-1/2 p-1",children:(0,t.jsx)(a.X,{className:"w-3.5 h-3.5 text-gray-400 hover:text-gray-600"})})]}),(0,t.jsx)("div",{className:"flex flex-nowrap overflow-x-auto lg:flex-wrap lg:overflow-x-visible gap-1.5 md:gap-2 items-center pb-1 lg:pb-0 w-full lg:w-auto lg:flex-1",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:ep.map(e=>(0,t.jsxs)("button",{onClick:()=>V(e.id),className:`px-3 py-1.5 rounded-full text-xs md:text-sm font-bold tracking-wide transition-all duration-200 border shrink-0 cursor-pointer ${_===e.id?"bg-primary border-primary text-white shadow-xs scale-[1.02]":"bg-gray-50/60 border-gray-200/60 text-gray-600 hover:bg-gray-100 hover:text-dark-bg"}`,children:[e.name," (",e.count,")"]},e.id))})]})]}),F.length>0&&(0,t.jsxs)("div",{className:"mb-8 p-6 rounded-3xl bg-blue-50 border border-blue-200 shadow-sm animate-in fade-in",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-4",children:[(0,t.jsx)(d.Navigation,{className:"w-4 h-4 text-primary animate-bounce"}),(0,t.jsx)("h4",{className:"font-extrabold text-sm text-primary uppercase tracking-widest",children:"離您當前位置最近的倉儲空間"})]}),(0,t.jsx)("div",{className:"grid sm:grid-cols-3 gap-4",children:F.map((e,r)=>(0,t.jsx)("button",{onClick:()=>ey(e),className:"text-left p-5 rounded-2xl bg-white border border-gray-200 hover:border-primary/50 hover:shadow-lg transition-all duration-300 flex flex-col justify-between group",children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsxs)("span",{className:"text-[10px] font-mono font-black text-primary",children:["#0",r+1," RECOMMENDED"]}),(0,t.jsxs)("span",{className:"text-[10px] text-gray-400 font-semibold",children:["直線 ",e.distance?.toFixed(1)," km"]})]}),(0,t.jsx)("h5",{className:"font-black text-sm text-dark-bg group-hover:text-primary transition-colors",children:e.name}),(0,t.jsxs)("p",{className:"text-[11px] text-gray-500 mt-1 line-clamp-1 flex items-center gap-1",children:[(0,t.jsx)(s.MapPin,{className:"w-3 h-3 shrink-0"})," ",e.address]})]})},e.id))})]}),(0,t.jsxs)("div",{className:"grid lg:grid-cols-12 gap-4 lg:gap-4 xl:gap-8 h-auto lg:h-[700px]",children:[(0,t.jsxs)("div",{className:"lg:col-span-6 bg-white border border-gray-200 rounded-3xl shadow-sm overflow-hidden flex flex-col h-[550px] lg:h-full",children:[(0,t.jsxs)("div",{className:"p-4 sm:p-5 border-b border-gray-100 flex items-center justify-between bg-gray-50/60",children:[(0,t.jsxs)("h3",{className:"font-black text-base xl:text-lg text-dark-bg flex items-center gap-2.5",children:[(0,t.jsx)(i.Filter,{className:"w-5 h-5 text-primary shrink-0"}),(0,t.jsx)("span",{children:"據點快搜列表"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2.5",children:["all"!==_&&em.length>0&&(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsxs)("button",{onClick:()=>{L(!R),R&&T("")},className:(0,g.cn)("text-xs font-bold px-2.5 py-1 rounded-lg flex items-center gap-1 transition-all duration-200 border cursor-pointer shadow-xs",R||D.length>0?"bg-primary text-white border-primary":"bg-white text-slate-700 border-slate-300 hover:bg-blue-50/80 hover:text-primary hover:border-blue-300"),children:[(0,t.jsx)(s.MapPin,{className:(0,g.cn)("w-3.5 h-3.5 shrink-0 transition-colors",R||D.length>0?"text-secondary":"text-slate-500")}),(0,t.jsxs)("span",{children:["行政區 ",D.length>0&&`(${D.length})`]}),(0,t.jsx)(m.ChevronDown,{className:(0,g.cn)("w-3 h-3 transition-transform duration-200",R&&"rotate-180")}
243)]}),R&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>{L(!1),T("")}}),(0,t.jsxs)("div",{className:"absolute right-0 top-full mt-2 w-56 bg-white rounded-2xl shadow-[0_12px_36px_rgba(0,0,0,0.15)] border border-gray-100 p-3 z-50 max-h-80 flex flex-col",style:{pointerEvents:"auto"},children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2 px-1 mb-2 pb-2 border-b border-gray-100 shrink-0",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("span",{className:"text-xs text-gray-500 font-extrabold",children:"篩選行政區"}),D.length>0&&(0,t.jsx)("button",{onClick:()=>W([]),className:"text-xs text-primary hover:text-blue-700 font-bold underline",children:"清除全部"})]}),(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(n.Search,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-gray-400"}),(0,t.jsx)("input",{type:"text",value:O,onChange:e=>T(e.target.value),placeholder:"搜尋行政區...",className:"w-full pl-8 pr-2 py-1.5 bg-gray-50 border border-gray-200 rounded-xl text-xs font-bold focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary"})]})]}),(0,t.jsxs)("div",{className:"overflow-y-auto flex-1 px-1 custom-scrollbar",children:[em.filter(e=>e.includes(O)).map(e=>(0,t.jsxs)("button",{onMouseEnter:()=>q(e),onMouseLeave:()=>q(null),onClick:()=>{W(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),E([])},className:(0,g.cn)("w-full text-left px-3 py-2 rounded-xl text-xs xl:text-sm font-bold transition-all flex items-center justify-between my-0.5 !cursor-pointer",D.includes(e)),style:{backgroundColor:U!==e||D.includes(e)?void 0:"#f9fafb",color:U!==e||D.includes(e)?void 0:"#111827"},children:[e,D.includes(e)&&(0,t.jsx)(u.Check,{className:"w-3 h-3 text-blue-600"})]},e)),0===em.filter(e=>e.includes(O)).length&&(0,t.jsx)("div",{className:"py-3 text-center text-xs text-gray-400 font-medium",children:"找不到相關行政區"})]})]})]})]}),(0,t.jsxs)("span",{className:"text-[10px] font-mono font-black text-gray-400 bg-white border border-gray-200 px-2 py-0.5 rounded-md",children:[eu.length," 據點"]})]})]}),(0,t.jsx)("div",{ref:es,className:"flex-1 overflow-y-auto p-[5px] space-y-[5px] selection:bg-primary/10",children:eu.map(e=>{let o=M===e.id,n=J(e);return(0,t.jsxs)("div",{id:`location-${e.id}`,onClick:()=>ey(e),onMouseEnter:()=>ew(e),onMouseLeave:()=>ew(null),className:(0,g.cn)("w-full text-left rounded-2xl p-[10px] border transition-all duration-300 cursor-pointer bg-white flex flex-col gap-4 group relative",o?"shadow-[0_12px_30px_rgba(0,0,0,0.04)] border-slate-900 scale-[1.002]":"border-slate-100 hover:border-slate-300 hover:shadow-[0_12px_25px_rgba(0,0,0,0.02)] hover:-translate-y-[1px]"),children:[(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-3 lg:gap-4 md:gap-5",children:[e.image_urls&&e.image_urls.length>0&&(0,t.jsxs)("div",{className:"shrink-0 w-full sm:w-[135px] xl:w-[150px] aspect-[4/3] rounded-xl overflow-hidden relative border border-slate-100 shadow-sm bg-slate-50",children:[(0,t.jsx)(h.LazyCloudflareImage,{src:e.image_urls[0],alt:e.name,width:300,quality:70,containerClassName:"absolute inset-0 w-full h-full",className:"w-full h-full object-cover group-hover:scale-[1.03] transition-transform duration-500"}),"籌備中"===e.status&&(0,t.jsx)("div",{className:"absolute inset-0 bg-black/30 flex items-center justify-center backdrop-blur-[1px]",children:(0,t.jsx)("span",{className:"text-white text-[10px] font-black tracking-widest bg-amber-500/90 px-2.5 py-0.5 rounded-full shadow-md",children:"即將開幕"})})]}),(0,t.jsxs)("div",{className:"flex-1 flex flex-col justify-between gap-2.5 min-w-0",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsxs)("h4",{className:"font-bold text-slate-900 text-[16px] md:text-[17px] tracking-tight group-hover:text-primary transition-colors duration-200 flex items-center gap-2 truncate",children:[(0,t.jsx)("span",{className:"w-2 h-2 rounded-full shrink-0",style:{backgroundColor:"籌備中"===e.status?"#F59E0B":"#3B82F6",boxShadow:`0 0 8px ${"籌備中"===e.status?"#F59E0B":"#3B82F6"}30`}}),(0,t.jsx)("span",{className:"truncate",children:e.name})]}),(0,t.jsx)("div",{className:"shrink-0",children:"籌備中"===e.status?(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded bg-amber-50 text-amber-700 border border-amber-100 text-[10px] font-bold",children:"🚧 籌備中"}):(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded bg-blue-50/70 text-primary border border-blue-100/50 text-[10px] font-bold",children:function(e){if(e.note)return e.note;let t=e.city||v(e.address),r=y(e.address);if(t&&"其他"!==t){let e=t.replace(/[市縣]$/,"");return r&&"旗艦據點"!==r?`${e} ‧ ${r}`:e}return r}(e)})})]}),(0,t.jsx)("div",{className:"text-xs text-slate-500 font-medium",children:(0,t.jsxs)("p",{className:"flex items-center gap-1.5 min-w-0",children:[(0,t.jsx)(s.MapPin,{className:"w-3.5 h-3.5 text-slate-400 shrink-0"}),(0,t.jsx)("span",{className:"group-hover:text-slate-700 transition-colors truncate",title:e.address,children:function(e){if(!e)return"";let t=e.replace(/^(?:台北市|臺北市|新北市|基隆市|桃園市|新竹市|新竹縣|苗栗縣|台中市|臺中市|彰化縣|南投縣|雲林縣|嘉義市|嘉義縣|台南市|臺南市|高雄市|屏東縣|宜蘭縣|花蓮縣|台東縣|臺東縣)?(?:[^縣市區鄉鎮]{1,4}[區鄉鎮市])?/,"").trim();return t.length>0?t:e}(e.address)})]})})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 pt-2 border-t border-slate-50",children:[(0,t.jsxs)(f.default,{href:`/store/${e.original_path||e.slug||e.id}`,onClick:e=>e.stopPropagation(),className:"inline-flex items-center gap-1 px-3 py-1.5 bg-slate-900 hover:bg-slate-800 text-white text-[11px] font-bold rounded-lg transition-colors shadow-sm",children:[(0,t.jsx)("span",{children:"門市詳情"}),(0,t.jsx)(p.ChevronRight,{className:"w-3 h-3 shrink-0"})]}),(0,t.jsxs)("a",{href:(0,x.getStoreDirectionsUrl)(e),target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),className:"inline-flex items-center gap-1 px-3 py-1.5 bg-slate-50 hover:bg-slate-100 text-slate-600 border border-slate-200/60 text-[11px] font-bold rounded-lg transition-colors",children:[(0,t.jsx)(d.Navigation,{className:"w-3 h-3 shrink-0"}),(0,t.jsx)("span",{children:"導航至此"})]})]})]})]}),n&&(0,t.jsxs)("div",{onClick:e=>{let t;return e.stopPropagation(),t=(0,r.getApiUrl)(),void(fetch(`${t}/api/promotions/${n.id}/track`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"click"})}).catch(console.error),alert(`您已領取優惠:${n.frontend_label||n.name}!
244請於預約時主動告知門市人員。`))},className:"mt-3 flex items-center justify-between gap-3 bg-rose-50/30 hover:bg-rose-50/60 p-3 rounded-xl border border-rose-100/50 transition-colors cursor-pointer group/promo",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:`shrink-0 px-2 py-0.5 bg-gradient-to-r ${n.frontend_color||"from-rose-500 to-red-600"} text-white text-[9px] font-bold tracking-wider rounded`,children:n.frontend_label||n.name}),(0,t.jsx)("span",{className:"text-xs font-semibold text-slate-600 leading-snug",children:n.frontend_desc||"專屬優惠活動"})]}),(0,t.jsx)(p.ChevronRight,{className:"w-3.5 h-3.5 text-rose-400 shrink-0 opacity-0 group-hover/promo:opacity-100 group-hover/promo:translate-x-0.5 transition-all"})]})]},e.id)})})]}),(0,t.jsx)("div",{className:"lg:col-span-6 bg-white border border-gray-200 rounded-3xl shadow-sm overflow-hidden h-[500px] lg:h-full relative flex flex-col justify-center items-center",children:I?(0,t.jsxs)("div",{className:"absolute inset-0 bg-gray-50 flex flex-col justify-center items-center cursor-pointer",onClick:eg,children:[(0,t.jsx)(s.MapPin,{className:"w-16 h-16 text-gray-300 animate-bounce mb-4"}),(0,t.jsx)("p",{className:"text-sm text-gray-500 font-bold",children:"點擊載入地圖"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{ref:eo,className:"w-full h-full absolute inset-0 transition-opacity duration-500",style:{opacity:+!!A,pointerEvents:A?"auto":"none"}}),!A&&(0,t.jsxs)("div",{className:"absolute inset-0 bg-gray-50 flex flex-col justify-center items-center cursor-pointer z-10 transition-opacity duration-500",onClick:eg,children:[(0,t.jsx)(s.MapPin,{className:"w-16 h-16 text-gray-300 animate-bounce mb-4"}),(0,t.jsx)("p",{className:"text-sm text-gray-500 font-bold",children:"載入 Google Maps 中..."})]})]})})]}),Q&&(0,t.jsx)("div",{className:"fixed inset-0 z-[9999] flex items-center justify-center bg-black/80 backdrop-blur-sm animate-in fade-in duration-200",children:(0,t.jsxs)("div",{className:"relative w-full max-w-4xl aspect-video mx-4 bg-black rounded-3xl overflow-hidden shadow-2xl border border-white/10",children:[(0,t.jsx)("button",{onClick:()=>X(null),className:"absolute top-4 right-4 z-10 p-2 bg-black/60 hover:bg-black text-white rounded-full transition-all duration-200 border border-white/10",children:(0,t.jsx)(a.X,{className:"w-6 h-6"})}),(0,t.jsx)("iframe",{src:function(e){if(!e)return"";let t="",r=e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);if(r&&11===r[2].length)t=r[2];else{let r=e.split("/");t=r[r.length-1]}return`https://www.youtube.com/embed/${t}?autoplay=1`}(Q),className:"w-full h-full border-none",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0})]})}),K&&K.length>0&&(0,t.jsxs)("div",{className:"fixed inset-0 z-[9999] flex flex-col justify-center items-center bg-black/90 backdrop-blur-sm animate-in fade-in duration-200",children:[(0,t.jsx)("button",{onClick:()=>ee(null),className:"absolute top-6 right-6 p-3 bg-white/10 hover:bg-white/20 text-white rounded-full transition-all duration-200 border border-white/15",children:(0,t.jsx)(a.X,{className:"w-6 h-6"})}),(0,t.jsxs)("div",{className:"relative w-full max-w-5xl h-[60vh] flex items-center justify-center px-12",children:[K.length>1&&(0,t.jsx)("button",{onClick:()=>er(e=>0===e?K.length-1:e-1),className:"absolute left-4 p-3 bg-white/10 hover:bg-white/20 text-white rounded-full transition-all duration-200 border border-white/15",children:(0,t.jsx)("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2.5,d:"M15 19l-7-7 7-7"})})}),(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center select-none",children:(0,t.jsx)("img",{src:K[et],alt:"現場實景照片",className:"max-w-full max-h-full object-contain rounded-2xl shadow-2xl border border-white/5"})}),K.length>1&&(0,t.jsx)("button",{onClick:()=>er(e=>e===K.length-1?0:e+1),className:"absolute right-4 p-3 bg-white/10 hover:bg-white/20 text-white rounded-full transition-all duration-200 border border-white/15",children:(0,t.jsx)("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2.5,d:"M9 5l7 7-7 7"})})})]}),(0,t.jsxs)("div",{className:"mt-8 text-center space-y-4",children:[(0,t.jsxs)("span",{className:"text-white/60 text-sm font-black tracking-widest bg-white/5 px-4 py-1.5 rounded-full border border-white/10",children:[et+1," / ",K.length]}),K.length>1&&(0,t.jsx)("div",{className:"flex gap-2 justify-center max-w-2xl overflow-x-auto px-4 py-2 bg-white/5 rounded-2xl border border-white/10 backdrop-blur-sm",children:K.map((e,r)=>(0,t.jsx)("button",{onClick:()=>er(r),className:`relative w-16 h-16 rounded-lg overflow-hidden border-2 transition-all duration-200 shrink-0 ${et===r?"border-primary scale-105 shadow-lg":"border-transparent opacity-60 hover:opacity-100"}`,children:(0,t.jsx)("img",{src:e,alt:"",className:"w-full h-full object-cover"})},r))})]})]})]})}])}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.