diff --git a/solution/site/scripts/mockup/AUTOPLAY.md b/solution/site/scripts/mockup/AUTOPLAY.md
new file mode 100644
index 0000000..e06c3aa
--- /dev/null
+++ b/solution/site/scripts/mockup/AUTOPLAY.md
@@ -0,0 +1,146 @@
+# 자동재생 — 안 된다. 왜 안 되는지와, 그래서 뭘 했는지
+
+`/s/stay` 배경음악을 **새로고침 직후 바로** 나게 하려고 시도한 것 전부와 실측값이다.
+같은 얘기가 다시 나오면 이 파일부터 본다.
+
+측정: 2026-09-14 · 킹서버 `https://web4ai.o2osolution.ai/s/stay` · Chrome(정식 채널)
+
+---
+
+## 결론
+
+**브라우저에서 첫 방문에 소리가 저절로 나게 하는 방법은 없다.**
+사람 손 입력(`isTrusted: true`) 없이는 크롬이 `play()` 를 `NotAllowedError` 로 거절한다.
+자바스크립트로 그 검사를 통과시키는 길은 없고, 그건 우회 대상이 아니라
+**그 우회를 막으려고 만들어진 검사**다.
+
+지금 동작: **손님이 화면에 처음 닿으면(클릭·탭·키) 켜진다.** 그 이상은 어떤 사이트도 못 한다.
+
+### 해 본 것과 결과
+
+| 시도 | 결과 |
+|---|---|
+| 로드 즉시 `audio.play()` | `NotAllowedError` |
+| 무음(`muted=true`)으로 시작 → 나중에 unmute | `NotAllowedError` (무음도 거절된다) |
+| `` 태그로 두고 `play()` | `NotAllowedError` |
+| 가짜 이벤트 강제 발생 — `dispatchEvent` 로 `pointerdown`·`mousedown`·`pointerup`·`mouseup`·`click`·`keydown` 6종 | `navigator.userActivation` **false 그대로**, 거절 |
+| 재생 단추를 코드로 누르기 — `btn.click()`, 0.7초 간격 3회 | `play=0` |
+| `--app=URL` 앱 모드로 띄우기 | `play=0` |
+| **Web Audio API** — `new AudioContext()` | `state: "suspended"` |
+| `ctx.resume()` | **약속이 영원히 안 돌아온다** (제스처를 기다리며 매달린다) |
+| mp3 를 `decodeAudioData` 로 풀어 `BufferSource` 재생 | `currentTime` **0.000 → 0.000**, 안 돈다 |
+| **`speechSynthesis.speak()`** | `error: not-allowed` |
+| 마우스만 움직임 / 스크롤만 | `play=0` (`act=false`) |
+| **진짜 클릭·탭·키 입력 한 번** | **켜진다** (`act=true`, `play=1`) |
+
+`dispatchEvent` 와 `el.click()` 이 만든 이벤트는 `isTrusted: false` 로 찍혀 나간다.
+크롬의 사용자 활성화 카운터(`navigator.userActivation`)는 `isTrusted: true` 인 입력만 세고,
+그게 올라야 소리가 풀린다.
+
+브라우저에서 **소리를 낼 수 있는 API 는 셋뿐이고 셋 다 같은 게이트 뒤에 있다** —
+HTMLMediaElement(``) · Web Audio(`AudioContext`) · speechSynthesis. 우회로가 없는 이유다.
+
+**활성화를 준다**: `mousedown` · `pointerdown` · `pointerup` · `touchend` · `keydown`(Esc 제외) · `click`
+**안 준다**: `mousemove` · `pointermove` · `touchmove` · `wheel` · `scroll`
+
+---
+
+## 안 한 것과 그 이유
+
+크롬 문서(developer.chrome.com/blog/autoplay)에 예외가 넷 있지만 **전부 손님 쪽 설정이라
+제품에서는 쓸 수 없다.** 한 번 만들었다가 되돌렸다.
+
+| 예외 | 왜 안 쓰나 |
+|---|---|
+| PWA 설치본 | **펜션 사이트 보러 온 손님이 앱을 설치할 리 없다.** 매니페스트까지 붙였다가 걷어냈다 |
+| MEI (같은 출처에서 7초 이상 여러 번) | 손님이 쌓는 것이라 첫 방문에는 없다 |
+| `--autoplay-policy=no-user-gesture-required` | 브라우저를 그 플래그로 띄워야 한다 |
+| 기업정책 `AutoplayAllowlist` | 기계 관리자가 넣는 것이다 |
+
+★ **강제 클릭 코드도 뺐다.** 넣어서 배포까지 해 봤지만 기본 크롬에서 `play=0` 이고,
+동작하지 않는 코드가 남으면 다음 사람이 "이미 처리돼 있네" 로 읽는다.
+
+---
+
+## 지금 코드가 하는 일 (`inject.js` `startPlayer`)
+
+1. 로드 즉시 `play()` 를 건다. (거절되지만, 자동재생이 허락된 환경이면 여기서 켜진다)
+2. 거절되면 **첫 사람 손길**을 기다린다. 창 전체에 걸고, 플레이어 자기 단추만 빼고
+ 어디를 눌러도 걸린다.
+ - STRONG(활성화를 주는 입력): 스로틀 없이 매번 시도
+ - WEAK(안 주는 입력): 1초에 한 번만 — 초당 수십 번 오는 mousemove 로 단추가 깜빡이는 것을 막는다
+3. 탭이 다시 앞으로 나올 때(`visibilitychange`) 한 번 더 건다.
+
+### 여기서 밟았던 함정 둘
+
+- **가짜 pointerdown 이 대기를 태웠다.** `tameRails()` 가 레일 자동 넘김을 세우려고 레일마다
+ `pointerdown` 을 쏘는데(정상 동작), 그게 첫 손길 대기를 먼저 먹었다. 그 뒤로는 손님이
+ 아무 데나 눌러도 안 켜졌다. → `onFirstTouch` 가 `event.isTrusted` 를 먼저 본다.
+- **스로틀이 클릭을 걸렀다.** 입력을 안 가리고 1초 스로틀을 걸었더니 클릭 직전의 mousemove 가
+ 그 1초를 먹어 **정작 활성화를 주는 mousedown 이 걸러졌다**(실측: `act=true` 인데 `play=0`).
+ → STRONG/WEAK 로 갈라 STRONG 에는 스로틀을 안 건다.
+
+---
+
+## "트리플픽은 되던데?" — 실측 결과
+
+**트리플픽도 안 된다. 똑같이 거절당한다.**
+
+`https://triplepick.o2o.kr/match/MLB_BAL_TOR_20260914?song=BAL` (공유 링크 = 자동 로드 경로)에
+깨끗한 크롬으로 들어가 `HTMLMediaElement.prototype.play` 를 가로채 찍은 값이다.
+
+```
+[T] play() 거절 NotAllowedError .kr/api/songs/audio/815/0?v=89a0fcd6
+```
+
+코드도 우리와 같은 한 줄이다 — `usePlayer.tsx:133` `if (shouldPlay) audio.play().catch(() => {})`.
+게스처 감지 코드는 0줄이고, 평소 재생 경로는 `MatchupHUD.tsx:55` 의 **「♪ 응원가 듣기」 버튼**이다.
+`playlist.ts:19` 의 `PATH_PLAYLISTS` 는 비어 있어서 경로 진입 자동 로드는 실을 곡도 없다.
+
+### 그럼 왜 내 브라우저에서는 나나 — MEI
+
+크롬은 **같은 출처에서 소리를 여러 번 들은 사람에게만** 그 출처의 자동재생을 풀어 준다
+(Media Engagement Index). 조건: 7초 초과 재생 · 음소거 아님 · 탭 활성 · (영상이면) 200x140px 초과.
+
+트리플픽을 자주 쓰면서 응원가를 여러 번 들었으면 그 브라우저에는 이미 허락이 쌓여 있다.
+**그 브라우저에서만** 자동재생된다. 손님의 새 브라우저에서는 안 된다.
+
+확인: `chrome://media-engagement/` 에서 출처별 점수와 `Has high score` 를 본다.
+
+★ **같은 일이 이 사이트에도 일어난다.** 목업을 자주 열고 음악을 들으면 그 브라우저는
+`web4ai.o2osolution.ai` 에 허락을 쌓고, 그 뒤로는 새로고침해도 바로 난다.
+**대표님 노트북에서 시연하면 그 상태가 된다** — 다만 손님 브라우저는 아니다.
+
+---
+
+## 재보고 싶을 때 — 측정 주의
+
+★ **Playwright 로 잴 때 `page.evaluate` 를 쓰면 안 된다.** CDP 가 `userGesture: true` 로 넣어서
+**상태를 읽으려고 부른 그 호출이 브라우저를 "조작됨" 으로 만든다.** 그 뒤 측정은 전부 거짓
+양성이다 — 실제로 이것 때문에 "마우스만 움직여도 켜진다" 는 틀린 결론을 한 번 냈다.
+
+상태는 `addInitScript` 로 심고 `console` 로만 받는다.
+
+```js
+await page.addInitScript(() => {
+ setInterval(() => {
+ const el = document.getElementById('w4d-play');
+ console.log('[C] play=' + (el ? el.dataset.playing : '-')
+ + ' act=' + navigator.userActivation.isActive);
+ }, 1000);
+});
+page.on('console', (m) => { /* 여기서만 읽는다 */ });
+```
+
+---
+
+## 지금 무엇을 보고 있는지 가리는 법
+
+`/s/` 는 `max-age=300, must-revalidate` 다. "고쳤는데 안 된다" 의 상당수가 **캐시된 옛 파일**이었다.
+콘솔 첫 줄에 빌드 시각이 찍힌다.
+
+```
+[w4d] 주입분 로드 · 빌드 2026-09-14T07:12:00+00:00
+```
+
+이 시각이 방금 구운 것과 다르면 옛 파일을 보고 있는 것이다. ⌘⇧R.
diff --git a/solution/site/scripts/mockup/SCHEDULE.md b/solution/site/scripts/mockup/SCHEDULE.md
index 472cd45..dd88789 100644
--- a/solution/site/scripts/mockup/SCHEDULE.md
+++ b/solution/site/scripts/mockup/SCHEDULE.md
@@ -1,14 +1,14 @@
# `/s/stay` 여행 일정 전수 검수표
-생성 `python3 audit_schedule.py` · 테마 21개 · 53일 · 304정거장
+생성 `python3 audit_schedule.py` · 테마 21개 · 53일 · 290정거장
표는 **구워진 payload 를 렌더러와 같은 방식으로 계산한 값**이다(화면에 뜨는 것과 같다).
-규칙 14종(만들 때 거는 것)은 `build_itinerary.py` `audit()` 가 이미 통과시켰고,
+규칙 17종(만들 때 거는 것)은 `build_itinerary.py` `audit()` 가 이미 통과시켰고,
이 표는 그 규칙이 **안 보는 논리**를 따로 센다.
## 결과 — 21/21 검수완료
-**전부 통과.** 12개 항목 위반 0건.
+**전부 통과.** 13개 항목 위반 0건.
| 코드 | 검수 항목 |
|---|---|
@@ -20,10 +20,11 @@
| L5 | 바깥 정거장 체류 15분 이상 |
| L6 | 하루가 14시간을 넘지 않는다 |
| L7 | 입실 15:00 이후 · 퇴실 11:00 전 |
-| L8 | 하루의 첫 칸·마지막 칸이 숙소 |
+| L8 | 하루의 첫 칸·마지막 칸이 숙소 (**떠나는 날 차 테마는 복귀 없이 끝난다**) |
| L9 | 같은 자리가 연달아 서지 않는다 |
| L10 | 한 테마 안에서 같은 곳을 두 번 가지 않는다 |
| L11 | 걷는 테마에 편도 25분 넘는 이동이 없다 |
+| L12 | 떠나는 날의 끝맺음이 퇴실 문구와 같다 — 짐을 차에 실었으면 안 돌아오고, 맡겼으면 찾으러 온다 |
---
@@ -44,14 +45,13 @@
| 5 | 18:45–19:25 | 밤 산책 | 군산 내항 | 5분 | 40분 |
| 6 | 19:41–20:11 | 머뭄으로 | 스테이 머뭄 | 16분 | 30분 |
-**둘째 날** 08:20–16:36 (총 8시간 16분 · 이동 176분 · 정거장 4)
+**둘째 날** 08:20–15:49 (총 7시간 29분 · 이동 169분 · 정거장 3)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
| 1 | 08:20–09:35 | 아침 | 스테이 머뭄 | –분 | 75분 |
| 2 | 10:59–13:29 | 오전 | 고군산군도 선유도 | 84분 | 150분 |
| 3 | 14:54–15:49 | 늦은 점심 | 국제반점 | 85분 | 55분 |
-| 4 | 15:56–16:36 | 마무리 | 스테이 머뭄 | 7분 | 40분 |
---
@@ -101,7 +101,7 @@
| 5 | 19:33–20:12 | 밤 산책 | 군산 내항 | 5분 | 39분 |
| 6 | 20:28–20:57 | 머뭄으로 | 스테이 머뭄 | 16분 | 29분 |
-**둘째 날** 09:40–15:36 (총 5시간 56분 · 이동 52분 · 정거장 5)
+**둘째 날** 09:40–14:31 (총 4시간 51분 · 이동 33분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -109,7 +109,6 @@
| 2 | 11:10–12:02 | 오전 | 군산근대건축관 | 10분 | 52분 |
| 3 | 12:10–13:07 | 점심 | 일흥옥 | 8분 | 57분 |
| 4 | 13:22–14:31 | 오후 | 째보선창 근처 카페 | 15분 | 69분 |
-| 5 | 14:50–15:36 | 마무리 | 스테이 머뭄 | 19분 | 46분 |
---
@@ -130,7 +129,7 @@
| 5 | 18:52–19:30 | 밤 산책 | 군산 내항 | 11분 | 38분 |
| 6 | 19:46–20:14 | 머뭄으로 | 스테이 머뭄 | 16분 | 28분 |
-**둘째 날** 08:50–13:35 (총 4시간 45분 · 이동 37분 · 정거장 5)
+**둘째 날** 08:50–12:49 (총 3시간 59분 · 이동 29분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -138,7 +137,6 @@
| 2 | 10:12–11:22 | 오전 | 군산근대미술관 | 9분 | 70분 |
| 3 | 11:30–12:18 | 점심 | 일흥옥 | 8분 | 48분 |
| 4 | 12:30–12:49 | 오후 | 해망굴 | 12분 | 19분 |
-| 5 | 12:57–13:35 | 마무리 | 스테이 머뭄 | 8분 | 38분 |
---
@@ -188,7 +186,7 @@
| 5 | 18:42–19:20 | 밤 산책 | 군산 내항 | 9분 | 38분 |
| 6 | 19:36–20:04 | 머뭄으로 | 스테이 머뭄 | 16분 | 28분 |
-**둘째 날** 08:30–14:06 (총 5시간 36분 · 이동 36분 · 정거장 5)
+**둘째 날** 08:30–13:21 (총 4시간 51분 · 이동 29분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -196,7 +194,6 @@
| 2 | 09:59–11:19 | 오전 | 경암동 철길마을 | 12분 | 80분 |
| 3 | 11:30–12:18 | 점심 | 일흥옥 | 11분 | 48분 |
| 4 | 12:24–13:21 | 오후 | 군산 시간여행마을 | 6분 | 57분 |
-| 5 | 13:28–14:06 | 마무리 | 스테이 머뭄 | 7분 | 38분 |
---
@@ -246,7 +243,7 @@
| 5 | 18:46–19:30 | 밤 산책 | 군산 내항 | 11분 | 44분 |
| 6 | 19:46–20:19 | 머뭄으로 | 스테이 머뭄 | 16분 | 33분 |
-**둘째 날** 09:00–14:40 (총 5시간 40분 · 이동 60분 · 정거장 5)
+**둘째 날** 09:00–13:43 (총 4시간 43분 · 이동 47분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -254,7 +251,6 @@
| 2 | 10:40–11:46 | 오전 | 채만식문학관 | 18분 | 66분 |
| 3 | 12:03–12:58 | 점심 | 일흥옥 | 17분 | 55분 |
| 4 | 13:10–13:43 | 오후 | 구 군산세관 본관 | 12분 | 33분 |
-| 5 | 13:56–14:40 | 마무리 | 스테이 머뭄 | 13분 | 44분 |
---
@@ -275,7 +271,7 @@
| 5 | 18:30–19:04 | 밤 산책 | 군산 내항 | 13분 | 34분 |
| 6 | 19:20–19:46 | 머뭄으로 | 스테이 머뭄 | 16분 | 26분 |
-**둘째 날** 10:10–14:10 (총 4시간 0분 · 이동 42분 · 정거장 5)
+**둘째 날** 10:10–13:27 (총 3시간 17분 · 이동 33분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -283,7 +279,6 @@
| 2 | 11:12–11:54 | 오전 | 경암동 철길마을 | 12분 | 42분 |
| 3 | 12:05–12:35 | 점심 | 이성당 | 11분 | 30분 |
| 4 | 12:45–13:27 | 오후 | 월명호수 | 10분 | 42분 |
-| 5 | 13:36–14:10 | 마무리 | 스테이 머뭄 | 9분 | 34분 |
---
@@ -301,7 +296,7 @@
| 2 | 19:05–20:20 | 저녁 | 명월갈비 | 5분 | 75분 |
| 3 | 20:25–20:55 | 머뭄으로 | 스테이 머뭄 | 5분 | 30분 |
-**둘째 날** 08:40–14:39 (총 5시간 59분 · 이동 39분 · 정거장 6)
+**둘째 날** 08:40–13:51 (총 5시간 11분 · 이동 31분 · 정거장 5)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -310,7 +305,6 @@
| 3 | 11:42–12:32 | 점심 | 한일옥 | 6분 | 50분 |
| 4 | 12:36–13:21 | 오후 | 군산근대건축관 | 4분 | 45분 |
| 5 | 13:31–13:51 | 오후 | 해망굴 | 10분 | 20분 |
-| 6 | 13:59–14:39 | 마무리 | 스테이 머뭄 | 8분 | 40분 |
---
@@ -382,7 +376,7 @@
| 6 | 18:47–20:02 | 저녁 | 명월갈비 | 5분 | 75분 |
| 7 | 20:07–20:37 | 머뭄으로 | 스테이 머뭄 | 5분 | 30분 |
-**셋째 날** 09:20–13:46 (총 4시간 26분 · 이동 19분 · 정거장 5)
+**셋째 날** 09:20–12:59 (총 3시간 39분 · 이동 12분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -390,7 +384,6 @@
| 2 | 10:41–11:26 | 오전 | 초원사진관 | 4분 | 45분 |
| 3 | 11:30–12:20 | 점심 | 일흥옥 | 4분 | 50분 |
| 4 | 12:24–12:59 | 오후 | 이성당 | 4분 | 35분 |
-| 5 | 13:06–13:46 | 마무리 | 스테이 머뭄 | 7분 | 40분 |
---
@@ -466,7 +459,7 @@
| 7 | 17:30–18:50 | 저녁 | 빈해원 | 11분 | 80분 |
| 8 | 19:01–19:35 | 머뭄으로 | 스테이 머뭄 | 11분 | 34분 |
-**셋째 날** 08:40–15:18 (총 6시간 38분 · 이동 32분 · 정거장 5)
+**셋째 날** 08:40–14:21 (총 5시간 41분 · 이동 21분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -474,7 +467,6 @@
| 2 | 10:30–11:20 | 오전 | 동국사 | 6분 | 50분 |
| 3 | 11:30–12:33 | 점심 | 국제반점 | 10분 | 63분 |
| 4 | 12:38–14:21 | 오후 | 군산근대역사박물관 | 5분 | 103분 |
-| 5 | 14:32–15:18 | 마무리 | 스테이 머뭄 | 11분 | 46분 |
---
@@ -505,7 +497,7 @@
| 4 | 17:30–18:25 | 저녁 | 일흥옥 | 5분 | 55분 |
| 5 | 18:30–19:03 | 머뭄으로 | 스테이 머뭄 | 5분 | 33분 |
-**셋째 날** 09:00–14:34 (총 5시간 34분 · 이동 27분 · 정거장 5)
+**셋째 날** 09:00–13:33 (총 4시간 33분 · 이동 18분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -513,7 +505,6 @@
| 2 | 10:44–11:30 | 오전 | 동국사 | 6분 | 46분 |
| 3 | 11:33–12:19 | 점심 | 물밀소 | 3분 | 46분 |
| 4 | 12:28–13:33 | 오후 | 월명호수 | 9분 | 65분 |
-| 5 | 13:42–14:34 | 마무리 | 스테이 머뭄 | 9분 | 52분 |
---
@@ -547,7 +538,7 @@
| 7 | 17:30–18:15 | 저녁 | 국제반점 | 7분 | 45분 |
| 8 | 18:22–18:46 | 머뭄으로 | 스테이 머뭄 | 7분 | 24분 |
-**셋째 날** 08:50–13:35 (총 4시간 45분 · 이동 29분 · 정거장 5)
+**셋째 날** 08:50–12:54 (총 4시간 4분 · 이동 20분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -555,7 +546,6 @@
| 2 | 10:46–11:26 | 오전 | 우체통거리 | 8분 | 40분 |
| 3 | 11:30–12:10 | 점심 | 일흥옥 | 4분 | 40분 |
| 4 | 12:18–12:54 | 오후 | 군산근대미술관 | 8분 | 36분 |
-| 5 | 13:03–13:35 | 마무리 | 스테이 머뭄 | 9분 | 32분 |
---
@@ -589,7 +579,7 @@
| 7 | 17:37–19:07 | 저녁 | 명월갈비 | 5분 | 90분 |
| 8 | 19:12–19:48 | 머뭄으로 | 스테이 머뭄 | 5분 | 36분 |
-**셋째 날** 09:40–15:27 (총 5시간 47분 · 이동 45분 · 정거장 5)
+**셋째 날** 09:40–14:32 (총 4시간 52분 · 이동 38분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -597,7 +587,6 @@
| 2 | 11:18–12:30 | 오전 | 채만식문학관 | 18분 | 72분 |
| 3 | 12:47–13:47 | 점심 | 한일옥 | 17분 | 60분 |
| 4 | 13:50–14:32 | 오후 | 이성당 | 3분 | 42분 |
-| 5 | 14:39–15:27 | 마무리 | 스테이 머뭄 | 7분 | 48분 |
---
@@ -671,7 +660,7 @@
| 6 | 18:37–19:48 | 저녁 | 명월갈비 | 5분 | 71분 |
| 7 | 19:53–20:21 | 머뭄으로 | 스테이 머뭄 | 5분 | 28분 |
-**셋째 날** 09:40–14:20 (총 4시간 40분 · 이동 42분 · 정거장 5)
+**셋째 날** 09:40–13:30 (총 3시간 50분 · 이동 30분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -679,7 +668,6 @@
| 2 | 11:01–11:44 | 오전 | 군산근대건축관 | 10분 | 43분 |
| 3 | 11:53–12:31 | 점심 | 만남스넥 | 9분 | 38분 |
| 4 | 12:42–13:30 | 오후 | 경암동 철길마을 | 11분 | 48분 |
-| 5 | 13:42–14:20 | 마무리 | 스테이 머뭄 | 12분 | 38분 |
---
@@ -752,7 +740,7 @@
| 7 | 17:30–18:38 | 저녁 | 명월갈비 | 5분 | 68분 |
| 8 | 18:43–19:10 | 머뭄으로 | 스테이 머뭄 | 5분 | 27분 |
-**셋째 날** 09:30–13:48 (총 4시간 18분 · 이동 42분 · 정거장 5)
+**셋째 날** 09:30–13:03 (총 3시간 33분 · 이동 33분 · 정거장 4)
| | 시각 | 자리 | 장소 | 이동 | 체류 |
|---|---|---|---|---|---|
@@ -760,5 +748,4 @@
| 2 | 10:51–11:18 | 오전 | 구 군산세관 본관 | 13분 | 27분 |
| 3 | 11:30–12:15 | 점심 | 일흥옥 | 12분 | 45분 |
| 4 | 12:23–13:03 | 오후 | 군산근대미술관 | 8분 | 40분 |
-| 5 | 13:12–13:48 | 마무리 | 스테이 머뭄 | 9분 | 36분 |
diff --git a/solution/site/scripts/mockup/audit-all.mjs b/solution/site/scripts/mockup/audit-all.mjs
index be78713..6162cae 100644
--- a/solution/site/scripts/mockup/audit-all.mjs
+++ b/solution/site/scripts/mockup/audit-all.mjs
@@ -25,12 +25,48 @@ const d = await page.evaluate(() => {
catchKinds: ['general', 'season', 'month', 'weather'].map((k) => (P.narrative.catchphrases?.items || []).filter((x) => x.kind === k).length),
themes: itin.length,
firstIsStay: days.every((day) => day.stops[0].name.endsWith('스테이 머뭄')),
- lastIsStay: days.every((day) => day.stops[day.stops.length - 1].name.endsWith('스테이 머뭄')),
+ // 떠나는 날은 갈린다 — 차로 온 손님은 짐을 싣고 나서므로 복귀 칸이 없다(2026-09-14 대표 의견).
+ lastIsStay: itin.every((i) => i.days.slice(0, -1)
+ .every((day) => day.stops[day.stops.length - 1].name.endsWith('스테이 머뭄'))),
+ depart: (() => {
+ const tail = (i) => i.days[i.days.length - 1];
+ const car = itin.filter((i) => !tail(i).stops[tail(i).stops.length - 1].name.endsWith('스테이 머뭄'));
+ const walk = itin.filter((i) => !car.includes(i));
+ return {
+ car: car.length, walk: walk.length,
+ car1: car.filter((i) => i.duration === '1박 2일').length,
+ car2: car.filter((i) => i.duration === '2박 3일').length,
+ // 퇴실 칸의 문구가 동선과 같은 말을 하는가 — 차인데 "맡겨 두고" 면 손님이 한 번 더 들른다
+ carNote: car.every((i) => (tail(i).stops[0].note || '').includes('차에 싣고')),
+ walkNote: walk.every((i) => (tail(i).stops[0].note || '').includes('맡겨 두고')),
+ walkEnd: walk.every((i) => tail(i).stops[tail(i).stops.length - 1].name.startsWith('마무리')),
+ };
+ })(),
consecutive: days.filter((day) => day.stops.some((s, i) => i && s.name.split(' · ').pop() === day.stops[i - 1].name.split(' · ').pop())).length,
hasNote: stops.every((s) => s.name.endsWith('스테이 머뭄') || s.note),
stopImages: stops.filter((s) => s.imageUrl).length,
restDays: days.filter((day) => day.stops.some((s) => s.name.startsWith('머뭄에서 쉬는 날'))).length,
endTimes: (() => { const t = days.map((day) => { let c = +day.startTime.slice(0, 2) * 60 + +day.startTime.slice(3); day.stops.forEach((s) => { c += s.moveMinutes + s.minutes; }); return c; }); return [Math.min(...t), Math.max(...t)]; })(),
+ daily: sec('daily').items.length,
+ reading: (() => { const e = sec('reading'); return {
+ items: e.items.length,
+ groups: (e.groups || []).length,
+ sourced: e.items.filter((x) => x.source && x.source.url).length,
+ }; })(),
+ domReadCards: document.querySelectorAll('#w4d-reading .w4d-read-card').length,
+ domReadGroups: document.querySelectorAll('#w4d-reading .w4d-read-group').length,
+ domReadSrc: document.querySelectorAll('#w4d-reading .w4d-read-src a').length,
+ // 레일이 아니어야 한다 — 가로로 밀어야 보이면 '펼쳐 둔다' 가 아니다.
+ // 신문 조판이라 단(column)으로 흐른다(2026-09-14 대표: "신문처럼").
+ readCols: (() => { const el = document.querySelector('#w4d-reading .w4d-read-grid');
+ if (!el) return null;
+ return {cols: getComputedStyle(el).columnCount, overflow: el.scrollWidth - el.clientWidth}; })(),
+ readPaper: !!document.querySelector('#w4d-reading .w4d-read-head h2')
+ && !!document.querySelector('#w4d-reading .w4d-read-dateline'),
+ dailyCats: [...new Set(sec('daily').items.map((x) => x.category))].sort(),
+ dailySourced: sec('daily').items.filter((x) => x.source && x.source.url).length,
+ domDailyPages: document.querySelectorAll('#daily article').length,
+ storyTabs: [...document.querySelectorAll('#story [role="tab"]')].map((t) => t.textContent.trim()),
songs: sec('songs').items.length,
ownInSongs: sec('songs').items.filter((s) => s.own).length,
songLinks: sec('songs').items.filter((s) => s.listenUrl).length,
@@ -55,19 +91,57 @@ const d = await page.evaluate(() => {
roomA: P.units[0].mediaIds.length, roomB: P.units[1].mediaIds.length,
roomMirror: P.units.flatMap((u) => u.mediaIds).length,
tagline: document.querySelector('#root h1')?.nextElementSibling?.textContent.trim(),
+ sub: document.getElementById('w4d-sub')?.textContent.trim(),
+ subIsCatch: (() => { const t = document.getElementById('w4d-sub')?.textContent.trim(); return !!t && (P.narrative.catchphrases?.items || []).some((x) => x.text.replace(/\s+/g, ' ').trim() === t); })(),
+ restaurants: P.local.restaurants.length,
+ // 걸어서 10분(800m) 넘는 맛집 — 없으면 '10분 이상' 탭에서 맛집 칸이 빈다(2026-09-11 사장님 지적)
+ restPhotos: P.local.restaurants.filter((r) => r.imageUrl).length,
+ restFar: P.local.restaurants.filter((r) => { const m = /^([\d.]+)\s*(km|m)$/i.exec(r.distanceText || ''); return m && Number(m[1]) * (m[2].toLowerCase() === 'km' ? 1000 : 1) > 800; }).length,
};
});
ok('캐치프레이즈 100개', d.catch === 100, `${d.catch}개 · 일반${d.catchKinds[0]}/계절${d.catchKinds[1]}/월${d.catchKinds[2]}/날씨${d.catchKinds[3]}`);
-ok('캐치프레이즈 순환', d.tagline && d.tagline !== '히로쓰 가옥 담 너머, 백 년 된 집 한 채', `현재 "${d.tagline}"`);
+// 대표 문구는 고정, 순환은 그 아래 줄 (2026-09-11 사장님 지시)
+ok('대표 문구 고정', d.tagline === '히로쓰 가옥 담 너머, 백 년 된 집 한 채', `"${d.tagline}"`);
+ok('아래 줄에 캐치프레이즈', d.subIsCatch, `"${d.sub}"`);
+const sub2 = await page.waitForTimeout(7500).then(() => page.evaluate(() => document.getElementById('w4d-sub')?.textContent.trim()));
+ok('아래 줄 순환', !!sub2 && sub2 !== d.sub, `→ "${sub2}"`);
+/* 자동재생 (2026-09-14 대표 지시). 브라우저는 조작 없는 소리 재생을 막는다 — 정책이라 못 넘는다.
+ 그래서 **첫 손길에 켜지는가**를 센다. 막지 않는 브라우저면 그 전에 이미 켜져 있다. */
+const autoAtLoad = await page.evaluate(() => document.getElementById('w4d-play')?.dataset.playing);
+await page.mouse.wheel(0, 300);
+await page.waitForTimeout(2500);
+const autoAfter = await page.evaluate(() => ({
+ btn: document.getElementById('w4d-play')?.dataset.playing,
+ time: document.querySelector('.w4d-item[data-playing="1"] .w4d-time')?.textContent,
+}));
+ok('자동재생', autoAfter.btn === '1',
+ `불러온 직후 ${autoAtLoad === '1' ? '바로 재생' : '브라우저가 막음'} → 첫 손길에 ${autoAfter.time || '안 켜짐'}`);
+ok('주변 맛집', d.restaurants >= 30 && d.restFar > 0, `${d.restaurants}곳 · 걸어서 10분 넘는 곳 ${d.restFar}`);
+ok('맛집 사진', d.restPhotos === d.restaurants, `${d.restPhotos}/${d.restaurants}`);
ok('일정 테마', d.themes === 21, `${d.themes}개`);
ok('1번 = 스테이 머뭄', d.firstIsStay, d.firstIsStay ? '전 일자' : '어긋남');
-ok('마지막 = 스테이 머뭄', d.lastIsStay, d.lastIsStay ? '전 일자' : '어긋남');
+ok('마지막 = 머뭄 (떠나는 날 빼고)', d.lastIsStay, d.lastIsStay ? '전 일자' : '어긋남');
+ok('떠나는 날 복귀 없음 = 차 테마', d.depart.car === 14 && d.depart.car1 === 7 && d.depart.car2 === 7,
+ `차 ${d.depart.car}(1박${d.depart.car1}·2박${d.depart.car2}) · 도보 ${d.depart.walk}`);
+ok('떠나는 날 퇴실 문구', d.depart.carNote && d.depart.walkNote && d.depart.walkEnd,
+ d.depart.carNote && d.depart.walkNote && d.depart.walkEnd ? '차=싣고 · 도보=맡기고 찾으러' : '어긋남');
ok('같은 자리 연속 없음', d.consecutive === 0, `${d.consecutive}건`);
ok('정거장마다 할 일 문구', d.hasNote, d.hasNote ? '전 정거장' : '빠짐');
ok('일정 사진 없음', d.stopImages === 0 && d.domItinImg === 0, `payload ${d.stopImages} · 화면 ${d.domItinImg}`);
ok('숙소에서 쉬는 날', d.restDays >= 3, `${d.restDays}일`);
ok('종료 시각 분산', d.endTimes[1] - d.endTimes[0] > 240, `${(d.endTimes[0] / 60 | 0)}:${String(d.endTimes[0] % 60).padStart(2, '0')} ~ ${(d.endTimes[1] / 60 | 0)}:${String(d.endTimes[1] % 60).padStart(2, '0')}`);
+ok('군산 읽기 — 한 화면에 다 편다',
+ d.reading.items >= 30 && d.domReadCards === d.reading.items
+ && d.readCols && d.readCols.overflow <= 2 && Number(d.readCols.cols) >= 2,
+ `payload ${d.reading.items} · 화면 ${d.domReadCards}꼭지 · ${d.domReadGroups}면 · ${d.readCols?.cols}단 · 가로넘침 ${d.readCols?.overflow}px`);
+ok('군산 읽기 신문 조판', d.readPaper, d.readPaper ? '제호 · 발행일 줄 있음' : '없음');
+ok('군산 읽기 출처', d.reading.sourced === d.reading.items && d.domReadSrc === d.reading.items,
+ `payload ${d.reading.sourced}/${d.reading.items} · 화면 ${d.domReadSrc}`);
+ok('오늘의 한 장', d.daily >= 39 && d.domDailyPages === d.daily,
+ `payload ${d.daily}장 · 화면 ${d.domDailyPages}장 · ${d.dailyCats.join('/')}`);
+ok('오늘의 한 장 출처', d.dailySourced === d.daily, `${d.dailySourced}/${d.daily}`);
+ok('이야기 탭에 일력', d.storyTabs.includes('오늘의 한 장'), d.storyTabs.join(','));
ok('가요 다방 곡', d.songs >= 25, `${d.songs}곡`);
ok('가요 다방에 자작곡 없음', d.ownInSongs === 0, `${d.ownInSongs}곡`);
ok('노래마다 링크', d.songLinks === d.songs, `${d.songLinks}/${d.songs}`);
diff --git a/solution/site/scripts/mockup/audit_schedule.py b/solution/site/scripts/mockup/audit_schedule.py
index 00d0a39..6e6b20e 100644
--- a/solution/site/scripts/mockup/audit_schedule.py
+++ b/solution/site/scripts/mockup/audit_schedule.py
@@ -1,4 +1,4 @@
-"""구워진 payload 의 일정 21개를 표로 뽑고, 규칙 14종이 **안 보는** 논리까지 검수한다.
+"""구워진 payload 의 일정 21개를 표로 뽑고, 규칙 17종이 **안 보는** 논리까지 검수한다.
★ 왜 따로 있나 — build_itinerary.py 의 audit() 는 "만들 때" 지키는 규칙이다.
이 스크립트는 **만들어진 결과**를 사람이 읽는 표로 펴고, 비율·간격처럼
@@ -95,10 +95,19 @@ def check(item):
if is_last and rows[0]["place"] == STAY and rows[0]["to"] > 11 * 60:
bad.append(("L7", f"{label}: 퇴실이 {hm(rows[0]['to'])}"))
# L8 시작·끝이 숙소인가
+ # ★ 떠나는 날은 갈린다 (2026-09-14 대표 의견). 차로 온 손님은 퇴실할 때 짐을 싣고
+ # 나서므로 복귀 칸이 없다 — 그 하루는 마지막 정거장에서 끝나는 것이 맞다.
+ # 판별은 **퇴실 칸의 문구**로 한다(payload 에 남는 값이라 표와 화면이 같은 것을 본다).
+ car_out = is_last and "차에 싣고" in (day["stops"][0].get("note") or "")
if rows[0]["place"] != STAY:
bad.append(("L8", f"{label}: 첫 칸이 {rows[0]['place']}"))
- if rows[-1]["place"] != STAY:
+ if rows[-1]["place"] != STAY and not car_out:
bad.append(("L8", f"{label}: 마지막 칸이 {rows[-1]['place']}"))
+ # L12 떠나는 날의 끝맺음이 퇴실 문구와 같은 말을 하는가
+ if car_out and rows[-1]["place"] == STAY:
+ bad.append(("L12", f"{label}: 짐을 차에 싣고 나섰는데 숙소로 돌아온다"))
+ if is_last and not car_out and rows[-1]["slot"] != "마무리":
+ bad.append(("L12", f"{label}: 짐을 맡겨 두고 나섰는데 찾으러 돌아오지 않는다"))
# L9 같은 자리 연속
for i in range(1, len(rows)):
if rows[i]["place"] == rows[i - 1]["place"]:
@@ -124,7 +133,7 @@ lines = ["# `/s/stay` 여행 일정 전수 검수표", "",
f"{sum(len(i['days']) for i in items)}일 · "
f"{sum(len(d['stops']) for i in items for d in i['days'])}정거장", "",
"표는 **구워진 payload 를 렌더러와 같은 방식으로 계산한 값**이다(화면에 뜨는 것과 같다).",
- "규칙 14종(만들 때 거는 것)은 `build_itinerary.py` `audit()` 가 이미 통과시켰고,",
+ "규칙 17종(만들 때 거는 것)은 `build_itinerary.py` `audit()` 가 이미 통과시켰고,",
"이 표는 그 규칙이 **안 보는 논리**를 따로 센다.", "",
"| 코드 | 검수 항목 |", "|---|---|",
"| L0 | 21시를 넘겨 화면에서 버려지는 칸이 없다 |",
@@ -135,10 +144,11 @@ lines = ["# `/s/stay` 여행 일정 전수 검수표", "",
"| L5 | 바깥 정거장 체류 15분 이상 |",
"| L6 | 하루가 14시간을 넘지 않는다 |",
"| L7 | 입실 15:00 이후 · 퇴실 11:00 전 |",
- "| L8 | 하루의 첫 칸·마지막 칸이 숙소 |",
+ "| L8 | 하루의 첫 칸·마지막 칸이 숙소 (**떠나는 날 차 테마는 복귀 없이 끝난다**) |",
"| L9 | 같은 자리가 연달아 서지 않는다 |",
"| L10 | 한 테마 안에서 같은 곳을 두 번 가지 않는다 |",
- "| L11 | 걷는 테마에 편도 25분 넘는 이동이 없다 |", ""]
+ "| L11 | 걷는 테마에 편도 25분 넘는 이동이 없다 |",
+ "| L12 | 떠나는 날의 끝맺음이 퇴실 문구와 같다 — 짐을 차에 실었으면 안 돌아오고, 맡겼으면 찾으러 온다 |", ""]
fails = []
for item in items:
@@ -169,7 +179,7 @@ if fails:
head += ["| 테마 | 걸린 항목 |", "|---|---|"]
head += [f"| {n} | {', '.join(sorted({c for c, _ in b}))} |" for n, b in fails]
else:
- head += ["**전부 통과.** 12개 항목 위반 0건."]
+ head += ["**전부 통과.** 13개 항목 위반 0건."]
head.append("")
lines = lines[:8] + head + lines[8:]
diff --git a/solution/site/scripts/mockup/build_itinerary.py b/solution/site/scripts/mockup/build_itinerary.py
index 25d61b9..dfe0b86 100644
--- a/solution/site/scripts/mockup/build_itinerary.py
+++ b/solution/site/scripts/mockup/build_itinerary.py
@@ -122,8 +122,14 @@ STAY_ACTION = {
# 일정도 있어"). 아침(머뭄)과 체크아웃(머뭄)을 따로 세웠더니 **같은 자리에 두 칸이 연달아**
# 섰다 — 손님은 그 사이에 아무 데도 가지 않는다. 한 칸이 맞다.
# 마지막 날 아침은 체류 범위가 다르다 — 짐을 싸고 퇴실까지 한 칸에서 끝낸다.
+ # ★ 퇴실 뒤가 **차로 온 손님과 걸어 온 손님이 갈리는 자리**다 (2026-09-14 대표 의견).
+ # 차로 온 손님은 짐을 싣고 그대로 나선다 — 짐을 맡겨 두고 저녁에 숙소로 되돌아오는 동선은
+ # 차가 있는 사람에게는 한 번 더 들르라는 말이 된다. 그래서 그 하루는 **마지막 정거장에서 끝난다**.
+ # 짐 보관은 걸어 다니는 손님에게 필요한 것이고, 그 테마만 저녁에 찾으러 돌아온다.
"아침(퇴실)": ((45, 75, 115),
"아침을 차려 먹고 11시 전에 퇴실합니다. 짐은 맡겨 두고 나섰다가 저녁에 찾아 가세요."),
+ "아침(퇴실·차)": ((45, 75, 115),
+ "아침을 차려 먹고 11시 전에 퇴실합니다. 짐은 차에 싣고 그대로 나섭니다."),
"머뭄에서 쉬는 날": ((120, 210, 360),
"오늘은 나가지 않습니다. 마당 평상과 창고형 카페 공간에서 책을 읽고 낮잠을 잡니다."),
# ★ 10분짜리 칸을 시간표에 세우지 않는다 (2026-09-10 사장님: "10분 정도 왜 잡아 놓는 거야?").
@@ -203,6 +209,17 @@ SKELETON = {
}
# 이 뼈대의 첫 칸(아침 · 퇴실)은 **11시 전에 끝나야** 한다 — payload 의 check_out_time.
CHECKOUT_KINDS = {"last", "last_plus", "last_island"}
+# ★ 차로 온 손님의 마지막 날은 **복귀 칸이 없다** (2026-09-14 대표 의견).
+# 퇴실할 때 짐을 차에 싣고 나서므로 숙소로 되돌아올 일이 없다 — 마지막 정거장이 하루의 끝이다.
+# 뼈대를 따로 적지 않고 **복귀 칸만 떼어** 만든다. 그래야 도보 뼈대를 고칠 때 차 뼈대가 같이 따라온다
+# (두 벌로 두면 한쪽만 고치고 넘어가는 자리가 생긴다 — 이 파일이 실제로 그래서 틀린 적이 있다).
+CAR_KINDS = set()
+for _base in ("last", "last_plus", "last_island"):
+ _car = _base + "_car"
+ assert SKELETON[_base][-1] == "마무리@"
+ SKELETON[_car] = SKELETON[_base][:-1]
+ CHECKOUT_KINDS.add(_car)
+ CAR_KINDS.add(_car)
# 하루의 시작 = **머뭄에서 아침을 여는 시각**이다(첫날만 입실 시각).
START = {"first": "15:00", "first_late": "19:00", "mid": "08:30", "mid_island": "07:40",
"mid_late": "09:40", "mid_rest": "10:00", "last": "08:10", "last_plus": "07:50",
@@ -211,6 +228,10 @@ START = {"first": "15:00", "first_late": "19:00", "mid": "08:30", "mid_island":
FLOOR = {"first": "15:00", "first_late": "18:00", "mid": "07:20", "mid_island": "07:00",
"mid_late": "09:00", "mid_rest": "09:30", "last": "07:20", "last_plus": "07:20",
"last_island": "07:20"}
+for _car in CAR_KINDS:
+ START[_car] = START[_car[:-4]]
+ FLOOR[_car] = FLOOR[_car[:-4]]
+
DAY_LABEL = ["첫째 날", "둘째 날", "셋째 날"]
DURATION = {2: "1박 2일", 3: "2박 3일"}
@@ -221,9 +242,9 @@ def _minutes(text: str) -> int:
def _action(slot: str, kind: str) -> tuple:
- """머뭄 칸의 (체류범위, 한 줄). 마지막 날 아침만 퇴실을 겸한다."""
+ """머뭄 칸의 (체류범위, 한 줄). 마지막 날 아침만 퇴실을 겸하고, 차 테마는 문구가 다르다."""
if slot == "아침" and kind in CHECKOUT_KINDS:
- return STAY_ACTION["아침(퇴실)"]
+ return STAY_ACTION["아침(퇴실·차)" if kind in CAR_KINDS else "아침(퇴실)"]
return STAY_ACTION[slot]
@@ -394,7 +415,7 @@ THEMES = [
("섬까지 다녀오는 1박 2일", "1박 2일", "차를 가져온 손님",
"첫날은 걸어서 도심, 이튿날은 다리를 건너 섬입니다. 두 날의 성격이 아주 다릅니다.",
[("first", ["히로쓰 가옥", "초원사진관", "빈해원", "군산 내항"]),
- ("last_island", ["고군산군도 선유도", "국제반점"])]),
+ ("last_island_car", ["고군산군도 선유도", "국제반점"])]),
("걸어서만 도는 1박 2일", "1박 2일", "차 없이 오는 손님",
"모든 정거장이 머뭄에서 걸어 닿습니다. 이틀 동안 차를 한 번도 타지 않습니다.",
[("first", ["히로쓰 가옥", "초원사진관", "일흥옥", "군산 내항"]),
@@ -402,11 +423,11 @@ THEMES = [
("비가 와도 되는 1박 2일", "1박 2일", "비 예보를 보고 오는 손님",
"실내가 이어집니다. 비가 그치기를 기다리지 않아도 하루가 찹니다.",
[("first", ["군산근대역사박물관", "군산근대미술관", "빈해원", "군산 내항"]),
- ("last", ["군산근대건축관", "일흥옥", "째보선창 근처 카페"])]),
+ ("last_car", ["군산근대건축관", "일흥옥", "째보선창 근처 카페"])]),
("근대건축만 보는 1박 2일", "1박 2일", "건물을 보러 오는 손님",
"1900년대 건물만 골라 돕니다. 머뭄도 그 시기에 지은 집입니다.",
[("first", ["구 군산세관 본관", "군산근대건축관", "명월갈비", "군산 내항"]),
- ("last", ["군산근대미술관", "일흥옥", "해망굴"])]),
+ ("last_car", ["군산근대미술관", "일흥옥", "해망굴"])]),
("이성당으로 시작하는 1박 2일", "1박 2일", "빵을 좋아하는 손님",
"이튿날 아침을 빵으로 엽니다. 문 여는 시간에 맞춰 걸어갑니다.",
[("first", ["초원사진관", "우체통거리", "도란", "군산 내항"]),
@@ -414,7 +435,7 @@ THEMES = [
("철길마을까지 가는 1박 2일", "1박 2일", "사진을 찍는 손님",
"빛이 좋은 자리만 이어 붙였습니다. 철길마을은 오전 빛이 낫습니다.",
[("first", ["초원사진관", "동국사", "국제반점", "군산 내항"]),
- ("last", ["경암동 철길마을", "일흥옥", "군산 시간여행마을"])]),
+ ("last_car", ["경암동 철길마을", "일흥옥", "군산 시간여행마을"])]),
("항구만 도는 1박 2일", "1박 2일", "바다가 보고 싶은 손님",
"부잔교에서 째보선창까지, 이틀 동안 물가만 걷습니다.",
[("first", ["군산 내항 부잔교", "해망굴", "빈해원", "군산 내항"]),
@@ -422,15 +443,15 @@ THEMES = [
("소설 『탁류』를 따라 걷는 1박 2일", "1박 2일", "채만식을 읽어 본 손님",
"소설이 지나간 자리를 순서대로 밟습니다. 세관·선창·문학관이 한 줄로 이어집니다.",
[("first", ["째보선창", "군산 내항 부잔교", "한일옥", "군산 내항"]),
- ("last", ["채만식문학관", "일흥옥", "구 군산세관 본관"])]),
+ ("last_car", ["채만식문학관", "일흥옥", "구 군산세관 본관"])]),
("아이와 함께 1박 2일", "1박 2일", "아이를 데려온 손님",
"걷는 거리가 짧고, 아이가 지루해할 자리를 뺐습니다.",
[("first", ["초원사진관", "우체통거리", "만남스넥", "군산 내항"]),
- ("last", ["경암동 철길마을", "이성당", "월명호수"])]),
+ ("last_car", ["경암동 철길마을", "이성당", "월명호수"])]),
("늦게 도착하는 1박 2일", "1박 2일", "퇴근하고 오는 손님",
"첫날은 저녁 한 끼로 끝냅니다. 대신 이튿날을 아침부터 저녁까지 씁니다.",
[("first_late", ["명월갈비"]),
- ("last_plus", ["군산근대역사박물관", "한일옥", "군산근대건축관", "해망굴"])]),
+ ("last_plus_car", ["군산근대역사박물관", "한일옥", "군산근대건축관", "해망굴"])]),
("천천히 도는 2박 3일", "2박 3일", "쉬러 오는 손님",
"하루에 두어 곳만 봅니다. 마당에 앉아 있는 시간을 일정에 넣었습니다.",
@@ -441,7 +462,7 @@ THEMES = [
"가운데 날을 섬에 다 씁니다. 첫날과 마지막 날은 걸어서 도심입니다.",
[("first", ["구 군산세관 본관", "군산근대건축관", "빈해원", "군산 내항"]),
("mid_island", ["고군산군도 선유도", "장자도", "국제반점", "명월갈비"]),
- ("last", ["초원사진관", "일흥옥", "이성당"])]),
+ ("last_car", ["초원사진관", "일흥옥", "이성당"])]),
("골목을 세 번 나눠 걷는 2박 3일", "2박 3일", "차 없이 오는 손님",
"원도심을 세 덩이로 나눠 하루에 하나씩 걷습니다. 같은 길을 두 번 걷지 않습니다.",
[("first", ["히로쓰 가옥", "초원사진관", "일흥옥", "군산 내항"]),
@@ -451,22 +472,22 @@ THEMES = [
"끼니가 중심입니다. 사이에 걸을 자리를 넣어 배를 비웁니다.",
[("first", ["물밀소", "초원사진관", "명월갈비", "군산 내항"]),
("mid", ["군산 시간여행마을", "일흥옥", "이성당", "우체통거리", "빈해원"]),
- ("last", ["동국사", "국제반점", "군산근대역사박물관"])]),
+ ("last_car", ["동국사", "국제반점", "군산근대역사박물관"])]),
("아무 데도 안 가는 2박 3일", "2박 3일", "쉬려고만 오는 손님",
"가운데 날은 대문 밖으로 두 번만 나갑니다. 나머지는 마당과 카페 공간에서 보냅니다.",
[("first", ["히로쓰 가옥", "초원사진관", "도란", "군산 내항"]),
("mid_rest", ["만남스넥", "일흥옥"]),
- ("last", ["동국사", "물밀소", "월명호수"])]),
+ ("last_car", ["동국사", "물밀소", "월명호수"])]),
("사진만 찍는 2박 3일", "2박 3일", "사진을 찍는 손님",
"시간대에 맞춰 자리를 배치했습니다. 철길마을은 오전, 부잔교는 해 질 때입니다.",
[("first", ["초원사진관", "동국사", "도란", "군산 내항"]),
("mid", ["경암동 철길마을", "만남스넥", "째보선창", "해망굴", "국제반점"]),
- ("last", ["우체통거리", "일흥옥", "군산근대미술관"])]),
+ ("last_car", ["우체통거리", "일흥옥", "군산근대미술관"])]),
("비가 와도 되는 2박 3일", "2박 3일", "비 예보를 보고 오는 손님",
"사흘 내리 비가 와도 도는 순서가 바뀌지 않습니다. 실내와 처마 밑만 잇습니다.",
[("first", ["군산근대역사박물관", "군산근대미술관", "빈해원", "군산 내항"]),
("mid", ["군산근대건축관", "일흥옥", "째보선창 근처 카페", "동국사다온", "명월갈비"]),
- ("last", ["채만식문학관", "한일옥", "이성당"])]),
+ ("last_car", ["채만식문학관", "한일옥", "이성당"])]),
("늦게 시작하는 2박 3일", "2박 3일", "아침이 힘든 손님",
"가운데 날을 열한 시에 엽니다. 오전을 비우고 저녁을 늦게까지 씁니다.",
[("first", ["히로쓰 가옥", "우체통거리", "도란", "군산 내항"]),
@@ -476,7 +497,7 @@ THEMES = [
"가운데 날은 아침에 나가 저녁에 들어옵니다. 섬에서 하루를 통째로 씁니다.",
[("first", ["군산 내항 부잔교", "해망굴", "빈해원", "군산 내항"]),
("mid_island", ["고군산군도 선유도", "장자도", "한일옥", "명월갈비"]),
- ("last", ["군산근대건축관", "만남스넥", "경암동 철길마을"])]),
+ ("last_car", ["군산근대건축관", "만남스넥", "경암동 철길마을"])]),
("소설 『탁류』를 따라 걷는 2박 3일", "2박 3일", "채만식을 읽어 본 손님",
"소설의 순서대로 사흘을 나눴습니다. 선창에서 시작해 문학관에서 끝냅니다.",
[("first", ["째보선창", "군산 내항 부잔교", "일흥옥", "군산 내항"]),
@@ -486,7 +507,7 @@ THEMES = [
"기찻길과 물길을 하루씩 나눠 봅니다. 마지막 날은 건물만 봅니다.",
[("first", ["경암동 철길마을", "초원사진관", "국제반점", "군산 내항"]),
("mid", ["군산 내항 부잔교", "한일옥", "째보선창", "해망굴", "명월갈비"]),
- ("last", ["구 군산세관 본관", "일흥옥", "군산근대미술관"])]),
+ ("last_car", ["구 군산세관 본관", "일흥옥", "군산근대미술관"])]),
]
# 테마 이름 → (날짜별 시작 시각, 체류 배율). 시각과 배율이 그 테마의 성격이다 —
@@ -522,11 +543,21 @@ for name, duration, audience, why, days in THEMES:
built = [build_day(kind, places, DAY_LABEL[i],
(starts[i] if starts and i < len(starts) else None), pace)
for i, (kind, places) in enumerate(days)]
- items.append({"name": name, "duration": duration, "audience": audience, "why": why,
- "days": built})
+ # ★ 차 필요 여부를 손님이 테마를 **고르기 전에** 보이게 한다 (2026-09-14 대표: "차로
+ # 가는거 아닌거는 대중교통 이용이라고 따로 표시해두는게 어때"). 이 신호는 원래
+ # 마지막 날 체크아웃 칸의 note 에만 있었다 — 카드를 펼쳐 마지막 정거장까지 봐야
+ # 나오는 자리라, 테마 이름만 보고 고르는 손님에게는 안 보였다.
+ # ★ '대중교통'이라고는 쓰지 않는다. 이 7개 테마는 버스·택시가 필요한 게 아니라
+ # 전 정거장이 머뭄에서 1.5km 안(WALK_LIMIT_KM)이라 걸어서 다 된다 — 실제로
+ # 안 쓰는 교통수단을 이름에 올리면 손님이 없는 버스편을 찾아보게 만든다.
+ needs_car = days[-1][0] in CAR_KINDS
+ tag = "차량 필요" if needs_car else "도보로 충분 (차 없이 가능)"
+ items.append({"name": name, "duration": duration, "audience": f"{audience} · {tag}",
+ "why": why, "days": built})
env = {"kind": "itinerary", "version": 1, "title": "추천 일정",
- "subtitle": "머뭄에서 나서고 머뭄으로 돌아옵니다", "items": items}
+ "subtitle": "머뭄에서 나서고 머뭄으로 돌아옵니다 — 떠나는 날만 그대로 길을 나섭니다",
+ "items": items}
SECT["itinerary"]["data"] = json.dumps(env, ensure_ascii=False)
@@ -543,6 +574,8 @@ FOOD = {"빈해원", "일흥옥", "한일옥", "명월갈비", "국제반점", "
INDOOR = {"군산근대역사박물관", "군산근대건축관", "군산근대미술관", "채만식문학관", STAY} | FOOD
NEEDS_CAR = {"고군산군도 선유도", "장자도", "채만식문학관", "경암동 철길마을", "월명호수", "은적사"}
REST_SLOTS = {"쉼", "머뭄에서 쉬는 날"}
+# 마지막 날을 **복귀 없이** 끝내는 테마 — 차로 온 손님이다. 뼈대에서 곧바로 뽑는다(손으로 적지 않는다).
+CAR_LAST_THEMES = {name for name, _dur, _aud, _why, days in THEMES if days[-1][0] in CAR_KINDS}
NIGHT_ONLY = {"군산 내항"}
BAR = {"도란"}
DAYS_OF = {"1박 2일": 2, "2박 3일": 3}
@@ -564,13 +597,24 @@ def audit(built: list[dict]) -> list[str]:
slots = [s["name"].split(" · ")[0] for s in day["stops"]]
places = [s["name"].split(" · ")[-1] for s in day["stops"]]
seen_all += [p for p in places if p != STAY]
+ last_day = day is item["days"][-1]
+ car_end = last_day and item["name"] in CAR_LAST_THEMES
- # ① 하루의 처음과 끝은 머뭄
+ # ① 하루의 처음과 끝은 머뭄 — 단, 차로 온 손님의 마지막 날은 짐을 싣고 떠난 뒤라 복귀가 없다
if places[0] != STAY:
flag(item, day, f"1번이 머뭄이 아니다 ({places[0]})")
- if places[-1] != STAY:
+ if places[-1] != STAY and not car_end:
flag(item, day, f"마지막이 머뭄이 아니다 ({places[-1]})")
+ # ⑰ 떠나는 날의 끝맺음이 테마와 맞는가 (2026-09-14)
+ # 차 테마인데 복귀 칸이 남아 있으면 짐을 차에 싣고 숙소로 다시 오는 일정이 되고,
+ # 도보 테마인데 복귀 칸이 없으면 맡긴 짐을 못 찾고 하루가 끝난다. 둘 다 화면만 봐서는
+ # 멀쩡해 보인다 — 뼈대를 바꿀 때 한쪽만 고치고 넘어가는 자리라 검사에 둔다.
+ if car_end and (places[-1] == STAY or slots[-1] == "마무리"):
+ flag(item, day, f"차 테마인데 복귀 칸이 남았다 ({slots[-1]})")
+ if last_day and not car_end and slots[-1] != "마무리":
+ flag(item, day, f"도보 테마인데 짐을 찾는 마무리 칸이 없다 ({slots[-1]})")
+
# ② 같은 자리가 연달아 서지 않는다
for i in range(len(places) - 1):
if places[i] == places[i + 1]:
@@ -596,7 +640,7 @@ def audit(built: list[dict]) -> list[str]:
flag(item, day, f"{slots[i]} 도착 {arrive // 60}:{arrive % 60:02d} — 창 밖")
# ⑥ 마지막 날 첫 칸(아침 겸 퇴실)은 11시 전에 끝난다
- if i == 0 and slots[0] == "아침" and len(item["days"]) == want and day is item["days"][-1]:
+ if i == 0 and slots[0] == "아침" and last_day:
if arrive + stop["minutes"] > CHECK_OUT_BY:
end = arrive + stop["minutes"]
flag(item, day, f"퇴실이 {end // 60}:{end % 60:02d} — 11시를 넘긴다")
@@ -678,4 +722,4 @@ for item in items:
f"{clock // 60:02d}:{clock % 60:02d} {len(day['stops'])}칸")
DST.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8")
-print(f"\n테마 {len(items)}개 · 규칙 16종 위반 0건 · payload {DST.stat().st_size:,}B")
+print(f"\n테마 {len(items)}개 · 규칙 17종 위반 0건 · payload {DST.stat().st_size:,}B")
diff --git a/solution/site/scripts/mockup/build_story.py b/solution/site/scripts/mockup/build_story.py
index b3d3cc4..fa602de 100644
--- a/solution/site/scripts/mockup/build_story.py
+++ b/solution/site/scripts/mockup/build_story.py
@@ -121,6 +121,9 @@ PEOPLE = [
("김수미", "김수미", "1949–2024", "배우", "「전원일기」 일용 엄니로 오래 기억되는 배우입니다."),
("송새벽", "송새벽", "1979–", "배우", "군산 출신 배우입니다."),
("장신영", "장신영", "1984–", "배우", "군산 출신 배우입니다."),
+ # ★ 익산 출생이지만 군산에서 학교를 다녔다 — 그대로 적는다. 다른 줄처럼 "군산 출신" 으로
+ # 뭉뚱그리면 위키와 어긋나고, 이 목록의 규칙(문서에 적힌 관계만 담는다)도 깨진다.
+ ("진희경", "진희경", "1968–", "배우", "익산에서 태어나 군산영광여고를 나온 배우입니다."),
("이서원", "이서원", "1997–", "배우", "군산 출신 배우입니다."),
("장재호 (배우)", "장재호", "1986–", "배우", "군산 출신 배우입니다."),
("강민지 (배우)", "강민지", "1996–", "배우 · 모델", "모델로 시작해 드라마와 영화로 활동 범위를 넓혔습니다."),
diff --git a/solution/site/scripts/mockup/fetch_restaurants.py b/solution/site/scripts/mockup/fetch_restaurants.py
new file mode 100644
index 0000000..81fa234
--- /dev/null
+++ b/solution/site/scripts/mockup/fetch_restaurants.py
@@ -0,0 +1,99 @@
+"""주변 맛집을 TourAPI 에서 다시 받아 `restaurants.json` 으로 떨어뜨린다. patch_stay.py 가 이 파일을 싣는다.
+
+★ 왜 (2026-09-11, 사장님: "주변맛집 데이터가 너무 적은거같아")
+ 원본 사이트의 맛집은 8곳이었고 전부 467m 안이었다. 그래서 '걸어서 10분 이상' 탭을 누르면
+ 맛집 칸이 "이 거리 안에는 없습니다" 로 비었다. 같은 좌표 TourAPI 5km 반경에는 59곳이 있다
+ (제품은 5km 를 싣는다 — local_content_service.RESTAURANT_RADIUS_M).
+★ 2km(걸어서 25분)까지만 싣는다. 그 밖은 차로 갈 거리라 '주변' 이라 부르기 어렵고,
+ 레일에 59장이 서면 가까운 집이 묻힌다.
+★ 원래 8곳은 그대로 둔다 — 소개문과 사진이 원본 사이트 것이다. 새로 붙는 곳만 TourAPI 에서 받는다.
+★ 사진은 공공누리 상업 이용 가능분만 온다(tour_api._normalize 가 거른다). 받아서 img/mirror/ 에
+ 둔다 — 시연본은 레포 안에서 자급자족한다(README 2.2). 사진 없는 집은 렌더러가 이름 활자로 세운다.
+
+실행 (solution/backend 에서 — 백엔드 설정이 .env 를 거기서 읽는다):
+ .venv/bin/python ../site/scripts/mockup/fetch_restaurants.py
+"""
+import asyncio
+import hashlib
+import json
+import re
+import sys
+from pathlib import Path
+
+import httpx
+
+SP = Path(__file__).resolve().parent
+sys.path.insert(0, str(SP.parents[2] / "backend"))
+from services.external.tour_api import _call, fetch_nearby # noqa: E402
+
+LAT, LNG = 35.9864175, 126.7061254 # payload.place — 스테이 머뭄
+RADIUS_M = 2_000
+
+
+def meters(text: str) -> float:
+ m = re.match(r"^([\d.]+)\s*(km|m)$", (text or "").strip(), re.I)
+ return float(m[1]) * (1000 if m[2].lower() == "km" else 1) if m else float("inf")
+
+
+def distance_text(m: int) -> str:
+ """site_payload 와 같은 표기 — 렌더러가 이 문자열을 다시 미터로 읽어 거리 탭을 가른다."""
+ return f"{m}m" if m < 1000 else f"{(m + 50) // 100 / 10:.1f}km"
+
+
+def clean_name(title: str) -> str:
+ # "[백년가게]운정식당" · "[착한가게] 국일식당" — 인증 꼬리표는 이름이 아니다. 검색어에 붙으면 가게가 안 잡힌다.
+ return re.sub(r"^\[[^\]]*\]\s*", "", title).strip()
+
+
+def blurb(overview: str) -> str:
+ """overview 앞 두 문장까지. 카드는 세 줄에서 자른다(line-clamp-3) — 원래 8곳도 두 문장 안팎이다."""
+ text = re.sub(r"\s+", " ", re.sub(r"<[^>]+>", "", overview or "")).strip()
+ sentences = re.split(r"(?<=[.!?])\s+", text)
+ out = sentences[0] if sentences else ""
+ if len(sentences) > 1 and len(out) + len(sentences[1]) < 110:
+ out += " " + sentences[1]
+ return out
+
+
+async def mirror(client: httpx.AsyncClient, url: str) -> str:
+ ext = Path(url.split("?")[0]).suffix.lower() or ".jpg"
+ name = hashlib.sha1(url.encode()).hexdigest()[:16] + ext
+ path = SP / "img" / "mirror" / name
+ if not path.exists():
+ res = await client.get(url)
+ res.raise_for_status()
+ path.write_bytes(res.content)
+ # patch_stay.py 가 /assets/mirror/ → /s/stay/img/mirror/ 로 바꿔 박는다(원래 8곳과 같은 길).
+ return f"/assets/mirror/{name}"
+
+
+async def main() -> None:
+ original = json.loads((SP / "stay-payload.json").read_text(encoding="utf-8"))["local"]["restaurants"]
+ have = {r["name"] for r in original}
+ out = list(original)
+ async with httpx.AsyncClient(timeout=30, follow_redirects=True) as client:
+ rows = await fetch_nearby(client, LAT, LNG, radius_m=RADIUS_M, content_type_id="39")
+ for row in rows:
+ name = clean_name(row["name"])
+ if name in have:
+ continue
+ items, _ = await _call(client, "detailCommon2", contentId=row["contentid"])
+ entry = {"name": name, "category": "맛집", "searchQuery": name,
+ "distanceText": distance_text(row["distance_m"])}
+ if row.get("imageUrl"):
+ entry["imageUrl"] = await mirror(client, row["imageUrl"])
+ desc = blurb(items[0].get("overview") if items else "")
+ if desc:
+ entry["description"] = desc
+ out.append(entry)
+ have.add(name)
+ # 거리순 — 레일 앞머리가 가장 가까운 집이어야 '주변' 이다.
+ out.sort(key=lambda r: meters(r.get("distanceText")))
+ (SP / "restaurants.json").write_text(json.dumps(out, ensure_ascii=False, indent=1) + "\n", encoding="utf-8")
+ far = sum(1 for r in out if meters(r.get("distanceText")) > 800)
+ photo = sum(1 for r in out if r.get("imageUrl"))
+ print(f"restaurants.json · {len(out)}곳 (원본 {len(original)} + TourAPI {len(out) - len(original)}) "
+ f"· 사진 {photo} · 800m 밖 {far}")
+
+
+asyncio.run(main())
diff --git a/solution/site/scripts/mockup/fill_restaurant_photos.py b/solution/site/scripts/mockup/fill_restaurant_photos.py
new file mode 100644
index 0000000..5bfe1d6
--- /dev/null
+++ b/solution/site/scripts/mockup/fill_restaurant_photos.py
@@ -0,0 +1,47 @@
+"""TourAPI 에 사진이 없는 주변 맛집에 네이버 이미지 검색으로 찾은 사진을 받아 둔다.
+
+★ 왜 (2026-09-11, 사장님: "이미지가 없어?? 좀 가져와봐" · "다운로드 하던가")
+ fetch_restaurants.py 가 붙인 23곳 중 11곳은 TourAPI(위치 목록·추가 이미지·키워드 검색)와
+ 위키미디어 어디에도 사진이 없었다. 레일에 이름 활자 카드가 11장 섞였다.
+★ ⚠ 이 사진들은 공공누리가 아니다. 대한민국 구석구석·군산시청·블로그·네이버 플레이스에 올라온 것이고
+ 권리는 각 게시자에게 있다. **시연본에만 쓴다 — 제품 수집 파이프라인으로 옮기지 않는다.**
+ 제품의 규칙은 그대로 공공누리 Type1·Type3 뿐이다(tour_api._COMMERCIAL_OK_LICENSES).
+★ 한 장씩 눈으로 보고 골랐다 — 간판이 보이거나 게시물 제목에 그 가게 이름이 있는 것만.
+ 이름만 같은 다른 집(거목아리랑 · 국일복아구)은 버렸다. 출처 주소는 restaurant-photos.json 에 남긴다.
+★ 긴 변 1600px 로 줄인다 — 원본이 10MB 인 것도 있다. 작은 사진은 키우지 않는다.
+
+실행: python3 fill_restaurant_photos.py (macOS `sips` 로 줄인다)
+굽기(patch_stay.py)는 여기서 받아 둔 파일만 읽는다 — 사진이 없는 집에만 덧대고, TourAPI 사진이 있으면 그쪽이 먼저다.
+"""
+import hashlib
+import json
+import re
+import subprocess
+import urllib.request
+from pathlib import Path
+
+SP = Path(__file__).resolve().parent
+LIST = SP / "restaurant-photos.json"
+MAX_SIDE = 1600
+
+photos = json.loads(LIST.read_text(encoding="utf-8"))
+for name, ph in photos.items():
+ file = hashlib.sha1(ph["url"].encode()).hexdigest()[:16] + ".jpg"
+ path = SP / "img" / "mirror" / file
+ if not path.exists():
+ src = path.with_suffix(".src")
+ req = urllib.request.Request(ph["url"], headers={"User-Agent": "Mozilla/5.0", "Referer": "https://search.naver.com/"})
+ src.write_bytes(urllib.request.urlopen(req, timeout=30).read())
+ dims = subprocess.run(["sips", "-g", "pixelWidth", "-g", "pixelHeight", str(src)],
+ capture_output=True, text=True, check=True).stdout
+ side = max(int(v) for v in re.findall(r"pixel(?:Width|Height): (\d+)", dims))
+ cmd = ["sips", "-s", "format", "jpeg", "-s", "formatOptions", "80"]
+ if side > MAX_SIDE:
+ cmd += ["-Z", str(MAX_SIDE)]
+ subprocess.run(cmd + [str(src), "--out", str(path)], capture_output=True, check=True)
+ src.unlink()
+ ph["file"] = file
+ print(f" {name:<8} {path.stat().st_size // 1024:>5}KB {file}")
+
+LIST.write_text(json.dumps(photos, ensure_ascii=False, indent=1) + "\n", encoding="utf-8")
+print(f"restaurant-photos.json · {len(photos)}곳")
diff --git a/solution/site/scripts/mockup/img/mirror/00a8ac4ce017fb12.jpg b/solution/site/scripts/mockup/img/mirror/00a8ac4ce017fb12.jpg
new file mode 100644
index 0000000..10e4931
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/00a8ac4ce017fb12.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/067f6fe42c045a3a.jpg b/solution/site/scripts/mockup/img/mirror/067f6fe42c045a3a.jpg
new file mode 100644
index 0000000..eb0379f
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/067f6fe42c045a3a.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/087900c82da3b2f5.jpg b/solution/site/scripts/mockup/img/mirror/087900c82da3b2f5.jpg
new file mode 100644
index 0000000..b1778fc
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/087900c82da3b2f5.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/1302460cb149975f.jpg b/solution/site/scripts/mockup/img/mirror/1302460cb149975f.jpg
new file mode 100644
index 0000000..1fb2fd4
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/1302460cb149975f.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/24043ae4f5854f96.jpg b/solution/site/scripts/mockup/img/mirror/24043ae4f5854f96.jpg
new file mode 100644
index 0000000..1bf16d6
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/24043ae4f5854f96.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/3e5b3daae33ea51c.jpg b/solution/site/scripts/mockup/img/mirror/3e5b3daae33ea51c.jpg
new file mode 100644
index 0000000..10338f6
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/3e5b3daae33ea51c.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/42e8d872198edaa9.jpg b/solution/site/scripts/mockup/img/mirror/42e8d872198edaa9.jpg
new file mode 100644
index 0000000..13b5b89
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/42e8d872198edaa9.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/483f52c2d2b7eebe.jpg b/solution/site/scripts/mockup/img/mirror/483f52c2d2b7eebe.jpg
new file mode 100644
index 0000000..3ad803c
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/483f52c2d2b7eebe.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/55f57f45fcebb460.jpg b/solution/site/scripts/mockup/img/mirror/55f57f45fcebb460.jpg
new file mode 100644
index 0000000..c3ad8aa
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/55f57f45fcebb460.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/5f92192c7b3e2cbf.jpg b/solution/site/scripts/mockup/img/mirror/5f92192c7b3e2cbf.jpg
new file mode 100644
index 0000000..1af845d
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/5f92192c7b3e2cbf.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/6102b164464dbfa4.jpg b/solution/site/scripts/mockup/img/mirror/6102b164464dbfa4.jpg
new file mode 100644
index 0000000..6bb41a1
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/6102b164464dbfa4.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/81438670a5485351.jpg b/solution/site/scripts/mockup/img/mirror/81438670a5485351.jpg
new file mode 100644
index 0000000..76bd74e
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/81438670a5485351.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/81bd76fa51ae9ad1.jpg b/solution/site/scripts/mockup/img/mirror/81bd76fa51ae9ad1.jpg
new file mode 100644
index 0000000..c8fed22
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/81bd76fa51ae9ad1.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/83766fa52745ef37.jpg b/solution/site/scripts/mockup/img/mirror/83766fa52745ef37.jpg
new file mode 100644
index 0000000..fa6f3fe
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/83766fa52745ef37.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/92cb907d07db9953.jpg b/solution/site/scripts/mockup/img/mirror/92cb907d07db9953.jpg
new file mode 100644
index 0000000..4715d29
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/92cb907d07db9953.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/93146c8ae53252ff.jpg b/solution/site/scripts/mockup/img/mirror/93146c8ae53252ff.jpg
new file mode 100644
index 0000000..5b4e725
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/93146c8ae53252ff.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/98539e6361e317b1.jpg b/solution/site/scripts/mockup/img/mirror/98539e6361e317b1.jpg
new file mode 100644
index 0000000..7cae3b5
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/98539e6361e317b1.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/aebe437fd281f9ad.jpg b/solution/site/scripts/mockup/img/mirror/aebe437fd281f9ad.jpg
new file mode 100644
index 0000000..61ac31a
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/aebe437fd281f9ad.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/b3518ee8ef2b4aac.png b/solution/site/scripts/mockup/img/mirror/b3518ee8ef2b4aac.png
new file mode 100644
index 0000000..dd6e854
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/b3518ee8ef2b4aac.png differ
diff --git a/solution/site/scripts/mockup/img/mirror/bf6bb6183c6f6246.jpg b/solution/site/scripts/mockup/img/mirror/bf6bb6183c6f6246.jpg
new file mode 100644
index 0000000..e3ab454
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/bf6bb6183c6f6246.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/de286714af7faaba.jpg b/solution/site/scripts/mockup/img/mirror/de286714af7faaba.jpg
new file mode 100644
index 0000000..ab51812
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/de286714af7faaba.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/e13c8a2a1aa2762c.jpg b/solution/site/scripts/mockup/img/mirror/e13c8a2a1aa2762c.jpg
new file mode 100644
index 0000000..fd908b5
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/e13c8a2a1aa2762c.jpg differ
diff --git a/solution/site/scripts/mockup/img/mirror/f9cb7e88415edd06.jpg b/solution/site/scripts/mockup/img/mirror/f9cb7e88415edd06.jpg
new file mode 100644
index 0000000..bce4eb1
Binary files /dev/null and b/solution/site/scripts/mockup/img/mirror/f9cb7e88415edd06.jpg differ
diff --git a/solution/site/scripts/mockup/patch_stay.py b/solution/site/scripts/mockup/patch_stay.py
index 28079aa..570ddba 100644
--- a/solution/site/scripts/mockup/patch_stay.py
+++ b/solution/site/scripts/mockup/patch_stay.py
@@ -14,6 +14,15 @@ from pathlib import Path
SP = Path(__file__).parent
+# ── 최종 업데이트 시각 ────────────────────────────────────────────────────────
+# 화면 아래 "최종 업데이트", head 의 dateModified, JSON-LD, payload 의 site.updatedAt ·
+# local.syncedAt 이 전부 이 한 값을 쓴다. 구운 원본에는 2026-09-09 가 박혀 있어, 문구·맛집을
+# 고친 뒤에도 화면에는 옛 날짜가 남았다 (2026-09-11 사장님: "이거 업뎃해야지").
+# ★ now() 를 쓰지 않는다 — 내용을 안 고치고 다시 구워도 날짜가 올라가 버린다. 구글은 lastmod 를
+# 페이지의 실제 수정과 대조해 맞을 때만 쓰고 어긋나면 그 필드를 무시한다(seo/directory.ts).
+# 내용을 고친 날에 이 값을 손으로 올린다.
+UPDATED_AT = "2026-09-14T07:42:00+00:00"
+
# ── 캐치프레이즈 100개 ────────────────────────────────────────────────────────
# 사실이 아니라 문구다(출처가 붙는 값이 아니다). 근거는 payload 의 시설·위치 값 —
# 적산가옥 두 동 · 히로쓰 가옥 옆 · 마당과 정원 · 창고형 카페 · 매일 세탁하는 침구 · 최대 4인.
@@ -92,6 +101,92 @@ WEATHER = {
"눈": ["기와에 눈이 앉으면 골목이 통째로 조용해집니다", "눈 밟는 소리가 담 안에서 크게 들립니다"],
}
+# ── 오늘의 날씨 문구 ──────────────────────────────────────────────────────────
+# ★ 케이스마다 한 줄뿐이었다 (2026-09-14 사장님: "케이스당 여러개로 만들어서 랜덤으로")
+# 같은 하늘·같은 기온이면 늘 같은 문장이 떴다. 시연에서 새로고침해도 안 바뀐다.
+# ★ 축을 둘로 갈라 둔 것은 그대로다(site-payload.ts WeatherSnapshot 주석) —
+# 하늘은 **집 안에서** 뭘 할지, 기온은 **밖에서** 어디를 갈지다. 한 칸에 담으면
+# 5×5 스물다섯 벌을 적어야 한다.
+# ★ 이름을 대는 곳은 이 사이트에 **이미 있는 자리**만 쓴다(주변 안내 12곳 · 맛집 31곳).
+# 화면에 없는 곳을 날씨 칸에서만 권하면 손님이 그걸 찾을 데가 없다.
+# ★ 하늘은 다섯이다. 렌더러는 넷(맑음·흐림·비·눈)으로만 가르므로 구름많음과 그 외
+# (안개·소나기·뇌우)가 `notes.흐림` 한 칸을 같이 본다 — 그 둘을 가르는 것은 inject.js ⑥ 다.
+SKY_NOTES = {
+ "맑음": [
+ "마당 평상에 앉으면 새소리만 들립니다. 정원 쪽으로 그늘이 길게 눕는 시간입니다.",
+ "기와가 마르는 냄새가 나는 날입니다. 아침에 널어 두신 것은 오후면 다 마릅니다.",
+ "볕이 좋아 대문을 열어 둡니다. 마당 사진은 해가 기울기 시작할 때가 가장 곱습니다.",
+ "창을 다 열어도 좋은 날입니다. A동 장지문으로 드는 빛이 오전에 가장 깊습니다.",
+ "해가 길게 남는 날입니다. 짐을 풀고 골목부터 한 바퀴 돌고 오셔도 늦지 않습니다.",
+ ],
+ "구름많음": [
+ "빛이 부드러운 날입니다. 골목 사진이 제일 잘 나오는 빛입니다.",
+ "그늘이 옅어 마당이 눈부시지 않습니다. 평상에 오래 앉아 계시기 좋습니다.",
+ "해가 들었다 숨었다 합니다. 창고형 CAFÉ 공간과 마당을 오가며 쉬시면 됩니다.",
+ "구름이 얇은 날입니다. 우체통거리까지 걷기에 덥지도 춥지도 않습니다.",
+ "빛이 고른 날입니다. 초원사진관까지 걸어서 삼 분, 사진은 오늘 같은 하늘이 낫습니다.",
+ ],
+ "그외": [
+ "해가 숨은 날입니다. 기와와 담이 한 색으로 가라앉고, 마당 평상에 앉아도 눈이 부시지 않습니다.",
+ "하늘이 자주 바뀌는 날입니다. 나가실 때 우산을 챙기시는 편이 낫습니다.",
+ "안개가 낮게 깔리면 골목 끝이 흐려집니다. 서두르지 마시고 늦게 나가셔도 됩니다.",
+ "소나기가 지나갈 수 있는 하늘입니다. 창고형 CAFÉ 공간에서 한 차례 보내고 나가셔도 됩니다.",
+ "바람이 먼저 바뀌는 날입니다. 마당에 널어 두신 것은 들여놓으시는 편이 좋습니다.",
+ ],
+ "비": [
+ "백 년 된 기와를 타고 내리는 소리가 다릅니다. 창고형 CAFÉ 공간에서 빗소리를 들으실 수 있습니다.",
+ "비 오는 골목에는 사람이 없습니다. 히로쓰 가옥 담길은 오늘 같은 날이 가장 조용합니다.",
+ "마당 디딤돌이 미끄럽습니다. 밤에 나가실 때는 정원 석등 쪽으로 도세요.",
+ "실내로 도는 편이 낫습니다. 근대건축관과 군산근대미술관이 걸어서 십 분 안에 나란히 있습니다.",
+ "우산은 대문 안쪽에 두시면 됩니다. 젖은 것은 테라스 쪽이 잘 마릅니다.",
+ ],
+ "눈": [
+ "기와에 눈이 앉으면 골목이 통째로 조용해집니다. 정원 석등만 켜 두겠습니다.",
+ "눈 밟는 소리가 담 안에서 크게 들립니다. 마당은 아침에 한 번 쓸어 두겠습니다.",
+ "눈 오는 날의 원도심은 사람이 적습니다. 초원사진관 골목이 오늘 가장 한산합니다.",
+ "디딤돌에 눈이 얼 수 있습니다. 밤에 드나드실 때는 조심해서 딛으세요.",
+ "창을 닫아 두시는 편이 낫습니다. 창고형 CAFÉ 공간이 이런 날 가장 아늑합니다.",
+ ],
+}
+# 기온대 경계는 렌더러가 정한다(`site/src/lib/derive.ts weatherBand`) — 30·25·20·10.
+TEMP_NOTES = {
+ "혹서": [
+ "낮에는 군산근대미술관·근대건축관처럼 실내로 도는 편이 낫습니다. 월명호수 한 바퀴는 해가 넘어간 뒤가 시원합니다.",
+ "한낮 골목에는 그늘이 없습니다. 초원사진관·영화의 거리는 이른 아침이나 해 질 무렵에 도세요.",
+ "옛 군산세관과 근대건축관은 걸어서 이어집니다. 실내를 징검다리 삼아 도시면 덜 지칩니다.",
+ "경암동 철길마을은 그늘이 적습니다. 오늘은 저녁에 가시는 편이 낫습니다.",
+ "물은 나가시기 전에 챙기세요. 이성당까지는 걸어서 오백 미터, 해가 기운 뒤가 낫습니다.",
+ ],
+ "더움": [
+ "선유도까지 다녀오기 좋은 기온입니다. 골목은 오후 늦게 도세요 — 경암동 철길마을은 해 질 때가 사람이 적습니다.",
+ "낮에는 월명호수 그늘길이 시원합니다. 물가를 따라 걷다 돌아오시면 됩니다.",
+ "우체통거리와 영화의 거리는 그늘이 이어집니다. 걸어서 도시기에 무리가 없습니다.",
+ "해가 길어 저녁이 넉넉합니다. 내항 쪽으로 나가 노을을 보고 오셔도 됩니다.",
+ "가장 더운 시간만 실내가 낫습니다. 군산근대미술관에서 한 차례 쉬어 가세요.",
+ ],
+ "선선": [
+ "걷기에 가장 좋은 날입니다. 히로쓰 가옥에서 초원사진관·영화의 거리까지 걸어서 그대로 이어집니다.",
+ "원도심은 오늘 하루면 다 걸립니다. 군산 시간여행마을까지 천천히 다녀오셔도 됩니다.",
+ "차를 두고 걷는 편이 낫습니다. 우체통거리에서 옛 군산세관까지 골목이 계속 이어집니다.",
+ "해가 부담스럽지 않습니다. 경암동 철길마을까지 다녀오기에 알맞은 기온입니다.",
+ "낮에는 월명호수를 한 바퀴 돌고, 밤에는 마당에 앉아 계셔도 좋습니다.",
+ ],
+ "쌀쌀": [
+ "월명호수를 한 바퀴 돌고 이성당이나 국제반점에서 따뜻한 것을 드시면 알맞습니다.",
+ "겉옷을 하나 더 챙기세요. 해가 지면 항구 쪽 바람이 먼저 찹니다.",
+ "실내와 골목을 섞어 도는 편이 낫습니다. 근대건축관에서 몸을 녹이고 다시 나오시면 됩니다.",
+ "따뜻한 국물이 도는 날입니다. 복성루·빈해원처럼 가까운 집부터 보세요.",
+ "오후 볕이 짧습니다. 초원사진관·영화의 거리를 먼저 돌고 저녁에 들어오세요.",
+ ],
+ "추움": [
+ "밖은 바람이 매섭습니다. 근대건축관·근대미술관과 시간여행마을 실내를 묶어 도는 편이 낫습니다.",
+ "항구 바람이 매운 날입니다. 골목은 짧게 돌고 실내를 길게 잡으세요.",
+ "장갑과 목도리를 챙기세요. 옛 군산세관 앞은 바람이 그대로 지나갑니다.",
+ "따뜻한 것을 먼저 드시는 편이 낫습니다. 이성당·국제반점은 걸어서 오백 미터입니다.",
+ "일찍 들어오셔도 됩니다. 벽난로가 있는 거실이 이런 날 가장 좋습니다.",
+ ],
+}
+
items = [{"text": t, "kind": "general"} for t in GENERAL]
items += [{"text": t, "kind": "season", "season": s} for s, lst in SEASON.items() for t in lst]
items += [{"text": t, "kind": "month", "month": m} for m, lst in MONTH.items() for t in lst]
@@ -99,6 +194,71 @@ items += [{"text": t, "kind": "weather", "weather": w} for w, lst in WEATHER.ite
payload = json.loads((SP / "stay-payload-new.json").read_text(encoding="utf-8"))
payload["narrative"]["catchphrases"] = {"version": 1, "items": items}
+
+# ── '오늘의 엽서' 탭을 없앤다 ─────────────────────────────────────────────────
+# ★ 왜 (2026-09-14 대표: "오늘의 엽서 칸을 빼고 이 엽서 포맷으로 스테이 머뭄 관련
+# 엽서를 쓰는 걸로 하자") — 도시 엽서 4장은 이제 안 쓴다. 대신 손님이 직접 쓰는
+# 엽서 섹션을 새로 만들고(inject.js `postcardMaker`), 그건 '군산 이야기' 탭이
+# 아니라 `#location`–`#festival` 사이의 **독립 섹션**이다.
+# ★ 마크업을 안 건드리고 payload 만 비운다 — `StorySection.tsx` 는
+# `sectionItems(payload,'postcard').items.length > 0` 인 탭만 세우므로, data 를
+# 비우면 렌더러 코드는 그대로 두고도 탭이 저절로 사라진다(README 2.6 의 원칙과 같다:
+# "마크업을 고쳐 지우지 않는다").
+for _sec in payload["theme"]["sections"]:
+ if _sec["id"] == "postcard":
+ _sec["data"] = json.dumps({"kind": "postcard", "version": 1, "items": []}, ensure_ascii=False)
+ break
+
+# 굽는 판에는 케이스마다 **첫 문장**을 박는다 — 크롤러와 첫 화면이 보는 값이고,
+# inject.js 가 DOM 에서 갈아 끼울 때 찾는 닻이기도 하다. 문장이 겹치면 엉뚱한 줄을 바꾼다.
+_all_notes = [t for lst in SKY_NOTES.values() for t in lst] + \
+ [t for lst in TEMP_NOTES.values() for t in lst]
+assert len(_all_notes) == len(set(_all_notes)), "날씨 문구가 겹친다 — DOM 에서 어느 줄인지 못 가른다"
+payload["local"]["weather"].update({
+ # 렌더러가 아는 넷. 구름많음은 '흐림' 칸을 쓴다(그 외와 가르는 것은 inject.js ⑦).
+ "notes": {"맑음": SKY_NOTES["맑음"][0], "흐림": SKY_NOTES["구름많음"][0],
+ "비": SKY_NOTES["비"][0], "눈": SKY_NOTES["눈"][0]},
+ "tempNotes": {band: lines[0] for band, lines in TEMP_NOTES.items()},
+ # 렌더러가 모르는 칸이다(계약에 없어 그대로 지나간다). 주입분만 읽는다.
+ "noteSets": SKY_NOTES,
+ "tempNoteSets": TEMP_NOTES,
+})
+
+# ── 주변 맛집 8곳 → 2km 안 31곳 ──────────────────────────────────────────────
+# ★ 원본 8곳이 전부 467m 안이라 '걸어서 10분 이상' 탭에서 맛집 칸이 비었다 (2026-09-11 사장님:
+# "주변맛집 데이터가 너무 적은거같아"). 목록은 fetch_restaurants.py 가 TourAPI 에서 받아 둔 것이다 —
+# 여기서 API 를 부르지 않는다. 굽기가 네트워크·키에 매이면 다른 기계에서 못 굽는다.
+payload["local"]["restaurants"] = json.loads((SP / "restaurants.json").read_text(encoding="utf-8"))
+# 사진 없는 집에 시연본 전용 사진을 덧댄다(fill_restaurant_photos.py — 공공누리 아님, 제품으로 옮기지 않는다).
+# TourAPI 사진이 있는 집은 건드리지 않는다.
+_photos = json.loads((SP / "restaurant-photos.json").read_text(encoding="utf-8"))
+for _r in payload["local"]["restaurants"]:
+ if not _r.get("imageUrl") and _photos.get(_r["name"], {}).get("file"):
+ _r["imageUrl"] = f"/assets/mirror/{_photos[_r['name']]['file']}"
+# ── 군산 국가유산 야행 ───────────────────────────────────────────────────────
+# ★ 왜 (2026-09-14 대표: 받은 `gunsan_365_story_db.xlsx` 52주제 대조 — 사이트에 없던 둘 중 하나)
+# 나머지 축제는 TourAPI 가 준 것이라 이 목록에 없었다. 원도심 국가유산을 밤에 여는
+# 행사라 머뭄(신흥동)에서 걸어 닿는 범위이고, 여름 저녁 일정과 맞는다.
+# ★ **이름은 '문화재야행' 이 아니다.** 엑셀에는 옛 이름으로 적혀 있는데, 2024년 문화재청이
+# 국가유산청으로 바뀌면서 행사명도 '국가유산 야행' 으로 갈렸다(군산시 문화예술과 공지 확인).
+# 옛 이름으로 두면 검색 링크가 엉뚱한 해의 문서로 간다.
+# ★ 날짜(period·startDate)는 **적지 않는다.** 확인한 공지는 2025년분이고 2026년 일정은
+# 아직 공고 전이다 — 지어내지 않는다(레포 절대 규칙). 축제 10개 중 5개가 이미 날짜 없이
+# 서 있어 화면도 그 경우를 감당한다.
+payload["local"]["festivals"].append({
+ "name": "군산 국가유산 야행",
+ "month": "8월",
+ "season": "여름",
+ "location": "구 조선식량영단 등 원도심 국가유산 일원 · 걸어서 20분",
+ "description": "원도심의 국가유산을 밤에 여는 행사다. 야경·야로·야사 등 여덟 갈래로 나뉘어 "
+ "신흥동 일본식 가옥의 정원 조명, 스탬프 투어, 옛 건물에서 여는 공연과 야시장이 "
+ "저녁부터 밤까지 이어진다.",
+ "searchQuery": "군산 국가유산 야행",
+})
+
+payload["site"]["updatedAt"] = UPDATED_AT
+# 주변 정보(맛집·명소)를 갈아 끼운 시각도 같다 — 이 스크립트가 그 둘을 같이 바꾼다.
+payload["local"]["syncedAt"] = UPDATED_AT
(SP / "stay-payload-new.json").write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8")
# ── 머뭄이 만든 노래 5곡 ──────────────────────────────────────────────────────
@@ -234,6 +394,35 @@ for unit in payload["units"]:
# 옛 사진은 남기지 않는다 — 등록본이 그 객실에 붙여 놓은 사진만 그 순서로 세운다.
unit["mediaIds"] = per_unit.get(room, [])
+# ── 화면에서 뺄 탭 ───────────────────────────────────────────────────────────
+# ★ `enabled = False` 로는 안 꺼진다 (2026-09-14 사장님: "오늘의 한장은 주석처리해주쇼")
+# 이 다섯은 '군산 이야기' 안의 탭이고, 탭은 **항목이 있는 것만** 선다(StorySection.tsx:41).
+# enabled 는 아예 보지 않는다 — 실측: daily 가 enabled=False 인데도 탭이 서 있었다.
+# ★ 그래서 항목을 비운다. 원값은 stay-payload-new.json 에 그대로 있으므로(위에서 이미 썼다)
+# 되살리려면 아래 집합에서 id 만 빼면 된다. 다시 만들 필요 없다.
+HIDE_TABS = {"daily"} # 오늘의 한 장
+
+for _section in payload["theme"]["sections"]:
+ if _section["id"] not in HIDE_TABS:
+ continue
+ _env = json.loads(_section["data"])
+ _env["items"] = []
+ _section["data"] = json.dumps(_env, ensure_ascii=False)
+ _section["enabled"] = False
+
+# ── 예약 안내를 켠다 ─────────────────────────────────────────────────────────
+# ★ 왜 (2026-09-14 사장님: "예약 섹션을 안 가져다가 렌더링하네, 그거 구현되었으니 가져오셈")
+# 원본 payload 의 booking 은 enabled=False 였다. 숙박이면 이 자리는 요금·인원·창구에
+# 날짜/시간 목업까지 붙은 `StayBookingSection` 이 그린다(HomePage.tsx:69) — 회의록의
+# "예약 페이지는 연동이 어려워 우선 목업 형태로" 가 이미 구현돼 있던 것이다.
+# ★ 기본값(항목이 없으면 알아서 나가는 HomePage.tsx:122)에 기대지 못한다 — 항목이
+# **있는데 꺼진** 상태라 `hasSection()` 이 참이고, 그 분기는 "사장님이 끈 것" 으로 존중한다.
+# ★ 지어낸 값이 없다. 요금·인원·취소 규정은 payload 의 확인된 fact 뿐이고
+# (`derive.ts stayBookingView`), 근거가 하나도 없으면 섹션째 안 그린다.
+for _section in payload["theme"]["sections"]:
+ if _section["id"] == "booking":
+ _section["enabled"] = True
+
# ── index.html 조립 ──────────────────────────────────────────────────────────
html = (SP / "orig" / "index.html").read_text(encoding="utf-8")
@@ -244,6 +433,14 @@ html, n = re.subn(r"",
html, count=1, flags=re.S)
assert n == 1, "payload 스크립트를 못 찾았다"
+# ★ 날짜는 payload 밖에도 박혀 있다 — head 의 dateModified · article:modified_time ·
+# JSON-LD · 화면의 . payload 만 고치면 **크롤러와 첫 화면은 옛 날짜를 본다**
+# (React 가 다시 그리기 전까지, 그리고 JS 를 안 돌리는 크롤러에게는 영영).
+OLD_UPDATED_AT = "2026-09-09T13:40:00+00:00"
+html = html.replace(OLD_UPDATED_AT, UPDATED_AT)
+html = html.replace(f">{OLD_UPDATED_AT[:10]} ", f">{UPDATED_AT[:10]}")
+assert OLD_UPDATED_AT not in html and OLD_UPDATED_AT[:10] not in html, "옛 날짜가 남았다"
+
# ★ 이용 정보 **맨 아래 구분선**을 지운다 (2026-09-10 사장님 지시).
# 항목이 끝난 자리에 선이 한 줄 더 그어져 있어, 빈 칸이 하나 더 있는 것처럼 보인다.
# 항목(바비큐 이용) 자체는 그대로 둔다 — 지우라고 한 것은 선이다.
@@ -252,9 +449,23 @@ assert n == 1, "payload 스크립트를 못 찾았다"
css = (SP / "inject.css").read_text(encoding="utf-8")
js = (SP / "inject.js").read_text(encoding="utf-8")
+# 빌드 도장 — 콘솔에서 "지금 보는 게 언제 구운 것인가"를 바로 읽게 한다(위 ★ 주석, inject.js).
+assert "__W4D_BUILD__" in js, "inject.js 에서 빌드 도장 자리가 사라졌다"
+js = js.replace("__W4D_BUILD__", UPDATED_AT)
assert "" not in css and "" not in js
-block = ("\n \n"
+# ★ 군산 읽기 카로셀은 이 사이트가 실제 쓰는 그 라이브러리(embla-carousel)로 움직인다
+# (2026-09-14 대표: "기존 카로셀 쓰라고, 니가 뭔데 니맘대로 그지같이 구현해" — 맞는 말이다).
+# `inject.js` 는 React 번들 밖의 순정 스크립트라 앱이 물고 있는 embla 인스턴스를 가져다
+# 쓸 수 없다 — 그래서 **코어(라이브러리 자체, React 래퍼 없이)의 UMD 빌드**를 이 목업
+# 전용으로 하나 더 들여왔다. 의존성 0 · 17.9KB(비압축, 사이트 자체 주석의 "~5KB gzip"과
+# 같은 값) — `node_modules/embla-carousel/embla-carousel.umd.js` 를 그대로 복사한 것이고
+# 손으로 고치지 않는다(라이선스 MIT, 버전은 site/package.json 의 embla-carousel-react 와 맞춘다).
+assert (SP / "vendor" / "embla-carousel.umd.js").exists(), \
+ "vendor/embla-carousel.umd.js 가 없다 — node_modules/embla-carousel/embla-carousel.umd.js 를 복사한다"
+
+block = ("\n \n"
+ " \n"
" \n ")
# 치환문(block)에 JS 의 정규식(\s 등)이 섞여 있어 그대로 넘기면 파이썬이 이스케이프로 읽는다 — 람다로 넘긴다.
html, n = re.subn(r"\n?\s*
` — 새 번들에서는 이게 없으면 35줄이 조용히 죽는다.
+# 2026-09-09 의 `b1386dd`(에디터와 발행본을 한 렌더러로) 이후 발행본 공용 스타일이
+# `:where(.site,.site-canvas) …` 로 스코프됐다. `orig/index.html` 은 그 전에 구운 것이라
+# body 에 클래스가 없다 — 실측: 카로셀 상자(`.slider-viewport`)의 `overflow-x` 가 통째로
+# 빠져 모바일에서 판 25장이 화면 밖으로 흘러 **가로 스크롤이 생겼다.**
+# 프리렌더가 지금 내보내는 것과 같은 마크업으로 맞춘다(`scripts/prerender.ts:384`).
+html, n = re.subn(r"]*\bclass=)", ' 음식점 > 군산맛집",
+ "file": "92cb907d07db9953.jpg"
+ },
+ "한주옥": {
+ "url": "https://d12zq4w4guyljn.cloudfront.net/20220816093444324_photo_3w9NMDVGF1oN.webp",
+ "title": "한주옥 - 군산 간장게장, 꽃게장정식 맛집 - 다이닝코드",
+ "file": "f9cb7e88415edd06.jpg"
+ },
+ "사골뚝배기": {
+ "url": "https://www.gunsan.go.kr/upload_data/board_data/FOOD/150838840634244.jpg",
+ "title": "게시글 목록 < 탕류 < 음식 < 음식/숙박/쇼핑 < 문화관광",
+ "file": "24043ae4f5854f96.jpg"
+ },
+ "스위트인디아": {
+ "url": "https://cdn.visitkorea.or.kr/img/call?cmd=VIEW&id=bd1e6e61-70f2-462d-a8f7-f7fc31d98443",
+ "title": "스위트인디아> 여행지 :대한민국 구석구석 스위트인디아> 여행지 :대한민국 구석구석 ",
+ "file": "bf6bb6183c6f6246.jpg"
+ },
+ "홍영장": {
+ "url": "https://pup-post-phinf.pstatic.net/MjAyNjA1MjNfMTYg/MDAxNzc5NTE2OTMxNDkz.SRqGW5cr3uqRcOaulY6pgfkM_b8UPyxL1QwZ_WN-bfUg.tDWdfAwPxIUmrComXVMgo-hSslTYtbmI3x3iQyG0XKAg.JPEG/PostEncodingTask.30343AE4-7E4E-47B8-A9C0-978AD991D374.jpg",
+ "title": "물짜장 맛집입니더!!! #가정의달 #오늘클립챌린지 #군산 #홍영장 #맛집",
+ "file": "087900c82da3b2f5.jpg"
+ },
+ "명동소바": {
+ "url": "https://cdn.visitkorea.or.kr/img/call?cmd=VIEW&id=26a5546a-6966-4391-b0eb-46703f24adb9",
+ "title": "명동소바> 여행지 :대한민국 구석구석 명동소바> 여행지 :대한민국 구석구석 ",
+ "file": "55f57f45fcebb460.jpg"
+ },
+ "유락식당": {
+ "url": "https://cdn.visitkorea.or.kr/img/call?cmd=VIEW&id=911b5e60-01e0-4eab-8579-4cd447b94dca",
+ "title": "(인쇄용) [백년가게]유락식당 | 대한민국 구석구석",
+ "file": "5f92192c7b3e2cbf.jpg"
+ },
+ "일풍식당": {
+ "url": "https://ldb-phinf.pstatic.net/20200103_164/1578048423036vc5I1_JPEG/lIOOzZx3sZZK9JUJgMsD3dHg.jpg",
+ "title": "일풍식당",
+ "file": "e13c8a2a1aa2762c.jpg"
+ },
+ "아리랑": {
+ "url": "https://pup-post-phinf.pstatic.net/MjAyNjA2MDhfNCAg/MDAxNzgwODg2MDI5NTY1.6vNfC_2hbbyXSjtxSEDSTzkn0f3j8rrEjU15_2DL2Kkg.dbYhyKh4ozdjjWXUUS-oYnCJp7-oFfh_2bU0oc1OBAog.JPEG/POST_IMAGE_ENC_20260608_113317_278.jpg",
+ "title": "#오늘클립챌린지#아리랑식당#비빔밥정식#군산맛집",
+ "file": "1302460cb149975f.jpg"
+ },
+ "국일식당": {
+ "url": "https://ldb-phinf.pstatic.net/20240406_119/1712415338890jfJDL_JPEG/IMG_3315.jpeg",
+ "title": "국일복아구",
+ "file": "6102b164464dbfa4.jpg"
+ }
+}
diff --git a/solution/site/scripts/mockup/restaurants.json b/solution/site/scripts/mockup/restaurants.json
new file mode 100644
index 0000000..6d4b068
--- /dev/null
+++ b/solution/site/scripts/mockup/restaurants.json
@@ -0,0 +1,239 @@
+[
+ {
+ "name": "도란",
+ "category": "맛집",
+ "searchQuery": "도란",
+ "distanceText": "135m",
+ "imageUrl": "/assets/mirror/12938240987c1f78.jpg",
+ "description": "전라북도 군산시 월명동에 있는 요리주점이다. 와인과 함께 카페와 양식을 메뉴를 주로 다루고 있다. 대표 메뉴로는 감바스, 해산물 크림 스튜, 부채살 스테이크 등이 있다."
+ },
+ {
+ "name": "물밀소",
+ "category": "맛집",
+ "searchQuery": "물밀소",
+ "distanceText": "297m",
+ "imageUrl": "/assets/mirror/07600bb67b91dd15.jpg",
+ "description": "월명동에 자리한 베이커리 물밀소는 신생 빵집으로 입소문이 자자하다. 붉은 벽돌의 아담한 외관을 가졌고 매장 내부에는 저온숙성한 반죽으로 빚어낸 건강한 빵들이 진열돼 있다."
+ },
+ {
+ "name": "일흥옥",
+ "category": "맛집",
+ "searchQuery": "일흥옥",
+ "distanceText": "300m",
+ "imageUrl": "/assets/mirror/3420ff7e357ab7ef.jpg",
+ "description": "일흥옥은 군산 테디베어뮤지엄 인근에 위치한 국밥 전문점이다. 중소벤처기업부로부터 백년가게 인증을 받은 곳이다."
+ },
+ {
+ "name": "군산복집",
+ "category": "맛집",
+ "searchQuery": "군산복집",
+ "distanceText": "305m",
+ "description": "군산복집은 싱싱한 재료만을 사용하는 복요리 전문점으로 복탕과 아구탕은 해장하기에 좋으며, 오래된 전통과 경력의 주방장이 내는 회 맛이 일품인 곳이다."
+ },
+ {
+ "name": "명월갈비",
+ "category": "맛집",
+ "searchQuery": "명월갈비",
+ "distanceText": "351m",
+ "imageUrl": "/assets/mirror/881d1f7ff820942f.jpg",
+ "description": "군산 신창동에 있는 명월갈비는 군산 지역의 대표 양념 소갈비 전문 맛집이다. 플러스 등급의 한우 갈비를 비법 양념장으로 숙성한 단품 메뉴로 오랜 기간 동안 인기를 유지해오고 있다."
+ },
+ {
+ "name": "만남스넥",
+ "category": "맛집",
+ "searchQuery": "만남스넥",
+ "distanceText": "405m",
+ "imageUrl": "/assets/mirror/d2be5a053a944cfe.jpg",
+ "description": "만남스넥은 군산 현지인들이 좋아하는 메뉴인 잡탕을 파는 분식집이다. 잡탕은 떡, 만두, 라면, 어묵 등을 넣고 같이 끓인 메뉴인데, 떡볶이나 라볶이보다 국물이 많고 부재료가 풍부해 잡탕으로 불리게…"
+ },
+ {
+ "name": "동국사다온",
+ "category": "맛집",
+ "searchQuery": "동국사다온",
+ "distanceText": "418m",
+ "imageUrl": "/assets/mirror/4db345bd2cb4f0d7.jpg",
+ "description": "전라북도 군산시 일본식 사찰인 동국사 사찰 내에 있는 테이크아웃 커피 전문점이다. 불교 용품과 함께 대추차, 오미자차, 오룡차 등 다양한 차 종류를 판매하고 있다."
+ },
+ {
+ "name": "진갈비",
+ "category": "맛집",
+ "searchQuery": "진갈비",
+ "distanceText": "426m",
+ "description": "소박해보이지만 오랜 세월의 내공으로 묵직하고 깊은 떡갈비를 선사하는 맛집이다. 군산 현지인들이 추천하는 유명 맛집이기도 하다."
+ },
+ {
+ "name": "한주옥",
+ "category": "맛집",
+ "searchQuery": "한주옥",
+ "distanceText": "430m",
+ "description": "‘한주옥’은 전북 군산시 영화동에 위치한 꽃게장 전문 음식점이다. 꽃게장 백반/정식, 대하장 백반/정식을 맛볼 수 있다."
+ },
+ {
+ "name": "이성당",
+ "category": "맛집",
+ "searchQuery": "이성당",
+ "distanceText": "455m",
+ "imageUrl": "/assets/mirror/37c90494d28478e2.png",
+ "description": "일본 시마네현 이즈모시에 살다가 1906년 조선으로 건너온 히로세 야스타로라는 일본인이 ‘이즈모야’라는 이름으로 문을 열어 영업한 것이 시초이다."
+ },
+ {
+ "name": "국제반점",
+ "category": "맛집",
+ "searchQuery": "국제반점",
+ "distanceText": "467m",
+ "imageUrl": "/assets/mirror/149c18951bdcaff8.jpg",
+ "description": "군산 영화동에 있는 국제반점은 1960년대 초 진흥반점으로 개업해 현재는 상호를 국제 반점으로 변경하여 성업 중인 중식당이다. 영화 <타짜>에 등장해 군산의 관광 명소가 되었다."
+ },
+ {
+ "name": "사골뚝배기",
+ "category": "맛집",
+ "searchQuery": "사골뚝배기",
+ "distanceText": "479m",
+ "description": "사골 뚝배기는 전북 군산시에 위치한 한식 전문점이다. 한우고기와 한우사골만을 써서 아주 진하고 맛깔스러운 국물을 우려내어 요리를 만든다."
+ },
+ {
+ "name": "영화원",
+ "category": "맛집",
+ "searchQuery": "영화원",
+ "distanceText": "495m",
+ "imageUrl": "/assets/mirror/42e8d872198edaa9.jpg",
+ "description": "군산 영화동에 있는 영화원은 1976년부터 지금까지 4대째 운영하는 오래된 중국 음식점이다. 대를 이어오면서 그 맛의 비결을 간직하고 있다."
+ },
+ {
+ "name": "스위트인디아",
+ "category": "맛집",
+ "searchQuery": "스위트인디아",
+ "distanceText": "539m",
+ "description": "전라북도 군산시에 위치한 스위트인디아는 인도 카레 맛집으로, 양고기, 소고기, 닭고기, 새우, 야채 총 5가지의 맛의 카레를 판매하고 있다."
+ },
+ {
+ "name": "틈(TEUM)",
+ "category": "맛집",
+ "searchQuery": "틈(TEUM)",
+ "distanceText": "573m",
+ "imageUrl": "/assets/mirror/81bd76fa51ae9ad1.jpg",
+ "description": "군산항 근처에 있는 옛 미곡 창고를 그대로 활용한 카페다. ‘틈’이란 이름처럼 입구가 좁은 골목길 틈에 위치해 있어 간판을 눈여겨보지 않으면 찾기 어렵다."
+ },
+ {
+ "name": "미즈커피",
+ "category": "맛집",
+ "searchQuery": "미즈커피",
+ "distanceText": "696m",
+ "imageUrl": "/assets/mirror/3e5b3daae33ea51c.jpg",
+ "description": "군산 근대문화 역사관 바로 옆에 자리한 카페로 일제강점기 무역회사였던 ‘미즈 상사’의 옛 사옥을 그대로 활용했다. 당시 일본인이 운영했던 미즈 상사는 식료품과 잡화 등을 수입해 판매하던 회사였다."
+ },
+ {
+ "name": "홍영장",
+ "category": "맛집",
+ "searchQuery": "홍영장",
+ "distanceText": "725m",
+ "description": "홍영장은 군산의 짬뽕거리에 위치한 중식당으로 방송에서 인정받은 맛집이다. 평소에 흔히 맛볼 수 없는 메뉴인 물짜장이 유명하다."
+ },
+ {
+ "name": "아리랑",
+ "category": "맛집",
+ "searchQuery": "아리랑",
+ "distanceText": "732m",
+ "description": "군산에 위치한 향토음식점으로 군산 지역의 특산물을 맛볼 수 있는 음식점이다."
+ },
+ {
+ "name": "운정식당",
+ "category": "맛집",
+ "searchQuery": "운정식당",
+ "distanceText": "748m",
+ "imageUrl": "/assets/mirror/00a8ac4ce017fb12.jpg",
+ "description": "군산 개복동 골목의 터줏대감으로 40년 가까이 한 자리를 지키고 있는 식당이다."
+ },
+ {
+ "name": "빈해원",
+ "category": "맛집",
+ "searchQuery": "빈해원",
+ "distanceText": "749m",
+ "imageUrl": "/assets/mirror/483f52c2d2b7eebe.jpg",
+ "description": "군산 빈해원은 1965년 콘크리트와 벽돌을 사용하여 지은 2층 건물이다. 이 건물은 1~2층이 개방된 내부공간과 각층에 여러 개의 방이 있는 독특한 구조이다."
+ },
+ {
+ "name": "국일식당",
+ "category": "맛집",
+ "searchQuery": "국일식당",
+ "distanceText": "935m",
+ "description": "전라북도 군산시에 위치한 국일식당은 콩나물의 아삭함과 매콤한 양념이 어우러진 아귀찜 전문점이다. 군산의 전통명가 답게 모범 착한업소로 선정된 곳이다."
+ },
+ {
+ "name": "명동소바",
+ "category": "맛집",
+ "searchQuery": "명동소바",
+ "distanceText": "961m",
+ "description": "‘군산명동소바’는 30년 이상된 군산 최초 원조 소바집이다. 메밀면발도 직접 연구 개발하고 매장 자체적으로 기계로 면을 빼서 쫄깃하고 탱탱한 맛으로 현지인뿐만 아니라 여행객의 많은 발길이 이어진다."
+ },
+ {
+ "name": "복성루",
+ "category": "맛집",
+ "searchQuery": "복성루",
+ "distanceText": "1.3km",
+ "imageUrl": "/assets/mirror/b3518ee8ef2b4aac.png",
+ "description": "복성루는 빈해원 지린성과 함께 군산 3대 짬뽕 맛집으로 유명하며 싱싱한 오징어, 홍합, 꼬막 등 다양한 해산물과 야채를 넣고 우려낸 진한 짬뽕 국물이 일품인 가게로 줄 서서 맛보는 지역의 대표 짬뽕집으로 자리 잡고 있다."
+ },
+ {
+ "name": "유락식당",
+ "category": "맛집",
+ "searchQuery": "유락식당",
+ "distanceText": "1.3km",
+ "description": "김정례 대표가 1981년 문을 열어 40여 년 동안 지역을 대표하는 음식점으로 손님에게 최선의 맛과 서비스를 제공하고자 하는 곳이다."
+ },
+ {
+ "name": "왕산반점",
+ "category": "맛집",
+ "searchQuery": "왕산반점",
+ "distanceText": "1.5km",
+ "imageUrl": "/assets/mirror/aebe437fd281f9ad.jpg",
+ "description": "특허받은 콩나물 짬뽕으로 유명한 중화요리 집이다. 짬뽕면 위에 푸짐하게 올라간 콩나물, 홍합, 그 위에 신선한 낙지 한 마리까지 먹기 전부터 시각을 자극한다."
+ },
+ {
+ "name": "리투스카페",
+ "category": "맛집",
+ "searchQuery": "리투스카페",
+ "distanceText": "1.6km",
+ "imageUrl": "/assets/mirror/81438670a5485351.jpg",
+ "description": "리투스카페는 군산 내항 부두 근처에 있는 오션 뷰 카페다. 특히 황금빛 일몰이 아름다워 일몰 카페로도 유명하다."
+ },
+ {
+ "name": "일풍식당",
+ "category": "맛집",
+ "searchQuery": "일풍식당",
+ "distanceText": "1.6km",
+ "description": "‘일풍식당’은 각종 TV매체에서 맛집으로 다룬 곳이다. 골목 사이에 위치해 있어 찾을 때 약간 주의를 해야 한다."
+ },
+ {
+ "name": "수송반점",
+ "category": "맛집",
+ "searchQuery": "수송반점",
+ "distanceText": "1.7km",
+ "imageUrl": "/assets/mirror/98539e6361e317b1.jpg",
+ "description": "수송 반점은 군산시 서흥남동, 서흥 중학교 근처에 있는 중식당이다."
+ },
+ {
+ "name": "군산활어회센타",
+ "category": "맛집",
+ "searchQuery": "군산활어회센타",
+ "distanceText": "1.9km",
+ "imageUrl": "/assets/mirror/93146c8ae53252ff.jpg",
+ "description": "군산 문화동에 있는 '군산 활어회센터'는 가까이 있는 군산항 활어회 직판장에서 가져오는 활어회로 신선도와 식감 면에서 뛰어나다."
+ },
+ {
+ "name": "진성원",
+ "category": "맛집",
+ "searchQuery": "진성원",
+ "distanceText": "1.9km",
+ "imageUrl": "/assets/mirror/83766fa52745ef37.jpg",
+ "description": "진성원은 전라북도 군산시 경암동에 있는 중식당이다."
+ },
+ {
+ "name": "서우식당",
+ "category": "맛집",
+ "searchQuery": "서우식당",
+ "distanceText": "2.0km",
+ "imageUrl": "/assets/mirror/de286714af7faaba.jpg",
+ "description": "서우식당은 저렴한 가격에 푸짐한 한상차림으로 허영만의 백반 기행 등 TV 프로그램에도 소개된 한식집이다."
+ }
+]
diff --git a/solution/site/scripts/mockup/vendor/embla-carousel.umd.js b/solution/site/scripts/mockup/vendor/embla-carousel.umd.js
new file mode 100644
index 0000000..5832ad5
--- /dev/null
+++ b/solution/site/scripts/mockup/vendor/embla-carousel.umd.js
@@ -0,0 +1 @@
+!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(n="undefined"!=typeof globalThis?globalThis:n||self).EmblaCarousel=t()}(this,(function(){"use strict";function n(n){return"number"==typeof n}function t(n){return"string"==typeof n}function e(n){return"boolean"==typeof n}function r(n){return"[object Object]"===Object.prototype.toString.call(n)}function o(n){return Math.abs(n)}function i(n){return Math.sign(n)}function c(n,t){return o(n-t)}function u(n){return f(n).map(Number)}function s(n){return n[a(n)]}function a(n){return Math.max(0,n.length-1)}function d(n,t){return t===a(n)}function l(n,t=0){return Array.from(Array(n),((n,e)=>t+e))}function f(n){return Object.keys(n)}function p(n,t){return[n,t].reduce(((n,t)=>(f(t).forEach((e=>{const o=n[e],i=t[e],c=r(o)&&r(i);n[e]=c?p(o,i):i})),n)),{})}function m(n,t){return void 0!==t.MouseEvent&&n instanceof t.MouseEvent}function g(){let n=[];const t={add:function(e,r,o,i={passive:!0}){let c;if("addEventListener"in e)e.addEventListener(r,o,i),c=()=>e.removeEventListener(r,o,i);else{const n=e;n.addListener(o),c=()=>n.removeListener(o)}return n.push(c),t},clear:function(){n=n.filter((n=>n()))}};return t}function h(n,t,e,r){const o=g(),i=1e3/60;let c=null,u=0,s=0;function a(n){if(!s)return;c||(c=n,e(),e());const o=n-c;for(c=n,u+=o;u>=i;)e(),u-=i;r(u/i),s&&(s=t.requestAnimationFrame(a))}function d(){t.cancelAnimationFrame(s),c=null,u=0,s=0}return{init:function(){o.add(n,"visibilitychange",(()=>{n.hidden&&(c=null,u=0)}))},destroy:function(){d(),o.clear()},start:function(){s||(s=t.requestAnimationFrame(a))},stop:d,update:e,render:r}}function x(n=0,t=0){const e=o(n-t);function r(t){return tt}function c(n){return r(n)||i(n)}return{length:e,max:t,min:n,constrain:function(e){return c(e)?r(e)?n:t:e},reachedAny:c,reachedMax:i,reachedMin:r,removeOffset:function(n){return e?n-e*Math.ceil((n-t)/e):n}}}function y(n,t,e){const{constrain:r}=x(0,n),i=n+1;let c=u(t);function u(n){return e?o((i+n)%i):r(n)}function s(){return c}function a(){return y(n,s(),e)}const d={get:s,set:function(n){return c=u(n),d},add:function(n){return a().set(s()+n)},clone:a};return d}function v(n,t,r,u,s,a,d,l,f,p,h,y,v,b,S,w,E,L,D){const{cross:I,direction:M}=n,A=["INPUT","SELECT","TEXTAREA"],F={passive:!1},T=g(),O=g(),P=x(50,225).constrain(b.measure(20)),z={mouse:300,touch:400},H={mouse:500,touch:600},k=S?43:25;let V=!1,B=0,C=0,N=!1,R=!1,j=!1,G=!1;function q(n){if(!m(n,u)&&n.touches.length>=2)return U(n);const t=a.readPoint(n),e=a.readPoint(n,I),r=c(t,B),o=c(e,C);if(!R&&!G){if(!n.cancelable)return U(n);if(R=r>o,!R)return U(n)}const i=a.pointerMove(n);r>w&&(j=!0),p.useFriction(.3).useDuration(.75),l.start(),s.add(M(i)),n.preventDefault()}function U(n){const t=h.byDistance(0,!1).index!==y.get(),e=a.pointerUp(n)*(S?H:z)[G?"mouse":"touch"],r=function(n,t){const e=y.add(-1*i(n)),r=h.byDistance(n,!S).distance;return S||o(n)=2,e&&0!==n.button)return;if(function(n){const t=n.nodeName||"";return A.includes(t)}(n.target))return;N=!0,a.pointerDown(n),p.useFriction(0).useDuration(0),s.set(d),function(){const n=G?r:t;O.add(n,"touchmove",q,F).add(n,"touchend",U).add(n,"mousemove",q,F).add(n,"mouseup",U)}(),B=a.readPoint(n),C=a.readPoint(n,I),v.emit("pointerDown")}(o)}const i=t;T.add(i,"dragstart",(n=>n.preventDefault()),F).add(i,"touchmove",(()=>{}),F).add(i,"touchend",(()=>{})).add(i,"touchstart",o).add(i,"mousedown",o).add(i,"touchcancel",U).add(i,"contextmenu",U).add(i,"click",W,!0)},destroy:function(){T.clear(),O.clear()},pointerDown:function(){return N}}}function b(n,t){let e,r;function i(n){return n.timeStamp}function c(e,r){const o="client"+("x"===(r||n.scroll)?"X":"Y");return(m(e,t)?e:e.touches[0])[o]}return{pointerDown:function(n){return e=n,r=n,c(n)},pointerMove:function(n){const t=c(n)-c(r),o=i(n)-i(e)>170;return r=n,o&&(e=n),t},pointerUp:function(n){if(!e||!r)return 0;const t=c(r)-c(e),u=i(n)-i(e),s=i(n)-i(r)>170,a=t/u;return u&&!s&&o(a)>.1?a:0},readPoint:c}}function S(n,t,r,i,c,u,s){const a=[n].concat(i);let d,l,f=[],p=!1;function m(n){return c.measureSize(s.measure(n))}return{init:function(c){u&&(l=m(n),f=i.map(m),d=new ResizeObserver((r=>{(e(u)||u(c,r))&&function(e){for(const r of e){if(p)return;const e=r.target===n,u=i.indexOf(r.target),s=e?l:f[u];if(o(m(e?n:i[u])-s)>=.5){c.reInit(),t.emit("resize");break}}}(r)})),r.requestAnimationFrame((()=>{a.forEach((n=>d.observe(n)))})))},destroy:function(){p=!0,d&&d.disconnect()}}}function w(n,t,e,r,i){const c=i.measure(10),u=i.measure(50),s=x(.1,.99);let a=!1;function d(){return!a&&(!!n.reachedAny(e.get())&&!!n.reachedAny(t.get()))}return{shouldConstrain:d,constrain:function(i){if(!d())return;const a=n.reachedMin(t.get())?"min":"max",l=o(n[a]-t.get()),f=e.get()-t.get(),p=s.constrain(l/u);e.subtract(f*p),!i&&o(f)n.add(o)))}}}function L(n,t,e,r,c){const{reachedAny:u,removeOffset:a,constrain:d}=r;function l(n){return n.concat().sort(((n,t)=>o(n)-o(t)))[0]}function f(t,r){const o=[t,t+e,t-e];if(!n)return t;if(!r)return l(o);const c=o.filter((n=>i(n)===r));return c.length?l(c):s(o)-e}return{byDistance:function(e,r){const i=c.get()+e,{index:s,distance:l}=function(e){const r=n?a(e):d(e),i=t.map(((n,t)=>({diff:f(n-r,0),index:t}))).sort(((n,t)=>o(n.diff)-o(t.diff))),{index:c}=i[0];return{index:c,distance:r}}(i),p=!n&&u(i);return!r||p?{index:s,distance:e}:{index:s,distance:e+f(t[s]-l,0)}},byIndex:function(n,e){return{index:n,distance:f(t[n]-c.get(),e)}},shortcut:f}}function D(t,r,o,i,c,u,s,a){const d={passive:!0,capture:!0};let l=0;function f(n){"Tab"===n.code&&(l=(new Date).getTime())}return{init:function(p){a&&(u.add(document,"keydown",f,!1),r.forEach(((r,f)=>{u.add(r,"focus",(r=>{(e(a)||a(p,r))&&function(e){if((new Date).getTime()-l>10)return;s.emit("slideFocusStart"),t.scrollLeft=0;const r=o.findIndex((n=>n.includes(e)));n(r)&&(c.useDuration(0),i.index(r,0),s.emit("slideFocus"))}(f)}),d)})))}}}function I(t){let e=t;function r(t){return n(t)?t:t.get()}return{get:function(){return e},set:function(n){e=r(n)},add:function(n){e+=r(n)},subtract:function(n){e-=r(n)}}}function M(n,t){const e="x"===n.scroll?function(n){return`translate3d(${n}px,0px,0px)`}:function(n){return`translate3d(0px,${n}px,0px)`},r=t.style;let o=null,i=!1;return{clear:function(){i||(r.transform="",t.getAttribute("style")||t.removeAttribute("style"))},to:function(t){if(i)return;const c=(u=n.direction(t),Math.round(100*u)/100);var u;c!==o&&(r.transform=e(c),o=c)},toggleActive:function(n){i=!n}}}function A(n,t,e,r,o,i,c,s,a){const d=.5,l=u(o),f=u(o).reverse(),p=function(){const n=c[0];return h(g(f,n),e,!1)}().concat(function(){const n=t-c[0]-1;return h(g(l,n),-e,!0)}());function m(n,t){return n.reduce(((n,t)=>n-o[t]),t)}function g(n,t){return n.reduce(((n,e)=>m(n,t)>0?n.concat([e]):n),[])}function h(o,c,u){const l=function(n){return i.map(((e,o)=>({start:e-r[o]+d+n,end:e+t-d+n})))}(c);return o.map((t=>{const r=u?0:-e,o=u?e:0,i=u?"end":"start",c=l[t][i];return{index:t,loopPoint:c,slideLocation:I(-1),translate:M(n,a[t]),target:()=>s.get()>c?r:o}}))}return{canLoop:function(){return p.every((({index:n})=>m(l.filter((t=>t!==n)),t)<=.1))},clear:function(){p.forEach((n=>n.translate.clear()))},loop:function(){p.forEach((n=>{const{target:t,translate:e,slideLocation:r}=n,o=t();o!==r.get()&&(e.to(o),r.set(o))}))},loopPoints:p}}function F(n,t,r){let o,i=!1;return{init:function(c){r&&(o=new MutationObserver((n=>{i||(e(r)||r(c,n))&&function(n){for(const e of n)if("childList"===e.type){c.reInit(),t.emit("slidesChanged");break}}(n)})),o.observe(n,{childList:!0}))},destroy:function(){o&&o.disconnect(),i=!0}}}function T(n,t,e,r){const o={};let i,c=null,u=null,s=!1;return{init:function(){i=new IntersectionObserver((n=>{s||(n.forEach((n=>{const e=t.indexOf(n.target);o[e]=n})),c=null,u=null,e.emit("slidesInView"))}),{root:n.parentElement,threshold:r}),t.forEach((n=>i.observe(n)))},destroy:function(){i&&i.disconnect(),s=!0},get:function(n=!0){if(n&&c)return c;if(!n&&u)return u;const t=function(n){return f(o).reduce(((t,e)=>{const r=parseInt(e),{isIntersecting:i}=o[r];return(n&&i||!n&&!i)&&t.push(r),t}),[])}(n);return n&&(c=t),n||(u=t),t}}}function O(t,e,r,i,c,d,l,f,p){const{startEdge:m,endEdge:g,direction:h}=t,x=n(r);return{groupSlides:function(n){return x?function(n,t){return u(n).filter((n=>n%t==0)).map((e=>n.slice(e,e+t)))}(n,r):function(n){return n.length?u(n).reduce(((t,r,u)=>{const x=s(t)||0,y=0===x,v=r===a(n),b=c[m]-d[x][m],S=c[m]-d[r][g],w=!i&&y?h(l):0,E=o(S-(!i&&v?h(f):0)-(b+w));return u&&E>e+p&&t.push(r),v&&t.push(n.length),t}),[]).map(((t,e,r)=>{const o=Math.max(r[e-1]||0);return n.slice(o,t)})):[]}(n)}}}function P(n,e,r,f,p,m,P){const{align:z,axis:H,direction:k,startIndex:V,loop:B,duration:C,dragFree:N,dragThreshold:R,inViewThreshold:j,slidesToScroll:G,skipSnaps:q,containScroll:U,watchResize:W,watchSlides:$,watchDrag:Q,watchFocus:X}=m,Y={measure:function(n){const{offsetTop:t,offsetLeft:e,offsetWidth:r,offsetHeight:o}=n;return{top:t,right:e+r,bottom:t+o,left:e,width:r,height:o}}},J=Y.measure(e),K=r.map(Y.measure),Z=function(n,t){const e="rtl"===t,r="y"===n,o=!r&&e?-1:1;return{scroll:r?"y":"x",cross:r?"x":"y",startEdge:r?"top":e?"right":"left",endEdge:r?"bottom":e?"left":"right",measureSize:function(n){const{height:t,width:e}=n;return r?t:e},direction:function(n){return n*o}}}(H,k),_=Z.measureSize(J),nn=function(n){return{measure:function(t){return n*(t/100)}}}(_),tn=function(n,e){const r={start:function(){return 0},center:function(n){return o(n)/2},end:o};function o(n){return e-n}return{measure:function(o,i){return t(n)?r[n](o):n(e,o,i)}}}(z,_),en=!B&&!!U,rn=B||!!U,{slideSizes:on,slideSizesWithGaps:cn,startGap:un,endGap:sn}=function(n,t,e,r,i,c){const{measureSize:u,startEdge:a,endEdge:l}=n,f=e[0]&&i,p=function(){if(!f)return 0;const n=e[0];return o(t[a]-n[a])}(),m=function(){if(!f)return 0;const n=c.getComputedStyle(s(r));return parseFloat(n.getPropertyValue(`margin-${l}`))}(),g=e.map(u),h=e.map(((n,t,e)=>{const r=!t,o=d(e,t);return r?g[t]+p:o?g[t]+m:e[t+1][a]-n[a]})).map(o);return{slideSizes:g,slideSizesWithGaps:h,startGap:p,endGap:m}}(Z,J,K,r,rn,p),an=O(Z,_,G,B,J,K,un,sn,2),{snaps:dn,snapsAligned:ln}=function(n,t,e,r,i){const{startEdge:c,endEdge:u}=n,{groupSlides:a}=i,d=a(r).map((n=>s(n)[u]-n[0][c])).map(o).map(t.measure),l=r.map((n=>e[c]-n[c])).map((n=>-o(n))),f=a(l).map((n=>n[0])).map(((n,t)=>n+d[t]));return{snaps:l,snapsAligned:f}}(Z,tn,J,K,an),fn=-s(dn)+s(cn),{snapsContained:pn,scrollContainLimit:mn}=function(n,t,e,r,o){const i=x(-t+n,0),u=e.map(((n,t)=>{const{min:r,max:o}=i,c=i.constrain(n),u=!t,s=d(e,t);return u?o:s||l(r,c)?r:l(o,c)?o:c})).map((n=>parseFloat(n.toFixed(3)))),a=function(){const n=u[0],t=s(u);return x(u.lastIndexOf(n),u.indexOf(t)+1)}();function l(n,t){return c(n,t)<=1}return{snapsContained:function(){if(t<=n+o)return[i.max];if("keepSnaps"===r)return u;const{min:e,max:c}=a;return u.slice(e,c)}(),scrollContainLimit:a}}(_,fn,ln,U,2),gn=en?pn:ln,{limit:hn}=function(n,t,e){const r=t[0];return{limit:x(e?r-n:s(t),r)}}(fn,gn,B),xn=y(a(gn),V,B),yn=xn.clone(),vn=u(r),bn=h(f,p,(()=>(({dragHandler:n,scrollBody:t,scrollBounds:e,options:{loop:r}})=>{r||e.constrain(n.pointerDown()),t.seek()})(Hn)),(n=>(({scrollBody:n,translate:t,location:e,offsetLocation:r,previousLocation:o,scrollLooper:i,slideLooper:c,dragHandler:u,animation:s,eventHandler:a,scrollBounds:d,options:{loop:l}},f)=>{const p=n.settled(),m=!d.shouldConstrain(),g=l?p:p&&m,h=g&&!u.pointerDown();h&&s.stop();const x=e.get()*f+o.get()*(1-f);r.set(x),l&&(i.loop(n.direction()),c.loop()),t.to(r.get()),h&&a.emit("settle"),g||a.emit("scroll")})(Hn,n))),Sn=gn[xn.get()],wn=I(Sn),En=I(Sn),Ln=I(Sn),Dn=I(Sn),In=function(n,t,e,r,c,u){let s=0,a=0,d=c,l=u,f=n.get(),p=0;function m(n){return d=n,h}function g(n){return l=n,h}const h={direction:function(){return a},duration:function(){return d},velocity:function(){return s},seek:function(){const t=r.get()-n.get();let o=0;return d?(e.set(n),s+=t/d,s*=l,f+=s,n.add(s),o=f-p):(s=0,e.set(r),n.set(r),o=t),a=i(o),p=f,h},settled:function(){return o(r.get()-t.get())<.001},useBaseFriction:function(){return g(u)},useBaseDuration:function(){return m(c)},useFriction:g,useDuration:m};return h}(wn,Ln,En,Dn,C,.68),Mn=L(B,gn,fn,hn,Dn),An=function(n,t,e,r,o,i,c){function u(o){const u=o.distance,s=o.index!==t.get();i.add(u),u&&(r.duration()?n.start():(n.update(),n.render(1),n.update())),s&&(e.set(t.get()),t.set(o.index),c.emit("select"))}return{distance:function(n,t){u(o.byDistance(n,t))},index:function(n,e){const r=t.clone().set(n);u(o.byIndex(r.get(),e))}}}(bn,xn,yn,In,Mn,Dn,P),Fn=function(n){const{max:t,length:e}=n;return{get:function(n){return e?(n-t)/-e:0}}}(hn),Tn=g(),On=T(e,r,P,j),{slideRegistry:Pn}=function(n,t,e,r,o,i){const{groupSlides:c}=o,{min:u,max:f}=r;return{slideRegistry:function(){const r=c(i),o=!n||"keepSnaps"===t;return 1===e.length?[i]:o?r:r.slice(u,f).map(((n,t,e)=>{const r=!t,o=d(e,t);return r?l(s(e[0])+1):o?l(a(i)-s(e)[0]+1,s(e)[0]):n}))}()}}(en,U,gn,mn,an,vn),zn=D(n,r,Pn,An,In,Tn,P,X),Hn={ownerDocument:f,ownerWindow:p,eventHandler:P,containerRect:J,slideRects:K,animation:bn,axis:Z,dragHandler:v(Z,n,f,p,Dn,b(Z,p),wn,bn,An,In,Mn,xn,P,nn,N,R,q,.68,Q),eventStore:Tn,percentOfView:nn,index:xn,indexPrevious:yn,limit:hn,location:wn,offsetLocation:Ln,previousLocation:En,options:m,resizeHandler:S(e,P,p,r,Z,W,Y),scrollBody:In,scrollBounds:w(hn,Ln,Dn,In,nn),scrollLooper:E(fn,hn,Ln,[wn,Ln,En,Dn]),scrollProgress:Fn,scrollSnapList:gn.map(Fn.get),scrollSnaps:gn,scrollTarget:Mn,scrollTo:An,slideLooper:A(Z,_,fn,on,cn,dn,gn,Ln,r),slideFocus:zn,slidesHandler:F(e,P,$),slidesInView:On,slideIndexes:vn,slideRegistry:Pn,slidesToScroll:an,target:Dn,translate:M(Z,e)};return Hn}const z={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function H(n){function t(n,t){return p(n,t||{})}const e={mergeOptions:t,optionsAtMedia:function(e){const r=e.breakpoints||{},o=f(r).filter((t=>n.matchMedia(t).matches)).map((n=>r[n])).reduce(((n,e)=>t(n,e)),{});return t(e,o)},optionsMediaQueries:function(t){return t.map((n=>f(n.breakpoints||{}))).reduce(((n,t)=>n.concat(t)),[]).map(n.matchMedia)}};return e}function k(n,e,r){const o=n.ownerDocument,i=o.defaultView,c=H(i),u=function(n){let t=[];return{init:function(e,r){return t=r.filter((({options:t})=>!1!==n.optionsAtMedia(t).active)),t.forEach((t=>t.init(e,n))),r.reduce(((n,t)=>Object.assign(n,{[t.name]:t})),{})},destroy:function(){t=t.filter((n=>n.destroy()))}}}(c),s=g(),a=function(){let n,t={};function e(n){return t[n]||[]}const r={init:function(t){n=t},emit:function(t){return e(t).forEach((e=>e(n,t))),r},off:function(n,o){return t[n]=e(n).filter((n=>n!==o)),r},on:function(n,o){return t[n]=e(n).concat([o]),r},clear:function(){t={}}};return r}(),{mergeOptions:d,optionsAtMedia:l,optionsMediaQueries:f}=c,{on:p,off:m,emit:h}=a,x=A;let y,v,b,S,w=!1,E=d(z,k.globalOptions),L=d(E),D=[];function I(t){const e=P(n,b,S,o,i,t,a);if(t.loop&&!e.slideLooper.canLoop()){return I(Object.assign({},t,{loop:!1}))}return e}function M(e,r){w||(E=d(E,e),L=l(E),D=r||D,function(){const{container:e,slides:r}=L,o=t(e)?n.querySelector(e):e;b=o||n.children[0];const i=t(r)?b.querySelectorAll(r):r;S=[].slice.call(i||b.children)}(),y=I(L),f([E,...D.map((({options:n})=>n))]).forEach((n=>s.add(n,"change",A))),L.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(V),y.eventHandler.init(V),y.resizeHandler.init(V),y.slidesHandler.init(V),y.options.loop&&y.slideLooper.loop(),b.offsetParent&&S.length&&y.dragHandler.init(V),v=u.init(V,D)))}function A(n,t){const e=O();F(),M(d({startIndex:e},n),t),a.emit("reInit")}function F(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),u.destroy(),s.clear()}function T(n,t,e){L.active&&!w&&(y.scrollBody.useBaseFriction().useDuration(!0===t?0:L.duration),y.scrollTo.index(n,e||0))}function O(){return y.index.get()}const V={canScrollNext:function(){return y.index.add(1).get()!==O()},canScrollPrev:function(){return y.index.add(-1).get()!==O()},containerNode:function(){return b},internalEngine:function(){return y},destroy:function(){w||(w=!0,s.clear(),F(),a.emit("destroy"),a.clear())},off:m,on:p,emit:h,plugins:function(){return v},previousScrollSnap:function(){return y.indexPrevious.get()},reInit:x,rootNode:function(){return n},scrollNext:function(n){T(y.index.add(1).get(),n,-1)},scrollPrev:function(n){T(y.index.add(-1).get(),n,1)},scrollProgress:function(){return y.scrollProgress.get(y.offsetLocation.get())},scrollSnapList:function(){return y.scrollSnapList},scrollTo:T,selectedScrollSnap:O,slideNodes:function(){return S},slidesInView:function(){return y.slidesInView.get()},slidesNotInView:function(){return y.slidesInView.get(!1)}};return M(e,r),setTimeout((()=>a.emit("init")),0),V}return k.globalOptions=void 0,k}));
diff --git a/solution/site/scripts/mockup/vendor/index-C3fFNl3r.css b/solution/site/scripts/mockup/vendor/index-C3fFNl3r.css
new file mode 100644
index 0000000..7450f49
--- /dev/null
+++ b/solution/site/scripts/mockup/vendor/index-C3fFNl3r.css
@@ -0,0 +1 @@
+#w4d-mini{display:inline-flex;align-items:center;gap:2px;margin-right:6px;padding-right:8px;border-right:1px solid var(--tpl-border, #bcb49e)}#w4d-mini button{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;color:var(--tpl-text, #1b1a15);background:transparent;border:0;border-radius:var(--tpl-radius, 0);cursor:pointer;opacity:.75}#w4d-mini button:hover{opacity:1;background:#1b1a150f}#w4d-mini svg{width:16px;height:16px}#w4d-now{max-width:150px;overflow:hidden;font-size:11.5px;font-weight:700;white-space:nowrap;text-overflow:ellipsis;color:var(--tpl-accent, #bf2f1b);padding-right:2px}#w4d-mini[data-playing="0"] #w4d-now{opacity:.55;font-weight:400}@media(max-width:860px){#w4d-now{display:none}}#w4d-tape{display:inline-flex;align-items:center;padding:0 4px 0 2px;color:var(--tpl-text, #1b1a15);opacity:.8}#w4d-tape svg{width:20px;height:20px}#w4d-mini[data-playing="1"] #w4d-tape{color:var(--tpl-accent, #bf2f1b);opacity:1}#w4d-mini[data-playing="1"] .w4d-reel{transform-box:fill-box;transform-origin:center;animation:w4d-reel 2.6s linear infinite}@keyframes w4d-reel{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.w4d-reel{animation:none!important}}#w4d-mini button[data-playing="1"]{color:var(--tpl-accent, #bf2f1b);opacity:1}@media(max-width:400px){#w4d-mini{margin-right:2px;padding-right:4px}#w4d-mini button{width:27px;height:27px}}#w4d-panel{position:fixed;z-index:45;width:344px;max-width:calc(100vw - 16px);max-height:min(64vh,520px);display:flex;flex-direction:column;overflow:hidden;font-family:var(--tpl-font-body, serif);color:var(--tpl-text, #1b1a15);background:var(--tpl-card, #efe7d3);border:var(--tpl-border-width, 2px) solid var(--tpl-primary, #1b1a15);box-shadow:var(--tpl-shadow, 4px 4px 0 rgb(27 26 21 / .16))}#w4d-panel[hidden]{display:none}@media(max-width:640px){#w4d-panel{width:auto}}#w4d-panel .w4d-head{display:flex;align-items:center;gap:8px;flex:0 0 auto;padding:11px 8px 11px 14px;border-bottom:var(--tpl-border-width, 2px) solid var(--tpl-primary, #1b1a15)}.w4d-head-t{font-size:12px;font-weight:700;letter-spacing:.06em}.w4d-head-n{flex:1 1 auto;font-size:11px;opacity:.5}#w4d-panel .w4d-head button{display:inline-flex;width:28px;height:28px;flex:0 0 auto;align-items:center;justify-content:center;color:inherit;background:transparent;border:0;cursor:pointer;opacity:.6}#w4d-panel .w4d-head button:hover{opacity:1}#w4d-panel .w4d-head svg{width:14px;height:14px}#w4d-panel ol{flex:1 1 auto;margin:0;padding:4px 0;overflow-y:auto;list-style:none;-webkit-overflow-scrolling:touch}.w4d-item{display:flex;width:100%;min-height:52px;align-items:center;gap:11px;padding:8px 14px;color:inherit;background:transparent;border:0;font:inherit;text-align:left;cursor:pointer}.w4d-item+.w4d-item{border-top:1px dashed var(--tpl-border, #bcb49e)}.w4d-item:hover{background:#1b1a150d}.w4d-item[aria-current=true]{background:#1b1a150f}.w4d-item[aria-current=true] .w4d-t{color:var(--tpl-accent, #bf2f1b)}.w4d-mark{position:relative;flex:0 0 26px;height:26px}.w4d-disc-sm{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:radial-gradient(circle at 50% 50%,var(--w4d-lbl, #bf2f1b) 0 34%,transparent 34%),repeating-radial-gradient(circle at 50% 50%,rgb(255 255 255 / .12) 0 1px,transparent 1px 3px),#14110f}.w4d-disc-sm:after{content:"";position:absolute;top:45%;right:45%;bottom:45%;left:45%;border-radius:50%;background:var(--tpl-card, #efe7d3)}.w4d-eq{position:absolute;top:0;right:0;bottom:0;left:0;display:none;align-items:flex-end;justify-content:center;gap:3px;padding-bottom:4px}.w4d-eq i{width:3px;height:6px;background:var(--tpl-accent, #bf2f1b);animation:w4d-eq .9s ease-in-out infinite}.w4d-eq i:nth-child(2){animation-delay:.18s}.w4d-eq i:nth-child(3){animation-delay:.36s}@keyframes w4d-eq{0%,to{height:5px}50%{height:17px}}.w4d-item[data-playing="1"] .w4d-disc-sm{display:none}.w4d-item[data-playing="1"] .w4d-eq{display:flex}@media(prefers-reduced-motion:reduce){.w4d-eq i{animation:none;height:11px}}.w4d-info{min-width:0;flex:1 1 auto}.w4d-t{display:block;overflow:hidden;font-size:13.5px;font-weight:700;white-space:nowrap;text-overflow:ellipsis}.w4d-sub{display:block;margin-top:2px;overflow:hidden;font-size:11px;white-space:nowrap;text-overflow:ellipsis;opacity:.55}.w4d-time{flex:0 0 auto;font-size:11px;opacity:.6;font-variant-numeric:tabular-nums}#w4d-lyrics-box{padding:10px 12px 14px;border-top:1px dashed var(--tpl-border, #bcb49e);white-space:pre-line;font-size:12px;line-height:1.9;overflow-y:auto}#w4d-lyrics-box[hidden]{display:none}.w4-sky{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.w4-sky[data-mood=비]:before{content:"";position:absolute;top:-20%;right:-10%;bottom:-20%;left:-10%;background-image:repeating-linear-gradient(102deg,transparent 0 9px,currentcolor 9px 10px,transparent 10px 22px);opacity:.13;animation:w4-rain .9s linear infinite}@keyframes w4-rain{to{transform:translate3d(-22px,108px,0)}}.w4-sky[data-mood=맑음]:before{content:"";position:absolute;right:6%;top:-40%;width:26rem;aspect-ratio:1;background-image:conic-gradient(from 0deg,currentcolor 0 2deg,transparent 2deg 30deg);opacity:.07;animation:w4-spin 70s linear infinite}.w4-sky[data-mood=맑음]:after{content:"";position:absolute;right:10%;top:-14%;width:15rem;aspect-ratio:1;border-radius:50%;background-image:radial-gradient(circle,currentcolor 0%,transparent 62%);opacity:.11;animation:w4-breathe 9s ease-in-out infinite}@keyframes w4-spin{to{transform:rotate(360deg)}}@keyframes w4-breathe{50%{opacity:.2}}.w4-sky[data-mood=흐림]:before,.w4-sky[data-mood=흐림]:after{content:"";position:absolute;top:-30%;right:-60%;bottom:-30%;left:-60%;background-image:radial-gradient(ellipse 22% 46% at 18% 42%,currentcolor 0%,transparent 70%),radial-gradient(ellipse 30% 40% at 62% 30%,currentcolor 0%,transparent 72%);opacity:.08;animation:w4-drift 44s linear infinite}.w4-sky[data-mood=흐림]:after{opacity:.05;animation-duration:78s;animation-direction:reverse}@keyframes w4-drift{to{transform:translate3d(28%,0,0)}}.w4-sky[data-mood=눈]:before{content:"";position:absolute;top:-20%;right:0;bottom:-20%;left:0;background-image:radial-gradient(circle at 12% 10%,currentcolor 1.4px,transparent 1.8px),radial-gradient(circle at 47% 34%,currentcolor 1.1px,transparent 1.5px),radial-gradient(circle at 78% 18%,currentcolor 1.6px,transparent 2px);background-size:9rem 9rem;opacity:.22;animation:w4-snow 14s linear infinite}@keyframes w4-snow{to{transform:translate3d(-2rem,9rem,0)}}@media(prefers-reduced-motion:reduce){.w4-sky:before,.w4-sky:after{animation:none!important}}.w4-paper{background-image:repeating-linear-gradient(0deg,color-mix(in oklab,currentcolor 4%,transparent) 0 1px,transparent 1px 3px),repeating-linear-gradient(90deg,color-mix(in oklab,currentcolor 3%,transparent) 0 1px,transparent 1px 4px)}.w4-disc{background:radial-gradient(circle at 50% 50%,transparent 0 15.5%,var(--lbl) 15.5% 33%,transparent 33%),repeating-radial-gradient(circle at 50% 50%,color-mix(in oklab,var(--w4-vinyl) 88%,white) 0 1.4px,var(--w4-vinyl) 1.4px 3px),var(--w4-vinyl);box-shadow:inset 0 0 40px #0000008c}.w4-disc-sheen{background:conic-gradient(from 210deg,rgb(255 255 255 / 12%),transparent 22%,transparent 70%,rgb(255 255 255 / 7%))}.w4-spin{animation:w4-rev 2.2s linear infinite}@keyframes w4-rev{to{transform:rotate(360deg)}}.w4-disc-mini{background:radial-gradient(circle at 50% 50%,transparent 0 14%,var(--lbl) 14% 34%,transparent 34%),repeating-radial-gradient(circle at 50% 50%,color-mix(in oklab,var(--w4-vinyl) 88%,white) 0 1.2px,var(--w4-vinyl) 1.2px 2.6px),var(--w4-vinyl);box-shadow:0 3px 10px #00000059}.w4-perf{background:repeating-linear-gradient(90deg,transparent 0 8px,var(--tear) 8px 9px)}.w4-dash{border-top:1px dashed currentcolor}.w4-film-perf{background:repeating-linear-gradient(90deg,currentcolor 0 9px,transparent 9px 21px)}.w4-flip{perspective:900px}.w4-flip-inner{transform-style:preserve-3d;transition:transform .5s}.w4-flip-on .w4-flip-inner{transform:rotateY(180deg)}.w4-flip-face{backface-visibility:hidden}.w4-flip-back{transform:rotateY(180deg)}.w4-scroll{overflow-x:auto;scrollbar-width:none;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}.w4-scroll::-webkit-scrollbar{display:none}.w4-scroll[data-slider=on]{overflow-x:hidden;scroll-snap-type:none}.w4-scroll[data-dragging=true]{cursor:grabbing;-webkit-user-select:none;user-select:none}@media(prefers-reduced-motion:reduce){.w4-spin{animation:none}.w4-flip-inner{transition:none}}@media print{.w4-flip,.w4-flip-inner{height:auto!important;transform:none!important}.w4-flip-face{position:static!important;backface-visibility:visible!important;transform:none!important}}/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-divide-x-reverse:0}}}@layer theme{:root,:host{--font-sans:"Pretendard Variable", "Noto Sans KR", system-ui, sans-serif;--font-serif:"Noto Serif KR", "Batang", "Times New Roman", serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-zinc-950:oklch(14.1% .005 285.823);--color-stone-600:oklch(44.4% .011 73.639);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--leading-loose:2;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--blur-sm:8px;--blur-md:12px;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Pretendard Variable", "Noto Sans KR", system-ui, sans-serif;--default-mono-font-family:var(--font-mono);--color-brand:var(--tpl-primary);--color-surface:var(--tpl-bg);--color-surface-alt:var(--tpl-card);--color-ink:var(--tpl-text);--color-accent:var(--tpl-accent);--color-line:currentColor}@supports (color:color-mix(in lab,red,red)){:root,:host{--color-line:color-mix(in oklab, currentColor 14%, transparent)}}:root,:host{--color-muted:currentColor}@supports (color:color-mix(in lab,red,red)){:root,:host{--color-muted:color-mix(in oklab, currentColor 62%, transparent)}}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-2{inset:calc(var(--spacing) * 2)}.inset-x-0{inset-inline:0}.inset-y-\[3px\]{inset-block:3px}.-top-1{top:calc(var(--spacing) * -1)}.-top-2{top:calc(var(--spacing) * -2)}.top-0{top:0}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-14{top:calc(var(--spacing) * 14)}.top-\[calc\(100\%\+0\.5rem\)\]{top:calc(100% + .5rem)}.top-full{top:100%}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-0\.5{bottom:calc(var(--spacing) * .5)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-2\.5{bottom:calc(var(--spacing) * 2.5)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-5{bottom:calc(var(--spacing) * 5)}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.left-full{left:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.order-1{order:1}.order-2{order:2}.col-span-12{grid-column:span 12/span 12}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-3\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-14{margin-top:calc(var(--spacing) * 14)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-auto{margin-top:auto}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-7{margin-bottom:calc(var(--spacing) * 7)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.-ml-10{margin-left:calc(var(--spacing) * -10)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-6{margin-left:calc(var(--spacing) * 6)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-\[9\]{-webkit-line-clamp:9;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-3\/2{aspect-ratio:3/2}.aspect-3\/4{aspect-ratio:3/4}.aspect-4\/3{aspect-ratio:4/3}.aspect-16\/10{aspect-ratio:16/10}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-\[17px\]{width:17px;height:17px}.size-\[54px\]{width:54px;height:54px}.size-\[76px\]{width:76px;height:76px}.size-\[220px\]{width:220px;height:220px}.size-full{width:100%;height:100%}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-9{height:calc(var(--spacing) * 9)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-48{height:calc(var(--spacing) * 48)}.h-\[1em\]{height:1em}.h-\[6px\]{height:6px}.h-\[22px\]{height:22px}.h-\[56px\]{height:56px}.h-\[260px\]{height:260px}.h-\[calc\(100vh-3\.5rem\)\]{height:calc(100vh - 3.5rem)}.h-\[clamp\(15rem\,24vw\,21rem\)\]{height:clamp(15rem,24vw,21rem)}.h-\[clamp\(17rem\,27vw\,24rem\)\]{height:clamp(17rem,27vw,24rem)}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-\[26rem\]{max-height:26rem}.max-h-\[46vh\]{max-height:46vh}.max-h-\[72vh\]{max-height:72vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[88vh\]{max-height:88vh}.max-h-full{max-height:100%}.min-h-\[2rem\]{min-height:2rem}.min-h-\[16rem\]{min-height:16rem}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-\[3px\]{width:3px}.w-\[44px\]{width:44px}.w-\[62px\]{width:62px}.w-\[110px\]{width:110px}.w-\[168px\]{width:168px}.w-\[210px\]{width:210px}.w-\[228px\]{width:228px}.w-\[254px\]{width:254px}.w-\[262px\]{width:262px}.w-\[304px\]{width:304px}.w-\[320px\]{width:320px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[34rem\]{max-width:34rem}.max-w-\[72rem\]{max-width:72rem}.max-w-full{max-width:100%}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-\[22px\]{min-width:22px}.min-w-\[30rem\]{min-width:30rem}.min-w-\[34rem\]{min-width:34rem}.flex-1{flex:1}.flex-\[1\.4\]{flex:1.4}.shrink-0{flex-shrink:0}.grow-0{flex-grow:0}.basis-40{flex-basis:calc(var(--spacing) * 40)}.basis-\[76\%\]{flex-basis:76%}.basis-\[86\%\]{flex-basis:86%}.border-collapse{border-collapse:collapse}.origin-right{transform-origin:100%}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-px{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-6{rotate:-6deg}.rotate-6{rotate:6deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-center{scroll-snap-align:center}.snap-start{scroll-snap-align:start}.\[scrollbar-width\:none\]{scrollbar-width:none}.list-none{list-style-type:none}.columns-1{columns:1}.columns-2{columns:2}.break-inside-avoid{break-inside:avoid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-cols-\[46px_minmax\(0\,1fr\)\]{grid-template-columns:46px minmax(0,1fr)}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-14{gap:calc(var(--spacing) * 14)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 16) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 16) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-20>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 20) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 20) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-x-10{column-gap:calc(var(--spacing) * 10)}.gap-x-12{column-gap:calc(var(--spacing) * 12)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}.gap-y-5{row-gap:calc(var(--spacing) * 5)}.gap-y-6{row-gap:calc(var(--spacing) * 6)}.gap-y-14{row-gap:calc(var(--spacing) * 14)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-black\/5>:not(:last-child)){border-color:#0000000d}@supports (color:color-mix(in lab,red,red)){:where(.divide-black\/5>:not(:last-child)){border-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}:where(.divide-line>:not(:last-child)){border-color:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.divide-line>:not(:last-child)){border-color:color-mix(in oklab,currentColor 14%,transparent)}}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-2xl{border-radius:calc(var(--tpl-radius,.75rem) * 1.7)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--tpl-radius,.75rem)}.rounded-md{border-radius:calc(var(--tpl-radius,.75rem) * .7)}.rounded-sm{border-radius:calc(var(--tpl-radius,.75rem) * .4)}.rounded-xl{border-radius:calc(var(--tpl-radius,.75rem) * 1.35)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-black\/8{border-color:#00000014}@supports (color:color-mix(in lab,red,red)){.border-black\/8{border-color:color-mix(in oklab,var(--color-black) 8%,transparent)}}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.border-black\/10{border-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.border-current\/15{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/15{border-color:color-mix(in oklab,currentcolor 15%,transparent)}}.border-current\/20{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/20{border-color:color-mix(in oklab,currentcolor 20%,transparent)}}.border-current\/25{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/25{border-color:color-mix(in oklab,currentcolor 25%,transparent)}}.border-current\/60{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/60{border-color:color-mix(in oklab,currentcolor 60%,transparent)}}.border-current\/70{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-current\/70{border-color:color-mix(in oklab,currentcolor 70%,transparent)}}.border-line{border-color:currentColor}@supports (color:color-mix(in lab,red,red)){.border-line{border-color:color-mix(in oklab,currentColor 14%,transparent)}}.border-transparent{border-color:#0000}.bg-\[\#03C75A\]{background-color:#03c75a}.bg-\[\#0064FF\]{background-color:#0064ff}.bg-\[\#FEE500\]{background-color:#fee500}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-black\/55{background-color:#0000008c}@supports (color:color-mix(in lab,red,red)){.bg-black\/55{background-color:color-mix(in oklab,var(--color-black) 55%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/92{background-color:#000000eb}@supports (color:color-mix(in lab,red,red)){.bg-black\/92{background-color:color-mix(in oklab,var(--color-black) 92%,transparent)}}.bg-current,.bg-current\/5{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){.bg-current\/5{background-color:color-mix(in oklab,currentcolor 5%,transparent)}}.bg-current\/8{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){.bg-current\/8{background-color:color-mix(in oklab,currentcolor 8%,transparent)}}.bg-current\/15{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){.bg-current\/15{background-color:color-mix(in oklab,currentcolor 15%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.bg-white\/70{background-color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.bg-zinc-950{background-color:var(--color-zinc-950)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:0}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-9{padding-inline:calc(var(--spacing) * 9)}.px-\[7\%\]{padding-inline:7%}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-3\.5{padding-top:calc(var(--spacing) * 3.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-7{padding-top:calc(var(--spacing) * 7)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pt-20{padding-top:calc(var(--spacing) * 20)}.pt-24{padding-top:calc(var(--spacing) * 24)}.pt-\[var\(--oasi-gap\)\]{padding-top:var(--oasi-gap)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pb-28{padding-bottom:calc(var(--spacing) * 28)}.pb-56{padding-bottom:calc(var(--spacing) * 56)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-\[calc\(3px\+0\.625rem\)\]{padding-left:calc(3px + .625rem)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-serif{font-family:Noto Serif KR,Batang,Times New Roman,serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[17px\]{font-size:17px}.text-\[length\:var\(--fs-body\)\]{font-size:var(--fs-body)}.text-\[length\:var\(--fs-h2\)\]{font-size:var(--fs-h2)}.text-\[length\:var\(--fs-h3\)\]{font-size:var(--fs-h3)}.text-\[length\:var\(--fs-lead\)\]{font-size:var(--fs-lead)}.text-\[length\:var\(--fs-sm\)\]{font-size:var(--fs-sm)}.text-\[length\:var\(--fs-xs\)\]{font-size:var(--fs-xs)}.leading-\[1\.8\]{--tw-leading:1.8;line-height:1.8}.leading-\[1\.9\]{--tw-leading:1.9;line-height:1.9}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[0\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.break-keep{word-break:keep-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.\!text-current{color:currentColor!important}.text-\[\#191600\]{color:#191600}.text-current\/55{color:currentColor}@supports (color:color-mix(in lab,red,red)){.text-current\/55{color:color-mix(in oklab,currentcolor 55%,transparent)}}.text-muted{color:currentColor}@supports (color:color-mix(in lab,red,red)){.text-muted{color:color-mix(in oklab,currentColor 62%,transparent)}}.text-stone-600{color:var(--color-stone-600)}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.decoration-black\/20{text-decoration-color:#0003}@supports (color:color-mix(in lab,red,red)){.decoration-black\/20{-webkit-text-decoration-color:color-mix(in oklab,var(--color-black) 20%,transparent);text-decoration-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.underline-offset-\[5px\]{text-underline-offset:5px}.underline-offset-\[6px\]{text-underline-offset:6px}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-45:is(:where(.group):is([open],:popover-open,:open) *){rotate:45deg}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}@media(hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.marker\:content-none ::marker{--tw-content:none;content:none}.marker\:content-none::marker{--tw-content:none;content:none}.marker\:content-none ::-webkit-details-marker{--tw-content:none;content:none}.marker\:content-none::-webkit-details-marker{--tw-content:none;content:none}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-current:hover{border-color:currentColor}.hover\:bg-black\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/5:hover{background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.hover\:bg-black\/65:hover{background-color:#000000a6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/65:hover{background-color:color-mix(in oklab,var(--color-black) 65%,transparent)}}.hover\:bg-black\/75:hover{background-color:#000000bf}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/75:hover{background-color:color-mix(in oklab,var(--color-black) 75%,transparent)}}.hover\:bg-current\/10:hover{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){.hover\:bg-current\/10:hover{background-color:color-mix(in oklab,currentcolor 10%,transparent)}}.hover\:bg-current\/25:hover{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){.hover\:bg-current\/25:hover{background-color:color-mix(in oklab,currentcolor 25%,transparent)}}.hover\:bg-white\/25:hover{background-color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/25:hover{background-color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.hover\:text-current:hover{color:currentColor}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-45:hover{opacity:.45}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-85:hover{opacity:.85}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-0:disabled{opacity:0}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}@media(prefers-reduced-motion:no-preference){.motion-safe\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}@media(min-width:40rem){.sm\:top-5{top:calc(var(--spacing) * 5)}.sm\:right-5{right:calc(var(--spacing) * 5)}.sm\:right-6{right:calc(var(--spacing) * 6)}.sm\:left-6{left:calc(var(--spacing) * 6)}.sm\:mb-8{margin-bottom:calc(var(--spacing) * 8)}.sm\:mb-10{margin-bottom:calc(var(--spacing) * 10)}.sm\:mb-14{margin-bottom:calc(var(--spacing) * 14)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-flex{display:inline-flex}.sm\:aspect-video{aspect-ratio:var(--aspect-video)}.sm\:w-28{width:calc(var(--spacing) * 28)}.sm\:w-40{width:calc(var(--spacing) * 40)}.sm\:max-w-\[18rem\]{max-width:18rem}.sm\:max-w-\[60\%\]{max-width:60%}.sm\:shrink-0{flex-shrink:0}.sm\:basis-1\/3{flex-basis:33.3333%}.sm\:basis-\[56\%\]{flex-basis:56%}.sm\:columns-2{columns:2}.sm\:columns-3{columns:3}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-baseline{align-items:baseline}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:calc(var(--spacing) * 4)}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:gap-8{gap:calc(var(--spacing) * 8)}.sm\:gap-10{gap:calc(var(--spacing) * 10)}:where(.sm\:space-y-24>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 24) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 24) * calc(1 - var(--tw-space-y-reverse)))}:where(.sm\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.sm\:divide-y-0>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(0px * var(--tw-divide-y-reverse));border-bottom-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)))}.sm\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:px-10{padding-inline:calc(var(--spacing) * 10)}.sm\:py-14{padding-block:calc(var(--spacing) * 14)}.sm\:py-24{padding-block:calc(var(--spacing) * 24)}.sm\:pb-12{padding-bottom:calc(var(--spacing) * 12)}.sm\:pl-14{padding-left:calc(var(--spacing) * 14)}.sm\:text-right{text-align:right}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.sm\:first\:pl-0:first-child{padding-left:0}}@media(min-width:48rem){.md\:col-span-3{grid-column:span 3/span 3}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-7{grid-column:span 7/span 7}.md\:table-cell{display:table-cell}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.md\:gap-12{gap:calc(var(--spacing) * 12)}.md\:pb-14{padding-bottom:calc(var(--spacing) * 14)}.md\:pb-16{padding-bottom:calc(var(--spacing) * 16)}}@media(min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-0{top:0}.lg\:top-12{top:calc(var(--spacing) * 12)}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:order-none{order:0}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-12{grid-column:span 12/span 12}.lg\:mt-6{margin-top:calc(var(--spacing) * 6)}.lg\:mt-24{margin-top:calc(var(--spacing) * 24)}.lg\:mt-auto{margin-top:auto}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:aspect-3\/2{aspect-ratio:3/2}.lg\:aspect-auto{aspect-ratio:auto}.lg\:h-fit{height:fit-content}.lg\:h-full{height:100%}.lg\:h-screen{height:100vh}.lg\:min-h-\[24rem\]{min-height:24rem}.lg\:min-h-\[34rem\]{min-height:34rem}.lg\:w-\[18\.75rem\]{width:18.75rem}.lg\:w-\[260px\]{width:260px}.lg\:w-auto{width:auto}.lg\:shrink-0{flex-shrink:0}.lg\:basis-1\/4{flex-basis:25%}.lg\:basis-auto{flex-basis:auto}.lg\:snap-none{scroll-snap-type:none}.lg\:columns-4{columns:4}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.lg\:flex-col{flex-direction:column}.lg\:flex-row{flex-direction:row}.lg\:items-end{align-items:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-0{gap:0}.lg\:gap-3{gap:calc(var(--spacing) * 3)}.lg\:gap-4{gap:calc(var(--spacing) * 4)}.lg\:gap-6{gap:calc(var(--spacing) * 6)}.lg\:gap-7{gap:calc(var(--spacing) * 7)}.lg\:gap-8{gap:calc(var(--spacing) * 8)}.lg\:gap-10{gap:calc(var(--spacing) * 10)}.lg\:gap-12{gap:calc(var(--spacing) * 12)}.lg\:gap-14{gap:calc(var(--spacing) * 14)}.lg\:gap-20{gap:calc(var(--spacing) * 20)}:where(.lg\:space-y-28>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 28) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 28) * calc(1 - var(--tw-space-y-reverse)))}.lg\:gap-x-12{column-gap:calc(var(--spacing) * 12)}.lg\:overflow-visible{overflow:visible}.lg\:overflow-y-auto{overflow-y:auto}.lg\:px-7{padding-inline:calc(var(--spacing) * 7)}.lg\:px-10{padding-inline:calc(var(--spacing) * 10)}.lg\:px-14{padding-inline:calc(var(--spacing) * 14)}.lg\:py-10{padding-block:calc(var(--spacing) * 10)}.lg\:py-16{padding-block:calc(var(--spacing) * 16)}.lg\:pt-14{padding-top:calc(var(--spacing) * 14)}.lg\:pt-16{padding-top:calc(var(--spacing) * 16)}.lg\:pb-0{padding-bottom:0}.lg\:pb-14{padding-bottom:calc(var(--spacing) * 14)}.lg\:pb-24{padding-bottom:calc(var(--spacing) * 24)}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@media(min-width:80rem){.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-5{grid-column:span 5/span 5}.xl\:col-span-7{grid-column:span 7/span 7}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-start-1{grid-column-start:1}.xl\:col-start-5{grid-column-start:5}.xl\:row-start-1{grid-row-start:1}.xl\:-mt-24{margin-top:calc(var(--spacing) * -24)}.xl\:mr-16{margin-right:calc(var(--spacing) * 16)}.xl\:mb-12{margin-bottom:calc(var(--spacing) * 12)}.xl\:-ml-10{margin-left:calc(var(--spacing) * -10)}.xl\:ml-auto{margin-left:auto}.xl\:block{display:block}.xl\:w-\[50\%\]{width:50%}.xl\:w-\[64\%\]{width:64%}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:gap-x-10{column-gap:calc(var(--spacing) * 10)}.xl\:self-end{align-self:flex-end}.xl\:px-8{padding-inline:calc(var(--spacing) * 8)}.xl\:py-8{padding-block:calc(var(--spacing) * 8)}.xl\:py-12{padding-block:calc(var(--spacing) * 12)}.xl\:py-16{padding-block:calc(var(--spacing) * 16)}.xl\:pt-12{padding-top:calc(var(--spacing) * 12)}.xl\:pr-8{padding-right:calc(var(--spacing) * 8)}.xl\:pr-16{padding-right:calc(var(--spacing) * 16)}.xl\:pb-56{padding-bottom:calc(var(--spacing) * 56)}.xl\:pl-10{padding-left:calc(var(--spacing) * 10)}.xl\:pl-20{padding-left:calc(var(--spacing) * 20)}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[\&\>li\]\:mb-3>li{margin-bottom:calc(var(--spacing) * 3)}}@font-face{font-family:Pretendard Variable;font-weight:45 920;font-style:normal;font-display:swap;src:url(/fonts/PretendardVariable.woff2)format("woff2")}html{-webkit-text-size-adjust:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;word-break:keep-all;overflow-wrap:break-word;margin:0;padding:0}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}html{scrollbar-width:thin}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:where(.site,.site-canvas){--fs-display:clamp(1.75rem, 1.25rem + 2.2vw, 3rem);--fs-h2:clamp(1.3125rem, 1.15rem + .7vw, 1.75rem);--fs-h3:clamp(1.0625rem, 1rem + .3vw, 1.25rem);--fs-lead:clamp(.9375rem, .9rem + .22vw, 1.0625rem);--fs-body:clamp(.9375rem, .91rem + .15vw, 1rem);--fs-sm:clamp(.8125rem, .8rem + .1vw, .875rem);--fs-xs:clamp(.75rem, .74rem + .06vw, .78125rem);--section-space:clamp(2.25rem, 5vw, var(--tpl-section-space,3.5rem));--site-line:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.site,.site-canvas){--site-line:color-mix(in oklab, currentColor 14%, transparent)}}:where(.site,.site-canvas){--site-line-soft:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.site,.site-canvas){--site-line-soft:color-mix(in oklab, currentColor 8%, transparent)}}:where(.site,.site-canvas){--site-muted:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.site,.site-canvas){--site-muted:color-mix(in oklab, currentColor 62%, transparent)}}:where(.site,.site-canvas) .serif{font-family:var(--tpl-font-heading,var(--font-serif));letter-spacing:var(--tpl-heading-tracking,normal)}:where(.site,.site-canvas) :is(.serif,.h2,.h3){font-synthesis-weight:none}:where(.site,.site-canvas) .tpl-border{border-width:var(--tpl-border-width,1px)}:where(.site,.site-canvas) .tpl-shadow{box-shadow:var(--tpl-shadow,none)}:where(.site,.site-canvas) .shell{width:100%;max-width:78rem;margin-inline:auto;padding-inline:clamp(1rem,4vw,2.5rem)}:where(.site,.site-canvas) .line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:where(.site,.site-canvas) .measure{max-width:68ch}:where(.site,.site-canvas) .paper{background-image:var(--tpl-texture,none)}:where(.site,.site-canvas) .panel{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.site,.site-canvas) .panel{background-color:color-mix(in oklab,currentColor 5%,transparent)}}:where(.site,.site-canvas) .panel{border:var(--tpl-border-width,1px) solid var(--site-line);border-radius:var(--tpl-radius,.75rem);box-shadow:var(--tpl-shadow,none)}:where(.site,.site-canvas) .panel-sunken{background-color:currentColor}@supports (color:color-mix(in lab,red,red)){:where(.site,.site-canvas) .panel-sunken{background-color:color-mix(in oklab,currentColor 6%,transparent)}}:where(.site,.site-canvas) .h2{font-family:var(--tpl-font-heading,var(--font-serif));font-size:var(--fs-h2);font-weight:var(--tpl-heading-weight,700);letter-spacing:var(--tpl-heading-tracking,-.01em);line-height:1.2}:where(.site,.site-canvas) .h3{font-family:var(--tpl-font-heading,var(--font-serif));font-size:var(--fs-h3);font-weight:var(--tpl-heading-weight,700);letter-spacing:var(--tpl-heading-tracking,-.005em);line-height:1.35}:where(.site,.site-canvas) .label{font-size:var(--fs-xs);color:var(--site-muted);font-weight:600}:where(.site,.site-canvas) .tap{min-width:2.75rem;min-height:2.75rem}:where(.site,.site-canvas) .only-touch{display:none}@media(hover:none)and (pointer:coarse){:where(.site,.site-canvas) .only-touch{display:flex}}:where(.site,.site-canvas) .safe-b{padding-bottom:calc(.5rem + env(safe-area-inset-bottom))}:where(.site,.site-canvas) .slider-viewport{scrollbar-width:none;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;overflow-x:auto}:where(.site,.site-canvas) .slider-viewport::-webkit-scrollbar{display:none}:where(.site,.site-canvas) .slider-viewport[data-slider=on]{scroll-snap-type:none;overflow-x:hidden}:where(.site,.site-canvas) .slider-track{display:flex}:where(.site,.site-canvas) .slider-track>*{scroll-snap-align:start}:where(.site,.site-canvas) .slider-viewport[data-dragging=true]{cursor:grabbing;-webkit-user-select:none;user-select:none}:where(.site,.site-canvas) .text-muted{color:var(--site-muted)}:where(.site,.site-canvas) .border-line,:where(.site,.site-canvas) .divide-line>:not(:last-child){border-color:var(--site-line)}:root{--tpl-primary:#18181b;--tpl-secondary:#52525b;--tpl-bg:#fff;--tpl-card:#fafafa;--tpl-text:#09090b;--tpl-accent:#2563eb;--tpl-surface:#fff;--tpl-surface-alt:#f5f5f4;--tpl-inverse:#1c1917;--tpl-border:#e7e5e4;--tpl-font-heading:"Pretendard Variable", "Noto Sans KR", system-ui, sans-serif;--tpl-font-body:"Pretendard Variable", "Noto Sans KR", system-ui, sans-serif;--tpl-radius:.75rem;--tpl-border-width:1px;--tpl-shadow:0 1px 2px #0000000f;--tpl-heading-tracking:-.02em;--tpl-heading-weight:700;--tpl-section-space:4rem}html{scroll-behavior:smooth;scroll-padding-top:5.5rem}body{background-color:var(--color-surface);background-image:var(--tpl-texture,none);color:var(--color-ink);font-family:var(--tpl-font-body,var(--font-sans));font-size:var(--fs-body);font-feature-settings:"tnum" 1;padding-bottom:env(safe-area-inset-bottom);line-height:1.7}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}
diff --git a/solution/site/scripts/mockup/vendor/index-DDxwteyn.js b/solution/site/scripts/mockup/vendor/index-DDxwteyn.js
new file mode 100644
index 0000000..37be998
--- /dev/null
+++ b/solution/site/scripts/mockup/vendor/index-DDxwteyn.js
@@ -0,0 +1,340 @@
+(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const f of document.querySelectorAll('link[rel="modulepreload"]'))u(f);new MutationObserver(f=>{for(const d of f)if(d.type==="childList")for(const h of d.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&u(h)}).observe(document,{childList:!0,subtree:!0});function o(f){const d={};return f.integrity&&(d.integrity=f.integrity),f.referrerPolicy&&(d.referrerPolicy=f.referrerPolicy),f.crossOrigin==="use-credentials"?d.credentials="include":f.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function u(f){if(f.ep)return;f.ep=!0;const d=o(f);fetch(f.href,d)}})();const Pg="modulepreload",eb=function(i){return"/"+i},xh={},tb=function(c,o,u){let f=Promise.resolve();if(o&&o.length>0){let h=function(x){return Promise.all(x.map(v=>Promise.resolve(v).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const p=document.querySelector("meta[property=csp-nonce]"),g=(p==null?void 0:p.nonce)||(p==null?void 0:p.getAttribute("nonce"));f=h(o.map(x=>{if(x=eb(x),x in xh)return;xh[x]=!0;const v=x.endsWith(".css"),y=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${y}`))return;const z=document.createElement("link");if(z.rel=v?"stylesheet":Pg,v||(z.as="script"),z.crossOrigin="",z.href=x,g&&z.setAttribute("nonce",g),document.head.appendChild(z),v)return new Promise((w,N)=>{z.addEventListener("load",w),z.addEventListener("error",()=>N(new Error(`Unable to preload CSS for ${x}`)))})}))}function d(h){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=h,window.dispatchEvent(p),!p.defaultPrevented)throw h}return f.then(h=>{for(const p of h||[])p.status==="rejected"&&d(p.reason);return c().catch(d)})};var Mo={exports:{}},zs={};/**
+ * @license React
+ * react-jsx-runtime.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var gh;function lb(){if(gh)return zs;gh=1;var i=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function o(u,f,d){var h=null;if(d!==void 0&&(h=""+d),f.key!==void 0&&(h=""+f.key),"key"in f){d={};for(var p in f)p!=="key"&&(d[p]=f[p])}else d=f;return f=d.ref,{$$typeof:i,type:u,key:h,ref:f!==void 0?f:null,props:d}}return zs.Fragment=c,zs.jsx=o,zs.jsxs=o,zs}var bh;function ab(){return bh||(bh=1,Mo.exports=lb()),Mo.exports}var n=ab(),ko={exports:{}},ue={};/**
+ * @license React
+ * react.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var vh;function nb(){if(vh)return ue;vh=1;var i=Symbol.for("react.transitional.element"),c=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),f=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),h=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),g=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),z=Symbol.iterator;function w(S){return S===null||typeof S!="object"?null:(S=z&&S[z]||S["@@iterator"],typeof S=="function"?S:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},T=Object.assign,D={};function U(S,L,V){this.props=S,this.context=L,this.refs=D,this.updater=V||N}U.prototype.isReactComponent={},U.prototype.setState=function(S,L){if(typeof S!="object"&&typeof S!="function"&&S!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,S,L,"setState")},U.prototype.forceUpdate=function(S){this.updater.enqueueForceUpdate(this,S,"forceUpdate")};function X(){}X.prototype=U.prototype;function Z(S,L,V){this.props=S,this.context=L,this.refs=D,this.updater=V||N}var P=Z.prototype=new X;P.constructor=Z,T(P,U.prototype),P.isPureReactComponent=!0;var $=Array.isArray;function K(){}var G={H:null,A:null,T:null,S:null},ee=Object.prototype.hasOwnProperty;function se(S,L,V){var J=V.ref;return{$$typeof:i,type:S,key:L,ref:J!==void 0?J:null,props:V}}function Q(S,L){return se(S.type,L,S.props)}function ae(S){return typeof S=="object"&&S!==null&&S.$$typeof===i}function ye(S){var L={"=":"=0",":":"=2"};return"$"+S.replace(/[=:]/g,function(V){return L[V]})}var Ge=/\/+/g;function Qe(S,L){return typeof S=="object"&&S!==null&&S.key!=null?ye(""+S.key):L.toString(36)}function ce(S){switch(S.status){case"fulfilled":return S.value;case"rejected":throw S.reason;default:switch(typeof S.status=="string"?S.then(K,K):(S.status="pending",S.then(function(L){S.status==="pending"&&(S.status="fulfilled",S.value=L)},function(L){S.status==="pending"&&(S.status="rejected",S.reason=L)})),S.status){case"fulfilled":return S.value;case"rejected":throw S.reason}}throw S}function k(S,L,V,J,re){var fe=typeof S;(fe==="undefined"||fe==="boolean")&&(S=null);var oe=!1;if(S===null)oe=!0;else switch(fe){case"bigint":case"string":case"number":oe=!0;break;case"object":switch(S.$$typeof){case i:case c:oe=!0;break;case v:return oe=S._init,k(oe(S._payload),L,V,J,re)}}if(oe)return re=re(S),oe=J===""?"."+Qe(S,0):J,$(re)?(V="",oe!=null&&(V=oe.replace(Ge,"$&/")+"/"),k(re,L,V,"",function(at){return at})):re!=null&&(ae(re)&&(re=Q(re,V+(re.key==null||S&&S.key===re.key?"":(""+re.key).replace(Ge,"$&/")+"/")+oe)),L.push(re)),1;oe=0;var ze=J===""?".":J+":";if($(S))for(var Ee=0;Ee>>1,je=k[he];if(0>>1;hef(V,te))Jf(re,V)?(k[he]=re,k[J]=te,he=J):(k[he]=V,k[L]=te,he=L);else if(Jf(re,te))k[he]=re,k[J]=te,he=J;else break e}}return Y}function f(k,Y){var te=k.sortIndex-Y.sortIndex;return te!==0?te:k.id-Y.id}if(i.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;i.unstable_now=function(){return d.now()}}else{var h=Date,p=h.now();i.unstable_now=function(){return h.now()-p}}var g=[],x=[],v=1,y=null,z=3,w=!1,N=!1,T=!1,D=!1,U=typeof setTimeout=="function"?setTimeout:null,X=typeof clearTimeout=="function"?clearTimeout:null,Z=typeof setImmediate<"u"?setImmediate:null;function P(k){for(var Y=o(x);Y!==null;){if(Y.callback===null)u(x);else if(Y.startTime<=k)u(x),Y.sortIndex=Y.expirationTime,c(g,Y);else break;Y=o(x)}}function $(k){if(T=!1,P(k),!N)if(o(g)!==null)N=!0,K||(K=!0,ye());else{var Y=o(x);Y!==null&&ce($,Y.startTime-k)}}var K=!1,G=-1,ee=5,se=-1;function Q(){return D?!0:!(i.unstable_now()-sek&&Q());){var he=y.callback;if(typeof he=="function"){y.callback=null,z=y.priorityLevel;var je=he(y.expirationTime<=k);if(k=i.unstable_now(),typeof je=="function"){y.callback=je,P(k),Y=!0;break t}y===o(g)&&u(g),P(k)}else u(g);y=o(g)}if(y!==null)Y=!0;else{var S=o(x);S!==null&&ce($,S.startTime-k),Y=!1}}break e}finally{y=null,z=te,w=!1}Y=void 0}}finally{Y?ye():K=!1}}}var ye;if(typeof Z=="function")ye=function(){Z(ae)};else if(typeof MessageChannel<"u"){var Ge=new MessageChannel,Qe=Ge.port2;Ge.port1.onmessage=ae,ye=function(){Qe.postMessage(null)}}else ye=function(){U(ae,0)};function ce(k,Y){G=U(function(){k(i.unstable_now())},Y)}i.unstable_IdlePriority=5,i.unstable_ImmediatePriority=1,i.unstable_LowPriority=4,i.unstable_NormalPriority=3,i.unstable_Profiling=null,i.unstable_UserBlockingPriority=2,i.unstable_cancelCallback=function(k){k.callback=null},i.unstable_forceFrameRate=function(k){0>k||125he?(k.sortIndex=te,c(x,k),o(g)===null&&k===o(x)&&(T?(X(G),G=-1):T=!0,ce($,te-he))):(k.sortIndex=je,c(g,k),N||w||(N=!0,K||(K=!0,ye()))),k},i.unstable_shouldYield=Q,i.unstable_wrapCallback=function(k){var Y=z;return function(){var te=z;z=Y;try{return k.apply(this,arguments)}finally{z=te}}}})(Ro)),Ro}var Nh;function ib(){return Nh||(Nh=1,Do.exports=sb()),Do.exports}var Uo={exports:{}},mt={};/**
+ * @license React
+ * react-dom.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var Sh;function cb(){if(Sh)return mt;Sh=1;var i=Fo();function c(g){var x="https://react.dev/errors/"+g;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(c){console.error(c)}}return i(),Uo.exports=cb(),Uo.exports}/**
+ * @license React
+ * react-dom-client.production.js
+ *
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var Eh;function ob(){if(Eh)return Es;Eh=1;var i=ib(),c=Fo(),o=rb();function u(e){var t="https://react.dev/errors/"+e;if(1je||(e.current=he[je],he[je]=null,je--)}function V(e,t){je++,he[je]=e.current,e.current=t}var J=S(null),re=S(null),fe=S(null),oe=S(null);function ze(e,t){switch(V(fe,t),V(re,e),V(J,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Bm(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Bm(t),e=qm(t,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}L(J),V(J,e)}function Ee(){L(J),L(re),L(fe)}function at(e){e.memoizedState!==null&&V(oe,e);var t=J.current,l=qm(t,e.type);t!==l&&(V(re,e),V(J,l))}function Me(e){re.current===e&&(L(J),L(re)),oe.current===e&&(L(oe),ys._currentValue=te)}var I,_e;function ke(e){if(I===void 0)try{throw Error()}catch(l){var t=l.stack.trim().match(/\n( *(at )?)/);I=t&&t[1]||"",_e=-1)":-1s||j[a]!==C[s]){var R=`
+`+j[a].replace(" at new "," at ");return e.displayName&&R.includes("")&&(R=R.replace("",e.displayName)),R}while(1<=a&&0<=s);break}}}finally{tt=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?ke(l):""}function Jt(e,t){switch(e.tag){case 26:case 27:case 5:return ke(e.type);case 16:return ke("Lazy");case 13:return e.child!==t&&t!==null?ke("Suspense Fallback"):ke("Suspense");case 19:return ke("SuspenseList");case 0:case 15:return yt(e.type,!1);case 11:return yt(e.type.render,!1);case 1:return yt(e.type,!0);case 31:return ke("Activity");default:return""}}function ll(e){try{var t="",l=null;do t+=Jt(e,l),l=e,e=e.return;while(e);return t}catch(a){return`
+Error generating stack: `+a.message+`
+`+a.stack}}var Ht=Object.prototype.hasOwnProperty,Wt=i.unstable_scheduleCallback,hl=i.unstable_cancelCallback,Tn=i.unstable_shouldYield,An=i.unstable_requestPaint,dt=i.unstable_now,$s=i.unstable_getCurrentPriorityLevel,Qs=i.unstable_ImmediatePriority,Cn=i.unstable_UserBlockingPriority,Da=i.unstable_NormalPriority,Mn=i.unstable_LowPriority,pl=i.unstable_IdlePriority,kn=i.log,On=i.unstable_setDisableYieldValue,al=null,pt=null;function nl(e){if(typeof kn=="function"&&On(e),pt&&typeof pt.setStrictMode=="function")try{pt.setStrictMode(al,e)}catch{}}var xt=Math.clz32?Math.clz32:Xs,xc=Math.log,gc=Math.LN2;function Xs(e){return e>>>=0,e===0?32:31-(xc(e)/gc|0)|0}var Ra=256,da=262144,ma=4194304;function sl(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function Ua(e,t,l){var a=e.pendingLanes;if(a===0)return 0;var s=0,r=e.suspendedLanes,m=e.pingedLanes;e=e.warmLanes;var b=a&134217727;return b!==0?(a=b&~r,a!==0?s=sl(a):(m&=b,m!==0?s=sl(m):l||(l=b&~e,l!==0&&(s=sl(l))))):(b=a&~r,b!==0?s=sl(b):m!==0?s=sl(m):l||(l=a&~e,l!==0&&(s=sl(l)))),s===0?0:t!==0&&t!==s&&(t&r)===0&&(r=s&-s,l=t&-t,r>=l||r===32&&(l&4194048)!==0)?t:s}function Ul(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Vs(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Zs(){var e=ma;return ma<<=1,(ma&62914560)===0&&(ma=4194304),e}function bc(e){for(var t=[],l=0;31>l;l++)t.push(e);return t}function Dn(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Yp(e,t,l,a,s,r){var m=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var b=e.entanglements,j=e.expirationTimes,C=e.hiddenUpdates;for(l=m&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Zp=/[\n"\\]/g;function Bt(e){return e.replace(Zp,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function zc(e,t,l,a,s,r,m,b){e.name="",m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"?e.type=m:e.removeAttribute("type"),t!=null?m==="number"?(t===0&&e.value===""||e.value!=t)&&(e.value=""+Lt(t)):e.value!==""+Lt(t)&&(e.value=""+Lt(t)):m!=="submit"&&m!=="reset"||e.removeAttribute("value"),t!=null?Ec(e,m,Lt(t)):l!=null?Ec(e,m,Lt(l)):a!=null&&e.removeAttribute("value"),s==null&&r!=null&&(e.defaultChecked=!!r),s!=null&&(e.checked=s&&typeof s!="function"&&typeof s!="symbol"),b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"?e.name=""+Lt(b):e.removeAttribute("name")}function ku(e,t,l,a,s,r,m,b){if(r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"&&(e.type=r),t!=null||l!=null){if(!(r!=="submit"&&r!=="reset"||t!=null)){Sc(e);return}l=l!=null?""+Lt(l):"",t=t!=null?""+Lt(t):l,b||t===e.value||(e.value=t),e.defaultValue=t}a=a??s,a=typeof a!="function"&&typeof a!="symbol"&&!!a,e.checked=b?e.checked:!!a,e.defaultChecked=!!a,m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"&&(e.name=m),Sc(e)}function Ec(e,t,l){t==="number"&&Ws(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function Ga(e,t,l,a){if(e=e.options,t){t={};for(var s=0;s"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Cc=!1;if(bl)try{var Ln={};Object.defineProperty(Ln,"passive",{get:function(){Cc=!0}}),window.addEventListener("test",Ln,Ln),window.removeEventListener("test",Ln,Ln)}catch{Cc=!1}var Ll=null,Mc=null,Is=null;function Bu(){if(Is)return Is;var e,t=Mc,l=t.length,a,s="value"in Ll?Ll.value:Ll.textContent,r=s.length;for(e=0;e=Yn),Xu=" ",Vu=!1;function Zu(e,t){switch(e){case"keyup":return jx.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ku(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Va=!1;function Sx(e,t){switch(e){case"compositionend":return Ku(t);case"keypress":return t.which!==32?null:(Vu=!0,Xu);case"textInput":return e=t.data,e===Xu&&Vu?null:e;default:return null}}function zx(e,t){if(Va)return e==="compositionend"||!Uc&&Zu(e,t)?(e=Bu(),Is=Mc=Ll=null,Va=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:l,offset:t-e};e=a}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=lf(l)}}function nf(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?nf(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function sf(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ws(e.document);t instanceof e.HTMLIFrameElement;){try{var l=typeof t.contentWindow.location.href=="string"}catch{l=!1}if(l)e=t.contentWindow;else break;t=Ws(e.document)}return t}function Bc(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var kx=bl&&"documentMode"in document&&11>=document.documentMode,Za=null,qc=null,Xn=null,Yc=!1;function cf(e,t,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Yc||Za==null||Za!==Ws(a)||(a=Za,"selectionStart"in a&&Bc(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Xn&&Qn(Xn,a)||(Xn=a,a=Xi(qc,"onSelect"),0>=m,s-=m,il=1<<32-xt(t)+s|l<me?(be=F,F=null):be=F.sibling;var Se=M(_,F,A[me],H);if(Se===null){F===null&&(F=be);break}e&&F&&Se.alternate===null&&t(_,F),E=r(Se,E,me),Ne===null?ne=Se:Ne.sibling=Se,Ne=Se,F=be}if(me===A.length)return l(_,F),ve&&yl(_,me),ne;if(F===null){for(;meme?(be=F,F=null):be=F.sibling;var ia=M(_,F,Se.value,H);if(ia===null){F===null&&(F=be);break}e&&F&&ia.alternate===null&&t(_,F),E=r(ia,E,me),Ne===null?ne=ia:Ne.sibling=ia,Ne=ia,F=be}if(Se.done)return l(_,F),ve&&yl(_,me),ne;if(F===null){for(;!Se.done;me++,Se=A.next())Se=B(_,Se.value,H),Se!==null&&(E=r(Se,E,me),Ne===null?ne=Se:Ne.sibling=Se,Ne=Se);return ve&&yl(_,me),ne}for(F=a(F);!Se.done;me++,Se=A.next())Se=O(F,_,me,Se.value,H),Se!==null&&(e&&Se.alternate!==null&&F.delete(Se.key===null?me:Se.key),E=r(Se,E,me),Ne===null?ne=Se:Ne.sibling=Se,Ne=Se);return e&&F.forEach(function(Ig){return t(_,Ig)}),ve&&yl(_,me),ne}function Re(_,E,A,H){if(typeof A=="object"&&A!==null&&A.type===T&&A.key===null&&(A=A.props.children),typeof A=="object"&&A!==null){switch(A.$$typeof){case w:e:{for(var ne=A.key;E!==null;){if(E.key===ne){if(ne=A.type,ne===T){if(E.tag===7){l(_,E.sibling),H=s(E,A.props.children),H.return=_,_=H;break e}}else if(E.elementType===ne||typeof ne=="object"&&ne!==null&&ne.$$typeof===ee&&za(ne)===E.type){l(_,E.sibling),H=s(E,A.props),Fn(H,A),H.return=_,_=H;break e}l(_,E);break}else t(_,E);E=E.sibling}A.type===T?(H=va(A.props.children,_.mode,H,A.key),H.return=_,_=H):(H=ri(A.type,A.key,A.props,null,_.mode,H),Fn(H,A),H.return=_,_=H)}return m(_);case N:e:{for(ne=A.key;E!==null;){if(E.key===ne)if(E.tag===4&&E.stateNode.containerInfo===A.containerInfo&&E.stateNode.implementation===A.implementation){l(_,E.sibling),H=s(E,A.children||[]),H.return=_,_=H;break e}else{l(_,E);break}else t(_,E);E=E.sibling}H=Kc(A,_.mode,H),H.return=_,_=H}return m(_);case ee:return A=za(A),Re(_,E,A,H)}if(ce(A))return W(_,E,A,H);if(ye(A)){if(ne=ye(A),typeof ne!="function")throw Error(u(150));return A=ne.call(A),ie(_,E,A,H)}if(typeof A.then=="function")return Re(_,E,pi(A),H);if(A.$$typeof===Z)return Re(_,E,fi(_,A),H);xi(_,A)}return typeof A=="string"&&A!==""||typeof A=="number"||typeof A=="bigint"?(A=""+A,E!==null&&E.tag===6?(l(_,E.sibling),H=s(E,A),H.return=_,_=H):(l(_,E),H=Zc(A,_.mode,H),H.return=_,_=H),m(_)):l(_,E)}return function(_,E,A,H){try{Wn=0;var ne=Re(_,E,A,H);return nn=null,ne}catch(F){if(F===an||F===mi)throw F;var Ne=Mt(29,F,null,_.mode);return Ne.lanes=H,Ne.return=_,Ne}finally{}}}var wa=Cf(!0),Mf=Cf(!1),$l=!1;function ir(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function cr(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ql(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Xl(e,t,l){var a=e.updateQueue;if(a===null)return null;if(a=a.shared,(we&2)!==0){var s=a.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),a.pending=t,t=ci(e),hf(e,null,l),t}return ii(e,a,t,l),ci(e)}function In(e,t,l){if(t=t.updateQueue,t!==null&&(t=t.shared,(l&4194048)!==0)){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,ju(e,l)}}function rr(e,t){var l=e.updateQueue,a=e.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var s=null,r=null;if(l=l.firstBaseUpdate,l!==null){do{var m={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};r===null?s=r=m:r=r.next=m,l=l.next}while(l!==null);r===null?s=r=t:r=r.next=t}else s=r=t;l={baseState:a.baseState,firstBaseUpdate:s,lastBaseUpdate:r,shared:a.shared,callbacks:a.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=t:e.next=t,l.lastBaseUpdate=t}var or=!1;function Pn(){if(or){var e=ln;if(e!==null)throw e}}function es(e,t,l,a){or=!1;var s=e.updateQueue;$l=!1;var r=s.firstBaseUpdate,m=s.lastBaseUpdate,b=s.shared.pending;if(b!==null){s.shared.pending=null;var j=b,C=j.next;j.next=null,m===null?r=C:m.next=C,m=j;var R=e.alternate;R!==null&&(R=R.updateQueue,b=R.lastBaseUpdate,b!==m&&(b===null?R.firstBaseUpdate=C:b.next=C,R.lastBaseUpdate=j))}if(r!==null){var B=s.baseState;m=0,R=C=j=null,b=r;do{var M=b.lane&-536870913,O=M!==b.lane;if(O?(ge&M)===M:(a&M)===M){M!==0&&M===tn&&(or=!0),R!==null&&(R=R.next={lane:0,tag:b.tag,payload:b.payload,callback:null,next:null});e:{var W=e,ie=b;M=t;var Re=l;switch(ie.tag){case 1:if(W=ie.payload,typeof W=="function"){B=W.call(Re,B,M);break e}B=W;break e;case 3:W.flags=W.flags&-65537|128;case 0:if(W=ie.payload,M=typeof W=="function"?W.call(Re,B,M):W,M==null)break e;B=y({},B,M);break e;case 2:$l=!0}}M=b.callback,M!==null&&(e.flags|=64,O&&(e.flags|=8192),O=s.callbacks,O===null?s.callbacks=[M]:O.push(M))}else O={lane:M,tag:b.tag,payload:b.payload,callback:b.callback,next:null},R===null?(C=R=O,j=B):R=R.next=O,m|=M;if(b=b.next,b===null){if(b=s.shared.pending,b===null)break;O=b,b=O.next,O.next=null,s.lastBaseUpdate=O,s.shared.pending=null}}while(!0);R===null&&(j=B),s.baseState=j,s.firstBaseUpdate=C,s.lastBaseUpdate=R,r===null&&(s.shared.lanes=0),Wl|=m,e.lanes=m,e.memoizedState=B}}function kf(e,t){if(typeof e!="function")throw Error(u(191,e));e.call(t)}function Of(e,t){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;er?r:8;var m=k.T,b={};k.T=b,Tr(e,!1,t,l);try{var j=s(),C=k.S;if(C!==null&&C(b,j),j!==null&&typeof j=="object"&&typeof j.then=="function"){var R=Yx(j,a);as(e,t,R,Ut(e))}else as(e,t,a,Ut(e))}catch(B){as(e,t,{then:function(){},status:"rejected",reason:B},Ut())}finally{Y.p=r,m!==null&&b.types!==null&&(m.types=b.types),k.T=m}}function Zx(){}function wr(e,t,l,a){if(e.tag!==5)throw Error(u(476));var s=fd(e).queue;ud(e,s,t,te,l===null?Zx:function(){return dd(e),l(a)})}function fd(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:te,baseState:te,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zl,lastRenderedState:te},next:null};var l={};return t.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zl,lastRenderedState:l},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function dd(e){var t=fd(e);t.next===null&&(t=e.alternate.memoizedState),as(e,t.next.queue,{},Ut())}function _r(){return rt(ys)}function md(){return Je().memoizedState}function hd(){return Je().memoizedState}function Kx(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var l=Ut();e=Ql(l);var a=Xl(t,e,l);a!==null&&(_t(a,t,l),In(a,t,l)),t={cache:lr()},e.payload=t;return}t=t.return}}function Jx(e,t,l){var a=Ut();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},wi(e)?xd(t,l):(l=Xc(e,t,l,a),l!==null&&(_t(l,e,a),gd(l,t,a)))}function pd(e,t,l){var a=Ut();as(e,t,l,a)}function as(e,t,l,a){var s={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(wi(e))xd(t,s);else{var r=e.alternate;if(e.lanes===0&&(r===null||r.lanes===0)&&(r=t.lastRenderedReducer,r!==null))try{var m=t.lastRenderedState,b=r(m,l);if(s.hasEagerState=!0,s.eagerState=b,Ct(b,m))return ii(e,t,s,0),Ue===null&&si(),!1}catch{}finally{}if(l=Xc(e,t,s,a),l!==null)return _t(l,e,a),gd(l,t,a),!0}return!1}function Tr(e,t,l,a){if(a={lane:2,revertLane:io(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},wi(e)){if(t)throw Error(u(479))}else t=Xc(e,l,a,2),t!==null&&_t(t,e,2)}function wi(e){var t=e.alternate;return e===de||t!==null&&t===de}function xd(e,t){cn=vi=!0;var l=e.pending;l===null?t.next=t:(t.next=l.next,l.next=t),e.pending=t}function gd(e,t,l){if((l&4194048)!==0){var a=t.lanes;a&=e.pendingLanes,l|=a,t.lanes=l,ju(e,l)}}var ns={readContext:rt,use:Ni,useCallback:Xe,useContext:Xe,useEffect:Xe,useImperativeHandle:Xe,useLayoutEffect:Xe,useInsertionEffect:Xe,useMemo:Xe,useReducer:Xe,useRef:Xe,useState:Xe,useDebugValue:Xe,useDeferredValue:Xe,useTransition:Xe,useSyncExternalStore:Xe,useId:Xe,useHostTransitionStatus:Xe,useFormState:Xe,useActionState:Xe,useOptimistic:Xe,useMemoCache:Xe,useCacheRefresh:Xe};ns.useEffectEvent=Xe;var bd={readContext:rt,use:Ni,useCallback:function(e,t){return gt().memoizedState=[e,t===void 0?null:t],e},useContext:rt,useEffect:td,useImperativeHandle:function(e,t,l){l=l!=null?l.concat([e]):null,zi(4194308,4,sd.bind(null,t,e),l)},useLayoutEffect:function(e,t){return zi(4194308,4,e,t)},useInsertionEffect:function(e,t){zi(4,2,e,t)},useMemo:function(e,t){var l=gt();t=t===void 0?null:t;var a=e();if(_a){nl(!0);try{e()}finally{nl(!1)}}return l.memoizedState=[a,t],a},useReducer:function(e,t,l){var a=gt();if(l!==void 0){var s=l(t);if(_a){nl(!0);try{l(t)}finally{nl(!1)}}}else s=t;return a.memoizedState=a.baseState=s,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:s},a.queue=e,e=e.dispatch=Jx.bind(null,de,e),[a.memoizedState,e]},useRef:function(e){var t=gt();return e={current:e},t.memoizedState=e},useState:function(e){e=jr(e);var t=e.queue,l=pd.bind(null,de,t);return t.dispatch=l,[e.memoizedState,l]},useDebugValue:zr,useDeferredValue:function(e,t){var l=gt();return Er(l,e,t)},useTransition:function(){var e=jr(!1);return e=ud.bind(null,de,e.queue,!0,!1),gt().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,l){var a=de,s=gt();if(ve){if(l===void 0)throw Error(u(407));l=l()}else{if(l=t(),Ue===null)throw Error(u(349));(ge&127)!==0||Bf(a,t,l)}s.memoizedState=l;var r={value:l,getSnapshot:t};return s.queue=r,td(Yf.bind(null,a,r,e),[e]),a.flags|=2048,on(9,{destroy:void 0},qf.bind(null,a,r,l,t),null),l},useId:function(){var e=gt(),t=Ue.identifierPrefix;if(ve){var l=cl,a=il;l=(a&~(1<<32-xt(a)-1)).toString(32)+l,t="_"+t+"R_"+l,l=yi++,0<\/script>",r=r.removeChild(r.firstChild);break;case"select":r=typeof a.is=="string"?m.createElement("select",{is:a.is}):m.createElement("select"),a.multiple?r.multiple=!0:a.size&&(r.size=a.size);break;default:r=typeof a.is=="string"?m.createElement(s,{is:a.is}):m.createElement(s)}}r[it]=t,r[jt]=a;e:for(m=t.child;m!==null;){if(m.tag===5||m.tag===6)r.appendChild(m.stateNode);else if(m.tag!==4&&m.tag!==27&&m.child!==null){m.child.return=m,m=m.child;continue}if(m===t)break e;for(;m.sibling===null;){if(m.return===null||m.return===t)break e;m=m.return}m.sibling.return=m.return,m=m.sibling}t.stateNode=r;e:switch(ut(r,s,a),s){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break e;case"img":a=!0;break e;default:a=!1}a&&wl(t)}}return Be(t),Gr(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,l),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==a&&wl(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(u(166));if(e=fe.current,Pa(t)){if(e=t.stateNode,l=t.memoizedProps,a=null,s=ct,s!==null)switch(s.tag){case 27:case 5:a=s.memoizedProps}e[it]=t,e=!!(e.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||Hm(e.nodeValue,l)),e||Yl(t,!0)}else e=Vi(e).createTextNode(a),e[it]=t,t.stateNode=e}return Be(t),null;case 31:if(l=t.memoizedState,e===null||e.memoizedState!==null){if(a=Pa(t),l!==null){if(e===null){if(!a)throw Error(u(318));if(e=t.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(u(557));e[it]=t}else ya(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Be(t),e=!1}else l=Ic(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return t.flags&256?(Ot(t),t):(Ot(t),null);if((t.flags&128)!==0)throw Error(u(558))}return Be(t),null;case 13:if(a=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(s=Pa(t),a!==null&&a.dehydrated!==null){if(e===null){if(!s)throw Error(u(318));if(s=t.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(u(317));s[it]=t}else ya(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;Be(t),s=!1}else s=Ic(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=s),s=!0;if(!s)return t.flags&256?(Ot(t),t):(Ot(t),null)}return Ot(t),(t.flags&128)!==0?(t.lanes=l,t):(l=a!==null,e=e!==null&&e.memoizedState!==null,l&&(a=t.child,s=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(s=a.alternate.memoizedState.cachePool.pool),r=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(r=a.memoizedState.cachePool.pool),r!==s&&(a.flags|=2048)),l!==e&&l&&(t.child.flags|=8192),Mi(t,t.updateQueue),Be(t),null);case 4:return Ee(),e===null&&uo(t.stateNode.containerInfo),Be(t),null;case 10:return Nl(t.type),Be(t),null;case 19:if(L(Ke),a=t.memoizedState,a===null)return Be(t),null;if(s=(t.flags&128)!==0,r=a.rendering,r===null)if(s)is(a,!1);else{if(Ve!==0||e!==null&&(e.flags&128)!==0)for(e=t.child;e!==null;){if(r=bi(e),r!==null){for(t.flags|=128,is(a,!1),e=r.updateQueue,t.updateQueue=e,Mi(t,e),t.subtreeFlags=0,e=l,l=t.child;l!==null;)pf(l,e),l=l.sibling;return V(Ke,Ke.current&1|2),ve&&yl(t,a.treeForkCount),t.child}e=e.sibling}a.tail!==null&&dt()>Ui&&(t.flags|=128,s=!0,is(a,!1),t.lanes=4194304)}else{if(!s)if(e=bi(r),e!==null){if(t.flags|=128,s=!0,e=e.updateQueue,t.updateQueue=e,Mi(t,e),is(a,!0),a.tail===null&&a.tailMode==="hidden"&&!r.alternate&&!ve)return Be(t),null}else 2*dt()-a.renderingStartTime>Ui&&l!==536870912&&(t.flags|=128,s=!0,is(a,!1),t.lanes=4194304);a.isBackwards?(r.sibling=t.child,t.child=r):(e=a.last,e!==null?e.sibling=r:t.child=r,a.last=r)}return a.tail!==null?(e=a.tail,a.rendering=e,a.tail=e.sibling,a.renderingStartTime=dt(),e.sibling=null,l=Ke.current,V(Ke,s?l&1|2:l&1),ve&&yl(t,a.treeForkCount),e):(Be(t),null);case 22:case 23:return Ot(t),fr(),a=t.memoizedState!==null,e!==null?e.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(l&536870912)!==0&&(t.flags&128)===0&&(Be(t),t.subtreeFlags&6&&(t.flags|=8192)):Be(t),l=t.updateQueue,l!==null&&Mi(t,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==l&&(t.flags|=2048),e!==null&&L(Sa),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),t.memoizedState.cache!==l&&(t.flags|=2048),Nl(Fe),Be(t),null;case 25:return null;case 30:return null}throw Error(u(156,t.tag))}function eg(e,t){switch(Wc(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Nl(Fe),Ee(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Me(t),null;case 31:if(t.memoizedState!==null){if(Ot(t),t.alternate===null)throw Error(u(340));ya()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(Ot(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(u(340));ya()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return L(Ke),null;case 4:return Ee(),null;case 10:return Nl(t.type),null;case 22:case 23:return Ot(t),fr(),e!==null&&L(Sa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return Nl(Fe),null;case 25:return null;default:return null}}function Gd(e,t){switch(Wc(t),t.tag){case 3:Nl(Fe),Ee();break;case 26:case 27:case 5:Me(t);break;case 4:Ee();break;case 31:t.memoizedState!==null&&Ot(t);break;case 13:Ot(t);break;case 19:L(Ke);break;case 10:Nl(t.type);break;case 22:case 23:Ot(t),fr(),e!==null&&L(Sa);break;case 24:Nl(Fe)}}function cs(e,t){try{var l=t.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var s=a.next;l=s;do{if((l.tag&e)===e){a=void 0;var r=l.create,m=l.inst;a=r(),m.destroy=a}l=l.next}while(l!==s)}}catch(b){Ae(t,t.return,b)}}function Kl(e,t,l){try{var a=t.updateQueue,s=a!==null?a.lastEffect:null;if(s!==null){var r=s.next;a=r;do{if((a.tag&e)===e){var m=a.inst,b=m.destroy;if(b!==void 0){m.destroy=void 0,s=t;var j=l,C=b;try{C()}catch(R){Ae(s,j,R)}}}a=a.next}while(a!==r)}}catch(R){Ae(t,t.return,R)}}function $d(e){var t=e.updateQueue;if(t!==null){var l=e.stateNode;try{Of(t,l)}catch(a){Ae(e,e.return,a)}}}function Qd(e,t,l){l.props=Ta(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(a){Ae(e,t,a)}}function rs(e,t){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var a=e.stateNode;break;case 30:a=e.stateNode;break;default:a=e.stateNode}typeof l=="function"?e.refCleanup=l(a):l.current=a}}catch(s){Ae(e,t,s)}}function rl(e,t){var l=e.ref,a=e.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(s){Ae(e,t,s)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(s){Ae(e,t,s)}else l.current=null}function Xd(e){var t=e.type,l=e.memoizedProps,a=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":l.autoFocus&&a.focus();break e;case"img":l.src?a.src=l.src:l.srcSet&&(a.srcset=l.srcSet)}}catch(s){Ae(e,e.return,s)}}function $r(e,t,l){try{var a=e.stateNode;Ng(a,e.type,l,t),a[jt]=t}catch(s){Ae(e,e.return,s)}}function Vd(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ta(e.type)||e.tag===4}function Qr(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Vd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ta(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Xr(e,t,l){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,t):(t=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,t.appendChild(e),l=l._reactRootContainer,l!=null||t.onclick!==null||(t.onclick=gl));else if(a!==4&&(a===27&&ta(e.type)&&(l=e.stateNode,t=null),e=e.child,e!==null))for(Xr(e,t,l),e=e.sibling;e!==null;)Xr(e,t,l),e=e.sibling}function ki(e,t,l){var a=e.tag;if(a===5||a===6)e=e.stateNode,t?l.insertBefore(e,t):l.appendChild(e);else if(a!==4&&(a===27&&ta(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(ki(e,t,l),e=e.sibling;e!==null;)ki(e,t,l),e=e.sibling}function Zd(e){var t=e.stateNode,l=e.memoizedProps;try{for(var a=e.type,s=t.attributes;s.length;)t.removeAttributeNode(s[0]);ut(t,a,l),t[it]=e,t[jt]=l}catch(r){Ae(e,e.return,r)}}var _l=!1,et=!1,Vr=!1,Kd=typeof WeakSet=="function"?WeakSet:Set,st=null;function tg(e,t){if(e=e.containerInfo,ho=Pi,e=sf(e),Bc(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else e:{l=(l=e.ownerDocument)&&l.defaultView||window;var a=l.getSelection&&l.getSelection();if(a&&a.rangeCount!==0){l=a.anchorNode;var s=a.anchorOffset,r=a.focusNode;a=a.focusOffset;try{l.nodeType,r.nodeType}catch{l=null;break e}var m=0,b=-1,j=-1,C=0,R=0,B=e,M=null;t:for(;;){for(var O;B!==l||s!==0&&B.nodeType!==3||(b=m+s),B!==r||a!==0&&B.nodeType!==3||(j=m+a),B.nodeType===3&&(m+=B.nodeValue.length),(O=B.firstChild)!==null;)M=B,B=O;for(;;){if(B===e)break t;if(M===l&&++C===s&&(b=m),M===r&&++R===a&&(j=m),(O=B.nextSibling)!==null)break;B=M,M=B.parentNode}B=O}l=b===-1||j===-1?null:{start:b,end:j}}else l=null}l=l||{start:0,end:0}}else l=null;for(po={focusedElem:e,selectionRange:l},Pi=!1,st=t;st!==null;)if(t=st,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,st=e;else for(;st!==null;){switch(t=st,r=t.alternate,e=t.flags,t.tag){case 0:if((e&4)!==0&&(e=t.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),ut(r,a,l),r[it]=e,nt(r),a=r;break e;case"link":var m=eh("link","href",s).get(a+(l.href||""));if(m){for(var b=0;bRe&&(m=Re,Re=ie,ie=m);var _=af(b,ie),E=af(b,Re);if(_&&E&&(O.rangeCount!==1||O.anchorNode!==_.node||O.anchorOffset!==_.offset||O.focusNode!==E.node||O.focusOffset!==E.offset)){var A=B.createRange();A.setStart(_.node,_.offset),O.removeAllRanges(),ie>Re?(O.addRange(A),O.extend(E.node,E.offset)):(A.setEnd(E.node,E.offset),O.addRange(A))}}}}for(B=[],O=b;O=O.parentNode;)O.nodeType===1&&B.push({element:O,left:O.scrollLeft,top:O.scrollTop});for(typeof b.focus=="function"&&b.focus(),b=0;bl?32:l,k.T=null,l=Pr,Pr=null;var r=Il,m=kl;if(lt=0,hn=Il=null,kl=0,(we&6)!==0)throw Error(u(331));var b=we;if(we|=4,sm(r.current),lm(r,r.current,m,l),we=b,hs(0,!1),pt&&typeof pt.onPostCommitFiberRoot=="function")try{pt.onPostCommitFiberRoot(al,r)}catch{}return!0}finally{Y.p=s,k.T=a,Sm(e,t)}}function Em(e,t,l){t=Yt(l,t),t=kr(e.stateNode,t,2),e=Xl(e,t,2),e!==null&&(Dn(e,2),ol(e))}function Ae(e,t,l){if(e.tag===3)Em(e,e,l);else for(;t!==null;){if(t.tag===3){Em(t,e,l);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Fl===null||!Fl.has(a))){e=Yt(l,e),l=wd(2),a=Xl(t,l,2),a!==null&&(_d(l,a,t,e),Dn(a,2),ol(a));break}}t=t.return}}function ao(e,t,l){var a=e.pingCache;if(a===null){a=e.pingCache=new ng;var s=new Set;a.set(t,s)}else s=a.get(t),s===void 0&&(s=new Set,a.set(t,s));s.has(l)||(Jr=!0,s.add(l),e=og.bind(null,e,t,l),t.then(e,e))}function og(e,t,l){var a=e.pingCache;a!==null&&a.delete(t),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,Ue===e&&(ge&l)===l&&(Ve===4||Ve===3&&(ge&62914560)===ge&&300>dt()-Ri?(we&2)===0&&pn(e,0):Wr|=l,mn===ge&&(mn=0)),ol(e)}function wm(e,t){t===0&&(t=Zs()),e=ba(e,t),e!==null&&(Dn(e,t),ol(e))}function ug(e){var t=e.memoizedState,l=0;t!==null&&(l=t.retryLane),wm(e,l)}function fg(e,t){var l=0;switch(e.tag){case 31:case 13:var a=e.stateNode,s=e.memoizedState;s!==null&&(l=s.retryLane);break;case 19:a=e.stateNode;break;case 22:a=e.stateNode._retryCache;break;default:throw Error(u(314))}a!==null&&a.delete(t),wm(e,l)}function dg(e,t){return Wt(e,t)}var Gi=null,gn=null,no=!1,$i=!1,so=!1,ea=0;function ol(e){e!==gn&&e.next===null&&(gn===null?Gi=gn=e:gn=gn.next=e),$i=!0,no||(no=!0,hg())}function hs(e,t){if(!so&&$i){so=!0;do for(var l=!1,a=Gi;a!==null;){if(e!==0){var s=a.pendingLanes;if(s===0)var r=0;else{var m=a.suspendedLanes,b=a.pingedLanes;r=(1<<31-xt(42|e)+1)-1,r&=s&~(m&~b),r=r&201326741?r&201326741|1:r?r|2:0}r!==0&&(l=!0,Cm(a,r))}else r=ge,r=Ua(a,a===Ue?r:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(r&3)===0||Ul(a,r)||(l=!0,Cm(a,r));a=a.next}while(l);so=!1}}function mg(){_m()}function _m(){$i=no=!1;var e=0;ea!==0&&zg()&&(e=ea);for(var t=dt(),l=null,a=Gi;a!==null;){var s=a.next,r=Tm(a,t);r===0?(a.next=null,l===null?Gi=s:l.next=s,s===null&&(gn=l)):(l=a,(e!==0||(r&3)!==0)&&($i=!0)),a=s}lt!==0&<!==5||hs(e),ea!==0&&(ea=0)}function Tm(e,t){for(var l=e.suspendedLanes,a=e.pingedLanes,s=e.expirationTimes,r=e.pendingLanes&-62914561;0b)break;var R=j.transferSize,B=j.initiatorType;R&&Lm(B)&&(j=j.responseEnd,m+=R*(j"u"?null:document;function Wm(e,t,l){var a=bn;if(a&&typeof t=="string"&&t){var s=Bt(t);s='link[rel="'+e+'"][href="'+s+'"]',typeof l=="string"&&(s+='[crossorigin="'+l+'"]'),Jm.has(s)||(Jm.add(s),e={rel:e,crossOrigin:l,href:t},a.querySelector(s)===null&&(t=a.createElement("link"),ut(t,"link",e),nt(t),a.head.appendChild(t)))}}function Og(e){Ol.D(e),Wm("dns-prefetch",e,null)}function Dg(e,t){Ol.C(e,t),Wm("preconnect",e,t)}function Rg(e,t,l){Ol.L(e,t,l);var a=bn;if(a&&e&&t){var s='link[rel="preload"][as="'+Bt(t)+'"]';t==="image"&&l&&l.imageSrcSet?(s+='[imagesrcset="'+Bt(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(s+='[imagesizes="'+Bt(l.imageSizes)+'"]')):s+='[href="'+Bt(e)+'"]';var r=s;switch(t){case"style":r=vn(e);break;case"script":r=yn(e)}Zt.has(r)||(e=y({rel:"preload",href:t==="image"&&l&&l.imageSrcSet?void 0:e,as:t},l),Zt.set(r,e),a.querySelector(s)!==null||t==="style"&&a.querySelector(bs(r))||t==="script"&&a.querySelector(vs(r))||(t=a.createElement("link"),ut(t,"link",e),nt(t),a.head.appendChild(t)))}}function Ug(e,t){Ol.m(e,t);var l=bn;if(l&&e){var a=t&&typeof t.as=="string"?t.as:"script",s='link[rel="modulepreload"][as="'+Bt(a)+'"][href="'+Bt(e)+'"]',r=s;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":r=yn(e)}if(!Zt.has(r)&&(e=y({rel:"modulepreload",href:e},t),Zt.set(r,e),l.querySelector(s)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(vs(r)))return}a=l.createElement("link"),ut(a,"link",e),nt(a),l.head.appendChild(a)}}}function Hg(e,t,l){Ol.S(e,t,l);var a=bn;if(a&&e){var s=qa(a).hoistableStyles,r=vn(e);t=t||"default";var m=s.get(r);if(!m){var b={loading:0,preload:null};if(m=a.querySelector(bs(r)))b.loading=5;else{e=y({rel:"stylesheet",href:e,"data-precedence":t},l),(l=Zt.get(r))&&No(e,l);var j=m=a.createElement("link");nt(j),ut(j,"link",e),j._p=new Promise(function(C,R){j.onload=C,j.onerror=R}),j.addEventListener("load",function(){b.loading|=1}),j.addEventListener("error",function(){b.loading|=2}),b.loading|=4,Ki(m,t,a)}m={type:"stylesheet",instance:m,count:1,state:b},s.set(r,m)}}}function Lg(e,t){Ol.X(e,t);var l=bn;if(l&&e){var a=qa(l).hoistableScripts,s=yn(e),r=a.get(s);r||(r=l.querySelector(vs(s)),r||(e=y({src:e,async:!0},t),(t=Zt.get(s))&&So(e,t),r=l.createElement("script"),nt(r),ut(r,"link",e),l.head.appendChild(r)),r={type:"script",instance:r,count:1,state:null},a.set(s,r))}}function Bg(e,t){Ol.M(e,t);var l=bn;if(l&&e){var a=qa(l).hoistableScripts,s=yn(e),r=a.get(s);r||(r=l.querySelector(vs(s)),r||(e=y({src:e,async:!0,type:"module"},t),(t=Zt.get(s))&&So(e,t),r=l.createElement("script"),nt(r),ut(r,"link",e),l.head.appendChild(r)),r={type:"script",instance:r,count:1,state:null},a.set(s,r))}}function Fm(e,t,l,a){var s=(s=fe.current)?Zi(s):null;if(!s)throw Error(u(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(t=vn(l.href),l=qa(s).hoistableStyles,a=l.get(t),a||(a={type:"style",instance:null,count:0,state:null},l.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=vn(l.href);var r=qa(s).hoistableStyles,m=r.get(e);if(m||(s=s.ownerDocument||s,m={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},r.set(e,m),(r=s.querySelector(bs(e)))&&!r._p&&(m.instance=r,m.state.loading=5),Zt.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},Zt.set(e,l),r||qg(s,e,l,m.state))),t&&a===null)throw Error(u(528,""));return m}if(t&&a!==null)throw Error(u(529,""));return null;case"script":return t=l.async,l=l.src,typeof l=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=yn(l),l=qa(s).hoistableScripts,a=l.get(t),a||(a={type:"script",instance:null,count:0,state:null},l.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(u(444,e))}}function vn(e){return'href="'+Bt(e)+'"'}function bs(e){return'link[rel="stylesheet"]['+e+"]"}function Im(e){return y({},e,{"data-precedence":e.precedence,precedence:null})}function qg(e,t,l,a){e.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=e.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),ut(t,"link",l),nt(t),e.head.appendChild(t))}function yn(e){return'[src="'+Bt(e)+'"]'}function vs(e){return"script[async]"+e}function Pm(e,t,l){if(t.count++,t.instance===null)switch(t.type){case"style":var a=e.querySelector('style[data-href~="'+Bt(l.href)+'"]');if(a)return t.instance=a,nt(a),a;var s=y({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(e.ownerDocument||e).createElement("style"),nt(a),ut(a,"style",s),Ki(a,l.precedence,e),t.instance=a;case"stylesheet":s=vn(l.href);var r=e.querySelector(bs(s));if(r)return t.state.loading|=4,t.instance=r,nt(r),r;a=Im(l),(s=Zt.get(s))&&No(a,s),r=(e.ownerDocument||e).createElement("link"),nt(r);var m=r;return m._p=new Promise(function(b,j){m.onload=b,m.onerror=j}),ut(r,"link",a),t.state.loading|=4,Ki(r,l.precedence,e),t.instance=r;case"script":return r=yn(l.src),(s=e.querySelector(vs(r)))?(t.instance=s,nt(s),s):(a=l,(s=Zt.get(r))&&(a=y({},l),So(a,s)),e=e.ownerDocument||e,s=e.createElement("script"),nt(s),ut(s,"link",a),e.head.appendChild(s),t.instance=s);case"void":return null;default:throw Error(u(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,Ki(a,l.precedence,e));return t.instance}function Ki(e,t,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),s=a.length?a[a.length-1]:null,r=s,m=0;m title"):null)}function Yg(e,t,l){if(l===1||t.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return e=t.disabled,typeof t.precedence=="string"&&e==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function lh(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Gg(e,t,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var s=vn(a.href),r=t.querySelector(bs(s));if(r){t=r._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(e.count++,e=Wi.bind(e),t.then(e,e)),l.state.loading|=4,l.instance=r,nt(r);return}r=t.ownerDocument||t,a=Im(a),(s=Zt.get(s))&&No(a,s),r=r.createElement("link"),nt(r);var m=r;m._p=new Promise(function(b,j){m.onload=b,m.onerror=j}),ut(r,"link",a),l.instance=r}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,t),(t=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Wi.bind(e),t.addEventListener("load",l),t.addEventListener("error",l))}}var zo=0;function $g(e,t){return e.stylesheets&&e.count===0&&Ii(e,e.stylesheets),0zo?50:800)+t);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(a),clearTimeout(s)}}:null}function Wi(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ii(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Fi=null;function Ii(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Fi=new Map,t.forEach(Qg,e),Fi=null,Wi.call(e))}function Qg(e,t){if(!(t.state.loading&4)){var l=Fi.get(e);if(l)var a=l.get(null);else{l=new Map,Fi.set(e,l);for(var s=e.querySelectorAll("link[data-precedence],style[data-precedence]"),r=0;r"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(i)}catch(c){console.error(c)}}return i(),Oo.exports=ob(),Oo.exports}var Qo=ub();/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const fb=i=>i.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),db=i=>i.replace(/^([A-Z])|[\s-_]+(\w)/g,(c,o,u)=>u?u.toUpperCase():o.toLowerCase()),_h=i=>{const c=db(i);return c.charAt(0).toUpperCase()+c.slice(1)},fp=(...i)=>i.filter((c,o,u)=>!!c&&c.trim()!==""&&u.indexOf(c)===o).join(" ").trim(),mb=i=>{for(const c in i)if(c.startsWith("aria-")||c==="role"||c==="title")return!0};/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */var hb={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const pb=q.forwardRef(({color:i="currentColor",size:c=24,strokeWidth:o=2,absoluteStrokeWidth:u,className:f="",children:d,iconNode:h,...p},g)=>q.createElement("svg",{ref:g,...hb,width:c,height:c,stroke:i,strokeWidth:u?Number(o)*24/Number(c):o,className:fp("lucide",f),...!d&&!mb(p)&&{"aria-hidden":"true"},...p},[...h.map(([x,v])=>q.createElement(x,v)),...Array.isArray(d)?d:[d]]));/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const He=(i,c)=>{const o=q.forwardRef(({className:u,...f},d)=>q.createElement(pb,{ref:d,iconNode:c,className:fp(`lucide-${fb(_h(i))}`,`lucide-${i}`,u),...f}));return o.displayName=_h(i),o};/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const xb=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],Sn=He("arrow-up-right",xb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const gb=[["path",{d:"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8",key:"1k78r4"}],["path",{d:"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4",key:"fb3tl2"}],["path",{d:"M12 4v6",key:"1dcgq2"}],["path",{d:"M2 18h20",key:"ajqnye"}]],bb=He("bed-double",gb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const vb=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"m9 16 2 2 4-4",key:"19s6y9"}]],yb=He("calendar-check",vb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const jb=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]],Nb=He("calendar-days",jb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Sb=[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]],zb=He("car",Sb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Eb=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],dp=He("check",Eb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const wb=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],fc=He("chevron-down",wb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const _b=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],oa=He("chevron-left",_b);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Tb=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],ua=He("chevron-right",Tb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Ab=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Cb=He("clock",Ab);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Mb=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],kb=He("copy",Mb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Ob=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],Db=He("external-link",Ob);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Rb=[["rect",{width:"20",height:"20",x:"2",y:"2",rx:"5",ry:"5",key:"2e1cvw"}],["path",{d:"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z",key:"9exkf1"}],["line",{x1:"17.5",x2:"17.51",y1:"6.5",y2:"6.5",key:"r4j83e"}]],Ub=He("instagram",Rb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Hb=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],mp=He("mail",Hb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Lb=[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]],Ls=He("map-pin",Lb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Bb=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],hp=He("menu",Bb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const qb=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],Io=He("message-circle",qb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Yb=[["path",{d:"M5 12h14",key:"1ays0h"}]],Gb=He("minus",Yb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const $b=[["polygon",{points:"3 11 22 2 13 21 11 13 3 11",key:"1ltx0t"}]],Ho=He("navigation",$b);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Qb=[["path",{d:"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",key:"9njp5v"}]],At=He("phone",Qb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Xb=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],Vb=He("play",Xb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Zb=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],Kb=He("plus",Zb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Jb=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],Wb=He("rotate-ccw",Jb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Fb=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Ib=He("shield-check",Fb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Pb=[["path",{d:"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2",key:"cjf0a3"}],["path",{d:"M7 2v20",key:"1473qp"}],["path",{d:"M21 15V2a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7",key:"j28e5"}]],e0=He("utensils",Pb);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const t0=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],pp=He("x",t0);/**
+ * @license lucide-react v0.546.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const l0=[["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.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17",key:"1q2vi4"}],["path",{d:"m10 15 5-3-5-3z",key:"1jp15x"}]],a0=He("youtube",l0),xp=q.createContext(null);function n0({payload:i,children:c}){return n.jsx(xp.Provider,{value:i,children:c})}function le(){const i=q.useContext(xp);if(!i)throw new Error("SiteProvider 밖에서 useSite() 를 불렀습니다. payload 없이는 렌더할 수 없습니다.");return i}function s0(){return n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[n.jsx("rect",{x:"2",y:"5",width:"20",height:"14",rx:"2"}),n.jsxs("g",{className:"w4d-reel",children:[n.jsx("circle",{cx:"8.5",cy:"12",r:"2.6"}),n.jsx("path",{d:"M8.5 9.4v5.2M5.9 12h5.2"})]}),n.jsxs("g",{className:"w4d-reel",children:[n.jsx("circle",{cx:"15.5",cy:"12",r:"2.6"}),n.jsx("path",{d:"M15.5 9.4v5.2M12.9 12h5.2"})]}),n.jsx("path",{d:"M6 19l1.5-2.4h9L18 19"})]})}function i0(){return n.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:n.jsx("path",{d:"M8 5v14l11-7z"})})}function c0(){return n.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:n.jsx("path",{d:"M7 5h3.4v14H7zm6.6 0H17v14h-3.4z"})})}function r0(){return n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[n.jsx("path",{d:"M4 7h11M4 12h11M4 17h7"}),n.jsx("path",{d:"M19 17.5V9l3 1.2"}),n.jsx("circle",{cx:"17.4",cy:"17.6",r:"1.7",fill:"currentColor",stroke:"none"})]})}function o0(){return n.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:n.jsx("path",{d:"M6 6l12 12M18 6L6 18"})})}function Th(i){if(typeof i!="number"||!Number.isFinite(i))return"";const c=Math.floor(i/60),o=Math.floor(i%60);return`${c}:${o<10?"0":""}${o}`}function u0(){const i=le(),c=(i.songs??[]).filter($=>$.audioUrl),[o,u]=q.useState(0),[f,d]=q.useState(!1),[h,p]=q.useState(!1),[g,x]=q.useState({now:0,total:0}),[v,y]=q.useState({}),z=q.useRef(null),w=q.useRef(null),N=q.useRef(null),T=c.length;q.useEffect(()=>{T>1&&u(Math.floor(Math.random()*T))},[T]);const D=q.useCallback(()=>{var ee;const $=document.querySelector("header"),K=$==null?void 0:$.getBoundingClientRect(),G={top:`${K?K.bottom+6:66}px`};if(window.innerWidth<=640)G.left="8px",G.right="8px";else{G.left="auto";const se=(ee=w.current)==null?void 0:ee.getBoundingClientRect();G.right=`${Math.max(12,window.innerWidth-((se==null?void 0:se.right)??0))}px`}y(G)},[]);if(q.useEffect(()=>{if(!h)return;D();const $=()=>D(),K=G=>{var se,Q;const ee=G.target;(se=N.current)!=null&&se.contains(ee)||(Q=w.current)!=null&&Q.contains(ee)||p(!1)};return window.addEventListener("resize",$),window.addEventListener("scroll",$,{passive:!0}),document.addEventListener("click",K),()=>{window.removeEventListener("resize",$),window.removeEventListener("scroll",$),document.removeEventListener("click",K)}},[h,D]),q.useEffect(()=>()=>{var $;return($=z.current)==null?void 0:$.pause()},[]),c.length===0)return null;const U=c[o]??c[0],X=($=o)=>{const K=z.current,G=c[$];!K||!G||(K.getAttribute("src")!==G.audioUrl&&(K.src=G.audioUrl),K.play().then(()=>d(!0),()=>d(!1)))},Z=()=>{var $;($=z.current)==null||$.pause(),d(!1)},P=$=>{const K=($%c.length+c.length)%c.length;u(K),x({now:0,total:0}),X(K)};return n.jsxs(n.Fragment,{children:[n.jsxs("span",{id:"w4d-mini",ref:w,"data-playing":f?"1":"0",children:[n.jsx("span",{id:"w4d-tape","aria-hidden":!0,title:`${i.place.name}이(가) 만든 노래`,children:n.jsx(s0,{})}),n.jsx("span",{id:"w4d-now","aria-live":"polite",children:U.title}),n.jsx("button",{type:"button",id:"w4d-play","data-playing":f?"1":"0",title:`${f?"멈춤":"재생"} · ${U.title}`,onClick:()=>f?Z():X(),children:f?n.jsx(c0,{}):n.jsx(i0,{})}),n.jsx("button",{type:"button",id:"w4d-toggle",title:"노래 목록","aria-expanded":h,onClick:()=>p($=>!$),children:n.jsx(r0,{})})]}),n.jsx("audio",{ref:z,src:c[0].audioUrl,preload:"none",onTimeUpdate:$=>x({now:$.currentTarget.currentTime,total:$.currentTarget.duration}),onDurationChange:$=>x(K=>({...K,total:$.currentTarget.duration})),onEnded:()=>P(o+1),onError:()=>d(!1)}),n.jsxs("div",{id:"w4d-panel",ref:N,hidden:!h,style:v,children:[n.jsxs("div",{className:"w4d-head",children:[n.jsxs("span",{className:"w4d-head-t",children:[i.place.name,"이(가) 만든 노래"]}),n.jsxs("span",{className:"w4d-head-n",children:[c.length,"곡"]}),n.jsx("button",{type:"button",id:"w4d-close",title:"닫기","aria-label":"닫기",onClick:()=>p(!1),children:n.jsx(o0,{})})]}),n.jsx("ol",{children:c.map(($,K)=>n.jsx("li",{children:n.jsxs("button",{type:"button",className:"w4d-item","aria-current":K===o,"data-playing":K===o&&f?"1":"0",onClick:()=>P(K),children:[n.jsxs("span",{className:"w4d-mark",children:[n.jsx("span",{className:"w4d-disc-sm"}),n.jsxs("span",{className:"w4d-eq","aria-hidden":!0,children:[n.jsx("i",{}),n.jsx("i",{}),n.jsx("i",{})]})]}),n.jsxs("span",{className:"w4d-info",children:[n.jsx("span",{className:"w4d-t",children:$.title}),n.jsx("span",{className:"w4d-sub",children:i.place.name})]}),n.jsx("span",{className:"w4d-time",children:K===o&&(f||g.now>0)?`${Th(g.now)}${g.total?` / ${Th(g.total)}`:""}`:""})]})},$.songId))}),n.jsx("div",{id:"w4d-lyrics-box",hidden:!U.lyrics,children:(U.lyrics??"").replace(/^\[.*\]$/gm,"").replace(/\n{3,}/g,`
+
+`).trim()})]})]})}const Ma={LODGING:1,CAFE:2,RESTAURANT:3,CLINIC:4},N1={OWNER:1,CRAWL:3},Ah={UNVERIFIED:1,VERIFIED:3,CORRECTED:4},f0=[Ah.VERIFIED,Ah.CORRECTED];function gp(i){return f0.includes(i)}const bt={YANOLJA:1,GOODCHOICE:2,NAVER_PLACE:3,INSTAGRAM:4,OFFICIAL_SITE:5,BLOG:6,NAVER_BOOKING:7,ETC:99},S1={PUBLISHED:3};function Bs(i){return i.filter(c=>gp(c.status)&&c.value!=null&&c.value!=="")}function bp(i){const c=new Map;for(const o of Bs(i))c.set(o.key,o);return c}function ca(i,c){const o=bp(i).get(c);return(o==null?void 0:o.value)??void 0}function Tt(i,c){const o=bp(i).get(c);if(!(o!=null&&o.value))return;const u=o.type==="number"?d0(o.value):o.value;return o.unit?`${u}${o.unit}`:u}function d0(i){const c=Number(i.replace(/,/g,""));return Number.isFinite(c)?c.toLocaleString("ko-KR"):i}function Po(i){return i.type!=="bool"?i.label:i.label.replace(/\s*(가능|여부)$/,"")||i.label}function m0(i){return i.filter(c=>gp(c.status)&&c.question&&c.answer).sort((c,o)=>c.sortOrder-o.sortOrder)}function eu(i){return i.map(c=>({...c,facts:Bs(c.facts)})).sort((c,o)=>c.sortOrder-o.sortOrder)}const h0={songs:"title",daily:"title",course:"name",schedule:"name",people:"name",chronicle:"title",literature:"workTitle",postcard:"line",quiz:"question",planner:"name",itinerary:"name",video:"url",event:"title"};function p0(i){const c=(i??"").trim();if(!c)return;const o=/(?:youtube\.com\/(?:watch\?(?:.*&)?v=|shorts\/|embed\/|live\/)|youtu\.be\/)([A-Za-z0-9_-]{6,20})/.exec(c);return o==null?void 0:o[1]}function x0(i){return/youtube\.com\/shorts\//.test((i??"").trim())}function g0(i){return`https://i.ytimg.com/vi/${i}/hqdefault.jpg`}function b0(i){return`https://www.youtube-nocookie.com/embed/${i}?autoplay=1&rel=0&modestbranding=1`}const ic={items:[],unverified:0,sourced:0};function v0(i,c){var x,v;const o=y=>{const z=i.slice(0,Math.max(0,y)),w=z.split(`
+`).length,N=y-z.lastIndexOf(`
+`);return`${w}번째 줄 ${N}번째 글자`},u=(x=/Unexpected token '(.)'/.exec(c))==null?void 0:x[1],f=u==="}"||u==="]"?"닫는 괄호 바로 앞에 쉼표가 하나 더 있는지 보세요.":"그 앞의 쉼표·따옴표·괄호를 확인해 주세요.",d=/line (\d+) column (\d+)/.exec(c);if(d)return`${d[1]}번째 줄 ${d[2]}번째 글자에서 JSON 이 끊깁니다. ${f}`;const h=/position (\d+)/.exec(c);if(h)return`${o(Number(h[1]))}에서 JSON 이 끊깁니다. ${f}`;const p=(v=/\.\.\."([\s\S]*?)" is not valid JSON/.exec(c))==null?void 0:v[1],g=p?i.indexOf(p):-1;return g>=0?`${o(g+p.length)} 부근에서 JSON 이 끊깁니다. ${f}`:"JSON 이 아닙니다. ChatGPT 가 준 답에서 { 로 시작해 } 로 끝나는 부분만 붙여넣어 주세요."}function y0(i,c){const o=h0[i],u=(c??"").trim();if(!o||!u)return ic;let f;try{f=JSON.parse(u)}catch(y){return{...ic,error:v0(u,y instanceof Error?y.message:"")}}if(typeof f!="object"||f===null||Array.isArray(f))return{...ic,error:"바깥이 { } 로 감싸인 JSON 이어야 합니다."};const d=f,h=typeof d.kind=="string"?d.kind:void 0,p=d.items;if(!Array.isArray(p))return{...ic,error:"items 배열이 없습니다. 프롬프트로 다시 만들어 주세요."};const g=p.filter(y=>typeof y=="object"&&y!==null&&!Array.isArray(y)&&typeof y[o]=="string"&&y[o].trim().length>0);let x=0,v=0;for(const y of g){const z=y;z.verified!=="확인"&&(x+=1),z.source&&typeof z.source=="object"&&(v+=1)}return{items:g,title:typeof d.title=="string"?d.title:void 0,subtitle:typeof d.subtitle=="string"?d.subtitle:void 0,linkUrl:typeof d.linkUrl=="string"&&/^https?:\/\//.test(d.linkUrl)?d.linkUrl:void 0,linkLabel:typeof d.linkLabel=="string"?d.linkLabel:void 0,kindMismatch:h&&h!==i?h:void 0,unverified:x,sourced:v}}const j0=1260,N0=60,S0="10:00",Ch=["봄","여름","가을","겨울"];function Mh(i){const c=/^(\d{1,2}):(\d{2})$/.exec(i.trim());if(!c)return;const o=Number(c[1]),u=Number(c[2]);if(!(o>23||u>59))return o*60+u}function cc(i){const c=(i%1440+1440)%1440;return`${String(Math.floor(c/60)).padStart(2,"0")}:${String(c%60).padStart(2,"0")}`}function z0(i){const c=Mh(i.startTime??"")??Mh(S0)??600,o=[];let u=c,f=0;for(const d of i.stops??[]){const h=Math.max(0,d.moveMinutes??0),p=Math.max(1,d.minutes??N0),g=u+h;if(g+p>j0){f+=1;continue}o.push({stop:d,time:cc(g),until:cc(g+p),move:h}),u=g+p}return{stops:o,from:cc(c),to:cc(u),totalMinutes:u-c,dropped:f}}function E0(i=new Date){const c=i.getMonth()+1,o=Math.floor((c-3+12)%12/3),u=Ch[o];return c%3===0&&i.getDate()<=15?[Ch[(o+3)%4],u]:[u]}function kh(i){const c=parseInt(i.replace("#",""),16);return[c>>16&255,c>>8&255,c&255]}function Oh(i,c,o){if(!/^#[0-9a-fA-F]{6}$/.test(i)||!/^#[0-9a-fA-F]{6}$/.test(c))return i;const[u,f,d]=kh(i),[h,p,g]=kh(c),x=(y,z)=>Math.round(y+(z-y)*o),v=y=>y.toString(16).padStart(2,"0");return`#${v(x(u,h))}${v(x(f,p))}${v(x(d,g))}`}function w0(i){return{surface:Oh(i.bg,i.text,.06),surfaceAlt:i.card,inverse:"#1c1917",border:Oh(i.bg,i.text,.2)}}const vp={[Ma.LODGING]:{type:"HotelRoom",path:"rooms",label:"객실"},[Ma.CAFE]:{type:"MenuItem",path:"menu",label:"메뉴"},[Ma.RESTAURANT]:{type:"MenuItem",path:"menu",label:"메뉴"},[Ma.CLINIC]:{type:"Product",path:"programs",label:"시술"}};function _0(i){return i.links.filter(c=>c.confirmed&&/^https?:\/\//i.test(c.url??""))}function yp(i){var c;for(const[o,u]of[["weekday_price","주중 1박"],["price","1박"],["weekend_price","주말 1박"],["peak_price","성수기 1박"]]){const f=Number((c=ca(i.facts,o))==null?void 0:c.replace(/[^0-9]/g,""));if(Number.isFinite(f)&&f>0)return{price:f,label:u}}}const Dh=[bt.NAVER_BOOKING,bt.YANOLJA,bt.GOODCHOICE,bt.NAVER_PLACE];function dc(i){return Bs(i.facts).filter(c=>c.scope==="place").map(c=>({label:Po(c),value:tu(c,i.facts)})).filter(c=>c.value!=="")}function tu(i,c){const o=Tt(c,i.key);return o?i.type!=="bool"?o:/여부$/.test(i.label)?o==="true"?"있음":o==="false"?"없음":o:o==="true"?"가능":o==="false"?"불가":o:""}const T0=new Set(["weekday_price","weekend_price","peak_price","price_range"]);function fl(i){const c=vp[i.place.category],o=new Map(i.media.map(u=>[u.mediaId,u]));return eu(i.units).map(u=>{const f=Tt(u.facts,"room_intro")??Tt(u.facts,"description"),d=i.place.category===Ma.LODGING?["standard_capacity","max_capacity","bed_type","room_size"]:["price","volume","origin"];return{unitId:u.unitId,slug:u.slug,name:u.name,intro:f,chips:d.map(h=>{var x;const p=Tt(u.facts,h),g=((x=u.facts.find(v=>v.key===h))==null?void 0:x.label)??h;return p?{label:g,value:p}:null}).filter(h=>h!==null),rows:u.facts.filter(h=>!T0.has(h.key)).map(h=>({label:Po(h),value:tu(h,u.facts)})).filter(h=>h.value!==""),images:u.mediaIds.map(h=>o.get(h)).filter(h=>{var p;return!!((p=h==null?void 0:h.alt)!=null&&p.trim())}),priceText:A0(u),prices:M0(u),href:`/${c.path}/${u.slug}`}})}function A0(i){var d,h;const c=Tt(i.facts,"price_range");if(c)return c;const o=Number((d=Tt(i.facts,"weekday_price"))==null?void 0:d.replace(/[^0-9]/g,"")),u=Number((h=Tt(i.facts,"price"))==null?void 0:h.replace(/[^0-9]/g,"")),f=Number.isFinite(o)&&o>0?o:u;if(!(!Number.isFinite(f)||f<=0))return`${f.toLocaleString("ko-KR")}원부터`}const C0=[["weekday_price","주중"],["weekend_price","주말"],["peak_price","성수기"]];function M0(i){return Tt(i.facts,"price_range")?[]:Tt(i.facts,"weekday_price")?C0.map(([c,o])=>({label:o,value:Tt(i.facts,c)??"문의"})):[]}function k0(i){const c=i??"";return/눈|설/.test(c)?"눈":/비|우|소나기/.test(c)?"비":/흐림|구름|안개|박무/.test(c)?"흐림":"맑음"}function O0(i){return i>=30?"혹서":i>=25?"더움":i>=20?"선선":i>=10?"쌀쌀":"추움"}function lu(i){return i.media.filter(c=>{var o;return((o=c.alt)==null?void 0:o.trim())&&!c.unitId})}function D0(i){return m0(i.faqs)}function R0(i){return i.theme.sections.filter(c=>c.enabled)}function Kt(i,c){var o;return((o=i.theme.sections.find(u=>u.id===c))==null?void 0:o.enabled)??!1}function U0(i,c){var u;const o=(u=i.theme.sections.find(f=>f.id===c))==null?void 0:u.body;return(o==null?void 0:o.split(/\n\s*\n/).map(f=>f.trim()).filter(Boolean))??[]}function dl(i,c){var d;const o=i.theme.sections.find(h=>h.id===c),u=y0(c,o==null?void 0:o.data),f=(d=i.local.story)==null?void 0:d[c];return!Array.isArray(f)||f.length===0?u:{...u,items:[...u.items,...f]}}function ft(i){return vp[i.place.category]}function Ye(i,c,o){var f,d;const u=(d=(f=i.theme.sections.find(h=>h.id===c))==null?void 0:f.name)==null?void 0:d.trim();return u||o}function zn(i,c){const o=new Map(Bs(i.facts).filter(u=>u.scope==="place").map(u=>[u.key,u]));return c.map(u=>o.get(u)).filter(u=>u!==void 0).map(u=>({label:Po(u),value:tu(u,i.facts)})).filter(u=>u.value!=="")}function H0(i,c){return zn(i,[c])[0]}const L0=["reservation_required","reservation_channel"];function B0(i){return zn(i,L0)}const q0=["seat_count","terrace","room_available","group_seat_max","power_outlet","study_allowed","wheelchair_accessible"];function Y0(i){return zn(i,q0)}const G0=["operating_hours","session_times","closed_days","age_limit","guide_language"];function $0(i){return zn(i,G0)}const Q0=["check_in_time","check_out_time","operating_hours","closed_days","parking","reservation_required"];function Oa(i){return zn(i,Q0).slice(0,4)}function En(i){const c=fl(i).map(u=>u.priceText).filter(u=>!!u);if(c.length===0)return;const o=u=>Number(u.replace(/[^0-9]/g,""))||Number.MAX_SAFE_INTEGER;return c.reduce((u,f)=>o(f)o.confirmed&&c.includes(o.channel))}function Ze(i){const c=new Map(Dh.map((o,u)=>[o,u]));return Np(i,Dh).filter(o=>!V0(o.url)).sort((o,u)=>(c.get(o.channel)??99)-(c.get(u.channel)??99))}function V0(i){return/\/p\/search\/|[?&]query=/.test(i)}const Z0=["check_in_time","check_out_time","cancel_policy","extra_person_fee","reception_hours","cooking_allowed","pet_allowed","smoking"];function K0(i){return eu(i.units).map(c=>{const o=Tt(c.facts,"standard_capacity"),u=Tt(c.facts,"max_capacity"),f=yp(c);return{unitId:c.unitId,name:c.name,capacityText:[o&&`기준 ${o}`,u&&`최대 ${u}`].filter(Boolean).join(" · ")||void 0,rateRows:["weekday_price","weekend_price","peak_price"].map(d=>{var g;const h=Tt(c.facts,d),p=((g=c.facts.find(x=>x.key===d))==null?void 0:g.label)??d;return h?{label:p,value:h}:null}).filter(d=>d!==null),baseRateText:f?`${f.label} ${f.price.toLocaleString("ko-KR")}원`:void 0,href:"#units"}})}function J0(i){if(i.place.category!==Ma.LODGING)return null;const c={offers:K0(i).filter(u=>u.rateRows.length>0||u.capacityText!==void 0),notices:zn(i,Z0),links:Ze(i),contacts:wn(i).filter(u=>!Ze(i).some(f=>f.url===u.url)),phone:i.place.phone};return c.offers.length===0&&c.notices.length===0&&c.links.length===0&&c.contacts.length===0&&!c.phone?null:c}function W0(i,c){return i.theme.sections.some(o=>o.id===c)}function wn(i){return Np(i,X0)}function ht(i,c){const o=ks(i),u=o.endsWith("예약")?o:`${o} 예약`;return c?`${c} ${u}`:u}function Sp(i){return i.channel===bt.NAVER_BOOKING?"네이버 예약으로 바로 예약하기":`${ml(i)}에서 예약`}function F0(){var u;const i=le(),c=ft(i),o=[{label:"소개",href:"#about",show:Kt(i,"intro")},{label:c.label,href:"#units",show:i.units.length>0},{label:"이용 정보",href:"#info",show:!0},{label:"축제",href:"#festival",show:(((u=i.local.festivals)==null?void 0:u.length)??0)>0},{label:"주변 정보",href:"#guide",show:Kt(i,"local")},{label:"오시는 길",href:"#location",show:!0},{label:"FAQ",href:"#faq",show:i.faqs.length>0}].filter(f=>f.show);return n.jsx("header",{className:"border-line safe-t sticky top-0 z-40 w-full border-b backdrop-blur-md",style:{backgroundColor:"color-mix(in srgb, var(--tpl-surface, #fff) 88%, transparent)"},children:n.jsxs("div",{className:"shell flex h-16 items-center justify-between gap-3",children:[n.jsxs("a",{href:"#top",className:"flex min-w-0 items-center gap-2.5",children:[n.jsx("span",{className:"serif flex size-8 shrink-0 items-center justify-center rounded-md text-[length:var(--fs-sm)]",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)",fontWeight:"var(--tpl-heading-weight, 700)"},"aria-hidden":!0,children:i.place.name.slice(0,1)}),n.jsxs("span",{className:"flex min-w-0 flex-col",children:[n.jsx("span",{className:"serif truncate text-[length:var(--fs-lead)] leading-tight",style:{fontWeight:"var(--tpl-heading-weight, 700)"},children:i.place.name}),i.place.englishName&&n.jsx("span",{className:"text-muted truncate text-[10px] uppercase leading-tight tracking-[0.14em]",children:i.place.englishName})]})]}),n.jsx("nav",{"aria-label":"주요 메뉴",className:"hidden items-center gap-7 lg:flex",children:o.map(f=>n.jsx("a",{href:f.href,className:"text-muted py-1 text-[length:var(--fs-sm)] font-medium transition-colors hover:text-current",children:f.label},f.label))}),n.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[n.jsx(u0,{}),i.place.phone&&n.jsxs("a",{href:`tel:${i.place.phone}`,className:"tap inline-flex items-center gap-1.5 rounded-lg px-3 text-[length:var(--fs-xs)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{className:"hidden sm:inline",children:i.place.phone}),n.jsx("span",{className:"sr-only sm:hidden",children:"전화"})]}),n.jsxs("details",{className:"relative lg:hidden",children:[n.jsx("summary",{className:"tap flex cursor-pointer items-center justify-center rounded-lg marker:content-none [&::-webkit-details-marker]:hidden","aria-label":"메뉴 열기",children:n.jsx(hp,{className:"size-5"})}),n.jsx("nav",{"aria-label":"전체 메뉴",className:"border-line tpl-border absolute right-0 top-[calc(100%+0.5rem)] z-50 w-52 overflow-hidden rounded-xl border shadow-lg",style:{backgroundColor:"var(--tpl-surface, #fff)"},children:n.jsx("ul",{className:"divide-line divide-y",children:o.map(f=>n.jsx("li",{children:n.jsx("a",{href:f.href,className:"tap flex items-center px-4 text-[length:var(--fs-sm)] font-medium",children:f.label})},f.label))})})]})]})]})})}function mc(i){return i.media.find(c=>{var o;return c.isPrimary&&((o=c.alt)==null?void 0:o.trim())})??i.media.find(c=>{var o;return(o=c.alt)==null?void 0:o.trim()})}function I0(i){return P0(i).join(" ")}function P0(i){const{place:c,facts:o}=i,u=[],f=c.addressLocality??c.addressRegion??c.roadAddress??c.address;u.push(f?`${f}에 있는 ${c.name}입니다.`:`${c.name}입니다.`);const d=ca(o,"check_in_time"),h=ca(o,"check_out_time");d&&h&&u.push(`체크인 ${d}, 체크아웃 ${h}.`);const p=ca(o,"business_hours")??ca(o,"open_hours");p&&u.push(`영업시간 ${p}.`);const g=ca(o,"pet_allowed");if(g==="false"&&u.push("반려동물 동반 불가."),g==="true"&&u.push("반려동물 동반 가능."),ca(o,"parking")==="true"){const v=ca(o,"parking_capacity");u.push(v?`주차 ${v}대 가능.`:"주차 가능.")}return c.phone&&u.push(`문의 ${c.phone}.`),u}const ev=6e3,tv=5;function lv(){const i=le(),{place:c,narrative:o}=i,u=Oa(i),f=En(i),d=Ze(i),h=c.addressLocality??c.addressRegion,p=[...i.media].filter(N=>{var T;return(T=N.alt)==null?void 0:T.trim()}).sort((N,T)=>Number(T.isPrimary)-Number(N.isPrimary)).slice(0,tv),[g,x]=q.useState(0),[v,y]=q.useState(!1),z=q.useRef(null),w=q.useCallback(N=>x(T=>(T+N+p.length)%p.length),[p.length]);return q.useEffect(()=>{if(v||p.length<2)return;const N=setInterval(()=>w(1),ev);return()=>clearInterval(N)},[v,w,p.length]),n.jsxs("section",{id:"top",className:"w-full",children:[n.jsxs("div",{className:"relative w-full overflow-hidden",style:{backgroundColor:"var(--tpl-inverse, #1c1917)",color:"var(--tpl-bg, #ffffff)",height:"clamp(24rem, 76vh, 42rem)"},onMouseEnter:()=>y(!0),onMouseLeave:()=>y(!1),onFocusCapture:()=>y(!0),onBlurCapture:()=>y(!1),onTouchStart:N=>{z.current=N.touches[0].clientX},onTouchEnd:N=>{const T=z.current;if(z.current=null,T===null)return;const D=N.changedTouches[0].clientX-T;Math.abs(D)>40&&w(D<0?1:-1)},children:[p.map((N,T)=>n.jsx("img",{src:N.url,alt:N.alt,fetchPriority:T===0?"high":"low",loading:T===0?void 0:"lazy",decoding:"async",className:"absolute inset-0 size-full object-cover object-center transition-opacity duration-700",style:{opacity:T===g?1:0}},N.mediaId)),n.jsx("div",{className:"pointer-events-none absolute inset-0",style:{background:"linear-gradient(to bottom, color-mix(in srgb, var(--tpl-inverse, #1c1917) 34%, transparent) 0%, color-mix(in srgb, var(--tpl-inverse, #1c1917) 16%, transparent) 45%, color-mix(in srgb, var(--tpl-inverse, #1c1917) 60%, transparent) 100%)"}}),n.jsxs("div",{className:"pointer-events-none absolute inset-0 flex flex-col items-center justify-center px-6 text-center",children:[h&&n.jsx("p",{className:"label opacity-85",children:h}),n.jsx("h1",{className:"serif mt-2",style:{fontSize:"var(--fs-display)",fontWeight:"var(--tpl-heading-weight, 700)",lineHeight:1.15},children:c.name}),(o.tagline??o.heroSubline)&&n.jsx("p",{className:"measure mt-3 text-[length:var(--fs-lead)] leading-relaxed opacity-90",children:o.tagline??o.heroSubline})]}),p.length>1&&n.jsxs(n.Fragment,{children:[n.jsx(Rh,{dir:"prev",onClick:()=>w(-1)}),n.jsx(Rh,{dir:"next",onClick:()=>w(1)}),n.jsx("ul",{className:"absolute inset-x-0 bottom-5 flex items-center justify-center gap-2",children:p.map((N,T)=>n.jsx("li",{children:n.jsx("button",{type:"button",onClick:()=>x(T),"aria-label":`${T+1}번째 사진`,"aria-current":T===g,className:`h-1.5 rounded-full bg-current transition-all ${T===g?"w-7 opacity-90":"w-1.5 opacity-45 hover:opacity-70"}`})},N.mediaId))})]})]}),(f||u.length>0||d.length>0||c.phone)&&n.jsx("div",{className:"border-line paper w-full border-b",style:{backgroundColor:"var(--tpl-surface-alt, #f5f5f4)"},children:n.jsxs("div",{className:"shell flex flex-col items-center gap-4 py-4 lg:flex-row lg:justify-between lg:gap-8",children:[n.jsxs("dl",{className:"divide-line flex flex-wrap justify-center gap-y-2 sm:divide-x",children:[f&&n.jsxs("div",{className:"px-5 text-center sm:first:pl-0",children:[n.jsx("dt",{className:"label",children:"1박 최저가"}),n.jsx("dd",{className:"text-[length:var(--fs-lead)] font-bold tabular-nums",children:f})]}),u.map(N=>n.jsxs("div",{className:"px-5 text-center",children:[n.jsx("dt",{className:"label",children:N.label}),n.jsx("dd",{className:"text-[length:var(--fs-lead)] font-bold",children:N.value})]},N.label))]}),n.jsxs("div",{className:"flex shrink-0 gap-2",children:[c.phone&&n.jsxs("a",{href:`tel:${c.phone}`,className:"tap border-line tpl-border inline-flex items-center gap-1.5 rounded-lg border px-4 text-[length:var(--fs-sm)] font-semibold",children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:c.phone})]}),d.length>0&&n.jsx("a",{href:d[0].url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center justify-center rounded-lg px-6 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:ht(d[0])})]})]})})]})}function Rh({dir:i,onClick:c}){const o=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:c,"aria-label":i==="prev"?"이전 사진":"다음 사진",className:`tap absolute top-1/2 hidden -translate-y-1/2 items-center justify-center rounded-full bg-current/15 px-3 backdrop-blur-sm transition-colors hover:bg-current/25 sm:inline-flex ${i==="prev"?"left-4":"right-4"}`,children:n.jsx(o,{className:"size-5"})})}function av(){const i=le(),{place:c,narrative:o}=i,u=Oa(i).slice(0,3),f=En(i),d=Ze(i),h=H0(i,"extra_person_fee"),p=[...i.media].filter(x=>{var v;return(v=x.alt)==null?void 0:v.trim()}).sort((x,v)=>Number(v.isPrimary)-Number(x.isPrimary))[0],g=c.addressLocality??c.addressRegion;return n.jsx("section",{id:"top",className:"border-line w-full border-b",children:n.jsxs("div",{className:"grid lg:grid-cols-2",children:[n.jsx("div",{className:"relative order-1 min-h-[16rem] lg:order-none lg:min-h-[34rem]",children:p&&n.jsx("img",{src:p.url,alt:p.alt,fetchPriority:"high",decoding:"async",className:"absolute inset-0 size-full object-cover"})}),n.jsxs("div",{className:"order-2 flex flex-col justify-center gap-6 px-6 py-10 sm:px-10 lg:order-none lg:px-14 lg:py-16",style:{backgroundColor:"var(--tpl-surface-alt, #f5f5f4)"},children:[n.jsxs("div",{children:[g&&n.jsx("p",{className:"label",children:g}),n.jsx("h1",{className:"serif mt-2",style:{fontSize:"var(--fs-display)",fontWeight:"var(--tpl-heading-weight, 700)",lineHeight:1.15},children:c.name}),n.jsx("p",{className:"measure mt-3 text-[length:var(--fs-lead)] leading-relaxed opacity-80",children:o.tagline??o.heroSubline??o.summary})]}),n.jsxs("div",{className:"panel p-5 sm:p-6",children:[f&&n.jsxs("p",{className:"flex items-baseline gap-2",children:[n.jsx("span",{className:"text-[length:var(--fs-h3)] font-bold tabular-nums",children:f}),n.jsx("span",{className:"text-muted text-[length:var(--fs-xs)]",children:"1박 기준"})]}),u.length>0&&n.jsxs("dl",{className:"divide-line mt-4 divide-y border-t pt-1",children:[u.map(x=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted",children:x.label}),n.jsx("dd",{className:"font-semibold",children:x.value})]},x.label)),h&&n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted",children:h.label}),n.jsx("dd",{className:"font-semibold tabular-nums",children:h.value})]})]}),n.jsxs("div",{className:"mt-5 flex flex-col gap-2 sm:flex-row",children:[d.length>0&&n.jsx("a",{href:d[0].url,target:"_blank",rel:"noopener noreferrer",className:"tap flex flex-1 items-center justify-center rounded-lg px-6 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:ht(d[0])}),c.phone&&n.jsxs("a",{href:`tel:${c.phone}`,className:"tap border-line tpl-border flex items-center justify-center gap-1.5 rounded-lg border px-5 text-[length:var(--fs-sm)] font-semibold",children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:c.phone})]})]})]})]})]})})}const nv={"stay-reservation":"reservation","stay-oasi":"oasi","stay-studio":"studio","stay-pastel":"pastel","stay-editorial":"editorial"};function zp(i){return nv[i??""]??"default"}function hc(){return zp(le().theme.templateId)}const rc=5,Xo=1.8,sv=3;function iv(i){const c=i*rc,o=f=>`${(f/c*100).toFixed(3)}%`;return`${i<2?"":`
+.stay2-hero-slide { animation: stay2-hero-fade ${c}s ease-in-out infinite; }
+@keyframes stay2-hero-fade {
+ 0% { opacity: 1; }
+ ${o(rc)} { opacity: 1; }
+ ${o(rc+Xo)} { opacity: 0; }
+ ${o(c-Xo)} { opacity: 0; }
+ 100% { opacity: 1; }
+}`}
+.stay2-hero-focus { animation: stay2-hero-focus 1.6s cubic-bezier(0.16, 1, 0.3, 1) both; }
+@keyframes stay2-hero-focus {
+ 0% { opacity: 0; filter: blur(0.22em); }
+ 40% { opacity: 1; }
+ 100% { opacity: 1; filter: blur(0); }
+}
+@media (prefers-reduced-motion: reduce) {
+ .stay2-hero-slide, .stay2-hero-focus { animation: none; }
+}
+`}function cv(i,c){return((c-i)%c*rc+Xo).toFixed(1)}function rv(){const i=le(),{place:c,narrative:o}=i,u=ft(i),f=Ze(i)[0],d=o.tagline??o.heroSubline,h=[...i.media].filter(x=>{var v;return(v=x.alt)==null?void 0:v.trim()}).sort((x,v)=>Number(v.isPrimary)-Number(x.isPrimary)),p=h.length<2?0:Math.min(h.length,sv),g=f?{href:f.url,label:`${ks(f)}에서 예약`,external:!0}:c.phone?{href:`tel:${c.phone}`,label:`${c.phone} 예약 문의`,external:!1}:i.units.length>0?{href:"#units",label:`${u.label} 보기`,external:!1}:null;return n.jsxs("section",{id:"top",className:"w-full",children:[n.jsx("style",{dangerouslySetInnerHTML:{__html:iv(p)}}),n.jsxs("div",{className:"relative flex w-full items-center justify-center overflow-hidden",style:{backgroundColor:"var(--tpl-inverse, #1c1917)",color:"var(--tpl-bg, #ffffff)",height:"100svh"},children:[h.map((x,v)=>n.jsx("img",{src:x.url,alt:x.alt,fetchPriority:v===0?"high":v0?h:dc(i).slice(0,4),g=(u==null?void 0:u.caption)??c.name;return n.jsxs("section",{id:"top","data-oasi":!0,"aria-labelledby":"top-heading",className:"pt-12 lg:pt-16",children:[n.jsx("h1",{id:"top-heading",className:"text-[length:var(--fs-sm)] font-normal tracking-[0.08em] leading-[1.9]",children:c.name}),o.heroHeadline&&n.jsx("p",{className:"text-muted measure mt-3 text-[length:var(--fs-xs)] leading-[1.9]",children:o.heroHeadline}),u&&n.jsxs("figure",{className:"relative mx-auto mt-10 w-full max-w-[34rem]",children:[n.jsx("img",{src:u.url,alt:u.alt,fetchPriority:"high",decoding:"async",width:u.width,height:u.height,className:"block h-[clamp(17rem,27vw,24rem)] w-full object-cover"}),n.jsx("figcaption",{className:"text-muted absolute left-full top-0 ml-5 hidden max-h-full overflow-hidden text-ellipsis whitespace-nowrap text-[length:var(--fs-xs)] tracking-[0.14em] xl:block",style:{writingMode:"vertical-rl"},children:g})]}),(f||p.length>0)&&n.jsxs("dl",{className:"border-line mt-10 flex flex-wrap gap-x-10 gap-y-4 border-t pt-5 text-[length:var(--fs-xs)] leading-[1.9]",children:[f&&n.jsxs("div",{children:[n.jsx("dt",{className:"text-muted",children:"최저가"}),n.jsx("dd",{children:f})]}),p.map(x=>n.jsxs("div",{children:[n.jsx("dt",{className:"text-muted",children:x.label}),n.jsx("dd",{children:x.value})]},x.label))]}),d.length>0&&n.jsx("ul",{className:"mt-6 flex flex-wrap items-center gap-x-8",children:d.map(x=>n.jsx("li",{children:n.jsx("a",{href:x.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center text-[length:var(--fs-sm)] underline underline-offset-[6px]",style:{color:"var(--color-brand)"},children:ht(x)})},x.url))})]})}function uv(){const i=le(),c=lu(i),o=mc(i),u=o&&c.some(f=>f.mediaId===o.mediaId)?[o,...c.filter(f=>f.mediaId!==o.mediaId)]:c;return u.length===0?null:n.jsx("section",{id:"top","aria-label":`${i.place.name} 사진`,className:"w-full",children:n.jsx("div",{className:"columns-1 gap-2 sm:columns-2",children:u.map((f,d)=>n.jsx("figure",{className:"mb-2 break-inside-avoid",children:n.jsx("img",{src:f.url,alt:f.alt,loading:d===0?"eager":"lazy",fetchPriority:d===0?"high":void 0,decoding:"async",width:f.width,height:f.height,className:"block h-auto w-full"})},f.mediaId))})})}function fv(){const i=le(),{place:c,narrative:o}=i,u=Oa(i),f=En(i),d=Ze(i),h=o.tagline??o.summary,p=c.addressLocality??c.addressRegion,g=[...i.media].filter(x=>{var v;return(v=x.alt)==null?void 0:v.trim()}).sort((x,v)=>Number(v.isPrimary)-Number(x.isPrimary)).slice(0,3);return n.jsxs("section",{id:"top","data-pastel":"own",className:"w-full",children:[n.jsxs("div",{className:"relative w-full overflow-hidden",style:{backgroundColor:"var(--pastel-1)"},children:[n.jsxs("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0",children:[n.jsx("span",{className:"absolute rounded-full",style:{width:"clamp(12rem, 26vw, 22rem)",aspectRatio:"1",backgroundColor:"var(--pastel-2)",right:"-6%",top:"-6%",opacity:.75}}),n.jsx("span",{className:"absolute rounded-full",style:{width:"clamp(8rem, 18vw, 15rem)",aspectRatio:"1",backgroundColor:"var(--pastel-3)",left:"46%",bottom:"-10%",opacity:.7}})]}),n.jsxs("div",{className:"shell relative grid items-center gap-8 lg:grid-cols-2 lg:gap-14",style:{paddingBlock:"var(--section-space)"},children:[n.jsxs("div",{className:"order-2 lg:order-1",children:[p&&n.jsx("p",{className:"inline-flex items-center rounded-full px-3 py-1 text-[length:var(--fs-xs)] font-extrabold",style:{backgroundColor:"var(--tpl-bg, #fff)",color:"var(--pastel-ink)"},children:p}),n.jsx("h1",{className:"mt-4 break-keep",style:{fontSize:"var(--fs-display)",fontWeight:800,lineHeight:1.2,letterSpacing:"var(--tpl-heading-tracking, -0.03em)"},children:c.name}),h&&n.jsx("p",{className:"measure mt-4 text-[length:var(--fs-lead)] font-medium leading-relaxed opacity-80",children:h}),d.length>0&&n.jsx("a",{href:d[0].url,target:"_blank",rel:"noopener noreferrer",className:"tap mt-7 inline-flex items-center justify-center rounded-full px-8 text-[length:var(--fs-sm)] font-extrabold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--pastel-ink)",color:"var(--tpl-bg, #fff)"},children:ht(d[0])})]}),n.jsxs("div",{className:"order-1 lg:order-2",children:[g[0]&&n.jsx("div",{className:"relative w-full overflow-hidden",style:{aspectRatio:"1 / 1",borderRadius:"calc(var(--tpl-radius, 24px) * 1.6)",boxShadow:"0 0 0 clamp(6px, 1.4vw, 12px) var(--tpl-bg, #fff)"},children:n.jsx("img",{src:g[0].url,alt:g[0].alt,fetchPriority:"high",decoding:"async",className:"size-full object-cover"})}),g.length>1&&n.jsx("ul",{className:"mt-3 grid grid-cols-2 gap-3",children:g.slice(1).map(x=>n.jsx("li",{className:"relative overflow-hidden",style:{aspectRatio:"4 / 3",borderRadius:"var(--tpl-radius, 24px)",boxShadow:"0 0 0 clamp(4px, 1vw, 8px) var(--tpl-bg, #fff)"},children:n.jsx("img",{src:x.url,alt:x.alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})},x.mediaId))})]})]})]}),(f||u.length>0)&&n.jsx("div",{className:"w-full",style:{backgroundColor:"var(--pastel-2)"},children:n.jsxs("dl",{className:"shell flex flex-wrap items-center justify-center gap-x-12 gap-y-5 py-8 text-center",children:[f&&n.jsxs("div",{children:[n.jsx("dt",{className:"text-[length:var(--fs-xs)] font-extrabold",style:{color:"var(--tpl-bg, #fff)",opacity:.85},children:"최저가"}),n.jsx("dd",{className:"mt-1 font-extrabold tabular-nums",style:{fontSize:"var(--fs-h3)",color:"var(--tpl-bg, #fff)"},children:f})]}),u.map(x=>n.jsxs("div",{children:[n.jsx("dt",{className:"text-[length:var(--fs-xs)] font-extrabold",style:{color:"var(--tpl-bg, #fff)",opacity:.85},children:x.label}),n.jsx("dd",{className:"mt-1 font-extrabold",style:{fontSize:"var(--fs-h3)",color:"var(--tpl-bg, #fff)"},children:x.value})]},x.label))]})})]})}const Os="repeating-linear-gradient(90deg, color-mix(in oklab, currentColor 3%, transparent) 0 1px, transparent 1px 6px),repeating-linear-gradient(0deg, color-mix(in oklab, currentColor 2%, transparent) 0 1px, transparent 1px 6px)",dv={intro:"about",info:"info",rooms:"units",menu:"units",programs:"units",pricing:"pricing",booking:"booking",space:"space",inquiry:"inquiry",exhibition:"exhibition",photos:"gallery",local:"guide",weather:"weather",map:"location",faq:"faq",songs:"songs",daily:"daily",chronicle:"chronicle",people:"people",quiz:"quiz",postcard:"postcard",video:"video",itinerary:"itinerary"},mv={about:"소개",info:"이용 정보",pricing:"요금",booking:"예약 안내",space:"공간",inquiry:"문의",exhibition:"관람 안내",gallery:"사진",guide:"주변",weather:"날씨",location:"오시는 길",faq:"자주 묻는 질문",songs:"노래",daily:"일력",chronicle:"연표",people:"인물",quiz:"퀴즈",postcard:"엽서",video:"영상",itinerary:"일정"};function Uh(i){return String(i).padStart(2,"0")}function Ep(){var f;const i=le(),c=ft(i),o=new Set,u=[];for(const d of R0(i)){const h=dv[d.id];if(!h||o.has(h)||h==="units"&&i.units.length===0)continue;o.add(h);const p=(f=d.name)==null?void 0:f.trim();u.push({no:Uh(u.length+1),label:p||mv[h]||c.label,anchor:h})}return o.has("location")||u.push({no:Uh(u.length+1),label:"오시는 길",anchor:"location"}),u}function au({id:i,title:c,lead:o,aside:u}){var d;const f=(d=Ep().find(h=>h.anchor===i))==null?void 0:d.no;return n.jsxs("header",{className:"mb-7 sm:mb-10",children:[n.jsx("div",{"aria-hidden":!0,className:"mb-5 h-0.5 w-full bg-current opacity-75"}),n.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between lg:gap-10",children:[n.jsxs("div",{className:"relative min-w-0 flex-1",children:[f&&n.jsx("span",{"aria-hidden":!0,className:"serif pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 select-none leading-none tabular-nums",style:{fontSize:"clamp(2.5rem, 7vw, 5rem)",fontWeight:800,opacity:.12},children:f}),n.jsx("h2",{id:`${i}-heading`,className:"h2 relative pl-9 sm:pl-14 xl:pl-20",style:{fontWeight:800},children:c}),o&&n.jsx("p",{className:"text-muted measure relative mt-2 pl-9 font-serif text-[length:var(--fs-sm)] leading-relaxed sm:pl-14 xl:pl-20",children:o})]}),u&&n.jsx("div",{className:"shrink-0",children:u})]})]})}function hv(){const i=le(),{place:c,narrative:o}=i,u=mc(i),f=ft(i),d=fl(i),h=Oa(i),p=En(i),g=Ze(i)[0],x=wn(i)[0],v=o.tagline??o.heroSubline,z=[c.addressSubLocality??c.addressLocality??c.addressRegion,d.length>0?`${f.label} ${d.length}개`:void 0,p].filter(w=>!!w);return n.jsx("section",{id:"top",className:"relative w-full",style:{backgroundImage:Os},children:n.jsxs("div",{className:"grid grid-cols-12",children:[u&&n.jsx("div",{className:"relative col-span-12 xl:col-span-8 xl:col-start-5 xl:row-start-1",style:{minHeight:"clamp(15rem, 52vh, 34rem)",backgroundColor:"var(--tpl-inverse)"},children:n.jsx("img",{src:u.url,alt:u.alt,fetchPriority:"high",decoding:"async",width:u.width,height:u.height,className:"absolute inset-0 size-full object-cover"})}),n.jsx("div",{className:"z-10 col-span-12 xl:col-start-1 xl:row-start-1 xl:mb-12 xl:mr-16 xl:self-end",style:{backgroundColor:"color-mix(in srgb, var(--tpl-inverse) 88%, transparent)",color:"var(--tpl-bg)"},children:n.jsx("h1",{className:"serif px-4 py-5 sm:px-6 xl:py-8 xl:pl-10 xl:pr-16",style:{fontSize:"clamp(2.25rem, 7.5vw, 5.5rem)",fontWeight:800,lineHeight:.98,letterSpacing:"-0.035em"},children:c.name})}),n.jsxs("div",{className:"col-span-12 flex flex-col gap-5 px-4 py-8 sm:px-6 xl:col-span-4 xl:col-start-1 xl:row-start-1 xl:py-12 xl:pb-56 xl:pl-10 xl:pr-8",children:[v&&n.jsx("p",{className:"measure font-serif text-[length:var(--fs-lead)] leading-relaxed",children:v}),z.length>0&&n.jsx("p",{className:"text-[length:var(--fs-sm)] font-semibold tabular-nums",children:z.join(" · ")}),(g||c.phone||x)&&n.jsxs("div",{className:"flex flex-wrap items-center gap-x-6 gap-y-1 text-[length:var(--fs-sm)] font-bold",children:[g&&n.jsx("a",{href:g.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center underline underline-offset-4",children:ht(g)}),c.phone&&n.jsx("a",{href:`tel:${c.phone}`,className:"tap inline-flex items-center underline underline-offset-4",children:c.phone}),x&&n.jsxs("a",{href:x.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center underline underline-offset-4",children:[ml(x)," 문의"]})]}),h.length>0&&n.jsx("dl",{className:"mt-1",children:h.map(w=>n.jsxs("div",{className:"border-line flex items-baseline justify-between gap-4 border-t py-2 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted shrink-0",children:w.label}),n.jsx("dd",{className:"text-right font-semibold",children:w.value})]},w.label))})]})]})})}function pv(){var g;const i=le(),c=hc();if(c==="reservation")return n.jsx(rv,{});if(c==="oasi")return n.jsx(ov,{});if(c==="studio")return n.jsx(uv,{});if(c==="pastel")return n.jsx(fv,{});if(c==="editorial")return n.jsx(hv,{});const o=(g=i.theme.sections.find(x=>x.id==="hero"))==null?void 0:g.variantId;if(o==="hero.slideshow")return n.jsx(lv,{});if(o==="hero.split")return n.jsx(av,{});const{place:u,narrative:f}=i,d=mc(i),h=ft(i);Ze(i);const p=u.addressLocality??u.addressRegion;return n.jsx("section",{id:"top",className:"w-full",children:n.jsxs("div",{className:"relative flex w-full items-end overflow-hidden",style:{backgroundColor:"var(--tpl-inverse, #1c1917)",color:"var(--tpl-bg, #ffffff)",minHeight:"clamp(24rem, 62vh, 36rem)"},children:[d&&n.jsxs("div",{className:"absolute inset-0 z-0",children:[n.jsx("img",{src:d.url,alt:d.alt,fetchPriority:"high",decoding:"async",width:d.width,height:d.height,className:"size-full object-cover object-center"}),n.jsx("div",{className:"absolute inset-0",style:{background:"linear-gradient(to top, color-mix(in srgb, var(--tpl-inverse, #1c1917) 88%, transparent) 0%, color-mix(in srgb, var(--tpl-inverse, #1c1917) 45%, transparent) 34%, transparent 66%)"}})]}),n.jsxs("div",{className:"shell relative z-10 pb-10 pt-24 sm:pb-12",children:[p&&n.jsxs("p",{className:"mb-3 inline-flex items-center gap-1 text-[length:var(--fs-xs)] opacity-80",children:[n.jsx(Ls,{className:"size-3.5"}),n.jsx("span",{children:p})]}),n.jsx("h1",{className:"serif",style:{fontSize:"var(--fs-display)",fontWeight:"var(--tpl-heading-weight, 700)",lineHeight:1.15},children:u.name}),(f.tagline??f.heroSubline??f.summary)&&n.jsx("p",{className:"measure mt-3 text-[length:var(--fs-lead)] leading-relaxed opacity-85",children:f.tagline??f.heroSubline??f.summary}),i.units.length>0&&n.jsxs("a",{href:"#units",className:"mt-6 inline-flex items-center gap-1 text-[length:var(--fs-sm)] font-medium underline-offset-4 opacity-80 transition-opacity hover:opacity-100",children:[n.jsxs("span",{children:[h.label," 보기"]}),n.jsx(fc,{className:"size-4"})]})]})]})})}function nu(i){if(!i)return"";const c=new Date(i);return Number.isNaN(c.getTime())?"":`${c.getFullYear()}년 ${c.getMonth()+1}월 ${c.getDate()}일`}function qs(i){if(!i)return"";const c=new Date(i);return Number.isNaN(c.getTime())?"":c.toLocaleDateString("sv-SE",{timeZone:"Asia/Seoul"})}function Vo(i){return`https://search.naver.com/search.naver?query=${encodeURIComponent(i)}`}function xv(i){return`https://www.youtube.com/results?search_query=${encodeURIComponent(i)}`}function su(i){return i.replace(/,/g," ").replace(/\s+/g," ").trim()}function gv(i,c,o){return c==null||o==null?`https://map.kakao.com/link/search/${encodeURIComponent(i)}`:`https://map.kakao.com/link/to/${encodeURIComponent(su(i))},${c},${o}`}function bv(i,c){const o=u=>`${u.lng},${u.lat},${encodeURIComponent(su(u.name))}`;return`https://map.naver.com/p/directions/${o(i)}/${o(c)}/-/car`}function wp(i,c,o){return c==null||o==null?`https://map.naver.com/p/search/${encodeURIComponent(i)}`:`https://map.naver.com/p/directions/-/${o},${c},${encodeURIComponent(su(i))}/-/transit`}function vv(i,c,o=16/9,u=.0022){const f=Math.max(Math.cos(i*Math.PI/180),.01),d=o*u/f;return`https://www.openstreetmap.org/export/embed.html?bbox=${[c-d,i-u,c+d,i+u].map(p=>p.toFixed(6)).join(",")}&layer=mapnik&marker=${i},${c}`}function yv(i,c,o){if(c==null||o==null)return;const u=encodeURIComponent(i);return`tmap://route?goalname=${u}&goalx=${o}&goaly=${c}&rGoName=${u}&rGoX=${o}&rGoY=${c}`}function Hh(){const i=le(),c=dc(i).slice(0,6),o=i.narrative.summary??I0(i);return c.length===0&&!o?null:n.jsx("section",{id:"summary","aria-labelledby":"summary-heading",className:"border-line w-full border-b py-10 sm:py-14",style:{backgroundColor:"var(--tpl-surface-alt, #f5f5f4)"},children:n.jsx("div",{className:"shell",children:n.jsxs("div",{className:"grid gap-8 lg:grid-cols-12 lg:gap-12",children:[n.jsxs("div",{className:"lg:col-span-5",children:[n.jsx("h2",{id:"summary-heading",className:"h3",children:"예약 전 확인"}),o&&n.jsx("p",{className:"measure mt-3 text-[length:var(--fs-body)] leading-relaxed",children:o}),n.jsxs("p",{className:"text-muted mt-3 text-[length:var(--fs-xs)]",children:[nu(i.site.updatedAt)," 기준, 사업자가 확인한 정보입니다."]})]}),c.length>0&&n.jsx("dl",{className:"grid grid-cols-1 gap-x-10 lg:col-span-7 xl:grid-cols-2",children:c.map(u=>n.jsxs("div",{className:"border-line flex flex-col gap-0.5 py-2.5 sm:flex-row sm:gap-4 sm:border-b",children:[n.jsx("dt",{className:"text-muted shrink-0 text-[length:var(--fs-sm)] sm:w-28",children:u.label}),n.jsx("dd",{className:"text-[length:var(--fs-sm)] font-semibold",children:u.value})]},u.label))})]})})})}function iu({id:i,title:c,lead:o,aside:u}){return n.jsxs("header",{className:"mb-10 flex flex-col items-center gap-4 text-center sm:mb-14",children:[n.jsx("h2",{id:`${i}-heading`,className:"serif max-w-full",style:{fontSize:"var(--fs-h2)",fontWeight:300,letterSpacing:"0.04em",lineHeight:1.35},children:c}),n.jsx("i",{"aria-hidden":!0,className:"block h-px w-10 bg-current opacity-25"}),o&&n.jsx("p",{className:"text-muted measure text-[length:var(--fs-sm)] leading-loose",children:o}),u&&n.jsx("div",{className:"text-[length:var(--fs-xs)]",children:u})]})}function cu({id:i,title:c,lead:o,aside:u}){return n.jsxs("header",{className:"mb-8 flex flex-col gap-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-8",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsxs("h2",{id:`${i}-heading`,className:"text-[length:var(--fs-sm)] font-normal tracking-[0.08em]",children:["[",c,"]"]}),o&&n.jsx("p",{className:"text-muted measure mt-3 text-[length:var(--fs-xs)] leading-[1.9]",children:o})]}),u&&n.jsx("div",{className:"shrink-0 text-[length:var(--fs-xs)]",children:u})]})}function ru({id:i,title:c,lead:o,aside:u}){return n.jsx("header",{className:"mb-7 sm:mb-10",children:n.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-10",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsx("h2",{id:`${i}-heading`,className:"serif min-w-0 font-extrabold",style:{fontSize:"var(--fs-h2)",letterSpacing:"0.01em",lineHeight:1.2,color:"var(--tpl-text)"},children:c}),o&&n.jsx("p",{className:"text-muted measure mt-2 text-[length:var(--fs-sm)]",style:{lineHeight:1.7},children:o})]}),u&&n.jsx("div",{className:"shrink-0 text-[length:var(--fs-xs)]",children:u})]})})}function ou({id:i,title:c,lead:o,aside:u}){return n.jsxs("header",{className:"mb-8 flex flex-col items-center gap-3 text-center sm:mb-10",children:[n.jsx("i",{"aria-hidden":!0,className:"block h-[6px] w-10 rounded-full",style:{backgroundColor:"var(--pastel-2, currentColor)",opacity:.9}}),n.jsx("h2",{id:`${i}-heading`,className:"h2 break-keep",style:{fontSize:"calc(var(--fs-h2) * 1.15)",fontWeight:800},children:c}),o&&n.jsx("p",{className:"measure text-[length:var(--fs-sm)] leading-relaxed opacity-65",children:o}),u&&n.jsx("div",{className:"text-[length:var(--fs-sm)]",children:u})]})}const jv={base:{backgroundColor:"var(--tpl-surface, #ffffff)"},alt:{backgroundColor:"var(--tpl-surface-alt, #f5f5f4)"},dark:{backgroundColor:"var(--tpl-inverse, #1c1917)",color:"var(--tpl-bg, #ffffff)"}};function vt({id:i,title:c,lead:o,tone:u="base",aside:f,footnote:d,children:h,wide:p,bare:g}){const x=hc(),v=x==="reservation"?iu:x==="oasi"?cu:x==="studio"?ru:x==="pastel"?ou:x==="editorial"?au:Nv;return n.jsx("section",{id:i,"aria-labelledby":`${i}-heading`,className:"border-line paper w-full border-b",style:{...jv[u],paddingBlock:"var(--section-space)"},children:n.jsxs("div",{className:p?"w-full":"shell",children:[!g&&n.jsx("div",{className:p?"shell":void 0,children:n.jsx(v,{id:i,title:c,lead:o,aside:f})}),h,d&&n.jsx("p",{className:`text-muted mt-5 text-[length:var(--fs-xs)] ${p?"shell":""}`,children:d})]})})}function Nv({id:i,title:c,lead:o,aside:u}){return n.jsx("header",{className:"mb-6 sm:mb-8",children:n.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between sm:gap-6",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsxs("h2",{id:`${i}-heading`,className:"h2 flex items-center gap-2.5",children:[n.jsx("i",{"aria-hidden":!0,className:"h-[1em] w-[3px] shrink-0 bg-current opacity-25"}),n.jsx("span",{className:"min-w-0",children:c})]}),o&&n.jsx("p",{className:"text-muted measure mt-2 pl-[calc(3px+0.625rem)] text-[length:var(--fs-sm)]",children:o})]}),u&&n.jsx("div",{className:"shrink-0",children:u})]})})}function Sv(i){return Object.prototype.toString.call(i)==="[object Object]"}function Lh(i){return Sv(i)||Array.isArray(i)}function zv(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function uu(i,c){const o=Object.keys(i),u=Object.keys(c);if(o.length!==u.length)return!1;const f=JSON.stringify(Object.keys(i.breakpoints||{})),d=JSON.stringify(Object.keys(c.breakpoints||{}));return f!==d?!1:o.every(h=>{const p=i[h],g=c[h];return typeof p=="function"?`${p}`==`${g}`:!Lh(p)||!Lh(g)?p===g:uu(p,g)})}function Bh(i){return i.concat().sort((c,o)=>c.name>o.name?1:-1).map(c=>c.options)}function Ev(i,c){if(i.length!==c.length)return!1;const o=Bh(i),u=Bh(c);return o.every((f,d)=>{const h=u[d];return uu(f,h)})}function fu(i){return typeof i=="number"}function Zo(i){return typeof i=="string"}function pc(i){return typeof i=="boolean"}function qh(i){return Object.prototype.toString.call(i)==="[object Object]"}function $e(i){return Math.abs(i)}function du(i){return Math.sign(i)}function Ts(i,c){return $e(i-c)}function wv(i,c){if(i===0||c===0||$e(i)<=$e(c))return 0;const o=Ts($e(i),$e(c));return $e(o/i)}function _v(i){return Math.round(i*100)/100}function Ds(i){return Rs(i).map(Number)}function el(i){return i[Ys(i)]}function Ys(i){return Math.max(0,i.length-1)}function mu(i,c){return c===Ys(i)}function Yh(i,c=0){return Array.from(Array(i),(o,u)=>c+u)}function Rs(i){return Object.keys(i)}function _p(i,c){return[i,c].reduce((o,u)=>(Rs(u).forEach(f=>{const d=o[f],h=u[f],p=qh(d)&&qh(h);o[f]=p?_p(d,h):h}),o),{})}function Ko(i,c){return typeof c.MouseEvent<"u"&&i instanceof c.MouseEvent}function Tv(i,c){const o={start:u,center:f,end:d};function u(){return 0}function f(g){return d(g)/2}function d(g){return c-g}function h(g,x){return Zo(i)?o[i](g):i(c,g,x)}return{measure:h}}function Us(){let i=[];function c(f,d,h,p={passive:!0}){let g;if("addEventListener"in f)f.addEventListener(d,h,p),g=()=>f.removeEventListener(d,h,p);else{const x=f;x.addListener(h),g=()=>x.removeListener(h)}return i.push(g),u}function o(){i=i.filter(f=>f())}const u={add:c,clear:o};return u}function Av(i,c,o,u){const f=Us(),d=1e3/60;let h=null,p=0,g=0;function x(){f.add(i,"visibilitychange",()=>{i.hidden&&N()})}function v(){w(),f.clear()}function y(D){if(!g)return;h||(h=D,o(),o());const U=D-h;for(h=D,p+=U;p>=d;)o(),p-=d;const X=p/d;u(X),g&&(g=c.requestAnimationFrame(y))}function z(){g||(g=c.requestAnimationFrame(y))}function w(){c.cancelAnimationFrame(g),h=null,p=0,g=0}function N(){h=null,p=0}return{init:x,destroy:v,start:z,stop:w,update:o,render:u}}function Cv(i,c){const o=c==="rtl",u=i==="y",f=u?"y":"x",d=u?"x":"y",h=!u&&o?-1:1,p=v(),g=y();function x(N){const{height:T,width:D}=N;return u?T:D}function v(){return u?"top":o?"right":"left"}function y(){return u?"bottom":o?"left":"right"}function z(N){return N*h}return{scroll:f,cross:d,startEdge:p,endEdge:g,measureSize:x,direction:z}}function ka(i=0,c=0){const o=$e(i-c);function u(x){return xc}function d(x){return u(x)||f(x)}function h(x){return d(x)?u(x)?i:c:x}function p(x){return o?x-o*Math.ceil((x-c)/o):x}return{length:o,max:c,min:i,constrain:h,reachedAny:d,reachedMax:f,reachedMin:u,removeOffset:p}}function Tp(i,c,o){const{constrain:u}=ka(0,i),f=i+1;let d=h(c);function h(z){return o?$e((f+z)%f):u(z)}function p(){return d}function g(z){return d=h(z),y}function x(z){return v().set(p()+z)}function v(){return Tp(i,p(),o)}const y={get:p,set:g,add:x,clone:v};return y}function Mv(i,c,o,u,f,d,h,p,g,x,v,y,z,w,N,T,D,U,X){const{cross:Z,direction:P}=i,$=["INPUT","SELECT","TEXTAREA"],K={passive:!1},G=Us(),ee=Us(),se=ka(50,225).constrain(w.measure(20)),Q={mouse:300,touch:400},ae={mouse:500,touch:600},ye=N?43:25;let Ge=!1,Qe=0,ce=0,k=!1,Y=!1,te=!1,he=!1;function je(I){if(!X)return;function _e(tt){(pc(X)||X(I,tt))&&fe(tt)}const ke=c;G.add(ke,"dragstart",tt=>tt.preventDefault(),K).add(ke,"touchmove",()=>{},K).add(ke,"touchend",()=>{}).add(ke,"touchstart",_e).add(ke,"mousedown",_e).add(ke,"touchcancel",ze).add(ke,"contextmenu",ze).add(ke,"click",Ee,!0)}function S(){G.clear(),ee.clear()}function L(){const I=he?o:c;ee.add(I,"touchmove",oe,K).add(I,"touchend",ze).add(I,"mousemove",oe,K).add(I,"mouseup",ze)}function V(I){const _e=I.nodeName||"";return $.includes(_e)}function J(){return(N?ae:Q)[he?"mouse":"touch"]}function re(I,_e){const ke=y.add(du(I)*-1),tt=v.byDistance(I,!N).distance;return N||$e(I)=2,!(_e&&I.button!==0)&&(V(I.target)||(k=!0,d.pointerDown(I),x.useFriction(0).useDuration(0),f.set(h),L(),Qe=d.readPoint(I),ce=d.readPoint(I,Z),z.emit("pointerDown")))}function oe(I){if(!Ko(I,u)&&I.touches.length>=2)return ze(I);const ke=d.readPoint(I),tt=d.readPoint(I,Z),yt=Ts(ke,Qe),Jt=Ts(tt,ce);if(!Y&&!he&&(!I.cancelable||(Y=yt>Jt,!Y)))return ze(I);const ll=d.pointerMove(I);yt>T&&(te=!0),x.useFriction(.3).useDuration(.75),p.start(),f.add(P(ll)),I.preventDefault()}function ze(I){const ke=v.byDistance(0,!1).index!==y.get(),tt=d.pointerUp(I)*J(),yt=re(P(tt),ke),Jt=wv(tt,yt),ll=ye-10*Jt,Ht=U+Jt/50;Y=!1,k=!1,ee.clear(),x.useDuration(ll).useFriction(Ht),g.distance(yt,!N),he=!1,z.emit("pointerUp")}function Ee(I){te&&(I.stopPropagation(),I.preventDefault(),te=!1)}function at(){return k}return{init:je,destroy:S,pointerDown:at}}function kv(i,c){let u,f;function d(y){return y.timeStamp}function h(y,z){const N=`client${(z||i.scroll)==="x"?"X":"Y"}`;return(Ko(y,c)?y:y.touches[0])[N]}function p(y){return u=y,f=y,h(y)}function g(y){const z=h(y)-h(f),w=d(y)-d(u)>170;return f=y,w&&(u=y),z}function x(y){if(!u||!f)return 0;const z=h(f)-h(u),w=d(y)-d(u),N=d(y)-d(f)>170,T=z/w;return w&&!N&&$e(T)>.1?T:0}return{pointerDown:p,pointerMove:g,pointerUp:x,readPoint:h}}function Ov(){function i(o){const{offsetTop:u,offsetLeft:f,offsetWidth:d,offsetHeight:h}=o;return{top:u,right:f+d,bottom:u+h,left:f,width:d,height:h}}return{measure:i}}function Dv(i){function c(u){return i*(u/100)}return{measure:c}}function Rv(i,c,o,u,f,d,h){const p=[i].concat(u);let g,x,v=[],y=!1;function z(D){return f.measureSize(h.measure(D))}function w(D){if(!d)return;x=z(i),v=u.map(z);function U(X){for(const Z of X){if(y)return;const P=Z.target===i,$=u.indexOf(Z.target),K=P?x:v[$],G=z(P?i:u[$]);if($e(G-K)>=.5){D.reInit(),c.emit("resize");break}}}g=new ResizeObserver(X=>{(pc(d)||d(D,X))&&U(X)}),o.requestAnimationFrame(()=>{p.forEach(X=>g.observe(X))})}function N(){y=!0,g&&g.disconnect()}return{init:w,destroy:N}}function Uv(i,c,o,u,f,d){let h=0,p=0,g=f,x=d,v=i.get(),y=0;function z(){const K=u.get()-i.get(),G=!g;let ee=0;return G?(h=0,o.set(u),i.set(u),ee=K):(o.set(i),h+=K/g,h*=x,v+=h,i.add(h),ee=v-y),p=du(ee),y=v,$}function w(){const K=u.get()-c.get();return $e(K)<.001}function N(){return g}function T(){return p}function D(){return h}function U(){return Z(f)}function X(){return P(d)}function Z(K){return g=K,$}function P(K){return x=K,$}const $={direction:T,duration:N,velocity:D,seek:z,settled:w,useBaseFriction:X,useBaseDuration:U,useFriction:P,useDuration:Z};return $}function Hv(i,c,o,u,f){const d=f.measure(10),h=f.measure(50),p=ka(.1,.99);let g=!1;function x(){return!(g||!i.reachedAny(o.get())||!i.reachedAny(c.get()))}function v(w){if(!x())return;const N=i.reachedMin(c.get())?"min":"max",T=$e(i[N]-c.get()),D=o.get()-c.get(),U=p.constrain(T/h);o.subtract(D*U),!w&&$e(D){const{min:D,max:U}=d,X=d.constrain(N),Z=!T,P=mu(o,T);return Z?U:P||x(D,X)?D:x(U,X)?U:X}).map(N=>parseFloat(N.toFixed(3)))}function z(){if(c<=i+f)return[d.max];if(u==="keepSnaps")return h;const{min:N,max:T}=p;return h.slice(N,T)}return{snapsContained:g,scrollContainLimit:p}}function Bv(i,c,o){const u=c[0],f=o?u-i:el(c);return{limit:ka(f,u)}}function qv(i,c,o,u){const d=c.min+.1,h=c.max+.1,{reachedMin:p,reachedMax:g}=ka(d,h);function x(z){return z===1?g(o.get()):z===-1?p(o.get()):!1}function v(z){if(!x(z))return;const w=i*(z*-1);u.forEach(N=>N.add(w))}return{loop:v}}function Yv(i){const{max:c,length:o}=i;function u(d){const h=d-c;return o?h/-o:0}return{get:u}}function Gv(i,c,o,u,f){const{startEdge:d,endEdge:h}=i,{groupSlides:p}=f,g=y().map(c.measure),x=z(),v=w();function y(){return p(u).map(T=>el(T)[h]-T[0][d]).map($e)}function z(){return u.map(T=>o[d]-T[d]).map(T=>-$e(T))}function w(){return p(x).map(T=>T[0]).map((T,D)=>T+g[D])}return{snaps:x,snapsAligned:v}}function $v(i,c,o,u,f,d){const{groupSlides:h}=f,{min:p,max:g}=u,x=v();function v(){const z=h(d),w=!i||c==="keepSnaps";return o.length===1?[d]:w?z:z.slice(p,g).map((N,T,D)=>{const U=!T,X=mu(D,T);if(U){const Z=el(D[0])+1;return Yh(Z)}if(X){const Z=Ys(d)-el(D)[0]+1;return Yh(Z,el(D)[0])}return N})}return{slideRegistry:x}}function Qv(i,c,o,u,f){const{reachedAny:d,removeOffset:h,constrain:p}=u;function g(N){return N.concat().sort((T,D)=>$e(T)-$e(D))[0]}function x(N){const T=i?h(N):p(N),D=c.map((X,Z)=>({diff:v(X-T,0),index:Z})).sort((X,Z)=>$e(X.diff)-$e(Z.diff)),{index:U}=D[0];return{index:U,distance:T}}function v(N,T){const D=[N,N+o,N-o];if(!i)return N;if(!T)return g(D);const U=D.filter(X=>du(X)===T);return U.length?g(U):el(D)-o}function y(N,T){const D=c[N]-f.get(),U=v(D,T);return{index:N,distance:U}}function z(N,T){const D=f.get()+N,{index:U,distance:X}=x(D),Z=!i&&d(D);if(!T||Z)return{index:U,distance:N};const P=c[U]-X,$=N+v(P,0);return{index:U,distance:$}}return{byDistance:z,byIndex:y,shortcut:v}}function Xv(i,c,o,u,f,d,h){function p(y){const z=y.distance,w=y.index!==c.get();d.add(z),z&&(u.duration()?i.start():(i.update(),i.render(1),i.update())),w&&(o.set(c.get()),c.set(y.index),h.emit("select"))}function g(y,z){const w=f.byDistance(y,z);p(w)}function x(y,z){const w=c.clone().set(y),N=f.byIndex(w.get(),z);p(N)}return{distance:g,index:x}}function Vv(i,c,o,u,f,d,h,p){const g={passive:!0,capture:!0};let x=0;function v(w){if(!p)return;function N(T){if(new Date().getTime()-x>10)return;h.emit("slideFocusStart"),i.scrollLeft=0;const X=o.findIndex(Z=>Z.includes(T));fu(X)&&(f.useDuration(0),u.index(X,0),h.emit("slideFocus"))}d.add(document,"keydown",y,!1),c.forEach((T,D)=>{d.add(T,"focus",U=>{(pc(p)||p(w,U))&&N(D)},g)})}function y(w){w.code==="Tab"&&(x=new Date().getTime())}return{init:v}}function ws(i){let c=i;function o(){return c}function u(g){c=h(g)}function f(g){c+=h(g)}function d(g){c-=h(g)}function h(g){return fu(g)?g:g.get()}return{get:o,set:u,add:f,subtract:d}}function Ap(i,c){const o=i.scroll==="x"?h:p,u=c.style;let f=null,d=!1;function h(z){return`translate3d(${z}px,0px,0px)`}function p(z){return`translate3d(0px,${z}px,0px)`}function g(z){if(d)return;const w=_v(i.direction(z));w!==f&&(u.transform=o(w),f=w)}function x(z){d=!z}function v(){d||(u.transform="",c.getAttribute("style")||c.removeAttribute("style"))}return{clear:v,to:g,toggleActive:x}}function Zv(i,c,o,u,f,d,h,p,g){const v=Ds(f),y=Ds(f).reverse(),z=U().concat(X());function w(G,ee){return G.reduce((se,Q)=>se-f[Q],ee)}function N(G,ee){return G.reduce((se,Q)=>w(se,ee)>0?se.concat([Q]):se,[])}function T(G){return d.map((ee,se)=>({start:ee-u[se]+.5+G,end:ee+c-.5+G}))}function D(G,ee,se){const Q=T(ee);return G.map(ae=>{const ye=se?0:-o,Ge=se?o:0,Qe=se?"end":"start",ce=Q[ae][Qe];return{index:ae,loopPoint:ce,slideLocation:ws(-1),translate:Ap(i,g[ae]),target:()=>p.get()>ce?ye:Ge}})}function U(){const G=h[0],ee=N(y,G);return D(ee,o,!1)}function X(){const G=c-h[0]-1,ee=N(v,G);return D(ee,-o,!0)}function Z(){return z.every(({index:G})=>{const ee=v.filter(se=>se!==G);return w(ee,c)<=.1})}function P(){z.forEach(G=>{const{target:ee,translate:se,slideLocation:Q}=G,ae=ee();ae!==Q.get()&&(se.to(ae),Q.set(ae))})}function $(){z.forEach(G=>G.translate.clear())}return{canLoop:Z,clear:$,loop:P,loopPoints:z}}function Kv(i,c,o){let u,f=!1;function d(g){if(!o)return;function x(v){for(const y of v)if(y.type==="childList"){g.reInit(),c.emit("slidesChanged");break}}u=new MutationObserver(v=>{f||(pc(o)||o(g,v))&&x(v)}),u.observe(i,{childList:!0})}function h(){u&&u.disconnect(),f=!0}return{init:d,destroy:h}}function Jv(i,c,o,u){const f={};let d=null,h=null,p,g=!1;function x(){p=new IntersectionObserver(N=>{g||(N.forEach(T=>{const D=c.indexOf(T.target);f[D]=T}),d=null,h=null,o.emit("slidesInView"))},{root:i.parentElement,threshold:u}),c.forEach(N=>p.observe(N))}function v(){p&&p.disconnect(),g=!0}function y(N){return Rs(f).reduce((T,D)=>{const U=parseInt(D),{isIntersecting:X}=f[U];return(N&&X||!N&&!X)&&T.push(U),T},[])}function z(N=!0){if(N&&d)return d;if(!N&&h)return h;const T=y(N);return N&&(d=T),N||(h=T),T}return{init:x,destroy:v,get:z}}function Wv(i,c,o,u,f,d){const{measureSize:h,startEdge:p,endEdge:g}=i,x=o[0]&&f,v=N(),y=T(),z=o.map(h),w=D();function N(){if(!x)return 0;const X=o[0];return $e(c[p]-X[p])}function T(){if(!x)return 0;const X=d.getComputedStyle(el(u));return parseFloat(X.getPropertyValue(`margin-${g}`))}function D(){return o.map((X,Z,P)=>{const $=!Z,K=mu(P,Z);return $?z[Z]+v:K?z[Z]+y:P[Z+1][p]-X[p]}).map($e)}return{slideSizes:z,slideSizesWithGaps:w,startGap:v,endGap:y}}function Fv(i,c,o,u,f,d,h,p,g){const{startEdge:x,endEdge:v,direction:y}=i,z=fu(o);function w(U,X){return Ds(U).filter(Z=>Z%X===0).map(Z=>U.slice(Z,Z+X))}function N(U){return U.length?Ds(U).reduce((X,Z,P)=>{const $=el(X)||0,K=$===0,G=Z===Ys(U),ee=f[x]-d[$][x],se=f[x]-d[Z][v],Q=!u&&K?y(h):0,ae=!u&&G?y(p):0,ye=$e(se-ae-(ee+Q));return P&&ye>c+g&&X.push(Z),G&&X.push(U.length),X},[]).map((X,Z,P)=>{const $=Math.max(P[Z-1]||0);return U.slice($,X)}):[]}function T(U){return z?w(U,o):N(U)}return{groupSlides:T}}function Iv(i,c,o,u,f,d,h){const{align:p,axis:g,direction:x,startIndex:v,loop:y,duration:z,dragFree:w,dragThreshold:N,inViewThreshold:T,slidesToScroll:D,skipSnaps:U,containScroll:X,watchResize:Z,watchSlides:P,watchDrag:$,watchFocus:K}=d,G=2,ee=Ov(),se=ee.measure(c),Q=o.map(ee.measure),ae=Cv(g,x),ye=ae.measureSize(se),Ge=Dv(ye),Qe=Tv(p,ye),ce=!y&&!!X,k=y||!!X,{slideSizes:Y,slideSizesWithGaps:te,startGap:he,endGap:je}=Wv(ae,se,Q,o,k,f),S=Fv(ae,ye,D,y,se,Q,he,je,G),{snaps:L,snapsAligned:V}=Gv(ae,Qe,se,Q,S),J=-el(L)+el(te),{snapsContained:re,scrollContainLimit:fe}=Lv(ye,J,V,X,G),oe=ce?re:V,{limit:ze}=Bv(J,oe,y),Ee=Tp(Ys(oe),v,y),at=Ee.clone(),Me=Ds(o),I=({dragHandler:pl,scrollBody:kn,scrollBounds:On,options:{loop:al}})=>{al||On.constrain(pl.pointerDown()),kn.seek()},_e=({scrollBody:pl,translate:kn,location:On,offsetLocation:al,previousLocation:pt,scrollLooper:nl,slideLooper:xt,dragHandler:xc,animation:gc,eventHandler:Xs,scrollBounds:Ra,options:{loop:da}},ma)=>{const sl=pl.settled(),Ua=!Ra.shouldConstrain(),Ul=da?sl:sl&&Ua,Vs=Ul&&!xc.pointerDown();Vs&&gc.stop();const Zs=On.get()*ma+pt.get()*(1-ma);al.set(Zs),da&&(nl.loop(pl.direction()),xt.loop()),kn.to(al.get()),Vs&&Xs.emit("settle"),Ul||Xs.emit("scroll")},ke=Av(u,f,()=>I(Mn),pl=>_e(Mn,pl)),tt=.68,yt=oe[Ee.get()],Jt=ws(yt),ll=ws(yt),Ht=ws(yt),Wt=ws(yt),hl=Uv(Jt,Ht,ll,Wt,z,tt),Tn=Qv(y,oe,J,ze,Wt),An=Xv(ke,Ee,at,hl,Tn,Wt,h),dt=Yv(ze),$s=Us(),Qs=Jv(c,o,h,T),{slideRegistry:Cn}=$v(ce,X,oe,fe,S,Me),Da=Vv(i,o,Cn,An,hl,$s,h,K),Mn={ownerDocument:u,ownerWindow:f,eventHandler:h,containerRect:se,slideRects:Q,animation:ke,axis:ae,dragHandler:Mv(ae,i,u,f,Wt,kv(ae,f),Jt,ke,An,hl,Tn,Ee,h,Ge,w,N,U,tt,$),eventStore:$s,percentOfView:Ge,index:Ee,indexPrevious:at,limit:ze,location:Jt,offsetLocation:Ht,previousLocation:ll,options:d,resizeHandler:Rv(c,h,f,o,ae,Z,ee),scrollBody:hl,scrollBounds:Hv(ze,Ht,Wt,hl,Ge),scrollLooper:qv(J,ze,Ht,[Jt,Ht,ll,Wt]),scrollProgress:dt,scrollSnapList:oe.map(dt.get),scrollSnaps:oe,scrollTarget:Tn,scrollTo:An,slideLooper:Zv(ae,ye,J,Y,te,L,oe,Ht,o),slideFocus:Da,slidesHandler:Kv(c,h,P),slidesInView:Qs,slideIndexes:Me,slideRegistry:Cn,slidesToScroll:S,target:Wt,translate:Ap(ae,c)};return Mn}function Pv(){let i={},c;function o(x){c=x}function u(x){return i[x]||[]}function f(x){return u(x).forEach(v=>v(c,x)),g}function d(x,v){return i[x]=u(x).concat([v]),g}function h(x,v){return i[x]=u(x).filter(y=>y!==v),g}function p(){i={}}const g={init:o,emit:f,off:h,on:d,clear:p};return g}const ey={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function ty(i){function c(d,h){return _p(d,h||{})}function o(d){const h=d.breakpoints||{},p=Rs(h).filter(g=>i.matchMedia(g).matches).map(g=>h[g]).reduce((g,x)=>c(g,x),{});return c(d,p)}function u(d){return d.map(h=>Rs(h.breakpoints||{})).reduce((h,p)=>h.concat(p),[]).map(i.matchMedia)}return{mergeOptions:c,optionsAtMedia:o,optionsMediaQueries:u}}function ly(i){let c=[];function o(d,h){return c=h.filter(({options:p})=>i.optionsAtMedia(p).active!==!1),c.forEach(p=>p.init(d,i)),h.reduce((p,g)=>Object.assign(p,{[g.name]:g}),{})}function u(){c=c.filter(d=>d.destroy())}return{init:o,destroy:u}}function uc(i,c,o){const u=i.ownerDocument,f=u.defaultView,d=ty(f),h=ly(d),p=Us(),g=Pv(),{mergeOptions:x,optionsAtMedia:v,optionsMediaQueries:y}=d,{on:z,off:w,emit:N}=g,T=ae;let D=!1,U,X=x(ey,uc.globalOptions),Z=x(X),P=[],$,K,G;function ee(){const{container:Me,slides:I}=Z;K=(Zo(Me)?i.querySelector(Me):Me)||i.children[0];const ke=Zo(I)?K.querySelectorAll(I):I;G=[].slice.call(ke||K.children)}function se(Me){const I=Iv(i,K,G,u,f,Me,g);if(Me.loop&&!I.slideLooper.canLoop()){const _e=Object.assign({},Me,{loop:!1});return se(_e)}return I}function Q(Me,I){D||(X=x(X,Me),Z=v(X),P=I||P,ee(),U=se(Z),y([X,...P.map(({options:_e})=>_e)]).forEach(_e=>p.add(_e,"change",ae)),Z.active&&(U.translate.to(U.location.get()),U.animation.init(),U.slidesInView.init(),U.slideFocus.init(at),U.eventHandler.init(at),U.resizeHandler.init(at),U.slidesHandler.init(at),U.options.loop&&U.slideLooper.loop(),K.offsetParent&&G.length&&U.dragHandler.init(at),$=h.init(at,P)))}function ae(Me,I){const _e=S();ye(),Q(x({startIndex:_e},Me),I),g.emit("reInit")}function ye(){U.dragHandler.destroy(),U.eventStore.clear(),U.translate.clear(),U.slideLooper.clear(),U.resizeHandler.destroy(),U.slidesHandler.destroy(),U.slidesInView.destroy(),U.animation.destroy(),h.destroy(),p.clear()}function Ge(){D||(D=!0,p.clear(),ye(),g.emit("destroy"),g.clear())}function Qe(Me,I,_e){!Z.active||D||(U.scrollBody.useBaseFriction().useDuration(I===!0?0:Z.duration),U.scrollTo.index(Me,_e||0))}function ce(Me){const I=U.index.add(1).get();Qe(I,Me,-1)}function k(Me){const I=U.index.add(-1).get();Qe(I,Me,1)}function Y(){return U.index.add(1).get()!==S()}function te(){return U.index.add(-1).get()!==S()}function he(){return U.scrollSnapList}function je(){return U.scrollProgress.get(U.offsetLocation.get())}function S(){return U.index.get()}function L(){return U.indexPrevious.get()}function V(){return U.slidesInView.get()}function J(){return U.slidesInView.get(!1)}function re(){return $}function fe(){return U}function oe(){return i}function ze(){return K}function Ee(){return G}const at={canScrollNext:Y,canScrollPrev:te,containerNode:ze,internalEngine:fe,destroy:Ge,off:w,on:z,emit:N,plugins:re,previousScrollSnap:L,reInit:T,rootNode:oe,scrollNext:ce,scrollPrev:k,scrollProgress:je,scrollSnapList:he,scrollTo:Qe,selectedScrollSnap:S,slideNodes:Ee,slidesInView:V,slidesNotInView:J};return Q(c,o),setTimeout(()=>g.emit("init"),0),at}uc.globalOptions=void 0;function hu(i={},c=[]){const o=q.useRef(i),u=q.useRef(c),[f,d]=q.useState(),[h,p]=q.useState(),g=q.useCallback(()=>{f&&f.reInit(o.current,u.current)},[f]);return q.useEffect(()=>{uu(o.current,i)||(o.current=i,g())},[i,g]),q.useEffect(()=>{Ev(u.current,c)||(u.current=c,g())},[c,g]),q.useEffect(()=>{if(zv()&&h){uc.globalOptions=hu.globalOptions;const x=uc(h,o.current,u.current);return d(x),()=>x.destroy()}else d(void 0)},[h,d]),[p,f]}hu.globalOptions=void 0;const pu=4500;function xu({box:i,interval:c,advance:o}){const u=q.useRef(o);u.current=o,q.useEffect(()=>{const f=i.current;if(!f||c<=0||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let d=0,h=!0;const p=()=>{d+=1},g=()=>{d=Math.max(0,d-1)},x=window.setInterval(()=>{d>0||document.hidden||!h||u.current()||window.clearInterval(x)},c),v=new IntersectionObserver(([T])=>{h=T.isIntersecting},{threshold:.25});v.observe(f);const y=window.matchMedia("(hover: hover) and (pointer: fine)").matches;y&&(f.addEventListener("pointerenter",p),f.addEventListener("pointerleave",g));let z=!1;const w=T=>{const D=T.target;!(D instanceof Element)||!D.matches(":focus-visible")||z||(z=!0,p())},N=()=>{z&&(z=!1,g())};return f.addEventListener("focusin",w),f.addEventListener("focusout",N),f.addEventListener("pointerdown",p,!0),window.addEventListener("pointerup",g,!0),window.addEventListener("pointercancel",g,!0),()=>{window.clearInterval(x),v.disconnect(),y&&(f.removeEventListener("pointerenter",p),f.removeEventListener("pointerleave",g)),f.removeEventListener("focusin",w),f.removeEventListener("focusout",N),f.removeEventListener("pointerdown",p,!0),window.removeEventListener("pointerup",g,!0),window.removeEventListener("pointercancel",g,!0)}},[i,c])}function Cp(i,c=.85){if(!i)return!1;const o=i.scrollWidth-i.clientWidth;if(o<=8||i.scrollLeft>=o-8)return!1;const u=window.matchMedia("(prefers-reduced-motion: reduce)").matches;return i.scrollBy({left:i.clientWidth*c,behavior:u?"auto":"smooth"}),!0}function gu({label:i,children:c,align:o="start",loop:u=!1,dots:f=!0,arrows:d="header",gap:h=1,autoplay:p=pu,onSelect:g,onReady:x,className:v}){const y=p===!1?0:p,[z,w]=hu({align:o,loop:u,containScroll:"trimSnaps",watchDrag:!0}),[N,T]=q.useState([]),[D,U]=q.useState(0),[X,Z]=q.useState(!1),[P,$]=q.useState(!1),K=q.useRef(null),G=q.useId();q.useEffect(()=>{var Y;if(!w)return;const ce=()=>{U(w.selectedScrollSnap()),Z(w.canScrollPrev()),$(w.canScrollNext())},k=()=>{T(w.scrollSnapList()),ce()};return k(),w.on("select",ce),w.on("reInit",k),(Y=K.current)==null||Y.setAttribute("data-slider","on"),()=>{w.off("select",ce),w.off("reInit",k)}},[w]),q.useEffect(()=>{if(!w)return;const ce=K.current,k=()=>ce==null?void 0:ce.setAttribute("data-dragging","true"),Y=()=>ce==null?void 0:ce.removeAttribute("data-dragging");return w.on("pointerDown",k),w.on("pointerUp",Y),()=>{w.off("pointerDown",k),w.off("pointerUp",Y)}},[w]),xu({box:K,interval:y,advance:()=>!w||w.scrollSnapList().length<=1?!0:w.canScrollNext()?(w.scrollNext(),!0):!1});const ee=q.useCallback(ce=>w==null?void 0:w.scrollTo(ce),[w]),se=q.useRef(g);se.current=g;const Q=q.useRef(x);Q.current=x,q.useEffect(()=>{var k;if(!w)return;const ce=()=>{var Y;return(Y=se.current)==null?void 0:Y.call(se,w.selectedScrollSnap())};return ce(),w.on("select",ce),w.on("reInit",ce),(k=Q.current)==null||k.call(Q,{scrollTo:Y=>w.scrollTo(Y)}),()=>{w.off("select",ce),w.off("reInit",ce)}},[w]);const ae=q.useCallback(()=>w==null?void 0:w.scrollPrev(),[w]),ye=q.useCallback(()=>w==null?void 0:w.scrollNext(),[w]),Ge=N.length>1,Qe=f&&Ge&&N.length<=12;return n.jsxs("div",{className:v,children:[d==="header"&&Ge&&n.jsxs("div",{className:"mb-3 flex justify-end gap-2",children:[n.jsx(Gh,{dir:"prev",onClick:ae,disabled:!u&&!X,label:i}),n.jsx(Gh,{dir:"next",onClick:ye,disabled:!u&&!P,label:i})]}),n.jsxs("div",{className:"relative",children:[n.jsx("div",{ref:ce=>{K.current=ce,z(ce)},className:"slider-viewport",role:"group","aria-roledescription":"캐러셀","aria-label":i,tabIndex:0,onKeyDown:ce=>{ce.key==="ArrowLeft"&&(ce.preventDefault(),ae()),ce.key==="ArrowRight"&&(ce.preventDefault(),ye())},children:n.jsx("div",{className:"slider-track",style:{gap:`${h}rem`},id:G,children:c})}),d==="overlay"&&Ge&&n.jsxs(n.Fragment,{children:[n.jsx($h,{dir:"prev",onClick:ae,disabled:!u&&!X,label:i}),n.jsx($h,{dir:"next",onClick:ye,disabled:!u&&!P,label:i})]})]}),Ge&&n.jsxs("div",{className:"mt-4 flex items-center justify-center gap-3",children:[Qe&&n.jsx("ul",{className:"flex items-center gap-1.5",children:N.map((ce,k)=>n.jsx("li",{children:n.jsx("button",{type:"button",onClick:()=>ee(k),"aria-label":`${k+1}번째로`,"aria-current":k===D,"aria-controls":G,className:`h-1.5 rounded-full transition-all ${k===D?"w-6 bg-current opacity-70":"w-1.5 bg-current opacity-20 hover:opacity-45"}`})},k))}),n.jsxs("span",{className:"text-current/55 text-[length:var(--fs-xs)] tabular-nums",children:[D+1," / ",N.length]})]})]})}function Mp({basis:i,children:c}){return n.jsx("div",{className:`min-w-0 shrink-0 grow-0 ${i}`,"aria-roledescription":"슬라이드",children:c})}function Gh({dir:i,onClick:c,disabled:o,label:u}){const f=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:c,disabled:o,"aria-label":`${u} ${i==="prev"?"이전":"다음"}`,className:"tap border-line flex items-center justify-center rounded-full border transition-opacity hover:opacity-70 disabled:opacity-25",children:n.jsx(f,{className:"size-5"})})}function $h({dir:i,onClick:c,disabled:o,label:u}){const f=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:c,disabled:o,"aria-label":`${u} ${i==="prev"?"이전":"다음"}`,className:`tap absolute top-1/2 z-10 hidden -translate-y-1/2 items-center justify-center rounded-full bg-black/55 text-white backdrop-blur transition hover:bg-black/75 disabled:opacity-0 sm:flex ${i==="prev"?"left-2":"right-2"}`,children:n.jsx(f,{className:"size-5"})})}function bu({children:i,className:c="",as:o="div"}){return n.jsx(o,{className:`panel ${c}`,children:i})}function vu({children:i}){return n.jsx("span",{className:"border-line tpl-border inline-flex items-center gap-1 rounded-md border bg-current/5 px-2.5 py-1 text-[length:var(--fs-xs)]",children:i})}function kp({label:i,value:c,note:o}){return n.jsxs("div",{className:"divide-line flex flex-col gap-1 py-3 sm:flex-row sm:items-baseline sm:justify-between sm:gap-6",children:[n.jsx("dt",{className:"text-muted shrink-0 text-[length:var(--fs-sm)] font-medium sm:w-40",children:i}),n.jsxs("dd",{className:"flex-1 text-[length:var(--fs-sm)] font-semibold sm:text-right",children:[c,o&&n.jsx("span",{className:"text-muted mt-0.5 block font-normal",children:o})]})]})}function Qh({href:i,children:c,variant:o="solid",external:u,icon:f}){const d=o==="solid";return n.jsxs("a",{href:i,...u?{target:"_blank",rel:"noopener noreferrer"}:{},className:`tap inline-flex items-center justify-center gap-2 rounded-lg px-4 text-[length:var(--fs-sm)] font-semibold transition-opacity hover:opacity-85 ${d?"":"border-line tpl-border border bg-current/5"}`,style:d?{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"}:void 0,children:[f,n.jsx("span",{children:c}),u&&n.jsx(Sn,{className:"size-4 shrink-0"})]})}function ay(){const i=le(),{narrative:c,place:o}=i,u=U0(i,"intro"),f=u.length>0?u:c.about;if(f.length===0)return null;const d=lu(i).find(p=>!p.isPrimary),h=c.heroSubline??`${o.name} 소개`;return n.jsx(vt,{id:"about",bare:!0,title:h,children:n.jsxs("div",{className:"grid grid-cols-1 items-center gap-8 lg:grid-cols-12 lg:gap-14",children:[d&&n.jsxs("figure",{className:"lg:col-span-7",children:[n.jsx("div",{className:"tpl-border border-line relative aspect-4/3 max-h-[26rem] overflow-hidden rounded-xl border lg:aspect-3/2",children:n.jsx("img",{src:d.url,alt:d.alt,loading:"lazy",decoding:"async",width:d.width,height:d.height,className:"size-full object-cover"})}),d.caption&&n.jsx("figcaption",{className:"text-muted mt-2 text-[length:var(--fs-xs)]",children:d.caption})]}),n.jsxs("div",{className:d?"lg:col-span-5":"lg:col-span-12",children:[n.jsxs("h2",{id:"about-heading",className:"h2 mb-6 flex items-center gap-2.5",children:[n.jsx("i",{"aria-hidden":!0,className:"h-[1em] w-[3px] shrink-0 bg-current opacity-25"}),n.jsx("span",{className:"min-w-0",children:h})]}),n.jsx("div",{className:"measure space-y-4 text-[length:var(--fs-lead)] leading-[1.8]",children:f.map((p,g)=>n.jsx("p",{children:p},g))})]})]})})}const Xh=new Set(["체크인 시간","체크아웃 시간","취소·환불 규정","취사 가능","반려동물 동반","흡연 가능","인원 추가 요금"]);function ny(){const i=le(),c=dc(i),o=i.facts.filter(d=>d.scope==="place"&&!c.some(h=>h.label===d.label)).length;if(c.length===0)return null;const u=c.filter(d=>Xh.has(d.label)),f=c.filter(d=>!Xh.has(d.label));return n.jsx(vt,{id:"info",tone:"alt",title:"이용안내 및 예약",lead:"방문 전 확인이 필요한 운영 규정과 시설 안내입니다.",footnote:n.jsxs("span",{className:"flex flex-col gap-1 sm:flex-row sm:justify-between",children:[n.jsx("span",{children:o>0?`확인 중인 항목 ${o}개는 표시하지 않았습니다. 필요하시면 전화로 문의해 주세요.`:"모든 항목이 사업자 확인을 거쳤습니다."}),n.jsxs("span",{className:"font-medium",children:[nu(i.site.updatedAt)," 기준"]})]}),children:n.jsxs("div",{className:"space-y-8",children:[u.length>0&&n.jsx(Vh,{title:"예약 전 확인",rows:u,emphasis:!0}),f.length>0&&n.jsx(Vh,{title:"시설 · 편의",rows:f}),n.jsx(sy,{})]})})}function Vh({title:i,rows:c,emphasis:o}){return n.jsxs("section",{children:[n.jsxs("h3",{className:"border-line mb-3 flex items-center gap-2 border-b pb-2 text-[length:var(--fs-sm)] font-bold",children:[o&&n.jsx("i",{"aria-hidden":!0,className:"h-[1em] w-[3px] shrink-0",style:{backgroundColor:"var(--color-accent)"}}),n.jsx("span",{children:i})]}),n.jsx("dl",{className:"divide-line divide-y",children:c.map(u=>n.jsxs("div",{className:"flex flex-col gap-1 py-3.5 sm:flex-row sm:items-baseline sm:gap-6",children:[n.jsx("dt",{className:"text-muted text-[length:var(--fs-sm)] sm:w-40 sm:shrink-0",children:u.label}),n.jsxs("dd",{className:"measure text-[length:var(--fs-sm)] font-semibold",children:[u.value,u.note&&n.jsx("span",{className:"text-muted mt-0.5 block font-normal",children:u.note})]})]},u.label))})]})}function sy(){const i=le(),c=Ze(i),o=i.place.phone;return!o&&c.length===0?null:n.jsxs("div",{className:"border-line flex flex-col gap-3 border-t pt-6 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs("p",{className:"text-[length:var(--fs-sm)] font-semibold",children:[i.place.name," 예약은 아래로 받습니다."]}),n.jsxs("div",{className:"flex flex-wrap gap-2",children:[o&&n.jsxs("a",{href:`tel:${o}`,className:"tap border-line tpl-border inline-flex items-center justify-center gap-1.5 rounded-lg border px-4 text-[length:var(--fs-sm)] font-semibold",children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:o})]}),c.map(u=>n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center justify-center rounded-lg px-6 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:ht(u)},u.url))]})]})}function iy(){const i=le(),c=ft(i),o=fl(i),u=Ze(i)[0];return o.length===0?null:n.jsx(vt,{id:"units",title:Ye(i,c.path,`${c.label} 안내`),children:n.jsx("ul",{className:"mt-2 flex flex-col gap-14 lg:gap-20",children:o.map((f,d)=>n.jsxs("li",{className:"grid items-center gap-7 lg:grid-cols-12 lg:gap-12",children:[n.jsxs("div",{className:`lg:col-span-6 ${d%2===1?"lg:order-2":""}`,children:[f.images[0]&&n.jsx("div",{className:"relative aspect-16/10 rounded-lg overflow-hidden",children:n.jsx("img",{src:f.images[0].url,alt:f.images[0].alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})}),f.images.length>1&&n.jsx("ul",{className:"mt-2 grid grid-cols-3 gap-2",children:f.images.slice(1,4).map(h=>n.jsx("li",{className:"relative aspect-16/10 rounded-md overflow-hidden",children:n.jsx("img",{src:h.url,alt:h.alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})},h.mediaId))})]}),n.jsxs("div",{className:`lg:col-span-6 ${d%2===1?"lg:order-1":""}`,children:[n.jsx("h3",{className:"h2",children:f.name}),f.intro&&n.jsx("p",{className:"measure mt-3 text-[length:var(--fs-body)] leading-relaxed opacity-80",children:f.intro}),f.chips.length>0&&n.jsx("ul",{className:"mt-4 flex flex-wrap items-center gap-1.5",children:f.chips.map(h=>n.jsx("li",{children:n.jsxs(vu,{children:[n.jsx("span",{className:"text-muted",children:h.label}),n.jsx("span",{className:"font-medium",children:h.value})]})},h.label))}),n.jsxs("div",{className:"mt-5 flex flex-wrap gap-2",children:[u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex flex-1 items-center justify-center rounded-lg px-6 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:ht(u,f.name)}),i.place.phone&&n.jsxs("a",{href:`tel:${i.place.phone}`,className:"tap border-line tpl-border inline-flex items-center justify-center gap-1.5 rounded-lg border px-4 text-[length:var(--fs-sm)] font-semibold",children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:"전화"})]})]}),f.rows.length>0&&n.jsxs("details",{className:"group border-line mt-4 border-t pt-2",children:[n.jsxs("summary",{className:"tap flex cursor-pointer list-none items-center justify-between gap-2 text-[length:var(--fs-sm)] font-semibold",children:[n.jsxs("span",{children:[f.name," 구성 자세히"]}),n.jsx(fc,{className:"size-4 shrink-0 transition-transform group-open:rotate-180"})]}),n.jsx("dl",{className:"divide-line border-line divide-y border-t",children:f.rows.map(h=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2.5 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted shrink-0",children:h.label}),n.jsx("dd",{className:"text-right font-semibold",children:h.value})]},h.label))})]})]})]},f.unitId))})})}function cy(){const i=le(),c=ft(i),o=fl(i),u=Ze(i)[0],[f,d]=q.useState(0);return o.length===0?null:n.jsxs(vt,{id:"units",title:Ye(i,c.path,`${c.label} 안내`),children:[n.jsx("div",{className:"border-line mb-6 flex gap-1 border-b",role:"tablist","aria-label":c.label,children:o.map((h,p)=>n.jsx("button",{type:"button",role:"tab","aria-selected":p===f,"aria-controls":`unit-panel-${h.slug}`,onClick:()=>d(p),className:`tap -mb-px border-b-2 px-5 text-[length:var(--fs-sm)] font-bold transition-colors ${p===f?"opacity-100":"border-transparent opacity-50 hover:opacity-80"}`,style:p===f?{borderColor:"var(--color-brand)"}:void 0,children:h.name},h.unitId))}),o.map((h,p)=>n.jsxs("div",{id:`unit-panel-${h.slug}`,role:"tabpanel",hidden:p!==f,className:"grid gap-6 lg:grid-cols-12 lg:gap-10",children:[n.jsxs("div",{className:"lg:col-span-7",children:[h.images[0]&&n.jsx("div",{className:"relative aspect-16/10 overflow-hidden rounded-lg",children:n.jsx("img",{src:h.images[0].url,alt:h.images[0].alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})}),h.images.length>1&&n.jsx("ul",{className:"mt-2 grid grid-cols-3 gap-2",children:h.images.slice(1,4).map(g=>n.jsx("li",{className:"relative aspect-16/10 overflow-hidden rounded-md",children:n.jsx("img",{src:g.url,alt:g.alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})},g.mediaId))})]}),n.jsxs("div",{className:"lg:col-span-5",children:[n.jsx("h3",{className:"h3",children:h.name}),h.intro&&n.jsx("p",{className:"mt-2 text-[length:var(--fs-sm)] leading-relaxed opacity-75",children:h.intro}),h.chips.length>0&&n.jsx("ul",{className:"mt-4 flex flex-wrap items-center gap-1.5",children:h.chips.map(g=>n.jsx("li",{children:n.jsxs(vu,{children:[n.jsx("span",{className:"text-muted",children:g.label}),n.jsx("span",{className:"font-medium",children:g.value})]})},g.label))}),h.rows.length>0&&n.jsx("dl",{className:"divide-line border-line mt-4 divide-y border-t",children:h.rows.map(g=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted shrink-0",children:g.label}),n.jsx("dd",{className:"text-right font-semibold",children:g.value})]},g.label))}),n.jsxs("div",{className:"mt-5 flex gap-2",children:[u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap flex flex-1 items-center justify-center rounded-lg px-6 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:ht(u,h.name)}),i.place.phone&&n.jsxs("a",{href:`tel:${i.place.phone}`,className:"tap border-line tpl-border flex items-center justify-center gap-1.5 rounded-lg border px-4 text-[length:var(--fs-sm)] font-semibold",children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:"전화"})]})]})]})]},h.unitId))]})}function ry(){const i=le(),c=ft(i),o=fl(i),u=Ze(i)[0];if(o.length===0)return null;const f=o.length===1?"grid-cols-1 max-w-2xl mx-auto":o.length===2?"grid-cols-1 sm:grid-cols-2":"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",d=Kt(i,"info")?[]:dc(i);return n.jsx("section",{id:"units","aria-labelledby":"units-heading",className:"border-line paper w-full border-b",style:{backgroundColor:"var(--tpl-surface, #fff)",paddingBlock:"calc(var(--section-space) * 1.4)"},children:n.jsxs("div",{className:"shell",children:[n.jsx(iu,{id:"units",title:Ye(i,c.path,`${c.label} 안내`)}),n.jsx("ul",{className:`grid gap-x-8 gap-y-14 lg:gap-x-12 ${f}`,children:o.map(h=>n.jsxs("li",{className:"flex min-w-0 flex-col",children:[h.images[0]&&n.jsx("div",{className:"relative aspect-4/3 w-full overflow-hidden",children:n.jsx("img",{src:h.images[0].url,alt:h.images[0].alt,loading:"lazy",decoding:"async",className:"size-full object-cover object-center"})}),n.jsx("h3",{className:"serif mt-6",style:{fontSize:"var(--fs-h3)",fontWeight:300,letterSpacing:"0.04em"},children:h.name}),h.intro&&n.jsx("p",{className:"text-muted mt-3 line-clamp-2 text-[length:var(--fs-sm)] font-light leading-loose",children:h.intro}),h.chips.length>0&&n.jsx("ul",{className:"text-muted mt-3 flex flex-wrap items-center gap-x-4 gap-y-1 text-[length:var(--fs-xs)] font-light",children:h.chips.map(p=>n.jsxs("li",{children:[p.label," ",p.value]},p.label))}),(h.rows.length>0||h.images.length>1)&&n.jsxs("details",{className:"border-line mt-5 border-t",children:[n.jsx("summary",{className:"tap flex cursor-pointer list-none items-center text-[length:var(--fs-sm)] font-light opacity-70 marker:content-none [&::-webkit-details-marker]:hidden",children:"자세히 보기"}),n.jsxs("div",{className:"space-y-6 pb-2",children:[h.rows.length>0&&n.jsx("dl",{className:"divide-line divide-y",children:h.rows.map(p=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2.5 text-[length:var(--fs-sm)] font-light",children:[n.jsx("dt",{className:"text-muted shrink-0",children:p.label}),n.jsx("dd",{className:"text-right",children:p.value})]},p.label))}),h.images.length>1&&n.jsx("ul",{className:"grid grid-cols-2 gap-3",children:h.images.slice(1).map(p=>n.jsx("li",{className:"relative aspect-4/3 overflow-hidden",children:n.jsx("img",{src:p.url,alt:p.alt,loading:"lazy",decoding:"async",className:"size-full object-cover object-center"})},p.mediaId))})]})]})]},h.unitId))}),d.length>0&&n.jsx("dl",{className:"divide-line border-line mx-auto mt-16 max-w-2xl divide-y border-t",children:d.map(h=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-3 text-[length:var(--fs-sm)] font-light",children:[n.jsx("dt",{className:"text-muted shrink-0",children:h.label}),n.jsx("dd",{className:"text-right",children:h.value})]},h.label))}),(u||i.place.phone)&&n.jsxs("div",{className:"mt-14 flex flex-wrap items-center justify-center gap-4",children:[u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap border-line inline-flex items-center justify-center border px-9 text-[length:var(--fs-sm)] font-light tracking-[0.14em] transition-opacity hover:opacity-70",children:ht(u)}),i.place.phone&&n.jsx("a",{href:`tel:${i.place.phone}`,className:"tap border-line inline-flex items-center justify-center border px-9 text-[length:var(--fs-sm)] font-light tabular-nums tracking-[0.08em] transition-opacity hover:opacity-70",children:i.place.phone})]})]})})}function oy(){const i=le(),c=ft(i),o=fl(i),u=Ze(i)[0];return o.length===0?null:n.jsxs("section",{id:"units","data-oasi":!0,"aria-labelledby":"units-heading",className:"pt-[var(--oasi-gap)]",children:[n.jsx(cu,{id:"units",title:Ye(i,c.path,`${c.label} ${o.length}개 안내`)}),n.jsx("ul",{className:"space-y-20 lg:space-y-28",children:o.map(f=>n.jsxs("li",{children:[f.images[0]&&n.jsxs("figure",{className:"relative mx-auto w-full max-w-[34rem]",children:[n.jsx("img",{src:f.images[0].url,alt:f.images[0].alt,loading:"lazy",decoding:"async",className:"block h-[clamp(15rem,24vw,21rem)] w-full object-cover"}),n.jsx("figcaption",{className:"text-muted absolute left-full top-0 ml-5 hidden max-h-full overflow-hidden text-ellipsis whitespace-nowrap text-[length:var(--fs-xs)] tracking-[0.14em] xl:block",style:{writingMode:"vertical-rl"},children:f.name})]}),n.jsx("h3",{className:"mt-8 text-[length:var(--fs-sm)] font-normal tracking-[0.08em]",children:f.name}),f.chips.length>0&&n.jsx("p",{className:"text-muted mt-2 text-[length:var(--fs-xs)] leading-[1.9]",children:f.chips.map(d=>`${d.label} ${d.value}`).join(" · ")}),f.intro&&n.jsx("p",{className:"measure mt-4 text-[length:var(--fs-xs)] leading-[1.9]",children:f.intro}),f.rows.length>0&&n.jsx("dl",{className:"divide-line border-line mt-6 divide-y border-t text-[length:var(--fs-xs)]",children:f.rows.map(d=>n.jsxs("div",{className:"flex items-baseline justify-between gap-6 py-2.5",children:[n.jsx("dt",{className:"text-muted shrink-0",children:d.label}),n.jsx("dd",{className:"text-right",children:d.value})]},d.label))}),f.images.length>1&&n.jsx("ul",{className:"mx-auto mt-6 grid w-full max-w-[34rem] grid-cols-2 gap-2",children:f.images.slice(1).map(d=>n.jsx("li",{children:n.jsx("img",{src:d.url,alt:d.alt,loading:"lazy",decoding:"async",className:"block aspect-[4/3] w-full object-cover"})},d.mediaId))}),(u||i.place.phone)&&n.jsxs("p",{className:"mt-6 flex flex-wrap items-center gap-x-8 text-[length:var(--fs-sm)]",children:[u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center underline underline-offset-[6px]",style:{color:"var(--color-brand)"},children:ht(u)}),i.place.phone&&n.jsx("a",{href:`tel:${i.place.phone}`,className:"tap text-muted inline-flex items-center underline underline-offset-[6px]",children:i.place.phone})]})]},f.unitId))})]})}function uy(){const i=le(),c=ft(i),o=fl(i);return o.length===0?null:n.jsx("section",{id:"units","aria-labelledby":"units-heading",className:"w-full",style:{paddingBlock:"var(--section-space)",backgroundColor:"var(--tpl-bg)"},children:n.jsxs("div",{className:"shell",children:[n.jsx(ru,{id:"units",title:Ye(i,c.path,`${c.label} ${o.length}개 안내`)}),n.jsx("ul",{className:"space-y-16 sm:space-y-24",children:o.map(u=>n.jsxs("li",{className:"grid grid-cols-1 gap-6 lg:grid-cols-12 lg:gap-10",children:[n.jsxs("div",{className:"min-w-0 lg:col-span-7",children:[u.images[0]&&n.jsx("img",{src:u.images[0].url,alt:u.images[0].alt,loading:"lazy",decoding:"async",width:u.images[0].width,height:u.images[0].height,className:"block h-auto w-full"}),u.images.length>1&&n.jsx("ul",{className:"mt-2 grid grid-cols-2 gap-2",children:u.images.slice(1).map(f=>n.jsx("li",{children:n.jsx("img",{src:f.url,alt:f.alt,loading:"lazy",decoding:"async",width:f.width,height:f.height,className:"block h-auto w-full"})},f.mediaId))})]}),n.jsxs("div",{className:"min-w-0 lg:col-span-5",children:[n.jsx("h3",{className:"serif min-w-0 break-keep font-extrabold",style:{fontSize:"var(--fs-h3)",letterSpacing:"0.02em",lineHeight:1.35},children:u.name}),u.chips.length>0&&n.jsx("dl",{className:"mt-4 space-y-1.5",children:u.chips.map(f=>n.jsxs("div",{className:"flex gap-3 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted w-20 shrink-0",children:f.label}),n.jsx("dd",{className:"min-w-0 font-medium",children:f.value})]},f.label))}),u.intro&&n.jsx("p",{className:"text-muted measure mt-5 text-[length:var(--fs-sm)]",style:{lineHeight:1.8},children:u.intro})]})]},u.unitId))})]})})}function fy(){const i=le(),c=ft(i),o=fl(i),u=Ze(i)[0];return o.length===0?null:n.jsx("section",{id:"units","aria-labelledby":"units-heading","data-pastel":"own",className:"w-full",style:{backgroundColor:"var(--tpl-surface, #fff)",paddingBlock:"var(--section-space)"},children:n.jsxs("div",{className:"shell",children:[n.jsx(ou,{id:"units",title:Ye(i,c.path,`${c.label} ${o.length}개 안내`)}),n.jsx("ul",{className:"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:gap-8",children:o.map((f,d)=>n.jsxs("li",{className:"flex flex-col overflow-hidden p-4 sm:p-5",style:{backgroundColor:d%2===0?"var(--pastel-1)":"var(--pastel-2)",borderRadius:"calc(var(--tpl-radius, 0.75rem) * 1.35)"},children:[f.images[0]&&n.jsx("div",{className:"relative aspect-16/10 overflow-hidden",style:{borderRadius:"var(--tpl-radius, 0.75rem)"},children:n.jsx("img",{src:f.images[0].url,alt:f.images[0].alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})}),n.jsxs("div",{className:"flex flex-1 flex-col gap-3 px-1 pt-4",children:[n.jsx("div",{className:"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-1",children:n.jsx("h3",{className:"h3",style:{fontWeight:800},children:f.name})}),f.chips.length>0&&n.jsx("ul",{className:"flex flex-wrap items-center gap-1.5",children:f.chips.map(h=>n.jsxs("li",{className:"inline-flex items-center gap-1 rounded-full px-3 py-1 text-[length:var(--fs-xs)]",style:{backgroundColor:"color-mix(in srgb, var(--tpl-surface, #fff) 70%, transparent)"},children:[n.jsx("span",{className:"opacity-60",children:h.label}),n.jsx("span",{className:"font-bold",children:h.value})]},h.label))}),f.intro&&n.jsx("p",{className:"text-[length:var(--fs-sm)] leading-relaxed opacity-75",children:f.intro})]}),(u||i.place.phone)&&n.jsxs("div",{className:"mt-4 flex gap-2 px-1",children:[u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap flex flex-1 items-center justify-center rounded-full text-[length:var(--fs-sm)] font-extrabold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--pastel-ink)",color:"var(--tpl-bg, #fff)"},children:ht(u)}),i.place.phone&&n.jsxs("a",{href:`tel:${i.place.phone}`,className:"tap flex items-center justify-center gap-1.5 rounded-full px-5 text-[length:var(--fs-sm)] font-bold",style:{backgroundColor:"color-mix(in srgb, var(--tpl-surface, #fff) 75%, transparent)"},children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:"전화"})]})]}),(f.rows.length>0||f.images.length>1)&&n.jsxs("details",{className:"group mt-3 px-1",children:[n.jsxs("summary",{className:"tap flex cursor-pointer list-none items-center justify-between gap-2 text-[length:var(--fs-sm)] font-bold marker:content-none [&::-webkit-details-marker]:hidden",children:[n.jsxs("span",{children:[f.name," 자세히"]}),n.jsx(fc,{className:"size-4 shrink-0 transition-transform group-open:rotate-180"})]}),n.jsxs("div",{className:"space-y-4 pb-1",children:[f.rows.length>0&&n.jsx("dl",{className:"divide-line divide-y",children:f.rows.map(h=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2.5 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"shrink-0 opacity-60",children:h.label}),n.jsx("dd",{className:"text-right font-bold",children:h.value})]},h.label))}),f.images.length>1&&n.jsx("ul",{className:"grid grid-cols-2 gap-2",children:f.images.slice(1).map(h=>n.jsx("li",{className:"relative aspect-4/3 overflow-hidden",style:{borderRadius:"calc(var(--tpl-radius, 0.75rem) * 0.7)"},children:n.jsx("img",{src:h.url,alt:h.alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})},h.mediaId))})]})]})]},f.unitId))})]})})}function dy(){const i=le(),c=fl(i),o=ft(i),u=Ze(i)[0];return c.length===0?null:n.jsxs("section",{id:"units","aria-labelledby":"units-heading",className:"border-line w-full border-b",style:{backgroundColor:"var(--tpl-surface)",backgroundImage:Os,paddingBlock:"var(--section-space)"},children:[n.jsx("div",{className:"shell",children:n.jsx(au,{id:"units",title:Ye(i,o.path,`${o.label} ${c.length}개 안내`)})}),c.map((f,d)=>n.jsx(my,{unit:f,no:String(d+1).padStart(2,"0"),dark:d%2===1,booking:u,phone:i.place.phone},f.unitId))]})}function my({unit:i,no:c,dark:o,booking:u,phone:f}){return n.jsx("article",{className:"w-full",style:o?{backgroundColor:"var(--tpl-inverse)",color:"var(--tpl-bg)",backgroundImage:Os}:void 0,children:n.jsxs("div",{className:"shell grid grid-cols-12 gap-y-6 py-10 xl:gap-x-10 xl:py-16",children:[n.jsxs("div",{className:"col-span-12 xl:col-span-5 xl:pr-8",children:[n.jsxs("div",{className:"relative",children:[n.jsx("span",{"aria-hidden":!0,className:"serif pointer-events-none absolute -top-1 left-0 select-none leading-none tabular-nums",style:{fontSize:"clamp(3rem, 8vw, 6rem)",fontWeight:800,opacity:.1},children:c}),n.jsx("h3",{className:"serif relative pt-7 xl:pt-12",style:{fontSize:"clamp(1.5rem, 3vw, 2.25rem)",fontWeight:800,lineHeight:1.1,letterSpacing:"-0.02em"},children:i.name})]}),i.intro&&n.jsx("p",{className:"measure mt-4 font-serif text-[length:var(--fs-body)] leading-relaxed opacity-85",children:i.intro}),i.rows.length>0&&n.jsx("dl",{className:"border-line mt-6 border-t",children:i.rows.map(d=>n.jsxs("div",{className:"border-line flex items-baseline justify-between gap-6 border-b py-2.5 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted shrink-0",children:d.label}),n.jsx("dd",{className:"text-right font-semibold",children:d.value})]},d.label))}),(u||f)&&n.jsxs("div",{className:"mt-6 flex flex-wrap items-center gap-x-6 gap-y-1 text-[length:var(--fs-sm)] font-bold",children:[u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center underline underline-offset-4",children:ht(u)}),f&&n.jsx("a",{href:`tel:${f}`,className:"tap inline-flex items-center underline underline-offset-4",children:f})]})]}),n.jsxs("div",{className:"col-span-12 xl:col-span-7 xl:-ml-10",children:[i.images[0]&&n.jsx("figure",{className:"w-full xl:w-[64%]",children:n.jsx("img",{src:i.images[0].url,alt:i.images[0].alt,loading:"lazy",decoding:"async",width:i.images[0].width,height:i.images[0].height,className:"w-full object-cover",style:{aspectRatio:"4 / 5"}})}),i.images[1]&&n.jsx("figure",{className:"mt-3 w-full xl:-mt-24 xl:ml-auto xl:w-[50%]",children:n.jsx("img",{src:i.images[1].url,alt:i.images[1].alt,loading:"lazy",decoding:"async",width:i.images[1].width,height:i.images[1].height,className:"w-full object-cover",style:{aspectRatio:"4 / 3"}})})]}),i.images.length>2&&n.jsx("ul",{className:"col-span-12 grid grid-cols-3 gap-2 xl:grid-cols-6",children:i.images.slice(2).map(d=>n.jsx("li",{children:n.jsx("img",{src:d.url,alt:d.alt,loading:"lazy",decoding:"async",width:d.width,height:d.height,className:"w-full object-cover",style:{aspectRatio:"3 / 2"}})},d.mediaId))})]})})}function Lo(){var h;const i=le(),c=ft(i),o=hc();if(o==="reservation")return n.jsx(ry,{});if(o==="oasi")return n.jsx(oy,{});if(o==="studio")return n.jsx(uy,{});if(o==="pastel")return n.jsx(fy,{});if(o==="editorial")return n.jsx(dy,{});const u=(h=i.theme.sections.find(p=>p.id===c.path))==null?void 0:h.variantId;if(u==="rooms.bands")return n.jsx(iy,{});if(u==="rooms.tabs")return n.jsx(cy,{});const f=fl(i);if(f.length===0)return null;const d=f.length===1?"grid-cols-1":f.length===2?"grid-cols-1 sm:grid-cols-2":"grid-cols-1 sm:grid-cols-2 xl:grid-cols-3";return n.jsx(vt,{id:"units",title:Ye(i,c.path,`${c.label} ${f.length}개 안내`),children:n.jsx("ul",{className:`grid gap-5 lg:gap-7 ${d}`,children:f.map(p=>n.jsxs(bu,{as:"li",className:"flex flex-col overflow-hidden",children:[n.jsxs("div",{className:"flex flex-1 flex-col",children:[p.images.length>0&&n.jsx(hy,{images:p.images,name:p.name}),n.jsxs("div",{className:"flex flex-1 flex-col gap-3 p-5",children:[n.jsx("h3",{className:"h3",children:p.name}),p.chips.length>0&&n.jsx("ul",{className:"flex flex-wrap items-center gap-1.5",children:p.chips.map(g=>n.jsx("li",{children:n.jsxs(vu,{children:[n.jsx("span",{className:"text-muted",children:g.label}),n.jsx("span",{className:"font-medium",children:g.value})]})},g.label))}),p.intro&&n.jsx("p",{className:"text-[length:var(--fs-sm)] leading-relaxed opacity-75",children:p.intro})]})]}),p.rows.length>0&&n.jsxs("details",{className:"group border-line border-t",children:[n.jsxs("summary",{className:"tap flex cursor-pointer list-none items-center justify-between gap-2 px-5 text-[length:var(--fs-sm)] font-semibold",children:[n.jsxs("span",{children:[p.name," 자세히"]}),n.jsx(fc,{className:"size-4 shrink-0 transition-transform group-open:rotate-180"})]}),n.jsx("div",{className:"space-y-5 px-5 pb-5",children:p.rows.length>0&&n.jsx("dl",{className:"divide-line border-line divide-y border-t",children:p.rows.map(g=>n.jsxs("div",{className:"flex items-baseline justify-between gap-4 py-2.5 text-[length:var(--fs-sm)]",children:[n.jsx("dt",{className:"text-muted shrink-0",children:g.label}),n.jsx("dd",{className:"text-right font-semibold",children:g.value})]},g.label))})})]})]},p.unitId))})})}function hy({images:i,name:c}){const o=q.useRef(null),[u,f]=q.useState(0),d=q.useCallback(()=>{const p=o.current;!p||p.clientWidth===0||f(Math.round(p.scrollLeft/p.clientWidth))},[]),h=q.useCallback(p=>{const g=o.current;if(!g)return;const x=window.matchMedia("(prefers-reduced-motion: reduce)").matches;g.scrollBy({left:p*g.clientWidth,behavior:x?"auto":"smooth"})},[]);return n.jsxs("div",{className:"relative",children:[n.jsx("ul",{ref:o,onScroll:d,"aria-label":`${c} 사진`,className:"flex snap-x snap-mandatory overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:i.map(p=>n.jsx("li",{className:"w-full shrink-0 snap-center",children:n.jsx("div",{className:"relative aspect-16/10 overflow-hidden",children:n.jsx("img",{src:p.url,alt:p.alt,loading:"lazy",decoding:"async",className:"size-full object-cover"})})},p.mediaId))}),i.length>1&&n.jsxs(n.Fragment,{children:[n.jsx(Zh,{dir:"prev",show:u>0,onClick:()=>h(-1)}),n.jsx(Zh,{dir:"next",show:uh(1)}),n.jsxs("span",{className:"pointer-events-none absolute bottom-2.5 right-2.5 rounded-full bg-black/55 px-2 py-0.5 text-[length:var(--fs-xs)] font-semibold tabular-nums text-white",children:[Math.min(u+1,i.length)," / ",i.length]})]})]})}function Zh({dir:i,show:c,onClick:o}){const u=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:o,"aria-label":i==="prev"?"이전 사진":"다음 사진","aria-hidden":!c,tabIndex:c?0:-1,className:`absolute top-1/2 z-10 flex size-8 -translate-y-1/2 items-center justify-center rounded-full bg-black/45 text-white backdrop-blur-sm transition-opacity hover:bg-black/65 ${c?"opacity-100":"pointer-events-none opacity-0"} ${i==="prev"?"left-2":"right-2"}`,children:n.jsx(u,{className:"size-4"})})}function py(){const i=le(),c=Ze(i),o=B0(i),u=i.place.phone;return c.length===0&&o.length===0&&!u?null:n.jsx(vt,{id:"booking",tone:"alt",title:Ye(i,"booking","예약 안내"),lead:`${i.place.name} 예약은 아래 경로로 받습니다.`,children:n.jsxs("div",{className:"grid gap-6 lg:grid-cols-12 lg:gap-10",children:[o.length>0&&n.jsx("dl",{className:"panel divide-line divide-y overflow-hidden px-5 lg:col-span-7",children:o.map(f=>n.jsx(kp,{label:f.label,value:f.value},f.label))}),n.jsx("div",{className:o.length>0?"lg:col-span-5":"lg:col-span-12",children:n.jsxs("div",{className:o.length>0?"flex flex-col gap-2.5 sm:flex-row sm:flex-wrap lg:flex-col":"flex flex-col items-start gap-2.5 sm:flex-row sm:flex-wrap",children:[u&&n.jsxs(Qh,{href:`tel:${u}`,icon:n.jsx(At,{className:"size-4"}),children:["전화 예약 ",u]}),c.map(f=>n.jsx(Qh,{href:f.url,variant:"outline",external:!0,children:Sp(f)},f.url))]})})]})})}const Kh=["일","월","화","수","목","금","토"],Jh=2;function Wh(i){return`${i.getFullYear()}-${String(i.getMonth()+1).padStart(2,"0")}-${String(i.getDate()).padStart(2,"0")}`}function xy(i,c,o){const u=new Date(i,c,1),f=new Date(i,c+1,0).getDate(),d=Wh(o),h=Array.from({length:u.getDay()},()=>null);for(let p=1;p<=f;p+=1){const g=new Date(i,c,p),x=Wh(g);h.push({iso:x,day:p,weekday:g.getDay(),isWeekend:g.getDay()===0||g.getDay()===6,past:xo+d).filter(f=>f<=23).map(f=>`${String(f).padStart(2,"0")}:${u}`):[]}function by(i){return eu(i.units).map(c=>{var u;const o=f=>{var h;const d=Number((h=Tt(c.facts,f))==null?void 0:h.replace(/[^0-9]/g,""));return Number.isFinite(d)&&d>0?d:void 0};return{unitId:c.unitId,name:c.name,weekdayPrice:(u=yp(c))==null?void 0:u.price,weekendPrice:o("weekend_price"),maxCapacity:o("max_capacity")}})}function vy(){var se;const i=le(),c=q.useMemo(()=>by(i),[i]),o=q.useMemo(()=>{var Q;return((Q=Bs(i.facts).find(ae=>ae.key==="check_in_time"))==null?void 0:Q.value)??void 0},[i]),u=q.useMemo(()=>gy(o),[o]),[f,d]=q.useState(null),[h,p]=q.useState(0);q.useEffect(()=>d(new Date),[]);const g=q.useMemo(()=>f?new Date(f.getFullYear(),f.getMonth()+h,1):null,[f,h]),x=q.useMemo(()=>f&&g?xy(g.getFullYear(),g.getMonth(),f):[],[f,g]),[v,y]=q.useState(null),[z,w]=q.useState(null),[N,T]=q.useState(((se=c[0])==null?void 0:se.unitId)??null),[D,U]=q.useState(2),[X,Z]=q.useState(!1),P=x.find(Q=>Q!==null&&Q.iso===v)??null,$=c.find(Q=>Q.unitId===N)??null,K=($==null?void 0:$.maxCapacity)??8,G=P&&$?P.isWeekend?$.weekendPrice??$.weekdayPrice:$.weekdayPrice:void 0,ee=!!(v&&$&&(u.length===0||z));return q.useEffect(()=>{U(Q=>Math.min(Q,($==null?void 0:$.maxCapacity)??8))},[$]),c.length===0?null:n.jsxs("div",{className:"mt-4 overflow-hidden rounded-2xl border border-black/8 lg:mt-6",style:{backgroundColor:"var(--color-surface)"},children:[n.jsx("div",{className:"border-b border-black/8 px-4 py-3 sm:px-5",children:n.jsxs("p",{className:"flex items-center gap-2 text-xs font-bold",children:[n.jsx(Nb,{className:"size-3.5 opacity-50"}),n.jsx("span",{children:"날짜 · 시간 선택"})]})}),f===null||g===null?n.jsx("p",{className:"px-4 py-6 text-xs leading-relaxed opacity-60 sm:px-5",children:"날짜 선택은 브라우저에서 열립니다. 실제 예약 가능 여부와 결제는 아래 예약 창구에서 확인해 주세요."}):X?n.jsx(yy,{payload:i,onReset:()=>Z(!1),summary:[P?`${g.getMonth()+1}월 ${P.day}일(${Kh[P.weekday]})`:null,z?`도착 ${z}`:null,($==null?void 0:$.name)??null,`${D}명`].filter(Q=>!!Q).join(" · ")}):n.jsxs("div",{className:"space-y-5 p-4 sm:p-5",children:[n.jsxs("div",{children:[n.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[n.jsx("p",{className:"text-[11px] font-semibold opacity-55",children:"날짜"}),n.jsxs("div",{className:"flex items-center gap-1",children:[n.jsx("button",{type:"button",onClick:()=>p(Q=>Math.max(0,Q-1)),disabled:h===0,"aria-label":"이전 달",className:"flex size-7 items-center justify-center rounded-lg border border-black/10 transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-30",children:n.jsx(oa,{className:"size-3.5"})}),n.jsxs("span",{className:"w-24 text-center text-xs font-bold",children:[g.getFullYear(),"년 ",g.getMonth()+1,"월"]}),n.jsx("button",{type:"button",onClick:()=>p(Q=>Math.min(Jh,Q+1)),disabled:h>=Jh,"aria-label":"다음 달",className:"flex size-7 items-center justify-center rounded-lg border border-black/10 transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-30",children:n.jsx(ua,{className:"size-3.5"})})]})]}),n.jsx("div",{className:"grid grid-cols-7 gap-1 border-b border-black/8 pb-1.5",children:Kh.map((Q,ae)=>n.jsx("span",{className:"text-center text-[10px] font-semibold",style:{opacity:ae===0||ae===6?.75:.45},children:Q},Q))}),n.jsx("div",{className:"mt-1.5 grid grid-cols-7 gap-1",children:x.map((Q,ae)=>Q===null?n.jsx("span",{"aria-hidden":!0},`pad-${ae}`):n.jsx("button",{type:"button",disabled:Q.past,onClick:()=>y(Q.iso),"aria-pressed":Q.iso===v,"aria-label":`${g.getMonth()+1}월 ${Q.day}일`,className:"flex h-9 items-center justify-center rounded-lg border text-xs transition-colors disabled:cursor-not-allowed",style:{borderColor:Q.iso===v?"var(--color-brand)":"transparent",backgroundColor:Q.iso===v?"var(--color-brand)":"var(--color-surface-alt)",color:Q.iso===v?"#fff":void 0,opacity:Q.past?.25:1,fontWeight:Q.iso===v?700:400},children:Q.day},Q.iso))}),(P==null?void 0:P.isWeekend)&&n.jsx("p",{className:"mt-2 text-[11px] opacity-55",children:"주말 요금이 적용되는 날짜입니다."})]}),u.length>0&&n.jsxs("div",{children:[n.jsxs("p",{className:"mb-2 flex items-center gap-1.5 text-[11px] font-semibold opacity-55",children:[n.jsx(Cb,{className:"size-3"}),n.jsxs("span",{children:["도착 예정 시간 (체크인 ",o," 이후)"]})]}),n.jsx("ul",{className:"flex flex-wrap gap-1.5",children:u.map(Q=>{const ae=Q===z;return n.jsx("li",{children:n.jsx("button",{type:"button",onClick:()=>w(Q),"aria-pressed":ae,className:"rounded-lg border px-3 py-1.5 text-xs font-medium transition-colors",style:{borderColor:ae?"var(--color-brand)":"rgba(0,0,0,0.10)",backgroundColor:ae?"var(--color-brand)":"var(--color-surface-alt)",color:ae?"#fff":void 0},children:Q})},Q)})})]}),n.jsxs("div",{children:[n.jsx("p",{className:"mb-2 text-[11px] font-semibold opacity-55",children:"객실"}),n.jsx("ul",{className:"grid gap-1.5 sm:grid-cols-2",children:c.map(Q=>{const ae=Q.unitId===N;return n.jsx("li",{children:n.jsxs("button",{type:"button",onClick:()=>T(Q.unitId),"aria-pressed":ae,className:"flex w-full items-center justify-between gap-2 rounded-xl border px-3 py-2.5 text-left text-xs transition-colors",style:{borderColor:ae?"var(--color-brand)":"rgba(0,0,0,0.10)",backgroundColor:"var(--color-surface-alt)"},children:[n.jsx("span",{className:"font-semibold",children:Q.name}),Q.maxCapacity&&n.jsxs("span",{className:"shrink-0 opacity-55",children:["최대 ",Q.maxCapacity,"명"]})]})},Q.unitId)})})]}),n.jsxs("div",{className:"flex items-center justify-between",children:[n.jsx("p",{className:"text-[11px] font-semibold opacity-55",children:"인원"}),n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("button",{type:"button",onClick:()=>U(Q=>Math.max(1,Q-1)),"aria-label":"인원 줄이기",className:"flex size-7 items-center justify-center rounded-lg border border-black/10 transition-colors hover:bg-black/5",children:n.jsx(Gb,{className:"size-3.5"})}),n.jsxs("span",{className:"w-10 text-center text-sm font-bold",children:[D,"명"]}),n.jsx("button",{type:"button",onClick:()=>U(Q=>Math.min(K,Q+1)),"aria-label":"인원 늘리기",className:"flex size-7 items-center justify-center rounded-lg border border-black/10 transition-colors hover:bg-black/5",children:n.jsx(Kb,{className:"size-3.5"})})]})]}),n.jsxs("div",{className:"rounded-xl border border-black/8 p-3",style:{backgroundColor:"var(--color-surface-alt)"},children:[n.jsxs("div",{className:"flex items-baseline justify-between gap-3",children:[n.jsx("span",{className:"text-xs opacity-60",children:P?`${g.getMonth()+1}월 ${P.day}일 · ${($==null?void 0:$.name)??""} · ${D}명`:"날짜를 골라 주세요"}),G!=null&&n.jsxs("span",{className:"text-sm font-bold",style:{color:"var(--color-brand)"},children:[G.toLocaleString("ko-KR"),"원"]})]}),G!=null&&n.jsx("p",{className:"mt-1 text-[11px] opacity-50",children:"1박 기준 안내 요금입니다. 인원 추가·성수기 요금은 예약 창구에서 확인됩니다."})]}),n.jsx("button",{type:"button",disabled:!ee,onClick:()=>Z(!0),className:"w-full rounded-xl px-4 py-3 text-sm font-bold text-white transition-opacity disabled:cursor-not-allowed disabled:opacity-40",style:{backgroundColor:"var(--color-brand)"},children:"예약 요청 확인하기"})]})]})}function yy({payload:i,summary:c,onReset:o}){const u=i.place.phone;return n.jsxs("div",{className:"space-y-4 p-4 sm:p-5",children:[n.jsxs("div",{className:"flex items-start gap-2.5",children:[n.jsx("span",{className:"mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-full text-white",style:{backgroundColor:"var(--color-brand)"},children:n.jsx(dp,{className:"size-4"})}),n.jsxs("div",{className:"min-w-0",children:[n.jsx("p",{className:"text-sm font-bold",children:"예약 내용 확인"}),n.jsx("p",{className:"mt-0.5 text-xs leading-relaxed opacity-70",children:c})]})]}),n.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row",children:[u&&n.jsxs("a",{href:`tel:${u}`,className:"flex flex-1 items-center justify-center gap-2 rounded-xl px-4 py-3 text-sm font-bold text-white transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)"},children:[n.jsx(At,{className:"size-4"}),n.jsxs("span",{children:["전화로 예약하기 ",u]})]}),n.jsxs("button",{type:"button",onClick:o,className:"flex items-center justify-center gap-1.5 rounded-xl border border-black/10 px-4 py-3 text-xs font-semibold transition-colors hover:bg-black/5",children:[n.jsx(Wb,{className:"size-3.5"}),n.jsx("span",{children:"다시 고르기"})]})]})]})}function Fh(){const i=le(),c=J0(i);if(!c)return null;const{offers:o,notices:u,links:f,contacts:d,phone:h}=c;return n.jsx("section",{id:"booking","aria-labelledby":"booking-heading",className:"w-full border-b border-black/8 py-16 sm:py-24",style:{backgroundColor:"var(--color-surface-alt)"},children:n.jsxs("div",{className:"shell",children:[n.jsxs("p",{className:"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wider opacity-50",children:[n.jsx(yb,{className:"size-4"}),n.jsx("span",{children:"Reservation"})]}),n.jsx("h2",{id:"booking-heading",className:"serif mb-2 text-2xl font-bold tracking-tight sm:text-3xl lg:text-4xl",children:Ye(i,"booking","예약 안내")}),n.jsx("p",{className:"mb-8 max-w-2xl text-xs leading-relaxed opacity-60 sm:text-sm",children:"빈 방 확인과 결제는 아래 예약 창구에서 진행됩니다. 이 페이지에서는 요금과 이용 조건만 안내합니다."}),n.jsxs("div",{className:"grid grid-cols-1 gap-4 lg:grid-cols-5 lg:gap-6",children:[o.length>0&&n.jsxs("div",{className:"overflow-hidden rounded-2xl border border-black/8 lg:col-span-3",style:{backgroundColor:"var(--color-surface)"},children:[n.jsxs("p",{className:"flex items-center gap-2 border-b border-black/8 px-4 py-3 text-xs font-bold sm:px-5",children:[n.jsx(bb,{className:"size-3.5 opacity-50"}),n.jsx("span",{children:"객실별 요금 · 인원"})]}),n.jsx("ul",{className:"divide-y divide-black/5",children:o.map(p=>n.jsxs("li",{className:"p-4 sm:p-5",children:[n.jsxs("div",{className:"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-1",children:[n.jsx("h3",{className:"serif text-base font-bold sm:text-lg",children:p.name}),p.baseRateText&&n.jsx("span",{className:"text-sm font-bold",style:{color:"var(--color-brand)"},children:p.baseRateText})]}),p.capacityText&&n.jsx("p",{className:"mt-1 text-xs opacity-60",children:p.capacityText}),p.rateRows.length>0&&n.jsx("dl",{className:"mt-3 flex flex-wrap gap-x-4 gap-y-1.5",children:p.rateRows.map(g=>n.jsxs("div",{className:"flex items-baseline gap-1.5 text-xs",children:[n.jsx("dt",{className:"opacity-50",children:g.label}),n.jsx("dd",{className:"font-semibold",children:g.value})]},g.label))}),n.jsx("a",{href:p.href,className:"mt-3 inline-flex items-center gap-1 text-xs font-semibold underline decoration-black/20 underline-offset-4 transition-opacity hover:opacity-70",children:n.jsxs("span",{children:[p.name," 사진 · 상세 보기"]})})]},p.unitId))})]}),n.jsxs("div",{className:"flex h-fit flex-col gap-3 rounded-2xl border border-black/8 p-4 sm:p-5 lg:col-span-2",style:{backgroundColor:"var(--color-surface)"},children:[n.jsx("p",{className:"text-xs font-bold",children:"예약 창구"}),h&&n.jsxs("a",{href:`tel:${h}`,className:"flex items-center justify-center gap-2 rounded-xl px-4 py-3 text-sm font-bold text-white transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)"},children:[n.jsx(At,{className:"size-4"}),n.jsxs("span",{children:["전화 예약 ",h]})]}),f.map(p=>n.jsxs("a",{href:p.url,target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-between gap-2 rounded-xl border border-black/10 px-4 py-3 text-xs font-semibold transition-colors hover:bg-black/5",style:{backgroundColor:"var(--color-surface-alt)"},children:[n.jsx("span",{children:Sp(p)}),n.jsx(Sn,{className:"size-3.5 shrink-0"})]},p.url)),d.length>0&&n.jsxs("div",{className:"mt-1 border-t border-black/8 pt-3",children:[n.jsx("p",{className:"mb-2 text-xs opacity-50",children:"문의"}),n.jsx("ul",{className:"flex flex-wrap gap-2",children:d.map(p=>n.jsx("li",{children:n.jsxs("a",{href:p.url,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 rounded-lg border border-black/10 px-2.5 py-1.5 text-xs transition-colors hover:bg-black/5",children:[n.jsx("span",{children:ml(p)}),n.jsx(Sn,{className:"size-3"})]})},p.url))})]}),f.length===0&&n.jsx("p",{className:"text-xs leading-relaxed opacity-55",children:"온라인 예약 채널은 등록되지 않았습니다. 예약은 전화로 문의해 주세요."})]})]}),n.jsx(vy,{}),u.length>0&&n.jsxs("div",{className:"mt-4 overflow-hidden rounded-2xl border border-black/8 lg:mt-6",style:{backgroundColor:"var(--color-surface)"},children:[n.jsxs("p",{className:"flex items-center gap-2 border-b border-black/8 px-4 py-3 text-xs font-bold sm:px-5",children:[n.jsx(Ib,{className:"size-3.5 opacity-50"}),n.jsx("span",{children:"예약 전 확인"})]}),n.jsx("dl",{className:"grid grid-cols-1 divide-y divide-black/5 sm:grid-cols-2 sm:divide-y-0",children:u.map(p=>n.jsxs("div",{className:"flex flex-col gap-1 p-4 sm:flex-row sm:items-start sm:justify-between sm:gap-4 sm:p-5",children:[n.jsx("dt",{className:"shrink-0 text-xs opacity-55",children:p.label}),n.jsx("dd",{className:"text-xs font-semibold sm:max-w-[60%] sm:text-right",children:p.value})]},p.label))})]})]})})}function jy(){const i=le(),c=Y0(i);return c.length===0?null:n.jsx(vt,{id:"space",title:Ye(i,"space","공간 안내"),lead:"좌석과 이용 환경 안내입니다.",children:n.jsx("dl",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4 lg:gap-4",children:c.map(o=>n.jsxs(bu,{className:"p-4 sm:p-5",children:[n.jsx("dt",{className:"text-muted mb-1 text-[length:var(--fs-xs)] font-medium",children:o.label}),n.jsx("dd",{className:"text-[length:var(--fs-lead)] font-bold",children:o.value})]},o.label))})})}function Ny(){const i=le(),{place:c}=i,o=wn(i);if(!c.phone&&!c.email&&o.length===0)return null;const u=[...c.phone?[{key:"phone",icon:At,label:"전화",value:c.phone,href:`tel:${c.phone}`}]:[],...c.email?[{key:"email",icon:mp,label:"이메일",value:c.email,href:`mailto:${c.email}`}]:[],...o.map(f=>({key:f.url,icon:Io,label:ml(f),value:"바로 가기",href:f.url,external:!0}))];return n.jsx(vt,{id:"inquiry",title:Ye(i,"inquiry","문의 안내"),lead:`궁금한 점은 아래로 연락 주시면 ${c.name}에서 직접 안내해 드립니다.`,children:n.jsx("ul",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 lg:gap-4",children:u.map(f=>{const d=f.icon,h="external"in f&&f.external;return n.jsx("li",{children:n.jsxs("a",{href:f.href,...h?{target:"_blank",rel:"noopener noreferrer"}:{},className:"panel flex h-full items-center justify-between gap-3 p-5 transition-opacity hover:opacity-80",children:[n.jsxs("span",{className:"flex min-w-0 items-center gap-3",children:[n.jsx(d,{className:"size-5 shrink-0 opacity-40"}),n.jsxs("span",{className:"min-w-0",children:[n.jsx("span",{className:"text-muted block text-[length:var(--fs-xs)] font-medium",children:f.label}),n.jsx("span",{className:"block break-all text-[length:var(--fs-sm)] font-semibold",children:f.value})]})]}),h&&n.jsx(Sn,{className:"size-4 shrink-0 opacity-40"})]})},f.key)})})})}function Sy(){const i=le(),c=$0(i);return c.length===0?null:n.jsx(vt,{id:"exhibition",tone:"alt",title:Ye(i,"exhibition","관람 안내"),lead:"방문 전 관람 조건을 확인해 주세요.",children:n.jsx("dl",{className:"panel divide-line divide-y overflow-hidden px-5",children:c.map(o=>n.jsx(kp,{label:o.label,value:o.value},o.label))})})}function zy(){const[i,c]=q.useState([]);return q.useEffect(()=>c(E0()),[]),i}const Ey=["봄","여름","가을","겨울"];function wy(){const i=le(),c=i.local.festivals,o=zy(),[u,f]=q.useState(null);if(c.length===0)return null;const d=Ey.filter(y=>c.some(z=>z.season===y)),h=c.filter(y=>{var z;return!((z=y.season)!=null&&z.trim())}),p=[...o].reverse().find(y=>d.includes(y)),g="전체",x=u??p??null,v=x===g;return n.jsxs(vt,{id:"festival",title:"계절별 축제",lead:`${i.place.addressLocality??"이 지역"}의 축제와 행사를 계절로 묶었습니다.`,aside:x&&!v?n.jsxs("p",{className:"text-muted text-[length:var(--fs-xs)]",children:["지금은 ",x," 축제입니다"]}):void 0,footnote:n.jsx(n.Fragment,{children:"한국관광공사 TourAPI 기준. 일정은 주최 측 사정으로 바뀔 수 있습니다."}),children:[d.length>1&&n.jsx("div",{className:"mb-6 flex flex-wrap gap-1.5",role:"tablist","aria-label":"계절",children:[...d,g].map(y=>{const z=x===y;return n.jsx("button",{type:"button",role:"tab","aria-selected":z,onClick:()=>f(y),className:"border-line rounded-full border px-4 py-1.5 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-80",style:z?{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)",borderColor:"transparent"}:void 0,children:y},y)})}),n.jsxs("div",{className:"space-y-8",children:[d.map(y=>{const z=c.filter(w=>w.season===y);return n.jsxs("div",{hidden:!v&&x!==null&&x!==y,children:[n.jsx("h3",{className:"border-line mb-4 border-b pb-2 text-[length:var(--fs-sm)] font-bold",children:y}),n.jsx(Ih,{items:z,label:`${y} 축제`,remount:x})]},y)}),h.length>0&&n.jsxs("div",{children:[n.jsx("h3",{className:"border-line mb-4 border-b pb-2 text-[length:var(--fs-sm)] font-bold",children:"계절 없이 열리는 행사"}),n.jsx(Ih,{items:h,label:"계절 없이 열리는 행사"})]})]})]})}function Ih({items:i,label:c,remount:o}){return n.jsx(gu,{label:c,children:i.map(u=>n.jsx(Mp,{basis:"basis-[76%] sm:basis-1/3 lg:basis-1/4",children:n.jsxs("a",{href:Vo(u.searchQuery),target:"_blank",rel:"noopener noreferrer nofollow",className:"panel group flex h-full flex-col overflow-hidden transition-opacity hover:opacity-85",children:[n.jsxs("span",{className:"relative block aspect-4/3 overflow-hidden",children:[u.imageUrl?n.jsx("img",{src:u.imageUrl,alt:`${u.name} 사진`,loading:"lazy",decoding:"async",className:"size-full object-cover transition-transform duration-500 group-hover:scale-105"}):n.jsx("span",{className:"serif grid size-full place-items-center px-3 text-center text-[length:var(--fs-lead)] leading-tight",style:{backgroundColor:"color-mix(in oklab, currentColor 9%, transparent)"},"aria-hidden":!0,children:u.name}),n.jsx("span",{className:"absolute bottom-2 left-2 rounded-md px-2 py-0.5 text-[length:var(--fs-xs)] font-bold",style:{backgroundColor:"color-mix(in srgb, var(--tpl-inverse, #1c1917) 78%, transparent)",color:"var(--tpl-bg, #fff)"},children:u.month})]}),n.jsxs("span",{className:"flex min-w-0 flex-1 flex-col gap-1 p-3.5",children:[n.jsx("span",{className:"text-[length:var(--fs-sm)] font-bold",children:u.name}),u.period&&n.jsx("span",{className:"text-[length:var(--fs-xs)] font-medium opacity-80",children:u.period}),u.location&&n.jsxs("span",{className:"text-muted flex items-start gap-1 text-[length:var(--fs-xs)]",children:[n.jsx(Ls,{className:"mt-0.5 size-3 shrink-0 opacity-60"}),n.jsx("span",{children:u.location})]}),u.description&&n.jsx("span",{className:"text-muted line-clamp-3 pt-0.5 text-[length:var(--fs-xs)] leading-relaxed",children:u.description}),n.jsxs("span",{className:"text-muted mt-auto flex items-center gap-0.5 pt-1.5 text-[length:var(--fs-xs)] opacity-70 transition-opacity group-hover:opacity-100",children:[n.jsx("span",{children:"검색으로 열기"}),n.jsx(Sn,{className:"size-3.5"})]})]})]})},u.name))},o??"all")}const As=80,Ph=[{id:"all",label:"전체",test:()=>!0},{id:"w5",label:"걸어서 5분 이내",test:i=>i<=5*As},{id:"w10",label:"걸어서 10분 이내",test:i=>i<=10*As},{id:"far",label:"걸어서 10분 이상",test:i=>i>10*As}];function Bo(i){if(Number.isFinite(i))return`도보 약 ${Math.max(1,Math.round(i/As))}분`}function Cs(i){const c=/^([\d.]+)\s*(km|m)$/i.exec((i??"").trim());return c?Number(c[1])*(c[2].toLowerCase()==="km"?1e3:1):1/0}function _y(){const i=le(),{local:c}=i,o=c.restaurants.length>0||c.attractions.length>0,[u,f]=q.useState("all");if(!o)return null;const d=[...c.restaurants,...c.attractions],h=v=>d.filter(y=>v.test(Cs(y.distanceText))).length,p=Ph.filter((v,y)=>y===0||h(v)>0&&h(v)v.id===u)??Ph[0],x=v=>g.test(Cs(v.distanceText));return n.jsxs(vt,{id:"guide",tone:"alt",title:"주변 안내",lead:`${i.place.addressLocality??"주변"} 지역의 맛집 · 명소 안내입니다.`,aside:c.syncedAt?n.jsxs("p",{className:"text-muted text-[length:var(--fs-xs)]",children:[nu(c.syncedAt)," 갱신"]}):void 0,footnote:n.jsxs(n.Fragment,{children:["도보 시간은 숙소에서 잰 직선거리를 분속 ",As,"m 로 환산한 값입니다. 실제로 걷는 길은 이보다 깁니다."]}),children:[p.length>1&&n.jsx("div",{className:"mb-6 flex flex-wrap gap-1.5",role:"tablist","aria-label":"거리",children:p.map(v=>{const y=v.id===u,z=h(v);return n.jsxs("button",{type:"button",role:"tab","aria-selected":y,onClick:()=>f(v.id),className:"border-line rounded-full border px-4 py-1.5 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-80",style:y?{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)",borderColor:"transparent"}:void 0,children:[v.label," ",n.jsx("span",{className:"tabular-nums opacity-70",children:z})]},v.id)})}),n.jsxs("div",{className:"space-y-10",children:[c.restaurants.length>0&&n.jsx(ep,{title:"주변 맛집",icon:e0,places:c.restaurants,within:x}),c.attractions.length>0&&n.jsx(ep,{title:"주변 명소",icon:Ls,places:c.attractions,within:x})]})]})}function Ty({icon:i,children:c}){return n.jsxs("h3",{className:"border-line mb-4 flex items-center gap-2 border-b pb-2 text-[length:var(--fs-sm)] font-bold",children:[n.jsx(i,{className:"size-4 opacity-50"}),n.jsx("span",{children:c})]})}function ep({title:i,icon:c,places:o,within:u}){const f=o.filter(u);return n.jsxs("div",{children:[n.jsx(Ty,{icon:c,children:i}),n.jsx(gu,{label:i,children:f.map(d=>n.jsx(Mp,{basis:"basis-[76%] sm:basis-1/3 lg:basis-1/4",children:n.jsxs("a",{href:Vo(d.searchQuery),target:"_blank",rel:"noopener noreferrer nofollow",className:"panel group flex h-full flex-col overflow-hidden transition-opacity hover:opacity-85",children:[n.jsxs("span",{className:"relative block aspect-4/3 overflow-hidden",children:[d.imageUrl?n.jsx("img",{src:d.imageUrl,alt:`${d.name} 사진`,loading:"lazy",decoding:"async",className:"size-full object-cover transition-transform duration-500 group-hover:scale-105"}):n.jsx("span",{className:"serif grid size-full place-items-center px-3 text-center text-[length:var(--fs-lead)] leading-tight",style:{backgroundColor:"color-mix(in oklab, currentColor 9%, transparent)"},"aria-hidden":!0,children:d.name}),d.distanceText&&n.jsxs("span",{className:"absolute bottom-2 left-2 rounded-md px-2 py-0.5 text-[length:var(--fs-xs)] font-bold",style:{backgroundColor:"color-mix(in srgb, var(--tpl-inverse, #1c1917) 78%, transparent)",color:"var(--tpl-bg, #fff)"},children:[Bo(Cs(d.distanceText))??d.distanceText,n.jsx("span",{className:"ml-1 font-normal opacity-70",children:d.distanceText})]})]}),n.jsxs("span",{className:"flex flex-1 flex-col gap-1 p-3.5",children:[n.jsx("span",{className:"text-[length:var(--fs-sm)] font-bold",children:d.name}),d.description&&n.jsx("span",{className:"text-muted line-clamp-3 text-[length:var(--fs-xs)] leading-relaxed",children:d.description}),n.jsxs("span",{className:"text-muted mt-auto flex items-center gap-0.5 pt-1.5 text-[length:var(--fs-xs)] opacity-70 transition-opacity group-hover:opacity-100",children:[n.jsx("span",{children:"검색으로 열기"}),n.jsx(Sn,{className:"size-3.5"})]})]})]})},d.name))},f.length),n.jsx("ul",{hidden:!0,children:o.filter(d=>!u(d)).map(d=>n.jsxs("li",{children:[n.jsx("a",{href:Vo(d.searchQuery),rel:"nofollow",children:d.name}),d.distanceText&&n.jsxs("span",{children:[" ",d.distanceText,Bo(Cs(d.distanceText))&&` · ${Bo(Cs(d.distanceText))}`]}),d.description&&n.jsx("p",{children:d.description})]},d.name))}),f.length===0&&n.jsx("p",{className:"text-muted text-[length:var(--fs-sm)]",children:"이 거리 안에는 없습니다."})]})}function Ay(i){return i===0?"맑음":i>=1&&i<=3?"구름많음":i>=50&&i<=69?"비":i>=70&&i<=79?"눈":"흐림"}function Cy({initial:i,regionCode:c,latitude:o,longitude:u}){const[f,d]=q.useState(i);return q.useEffect(()=>{if(!c||o==null||u==null)return;const h=new AbortController;async function p(){var x;try{const v=new URLSearchParams({region_code:c,latitude:String(o),longitude:String(u)}),y=await fetch(`/v1/local/weather?${v}`,{signal:h.signal});if(!y.ok)return;const z=await y.json();if(!((x=z==null?void 0:z.result)!=null&&x.success)||!z.weather)return;d(w=>({temperature:Number(z.weather.temperature),condition:Ay(Number(z.weather.weather_code)),note:w==null?void 0:w.note,observedAt:z.weather.observed_at,stale:!!z.stale}))}catch{}}p();const g=window.setInterval(()=>void p(),600*1e3);return()=>{h.abort(),window.clearInterval(g)}},[o,u,c]),f}function My(i){const c=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/.exec(i??"");if(!c)return;const[,,o,u,f,d]=c;return`${Number(o)}월 ${Number(u)}일 ${f}:${d} 관측`}function ky(){var p,g,x,v;const i=le(),c=Cy({initial:i.local.weather,regionCode:i.place.regionCode,latitude:i.place.latitude,longitude:i.place.longitude});if(!c)return null;const o=k0(c.condition),u=O0(c.temperature),f=((g=(p=i.local.weather)==null?void 0:p.notes)==null?void 0:g[o])??c.note,d=(v=(x=i.local.weather)==null?void 0:x.tempNotes)==null?void 0:v[u],h=My(c.observedAt);return n.jsx(vt,{id:"weather",tone:"alt",title:"오늘의 날씨",children:n.jsxs(bu,{className:"relative overflow-hidden",children:[n.jsx("div",{className:"w4-sky","data-mood":o,"aria-hidden":!0}),n.jsxs("div",{className:"relative flex flex-col gap-5 p-6 sm:p-8",children:[n.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-4 gap-y-1",children:[n.jsxs("p",{className:"flex items-baseline gap-2.5",children:[n.jsx("span",{className:"serif tabular-nums leading-none",style:{fontSize:"var(--fs-display)"},children:Math.round(c.temperature)}),n.jsx("span",{className:"text-[length:var(--fs-lead)] opacity-70",children:"°C"}),n.jsx("span",{className:"text-[length:var(--fs-lead)] font-semibold",children:c.condition})]}),h&&n.jsxs("span",{className:"text-muted text-[length:var(--fs-xs)] tabular-nums",children:[h,c.stale&&" · 최근 관측값"]})]}),f&&n.jsx("p",{className:"measure serif text-[length:var(--fs-lead)] leading-loose opacity-85",children:f}),d&&n.jsxs("p",{className:"measure flex items-start gap-2.5 text-[length:var(--fs-sm)] leading-relaxed opacity-75",children:[n.jsx("span",{className:"border-line mt-0.5 shrink-0 rounded-full border px-2 py-0.5 text-[length:var(--fs-xs)] font-bold","aria-hidden":!0,children:u}),n.jsx("span",{children:d})]})]})]})})}function Oy(){const i=le(),c=lu(i),o=i.theme.sections.find(T=>T.id==="photos"),u=(o==null?void 0:o.variantId)??"photos.grid",[f,d]=q.useState(null),h=q.useRef(null),[p,g]=q.useState(0),[x,v]=q.useState({prev:!1,next:!0}),y=q.useCallback(()=>{const T=h.current;if(!T)return;const D=T.clientWidth,U=T.scrollWidth-D;g(D>0?Math.round(T.scrollLeft/D):0),v({prev:T.scrollLeft>8,next:T.scrollLeft(y(),window.addEventListener("resize",y),()=>window.removeEventListener("resize",y)),[y]),xu({box:h,interval:pu,advance:()=>Cp(h.current,1)});const z=q.useCallback(T=>{const D=h.current;if(!D)return;const U=window.matchMedia("(prefers-reduced-motion: reduce)").matches;D.scrollBy({left:T*D.clientWidth,behavior:U?"auto":"smooth"})},[]),w=q.useCallback(()=>d(null),[]),N=q.useCallback(T=>d(D=>D===null?null:(D+T+c.length)%c.length),[c.length]);return q.useEffect(()=>{if(f===null)return;const T=U=>{U.key==="Escape"&&w(),U.key==="ArrowLeft"&&N(-1),U.key==="ArrowRight"&&N(1)},D=document.body.style.overflow;return document.body.style.overflow="hidden",window.addEventListener("keydown",T),()=>{document.body.style.overflow=D,window.removeEventListener("keydown",T)}},[f,w,N]),c.length===0?null:n.jsxs(vt,{id:"gallery",title:(o==null?void 0:o.name)||"공간 갤러리",children:[u==="photos.carousel"?n.jsxs("div",{className:"relative",children:[n.jsx("ul",{ref:h,onScroll:y,className:"flex snap-x snap-mandatory gap-3 overflow-x-auto [scrollbar-width:none] lg:grid lg:grid-cols-4 lg:gap-3 lg:snap-none lg:overflow-visible [&::-webkit-scrollbar]:hidden",children:c.map((T,D)=>n.jsx("li",{className:"w-full shrink-0 snap-center lg:w-auto",children:n.jsx(qo,{image:T,onOpen:()=>d(D),className:"aspect-4/3 rounded-lg"})},T.mediaId))}),c.length>1&&n.jsxs(n.Fragment,{children:[n.jsx(tp,{dir:"prev",show:x.prev,onClick:()=>z(-1)}),n.jsx(tp,{dir:"next",show:x.next,onClick:()=>z(1)}),n.jsxs("span",{className:"pointer-events-none absolute bottom-3 right-3 rounded-full bg-black/55 px-2.5 py-1 text-[length:var(--fs-xs)] font-semibold tabular-nums text-white lg:hidden",children:[Math.min(p+1,c.length)," / ",c.length]})]})]}):u==="photos.masonry"?n.jsx("ul",{className:"columns-2 gap-3 sm:columns-3 lg:columns-4 [&>li]:mb-3",children:c.map((T,D)=>n.jsx("li",{className:"break-inside-avoid",children:n.jsx(qo,{image:T,onOpen:()=>d(D),className:"rounded-lg",free:!0})},T.mediaId))}):n.jsx("ul",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3 lg:grid-cols-4",children:c.map((T,D)=>n.jsx("li",{children:n.jsx(qo,{image:T,onOpen:()=>d(D),className:"aspect-square rounded-lg"})},T.mediaId))}),f!==null&&n.jsxs("div",{role:"dialog","aria-modal":"true","aria-label":"사진 크게 보기",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/92 p-4 backdrop-blur-md",onClick:w,children:[n.jsx("button",{type:"button",onClick:w,"aria-label":"닫기",className:"tap absolute right-3 top-3 z-10 flex items-center justify-center rounded-full bg-white/10 text-white transition-colors hover:bg-white/25 sm:right-5 sm:top-5",children:n.jsx(pp,{className:"size-6"})}),n.jsx(lp,{dir:"prev",onClick:()=>N(-1)}),n.jsx(lp,{dir:"next",onClick:()=>N(1)}),n.jsxs("figure",{className:"flex max-h-[85vh] w-full max-w-5xl flex-col items-center gap-3",onClick:T=>T.stopPropagation(),children:[n.jsx("img",{src:c[f].url,alt:c[f].alt,className:"max-h-[72vh] w-auto max-w-full rounded-lg object-contain"}),n.jsxs("figcaption",{className:"text-center text-[length:var(--fs-xs)] text-white/70",children:[c[f].caption??c[f].alt,n.jsxs("span",{className:"ml-2 tabular-nums",children:[f+1," / ",c.length]})]})]})]})]})}function tp({dir:i,show:c,onClick:o}){const u=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:o,"aria-label":i==="prev"?"이전 사진":"다음 사진","aria-hidden":!c,tabIndex:c?0:-1,className:`absolute top-1/2 z-10 flex size-9 -translate-y-1/2 items-center justify-center rounded-full bg-black/45 text-white backdrop-blur-sm transition-opacity hover:bg-black/65 lg:hidden ${c?"opacity-100":"pointer-events-none opacity-0"} ${i==="prev"?"left-2":"right-2"}`,children:n.jsx(u,{className:"size-5"})})}function lp({dir:i,onClick:c}){const o=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:u=>{u.stopPropagation(),c()},"aria-label":i==="prev"?"이전 사진":"다음 사진",className:`tap absolute top-1/2 z-10 flex -translate-y-1/2 items-center justify-center rounded-full bg-white/10 text-white transition-colors hover:bg-white/25 ${i==="prev"?"left-2 sm:left-6":"right-2 sm:right-6"}`,children:n.jsx(o,{className:"size-6"})})}function qo({image:i,onOpen:c,className:o,free:u=!1}){return n.jsx("button",{type:"button",onClick:c,className:`border-line tpl-border group relative block w-full cursor-pointer overflow-hidden border ${o}`,"aria-label":`${i.alt} 크게 보기`,children:n.jsx("img",{src:i.url,alt:i.alt,loading:"lazy",decoding:"async",width:i.width,height:i.height,className:u?"h-auto w-full":"size-full object-cover transition-transform duration-500 group-hover:scale-105"})})}function ap(){const i=le(),{place:c,routes:o}=i,[u,f]=q.useState(!1),d=c.roadAddress??c.address;if(!d)return null;const{latitude:h,longitude:p}=c,g=h!=null&&p!=null,x=yv(c.name,h,p),v=async()=>{try{await navigator.clipboard.writeText(d),f(!0),setTimeout(()=>f(!1),2e3)}catch{}};return n.jsxs(vt,{id:"location",title:"오시는 길",lead:"주소와 주요 거점까지의 이동 시간을 안내합니다.",children:[n.jsxs("div",{className:"grid gap-6 lg:grid-cols-12 lg:gap-8",children:[g&&n.jsx("div",{className:"border-line tpl-border overflow-hidden rounded-xl border lg:col-span-7",children:n.jsx("iframe",{title:`${c.name} 위치 지도`,src:vv(h,p),loading:"lazy",referrerPolicy:"no-referrer-when-downgrade",className:"block aspect-4/3 w-full border-0 sm:aspect-video lg:aspect-auto lg:h-full lg:min-h-[24rem]"})}),n.jsx("div",{className:g?"lg:col-span-5":"lg:col-span-12",children:n.jsxs("div",{className:"panel p-5 sm:p-6",children:[n.jsx("p",{className:"label mb-2",children:"주소"}),n.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[n.jsx("address",{className:"text-[length:var(--fs-lead)] font-bold not-italic",children:d}),n.jsxs("button",{type:"button",onClick:v,title:"주소 복사",className:"border-line tpl-border inline-flex items-center gap-1 rounded-md border bg-current/8 px-2.5 py-1.5 text-[length:var(--fs-xs)] font-medium transition-opacity hover:opacity-70",children:[u?n.jsx(dp,{className:"size-3.5"}):n.jsx(kb,{className:"size-3.5"}),n.jsx("span",{children:u?"복사완료":"복사"})]})]}),c.phone&&n.jsxs("p",{className:"text-muted mt-2 text-[length:var(--fs-sm)]",children:["문의:"," ",n.jsx("a",{href:`tel:${c.phone}`,className:"underline-offset-2 hover:underline",children:c.phone})]}),n.jsxs("div",{className:"mt-5 flex flex-wrap gap-2.5",children:[n.jsxs("a",{href:wp(c.name,h,p),target:"_blank",rel:"noopener noreferrer nofollow",className:"tap flex flex-1 basis-40 items-center justify-center gap-2 whitespace-nowrap rounded-lg bg-[#03C75A] px-4 text-[length:var(--fs-sm)] font-bold text-white transition-opacity hover:opacity-90",children:[n.jsx(Ho,{className:"size-4"}),n.jsx("span",{children:"네이버 길찾기"})]}),n.jsxs("a",{href:gv(c.name,h,p),target:"_blank",rel:"noopener noreferrer nofollow",className:"tap flex flex-1 basis-40 items-center justify-center gap-2 whitespace-nowrap rounded-lg bg-[#FEE500] px-4 text-[length:var(--fs-sm)] font-bold text-[#191600] transition-opacity hover:opacity-90",children:[n.jsx(Ho,{className:"size-4"}),n.jsx("span",{children:"카카오 길찾기"})]}),x&&n.jsxs("a",{href:x,className:"tap only-touch flex-1 basis-40 items-center justify-center gap-2 whitespace-nowrap rounded-lg bg-[#0064FF] px-4 text-[length:var(--fs-sm)] font-bold text-white transition-opacity hover:opacity-90",children:[n.jsx(Ho,{className:"size-4"}),n.jsx("span",{children:"티맵 길찾기"})]})]})]})})]}),o.length>0&&n.jsxs("div",{className:"mt-8",children:[n.jsxs("h3",{className:"mb-3 flex items-center gap-2 text-[length:var(--fs-sm)] font-bold",children:[n.jsx(zb,{className:"size-4 opacity-50"}),n.jsx("span",{children:"주요 거점 소요시간"})]}),n.jsx("div",{className:"panel overflow-hidden",children:n.jsx("div",{className:"slider-viewport",children:n.jsxs("table",{className:"w-full min-w-[34rem] text-left text-[length:var(--fs-sm)]",children:[n.jsxs("caption",{className:"sr-only",children:[i.place.name,"에서 주요 거점까지의 이동 시간"]}),n.jsx("thead",{className:"panel-sunken border-line border-b font-semibold",children:n.jsxs("tr",{children:[n.jsx("th",{scope:"col",className:"p-4",children:"목적지"}),n.jsx("th",{scope:"col",className:"p-4",children:"차량"}),n.jsx("th",{scope:"col",className:"p-4",children:"도보 / 대중교통"}),n.jsx("th",{scope:"col",className:"p-4",children:"거리"}),n.jsx("th",{scope:"col",className:"hidden p-4 md:table-cell",children:"비고"})]})}),n.jsx("tbody",{className:"divide-line divide-y",children:o.map(y=>n.jsxs("tr",{children:[n.jsx("th",{scope:"row",className:"p-4 text-left font-bold",children:y.destination}),n.jsx("td",{className:"p-4 font-semibold",children:y.byCar??"—"}),n.jsx("td",{className:"p-4 opacity-70",children:y.byTransit??"—"}),n.jsx("td",{className:"text-muted p-4 tabular-nums",children:y.distanceText??"—"}),n.jsx("td",{className:"text-muted hidden p-4 md:table-cell",children:y.note??""})]},y.destination))})]})})})]})]})}function Dy(){const i=le(),c=D0(i);return c.length===0?null:n.jsx(vt,{id:"faq",tone:"alt",title:"자주 묻는 질문",lead:"아래 답변은 모두 사업자가 확인한 내용입니다.",children:n.jsx("div",{className:c.length>4?"grid gap-3 lg:grid-cols-2 lg:gap-4":"space-y-3",children:c.map((o,u)=>n.jsxs("details",{open:u===0,className:"panel group h-fit overflow-hidden",children:[n.jsxs("summary",{className:"tap flex cursor-pointer items-center gap-3 px-5 text-[length:var(--fs-sm)] font-bold marker:content-none [&::-webkit-details-marker]:hidden",children:[n.jsx("span",{className:"serif text-muted shrink-0",children:"Q."}),n.jsx("span",{className:"flex-1",children:o.question}),n.jsx("span",{className:"text-muted shrink-0 transition-transform group-open:rotate-45",children:"+"})]}),n.jsx("div",{className:"border-line border-t px-5 pb-5 pt-4 text-[length:var(--fs-sm)] leading-relaxed opacity-80",children:o.answer})]},o.faqId))})})}function Op(){var d,h,p,g;const i=le(),{place:c,site:o}=i,u=_0(i),f=c.roadAddress??c.address;return n.jsx("footer",{className:"w-full pb-28 pt-14 md:pb-14",style:{backgroundColor:"var(--tpl-inverse, #1c1917)",color:"var(--tpl-bg, #ffffff)"},children:n.jsxs("div",{className:"shell",children:[n.jsxs("div",{className:"grid grid-cols-1 gap-8 border-b border-current/15 pb-10 md:grid-cols-12",children:[n.jsxs("div",{className:"space-y-4 md:col-span-7",children:[n.jsx("p",{className:"serif text-[length:var(--fs-lead)] font-bold",children:c.name}),n.jsxs("div",{className:"space-y-2 text-[length:var(--fs-sm)] opacity-75",children:[f&&n.jsxs("p",{className:"flex items-start gap-2",children:[n.jsx(Ls,{className:"mt-1 size-4 shrink-0 opacity-60"}),n.jsx("span",{children:f})]}),c.phone&&n.jsxs("p",{className:"flex items-center gap-2",children:[n.jsx(At,{className:"size-4 shrink-0 opacity-60"}),n.jsx("a",{href:`tel:${c.phone}`,className:"underline-offset-2 hover:underline",children:c.phone})]}),c.email&&n.jsxs("p",{className:"flex items-center gap-2",children:[n.jsx(mp,{className:"size-4 shrink-0 opacity-60"}),n.jsx("a",{href:`mailto:${c.email}`,className:"underline-offset-2 hover:underline",children:c.email})]})]})]}),u.length>0&&n.jsxs("nav",{"aria-label":"공식 채널",className:"md:col-span-5",children:[n.jsx("h2",{className:"label mb-3 !text-current opacity-60",children:"공식 채널"}),n.jsx("ul",{className:"flex flex-wrap gap-2",children:u.map(x=>n.jsx("li",{children:n.jsxs("a",{href:x.url,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1.5 rounded-lg border border-current/25 px-3 py-2 text-[length:var(--fs-xs)] font-medium transition-colors hover:bg-current/10",children:[n.jsx("span",{children:ml(x)}),n.jsx(Db,{className:"size-3.5"})]})},x.url))})]})]}),n.jsxs("div",{className:"flex flex-col gap-3 pt-6 text-[length:var(--fs-xs)] opacity-55 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[n.jsxs("span",{children:["상호: ",c.name]}),((d=c.legal)==null?void 0:d.representative)&&n.jsxs("span",{children:["대표: ",c.legal.representative]}),((h=c.legal)==null?void 0:h.businessRegistrationNumber)&&n.jsxs("span",{children:["사업자등록번호: ",c.legal.businessRegistrationNumber]}),((p=c.legal)==null?void 0:p.mailOrderNumber)&&n.jsxs("span",{children:["통신판매업신고: ",c.legal.mailOrderNumber]}),((g=c.legal)==null?void 0:g.licenseNumber)&&n.jsxs("span",{children:[c.legal.licenseLabel??"인허가번호",": ",c.legal.licenseNumber]})]}),n.jsxs("p",{className:"byline shrink-0",children:[n.jsxs("span",{className:"author",children:["작성·운영 ",c.name]})," · 최종 업데이트: ",n.jsx("time",{dateTime:o.updatedAt,children:qs(o.updatedAt)})]})]})]})})}function _n(){const i=le(),c=i.place.phone,u=Ze(i)[0],f=i.links.find(d=>d.confirmed&&/kakao/i.test(d.url));return!c&&!u&&!f?null:n.jsxs("nav",{"aria-label":"연락 · 예약",className:"border-line safe-b fixed inset-x-0 bottom-0 z-50 flex items-stretch gap-2 border-t px-3 pt-2 backdrop-blur-md lg:hidden",style:{backgroundColor:"color-mix(in srgb, var(--tpl-surface, #fff) 94%, transparent)"},children:[n.jsxs("a",{href:"#location",className:"tap border-line flex w-12 shrink-0 flex-col items-center justify-center rounded-lg border text-[10px] font-medium","aria-label":"오시는 길",children:[n.jsx(Ls,{className:"size-4"}),n.jsx("span",{className:"mt-0.5",children:"위치"})]}),f&&n.jsxs("a",{href:f.url,target:"_blank",rel:"noopener noreferrer",className:"tap border-line flex w-12 shrink-0 flex-col items-center justify-center rounded-lg border text-[10px] font-medium","aria-label":ml(f),children:[n.jsx(Io,{className:"size-4"}),n.jsx("span",{className:"mt-0.5",children:"문의"})]}),c&&n.jsxs("a",{href:`tel:${c}`,className:"tap border-line flex flex-1 items-center justify-center gap-1.5 rounded-lg border text-[length:var(--fs-sm)] font-bold",children:[n.jsx(At,{className:"size-4"}),n.jsx("span",{children:"전화"})]}),u&&n.jsx("a",{href:u.url,target:"_blank",rel:"noopener noreferrer",className:"tap flex min-w-0 flex-[1.4] items-center justify-center truncate rounded-lg px-2 text-[length:var(--fs-sm)] font-bold",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)"},children:ht(u)})]})}const tl="var(--tpl-card, #fafafa)",Ce="var(--tpl-border, #d6d3d1)",We="color-mix(in oklab, var(--tpl-accent, #2563eb) 70%, currentColor)",Ms="var(--tpl-inverse, #1c1917)",ra="var(--tpl-bg, #ffffff)",ul="var(--tpl-text, #09090b)";function Ry({n:i}){return n.jsx("span",{className:"mr-1.5 inline-grid size-[17px] translate-y-px place-items-center rounded-full text-[10px] tabular-nums",style:{backgroundColor:We,color:ra},children:i})}function Rl({id:i,name:c,subtitle:o,count:u,link:f,children:d,dark:h}){const p=hc(),g=p==="reservation"?iu:p==="oasi"?cu:p==="studio"?ru:p==="pastel"?ou:p==="editorial"?au:null,x=f?n.jsxs("a",{href:f.url,target:"_blank",rel:"noopener noreferrer",className:"text-[length:var(--fs-sm)] font-semibold underline-offset-4 opacity-75 transition-opacity hover:opacity-100 hover:underline",children:[f.label," →"]}):void 0;return n.jsx("section",{id:i,"aria-labelledby":`${i}-heading`,className:"border-line paper w-full border-b",style:{backgroundColor:h?Ms:"var(--tpl-surface, #fafafa)",color:h?ra:ul,paddingBlock:"var(--section-space)"},children:n.jsxs("div",{className:"shell",children:[g?n.jsx(g,{id:i,title:c,lead:o,aside:x}):n.jsxs("header",{className:"mb-8 sm:mb-10",children:[n.jsxs("div",{className:"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-2",children:[n.jsx("h2",{id:`${i}-heading`,className:"h2",children:c}),x]}),o&&n.jsx("p",{className:"measure mt-3 text-[length:var(--fs-sm)] opacity-70",children:o})]}),d,u&&n.jsx("p",{className:"mt-6 text-[length:var(--fs-xs)] opacity-60",children:u})]})})}function Gs({children:i,label:c,arrows:o="header",onSelect:u,onReady:f}){return n.jsx(gu,{label:c,gap:1,arrows:o,onSelect:u,onReady:f,children:i})}function fa({source:i,verified:c,imageCredit:o}){return!(i!=null&&i.name)&&!o?null:n.jsxs("p",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 text-[10px] opacity-70",children:[(i==null?void 0:i.name)&&n.jsxs("span",{children:["출처 ·"," ",i.url?n.jsx("a",{href:i.url,target:"_blank",rel:"noopener noreferrer nofollow",className:"underline underline-offset-2",children:i.name}):i.name]}),o&&n.jsxs("span",{children:["사진 · ",o]})]})}function Hs(i,c,o){return`총 ${i}${o}`}const np=We;function Dp(){const i=le(),c=dl(i,"songs"),[o,u]=q.useState(0);if(c.items.length===0)return null;const f=c.items[o]??c.items[0],d=h=>[h.artist,h.year?String(h.year):void 0,h.lyricist||h.composer?`작사 ${h.lyricist??"미상"} / 작곡 ${h.composer??"미상"}`:void 0,h.label].filter(Boolean).join(" · ");return n.jsxs(Rl,{id:"songs",name:c.title||Ye(i,"songs","가요 다방"),subtitle:c.subtitle,count:Hs(c.items.length,c.unverified,"곡"),children:[n.jsxs("div",{className:"tpl-border grid items-center gap-8 border p-6 sm:p-8 md:grid-cols-[240px_minmax(0,1fr)]",style:{backgroundColor:Ms,color:ra,borderColor:"color-mix(in oklab, currentColor 22%, transparent)"},children:[n.jsxs("div",{className:"relative mx-auto size-[220px]",children:[n.jsx("div",{className:"absolute inset-0 rounded-full",style:{backgroundColor:"color-mix(in oklab, currentColor 16%, transparent)"}}),n.jsx("div",{className:"w4-disc w4-spin absolute inset-2 rounded-full",style:{"--lbl":f.labelColor||np,"--w4-vinyl":Ms},children:n.jsx("span",{className:"absolute left-1/2 top-1/2 size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full",style:{backgroundColor:"color-mix(in oklab, currentColor 30%, transparent)"}})}),n.jsxs("div",{"aria-hidden":!0,className:"absolute -right-1 top-3 h-2 w-[110px] origin-right rotate-6",children:[n.jsx("span",{className:"absolute inset-y-[3px] left-0 right-4 rounded-sm",style:{backgroundColor:"color-mix(in oklab, currentColor 65%, transparent)"}}),n.jsx("span",{className:"absolute -top-2 right-0 size-6 rounded-full",style:{backgroundColor:"color-mix(in oklab, currentColor 55%, transparent)"}})]})]}),n.jsx("div",{className:"min-w-0",children:c.items.map((h,p)=>n.jsxs("div",{hidden:p!==o,className:"space-y-3",children:[n.jsxs("p",{className:"text-[10px] tracking-[0.24em]",style:{color:We},children:["A면 · ",p+1," / ",c.items.length]}),n.jsx("h3",{className:"serif text-[length:var(--fs-h2)] leading-tight",children:h.title}),n.jsx("p",{className:"text-[length:var(--fs-xs)] opacity-60",children:d(h)}),h.story&&n.jsx("p",{className:"measure text-[length:var(--fs-sm)] leading-relaxed opacity-85",children:h.story}),h.connection&&n.jsx("p",{className:"measure text-[length:var(--fs-sm)] leading-relaxed",style:{color:We},children:h.connection}),n.jsxs("a",{href:xv(`${h.title} ${h.artist??""}`.trim()),target:"_blank",rel:"noopener noreferrer nofollow",className:"inline-flex items-center gap-1.5 text-[length:var(--fs-sm)] font-bold underline-offset-4 hover:underline",style:{color:We},children:[n.jsx(a0,{className:"size-4"}),n.jsx("span",{children:"유튜브에서 듣기"})]}),n.jsx("span",{className:"block w-fit border border-dashed px-2 py-1 text-[10px] tracking-[0.1em] opacity-60",style:{borderColor:"color-mix(in oklab, currentColor 35%, transparent)"},children:"◎ 가사 대신 이야기 — 원문은 싣지 않습니다"}),n.jsx(fa,{source:h.source,verified:h.verified})]},`disc-${h.title}-${p}`))})]}),c.items.length>1&&n.jsx("div",{className:"mt-4 flex flex-wrap justify-center gap-4",children:c.items.map((h,p)=>n.jsxs("button",{type:"button",onClick:()=>u(p),"aria-pressed":p===o,className:"w-24 text-center",children:[n.jsx("span",{className:"w4-disc-mini mx-auto block size-[76px] rounded-full transition-transform hover:scale-105",style:{"--lbl":h.labelColor||np,"--w4-vinyl":Ms,boxShadow:p===o?`0 0 0 2px ${We}`:void 0}}),n.jsx("span",{className:"mt-2 block truncate text-[10px] leading-tight opacity-70",children:h.title})]},`${h.title}-${p}`))})]})}function Rp(){const i=le(),c=dl(i,"daily"),[o,u]=q.useState();if(q.useEffect(()=>{const g=new Date;u(`${String(g.getMonth()+1).padStart(2,"0")}-${String(g.getDate()).padStart(2,"0")}`)},[]),c.items.length===0)return null;const f=[...c.items].sort((g,x)=>g.monthDay.localeCompare(x.monthDay)),d=o===void 0?1:Math.max(0,(()=>{const g=f.findIndex(v=>v.monthDay===o);if(g>=0)return g;const x=f.findIndex(v=>v.monthDay>o);return x>=0?x:0})()),h=g=>f[(d+g+f.length)%f.length],p=f.length===1?[h(0)]:f.length===2?[h(0),h(1)]:[h(-1),h(0),h(1)];return n.jsx(Rl,{id:"daily",name:c.title||Ye(i,"daily","오늘의 한 장"),subtitle:c.subtitle,count:Hs(f.length,c.unverified,"장"),children:n.jsx("div",{className:"flex items-start justify-center gap-4 sm:gap-6",children:f.map((g,x)=>{const v=p.indexOf(g);return n.jsx(Uy,{page:g,hidden:v<0,isToday:p.length===1||v===1,muted:p.length>1&&v!==1},`${g.monthDay}-${x}`)})})})}function Uy({page:i,isToday:c,muted:o,hidden:u}){const[f,d]=i.monthDay.split("-");return n.jsxs("article",{hidden:u,className:`w4-paper shrink-0 border transition-opacity ${o?"hidden w-[168px] opacity-45 sm:block":"w-[254px] max-w-full"}`,style:{backgroundColor:tl,borderColor:c?We:Ce,boxShadow:c?"5px 6px 0 color-mix(in oklab, currentColor 14%, transparent)":void 0},"aria-current":c?"date":void 0,children:[n.jsx("div",{className:"w4-perf h-3.5 border-b border-dashed",style:{"--tear":tl,borderColor:Ce}}),n.jsxs("div",{className:"border-b px-5 pb-3 pt-5 text-center",style:{borderColor:Ce},children:[n.jsxs("p",{className:"text-[11px] tracking-[0.2em] opacity-60",children:[f,"月"]}),n.jsx("p",{className:`serif mt-1 font-bold leading-none ${o?"text-4xl":"text-6xl"}`,style:{color:We},children:String(Number(d)||d)}),c&&n.jsx("p",{className:"mt-1.5 text-[10px] tracking-[0.3em]",style:{color:We},children:"오늘"})]}),n.jsxs("div",{className:"space-y-2 px-5 pb-5 pt-4",children:[i.category&&n.jsx("p",{className:"text-[10px] tracking-[0.16em] opacity-60",children:i.category}),n.jsx("h3",{className:"serif text-base font-bold leading-snug",children:i.title}),!o&&i.body&&n.jsx("p",{className:"text-[13px] leading-relaxed opacity-80",children:i.body}),!o&&n.jsx("div",{className:"border-t border-dashed pt-2.5",style:{borderColor:Ce},children:n.jsx(fa,{source:i.source,verified:i.verified})})]})]})}function Up(){const i=le(),c=dl(i,"people");return c.items.length===0?null:n.jsx(Rl,{id:"people",name:c.title||Ye(i,"people","인물 열전"),subtitle:c.subtitle,count:c.items.some(o=>!o.imageUrl)?`${Hs(c.items.length,c.unverified,"명")} · 사진이 없는 인물은 이름 활자로 대신합니다`:Hs(c.items.length,c.unverified,"명"),dark:!0,children:n.jsxs("div",{className:"tpl-border border",style:{backgroundColor:Ms,borderColor:"color-mix(in oklab, currentColor 22%, transparent)"},children:[n.jsx("div",{className:"w4-film-perf h-2.5 opacity-70"}),n.jsx("div",{className:"px-3 py-4",children:n.jsx(Gs,{label:"인물 목록",arrows:"overlay",children:c.items.map((o,u)=>n.jsxs("article",{className:"w-[210px] shrink-0 snap-center",children:[o.imageUrl?n.jsx("img",{src:o.imageUrl,alt:`${o.name} 사진`,loading:"lazy",decoding:"async",className:"aspect-3/4 w-full border object-cover",style:{borderColor:"color-mix(in oklab, currentColor 28%, transparent)"}}):n.jsx("span",{className:"serif grid aspect-3/4 w-full place-items-center border text-5xl",style:{backgroundColor:"color-mix(in oklab, currentColor 14%, transparent)",borderColor:"color-mix(in oklab, currentColor 28%, transparent)"},"aria-hidden":!0,children:o.name.trim().charAt(0)}),n.jsxs("h3",{className:"serif mt-3 text-base font-bold",children:[o.name,o.aka&&n.jsxs("span",{className:"ml-1.5 text-xs opacity-60",children:["호 ",o.aka]})]}),n.jsx("p",{className:"mt-0.5 text-[11px] opacity-60",children:[o.role,o.years].filter(Boolean).join(" · ")}),o.oneLine&&n.jsx("p",{className:"mt-2 text-[13px] leading-relaxed opacity-85",children:o.oneLine}),n.jsx("div",{className:"mt-2",children:n.jsx(fa,{source:o.source,verified:o.verified,imageCredit:o.imageCredit})})]},`${o.name}-${u}`))})}),n.jsx("div",{className:"w4-film-perf h-2.5 opacity-70"})]})})}function Hp(){const i=le(),c=dl(i,"chronicle");if(c.items.length===0)return null;const o=[...c.items].sort((f,d)=>f.year==null?d.year==null?0:1:d.year==null?-1:f.year-d.year),u=o.filter(f=>f.turning===!0).length;return n.jsx(Rl,{id:"chronicle",name:c.title||Ye(i,"chronicle","시간의 골목"),subtitle:c.subtitle,count:`붉은 점은 도시의 성격이 바뀐 해입니다 · ${u}개 / 전체 ${o.length}개`,children:n.jsx(Gs,{label:"연표",children:o.map((f,d)=>{const h=f.turning===!0;return n.jsxs("article",{className:"w-[228px] shrink-0 snap-center",children:[n.jsx("p",{className:"serif text-3xl font-bold leading-none",style:{color:h?We:void 0},children:f.year??"연도 미상"}),n.jsxs("div",{className:"relative my-3 h-3",children:[n.jsx("i",{"aria-hidden":!0,className:"absolute top-1/2 left-0 border-t",style:{borderColor:Ce,right:d===o.length-1?"calc(100% - 12px)":0}}),n.jsx("i",{"aria-hidden":!0,className:"absolute top-1/2 left-0 size-3 -translate-y-1/2 rounded-full border-2",style:{backgroundColor:h?We:tl,borderColor:h?We:Ce}})]}),n.jsxs("div",{className:"flex gap-2.5 pr-5",children:[f.imageUrl&&n.jsx("img",{src:f.imageUrl,alt:`${f.title} 사진`,loading:"lazy",decoding:"async",className:"size-14 shrink-0 border object-cover",style:{borderColor:Ce}}),n.jsxs("div",{className:"min-w-0 flex-1 space-y-1.5",children:[n.jsx("h3",{className:"serif text-base font-bold",children:f.title}),f.summary&&n.jsx("p",{className:"text-[13px] leading-relaxed opacity-80",children:f.summary}),f.place&&n.jsxs("p",{className:"text-[11px] opacity-60",children:["지금 이 자리 · ",f.place]}),n.jsx(fa,{source:f.source,verified:f.verified,imageCredit:f.imageCredit})]})]})]},`${f.year??"x"}-${f.title}-${d}`)})})})}function Lp(){const i=le(),c=dl(i,"postcard");return c.items.length===0?null:n.jsx(Rl,{id:"postcard",name:c.title||Ye(i,"postcard","오늘의 엽서"),subtitle:c.subtitle,count:Hs(c.items.length,c.unverified,"장"),children:n.jsx(Gs,{label:"엽서 목록",children:c.items.map((o,u)=>n.jsxs("article",{className:"w4-paper w-[304px] shrink-0 snap-center border p-4",style:{backgroundColor:tl,borderColor:ul},children:[o.imageUrl&&n.jsx("img",{src:o.imageUrl,alt:`${o.place||o.postmark||"엽서"} 사진`,loading:"lazy",decoding:"async",className:"block aspect-3/2 w-full border object-cover",style:{borderColor:Ce}}),o.imageUrl&&n.jsxs("p",{className:"mt-1 mb-3.5 text-[10px] leading-tight opacity-45",children:["사진 · ",o.imageCredit||"출처 표기 없음"]}),n.jsxs("div",{className:"grid grid-cols-[minmax(0,1fr)_auto] gap-3",children:[n.jsxs("div",{className:"min-w-0 border-r pr-3",style:{borderColor:Ce},children:[n.jsxs("p",{className:"serif text-[17px] leading-snug",children:["“",o.line,"”"]}),o.hashtags&&o.hashtags.length>0&&n.jsx("p",{className:"mt-2 text-[11px] opacity-60",children:o.hashtags.join(" ")})]}),n.jsxs("div",{className:"flex w-[62px] flex-col items-center gap-3",children:[n.jsxs("span",{className:"grid h-[56px] w-[44px] place-items-center border border-dashed text-center text-[9px] leading-tight opacity-60",style:{borderColor:Ce},children:["郵票",n.jsx("br",{}),"10원"]}),n.jsx("span",{className:"serif grid size-[54px] -rotate-6 place-items-center rounded-full border-2 px-1 text-center text-[9px] leading-tight",style:{borderColor:We,color:We},children:o.postmark||o.place||"소인"})]})]}),n.jsx("div",{className:"mt-3 border-t border-dashed pt-2.5",style:{borderColor:Ce},children:n.jsx(fa,{source:o.source,verified:o.verified})})]},`${o.line}-${u}`))})})}function Hy(){const i=le(),c=dl(i,"quiz"),[o,u]=q.useState(new Set);if(c.items.length===0)return null;const f=d=>u(h=>{const p=new Set(h);return p.has(d)?p.delete(d):p.add(d),p});return n.jsx(Rl,{id:"quiz",name:c.title||Ye(i,"quiz","뒤집어 보는 질문"),subtitle:c.subtitle,count:`정답은 두지 않습니다 — 힌트와 출처까지만 · 총 ${c.items.length}문항`,children:n.jsx(Gs,{label:"질문 목록",children:c.items.map((d,h)=>{const p=o.has(h);return n.jsx("button",{type:"button",onClick:()=>f(h),"aria-pressed":p,"aria-label":`${h+1}번 문제 ${p?"앞면 보기":"힌트 보기"}`,className:`w4-flip ${p?"w4-flip-on":""} h-[260px] w-[262px] shrink-0 text-left`,children:n.jsxs("span",{className:"w4-flip-inner block size-full",children:[n.jsxs("span",{className:"w4-flip-face w4-paper flex size-full flex-col gap-3 border p-4",style:{backgroundColor:tl,borderColor:ul},children:[n.jsxs("span",{className:"text-[10px] tracking-[0.16em] opacity-60",children:["문제 ",h+1,d.level?` · ${d.level}`:""]}),n.jsx("span",{className:"serif text-[17px] font-bold leading-snug",children:d.question}),n.jsx("span",{className:"mt-auto text-[10px] tracking-[0.16em]",style:{color:We},children:"눌러서 힌트 보기 →"})]}),n.jsxs("span",{className:"w4-flip-face w4-flip-back w4-paper flex size-full flex-col gap-3 border p-4",style:{backgroundColor:tl,borderColor:We},children:[n.jsx("span",{className:"text-[10px] tracking-[0.16em]",style:{color:We},children:"힌트"}),n.jsx("span",{className:"text-[13px] leading-relaxed opacity-85",children:d.hint??"힌트가 아직 없습니다."}),n.jsxs("span",{className:"mt-auto space-y-1 border-t border-dashed pt-2.5",style:{borderColor:Ce},children:[d.topic&&n.jsx("span",{className:"block text-[10px] opacity-55",children:d.topic}),n.jsx(fa,{source:d.source,verified:d.verified})]})]})]})},`${d.question}-${h}`)})})})}const Dl=256,_s=318,Nn=168,sp=34,Ly=16,ip=4;function Bp(i,c,o){const u=Dl*2**o,f=i*Math.PI/180;return{x:(c+180)/360*u,y:(1-Math.log(Math.tan(f)+1/Math.cos(f))/Math.PI)/2*u}}function By(i){if(i.length<2)return 15;for(let c=Ly;c>ip;c-=1){const o=i.map(d=>Bp(d.lat,d.lng,c)),u=Math.max(...o.map(d=>d.x))-Math.min(...o.map(d=>d.x)),f=Math.max(...o.map(d=>d.y))-Math.min(...o.map(d=>d.y));if(u<=_s-sp*2&&f<=Nn-sp*2)return c}return ip}function qy(i,c){const o=d=>d.latitude!=null&&d.longitude!=null?{name:d.searchQuery??d.name,lat:d.latitude,lng:d.longitude}:void 0,u=[];let f=c;return i.forEach((d,h)=>{const p=o(d);p&&(u.push({label:String(h+1),...p,stop:d,from:f&&!Yy(f,p)?f:void 0}),f=p)}),u}function Yy(i,c){return Math.abs(i.lat-c.lat)<1e-5&&Math.abs(i.lng-c.lng)<1e-5}function Gy(i){const o=i.map(u=>({...u}));for(let u=1;uMath.hypot(o[u].x-v.x,o[u].y-v.y)<27);if(!d)break;const h=o[u].x-d.x,p=o[u].y-d.y,g=Math.hypot(h,p)||1,x=(27-g)/g;o[u].x+=(h||1)*x,o[u].y+=p*x}return o}function $y(i){return i.from?bv(i.from,{name:i.stop.name,lat:i.lat,lng:i.lng}):wp(i.stop.searchQuery??i.stop.name,i.lat,i.lng)}function Qy({stops:i}){const{place:c}=le(),o=c.latitude!=null&&c.longitude!=null?{name:c.name,lat:c.latitude,lng:c.longitude}:void 0,u=i.filter(N=>N.latitude!=null&&N.longitude!=null);if(u.length===0||u.length===1&&i.length>1)return null;const f=qy(i,o),d=By(f),h=Gy(f.map(N=>Bp(N.lat,N.lng,d))),p=(Math.min(...h.map(N=>N.x))+Math.max(...h.map(N=>N.x)))/2,g=(Math.min(...h.map(N=>N.y))+Math.max(...h.map(N=>N.y)))/2,x=p-_s/2,v=g-Nn/2,y=2**d,z=[];for(let N=Math.floor(x/Dl);N<=Math.floor((x+_s)/Dl);N+=1)for(let T=Math.floor(v/Dl);T<=Math.floor((v+Nn)/Dl);T+=1){if(T<0||T>=y)continue;const D=(N%y+y)%y;z.push({key:`${N}-${T}`,url:`https://tile.openstreetmap.org/${d}/${D}/${T}.png`,left:N*Dl-x,top:T*Dl-v})}const w=h.map(N=>`${(N.x-x).toFixed(1)},${(N.y-v).toFixed(1)}`).join(" ");return n.jsxs("div",{className:"relative mt-3.5 overflow-hidden border-y",style:{height:Nn,borderColor:Ce,backgroundColor:"#e8e5df"},children:[z.map(N=>n.jsx("img",{src:N.url,alt:"",width:Dl,height:Dl,loading:"lazy",decoding:"async",className:"pointer-events-none absolute max-w-none",style:{left:N.left,top:N.top,filter:"grayscale(1) contrast(0.95) opacity(0.55)"}},N.key)),n.jsx("svg",{className:"pointer-events-none absolute inset-0",width:_s,height:Nn,viewBox:`0 0 ${_s} ${Nn}`,children:n.jsx("polyline",{points:w,fill:"none",stroke:We,strokeWidth:"2",strokeDasharray:"5 4",strokeLinecap:"round",strokeLinejoin:"round",opacity:"0.85"})}),f.map((N,T)=>{const D=h[T];return n.jsx("a",{href:$y(N),target:"_blank",rel:"noopener noreferrer",title:N.from?`${N.from.name} → ${N.stop.name} 길찾기`:`${N.stop.name} — 네이버 지도`,className:"absolute grid h-[22px] min-w-[22px] -translate-x-1/2 -translate-y-1/2 place-items-center rounded-full px-1.5 text-[11px] font-bold whitespace-nowrap shadow-sm transition-transform hover:scale-110",style:{left:D.x-x,top:D.y-v,backgroundColor:We,color:ra,border:`1.5px solid ${ra}`},children:N.label},N.label)}),n.jsx("span",{className:"absolute right-1 bottom-0.5 bg-white/70 px-1 text-[9px] leading-tight text-stone-600",children:"© OpenStreetMap"})]})}function Xy(i){const c=Math.floor(i/60),o=i%60;return[c>0?`${c}시간`:"",o>0?`${o}분`:""].filter(Boolean).join(" ")||"0분"}function Jo(i){var c;return(c=i.days)!=null&&c.length?i.days.map(o=>({label:o.label,startTime:o.startTime,stops:o.stops??[]})):[{startTime:i.startTime,stops:i.stops??[]}]}function Vy({item:i,badge:c,startTime:o,stops:u,first:f,placeName:d}){const h=z0({name:i.name,startTime:o,stops:u});return n.jsxs("article",{className:"w4-paper w-[320px] shrink-0 snap-center border",style:{backgroundColor:tl,borderColor:Ce},children:[n.jsxs("div",{className:"flex items-center justify-between gap-2 border-b px-4 py-2.5",style:{borderColor:Ce},children:[n.jsx("span",{className:"border px-2 py-0.5 text-[11px] font-bold",style:f?{backgroundColor:ul,color:ra,borderColor:ul}:{borderColor:Ce},children:c}),n.jsxs("span",{className:"text-[11px] opacity-60",children:[h.from,"–",h.to," · ",Xy(h.totalMinutes)]})]}),n.jsxs("div",{className:"space-y-1.5 px-4 pt-3.5",children:[n.jsx("h3",{className:"serif text-lg font-bold",children:i.name}),f&&i.audience&&n.jsx("p",{className:"text-[12px] opacity-60",children:i.audience}),f&&i.why&&n.jsx("p",{className:"text-[13px] leading-relaxed opacity-80",children:i.why}),f&&n.jsxs("p",{className:"text-[11px] opacity-50",children:[d,"에서 출발 · ",h.from]})]}),n.jsx(Qy,{stops:h.stops.map(p=>p.stop)}),n.jsx("ol",{className:"mt-3 px-4 pb-3",children:h.stops.map((p,g)=>n.jsxs("li",{className:"grid grid-cols-[46px_minmax(0,1fr)] gap-2.5",children:[n.jsx("span",{className:"serif pt-2 text-[12px] tabular-nums opacity-75",children:p.time}),n.jsxs("div",{className:"border-l pb-5 pl-3",style:{borderColor:Ce},children:[p.move>0&&n.jsxs("p",{className:"pt-1 text-[10px] opacity-50",children:["↓ ",p.move,"분 이동"]}),n.jsxs("div",{className:"flex items-start gap-2.5 pt-1",children:[p.stop.imageUrl&&n.jsx("img",{src:p.stop.imageUrl,alt:`${p.stop.name} 사진`,loading:"lazy",decoding:"async",className:"size-12 shrink-0 object-cover",style:{border:`1px solid ${Ce}`}}),n.jsxs("span",{className:"min-w-0",children:[n.jsxs("span",{className:"block text-sm font-bold",children:[n.jsx(Ry,{n:g+1}),p.stop.name]}),p.stop.note&&n.jsx("span",{className:"mt-0.5 block text-[12px] leading-relaxed opacity-75",children:p.stop.note})]})]}),n.jsxs("p",{className:"mt-0.5 text-[10px] opacity-50",children:[p.time,"–",p.until,p.stop.searchQuery&&` · 지도 검색 ${p.stop.searchQuery}`]})]})]},`${p.stop.name}-${g}`))}),n.jsx("div",{className:"border-t border-dashed px-4 py-2.5",style:{borderColor:Ce},children:n.jsx(fa,{source:i.source,verified:i.verified})})]})}const Yo="그 밖의 일정";function Zy(){var g;const i=le(),c=dl(i,"itinerary"),u=(c.items.length>0?c.items:((g=i.local)==null?void 0:g.itineraries)??[]).filter(x=>Jo(x).some(v=>v.stops.length>0)),f=[...new Set(u.map(x=>{var v;return((v=x.duration)==null?void 0:v.trim())||Yo}))],[d,h]=q.useState(null),p=d??f[0];return u.length===0?null:n.jsxs(Rl,{id:"itinerary",name:c.title||Ye(i,"itinerary","추천 일정"),subtitle:c.subtitle,count:"시각은 출발 시각과 머무는 시간으로 계산한 것입니다",children:[f.length>1&&n.jsx("div",{className:"mb-6 flex flex-wrap gap-1.5",role:"tablist","aria-label":"묵는 기간",children:f.map(x=>{const v=p===x;return n.jsxs("button",{type:"button",role:"tab","aria-selected":v,onClick:()=>h(x),className:"border-line rounded-full border px-4 py-1.5 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-80",style:v?{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg, #fff)",borderColor:"transparent"}:void 0,children:[x,n.jsx("span",{className:"ml-1.5 font-normal opacity-60",children:u.filter(y=>{var z;return(((z=y.duration)==null?void 0:z.trim())||Yo)===x}).length})]},x)})}),f.map(x=>n.jsx("div",{hidden:x!==p,children:n.jsx(Ky,{tab:x,items:u.filter(v=>{var y;return(((y=v.duration)==null?void 0:y.trim())||Yo)===x}),placeName:i.place.name},p)},x))]})}function Ky({tab:i,items:c,placeName:o}){const u=q.useMemo(()=>{let x=0;return c.map(v=>{const y=x;return x+=Jo(v).length,{item:v,start:y}})},[c]),[f,d]=q.useState(0),h=q.useRef(null),p=q.useCallback(x=>{h.current=x},[]),g=u.reduce((x,v)=>v.start<=f?v.start:x,0);return n.jsxs(n.Fragment,{children:[u.length>1&&n.jsx("ul",{className:"border-line mb-5 flex flex-wrap items-center gap-x-4 gap-y-2 border-b pb-3",children:u.map(({item:x,start:v})=>{const y=v===g;return n.jsx("li",{children:n.jsx("button",{type:"button",onClick:()=>{var z;return(z=h.current)==null?void 0:z.scrollTo(v)},"aria-current":y,className:`text-left text-[length:var(--fs-sm)] underline-offset-4 transition-opacity hover:opacity-100 ${y?"font-bold underline":"opacity-55 hover:underline"}`,children:x.name})},`${x.name}-${v}`)})}),n.jsx(Gs,{label:`${i} 일정`,onSelect:d,onReady:p,children:u.flatMap(({item:x,start:v},y)=>Jo(x).map((z,w)=>n.jsx(Vy,{item:x,badge:z.label??x.duration??`${w+1}일차`,startTime:z.startTime,stops:z.stops,first:w===0,placeName:o},`${x.name}-${v}-${w}`)))})]})}function Jy(){const i=le(),c=dl(i,"video"),[o,u]=q.useState(),f=q.useRef(null),[d,h]=q.useState({prev:!1,next:!0}),p=q.useCallback(()=>{const v=f.current;if(!v)return;const y=v.scrollWidth-v.clientWidth;h({prev:v.scrollLeft>8,next:v.scrollLeft(p(),window.addEventListener("resize",p),()=>window.removeEventListener("resize",p)),[p]);const g=q.useCallback(v=>{const y=f.current;if(!y)return;const z=window.matchMedia("(prefers-reduced-motion: reduce)").matches;y.scrollBy({left:v*y.clientWidth*.85,behavior:z?"auto":"smooth"})},[]);if(xu({box:f,interval:pu,advance:()=>Cp(f.current)}),c.items.length===0)return null;const x=c.items.length>1;return n.jsx(Rl,{id:"video",name:c.title||Ye(i,"video","영상으로 보기"),subtitle:c.subtitle,link:c.linkUrl?{url:c.linkUrl,label:c.linkLabel??"더 보기"}:void 0,children:n.jsxs("div",{className:"relative",children:[n.jsx("ul",{ref:f,onScroll:p,className:x?"flex snap-x snap-mandatory gap-4 overflow-x-auto pb-2 [scrollbar-width:none] lg:grid lg:grid-cols-3 lg:gap-4 lg:snap-none lg:overflow-visible lg:pb-0 [&::-webkit-scrollbar]:hidden":"grid grid-cols-1 gap-4",children:c.items.map((v,y)=>{const z=p0(v.url),w=x0(v.url),N=o===y;return n.jsx("li",{className:x?"shrink-0 basis-[86%] snap-start sm:basis-[56%] lg:basis-auto":"",children:n.jsxs("figure",{className:"space-y-2",children:[n.jsx("div",{className:"tpl-border relative mx-auto overflow-hidden border",style:{borderColor:Ce,backgroundColor:tl,aspectRatio:w?"9 / 16":"16 / 9",width:w?"min(100%, 22rem)":"100%"},children:N&&z?n.jsx("iframe",{src:b0(z),title:v.caption||"영상",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0,className:"size-full border-0"}):n.jsxs("a",{href:v.url,target:"_blank",rel:"noopener noreferrer",onClick:T=>{z&&(T.preventDefault(),u(y))},"aria-label":`${v.caption||"영상"} 재생`,className:"group block size-full",children:[z?n.jsx("img",{src:g0(z),alt:"",loading:"lazy",decoding:"async",className:"size-full object-cover"}):n.jsx("span",{className:"text-muted grid size-full place-items-center px-4 text-center text-[length:var(--fs-xs)]",children:"유튜브 영상이 아닙니다 — 눌러서 원본으로 갑니다"}),n.jsx("span",{className:"absolute inset-0 grid place-items-center",children:n.jsx("span",{className:"grid size-14 place-items-center rounded-full backdrop-blur transition-transform group-hover:scale-110",style:{backgroundColor:"color-mix(in srgb, var(--tpl-inverse, #1c1917) 70%, transparent)",color:"var(--tpl-bg, #fff)"},children:n.jsx(Vb,{className:"size-6"})})})]})}),v.caption&&n.jsx("figcaption",{className:"text-[length:var(--fs-sm)] leading-relaxed opacity-80",children:v.caption}),n.jsx(fa,{source:v.source,verified:v.verified})]})},`${v.url}-${y}`)})}),x&&n.jsxs(n.Fragment,{children:[n.jsx(cp,{dir:"prev",onClick:()=>g(-1),disabled:!d.prev}),n.jsx(cp,{dir:"next",onClick:()=>g(1),disabled:!d.next})]})]})})}function cp({dir:i,onClick:c,disabled:o}){const u=i==="prev"?oa:ua;return n.jsx("button",{type:"button",onClick:c,disabled:o,"aria-label":i==="prev"?"이전 영상":"다음 영상",className:`tap absolute top-1/2 z-10 flex -translate-y-1/2 items-center justify-center rounded-full bg-black/55 text-white backdrop-blur transition hover:bg-black/75 disabled:pointer-events-none disabled:opacity-0 lg:hidden ${i==="prev"?"left-1":"right-1"}`,children:n.jsx(u,{className:"size-5"})})}const Wy={1:"한",2:"두",3:"세",4:"네",5:"다섯"},Fy=[{id:"songs",label:"가요 다방",Component:Dp},{id:"daily",label:"오늘의 한 장",Component:Rp},{id:"people",label:"인물 열전",Component:Up},{id:"chronicle",label:"시간의 골목",Component:Hp},{id:"postcard",label:"오늘의 엽서",Component:Lp}];function Iy(){const i=le(),c=Fy.filter(f=>dl(i,f.id).items.length>0),[o,u]=q.useState(0);return c.length===0?null:n.jsxs(n.Fragment,{children:[n.jsx("section",{id:"story","aria-labelledby":"story-heading",className:"paper w-full",style:{backgroundColor:"var(--tpl-surface, #fafafa)",color:ul,paddingTop:"var(--section-space)",paddingBottom:"calc(var(--section-space) * 0.55)"},children:n.jsxs("div",{className:"shell",children:[n.jsx("h2",{id:"story-heading",className:"h2",children:Ye(i,"story","군산 이야기")}),n.jsxs("p",{className:"measure mt-3 text-[length:var(--fs-sm)] opacity-70",children:["이 도시를 ",Wy[c.length]??`${c.length}`," 갈래로 봅니다. 하나씩 골라 보세요."]}),n.jsx("div",{className:"mt-6 flex flex-wrap gap-1.5",role:"tablist","aria-label":"군산 이야기",children:c.map((f,d)=>{const h=d===o;return n.jsx("button",{type:"button",role:"tab","aria-selected":h,"aria-controls":f.id,onClick:()=>u(d),className:"rounded-full border px-4 py-1.5 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-80",style:h?{backgroundColor:ul,color:ra,borderColor:ul}:{borderColor:Ce},children:f.label},f.id)})})]})}),c.map((f,d)=>n.jsx("div",{hidden:d!==o,children:n.jsx(f.Component,{})},f.id))]})}const Py={open:"진행 중",soon:"곧 시작",closed:"종료"};function rp(i,c){return i.endDate&&i.endDatec?"soon":"open"}function Go(i,c){return i.kind==="공지"&&!i.startDate&&!i.endDate?"공지":c&&Py[c]}function $o(i){const c=f=>{const d=/^(\d{4})-(\d{2})-(\d{2})$/.exec(f??"");return d?`${Number(d[2])}월 ${Number(d[3])}일`:void 0},o=c(i.startDate),u=c(i.endDate);if(o&&u)return o===u?o:`${o} – ${u}`;if(o)return`${o}부터`;if(u)return`${u}까지`}function e1(){const i=le(),c=dl(i,"event"),[o,u]=q.useState();q.useEffect(()=>u(new Date().toLocaleDateString("sv-SE")),[]);const[f,d]=q.useState(null),h=q.useCallback(()=>d(null),[]);if(q.useEffect(()=>{if(f===null)return;const x=y=>{y.key==="Escape"&&h()},v=document.body.style.overflow;return document.body.style.overflow="hidden",window.addEventListener("keydown",x),()=>{document.body.style.overflow=v,window.removeEventListener("keydown",x)}},[f,h]),c.items.length===0)return null;const p=f===null?void 0:c.items[f],g=p&&o?rp(p,o):void 0;return n.jsxs(Rl,{id:"event",name:c.title||Ye(i,"event",`${i.place.name} 소식`),subtitle:c.subtitle,link:c.linkUrl?{url:c.linkUrl,label:c.linkLabel??"더 보기"}:void 0,count:"자세한 내용과 최신 소식은 원문에서 확인해 주세요.",children:[n.jsx("ul",{className:"grid gap-5 sm:grid-cols-2 lg:grid-cols-3",children:c.items.map((x,v)=>{const y=o?rp(x,o):void 0,z=Go(x,y),w=$o(x),N=y==="closed";return n.jsxs("li",{className:"w4-paper relative flex flex-col border-2",style:{backgroundColor:tl,borderColor:Ce,opacity:N?.6:1,boxShadow:N?"none":"3px 3px 0 color-mix(in oklab, currentcolor 12%, transparent)"},children:[n.jsx("button",{type:"button",onClick:()=>d(v),"aria-label":`${x.title} 자세히 보기`,className:"absolute inset-0 z-20 cursor-pointer"}),n.jsx("div",{className:x.imageUrl?"relative overflow-hidden border-b-2":"contents",style:x.imageUrl?{borderColor:Ce}:void 0,children:x.imageUrl?n.jsx("img",{src:x.imageUrl,alt:`${x.title} 안내 이미지`,loading:"lazy",decoding:"async",className:"aspect-4/3 w-full object-cover",style:N?{filter:"grayscale(1)"}:void 0}):null}),n.jsxs("div",{className:"flex flex-1 flex-col gap-2.5 p-5",children:[n.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[z&&n.jsx("span",{className:"border-2 px-2 py-0.5 text-[11px] font-bold tracking-[0.08em]",style:{transform:"rotate(-3deg)",backgroundColor:y==="open"&&z!=="공지"?We:tl,color:y==="open"&&z!=="공지"?ra:ul,borderColor:y==="open"&&z!=="공지"?We:Ce},children:z}),w&&n.jsx("span",{className:"text-[11px] font-semibold tabular-nums opacity-55",children:w})]}),n.jsx("h3",{className:"serif text-lg font-bold leading-snug",children:x.title}),x.summary&&n.jsx("p",{className:"line-clamp-2 text-[13px] leading-relaxed opacity-80",children:x.summary}),x.howTo&&n.jsx("p",{className:"border-2 border-dashed px-3 py-2 text-[12px] leading-relaxed",style:{borderColor:Ce},children:x.howTo}),x.body&&n.jsx("p",{className:`whitespace-pre-line text-[12px] leading-relaxed opacity-70 ${x.imageUrl?"line-clamp-3":"line-clamp-[9]"}`,children:x.body}),n.jsx("p",{className:"mt-auto pt-2 text-[12px] font-bold opacity-70",children:"자세히 보기 →"})]})]},`${x.title}-${v}`)})}),p&&n.jsx("div",{role:"dialog","aria-modal":"true","aria-label":p.title,className:"fixed inset-0 z-50 flex items-end justify-center bg-black/70 p-0 backdrop-blur-sm sm:items-center sm:p-6",onClick:h,children:n.jsxs("article",{onClick:x=>x.stopPropagation(),className:"w4-paper max-h-[88vh] w-full max-w-2xl overflow-y-auto border-2",style:{backgroundColor:tl,borderColor:Ce,color:ul},children:[p.imageUrl&&n.jsx("img",{src:p.imageUrl,alt:`${p.title} 안내 이미지`,className:"max-h-[46vh] w-full object-contain",style:{backgroundColor:"color-mix(in oklab, currentcolor 6%, transparent)"}}),n.jsxs("div",{className:"space-y-4 p-6 sm:p-8",children:[n.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[Go(p,g)&&n.jsx("span",{className:"border-2 px-2.5 py-1 text-[11px] font-bold tracking-[0.08em]",style:{borderColor:Ce},children:Go(p,g)}),$o(p)&&n.jsx("span",{className:"text-[12px] font-semibold tabular-nums opacity-60",children:$o(p)})]}),n.jsx("h3",{className:"serif text-[length:var(--fs-h3)] font-bold leading-snug",children:p.title}),p.summary&&n.jsx("p",{className:"text-[length:var(--fs-sm)] leading-relaxed opacity-85",children:p.summary}),p.howTo&&n.jsx("p",{className:"border-2 border-dashed px-4 py-3 text-[length:var(--fs-sm)] leading-relaxed",style:{borderColor:Ce},children:p.howTo}),p.body&&n.jsx("p",{className:"whitespace-pre-line text-[length:var(--fs-sm)] leading-relaxed opacity-85",children:p.body}),n.jsxs("div",{className:"flex items-center justify-between gap-4 pt-2",children:[p.postUrl?n.jsx("a",{href:p.postUrl,target:"_blank",rel:"noopener noreferrer",className:"text-[length:var(--fs-sm)] font-bold underline-offset-4 hover:underline",children:"원문 보기 →"}):n.jsx("span",{}),n.jsxs("button",{type:"button",onClick:h,className:"tap inline-flex items-center gap-1.5 border-2 px-4 text-[length:var(--fs-sm)] font-bold",style:{borderColor:Ce},children:[n.jsx(pp,{className:"size-4"}),n.jsx("span",{children:"닫기"})]})]})]})]})})]})}const t1={songs:Dp,daily:Rp,people:Up,chronicle:Hp,postcard:Lp,quiz:Hy,itinerary:Zy,video:Jy,event:e1,story:Iy};function l1({children:i}){return n.jsxs("div",{className:"flex min-h-screen w-full flex-col",children:[n.jsx(s1,{}),n.jsx("div",{className:"flex w-full flex-1 flex-col",children:i}),n.jsx(i1,{}),n.jsx(_n,{})]})}function qp(){const i=le(),c=ft(i);return[{id:"intro",href:"#about",fallback:"소개"},{id:c.path,href:"#units",fallback:c.label},{id:"info",href:"#info",fallback:"이용 정보"},{id:"booking",href:"#booking",fallback:"예약 안내"},{id:"photos",href:"#gallery",fallback:"사진"},{id:"map",href:"#location",fallback:"오시는 길"},{id:"local",href:"#guide",fallback:"주변 정보"},{id:"faq",href:"#faq",fallback:"자주 묻는 질문"}].filter(o=>Kt(i,o.id)).map(o=>({label:Ye(i,o.id,o.fallback),href:o.href}))}const a1=24,n1="0 1px 3px color-mix(in srgb, var(--tpl-inverse, #1c1917) 55%, transparent)";function s1(){const i=le(),c=qp(),[o,u]=q.useState(!1);q.useEffect(()=>{const d=()=>u(window.scrollY>a1);return d(),window.addEventListener("scroll",d,{passive:!0}),()=>window.removeEventListener("scroll",d)},[]);const f=o?"opacity-70 transition-opacity hover:opacity-100":"underline-offset-4 hover:underline";return n.jsx("header",{className:`fixed inset-x-0 top-0 z-40 w-full transition-colors duration-300 ${o?"border-line border-b backdrop-blur-md":""}`,style:o?{backgroundColor:"color-mix(in srgb, var(--tpl-surface, #fff) 92%, transparent)"}:{color:"var(--tpl-bg, #ffffff)",textShadow:n1},children:n.jsxs("div",{className:"shell grid h-20 grid-cols-[1fr_auto] items-center gap-4 lg:grid-cols-[1fr_auto_1fr]",children:[n.jsx("a",{href:"#top",className:"min-w-0",children:n.jsx("span",{className:"serif block truncate",style:{fontSize:"var(--fs-lead)",fontWeight:300,letterSpacing:"0.12em"},children:i.place.name})}),n.jsx("nav",{"aria-label":"주요 메뉴",className:"hidden items-center justify-center gap-10 lg:flex",children:c.map(d=>n.jsx("a",{href:d.href,className:`py-1 text-[length:var(--fs-sm)] font-light ${f}`,children:d.label},d.href))}),n.jsxs("div",{className:"flex items-center justify-end gap-2",children:[i.place.phone&&n.jsx("a",{href:`tel:${i.place.phone}`,className:`tap hidden items-center text-[length:var(--fs-sm)] font-light tabular-nums sm:inline-flex ${f}`,children:i.place.phone}),c.length>0&&n.jsxs("details",{className:"lg:hidden",children:[n.jsx("summary",{className:"tap flex cursor-pointer list-none items-center justify-center px-2 text-[length:var(--fs-sm)] font-light marker:content-none [&::-webkit-details-marker]:hidden","aria-label":"메뉴 열기",children:"메뉴"}),n.jsx("nav",{"aria-label":"전체 메뉴",className:"border-line absolute inset-x-0 top-full border-b border-t",style:{backgroundColor:"var(--tpl-surface, #fff)",color:"var(--tpl-text)",textShadow:"none"},children:n.jsx("ul",{className:"divide-line shell divide-y",children:c.map(d=>n.jsx("li",{children:n.jsx("a",{href:d.href,className:"tap flex items-center text-[length:var(--fs-sm)] font-light",children:d.label})},d.href))})})]})]})]})})}function i1(){var x,v,y,z;const i=le(),{place:c,site:o,narrative:u}=i,f=qp(),d=c.roadAddress??c.address,h=Ze(i)[0],p=wn(i),g=u.about[0]??u.summary;return n.jsx("footer",{className:"border-line paper w-full border-t pb-28 md:pb-16",style:{backgroundColor:"var(--tpl-surface-alt, #f5f5f4)",paddingTop:"var(--section-space)"},children:n.jsxs("div",{className:"shell",children:[n.jsxs("div",{className:"grid gap-10 md:grid-cols-3 md:gap-12",children:[n.jsxs("div",{className:"min-w-0",children:[n.jsx("p",{className:"serif",style:{fontSize:"var(--fs-lead)",fontWeight:300,letterSpacing:"0.1em"},children:c.name}),g&&n.jsx("p",{className:"text-muted measure mt-4 text-[length:var(--fs-sm)] leading-loose",children:g})]}),n.jsxs("dl",{className:"min-w-0 space-y-5",children:[d&&n.jsxs("div",{children:[n.jsx("dt",{className:"label",children:"주소"}),n.jsx("dd",{className:"mt-1 text-[length:var(--fs-sm)] font-light",children:d})]}),c.phone&&n.jsxs("div",{children:[n.jsx("dt",{className:"label",children:"전화"}),n.jsx("dd",{className:"mt-1 text-[length:var(--fs-sm)] font-light tabular-nums",children:n.jsx("a",{href:`tel:${c.phone}`,className:"underline-offset-4 hover:underline",children:c.phone})})]}),c.email&&n.jsxs("div",{children:[n.jsx("dt",{className:"label",children:"이메일"}),n.jsx("dd",{className:"mt-1 text-[length:var(--fs-sm)] font-light",children:n.jsx("a",{href:`mailto:${c.email}`,className:"underline-offset-4 hover:underline",children:c.email})})]}),h&&n.jsxs("div",{children:[n.jsx("dt",{className:"label",children:"예약"}),n.jsx("dd",{className:"mt-1 text-[length:var(--fs-sm)] font-light",children:n.jsx("a",{href:h.url,target:"_blank",rel:"noopener noreferrer",className:"underline-offset-4 hover:underline",children:ks(h)})})]})]}),f.length>0&&n.jsx("nav",{"aria-label":"사이트 메뉴",className:"min-w-0",children:n.jsx("ul",{className:"space-y-3",children:f.map(w=>n.jsx("li",{children:n.jsx("a",{href:w.href,className:"text-muted text-[length:var(--fs-sm)] font-light underline-offset-4 hover:underline",children:w.label})},w.href))})})]}),n.jsx("hr",{className:"border-line mt-12 border-t"}),p.length>0&&n.jsx("ul",{className:"mt-8 flex flex-wrap items-center justify-center gap-x-6 gap-y-2",children:p.map(w=>n.jsx("li",{children:n.jsx("a",{href:w.url,target:"_blank",rel:"noopener noreferrer",className:"text-muted text-[length:var(--fs-xs)] font-light underline-offset-4 hover:underline",children:ks(w)})},w.url))}),n.jsxs("div",{className:"text-muted mt-8 flex flex-wrap items-center justify-center gap-x-4 gap-y-1 text-center text-[length:var(--fs-xs)] font-light",children:[n.jsxs("span",{children:["상호 ",c.name]}),((x=c.legal)==null?void 0:x.representative)&&n.jsxs("span",{children:["대표 ",c.legal.representative]}),((v=c.legal)==null?void 0:v.businessRegistrationNumber)&&n.jsxs("span",{children:["사업자등록번호 ",c.legal.businessRegistrationNumber]}),((y=c.legal)==null?void 0:y.mailOrderNumber)&&n.jsxs("span",{children:["통신판매업신고 ",c.legal.mailOrderNumber]}),((z=c.legal)==null?void 0:z.licenseNumber)&&n.jsxs("span",{children:[c.legal.licenseLabel??"인허가번호"," ",c.legal.licenseNumber]}),n.jsxs("span",{className:"byline",children:[n.jsxs("span",{className:"author",children:["작성·운영 ",c.name]})," · 최종 업데이트: ",n.jsx("time",{dateTime:o.updatedAt,children:qs(o.updatedAt)})]})]})]})})}const c1=`
+.oasi-page main > section:not([data-oasi]) {
+ background-color: transparent !important;
+ background-image: none !important;
+ border-color: transparent !important;
+ color: var(--tpl-text) !important;
+ padding-block: var(--oasi-gap) 0 !important;
+}
+.oasi-page main > section:not([data-oasi]) .shell {
+ max-width: none;
+ padding-inline: 0;
+}
+.oasi-page main > section#about > .shell > .grid {
+ display: block;
+}
+.oasi-page main > section#about > .shell > .grid > * + * {
+ margin-top: 2.5rem;
+}
+.oasi-page main > section#summary dl {
+ grid-template-columns: minmax(0, 1fr);
+}
+
+/*
+ * 붙여넣기 아이템 카드 — 소식 · 영상 · 추천 일정 (2026-09-04, 사장님: "1,2,3안 다 맞추세요")
+ *
+ * ★ 이 카드들은 .panel 이 아니라 제 인라인 style 로 면을 그린다(items/common.tsx 의
+ * ITEM_CARD·ITEM_BORDER). 그래서 위 .panel 규칙이 안 닿았고, 섹션 띠를 다 지운 3안에서
+ * **소식 카드만 갱지 결에 2px 테두리를 두른 상자로 혼자 서 있었다.**
+ * ★ w4-paper 의 결은 1안(레트로 갱지)의 것이다. 여기서는 결을 지우고 테두리를 실선 한 겹으로
+ * 낮춘다. 상자를 아예 없애지는 않는다 — 전단 여섯 장이 경계 없이 붙으면 어디까지가 한 장인지
+ * 안 보인다. 면은 빼고 테두리만 남기는 게 이 안의 타협점이다.
+ * ★ 배경은 transparent 로 두지 않는다. 사진 없는 공지 카드가 종이에 바로 얹히면
+ * 본문과 구분이 사라진다 — 아주 옅은 틴트 한 겹만 남긴다.
+ * ★ 영상은 뺐다 (2026-09-04, 사장님: "영상 border 안 예쁘다")
+ * 영상 카드는 상자가 아니라 **표지 사진 한 장**이고, 쇼츠라 9:16 세로다. li 에 틴트를 깔면
+ * 영상보다 넓은 회색 판이 뒤에 깔려 액자처럼 보인다. 사진은 제 테두리가 곧 경계다.
+ */
+.oasi-page section#event li,
+.oasi-page section#itinerary article {
+ background-image: none !important;
+ background-color: color-mix(in oklab, currentcolor 3%, transparent) !important;
+ border-width: 1px !important;
+ box-shadow: none !important;
+}
+
+.oasi-page .panel,
+.oasi-page .panel-sunken {
+ background-color: transparent;
+ border-width: 0;
+ border-radius: 0;
+ box-shadow: none;
+}
+
+.oasi-page main > section#faq > .shell > div:last-of-type {
+ row-gap: 0;
+ column-gap: 2.5rem;
+}
+.oasi-page main > section#faq details {
+ margin-block: 0;
+ border-top: 1px solid var(--site-line);
+}
+.oasi-page main > section#faq summary {
+ padding-inline: 0;
+}
+.oasi-page main > section#faq summary > span:first-child {
+ width: 1.125rem;
+}
+.oasi-page main > section#faq summary + div {
+ border-top-width: 0;
+ padding-inline: 1.875rem 0;
+ padding-top: 0.5rem;
+}
+
+.oasi-page main > section#info dl.panel > div {
+ padding-inline: 0;
+}
+.oasi-page main > section#info dl > div.panel {
+ border-top: 1px solid var(--site-line);
+ padding-inline: 0;
+}
+
+.oasi-page main > section#location .panel {
+ border-top: 1px solid var(--site-line);
+ padding-inline: 0;
+}
+.oasi-page main > section#location :is(thead, tbody) :is(th, td):first-child {
+ padding-left: 0;
+}
+.oasi-page main > section#location :is(thead, tbody) :is(th, td):last-child {
+ padding-right: 0;
+}
+
+.oasi-page main > section#weather .panel {
+ padding-inline: 0;
+}
+
+.oasi-page main > section#guide .panel > span:last-child {
+ padding-inline: 0;
+}
+@media (min-width: 40rem) {
+ .oasi-page main > section#festival .panel > span:last-child {
+ padding-inline: 0;
+ }
+}
+`,r1={"--oasi-gap":"clamp(3.5rem, 7vw, var(--tpl-section-space, 4rem))",backgroundColor:"var(--tpl-bg)",color:"var(--tpl-text)"};function o1({children:i}){var v,y,z,w;const c=le(),{place:o}=c,u=ft(c),f=Ze(c)[0],d=wn(c),h=[{label:"처음",href:"#top",show:!0},{label:"소개",href:"#about",show:Kt(c,"intro")},{label:u.label,href:"#units",show:c.units.length>0},{label:"이용 정보",href:"#info",show:!0},{label:"주변",href:"#guide",show:Kt(c,"local")},{label:"오시는 길",href:"#location",show:!0},{label:"자주 묻는 질문",href:"#faq",show:c.faqs.length>0}].filter(N=>N.show),p=[...Oa(c).map(N=>`${N.label} ${N.value}`),...c.theme.sections.filter(N=>{var T;return N.enabled&&((T=N.name)==null?void 0:T.trim())}).map(N=>N.name.trim())].slice(0,3),g=c.narrative.tagline??c.narrative.heroSubline,x=o.roadAddress??o.address;return n.jsxs("div",{className:"oasi-page flex min-h-screen w-full flex-col",style:r1,children:[n.jsx("style",{dangerouslySetInnerHTML:{__html:c1}}),n.jsxs("div",{className:"mx-auto flex w-full max-w-[72rem] flex-col gap-10 px-5 pb-16 pt-10 lg:flex-row lg:gap-14 lg:px-10 lg:pb-24 lg:pt-16",children:[n.jsxs("header",{className:"lg:sticky lg:top-12 lg:h-fit lg:w-[18.75rem] lg:shrink-0",children:[n.jsxs("a",{href:"#top",className:"block",children:[n.jsx("span",{className:"serif block leading-none",style:{fontSize:"var(--fs-display)",fontWeight:300,letterSpacing:"0.14em"},children:o.name}),o.englishName&&n.jsx("span",{className:"text-muted mt-3 block text-[length:var(--fs-xs)] tracking-[0.24em]",children:o.englishName})]}),n.jsx("nav",{"aria-label":"주요 메뉴",className:"mt-12 lg:mt-24",children:n.jsx("ul",{className:"flex flex-wrap items-center gap-x-6 gap-y-1 lg:block",children:h.map((N,T)=>n.jsx("li",{children:n.jsx("a",{href:N.href,"aria-current":T===0?"true":void 0,className:`tap inline-flex items-center text-[length:var(--fs-sm)] transition-opacity hover:opacity-100 ${T===0?"":"text-muted"}`,children:N.label})},N.label))})}),f&&n.jsx("a",{href:f.url,target:"_blank",rel:"noopener noreferrer",className:"tap mt-2 inline-flex items-center text-[length:var(--fs-sm)] underline underline-offset-[6px]",style:{color:"var(--color-brand)"},children:ht(f)})]}),n.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[(p.length>0||g)&&n.jsxs("div",{className:"border-line flex flex-col gap-3 border-y py-4 sm:flex-row sm:items-center sm:justify-between sm:gap-6",children:[p.length>0&&n.jsx("ul",{className:"text-muted flex min-w-0 flex-wrap items-center gap-x-4 gap-y-1 text-[length:var(--fs-xs)]",children:p.map((N,T)=>n.jsxs("li",{className:"flex items-center gap-4",children:[T>0&&n.jsx("span",{"aria-hidden":!0,className:"opacity-40",children:"|"}),n.jsx("span",{children:N})]},N))}),g&&n.jsx("p",{className:"text-muted measure shrink-0 text-[length:var(--fs-xs)] leading-[1.9] sm:max-w-[18rem] sm:text-right",children:g})]}),i]})]}),n.jsx("footer",{className:"border-line mt-auto w-full border-t",children:n.jsxs("div",{className:"mx-auto grid w-full max-w-[72rem] grid-cols-1 gap-8 px-5 pb-28 pt-10 text-[length:var(--fs-xs)] leading-[1.9] sm:grid-cols-3 lg:px-10 lg:pb-14",children:[n.jsxs("p",{children:["[",o.name,"]"]}),d.length>0?n.jsx("ul",{className:"space-y-1",children:d.map(N=>n.jsx("li",{children:n.jsx("a",{href:N.url,target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-[5px]",children:ks(N)})},N.url))}):n.jsx("span",{}),n.jsxs("div",{className:"text-muted space-y-1 sm:text-right",children:[x&&n.jsx("p",{children:x}),o.phone&&n.jsx("p",{children:n.jsx("a",{href:`tel:${o.phone}`,className:"underline underline-offset-[5px]",children:o.phone})}),o.email&&n.jsx("p",{children:o.email}),((v=o.legal)==null?void 0:v.representative)&&n.jsxs("p",{children:["대표 ",o.legal.representative]}),((y=o.legal)==null?void 0:y.businessRegistrationNumber)&&n.jsxs("p",{children:["사업자등록번호 ",o.legal.businessRegistrationNumber]}),((z=o.legal)==null?void 0:z.mailOrderNumber)&&n.jsxs("p",{children:["통신판매업신고 ",o.legal.mailOrderNumber]}),((w=o.legal)==null?void 0:w.licenseNumber)&&n.jsxs("p",{children:[o.legal.licenseLabel??"인허가번호"," ",o.legal.licenseNumber]}),n.jsxs("p",{className:"byline",children:[n.jsxs("span",{className:"author",children:["작성·운영 ",o.name]})," · 최종 업데이트: ",n.jsx("time",{dateTime:c.site.updatedAt,children:qs(c.site.updatedAt)})]})]})]})}),n.jsx(_n,{})]})}function u1({children:i}){var z,w,N,T;const c=le(),{place:o,narrative:u,site:f}=c,d=ft(c),h=En(c),p=Oa(c),g=Ze(c)[0],x=c.links.filter(D=>D.confirmed),v=o.roadAddress??o.address,y=[{label:"소개",href:"#about",show:Kt(c,"intro")},{label:d.label,href:"#units",show:c.units.length>0},{label:"이용 정보",href:"#info",show:!0},{label:"주변 정보",href:"#guide",show:Kt(c,"local")},{label:"오시는 길",href:"#location",show:!0},{label:"자주 묻는 질문",href:"#faq",show:c.faqs.length>0}].filter(D=>D.show);return n.jsxs("div",{className:"flex min-h-screen w-full flex-col lg:flex-row",style:{backgroundColor:"var(--tpl-bg)",color:"var(--tpl-text)"},children:[n.jsx("aside",{className:"w-full shrink-0 px-6 pb-8 pt-8 lg:sticky lg:top-0 lg:h-screen lg:w-[260px] lg:overflow-y-auto lg:px-7 lg:py-10",style:{backgroundColor:"var(--tpl-bg)"},children:n.jsxs("div",{className:"flex h-full min-w-0 flex-col",children:[n.jsx("a",{href:"#top",className:"block min-w-0",children:n.jsx("h1",{className:"serif min-w-0 break-keep font-black",style:{fontSize:"var(--fs-h2)",letterSpacing:"0.12em",lineHeight:1.25},children:o.name})}),(u.tagline??u.heroSubline)&&n.jsx("p",{className:"text-muted mt-3 text-[length:var(--fs-sm)]",style:{lineHeight:1.7},children:u.tagline??u.heroSubline}),(h||p.length>0)&&n.jsxs("dl",{className:"mt-7 space-y-2.5",children:[h&&n.jsxs("div",{children:[n.jsx("dt",{className:"label",children:"최저가"}),n.jsx("dd",{className:"text-[length:var(--fs-lead)] font-bold tabular-nums",children:h})]}),p.map(D=>n.jsxs("div",{children:[n.jsx("dt",{className:"label",children:D.label}),n.jsx("dd",{className:"text-[length:var(--fs-sm)] font-semibold",children:D.value})]},D.label))]}),g&&n.jsx("a",{href:g.url,target:"_blank",rel:"noopener noreferrer",className:"tap mt-5 inline-flex w-full items-center justify-center px-4 text-[length:var(--fs-sm)] font-bold transition-opacity hover:opacity-90",style:{backgroundColor:"var(--color-brand)",color:"var(--tpl-bg)"},children:ht(g)}),o.phone&&n.jsxs("a",{href:`tel:${o.phone}`,className:"tap mt-2 inline-flex w-full items-center justify-center px-4 text-[length:var(--fs-sm)] font-bold",style:{backgroundColor:"var(--tpl-surface-alt)",color:"var(--tpl-text)"},children:["전화 ",o.phone]}),n.jsx("nav",{"aria-label":"주요 메뉴",className:"mt-10",children:n.jsx("ul",{className:"space-y-0.5",children:y.map(D=>n.jsx("li",{children:n.jsx("a",{href:D.href,className:"text-muted flex min-h-[2rem] items-center text-[length:var(--fs-sm)] transition-colors hover:text-current",children:D.label})},D.label))})}),x.length>0&&n.jsx("nav",{"aria-label":"공식 채널",className:"mt-12",children:n.jsx("ul",{className:"space-y-0.5",children:x.map(D=>n.jsx("li",{children:n.jsx("a",{href:D.url,target:"_blank",rel:"noopener noreferrer",className:"text-muted flex min-h-[2rem] items-center text-[length:var(--fs-xs)] underline-offset-4 transition-colors hover:text-current hover:underline",children:ml(D)})},D.url))})}),n.jsxs("div",{className:"text-muted mt-14 space-y-1 pb-2 text-[length:var(--fs-xs)] lg:mt-auto lg:pt-14",children:[v&&n.jsx("p",{className:"break-keep",children:v}),o.phone&&n.jsx("p",{children:o.phone}),o.email&&n.jsx("p",{children:n.jsx("a",{href:`mailto:${o.email}`,className:"underline-offset-2 hover:underline",children:o.email})}),n.jsxs("div",{className:"flex flex-wrap gap-x-2 gap-y-0.5 pt-3",children:[n.jsxs("span",{children:["상호: ",o.name]}),((z=o.legal)==null?void 0:z.representative)&&n.jsxs("span",{children:["대표: ",o.legal.representative]}),((w=o.legal)==null?void 0:w.businessRegistrationNumber)&&n.jsxs("span",{children:["사업자등록번호: ",o.legal.businessRegistrationNumber]}),((N=o.legal)==null?void 0:N.mailOrderNumber)&&n.jsxs("span",{children:["통신판매업신고: ",o.legal.mailOrderNumber]}),((T=o.legal)==null?void 0:T.licenseNumber)&&n.jsxs("span",{children:[o.legal.licenseLabel??"인허가번호",": ",o.legal.licenseNumber]})]}),n.jsxs("p",{className:"byline pt-1",children:[n.jsxs("span",{className:"author",children:["작성·운영 ",o.name]})," · 최종 업데이트: ",n.jsx("time",{dateTime:f.updatedAt,children:qs(f.updatedAt)})]})]})]})}),n.jsx("div",{className:"flex min-w-0 flex-1 flex-col pb-24 lg:pb-0",children:i}),n.jsx(_n,{})]})}const f1=`
+.pastel-page > main > section:not([data-pastel]) {
+ border-color: transparent;
+ background-image: none;
+ color: var(--pastel-ink) !important;
+}
+.pastel-page > main > section:not([data-pastel]):nth-of-type(4n+1) { background-color: var(--pastel-1) !important; }
+.pastel-page > main > section:not([data-pastel]):nth-of-type(4n+2) { background-color: var(--pastel-soft) !important; }
+.pastel-page > main > section:not([data-pastel]):nth-of-type(4n+3) { background-color: var(--pastel-2) !important; }
+.pastel-page > main > section:not([data-pastel]):nth-of-type(4n) { background-color: var(--pastel-3) !important; }
+`,d1={"--pastel-1":"var(--tpl-card)","--pastel-2":"var(--tpl-accent)","--pastel-3":"var(--tpl-secondary)","--pastel-soft":"var(--tpl-bg)","--pastel-ink":"var(--tpl-text)","--section-space":"clamp(2.75rem, 8vw, calc(var(--tpl-section-space, 4rem) * 1.4))",backgroundColor:"var(--pastel-soft)",color:"var(--pastel-ink)"};function m1({children:i}){const c=le(),o=ft(c),u=wn(c),f=[{label:"소개",href:"#about",show:Kt(c,"intro")},{label:o.label,href:"#units",show:c.units.length>0},{label:"이용 정보",href:"#info",show:!0},{label:"주변",href:"#guide",show:Kt(c,"local")},{label:"오시는 길",href:"#location",show:!0},{label:"FAQ",href:"#faq",show:c.faqs.length>0}].filter(d=>d.show);return n.jsxs("div",{className:"pastel-page flex min-h-screen w-full flex-col",style:d1,children:[n.jsx("style",{dangerouslySetInnerHTML:{__html:f1}}),n.jsx("header",{className:"sticky top-0 z-40 w-full",style:{backgroundColor:"color-mix(in srgb, var(--tpl-surface, #fff) 92%, transparent)"},children:n.jsxs("div",{className:"shell flex h-16 items-center justify-between gap-3",children:[n.jsx("a",{href:"#top",className:"flex min-w-0 items-center gap-2",children:n.jsx("span",{className:"serif truncate italic",style:{fontSize:"var(--fs-lead)",fontWeight:800,display:"inline-block",transform:"rotate(-1.5deg)"},children:c.place.name})}),n.jsx("nav",{"aria-label":"주요 메뉴",className:"hidden items-center gap-8 lg:flex",children:f.map(d=>n.jsx("a",{href:d.href,className:"py-1 text-[length:var(--fs-xs)] font-bold tracking-[0.2em] opacity-70 transition-opacity hover:opacity-100",children:d.label},d.label))}),n.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[c.place.phone&&n.jsx("a",{href:`tel:${c.place.phone}`,"aria-label":"전화",className:"tap flex items-center justify-center rounded-full",style:{backgroundColor:"var(--pastel-1)"},children:n.jsx(At,{className:"size-4"})}),u.map(d=>n.jsx("a",{href:d.url,target:"_blank",rel:"noopener noreferrer","aria-label":ml(d),className:"tap flex items-center justify-center rounded-full",style:{backgroundColor:"var(--pastel-2)"},children:/instagram/i.test(d.url)?n.jsx(Ub,{className:"size-4"}):n.jsx(Io,{className:"size-4"})},d.url)),n.jsxs("details",{className:"relative lg:hidden",children:[n.jsx("summary",{className:"tap flex cursor-pointer items-center justify-center rounded-full marker:content-none [&::-webkit-details-marker]:hidden","aria-label":"메뉴 열기",children:n.jsx(hp,{className:"size-5"})}),n.jsx("nav",{"aria-label":"전체 메뉴",className:"absolute right-0 top-[calc(100%+0.5rem)] z-50 w-48 overflow-hidden rounded-2xl",style:{backgroundColor:"var(--tpl-surface, #fff)",boxShadow:"0 10px 30px rgb(0 0 0 / 0.12)"},children:n.jsx("ul",{children:f.map(d=>n.jsx("li",{children:n.jsx("a",{href:d.href,className:"tap flex items-center px-4 text-[length:var(--fs-sm)] font-bold tracking-[0.08em]",children:d.label})},d.label))})})]})]})]})}),i,n.jsx("div",{style:{"--tpl-inverse":"var(--pastel-3)","--tpl-bg":"var(--pastel-ink)"},children:n.jsx(Op,{})}),n.jsx(_n,{})]})}function h1({children:i}){var x,v,y,z;const c=le(),{place:o,site:u}=c,f=Ep(),d=p1(f),h=Ze(c)[0],p=c.links.filter(w=>w.confirmed),g=o.roadAddress??o.address;return n.jsxs("div",{className:"flex min-h-screen w-full flex-col",style:{backgroundColor:"var(--tpl-bg)",color:"var(--tpl-text)"},children:[n.jsx("header",{className:"sticky top-0 z-40 w-full border-b-2 backdrop-blur-md",style:{backgroundColor:"color-mix(in srgb, var(--tpl-bg) 90%, transparent)",borderColor:"var(--tpl-text)"},children:n.jsxs("div",{className:"flex h-14 items-center justify-between gap-4 px-4 sm:px-6 xl:px-8",children:[n.jsx("a",{href:"#top",className:"serif min-w-0 truncate text-[length:var(--fs-lead)] font-extrabold",children:o.name}),n.jsxs("div",{className:"flex shrink-0 items-center gap-4 text-[length:var(--fs-sm)]",children:[o.phone&&n.jsx("a",{href:`tel:${o.phone}`,className:"tap inline-flex items-center underline underline-offset-4",children:o.phone}),h&&n.jsx("a",{href:h.url,target:"_blank",rel:"noopener noreferrer",className:"tap inline-flex items-center font-bold underline underline-offset-4",children:ht(h)})]})]})}),n.jsxs("div",{className:"flex w-full flex-1",children:[f.length>0&&n.jsx("aside",{className:"border-line sticky top-14 hidden h-[calc(100vh-3.5rem)] w-44 shrink-0 self-start border-r xl:block",style:{backgroundImage:Os},children:n.jsx("nav",{"aria-label":"차례",className:"flex h-full flex-col justify-center gap-0.5 py-8 pl-6 pr-3",children:f.map(w=>{const N=w.anchor===d;return n.jsxs("a",{href:`#${w.anchor}`,"aria-current":N?"true":void 0,className:"flex items-baseline gap-2 py-2 text-[length:var(--fs-sm)] leading-tight motion-safe:transition-opacity",style:{opacity:N?1:.35},children:[n.jsx("span",{className:"shrink-0 text-[length:var(--fs-xs)] font-bold tabular-nums",children:w.no}),n.jsx("span",{className:"truncate",style:{fontWeight:N?700:400},children:w.label})]},w.anchor)})})}),n.jsx("div",{className:"flex min-w-0 flex-1 flex-col",children:i})]}),n.jsx("footer",{className:"w-full pb-28 pt-12 md:pb-16",style:{backgroundColor:"var(--tpl-inverse)",color:"var(--tpl-bg)",backgroundImage:Os},children:n.jsxs("div",{className:"shell",children:[n.jsx("div",{"aria-hidden":!0,className:"h-0.5 w-full bg-current opacity-70"}),n.jsxs("div",{className:"grid grid-cols-1 gap-8 pt-8 md:grid-cols-12",children:[n.jsxs("div",{className:"md:col-span-5",children:[n.jsx("p",{className:"serif",style:{fontSize:"clamp(1.5rem, 4vw, 2.5rem)",fontWeight:800,lineHeight:1.05},children:o.name}),o.englishName&&n.jsx("p",{className:"mt-2 text-[length:var(--fs-xs)] uppercase tracking-[0.18em] opacity-55",children:o.englishName})]}),n.jsxs("address",{className:"space-y-2 font-serif text-[length:var(--fs-sm)] not-italic opacity-80 md:col-span-4",children:[g&&n.jsx("p",{children:g}),o.phone&&n.jsx("p",{children:n.jsx("a",{href:`tel:${o.phone}`,className:"underline underline-offset-4",children:o.phone})}),o.email&&n.jsx("p",{children:n.jsx("a",{href:`mailto:${o.email}`,className:"underline underline-offset-4",children:o.email})})]}),p.length>0&&n.jsx("nav",{"aria-label":"공식 채널",className:"md:col-span-3",children:n.jsx("ul",{className:"space-y-1.5 text-[length:var(--fs-sm)]",children:p.map(w=>n.jsx("li",{children:n.jsx("a",{href:w.url,target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-4 opacity-80 transition-opacity hover:opacity-100",children:ml(w)})},w.url))})})]}),n.jsxs("div",{className:"mt-10 flex flex-col gap-2 border-t border-current/20 pt-5 text-[length:var(--fs-xs)] opacity-55 sm:flex-row sm:items-center sm:justify-between",children:[n.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-1",children:[n.jsxs("span",{children:["상호: ",o.name]}),((x=o.legal)==null?void 0:x.representative)&&n.jsxs("span",{children:["대표: ",o.legal.representative]}),((v=o.legal)==null?void 0:v.businessRegistrationNumber)&&n.jsxs("span",{children:["사업자등록번호: ",o.legal.businessRegistrationNumber]}),((y=o.legal)==null?void 0:y.mailOrderNumber)&&n.jsxs("span",{children:["통신판매업신고: ",o.legal.mailOrderNumber]}),((z=o.legal)==null?void 0:z.licenseNumber)&&n.jsxs("span",{children:[o.legal.licenseLabel??"인허가번호",": ",o.legal.licenseNumber]})]}),n.jsxs("p",{className:"byline shrink-0",children:[n.jsxs("span",{className:"author",children:["작성·운영 ",o.name]})," · 최종 업데이트: ",n.jsx("time",{dateTime:u.updatedAt,children:qs(u.updatedAt)})]})]})]})}),n.jsx(_n,{})]})}function p1(i){const c=i.map(f=>f.anchor).join(","),[o,u]=q.useState("");return q.useEffect(()=>{if(typeof IntersectionObserver>"u")return;const f=c.split(",").map(h=>document.getElementById(h)).filter(h=>h!==null);if(f.length===0)return;const d=new IntersectionObserver(h=>{const p=h.find(g=>g.isIntersecting);p&&u(p.target.id)},{rootMargin:"-45% 0px -50% 0px"});return f.forEach(h=>d.observe(h)),()=>d.disconnect()},[c]),o}function x1(){const i=le(),c=i.place.category===Ma.LODGING,o={intro:ay,info:ny,rooms:Lo,menu:Lo,programs:Lo,booking:c?Fh:py,space:jy,inquiry:Ny,exhibition:Sy,photos:Oy,festival:wy,local:_y,weather:ky,map:ap,faq:Dy,...t1},u=new Set;return n.jsxs("main",{className:"w-full flex-1",children:[n.jsx(pv,{}),!Kt(i,"intro")&&n.jsx(Hh,{}),i.theme.sections.filter(f=>f.enabled&&f.id!=="hero").map(f=>{const d=o[f.id];if(!d)return null;const h=d.name;return u.has(h)?null:(u.add(h),n.jsxs("div",{"data-editor-id":f.id,style:{display:"contents"},children:[n.jsx(d,{}),f.id==="intro"&&n.jsx(Hh,{})]},f.id))}),!Kt(i,"map")&&n.jsx(ap,{}),c&&!W0(i,"booking")&&n.jsx(Fh,{})]})}function Wo({payload:i}){const c=zp(i.theme.templateId),o=c==="reservation"?l1:c==="oasi"?o1:c==="studio"?u1:c==="pastel"?m1:c==="editorial"?h1:g1;return n.jsx(n0,{payload:i,children:n.jsx(o,{children:n.jsx(x1,{})})})}function g1({children:i}){return n.jsxs("div",{className:"flex min-h-screen w-full flex-col",children:[n.jsx(F0,{}),n.jsx("div",{className:"flex w-full flex-1 flex-col",children:i}),n.jsx(Op,{}),n.jsx(_n,{})]})}function b1(i){const{colors:c,look:o}=i.theme,u=w0(c),f={"--tpl-primary":c.primary,"--tpl-secondary":c.secondary,"--tpl-bg":c.bg,"--tpl-card":c.card,"--tpl-text":c.text,"--tpl-accent":c.accent,"--tpl-surface":u.surface,"--tpl-surface-alt":u.surfaceAlt,"--tpl-inverse":u.inverse,"--tpl-border":u.border};if(o){const d=p=>p&&!/[<>{};]/.test(p)?p:void 0,h=[["--tpl-font-heading",d(o.fontHeading)],["--tpl-font-body",d(o.fontBody)],["--tpl-heading-tracking",d(o.headingTracking)],["--tpl-heading-weight",d(o.headingWeight)],["--tpl-section-space",d(o.sectionSpace)],["--tpl-border-width",d(o.borderWidth)],["--tpl-radius",d(o.radius)],["--tpl-shadow",d(o.shadow)],["--tpl-texture",d(o.texture)]];for(const[p,g]of h)g&&(f[p]=g)}return f}const v1=[[/Noto Sans KR/i,"family=Noto+Sans+KR:wght@300..900"],[/Noto Serif KR/i,"family=Noto+Serif+KR:wght@300..700"],[/Gugi/i,"family=Gugi"],[/Gowun Batang/i,"family=Gowun+Batang:wght@400;700"],[/Nanum Pen Script/i,"family=Nanum+Pen+Script"]];function y1(i){var u,f;const c=["Noto Sans KR","Noto Serif KR",((u=i.theme.look)==null?void 0:u.fontHeading)??"",((f=i.theme.look)==null?void 0:f.fontBody)??""].join(" ");return`https://fonts.googleapis.com/css2?${v1.filter(([d])=>d.test(c)).map(([,d])=>d).join("&")}&display=swap`}const oc=document.getElementById("root"),op=window.__SITE_PAYLOAD__;async function j1(i){const c=(()=>{try{return localStorage.getItem("o2o-web4ai.accessToken")}catch{return null}})(),o=await fetch(`/v1/place/${i}/site/preview`,{headers:c?{Authorization:`Bearer ${c}`}:{}});if(!o.ok)throw new Error(`HTTP ${o.status}`);const u=await o.json();for(const[d,h]of Object.entries(b1(u)))document.documentElement.style.setProperty(d,h);const f=document.createElement("link");f.rel="stylesheet",f.href=y1(u),document.head.appendChild(f),await new Promise(d=>{f.addEventListener("load",()=>d(),{once:!0}),f.addEventListener("error",()=>d(),{once:!0}),setTimeout(d,2500)});try{await document.fonts.ready}catch{}Qo.createRoot(oc).render(n.jsx(q.StrictMode,{children:n.jsx(Wo,{payload:u})}))}const up=new URLSearchParams(window.location.search).get("placeId");op?Qo.hydrateRoot(oc,n.jsx(q.StrictMode,{children:n.jsx(Wo,{payload:op})})):up?j1(up).catch(i=>{oc.textContent=`미리보기를 불러오지 못했습니다 — ${i instanceof Error?i.message:String(i)}`}):tb(async()=>{const{MOONLIGHT_STAY_PAYLOAD:i}=await import("./moonlight-stay-C8soi6-l.js");return{MOONLIGHT_STAY_PAYLOAD:i}},[]).then(({MOONLIGHT_STAY_PAYLOAD:i})=>{Qo.createRoot(oc).render(n.jsx(q.StrictMode,{children:n.jsx(Wo,{payload:i})}))});export{Ah as F,bt as L,Ma as P,N1 as S,S1 as a};
diff --git a/solution/site/scripts/mockup/vendor/retired/README.md b/solution/site/scripts/mockup/vendor/retired/README.md
new file mode 100644
index 0000000..0f471c5
--- /dev/null
+++ b/solution/site/scripts/mockup/vendor/retired/README.md
@@ -0,0 +1,22 @@
+# 물러난 번들 — 지우지 않는다
+
+여기 있는 파일은 **더 이상 아무 HTML 도 가리키지 않는** 옛 번들이다. 그래도 서버에는 올린다.
+
+## 왜
+
+`/s/` 는 5분 캐시(`max-age=300`)다. 새 `index.html` 을 올려도 그동안 손님 브라우저에는
+**옛 HTML** 이 남아 있고, 그 HTML 은 옛 해시 이름으로 css·js 를 부른다.
+그 파일을 서버에서 지우면 **그 손님에게는 스타일도 스크립트도 404 다** — 화면은 뜨는데
+헤더가 안 붙고 푸터 색이 빠진 민짜 문서가 된다.
+
+실측(2026-09-14): 번들을 갈면서 옛 두 개를 `docker exec rm` 으로 지웠더니 바로 그 증상이
+났다. "헤더가 스티키가 아니고 푸터가 투명해졌다" — 파일이 사라진 것이지 CSS 가 바뀐 게 아니다.
+제품 쪽 프리렌더가 옛 자산을 30일 보관하는 것도 같은 이유다(`prerender.ts ASSET_RETENTION_DAYS`).
+
+## 규칙
+
+- 번들을 갈면 옛 파일을 **지우지 말고 이리로 옮긴다.** `vendor/` 뿌리에는 현재 한 벌만 둔다
+ (`patch_stay.py` 가 뿌리에 js·css 각 하나임을 확인한다).
+- 배포할 때 뿌리와 이 폴더를 **둘 다** 서버 `vendor/` 에 넣는다:
+ `docker cp vendor/retired/. $C:/app/solution/site/out/s/stay/vendor/`
+- 30일쯤 지나 캐시가 다 빠지면 지워도 된다. 급할 것 없다 — 합쳐서 450KB 다.
diff --git a/solution/site/scripts/mockup/vendor/index-DUeGvBPS.js b/solution/site/scripts/mockup/vendor/retired/index-DUeGvBPS.js
similarity index 100%
rename from solution/site/scripts/mockup/vendor/index-DUeGvBPS.js
rename to solution/site/scripts/mockup/vendor/retired/index-DUeGvBPS.js
diff --git a/solution/site/scripts/mockup/vendor/index-k3f3eOzb.css b/solution/site/scripts/mockup/vendor/retired/index-k3f3eOzb.css
similarity index 100%
rename from solution/site/scripts/mockup/vendor/index-k3f3eOzb.css
rename to solution/site/scripts/mockup/vendor/retired/index-k3f3eOzb.css