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.