@forgebuild/hotal-ui 0.23.152 → 0.23.201

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/components/ai-chat-widget.js +75 -0
  2. package/dist/components/availability-calendar.js +7 -0
  3. package/dist/components/booking-card.js +30 -0
  4. package/dist/components/booking-checkout.js +40 -0
  5. package/dist/components/booking-confirmed.js +1 -0
  6. package/dist/components/booking-flow.js +26 -0
  7. package/dist/components/booking-progress-bar.js +1 -0
  8. package/dist/components/booking-summary.js +14 -0
  9. package/dist/components/chunks/ably-5cVT4knS.js +9 -0
  10. package/dist/components/chunks/calendar-B8eNjUm2.js +1 -0
  11. package/dist/components/chunks/client-BDk8LqGN.js +3 -0
  12. package/dist/components/chunks/floating-ui.dom-DY3dGoEq.js +1 -0
  13. package/dist/components/chunks/gsap-DWxn8li7.js +1 -0
  14. package/dist/components/chunks/lib-Bd4dedte.js +1 -0
  15. package/dist/components/chunks/min-DdO-yBwh.js +17 -0
  16. package/dist/components/chunks/preload-helper-Czpn1I53.js +1 -0
  17. package/dist/components/chunks/rolldown-runtime-CbXtAM7H.js +1 -0
  18. package/dist/components/confirmation-card.js +3 -0
  19. package/dist/components/dining-teaser.js +19 -0
  20. package/dist/components/event-contact-form.js +33 -0
  21. package/dist/components/event-inquiries-feed.js +29 -0
  22. package/dist/components/extras-catalogue.js +25 -0
  23. package/dist/components/floor-plan-hero.js +2 -0
  24. package/dist/components/google-reviews.js +31 -0
  25. package/dist/components/instagram-feed.js +16 -0
  26. package/dist/components/island-map.js +1 -0
  27. package/dist/components/live-dining-orders-feed.js +37 -0
  28. package/dist/components/live-golf-bookings-feed.js +18 -0
  29. package/dist/components/live-reservations-feed.js +18 -0
  30. package/dist/components/live-room-bookings-feed.js +18 -0
  31. package/dist/components/live-shop-orders-feed.js +37 -0
  32. package/dist/components/live-spa-bookings-feed.js +55 -0
  33. package/dist/components/menu-section.js +90 -0
  34. package/dist/components/proshop-catalogue.js +20 -0
  35. package/dist/components/reservation-bar.js +5 -0
  36. package/dist/components/reservation-cancel.js +4 -0
  37. package/dist/components/restaurant-order-form.js +9 -0
  38. package/dist/components/room-grid.js +26 -0
  39. package/dist/components/searchable-select.js +20 -0
  40. package/dist/components/service-booking-bar.js +14 -0
  41. package/dist/components/spa-booking-widget.js +179 -0
  42. package/dist/components/stay-search.js +31 -0
  43. package/dist/components/tripadvisor-reviews.js +38 -0
  44. package/dist/components/venue-carousel.js +18 -0
  45. package/dist/hotal-ui.js +5032 -4708
  46. package/dist/index.d.ts +40 -2
  47. package/package.json +6 -2
@@ -0,0 +1,9 @@
1
+ import{$ as e,A as t,B as n,D as r,E as i,H as a,I as o,J as s,K as c,L as l,M as u,N as d,R as f,S as p,T as m,U as h,V as g,W as _,X as v,Z as y,b,et as x,f as S,h as C,j as w,n as T,s as E,t as D,w as O,y as k,z as A}from"./chunks/client-BDk8LqGN.js";var j=r(`<span class="rof-cat-count svelte-6oqepq"> </span>`),M=r(`<button type="button"> <!></button>`),N=r(`<div class="rof-item-desc svelte-6oqepq"> </div>`),ee=r(`<button type="button"> </button>`),te=r(`<div class="rof-variant-picker svelte-6oqepq"></div>`),ne=r(`<span class="rof-item-tag rof-item-tag--icon svelte-6oqepq"><img width="20" height="20" class="rof-diet-icon svelte-6oqepq"/></span>`),re=r(`<span class="rof-item-tag svelte-6oqepq"> </span>`),ie=r(`<div class="rof-item-tags svelte-6oqepq"></div>`),ae=r(`<div class="rof-item svelte-6oqepq"><div class="rof-item-body svelte-6oqepq"><div class="rof-item-name svelte-6oqepq"> </div> <!> <!> <!> <div class="rof-item-footer svelte-6oqepq"><div class="rof-item-price svelte-6oqepq"> </div> <div class="rof-qty svelte-6oqepq"><button type="button" class="rof-qty-btn svelte-6oqepq"><span class="svelte-6oqepq">−</span></button> <div> </div> <button type="button" class="rof-qty-btn svelte-6oqepq"><span class="svelte-6oqepq">+</span></button></div></div></div></div>`),oe=r(`<div class="rof-confirm-left svelte-6oqepq"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="rgb(0,245,212)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-6oqepq"><polyline points="20 6 9 17 4 12" class="svelte-6oqepq"></polyline></svg> <span class="rof-confirm-label svelte-6oqepq">Order placed</span> <span class="rof-confirm-items svelte-6oqepq"> </span></div> <div class="rof-confirm-right svelte-6oqepq"><span class="rof-confirm-total svelte-6oqepq"> </span> <span class="rof-confirm-time svelte-6oqepq"> </span></div>`,1),se=r(`<button type="button"><span class="svelte-6oqepq"> </span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12" class="svelte-6oqepq"></polyline></svg></button>`),P=r(`<div class="rof-cart-summary svelte-6oqepq"> <strong class="svelte-6oqepq"> </strong></div> <div class="rof-cart-right svelte-6oqepq"><div class="rof-schedule svelte-6oqepq"><span class="rof-schedule-label svelte-6oqepq">Deliver at</span> <div><button type="button" class="rof-timepicker-btn svelte-6oqepq"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-6oqepq"><circle cx="12" cy="12" r="10" class="svelte-6oqepq"></circle><polyline points="12 6 12 12 16 14" class="svelte-6oqepq"></polyline></svg> <span class="svelte-6oqepq"> </span> <svg class="rof-timepicker-caret svelte-6oqepq" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9" class="svelte-6oqepq"></polyline></svg></button> <div class="rof-timepicker-drop svelte-6oqepq" role="presentation"><div class="rof-tp-days svelte-6oqepq"></div> <button type="button" class="rof-tp-slot rof-tp-asap svelte-6oqepq"><span class="svelte-6oqepq">ASAP</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12" class="svelte-6oqepq"></polyline></svg></button> <!></div></div></div> <button type="button" class="rof-place-btn svelte-6oqepq"> </button></div>`,1),F=r(`<div class="rof-order-msg rof-order-msg--error svelte-6oqepq"> </div>`),I=r(`<div class="rof-cart-bar svelte-6oqepq"><!></div> <!>`,1),ce=r(`<div class="rof-root svelte-6oqepq"><div class="rof-cat-tabs svelte-6oqepq"></div> <div class="rof-grid svelte-6oqepq"></div> <!></div>`),le={hash:`svelte-6oqepq`,code:`.rof-root.svelte-6oqepq {display:block;font-family:inherit;color:var(--rof-text-color, #05040f);}.rof-cat-tabs.svelte-6oqepq {display:flex;gap:0.25rem;flex-wrap:wrap;margin-bottom:1.25rem;}.rof-cat-tab.svelte-6oqepq {height:30px;padding:0 14px;border-radius:9999px;border:1px solid var(--rof-tab-border, rgba(5, 4, 15, 0.1));background:transparent;font-size:12px;font-weight:600;color:var(--rof-tab-color, #5e5d6b);cursor:pointer;transition:background 0.15s, color 0.15s, border-color 0.15s;white-space:nowrap;}.rof-cat-tab.svelte-6oqepq:hover {background:rgba(5, 4, 15, 0.04);color:#3d3c4c;}.rof-cat-tab.active.svelte-6oqepq {background:var(--rof-accent-bg, #05040f);color:#fff;border-color:var(--rof-accent-bg, #05040f);}.rof-cat-count.svelte-6oqepq {display:inline-flex;align-items:center;justify-content:center;min-width:1rem;height:1rem;padding:0 0.25rem;border-radius:9999px;background:rgba(0, 245, 212, 0.25);color:#05040f;font-size:10px;font-weight:700;margin-left:5px;vertical-align:middle;}.rof-cat-tab.active.svelte-6oqepq .rof-cat-count:where(.svelte-6oqepq) {background:rgba(0, 245, 212, 0.35);color:#fff;}.rof-grid.svelte-6oqepq {display:grid;grid-template-columns:1fr 1fr;gap:10px;}
2
+ @media (max-width: 640px) {.rof-grid.svelte-6oqepq {grid-template-columns:1fr;} }.rof-item.svelte-6oqepq {background:var(--rof-item-bg, #fff);border:1px solid var(--rof-border-color, rgba(5, 4, 15, 0.07));padding:1rem;display:flex;gap:0.875rem;align-items:flex-start;transition:border-color 0.2s;}.rof-item.svelte-6oqepq:hover {border-color:rgba(5, 4, 15, 0.15);}.rof-item-body.svelte-6oqepq {flex:1;min-width:0;}.rof-item-name.svelte-6oqepq {font-size:14px;font-weight:600;color:#05040f;line-height:1.3;margin-bottom:3px;}.rof-item-desc.svelte-6oqepq {font-size:12px;color:#5e5d6b;line-height:1.5;margin-bottom:6px;}.rof-variant-picker.svelte-6oqepq {display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}.rof-variant-pill.svelte-6oqepq {height:24px;padding:0 10px;border-radius:9999px;border:1px solid rgba(5, 4, 15, 0.14);background:transparent;font-size:11px;font-weight:600;color:#5e5d6b;cursor:pointer;transition:background 0.15s, color 0.15s, border-color 0.15s;white-space:nowrap;}.rof-variant-pill.svelte-6oqepq:hover {background:rgba(5, 4, 15, 0.04);color:#3d3c4c;}.rof-variant-pill.active.svelte-6oqepq {background:#05040f;color:#fff;border-color:#05040f;}.rof-item-tags.svelte-6oqepq {display:flex;gap:0.25rem;flex-wrap:wrap;margin-bottom:0.5rem;}.rof-item-tag.svelte-6oqepq {font-size:10px;font-weight:600;letter-spacing:0.5px;color:rgba(0, 160, 120, 0.8);background:rgba(0, 200, 160, 0.06);border:1px solid rgba(0, 200, 160, 0.15);padding:2px 7px;}.rof-item-tag--icon.svelte-6oqepq {padding:0;background:transparent;border:0;display:inline-flex;align-items:center;}.rof-diet-icon.svelte-6oqepq {display:block;}.rof-item-footer.svelte-6oqepq {display:flex;align-items:center;justify-content:space-between;}.rof-item-price.svelte-6oqepq {font-size:15px;font-weight:700;color:#05040f;letter-spacing:-0.3px;font-variant-numeric:tabular-nums;}.rof-qty.svelte-6oqepq {display:inline-flex;align-items:center;gap:10px;}.rof-qty-btn.svelte-6oqepq {width:32px;height:32px;border-radius:9999px;background:transparent;font-size:16px;color:#05040f;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;overflow:hidden;border:1.5px solid rgba(5, 4, 15, 0.18);transition:color 0.25s, border-color 0.25s;}.rof-qty-btn.svelte-6oqepq::before {content:'';position:absolute;inset:0;border-radius:50%;background:#1a1a18;transform:scale(0);transition:transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);z-index:0;}.rof-qty-btn.svelte-6oqepq::after {content:'';position:absolute;top:0;bottom:0;left:-60%;width:40%;background:linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.22) 50%, transparent 100%);transform:skewX(-12deg);transition:left 0.45s cubic-bezier(0.4, 0, 0.2, 1);z-index:1;pointer-events:none;}.rof-qty-btn.svelte-6oqepq:hover::before {transform:scale(1);}.rof-qty-btn.svelte-6oqepq:hover::after {left:130%;}.rof-qty-btn.svelte-6oqepq:hover {color:#f5f2ec;border-color:#1a1a18;}.rof-qty-btn.svelte-6oqepq span:where(.svelte-6oqepq) {position:relative;z-index:2;}.rof-qty-val.svelte-6oqepq {width:1.25rem;text-align:center;font-size:14px;font-weight:600;color:#05040f;user-select:none;}.rof-qty-val.pop.svelte-6oqepq { animation: svelte-6oqepq-rof-qty-pop 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);}
3
+ @keyframes svelte-6oqepq-rof-qty-pop {
4
+ 0% { transform: scale(1); }
5
+ 40% { transform: scale(1.5); }
6
+ 100% { transform: scale(1); }
7
+ }.rof-cart-bar.svelte-6oqepq {display:flex;align-items:center;justify-content:space-between;background:var(--rof-cart-bg, #05040f);padding:1rem 1.5rem;margin-top:1.5rem;position:sticky;bottom:1.5rem;}
8
+ @media (max-width: 640px) {.rof-cart-bar.svelte-6oqepq {flex-direction:column;gap:12px;align-items:stretch;position:static;} }.rof-confirm-left.svelte-6oqepq {display:flex;align-items:center;gap:10px;min-width:0;flex:1;}.rof-confirm-label.svelte-6oqepq {font-size:13px;font-weight:700;color:rgb(0, 245, 212);letter-spacing:0.2px;white-space:nowrap;}.rof-confirm-items.svelte-6oqepq {font-size:13px;color:#9896b0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.rof-confirm-right.svelte-6oqepq {display:flex;align-items:center;gap:1rem;flex-shrink:0;}.rof-confirm-total.svelte-6oqepq {font-size:15px;font-weight:700;color:#f0eeff;font-variant-numeric:tabular-nums;}.rof-confirm-time.svelte-6oqepq {font-size:12px;color:#9896b0;}.rof-cart-summary.svelte-6oqepq {font-size:14px;color:#f0eeff;font-variant-numeric:tabular-nums;}.rof-cart-summary.svelte-6oqepq strong:where(.svelte-6oqepq) {font-size:17px;font-weight:700;}.rof-cart-right.svelte-6oqepq {display:flex;align-items:center;gap:1rem;}
9
+ @media (max-width: 640px) {.rof-cart-right.svelte-6oqepq {justify-content:space-between;} }.rof-schedule.svelte-6oqepq {display:flex;align-items:center;gap:10px;}.rof-schedule-label.svelte-6oqepq {font-size:12px;font-weight:600;color:#9896b0;white-space:nowrap;letter-spacing:0.3px;text-transform:uppercase;}.rof-timepicker.svelte-6oqepq {position:relative;}.rof-timepicker-btn.svelte-6oqepq {display:flex;align-items:center;gap:7px;height:36px;padding:0 12px;background:rgba(255, 255, 255, 0.07);border:1px solid rgba(255, 255, 255, 0.12);border-radius:8px;color:#f0eeff;font-size:13px;font-weight:600;cursor:pointer;transition:background 0.15s, border-color 0.15s;white-space:nowrap;}.rof-timepicker-btn.svelte-6oqepq:hover {background:rgba(255, 255, 255, 0.11);border-color:rgba(255, 255, 255, 0.2);}.rof-timepicker-caret.svelte-6oqepq {opacity:0.4;flex-shrink:0;transition:transform 0.15s;}.rof-timepicker.open.svelte-6oqepq .rof-timepicker-caret:where(.svelte-6oqepq) {transform:rotate(180deg);}.rof-timepicker.open.svelte-6oqepq .rof-timepicker-btn:where(.svelte-6oqepq) {background:rgba(255, 255, 255, 0.11);border-color:rgba(255, 255, 255, 0.22);}.rof-timepicker-drop.svelte-6oqepq {display:none;position:absolute;bottom:calc(100% + 8px);right:0;width:148px;background:#111018;border:1px solid rgba(255, 255, 255, 0.1);border-radius:10px;padding:0.25rem;z-index:200;max-height:220px;overflow-y:auto;box-shadow:0 8px 32px rgba(0, 0, 0, 0.5);}.rof-timepicker.open.svelte-6oqepq .rof-timepicker-drop:where(.svelte-6oqepq) {display:block;}.rof-tp-slot.svelte-6oqepq {display:flex;align-items:center;justify-content:space-between;width:100%;padding:0.5rem 0.75rem;background:transparent;border:0;border-radius:6px;color:#c8c6dc;font-size:13px;font-weight:500;cursor:pointer;text-align:left;transition:background 0.1s, color 0.1s;}.rof-tp-slot.svelte-6oqepq:hover {background:rgba(255, 255, 255, 0.07);color:#f0eeff;}.rof-tp-slot.selected.svelte-6oqepq {background:rgba(0, 245, 212, 0.1);color:rgb(0, 245, 212);font-weight:600;}.rof-tp-tick.svelte-6oqepq {opacity:0;flex-shrink:0;}.rof-tp-tick.selected.svelte-6oqepq {opacity:1;}.rof-tp-days.svelte-6oqepq {display:flex;gap:0.25rem;padding:0.25rem 0 0.5rem;border-bottom:1px solid rgba(255, 255, 255, 0.08);margin-bottom:0.25rem;overflow-x:auto;scrollbar-width:none;}.rof-tp-days.svelte-6oqepq::-webkit-scrollbar {display:none;}.rof-tp-day.svelte-6oqepq {flex-shrink:0;height:26px;padding:0 10px;border-radius:6px;border:1px solid rgba(255, 255, 255, 0.1);background:transparent;font-size:12px;font-weight:600;color:#9896b0;cursor:pointer;transition:background 0.1s, color 0.1s, border-color 0.1s;white-space:nowrap;}.rof-tp-day.active.svelte-6oqepq {background:rgba(255, 255, 255, 0.1);border-color:rgba(255, 255, 255, 0.2);color:#f0eeff;}.rof-tp-asap.svelte-6oqepq {border-bottom:1px solid rgba(255, 255, 255, 0.08);border-radius:6px 6px 0 0;margin-bottom:0.25rem;padding-bottom:10px;}.rof-place-btn.svelte-6oqepq {height:40px;padding:0 1.5rem;background:var(--rof-place-btn-bg, rgb(0, 200, 160));color:#05040f;border:0;font-size:13px;font-weight:700;cursor:pointer;letter-spacing:0.3px;transition:opacity 0.15s;}.rof-place-btn.svelte-6oqepq:hover {opacity:0.85;}.rof-place-btn.svelte-6oqepq:disabled {opacity:0.4;cursor:not-allowed;}.rof-order-msg.svelte-6oqepq {padding:14px 0 0;font-size:14px;font-weight:500;color:rgb(180, 40, 40);}`};function L(t,r){y(r,!0),C(t,le);let D=T(r,`items`,23,()=>[]),L=T(r,`categoryOrder`,7),R=T(r,`categoryLabels`,7),z=T(r,`currency`,7,``),ue=T(r,`iconFor`,7),B=T(r,`checkIn`,7),V=T(r,`checkOut`,7),de=T(r,`placeOrder`,7);function fe(e,t){r.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let H=_(``),pe=_(!1),U=_(a({})),me=_(a({})),W=_(``),G=_(0),K=_(!1),q=_(!1),J=_(null),Y=_(null),he=_(null);function X(e,t){return t?`${e}:${t}`:e}function Z(e){return d(me)[e.id]??e.variants?.[0]}function ge(e){return d(U)[X(e.id,Z(e))]?.qty??0}function _e(e){let t=Z(e),n=X(e.id,t),r=d(U)[n];h(U,{...d(U),[n]:{item:e,variant:t,qty:(r?.qty??0)+1}},!0),h(he,null),queueMicrotask(()=>h(he,n,!0))}function ve(e){let t=Z(e),n=X(e.id,t),r=d(U)[n];if(r){if(r.qty<=1){let e={...d(U)};delete e[n],h(U,e,!0)}else h(U,{...d(U),[n]:{...r,qty:r.qty-1}},!0)}}let Q=s(()=>Object.values(d(U))),ye=s(()=>d(Q).reduce((e,t)=>e+t.qty,0)),be=s(()=>d(Q).reduce((e,t)=>e+Number(t.item.price)*t.qty,0)),xe=s(()=>d(ye)>0||d(Y)!==null),Se=s(()=>{let e={};for(let t of d(Q))e[t.item.category]=(e[t.item.category]??0)+t.qty;return e}),Ce=s(()=>{let e=new Set,t=[];for(let n of D())e.has(n.category)||(e.add(n.category),t.push(n.category));if(!L()?.length)return t;let n=L().filter(t=>e.has(t)),r=t.filter(e=>!L().includes(e));return[...n,...r]});function we(e){return R()?.[e]?R()[e]:e.split(`-`).map(e=>e&&e[0].toUpperCase()+e.slice(1)).join(` `)}let Te=s(()=>{let e={};for(let t of D())(e[t.category]??=[]).push(t);return e}),Ee=s(()=>d(Te)[d(H)]??[]);l(()=>{!d(pe)&&d(Ce).length&&h(H,d(Ce)[0],!0)});function De(e){let t=Number(e);return Number.isNaN(t)?`${z()}${e}`:`${z()}${Number.isInteger(t)?t:t.toFixed(2)}`}let Oe=(()=>{let e=[];for(let t=6;t<24;t++)for(let n of[0,30])e.push(`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`);return e})();function ke(e){let[t,n]=e.split(`:`).map(Number),r=t>=12?`pm`:`am`;return`${t%12||12}:${String(n).padStart(2,`0`)} ${r}`}let Ae=s(()=>{let e=new Date;e.setHours(0,0,0,0);let t=[];if(B()&&V()){let n=new Date(`${B().slice(0,10)}T00:00:00`),r=new Date(`${V().slice(0,10)}T00:00:00`),i=new Date(Math.max(e.getTime(),n.getTime())),a=new Date(r.getTime());a.setDate(a.getDate()-1);for(let n=new Date(i);n<=a;n.setDate(n.getDate()+1)){let r=Math.round((n.getTime()-e.getTime())/864e5),i=r===0?`Today`:r===1?`Tomorrow`:n.toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`});t.push({offset:r,label:i})}}return t.length||t.push({offset:0,label:`Today`},{offset:1,label:`Tomorrow`}),t}),je=s(()=>{if(!d(W))return`ASAP`;let e=d(Ae).find(e=>e.offset===d(G));return(e&&e.offset!==0?e.label+` · `:``)+ke(d(W))});function Me(e){h(G,e,!0)}function Ne(e){h(W,e??``,!0),e&&h(K,!1)}async function Pe(){if(!d(Q).length||d(q))return;h(q,!0),h(J,null);let e=d(W)?(()=>{let[e,t]=d(W).split(`:`).map(Number),n=new Date;return n.setDate(n.getDate()+d(G)),n.setHours(e,t,0,0),n.toISOString()})():null,t=d(Q).map(e=>({item_id:e.item.id,quantity:e.qty,...e.variant?{variant:e.variant}:{}}));try{let n=await de()({items:t,scheduledFor:e});n.ok?(h(Y,{items:d(Q).map(e=>`${e.item.name}${e.variant?` (${e.variant})`:``} ×${e.qty}`),total:d(be),deliveryLabel:d(je)},!0),fe(`order-placed`,{items:t,total:d(be),scheduledFor:e,order:n.order}),h(U,{},!0),h(W,``),h(G,0),setTimeout(()=>h(Y,null),4500)):h(J,n.error??`Something went wrong. Please try again.`,!0)}catch{h(J,`Network error. Please try again.`)}finally{h(q,!1)}}function Fe(){h(K,!1)}var Ie={get items(){return D()},set items(e=[]){D(e),c()},get categoryOrder(){return L()},set categoryOrder(e){L(e),c()},get categoryLabels(){return R()},set categoryLabels(e){R(e),c()},get currency(){return z()},set currency(e=``){z(e),c()},get iconFor(){return ue()},set iconFor(e){ue(e),c()},get checkIn(){return B()},set checkIn(e){B(e),c()},get checkOut(){return V()},set checkOut(e){V(e),c()},get placeOrder(){return de()},set placeOrder(e){de(e),c()}},Le=ce();u(`click`,f,Fe);var Re=A(Le);k(Re,21,()=>d(Ce),b,(e,t)=>{var n=M();let r;var i=A(n),a=g(i),s=e=>{var n=j(),r=A(n,!0);x(n),o(()=>O(r,d(Se)[d(t)])),m(e,n)};p(a,e=>{d(Se)[d(t)]&&e(s)}),x(n),o(e=>{r=S(n,1,`rof-cat-tab svelte-6oqepq`,null,r,{active:d(t)===d(H)}),O(i,`${e??``} `)},[()=>we(d(t))]),w(`click`,n,()=>{h(pe,!0),h(H,d(t),!0)}),m(e,n)}),x(Re);var $=g(Re,2);k($,21,()=>d(Ee),e=>e.id,(e,t)=>{let r=s(()=>Z(d(t))),a=s(()=>ge(d(t)));var c=ae(),l=A(c),u=A(l),f=A(u,!0);x(u);var _=g(u,2),v=e=>{var n=N(),r=A(n,!0);x(n),o(()=>O(r,d(t).description)),m(e,n)};p(_,e=>{d(t).description&&e(v)});var y=g(_,2),C=e=>{var n=te();k(n,21,()=>d(t).variants,b,(e,n)=>{var i=ee();let a;var s=A(i,!0);x(i),o(()=>{a=S(i,1,`rof-variant-pill svelte-6oqepq`,null,a,{active:d(n)===d(r)}),O(s,d(n))}),w(`click`,i,()=>h(me,{...d(me),[d(t).id]:d(n)},!0)),m(e,i)}),x(n),m(e,n)};p(y,e=>{d(t).variants?.length&&e(C)});var T=g(y,2),D=e=>{var r=ie();k(r,21,()=>d(t).allergens,b,(e,t)=>{let r=s(()=>ue()?.(d(t)));var a=i(),c=n(a),l=e=>{var n=ne(),i=A(n);x(n),o(()=>{E(i,`src`,d(r)),E(i,`alt`,d(t)),E(i,`title`,d(t))}),m(e,n)},u=e=>{var n=re(),r=A(n,!0);x(n),o(()=>O(r,d(t))),m(e,n)};p(c,e=>{d(r)?e(l):e(u,-1)}),m(e,a)}),x(r),m(e,r)};p(T,e=>{d(t).allergens?.length&&e(D)});var j=g(T,2),M=A(j),oe=A(M,!0);x(M);var se=g(M,2),P=A(se),F=g(P,2);let I;var ce=A(F,!0);x(F);var le=g(F,2);x(se),x(j),x(l),x(c),o((e,n)=>{O(f,d(t).name),O(oe,e),E(P,`aria-label`,`Remove one ${d(t).name}`),I=S(F,1,`rof-qty-val svelte-6oqepq`,null,I,n),O(ce,d(a)),E(le,`aria-label`,`Add one ${d(t).name}`)},[()=>De(d(t).price),()=>({pop:d(he)===X(d(t).id,d(r))})]),w(`click`,P,()=>ve(d(t))),w(`click`,le,()=>_e(d(t))),m(e,c)}),x($);var ze=g($,2),Be=t=>{var r=I(),i=n(r),a=A(i),s=e=>{var t=oe(),r=n(t),i=g(A(r),4),a=A(i,!0);x(i),x(r);var s=g(r,2),c=A(s),l=A(c,!0);x(c);var u=g(c,2),f=A(u,!0);x(u),x(s),o((e,t)=>{O(a,e),O(l,t),O(f,d(Y).deliveryLabel)},[()=>d(Y).items.join(` · `),()=>De(d(Y).total)]),m(e,t)},c=t=>{var r=P(),i=n(r),a=A(i),s=g(a),c=A(s,!0);x(s),x(i);var l=g(i,2),u=A(l),f=g(A(u),2);let p;var _=A(f),v=g(A(_),2),y=A(v,!0);x(v),e(2),x(_);var C=g(_,2),T=A(C);k(T,21,()=>d(Ae),b,(e,t)=>{var n=ee();let r;var i=A(n,!0);x(n),o(()=>{r=S(n,1,`rof-tp-day svelte-6oqepq`,null,r,{active:d(t).offset===d(G)}),O(i,d(t).label)}),w(`click`,n,()=>Me(d(t).offset)),m(e,n)}),x(T);var E=g(T,2),D=g(A(E),2);let j;x(E);var M=g(E,2);k(M,17,()=>Oe,b,(e,t)=>{var n=se();let r;var i=A(n),a=A(i,!0);x(i);var s=g(i,2);let c;x(n),o(e=>{r=S(n,1,`rof-tp-slot svelte-6oqepq`,null,r,{selected:d(W)===d(t)}),O(a,e),c=S(s,0,`rof-tp-tick svelte-6oqepq`,null,c,{selected:d(W)===d(t)})},[()=>ke(d(t))]),w(`click`,n,()=>Ne(d(t))),m(e,n)}),x(C),x(f),x(u);var N=g(u,2),te=A(N,!0);x(N),x(l),o(e=>{O(a,`${d(ye)??``} item${d(ye)===1?``:`s`}  ·  `),O(c,e),p=S(f,1,`rof-timepicker svelte-6oqepq`,null,p,{open:d(K)}),O(y,d(je)),j=S(D,0,`rof-tp-tick svelte-6oqepq`,null,j,{selected:!d(W)}),N.disabled=d(q),O(te,d(q)?`Placing order…`:`Place Order`)},[()=>De(d(be))]),w(`click`,_,e=>{e.stopPropagation(),h(K,!d(K))}),w(`click`,C,e=>e.stopPropagation()),w(`click`,E,()=>Ne(null)),w(`click`,N,Pe),m(t,r)};p(a,e=>{d(Y)?e(s):e(c,-1)}),x(i);var l=g(i,2),u=e=>{var t=F(),n=A(t,!0);x(t),o(()=>O(n,d(J))),m(e,t)};p(l,e=>{d(J)&&e(u)}),m(t,r)};return p(ze,e=>{d(xe)&&e(Be)}),x(Le),m(t,Le),v(Ie)}t([`click`]),customElements.define(`restaurant-order-form`,D(L,{currency:{attribute:`currency`,type:`String`},checkIn:{attribute:`check-in`,type:`String`},checkOut:{attribute:`check-out`,type:`String`},items:{},categoryOrder:{},categoryLabels:{},iconFor:{},placeOrder:{}},[],[],{mode:`open`}));
@@ -0,0 +1,26 @@
1
+ import{$ as e,A as t,B as n,C as r,D as i,E as a,G as o,H as s,I as c,J as l,K as u,L as d,M as f,N as p,S as m,T as h,U as g,V as _,W as v,X as y,Z as b,b as x,et as S,f as C,h as w,j as T,n as E,r as D,s as O,t as k,w as A,y as j,z as M}from"./chunks/client-BDk8LqGN.js";import{i as ee,o as te,r as ne,s as re,t as ie}from"./chunks/calendar-B8eNjUm2.js";import{t as N}from"./chunks/gsap-DWxn8li7.js";var ae=i(`<div class="rgf-badge svelte-1gtjszk"> </div>`),oe=i(`<p class="rgf-desc svelte-1gtjszk"> </p>`),se=i(`<a class="rgf-card svelte-1gtjszk"><div class="rgf-img svelte-1gtjszk"><img loading="lazy" width="800" height="560" class="svelte-1gtjszk"/> <!></div> <div class="rgf-body svelte-1gtjszk"><div class="rgf-info svelte-1gtjszk"><div class="rgf-name svelte-1gtjszk"> </div> <!></div> <div class="rgf-footer svelte-1gtjszk"><div><div class="rgf-from svelte-1gtjszk">From</div> <div class="rgf-price svelte-1gtjszk"> <span class="rgf-price-cur svelte-1gtjszk"> </span></div></div> <span class="rgf-view svelte-1gtjszk"><span class="rgf-view-shine svelte-1gtjszk" aria-hidden="true"></span> <span class="rgf-view-inner svelte-1gtjszk">View <svg width="14" height="14" viewBox="0 0 22 22" fill="none"><line x1="2" y1="11" x2="18" y2="11" stroke="white" stroke-width="2" stroke-linecap="round"></line><polyline points="12,5 19,11 12,17" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></polyline></svg></span></span></div></div></a>`),ce=i(`<div class="rgf-cards svelte-1gtjszk"></div>`),le=i(`<div class="rgr-tag svelte-1gtjszk"> </div>`),ue=i(`<a class="rgr-card svelte-1gtjszk"><div class="rgr-img svelte-1gtjszk"><img loading="lazy" class="svelte-1gtjszk"/></div> <div class="rgr-body svelte-1gtjszk"><div><!> <div class="rgr-name svelte-1gtjszk"> </div> <div class="rgr-desc svelte-1gtjszk"> </div></div> <div class="rgr-price svelte-1gtjszk"> <span class="rgr-price-cur svelte-1gtjszk"> </span> <span class="rgr-price-per svelte-1gtjszk">/ night</span></div></div></a>`),de=i(`<div class="rgr-grid svelte-1gtjszk"></div>`),P=i(`<button type="button"> </button>`),fe=i(`<span class="svelte-1gtjszk"> </span>`),pe=i(`<div class="rg-cal svelte-1gtjszk" role="dialog" aria-label="Choose check-in and check-out dates"><div class="rg-cal-head svelte-1gtjszk"><button type="button" class="rg-cal-nav svelte-1gtjszk" aria-label="Previous month">‹</button> <span class="rg-cal-month svelte-1gtjszk"> </span> <button type="button" class="rg-cal-nav svelte-1gtjszk" aria-label="Next month">›</button></div> <div class="rg-cal-weekdays svelte-1gtjszk"></div> <div class="rg-cal-grid svelte-1gtjszk"></div></div>`),me=i(`<div part="card" role="group"><div class="rg-card-img svelte-1gtjszk"><img class="svelte-1gtjszk"/></div> <div class="rg-card-body svelte-1gtjszk"><h2 class="rg-card-name svelte-1gtjszk"> </h2> <p class="rg-card-desc svelte-1gtjszk"> </p> <div class="rg-card-rule svelte-1gtjszk"></div> <div class="rg-card-footer svelte-1gtjszk"><div><div class="rg-from svelte-1gtjszk">From</div> <div class="rg-price svelte-1gtjszk"> <span class="rg-price-currency svelte-1gtjszk"> </span></div></div> <a class="rg-view svelte-1gtjszk"><span class="rg-view-shine svelte-1gtjszk" aria-hidden="true"></span> <span class="rg-view-inner svelte-1gtjszk">View <svg width="14" height="14" viewBox="0 0 22 22" fill="none"><line x1="2" y1="11" x2="18" y2="11" stroke="currentColor" stroke-width="2" stroke-linecap="round"></line><polyline points="12,5 19,11 12,17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></polyline></svg></span></a></div></div></div>`),he=i(`<div class="rg-filter-bar svelte-1gtjszk" part="filter-bar"><div class="rg-tabs svelte-1gtjszk"></div> <div class="rg-dates svelte-1gtjszk"><button type="button" class="rg-date-box svelte-1gtjszk" aria-label="Select dates"><span class="rg-date-cell rg-date-cell-first svelte-1gtjszk"><span class="rg-date-label svelte-1gtjszk">Check in</span> <span class="rg-date-value svelte-1gtjszk"> </span></span> <span class="rg-date-cell svelte-1gtjszk"><span class="rg-date-label svelte-1gtjszk">Check out</span> <span class="rg-date-value svelte-1gtjszk"> </span></span></button> <!></div></div> <div class="rg-grid svelte-1gtjszk" part="grid"></div>`,1),ge={hash:`svelte-1gtjszk`,code:`:host {display:block;}
2
+
3
+ /* ── Filter bar ── */.rg-filter-bar.svelte-1gtjszk {display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0.75rem;border-bottom:1px solid rgba(255, 255, 255, 0.06);background:#05040f;padding:1rem 1.25rem;}.rg-tabs.svelte-1gtjszk {display:flex;gap:0.25rem;}.rg-tab.svelte-1gtjszk {height:2.25rem;cursor:pointer;border:none;border-radius:0.5rem;background:transparent;padding:0 18px;font-family:'Inter', sans-serif;font-size:13px;font-weight:500;color:rgba(240, 238, 255, 0.7);transition:color 150ms;}.rg-tab.svelte-1gtjszk:hover {color:rgba(240, 238, 255, 0.8);}.rg-tab-active.svelte-1gtjszk {background:rgba(255, 255, 255, 0.07);font-weight:600;color:#f0eeff;}.rg-dates.svelte-1gtjszk {position:relative;}.rg-date-box.svelte-1gtjszk {display:flex;cursor:pointer;border:1px solid rgba(255, 255, 255, 0.1);background:rgba(255, 255, 255, 0.05);padding:0;font-family:'Inter', sans-serif;
4
+ /* Buttons default to line-height normal; the design this ports used divs
5
+ inheriting the page's 1.5, and the bar's height hangs off it. */line-height:1.5;}.rg-date-cell.svelte-1gtjszk {display:flex;flex-direction:column;gap:1px;padding:9px 18px;text-align:left;transition:background-color 150ms;}.rg-date-cell.svelte-1gtjszk:hover {background:rgba(255, 255, 255, 0.06);}.rg-date-cell-first.svelte-1gtjszk {border-right:1px solid rgba(255, 255, 255, 0.08);}.rg-date-label.svelte-1gtjszk {font-size:10px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:rgba(240, 238, 255, 0.6);}.rg-date-value.svelte-1gtjszk {font-size:13px;font-weight:500;color:#f0eeff;}
6
+
7
+ /* ── Calendar popover (visually matched to the page's flatpickr theme) ── */.rg-cal.svelte-1gtjszk {position:absolute;top:calc(100% + 8px);right:0;z-index:50;width:308px;border:1px solid rgba(255, 255, 255, 0.1);border-radius:16px;background:rgba(12, 10, 28, 0.96);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 24px 60px rgba(0, 0, 0, 0.5);padding:12px;font-family:'Inter', sans-serif;}.rg-cal-head.svelte-1gtjszk {display:flex;align-items:center;justify-content:space-between;padding:4px 4px 8px;}.rg-cal-month.svelte-1gtjszk {font-size:15px;font-weight:600;color:#f0eeff;}.rg-cal-nav.svelte-1gtjszk {cursor:pointer;border:none;background:none;padding:2px 8px;font-size:18px;line-height:1;color:rgba(240, 238, 255, 0.5);}.rg-cal-nav.svelte-1gtjszk:hover {color:#f0eeff;}.rg-cal-weekdays.svelte-1gtjszk {display:grid;grid-template-columns:repeat(7, 1fr);margin-bottom:4px;}.rg-cal-weekdays.svelte-1gtjszk span:where(.svelte-1gtjszk) {text-align:center;font-size:11px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:rgba(240, 238, 255, 0.3);}.rg-cal-grid.svelte-1gtjszk {display:grid;grid-template-columns:repeat(7, 1fr);}.rg-cal-day.svelte-1gtjszk {height:36px;cursor:pointer;border:1px solid transparent;border-radius:8px;background:none;font-family:inherit;font-size:13px;color:rgba(240, 238, 255, 0.7);}.rg-cal-day.svelte-1gtjszk:hover {background:rgba(255, 255, 255, 0.08);color:#f0eeff;}.rg-today.svelte-1gtjszk {border-color:rgba(0, 245, 212, 0.4);color:rgb(0, 245, 212);}.rg-today.svelte-1gtjszk:hover {background:rgba(0, 245, 212, 0.1);}.rg-inrange.svelte-1gtjszk {background:rgba(0, 245, 212, 0.12);color:rgb(0, 245, 212);}.rg-edge.svelte-1gtjszk,
8
+ .rg-edge.svelte-1gtjszk:hover {background:rgb(0, 245, 212);border-color:rgb(0, 245, 212);color:#05040f;font-weight:600;}.rg-out.svelte-1gtjszk,
9
+ .rg-cal-day.svelte-1gtjszk:disabled {color:rgba(240, 238, 255, 0.15);cursor:default;}
10
+
11
+ /* ── Cards grid ── */.rg-grid.svelte-1gtjszk {display:flex;flex-direction:column;gap:1.25rem;padding:0 1.25rem;background:linear-gradient(180deg, #05040f 0%, #05040f 20%, #f5f2ec 40%, #f5f2ec 100%);}.rg-hidden.svelte-1gtjszk {display:none;}.rg-card.svelte-1gtjszk {position:relative;display:flex;flex-direction:column;overflow:hidden;background:#fff;box-shadow:0 4px 32px rgba(0, 0, 0, 0.18);}.rg-card-img.svelte-1gtjszk {height:220px;overflow:hidden;}.rg-card-img.svelte-1gtjszk img:where(.svelte-1gtjszk) {display:block;height:100%;width:100%;object-fit:cover;transition:transform 500ms;}.rg-card.svelte-1gtjszk:hover .rg-card-img:where(.svelte-1gtjszk) img:where(.svelte-1gtjszk) {transform:scale(1.04);}.rg-card-body.svelte-1gtjszk {display:flex;flex:1;flex-direction:column;padding:1.75rem 1.75rem 1.5rem;font-family:'Inter', sans-serif;}.rg-card-name.svelte-1gtjszk {margin:0 0 0.75rem;font-family:'Syne', sans-serif;font-size:26px;font-weight:800;letter-spacing:-0.5px;color:#1a1a18;}.rg-card-desc.svelte-1gtjszk {margin:0 0 1.25rem;flex:1;font-size:15px;line-height:1.65;color:rgba(26, 26, 24, 0.72);}.rg-card-rule.svelte-1gtjszk {margin-bottom:1.25rem;height:1px;background:rgba(26, 26, 24, 0.08);}.rg-card-footer.svelte-1gtjszk {display:flex;align-items:center;justify-content:space-between;}.rg-from.svelte-1gtjszk {margin-bottom:2px;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(26, 26, 24, 0.65);}.rg-price.svelte-1gtjszk {display:flex;align-items:baseline;gap:5px;font-size:28px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-0.02em;color:#1a1a18;}.rg-price-currency.svelte-1gtjszk {font-size:11px;font-weight:600;letter-spacing:1px;}.rg-view.svelte-1gtjszk {position:relative;display:inline-flex;height:2.75rem;align-items:center;gap:0.5rem;overflow:hidden;white-space:nowrap;background:#1a1a18;padding:0 1.25rem;font-size:14px;font-weight:600;color:#f0eeff;text-decoration:none;}.rg-view-shine.svelte-1gtjszk {pointer-events:none;position:absolute;top:0;bottom:0;left:-60%;width:40%;transform:skewX(-12deg);background:linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.18) 50%, transparent 100%);transition:left 450ms cubic-bezier(0.4, 0, 0.2, 1);}.rg-card.svelte-1gtjszk:hover .rg-view-shine:where(.svelte-1gtjszk) {left:130%;}.rg-view-inner.svelte-1gtjszk {position:relative;z-index:1;display:inline-flex;align-items:center;gap:0.5rem;}
12
+
13
+ /* ── Feature variant (homepage cards: badge, carousel → 3-col grid) ── */.rgf-cards.svelte-1gtjszk {display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:16px;padding-bottom:4px;scrollbar-width:none;font-family:'Inter', sans-serif;}.rgf-cards.svelte-1gtjszk::-webkit-scrollbar {display:none;}.rgf-card.svelte-1gtjszk {flex:0 0 80vw;max-width:340px;scroll-snap-align:start;display:flex;cursor:pointer;flex-direction:column;overflow:hidden;border:1px solid rgba(10, 8, 20, 0.08);background:#fff;text-decoration:none;transition:border-color 300ms,
14
+ box-shadow 300ms;}.rgf-card.svelte-1gtjszk:hover {border-color:rgba(10, 8, 20, 0.15);box-shadow:0 8px 40px rgba(10, 8, 20, 0.08);}.rgf-img.svelte-1gtjszk {position:relative;display:block;height:280px;width:100%;overflow:hidden;}.rgf-img.svelte-1gtjszk img:where(.svelte-1gtjszk) {display:block;height:100%;width:100%;object-fit:cover;}.rgf-badge.svelte-1gtjszk {position:absolute;top:0;left:0;background:rgba(5, 4, 15, 0.7);padding:6px 14px;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(240, 238, 255, 1);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}.rgf-body.svelte-1gtjszk {display:flex;flex:1;flex-direction:column;padding:1.75rem 2rem 2rem;}.rgf-info.svelte-1gtjszk {flex:1;}.rgf-name.svelte-1gtjszk {margin-bottom:10px;min-height:2.2em;font-family:'Syne', sans-serif;font-size:24px;font-weight:800;letter-spacing:-0.48px;color:#0a0814;}.rgf-desc.svelte-1gtjszk {margin:0 0 1.75rem;font-size:15px;line-height:1.65;color:#0a0814;}.rgf-footer.svelte-1gtjszk {display:flex;align-items:center;justify-content:space-between;border-top:1px solid rgba(10, 8, 20, 0.08);padding-top:1.25rem;}.rgf-from.svelte-1gtjszk {font-size:12px;letter-spacing:1px;text-transform:uppercase;color:rgba(10, 8, 20, 0.35);}.rgf-price.svelte-1gtjszk {font-size:26px;font-weight:800;letter-spacing:-0.5px;color:#0a0814;}.rgf-price-cur.svelte-1gtjszk {font-size:11px;font-weight:600;letter-spacing:1px;}.rgf-view.svelte-1gtjszk {position:relative;display:flex;align-items:center;gap:10px;overflow:hidden;background:#1a1a18;padding:0.75rem 1.5rem;font-size:15px;font-weight:600;color:#ffffff;}.rgf-view-shine.svelte-1gtjszk {position:absolute;top:0;bottom:0;left:-60%;width:40%;background:linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.18) 50%, transparent 100%);transform:skewX(-12deg);transition:left 0.45s cubic-bezier(0.4, 0, 0.2, 1);}.rgf-card.svelte-1gtjszk:hover .rgf-view-shine:where(.svelte-1gtjszk) {left:130%;}.rgf-view-inner.svelte-1gtjszk {position:relative;z-index:1;display:flex;align-items:center;gap:10px;}
15
+ @media (min-width: 640px) {.rgf-card.svelte-1gtjszk {flex:0 0 60vw;max-width:400px;}
16
+ }
17
+ @media (min-width: 1024px) {.rgf-cards.svelte-1gtjszk {display:grid;grid-template-columns:repeat(3, 1fr);gap:24px;overflow-x:visible;}.rgf-card.svelte-1gtjszk {flex:unset;max-width:unset;}
18
+ }
19
+
20
+ /* ── Rows variant (light surface, horizontal cards) ── */.rgr-grid.svelte-1gtjszk {display:grid;grid-template-columns:1fr;gap:1.25rem;font-family:'Inter', sans-serif;}.rgr-card.svelte-1gtjszk {display:flex;min-height:220px;overflow:hidden;border:1px solid rgba(0, 0, 0, 0.07);background:#ffffff;text-decoration:none;transition:border-color 200ms,
21
+ background 200ms;}.rgr-card.svelte-1gtjszk:hover {border-color:rgba(0, 0, 0, 0.14);background:rgba(255, 255, 255, 0.8);}.rgr-img.svelte-1gtjszk {width:35%;min-width:200px;flex-shrink:0;overflow:hidden;}.rgr-img.svelte-1gtjszk img:where(.svelte-1gtjszk) {display:block;height:100%;width:100%;object-fit:cover;}.rgr-body.svelte-1gtjszk {display:flex;flex-direction:column;justify-content:space-between;padding:20px 24px;}.rgr-tag.svelte-1gtjszk {margin-bottom:6px;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(30, 20, 10, 0.7);}.rgr-name.svelte-1gtjszk {margin-bottom:0.5rem;font-family:'Syne', sans-serif;font-size:20px;font-weight:800;letter-spacing:-0.4px;color:rgba(30, 20, 10, 0.9);}.rgr-desc.svelte-1gtjszk {font-size:13px;line-height:1.5;color:rgba(30, 20, 10, 0.8);}.rgr-price.svelte-1gtjszk {margin-top:1rem;text-align:right;font-size:24px;font-weight:800;letter-spacing:-0.3px;color:rgba(30, 20, 10, 0.85);}.rgr-price-cur.svelte-1gtjszk {font-size:13px;font-weight:600;}.rgr-price-per.svelte-1gtjszk {font-size:12px;font-weight:400;}
22
+
23
+ @media (min-width: 640px) {.rg-grid.svelte-1gtjszk {gap:1.5rem;padding:0 2.5rem;}
24
+ }
25
+ @media (min-width: 1024px) {.rg-filter-bar.svelte-1gtjszk {flex-wrap:nowrap;padding:1.25rem 60px;}.rg-grid.svelte-1gtjszk {display:grid;grid-template-columns:repeat(3, 1fr);padding:0 60px;}.rgr-grid.svelte-1gtjszk {grid-template-columns:repeat(2, 1fr);}
26
+ }`};function F(t,i){b(i,!0),w(t,ge);let k=E(i,`rooms`,23,()=>[]),F=E(i,`filterTabs`,7,void 0),I=E(i,`checkIn`,7,``),L=E(i,`checkOut`,7,``),R=E(i,`currency`,7,`USD`),z=E(i,`allLabel`,7,`All`),B=E(i,`variant`,7,`grid`);function V(e,t){i.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let H=l(()=>F()?[z(),...F().map(e=>e.label)]:[z(),...k().map(e=>e.tag).filter((e,t,n)=>!!e&&n.indexOf(e)===t)]),U=v(0);function _e(e,t){return t===0?!0:F()?e.slug===F()[t-1]?.slug:e.tag===p(H)[t]}let W=e=>e?new Date(`${e}T00:00:00`).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`—`,G=v(!1),K=te(new Date),q=v(s(K.getFullYear())),J=v(s(K.getMonth())),ve=ne(),ye=ee(),be=l(()=>ie(p(q),p(J),K,[])),Y=v(void 0);function xe(){let e=I()?new Date(`${I()}T00:00:00`):K;g(q,e.getFullYear(),!0),g(J,e.getMonth(),!0),g(G,!0)}function Se(){p(J)===0?(g(J,11),o(q,-1)):o(J,-1)}function Ce(){p(J)===11?(g(J,0),o(q)):o(J)}function we(e){!I()||I()&&L()?(I(e),L(``)):e>=I()?(L(e),g(G,!1)):(I(e),L(``)),V(`dates-change`,{checkIn:I(),checkOut:L()})}d(()=>{if(!p(G)||typeof document>`u`)return;let e=e=>{p(Y)&&!e.composedPath().includes(p(Y))&&g(G,!1)},t=e=>{e.key===`Escape`&&g(G,!1)};return document.addEventListener(`click`,e,!0),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e,!0),document.removeEventListener(`keydown`,t)}});let X=e=>e==null?``:e.toLocaleString(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:0}),Z=v(s([])),Q=v(s([]));r(()=>{if(typeof window>`u`||B()===`rows`)return;if(B()===`feature`){let e=p(Q).filter(e=>!!e);if(!e.length||typeof IntersectionObserver>`u`)return;N.set(e,{opacity:0,y:48});let t=new IntersectionObserver(n=>{n[0].isIntersecting&&(t.disconnect(),N.to(e,{opacity:1,y:0,ease:`power2.out`,stagger:.12,duration:.7}))},{rootMargin:`0px 0px -15% 0px`});return t.observe(e[0]),()=>t.disconnect()}let e=p(Z).filter(e=>!!e);if(e.length>1){let t=e[0].offsetLeft;e.forEach((n,r)=>{N.set(n,{x:t-n.offsetLeft,opacity:1,zIndex:e.length-r})}),N.to(e,{x:0,zIndex:0,duration:.9,ease:`expo.out`,stagger:.1,delay:.15})}});var Te={get rooms(){return k()},set rooms(e=[]){k(e),u()},get filterTabs(){return F()},set filterTabs(e=void 0){F(e),u()},get checkIn(){return I()},set checkIn(e=``){I(e),u()},get checkOut(){return L()},set checkOut(e=``){L(e),u()},get currency(){return R()},set currency(e=`USD`){R(e),u()},get allLabel(){return z()},set allLabel(e=`All`){z(e),u()},get variant(){return B()},set variant(e=`grid`){B(e),u()}},$=a(),Ee=n($),De=t=>{var n=ce();j(n,23,k,(e,t)=>e.slug??t,(t,n,r)=>{var i=se(),a=M(i),o=M(a),s=_(o,2),l=e=>{var t=ae(),r=M(t,!0);S(t),c(()=>A(r,p(n).tag)),h(e,t)};m(s,e=>{p(n).tag&&e(l)}),S(a);var u=_(a,2),d=M(u),g=M(d),v=M(g,!0);S(g);var y=_(g,2),b=e=>{var t=oe(),r=M(t,!0);S(t),c(()=>A(r,p(n).description)),h(e,t)};m(y,e=>{p(n).description&&e(b)}),S(d);var x=_(d,2),C=M(x),w=_(M(C),2),T=M(w),E=_(T),k=M(E,!0);S(E),S(w),S(C),e(2),S(x),S(u),S(i),D(i,(e,t)=>p(Q)[t]=e,e=>p(Q)?.[e],()=>[p(r)]),c(e=>{O(i,`href`,p(n).href),O(o,`src`,p(n).image),O(o,`alt`,p(n).name),A(v,p(n).name),A(T,`${e??``} `),A(k,R())},[()=>X(p(n).price)]),f(`mouseenter`,i,()=>V(`room-hover`,{slug:p(n).slug})),f(`mouseleave`,i,()=>V(`room-leave`,{slug:p(n).slug})),h(t,i)}),S(n),h(t,n)},Oe=t=>{var n=de();j(n,23,k,(e,t)=>e.slug??t,(t,n)=>{var r=ue(),i=M(r),a=M(i);S(i);var o=_(i,2),s=M(o),l=M(s),u=e=>{var t=le(),r=M(t,!0);S(t),c(()=>A(r,p(n).tag)),h(e,t)};m(l,e=>{p(n).tag&&e(u)});var d=_(l,2),g=M(d,!0);S(d);var v=_(d,2),y=M(v,!0);S(v),S(s);var b=_(s,2),x=M(b),C=_(x),w=M(C,!0);S(C),e(2),S(b),S(o),S(r),c(e=>{O(r,`href`,p(n).href),O(a,`src`,p(n).image),O(a,`alt`,p(n).name),A(g,p(n).name),A(y,p(n).description),A(x,`${e??``} `),A(w,R())},[()=>X(p(n).price)]),f(`mouseenter`,r,()=>V(`room-hover`,{slug:p(n).slug})),f(`mouseleave`,r,()=>V(`room-leave`,{slug:p(n).slug})),h(t,r)}),S(n),h(t,n)},ke=e=>{var t=he(),r=n(t),i=M(r);j(i,21,()=>p(H),x,(e,t,n)=>{var r=P();let i;var a=M(r,!0);S(r),c(()=>{i=C(r,1,`rg-tab svelte-1gtjszk`,null,i,{"rg-tab-active":n===p(U)}),O(r,`part`,n===p(U)?`tab tab-active`:`tab`),A(a,p(t))}),T(`click`,r,()=>g(U,n,!0)),h(e,r)}),S(i);var a=_(i,2),o=M(a),s=M(o),l=_(M(s),2),u=M(l,!0);S(l),S(s);var d=_(s,2),v=_(M(d),2),y=M(v,!0);S(v),S(d),S(o);var b=_(o,2),w=e=>{var t=pe(),n=M(t),r=M(n),i=_(r,2),a=M(i);S(i);var o=_(i,2);S(n);var s=_(n,2);j(s,20,()=>ye,e=>e,(e,t)=>{var n=fe(),r=M(n,!0);S(n),c(()=>A(r,t)),h(e,n)}),S(s);var l=_(s,2);j(l,21,()=>p(be),e=>e.iso,(e,t)=>{var n=P();let r;var i=M(n,!0);S(n),c(e=>{r=C(n,1,`rg-cal-day svelte-1gtjszk`,null,r,e),n.disabled=p(t).isPast,A(i,p(t).dayNumber)},[()=>({"rg-out":!p(t).inMonth||p(t).isPast,"rg-today":p(t).iso===re(K),"rg-edge":p(t).iso===I()||p(t).iso===L(),"rg-inrange":I()&&L()&&p(t).iso>I()&&p(t).iso<L()})]),T(`click`,n,()=>we(p(t).iso)),h(e,n)}),S(l),S(t),c(()=>A(a,`${ve[p(J)]??``} ${p(q)??``}`)),T(`click`,r,Se),T(`click`,o,Ce),h(e,t)};m(b,e=>{p(G)&&e(w)}),S(a),D(a,e=>g(Y,e),()=>p(Y)),S(r);var E=_(r,2);j(E,23,k,(e,t)=>e.slug??t,(e,t,n)=>{var r=me();let i;var a=M(r),o=M(a);S(a);var s=_(a,2),l=M(s),u=M(l,!0);S(l);var d=_(l,2),m=M(d,!0);S(d);var g=_(d,4),v=M(g),y=_(M(v),2),b=M(y),x=_(b),w=M(x,!0);S(x),S(y),S(v);var T=_(v,2);S(g),S(s),S(r),D(r,(e,t)=>p(Z)[t]=e,e=>p(Z)?.[e],()=>[p(n)]),c((e,a)=>{i=C(r,1,`rg-card svelte-1gtjszk`,null,i,e),O(o,`src`,p(t).image),O(o,`alt`,p(t).name),O(o,`loading`,p(n)===0?`eager`:`lazy`),A(u,p(t).name),A(m,p(t).description),A(b,`${a??``} `),A(w,R()),O(T,`href`,p(t).href)},[()=>({"rg-hidden":!_e(p(t),p(U))}),()=>X(p(t).price)]),f(`mouseenter`,r,()=>V(`room-hover`,{slug:p(t).slug})),f(`mouseleave`,r,()=>V(`room-leave`,{slug:p(t).slug})),h(e,r)}),S(E),c((e,t)=>{A(u,e),A(y,t)},[()=>W(I()),()=>W(L())]),T(`click`,o,xe),h(e,t)};return m(Ee,e=>{B()===`feature`?e(De):B()===`rows`?e(Oe,1):e(ke,-1)}),h(t,$),y(Te)}t([`click`]),customElements.define(`room-grid`,k(F,{rooms:{attribute:`rooms`,type:`Object`},filterTabs:{attribute:`filter-tabs`,type:`Object`},checkIn:{attribute:`check-in`,type:`String`},checkOut:{attribute:`check-out`,type:`String`},currency:{attribute:`currency`,type:`String`},allLabel:{attribute:`all-label`,type:`String`},variant:{attribute:`variant`,type:`String`}},[],[],{mode:`open`}));
@@ -0,0 +1,20 @@
1
+ import{$ as e,A as t,D as n,I as r,J as i,K as a,L as o,N as s,S as c,T as l,U as u,V as d,W as f,X as ee,Z as p,et as m,f as h,h as te,i as g,j as _,n as v,o as ne,r as y,s as b,t as x,w as S,y as C,z as w}from"./chunks/client-BDk8LqGN.js";import{a as T,i as E,n as D,r as re,t as ie}from"./chunks/floating-ui.dom-DY3dGoEq.js";var O=n(`<span class="ss-detail svelte-dozlh7"> </span>`),ae=n(`<div class="ss-search-wrap svelte-dozlh7"><input class="ss-search svelte-dozlh7" type="text"/></div>`),k=n(`<div role="option" tabindex="0"><span> </span> <!></div>`),A=n(`<div class="ss-panel svelte-dozlh7" popover="" data-lenis-prevent=""><!> <!></div>`),j=n(`<div><div role="button" tabindex="0"><span class="ss-trigger-label svelte-dozlh7"> </span> <!> <svg class="ss-chevron svelte-dozlh7" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div> <!></div>`),oe={hash:`svelte-dozlh7`,code:`:host {display:block;}.ss-root.svelte-dozlh7 {position:relative;user-select:none;font-family:inherit;}.ss-trigger.svelte-dozlh7 {height:var(--ss-height, 52px);border:var(--ss-border-width, 1px) solid var(--ss-border, rgba(5, 4, 15, 0.12));
2
+ /* Overridable separately so a host can square individual corners to
3
+ attach a sibling control (e.g. service-booking-bar's Book button);
4
+ the panel and options keep the uniform --ss-radius. */border-radius:var(--ss-trigger-radius, var(--ss-radius, 0));background:var(--ss-bg, #f5f2ec);padding:0 40px 0 16px;display:flex;align-items:center;gap:12px;font-size:15px;color:var(--ss-text, #05040f);cursor:pointer;transition:border-color 0.15s;position:relative;box-sizing:border-box;}.ss-trigger.placeholder.svelte-dozlh7 {color:var(--ss-placeholder, rgba(5, 4, 15, 0.6));}.ss-trigger.svelte-dozlh7:focus {outline:none;border-color:var(--ss-border-focus, rgba(5, 4, 15, 0.4));}.ss-root.open.svelte-dozlh7 .ss-trigger:where(.svelte-dozlh7) {border-color:var(--ss-border-focus, rgba(5, 4, 15, 0.4));}.ss-chevron.svelte-dozlh7 {position:absolute;right:14px;top:50%;width:var(--ss-chevron-size, 12px);height:var(--ss-chevron-size, 12px);transform:translateY(-50%);pointer-events:none;transition:transform 0.2s;stroke:var(--ss-chevron, rgba(5, 4, 15, 0.4));}.ss-root.open.svelte-dozlh7 .ss-chevron:where(.svelte-dozlh7) {transform:translateY(-50%) rotate(180deg);}.ss-panel.svelte-dozlh7 {
5
+ /* Popover top-layer + Floating UI positioning (see the $effect above)
6
+ -- inset/margin reset undoes the browser's default centered-popover
7
+ placement so the JS-computed left/top take over. Escapes any
8
+ scrolling or transformed ancestor (a checkout side-drawer, say)
9
+ without needing to be moved in the DOM.
10
+
11
+ Deliberately its OWN variable, not --ss-bg: --ss-bg is meant for
12
+ .ss-trigger, a field resting inline against a host's known page
13
+ background, so hosts sometimes theme it as a translucent surface
14
+ tint (rgba with a few % alpha). That's fine sitting in normal flow,
15
+ but this panel escapes into the top layer and can end up floating
16
+ over arbitrary content (another field, a payment iframe) that
17
+ isn't that background at all -- a translucent tint there just lets
18
+ whatever's underneath show through. Falls back straight to the
19
+ opaque literal, not through --ss-bg, so a host that themed --ss-bg
20
+ translucent doesn't inherit that problem here without opting in. */position:fixed;inset:auto;margin:0;box-sizing:border-box;z-index:200;background:var(--ss-panel-bg, #f5f2ec);border:var(--ss-border-width, 1px) solid var(--ss-panel-border, rgba(5, 4, 15, 0.15));border-radius:var(--ss-radius, 0);padding:6px;max-height:288px;overflow-y:auto;box-shadow:0 16px 40px var(--ss-panel-shadow, rgba(5, 4, 15, 0.1));scrollbar-width:thin;scrollbar-color:var(--ss-border, rgba(5, 4, 15, 0.12)) transparent;}.ss-option.svelte-dozlh7 {display:flex;align-items:baseline;justify-content:space-between;gap:20px;text-align:left;padding:12px 14px;border-radius:max(calc(var(--ss-radius, 0) - 4px), 0px);font-size:14px;color:var(--ss-text, #05040f);cursor:pointer;transition:background 0.1s;white-space:nowrap;}.ss-detail.svelte-dozlh7 {color:var(--ss-detail, rgba(5, 4, 15, 0.45));font-family:var(--ss-detail-font-family, inherit);font-weight:var(--ss-detail-font-weight, inherit);font-variant-numeric:tabular-nums;}.ss-trigger-label.svelte-dozlh7 {flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.ss-trigger.svelte-dozlh7 .ss-detail:where(.svelte-dozlh7) {margin-right:22px;}.ss-option.svelte-dozlh7:hover {background:var(--ss-option-hover-bg, rgba(5, 4, 15, 0.05));}.ss-option.selected.svelte-dozlh7 {font-weight:600;}.ss--phone.svelte-dozlh7 .ss-trigger:where(.svelte-dozlh7) {padding-right:36px;}.ss--phone.svelte-dozlh7 .ss-panel:where(.svelte-dozlh7) {min-width:180px;}.ss--country.svelte-dozlh7 .ss-panel:where(.svelte-dozlh7) {max-height:280px;}.ss-search-wrap.svelte-dozlh7 {padding:8px 10px;border-bottom:1px solid var(--ss-panel-shadow, rgba(5, 4, 15, 0.08));}.ss-search.svelte-dozlh7 {width:100%;height:36px;border:var(--ss-border-width, 1px) solid var(--ss-border, rgba(5, 4, 15, 0.12));background:var(--ss-bg, #f5f2ec);padding:0 10px;font-family:inherit;font-size:13px;color:var(--ss-text, #05040f);outline:none;box-sizing:border-box;}.ss-search.svelte-dozlh7::placeholder {color:var(--ss-placeholder, rgba(5, 4, 15, 0.6));}`};function M(t,n){p(n,!0),te(t,oe);let x=v(n,`options`,23,()=>[]),M=v(n,`value`,15,``),N=v(n,`placeholder`,7,``),P=v(n,`variant`,7,``),F=v(n,`searchPlaceholder`,7,`Search…`),I=v(n,`noSearch`,7,!1),L=v(n,`anchor`,7,void 0),R=f(!1),z=f(``),B,V=f(void 0),H=f(void 0),U=i(()=>L()??s(V));function W(e,t){n.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let G=i(()=>x().find(e=>e.value===M())),K=i(()=>M()?P()===`phone`?M():s(G)?.label??M():N()),se=i(()=>s(z)?x().filter(e=>e.label.toLowerCase().includes(s(z).toLowerCase())):x());function q(e){M(e.value),u(R,!1),W(`change`,{value:e.value,label:e.label,meta:e.meta})}function J(){u(R,!s(R)),s(R)&&u(z,``)}o(()=>{if(!s(R))return;let e=s(U),t=s(H);if(!e||!t)return;t.style.width=`${e.getBoundingClientRect().width}px`,t.showPopover();let n=ie(e,t,async()=>{let{x:n,y:r}=await D(e,t,{strategy:`fixed`,placement:`bottom-start`,middleware:[E(6),re(),T({padding:8})]});t.style.left=`${n}px`,t.style.top=`${r}px`});function r(e){e.newState===`closed`&&u(R,!1)}return t.addEventListener(`toggle`,r),()=>{n(),t.removeEventListener(`toggle`,r),t.matches(`:popover-open`)&&t.hidePopover()}});var ce={get options(){return x()},set options(e=[]){x(e),a()},get value(){return M()},set value(e=``){M(e),a()},get placeholder(){return N()},set placeholder(e=``){N(e),a()},get variant(){return P()},set variant(e=``){P(e),a()},get searchPlaceholder(){return F()},set searchPlaceholder(e=`Search…`){F(e),a()},get noSearch(){return I()},set noSearch(e=!1){I(e),a()},get anchor(){return L()},set anchor(e=void 0){L(e),a()}},Y=j();let X;var Z=w(Y);let Q;var $=w(Z),le=w($,!0);m($);var ue=d($,2),de=e=>{var t=O(),n=w(t,!0);m(t),r(()=>S(n,s(G).detail)),l(e,t)};c(ue,e=>{M()&&s(G)?.detail&&e(de)}),e(2),m(Z),y(Z,e=>u(V,e),()=>s(V));var fe=d(Z,2),pe=e=>{var t=A(),n=w(t),i=e=>{var t=ae(),n=w(t);ne(n),m(t),r(()=>b(n,`placeholder`,F())),_(`click`,n,e=>e.stopPropagation()),g(n,()=>s(z),e=>u(z,e)),l(e,t)};c(n,e=>{I()||e(i)});var a=d(n,2);C(a,17,()=>s(se),e=>e.value,(e,t)=>{var n=k();let i;var a=w(n),o=w(a,!0);m(a);var u=d(a,2),f=e=>{var n=O(),i=w(n,!0);m(n),r(()=>S(i,s(t).detail)),l(e,n)};c(u,e=>{s(t).detail&&e(f)}),m(n),r(()=>{i=h(n,1,`ss-option svelte-dozlh7`,null,i,{selected:s(t).value===M()}),b(n,`aria-selected`,s(t).value===M()),S(o,s(t).label)}),_(`click`,n,()=>q(s(t))),_(`keydown`,n,e=>e.key===`Enter`&&q(s(t))),l(e,n)}),m(t),y(t,e=>u(H,e),()=>s(H)),l(e,t)};return c(fe,e=>{s(R)&&e(pe)}),m(Y),y(Y,e=>B=e,()=>B),r(()=>{X=h(Y,1,`ss-root ${P()?`ss--${P()}`:``}`,`svelte-dozlh7`,X,{open:s(R)}),Q=h(Z,1,`ss-trigger svelte-dozlh7`,null,Q,{placeholder:!M()}),S(le,s(K))}),_(`click`,Z,J),_(`keydown`,Z,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),J()),e.key===`Escape`&&u(R,!1)}),l(t,Y),ee(ce)}t([`click`,`keydown`]),customElements.define(`searchable-select`,x(M,{options:{attribute:`options`,type:`Object`},value:{attribute:`value`,type:`String`},placeholder:{attribute:`placeholder`,type:`String`},variant:{attribute:`variant`,type:`String`},searchPlaceholder:{attribute:`search-placeholder`,type:`String`},noSearch:{attribute:`no-search`,type:`Boolean`},anchor:{attribute:`anchor`,type:`Object`}},[],[],{mode:`open`}));
@@ -0,0 +1,14 @@
1
+ import{A as e,D as t,H as n,I as r,J as i,K as a,L as o,N as s,S as c,T as l,U as u,V as d,W as f,X as p,Z as m,et as h,f as g,h as _,j as v,l as y,n as b,r as x,s as S,t as C,w,z as T}from"./chunks/client-BDk8LqGN.js";import"./searchable-select.js";var E=t(`<searchable-select></searchable-select>`,2),D=t(`<div class="svb-pending svelte-4apeha"> </div>`),O=t(`<button type="button"> </button>`),k=t(`<div class="svb-root svelte-4apeha"><!> <!></div>`),A={hash:`svelte-4apeha`,code:`
2
+ /* One joined control: the select's right corners and the button's left
3
+ corners are squared so they read as a single bar. */.svb-root.svelte-4apeha {display:inline-flex;align-items:stretch;font-family:var(--svb-font-family, inherit);}
4
+
5
+ /* Map the bar's public --svb-* hooks onto the nested select's --ss-* ones
6
+ (custom properties cascade through shadow boundaries). */.svb-select.svelte-4apeha {min-width:var(--svb-min-width, 280px);font-size:var(--svb-font-size, 14px);--ss-height: var(--svb-height, 54px);--ss-radius: var(--svb-radius, 10px);--ss-trigger-radius: var(--svb-radius, 10px) 0 0 var(--svb-radius, 10px);--ss-bg: var(--svb-bg, #fff);--ss-text: var(--svb-color, inherit);--ss-border: var(--svb-border-color, rgba(0, 0, 0, 0.2));--ss-border-width: var(--svb-border-width, 1px);--ss-border-focus: var(--svb-accent, rgba(0, 0, 0, 0.4));--ss-panel-border: var(--svb-border-color, rgba(0, 0, 0, 0.2));--ss-chevron: var(--svb-color, currentColor);--ss-chevron-size: var(--svb-chevron-size, 12px);--ss-detail: var(--svb-detail-color, var(--svb-muted, rgba(0, 0, 0, 0.45)));--ss-detail-font-family: var(--svb-detail-font-family, inherit);--ss-detail-font-weight: var(--svb-detail-font-weight, inherit);--ss-option-hover-bg: var(--svb-option-hover-bg, rgba(0, 0, 0, 0.05));}.svb-pending.svelte-4apeha {display:inline-flex;align-items:center;height:var(--svb-height, 54px);min-width:var(--svb-min-width, 280px);padding:0 20px;border-radius:var(--svb-radius, 10px);border:var(--svb-border-width, 1px) solid var(--svb-border-color, rgba(0, 0, 0, 0.2));background:var(--svb-bg, #fff);color:var(--svb-color, inherit);font-size:var(--svb-font-size, 14px);opacity:0.7;}.svb-book.svelte-4apeha {height:var(--svb-height, 54px);padding:0 24px;border:none;border-radius:0 var(--svb-radius, 10px) var(--svb-radius, 10px) 0;background:var(--svb-accent, #1a1a1a);color:var(--svb-accent-contrast, #fff);font:inherit;font-size:var(--svb-font-size, 14px);font-weight:var(--svb-button-font-weight, 600);text-transform:var(--svb-button-transform, none);letter-spacing:var(--svb-button-letter-spacing, normal);cursor:pointer;}
7
+
8
+ /* Opt-in (ctaShimmer prop): a soft light band sweeps across the button on
9
+ hover and eases back out on leave -- same treatment as
10
+ <google-reviews>' CTA. A transition on \`left\` (not a keyframe loop) so
11
+ leaving mid-sweep reverses smoothly from wherever it stopped. */.svb-book.shimmer.svelte-4apeha {position:relative;overflow:hidden;}.svb-book.shimmer.svelte-4apeha::after {content:'';position:absolute;top:0;left:-75%;width:50%;height:100%;background:linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.55), transparent);transform:skewX(-20deg);transition:left 0.6s ease-in-out;pointer-events:none;}.svb-book.shimmer.svelte-4apeha:hover::after,
12
+ .svb-book.shimmer.svelte-4apeha:focus-visible::after {left:125%;}
13
+ @media (prefers-reduced-motion: reduce) {.svb-book.shimmer.svelte-4apeha::after {display:none;}
14
+ }`};function j(e,t){m(t,!0),_(e,A);let C=b(t,`applyOnSelect`,7,!0),j=b(t,`showBookButton`,7,!0),M=b(t,`ctaShimmer`,7,!1),N=b(t,`strings`,23,()=>({})),P=b(t,`fetchTreatments`,7,void 0),F=i(()=>({placeholder:`Choose a service…`,bookLabel:`Book`,loadingLabel:`Loading services…`,errorLabel:`Services unavailable — please try again.`,...N()})),I=f(n([])),L=f(`idle`),R=f(``);function z(e,n){t.$$host?.dispatchEvent(new CustomEvent(e,{detail:n,bubbles:!0,composed:!0}))}o(()=>{let e=P();!e||s(L)===`ready`||s(L)===`loading`||(u(L,`loading`),e().then(e=>{u(I,e,!0),u(L,`ready`)}).catch(()=>{u(L,`error`)}))});let B=i(()=>s(I).map(e=>({value:e.id,label:e.name,detail:`£${(e.price??e.memberPrice??0).toFixed(2)}`})));function V(e){let t=s(I).find(t=>t.id===e);z(`book`,t?{id:t.id,name:t.name,price:t.price}:null)}let H=f(void 0);function U(e){u(R,e.detail?.value??``,!0),C()&&s(R)&&V(s(R))}var W={get applyOnSelect(){return C()},set applyOnSelect(e=!0){C(e),a()},get showBookButton(){return j()},set showBookButton(e=!0){j(e),a()},get ctaShimmer(){return M()},set ctaShimmer(e=!1){M(e),a()},get strings(){return N()},set strings(e={}){N(e),a()},get fetchTreatments(){return P()},set fetchTreatments(e=void 0){P(e),a()}},G=k(),K=T(G),q=e=>{var t=E();g(t,1,`svb-select svelte-4apeha`),y(t,`no-search`,!0),r(()=>y(t,`anchor`,s(H))),r(()=>y(t,`options`,s(B))),r(()=>y(t,`placeholder`,s(F).placeholder)),v(`change`,t,U),l(e,t)},J=e=>{var t=D(),n=T(t,!0);h(t),r(()=>{S(t,`aria-busy`,s(L)===`loading`),w(n,s(L)===`error`?s(F).errorLabel:s(F).loadingLabel)}),l(e,t)};c(K,e=>{s(L)===`ready`?e(q):e(J,-1)});var Y=d(K,2),X=e=>{var t=O();let n;var i=T(t,!0);h(t),r(()=>{n=g(t,1,`svb-book svelte-4apeha`,null,n,{shimmer:M()}),w(i,s(F).bookLabel)}),v(`click`,t,()=>V(s(R))),l(e,t)};return c(Y,e=>{j()&&e(X)}),h(G),x(G,e=>u(H,e),()=>s(H)),l(e,G),p(W)}e([`change`,`click`]),customElements.define(`service-booking-bar`,C(j,{applyOnSelect:{attribute:`apply-on-select`,type:`Boolean`},showBookButton:{attribute:`show-book-button`,type:`Boolean`},ctaShimmer:{attribute:`cta-shimmer`,type:`Boolean`},strings:{type:`Object`},fetchTreatments:{type:`Object`}},[],[],{mode:`open`}));
@@ -0,0 +1,179 @@
1
+ import{$ as e,A as t,B as n,D as r,E as i,H as a,I as o,J as s,K as c,L as l,M as u,N as d,S as f,T as p,U as m,V as h,W as g,X as _,Y as v,Z as y,_ as b,et as x,f as S,h as C,i as w,j as T,n as E,nt as ee,o as D,q as O,r as te,rt as ne,s as k,t as re,tt as ie,v as ae,w as A,x as oe,y as j,z as M}from"./chunks/client-BDk8LqGN.js";import{a as se,i as ce,n as le,r as ue,t as de}from"./chunks/floating-ui.dom-DY3dGoEq.js";import{i as fe,n as pe,o as me,r as he,s as ge,t as _e}from"./chunks/calendar-B8eNjUm2.js";var ve=e=>e;function ye(e,{delay:t=0,duration:n=400,easing:r=ve}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}var be=r(`<strong class="svelte-1dxdgqu"> </strong>`),xe=r(`<span class="svelte-1dxdgqu"> </span>`),Se=r(`<div class="sbw-summary-row sbw-summary-row-sub svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <!></div>`),Ce=r(`<div class="sbw-summary-row sbw-summary-row-sub svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <span class="svelte-1dxdgqu"> </span></div>`),we=r(`<span class="sbw-time-flash svelte-1dxdgqu"> </span>`),Te=r(`<div class="sbw-summary-row sbw-summary-row-sub sbw-summary-row-datetime svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <!></div>`),Ee=r(`<div class="sbw-summary-row sbw-summary-row-sub svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <span class="sbw-summary-row-bookedat-value svelte-1dxdgqu"> </span></div>`),De=r(`<div class="sbw-summary-total svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <strong class="svelte-1dxdgqu"> </strong></div>`),Oe=r(`<span class="sbw-spinner svelte-1dxdgqu"></span>`),ke=r(`<p class="sbw-hint svelte-1dxdgqu"> </p>`),Ae=r(`<p class="sbw-error-text svelte-1dxdgqu"> </p>`),je=r(`<button type="button" class="sbw-continue svelte-1dxdgqu"><!> <span class="svelte-1dxdgqu"> </span></button> <!> <!>`,1),Me=r(`<button type="button" class="sbw-continue svelte-1dxdgqu"> </button> <button type="button" class="sbw-back sbw-back-service svelte-1dxdgqu"> </button>`,1),Ne=r(`<button type="submit" class="sbw-submit svelte-1dxdgqu"><!> <span class="svelte-1dxdgqu"> </span></button> <!> <button type="button" class="sbw-back sbw-back-service svelte-1dxdgqu"> </button>`,1),Pe=r(`<aside class="sbw-summary svelte-1dxdgqu"><div class="sbw-summary-row svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <!></div> <!> <!> <!> <!> <!> <!></aside>`),Fe=r(`<img class="sbw-logo svelte-1dxdgqu" alt=""/>`),Ie=r(`<h2 class="sbw-heading svelte-1dxdgqu"> </h2> <div class="sbw-rule svelte-1dxdgqu"></div>`,1),Le=r(`<p class="sbw-tagline svelte-1dxdgqu"> </p>`),Re=r(`<p class="sbw-description svelte-1dxdgqu"> </p>`),ze=r(`<div class="sbw-intro svelte-1dxdgqu"><!> <!> <!> <!></div>`),Be=r(`<span class="sbw-service-sub svelte-1dxdgqu"> </span>`),Ve=r(`<span class="sbw-service-prices svelte-1dxdgqu"><span class="sbw-service-price svelte-1dxdgqu"> </span> <!></span>`),He=r(`<li class="svelte-1dxdgqu"><button type="button" class="sbw-service-item svelte-1dxdgqu"><span class="sbw-service-name svelte-1dxdgqu"> <!></span> <!></button></li>`),Ue=r(`<ul class="sbw-service-list svelte-1dxdgqu" role="list"></ul>`),We=r(`<div class="sbw-body svelte-1dxdgqu"><h3 class="sbw-step-title svelte-1dxdgqu"> </h3> <!></div>`),Ge=r(`<li role="presentation" class="svelte-1dxdgqu"><button type="button" role="option" class="svelte-1dxdgqu"> </button></li>`),Ke=r(`<div class="sbw-therapist-filter svelte-1dxdgqu"><span class="sbw-visually-hidden svelte-1dxdgqu" id="sbw-therapist-filter-label"> </span> <button type="button" class="sbw-therapist-filter-trigger svelte-1dxdgqu" aria-haspopup="listbox" aria-labelledby="sbw-therapist-filter-label"><span class="svelte-1dxdgqu"> </span> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 9l6 6 6-6" stroke-linecap="round" stroke-linejoin="round" class="svelte-1dxdgqu"></path></svg></button> <ul popover="" role="listbox" class="sbw-therapist-filter-panel svelte-1dxdgqu"><li role="presentation" class="svelte-1dxdgqu"><button type="button" role="option" class="svelte-1dxdgqu"> </button></li> <!></ul></div>`),qe=r(`<span></span>`),Je=r(`<button type="button"><span class="svelte-1dxdgqu"> </span> <!></button>`),Ye=r(`<button type="button"> </button>`),Xe=r(`<div class="sbw-slot-group svelte-1dxdgqu"><p class="sbw-slot-group-label svelte-1dxdgqu"> </p> <div class="sbw-slot-buttons svelte-1dxdgqu"></div></div>`),Ze=r(`<div class="sbw-slot-groups svelte-1dxdgqu"></div>`),Qe=r(`<div class="sbw-body sbw-datetime svelte-1dxdgqu"><div class="sbw-calendar-col svelte-1dxdgqu"><div class="sbw-cal-body svelte-1dxdgqu"><div class="sbw-cal-header svelte-1dxdgqu"><p class="sbw-cal-month svelte-1dxdgqu"> </p> <!> <div class="sbw-cal-nav svelte-1dxdgqu"><button type="button" class="svelte-1dxdgqu">‹</button> <button type="button" class="svelte-1dxdgqu">›</button></div></div> <div class="sbw-cal-weekdays svelte-1dxdgqu"></div> <div class="sbw-cal-grid svelte-1dxdgqu"></div></div> <div class="sbw-slots svelte-1dxdgqu"><!></div></div> <!></div>`),$e=r(`<form class="sbw-body sbw-datetime sbw-details svelte-1dxdgqu"><div class="sbw-details-fields svelte-1dxdgqu"><div class="sbw-grid svelte-1dxdgqu"><label class="sbw-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <input type="text" required="" class="svelte-1dxdgqu"/></label> <label class="sbw-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <input type="email" pattern="[^\\s@]+@[^\\s@]+\\.[^\\s@]+" class="svelte-1dxdgqu"/></label> <label class="sbw-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <input type="tel" class="svelte-1dxdgqu"/></label></div> <label class="sbw-field sbw-notes-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <textarea rows="3" class="svelte-1dxdgqu"></textarea></label></div> <!></form>`),et=r(`<div class="sbw-success svelte-1dxdgqu"><div class="sbw-success-icon svelte-1dxdgqu"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" class="svelte-1dxdgqu"><path d="M5 13l4 4L19 7" stroke-linecap="round" stroke-linejoin="round" class="svelte-1dxdgqu"></path></svg></div> <p class="svelte-1dxdgqu"> </p> <!></div>`),tt=r(`<section class="sbw-root svelte-1dxdgqu"><!> <!></section>`),nt={hash:`svelte-1dxdgqu`,code:`.sbw-root.svelte-1dxdgqu {display:block;font-family:inherit;color:var(--sbw-text-color, #1a1a1a);background:var(--sbw-bg, #faf6ec);padding:var(--sbw-padding, 4rem 1.5rem);}.sbw-intro.svelte-1dxdgqu {max-width:var(--sbw-intro-max-width, 36rem);margin:0 auto;text-align:center;}.sbw-logo.svelte-1dxdgqu {height:var(--sbw-logo-height, 2.5rem);width:auto;margin:0 auto 1.5rem;display:block;}.sbw-heading.svelte-1dxdgqu {margin:0;font-size:2rem;font-family:var(--sbw-heading-font-family, inherit);}
2
+ @media (min-width: 640px) {.sbw-heading.svelte-1dxdgqu {font-size:2.5rem;}
3
+ }.sbw-rule.svelte-1dxdgqu {width:4rem;height:1px;margin:1rem auto 0;background:var(--sbw-rule-color, rgba(196, 158, 90, 0.5));}.sbw-tagline.svelte-1dxdgqu {margin:1.5rem 0 0;font-style:italic;font-size:1.125rem;}.sbw-description.svelte-1dxdgqu {margin:1rem 0 0;font-size:1rem;line-height:1.6;}
4
+ /* Matches .sbw-heading/.sbw-description above so a host that slots its
5
+ own heading/description (instead of the heading/description attributes)
6
+ gets the same look for free -- targeted by the slot attribute, not a
7
+ class, so it works no matter what element or class the host uses. */::slotted([slot='heading']) {margin:0;font-size:2rem;font-family:var(--sbw-heading-font-family, inherit);}
8
+ @media (min-width: 640px) {::slotted([slot='heading']) {font-size:2.5rem;}
9
+ }::slotted([slot='description']) {margin:1rem 0 0;font-size:1rem;line-height:1.6;}.sbw-body.svelte-1dxdgqu {max-width:var(--sbw-form-max-width, 40rem);margin:var(--sbw-body-margin-top, 3rem) auto 0;}.sbw-step-title.svelte-1dxdgqu {margin:0 0 1.25rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;opacity:0.6;}.sbw-hint.svelte-1dxdgqu {margin:0;font-size:0.875rem;opacity:0.6;}
10
+
11
+ /* --- Service list --- */.sbw-service-list.svelte-1dxdgqu {list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0.5rem;}.sbw-service-item.svelte-1dxdgqu {width:100%;display:flex;align-items:center;justify-content:space-between;gap:1rem;border-radius:2px;border:1px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));background:var(--sbw-input-bg, #fff);padding:0.9rem 1.1rem;font:inherit;font-size:0.9375rem;color:inherit;cursor:pointer;text-align:left;transition:border-color 150ms ease, background-color 150ms ease, transform 150ms ease;}.sbw-service-item.svelte-1dxdgqu:hover:not(:disabled) {border-color:color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 40%, transparent);background:var(--sbw-service-hover-bg, rgba(0, 0, 0, 0.03));color:var(--sbw-service-hover-color, inherit);transform:translateX(2px);}.sbw-service-price.svelte-1dxdgqu {font-weight:600;color:var(--sbw-accent-color, #c49e5a);}.sbw-service-item.svelte-1dxdgqu:hover:not(:disabled) .sbw-service-price:where(.svelte-1dxdgqu) {color:var(--sbw-service-hover-price-color, var(--sbw-accent-color, #c49e5a));}
12
+ /* A regulars-only service the visitor doesn't qualify for: still listed
13
+ (so they know it exists), dimmed like the calendar's unavailable days. */.sbw-service-item.svelte-1dxdgqu:disabled {cursor:default;opacity:0.5;}.sbw-service-name.svelte-1dxdgqu,
14
+ .sbw-service-prices.svelte-1dxdgqu {display:flex;flex-direction:column;gap:0.15rem;}.sbw-service-prices.svelte-1dxdgqu {align-items:flex-end;flex-shrink:0;text-align:right;}.sbw-service-sub.svelte-1dxdgqu {font-size:0.8125rem;font-weight:400;opacity:0.7;}
15
+
16
+ /* --- Datetime step: two-column layout, single column under 800px --- */.sbw-datetime.svelte-1dxdgqu {display:grid;grid-template-columns:1fr;gap:2rem;max-width:var(--sbw-datetime-max-width, 52rem);}
17
+ @media (min-width: 800px) {.sbw-datetime.svelte-1dxdgqu {grid-template-columns:1fr 16rem;align-items:start;}
18
+ }
19
+ /* Calendar and slots side by side (not stacked) once there's room for
20
+ both plus the 16rem summary column -- a plain calendar-then-slots
21
+ stack read as a long, sparse list. .sbw-cal-body wraps the weekday
22
+ labels + day grid into one grid item (rather than giving them each
23
+ their own template row) so its height is independent of how tall
24
+ .sbw-slots is -- with each in its own row instead, a long slots
25
+ list (a busy day can have 20+ times) inflated the *shared* row
26
+ tracks and pushed the day grid visually away from its own weekday
27
+ header. Slots gets the flexible remaining column so extra width
28
+ goes into more time-chip columns instead of unused space; the
29
+ calendar gets a comfortable range (not a single fixed number) so it
30
+ can grow a little on very wide hosts instead of looking squashed
31
+ next to a much wider slots column, while still stopping well short
32
+ of the dead-space-between-date-numbers stretching a bare 1fr gave it. */
33
+ @media (min-width: 700px) {.sbw-calendar-col.svelte-1dxdgqu {display:grid;grid-template-columns:minmax(20rem, 28rem) minmax(14rem, 1fr);grid-template-areas:'body slots';column-gap:2rem;align-items:start;}.sbw-cal-body.svelte-1dxdgqu {grid-area:body;}.sbw-slots.svelte-1dxdgqu {grid-area:slots;}
34
+ /* Extra specificity (not just .sbw-slots) so this reliably beats the
35
+ unconditional base rule below regardless of source order -- the
36
+ top border/margin/padding there exists to separate slots from a
37
+ calendar stacked *above* it on narrow/mobile widths; side by side,
38
+ it read as a stray line with nothing for it to separate. */.sbw-calendar-col.svelte-1dxdgqu .sbw-slots:where(.svelte-1dxdgqu) {margin-top:0;border-top:none;padding-top:0;}
39
+ }.sbw-cal-header.svelte-1dxdgqu {display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:0.5rem;}.sbw-cal-month.svelte-1dxdgqu {margin:0;font-size:1rem;font-weight:600;}.sbw-visually-hidden.svelte-1dxdgqu {position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;}.sbw-therapist-filter.svelte-1dxdgqu {position:relative;}.sbw-therapist-filter-trigger.svelte-1dxdgqu {display:flex;align-items:center;gap:0.5rem;border-radius:9999px;border:2px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));background:var(--sbw-input-bg, #fff);color:inherit;font:inherit;font-size:0.8125rem;padding:0.4rem 0.85rem;cursor:pointer;transition:border-color 320ms ease-out;}.sbw-therapist-filter-trigger.svelte-1dxdgqu:hover,
40
+ .sbw-therapist-filter-trigger.svelte-1dxdgqu:focus-visible {border-color:var(--sbw-accent-color, #c49e5a);outline:none;}.sbw-chevron.svelte-1dxdgqu {width:1rem;height:1rem;flex-shrink:0;opacity:0.6;transition:transform 200ms ease;}.sbw-chevron-open.svelte-1dxdgqu {transform:rotate(180deg);}
41
+ /* Native <select> option lists can't be styled -- they render as the
42
+ browser's own unthemed popup regardless of any CSS here, which read
43
+ as a jarring plain-white box against a themed (esp. dark) host page.
44
+ This is a real listbox (button + popover), styled as a proper
45
+ floating panel: opaque fill (not the translucent --sbw-input-bg
46
+ inputs use, which assumes a solid page behind it -- this overlays
47
+ arbitrary content) with an accent-tinted border and glow instead of
48
+ a flat neutral edge. The 30%/25% mix amounts aren't picked to taste --
49
+ they're the same two fixed proportions this library's other floating
50
+ panels use for an accent border + glow (not a third, invented
51
+ opacity), so re-skinning --sbw-accent-color still lands on a
52
+ consistent-looking panel instead of a one-off tint. */.sbw-therapist-filter-panel.svelte-1dxdgqu {position:fixed;inset:auto;margin:0;min-width:9rem;max-height:15rem;overflow:auto;list-style:none;padding:0.25rem;border-radius:10px;border:1px solid color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 30%, transparent);background:var(--sbw-bg, #faf6ec);box-shadow:0 8px 24px rgba(0, 0, 0, 0.16), 0 0 24px color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 25%, transparent);}.sbw-therapist-filter-panel.svelte-1dxdgqu button:where(.svelte-1dxdgqu) {display:block;width:100%;border:none;border-radius:6px;background:transparent;color:inherit;font:inherit;text-align:left;padding:0.5rem 0.75rem;font-size:0.8125rem;cursor:pointer;}.sbw-therapist-filter-panel.svelte-1dxdgqu button:where(.svelte-1dxdgqu):hover,
53
+ .sbw-therapist-filter-panel.svelte-1dxdgqu button[aria-selected='true']:where(.svelte-1dxdgqu) {background:color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 15%, transparent);}.sbw-cal-nav.svelte-1dxdgqu {display:flex;gap:0.25rem;}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu) {position:relative;z-index:0;display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:9999px;border:2px solid var(--sbw-cal-nav-border-color, var(--sbw-border-color, rgba(0, 0, 0, 0.15)));background:none;color:var(--sbw-text-color, #1a1a1a);font-size:1.375rem;cursor:pointer;transition:border-color 320ms ease-out, color 320ms ease-out;}
54
+ /* A fill growing from the button's centre (clip-path), not a flat
55
+ colour cross-fade -- matches this library's other circular nav
56
+ control (VenueCarousel's prev/next). Separate hook from
57
+ --sbw-cal-hover-bg (the day-cell hover fill) on purpose: a consumer
58
+ whose day-cell text needs that fill to stay same-color-as-background
59
+ invisible (see mens-cave-barbers) still wants these nav buttons --
60
+ icon glyphs, not text that could vanish -- to invert fully on hover.
61
+ Falls back to the day-cell variable, then the original hardcoded
62
+ tint, so existing consumers see no change. */.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu)::before {content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;background:var(--sbw-cal-nav-hover-bg, var(--sbw-cal-hover-bg, color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 6%, transparent)));clip-path:circle(0% at 50% 50%);transition:clip-path 800ms cubic-bezier(0.16, 1, 0.3, 1);}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu):hover:not(:disabled) {border-color:var(--sbw-cal-nav-hover-border-color, var(--sbw-accent-color, #c49e5a));color:var(--sbw-cal-nav-hover-color, var(--sbw-text-color, #1a1a1a));}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu):hover:not(:disabled)::before {clip-path:circle(150% at 50% 50%);}
63
+ /* The click-pulse (below) is this button's whole click-confirmation --
64
+ no separate :active press state, so the two don't stack into a
65
+ double-bounce (shrink-on-press, then the pulse's own scale-up).
66
+ :global() on the pulse class itself -- it's only ever added via
67
+ classList.add() in pulseNavButton above, never as a literal class
68
+ in this template, so Svelte's unused-CSS pruning silently deleted
69
+ this whole rule (keeping the @keyframes, which isn't pruned the
70
+ same way) without :global() marking it as intentionally dynamic. */
71
+ @keyframes svelte-1dxdgqu-sbw-cal-nav-pulse {
72
+ 0% { transform: scale(1); }
73
+ 50% { transform: scale(1.18); }
74
+ 100% { transform: scale(1); }
75
+ }.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu).sbw-cal-nav-pulse {
76
+ animation: svelte-1dxdgqu-sbw-cal-nav-pulse 320ms ease-out;}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu):disabled {cursor:default;opacity:0.3;}.sbw-cal-weekdays.svelte-1dxdgqu {display:grid;grid-template-columns:repeat(7, 1fr);margin-top:1rem;text-align:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;opacity:0.4;}.sbw-cal-grid.svelte-1dxdgqu {display:grid;grid-template-columns:repeat(7, 1fr);gap:2px;margin-top:0.25rem;}.sbw-cal-cell.svelte-1dxdgqu {height:3rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:2px solid transparent;border-radius:8px;background:none;font:inherit;font-size:0.875rem;color:inherit;cursor:pointer;transition:border-color 320ms ease-out, background-color 320ms ease-out, color 320ms ease-out;}
77
+ /* Excludes .sbw-cal-cell-selected: this selector out-ranks the selected
78
+ rule below (two pseudo-classes vs. one plain class), and without the
79
+ exclusion hovering the selected day replaced its solid accent fill
80
+ with this dimmer tint, reading as deselected while the mouse was over
81
+ it. Same fix as AvailabilityCalendar.svelte's .ac-edge exclusion. */.sbw-cal-cell.svelte-1dxdgqu:hover:not(:disabled):not(.sbw-cal-cell-selected) {background:var(--sbw-cal-hover-bg, color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 6%, transparent));color:var(--sbw-cal-hover-color, inherit);border-color:var(--sbw-accent-color, #c49e5a);}.sbw-cal-cell.svelte-1dxdgqu:disabled {cursor:default;}.sbw-cal-cell-off.svelte-1dxdgqu span:where(.svelte-1dxdgqu) {opacity:0.2;}.sbw-cal-cell.svelte-1dxdgqu:disabled:not(.sbw-cal-cell-off) span:where(.svelte-1dxdgqu):first-child {opacity:0.3;}.sbw-cal-cell-selected.svelte-1dxdgqu {background:var(--sbw-accent-color, #c49e5a);}.sbw-cal-cell-selected.svelte-1dxdgqu span:where(.svelte-1dxdgqu) {color:var(--sbw-accent-contrast, #fff);}.sbw-dot.svelte-1dxdgqu {width:4px;height:4px;border-radius:9999px;background:var(--sbw-accent-color, #c49e5a);}.sbw-dot-1.svelte-1dxdgqu {opacity:0.35;}.sbw-dot-2.svelte-1dxdgqu {opacity:0.65;}.sbw-dot-3.svelte-1dxdgqu {opacity:1;width:5px;height:5px;}
82
+ /* Keeps the availability dot visible against --sbw-cal-hover-color's own
83
+ fill -- without this it stayed --sbw-accent-color, which on a theme
84
+ where hover flips to a dark fill with accent-colored TEXT (rather
85
+ than the default light tint) would otherwise put an accent dot on an
86
+ accent-colored background. */.sbw-cal-cell.svelte-1dxdgqu:hover:not(:disabled):not(.sbw-cal-cell-selected) .sbw-dot:where(.svelte-1dxdgqu) {background:var(--sbw-cal-hover-color, var(--sbw-accent-color, #c49e5a));}.sbw-cal-cell-selected.svelte-1dxdgqu .sbw-dot:where(.svelte-1dxdgqu) {background:var(--sbw-accent-contrast, #fff);opacity:1;}.sbw-slots.svelte-1dxdgqu {margin-top:1.5rem;border-top:1px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));padding-top:1.25rem;}
87
+ /* One column, not auto-fit -- auto-fit let Morning/Afternoon/Evening
88
+ sit side-by-side whenever the container was wide (e.g. the
89
+ dashboard's full-width reschedule sheet), each cramped into a
90
+ narrow track instead of the slot-buttons grid using the full
91
+ width. Stacking the groups keeps each one's own 2-column button
92
+ grid legible regardless of how wide the widget is rendered. */.sbw-slot-groups.svelte-1dxdgqu {display:grid;grid-template-columns:1fr;gap:1.25rem;}.sbw-slot-group-label.svelte-1dxdgqu {margin:0 0 0.5rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;color:var(--sbw-slot-label-color, inherit);opacity:var(--sbw-slot-label-opacity, 0.5);}
93
+ /* auto-fit: use as many columns as the (now flexible-width) slots
94
+ area actually has room for, instead of a fixed count that either
95
+ stretches into giant pills on a wide column or wastes space on a
96
+ narrow one. */.sbw-slot-buttons.svelte-1dxdgqu {display:grid;grid-template-columns:repeat(auto-fit, minmax(5.5rem, 1fr));gap:0.4rem;}.sbw-slot-btn.svelte-1dxdgqu {border-radius:9999px;border:2px solid var(--sbw-border-color, rgba(0, 0, 0, 0.35));background:var(--sbw-input-bg, #fff);box-shadow:0 1px 2px rgba(0, 0, 0, 0.06);padding:0.5rem 0.9rem;font:inherit;font-size:0.8125rem;color:inherit;cursor:pointer;transition:border-color 320ms ease-out, background-color 320ms ease-out, color 320ms ease-out;}
97
+ /* Excludes .sbw-slot-btn-selected for the same reason as .sbw-cal-cell's
98
+ own hover exclusion above: this selector's two classes + :hover
99
+ otherwise out-ranks that one plain class and hovering the already-
100
+ selected slot would replace its solid accent fill with this one. */.sbw-slot-btn.svelte-1dxdgqu:hover:not(.sbw-slot-btn-selected) {border-color:var(--sbw-accent-color, #c49e5a);background:var(--sbw-slot-hover-bg, var(--sbw-input-bg, #fff));color:var(--sbw-slot-hover-color, inherit);}.sbw-slot-btn-selected.svelte-1dxdgqu {background:var(--sbw-accent-color, #c49e5a);border-color:var(--sbw-accent-color, #c49e5a);color:var(--sbw-accent-contrast, #fff);
101
+ /* Replays whenever this class lands on a *different* button (auto-pick
102
+ or a manual re-pick), since that's a fresh application of the
103
+ animation property -- makes the pick noticeable instead of a silent
104
+ state change several buttons over from where the visitor is looking. */
105
+ animation: svelte-1dxdgqu-sbw-slot-pop 0.3s ease;}
106
+ @keyframes svelte-1dxdgqu-sbw-slot-pop {
107
+ 0% { transform: scale(0.92); }
108
+ 60% { transform: scale(1.04); }
109
+ 100% { transform: scale(1); }
110
+ }
111
+ /* Flashes gold then settles, so a silently auto-picked time in the summary
112
+ panel (easy to miss, off to the side) draws the eye same as the pop
113
+ above does for the slot button itself. */.sbw-time-flash.svelte-1dxdgqu {
114
+ animation: svelte-1dxdgqu-sbw-time-flash 0.6s ease;}
115
+ @keyframes svelte-1dxdgqu-sbw-time-flash {
116
+ 0% { color: var(--sbw-accent-color, #c49e5a); }
117
+ 100% { color: inherit; }
118
+ }
119
+
120
+ /* --- Summary panel --- */
121
+ /* Sticky, and it carries the primary CTA -- a Floating panel (canon:
122
+ accent-tinted border + matching glow, same 30%/25% mix the
123
+ therapist-filter panel uses) rather than Card surface's neutral
124
+ border, so it reads as raised/active instead of another content
125
+ block. Opaque --sbw-bg, not the translucent --sbw-input-bg inputs
126
+ use -- that assumes a solid page directly behind it, but this
127
+ panel sticks over whatever's scrolled underneath it. */.sbw-summary.svelte-1dxdgqu {border-radius:4px;border:1px solid color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 30%, transparent);background:var(--sbw-bg, #fff);box-shadow:0 8px 24px rgba(0, 0, 0, 0.16), 0 0 24px color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 25%, transparent);padding:1.25rem;}
128
+ @media (min-width: 800px) {.sbw-summary.svelte-1dxdgqu {position:sticky;top:var(--sbw-summary-sticky-top, 1rem);}
129
+ }.sbw-summary-row.svelte-1dxdgqu {display:flex;align-items:baseline;justify-content:space-between;gap:0.75rem;font-size:0.9375rem;font-weight:600;}.sbw-summary-row-sub.svelte-1dxdgqu {margin-top:0.5rem;font-size:0.8125rem;font-weight:400;opacity:0.65;}
130
+ /* Date and time are one fact, not a label/value pair -- keep them
131
+ next to each other instead of the row's default space-between,
132
+ which stretched them to opposite edges. Also the one -sub row that's
133
+ actually the point of the summary (which slot you're about to book),
134
+ so it overrides -sub's dimmed/thin defaults back up to fully legible
135
+ instead of reading as fine print like the optional staff row above it. */.sbw-summary-row-datetime.svelte-1dxdgqu {justify-content:flex-start;gap:0.375rem;font-size:var(--sbw-summary-datetime-size, 0.875rem);font-weight:var(--sbw-summary-datetime-weight, 700);color:var(--sbw-summary-datetime-color, inherit);opacity:var(--sbw-summary-datetime-opacity, 1);}
136
+ /* The post-booking "Booked" row's own timestamp value -- same
137
+ reasoning and same variables as .sbw-summary-row-datetime above (it's
138
+ the confirmed date/time, the actual point of this receipt-like row,
139
+ not a footnote), just scoped to the value span rather than the whole
140
+ row since this row keeps its label/value layout (space-between),
141
+ unlike the label-less date+time row above. */.sbw-summary-row-bookedat-value.svelte-1dxdgqu {font-weight:var(--sbw-summary-datetime-weight, 700);color:var(--sbw-summary-datetime-color, inherit);opacity:var(--sbw-summary-datetime-opacity, 1);}.sbw-summary-total.svelte-1dxdgqu {display:flex;align-items:baseline;justify-content:space-between;margin-top:1rem;padding-top:1rem;border-top:1px solid var(--sbw-summary-total-border-color, var(--sbw-border-color, rgba(0, 0, 0, 0.15)));font-size:0.9375rem;}.sbw-summary-total.svelte-1dxdgqu strong:where(.svelte-1dxdgqu) {font-size:1.125rem;color:var(--sbw-accent-color, #c49e5a);}.sbw-continue.svelte-1dxdgqu {display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;width:100%;margin-top:1.25rem;cursor:pointer;border:none;border-radius:2px;background:var(--sbw-accent-bg, #1a1a1a);color:var(--sbw-accent-contrast, #fff);padding:0.8rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;transition:background-color 150ms ease;}.sbw-continue.svelte-1dxdgqu:hover:not(:disabled) {background:var(--sbw-accent-hover-bg, #333);}.sbw-continue.svelte-1dxdgqu:disabled {cursor:default;opacity:0.4;}
142
+
143
+ /* --- Details step --- */.sbw-back.svelte-1dxdgqu {display:inline-block;margin-bottom:1.5rem;border:none;background:none;padding:0;font:inherit;color:inherit;font-size:0.8125rem;opacity:var(--sbw-back-opacity, 0.6);cursor:pointer;}.sbw-back.svelte-1dxdgqu:hover {opacity:var(--sbw-back-hover-opacity, 1);}.sbw-back-service.svelte-1dxdgqu {display:block;width:100%;margin-top:0.75rem;text-align:center;}.sbw-grid.svelte-1dxdgqu {display:grid;gap:1.25rem;}
144
+ @media (min-width: 640px) {.sbw-grid.svelte-1dxdgqu {grid-template-columns:1fr 1fr;}
145
+ }.sbw-field.svelte-1dxdgqu {display:flex;flex-direction:column;gap:0.5rem;}.sbw-label.svelte-1dxdgqu {font-size:0.75rem;font-weight:300;text-transform:uppercase;letter-spacing:0.05em;}.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu),
146
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu) {border-radius:2px;border:1px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));background:var(--sbw-input-bg, #fff);padding:0.75rem 1rem;font-size:0.875rem;font-family:inherit;color:inherit;}.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):focus,
147
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):focus {outline:none;border-color:color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 40%, transparent);}.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu)::placeholder,
148
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu)::placeholder {color:var(--sbw-placeholder-color, color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 45%, transparent));}
149
+ /* Browser autofill (matched saved Name/Email data) paints its own
150
+ background on these inputs via a UA style strong enough that plain
151
+ \`background\` can't win -- box-shadow can, so this fakes the field's
152
+ normal look with an opaque inset fill instead. --sbw-input-autofill-bg
153
+ falls back to --sbw-input-bg, which is enough for most themes (an
154
+ opaque light input already matches when autofilled); only a theme
155
+ whose --sbw-input-bg is itself transparent (mens-cave-barbers: fields
156
+ defined by their border, not a fill, over a solid page background)
157
+ needs to set this separately to that real opaque colour, or the
158
+ browser's own fill shows through unmasked. The absurd transition delay
159
+ is the standard defeat for Chrome's own internal autofill-background
160
+ transition, which otherwise animates its colour in after this applies. */.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):-webkit-autofill,
161
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):-webkit-autofill,
162
+ .sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):-webkit-autofill:hover,
163
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):-webkit-autofill:hover,
164
+ .sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):-webkit-autofill:focus,
165
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):-webkit-autofill:focus {-webkit-text-fill-color:var(--sbw-text-color, #1a1a1a);-webkit-box-shadow:0 0 0 1000px var(--sbw-input-autofill-bg, var(--sbw-input-bg, #fff)) inset;box-shadow:0 0 0 1000px var(--sbw-input-autofill-bg, var(--sbw-input-bg, #fff)) inset;transition:background-color 600000s ease-in-out 0s;}.sbw-notes-field.svelte-1dxdgqu {margin-top:1.25rem;}.sbw-submit.svelte-1dxdgqu {display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;width:100%;margin-top:1.25rem;cursor:pointer;border:none;border-radius:2px;background:var(--sbw-accent-bg, #1a1a1a);color:var(--sbw-accent-contrast, #fff);padding:0.8rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;transition:background-color 150ms ease;}.sbw-submit.svelte-1dxdgqu:hover:not(:disabled) {background:var(--sbw-accent-hover-bg, #333);}.sbw-submit.svelte-1dxdgqu:disabled {cursor:default;opacity:0.6;}.sbw-spinner.svelte-1dxdgqu {height:1rem;width:1rem;border-radius:9999px;border:2px solid color-mix(in oklab, var(--sbw-accent-contrast, #fff) 30%, transparent);border-top-color:var(--sbw-accent-contrast, #fff);
166
+ animation: svelte-1dxdgqu-sbw-spin 0.7s linear infinite;}
167
+ @keyframes svelte-1dxdgqu-sbw-spin {
168
+ to {
169
+ transform: rotate(360deg);
170
+ }
171
+ }
172
+ @media (prefers-reduced-motion: reduce) {.sbw-spinner.svelte-1dxdgqu {
173
+ animation: none;}.sbw-slot-btn-selected.svelte-1dxdgqu,
174
+ .sbw-time-flash.svelte-1dxdgqu {
175
+ animation: none;}
176
+ }.sbw-error-text.svelte-1dxdgqu {margin:0.75rem 0 0;font-size:0.8125rem;color:var(--sbw-danger-color, #dc2626);}
177
+
178
+ /* --- Success --- */.sbw-success.svelte-1dxdgqu {max-width:var(--sbw-form-max-width, 40rem);margin:3rem auto 0;text-align:center;}.sbw-success-icon.svelte-1dxdgqu {display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;margin:0 auto 1rem;border-radius:9999px;background:var(--sbw-success-bg, #c49e5a);color:#fff;}.sbw-success-icon.svelte-1dxdgqu svg:where(.svelte-1dxdgqu) {width:1.5rem;height:1.5rem;}.sbw-success.svelte-1dxdgqu .sbw-summary:where(.svelte-1dxdgqu) {margin-top:2rem;text-align:left;}.sbw-success.svelte-1dxdgqu p:where(.svelte-1dxdgqu) {margin:0;font-size:1.125rem;}`};function rt(t,r){y(r,!0),C(t,nt);let re=(e,t=ee,r)=>{let a=O(()=>ie(r?.(),!1));var s=i(),c=n(s),l=e=>{var r=Pe(),s=M(r),c=M(s),l=M(c,!0);x(c);var u=h(c,2),m=e=>{var t=be(),n=M(t);x(t),o(e=>A(n,`£${e??``}`),[()=>d(Z).amount.toFixed(2)]),p(e,t)};f(u,e=>{!N()&&d(Z)&&e(m)}),x(s);var g=h(s,2),_=e=>{var t=Se(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=e=>{var t=xe(),n=M(t);x(t),o(e=>A(n,`−£${e??``}`),[()=>(d(H).price-d(Z).amount).toFixed(2)]),p(e,t)};f(i,e=>{d(H).price!=null&&d(H).price>d(Z).amount&&e(a)}),x(t),o(()=>A(r,d(B).memberRateLabel)),p(e,t)};f(g,e=>{!N()&&d(Z)?.member&&e(_)});var v=h(g,2),y=e=>{var t=Ce(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i,!0);x(i),x(t),o(()=>{A(r,d(B).staffRowLabel),A(a,st())}),p(e,t)};f(v,e=>{st()&&e(y)});var S=h(v,2),C=e=>{var t=Te(),n=M(t),r=M(n,!0);x(n);var i=h(n,2);oe(i,()=>d(Y),e=>{var t=we(),n=M(t,!0);x(t),o(()=>A(n,d(Y))),b(1,t,()=>ye,()=>({duration:200})),p(e,t)}),x(t),o(e=>A(r,e),[()=>pe(d(J),P())]),p(e,t)};f(S,e=>{d(J)&&d(Y)&&e(C)});var w=h(S,2),E=e=>{var t=Ee(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i);x(i),x(t),o((e,t)=>{A(r,d(B).bookedAtLabel),A(a,`${e??``}
179
+ ${t??``}`)},[()=>d(Ft).toLocaleDateString(P(),{day:`numeric`,month:`short`}),()=>d(Ft).toLocaleTimeString(P(),{hour:`2-digit`,minute:`2-digit`})]),p(e,t)};f(w,e=>{d(a)&&d(Ft)&&e(E)});var ee=h(w,2),D=e=>{var t=De(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i);x(i),x(t),o(e=>{A(r,d(B).totalLabel),A(a,`£${e??``}`)},[()=>d(Z).amount.toFixed(2)]),p(e,t)};f(ee,e=>{!N()&&d(Z)&&e(D)});var O=h(ee,2),te=e=>{var r=i(),a=n(r),s=e=>{var t=je(),r=n(t),i=M(r),a=e=>{var t=Oe();p(e,t)};f(i,e=>{d(Q)&&e(a)});var s=h(i,2),c=M(s,!0);x(s),x(r);var l=h(r,2),u=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).noChangeHint)),p(e,t)};f(l,e=>{d(Kt)&&e(u)});var m=h(l,2),g=e=>{var t=Ae(),n=M(t,!0);x(t),o(()=>A(n,d($))),p(e,t)};f(m,e=>{d($)&&e(g)}),o(()=>{r.disabled=!d(Y)||d(Q)||d(Kt),A(c,d(Q)?d(B).confirmingLabel:d(B).confirmRescheduleLabel)}),T(`click`,r,yn),p(e,t)},c=e=>{var t=Me(),r=n(t),i=M(r,!0);x(r);var a=h(r,2),s=M(a);x(a),o(()=>{r.disabled=!d(Y),A(i,d(B).continueLabel),A(s,`← ${d(B).changeServiceLabel??``}`)}),T(`click`,r,on),T(`click`,a,cn),p(e,t)},l=e=>{var t=Ne(),r=n(t),i=M(r),a=e=>{var t=Oe();p(e,t)};f(i,e=>{d(Q)&&e(a)});var s=h(i,2),c=M(s,!0);x(s),x(r);var l=h(r,2),u=e=>{var t=Ae(),n=M(t,!0);x(t),o(()=>A(n,d($))),p(e,t)};f(l,e=>{d($)&&e(u)});var m=h(l,2),g=M(m);x(m),o(()=>{r.disabled=d(Q),A(c,d(Q)?d(B).confirmingLabel:d(B).confirmLabel),A(g,`← ${d(B).backLabel??``}`)}),T(`click`,m,sn),p(e,t)};f(a,e=>{t()&&ct()?e(s):t()?e(c,1):e(l,-1)}),p(e,r)};f(O,e=>{d(a)||e(te)}),x(r),o(()=>A(l,d(H).name)),p(e,r)};f(c,e=>{d(H)&&e(l)}),p(e,s)},ve={chooseServiceLabel:`Choose a Service`,loadingServices:`Loading services…`,loadServicesError:`Could not load services. Please try again later.`,previousMonth:`Previous month`,nextMonth:`Next month`,morningLabel:`Morning`,afternoonLabel:`Afternoon`,eveningLabel:`Evening`,pickDayHint:`Pick a day to see times.`,noSlotsForDay:`No times available this day.`,noChangeHint:`Pick a different date or time to continue.`,therapistFilterLabel:`Therapist`,anyTherapistLabel:`Any therapist`,staffRowLabel:`Staff`,bookedAtLabel:`Booked`,totalLabel:`Total`,continueLabel:`Continue`,changeServiceLabel:`Change service`,backLabel:`Back`,nameLabel:`Name`,namePlaceholder:`Jane Smith`,emailLabel:`Email`,emailPlaceholder:`jane@email.com`,emailInvalidTitle:`Enter a valid email address, e.g. jane@email.com`,phoneLabel:`Phone (optional)`,phonePlaceholder:`+1 555 123 4567`,notesLabel:`Notes (optional)`,notesPlaceholder:`Anything we should know?`,confirmingLabel:`Booking…`,confirmLabel:`Confirm Booking`,confirmRescheduleLabel:`Confirm change`,notWiredError:`This widget is not wired up to make bookings yet.`,genericSubmitError:`Something went wrong booking that slot. Please try again.`,successMessage:`Booked! Check your email for confirmation.`,memberRateLabel:`Regulars' rate`,membersOnlyLabel:`Regulars only`,membersOnlyHint:`For clients who've visited in the last 4 weeks.`},rt=E(r,`heading`,7,`Book a Service`),it=E(r,`logoUrl`,7),at=E(r,`tagline`,7,``),ot=E(r,`description`,7,``),st=E(r,`staffLabel`,7,``),N=E(r,`hidePrice`,7,!1),ct=E(r,`skipDetailsStep`,7,!1),lt=E(r,`emailOptional`,7,!1),ut=E(r,`closedWeekdays`,23,()=>[]),P=E(r,`locale`,7),dt=E(r,`initialTreatmentTitle`,7),F=E(r,`initialDate`,7),ft=E(r,`initialTime`,7),I=E(r,`initialName`,7),L=E(r,`initialEmail`,7),R=E(r,`initialPhone`,7),z=E(r,`memberUntil`,7),pt=E(r,`strings`,7),mt=E(r,`fetchTreatments`,7),ht=E(r,`fetchTherapists`,7),gt=E(r,`fetchAvailability`,7),_t=E(r,`submitBooking`,7),B=s(()=>({...ve,...pt()})),vt=s(()=>he(P())),yt=s(()=>fe(P())),V=g(`service`),bt=g(a([])),xt=g(!0),St=g(!1),H=g(null);l(()=>{let e=mt();if(!e)return;let t=!1;return m(xt,!0),m(St,!1),e().then(e=>{if(!t){if(!e?.length)throw Error(`empty`);m(bt,e,!0)}}).catch(()=>{t||m(St,!0)}).finally(()=>{t||m(xt,!1)}),()=>{t=!0}});let Ct=g(a([])),U=g(``),W=g(!1),wt=g(void 0),Tt=g(void 0);l(()=>{let e=ht();if(!e)return;let t=!1;return e().then(e=>{t||m(Ct,e??[],!0)}).catch(()=>{t||m(Ct,[],!0)}),()=>{t=!0}});let Et=s(()=>d(Ct).find(e=>e.id===d(U))?.name);function Dt(){m(W,!d(W))}function Ot(e){m(U,e,!0),m(W,!1)}l(()=>{if(!d(W)||!d(wt)||!d(Tt))return;let e=d(wt),t=d(Tt);t.style.minWidth=`${e.getBoundingClientRect().width}px`,t.showPopover();let n=de(e,t,async()=>{let{x:n,y:r}=await le(e,t,{strategy:`fixed`,placement:`bottom-start`,middleware:[ce(4),ue(),se({padding:12})]});t.style.left=`${n}px`,t.style.top=`${r}px`});function r(e){e.newState===`closed`&&m(W,!1)}return t.addEventListener(`toggle`,r),()=>{n(),t.removeEventListener(`toggle`,r),t.matches(`:popover-open`)&&t.hidePopover()}});let kt=e=>e.trim().toLowerCase(),At;l(()=>{let e=dt();if(!e||e===At||!d(bt).length)return;let t=d(bt).find(t=>kt(t.name)===kt(e));t&&(At=e,Mt(t))});let jt;l(()=>{if(!F()||!d(H)||F()===jt)return;jt=F();let[e,t,n]=F().split(`-`).map(Number);m(K,e,!0),m(q,t-1),m(J,new Date(e,t-1,n),!0),m(Y,ft()??null,!0)});function Mt(e){m(H,e,!0),m(J,null),m(Y,null),Rt=0,m(V,`datetime`)}let Nt,Pt=!1;l(()=>{let e=gt();if(!Pt){Pt=!0,Nt=e;return}e===Nt||ct()||(Nt=e,d(V)!==`service`&&m(V,`service`),m(H,null),m(J,null),m(Y,null),Rt=0)});let G=me(new Date),K=g(a(G.getFullYear())),q=g(a(G.getMonth())),J=g(null),Y=g(null),Ft=g(null),It=g(a(new Map)),Lt=g(!1),Rt=0,zt=ge(G);function Bt(e,t){return e.memberPrice!=null&&!!z()&&t<=z()}function Vt(e,t){return Bt(e,t)||e.price==null?{amount:e.memberPrice??0,member:!0}:{amount:e.price,member:!1}}function Ht(e){return e.price!=null||Bt(e,zt)}let Ut=s(()=>_e(d(K),d(q),G,ut()??[])),Wt=s(()=>d(K)!==G.getFullYear()||d(q)!==G.getMonth()),X=s(()=>d(J)?ge(d(J)):null),Z=s(()=>d(H)?Vt(d(H),d(X)??zt):null),Gt=s(()=>d(X)?d(It).get(d(X))??[]:[]),Kt=s(()=>ct()&&!!d(Y)&&d(X)===F()&&d(Y)===ft()),qt=s(()=>{let e={morning:[],afternoon:[],evening:[]};for(let t of d(Gt)){let n=parseInt(t.slice(0,2),10);n<12?e.morning.push(t):n<17?e.afternoon.push(t):e.evening.push(t)}return e});function Jt(e){return d(It).get(e)?.length??0}function Yt(e){let t=Jt(e);return t===0?0:t<=5?1:t<=10?2:3}function Xt(){if(d(J))return;let e=d(Ut).find(e=>e.inMonth&&!e.isPast&&Yt(e.iso)>0);e?(m(J,e.date,!0),m(Y,null)):Rt<3&&(Rt++,nn())}function Zt(){let e=gt();if(!e||!d(H))return;let t=ge(new Date(d(K),d(q),1)),n=ge(new Date(d(K),d(q)+1,0)),r=d(H).id,i=d(U)||void 0;m(Lt,!0),e(t,n,r,i).then(e=>{if(d(H)?.id!==r||(d(U)||void 0)!==i)return;let t=new Map;for(let n of e??[])t.set(String(n.date).split(`T`)[0],n.slots.map(e=>e.time));m(It,t,!0),Xt()}).catch(()=>{m(It,new Map,!0)}).finally(()=>{m(Lt,!1)})}l(()=>{d(H),d(U),d(K),d(q),z(),Zt()});let Qt=``;l(()=>{d(U)!==Qt&&(Qt=d(U),m(J,null),m(Y,null))}),l(()=>{!d(X)||d(Y)||d(Gt).length>0&&m(Y,d(Gt)[0],!0)});function $t(){d(J)&&(d(J).getFullYear()!==d(K)||d(J).getMonth()!==d(q))&&(m(J,null),m(Y,null))}function en(e){e.classList.remove(`sbw-cal-nav-pulse`),e.offsetWidth,e.classList.add(`sbw-cal-nav-pulse`),e.addEventListener(`animationend`,()=>e.classList.remove(`sbw-cal-nav-pulse`),{once:!0})}function tn(){d(Wt)&&(m(q,d(q)-1),d(q)<0&&(m(q,11),m(K,d(K)-1)),$t())}function nn(){m(q,d(q)+1),d(q)>11&&(m(q,0),m(K,d(K)+1)),$t()}function rn(e){!e.inMonth||e.isPast||Yt(e.iso)===0||(m(J,e.date,!0),m(Y,null))}function an(e){m(Y,e,!0)}function on(){d(Y)&&m(V,`details`)}function sn(){m(V,`datetime`)}function cn(){m(V,`service`)}let ln=g(``),un=g(``),dn=g(``),fn=g(``),Q=g(!1),$=g(``),pn=!1,mn=!1,hn=!1;l(()=>{I()&&!pn&&!d(ln)&&(m(ln,I(),!0),pn=!0)}),l(()=>{L()&&!mn&&!d(un)&&(m(un,L(),!0),mn=!0)}),l(()=>{R()&&!hn&&!d(dn)&&(m(dn,R(),!0),hn=!0)});function gn(e,t){r.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}async function _n(e){if(!_t()){m($,d(B).notWiredError,!0);return}m($,``),m(Q,!0);try{let t=await _t()(e);if(!t.ok)throw Error(t.error||`request failed`);m(Ft,new Date,!0),m(V,`success`),gn(`booking-submitted`,e)}catch(e){m($,e instanceof Error&&e.message!==`request failed`?e.message:d(B).genericSubmitError,!0),Zt()}finally{m(Q,!1)}}async function vn(e){e.preventDefault(),!(!d(H)||!d(X)||!d(Y))&&await _n({treatmentId:d(H).id,date:d(X),time:d(Y),therapistId:d(U)||void 0,name:d(ln),email:d(un),phone:d(dn),notes:d(fn)})}async function yn(){!d(H)||!d(X)||!d(Y)||await _n({treatmentId:d(H).id,date:d(X),time:d(Y),therapistId:d(U)||void 0,name:I()??``,email:L()??``,phone:R()??``,notes:``})}var bn={get heading(){return rt()},set heading(e=`Book a Service`){rt(e),c()},get logoUrl(){return it()},set logoUrl(e){it(e),c()},get tagline(){return at()},set tagline(e=``){at(e),c()},get description(){return ot()},set description(e=``){ot(e),c()},get staffLabel(){return st()},set staffLabel(e=``){st(e),c()},get hidePrice(){return N()},set hidePrice(e=!1){N(e),c()},get skipDetailsStep(){return ct()},set skipDetailsStep(e=!1){ct(e),c()},get emailOptional(){return lt()},set emailOptional(e=!1){lt(e),c()},get closedWeekdays(){return ut()},set closedWeekdays(e=[]){ut(e),c()},get locale(){return P()},set locale(e){P(e),c()},get initialTreatmentTitle(){return dt()},set initialTreatmentTitle(e){dt(e),c()},get initialDate(){return F()},set initialDate(e){F(e),c()},get initialTime(){return ft()},set initialTime(e){ft(e),c()},get initialName(){return I()},set initialName(e){I(e),c()},get initialEmail(){return L()},set initialEmail(e){L(e),c()},get initialPhone(){return R()},set initialPhone(e){R(e),c()},get memberUntil(){return z()},set memberUntil(e){z(e),c()},get strings(){return pt()},set strings(e){pt(e),c()},get fetchTreatments(){return mt()},set fetchTreatments(e){mt(e),c()},get fetchTherapists(){return ht()},set fetchTherapists(e){ht(e),c()},get fetchAvailability(){return gt()},set fetchAvailability(e){gt(e),c()},get submitBooking(){return _t()},set submitBooking(e){_t(e),c()}},xn=tt(),Sn=M(xn),Cn=t=>{var a=ze(),s=M(a),c=e=>{var t=Fe();o(()=>k(t,`src`,it())),p(e,t)};f(s,e=>{it()&&e(c)});var l=h(s,2);ae(l,r,`heading`,{},t=>{var r=i(),a=n(r),s=t=>{var r=Ie(),i=n(r),a=M(i,!0);x(i),e(2),o(()=>A(a,rt())),p(t,r)};f(a,e=>{rt()&&e(s)}),p(t,r)});var u=h(l,2),d=e=>{var t=Le(),n=M(t,!0);x(t),o(()=>A(n,at())),p(e,t)};f(u,e=>{at()&&e(d)});var m=h(u,2);ae(m,r,`description`,{},e=>{var t=i(),r=n(t),a=e=>{var t=Re(),n=M(t,!0);x(t),o(()=>A(n,ot())),p(e,t)};f(r,e=>{ot()&&e(a)}),p(e,t)}),x(a),p(t,a)};f(Sn,e=>{d(V)!==`success`&&e(Cn)});var wn=h(Sn,2),Tn=e=>{var t=We(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).loadingServices)),p(e,t)},c=e=>{var t=Ae(),n=M(t,!0);x(t),o(()=>A(n,d(B).loadServicesError)),p(e,t)},l=e=>{var t=Ue();j(t,21,()=>d(bt),e=>e.id,(e,t)=>{let n=s(()=>Ht(d(t)));var r=He(),i=M(r),a=M(i),c=M(a),l=h(c),u=e=>{var t=Be(),n=M(t,!0);x(t),o(()=>A(n,d(B).membersOnlyHint)),p(e,t)};f(l,e=>{d(n)||e(u)}),x(a);var m=h(a,2),g=e=>{var n=Ve(),r=M(n),i=M(r);x(r);var a=h(r,2),s=e=>{var t=Be(),n=M(t,!0);x(t),o(()=>A(n,d(B).membersOnlyLabel)),p(e,t)},c=e=>{var n=Be(),r=M(n);x(n),o(e=>A(r,`${d(B).memberRateLabel??``} £${e??``}`),[()=>d(t).memberPrice.toFixed(2)]),p(e,n)};f(a,e=>{d(t).price==null?e(s):d(t).memberPrice!=null&&e(c,1)}),x(n),o(e=>A(i,`£${e??``}`),[()=>(d(t).price??d(t).memberPrice??0).toFixed(2)]),p(e,n)};f(m,e=>{N()||e(g)}),x(i),x(r),o(()=>{i.disabled=!d(n),A(c,`${d(t).name??``} `)}),T(`click`,i,()=>Mt(d(t))),p(e,r)}),x(t),p(e,t)};f(i,e=>{d(xt)?e(a):d(St)?e(c,1):e(l,-1)}),x(t),o(()=>A(r,d(B).chooseServiceLabel)),p(e,t)},En=e=>{var t=Qe(),r=M(t),a=M(r),c=M(a),l=M(c),u=M(l);x(l);var g=h(l,2),_=e=>{var t=Ke(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i),s=M(a,!0);x(a);var c=h(a,2);let l;x(i),te(i,e=>m(wt,e),()=>d(wt));var u=h(i,2),f=M(u),g=M(f),_=M(g,!0);x(g),x(f);var v=h(f,2);j(v,17,()=>d(Ct),e=>e.id,(e,t)=>{var n=Ge(),r=M(n),i=M(r,!0);x(r),x(n),o(()=>{k(r,`aria-selected`,d(t).id===d(U)),A(i,d(t).name)}),T(`click`,r,()=>Ot(d(t).id)),p(e,n)}),x(u),te(u,e=>m(Tt,e),()=>d(Tt)),x(t),o(()=>{A(r,d(B).therapistFilterLabel),k(i,`aria-expanded`,d(W)),A(s,d(Et)??d(B).anyTherapistLabel),l=S(c,0,`sbw-chevron svelte-1dxdgqu`,null,l,{"sbw-chevron-open":d(W)}),k(u,`aria-label`,d(B).therapistFilterLabel),k(g,`aria-selected`,!d(U)),A(_,d(B).anyTherapistLabel)}),T(`click`,i,Dt),T(`click`,g,()=>Ot(``)),p(e,t)};f(g,e=>{d(Ct).length&&e(_)});var v=h(g,2),y=M(v),b=h(y,2);x(v),x(c);var C=h(c,2);j(C,20,()=>d(yt),e=>e,(e,t)=>{var n=xe(),r=M(n,!0);x(n),o(()=>A(r,t)),p(e,n)}),x(C);var w=h(C,2);j(w,21,()=>d(Ut),e=>e.iso,(e,t)=>{let n=s(()=>Yt(d(t).iso)),r=s(()=>d(t).inMonth&&!d(t).isPast&&d(n)>0);var i=Je();let a;var c=M(i),l=M(c,!0);x(c);var u=h(c,2),m=e=>{var t=qe();o(()=>S(t,1,`sbw-dot sbw-dot-${d(n)??``}`,`svelte-1dxdgqu`)),p(e,t)};f(u,e=>{d(r)&&e(m)}),x(i),o(()=>{a=S(i,1,`sbw-cal-cell svelte-1dxdgqu`,null,a,{"sbw-cal-cell-off":!d(t).inMonth||d(t).isPast,"sbw-cal-cell-selected":d(X)===d(t).iso}),i.disabled=!d(r),A(l,d(t).dayNumber)}),T(`click`,i,()=>rn(d(t))),p(e,i)}),x(w),x(a);var E=h(a,2),ee=M(E),D=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).pickDayHint)),p(e,t)},O=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).loadingServices)),p(e,t)},ie=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).noSlotsForDay)),p(e,t)},ae=e=>{var t=Ze();j(t,21,()=>[[`morning`,d(B).morningLabel],[`afternoon`,d(B).afternoonLabel],[`evening`,d(B).eveningLabel]],([e,t])=>e,(e,t)=>{var r=s(()=>ne(d(t),2));let a=()=>d(r)[0],c=()=>d(r)[1],l=s(()=>d(qt)[a()]);var u=i(),m=n(u),g=e=>{var t=Xe(),n=M(t),r=M(n);x(n);var i=h(n,2);j(i,20,()=>d(l),e=>e,(e,t)=>{var n=Ye();let r;var i=M(n,!0);x(n),o(()=>{r=S(n,1,`sbw-slot-btn svelte-1dxdgqu`,null,r,{"sbw-slot-btn-selected":d(Y)===t}),A(i,t)}),T(`click`,n,()=>an(t)),p(e,n)}),x(i),x(t),o(()=>A(r,`${c()??``} (${d(l).length??``})`)),p(e,t)};f(m,e=>{d(l).length&&e(g)}),p(e,u)}),x(t),p(e,t)};f(ee,e=>{d(X)?d(Lt)?e(O,1):d(Gt).length?e(ae,-1):e(ie,2):e(D)}),x(E),x(r);var oe=h(r,2);re(oe,()=>!0),x(t),o(()=>{A(u,`${d(vt)[d(q)]??``} ${d(K)??``}`),y.disabled=!d(Wt),k(y,`aria-label`,d(B).previousMonth),k(b,`aria-label`,d(B).nextMonth),k(w,`aria-busy`,d(Lt))}),T(`click`,y,e=>{en(e.currentTarget),tn()}),T(`click`,b,e=>{en(e.currentTarget),nn()}),p(e,t)},Dn=e=>{var t=$e(),n=M(t),r=M(n),i=M(r),a=M(i),s=M(a,!0);x(a);var c=h(a,2);D(c),x(i);var l=h(i,2),f=M(l),g=M(f,!0);x(f);var _=h(f,2);D(_),x(l);var y=h(l,2),b=M(y),S=M(b,!0);x(b);var C=h(b,2);D(C),x(y),x(r);var T=h(r,2),E=M(T),ee=M(E,!0);x(E);var O=h(E,2);v(O),x(T),x(n);var te=h(n,2);re(te,()=>!1),x(t),o(()=>{A(s,d(B).nameLabel),k(c,`placeholder`,d(B).namePlaceholder),A(g,lt()?`${d(B).emailLabel} (optional)`:d(B).emailLabel),_.required=!lt(),k(_,`title`,d(B).emailInvalidTitle),k(_,`placeholder`,d(B).emailPlaceholder),A(S,d(B).phoneLabel),k(C,`placeholder`,d(B).phonePlaceholder),A(ee,d(B).notesLabel),k(O,`placeholder`,d(B).notesPlaceholder)}),u(`submit`,t,vn),w(c,()=>d(ln),e=>m(ln,e)),w(_,()=>d(un),e=>m(un,e)),w(C,()=>d(dn),e=>m(dn,e)),w(O,()=>d(fn),e=>m(fn,e)),p(e,t)},On=e=>{var t=et(),n=h(M(t),2),r=M(n,!0);x(n);var i=h(n,2);re(i,()=>!1,()=>!0),x(t),o(()=>A(r,d(B).successMessage)),p(e,t)};return f(wn,e=>{d(V)===`service`?e(Tn):d(V)===`datetime`&&d(H)?e(En,1):d(V)===`details`&&d(H)?e(Dn,2):d(V)===`success`&&e(On,3)}),x(xn),p(t,xn),_(bn)}t([`click`]),customElements.define(`spa-booking-widget`,re(rt,{heading:{attribute:`heading`,type:`String`},logoUrl:{attribute:`logo-url`,type:`String`},tagline:{attribute:`tagline`,type:`String`},description:{attribute:`description`,type:`String`},staffLabel:{attribute:`staff-label`,type:`String`},hidePrice:{attribute:`hide-price`,type:`Boolean`},skipDetailsStep:{attribute:`skip-details-step`,type:`Boolean`},emailOptional:{attribute:`email-optional`,type:`Boolean`},closedWeekdays:{attribute:`closed-weekdays`,type:`Array`},initialTreatmentTitle:{attribute:`initial-treatment-title`,type:`String`},initialDate:{attribute:`initial-date`,type:`String`},initialTime:{attribute:`initial-time`,type:`String`},initialName:{attribute:`initial-name`,type:`String`},initialEmail:{attribute:`initial-email`,type:`String`},initialPhone:{attribute:`initial-phone`,type:`String`},memberUntil:{attribute:`member-until`,type:`String`},locale:{attribute:`locale`,type:`String`},strings:{type:`Object`},fetchTreatments:{type:`Object`},fetchTherapists:{type:`Object`},fetchAvailability:{type:`Object`},submitBooking:{type:`Object`}},[`heading`,`description`],[],{mode:`open`}));
@@ -0,0 +1,31 @@
1
+ import{A as e,B as t,D as n,E as r,G as i,H as a,I as o,J as s,K as c,L as l,N as u,O as d,S as f,T as p,U as m,V as h,W as g,X as _,Z as v,d as ee,et as y,f as b,h as te,j as x,n as S,r as ne,s as C,t as w,w as T,y as E,z as D}from"./chunks/client-BDk8LqGN.js";import{i as re,o as ie,r as ae,s as oe,t as se}from"./chunks/calendar-B8eNjUm2.js";var ce=d(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-linecap="round" class="ss-spin svelte-xf8i9m"><circle cx="12" cy="12" r="9" stroke="rgba(255,255,255,0.15)" stroke-width="2.5"></circle><path d="M12 3a9 9 0 0 1 9 9" stroke="white" stroke-width="2.5"></path></svg>`),le=d(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="4,13 10,18 20,6"></polyline></svg>`),ue=n(`<span class="svelte-xf8i9m"> </span>`),de=n(`<button type="button"> </button>`),fe=n(`<span class="ss-day ss-day-empty svelte-xf8i9m"></span>`),pe=n(`<div class="ss-cal-month"><div class="ss-cal-title svelte-xf8i9m"> </div> <div class="ss-cal-weekdays svelte-xf8i9m"></div> <div class="ss-cal-grid svelte-xf8i9m"></div></div>`),me=n(`<div class="ss-cal svelte-xf8i9m" role="dialog" aria-label="Choose check-in and check-out dates"><button type="button" class="ss-cal-nav ss-cal-prev svelte-xf8i9m" aria-label="Previous month">‹</button> <button type="button" class="ss-cal-nav ss-cal-next svelte-xf8i9m" aria-label="Next month">›</button> <div class="ss-cal-months svelte-xf8i9m"></div></div>`),he=n(`<p class="ss-error svelte-xf8i9m">Unable to load availability. Please try again.</p>`),ge=n(`<p class="ss-none svelte-xf8i9m">No availability for those dates. Try adjusting your stay.</p>`),_e=n(`<a class="ss-card svelte-xf8i9m"><div class="ss-card-img svelte-xf8i9m"><img loading="lazy" class="svelte-xf8i9m"/></div> <div class="ss-card-body svelte-xf8i9m"><div class="ss-card-info svelte-xf8i9m"><div class="ss-card-name svelte-xf8i9m"> </div> <div class="ss-card-desc svelte-xf8i9m"> </div></div> <div><div class="ss-card-rate svelte-xf8i9m"> </div> <div class="ss-card-rate-sub svelte-xf8i9m"> </div></div></div></a>`),ve=n(`<div class="ss-header svelte-xf8i9m"> </div> <div class="ss-grid svelte-xf8i9m"></div>`,1),ye=n(`<div class="ss-wrap svelte-xf8i9m"><div><button type="button" class="ss-field ss-field-first svelte-xf8i9m"><span class="ss-label svelte-xf8i9m">Check in</span> <span> </span></button> <button type="button" class="ss-field svelte-xf8i9m"><span class="ss-label svelte-xf8i9m">Check out</span> <span> </span></button></div> <div><!></div> <!> <div aria-live="polite"><!></div></div>`),be={hash:`svelte-xf8i9m`,code:`:host {display:block;}.ss-wrap.svelte-xf8i9m {position:relative;width:100%;}
2
+
3
+ /* ── Date bar ── */.ss-bar.svelte-xf8i9m {display:flex;width:100%;align-items:stretch;overflow:hidden;border:1px solid rgba(255, 255, 255, 0.14);background:rgba(255, 255, 255, 0.07);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);transition:opacity 0.2s;}.ss-loading.svelte-xf8i9m {opacity:0.6;pointer-events:none;}.ss-field.svelte-xf8i9m {display:flex;flex:1;cursor:pointer;flex-direction:column;gap:0.25rem;border:none;background:transparent;padding:1.25rem 1.75rem;text-align:left;font-family:'Inter', sans-serif;transition:background-color 150ms;}.ss-field.svelte-xf8i9m:hover {background:rgba(255, 255, 255, 0.04);}.ss-field-first.svelte-xf8i9m {border-right:1px solid rgba(255, 255, 255, 0.08);}.ss-label.svelte-xf8i9m {font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(240, 238, 255, 0.35);}.ss-value.svelte-xf8i9m {font-size:15px;font-weight:500;color:rgba(240, 238, 255, 0.4);}.ss-value-set.svelte-xf8i9m {color:#f0eeff;}
4
+
5
+ /* ── Status spinner / tick ── */.ss-status.svelte-xf8i9m {pointer-events:none;position:absolute;top:0;right:0;bottom:0;display:flex;width:50%;align-items:center;justify-content:flex-end;padding-right:1.75rem;opacity:0;transition:opacity 0.3s;}.ss-status-on.svelte-xf8i9m {opacity:1;}.ss-spin.svelte-xf8i9m {
6
+ animation: svelte-xf8i9m-ss-spin 0.7s linear infinite;}
7
+ @keyframes svelte-xf8i9m-ss-spin {
8
+ to {
9
+ transform: rotate(360deg);
10
+ }
11
+ }
12
+
13
+ /* ── Calendar (glass, matches the hero flatpickr theme) ── */.ss-cal.svelte-xf8i9m {position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%);z-index:9500;border:1px solid rgba(255, 255, 255, 0.12);border-radius:16px;background:rgba(10, 8, 24, 0.25);backdrop-filter:blur(40px);-webkit-backdrop-filter:blur(40px);box-shadow:0 16px 48px rgba(0, 0, 0, 0.4);padding:16px;font-family:'Inter', sans-serif;}.ss-cal-months.svelte-xf8i9m {display:flex;gap:24px;}.ss-cal-title.svelte-xf8i9m {margin-bottom:8px;text-align:center;font-size:14px;font-weight:600;color:#f0eeff;}.ss-cal-nav.svelte-xf8i9m {position:absolute;top:14px;z-index:1;cursor:pointer;border:none;background:none;padding:2px 8px;font-size:20px;line-height:1;color:rgba(240, 238, 255, 0.5);}.ss-cal-nav.svelte-xf8i9m:hover {color:#f0eeff;}.ss-cal-prev.svelte-xf8i9m {left:10px;}.ss-cal-next.svelte-xf8i9m {right:10px;}.ss-cal-weekdays.svelte-xf8i9m {display:grid;grid-template-columns:repeat(7, 1fr);margin-bottom:4px;}.ss-cal-weekdays.svelte-xf8i9m span:where(.svelte-xf8i9m) {width:38px;text-align:center;font-size:11px;font-weight:600;color:rgba(240, 238, 255, 0.4);}.ss-cal-grid.svelte-xf8i9m {display:grid;grid-template-columns:repeat(7, 1fr);}.ss-day.svelte-xf8i9m {height:38px;width:38px;cursor:pointer;border:1px solid transparent;border-radius:8px;background:none;font-family:inherit;font-size:13px;color:#f0eeff;}.ss-day.svelte-xf8i9m:hover:not(:disabled):not(.ss-day-empty) {background:rgba(255, 255, 255, 0.1);}.ss-day-today.svelte-xf8i9m {border-color:rgba(0, 245, 212, 0.5);}.ss-day-inrange.svelte-xf8i9m {background:rgba(0, 245, 212, 0.12);color:rgb(0, 245, 212);}.ss-day-edge.svelte-xf8i9m,
14
+ .ss-day-edge.svelte-xf8i9m:hover:not(:disabled) {background:rgb(0, 245, 212);border-color:rgb(0, 245, 212);color:#05040f;font-weight:600;}.ss-day-past.svelte-xf8i9m,
15
+ .ss-day.svelte-xf8i9m:disabled {color:rgba(240, 238, 255, 0.2);cursor:default;}.ss-day-empty.svelte-xf8i9m {cursor:default;}
16
+
17
+ /* ── Results dropdown ── */.ss-results.svelte-xf8i9m {position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%) translateY(-8px);width:min(760px, calc(100vw - 32px));max-width:calc(100vw - 32px);background:rgba(255, 255, 255, 0.07);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid rgba(255, 255, 255, 0.14);padding:20px;z-index:9000;opacity:0;pointer-events:none;transition:opacity 0.22s ease,
18
+ transform 0.22s ease;box-shadow:0 24px 64px rgba(0, 0, 0, 0.2);font-family:'Inter', sans-serif;}.ss-open.svelte-xf8i9m {opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto;}.ss-header.svelte-xf8i9m {font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:rgba(240, 238, 255, 0.35);margin-bottom:12px;padding:0 4px;
19
+ animation: svelte-xf8i9m-ss-row-in 0.25s ease both;}.ss-grid.svelte-xf8i9m {display:flex;flex-direction:column;gap:8px;}
20
+ @keyframes svelte-xf8i9m-ss-row-in {
21
+ from {
22
+ opacity: 0;
23
+ transform: translateY(10px);
24
+ }
25
+ to {
26
+ opacity: 1;
27
+ transform: translateY(0);
28
+ }
29
+ }.ss-card.svelte-xf8i9m {
30
+ animation: svelte-xf8i9m-ss-row-in 0.3s ease both;height:90px;border:1px solid rgba(255, 255, 255, 0.08);overflow:hidden;text-decoration:none;display:flex;align-items:stretch;transition:border-color 0.2s,
31
+ background 0.2s;background:rgba(255, 255, 255, 0.05);}.ss-card.svelte-xf8i9m:hover {border-color:rgba(0, 245, 212, 0.35);background:rgba(255, 255, 255, 0.1);}.ss-card-img.svelte-xf8i9m {width:120px;flex-shrink:0;overflow:hidden;}.ss-card-img.svelte-xf8i9m img:where(.svelte-xf8i9m) {width:100%;height:100%;object-fit:cover;object-position:center;display:block;transition:transform 0.4s ease;}.ss-card.svelte-xf8i9m:hover .ss-card-img:where(.svelte-xf8i9m) img:where(.svelte-xf8i9m) {transform:scale(1.05);}.ss-card-body.svelte-xf8i9m {flex:1;padding:0 20px;display:flex;align-items:center;gap:20px;}.ss-card-info.svelte-xf8i9m {flex:1;}.ss-card-name.svelte-xf8i9m {font-family:'Syne', sans-serif;font-weight:800;font-size:15px;color:#f0eeff;margin-bottom:3px;letter-spacing:-0.3px;}.ss-card-desc.svelte-xf8i9m {font-size:12px;color:rgba(240, 238, 255, 0.4);line-height:1.4;}.ss-card-rate.svelte-xf8i9m {font-size:18px;font-weight:700;color:#f0eeff;letter-spacing:-0.5px;text-align:right;}.ss-card-rate-sub.svelte-xf8i9m {font-size:11px;color:rgba(240, 238, 255, 0.4);margin-top:2px;text-align:right;}.ss-error.svelte-xf8i9m {font-size:13px;color:rgba(247, 37, 133, 0.8);text-align:center;padding:16px;margin:0;}.ss-none.svelte-xf8i9m {font-size:13px;color:rgba(240, 238, 255, 0.4);text-align:center;padding:16px;margin:0;}`};function O(e,n){v(n,!0),te(e,be);let d=S(n,`rooms`,23,()=>[]),w=S(n,`checkIn`,7,``),O=S(n,`checkOut`,7,``),k=S(n,`guests`,7,2),A=S(n,`currency`,7,`USD`),j=S(n,`appendDatesToHref`,7,!0),M=S(n,`searchStays`,7,void 0);function xe(e,t){n.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let N=e=>e?new Date(`${e}T00:00:00`).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`}):``,P=g(!1),F=ie(new Date),I=g(a(F.getFullYear())),L=g(a(F.getMonth())),Se=ae(),Ce=re(),we=g(!0),Te=s(()=>({y:u(I),m:u(L),cells:se(u(I),u(L),F,[])})),Ee=s(()=>{let e=u(L)===11?0:u(L)+1,t=u(L)===11?u(I)+1:u(I);return{y:t,m:e,cells:se(t,e,F,[])}}),R=g(void 0);function De(){let e=w()?new Date(`${w()}T00:00:00`):F;m(I,e.getFullYear(),!0),m(L,e.getMonth(),!0),m(we,typeof window<`u`?window.innerWidth>=768:!0,!0),m(P,!0)}function Oe(){u(L)===0?(m(L,11),i(I,-1)):i(L,-1)}function ke(){u(L)===11?(m(L,0),i(I)):i(L)}function Ae(e){!w()||w()&&O()?(w(e),O(``)):e>=w()?(O(e),m(P,!1),je()):(w(e),O(``)),xe(`dates-change`,{checkIn:w(),checkOut:O()})}let z=g(!1),B=g(!1),V=g(!1),H=g(a([])),U=g(`idle`),W=g(0),G=null;async function je(){if(!(!w()||!O()||!M())){m(W,Math.round((new Date(O()).getTime()-new Date(w()).getTime())/864e5),!0),m(z,!0),m(B,!1),G&&clearTimeout(G),m(V,!1),m(H,[],!0);try{let e=await M()(w(),O(),k()),t=new Map(d().map(e=>[e.roomTypeId,e])),n=(Array.isArray(e)?e:[]).map(e=>({res:e,room:t.get(e.room_type_id)})).filter(e=>!!e.room);n.length===0?m(U,`none`):(m(H,n.map(({res:e,room:t})=>{let n=t.href??`#`;return j()&&t.href&&(n=`${t.href}${t.href.includes(`?`)?`&`:`?`}check_in=${w()}&check_out=${O()}`),{name:t.name,description:t.description??e.description??``,image:t.image,href:n,total:(parseFloat(String(e.from_rate??0))*u(W)).toLocaleString(`en-US`,{minimumFractionDigits:0})}}),!0),m(U,`ok`),m(B,!0),G=setTimeout(()=>m(B,!1),1800)),m(V,!0),xe(`search-results`,{checkIn:w(),checkOut:O(),guests:k(),count:u(H).length})}catch{m(U,`error`),m(V,!0)}finally{m(z,!1)}}}l(()=>{if(typeof document>`u`||!u(P)&&!u(V))return;let e=e=>{u(R)&&!e.composedPath().includes(u(R))&&(m(P,!1),m(V,!1))},t=e=>{e.key===`Escape`&&(m(P,!1),m(V,!1))};return document.addEventListener(`click`,e,!0),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e,!0),document.removeEventListener(`keydown`,t)}});let Me=e=>w()&&O()&&e>w()&&e<O();var Ne={get rooms(){return d()},set rooms(e=[]){d(e),c()},get checkIn(){return w()},set checkIn(e=``){w(e),c()},get checkOut(){return O()},set checkOut(e=``){O(e),c()},get guests(){return k()},set guests(e=2){k(e),c()},get currency(){return A()},set currency(e=`USD`){A(e),c()},get appendDatesToHref(){return j()},set appendDatesToHref(e=!0){j(e),c()},get searchStays(){return M()},set searchStays(e=void 0){M(e),c()}},K=ye(),q=D(K);let Pe;var J=D(q),Y=h(D(J),2);let Fe;var Ie=D(Y,!0);y(Y),y(J);var X=h(J,2),Z=h(D(X),2);let Le;var Re=D(Z,!0);y(Z),y(X),y(q);var Q=h(q,2);let ze;var Be=D(Q),Ve=e=>{var t=ce();p(e,t)},He=e=>{var t=le();p(e,t)};f(Be,e=>{u(z)?e(Ve):u(B)&&e(He,1)}),y(Q);var Ue=h(Q,2),We=e=>{var n=me(),i=D(n),a=h(i,2),s=h(a,2);E(s,21,()=>u(we)?[u(Te),u(Ee)]:[u(Te)],e=>e.y*12+e.m,(e,n)=>{var i=pe(),a=D(i),s=D(a);y(a);var c=h(a,2);E(c,20,()=>Ce,e=>e,(e,t)=>{var n=ue(),r=D(n,!0);y(n),o(()=>T(r,t)),p(e,n)}),y(c);var l=h(c,2);E(l,21,()=>u(n).cells,e=>e.iso,(e,n)=>{var i=r(),a=t(i),s=e=>{var t=de();let r;var i=D(t,!0);y(t),o(e=>{r=b(t,1,`ss-day svelte-xf8i9m`,null,r,e),t.disabled=u(n).isPast,T(i,u(n).dayNumber)},[()=>({"ss-day-past":u(n).isPast,"ss-day-today":u(n).iso===oe(F),"ss-day-edge":u(n).iso===w()||u(n).iso===O(),"ss-day-inrange":Me(u(n).iso)})]),x(`click`,t,()=>Ae(u(n).iso)),p(e,t)},c=e=>{var t=fe();p(e,t)};f(a,e=>{u(n).inMonth?e(s):e(c,-1)}),p(e,i)}),y(l),y(i),o(()=>T(s,`${Se[u(n).m]??``} ${u(n).y??``}`)),p(e,i)}),y(s),y(n),x(`click`,i,Oe),x(`click`,a,ke),p(e,n)};f(Ue,e=>{u(P)&&e(We)});var $=h(Ue,2);let Ge;var Ke=D($),qe=e=>{var t=he();p(e,t)},Je=e=>{var t=ge();p(e,t)},Ye=e=>{var n=ve(),r=t(n),i=D(r);y(r);var a=h(r,2);E(a,23,()=>u(H),e=>e.name,(e,t,n)=>{var r=_e(),i=D(r),a=D(i);y(i);var s=h(i,2),c=D(s),l=D(c),d=D(l,!0);y(l);var f=h(l,2),m=D(f,!0);y(f),y(c);var g=h(c,2),_=D(g),v=D(_);y(_);var b=h(_,2),te=D(b);y(b),y(g),y(s),y(r),o(()=>{C(r,`href`,u(t).href),ee(r,`animation-delay:${u(n)*80}ms`),C(a,`src`,u(t).image),C(a,`alt`,u(t).name),T(d,u(t).name),T(m,u(t).description),T(v,`$${u(t).total??``}`),T(te,`total · ${u(W)??``} night${u(W)===1?``:`s`} · ${A()??``}`)}),p(e,r)}),y(a),o(()=>T(i,`Available for ${u(W)??``} night${u(W)===1?``:`s`}`)),p(e,n)};return f(Ke,e=>{u(U)===`error`?e(qe):u(U)===`none`?e(Je,1):u(U)===`ok`&&e(Ye,2)}),y($),y(K),ne(K,e=>m(R,e),()=>u(R)),o((e,t)=>{Pe=b(q,1,`ss-bar svelte-xf8i9m`,null,Pe,{"ss-loading":u(z)}),Fe=b(Y,1,`ss-value svelte-xf8i9m`,null,Fe,{"ss-value-set":!!w()}),T(Ie,e),Le=b(Z,1,`ss-value svelte-xf8i9m`,null,Le,{"ss-value-set":!!O()}),T(Re,t),ze=b(Q,1,`ss-status svelte-xf8i9m`,null,ze,{"ss-status-on":u(z)||u(B)}),Ge=b($,1,`ss-results svelte-xf8i9m`,null,Ge,{"ss-open":u(V)})},[()=>w()?N(w()):`Add date`,()=>O()?N(O()):`Add date`]),x(`click`,J,De),x(`click`,X,De),p(e,K),_(Ne)}e([`click`]),customElements.define(`stay-search`,w(O,{rooms:{attribute:`rooms`,type:`Object`},checkIn:{attribute:`check-in`,type:`String`},checkOut:{attribute:`check-out`,type:`String`},guests:{attribute:`guests`,type:`Number`},currency:{attribute:`currency`,type:`String`},appendDatesToHref:{attribute:`append-dates-to-href`,type:`Boolean`},searchStays:{}},[],[],{mode:`open`}));
@@ -0,0 +1,38 @@
1
+ import{A as e,B as t,D as n,E as r,I as i,J as a,K as o,L as s,M as c,N as l,S as u,T as d,U as f,V as p,W as m,X as h,Z as g,b as _,et as v,f as y,h as b,j as x,k as S,n as C,nt as ee,p as te,r as w,s as T,t as E,w as D,y as O,z as k}from"./chunks/client-BDk8LqGN.js";import{t as A}from"./chunks/gsap-DWxn8li7.js";var j=n(`<span></span>`),M=n(`<p class="status svelte-1s2suwt"> </p>`),ne=n(`<span class="score-number svelte-1s2suwt"> </span> <span class="score-stars svelte-1s2suwt" role="img"><!></span>`,1),re=n(`<a target="_blank" rel="noopener noreferrer" class="svelte-1s2suwt"> </a>`),ie=n(`<a target="_blank" rel="noopener noreferrer"> </a>`),ae=n(`<img class="card-photo svelte-1s2suwt" alt="" loading="lazy"/>`),oe=n(`<div class="card-photos svelte-1s2suwt"></div>`),se=n(`<img class="card-avatar svelte-1s2suwt" alt="" loading="lazy"/>`),ce=n(`<span class="card-time svelte-1s2suwt"> </span>`),le=n(`<li class="card svelte-1s2suwt"><div class="card-stars svelte-1s2suwt" role="img"><!></div> <blockquote> </blockquote> <!> <footer class="card-foot svelte-1s2suwt"><span class="card-author svelte-1s2suwt"><!> </span> <!></footer></li>`),ue=n(`<ul></ul>`),de=n(`<a class="see-all svelte-1s2suwt" target="_blank" rel="noopener noreferrer"> </a>`),fe=n(`<span class="svelte-1s2suwt"></span>`),pe=n(`<div class="slider-nav svelte-1s2suwt"><button class="nav-btn svelte-1s2suwt" type="button" aria-label="Previous reviews"><span class="nav-btn-glyph svelte-1s2suwt">‹</span></button> <button class="nav-btn svelte-1s2suwt" type="button" aria-label="Next reviews"><span class="nav-btn-glyph svelte-1s2suwt">›</span></button></div>`),me=n(`<div class="foot svelte-1s2suwt"><!> <!></div>`),he=n(`<div class="header svelte-1s2suwt"><div class="score svelte-1s2suwt"><!> <span class="score-count svelte-1s2suwt"><svg class="ta-mark svelte-1s2suwt" viewBox="0 0 132 86" aria-hidden="true"><path fill="#000" d="M44.508 49.657c0 6.436-5.218 11.654-11.653 11.654s-11.653-5.218-11.653-11.654c0-6.435 5.218-11.654 11.653-11.654s11.653 5.218 11.653 11.654m54.028-11.654c-6.435 0-11.653 5.218-11.653 11.654S92.1 61.311 98.536 61.311s11.653-5.218 11.653-11.654c-.002-6.432-5.215-11.647-11.647-11.65zm32.855 11.654c0 18.136-14.715 32.84-32.855 32.84a32.7 32.7 0 0 1-22.31-8.74L65.71 85.196 55.19 73.744a32.7 32.7 0 0 1-22.317 8.754C14.746 82.497.036 67.792.036 49.656a32.75 32.75 0 0 1 10.71-24.27L0 13.693h23.876c25.263-17.195 58.467-17.195 83.73 0h23.814l-10.745 11.692a32.75 32.75 0 0 1 10.716 24.271m-76.305 0c0-12.274-9.95-22.225-22.223-22.225S10.64 37.383 10.64 49.657s9.95 22.225 22.223 22.225 22.222-9.948 22.223-22.222zm35.284-33.18a64.13 64.13 0 0 0-49.326 0c14.03 5.37 24.667 17.915 24.667 32.54 0-14.624 10.635-27.17 24.66-32.538zm30.395 33.18c0-12.274-9.95-22.225-22.223-22.225s-22.223 9.95-22.223 22.224S86.268 71.88 98.54 71.88s22.223-9.95 22.223-22.225" class="svelte-1s2suwt"></path></svg> <!></span></div> <!></div> <!> <!>`,1),N={hash:`svelte-1s2suwt`,code:`:host {display:block;font-family:var(--ta-font-family, inherit);color:var(--ta-color, inherit);}:host,
2
+ :host .svelte-1s2suwt {box-sizing:border-box;}.status.svelte-1s2suwt {margin:0;font-size:var(--ta-status-font-size, 14px);color:var(--ta-muted, rgba(5, 4, 15, 0.55));}.header.svelte-1s2suwt {display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:var(--ta-header-gap, 28px);}.score.svelte-1s2suwt {display:flex;align-items:baseline;gap:12px;}.score-number.svelte-1s2suwt {font-family:var(--ta-heading-font-family, var(--ta-font-family, inherit));font-size:var(--ta-score-font-size, 44px);font-weight:var(--ta-score-font-weight, 800);line-height:1;color:var(--ta-accent, #050508);}.score-stars.svelte-1s2suwt {display:inline-flex;align-items:center;gap:4px;color:var(--ta-star-color, var(--ta-accent, #f5b301));}.score-stars.svelte-1s2suwt .ta-dot:where(.svelte-1s2suwt) {width:var(--ta-star-size, 18px);height:var(--ta-star-size, 18px);}.score-count.svelte-1s2suwt,
3
+ .score-count.svelte-1s2suwt a:where(.svelte-1s2suwt) {font-size:14px;color:var(--ta-muted, rgba(5, 4, 15, 0.55));}.score-count.svelte-1s2suwt {display:inline-flex;align-items:center;gap:7px;}.score-count.svelte-1s2suwt a:where(.svelte-1s2suwt) {text-decoration:underline;text-underline-offset:2px;}
4
+
5
+ /* The Tripadvisor owl mark, in solid black -- fixed ink, not themeable
6
+ * (same non-themeable-attribution treatment as GoogleReviews' .g-mark,
7
+ * just monochrome instead of full-colour). */.ta-mark.svelte-1s2suwt {width:var(--ta-mark-size, 24px);height:auto;flex-shrink:0;}.cta.svelte-1s2suwt {position:relative;display:inline-flex;align-items:center;height:var(--ta-cta-height, 44px);padding:0 22px;border:var(--ta-cta-border, none);border-radius:var(--ta-cta-radius, 8px);background:var(--ta-cta-bg, var(--ta-accent, #050508));color:var(--ta-cta-color, #fff);font-size:13px;font-weight:600;letter-spacing:0.5px;text-decoration:none;box-sizing:border-box;overflow:hidden;}.cta.svelte-1s2suwt:hover {opacity:0.88;}
8
+
9
+ /* Opt-in (ctaShimmer prop): a soft light band sweeps across the CTA on
10
+ hover and eases back out on leave, instead of the plain opacity dip
11
+ above. A transition on \`left\` (not a keyframe loop) so leaving
12
+ mid-sweep reverses smoothly from wherever it stopped. Same treatment
13
+ as GoogleReviews.svelte's .cta--shimmer -- keep the two in sync. */.cta--shimmer.svelte-1s2suwt:hover {opacity:1;}.cta--shimmer.svelte-1s2suwt::after {content:'';position:absolute;top:0;left:-75%;width:50%;height:100%;background:linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.55), transparent);transform:skewX(-20deg);transition:left 0.4s ease-in-out;}.cta--shimmer.svelte-1s2suwt:hover::after {left:125%;}
14
+
15
+ @media (prefers-reduced-motion: reduce) {.cta--shimmer.svelte-1s2suwt::after {transition:none;display:none;}
16
+ }.cards.svelte-1s2suwt {list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill, minmax(var(--ta-card-min-width, 260px), 1fr));gap:var(--ta-card-gap, 16px);}.card.svelte-1s2suwt {display:flex;flex-direction:column;gap:12px;padding:var(--ta-card-padding, 22px);background:var(--ta-card-bg, rgba(5, 4, 15, 0.03));border:1px solid var(--ta-card-border, rgba(5, 4, 15, 0.08));border-radius:var(--ta-card-radius, 12px);}
17
+
18
+ /* Slider variant: the same cards on a scroll-snap track. */.cards.track.svelte-1s2suwt {display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;}.cards.track.svelte-1s2suwt::-webkit-scrollbar {display:none;}
19
+
20
+ /* Whole cards only: each slide is an exact fraction of the track, so the
21
+ * container edge never clips a card. --ta-visible-cards sets how many. */.cards.track.svelte-1s2suwt .card:where(.svelte-1s2suwt) {flex:0 0
22
+ calc(
23
+ (100% - (var(--ta-visible-cards, 3) - 1) * var(--ta-card-gap, 16px)) /
24
+ var(--ta-visible-cards, 3)
25
+ );scroll-snap-align:start;}
26
+
27
+ /* Footer row: "see all" left, slider arrows right. */.foot.svelte-1s2suwt {display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:var(--ta-header-gap, 28px);}.slider-nav.svelte-1s2suwt {display:flex;gap:10px;}.nav-btn.svelte-1s2suwt {position:relative;width:var(--ta-nav-size, 38px);height:var(--ta-nav-size, 38px);border-radius:50%;border:1px solid var(--ta-card-border, rgba(5, 4, 15, 0.15));background:transparent;color:var(--ta-accent, inherit);font-size:20px;line-height:1;cursor:pointer;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;transition:color 0.3s ease, border-color 0.3s ease;}.nav-btn.svelte-1s2suwt::before {content:'';position:absolute;inset:0;border-radius:50%;background:var(--ta-nav-hover-bg, var(--ta-cta-bg, var(--ta-accent, #1a1a18)));transform:scale(0);transition:transform 0.3s ease;}.nav-btn.svelte-1s2suwt:hover:not(:disabled)::before {transform:scale(1);}.nav-btn.svelte-1s2suwt:hover:not(:disabled) {color:var(--ta-nav-hover-text, var(--ta-cta-color, #fff));border-color:var(--ta-nav-hover-bg, var(--ta-cta-bg, var(--ta-accent, #1a1a18)));}.nav-btn-glyph.svelte-1s2suwt {position:relative;z-index:1;}.nav-btn.svelte-1s2suwt:disabled {opacity:0.35;cursor:default;}.card-stars.svelte-1s2suwt {display:inline-flex;align-items:center;gap:4px;color:var(--ta-star-color, var(--ta-accent, #f5b301));}.card-stars.svelte-1s2suwt .ta-dot:where(.svelte-1s2suwt) {width:var(--ta-star-size, 13px);height:var(--ta-star-size, 13px);}
28
+
29
+ /* Shared by both contexts above -- filled dots are a solid disc, empty
30
+ ones just the ring, both drawn (not relying on a glyph's own weight/
31
+ roundness for the border look). */.ta-dot.svelte-1s2suwt {display:inline-block;flex-shrink:0;border-radius:50%;border:1.5px solid currentColor;box-sizing:border-box;}.ta-dot-filled.svelte-1s2suwt {background:currentColor;}.card-text.svelte-1s2suwt {margin:0;font-size:var(--ta-review-font-size, 14px);line-height:1.65;font-style:var(--ta-review-font-style, italic);display:-webkit-box;-webkit-line-clamp:var(--ta-review-clamp, 6);-webkit-box-orient:vertical;overflow:hidden;}
32
+
33
+ /* Less room to quote when photos are already claiming card space. */.card-text--with-photos.svelte-1s2suwt {-webkit-line-clamp:var(--ta-review-clamp-with-photos, 3);}
34
+
35
+ /* Grid of 4 fixed columns rather than flex, so each photo is always
36
+ * "however wide a quarter of the card is" -- 1 photo doesn't blow up to
37
+ * fill the row, and a 5th+ photo (capped at 4 above) never has a column
38
+ * to land in. */.card-photos.svelte-1s2suwt {display:grid;grid-template-columns:repeat(4, 1fr);gap:8px;}.card-photo.svelte-1s2suwt {width:100%;aspect-ratio:1;border-radius:var(--ta-review-photo-radius, 8px);object-fit:cover;}.card-foot.svelte-1s2suwt {margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;}.card-author.svelte-1s2suwt {display:inline-flex;align-items:center;gap:8px;font-weight:600;}.card-avatar.svelte-1s2suwt {width:24px;height:24px;border-radius:50%;object-fit:cover;}.card-time.svelte-1s2suwt {color:var(--ta-muted, rgba(5, 4, 15, 0.55));}.see-all.svelte-1s2suwt {display:inline-block;font-size:13px;color:var(--ta-accent, inherit);text-decoration:underline;text-underline-offset:3px;}`};function P(e,n){g(n,!0),b(e,N);let E=(e,n=ee)=>{let o=a(()=>ye(n()));var s=r(),c=t(s);O(c,16,()=>({length:5}),_,(e,t,n)=>{var r=j();let a;i(()=>a=y(r,1,`ta-dot svelte-1s2suwt`,null,a,{"ta-dot-filled":n<l(o)})),d(e,r)}),d(e,s)},P=C(n,`variant`,7,`grid`),F=C(n,`autoAdvance`,7,0),I=C(n,`maxReviews`,7,5),L=C(n,`ctaShimmer`,7,!1),R=C(n,`strings`,23,()=>({})),z=C(n,`fetchReviews`,7,void 0),B=m(null),V=m(!0),H=m(!1),U=m(!1);function W(){if(l(B)){if(l(U)){f(V,!1),f(H,!1);let e=l(B).scrollWidth/2;l(B).scrollLeft>=e&&(l(B).scrollLeft-=e);return}f(V,l(B).scrollLeft<=4),f(H,l(B).scrollLeft+l(B).clientWidth>=l(B).scrollWidth-4)}}function G(e){if(!l(B))return;let t=(l(B).querySelector(`.card`)?.offsetWidth??300)+16;if(l(U)){let n=l(B).scrollWidth/2;e===1&&l(B).scrollLeft>=n-t/2&&(l(B).scrollLeft-=n),e===-1&&l(B).scrollLeft<=t/2&&(l(B).scrollLeft+=n)}l(B).scrollBy({left:e*t,behavior:`smooth`})}let K=m(void 0),q=m(void 0);function J(e){e&&A.fromTo(e,{scale:.82},{scale:1,duration:.4,ease:`elastic.out(1, 0.5)`})}function ge(){J(l(K)),G(-1)}function _e(){J(l(q)),G(1)}s(()=>{l($),l(B),requestAnimationFrame(()=>{l(B)&&!l(U)&&l(B).scrollWidth>l(B).clientWidth+8&&f(U,!0),W()})});let Y=m(!1);s(()=>{if(P()!==`slider`||!F()||F()<=0||l(Q)!==`ready`||matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let e=setInterval(()=>{l(Y)||document.visibilityState===`hidden`||!l(B)||(!l(U)&&l(H)?l(B).scrollTo({left:0,behavior:`smooth`}):G(1))},F()*1e3);return()=>clearInterval(e)});let X=a(()=>({reviewsLabel:`Tripadvisor reviews`,ctaLabel:`Review us on Tripadvisor`,seeAllLabel:`See all reviews`,loadingLabel:`Loading reviews…`,errorLabel:`Reviews are unavailable right now.`,...R()})),Z=m(null),Q=m(`idle`);function ve(e,t){n.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}s(()=>{let e=z();!e||l(Q)===`ready`||l(Q)===`loading`||(f(Q,`loading`),e().then(e=>{f(Z,e,!0),f(Q,`ready`),ve(`loaded`,{rating:e.rating,count:e.count})}).catch(()=>{f(Q,`error`)}))});let $=a(()=>(l(Z)?.reviews??[]).filter(e=>e.text?.trim()).slice(0,I()));function ye(e){return Math.max(0,Math.min(5,Math.round(e)))}let be=a(()=>P()===`slider`&&l(U)?[...l($),...l($)]:l($));var xe={get variant(){return P()},set variant(e=`grid`){P(e),o()},get autoAdvance(){return F()},set autoAdvance(e=0){F(e),o()},get maxReviews(){return I()},set maxReviews(e=5){I(e),o()},get ctaShimmer(){return L()},set ctaShimmer(e=!1){L(e),o()},get strings(){return R()},set strings(e={}){R(e),o()},get fetchReviews(){return z()},set fetchReviews(e=void 0){z(e),o()}},Se=r(),Ce=t(Se),we=e=>{var t=M(),n=k(t,!0);v(t),i(()=>D(n,l(X).loadingLabel)),d(e,t)},Te=e=>{var t=M(),n=k(t,!0);v(t),i(()=>D(n,l(X).errorLabel)),d(e,t)},Ee=e=>{var n=he(),r=t(n),a=k(r),o=k(a),s=e=>{var n=ne(),r=t(n),a=k(r,!0);v(r);var o=p(r,2),s=k(o);E(s,()=>l(Z).rating),v(o),i((e,t)=>{D(a,e),T(o,`aria-label`,t)},[()=>l(Z).rating.toFixed(1),()=>`${l(Z).rating.toFixed(1)} out of 5`]),d(e,n)};u(o,e=>{l(Z).rating!=null&&e(s)});var m=p(o,2),h=p(k(m),2),g=e=>{var t=re(),n=k(t);v(t),i(()=>{T(t,`href`,l(Z).place_url),D(n,`${l(Z).count??``} ${l(X).reviewsLabel??``}`)}),d(e,t)},b=e=>{var t=S();i(()=>D(t,`${l(Z).count??``} ${l(X).reviewsLabel??``}`)),d(e,t)};u(h,e=>{l(Z).place_url?e(g):e(b,-1)}),v(m),v(a);var C=p(a,2),ee=e=>{var t=ie();let n;var r=k(t,!0);v(t),i(()=>{n=y(t,1,`cta svelte-1s2suwt`,null,n,{"cta--shimmer":L()}),T(t,`href`,l(Z).write_review_url),D(r,l(X).ctaLabel)}),d(e,t)};u(C,e=>{l(Z).write_review_url&&e(ee)}),v(r);var A=p(r,2),j=e=>{var t=ue();O(t,21,()=>l(be),_,(e,t)=>{var n=le(),r=k(n),a=k(r);E(a,()=>l(t).rating),v(r);var o=p(r,2);let s;var c=k(o,!0);v(o);var f=p(o,2),m=e=>{var n=oe();O(n,20,()=>l(t).photos.slice(0,4),e=>e,(e,t)=>{var n=ae();i(()=>T(n,`src`,t)),d(e,n)}),v(n),d(e,n)};u(f,e=>{l(t).photos?.length&&e(m)});var h=p(f,2),g=k(h),_=k(g),b=e=>{var n=se();i(()=>T(n,`src`,l(t).author_photo)),d(e,n)};u(_,e=>{l(t).author_photo&&e(b)});var x=p(_);v(g);var S=p(g,2),C=e=>{var n=ce(),r=k(n,!0);v(n),i(()=>D(r,l(t).relative_time)),d(e,n)};u(S,e=>{l(t).relative_time&&e(C)}),v(h),v(n),i(()=>{T(r,`aria-label`,`${l(t).rating} out of 5`),s=y(o,1,`card-text svelte-1s2suwt`,null,s,{"card-text--with-photos":!!l(t).photos?.length}),D(c,l(t).text),D(x,` ${l(t).author??``}`)}),d(e,n)}),v(t),w(t,e=>f(B,e),()=>l(B)),i(()=>y(t,1,te(P()===`slider`?`cards track`:`cards`),`svelte-1s2suwt`)),c(`scroll`,t,W),c(`mouseenter`,t,()=>f(Y,!0)),c(`mouseleave`,t,()=>f(Y,!1)),x(`focusin`,t,()=>f(Y,!0)),x(`focusout`,t,()=>f(Y,!1)),d(e,t)};u(A,e=>{l($).length&&e(j)});var M=p(A,2),N=e=>{var t=me(),n=k(t),r=e=>{var t=de(),n=k(t,!0);v(t),i(()=>{T(t,`href`,l(Z).place_url),D(n,l(X).seeAllLabel)}),d(e,t)},a=e=>{var t=fe();d(e,t)};u(n,e=>{l(Z).place_url?e(r):e(a,-1)});var o=p(n,2),s=e=>{var t=pe(),n=k(t);w(n,e=>f(K,e),()=>l(K));var r=p(n,2);w(r,e=>f(q,e),()=>l(q)),v(t),i(()=>{n.disabled=l(V),r.disabled=l(H)}),x(`click`,n,ge),x(`click`,r,_e),d(e,t)};u(o,e=>{l($).length&&P()===`slider`&&e(s)}),v(t),d(e,t)};u(M,e=>{(l(Z).place_url||l($).length&&P()===`slider`)&&e(N)}),d(e,n)};return u(Ce,e=>{l(Q)===`loading`||l(Q)===`idle`?e(we):l(Q)===`error`?e(Te,1):l(Z)&&e(Ee,2)}),d(e,Se),h(xe)}e([`focusin`,`focusout`,`click`]),customElements.define(`tripadvisor-reviews`,E(P,{variant:{attribute:`variant`,type:`String`},autoAdvance:{attribute:`auto-advance`,type:`Number`},maxReviews:{attribute:`max-reviews`,type:`Number`},ctaShimmer:{attribute:`cta-shimmer`,type:`Boolean`},strings:{type:`Object`},fetchReviews:{type:`Object`}},[],[],{mode:`open`}));