/* Villa direct booking widget — inline step 1 (calendar/quote, always visible
   in .booking-box) + a small dialog for step 2/3 (contact + confirmation).
   Scoped vb- classes. Reuses site tokens (--ink,--muted,--blue,--pale,--line)
   from commerce/style.css. */
.vb-inline{margin:18px 0 6px;padding-top:14px;border-top:1px solid var(--line)}
.vb-toggle{position:relative;display:flex;align-items:center;justify-content:center;gap:12px;width:100%;min-height:52px;padding:0 48px;border:1px solid #084a9c;border-radius:14px;background:#0a5bc4;color:#fff;text-align:center;font:inherit;font-weight:800;font-size:1rem;cursor:pointer;margin:0;box-shadow:0 8px 20px #0a5bc459,0 2px 6px #102a3733}
.vb-toggle:hover{background:#094fa8}
.vb-toggle:focus-visible{outline:3px solid #102a37;outline-offset:3px}
.vb-toggle-chev{position:absolute;right:18px;top:50%;margin-top:-10px;flex:none;transition:transform .15s}
.vb-inline.open .vb-toggle-chev{transform:rotate(180deg)}
.vb-panel{margin-top:12px}.vb-panel[hidden]{display:none}
@media(prefers-reduced-motion:reduce){.vb-toggle-chev{transition:none}}
#villa-booking-dialog{border:0;border-radius:20px;padding:0;width:min(560px,calc(100vw - 24px));max-height:94dvh;color:var(--ink);box-shadow:0 30px 100px #102f4460}
#villa-booking-dialog::backdrop{background:#102c3b99;backdrop-filter:blur(4px)}
.vb-header{display:flex;align-items:flex-start;gap:16px;justify-content:space-between;padding:24px 24px 6px}
.vb-header h2{font-size:1.4rem}
.vb-header button{background:var(--pale);color:var(--ink);border-radius:50%;width:38px;height:38px;flex-shrink:0;font-size:1.6rem;line-height:1;border:0}
.vb-body{padding:0 24px 20px;overflow-y:auto;max-height:70dvh}
.vb-step{display:none}
.vb-step.active{display:block}
.vb-cal-top{display:flex;align-items:center;justify-content:space-between;margin:10px 0}
.vb-cal-top button{width:36px;height:36px;border-radius:8px;background:var(--pale);border:0;font-size:1.4rem}
.vb-weekdays,.vb-cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.vb-weekdays{text-align:center;font-size:.75rem;color:var(--muted);padding:6px 0}
.vb-cal button{background:#f2f7f8;min-height:44px;border-radius:6px;font-weight:700;color:var(--ink);border:0;font-size:.85rem}
.vb-cal button small{display:block;font-weight:400;font-size:.6rem}
.vb-cal button:disabled{background:#f6f7f7;color:#b7c1c3;cursor:not-allowed}
.vb-cal button.checkin,.vb-cal button.checkout{background:var(--ink);color:#fff}
.vb-cal button.in-range{background:#cfe3e8}
.vb-hint{font-size:.85rem;color:var(--muted);margin:8px 0}
.vb-guests{display:grid;grid-template-columns:1fr;gap:12px;margin:14px 0}
.vb-guests label{font-size:.85rem;font-weight:600}
.vb-guests select{width:100%;margin-top:6px;height:44px;border:1px solid var(--line);border-radius:6px}
.vb-addon{display:flex;align-items:flex-start;gap:10px;border:1px solid var(--line);padding:14px;border-radius:8px;margin:10px 0}
.vb-addon input{width:18px;height:18px;margin-top:3px;accent-color:var(--ink)}
.vb-addon small{display:block;color:var(--muted);margin-top:4px}
.vb-addon input[type=time]{margin-top:8px;height:38px;border:1px solid var(--line);border-radius:6px;padding:0 8px}
.vb-lines p{display:flex;justify-content:space-between;font-size:.85rem;margin:6px 0;gap:12px}
.vb-total{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);margin-top:14px;padding-top:14px}
.vb-total strong{font-size:1.5rem}
.vb-fields{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:16px 0}
.vb-fields label{font-size:.85rem;font-weight:600;grid-column:span 1}
.vb-fields label.full{grid-column:1/-1}
.vb-fields input,.vb-fields textarea{width:100%;margin-top:6px;border:1px solid var(--line);border-radius:6px;padding:10px;min-height:44px}
.vb-fields textarea{min-height:70px;resize:vertical}
.vb-consent{display:flex;align-items:flex-start;gap:8px;font-size:.8rem;margin:14px 0}
.vb-consent input{width:18px;height:18px;margin-top:2px;flex-shrink:0}
.vb-error{color:#a62822;font-size:.85rem;margin:10px 0}
.vb-error:empty{display:none}
.vb-actions{display:flex;gap:10px;margin-top:18px}
.vb-actions button{flex:1;min-height:50px;border-radius:8px;font-weight:700;font-size:.95rem;border:1px solid var(--line);background:#fff}
.vb-actions button.primary{background:var(--ink);color:#fff;border-color:var(--ink)}
.vb-actions button:disabled{opacity:.55;cursor:wait}
.vb-confirm{background:var(--pale);border-radius:10px;padding:20px;margin-top:14px}
.vb-confirm h3{font-size:1.1rem;margin-bottom:10px}
.vb-confirm dl{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:.85rem}
.vb-confirm dt{color:var(--muted)}
.vb-bank{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:12px;margin-top:10px}
.vb-bank button{border:1px solid var(--line);border-radius:6px;padding:8px 12px;background:#fff;font-size:.8rem}
.vb-trigger{width:100%}
@media(max-width:640px){#villa-booking-dialog{width:100%;max-width:none;max-height:96dvh;margin:auto auto 0;border-radius:18px 18px 0 0}.vb-fields{grid-template-columns:1fr}}

/* 2026-10-07 flow-fixes F: 상세 우측 예약박스가 232px 로 찌그러지던 문제.
   .detail-layout 그리드(1.5fr 1fr)의 본문 칸이 후기 레일·요금표의 min-content(1240px)를
   그대로 받아 예약박스 열을 밀어냈다 → "주중 / 1박" 줄이 글자 단위로 세로로 꺾이고 달력 칸이
   20px 폭이 돼 선택일 숫자가 잘렸다. 본문 칸이 줄어들 수 있게 하고, 달력 버튼은 전역
   button 안쪽 여백(가로 18px)을 쓰지 않게 한다. */
.detail-layout>.detail-main{min-width:0}
.booking-box{min-width:0}
.detail-prices>p span{white-space:nowrap}
.vb-cal button{padding:6px 0;min-width:0;overflow:hidden}

.vb-header .vb-eyebrow{margin-bottom:4px}

/* 2026-10-09 calendar_compact (Su 지시: "캘린더 칸이 휑해 보인다"):
   ① 박스 맨 위의 빈 여백+구분선 제거 ② 달력 칸·간격·보조 옵션을 촘촘하게 ③ 넓은 화면은 달력(왼쪽)+옵션(오른쪽) 2열.
   기능(날짜 선택·가격 계산·접힘/펼침·id/aria)은 그대로, 보이는 크기만 줄인다. */
.detail-layout>.booking-box{padding:16px;margin:4px 0 8px}
.booking-box>.vb-inline:first-child{margin-top:0;padding-top:0;border-top:0}
.booking-box .vb-inline{margin:0 0 4px;padding-top:0;border-top:0}
.booking-box>.text-link{margin-top:10px}
.vb-toggle{min-height:48px}
.vb-panel{margin-top:8px}
.vb-panel .vb-cal-top{margin:4px 0 2px}
.vb-panel .vb-cal-top button{width:32px;height:32px}
.vb-panel .vb-weekdays{padding:2px 0 4px;gap:3px}
.vb-panel .vb-cal{gap:3px}
.vb-panel .vb-cal button{min-height:38px;padding:0;line-height:1.15;border-radius:6px}
.vb-panel .vb-cal button small{font-size:.55rem;line-height:1.1;min-height:.6rem}
.vb-panel .vb-hint{margin:6px 0}
.vb-panel .vb-guests{margin:6px 0}
.vb-panel .vb-guests select{height:40px;margin-top:4px}
.vb-panel .vb-addon{padding:10px 12px;margin:6px 0;gap:8px}
.vb-panel .vb-addon small{margin-top:2px}
.vb-panel .vb-lines p{margin:3px 0}
.vb-panel .vb-total{margin-top:8px;padding-top:8px}
.vb-panel .vb-total strong{font-size:1.3rem}
.vb-panel .vb-error{margin:6px 0}
.vb-panel .vb-actions{margin-top:10px}
.vb-panel .vb-actions button{min-height:46px}
.vb-panel .vb-hint:empty{display:none}
@media(min-width:860px){
 .vb-panel:not([hidden]){display:grid;grid-template-columns:minmax(0,440px) minmax(0,1fr);gap:8px 32px;align-items:start}
 .vb-panel .vb-col-cal,.vb-panel .vb-col-opts{min-width:0}
 .vb-panel .vb-cal button{min-height:42px}
}

/* 2026-10-10 villa_payment_form (chị Su: 빌라 결제 부분도 손님 정보 입력 → 패스트트랙과 같은 결제 팝업).
   ① 예약자 정보: 이름 한 줄 + 전화·이메일 + 카카오톡 ID(선택)·항공편(선택) ② 접수 직후 결제 단계 = 패스트트랙 결제 팝업(src/style.css .vp-*)과 같은 배치:
   위쪽 하늘색 면(제목·요약·금액 + 마스코트) / 아래쪽 흰 판(결제 방법 카드·계좌이체·카카오페이 · 결제 버튼 · 안내 · 카카오/닫기).
   빌라 상세에는 패스트트랙 CSS 가 실리지 않으므로 같은 값을 #villa-booking-dialog 안으로 한정해 옮겼다(전역 영향 0). 마스코트는 /ft-assets/ 의 기존 파일(CSP img-src 'self').
   롤백: 이 블록 + client.mjs 의 3단계/입력칸 + api.mjs 의 email/선택 규칙을 이 PR revert 로 되돌린다. */
.vb-opt{font-weight:500;color:var(--muted);font-size:.78rem}
.vb-fields input:focus-visible,.vb-fields textarea:focus-visible,.vb-consent input:focus-visible{outline:3px solid #14829c;outline-offset:2px}
#villa-booking-dialog.vb-paid{width:min(560px,calc(100vw - 24px));overflow:auto;overscroll-behavior:contain}
#villa-booking-dialog.vb-paid .vb-header{display:none}
#villa-booking-dialog.vb-paid .vb-body{padding:0;max-height:none;overflow:visible}
#villa-booking-dialog .vp-success{display:grid;gap:0;background:#fff;color:var(--ink);outline:0;overflow:hidden;border-radius:20px}
#villa-booking-dialog .vp-hero{position:relative;padding:26px 20px 30px;background:url(/ft-assets/pay-mascot-46892586.webp) no-repeat right 14px bottom 26px/auto 250px,linear-gradient(90deg,rgba(255,255,255,.92) 0,rgba(255,255,255,.6) 48%,rgba(255,255,255,0) 72%),linear-gradient(180deg,#a9d6f7 0,#dff0fc 70%,#f3f9fe 100%);background-color:#e6f2fc;color:#0f2747}
#villa-booking-dialog .vp-hero h3{margin:0 0 16px;padding-right:48%;font-size:1.9rem;line-height:1.25;font-weight:800;color:#0f2747;text-align:left;letter-spacing:-.02em}
#villa-booking-dialog .vp-h-main,#villa-booking-dialog .vp-h-sub{display:block}
#villa-booking-dialog .vp-h-sub{margin-top:4px;font-size:1.15rem;font-weight:700;color:#24344d}
#villa-booking-dialog .vp-summary{margin:0;max-width:44%;display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:16px;background:rgba(255,255,255,.78);border:1px solid #d3e3f6;text-align:left;color:#0f2747;font-size:.88rem;line-height:1.55}
#villa-booking-dialog .vp-ico{flex:none}
#villa-booking-dialog .vp-ico-plane{width:30px;height:30px;color:#1a6fe0;margin-top:2px}
#villa-booking-dialog .vp-summary-text{display:grid;min-width:0;overflow-wrap:anywhere}
#villa-booking-dialog .vp-summary-main{font-weight:800}
#villa-booking-dialog .vp-amount-label{margin:18px 0 0;font-size:.95rem;font-weight:600;color:#3a4a62}
#villa-booking-dialog .vp-success .total{margin:2px 0 0;text-align:left;font-size:2.2rem;line-height:1.2;font-weight:800;color:#0b57b8}
#villa-booking-dialog .vp-success .total span:last-child{margin-left:6px;font-size:1.15rem;font-weight:700;color:#0f2747}
#villa-booking-dialog .vp-pane{position:relative;margin-top:-16px;padding:22px 18px;border-radius:24px 24px 0 0;background:#fff;display:grid;gap:14px}
#villa-booking-dialog .vp-facts{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 14px;margin:0;font-size:.85rem;line-height:1.5}
#villa-booking-dialog .vp-facts dt{color:#3a4a62}
#villa-booking-dialog .vp-facts dd{margin:0;color:#0f2747;font-weight:600;overflow-wrap:anywhere}
#villa-booking-dialog .vp-set{border:0;margin:0;padding:0;min-width:0;display:grid;gap:10px}
#villa-booking-dialog .vp-set legend{padding:0;margin-bottom:8px;font-size:1.15rem;font-weight:800;color:#0f2747}
#villa-booking-dialog .vp-method{display:flex;align-items:center;gap:14px;min-height:60px;padding:0 16px;border:1px solid #cfdcee;border-radius:16px;background:#fff;color:#0f2747;font-size:1.05rem;font-weight:700;cursor:pointer}
#villa-booking-dialog .vp-method input{width:26px;height:26px;margin:0;flex:none;accent-color:#1a6fe0;border-radius:50%}
#villa-booking-dialog .vp-method:has(input:checked){border-color:#2f7be8;box-shadow:inset 0 0 0 1px #2f7be8;background:#eef5ff}
#villa-booking-dialog .vp-method:has(input:focus-visible){outline:3px solid #14829c;outline-offset:2px}
/* 결제 방법 타일은 서버가 준 목록만 보인다(카카오페이는 확인 전 기본 숨김) — display:flex 가 hidden 속성을 이기지 않게 막는다. */
#villa-booking-dialog .vp-paymethods .vp-method[hidden]{display:none}
#villa-booking-dialog .vp-ico-method{width:38px;height:38px}
#villa-booking-dialog .vp-pane .vb-bank{margin:0;background:#f4f9ff;border-color:#cfdcee;border-radius:12px;font-size:.9rem;overflow-wrap:anywhere}
#villa-booking-dialog .vp-pane .vb-bank[hidden],#villa-booking-dialog .vp-pane .vb-hint[hidden]{display:none}
#villa-booking-dialog .vp-pane .vb-bank button{flex:none;min-height:44px;padding:8px 14px;border-radius:999px;border:1px solid #2f6db8;background:#fff;color:#0b3d91;font-weight:700;font-size:.85rem}
#villa-booking-dialog .vp-pane .vb-hint{margin:0}
#villa-booking-dialog .vp-pane .vb-hint:empty{display:none}
#villa-booking-dialog .vp-status{margin:0;padding:10px 12px;border-radius:12px;background:#e8f1fb;color:#0f2747;font-weight:600;font-size:.9rem;line-height:1.55}
#villa-booking-dialog .vp-status[hidden]{display:none}
#villa-booking-dialog .vp-pay-btn{width:100%;min-height:64px;border-radius:999px;border:0;background:#0f2747;color:#fff;font-size:1.15rem;font-weight:800;gap:10px;box-shadow:0 12px 26px rgba(19,27,42,.22)}
#villa-booking-dialog .vp-pay-btn:hover{background:#173a63}
#villa-booking-dialog .vp-pay-btn:focus-visible,#villa-booking-dialog .vp-btn:focus-visible,#villa-booking-dialog .vp-pane .vb-bank button:focus-visible{outline:3px solid #14829c;outline-offset:3px}
#villa-booking-dialog .vp-mail-note{margin:0;display:flex;align-items:center;gap:14px;padding:16px;border-radius:16px;background:#eef4fc;text-align:left;font-size:.9rem;line-height:1.6;color:#24344d}
#villa-booking-dialog .vp-mail-ico{flex:none;display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:#dcebfb}
#villa-booking-dialog .vp-mail-ico .vp-ico{width:28px;height:28px}
#villa-booking-dialog .vp-actions{display:grid;grid-template-columns:1.4fr 1fr;gap:12px}
#villa-booking-dialog .vp-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:60px;padding:0 14px;border-radius:999px;border:1px solid #c3cfe0;background:#fff;color:#0f2747;font:inherit;font-weight:700;text-decoration:none;cursor:pointer}
#villa-booking-dialog .vp-close-btn{color:#3a4a62}
#villa-booking-dialog .vp-ico-kakao{width:34px;height:34px}
@media(max-width:640px){
 #villa-booking-dialog.vb-paid{width:calc(100% - 16px);max-width:none;max-height:96dvh;margin:auto;border-radius:20px}
 #villa-booking-dialog .vp-hero{padding:20px 16px 30px;background-position:right 4px top 10px,0 0,0 0;background-size:auto 152px,100% 100%,100% 100%}
 #villa-booking-dialog .vp-summary{max-width:none;padding:12px 14px;gap:10px;font-size:.84rem}
 #villa-booking-dialog .vp-ico-plane{width:24px;height:24px}
 #villa-booking-dialog .vp-hero h3{padding-right:42%;min-height:132px;margin-bottom:6px;font-size:1.5rem}
 #villa-booking-dialog .vp-h-sub{font-size:1rem}
 #villa-booking-dialog .vp-success .total{font-size:2rem}
 #villa-booking-dialog .vp-pane{padding:20px 14px}
 #villa-booking-dialog .vp-method{padding:0 14px;gap:12px}
 #villa-booking-dialog .vp-mail-note{padding:14px;gap:12px;font-size:.85rem}
 #villa-booking-dialog .vp-mail-ico{width:44px;height:44px}
 #villa-booking-dialog .vp-actions{grid-template-columns:1.25fr 1fr;gap:10px}
 #villa-booking-dialog .vp-btn{min-height:56px;font-size:.95rem;padding-inline:10px}
 #villa-booking-dialog .vp-ico-kakao{width:30px;height:30px}
}
@media(max-width:340px){#villa-booking-dialog .vp-summary{max-width:none}#villa-booking-dialog .vp-hero h3{padding-right:0}#villa-booking-dialog .vp-actions{grid-template-columns:1fr}}
/* 2026-10-25 (chị Su): 카드·토스페이 5% 수수료 안내 한 줄 — 계좌이체를 고르면 숨긴다. */
#villa-booking-dialog .vb-fee{margin:10px 0 0;padding:10px 12px;border-radius:12px;background:#FFF7E6;border:1px solid #F5D08A;color:#7A4A00;font-size:.9rem;font-weight:600;line-height:1.45;word-break:keep-all}
