PageSourceSearch

https://astoriaboracay.com/blogs

html astoriaboracay.com collected 2026-09-25 20:58:39 UTC 277,460 bytes, 6,227 lines download raw bytes

1<!--
2                                                                                          █████╗ ██╗  ██╗██████╗       ██████╗ ███╗   ███╗
3                                                                                         ██╔══██╗██║  ██║██╔══██╗      ██╔══██╗████╗ ████║   
4                                                                                         ███████║███████║██████╔╝      ██║  ██║██╔████╔██║
5                                                                                         ██╔══██║██╔══██║██╔══██╗      ██║  ██║██║╚██╔╝██║
6                                                                                         ██║  ██║██║  ██║██║  ██║      ██████╔╝██║ ╚═╝ ██║
7                                                                                         ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝      ╚═════╝ ╚═╝     ╚═╝
8
9                                                                                     Developed by The Astoria Group Marketing Team (DTM - JBC)
10                                                                                                               (App v2.0.8)
11
12                                                                                            ######################################################
13                                                                                            #   (\_/)
14                                                                                            #   ( •_•)  Cookie you want?
15                                                                                            #  / >🍪    
16                                                                                            ######################################################
17-->
18<!DOCTYPE html>
19<html lang="en" class="scroll-smooth">
20<head>
21  <!-- Google Tag Manager -->
22<script>
vendor: 327 bytes, lines 22-26
22(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
23new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
24j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
25'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
26})(window,document,'script','dataLayer','
26GTM-PT73L2P
vendor: 3 bytes, line 26
26');
26</script>
26
27<!-- End Google Tag Manager -->
28    <meta charset="utf-8">
29  <meta name="viewport" content="width=device-width, initial-scale=1">
30  <meta name="csrf-token" content="TCZLcTRset2y9DYhWgvpzmJy8Bu4PWjC4RHQoYJA">
31  <meta name="google" content="notranslate"> 
32
33  <title>Blogs | Astoria Boracay, Station 1</title>
34  <link rel="icon" href="https://astoriaboracay.com/images/favicon.ico"/>
35
36  <meta name="description" content="Read the latest blogs from Astoria Boracay Station 1 with travel tips, island guides, and updates.">
37  <link rel="canonical" href="https://astoriaboracay.com/blogs">
38
39  
40  <meta property="og:type" content="website">
41  <meta property="og:site_name" content="Astoria Boracay">
42  <meta property="og:title" content="Blogs | Astoria Boracay, Station 1">
43  <meta property="og:description" content="Read the latest blogs from Astoria Boracay Station 1 with travel tips, island guides, and updates.">
44  <meta property="og:url" content="https://astoriaboracay.com/blogs">
45  <meta property="og:image" content="https://astoriaboracay.com/images/blog-header.webp">
46  <meta property="og:image:width" content="1200">
47  <meta property="og:image:height" content="630">
48
49  
50  <meta name="twitter:card" content="summary_large_image">
51  <meta name="twitter:title" content="Blogs | Astoria Boracay, Station 1">
52  <meta name="twitter:description" content="Read the latest blogs from Astoria Boracay Station 1 with travel tips, island guides, and updates.">
53  <meta name="twitter:image" content="https://astoriaboracay.com/images/blog-header.webp">
54
55
56
57      
57<script type="application/ld+json">
58      {
59    "@context": "https://schema.org",
60    "@graph": [
61        {
62            "@type": [
63                "Hotel",
64                "Organization"
65            ],
66            "@id": "https://astoriaboracay.com#organization",
67            "name": "Astoria Boracay",
68            "description": "Read the latest blogs from Astoria Boracay Station 1 with travel tips, island guides, and updates.",
69            "url": "https://astoriaboracay.com",
70            "logo": {
71                "@type": "ImageObject",
72                "@id": "https://astoriaboracay.com#logo",
73                "url": "https://astoriaboracay.com/images/ab1-logo-square.webp"
74            },
75            "image": {
76                "@type": "ImageObject",
77                "@id": "https://astoriaboracay.com#primaryimage",
78                "url": "https://astoriaboracay.com/images/ab1-logo-square.webp"
79            }
80        },
81        {
82            "@type": "WebSite",
83            "@id": "https://astoriaboracay.com#website",
84            "url": "https://astoriaboracay.com",
85            "name": "Astoria Boracay",
86            "description": "Read the latest blogs from Astoria Boracay Station 1 with travel tips, island guides, and updates.",
87            "inLanguage": "en-PH",
88            "publisher": {
89                "@id": "https://astoriaboracay.com#organization"
90            }
91        },
92        {
93            "@type": "WebPage",
94            "@id": "https://astoriaboracay.com/blogs#webpage",
95            "url": "https://astoriaboracay.com/blogs",
96            "name": "Blogs | Astoria Boracay, Station 1",
97            "description": "Read the latest blogs from Astoria Boracay Station 1 with travel tips, island guides, and updates.",
98            "inLanguage": "en-PH",
99            "isPartOf": {
100                "@id": "https://astoriaboracay.com#website"
101            },
102            "about": {
103                "@id": "https://astoriaboracay.com#organization"
104            },
105            "primaryImageOfPage": {
106                "@id": "https://astoriaboracay.com#primaryimage"
107            }
108        }
109    ]
110}
111    </script>
111
112  
113  
114
115  
116  <link rel="preload" as="style" href="https://astoriaboracay.com/build/assets/app-BYJjLflU.css" /><link rel="modulepreload" as="script" href="https://astoriaboracay.com/build/assets/app-CE-q-u3R.js" /><link rel="stylesheet" href="https://astoriaboracay.com/build/assets/app-BYJjLflU.css" />
116<script type="module" src="https://astoriaboracay.com/build/assets/app-CE-q-u3R.js"></script>
116
117  
118  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" crossorigin="anonymous" referrerpolicy="no-referrer" />
119  <link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
120  
121
122  <style>
123    /* Global font */
124    html, body { font-family: var(--ahr-font); }
125    [x-cloak]{ display:none!important; }
126
127    /* Hide Google Website Translator banner (cover both old & new selectors) */
128    iframe.goog-te-banner-frame { display:none !important; }
129    .goog-te-banner-frame { display:none !important; }
130    .goog-te-banner { display:none !important; }
131    .VIpgJd-ZVi9od-ORHb-OEVmcd { display:none !important; } /* new banner container */
132    .VIpgJd-ZVi9od-aZ2wEe-wOHMyf { display:none !important; } /* top-offset shim */
133    .VIpgJd-ZVi9od-xl07Ob-OEVmcd { display:none !important; } /* overlay holder */
134
135    /* Undo any injected top offset on body */
136    body { top: 0 !important; position: static !important; }
137    body[style*="top:"] { top:0 !important; }
138
139    /* Keep the widget functional but invisible */
140    #google_translate_element { position:fixed; left:-9999px; bottom:-9999px; }
141    .goog-logo-link, .goog-te-gadget span { display:none !important; }
142    .goog-te-gadget { height:0 !important; overflow:hidden !important; }
143
144    /* Optional: hide tooltip + highlights */
145    #goog-gt-tt { display:none !important; }
146    .goog-text-highlight { background:none !important; box-shadow:none !important; }
147  </style>
148
149
150
151
152
153
154<link rel="alternate icon" href="https://astoriaboracay.com/favicon.ico">
155</head>
156<body class="antialiased">
157  <!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 157-158
157
158<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
158GTM-PT73L2P
vendor: 83 bytes, lines 158-159
158"
159height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
160<!-- End Google Tag Manager (noscript) -->
161<style>
162    [x-cloak]{display:none!important}
163
164    @keyframes nbTabFloat {
165      0%, 100% { transform: translateY(0); }
166      50%      { transform: translateY(-1px); }
167    }
168
169    .nb-tab-float {
170      animation: nbTabFloat 3.2s ease-in-out infinite;
171      -webkit-backface-visibility:hidden;
172      backface-visibility:hidden;
173    }
174
175    .nb-vert-text{
176      writing-mode: vertical-rl;
177      text-orientation: mixed;
178      transform: rotate(360deg);
179      letter-spacing: .18em;
180      display: inline-block;
181      line-height: 1;
182      white-space: nowrap;
183    }
184
185    .nb-room-link{
186      -webkit-transform:translateZ(0);
187      transform:translateZ(0);
188    }
189
190    .nb-room-image{
191      -webkit-transform:scale(1.01);
192      transform:scale(1.01);
193    }
194
195    .nb-room-desc{
196      display:-webkit-box;
197      -webkit-line-clamp:2;
198      -webkit-box-orient:vertical;
199      overflow:hidden;
200    }
201
202    @media (hover:hover) and (pointer:fine){
203      .nb-room-link:hover .nb-room-image{
204        -webkit-transform:scale(1.07);
205        transform:scale(1.07);
206      }
207    }
208
209    @media (prefers-reduced-motion: reduce){
210      .nb-tab-float{ animation: none !important; }
211      .nb-room-image{ transition:none !important; }
212    }
213
214    /* The body-level layer escapes transformed/clipped header and page wrappers. */
215    [data-nav-booking-layer]{
216      display:contents;
217      pointer-events:none;
218    }
219
220    [data-nav-booking-layer] > [data-nb-surface]{
221      pointer-events:auto;
222    }
223
224    /* Keep the tab at its normal level and the dialog above the header, even on exit. */
225    [data-nav-booking-layer] > [data-nb-surface="tab"]{
226      z-index:70 !important;
227    }
228
229    [data-nav-booking-layer] > [data-nb-surface="overlay"]{
230      z-index:2147483000 !important;
231    }
232
233    [data-nav-booking-layer] > [data-nb-surface="drawer"]{
234      z-index:2147483001 !important;
235    }
236
237    /* Hide immediately, including during Alpine's leave transitions. */
238    html.ahr-mobile-nav-open [data-nav-booking-layer],
239    html.ahr-mobile-open [data-nav-booking-layer],
240    body.ahr-mobile-nav-open [data-nav-booking-layer],
241    body.ahr-mobile-open [data-nav-booking-layer],
242    [data-nav-booking-layer][data-nb-menu-hidden="true"]{
243      display:none !important;
244      visibility:hidden !important;
245      pointer-events:none !important;
246    }
247  </style>
248
249
250<div
251  data-nav-booking-root
252  x-data="navBookingDrawerBoracay()"
253  x-cloak
254  @nav-booking-close.window="closeBookingPanel()"
255  data-nb-line="0.10"
256  data-nb-offset="0"
257  data-nb-hyst="190"
258  
259>
260
261  <template x-teleport="body">
262  <div
263    data-nav-booking-layer
264    :data-nb-menu-hidden="navMenuOpen ? 'true' : 'false'"
265    x-cloak
266  >
267  
268  <div
269    data-nb-surface="tab"
270    class="fixed left-0 top-1/2 -translate-y-1/2 z-[70]"
271    x-show="tabVisible && !showBooking && !navMenuOpen"
272    x-transition:enter="transition ease-out duration-250"
273    x-transition:enter-start="-translate-x-3 opacity-0"
274    x-transition:enter-end="translate-x-0 opacity-100"
275    x-transition:leave="transition ease-in duration-180"
276    x-transition:leave-start="translate-x-0 opacity-100"
277    x-transition:leave-end="-translate-x-3 opacity-0"
278    x-cloak
279  >
280    <button
281      type="button"
282      @click="openBookingPanel()"
283      class="nb-tab-float group relative inline-flex flex-col items-center justify-center gap-1
284             rounded-r-2xl bg-[#0047BB] text-white shadow-2xl backdrop-blur
285             w-3 lg:w-6 px-2 py-2
286             hover:bg-[#63666A] hover:text-white hover:border-black/10
287             transition-all duration-200 will-change-transform hover:-translate-y-0.5
288             focus:outline-none focus-visible:ring-2 focus-visible:ring-white/70"
289      aria-label="Book Now"
290      :aria-expanded="showBooking ? 'true' : 'false'"
291      aria-controls="nav-booking-drawer"
292    >
293      <span class="inline-flex h-3 w-3 items-center justify-center rounded-xl bg-white/15 group-hover:bg-white/20 transition">
294        <i class="fa-solid fa-calendar-check text-[9px] lg:text-xs"></i>
295      </span>
296
297      <span class="nb-vert-text font-semibold uppercase text-[7px] lg:text-xs leading-none">
298        BOOK NOW
299      </span>
300
301      <span
302        class="pointer-events-none absolute inset-0 rounded-r-2xl opacity-0 group-hover:opacity-10 transition-opacity duration-200"
303        style="background: radial-gradient(220px 220px at 50% 35%, #fff 0, transparent 70%);"
304      ></span>
305    </button>
306  </div>
307
308  
309  <div
310    data-nb-surface="overlay"
311    x-show="showBooking && !navMenuOpen"
312    x-transition.opacity.duration.200ms
313    class="fixed inset-0 z-[75] bg-black/70 backdrop-blur-[2px]"
314    @click="closeBookingPanel()"
315    @keydown.escape.window="closeBookingPanel()"
316    x-cloak
317  ></div>
318
319  
320  <aside
321    data-nb-surface="drawer"
322    id="nav-booking-drawer"
323    class="fixed left-0 top-0 z-[80] h-screen h-dvh w-[96vw] max-w-[560px]"
324    x-show="showBooking && !navMenuOpen"
325    x-transition:enter="transition ease-out duration-250"
326    x-transition:enter-start="-translate-x-full opacity-0"
327    x-transition:enter-end="translate-x-0 opacity-100"
328    x-transition:leave="transition ease-in duration-180"
329    x-transition:leave-start="translate-x-0 opacity-100"
330    x-transition:leave-end="-translate-x-full opacity-0"
331    x-cloak
332    @click.stop
333    role="dialog"
334    aria-modal="true"
335    aria-label="Astoria Boracay booking panel"
336  >
337    <div class="h-full bg-white/95 text-[#25282a] shadow-2xl border-r border-white/40 backdrop-blur-sm flex flex-col">
338      
339      <div class="shrink-0 px-5 sm:px-6 pt-5 pb-4 flex items-start justify-between gap-3 border-b border-black/10">
340        <div>
341          <p class="text-[11px] font-semibold uppercase tracking-[0.22em] text-gray-500">
342            Quick Booking
343          </p>
344
345          <h3 class="mt-1 text-lg sm:text-2xl font-semibold text-[#25282a]">
346            Astoria Boracay
347          </h3>
348
349          <p class="mt-1 text-sm sm:text-base font-medium text-gray-600">
350            Select your dates and guests to continue to our booking engine.
351          </p>
352        </div>
353
354        <button
355          type="button"
356          @click="closeBookingPanel()"
357          class="shrink-0 inline-flex h-10 w-10 items-center justify-center rounded-full bg-black/5 hover:bg-black/10 transition"
358          aria-label="Close booking panel"
359        >
360          <i class="fa-solid fa-xmark"></i>
361        </button>
362      </div>
363
364      
365      <div class="flex-1 px-5 sm:px-6 py-5 overflow-y-auto">
366        <form
367          x-ref="bookForm"
368          :action="bookingAction"
369          method="GET"
370          target="_blank"
371          @submit.prevent="submitBooking()"
372          class="space-y-4"
373        >
374          <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
375            <div class="flex flex-col">
376              <label for="nb_check_in" class="text-xs font-semibold mb-1 uppercase tracking-wide">
377                Check In
378              </label>
379
380              <input
381                id="nb_check_in"
382                name="check_in_date"
383                type="date"
384                x-model="checkIn"
385                :min="today"
386                class="w-full rounded-xl border border-gray-300 focus:border-[#0047BB] focus:ring-[#0047BB]
387                       px-3 py-2.5 text-sm bg-white shadow-sm"
388                required
389              />
390            </div>
391
392            <div class="flex flex-col">
393              <label for="nb_nights" class="text-xs font-semibold mb-1 uppercase tracking-wide">
394                Nights
395              </label>
396
397              <input
398                id="nb_nights"
399                name="number_nights"
400                type="number"
401                min="1"
402                value="1"
403                class="w-full rounded-xl border border-gray-300 focus:border-[#0047BB] focus:ring-[#0047BB]
404                       px-3 py-2.5 text-sm bg-white shadow-sm"
405                required
406              />
407            </div>
408          </div>
409
410          <div class="flex flex-col">
411            <label for="nb_guests" class="text-xs font-semibold mb-1 uppercase tracking-wide">
412              Guest/s
413            </label>
414
415            <input
416              id="nb_guests"
417              name="number_adults"
418              type="number"
419              min="1"
420              max="10"
421              value="1"
422              class="w-full rounded-xl border border-gray-300 focus:border-[#0047BB] focus:ring-[#0047BB]
423                     px-3 py-2.5 text-sm bg-white shadow-sm"
424              required
425            />
426          </div>
427
428          <div class="pt-2">
429            <button
430              type="submit"
431              class="w-full bg-[#0047BB] hover:bg-[#63666A] text-white font-bold
432                     px-6 py-3 rounded-xl shadow transition text-[12px] uppercase tracking-[.18em]"
433            >
434              Book Astoria Boracay
435            </button>
436
437            <p class="mt-3 text-xs text-gray-500">
438              Opens in a new tab.
439            </p>
440          </div>
441        </form>
442
443        
444        <section class="mt-6 border-t border-black/10 pt-5 pb-1" aria-labelledby="nav-booking-rooms-title">
445          <div class="flex items-end justify-between gap-4">
446            <div>
447              <p class="text-[10px] font-semibold uppercase tracking-[0.22em] text-[#0047BB]">
448                Accommodations
449              </p>
450
451              <h4 id="nav-booking-rooms-title" class="mt-1 text-base sm:text-lg font-semibold text-[#25282a
451]">
452                Room Types
453              </h4>
454            </div>
455
456            <a
457              href="https://astoriaboracay.com/accommodations"
458              class="shrink-0 inline-flex items-center gap-1 rounded-full border border-[#0047BB]/30 bg-[#0047BB]/10 px-3 py-1.5
459                     text-[10px] font-bold uppercase tracking-[.16em] text-[#0047BB] hover:bg-[#0047BB] hover:text-white transition"
460              aria-label="View accommodations page"
461            >
462              View page
463              <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
464                <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
465              </svg>
466            </a>
467          </div>
468
469          <div class="mt-4 grid grid-cols-2 gap-3">
470                          <a
471                href="https://astoriaboracay.com/accommodations/deluxe-room"
472                class="nb-room-link group overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-black/10 transition
473                       hover:-translate-y-0.5 hover:shadow-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-[#0047BB]"
474                aria-label="Learn more about Deluxe Rooms"
475              >
476                <span class="relative block aspect-[4/3] overflow-hidden bg-[#edf1f3]">
477                  <img
478                    src="https://astoriaboracay.com/images/Rooms/deluxe.webp"
479                    alt="Deluxe Rooms"
480                    class="nb-room-image absolute inset-0 h-full w-full object-cover transition-transform duration-500"
481                    loading="lazy"
482                    decoding="async"
483                  >
484
485                  <span class="pointer-events-none absolute inset-0 bg-gradient-to-b from-black/5 via-transparent to-black/40"></span>
486                </span>
487
488                <span class="block px-3 py-3">
489                  <span class="block text-sm sm:text-base font-semibold leading-tight text-[#25282a]">
490                    Deluxe Rooms
491                  </span>
492
493                  <span class="nb-room-desc mt-1 block text-[11px] sm:text-xs leading-snug text-gray-600">
494                    Our Deluxe Rooms are perfect for small groups looking for chic hotel accommodation in the island.
495                  </span>
496
497                  <span class="mt-2 inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-[.16em] text-[#0047BB] group-hover:text-[#63666A] transition-colors">
498                    Learn more
499                    <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
500                      <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
501                    </svg>
502                  </span>
503                </span>
504              </a>
505                          <a
506                href="https://astoriaboracay.com/accommodations/deluxe-room#deluxe-pool-side"
507                class="nb-room-link group overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-black/10 transition
508                       hover:-translate-y-0.5 hover:shadow-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-[#0047BB]"
509                aria-label="Learn more about Deluxe Pool Access Rooms"
510              >
511                <span class="relative block aspect-[4/3] overflow-hidden bg-[#edf1f3]">
512                  <img
513                    src="https://astoriaboracay.com/images/Rooms/deluxe-pool-access.webp"
514                    alt="Deluxe Pool Access Rooms"
515                    class="nb-room-image absolute inset-0 h-full w-full object-cover transition-transform duration-500"
516                    loading="lazy"
517                    decoding="async"
518                  >
519
520                  <span class="pointer-events-none absolute inset-0 bg-gradient-to-b from-black/5 via-transparent to-black/40"></span>
521                </span>
522
523                <span class="block px-3 py-3">
524                  <span class="block text-sm sm:text-base font-semibold leading-tight text-[#25282a]">
525                    Deluxe Pool Access Rooms
526                  </span>
527
528                  <span class="nb-room-desc mt-1 block text-[11px] sm:text-xs leading-snug text-gray-600">
529                    A step away from some fun under the sun, our Deluxe Pool Room comes with a balcony that offers guests direct access to a relaxing swim.
530                  </span>
531
532                  <span class="mt-2 inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-[.16em] text-[#0047BB] group-hover:text-[#63666A] transition-colors">
533                    Learn more
534                    <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
535                      <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
536                    </svg>
537                  </span>
538                </span>
539              </a>
540                          <a
541                href="https://astoriaboracay.com/accommodations/premier"
542                class="nb-room-link group overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-black/10 transition
543                       hover:-translate-y-0.5 hover:shadow-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-[#0047BB]"
544                aria-label="Learn more about Premier Rooms"
545              >
546                <span class="relative block aspect-[4/3] overflow-hidden bg-[#edf1f3]">
547                  <img
548                    src="https://astoriaboracay.com/images/Rooms/premier.webp"
549                    alt="Premier Rooms"
550                    class="nb-room-image absolute inset-0 h-full w-full object-cover transition-transform duration-500"
551                    loading="lazy"
552                    decoding="async"
553                  >
554
555                  <span class="pointer-events-none absolute inset-0 bg-gradient-to-b from-black/5 via-transparent to-black/40"></span>
556                </span>
557
558                <span class="block px-3 py-3">
559                  <span class="block text-sm sm:text-base font-semibold leading-tight text-[#25282a]">
560                    Premier Rooms
561                  </span>
562
563                  <span class="nb-room-desc mt-1 block text-[11px] sm:text-xs leading-snug text-gray-600">
564                    Our Premier Rooms boasts of chic and spacious interiors furnished with a private veranda that opens to a stunning garden view of our swimming pool.
565                  </span>
566
567                  <span class="mt-2 inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-[.16em] text-[#0047BB] group-hover:text-[#63666A] transition-colors">
568                    Learn more
569                    <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
570                      <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
571                    </svg>
572                  </span>
573                </span>
574              </a>
575                          <a
576                href="https://astoriaboracay.com/accommodations/luxury-room"
577                class="nb-room-link group overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-black/10 transition
578                       hover:-translate-y-0.5 hover:shadow-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-[#0047BB]"
579                aria-label="Learn more about Luxury Rooms"
580              >
581                <span class="relative block aspect-[4/3] overflow-hidden bg-[#edf1f3]">
582                  <img
583                    src="https://astoriaboracay.com/images/Rooms/luxury.webp"
584                    alt="Luxury Rooms"
585                    class="nb-room-image absolute inset-0 h-full w-full object-cover transition-transform duration-500"
586                    loading="lazy"
587                    decoding="async"
588                  >
589
590                  <span class="pointer-events-none absolute inset-0 bg-gradient-to-b from-black/5 via-transparent to-black/40"></span>
591                </span>
592
593                <span class="block px-3 py-3">
594                  <span class="block text-sm sm:text-base font-semibold leading-tight text-[#25282a]">
595                    Luxury Rooms
596                  </span>
597
598                  <span class="nb-room-desc mt-1 block text-[11px] sm:text-xs leading-snug text-gray-600">
599                    Strikingly gorgeous with a contemporary finish, our Luxury Rooms bridge the gap between adventure and relaxation in a setting that marries leisure with style.
600                  </span>
601
602                  <span class="mt-2 inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-[.16em] text-[#0047BB] group-hover:text-[#63666A] transition-colors">
603                    Learn more
604                    <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
605                      <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
606                    </svg>
607                  </span>
608                </span>
609              </a>
610                          <a
611                href="https://astoriaboracay.com/accommodations/honeymoon-suite"
612                class="nb-room-link group overflow-hidden rounded-2xl bg-white shadow-sm ring-1 ring-black/10 transition
613                       hover:-translate-y-0.5 hover:shadow-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-[#0047BB]"
614                aria-label="Learn more about Honeymoon Suite"
615              >
616                <span class="relative block aspect-[4/3] overflow-hidden bg-[#edf1f3]">
617                  <img
618                    src="https://astoriaboracay.com/images/Rooms/honeymoon.webp"
619                    alt="Honeymoon Suite"
620                    class="nb-room-image absolute inset-0 h-full w-full object-cover transition-transform duration-500"
621                    loading="lazy"
622                    decoding="async"
623                  >
624
625                  <span class="pointer-events-none absolute inset-0 bg-gradient-to-b from-black/5 via-transparent to-black/40"></span>
626                </span>
627
628                <span class="block px-3 py-3">
629                  <span class="block text-sm sm:text-base font-semibold leading-tight text-[#25282a]">
630                    Honeymoon Suite
631                  </span>
632
633                  <span class="nb-room-desc mt-1 block text-[11px] sm:text-xs leading-snug text-gray-600">
634                    Complemented by the luxury services and amenities of our resort, what awaits lovebirds is a magnificent Boracay island honeymoon that is to be cherished forever.
635                  </span>
636
637                  <span class="mt-2 inline-flex items-center gap-1 text-[10px] font-bold uppercase tracking-[.16em] text-[#0047BB] group-hover:text-[#63666A] transition-colors">
638                    Learn more
639                    <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
640                      <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/>
641                    </svg>
642                  </span>
643                </span>
644              </a>
645                      </div>
646        </section>
647      </div>
648    </div>
649  </aside>
650  </div>
651  </template>
652</div>
653
654  
655 <style>
656  [x-cloak]{ display:none !important; }
657
658  /* Prevent horizontal scroll leaks globally */
659  html, body { overflow-x: hidden; overscroll-behavior-x: none; }
660  @supports (scrollbar-gutter: stable) {
661    html { scrollbar-gutter: stable; } /* avoid extra right gap */
662  }
663
664  /* ======= BASE HEADER ======= */
665  .ahr-header{
666    background:#E6E7E8; /* default */
667    color:#ffffff;
668    border-bottom:1px solid rgba(255,255,255,0.15);
669    min-height:4rem; /* base */
670    width:100%;
671    max-width:100vw;          /* clamp to viewport */
672    /* Keep dropdowns above the hero without clipping them at the header edge. */
673    z-index:1000;
674    overflow:visible;
675    /* REMOVED: contain: paint; (clips fixed children like mobile menu) */
676  }
677  /* Both axes must stay visible: overflow-x:hidden also clips vertical dropdowns. */
678  .ahr-header #ahr-nav { overflow:visible; }
679
680  /* ======= SCROLLED COLOR STATE ======= */
681  .ahr-header[data-ready="true"][data-scrolled="true"]{
682    background:#0047BB; /* scrolled */
683    color:#ffffff;
684    border-color:transparent;
685  }
686
687  /* Keep the header stable during the first paint, before Alpine initializes. */
688  .ahr-desktop-nav { display:none; }
689  .ahr-mobile-topbar {
690    display:flex;
691    align-items:center;
692    justify-content:space-between;
693    gap:1rem;
694  }
695  .ahr-mobile-actions {
696    display:flex;
697    align-items:center;
698    flex-shrink:0;
699    gap:.25rem;
700  }
701  .mobile-nav-icon { color:#25282a; }
702  .ahr-header[data-ready="true"][data-scrolled="true"] .mobile-nav-icon,
703  html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .mobile-nav-icon {
704    color:#ffffff;
705  }
706  html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] {
707    background:#0047BB;
708    color:#ffffff;
709    border-color:transparent;
710  }
711  .ahr-header.ahr-initializing,
712  .ahr-header.ahr-initializing * {
713    transition:none !important;
714    animation:none !important;
715  }
716
717  @media (min-width:1280px){
718    .ahr-desktop-nav { display:flex; }
719    .ahr-mobile-topbar { display:none; }
720  }
721
722  /* ======= MOBILE/TABLET HEIGHTS (portrait by default) ======= */
723  @media (max-width:1279px){
724    .ahr-header{ min-height:3.25rem; } /* ~52px default */
725    .ahr-header[data-ready="true"][data-scrolled="true"]{ min-height:3rem; } /* ~48px scrolled */
726    .topbar-mobile{ height:3.25rem; }
727    .ahr-header[data-scrolled="true"] .topbar-mobile{ height:3rem; }
728    html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"]{ min-height:3rem; }
729    html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .topbar-mobile{ height:3rem; }
730  }
731
732  /* Landscape phones & tablets: adjusted paddings + bigger logo */
733  @media (max-width:1279px) and (orientation: landscape){
734    .ahr-header{ min-height:2.75rem; } /* ~44px default */
735    .ahr-header[data-ready="true"][data-scrolled="true"]{ min-height:2.5rem; } /* ~40px scrolled */
736    .topbar-mobile{ height:2.75rem; }
737    .ahr-header[data-scrolled="true"] .topbar-mobile{ height:2.5rem; }
738    html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"]{ min-height:2.5rem; }
739    html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .topbar-mobile{ height:2.5rem; }
740    #ahr-nav{ padding-left:clamp(12px,3vw,24px) !important; padding-right:clamp(12px,3vw,24px) !important; }
741    .topbar-mobile svg{ width:24px; height:24px; }
742  }
743
744  /* ======= SPECIAL TIGHT BAND: 1024–1279px ======= */
745  @media (min-width:1024px) and (max-width:1279px){
746    .ahr-header{ min-height:2.75rem; } /* ~44px default */
747    .ahr-header[data-ready="true"][data-scrolled="true"]{ min-height:2.5rem; } /* ~40px scrolled */
748    .topbar-mobile{ height:2.75rem; }
749    .ahr-header[data-scrolled="true"] .topbar-mobile{ height:2.5rem; }
750    html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"]{ min-height:2.5rem; }
751    html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .topbar-mobile{ height:2.5rem; }
752    #ahr-nav{ padding-top:0.25rem !important; padding-bottom:0.25rem !important; }
753    .topbar-mobile svg{ width:22px; height:22px; }
754  }
755
756  /* ======= DESKTOP (xl and up) ======= */
757  @media (min-width:1280px){ .ahr-header{ min-height:5rem; } } /* h-20 for desktop */
758
759  /* ======= MICRO UX HELPERS ======= */
760  .logo-smooth { transition: transform 280ms cubic-bezier(.22,1,.36,1); will-change: transform; transform: translateZ(0); }
761  .fade-img    { transition: opacity 220ms ease; will-change: opacity; }
762
763  /* Logo swap states */
764  .logo-wrap, .m-logo-wrap { position: relative; }
765  .ahr-mobile-topbar .m-logo-wrap { width:11rem; height:3.5rem; }
766  .ahr-mobile-topbar .m-logo-wrap .logo-scaler {
767    position:relative;
768    display:flex;
769    align-items:center;
770    justify-content:flex-start;
771    width:100%;
772    height:100%;
773  }
774  .ahr-mobile-topbar .m-logo-wrap .logo-default,
775  .ahr-mobile-topbar .m-logo-wrap .logo-scrolled {
776    position:absolute;
777    inset:0;
778    width:100%;
779    height:100%;
780    object-fit:contain;
781  }
782  @media (min-width:768px) and (max-width:1279px){
783    .ahr-mobile-topbar .m-logo-wrap { width:13rem; height:4rem; }
784  }
785  .logo-default  { opacity: 1; }
786  .logo-scrolled { opacity: 0; }
787  .logo-wrap[data-scrolled="true"] .logo-default,
788  .m-logo-wrap[data-scrolled="true"] .logo-default { opacity: 0; }
789  .logo-wrap[data-scrolled="true"] .logo-scrolled,
790  .m-logo-wrap[data-scrolled="true"] .logo-scrolled { opacity: 1; }
791  html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .m-logo-wrap .logo-default { opacity:0; }
792  html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .m-logo-wrap .logo-scrolled { opacity:1; }
793  html.ahr-nav-firstpaint-scrolled .ahr-header[data-ready="false"] .m-logo-wrap .logo-scaler { transform:scale(.98); }
794
795  /* Slight scale change on mobile when scrolled (kept larger than before) */
796  .m-logo-wrap[data-scrolled="false"] .logo-scaler { transform: scale(1.06); }
797  .m-logo-wrap[data-scrolled="true"]  .logo-scaler { transform: scale(0.98); }
798
799  /* ======= NAV TYPOGRAPHY ======= */
800  :root { --ahr-font: "Whitney", "Open Sans", sans-serif; }
801  .ahr-nav, .ahr-nav a, .ahr-nav button { font-family: var(--ahr-font); font-weight:600; letter-spacing:.01em; }
802  .ahr-nav { font-size: 1.0625rem; }
803  @media (max-width:1279px){ .ahr-nav { font-size: 1rem; } }
804  .ahr-mobile, .ahr-mobile a, .ahr-mobile button { font-family: var(--ahr-font); font-weight: 600; letter-spacing:.01em; font-size:1rem; }
805
806  /* ======= DESKTOP DROPDOWNS ======= */
807  .menu-wrap { position: relative; }
808  /* Padding keeps the trigger-to-panel gap inside the hoverable dropdown layer. */
809  .menu-layer { position:absolute; top:100%; max-width:100vw; padding-top:.35rem; }
810  .menu-panel { margin-top:0; }
811
812  /* ======= BOOKING DARK (desktop) ======= */
813  .booking-dark label { color: #fff !important; }
814  .booking-dark select,
815  .booking-dark input[type="date"],
816  .booking-dark input[type="number"] {
817    background: rgba(255,255,255,.08) !important;
818    color: #fff !important;
819    border-color: rgba(255,255,255,.28) !important;
820  }
821  .booking-dark select:focus,
822  .booking-dark input:focus {
823    outline: none;
824    box-shadow: 0 0 0 3px rgba(255,255,255,.20);
825    border-color: rgba(255,255,255,.5) !important;
826  }
827  .booking-dark .chev { color: rgba(255,255,255,.65) !important; }
828
829  /* Native option text readable */
830  .ahr-header select option { color:#111; }
831
832  /* Tap highlight removal */
833  .ahr-header a, .ahr-header button { -webkit-tap-highlight-color: transparent; }
834
835  /* Desktop drawer (no backdrop) */
836  .drawer-shell { position: fixed; inset: 0; z-index: 1200; pointer-events: none; overflow:hidden; }
837  .drawer-panel { pointer-events: auto; will-change: transform; }
838
839  /* Kill transitions on desktop only (≥1280px) */
840  @media (min-width:1280px){
841    .ahr-header.no-animate, .ahr-header.no-animate *{
842      transition:none !important;
843      animation:none !important;
844    }
845  }
846
847  /* Bold form UI in header */
848  .ahr-header label,
849  .ahr-header input,
850  .ahr-header select,
851  .ahr-header textarea,
852  .ahr-header option { font-weight: 700 !important; }
853  .ahr-header input::placeholder,
854  .ahr-header textarea::placeholder { font-weight: 700; opacity: 1; }
855
856  /* iPad/similar width & overflow safety */
857  @media (min-width:740px) and (max-width:1368px){
858    .ahr-header, .ahr-header * { box-sizing: border-box; }
859    .ahr-header { width:100% !important; max-width:100% !important; margin-left:0 !important; margin-right:0 !important; }
860    #ahr-nav{ padding-left:clamp(16px,4vw,32px) !important; padding-right:clamp(16px,4vw,32px) !important; max-width:100% !important; }
861  }
862
863  
864  /* ======= NAV SEARCH ======= */
865  .ab1-nav-search-overlay{
866    position:fixed;
867    inset:0;
868    z-index:10000;
869    display:flex;
870    align-items:flex-start;
871    justify-content:center;
872    padding:clamp(5.5rem, 12vh, 8rem) 1rem 1.5rem;
873    background:rgba(37,40,42,.42);
874    backdrop-filter:blur(10px);
875    -webkit-backdrop-filter:blur(10px);
876  }
877  .ab1-nav-search-card{
878    width:min(100%, 640px);
879    border-radius:1.5rem;
880    border:1px solid rgba(255,255,255,.22);
881    background:#ffffff;
882    color:#25282a;
883    box-shadow:0 28px 90px rgba(37,40,42,.24);
884  }
885  .ab1-nav-search-field:focus{ outline:none; box-shadow:none; }
886</style>
887
888
889
890<script>
891  // Match a restored scroll position before Alpine takes ownership of the header state.
892  document.documentElement.classList.toggle('ahr-nav-firstpaint-scrolled', window.scrollY > 10);
893</script>
893
894
895<header
896  class="ahr-header ahr-initializing fixed top-0 w-full transition-colors duration-300 border-b"
897  data-ready="false"
898  data-scrolled="false"
899  x-data="{
900    scrolled: false,
901    openMenu: null,
902    searchOpen: false,
903    searchQuery: '',
904    activeDropdown: null,
905    showBooking: false,    // DESKTOP (xl) booking strip visibility
906    mobileBookingOpen: false,
907    ticking: false,
908    logoDefault: 'https://astoriaboracay.com/images/ab1-logo.webp',
909    logoOnDark:  'https://astoriaboracay.com/images/ab1-logo-white.webp',
910    langs: [
911      { flag: 'https://astoriaboracay.com/images/Flags/united-kingdom.webp', name: 'English',               abbr: 'EN', code: 'en' },
912      { flag: 'https://astoriaboracay.com/images/Flags/korea.webp',           name: 'Korean',                abbr: 'KO', code: 'ko' },
913      { flag: 'https://astoriaboracay.com/images/Flags/china (1).webp',       name: 'Traditional Chinese',   abbr: 'ZH', code: 'zh-TW' },
914      { flag: 'https://astoriaboracay.com/images/Flags/japan.webp',           name: 'Japanese',              abbr: 'JA', code: 'ja' },
915      { flag: 'https://astoriaboracay.com/images/Flags/french.webp',          name: 'French',                abbr: 'FR', code: 'fr' },
916      { flag: 'https://astoriaboracay.com/images/Flags/german.webp',          name: 'German',                abbr: 'DE', code: 'de' },
917      { flag: 'https://astoriaboracay.com/images/Flags/spanish.webp',         name: 'Spanish',               abbr: 'ES', code: 'es' },
918      { flag: 'https://astoriaboracay.com/images/Flags/arabic.webp',          name: 'Arabic',                abbr: 'AR', code: 'ar' }
919    ],
920    selectedLang: { flag: 'https://astoriaboracay.com/images/Flags/united-kingdom.webp', name: 'English', abbr: 'EN', code: 'en' },
921
922readCookie(name){
923      const found = document.cookie
924        .split(';')
925        .map(c => c.trim())
926        .find(c => c.startsWith(name + '='));
927
928      return found ? decodeURIComponent(found.substring(name.length + 1)) : '';
929    },
930
931    normalizeLangCode(code){
932      const raw = String(code || '').trim();
933      if (!raw) return 'en';
934
935      const lower = raw.toLowerCase();
936
937      const aliases = {
938        'zh-tw': 'zh-TW',
939        'zh-cn': 'zh-CN',
940        'in': 'id', // old/invalid Indonesian alias guard
941        'iw': 'he',
942      };
943
944      return aliases[lower]
945        || this.langs.find(l => String(l.code).toLowerCase() === lower)?.code
946        || raw;
947    },
948
949    googleTranslateDomains(){
950      const host = window.location.hostname;
951      const parts = host.split('.').filter(Boolean);
952
953      const domains = ['', host, '.' + host];
954
955      if (parts.length >= 2) {
956        domains.push('.' + parts.slice(-2).join('.'));
957      }
958
959      return [...new Set(domains.filter(Boolean))];
960    },
961
962    clearGoogleTranslateCookies(){
963      const expired = 'expires=Thu, 01 Jan 1970 00:00:00 GMT';
964
965      document.cookie = 'googtrans=;' + expired + ';path=/';
966
967      this.googleTranslateDomains().forEach(domain => {
968        document.cookie = 'googtrans=;' + expired + ';path=/;domain=' + domain;
969      });
970    },
971
972    writeGoogleTranslateCookie(code){
973      const value = '/en/' + code;
974
975      document.cookie = 'googtrans=' + encodeURIComponent(value) + ';path=/;SameSite=Lax';
976
977      this.googleTranslateDomains().forEach(domain => {
978        document.cookie = 'googtrans=' + encodeURIComponent(value) + ';path=/;domain=' + domain + ';SameSite=Lax';
979      });
980    },
981
982    getSavedLangCode(){
983      const googtrans = this.readCookie('googtrans');
984      const target = googtrans
985        ? googtrans.split('/').filter(Boolean).pop()
986        : '';
987
988      return this.normalizeLangCode(target || localStorage.getItem('preferred_lang') || 'en');
989    },
990
991    setSelectedFromCode(code){
992      const normalized = this.normalizeLangCode(code);
993      const found = this.langs.find(l => String(l.code).toLowerCase() === String(normalized).toLowerCase());
994      this.selectedLang = found || this.langs[0];
995    },
996
997    setSelectedFromCookie(){
998      this.setSelectedFromCode(this.getSavedLangCode());
999    },
1000
1001    setLanguage(code){
1002      const normalized = this.normalizeLangCode(code);
1003
1004      localStorage.setItem('preferred_lang', normalized);
1005      this.setSelectedFromCode(normalized);
1006
1007      /*
1008        English is the original page language.
1009        Do not save /en/en, because Google Translate may leave the DOM in a translated state.
1010        Clear the cookie and reload the original page.
1011      */
1012      if (normalized === 'en') {
1013        this.clearGoogleTranslateCookies();
1014
1015        const loader = document.getElementById('ab1-translate-loader');
1016        if (loader) loader.classList.add('is-visible');
1017
1018        window.setTimeout(() => {
1019          window.location.reload();
1020        }, 250);
1021
1022        return;
1023      }
1024
1025      this.writeGoogleTranslateCookie(normalized);
1026
1027      if (window.ab1RunTranslateWithLoader) {
1028        window.ab1RunTranslateWithLoader(normalized);
1029      } else if (window.applyTranslation) {
1030        window.applyTranslation(normalized);
1031      }
1032    },
1033
1034    openSearch(){
1035      this.openMenu = null;
1036      this.showBooking = false;
1037      this.mobileBookingOpen = false;
1038      this.searchOpen = true;
1039      this.$nextTick(() => document.getElementById('ab1-nav-search-input')?.focus());
1040    },
1041    closeSearch(){ this.searchOpen = false; },
1042
1043    openHover(id){ this.openMenu = id; },
1044    closeHover(id){ if (this.openMenu === id) this.openMenu = null; },
1045
1046    onScroll(){ const next = window.scrollY > 10; if (next !== this.scrolled) this.scrolled = next; },
1047
1048    navClick(e){
1049      const a = e.target.closest('a[href]');
1050      if (!a) return;
1051      if (e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || a.getAttribute('target') === '_blank' || e.button !== 0) return;
1052      if (window.matchMedia('(min-width: 1280px)').matches) {
1053        this.openMenu = null;
1054        this.$nextTick(() => this.$root.classList.add('no-animate'));
1055      }
1056    }
1057  }"
1058  x-init="
1059    setSelectedFromCookie();
1060    scrolled = window.scrollY > 10;
1061    $el.dataset.scrolled = scrolled ? 'true' : 'false';
1062    $el.dataset.ready = 'true';
1063    document.documentElement.classList.remove('ahr-nav-firstpaint-scrolled');
1064    $nextTick(() => requestAnimationFrame(() => $el.classList.remove('ahr-initializing')));
1065
1066    const handleScroll = () => {
1067      if (!ticking) {
1068        requestAnimationFrame(() => { onScroll(); ticking = false; });
1069        ticking = true;
1070      }
1071    };
1072    window.addEventListener('scroll', handleScroll, { passive: true });
1073  "
1074  x-effect="document.body.classList.toggle('ahr-mobile-open', openMenu === 'mobile')"
1075  @click.away="openMenu = null"
1076  @click.capture="navClick($event)"
1077  :data-scrolled="scrolled"
1078>
1079
1080  
1081  <img src="https://astoriaboracay.com/images/ab1-logo.webp" alt="" class="hidden" aria-hidden="true">
1082  <img src="https://astoriaboracay.com/images/ab1-logo-white.webp" alt="" class="hidden" aria-hidden="true">
1083
1084  <nav id="ahr-nav" class="relative mx-auto px-4 sm:px-6 lg:px-8 max-w-[min(1575px,100vw)]">
1085
1086    
1087    <div class="ahr-desktop-nav hidden xl:flex items-center justify-between h-16 md:h-20 gap-3" x-show="!scrolled" x-cloak>
1088      
1089      <a href="https://astoriaboracay.com" aria-label="AHR Home" class="shrink-0">
1090        <div class="logo-wrap w-56 md:w-72 h-12 md:h-16" data-scrolled="false" :data-scrolled="false">
1091          <div class="logo-smooth logo-scaler h-full w-full relative flex items-center justify-start">
1092            <img src="https://astoriaboracay.com/images/ab1-logo.webp" :src="logoDefault"
1093                 onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/ab1-logo.webp';"
1094                 alt="Astoria Hotels and Resorts"
1095                 class="fade-img absolute inset-0 h-full w-full object-contain logo-default"/>
1096            <img src="https://astoriaboracay.com/images/ab1-logo-white.webp" :src="logoOnDark" class="fade-img absolute inset-0 h-full w-full object-contain logo-scrolled" alt="">
1097          </div>
1098        </div>
1099      </a>
1100
1101      
1102      <div class="flex items-center gap-6 min-w-0">
1103        <div class="ahr-nav flex items-center gap-5 2xl:gap-6 min-w-0">
1104          <a href="https://astoriaboracay.com" class="hover:opacity-80 whitespace-nowrap text-[#63666a]">Home</a>
1105
1106          
1107          <div class="menu-wrap" @mouseenter="openHover('about')" @mouseleave="closeHover('about')">
1108            <div class="inline-flex items-center gap-1 text-[#63666A]">
1109              <a href="https://astoriaboracay.com/about" class="hover:opacity-80 whitespace-nowrap text-[#63666a]">About</a>
1110              <button type="button"
1111                      class="p-1 -mr-1 hover:opacity-80"
1112                      :aria-expanded="openMenu==='about'"
1113                      aria-controls="menu-about"
1114                      @click.prevent="openMenu = openMenu==='about' ? null : 'about'">
1115                <svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1116                  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1117                </svg>
1118              </button>
1119            </div>
1120            <div class="menu-layer left-0 z-[900]">
1121              <div id="menu-about"
1122                   x-show="openMenu==='about'"
1123                   x-transition.opacity.duration.120ms
1124                   x-cloak
1125                   class="menu-panel w-80 rounded-md shadow-lg bg-white text-[#63666a] ring-1 ring-black/5 overflow-hidden">
1126                <a @click="openMenu=null" href="https://astoriaboracay.com/amenities"       class="block px-4 py-2 hover:bg-gray-100">Amenities</a>
1127                <a @click="openMenu=null" href="https://astoriaboracay.com/csr"       class="block px-4 py-2 hover:bg-gray-100">CSR</a>
1128                <a @click="openMenu=null" href="https://astoriaboracay.com/faqs"      class="block px-4 py-2 hover:bg-gray-100">FAQs</a>
1129                <a @click="openMenu=null" href="https://astoriaboracay.com/blogs"     class="block px-4 py-2 hover:bg-gray-100">Blogs</a>
1130                <a @click="openMenu=null" href="https://astoriaboracay.com/special-offers"    class="block px-4 py-2 hover:bg-gray-100">Promos</a>
1131              </div>
1132            </div>
1133          </div>
1134
1135          
1136          <div class="menu-wrap" @mouseenter="openHover('accommodations')" @mouseleave="closeHover('accommodations')">
1137            <div class="inline-flex items-center gap-1 text-[#63666a]">
1138              <a href="https://astoriaboracay.com/accommodations" class="hover:opacity-80 whitespace-nowrap">
1139                Accommodations
1140              </a>
1141              <button type="button"
1142                      class="p-1 -mr-1 hover:opacity-80"
1143                      :aria-expanded="openMenu==='accommodations'"
1144                      aria-controls="menu-accommodations"
1145                      @click.prevent="openMenu = openMenu==='accommodations' ? null : 'accommodations'">
1146                <svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1147                  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1148                </svg>
1149              </button>
1150            </div>
1151
1152            <div class="menu-layer left-0 z-[900]">
1153              <div id="menu-accommodations"
1154                   x-show="openMenu==='accommodations'"
1155                   x-transition.opacity.duration.120ms
1156                   x-cloak
1157                   class="menu-panel w-80 rounded-md shadow-lg bg-white text-[#63666A] ring-1 ring-black/5 overflow-hidden">
1158                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/deluxe-room"    class="block px-4 py-2 hover:bg-gray-100">Deluxe Rooms</a>
1159                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/premier"   class="block px-4 py-2 hover:bg-gray-100">Premier Room</a>
1160                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/luxury-room"    class="block px-4 py-2 hover:bg-gray-100">Luxury Room</a>
1161                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/honeymoon-suite" class="block px-4 py-2 hover:bg-gray-100">Honeymoon Suite</a>
1162              </div>
1163            </div>
1164          </div>
1165
1166          
1167          <div class="menu-wrap z-[900] text-[#63666a]">
1168            <a href="https://astoriaboracay.com/meetings-events" class="hover:opacity-80 whitespace-nowrap">
1169              Meetings &amp; Events
1170            </a>
1171          </div>
1172
1173          
1174          <div>
1175            <a href="https://astoriaboracay.com/food-beverages" class="flex justify-between w-full py-2 font-semibold text-[#63666a]">
1176              <span>F&amp;B</span>
1177            </a>
1178          </div>
1179
1180          <a href="https://astoriaboracay.com/contact-us" class="hover:opacity-80 whitespace-nowrap text-[#63666a]">Contact Us</a>
1181        </div>
1182
1183        
1184        <div class="hidden xl:block relative z-[1000] shrink-0 text-[#63666a]">
1185          <div class="menu-wrap" @mouseenter="openHover('language')" @mouseleave="closeHover('language')">
1186            <button class="inline-flex items-center gap-2 hover:opacity-80 font-semibold"
1187                    :aria-expanded="openMenu==='language'"
1188                    @click="openMenu = openMenu==='language' ? null : 'language'">
1189              <img :src="selectedLang.flag" class="w-5 h-5 rounded-sm" alt="">
1190              <span class="hidden 2xl:inline" x-text="selectedLang.name"></span>
1191              <span class="2xl:hidden" x-text="selectedLang.abbr"></span>
1192              <svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/></svg>
1193            </button>
1194            <div class="menu-layer right-0 z-[1000]">
1195              <div x-show="openMenu==='language'" x-transition.opacity.duration.120ms x-cloak
1196                   class="menu-panel w-64 rounded-md shadow-xl bg-white text-[#25282a] ring-1 ring-black/5 overflow-hidden font-semibold">
1197                <template x-for="lang in langs" :key="lang.code">
1198                  <a href="#" class="flex items-center gap-2 px-4 py-2 hover:bg-gray-100"
1199                     @click.prevent="setLanguage(lang.code); openMenu=null;">
1200                    <img :src="lang.flag" class="w-5 h-5 rounded-sm" alt="">
1201                    <span x-text="lang.name"></span>
1202                    <span class="ml-auto opacity-70" x-text="'(' + lang.abbr + ')'"></span>
1203                  </a>
1204                </template>
1205              </div>
1206            </div>
1207          </div>
1208        </div>
1209
1210         
1211        <button
1212          type="button"
1213          @click.stop="openSearch()"
1214          class="inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-full border border-[#25282a]/20 text-[#25282a] transition hover:border-[#0047bb] hover:bg-[#0047bb] hover:text-white"
1215          aria-label="Search Astoria Palawan"
1216        >
1217          <svg class="h-5 w-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
1218            <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"/>
1219          </svg>
1220        </button>
1221
1222        
1223        <div class="hidden xl:block shrink-0" x-show="!showBooking" x-transition.opacity.duration.150ms x-cloak>
1224          <button
1225            @click.stop="showBooking = true"
1226            class="bg-[#0047BB] text-white hover:brightness-110 font-bold px-5 py-2.5 rounded-xl shadow transition text-sm uppercase tracking-widest">
1227            Book Now
1228          </button>
1229        </div>
1230
1231      </div>
1232    </div>
1233
1234    
1235    
1236    <div class="ahr-desktop-nav hidden xl:flex items-center justify-between h-16 md:h-20 gap-3" x-show="scrolled" x-cloak>
1237      
1238      <a href="https://astoriaboracay.com" aria-label="AHR Home" class="shrink-0">
1239        <div class="logo-wrap w-56 md:w-72 h-12 md:h-16" data-scrolled="true" :data-scrolled="true">
1240          <div class="logo-smooth logo-scaler h-full w-full relative flex items-center justify-start">
1241            <img src="https://astoriaboracay.com/images/ab1-logo.webp" :src="logoDefault"
1242                 onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/ab1-logo.webp';"
1243                 alt=""
1244                 class="fade-img absolute inset-0 h-full w-full object-contain logo-default"/>
1245            <img src="https://astoriaboracay.com/images/ab1-logo-white.webp" :src="logoOnDark"
1246                 class="fade-img absolute inset-0 h-full w-full object-contain logo-scrolled"
1247                 alt="Astoria Hotels and Resorts"/>
1248          </div>
1249        </div>
1250      </a>
1251
1252      
1253      <div class="flex items-center gap-6 min-w-0">
1254        <div class="ahr-nav flex items-center gap-5 2xl:gap-6 min-w-0 text-white">
1255          <a href="https://astoriaboracay.com" class="hover:opacity-80 whitespace-nowrap text-white">Home</a>
1256
1257          
1258          <div class="menu-wrap" @mouseenter="openHover('about')" @mouseleave="closeHover('about')">
1259            <div class="inline-flex items-center gap-1 text-white">
1260              <a href="https://astoriaboracay.com/about" class="hover:opacity-80 whitespace-nowrap text-white">About</a>
1261              <button type="button"
1262                      class="p-1 -mr-1 hover:opacity-80 text-white"
1263                      :aria-expanded="openMenu==='about'"
1264                      aria-controls="menu-about"
1265                      @click.prevent="openMenu = openMenu==='about' ? null : 'about'">
1266                <svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1267                  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1268                </svg>
1269              </button>
1270            </div>
1271            <div class="menu-layer left-0 z-[900]">
1272              <div id="menu-about"
1273                   x-show="openMenu==='about'"
1274                   x-transition.opacity.duration.120ms
1275                   x-cloak
1276                   class="menu-panel w-80 rounded-md shadow-lg bg-white text-[#63666a] ring-1 ring-black/5 overflow-hidden">
1277                <a @click="openMenu=null" href="https://astoriaboracay.com/amenities"       class="block px-4 py-2 hover:bg-gray-100">Amenities</a>
1278                <a @click="openMenu=null" href="https://astoriaboracay.com/csr"       class="block px-4 py-2 hover:bg-gray-100">CSR</a>
1279                <a @click="openMenu=null" href="https://astoriaboracay.com/faqs"      class="block px-4 py-2 hover:bg-gray-100">FAQs</a>
1280                <a @click="openMenu=null" href="https://astoriaboracay.com/blogs"     class="block px-4 py-2 hover:bg-gray-100">Blogs</a>
1281                <a @click="openMenu=null" href="https://astoriaboracay.com/special-offers"    class="block px-4 py-2 hover:bg-gray-100">Promos</a>
1282              </div>
1283            </div>
1284          </div>
1285
1286          
1287          <div class="menu-wrap" @mouseenter="openHover('accommodations')" @mouseleave="closeHover('accommodations')">
1288            <div class="inline-flex items-center gap-1 text-white">
1289              <a href="https://astoriaboracay.com/accommodations" class="hover:opacity-80 whitespace-nowrap text-white">
1290                Accommodations
1291              </a>
1292              <button type="button"
1293                      class="p-1 -mr-1 hover:opacity-80 text-white"
1294                      :aria-expanded="openMenu==='accommodations'"
1295                      aria-controls="menu-accommodations"
1296                      @click.prevent="openMenu = openMenu==='accommodations' ? null : 'accommodations'">
1297                <svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1298                  <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1299                </svg>
1300              </button>
1301            </div>
1302
1303            <div class="menu-layer left-0 z-[900]">
1304              <div id="menu-accommodations"
1305                   x-show="openMenu==='accommodations'"
1306                   x-transition.opacity.duration.120ms
1307                   x-cloak
1308                   class="menu-panel w-80 rounded-md shadow-lg bg-white text-[#63666A] ring-1 ring-black/5 overflow-hidden">
1309                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/deluxe-room"    class="block px-4 py-2 hover:bg-gray-100">Deluxe Rooms</a>
1310                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/premier"   class="block px-4 py-2 hover:bg-gray-100">Premier Room</a>
1311                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/luxury-room"    class="block px-4 py-2 hover:bg-gray-100">Luxury Room</a>
1312                <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/honeymoon-suite" class="block px-4 py-2 hover:bg-gray-100">Honeymoon Suite</a>
1313              </div>
1314            </div>
1315          </div>
1316
1317          
1318          <div class="menu-wrap z-[900]">
1319            <a href="https://astoriaboracay.com/meetings-events" class="hover:opacity-80 whitespace-nowrap text-white">
1320              Meetings &amp; Events
1321            </a>
1322          </div>
1323
1324          
1325          <div>
1326            <a href="https://astoriaboracay.com/food-beverages" class="flex justify-between w-full py-2 font-semibold text-white hover:opacity-80">
1327              <span>F&amp;B</span>
1328            </a>
1329          </div>
1330
1331          <a href="https://astoriaboracay.com/contact-us" class="hover:opacity-80 whitespace-nowrap text-white">Contact Us</a>
1332        </div>
1333
1334        
1335        <div class="hidden xl:block relative z-[1000] shrink-0 text-white">
1336          <div class="menu-wrap" @mouseenter="openHover('language')" @mouseleave="closeHover('language')">
1337            <button class="inline-flex items-center gap-2 hover:opacity-80 font-semibold text-white"
1338                    :aria-expanded="openMenu==='language'"
1339                    @click="openMenu = openMenu==='language' ? null : 'language'">
1340              <img :src="selectedLang.flag" class="w-5 h-5 rounded-sm" alt="">
1341              <span class="hidden 2xl:inline" x-text="selectedLang.name"></span>
1342              <span class="2xl:hidden" x-text="selectedLang.abbr"></span>
1343              <svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1344                <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/>
1345              </svg>
1346            </button>
1347            <div class="menu-layer right-0 z-[1000]">
1348              <div x-show="openMenu==='language'" x-transition.opacity.duration.120ms x-cloak
1349                   class="menu-panel w-64 rounded-md shadow-xl bg-white text-[#25282a] ring-1 ring-black/5 overflow-hidden font-semibold">
1350                <template x-for="lang in langs" :key="lang.code">
1351                  <a href="#" class="flex items-center gap-2 px-4 py-2 hover:bg-gray-100"
1352                     @click.prevent="setLanguage(lang.code); openMenu=null;">
1353                    <img :src="lang.flag" class="w-5 h-5 rounded-sm" alt="">
1354                    <span x-text="lang.name"></span>
1355                    <span class="ml-auto opacity-70" x-text="'(' + lang.abbr + ')'"></span>
1356                  </a>
1357                </template>
1358              </div>
1359            </div>
1360          </div>
1361        </div>
1362
1363         
1364        <button
1365          type="button"
1366          @click.stop="openSearch()"
1367          class="inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-full border border-white/35 text-white transition hover:border-white hover:bg-white hover:text-[#0047BB]"
1368          aria-label="Search Astoria Palawan"
1369        >
1370          <svg class="h-5 w-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
1371            <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"/>
1372          </svg>
1373        </button>
1374
1375        
1376        <div class="hidden xl:block shrink-0" x-show="!showBooking" x-transition.opacity.duration.150ms x-cloak>
1377          <button
1378            @click.stop="showBooking = true"
1379            class="bg-white border border-white/60 text-[#25282a] font-bold px-5 py-2.5 rounded-xl shadow transition text-sm uppercase tracking-widest">
1380            Book Now
1381          </button>
1382        </div>
1383      </div>
1384    </div>
1385
1386    
1387    <div
1388      class="hidden xl:block absolute left-1/2 top-full -translate-x-1/2 mt-2 z-[1000] w-[min(92vw,900px)]"
1389      x-show="showBooking"
1390      x-transition:enter="transition ease-out duration-200"
1391      x-transition:enter-start="opacity-0 -translate-y-2"
1392      x-transition:enter-end="opacity-100 translate-y-0"
1393      x-transition:leave="transition ease-in duration-150"
1394      x-transition:leave-start="opacity-100 translate-y-0"
1395      x-transition:leave-end="opacity-0 -translate-y-2"
1396      x-cloak
1397      @click.outside="showBooking = false"
1398    >
1399      <div class="relative rounded-2xl border border-black/10 bg-white text-[#25282a] shadow-2xl">
1400        <button
1401          @click="showBooking = false"
1402          aria-label="Close booking form"
1403          class="absolute right-3 top-3 p-2 rounded-md hover:bg-gray-100 transition"
1404        >
1405          <svg class="w-5 h-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1406            <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1407          </svg>
1408        </button>
1409
1410        <form
1411          x-data="{
1412            actionCurrent: 'https://book-directonline.com/properties/AstoriaBoracaydirect?',
1413            today: (new Date(Date.now() - new Date().getTimezoneOffset()*60000)).toISOString().slice(0,10)
1414          }"
1415          :action="actionCurrent"
1416          method="GET"
1417          target="_blank"
1418          class="p-4 md:p-6"
1419        >
1420          <h3 class="text-base md:text-lg font-bold mb-3 pr-10">Quick Booking — Astoria Boracay</h3>
1421
1422          <div class="grid grid-cols-1 md:[grid-template-columns:1fr_.5fr_.5fr_auto] gap-3 items-end">
1423            <div class="flex flex-col">
1424              <label for="check_in_date_desk" class="text-xs font-semibold mb-2 uppercase tracking-wide">Check In</label>
1425              <input name="check_in_date" id="check_in_date_desk" type="date"
1426                     :min="today"
1427                     class="rounded-lg border border-gray-300 focus:border-[#25282a
1427] focus:ring-[#25282a] px-3 py-2 text-sm bg-white w-full shadow-sm" required />
1428            </div>
1429
1430            <div class="flex flex-col">
1431              <label for="number_nights_desk" class="text-xs font-semibold mb-2 uppercase tracking-wide">Nights</label>
1432              <input class="rounded-lg border border-gray-300 focus:border-[#25282a] focus:ring-[#25282a] px-3 py-2 text-sm bg-white w-full shadow-sm"
1433                     name="number_nights" id="number_nights_desk" type="number" min="1" value="1" required />
1434            </div>
1435
1436            <div class="flex flex-col">
1437              <label for="number_adults_desk" class="text-xs font-semibold mb-2 uppercase tracking-wide">Guest/s</label>
1438              <input class="rounded-lg border border-gray-300 focus:border-[#25282a] focus:ring-[#25282a] px-3 py-2 text-sm bg-white w-full shadow-sm"
1439                     name="number_adults" id="number_adults_desk" type="number" min="1" max="4" value="1" required />
1440            </div>
1441
1442            <div class="flex items-end">
1443              <button type="submit"
1444                      class="w-full md:w-auto bg-[#0047BB] hover:bg-[#63666a] text-white font-bold px-8 py-3 rounded-xl shadow transition text-sm uppercase tracking-widest">
1445                Book Now
1446              </button>
1447            </div>
1448          </div>
1449        </form>
1450      </div>
1451    </div>
1452
1453    
1454    <div class="ahr-mobile-topbar topbar-mobile flex xl:hidden items-center justify-between gap-4">
1455      <a href="https://astoriaboracay.com" aria-label="AHR Home" class="shrink-0">
1456        
1457        <div class="m-logo-wrap w-44 h-14 md:w-52 md:h-16" data-scrolled="false" :data-scrolled="scrolled">
1458          <div class="logo-smooth logo-scaler h-full w-full relative flex items-center justify-start">
1459            
1460            <img
1461              src="https://astoriaboracay.com/images/ab1-logo.webp"
1462              :src="logoDefault"
1463              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/ab1-logo.webp';"
1464              class="fade-img absolute inset-0 h-full w-full object-contain logo-default"
1465              alt="Astoria Current"
1466            >
1467            
1468            <img
1469              src="https://astoriaboracay.com/images/ab1-logo-white.webp"
1470              :src="logoOnDark"
1471              class="fade-img absolute inset-0 h-full w-full object-contain logo-scrolled"
1472              alt="Astoria Current"
1473            >
1474          </div>
1475        </div>
1476      </a>
1477
1478      <div class="ahr-mobile-actions flex shrink-0 items-center gap-1">
1479        <button
1480          type="button"
1481          class="p-2 shrink-0"
1482          @click.stop="openSearch()"
1483          aria-label="Search Astoria Palawan"
1484        >
1485          <svg class="mobile-nav-icon w-6 h-6 transition-colors duration-200"
1486               fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
1487            <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"/>
1488          </svg>
1489        </button>
1490
1491        <button class="p-2 shrink-0"
1492          @click.stop="
1493            openMenu = openMenu === 'mobile' ? null : 'mobile';
1494            searchOpen = false;
1495            if (openMenu === 'mobile') {
1496              window.dispatchEvent(new CustomEvent('nav-booking-close'));
1497            }
1498          "
1499          aria-label="Open menu">
1500          <svg class="mobile-nav-icon w-7 h-7 transition-colors duration-200"
1501               fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1502            <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>
1503          </svg>
1504        </button>
1505      </div>
1506    </div>
1507
1508  </nav>
1509
1510
1511  
1512  
1513  <div
1514    x-show="searchOpen"
1515    x-transition.opacity.duration.180ms
1516    x-cloak
1517    class="ab1-nav-search-overlay"
1518    @keydown.escape.window="closeSearch()"
1519    @click.self="closeSearch()"
1520  >
1521    <div class="ab1-nav-search-card" @click.outside="closeSearch()">
1522      <div class="flex items-center justify-between gap-4 border-b border-[#0047BB]/15 px-5 py-4 sm:px-6">
1523        <div>
1524          <p class="text-xs font-semibold uppercase tracking-[.22em] text-[#0047BB]">Search</p>
1525          <h2 class="mt-1 text-xl font-semibold text-[#25282a]">Find Astoria Boracay pages</h2>
1526        </div>
1527
1528        <button type="button" @click="closeSearch()" class="rounded-full p-2 text-[#25282a] transition hover:bg-[#0047BB]/10" aria-label="Close search">
1529          <svg class="h-6 w-6" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
1530            <path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12"/>
1531          </svg>
1532        </button>
1533      </div>
1534
1535      <form action="https://astoriaboracay.com/search" method="GET" role="search" class="p-5 sm:p-6">
1536        <label for="ab1-nav-search-input" class="sr-only">Search Astoria Boracay</label>
1537
1538        <div class="flex flex-col gap-3 sm:flex-row sm:items-center">
1539          <div class="flex min-w-0 flex-1 items-center gap-3 rounded-2xl border border-[#0047BB]/20 bg-[#fff7f1] px-4 py-3 text-[#25282a] focus-within:border-[#0047BB]">
1540            <svg class="h-5 w-5 shrink-0 text-[#0047BB]" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
1541              <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"/>
1542            </svg>
1543
1544            <input
1545              id="ab1-nav-search-input"
1546              name="q"
1547              type="search"
1548              x-model="searchQuery"
1549              placeholder="Search rooms, waterpark, amenities, promos..."
1550              autocomplete="off"
1551              class="ab1-nav-search-field w-full border-0 bg-transparent p-0 text-base font-medium text-[#25282a] placeholder:text-[#25282a]/45 focus:border-0 focus:outline-none focus:ring-0"
1552              required
1553            >
1554          </div>
1555
1556          <button type="submit" class="rounded-2xl bg-[#0047BB] px-6 py-3 text-sm font-semibold uppercase tracking-[.18em] text-white transition hover:bg-[#63666A]">
1557            Search
1558          </button>
1559        </div>
1560
1561        <div class="mt-4 flex flex-wrap gap-2 text-sm font-semibold">
1562          <a @click="closeSearch()" href="https://astoriaboracay.com/search?q=accommodations" class="rounded-full border border-[#0047BB]/20 px-3 py-1.5 text-[#25282a] transition hover:border-[#0047BB] hover:bg-[#0047BB] hover:text-white">Accommodations</a>
1563          <a @click="closeSearch()" href="https://astoriaboracay.com/search?q=meetings" class="rounded-full border border-[#0047BB]/20 px-3 py-1.5 text-[#25282a] transition hover:border-[#0047BB] hover:bg-[#0047BB] hover:text-white">Meetings & Events</a>
1564          <a @click="closeSearch()" href="https://astoriaboracay.com/search?q=amenities" class="rounded-full border border-[#0047BB]/20 px-3 py-1.5 text-[#25282a] transition hover:border-[#0047BB] hover:bg-[#0047BB] hover:text-white">Amenities</a>
1565          <a @click="closeSearch()" href="https://astoriaboracay.com/search?q=promos" class="rounded-full border border-[#0047BB]/20 px-3 py-1.5 text-[#25282a] transition hover:border-[#0047BB] hover:bg-[#0047BB] hover:text-white">Promos</a>
1566        </div>
1567      </form>
1568    </div>
1569  </div>
1570
1571<!--#
1572  
1573  <div
1574    x-show="openMenu === 'desktop'"
1575    x-transition.opacity.duration.120ms
1576    x-cloak
1577    class="hidden xl:block drawer-shell"
1578    aria-modal="true" role="dialog"
1579    @keydown.escape.window="openMenu=null"
1580    @click="openMenu=null"
1581  >
1582    <aside
1583      class="drawer-panel absolute right-0 top-0 h-full w-[360px] bg-white text-[#25282a] shadow-xl overflow-y-auto
1584             transform transition-transform duration-200 z-[1300]"
1585      @click.stop
1586      x-show="openMenu==='desktop'"
1587      x-transition:enter-start="translate-x-full"
1588      x-transition:enter-end="translate-x-0"
1589      x-transition:leave-start="translate-x-0"
1590      x-transition:leave-end="translate-x-full"
1591    >
1592      <div class="px-5 py-5 flex items-center justify-between border-b">
1593        <h3 class="text-lg font-semibold">Menu</h3>
1594        <button @click="openMenu=null" aria-label="Close menu" class="p-2 hover:opacity-80">
1595          <svg class="w-7 h-7" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1596            <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1597          </svg>
1598        </button>
1599      </div>
1600
1601      <div class="px-6 pb-12 space-y-4 mt-4">
1602
1603        <a @click="openMenu = null" href="https://astoriaboracay.com" class="block font-bold py-2">Home</a>
1604
1605        
1606        <div>
1607          <div class="flex items-center justify-between w-full py-2">
1608            <a @click="openMenu=null" href="https://astoriaboracay.com/about" class="font-bold">About</a>
1609            <button @click="activeDropdown = activeDropdown==='about' ? null : 'about'"
1610                    class="p-1"
1611                    :aria-expanded="(activeDropdown==='about').toString()"
1612                    aria-controls="drawer-about">
1613              <svg :class="activeDropdown==='about' ? 'rotate-180' : ''" class="w-4 h-4 transition-transform " fill="none" stroke="currentColor" viewBox="0 0 24 24">
1614                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
1615              </svg>
1616            </button>
1617          </div>
1618          <div id="drawer-about" x-show="activeDropdown==='about'" x-transition x-cloak class="pl-4 font-semibold space-y-2">
1619            <a @click="openMenu=null" href="https://astoriaboracay.com/csr"       class="block py-1">CSR</a>
1620            <a @click="openMenu=null" href="https://astoriaboracay.com/faqs"      class="block py-1">FAQs</a>
1621            <a @click="openMenu=null" href="https://astoriaboracay.com/blogs"     class="block py-1">Blogs</a>
1622            <a @click="openMenu=null" href="https://astoriaboracay.com/special-offers"    class="block py-1">Promos</a>
1623          </div>
1624        </div>
1625
1626        
1627        <a href="https://astoriaboracay.com/amenities" class="flex justify-between w-full py-2 font-bold">
1628          <span>Amenities</span>
1629        </a>
1630
1631        
1632        <div>
1633          <div class="flex items-center justify-between w-full py-2">
1634            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations" class="font-bold">Accommodations</a>
1635            <button @click="activeDropdown = activeDropdown==='accommodations' ? null : 'accommodations'"
1636                    class="p-1"
1637                    :aria-expanded="(activeDropdown==='accommodations').toString()"
1638                    aria-controls="drawer-accommodations">
1639              <svg :class="activeDropdown==='accommodations' ? 'rotate-180' : ''" class="w-4 h-4 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1640                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
1641              </svg>
1642            </button>
1643          </div>
1644          <div id="drawer-accommodations" x-show="activeDropdown==='accommodations'" x-transition x-cloak class="pl-4 font-semibold space-y-2">
1645            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/deluxe-room"    class="block py-1">Deluxe Rooms</a>
1646            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/premier"   class="block py-1">Premier Room</a>
1647            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/luxury-room"    class="block py-1">Luxury Room</a>
1648            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/honeymoon-suite" class="block py-1">Honeymoon Suite</a>
1649          </div>
1650        </div>
1651
1652        
1653        <a href="https://astoriaboracay.com/amenities" class="flex justify-between w-full py-2 font-bold">
1654          <span>Amenities</span>
1655        </a>
1656
1657        <a href="https://astoriaboracay.com/food-beverages" class="flex justify-between w-full py-2 font-semibold">
1658          <span>F&amp;B</span>
1659        </a>
1660
1661        <a href="https://astoriaboracay.com/meetings-events" class="flex justify-between w-full py-2 font-semibold">
1662          <span>Meetings &amp; Events</span>
1663        </a>
1664
1665        <a @click="openMenu=null" href="https://astoriaboracay.com/contact-us" class="block py-2 font-semibold">Contact Us</a>
1666
1667        
1668        <div>
1669          <button @click="activeDropdown = activeDropdown==='language' ? null : 'language'"
1670                  class="flex justify-between w-full py-2 items-center gap-2 font-semibold"
1671                  :aria-expanded="(activeDropdown==='language').toString()"
1672                  aria-controls="drawer-language">
1673            <span class="flex items-center gap-2">
1674              <img :src="selectedLang.flag" class="w-5 h-5 rounded-sm" alt="">
1675              <span x-text="selectedLang.name"></span>
1676              <span class="opacity-70" x-text="'(' + selectedLang.abbr + ')'"></span>
1677            </span>
1678            <svg :class="activeDropdown==='language' ? 'rotate-180' : ''" class="w-4 h-4 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1679              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
1680            </svg>
1681          </button>
1682          <div id="drawer-language" x-show="activeDropdown==='language'" x-transition x-cloak class="pl-4 space-y-2">
1683            <template x-for="lang in langs" :key="lang.code">
1684              <a href="#" class="flex items-center font-semibold gap-2 py-1"
1685                 @click.prevent="setLanguage(lang.code); activeDropdown=null; openMenu=null;">
1686                <img :src="lang.flag" class="w-5 h-5 rounded-sm" alt="">
1687                <span x-text="lang.name"></span>
1688                <span class="ml-auto font-semibold opacity-70" x-text="'(' + lang.abbr + ')'"></span>
1689              </a>
1690            </template>
1691          </div>
1692        </div>
1693      </div>
1694    </aside>
1695  </div>-->
1696
1697  
1698  <div
1699    x-show="openMenu === 'mobile'"
1700    x-transition:enter="transition ease-out duration-200"
1701    x-transition:enter-start="opacity-0 scale-95"
1702    x-transition:enter-end="opacity-100 scale-100"
1703    x-transition:leave="transition ease-in duration-150"
1704    x-transition:leave-start="opacity-100 scale-100"
1705    x-transition:leave-end="opacity-0 scale-95"
1706    x-cloak
1707    class="ahr-mobile xl:hidden fixed inset-0 overflow-y-auto z-[9999] transition-colors duration-300"
1708    :class="scrolled ? 'bg-[#0047b3] text-white' : 'bg-[#0047b3] text-white'"
1709    @keydown.escape.window="openMenu = null"
1710    @click.self="openMenu = null"
1711  >
1712    <div class="px-5 py-5 flex items-center justify-between">
1713      
1714      <div class="m-logo-wrap w-44 h-12 md:w-52 md:h-14" :data-scrolled="scrolled">
1715        <div class="logo-smooth logo-scaler h-full w-full relative flex items-center justify-start">
1716          <img
1717            src="https://astoriaboracay.com/images/ab1-logo-white.webp"
1718            onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/ab1-logo.webp';"
1719            class="fade-img h-full w-full object-contain"
1720            alt="Astoria Current"
1721          >
1722        </div>
1723      </div>
1724      <button @click="openMenu = null" aria-label="Close menu" class="p-2 hover:opacity-80">
1725        <svg class="w-7 h-7" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1726          <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1727        </svg>
1728      </button>
1729    </div>
1730
1731    <div class="px-6 pb-16 space-y-4">
1732       
1733      <form action="https://astoriaboracay.com/search" method="GET" role="search" class="rounded-2xl border border-white/20 bg-white/10 p-3 backdrop-blur">
1734        <label for="ab1-mobile-menu-search" class="sr-only">Search Astoria Boracay</label>
1735        <div class="flex items-center gap-2 rounded-xl bg-white px-4 py-2.5 text-[#25282a]">
1736          <svg class="h-5 w-5 shrink-0 text-[#0047BB]" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
1737            <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-4.35-4.35M10.5 18a7.5 7.5 0 1 1 0-15 7.5 7.5 0 0 1 0 15Z"/>
1738          </svg>
1739          <input
1740            id="ab1-mobile-menu-search"
1741            name="q"
1742            type="search"
1743            value=""
1744            placeholder="Search Astoria Boracay"
1745            autocomplete="off"
1746            class="w-full border-0 bg-transparent p-0 text-base font-medium text-[#25282a] placeholder:text-[#25282a]/40 focus:border-0 focus:outline-none focus:ring-0"
1747            required
1748          >
1749          <button type="submit" class="rounded-lg bg-[#0047BB] px-3 py-2 text-[11px] font-bold uppercase tracking-[.14em] text-white">Go</button>
1750        </div>
1751      </form>
1752
1753      
1754      <div class="pt-1">
1755        <button
1756          @click.stop="mobileBookingOpen = !mobileBookingOpen; $nextTick(()=>{ if(mobileBookingOpen){ document.getElementById('m-booking-form')?.scrollIntoView({behavior:'smooth', block:'start'}); } });"
1757          :class="[
1758            'w-full font-bold px-5 py-3 rounded-xl shadow transition text-sm uppercase tracking-widest flex items-center justify-center gap-2',
1759            scrolled ? 'bg-[#63666A] text-white' : 'bg-[#63666A] text-white'
1760          ].join(' ')"
1761          :aria-expanded="mobileBookingOpen"
1762        >
1763          <svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true">
1764            <path d="M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v1h16V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1z"/>
1765            <path d="M18 8H2v8a2 2 0 002 2h12a2 2 0 002-2V8z"/>
1766          </svg>
1767          <span x-text="mobileBookingOpen ? 'Close Booking' : 'Book Now'"></span>
1768        </button>
1769
1770        <div
1771          id="m-booking-form"
1772          x-show="mobileBookingOpen"
1773          x-transition:enter="transition ease-out duration-200"
1774          x-transition:enter-start="opacity-0 translate-y-2"
1775          x-transition:enter-end="opacity-100 translate-y-0"
1776          x-transition:leave="transition ease-in duration-150"
1777          x-transition:leave-start="opacity-100 translate-y-0"
1778          x-transition:leave-end="opacity-0 translate-y-2"
1779          x-cloak
1780          class="mt-4 rounded-2xl border border-gray-200 bg-white text-[#25282a] shadow-2xl p-4"
1781        >
1782          <div class="flex items-center justify-between mb-2">
1783            <h3 class="font-semibold text-base">Quick Booking — Astoria Boracay</h3>
1784            <button @click="mobileBookingOpen = false" aria-label="Close mobile booking" class="p-2 rounded-md hover:bg-gray-100">
1785              <svg class="w-5 h-5" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
1786                <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
1787              </svg>
1788            </button>
1789          </div>
1790
1791          <form
1792            x-data="{
1793              actionCurrent: 'https://book-directonline.com/properties/AstoriaBoracaydirect?',
1794              today: (new Date(Date.now() - new Date().getTimezoneOffset()*60000)).toISOString().slice(0,10)
1795            }"
1796            :action="actionCurrent"
1797            method="GET"
1798            target="_blank"
1799          >
1800            <div class="grid grid-cols-1 gap-3">
1801              <div class="grid grid-cols-2 gap-3">
1802                <div class="flex flex-col">
1803                  <label for="check_in_date_m" class="text-xs font-semibold mb-1 uppercase tracking-wide">Check In</label>
1804                  <input name="check_in_date" id="check_in_date_m" type="date"
1805                         :min="today"
1806                         class="rounded-lg border border-gray-300 focus:border-[#25282a] focus:ring-[#25282a] px-3 py-2 text-sm bg-white w-full shadow-sm" required />
1807                </div>
1808                <div class="flex flex-col">
1809                  <label for="number_nights_m" class="text-xs font-semibold mb-1 uppercase tracking-wide">Nights</label>
1810                  <input class="rounded-lg border border-gray-300 focus:border-[#25282a] focus:ring-[#25282a] px-3 py-2 text-sm bg-white w-full shadow-sm"
1811                         name="number_nights" id="number_nights_m" type="number" min="1" value="1" required />
1812                </div>
1813              </div>
1814
1815              <div class="grid grid-cols-2 gap-3">
1816                <div class="flex flex-col">
1817                  <label for="number_adults_m" class="text-xs font-semibold mb-1 uppercase tracking-wide">Guest/s</label>
1818                  <input class="rounded-lg border border-gray-300 focus:border-[#25282a] focus:ring-[#25282a] px-3 py-2 text-sm bg-white w-full shadow-sm"
1819                         name="number_adults" id="number_adults_m" type="number" min="1" max="4" value="1" required />
1820                </div>
1821
1822                <div class="flex items-end">
1823                  <button type="submit"
1824                          class="w-full bg-[#18206B] hover:bg-[#141852] text-white font-bold px-4 py-2.5 rounded-lg shadow transition text-[12px] uppercase tracking-[.18em]">
1825                    Book Now
1826                  </button>
1827                </div>
1828              </div>
1829            </div>
1830          </form>
1831        </div>
1832      </div>
1833
1834      
1835      <nav class="space-y-2">
1836        <a @click="openMenu = null" href="https://astoriaboracay.com" class="block py-2">Home</a>
1837
1838        
1839        <div x-data="{ open:false }" class="border-y border-black/10/0">
1840          <div class="flex justify-between w-full py-2 items-center">
1841            <a @click="openMenu=null" href="https://astoriaboracay.com/about" class="font-semibold">About</a>
1842            <button @click="open = !open" class="p-1" :aria-expanded="open.toString()" aria-controls="m-about">
1843              <svg :class="open ? 'rotate-180' : ''" class="w-4 h-4 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1844                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
1845              </svg>
1846            </button>
1847          </div>
1848          <div id="m-about" x-show="open" x-transition x-cloak class="pl-4 space-y-2 font-semibold">
1849            <a @click="openMenu=null" href="https://astoriaboracay.com/amenities"       class="block py-1">Amenities</a>
1850            <a @click="openMenu=null" href="https://astoriaboracay.com/csr"       class="block py-1">CSR</a>
1851            <a @click="openMenu=null" href="https://astoriaboracay.com/faqs"      class="block py-1">FAQs</a>
1852            <a @click="openMenu=null" href="https://astoriaboracay.com/blogs"     class="block py-1">Blogs</a>
1853            <a @click="openMenu=null" href="https://astoriaboracay.com/special-offers"    class="block py-1">Promos</a>
1854          </div>
1855        </div>
1856
1857        
1858        <div x-data="{ open:false }">
1859          <div class="flex justify-between w-full py-2 items-center">
1860            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations" class="font-semibold">Accommodations</a>
1861            <button @click="open = !open" class="p-1" :aria-expanded="open.toString()" aria-controls="m-accommodations">
1862              <svg :class="open ? 'rotate-180' : ''" class="w-4 h-4 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1863                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
1864              </svg>
1865            </button>
1866          </div>
1867          <div id="m-accommodations" x-show="open" x-transition x-cloak class="pl-4 space-y-2 font-semibold">
1868            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/deluxe-room"    class="block py-1">Deluxe Rooms</a>
1869            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/premier"   class="block py-1">Premier Room</a>
1870            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/luxury-room"    class="block py-1">Luxury Room</a>
1871            <a @click="openMenu=null" href="https://astoriaboracay.com/accommodations/honeymoon-suite" class="block py-1">Honeymoon Suite</a>
1872          </div>
1873        </div>
1874
1875        <a href="https://astoriaboracay.com/food-beverages" class="block py-2 font-semibold">F&amp;B</a>
1876        <a href="https://astoriaboracay.com/meetings-events" class="block py-2 font-semibold">Meetings &amp; Events</a>
1877        <a @click="openMenu = null" href="https://astoriaboracay.com/contact-us" class="block py-2 font-semibold">Contact Us</a>
1878
1879        
1880        <div x-data="{ open:false }" class="pt-2">
1881          <div class="flex justify-between w-full py-2 items-center gap-2 font-semibold">
1882            <span class="flex items-center gap-2">
1883              <img :src="selectedLang.flag" class="w-5 h-5 rounded-sm" alt="">
1884              <span x-text="selectedLang.name"></span>
1885              <span class="opacity-70" x-text="'(' + selectedLang.abbr + ')'"></span>
1886            </span>
1887            <button @click="open = !open" class="p-1" :aria-expanded="open.toString()" aria-controls="m-language">
1888              <svg :class="open ? 'rotate-180' : ''" class="w-4 h-4 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1889                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
1890              </svg>
1891            </button>
1892          </div>
1893          <div id="m-language" x-show="open" x-transition x-cloak class="pl-4 space-y-2">
1894            <template x-for="lang in langs" :key="lang.code">
1895              <a href="#" class="flex items-center font-semibold gap-2 py-1"
1896                 @click.prevent="setLanguage(lang.code); openMenu=null;">
1897                <img :src="lang.flag" class="w-5 h-5 rounded-sm" alt="">
1898                <span x-text="lang.name"></span>
1899                <span class="ml-auto font-semibold opacity-70" x-text="'(' + lang.abbr + ')'"></span>
1900              </a>
1901            </template>
1902          </div>
1903        </div>
1904      </nav>
1905
1906      <div class="h-8"></div>
1907    </div>
1908  </div>
1909</header>
1910
1911
1912
1913<style>
1914  #ab1-translate-loader{
1915    position: fixed;
1916    inset: 1rem 1rem auto 1rem;
1917    z-index: 2147483647;
1918    display: flex;
1919    justify-content: center;
1920    pointer-events: none;
1921    opacity: 0;
1922    visibility: hidden;
1923    transform: translateY(-10px);
1924    transition:
1925      opacity .35s ease,
1926      transform .35s ease,
1927      visibility 0s linear .35s;
1928  }
1929
1930  #ab1-translate-loader.is-visible{
1931    opacity: 1;
1932    visibility: visible;
1933    transform: translateY(0);
1934    transition:
1935      opacity .35s ease,
1936      transform .35s ease,
1937      visibility 0s linear 0s;
1938  }
1939
1940  #ab1-translate-loader .ab1-translate-card{
1941    width: min(100%, 560px);
1942    border-radius: 20px;
1943    background: rgba(37, 40, 42, 0.95);
1944    color: #fff;
1945    border: 1px solid rgba(255,255,255,0.12);
1946    box-shadow: 0 20px 50px rgba(15, 23, 42, 0.28);
1947    backdrop-filter: blur(10px);
1948    -webkit-backdrop-filter: blur(10px);
1949  }
1950
1951  #ab1-translate-loader .ab1-translate-inner{
1952    display: flex;
1953    align-items: flex-start;
1954    gap: 1rem;
1955    padding: 1.05rem 1.15rem;
1956  }
1957
1958  #ab1-translate-loader .ab1-translate-spinner{
1959    width: 1.3rem;
1960    height: 1.3rem;
1961    flex: none;
1962    margin-top: .2rem;
1963    border-radius: 9999px;
1964    border: 2px solid rgba(255,255,255,.22);
1965    border-top-color: #0047bb;
1966    animation: ab1TranslateSpin .8s linear infinite;
1967  }
1968
1969  #ab1-translate-loader .ab1-translate-title{
1970    margin: 0;
1971    font-size: 1.12rem;
1972    font-weight: 800;
1973    line-height: 1.25;
1974    letter-spacing: .01em;
1975  }
1976
1977  #ab1-translate-loader .ab1-translate-copy{
1978    margin: .28rem 0 0;
1979    font-size: .96rem;
1980    font-weight: 500;
1981    line-height: 1.45;
1982    color: rgba(255,255,255,.82);
1983  }
1984
1985  @keyframes ab1TranslateSpin{
1986    to{ transform: rotate(360deg); }
1987  }
1988
1989  @media (max-width: 639px){
1990    #ab1-translate-loader{
1991      inset: .75rem .75rem auto .75rem;
1992    }
1993
1994    #ab1-translate-loader .ab1-translate-card{
1995      width: 100%;
1996      border-radius: 18px;
1997    }
1998
1999    #ab1-translate-loader .ab1-translate-inner{
2000      gap: .9rem;
2001      padding: 1rem 1rem;
2002    }
2003
2004    #ab1-translate-loader .ab1-translate-spinner{
2005      width: 1.2rem;
2006      height: 1.2rem;
2007    }
2008
2009    #ab1-translate-loader .ab1-translate-title{
2010      font-size: 1rem;
2011    }
2012
2013    #ab1-translate-loader .ab1-translate-copy{
2014      font-size: .88rem;
2015    }
2016  }
2017
2018  @media (prefers-reduced-motion: reduce){
2019    #ab1-translate-loader,
2020    #ab1-translate-loader.is-visible{
2021      transition: none !important;
2022    }
2023
2024    #ab1-translate-loader .ab1-translate-spinner{
2025      animation: none !important;
2026    }
2027  }
2028</style>
2029
2030<div id="ab1-translate-loader" aria-live="polite" aria-atomic="true">
2031  <div class="ab1-translate-card">
2032    <div class="ab1-translate-inner">
2033      <span class="ab1-translate-spinner" aria-hidden="true"></span>
2034
2035      <div>
2036        <p class="ab1-translate-title">Loading...</p>
2037        <p class="ab1-translate-copy">Translation is powered by Google Translate.</p>
2038      </div>
2039    </div>
2040  </div>
2041</div>
2042
2043<script>
2044  (function () {
2045    if (window.__ab1GoogleTranslateLoaderReady) return;
2046    window.__ab1GoogleTranslateLoaderReady = true;
2047
2048    const LOADER_ID = 'ab1-translate-loader';
2049    const STORAGE_KEY = 'ab1_google_translate_loading';
2050    const STORAGE_CODE_KEY = 'ab1_google_translate_loading_code';
2051    const STORAGE_TS_KEY = 'ab1_google_translate_loading_ts';
2052    const SUCCESS_HOLD_MS = 1300;   // keep visible after success so users can see it
2053    const FAILSAFE_HOLD_MS = 1400;  // keep visible a bit even on fallback
2054
2055    let hideTimer = null;
2056
2057    function getLoader() {
2058      return document.getElementById(LOADER_ID);
2059    }
2060
2061    function clearHideTimer() {
2062      if (hideTimer) {
2063        clearTimeout(hideTimer);
2064        hideTimer = null;
2065      }
2066    }
2067
2068    function showLoader() {
2069      clearHideTimer();
2070      const el = getLoader();
2071      if (el) el.classList.add('is-visible');
2072    }
2073
2074    function hideLoader(delay = SUCCESS_HOLD_MS) {
2075      clearHideTimer();
2076      hideTimer = window.setTimeout(() => {
2077        const el = getLoader();
2078        if (el) el.classList.remove('is-visible');
2079      }, delay);
2080    }
2081
2082    function rememberPending(code) {
2083      try {
2084        sessionStorage.setItem(STORAGE_KEY, '1');
2085        sessionStorage.setItem(STORAGE_CODE_KEY, code || 'en');
2086        sessionStorage.setItem(STORAGE_TS_KEY, String(Date.now()));
2087      } catch (_) {}
2088    }
2089
2090    function clearPending() {
2091      try {
2092        sessionStorage.removeItem(STORAGE_KEY);
2093        sessionStorage.removeItem(STORAGE_CODE_KEY);
2094        sessionStorage.removeItem(STORAGE_TS_KEY);
2095      } catch (_) {}
2096    }
2097
2098    function isTranslated() {
2099      return !!document.querySelector('iframe.goog-te-banner-frame')
2100        || document.body?.classList.contains('translated-ltr')
2101        || document.body?.classList.contains('translated-rtl');
2102    }
2103
2104    function translationLooksReady(code) {
2105      const target = String(code || 'en').toLowerCase().split('-')[0];
2106      const htmlLang = String(document.documentElement.getAttribute('lang') || '').toLowerCase();
2107
2108      if (target === 'en') {
2109        return htmlLang.startsWith('en') || !isTranslated();
2110      }
2111
2112      return htmlLang.startsWith(target) || isTranslated();
2113    }
2114
2115    function watchUntilDone(code) {
2116      const startedAt = Date.now();
2117      const maxWait = 8000;
2118      let finished = false;
2119
2120      const finish = () => {
2121        if (finished) return;
2122        finished = true;
2123
2124        clearInterval(intervalId);
2125        observer.disconnect();
2126        clearPending();
2127        hideLoader(SUCCESS_HOLD_MS);
2128      };
2129
2130      const check = () => {
2131        if (translationLooksReady(code) || (Date.now() - startedAt) > maxWait) {
2132          finish();
2133        }
2134      };
2135
2136      const observer = new MutationObserver(check);
2137      const intervalId = window.setInterval(check, 150);
2138
2139      observer.observe(document.documentElement, {
2140        attributes: true,
2141        childList: true,
2142        subtree: true,
2143      });
2144
2145      if (document.body) {
2146        observer.observe(document.body, {
2147          attributes: true,
2148          childList: true,
2149          subtree: true,
2150        });
2151      }
2152
2153      check();
2154    }
2155
2156    window.ab1RunTranslateWithLoader = function (code) {
2157      showLoader();
2158      rememberPending(code);
2159
2160      if (typeof window.applyTranslation === 'function') {
2161        window.applyTranslation(code);
2162        watchUntilDone(code);
2163        return;
2164      }
2165
2166      clearPending();
2167      hideLoader(FAILSAFE_HOLD_MS);
2168    };
2169
2170    document.addEventListener('DOMContentLoaded', function () {
2171      try {
2172        const pending = sessionStorage.getItem(STORAGE_KEY) === '1';
2173        const ts = Number(sessionStorage.getItem(STORAGE_TS_KEY) || 0);
2174
2175        if (pending && ts && (Date.now() - ts) < 10000) {
2176          showLoader();
2177          watchUntilDone(sessionStorage.getItem(STORAGE_CODE_KEY) || 'en');
2178        } else {
2179          clearPending();
2180        }
2181      } catch (_) {}
2182    });
2183  })();
2184</script>
2184
2185
2186<main class="relative">
2187  
2188
2189
2190  <style>
2191    html,body{max-width:100%;overflow-x:clip;}
2192    @supports not (overflow:clip){html,body{overflow-x:hidden;}}
2193    .ap-media-skeleton{isolation:isolate;background:#dce4ee;}
2194    .ap-media-skeleton.ap-media-hero,
2195    .ap-media-skeleton.ap-media-card{background:#0047BB;}
2196    .ap-media-skeleton::before{
2197      content:"";
2198      position:absolute;
2199      inset:0;
2200      z-index:1;
2201      pointer-events:none;
2202      background:linear-gradient(100deg,#dce4ee 15%,#f6f8fb 45%,#dce4ee 75%);
2203      background-size:200% 100%;
2204      animation:apMediaShimmer 1.35s linear infinite;
2205    }
2206    .ap-media-skeleton.ap-media-hero::before,
2207    .ap-media-skeleton.ap-media-card::before{
2208      background:linear-gradient(100deg,#0047BB 15%,#3672c4 45%,#0047BB 75%);
2209      background-size:200% 100%;
2210    }
2211    .ap-media-skeleton > img{opacity:0;}
2212    .ap-media-skeleton.ap-media-ready > img{opacity:1;}
2213    .ap-media-skeleton.ap-media-ready::before,
2214    .ap-media-skeleton.ap-media-error::before{display:none;}
2215    @keyframes apMediaShimmer{to{background-position-x:-200%;}}
2216    @media (prefers-reduced-motion:reduce){
2217      .ap-media-skeleton::before{animation:none;}
2218    }
2219  </style>
2220  <noscript><style>.ap-media-skeleton::before{display:none}.ap-media-skeleton > img{opacity:1}</style></noscript>
2221  
2221<script>
2222    (function(){
2223      function syncImage(image, failed){
2224        if(!image || image.tagName !== 'IMG'){return;}
2225        var frame=image.closest('[data-ap-media]');
2226        if(!frame){return;}
2227        frame.classList.toggle('ap-media-error',!!failed);
2228        frame.classList.toggle('ap-media-ready',!failed && image.complete && image.naturalWidth > 0);
2229      }
2230      document.addEventListener('load',function(event){syncImage(event.target,false);},true);
2231      document.addEventListener('error',function(event){syncImage(event.target,true);},true);
2232      function watchMedia(){
2233        document.querySelectorAll('[data-ap-media] > img').forEach(function(image){syncImage(image,false);});
2234        var shell=document.getElementById('ab-page-shell') || document.body;
2235        if(shell && window.MutationObserver){
2236          new MutationObserver(function(changes){
2237            changes.forEach(function(change){
2238              if(change.type === 'attributes'){syncImage(change.target,false);return;}
2239              change.addedNodes.forEach(function(node){
2240                if(node.nodeType !== 1){return;}
2241                if(node.matches && node.matches('[data-ap-media] > img')){syncImage(node,false);}
2242                if(node.querySelectorAll){
2243                  node.querySelectorAll('[data-ap-media] > img').forEach(function(image){syncImage(image,false);});
2244                }
2245              });
2246            });
2247          }).observe(shell,{subtree:true,attributes:true,attributeFilter:['src'],childList:true});
2248        }
2249      }
2250      if(document.readyState === 'loading'){
2251        document.addEventListener('DOMContentLoaded',watchMedia,{once:true});
2252      }else{watchMedia();}
2253    })();
2254  </script>
2254
2255
2256
2257<div id="ab-page-shell" class="ab-page-shell ab-page-blogs" aria-busy="false">
2258
2259
2260
2261<main x-data="blogIndex()" data-blog-index-root class="bg-white">
2262
2263
2264<section id="blog-hero" class="relative isolate w-full">
2265  <!-- Background image -->
2266  <picture class="ap-media-skeleton ap-media-hero absolute inset-0 -z-10" data-ap-media>
2267    <source srcset="https://astoriaboracay.com/images/blog-header.webp" media="(min-width: 1024px)">
2268    <img src="https://astoriaboracay.com/images/blog-header.webp" alt="Astoria Current" class="h-full w-full object-cover">
2269  </picture>
2270
2271  <!-- Black overlays -->
2272  <div class="absolute inset-0 -z-10 bg-black/15"></div>
2273  <div class="absolute inset-0 -z-10 bg-gradient-to-t from-black/10 via-black/5 to-black/15"></div>
2274
2275  <!-- Animations -->
2276  <style>
2277    @keyframes heroFadeUp { from { opacity: 0; transform: translateY(14px) } to { opacity: 1; transform: none } }
2278    #blog-hero .fx {
2279      opacity: 0; transform: translateY(14px);
2280      animation: heroFadeUp .68s cubic-bezier(.22,1,.36,1) forwards;
2281      animation-delay: var(--d, 0ms);
2282      will-change: transform, opacity;
2283    }
2284    @media (prefers-reduced-motion: reduce) {
2285      #blog-hero .fx { animation: none !important; opacity: 1 !important; transform: none !important; }
2286    }
2287  </style>
2288
2289  <!-- Content -->
2290  <div class="mx-auto max-w-7xl px-6">
2291    <div class="min-h-[80vh] sm:min-h-[86vh] lg:min-h-[92vh] pt-28 sm:pt-32 pb-12 flex items-center">
2292      <div class="w-full text-left">
2293        <!-- Desktop-only: H1 is full width (no clamp); other texts remain comfortably readable -->
2294        <h1 tabindex="-1" data-listing-top-heading class="fx text-white text-4xl sm:text-5xl md:text-6xl lg:text-7xl font-semibold leading-tight tracking-tight w-full lg:max-w-none"
2295            style="--d:120ms">
2296          Astoria Boracay Blogs
2297        </h1>
2298
2299        <div class="mt-4 flex items-center gap-4 max-w-3xl">
2300          <h2 class="fx text-white text-2xl sm:text-3xl md:text-4xl font-semibold tracking-tight" style="--d:220ms">
2301            Stories &amp; Updates
2302          </h2>
2303          <span class="fx sm:inline-block h-1 w-16 rounded-full bg-[#E6E7E8]" style="--d:260ms"></span>
2304        </div>
2305
2306        <p class="fx mt-5 text-white/90 text-base sm:text-lg md:text-xl max-w-2xl" style="--d:320ms">
2307          News, tips, and inspiration curated for our guests.
2308        </p>
2309      </div>
2310    </div>
2311  </div>
2312</section>
2313
2314
2315
2316
2317
2318<!-- ==== Redesigned AHR Quick Booking Card — SPR layout, Astoria Boracay palette ==== -->
2319<style>
2320  #ahr-quick-booking{
2321    --book-navy:#0047BB;
2322    --book-accent:#63666A;
2323    --book-yellow:#0047BB;
2324    --book-ink:#25282a;
2325    --book-line:#dfe4ea;
2326    --book-field:#f7f8fa;
2327    position:relative;
2328    z-index:40;
2329    padding:18px 20px 44px;
2330    background:#f5f7fb;
2331    color:var(--book-ink);
2332  }
2333  #ahr-quick-booking .ahr-bookbar__inner{
2334    position:relative;
2335    width:100%;
2336    max-width:1400px;
2337    margin:0 auto;
2338    padding:22px;
2339    border:1px solid rgba(0,71,187,.11);
2340    border-radius:26px;
2341    background:rgba(255,255,255,.97);
2342    box-shadow:0 20px 55px rgba(15,23,42,.15);
2343    -webkit-backdrop-filter:blur(14px);
2344    backdrop-filter:blur(14px);
2345  }
2346  #ahr-quick-booking.is-reveal-ready .ahr-bookbar__inner{
2347    opacity:0;
2348    transform:translateY(26px);
2349    will-change:opacity,transform;
2350    transition:
2351      opacity 650ms ease,
2352      transform 760ms cubic-bezier(.22,1,.36,1);
2353  }
2354  #ahr-quick-booking.is-reveal-ready.is-visible .ahr-bookbar__inner{
2355    opacity:1;
2356    transform:translateY(0);
2357  }
2358  #ahr-quick-booking .bookbar-heading{
2359    min-width:0;
2360  }
2361  #ahr-quick-booking .bookbar-title{
2362    margin:0;
2363    color:var(--book-navy);
2364    font:700 clamp(22px,2vw,29px)/1.05 "Whitney","Open Sans",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
2365    letter-spacing:-.025em;
2366  }
2367  #ahr-quick-booking .ahr-bookform{
2368    display:grid;
2369    gap:12px;
2370    align-items:end;
2371    min-width:0;
2372  }
2373  #ahr-quick-booking .bookbar-field,
2374  #ahr-quick-booking .bookbar-actions{
2375    min-width:0;
2376    width:100%;
2377  }
2378  #ahr-quick-booking .bookbar-label{
2379    display:block;
2380    margin:0 0 7px 2px;
2381    color:var(--book-navy);
2382    font:700 10px/1.1 "Whitney","Open Sans",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
2383    letter-spacing:.13em;
2384    text-transform:uppercase;
2385  }
2386  #ahr-quick-booking .bookbar-control{
2387    position:relative;
2388    min-width:0;
2389  }
2390  #ahr-quick-booking .bookbar-icon{
2391    position:absolute;
2392    z-index:2;
2393    top:50%;
2394    left:15px;
2395    width:18px;
2396    height:18px;
2397    color:var(--book-navy);
2398    pointer-events:none;
2399    transform:translateY(-50%);
2400  }
2401  #ahr-quick-booking .bookbar-input{
2402    width:100%;
2403    height:54px;
2404    min-width:0;
2405    padding:0 13px 0 45px;
2406    border:1px solid var(--book-line);
2407    border-radius:14px;
2408    outline:none;
2409    background:var(--book-field);
2410    color:var(--book-ink);
2411    font:700 15px/1.2 "Whitney","Open Sans",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
2412    text-align:left;
2413    -webkit-appearance:none;
2414    -moz-appearance:textfield;
2415    appearance:none;
2416    color-scheme:light;
2417    transition:border-color .18s ease,box-shadow .18s ease,background-color .18s ease;
2418  }
2419  #ahr-quick-booking .bookbar-input:hover{
2420    border-color:rgba(99,102,106,.48);
2421    background:#fff;
2422  }
2423  #ahr-quick-booking .bookbar-input:focus{
2424    border-color:var(--book-accent);
2425    background:#fff;
2426    box-shadow:0 0 0 4px rgba(99,102,106,.14);
2427  }
2428  #ahr-quick-booking .bookbar-input[type="number"]::-webkit-outer-spin-button,
2429  #ahr-quick-booking .bookbar-input[type="number"]::-webkit-inner-spin-button{
2430    margin:0;
2431    -webkit-appearance:none;
2432  }
2433
2434  #ahr-quick-booking .btn-book-now,
2435  #ahr-quick-booking .btn-book-toggle{
2436    display:inline-flex;
2437    align-items:center;
2438    justify-content:center;
2439    gap:10px;
2440    width:100%;
2441    height:54px;
2442    padding:0 20px;
2443    border:1px solid var(--book-accent);
2444    border-radius:14px;
2445    background:var(--book-accent);
2446    color:#fff;
2447    font:700 11px/1 "Whitney","Open Sans",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
2448    letter-spacing:.13em;
2449    text-transform:uppercase;
2450    white-space:nowrap;
2451    cursor:pointer;
2452    box-shadow:0 10px 24px rgba(99,102,106,.24);
2453    -webkit-tap-highlight-color:transparent;
2454    transition:transform .15s ease,box-shadow .2s ease,filter .2s ease;
2455  }
2456  #ahr-quick-booking .btn-book-now:hover,
2457  #ahr-quick-booking .btn-book-toggle:hover{
2458    filter:brightness(1.04);
2459    transform:translateY(-1px);
2460    box-shadow:0 13px 28px rgba(99,102,106,.32);
2461  }
2462  #ahr-quick-booking .btn-book-now:active,
2463  #ahr-quick-booking .btn-book-toggle:active{
2464    transform:translateY(0);
2465  }
2466  #ahr-quick-booking .btn-book-now:focus-visible,
2467  #ahr-quick-booking .btn-book-toggle:focus-visible{
2468    outline:3px solid rgba(0,71,187,.38);
2469    outline-offset:3px;
2470  }
2471  #ahr-quick-booking .btn-book-now svg,
2472  #ahr-quick-booking .btn-book-toggle svg{
2473    width:18px;
2474    height:18px;
2475    flex:0 0 auto;
2476  }
2477  #ahr-quick-booking .btn-book-toggle{
2478    display:none;
2479  }
2480  #ahr-quick-booking .btn-book-toggle__chevron{
2481    transition:transform .22s ease;
2482  }
2483  #ahr-quick-booking.is-open .btn-book-toggle__chevron{
2484    transform:rotate(180deg);
2485  }
2486
2487  @media (min-width:1100px){
2488    #ahr-quick-booking{
2489      padding-right:28px;
2490      padding-bottom:20px;
2491      padding-left:28px;
2492    }
2493    #ahr-quick-booking .ahr-bookbar__inner{
2494      display:grid;
2495      grid-template-columns:minmax(185px,220px) minmax(0,1fr);
2496      gap:24px;
2497      align-items:end;
2498      margin-top:0;
2499      padding:24px 26px;
2500    }
2501    #ahr-quick-booking .bookbar-heading{
2502      align-self:stretch;
2503      display:flex;
2504      flex-direction:column;
2505      justify-content:center;
2506      padding-right:24px;
2507      border-right:1px solid var(--book-line);
2508    }
2509    #ahr-quick-booking .ahr-bookform{
2510      grid-template-columns:minmax(190px,1.5fr) repeat(3,minmax(105px,.75fr)) minmax(160px,.9fr);
2511    }
2512  }
2513
2514  @media (min-width:700px) and (max-width:1099px){
2515    #ahr-quick-booking .ahr-bookbar__inner{
2516      margin-top:0;
2517    }
2518    #ahr-quick-booking .bookbar-heading{
2519      margin-bottom:20px;
2520    }
2521    #ahr-quick-booking .ahr-bookform{
2522      grid-template-columns:1.35fr repeat(3,minmax(0,1fr));
2523    }
2524    #ahr-quick-booking .bookbar-actions{
2525      grid-column:1/-1;
2526    }
2527  }
2528
2529  @media (max-width:699px){
2530    #ahr-quick-booking{
2531      padding:12px 10px 24px;
2532    }
2533    #ahr-quick-booking .ahr-bookbar__inner{
2534      margin-top:0;
2535      padding:12px;
2536      border-radius:16px;
2537      box-shadow:0 12px 30px rgba(15,23,42,.12);
2538    }
2539    #ahr-quick-booking .bookbar-title{
2540      font-size:18px;
2541    }
2542    #ahr-quick-booking .bookbar-heading{
2543      margin-bottom:10px;
2544    }
2545    #ahr-quick-booking .btn-book-toggle{
2546      display:flex;
2547    }
2548    #ahr-quick-booking .btn-book-toggle,
2549    #ahr-quick-booking .btn-book-now{
2550      height:44px;
2551      gap:8px;
2552      padding:0 14px;
2553      border-radius:11px;
2554      font-size:10px;
2555      letter-spacing:.10em;
2556    }
2557    #ahr-quick-booking .btn-book-toggle svg,
2558    #ahr-quick-booking .btn-book-now svg{
2559      width:16px;
2560      height:16px;
2561    }
2562    #ahr-quick-booking .ahr-bookform{
2563      display:none;
2564      gap:9px;
2565      margin-top:12px;
2566    }
2567    #ahr-quick-booking.is-open .ahr-bookform{
2568      display:grid;
2569      grid-template-columns:1fr;
2570    }
2571    #ahr-quick-booking .bookbar-label{
2572      margin-bottom:5px;
2573      font-size:9px;
2574    }
2575    #ahr-quick-booking .bookbar-input{
2576      height:44px;
2577      padding-right:11px;
2578      padding-left:40px;
2579      border-radius:11px;
2580      font-size:13px;
2581    }
2582    #ahr-quick-booking .bookbar-icon{
2583      left:13px;
2584      width:16px;
2585      height:16px;
2586    }
2587  }
2588
2589  @media (prefers-reduced-motion:reduce){
2590    #ahr-quick-booking.is-reveal-ready .ahr-bookbar__inner{
2591      opacity:1 !important;
2592      transform:none !important;
2593      transition:none !important;
2594    }
2595    #ahr-quick-booking .btn-book-now,
2596    #ahr-quick-booking .btn-book-toggle,
2597    #ahr-quick-booking .btn-book-toggle__chevron{
2598      transition:none;
2599    }
2600  }
2601</style>
2602
2603<section id="ahr-quick-booking" aria-label="Quick booking">
2604  <div class="ahr-bookbar__inner">
2605    <header class="bookbar-heading">
2606      <h2 class="bookbar-title">Book Direct</h2>
2607    </header>
2608
2609    <button
2610      type="button"
2611      class="btn-book-toggle"
2612      aria-controls="bb-form"
2613      aria-expanded="false"
2614    >
2615      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2616        <rect x="3" y="5" width="18" height="16" rx="2"></rect>
2617        <path d="M16 3v4M8 3v4M3 10h18"></path>
2618      </svg>
2619      <span data-book-toggle-label>Check Availability</span>
2620      <svg class="btn-book-toggle__chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2621        <path d="m6 9 6 6 6-6"></path>
2622      </svg>
2623    </button>
2624
2625    <form
2626      id="bb-form"
2627      class="ahr-bookform"
2628      action="https://book-directonline.com/properties/AstoriaBoracaydirect?"
2629      method="GET"
2630      target="_blank"
2631    >
2632      <div class="bookbar-field bookbar-field--checkin">
2633        <label class="bookbar-label" for="bb-checkin">Check In</label>
2634        <div class="bookbar-control">
2635          <svg class="bookbar-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2636            <rect x="3" y="5" width="18" height="16" rx="2"></rect>
2637            <path d="M16 3v4M8 3v4M3 10h18"></path>
2638          </svg>
2639          <input class="bookbar-input" type="date" id="bb-checkin" name="check_in_date" required>
2640        </div>
2641      </div>
2642
2643      <div class="bookbar-field">
2644        <label class="bookbar-label" for="bb-nights">Nights</label>
2645        <div class="bookbar-control">
2646          <svg class="bookbar-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2647            <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
2648          </svg>
2649          <input class="bookbar-input" type="number" id="bb-nights" name="number_nights" min="1" value="1" inputmode="numeric" required>
2650        </div>
2651      </div>
2652
2653      <div class="bookbar-field">
2654        <label class="bookbar-label" for="bb-adults">Adults</label>
2655        <div class="bookbar-control">
2656          <svg class="bookbar-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2657            <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
2658            <circle cx="12" cy="7" r="4"></circle>
2659          </svg>
2660          <input class="bookbar-input" type="number" id="bb-adults" name="number_adults" min="1" max="7" value="1" inputmode="numeric" required>
2661        </div>
2662      </div>
2663
2664      <div class="bookbar-field">
2665        <label class="bookbar-label" for="bb-children">Children</label>
2666        <div class="bookbar-control">
2667          <svg class="bookbar-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2668            <path d="M18 20v-1a3 3 0 0 0-3-3h-2a3 3 0 0 0-3 3v1"></path>
2669            <circle cx="12" cy="7" r="3"></circle>
2670          </svg>
2671          <input class="bookbar-input" type="number" id="bb-children" name="number_children" min="0" max="3" value="0" inputmode="numeric" required>
2672        </div>
2673      </div>
2674
2675      <div class="bookbar-actions">
2676        <button class="btn-book-now" type="submit" aria-label="Check availability at Astoria Boracay">
2677          Check Availability
2678          <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
2679            <path d="M5 12h14M13 6l6 6-6 6"></path>
2680          </svg>
2681        </button>
2682      </div>
2683    </form>
2684  </div>
2685</section>
2686
2687<script>
2688  (function(){
2689    var bar=document.getElementById('ahr-quick-booking');
2690    if(!bar){return;}
2691
2692    var reduceMotion=window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
2693    if(!reduceMotion){
2694      bar.classList.add('is-reveal-ready');
2695
2696      var revealBookbar=function(){
2697        bar.classList.add('is-visible');
2698      };
2699
2700      if('IntersectionObserver' in window){
2701        var bookbarObserver=new IntersectionObserver(function(entries,observer){
2702          if(entries[0] && entries[0].isIntersecting){
2703            revealBookbar();
2704            observer.unobserve(bar);
2705          }
2706        },{
2707          threshold:.12,
2708          rootMargin:'0px 0px -8% 0px'
2709        });
2710        bookbarObserver.observe(bar);
2711      }else{
2712        window.requestAnimationFrame(revealBookbar);
2713      }
2714    }
2715
2716    var checkIn=document.getElementById('bb-checkin');
2717    if(checkIn){
2718      var timezoneOffset=new Date().getTimezoneOffset();
2719      var today=new Date(Date.now()-timezoneOffset*60000).toISOString().slice(0,10);
2720      checkIn.min=today;
2721      if(!checkIn.value){checkIn.value=today;}
2722    }
2723
2724    var toggle=bar.querySelector('.btn-book-toggle');
2725    var label=bar.querySelector('[data-book-toggle-label]');
2726    if(toggle){
2727      toggle.addEventListener('click',function(){
2728        var isOpen=bar.classList.toggle('is-open');
2729        toggle.setAttribute('aria-expanded',String(isOpen));
2730        if(label){label.textContent=isOpen?'Close Booking':'Check Availability';}
2731      });
2732    }
2733  })();
2734</script>
2734
2735
2736
2737  <!-- ========== FILTERS ========== -->
2738  <style>
2739    [data-blog-index-root].is-filtering [data-blog-results-shell] {
2740      opacity: .55;
2741      pointer-events: none;
2742    }
2743
2744    [data-blog-index-root] [data-blog-results-shell] {
2745      transition: opacity .22s ease;
2746    }
2747
2748    [data-blog-index-root] [data-blog-status] {
2749      opacity: 0;
2750      transform: translateY(-2px);
2751      transition: opacity .18s ease, transform .18s ease;
2752    }
2753
2754    [data-blog-index-root].is-filtering [data-blog-status] {
2755      opacity: 1;
2756      transform: translateY(0);
2757    }
2758  </style>
2759
2760  <section class="sticky top-0 pt-10 z-20 bg-white/85 backdrop-blur border-b border-gray-100">
2761    <div class="max-w-7xl mx-auto px-6 py-4">
2762      <form method="GET" action="https://astoriaboracay.com/blogs" data-blog-filter-form class="grid gap-3 md:grid-cols-12 md:items-center">
2763        
2764        <div class="md:col-span-6">
2765          <label for="q" class="sr-only">Search</label>
2766          <div class="relative">
2767            <input
2768              id="q"
2769              name="q"
2770              type="search"
2771              value=""
2772              placeholder="Search articles, e.g. “Boracay dining”…"
2773              autocomplete="off"
2774              data-live-search
2775              class="w-full rounded-xl border-gray-200 focus:border-[#0047BB] focus:ring-[#0047BB] px-4 py-2.5 pr-10"
2776            >
2777            <button type="submit" class="absolute right-2 top-1/2 -translate-y-1/2 p-2 rounded-lg hover:bg-[#F05323]/5" aria-label="Search">
2778              <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 opacity-70" viewBox="0 0 24 24" fill="none" stroke="currentColor">
2779                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
2780                      d="m21 21-4.35-4.35M11 19a8 8 0 1 1 0-16 8 8 0 0 1 0 16Z"/>
2781              </svg>
2782            </button>
2783          </div>
2784        </div>
2785
2786        
2787        <div class="md:col-span-3">
2788          <label for="category" class="sr-only">Category</label>
2789          <select id="category" name="category"
2790                  data-auto-submit
2791                  class="w-full rounded-xl border-gray-200 focus:border-[#0047BB] focus:ring-[#0047BB] px-3 py-2.5">
2792            <option value="">All categories</option>
2793                          <option value="astoria-boracay" >Astoria Boracay</option>
2794                          <option value="hotel-in-boracay" >Hotel in Boracay</option>
2795                          <option value="sada" >sada</option>
2796                          <option value="travel-guide" >Travel Guide</option>
2797                      </select>
2798        </div>
2799
2800        
2801        <div class="md:col-span-2">
2802          <label for="sort" class="sr-only">Sort</label>
2803                    <select id="sort" name="sort"
2804                  data-auto-submit
2805                  class="w-full rounded-xl border-gray-200 focus:border-[#0047BB] focus:ring-[#0047BB] px-3 py-2.5">
2806            <option value="latest"  selected>Latest</option>
2807            <option value="oldest"  >Oldest</option>
2808            <option value="popular" >Most Popular</option>
2809          </select>
2810        </div>
2811
2812        
2813        <div class="md:col-span-1 flex md:justify-end gap-2">
2814          <button type="submit"
2815                  data-blog-submit
2816                  class="inline-flex items-center justify-center rounded-xl bg-[#0047BB] text-white px-4 py-2.5 font-semibold transition shadow-sm disabled:cursor-wait disabled:opacity-70">
2817            Apply
2818          </button>
2819                  </div>
2820
2821        <div class="md:col-span-12 min-h-[20px]" aria-live="polite" aria-atomic="true">
2822          <span data-blog-status class="inline-flex items-center gap-2 rounded-full bg-[#0047BB]/10 px-3 py-1 text-sm font-semibold text-[#0047BB]">
2823            <svg class="h-3.5 w-3.5 animate-spin" viewBox="0 0 24 24" fill="none" aria-hidden="true">
2824              <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
2825              <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"></path>
2826            </svg>
2827            Updating articles...
2828          </span>
2829        </div>
2830
2831        
2832              </form>
2833    </div>
2834  </section>
2835
2836  <!-- ========== GRID ========== -->
2837  <section class="py-10 md:py-14" data-blog-results-shell aria-live="polite" aria-busy="false">
2838    <div class="max-w-7xl mx-auto px-6">
2839      
2840      
2841      
2842      
2843      <div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6" data-blog-results-grid>
2844                  
2845          <article
2846            data-blog-card
2847                        x-data
2848            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
2849            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
2850
2851            <a href="https://astoriaboracay.com/take-the-team-on-a-refreshing-work-cation-in-station-1-boracay" class="absolute inset-0 z-10" aria-label="Read more: Take the Team on a Refreshing Work-cation in Station 1, Boracay"></a>
2852
2853            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
2854              <img
2855                src="/storage/articles/take-the-team-on-a-refreshing-work-cation-in-station-1-boracay-20260729031026-OAbUe.webp"
2856                alt="Take the Team on a Refreshing Work-cation in Station 1, Boracay"
2857                loading="lazy"
2858                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
2859              />
2860
2861              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
2862              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
2863
2864                              
2865                <a href="https://astoriaboracay.com/blogs?category=hotel-in-boracay&amp;page=1"
2866                   data-blog-ajax-link
2867                   data-blog-scroll="true"
2868                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
2869                   aria-label="Filter by Hotel in Boracay">
2870                  Hotel in Boracay
2871                </a>
2872                          </div>
2873
2874            <div class="p-5 flex flex-col gap-3">
2875              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
2876                Take the Team on a Refreshing Work-cation in Station 1, Boracay
2877              </h3>
2878
2879              <p class="text-sm text-gray-600 line-clamp-3">
2880                Your team deserves to relax and unwind despite the busy schedules of work; book a stay and hold team functions at Astoria Boracay now!
2881              </p>
2882
2883              <div class="mt-1 flex flex-wrap gap-2">
2884                                  
2885                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
2886                     data-blog-ajax-link
2887                     data-blog-scroll="true"
2888                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
2889                    #hotel-in-boracay
2890                  </a>
2891                                  
2892                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay-station-1&amp;page=1"
2893                     data-blog-ajax-link
2894                     data-blog-scroll="true"
2895                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
2896                    #resort-in-boracay-station-1
2897                  </a>
2898                                  
2899                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
2900                     data-blog-ajax-link
2901                     data-blog-scroll="true"
2902                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
2903                    #astoria-boracay
2904                  </a>
2905                              </div>
2906
2907              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
2908                <div class="flex items-center gap-2">
2909                                      <time datetime="2026-05-18">
2910                      May 18, 2026
2911                    </time>
2912                  
2913                  <span aria-hidden="true">•</span>
2914                  <span class="opacity-80">Read more</span>
2915                </div>
2916
2917                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
2918                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
2919                </svg>
2920              </div>
2921            </div>
2922          </article>
2923                  
2924          <article
2925            data-blog-card
2926                        x-data
2927            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
2928            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
2929
2930            <a href="https://astoriaboracay.com/3-reasons-why-astoria-boracay-should-be-your-start-off-point-for-an-island-getaway" class="absolute inset-0 z-10" aria-label="Read more: 3 Reasons Why Astoria Boracay Should Be Your Start-Off Point for an Island Getaway"></a>
2931
2932            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
2933              <img
2934                src="/storage/articles/3-reasons-why-astoria-boracay-should-be-your-start-off-point-for-an-island-getaway-20260729030147-G3fNF.webp"
2935                alt="3 Reasons Why Astoria Boracay Should Be Your Start-Off Point for an Island Getaway"
2936                loading="lazy"
2937                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
2938              />
2939
2940              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
2941              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
2942
2943                              
2944                <a href="https://astoriaboracay.com/blogs?category=hotel-in-boracay&amp;page=1"
2945                   data-blog-ajax-link
2946                   data-blog-scroll="true"
2947                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
2948                   aria-label="Filter by Hotel in Boracay">
2949                  Hotel in Boracay
2950                </a>
2951                          </div>
2952
2953            <div class="p-5 flex flex-col gap-3">
2954              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
2955                3 Reasons Why Astoria Boracay Should Be Your Start-Off Point for an Island Getaway
2956              </h3>
2957
2958              <p class="text-sm text-gray-600 line-clamp-3">
2959                Start your Boracay island adventure with Astoria Boracay as your starting line.
2960              </p>
2961
2962              <div class="mt-1 flex flex-wrap gap-2">
2963                                  
2964                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
2965                     data-blog-ajax-link
2966                     data-blog-scroll="true"
2967                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
2968                    #astoria-boracay
2969                  </a>
2970                                  
2971                  <a href="https://astoriaboracay.com/blogs?tag=resorts-in-boracay&amp;page=1"
2972                     data-blog-ajax-link
2973                     data-blog-scroll="true"
2974                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
2975                    #resorts-in-boracay
2976                  </a>
2977                                  
2978                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
2979                     data-blog-ajax-link
2980                     data-blog-scroll="true"
2981                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
2982                    #hotel-in-boracay
2983                  </a>
2984                              </div>
2985
2986              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
2987                <div class="flex items-center gap-2">
2988                                      <time datetime="2026-04-24">
2989                      Apr 24, 2026
2990                    </time>
2991                  
2992                  <span aria-hidden="true">•</span>
2993                  <span class="opacity-80">Read more</span>
2994                </div>
2995
2996                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
2997                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
2998                </svg>
2999              </div>
3000            </div>
3001          </article>
3002                  
3003          <article
3004            data-blog-card
3005                        x-data
3006            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3007            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3008
3009            <a href="https://astoriaboracay.com/be-resort-ready-for-your-next-vacation-in-astoria-boracay-with-these-tips" class="absolute inset-0 z-10" aria-label="Read more: Be Resort-Ready for Your Next Vacation in Astoria Boracay with These Tips!"></a>
3010
3011            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3012              <img
3013                src="/storage/articles/be-resort-ready-for-your-next-vacation-in-astoria-boracay-with-these-tips-20260729024634-p9qJM.webp"
3014                alt="Be Resort-Ready for Your Next Vacation in Astoria Boracay with These Tips!"
3015                loading="lazy"
3016                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3017              />
3018
3019              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3020              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3021
3022                              
3023                <a href="https://astoriaboracay.com/blogs?category=hotel-in-boracay&amp;page=1"
3024                   data-blog-ajax-link
3025                   data-blog-scroll="true"
3026                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3027                   aria-label="Filter by Hotel in Boracay">
3028                  Hotel in Boracay
3029                </a>
3030                          </div>
3031
3032            <div class="p-5 flex flex-col gap-3">
3033              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3034                Be Resort-Ready for Your Next Vacation in Astoria Boracay with These Tips!
3035              </h3>
3036
3037              <p class="text-sm text-gray-600 line-clamp-3">
3038                Plan out what to bring and check the resorts amenities in advance in order to make your island vacation in Boracay, Station 1, a truly memorable and seamless one.
3039              </p>
3040
3041              <div class="mt-1 flex flex-wrap gap-2">
3042                                  
3043                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3044                     data-blog-ajax-link
3045                     data-blog-scroll="true"
3046                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3047                    #hotel-in-boracay
3048                  </a>
3049                                  
3050                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3051                     data-blog-ajax-link
3052                     data-blog-scroll="true"
3053                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3054                    #resort-in-boracay
3055                  </a>
3056                                  
3057                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
3058                     data-blog-ajax-link
3059                     data-blog-scroll="true"
3060                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3061                    #astoria-boracay
3062                  </a>
3063                              </div>
3064
3065              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3066                <div class="flex items-center gap-2">
3067                                      <time datetime="2026-04-13">
3068                      Apr 13, 2026
3069                    </time>
3070                  
3071                  <span aria-hidden="true">•</span>
3072                  <span class="opacity-80">Read more</span>
3073                </div>
3074
3075                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3076                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3077                </svg>
3078              </div>
3079            </div>
3080          </article>
3081                  
3082          <article
3083            data-blog-card
3084                        x-data
3085            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3086            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3087
3088            <a href="https://astoriaboracay.com/discovering-astoria-boracay-the-ultimate-resort-for-team-building-events" class="absolute inset-0 z-10" aria-label="Read more: Discovering Astoria Boracay: The Ultimate Resort for Team Building Events"></a>
3089
3090            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3091              <img
3092                src="/storage/articles/discovering-astoria-boracay-the-ultimate-resort-for-team-building-events-20260728110208-7NVb6.webp"
3093                alt="Discovering Astoria Boracay: The Ultimate Resort for Team Building Events"
3094                loading="lazy"
3095                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3096              />
3097
3098              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3099              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3100
3101                              
3102                <a href="https://astoriaboracay.com/blogs?category=hotel-in-boracay&amp;page=1"
3103                   data-blog-ajax-link
3104                   data-blog-scroll="true"
3105                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3106                   aria-label="Filter by Hotel in Boracay">
3107                  Hotel in Boracay
3108                </a>
3109                          </div>
3110
3111            <div class="p-5 flex flex-col gap-3">
3112              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3113                Discovering Astoria Boracay: The Ultimate Resort for Team Building Events
3114              </h3>
3115
3116              <p class="text-sm text-gray-600 line-clamp-3">
3117                Plan unforgettable team-building events at Astoria Boracay. Enjoy premier amenities and stunning beachfront views for a seamless group retreat.
3118              </p>
3119
3120              <div class="mt-1 flex flex-wrap gap-2">
3121                                  
3122                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3123                     data-blog-ajax-link
3124                     data-blog-scroll="true"
3125                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3126                    #resort-in-boracay
3127                  </a>
3128                                  
3129                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3130                     data-blog-ajax-link
3131                     data-blog-scroll="true"
3132                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3133                    #hotel-in-boracay
3134                  </a>
3135                                  
3136                  <a href="https://astoriaboracay.com/blogs?tag=beachfront-resort-in-boracay&amp;page=1"
3137                     data-blog-ajax-link
3138                     data-blog-scroll="true"
3139                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3140                    #beachfront-resort-in-boracay
3141                  </a>
3142                              </div>
3143
3144              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3145                <div class="flex items-center gap-2">
3146                                      <time datetime="2026-03-18">
3147                      Mar 18, 2026
3148                    </time>
3149                  
3150                  <span aria-hidden="true">•</span>
3151                  <span class="opacity-80">Read more</span>
3152                </div>
3153
3154                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3155                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3156                </svg>
3157              </div>
3158            </div>
3159          </article>
3160                  
3161          <article
3162            data-blog-card
3163                        x-data
3164            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3165            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3166
3167            <a href="https://astoriaboracay.com/a-valentines-escape-made-perfect-at-astoria-boracay" class="absolute inset-0 z-10" aria-label="Read more: A Valentine’s Escape Made Perfect at Astoria Boracay"></a>
3168
3169            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3170              <img
3171                src="/storage/articles/a-valentines-escape-made-perfect-at-astoria-boracay-20260728105948-uKJn7.webp"
3172                alt="A Valentine’s Escape Made Perfect at Astoria Boracay"
3173                loading="lazy"
3174                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3175              />
3176
3177              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3178              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3179
3180                              
3181                <a href="https://astoriaboracay.com/blogs?category=astoria-boracay&amp;page=1"
3182                   data-blog-ajax-link
3183                   data-blog-scroll="true"
3184                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3185                   aria-label="Filter by Astoria Boracay">
3186                  Astoria Boracay
3187                </a>
3188                          </div>
3189
3190            <div class="p-5 flex flex-col gap-3">
3191              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3192                A Valentine’s Escape Made Perfect at Astoria Boracay
3193              </h3>
3194
3195              <p class="text-sm text-gray-600 line-clamp-3">
3196                With Astoria Boracay, every moment will feel effortless, making it the ideal choice for a Valentine’s escape.
3197              </p>
3198
3199              <div class="mt-1 flex flex-wrap gap-2">
3200                                  
3201                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3202                     data-blog-ajax-link
3203                     data-blog-scroll="true"
3204                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3205                    #hotel-in-boracay
3206                  </a>
3207                                  
3208                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3209                     data-blog-ajax-link
3210                     data-blog-scroll="true"
3211                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3212                    #resort-in-boracay
3213                  </a>
3214                                  
3215                  <a href="https://astoriaboracay.com/blogs?tag=beachfront-resort-in-boracay&amp;page=1"
3216                     data-blog-ajax-link
3217                     data-blog-scroll="true"
3218                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3219                    #beachfront-resort-in-boracay
3220                  </a>
3221                              </div>
3222
3223              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3224                <div class="flex items-center gap-2">
3225                                      <time datetime="2026-02-12">
3226                      Feb 12, 2026
3227                    </time>
3228                  
3229                  <span aria-hidden="true">•</span>
3230                  <span class="opacity-80">Read more</span>
3231                </div>
3232
3233                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3234                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3235                </svg>
3236              </div>
3237            </div>
3238          </article>
3239                  
3240          <article
3241            data-blog-card
3242                        x-data
3243            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3244            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3245
3246            <a href="https://astoriaboracay.com/boracay-basics-must-know-tips-for-first-timers" class="absolute inset-0 z-10" aria-label="Read more: Boracay Basics: Must-Know Tips for First Timers"></a>
3247
3248            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3249              <img
3250                src="/storage/articles/boracay-basics-must-know-tips-for-first-timers-20260728105643-nQbhl.webp"
3251                alt="Boracay Basics: Must-Know Tips for First Timers"
3252                loading="lazy"
3253                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3254              />
3255
3256              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3257              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3258
3259                              
3260                <a href="https://astoriaboracay.com/blogs?category=astoria-boracay&amp;page=1"
3261                   data-blog-ajax-link
3262                   data-blog-scroll="true"
3263                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3264                   aria-label="Filter by Astoria Boracay">
3265                  Astoria Boracay
3266                </a>
3267                          </div>
3268
3269            <div class="p-5 flex flex-col gap-3">
3270              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3271                Boracay Basics: Must-Know Tips for First Timers
3272              </h3>
3273
3274              <p class="text-sm text-gray-600 line-clamp-3">
3275                Heading to Boracay for the first time ever? It sounds scary at first, but trust us, it’s a piece of cake, especially when you’re staying at Astoria Boracay.
3276              </p>
3277
3278              <div class="mt-1 flex flex-wrap gap-2">
3279                                  
3280                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
3281                     data-blog-ajax-link
3282                     data-blog-scroll="true"
3283                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3284                    #astoria-boracay
3285                  </a>
3286                                  
3287                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3288                     data-blog-ajax-link
3289                     data-blog-scroll="true"
3290                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3291                    #hotel-in-boracay
3292                  </a>
3293                                  
3294                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3295                     data-blog-ajax-link
3296                     data-blog-scroll="true"
3297                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3298                    #resort-in-boracay
3299                  </a>
3300                                  
3301                  <a href="https://astoriaboracay.com/blogs?tag=beachfront-hotel-in-boracay&amp;page=1"
3302                     data-blog-ajax-link
3303                     data-blog-scroll="true"
3304                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3305                    #beachfront-hotel-in-boracay
3306                  </a>
3307                              </div>
3308
3309              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3310                <div class="flex items-center gap-2">
3311                                      <time datetime="2026-01-16">
3312                      Jan 16, 2026
3313                    </time>
3314                  
3315                  <span aria-hidden="true">•</span>
3316                  <span class="opacity-80">Read more</span>
3317                </div>
3318
3319                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3320                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3321                </svg>
3322              </div>
3323            </div>
3324          </article>
3325                  
3326          <article
3327            data-blog-card
3328                        x-data
3329            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3330            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3331
3332            <a href="https://astoriaboracay.com/why-astoria-boracay-in-station-1-is-the-quiet-retreat-you-need-this-season" class="absolute inset-0 z-10" aria-label="Read more: Why Astoria Boracay in Station 1 is the Quiet Retreat You Need This Season"></a>
3333
3334            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3335              <img
3336                src="/storage/articles/why-astoria-boracay-in-station-1-is-the-quiet-retreat-you-need-this-season-20260728105143-9BqH7.webp"
3337                alt="Why Astoria Boracay in Station 1 is the Quiet Retreat You Need This Season"
3338                loading="lazy"
3339                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3340              />
3341
3342              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3343              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3344
3345                              
3346                <a href="https://astoriaboracay.com/blogs?category=astoria-boracay&amp;page=1"
3347                   data-blog-ajax-link
3348                   data-blog-scroll="true"
3349                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3350                   aria-label="Filter by Astoria Boracay">
3351                  Astoria Boracay
3352                </a>
3353                          </div>
3354
3355            <div class="p-5 flex flex-col gap-3">
3356              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3357                Why Astoria Boracay in Station 1 is the Quiet Retreat You Need This Season
3358              </h3>
3359
3360              <p class="text-sm text-gray-600 line-clamp-3">
3361                Looking for a peaceful retreat? Astoria Boracay in Station 1, Boracay, offers a quiet escape with top-notch comfort this season.
3362              </p>
3363
3364              <div class="mt-1 flex flex-wrap gap-2">
3365                                  
3366                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
3367                     data-blog-ajax-link
3368                     data-blog-scroll="true"
3369                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3370                    #astoria-boracay
3371                  </a>
3372                                  
3373                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3374                     data-blog-ajax-link
3375                     data-blog-scroll="true"
3376                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3377                    #resort-in-boracay
3378                  </a>
3379                                  
3380                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3381                     data-blog-ajax-link
3382                     data-blog-scroll="true"
3383                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3384                    #hotel-in-boracay
3385                  </a>
3386                              </div>
3387
3388              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3389                <div class="flex items-center gap-2">
3390                                      <time datetime="2025-12-29">
3391                      Dec 29, 2025
3392                    </time>
3393                  
3394                  <span aria-hidden="true">•</span>
3395                  <span class="opacity-80">Read more</span>
3396                </div>
3397
3398                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3399                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3400                </svg>
3401              </div>
3402            </div>
3403          </article>
3404                  
3405          <article
3406            data-blog-card
3407                        x-data
3408            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3409            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3410
3411            <a href="https://astoriaboracay.com/catch-the-sun-family-fun-at-astoria-boracay" class="absolute inset-0 z-10" aria-label="Read more: Catch the Sun: Family Fun at Astoria Boracay!"></a>
3412
3413            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3414              <img
3415                src="/storage/articles/catch-the-sun-family-fun-at-astoria-boracay-20260728104800-2pRVC.webp"
3416                alt="Catch the Sun: Family Fun at Astoria Boracay!"
3417                loading="lazy"
3418                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3419              />
3420
3421              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3422              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3423
3424                              
3425                <a href="https://astoriaboracay.com/blogs?category=astoria-boracay&amp;page=1"
3426                   data-blog-ajax-link
3427                   data-blog-scroll="true"
3428                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3429                   aria-label="Filter by Astoria Boracay">
3430                  Astoria Boracay
3431                </a>
3432                          </div>
3433
3434            <div class="p-5 flex flex-col gap-3">
3435              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3436                Catch the Sun: Family Fun at Astoria Boracay!
3437              </h3>
3438
3439              <p class="text-sm text-gray-600 line-clamp-3">
3440                Let this be your sign to create memories with your family at Astoria Boracay, our relaxing Boracay hotel in Station 1!
3441              </p>
3442
3443              <div class="mt-1 flex flex-wrap gap-2">
3444                                  
3445                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
3446                     data-blog-ajax-link
3447                     data-blog-scroll="true"
3448                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3449                    #astoria-boracay
3450                  </a>
3451                                  
3452                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3453                     data-blog-ajax-link
3454                     data-blog-scroll="true"
3455                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3456                    #hotel-in-boracay
3457                  </a>
3458                                  
3459                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3460                     data-blog-ajax-link
3461                     data-blog-scroll="true"
3462                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3463                    #resort-in-boracay
3464                  </a>
3465                              </div>
3466
3467              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3468                <div class="flex items-center gap-2">
3469                                      <time datetime="2025-11-20">
3470                      Nov 20, 2025
3471                    </time>
3472                  
3473                  <span aria-hidden="true">•</span>
3474                  <span class="opacity-80">Read more</span>
3475                </div>
3476
3477                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3478                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3479                </svg>
3480              </div>
3481            </div>
3482          </article>
3483                  
3484          <article
3485            data-blog-card
3486                        x-data
3487            x-intersect.once="$el.classList.add('translate-y-0','opacity-100')"
3488            class="group relative bg-white border border-gray-200 rounded-2xl overflow-hidden shadow-sm hover:shadow-md transition opacity-100 translate-y-2 will-change-transform">
3489
3490            <a href="https://astoriaboracay.com/3-ideas-to-pull-off-a-romantic-beach-proposal" class="absolute inset-0 z-10" aria-label="Read more: 3 Ideas to Pull Off a Romantic Beach Proposal"></a>
3491
3492            <div class="ap-media-skeleton ap-media-gallery relative aspect-[16/10] overflow-hidden" data-ap-media>
3493              <img
3494                src="/storage/articles/3-ideas-to-pull-off-a-romantic-beach-proposal-20260728104329-xNs4X.webp"
3495                alt="3 Ideas to Pull Off a Romantic Beach Proposal"
3496                loading="lazy"
3497                class="w-full h-full object-cover transition-transform duration-700 group-hover:scale-[1.04] group-active:scale-[1.02]"
3498              />
3499
3500              <div class="absolute inset-0 bg-gradient-to-t from-black/25 via-transparent to-transparent pointer-events-none"></div>
3501              <div class="absolute inset-0 ring-1 ring-inset ring-black/5 pointer-events-none"></div>
3502
3503                              
3504                <a href="https://astoriaboracay.com/blogs?category=astoria-boracay&amp;page=1"
3505                   data-blog-ajax-link
3506                   data-blog-scroll="true"
3507                   class="absolute top-3 left-3 z-20 text-[11px] font-semibold px-2.5 py-1 rounded-full bg-white/90 backdrop-blur border border-white shadow hover:bg-[#F05323] hover:text-white transition"
3508                   aria-label="Filter by Astoria Boracay">
3509                  Astoria Boracay
3510                </a>
3511                          </div>
3512
3513            <div class="p-5 flex flex-col gap-3">
3514              <h3 class="text-[17px] md:text-lg font-semibold leading-snug line-clamp-2">
3515                3 Ideas to Pull Off a Romantic Beach Proposal
3516              </h3>
3517
3518              <p class="text-sm text-gray-600 line-clamp-3">
3519                Looking to propose soon? These ideas will surely make your proposal one for the books.
3520              </p>
3521
3522              <div class="mt-1 flex flex-wrap gap-2">
3523                                  
3524                  <a href="https://astoriaboracay.com/blogs?tag=resort-in-boracay&amp;page=1"
3525                     data-blog-ajax-link
3526                     data-blog-scroll="true"
3527                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3528                    #resort-in-boracay
3529                  </a>
3530                                  
3531                  <a href="https://astoriaboracay.com/blogs?tag=hotel-in-boracay&amp;page=1"
3532                     data-blog-ajax-link
3533                     data-blog-scroll="true"
3534                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3535                    #hotel-in-boracay
3536                  </a>
3537                                  
3538                  <a href="https://astoriaboracay.com/blogs?tag=astoria-boracay&amp;page=1"
3539                     data-blog-ajax-link
3540                     data-blog-scroll="true"
3541                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3542                    #astoria-boracay
3543                  </a>
3544                                  
3545                  <a href="https://astoriaboracay.com/blogs?tag=beachfront-resort-in-boracay&amp;page=1"
3546                     data-blog-ajax-link
3547                     data-blog-scroll="true"
3548                     class="relative z-20 text-xs px-2 py-1 rounded-full border transition bg-gray-50 text-gray-700 border-gray-200 hover:border-[#0047BB]/40 hover:text-[#0047BB]">
3549                    #beachfront-resort-in-boracay
3550                  </a>
3551                              </div>
3552
3553              <div class="mt-2 flex items-center justify-between text-sm font-medium text-gray-500">
3554                <div class="flex items-center gap-2">
3555                                      <time datetime="2025-09-26">
3556                      Sep 26, 2025
3557                    </time>
3558                  
3559                  <span aria-hidden="true">•</span>
3560                  <span class="opacity-80">Read more</span>
3561                </div>
3562
3563                <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 opacity-60 group-hover:translate-x-0.5 transition" viewBox="0 0 24 24" fill="none" stroke="currentColor">
3564                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 5 7 7-7 7"/>
3565                </svg>
3566              </div>
3567            </div>
3568          </article>
3569              </div>
3570
3571              <div class="mt-10 flex justify-center" data-blog-load-more-wrap>
3572          <button
3573            type="button"
3574            data-blog-load-more
3575            data-next-url="https://astoriaboracay.com/blogs?page=2"
3576            class="inline-flex min-w-[170px] items-center justify-center gap-2 rounded-xl bg-[#0047BB] px-6 py-3 font-semibold text-white shadow-sm transition hover:-translate-y-0.5 hover:shadow-md disabled:cursor-wait disabled:opacity-70"
3577          >
3578            <svg data-blog-load-more-spinner class="hidden h-4 w-4 animate-spin" viewBox="0 0 24 24" fill="none" aria-hidden="true">
3579              <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
3580              <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 0 1 8-8v4a4 4 0 0 0-4 4H4z"></path>
3581            </svg>
3582            <span data-blog-load-more-label>Load More</span>
3583          </button>
3584        </div>
3585      
3586      
3587      <div class="site-list-end" data-blog-list-end  hidden >
3588        <div class="site-list-end__divider" aria-hidden="true">
3589          <span class="site-list-end__mark"><i class="fas fa-check"></i></span>
3590        </div>
3591        <div role="status" aria-live="polite">
3592          <h3 class="site-list-end__title">You&#039;ve reached the end of our blog listings.</h3>
3593          <p class="site-list-end__copy">Thanks for reading. Check back soon for more stories and updates.</p>
3594        </div>
3595        <a href="#blog-hero" data-listing-back-to-top class="site-list-end__top">
3596          <i class="fas fa-arrow-up" aria-hidden="true"></i>
3597          <span>Back to top</span>
3598        </a>
3599      </div>
3600    </div>
3601  </section>
3602</main>
3603
3604
3605<script>
3606  (function () {
3607    function registerAlpineComponent() {
3608      if (!window.Alpine || window.__abBlogIndexAlpineRegistered) return;
3609      window.__abBlogIndexAlpineRegistered = true;
3610      Alpine.data('blogIndex', () => ({}));
3611    }
3612
3613    function initBlogAjax() {
3614      const root = document.querySelector('[data-blog-index-root]');
3615      if (!root || root.dataset.blogAjaxReady === '1') return;
3616
3617      const form = root.querySelector('[data-blog-filter-form]');
3618      const results = root.querySelector('[data-blog-results-shell]');
3619      if (!form || !results || !window.fetch || !window.DOMParser || !window.history) return;
3620
3621      root.dataset.blogAjaxReady = '1';
3622
3623      let activeController = null;
3624      let searchTimer = null;
3625      let requestToken = 0;
3626
3627      function samePageUrl(url) {
3628        return url.origin === window.location.origin && url.pathname === window.location.pathname;
3629      }
3630
3631      function cleanFormUrl() {
3632        const url = new URL(form.getAttribute('action') || window.location.href, window.location.origin);
3633        const params = new URLSearchParams();
3634        const formData = new FormData(form);
3635
3636        for (const [name, value] of formData.entries()) {
3637          const trimmed = String(value || '').trim();
3638          if (!trimmed) continue;
3639          if (name === 'page') continue;
3640          if (name === 'sort' && trimmed === 'latest') continue;
3641          params.set(name, trimmed);
3642        }
3643
3644        url.search = params.toString();
3645        return url;
3646      }
3647
3648      function setLoading(isLoading) {
3649        root.classList.toggle('is-filtering', isLoading);
3650        results.setAttribute('aria-busy', isLoading ? 'true' : 'false');
3651
3652        root.querySelectorAll('[data-blog-submit]').forEach((button) => {
3653          button.disabled = isLoading;
3654        });
3655      }
3656
3657      function announce(message) {
3658        const status = root.querySelector('[data-blog-status]');
3659        if (!status) return;
3660        status.dataset.message = message || '';
3661      }
3662
3663      function reinitDynamicUi() {
3664        if (window.Alpine && typeof window.Alpine.initTree === 'function') {
3665          window.Alpine.initTree(form);
3666          window.Alpine.initTree(results);
3667        }
3668      }
3669
3670      function scrollToResults(shouldScroll) {
3671        if (!shouldScroll) return;
3672        const reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
3673        results.scrollIntoView({
3674          behavior: reduceMotion ? 'auto' : 'smooth',
3675          block: 'start'
3676        });
3677      }
3678
3679      function directBlogCards(grid) {
3680        return Array.from(grid.children).filter(function (element) {
3681          return element.matches('[data-blog-card]');
3682        });
3683      }
3684
3685      function revealBlogCards(grid, limit) {
3686        const hiddenCards = directBlogCards(grid).filter(function (card) {
3687          return card.hidden;
3688        }).slice(0, limit);
3689
3690        hiddenCards.forEach(function (card) {
3691          card.hidden = false;
3692        });
3693
3694        return hiddenCards.length;
3695      }
3696
3697      function syncBlogLoadMore(button, grid) {
3698        if (!results.contains(grid)) return;
3699        const cards = directBlogCards(grid);
3700        const wrap = button ? button.closest('[data-blog-load-more-wrap]') : null;
3701        const endState = results.querySelector('[data-blog-list-end]');
3702        const hasHiddenCards = cards.some(function (card) { return card.hidden; });
3703        const hasVisibleCards = cards.some(function (card) { return !card.hidden; });
3704        const hasNextPage = Boolean(button && (button.dataset.nextUrl || '').trim());
3705        const hasMore = hasHiddenCards || hasNextPage;
3706        if (wrap) wrap.hidden = !hasMore;
3707        if (endState) endState.hidden = hasMore || !hasVisibleCards;
3708      }
3709
3710      function setBlogLoadMoreBusy(button, isBusy, labelText) {
3711        button.disabled = isBusy;
3712        const spinner = button.querySelector('[data-blog-load-more-spinner]');
3713        const label = button.querySelector('[data-blog-load-more-label]');
3714        if (spinner) spinner.classList.toggle('hidden', !isBusy);
3715        if (label) label.textContent = labelText || (isBusy ? 'Loading...' : 'Load More');
3716      }
3717
3718      async function loadMoreBlogCards(button, requestedCount) {
3719        if (button.dataset.loading === '1') return;
3720
3721        const grid = results.querySelector('[data-blog-results-grid]');
3722        if (!grid) return;
3723
3724        button.dataset.loading = '1';
3725        setBlogLoadMoreBusy(button, true);
3726
3727        const parsedCount = Number.parseInt(requestedCount, 10);
3728        let remaining = Number.isFinite(parsedCount) && parsedCount > 0 ? parsedCount : 12;
3729        let failed = false;
3730        const seenUrls = new Set();
3731
3732        try {
3733          remaining -= revealBlogCards(grid, remaining);
3734
3735          while (remaining > 0) {
3736            const nextUrl = (button.dataset.nextUrl || '').trim();
3737            if (!nextUrl || seenUrls.has(nextUrl)) break;
3738            seenUrls.add(nextUrl);
3739
3740            const response = await fetch(nextUrl, {
3741              method: 'GET',
3742              credentials: 'same-origin',
3743              headers: {
3744                'X-Requested-With': 'XMLHttpRequest',
3745                'Accept': 'text/html, application/xhtml+xml'
3746              }
3747            });
3748
3749            if (!response.ok) throw new Error('Request failed: ' + response.status);
3750
3751            const html = await response.text();
3752            const doc = new DOMParser().parseFromString(html, 'text/html');
3753            const incomingGrid = doc.querySelector('[data-blog-results-grid]');
3754            const incomingButton = doc.querySelector('[data-blog-load-more]');
3755
3756            if (!incomingGrid) throw new Error('The next article batch is unavailable.');
3757
3758            const incomingCards = directBlogCards(incomingGrid);
3759            button.dataset.nextUrl = incomingButton ? (incomingButton.dataset.nextUrl || '') : '';
3760
3761            incomingCards.forEach(function (card) {
3762              card.hidden = true;
3763              grid.appendChild(card);
3764              if (window.Alpine && typeof window.Alpine.initTree === 'function') {
3765                window.Alpine.initTree(card);
3766              }
3767            });
3768
3769            remaining -= revealBlogCards(grid, remaining);
3770
3771            if (!incomingCards.length && !button.dataset.nextUrl) break;
3772          }
3773
3774          syncBlogLoadMore(button, grid);
3775        } catch (error) {
3776          failed = true;
3777          setBlogLoadMoreBusy(button, false, 'Try Again');
3778        } finally {
3779          button.dataset.loading = '0';
3780          if (!failed) setBlogLoadMoreBusy(button, false);
3781        }
3782      }
3783
3784      function ensureInitialBlogBatch() {
3785        const grid = results.querySelector('[data-blog-results-grid]');
3786        const button = results.querySelector('[data-blog-load-more]');
3787        if (!grid) return;
3788        syncBlogLoadMore(button, grid);
3789        if (!button) return;
3790
3791        const visibleCount = directBlogCards(grid).filter(function (card) {
3792          return !card.hidden;
3793        }).length;
3794        const needed = Math.max(0, 12 - visibleCount);
3795        if (needed > 0) loadMoreBlogCards(button, needed);
3796      }
3797
3798      async function loadBlogUrl(url, options = {}) {
3799        const cleanUrl = new URL(url, window.location.origin);
3800        if (!samePageUrl(cleanUrl)) {
3801          window.location.href = cleanUrl.toString();
3802          return;
3803        }
3804
3805        if (activeController) activeController.abort();
3806        activeController = new AbortController();
3807        const token = ++requestToken;
3808
3809        setLoading(true);
3810        announce('Updating articles...');
3811
3812        try {
3813          const response = await fetch(cleanUrl.toString(), {
3814            method: 'GET',
3815            credentials: 'same-origin',
3816            signal: activeController.signal,
3817            headers: {
3818              'X-Requested-With': 'XMLHttpRequest',
3819              'Accept': 'text/html, application/xhtml+xml'
3820            }
3821          });
3822
3823          if (!response.ok) throw new Error('Request failed: ' + response.status);
3824
3825          const html = await response.text();
3826          const doc = new DOMParser().parseFromString(html, 'text/html');
3827          const nextForm = doc.querySelector('[data-blog-filter-form]');
3828          const nextResults = doc.querySelector('[data-blog-results-shell]');
3829          const nextTitle = doc.querySelector('title');
3830
3831          if (!nextForm || !nextResults) {
3832            window.location.href = cleanUrl.toString();
3833            return;
3834          }
3835
3836          form.innerHTML = nextForm.innerHTML;
3837          results.innerHTML = nextResults.innerHTML;
3838
3839          if (nextTitle && nextTitle.textContent) {
3840            document.title = nextTitle.textContent;
3841          }
3842
3843          if (options.push !== false) {
3844            window.history.pushState({}, '', cleanUrl.toString());
3845          }
3846
3847          reinitDynamicUi();
3848          ensureInitialBlogBatch();
3849          scrollToResults(Boolean(options.scroll));
3850        } catch (error) {
3851          if (error.name === 'AbortError') return;
3852          window.location.href = cleanUrl.toString();
3853        } finally {
3854          if (token === requestToken) {
3855            setLoading(false);
3856          }
3857        }
3858      }
3859
3860      root.addEventListener('submit', function (event) {
3861        const submittedForm = event.target.closest('[data-blog-filter-form]');
3862        if (!submittedForm) return;
3863
3864        event.preventDefault();
3865        clearTimeout(searchTimer);
3866        loadBlogUrl(cleanFormUrl(), { push: true, scroll: true });
3867      });
3868
3869      root.addEventListener('change', function (event) {
3870        if (!event.target.matches('[data-auto-submit]')) return;
3871
3872        clearTimeout(searchTimer);
3873        loadBlogUrl(cleanFormUrl(), { push: true, scroll: false });
3874      });
3875
3876      root.addEventListener('input', function (event) {
3877        if (!event.target.matches('[data-live-search]')) return;
3878
3879        clearTimeout(searchTimer);
3880        searchTimer = setTimeout(function () {
3881          loadBlogUrl(cleanFormUrl(), { push: true, scroll: false });
3882        }, 450);
3883      });
3884
3885      root.addEventListener('click', function (event) {
3886        const loadMoreButton = event.target.closest('[data-blog-load-more]');
3887        if (loadMoreButton && root.contains(loadMoreButton)) {
3888          event.preventDefault();
3889          loadMoreBlogCards(loadMoreButton);
3890          return;
3891        }
3892
3893        const link = event.target.closest('a[href]');
3894        if (!link || !root.contains(link)) return;
3895
3896        const isFilterLink = link.hasAttribute('data-blog-ajax-link');
3897        if (!isFilterLink) return;
3898
3899        const url = new URL(link.href, window.location.origin);
3900        if (!samePageUrl(url)) return;
3901
3902        event.preventDefault();
3903        clearTimeout(searchTimer);
3904        loadBlogUrl(url, {
3905          push: true,
3906          scroll: link.dataset.blogScroll === 'true'
3907        });
3908      });
3909
3910      window.addEventListener('popstate', function () {
3911        loadBlogUrl(new URL(window.location.href), { push: false, scroll: false });
3912      });
3913
3914      ensureInitialBlogBatch();
3915    }
3916
3917    document.addEventListener('alpine:init', registerAlpineComponent);
3918    document.addEventListener('DOMContentLoaded', initBlogAjax);
3919
3920    registerAlpineComponent();
3921    if (document.readyState !== 'loading') initBlogAjax();
3922  })();
3923</script>
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933<style>
3934  .site-list-end[hidden], .site-list-end[x-cloak],
3935  [data-blog-load-more-wrap][hidden] { display: none !important; }
3936  .site-list-end {
3937    --listing-accent: #0047BB;
3938    --listing-ink: #0047BB;
3939    --listing-hover-ink: #FFFFFF;
3940    margin: 2.5rem auto 0;
3941    padding: 1.5rem 1rem 1rem;
3942    text-align: center;
3943  }
3944  .site-list-end__divider {
3945    display: flex; align-items: center; gap: 1rem;
3946    max-width: 18rem; margin: 0 auto; color: var(--listing-ink);
3947  }
3948  .site-list-end__divider::before, .site-list-end__divider::after {
3949    content: ''; flex: 1; height: 1px; background: rgba(0, 71, 187, .2);
3950  }
3951  .site-list-end__mark {
3952    display: inline-flex; align-items: center; justify-content: center;
3953    width: 2.5rem; height: 2.5rem; flex: 0 0 auto;
3954    border: 1px solid rgba(0, 71, 187, .2); border-radius: 50%;
3955    background: rgba(0, 71, 187, .06);
3956  }
3957  .site-list-end__title {
3958    margin: 1rem 0 0; color: #25282A;
3959    font-size: clamp(1.0625rem, 2vw, 1.25rem); font-weight: 600; line-height: 1.5;
3960  }
3961  .site-list-end__copy {
3962    max-width: 36rem; margin: .5rem auto 0;
3963    color: #63666A; font-size: .9375rem; line-height: 1.7;
3964  }
3965  .site-list-end__top {
3966    display: inline-flex; align-items: center; justify-content: center; gap: .625rem;
3967    min-height: 44px; margin-top: 1.25rem; padding: .625rem 1.25rem;
3968    border: 1px solid var(--listing-accent); border-radius: 999px;
3969    background: #fff; color: var(--listing-ink); text-decoration: none;
3970    font-size: .875rem; font-weight: 600; line-height: 1.5;
3971    transition: background-color .2s ease, color .2s ease;
3972  }
3973  .site-list-end__top:hover {
3974    background: var(--listing-accent); color: var(--listing-hover-ink);
3975  }
3976  .site-list-end__top:focus-visible {
3977    outline: 2px solid var(--listing-ink); outline-offset: 4px;
3978  }
3979  @media (prefers-reduced-motion: reduce) {
3980    .site-list-end__top { transition: none; }
3981  }
3982</style>
3983
3984<script>
3985  (function () {
3986    if (window.__siteListingBackToTopReady) return;
3987    window.__siteListingBackToTopReady = true;
3988
3989    // Capture this link before the listing's AJAX navigation handlers.
3990    // Delegation also covers end panels replaced by search or pagination.
3991    document.addEventListener('click', function (event) {
3992      const link = event.target.closest('[data-listing-back-to-top]');
3993      if (!link) return;
3994      event.stopPropagation();
3995      if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
3996      event.preventDefault();
3997
3998      const heading = document.querySelector('[data-listing-top-heading]');
3999      if (heading) {
4000        try { heading.focus({ preventScroll: true }); } catch (e) { heading.focus(); }
4001      }
4002      const reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
4003      try {
4004        window.scrollTo({ top: 0, left: 0, behavior: reduceMotion ? 'instant' : 'smooth' });
4005      } catch (e) {
4006        window.scrollTo(0, 0);
4007      }
4008    }, true);
4009  })();
4010</script>
4010
4011
4012</main>
4013
4014
4015
4016
4017  <footer class="text-[#25282a]" role="contentinfo">
4018
4019<style>
4020  #footer-properties-discover .filter-chip {
4021    transition: background-color 220ms ease, transform 220ms ease, box-shadow 220ms ease;
4022  }
4023
4024  #footer-properties-discover .stay-chip-bounce {
4025    animation: stayChipBounce 0.36s ease;
4026  }
4027
4028  #footer-properties-discover #stay-grid-shell {
4029    position: relative;
4030    isolation: isolate;
4031  }
4032
4033  #footer-properties-discover #stay-grid {
4034    transition: none !important;
4035  }
4036
4037  #footer-properties-discover #stay-grid.stay-grid-muted {
4038    display: none !important;
4039    pointer-events: none !important;
4040  }
4041
4042  #footer-properties-discover #stay-loading {
4043    position: relative;
4044    display: none;
4045    width: 100%;
4046    height: auto;
4047    min-height: 0;
4048    overflow: hidden;
4049    opacity: 0;
4050    visibility: hidden;
4051    pointer-events: none;
4052    background: transparent;
4053    transition: none !important;
4054  }
4055
4056  #footer-properties-discover #stay-loading.stay-loading-visible {
4057    display: block;
4058    opacity: 1;
4059    visibility: visible;
4060  }
4061
4062  #footer-properties-discover .stay-loading-pill {
4063    display: inline-flex;
4064    align-items: center;
4065    gap: 0.5rem;
4066    border-radius: 9999px;
4067    background: rgba(255, 255, 255, 0.08);
4068    padding: 0.5rem 0.875rem;
4069    font-size: 0.72rem;
4070    font-weight: 700;
4071    letter-spacing: 0.18em;
4072    text-transform: uppercase;
4073    color: rgba(255, 255, 255, 0.74);
4074    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.2);
4075    ring: 1px solid rgba(255, 255, 255, 0.08);
4076  }
4077
4078  #footer-properties-discover .stay-loading-dot {
4079    height: 0.55rem;
4080    width: 0.55rem;
4081    border-radius: 9999px;
4082    background: rgba(255, 255, 255, 0.75);
4083    animation: stayPulse 1s ease-in-out infinite;
4084  }
4085
4086  #footer-properties-discover .stay-skeleton-card {
4087    position: relative;
4088    overflow: hidden;
4089    border-radius: 1rem;
4090    background: rgba(255, 255, 255, 0.05);
4091    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
4092  }
4093
4094  #footer-properties-discover .stay-skeleton-card::after {
4095    content: "";
4096    position: absolute;
4097    inset: 0;
4098    transform: translateX(-100%);
4099    background: linear-gradient(
4100      90deg,
4101      transparent 0%,
4102      rgba(255, 255, 255, 0.08) 35%,
4103      rgba(255, 255, 255, 0.16) 50%,
4104      rgba(255, 255, 255, 0.08) 65%,
4105      transparent 100%
4106    );
4107    animation: staySkeletonShimmer 1.4s linear infinite;
4108  }
4109
4110  #footer-properties-discover .stay-skeleton-block {
4111    position: relative;
4112    z-index: 1;
4113    border-radius: 9999px;
4114    background: rgba(255, 255, 255, 0.1);
4115  }
4116
4117  #footer-properties-discover .stay-skeleton-block.square {
4118    border-radius: 0.85rem;
4119  }
4120
4121  @keyframes staySkeletonShimmer {
4122    100% {
4123      transform: translateX(100%);
4124    }
4125  }
4126
4127  @keyframes stayChipBounce {
4128    0% { transform: scale(1); }
4129    50% { transform: scale(1.05); }
4130    100% { transform: scale(1); }
4131  }
4132
4133  @keyframes stayPulse {
4134    0%, 100% { opacity: 0.45; transform: scale(1); }
4135    50% { opacity: 1; transform: scale(1.12); }
4136  }
4137
4138  @media (prefers-reduced-motion: reduce) {
4139    #footer-properties-discover .filter-chip,
4140    #footer-properties-discover #stay-grid,
4141    #footer-properties-discover #stay-loading {
4142      transition: none !important;
4143      animation: none !important;
4144    }
4145
4146    #footer-properties-discover .stay-skeleton-card::after,
4147    #footer-properties-discover .stay-loading-dot,
4148    #footer-properties-discover .stay-chip-bounce {
4149      animation: none !important;
4150    }
4151  }
4152</style>
4153
4154<section id="footer-properties-discover" class="relative overflow-hidden bg-gradient-to-b from-[#0b1118] via-[#0b0f14] to-black py-24 text-white">
4155  <span aria-hidden="true" class="pointer-events-none absolute -top-24 -left-24 h-80 w-80 rounded-full bg-cyan-400/10 blur-3xl"></span>
4156  <span aria-hidden="true" class="pointer-events-none absolute -bottom-24 -right-24 h-96 w-96 rounded-full bg-indigo-400/10 blur-3xl"></span>
4157
4158  <div class="mx-auto max-w-[1500px] px-6">
4159    <header class="flex flex-col gap-6 md:flex-row md:items-end md:justify-between" data-aos="fade-up">
4160      <div>
4161        <p class="text-xl font-semibold uppercase tracking-[.25em] text-white/70">Discover</p>
4162        <h2 class="mt-2 text-4xl font-semibold leading-tight text-white md:text-5xl">The Astoria Group</h2>
4163        <p class="mt-3 max-w-2xl text-lg text-white/80 sm:text-base lg:text-xl">
4164          Browse and find The Astoria Group properties that fit your vibe.
4165        </p>
4166      </div>
4167
4168      <div class="w-full md:w-auto" data-aos="fade-up" data-aos-delay="100">
4169        <div id="stay-filters" class="inline-flex flex-wrap items-center gap-2 rounded-2xl bg-white/5 p-2 ring-1 ring-white/10 backdrop-blur">
4170          <button
4171            type="button"
4172            class="filter-chip rounded-full bg-white/20 px-4 py-2 text-sm font-semibold text-white shadow ring-1 ring-white/15"
4173            data-filter="all"
4174            aria-pressed="true"
4175          >
4176            All
4177          </button>
4178          <button
4179            type="button"
4180            class="filter-chip rounded-full px-4 py-2 text-sm font-semibold text-white hover:bg-white/10"
4181            data-filter="family"
4182            aria-pressed="false"
4183          >
4184            Family
4185          </button>
4186          <button
4187            type="button"
4188            class="filter-chip rounded-full px-4 py-2 text-sm font-semibold text-white hover:bg-white/10"
4189            data-filter="group"
4190            aria-pressed="false"
4191          >
4192            Group
4193          </button>
4194          <button
4195            type="button"
4196            class="filter-chip rounded-full px-4 py-2 text-sm font-semibold text-white hover:bg-white/10"
4197            data-filter="beach"
4198            aria-pressed="false"
4199          >
4200            Beach
4201          </button>
4202          <button
4203            type="button"
4204            class="filter-chip rounded-full px-4 py-2 text-sm font-semibold text-white hover:bg-white/10"
4205            data-filter="couple"
4206            aria-pressed="false"
4207          >
4208            Couple
4209          </button>
4210          <button
4211            type="button"
4212            class="filter-chip rounded-full px-4 py-2 text-sm font-semibold text-white hover:bg-white/10"
4213            data-filter="corporate"
4214            aria-pressed="false"
4215          >
4216            Corporate
4217          </button>
4218        </div>
4219      </div>
4220    </header>
4221
4222    <div class="mt-8 border-b border-white/10"></div>
4223
4224    
4225
4226    <div id="stay-grid-shell" class="mt-10">
4227      <div id="stay-grid" class="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
4228                  <article
4229            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] lg:col-span-3"
4230            data-categories="corporate,beach,family,group,couple"
4231            data-default-fullwidth="true"
4232            data-aos="fade-up"
4233            data-aos-delay="0"
4234          >
4235            <img
4236              src="https://astoriaboracay.com/images/footer/apw2.webp"
4237              alt="Astoria Palawan"
4238              data-property-image
4239              data-image-all="https://astoriaboracay.com/images/footer/apw2.webp"
4240              data-image-family="https://astoriaboracay.com/images/footer/filters/astoria-palawan-family.webp"
4241              data-image-group="https://astoriaboracay.com/images/footer/filters/astoria-palawan-group.webp"
4242              data-image-beach="https://astoriaboracay.com/images/footer/filters/astoria-palawan-beach.webp"
4243              data-image-couple="https://astoriaboracay.com/images/footer/filters/astoria-palawan-couple.webp"
4244              data-image-corporate="https://astoriaboracay.com/images/footer/filters/astoria-palawan-corporate.webp"
4245              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4246              loading="lazy"
4247              decoding="async"
4248              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/apw2.webp';"
4249            >
4250
4251            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/20 to-transparent"></div>
4252
4253            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4254              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4255                Puerto Princesa
4256              </span>
4257
4258                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4259                  Corporate
4260                </span>
4261                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4262                  Beach
4263                </span>
4264                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4265                  Family
4266                </span>
4267                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4268                  Group
4269                </span>
4270                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4271                  Couple
4272                </span>
4273                          </div>
4274
4275            <div class="absolute inset-x-0 bottom-0 p-6">
4276              <div class="lg:max-w-2xl">
4277                <h3 class="text-2xl font-semibold">Astoria Palawan</h3>
4278                <p class="mt-1 text-base font-medium text-white/90">A family-centric, eco-friendly resort surrounded by lush landscapes.</p>
4279              </div>
4280
4281              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4282                <span class="text-base font-medium text-white/90">Puerto Princesa, Palawan</span>
4283                <a
4284                  href="https://astoriapalawan.com/"
4285                  target="_blank"
4286                  rel="noopener"
4287                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4288                >
4289                  Visit
4290                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4291                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4292                  </svg>
4293                </a>
4294              </div>
4295            </div>
4296          </article>
4297                  <article
4298            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] "
4299            data-categories="beach,couple,family,group"
4300            data-default-fullwidth="false"
4301            data-aos="fade-up"
4302            data-aos-delay="100"
4303          >
4304            <img
4305              src="https://astoriaboracay.com/images/footer/ab1.webp"
4306              alt="Astoria Boracay"
4307              data-property-image
4308              data-image-all="https://astoriaboracay.com/images/footer/ab1.webp"
4309              data-image-family="https://astoriaboracay.com/images/footer/filters/astoria-boracay-family.webp"
4310              data-image-group="https://astoriaboracay.com/images/footer/filters/astoria-boracay-group.webp"
4311              data-image-beach="https://astoriaboracay.com/images/footer/filters/astoria-boracay-beach.webp"
4312              data-image-couple="https://astoriaboracay.com/images/footer/filters/astoria-boracay-couple.webp"
4313              data-image-corporate="https://astoriaboracay.com/images/footer/ab1.webp"
4314              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4315              loading="lazy"
4316              decoding="async"
4317              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/ab1.webp';"
4318            >
4319
4320            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/20 to-transparent"></div>
4321
4322            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4323              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4324                Station 1
4325              </span>
4326
4327                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4328                  Couple
4329                </span>
4330                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4331                  Beach
4332                </span>
4333                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4334                  Group
4335                </span>
4336                          </div>
4337
4338            <div class="absolute inset-x-0 bottom-0 p-6">
4339              <div class="">
4340                <h3 class="text-2xl font-semibold">Astoria Boracay</h3>
4341                <p class="mt-1 text-base font-medium text-white/90">A luxury resort experience along the white sands of Station 1, Boracay.</p>
4342              </div>
4343
4344              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4345                <span class="text-base font-medium text-white/90">Station 1, Boracay</span>
4346                <a
4347                  href="https://astoriaboracay.com/"
4348                  target="_blank"
4349                  rel="noopener"
4350                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4351                >
4352                  Visit
4353                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4354                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4355                  </svg>
4356                </a>
4357              </div>
4358            </div>
4359          </article>
4360                  <article
4361            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] "
4362            data-categories="family,beach,couple,group"
4363            data-default-fullwidth="false"
4364            data-aos="fade-up"
4365            data-aos-delay="200"
4366          >
4367            <img
4368              src="https://astoriaboracay.com/images/footer/ac3.webp"
4369              alt="Astoria Current"
4370              data-property-image
4371              data-image-all="https://astoriaboracay.com/images/footer/ac3.webp"
4372              data-image-family="https://astoriaboracay.com/images/footer/filters/astoria-current-family.webp"
4373              data-image-group="https://astoriaboracay.com/images/footer/filters/astoria-current-group.webp"
4374              data-image-beach="https://astoriaboracay.com/images/footer/filters/astoria-current-beach.webp"
4375              data-image-couple="https://astoriaboracay.com/images/footer/filters/astoria-current-couple.webp"
4376              data-image-corporate="https://astoriaboracay.com/images/footer/ac3.webp"
4377              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4378              loading="lazy"
4379              decoding="async"
4380              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/ac3.webp';"
4381            >
4382
4383            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/10 to-transparent"></div>
4384
4385            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4386              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4387                Station 3
4388              </span>
4389
4390                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4391                  Family
4392                </span>
4393                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4394                  Beach
4395                </span>
4396                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4397                  Couple
4398                </span>
4399                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4400                  Group
4401                </span>
4402                          </div>
4403
4404            <div class="absolute inset-x-0 bottom-0 p-6">
4405              <div class="">
4406                <h3 class="text-2xl font-semibold">Astoria Current</h3>
4407                <p class="mt-1 text-base font-medium text-white/90">A vibrant beachfront resort in Station 3, Boracay.</p>
4408              </div>
4409
4410              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4411                <span class="text-base font-medium text-white/90">Station 3, Boracay</span>
4412                <a
4413                  href="https://astoriacurrent.com/"
4414                  target="_blank"
4415                  rel="noopener"
4416                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4417                >
4418                  Visit
4419                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4420                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4421                  </svg>
4422                </a>
4423              </div>
4424            </div>
4425          </article>
4426                  <article
4427            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] "
4428            data-categories="corporate,family,group,couple"
4429            data-default-fullwidth="false"
4430            data-aos="fade-up"
4431            data-aos-delay="0"
4432          >
4433            <img
4434              src="https://astoriaboracay.com/images/footer/apz.webp"
4435              alt="Astoria Plaza"
4436              data-property-image
4437              data-image-all="https://astoriaboracay.com/images/footer/apz.webp"
4438              data-image-family="https://astoriaboracay.com/images/footer/filters/astoria-plaza-family.webp"
4439              data-image-group="https://astoriaboracay.com/images/footer/filters/astoria-plaza-group.webp"
4440              data-image-beach="https://astoriaboracay.com/images/footer/apz.webp"
4441              data-image-couple="https://astoriaboracay.com/images/footer/filters/astoria-plaza-couple.webp"
4442              data-image-corporate="https://astoriaboracay.com/images/footer/filters/astoria-plaza-corporate.webp"
4443              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4444              loading="lazy"
4445              decoding="async"
4446              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/apz.webp';"
4447            >
4448
4449            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/20 to-transparent"></div>
4450
4451            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4452              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4453                Ortigas, Pasig
4454              </span>
4455
4456                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4457                  Corporate
4458                </span>
4459                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4460                  Family
4461                </span>
4462                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4463                  Group
4464                </span>
4465                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4466                  Couple
4467                </span>
4468                          </div>
4469
4470            <div class="absolute inset-x-0 bottom-0 p-6">
4471              <div class="">
4472                <h3 class="text-2xl font-semibold">Astoria Plaza</h3>
4473                <p class="mt-1 text-base font-medium text-white/90">Modern comfort in the heart of Ortigas Business District.</p>
4474              </div>
4475
4476              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4477                <span class="text-base font-medium text-white/90">Pasig, Metro Manila</span>
4478                <a
4479                  href="https://astoriaplaza.com/"
4480                  target="_blank"
4481                  rel="noopener"
4482                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4483                >
4484                  Visit
4485                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4486                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4487                  </svg>
4488                </a>
4489              </div>
4490            </div>
4491          </article>
4492                  <article
4493            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] "
4494            data-categories="beach"
4495            data-default-fullwidth="false"
4496            data-aos="fade-up"
4497            data-aos-delay="100"
4498          >
4499            <img
4500              src="https://astoriaboracay.com/images/footer/abh.webp"
4501              alt="Astoria Bohol"
4502              data-property-image
4503              data-image-all="https://astoriaboracay.com/images/footer/abh.webp"
4504              data-image-family="https://astoriaboracay.com/images/footer/abh.webp"
4505              data-image-group="https://astoriaboracay.com/images/footer/abh.webp"
4506              data-image-beach="https://astoriaboracay.com/images/footer/filters/astoria-bohol-beach.webp"
4507              data-image-couple="https://astoriaboracay.com/images/footer/abh.webp"
4508              data-image-corporate="https://astoriaboracay.com/images/footer/abh.webp"
4509              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4510              loading="lazy"
4511              decoding="async"
4512              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/abh.webp';"
4513            >
4514
4515            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/20 to-transparent"></div>
4516
4517            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4518              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4519                Baclayon, Bohol
4520              </span>
4521
4522                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4523                  Beach
4524                </span>
4525                          </div>
4526
4527            <div class="absolute inset-x-0 bottom-0 p-6">
4528              <div class="">
4529                <h3 class="text-2xl font-semibold">Astoria Bohol</h3>
4530                <p class="mt-1 text-base font-medium text-white/90">An exclusive tropical escape in Baclayon.</p>
4531              </div>
4532
4533              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4534                <span class="text-base font-medium text-white/90">Baclayon, Bohol</span>
4535                <a
4536                  href="https://astoriabohol.com/"
4537                  target="_blank"
4538                  rel="noopener"
4539                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4540                >
4541                  Visit
4542                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4543                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4544                  </svg>
4545                </a>
4546              </div>
4547            </div>
4548          </article>
4549                  <article
4550            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] "
4551            data-categories="family,couple"
4552            data-default-fullwidth="false"
4553            data-aos="fade-up"
4554            data-aos-delay="200"
4555          >
4556            <img
4557              src="https://astoriaboracay.com/images/footer/spo.webp"
4558              alt="Stellar Panglao"
4559              data-property-image
4560              data-image-all="https://astoriaboracay.com/images/footer/spo.webp"
4561              data-image-family="https://astoriaboracay.com/images/footer/filters/stellar-panglao-family.webp"
4562              data-image-group="https://astoriaboracay.com/images/footer/spo.webp"
4563              data-image-beach="https://astoriaboracay.com/images/footer/spo.webp"
4564              data-image-couple="https://astoriaboracay.com/images/footer/filters/stellar-panglao-couple.webp"
4565              data-image-corporate="https://astoriaboracay.com/images/footer/spo.webp"
4566              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4567              loading="lazy"
4568              decoding="async"
4569              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/spo.webp';"
4570            >
4571
4572            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/20 to-transparent"></div>
4573
4574            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4575              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4576                Panglao, Bohol
4577              </span>
4578
4579                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4580                  Family
4581                </span>
4582                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4583                  Couple
4584                </span>
4585                          </div>
4586
4587            <div class="absolute inset-x-0 bottom-0 p-6">
4588              <div class="">
4589                <h3 class="text-2xl font-semibold">Stellar Panglao</h3>
4590                <p class="mt-1 text-base font-medium text-white/90">Sun-kissed stays along Panglao’s shores.</p>
4591              </div>
4592
4593              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4594                <span class="text-base font-medium text-white/90">Panglao, Bohol</span>
4595                <a
4596                  href="https://stellarpanglao.com/"
4597                  target="_blank"
4598                  rel="noopener"
4599                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4600                >
4601                  Visit
4602                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4603                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4604                  </svg>
4605                </a>
4606              </div>
4607            </div>
4608          </article>
4609                  <article
4610            class="cta-card group relative h-[460px] overflow-hidden rounded-2xl bg-white/5 ring-1 ring-white/10 md:h-[500px] "
4611            data-categories="family"
4612            data-default-fullwidth="false"
4613            data-aos="fade-up"
4614            data-aos-delay="0"
4615          >
4616            <img
4617              src="https://astoriaboracay.com/images/footer/spr.webp"
4618              alt="Stellar Potter&#039;s Ridge"
4619              data-property-image
4620              data-image-all="https://astoriaboracay.com/images/footer/spr.webp"
4621              data-image-family="https://astoriaboracay.com/images/footer/spr.webp"
4622              data-image-group="https://astoriaboracay.com/images/footer/spr.webp"
4623              data-image-beach="https://astoriaboracay.com/images/footer/spr.webp"
4624              data-image-couple="https://astoriaboracay.com/images/footer/spr.webp"
4625              data-image-corporate="https://astoriaboracay.com/images/footer/spr.webp"
4626              class="absolute inset-0 h-full w-full object-cover opacity-90 transition-transform duration-700 ease-out group-hover:scale-105"
4627              loading="lazy"
4628              decoding="async"
4629              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/footer/spr.webp';"
4630            >
4631
4632            <div class="absolute inset-0 bg-gradient-to-t from-black/30 via-black/20 to-transparent"></div>
4633
4634            <div class="absolute left-4 top-4 flex flex-wrap gap-2">
4635              <span class="inline-flex items-center rounded-full bg-transparent px-3 py-1 text-xs font-semibold text-white ring-1 ring-white/20 backdrop-blur-sm">
4636                Metro Tagaytay
4637              </span>
4638
4639                              <span class="inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold bg-transparent text-white ring-1 ring-white/20">
4640                  Family
4641                </span>
4642                          </div>
4643
4644            <div class="absolute inset-x-0 bottom-0 p-6">
4645              <div class="">
4646                <h3 class="text-2xl font-semibold">Stellar Potter&#039;s Ridge</h3>
4647                <p class="mt-1 text-base font-medium text-white/90">Refreshing highland escapes with sweeping views.</p>
4648              </div>
4649
4650              <div class="mt-5 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4651                <span class="text-base font-medium text-white/90">Metro Tagaytay</span>
4652                <a
4653                  href="https://stellarpottersridge.com/"
4654                  target="_blank"
4655                  rel="noopener"
4656                  class="inline-flex items-center justify-center gap-2 rounded-full bg-white px-5 py-2 text-xs font-bold text-black shadow transition hover:translate-y-[-2px]"
4657                >
4658                  Visit
4659                  <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
4660                    <path d="M13 5l7 7-7 7v-4H4v-6h9V5z"/>
4661                  </svg>
4662                </a>
4663              </div>
4664            </div>
4665          </article>
4666              </div>
4667
4668      <div id="stay-loading" aria-hidden="true">
4669        <div id="stay-loading-grid" class="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3"></div>
4670      </div>
4671    </div>
4672  </div>
4673</section>
4674
4675<script>
4676  document.addEventListener('DOMContentLoaded', () => {
4677    const discoverSection = document.getElementById('footer-properties-discover');
4678    if (!discoverSection) return;
4679
4680    const gridShell = document.getElementById('stay-grid-shell');
4681    const grid = document.getElementById('stay-grid');
4682    const loadingOverlay = document.getElementById('stay-loading');
4683    const loadingGrid = document.getElementById('stay-loading-grid');
4684    const chips = Array.from(discoverSection.querySelectorAll('.filter-chip'));
4685    const cards = Array.from(discoverSection.querySelectorAll('.cta-card'));
4686    const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');
4687    let activeFilterRun = 0;
4688
4689    const wait = (ms) => new Promise((resolve) => window.setTimeout(resolve, ms));
4690
4691    const preloadImage = (src) => new Promise((resolve) => {
4692      if (!src) {
4693        resolve(src);
4694        return;
4695      }
4696
4697      const img = new Image();
4698      let done = false;
4699
4700      const finish = () => {
4701        if (done) return;
4702        done = true;
4703        resolve(src);
4704      };
4705
4706      img.onload = finish;
4707      img.onerror = finish;
4708      img.src = src;
4709
4710      if (img.complete) {
4711        finish();
4712      }
4713    });
4714
4715    const setActiveChip = (activeChip) => {
4716      chips.forEach((chip) => {
4717        chip.classList.remove('bg-white/20', 'shadow', 'ring-1', 'ring-white/15', 'stay-chip-bounce');
4718        chip.setAttribute('aria-pressed', chip === activeChip ? 'true' : 'false');
4719      });
4720
4721      activeChip.classList.add('bg-white/20', 'shadow', 'ring-1', 'ring-white/15');
4722    };
4723
4724    const animateSelectedChip = (chip) => {
4725      if (prefersReducedMotion.matches) return;
4726
4727      chip.classList.remove('stay-chip-bounce');
4728      void chip.offsetWidth;
4729      chip.classList.add('stay-chip-bounce');
4730
4731      window.setTimeout(() => {
4732        chip.classList.remove('stay-chip-bounce');
4733      }, 380);
4734    };
4735
4736    const setCardFullWidth = (card, enabled) => {
4737      card.classList.toggle('lg:col-span-3', enabled);
4738    };
4739
4740    const getCardCategories = (card) => {
4741      return (card.getAttribute('data-categories') || '')
4742        .split(',')
4743        .map((value) => value.trim().toLowerCase())
4744        .filter(Boolean);
4745    };
4746
4747    const getMatchedCards = (filter) => {
4748      return cards.filter((card) => {
4749        const categories = getCardCategories(card);
4750        return filter === 'all' || categories.includes(filter);
4751      });
4752    };
4753
4754    const getTargetSrc = (image, filter) => {
4755      const fallbackSrc = image.getAttribute('data-image-all') || image.getAttribute('src');
4756
4757      if (filter === 'all') {
4758        return fallbackSrc;
4759      }
4760
4761      return image.getAttribute(`data-image-${filter}`) || fallbackSrc;
4762    };
4763
4764    const setPropertyImage = (image, filter) => {
4765      if (!image) return;
4766
4767      const nextSrc = getTargetSrc(image, filter);
4768      if (!nextSrc) return;
4769
4770      image.setAttribute('src', nextSrc);
4771    };
4772
4773    const buildSkeletonCard = (isFullWidth = false) => {
4774      return `
4775        <div class="stay-skeleton-card relative h-[460px] md:h-[500px] ${isFullWidth ? 'lg:col-span-3' : ''}">
4776          <div class="absolute left-4 top-4 z-[1] flex flex-wrap gap-2">
4777            <span class="stay-skeleton-block h-7 w-28"></span>
4778            <span class="stay-skeleton-block h-7 w-20"></span>
4779            <span class="stay-skeleton-block h-7 w-16"></span>
4780          </div>
4781
4782          <div class="absolute inset-x-0 bottom-0 z-[1] p-6">
4783            <div class="${isFullWidth ? 'lg:max-w-2xl' : ''}">
4784              <div class="stay-skeleton-block square h-8 w-56"></div>
4785              <div class="mt-3 stay-skeleton-block square h-4 w-full max-w-[28rem]"></div>
4786              <div class="mt-2 stay-skeleton-block square h-4 w-full max-w-[22rem]"></div>
4787            </div>
4788
4789            <div class="mt-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
4790              <div class="stay-skeleton-block square h-4 w-40"></div>
4791              <div class="stay-skeleton-block h-10 w-24"></div>
4792            </div>
4793          </div>
4794        </div>
4795      `;
4796    };
4797
4798    const renderSkeletonGrid = (filter) => {
4799      const matchedCards = getMatchedCards(filter);
4800
4801      loadingGrid.innerHTML = matchedCards.map((card) => {
4802        const shouldSpan = filter === 'all' && card.getAttribute('data-default-fullwidth') === 'true';
4803        return buildSkeletonCard(shouldSpan);
4804      }).join('');
4805    };
4806
4807    const applyFilterState = (filter) => {
4808      cards.forEach((card) => {
4809        const categories = getCardCategories(card);
4810        const matches = filter === 'all' || categories.includes(filter);
4811
4812        setCardFullWidth(card, false);
4813        card.classList.toggle('hidden', !matches);
4814        card.setAttribute('aria-hidden', matches ? 'false' : 'true');
4815
4816        if (!matches) {
4817          return;
4818        }
4819
4820        const image = card.querySelector('[data-property-image]');
4821        setPropertyImage(image, filter);
4822      });
4823
4824      if (filter === 'all') {
4825        const defaultWideCard = cards.find((card) => card.getAttribute('data-default-fullwidth') === 'true');
4826
4827        if (defaultWideCard && !defaultWideCard.classList.contains('hidden')) {
4828          setCardFullWidth(defaultWideCard, true);
4829        }
4830      }
4831    };
4832
4833    const setLoadingState = (enabled, filter = 'all') => {
4834      if (enabled) {
4835        renderSkeletonGrid(filter);
4836        grid.classList.add('stay-grid-muted');
4837        gridShell.setAttribute('aria-busy', 'true');
4838        loadingOverlay.setAttribute('aria-hidden', 'false');
4839        loadingOverlay.classList.add('stay-loading-visible');
4840      } else {
4841        grid.classList.remove('stay-grid-muted');
4842        gridShell.setAttribute('aria-busy', 'false');
4843        loadingOverlay.classList.remove('stay-loading-visible');
4844        loadingOverlay.setAttribute('aria-hidden', 'true');
4845        loadingGrid.innerHTML = '';
4846      }
4847    };
4848
4849    const applyFilter = async (filter, options = {}) => {
4850      const { animate = true } = options;
4851      const runId = ++activeFilterRun;
4852      const matchedCards = getMatchedCards(filter);
4853
4854      const targetSources = matchedCards
4855        .map((card) => card.querySelector('[data-property-image]'))
4856        .filter(Boolean)
4857        .map((image) => getTargetSrc(image, filter));
4858
4859      if (!animate || prefersReducedMotion.matches) {
4860        await Promise.all(targetSources.map((src) => preloadImage(src)));
4861
4862        if (runId !== activeFilterRun) return;
4863
4864        applyFilterState(filter);
4865        return;
4866      }
4867
4868      setLoadingState(true, filter);
4869
4870      const startTime = performance.now();
4871
4872      await Promise.all(targetSources.map((src) => preloadImage(src)));
4873
4874      const elapsed = performance.now() - startTime;
4875      const remaining = Math.max(0, 500 - elapsed);
4876
4877      if (remaining > 0) {
4878        await wait(remaining);
4879      }
4880
4881      if (runId !== activeFilterRun) {
4882        return;
4883      }
4884
4885      applyFilterState(filter);
4886
4887      requestAnimationFrame(() => {
4888        setLoadingState(false);
4889      });
4890
4891      if (window.AOS && typeof AOS.refreshHard === 'function') {
4892        AOS.refreshHard();
4893      }
4894    };
4895
4896    chips.forEach((chip) => {
4897      chip.addEventListener('click', () => {
4898        const filter = (chip.dataset.filter || 'all').toLowerCase();
4899        setActiveChip(chip);
4900        animateSelectedChip(chip);
4901        applyFilter(filter, { animate: true });
4902      });
4903    });
4904
4905    const defaultChip = chips.find((chip) => (chip.dataset.filter || '').toLowerCase() === 'all');
4906
4907    if (defaultChip) {
4908      setActiveChip(defaultChip);
4909      applyFilter('all', { animate: false });
4910    }
4911  });
4912</script>
4912
4913
4914  
4915  <section id="footer-property-logos" class="relative overflow-hidden bg-white py-12 sm:py-14 lg:py-16">
4916    <span aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-0 h-px bg-gradient-to-r from-transparent via-black/30 to-transparent"></span>
4917    <span aria-hidden="true" class="pointer-events-none absolute -left-24 top-10 h-64 w-64 rounded-full bg-gray-200/60 blur-3xl"></span>
4918    <span aria-hidden="true" class="pointer-events-none absolute -right-24 bottom-0 h-72 w-72 rounded-full bg-gray-300/50 blur-3xl"></span>
4919
4920    
4921
4922    <div class="relative mx-auto max-w-[1400px] px-4 text-[#25282a] sm:px-6 lg:px-8">
4923      <div
4924        class="mb-8 flex flex-col gap-4 md:flex-row md:items-end md:justify-between lg:mb-10"
4925        data-aos="fade-up"
4926        data-aos-duration="700"
4927        data-aos-once="true"
4928      >
4929        <div>
4930          <p class="text-sm font-semibold uppercase tracking-[0.28em] text-gray-500">The Astoria Group</p>
4931          <h2 class="mt-2 text-4xl font-semibold leading-tight tracking-tight text-[#25282a] md:text-5xl">Our Properties</h2>
4932          <span aria-hidden="true" class="mt-4 block h-1 w-20 rounded-full bg-gradient-to-r from-black via-gray-500 to-gray-300"></span>
4933        </div>
4934
4935        <p class="max-w-md text-sm leading-relaxed text-gray-600 md:text-right md:text-base">
4936          Trusted destinations &amp; experiences
4937        </p>
4938      </div>
4939
4940      
4941      <div class="grid grid-cols-2 gap-3 sm:grid-cols-3 sm:gap-4 md:grid-cols-4 lg:grid-cols-6 xl:grid-cols-7">
4942                  <a
4943            href="https://astoriaplaza.com"
4944            target="_blank"
4945            rel="noopener"
4946            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
4947            aria-label="Astoria Plaza"
4948            title="Astoria Plaza"
4949            data-aos="fade-up"
4950            data-aos-delay="0"
4951            data-aos-duration="650"
4952            data-aos-once="true"
4953          >
4954            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
4955            <img
4956              src="https://astoriaboracay.com/images/footer/2026/astoria-plaza.webp"
4957              alt="Astoria Plaza"
4958              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
4959              loading="lazy"
4960              decoding="async"
4961            >
4962          </a>
4963                  <a
4964            href="https://astoriaboracay.com/"
4965            target="_blank"
4966            rel="noopener"
4967            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
4968            aria-label="Astoria Boracay"
4969            title="Astoria Boracay"
4970            data-aos="fade-up"
4971            data-aos-delay="70"
4972            data-aos-duration="650"
4973            data-aos-once="true"
4974          >
4975            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
4976            <img
4977              src="https://astoriaboracay.com/images/footer/2026/astoria-boracay.webp"
4978              alt="Astoria Boracay"
4979              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
4980              loading="lazy"
4981              decoding="async"
4982            >
4983          </a>
4984                  <a
4985            href="https://astoriacurrent.com/"
4986            target="_blank"
4987            rel="noopener"
4988            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focu
4988s:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
4989            aria-label="Astoria Current"
4990            title="Astoria Current"
4991            data-aos="fade-up"
4992            data-aos-delay="140"
4993            data-aos-duration="650"
4994            data-aos-once="true"
4995          >
4996            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
4997            <img
4998              src="https://astoriaboracay.com/images/footer/2026/astoria-current.webp"
4999              alt="Astoria Current"
5000              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5001              loading="lazy"
5002              decoding="async"
5003            >
5004          </a>
5005                  <a
5006            href="https://astoriapalawan.com/"
5007            target="_blank"
5008            rel="noopener"
5009            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5010            aria-label="Astoria Palawan"
5011            title="Astoria Palawan"
5012            data-aos="fade-up"
5013            data-aos-delay="210"
5014            data-aos-duration="650"
5015            data-aos-once="true"
5016          >
5017            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5018            <img
5019              src="https://astoriaboracay.com/images/footer/2026/astoria-palawan.webp"
5020              alt="Astoria Palawan"
5021              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5022              loading="lazy"
5023              decoding="async"
5024            >
5025          </a>
5026                  <a
5027            href="https://astoriabohol.com/"
5028            target="_blank"
5029            rel="noopener"
5030            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5031            aria-label="Astoria Bohol"
5032            title="Astoria Bohol"
5033            data-aos="fade-up"
5034            data-aos-delay="280"
5035            data-aos-duration="650"
5036            data-aos-once="true"
5037          >
5038            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5039            <img
5040              src="https://astoriaboracay.com/images/footer/2026/astoria-bohol.webp"
5041              alt="Astoria Bohol"
5042              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5043              loading="lazy"
5044              decoding="async"
5045            >
5046          </a>
5047                  <a
5048            href="https://stellarpanglao.com/"
5049            target="_blank"
5050            rel="noopener"
5051            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5052            aria-label="Stellar Panglao"
5053            title="Stellar Panglao"
5054            data-aos="fade-up"
5055            data-aos-delay="350"
5056            data-aos-duration="650"
5057            data-aos-once="true"
5058          >
5059            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5060            <img
5061              src="https://astoriaboracay.com/images/footer/2026/stellar-panglao.webp"
5062              alt="Stellar Panglao"
5063              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5064              loading="lazy"
5065              decoding="async"
5066            >
5067          </a>
5068                  <a
5069            href="https://stellarpottersridge.com/"
5070            target="_blank"
5071            rel="noopener"
5072            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5073            aria-label="Stellar Potter&#039;s Ridge"
5074            title="Stellar Potter&#039;s Ridge"
5075            data-aos="fade-up"
5076            data-aos-delay="420"
5077            data-aos-duration="650"
5078            data-aos-once="true"
5079          >
5080            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5081            <img
5082              src="https://astoriaboracay.com/images/footer/2026/stellar-potters-ridge.webp"
5083              alt="Stellar Potter&#039;s Ridge"
5084              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5085              loading="lazy"
5086              decoding="async"
5087            >
5088          </a>
5089                  <a
5090            href="https://aglaundryspecialist.com/"
5091            target="_blank"
5092            rel="noopener"
5093            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5094            aria-label="AGLaundry Specialist"
5095            title="AGLaundry Specialist"
5096            data-aos="fade-up"
5097            data-aos-delay="0"
5098            data-aos-duration="650"
5099            data-aos-once="true"
5100          >
5101            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5102            <img
5103              src="https://astoriaboracay.com/images/footer/2026/aglaundryspecialist.webp"
5104              alt="AGLaundry Specialist"
5105              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5106              loading="lazy"
5107              decoding="async"
5108            >
5109          </a>
5110                  <a
5111            href="https://astoriaculinaryandhospitalityinstitute.com/"
5112            target="_blank"
5113            rel="noopener"
5114            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5115            aria-label="Astoria Culinary &amp; Hospitality Institute"
5116            title="Astoria Culinary &amp; Hospitality Institute"
5117            data-aos="fade-up"
5118            data-aos-delay="70"
5119            data-aos-duration="650"
5120            data-aos-once="true"
5121          >
5122            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5123            <img
5124              src="https://astoriaboracay.com/images/footer/2026/astoria-achi.webp"
5125              alt="Astoria Culinary &amp; Hospitality Institute"
5126              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5127              loading="lazy"
5128              decoding="async"
5129            >
5130          </a>
5131                  <a
5132            href="https://astoria-aces.com/"
5133            target="_blank"
5134            rel="noopener"
5135            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5136            aria-label="Astoria ACES"
5137            title="Astoria ACES"
5138            data-aos="fade-up"
5139            data-aos-delay="140"
5140            data-aos-duration="650"
5141            data-aos-once="true"
5142          >
5143            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5144            <img
5145              src="https://astoriaboracay.com/images/footer/2026/astoria-aces.webp"
5146              alt="Astoria ACES"
5147              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5148              loading="lazy"
5149              decoding="async"
5150            >
5151          </a>
5152                  <a
5153            href="https://astoriapalawan.com/waterpark/"
5154            target="_blank"
5155            rel="noopener"
5156            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5157            aria-label="Palawan Waterpark by Astoria"
5158            title="Palawan Waterpark by Astoria"
5159            data-aos="fade-up"
5160            data-aos-delay="210"
5161            data-aos-duration="650"
5162            data-aos-once="true"
5163          >
5164            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5165            <img
5166              src="https://astoriaboracay.com/images/footer/2026/palawan-waterpark-by-astoria.webp"
5167              alt="Palawan Waterpark by Astoria"
5168              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5169              loading="lazy"
5170              decoding="async"
5171            >
5172          </a>
5173                  <a
5174            href="https://chardonnaybyastoria.com/"
5175            target="_blank"
5176            rel="noopener"
5177            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5178            aria-label="Chardonnay by Astoria"
5179            title="Chardonnay by Astoria"
5180            data-aos="fade-up"
5181            data-aos-delay="280"
5182            data-aos-duration="650"
5183            data-aos-once="true"
5184          >
5185            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5186            <img
5187              src="https://astoriaboracay.com/images/footer/2026/chardonnay-by-astoria.webp"
5188              alt="Chardonnay by Astoria"
5189              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5190              loading="lazy"
5191              decoding="async"
5192            >
5193          </a>
5194                  <a
5195            href="https://minamisakibyastoria.com/"
5196            target="_blank"
5197            rel="noopener"
5198            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5199            aria-label="Minami Saki by Astoria"
5200            title="Minami Saki by Astoria"
5201            data-aos="fade-up"
5202            data-aos-delay="350"
5203            data-aos-duration="650"
5204            data-aos-once="true"
5205          >
5206            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5207            <img
5208              src="https://astoriaboracay.com/images/footer/2026/minamisaki-by-astoria.webp"
5209              alt="Minami Saki by Astoria"
5210              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5211              loading="lazy"
5212              decoding="async"
5213            >
5214          </a>
5215                  <a
5216            href="https://astoriapalawan.com/meetings-events/"
5217            target="_blank"
5218            rel="noopener"
5219            class="group relative grid h-28 min-w-0 place-items-center overflow-hidden rounded-2xl border border-gray-200/90 bg-white px-3 shadow-[0_10px_30px_-24px_rgba(15,23,42,.55)] transition duration-300 hover:-translate-y-1 hover:border-gray-400 hover:shadow-[0_18px_38px_-22px_rgba(15,23,42,.3)] focus:outline-none focus-visible:ring-2 focus-visible:ring-black sm:h-32 sm:px-4 lg:h-36"
5220            aria-label="Mangrove Conference &amp; Convention Center"
5221            title="Mangrove Conference &amp; Convention Center"
5222            data-aos="fade-up"
5223            data-aos-delay="420"
5224            data-aos-duration="650"
5225            data-aos-once="true"
5226          >
5227            <span aria-hidden="true" class="absolute inset-x-8 top-0 h-px bg-gradient-to-r from-transparent via-gray-500 to-transparent opacity-0 transition-opacity duration-300 group-hover:opacity-100"></span>
5228            <img
5229              src="https://astoriaboracay.com/images/footer/2026/mangrove-by-astoria.webp"
5230              alt="Mangrove Conference &amp; Convention Center"
5231              class="block h-14 w-full max-w-full object-contain opacity-100 transition duration-300 group-hover:scale-[1.04] sm:h-16 sm:max-w-[170px] lg:h-20"
5232              loading="lazy"
5233              decoding="async"
5234            >
5235          </a>
5236              </div>
5237    </div>
5238  </section>
5239
5240  
5241  <section class="relative bg-white text-[#25282a]">
5242    <div
5243      class="w-full max-w-[1600px] mx-auto px-6 sm:px-6 lg:px-8 py-12 md:py-14 lg:py-16
5244             grid grid-cols-1 md:grid-cols-2 xl:grid-cols-12 gap-6 md:gap-8 xl:gap-10">
5245
5246      
5247      <div class="md:col-span-1 xl:col-span-4">
5248        <div class="rounded-2xl border border-gray-200 bg-white p-6 md:p-7 shadow-sm h-full">
5249          <a href="https://astoriaboracay.com" aria-label="Astoria Home" class="inline-flex items-center gap-3 mb-5">
5250            <img
5251              src="https://astoriaboracay.com/images/ab1-logo.webp"
5252              onerror="this.onerror=null; this.src='https://astoriaboracay.com/images/ac3-logo.webp';"
5253              alt="Astoria Hotels and Resorts"
5254              class="h-10 md:h-8 w-auto"
5255              decoding="async" loading="lazy"
5256            >
5257            <span class="sr-only">Astoria Boracay</span>
5258          </a>
5259
5260          <div class="mt-5 overflow-hidden rounded-xl border border-gray-200">
5261            <iframe
5262              src="https://maps.google.com/maps?q=Astoria%20Boracay&output=embed&iWloc=near"
5263              class="w-full h-44 sm:h-48 md:h-56 xl:h-60 border-0"
5264              allowfullscreen loading="lazy"
5265              referrerpolicy="no-referrer-when-downgrade" title="Astoria Boracay Map"></iframe>
5266          </div>
5267
5268          <div class="mt-5 flex items-center gap-4 text-lg text-[#0047BB]">
5269            <a href="https://www.facebook.com/astoriaboracay" target="_blank" rel="noopener" class="hover:opacity-80" aria-label="Facebook"><i class="fab fa-facebook-f"></i></a>
5270            <a href="https://www.instagram.com/astoriaboracay" target="_blank" rel="noopener" class="hover:opacity-80" aria-label="Instagram"><i class="fab fa-instagram"></i></a>
5271            <a href="https://www.youtube.com/c/AstoriaHotelsandResorts" target="_blank" rel="noopener" class="hover:opacity-80" aria-label="YouTube"><i class="fab fa-youtube"></i></a>
5272            <a href="https://www.tiktok.com/@theastoriagroup" target="_blank" rel="noopener" class="hover:opacity-80" aria-label="TikTok"><i class="fab fa-tiktok"></i></a>
5273          </div>
5274        </div>
5275      </div>
5276
5277      
5278      <div class="md:col-span-1 xl:col-span-4 font-medium">
5279        <div class="rounded-2xl border border-gray-200 bg-white p-6 md:p-7 shadow-sm h-full">
5280          <h6 class="text-lg font-semibold mb-4 text-[#0047BB]">Site Menu</h6>
5281
5282          <div class="grid grid-cols-1 sm:grid-cols-2 gap-6">
5283            
5284            <div>
5285              <a href="https://astoriaboracay.com/about" class="inline-flex items-center gap-2 font-semibold hover:text-[#0047BB]">
5286                <i class="fa-solid fa-circle-info text-[12px] text-[#0047BB]"></i>
5287                <span>About</span>
5288              </a>
5289              <ul class="mt-3 space-y-2 text-[15px]">
5290                <li><a href="https://astoriaboracay.com/amenities" class="hover:text-[#0047BB]">Amenities</a></li>
5291                <li><a href="https://astoriaboracay.com/csr"       class="hover:text-[#0047BB]">CSR</a></li>
5292                <li><a href="https://astoriaboracay.com/faqs"      class="hover:text-[#0047BB]">FAQs</a></li>
5293                <li><a href="https://astoriaboracay.com/blogs"     class="hover:text-[#0047BB]">Blogs</a></li>
5294                <li><a href="https://astoriaboracay.com/special-offers"    class="hover:text-[#0047BB]">Promos</a></li>
5295              </ul>
5296            </div>
5297
5298            
5299            <div>
5300              <a href="https://astoriaboracay.com/accommodations" class="inline-flex items-center gap-2 font-semibold hover:text-[#0047BB]">
5301                <i class="fa-solid fa-bed text-[12px] text-[#0047BB]"></i>
5302                <span>Accommodations</span>
5303              </a>
5304              <ul class="mt-3 space-y-2 text-[15px]">
5305                <li><a href="https://astoriaboracay.com/accommodations/deluxe-room"    class="hover:text-[#0047BB]">Deluxe Rooms</a></li>
5306                <li><a href="https://astoriaboracay.com/accommodations/premier"   class="hover:text-[#0047BB]">Premier</a></li>
5307                <li><a href="https://astoriaboracay.com/accommodations/luxury-room"    class="hover:text-[#0047BB]">Luxury Room</a></li>
5308                <li><a href="https://astoriaboracay.com/accommodations/honeymoon-suite" class="hover:text-[#0047BB]">Honeymoon Suite</a></li>    
5309              </ul>
5310            </div>
5311          </div>
5312
5313          
5314          <div class="mt-6 grid grid-cols-1 sm:grid-cols-2 gap-3 text-[15px]">
5315            <a href="https://astoriaboracay.com/food-beverages" class="inline-flex items-center gap-2 font-medium hover:text-[#0047BB]">
5316              <i class="fa-solid fa-utensils text-[12px] text-[#0047BB]"></i> Dining
5317            </a>
5318            <a href="https://astoriaboracay.com/meetings-events" class="inline-flex items-center gap-2 font-medium hover:text-[#0047BB]">
5319              <i class="fa-solid fa-calendar-days text-[12px] text-[#0047BB]"></i> Meetings &amp; Events
5320            </a>
5321            <a href="https://astoriaboracay.com/contact-us" class="inline-flex items-center gap-2 font-medium hover:text-[#0047BB]">
5322              <i class="fa-solid fa-envelope-open-text text-[12px] text-[#0047BB]"></i> Contact Us
5323            </a>
5324            <a href="https://astoriaboracay.com" class="inline-flex items-center gap-2 font-medium hover:text-[#0047BB]">
5325              <i class="fa-solid fa-house text-[12px] text-[#0047BB]"></i> Home
5326            </a>
5327          </div>
5328        </div>
5329      </div>
5330
5331      
5332      <div class="md:col-span-2 xl:col-span-4">
5333        <div class="rounded-2xl border border-gray-200 bg-white p-6 md:p-7 shadow-sm h-full">
5334          
5335          <h6 class="text-lg font-semibold text-[#0047BB]">VISIT US</h6>
5336          <p class="mt-2 text-base leading-relaxed font-medium">
5337            Station 1, Barangay Balabag, Boracay Island, Malay, Aklan, Philippines 5608
5338          </p>
5339
5340          
5341          <h6 class="mt-6 text-lg font-semibold text-[#0047BB]">CONTACT US</h6>
5342          <p class="text-base font-medium">
5343            <a href="mailto:[email protected]" class="underline hover:text-[#0047BB] text-base">
5344              [email protected]
5345            </a><br>
5346            <strong>Reservations Office:</strong>
5347            <a href="tel:+63286871111" class="hover:text-[#0047BB]">
5348              (+63 2) 8687-1111
5349            </a>
5350            <span class="opacity-70">
5351              &nbsp;locals 8739, 8740, 8738, and 8737
5352            </span>
5353            <span class="hidden sm:inline"> | </span><br class="sm:hidden">
5354            <a href="tel:+639088727922" class="hover:text-[#0047BB]">
5355              (+63) 908-872-7922
5356            </a><br>
5357            <strong>Front Office:</strong>
5358            <a href="tel:+63362881111" class="hover:text-[#0047BB]">
5359              (+63 36) 288-1111
5360            </a>
5361            <span class="hidden sm:inline"> | </span><br class="sm:hidden">
5362            <a href="tel:+639692855611" class="hover:text-[#0047BB]">
5363              (+63) 969-285-5611
5364            </a>
5365          </p>
5366        </div>
5367      </div>
5368
5369    </div>
5370  </section>
5371
5372  
5373  <div class="relative bg-[#18206b] text-white">
5374    <div class="max-w-[1600px] mx-auto px-4 sm:px-6 lg:px-8 py-4 text-center text-base md:text-[15px]">
5375      Copyright © 2026 | &nbsp;Astoria Boracay
5376      <span class="mx-2 opacity-60">|</span>
5377      <a href="https://astoriaboracay.com/privacy-policy" class="underline underline-offset-4 hover:text-[#fff]">Privacy Policy</a>
5378    </div>
5379    <div class="absolute -top-px left-0 right-0 h-px bg-white/20"></div>
5380  </div>
5381</footer>
5382
5383
5384
5385
5386<div id="ab1-btt"
5387     x-data="backToTop()"
5388     x-init="init()"
5389     class="fixed right-3 bottom-3 sm:right-5 sm:bottom-5"
5390     style="z-index:2147483647;">
5391  <button
5392    x-show="show"
5393    x-transition
5394    @click="scrollTop"
5395    aria-label="Back to top"
5396    class="group relative grid place-items-center
5397           w-11 h-11 sm:w-14 sm:h-14
5398           rounded-full bg-[#0047BB] text-white
5399           shadow-[0_8px_20px_rgba(99,102,106,.45)] sm:shadow-[0_10px_28px_rgba(99,102,106,.55)]
5400           hover:shadow-[0_12px_28px_rgba(99,102,106,.65)] sm:hover:shadow-[0_14px_36px_rgba(99,102,106,.7)]
5401           ring-2 ring-white/90
5402           focus:outline-none focus-visible:ring-4 focus-visible:ring-[#0047BB]/50
5403           transition">
5404
5405    <!-- Subtle pulsing glow on hover/focus -->
5406    <span class="pointer-events-none absolute inset-0 rounded-full bg-[#0047BB]/45
5407                 opacity-0 group-hover:opacity-100 group-focus:opacity-100
5408                 animate-[ping_1.6s_ease-out_infinite]"></span>
5409
5410    <!-- Scroll progress ring -->
5411    <svg class="absolute -inset-1 w-[3.25rem] h-[3.25rem] sm:w-16 sm:h-16" viewBox="0 0 60 60" aria-hidden="true">
5412      <!-- Track -->
5413      <circle cx="30" cy="30" r="26" stroke="rgba(99,102,106,.18)" stroke-width="4" fill="none"/>
5414      <!-- Progress -->
5415      <circle cx="30" cy="30" r="26"
5416              :stroke-dasharray="circumference"
5417              :stroke-dashoffset="circumference - (progress/100)*circumference"
5418              stroke="#63666A" stroke-width="4" stroke-linecap="round" fill="none"/>
5419    </svg>
5420
5421    <!-- Icon -->
5422    <i class="fa-solid fa-arrow-up text-base sm:text-xl relative z-10"></i>
5423
5424    <!-- Tiny label on hover -->
5425    <span class="pointer-events-none absolute right-full mr-2 top-1/2 -translate-y-1/2
5426                  hidden sm:block
5427                  px-2 py-1 rounded bg-[#0047BB] text-white text-[11px]
5428                  opacity-0 group-hover:opacity-100 transition">
5429      Top
5430    </span>
5431  </button>
5432</div>
5433
5434<script>
5435  function backToTop(){
5436    return {
5437      show: false,
5438      progress: 0,
5439      circumference: 2 * Math.PI * 26, // r=26 from the SVG circle
5440
5441      onScroll(){
5442        const scrolled = window.scrollY || document.documentElement.scrollTop;
5443        const max = document.documentElement.scrollHeight - window.innerHeight;
5444        this.progress = max > 0 ? Math.min(100, Math.max(0, (scrolled / max) * 100)) : 0;
5445        this.show = scrolled > 300;
5446      },
5447
5448      scrollTop(){ window.scrollTo({ top: 0, behavior: 'smooth' }); },
5449
5450      init(){
5451        this.onScroll();
5452        window.addEventListener('scroll', () => this.onScroll(), { passive: true });
5453      }
5454    }
5455  }
5456</script>
5456
5457
5458<style>
5459  /* Respect users who prefer less motion */
5460  @media (prefers-reduced-motion: reduce) {
5461    #ab1-btt .animate-\[ping_1\.6s_ease-out_infinite\] { animation: none !important; }
5462    #ab1-btt button { transition: none !important; }
5463  }
5464
5465  /* Don’t print the FAB */
5466  @media print { #ab1-btt { display: none !important; } }
5467</style>
5468
5469
5470  
5471  
5472  
5472<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
5472
5473  
5473<script defer src="https://unpkg.com/[email protected]/dist/cdn.min.js"></script>
5473
5474  
5474<script defer src="https://unpkg.com/@alpinejs/[email protected]/dist/cdn.min.js"></script>
5474
5475  
5475<script defer src="https://unpkg.com/@alpinejs/[email protected]/dist/cdn.min.js"></script>
5475
5476
5477  
5478  <div id="google_translate_element" aria-hidden="true"></div>
5479  
5479<script>
5480    /* Cross-browser event helper used by Google’s typical doGTranslate flow */
5481    function GTranslateFireEvent(el, eventName) {
5482      try {
5483        if (document.createEvent) {
5484          var evObj = document.createEvent('HTMLEvents');
5485          evObj.initEvent(eventName, true, true);
5486          el.dispatchEvent(evObj);
5487        } else if (document.createEventObject) { // IE <= 8 fallback
5488          var evObj = document.createEventObject();
5489          el.fireEvent('on' + eventName, evObj);
5490        }
5491      } catch (e) {}
5492    }
5493
5494    /* Reliable programmatic translate */
5495    function doGTranslate(langPair) {
5496      if (!langPair) return;
5497      var lang = langPair.split('|')[1];
5498      var combo = document.querySelector('.goog-te-combo');
5499      if (!combo) return setTimeout(function(){ doGTranslate(langPair); }, 100);
5500      combo.value = lang;
5501      GTranslateFireEvent(combo, 'change');
5502    }
5503
5504    // Public helper; call from nav: window.applyTranslation('ja'), etc.
5505    window.applyTranslation = function(code) {
5506      var v = '/en/' + code;
5507      document.cookie = 'googtrans=' + v + ';path=/';
5508      document.cookie = 'googtrans=' + v + ';domain=' + location.hostname + ';path=/';
5509      doGTranslate('en|' + code);
5510    };
5511
5512    function googleTranslateElementInit() {
5513      new google.translate.TranslateElement({
5514        pageLanguage: 'en',
5515        autoDisplay: false
5516      }, 'google_translate_element');
5517
5518      // Apply cookie-selected language on load
5519      var m = document.cookie.match(/googtrans=\/en\/([a-zA-Z\-]+)/);
5520      var code = m && m[1];
5521      if (code) doGTranslate('en|' + code);
5522    }
5523
5524    // Kill any injected banner/offset that slips through
5525    (function killGTranslateBar(){
5526      function nuke() {
5527        var ifr = document.querySelector('iframe.goog-te-banner-frame');
5528        if (ifr && ifr.parentNode) ifr.parentNode.removeChild(ifr);
5529        [
5530          '.goog-te-banner', '.goog-te-banner-frame',
5531          '.VIpgJd-ZVi9od-ORHb-OEVmcd', '.VIpgJd-ZVi9od-aZ2wEe-wOHMyf', '.VIpgJd-ZVi9od-xl07Ob-OEVmcd'
5532        ].forEach(function(s){
5533          document.querySelectorAll(s).forEach(function(el){ el.style.display='none'; });
5534        });
5535        document.body.style.top = '0px';
5536      }
5537      window.addEventListener('load', nuke);
5538      document.addEventListener('DOMContentLoaded', nuke);
5539      var tries = 0, t = setInterval(function(){ nuke(); if (++tries > 240) clearInterval(t); }, 50); // ~12s
5540    })();
5541  </script>
5541
5542  
5542<script src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
5542
5543
5544  
5545      
5545<script>
5546      document.addEventListener('alpine:init', () => {
5547        Alpine.data('navBookingDrawerBoracay', () => ({
5548          // Reveal controls
5549          tabVisible: false,
5550          revealLine: 0.10,
5551          revealOffsetPx: 0,
5552          hysteresisPx: 190,
5553
5554          _revealTarget: null,
5555          _onScroll: null,
5556          _onLoad: null,
5557          _onMobileNav: null,
5558          _menuObserver: null,
5559          _mobileNavEventOpen: false,
5560          _navClassOpen: false,
5561          _scrollLockAdded: null,
5562          _raf: null,
5563
5564          // Drawer state
5565          showBooking: false,
5566          navMenuOpen: false,
5567
5568          // Astoria Boracay booking engine
5569          bookingAction: 'https://book-directonline.com/properties/AstoriaBoracaydirect',
5570
5571          // YYYY-MM-DD in local timezone
5572          today: new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().slice(0, 10),
5573          checkIn: new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().slice(0, 10),
5574
5575          init() {
5576            this.readRevealControls();
5577
5578            this._onMobileNav = (e) => {
5579              const detail = e && e.detail;
5580              this._mobileNavEventOpen = typeof detail === 'boolean' ? detail : !!(detail && detail.open);
5581              this.syncMobileNav();
5582            };
5583
5584            window.addEventListener('ahr:mobile-nav', this._onMobileNav, { passive: true });
5585            this._navClassOpen = this.mobileNavClassOpen();
5586            this._menuObserver = new MutationObserver(() => {
5587              const classOpen = this.mobileNavClassOpen();
5588              if (classOpen === this._navClassOpen) return;
5589
5590              // Class changes also work when the header's custom event is missed.
5591              this._navClassOpen = classOpen;
5592              this._mobileNavEventOpen = false;
5593              this.syncMobileNav();
5594            });
5595            [document.documentElement, document.body].forEach((el) => {
5596              this._menuObserver.observe(el, { attributes: true, attributeFilter: ['class'] });
5597            });
5598
5599            this.syncMobileNav();
5600            this.setupRevealOnSecondBlock();
5601          },
5602
5603          destroy() {
5604            this.teardownReveal();
5605            if (this._menuObserver) this._menuObserver.disconnect();
5606            if (this._onMobileNav) window.removeEventListener('ahr:mobile-nav', this._onMobileNav);
5607            this.showBooking = false;
5608            this.lockScroll(false);
5609          },
5610
5611          readRevealControls() {
5612            const ds = this.$el?.dataset || {};
5613            const lineRaw = ds.nbLine ?? ds.nbRevealLine ?? '0.10';
5614            const offRaw  = ds.nbOffset ?? ds.nbRevealOffset ?? '0';
5615            const hystRaw = ds.nbHyst ?? ds.nbHysteresis ?? '190';
5616
5617            const line = parseFloat(lineRaw);
5618            const off  = parseInt(offRaw, 10);
5619            const hyst = parseInt(hystRaw, 10);
5620
5621            this.revealLine = Number.isFinite(line) ? Math.max(0, Math.min(1.25, line)) : 0.10;
5622            this.revealOffsetPx = Number.isFinite(off) ? off : 0;
5623            this.hysteresisPx = Number.isFinite(hyst) ? Math.max(0, hyst) : 190;
5624          },
5625
5626          pageSkeletonActive() {
5627            const html = document.documentElement;
5628
5629            return html.classList.contains('ap-skeleton-loading') &&
5630              !html.classList.contains('ap-skeleton-loaded');
5631          },
5632
5633          mobileNavClassOpen() {
5634            return [document.documentElement, document.body].some((el) =>
5635              el && (el.classList.contains('ahr-mobile-nav-open') || el.classList.contains('ahr-mobile-open'))
5636            );
5637          },
5638
5639          mobileNavOpen() {
5640            return this._mobileNavEventOpen || this.mobileNavClassOpen();
5641          },
5642
5643          syncMobileNav() {
5644            this.navMenuOpen = this.mobileNavOpen();
5645
5646            if (this.navMenuOpen) {
5647              this.tabVisible = false;
5648              this.closeBookingPanel();
5649              return;
5650            }
5651
5652            if (!this.showBooking) this.lockScroll(false);
5653            if (this._onScroll) this._onScroll();
5654          },
5655
5656          isIgnoredBlock(el) {
5657            if (!el) return true;
5658
5659            const tag = (el.tagName || '').toLowerCase();
5660
5661            if (['script','style','template','header','nav','footer','link','meta'].includes(tag)) {
5662              return true;
5663            }
5664
5665            if (
5666              el.id === 'ap-page-skeleton' ||
5667              el.matches?.('[data-nav-booking-root], [data-nav-booking-layer], [data-nb-ignore], .ap-home-skeleton, .ap-skel-page, .ahr-bookbar, [aria-hidden="true"]')
5668            ) {
5669              return true;
5670            }
5671
5672            return false;
5673          },
5674
5675          isUsableBlock(el) {
5676            if (!el || this.isIgnoredBlock(el)) return false;
5677
5678            const cs = window.getComputedStyle(el);
5679
5680            if (!cs || cs.display === 'none' || cs.visibility === 'hidden') {
5681              return false;
5682            }
5683
5684            const r = el.getBoundingClientRect();
5685
5686            if ((r.height || 0) < 48) {
5687              return false;
5688            }
5689
5690            // Avoid choosing fixed overlays, drawers, and floating widgets as reveal targets.
5691            if (['fixed','sticky'].includes(cs.position) && (r.height || 0) < (window.innerHeight || 0) * 0.8) {
5692              return false;
5693            }
5694
5695            return true;
5696          },
5697
5698          getExplicitTarget() {
5699            const explicit =
5700              document.querySelector('[data-nb-reveal]') ||
5701              document.getElementById('nb-reveal');
5702
5703            return explicit && this.isUsableBlock(explicit) ? explicit : null;
5704          },
5705
5706          getSecondBlock() {
5707            const explicit = this.getExplicitTarget();
5708
5709            if (explicit) return explicit;
5710
5711            const main = document.querySelector('main') || document.body;
5712
5713            const directChildren = Array.from(main.children || [])
5714              .filter(el => this.isUsableBlock(el));
5715
5716            const withTop = directChildren.map(el => {
5717              const r = el.getBoundingClientRect();
5718
5719              return {
5720                el,
5721                top: r.top + (window.scrollY || window.pageYOffset || 0),
5722                h: r.height || 0
5723              };
5724            }).sort((a, b) => a.top - b.top);
5725
5726            const cleaned = [];
5727
5728            for (const item of withTop) {
5729              const last = cleaned[cleaned.length - 1];
5730
5731              if (last && Math.abs(item.top - last.top) < 12) {
5732                if (item.h > last.h) {
5733                  cleaned[cleaned.length - 1] = item;
5734                }
5735
5736                continue;
5737              }
5738
5739              cleaned.push(item);
5740            }
5741
5742            if (cleaned.length >= 2) {
5743              return cleaned[1].el;
5744            }
5745
5746            const sections = Array.from(main.querySelectorAll?.('section') || [])
5747              .filter(el => this.isUsableBlock(el))
5748              .map(el => {
5749                const r = el.getBoundingClientRect();
5750
5751                return {
5752                  el,
5753                  top: r.top + (window.scrollY || window.pageYOffset || 0),
5754                  h: r.height || 0
5755                };
5756              })
5757              .sort((a, b) => a.top - b.top);
5758
5759            return sections[1]?.el || sections[0]?.el || cleaned[0]?.el || null;
5760          },
5761
5762          teardownReveal() {
5763            if (this._onScroll) {
5764              window.removeEventListener('scroll', this._onScroll);
5765              window.removeEventListener('resize', this._onScroll);
5766            }
5767
5768            if (this._onLoad) {
5769              window.removeEventListener('load', this._onLoad);
5770              window.removeEventListener('pageshow', this._onLoad);
5771            }
5772
5773            this._onScroll = null;
5774            this._onLoad = null;
5775
5776            if (this._raf) {
5777              cancelAnimationFrame(this._raf);
5778            }
5779
5780            this._raf = null;
5781          },
5782
5783          setupRevealOnSecondBlock() {
5784            this.teardownReveal();
5785
5786            this.$nextTick(() => {
5787              const check = () => {
5788                if (this.pageSkeletonActive()) {
5789                  this.tabVisible = false;
5790                  return;
5791                }
5792
5793                // Never show while mobile/tablet menu is open.
5794                if (this.mobileNavOpen()) {
5795                  this.syncMobileNav();
5796                  return;
5797                }
5798
5799                if (
5800                  !this._revealTarget ||
5801                  !document.documentElement.contains(this._revealTarget) ||
5802                  !this.isUsableBlock(this._revealTarget)
5803                ) {
5804                  this._revealTarget = this.getSecondBlock();
5805                }
5806
5807                // Fail closed so the tab does not appear immediately while the page is still settling.
5808                if (!this._revealTarget) {
5809                  this.tabVisible = false;
5810                  return;
5811                }
5812
5813                // The opener tab stays hidden while drawer is open.
5814                if (this.showBooking) {
5815                  return;
5816                }
5817
5818                const r = this._revealTarget.getBoundingClientRect();
5819                const vh = window.innerHeight || document.documentElement.clientHeight || 0;
5820                const triggerY = (vh * this.revealLine) + this.revealOffsetPx;
5821
5822                if (!this.tabVisible && r.top <= triggerY) {
5823                  this.tabVisible = true;
5824                  return;
5825                }
5826
5827                if (this.tabVisible && r.top > (triggerY + this.hysteresisPx)) {
5828                  this.tabVisible = false;
5829                }
5830              };
5831
5832              const scheduleCheck = () => {
5833                if (this._raf) return;
5834
5835                this._raf = requestAnimationFrame(() => {
5836                  this._raf = null;
5837                  check();
5838                });
5839              };
5840
5841              this._onScroll = scheduleCheck;
5842
5843              this._onLoad = () => {
5844                this.syncMobileNav();
5845                this._revealTarget = null;
5846                scheduleCheck();
5847                window.setTimeout(scheduleCheck, 120);
5848                window.setTimeout(scheduleCheck, 420);
5849              };
5850
5851              scheduleCheck();
5852
5853              window.addEventListener('scroll', this._onScroll, { passive: true });
5854              window.addEventListener('resize', this._onScroll, { passive: true });
5855              window.addEventListener('load', this._onLoad, { passive: true });
5856              window.addEventListener('pageshow', this._onLoad, { passive: true });
5857            });
5858          },
5859
5860          lockScroll(lock) {
5861            if (lock) {
5862              if (this._scrollLockAdded) return;
5863              this._scrollLockAdded = [document.documentElement, document.body]
5864                .filter((el) => !el.classList.contains('overflow-hidden'));
5865              this._scrollLockAdded.forEach((el) => el.classList.add('overflow-hidden'));
5866              return;
5867            }
5868
5869            // Hand the scroll lock to an opening menu; release our additions after it closes.
5870            if (!this.mobileNavOpen() && this._scrollLockAdded) {
5871              this._scrollLockAdded.forEach((el) => el.classList.remove('overflow-hidden'));
5872              this._scrollLockAdded = null;
5873            }
5874          },
5875
5876          openBookingPanel() {
5877            if (this.mobileNavOpen()) return;
5878            if (this.showBooking) return;
5879
5880            this.showBooking = true;
5881            this.lockScroll(true);
5882          },
5883
5884          toggleBookingPanel() {
5885            this.showBooking ? this.closeBookingPanel() : this.openBookingPanel();
5886          },
5887
5888          closeBookingPanel() {
5889            if (!this.showBooking) return;
5890
5891            this.showBooking = false;
5892            this.lockScroll(false);
5893
5894            this.$nextTick(() => {
5895              if (this._onScroll) {
5896                this._onScroll();
5897              }
5898            });
5899          },
5900
5901          submitBooking() {
5902            if (this.$refs.bookForm) {
5903              this.$refs.bookForm.submit();
5904              this.closeBookingPanel();
5905            }
5906          },
5907        }));
5908      });
5909    </script>
5909
5910  
5911
5912    
5913  
5914  <style>
5915  [x-cloak]{display:none!important}
5916
5917  /* ===== Root overlay ===== */
5918  .cc-root{ position:fixed; inset:0; z-index:9999; pointer-events:none; }
5919
5920  /*
5921     IMPORTANT FIX:
5922    Do NOT use !important on breakpoint display rules,
5923    because Alpine x-show toggles inline display:none; which must win.
5924  */
5925  .cc-mobile  { display:block; }   /* default: mobile on */
5926  .cc-desktop { display:none; }    /* default: desktop off */
5927  @media (min-width:768px){
5928    .cc-mobile  { display:none; }
5929    .cc-desktop { display:block; }
5930  }
5931
5932  /* ===== Shared card container ===== */
5933  .cc-card{
5934    border-radius:0.75rem;
5935    border:1px solid rgba(229,231,235,1);
5936    background:rgba(255,255,255,.95);
5937    backdrop-filter:blur(10px);
5938    box-shadow:0 20px 45px rgba(0,0,0,.18);
5939    pointer-events:auto;
5940  }
5941
5942  /* ===== Mobile popup sizing/position (half screen, left-aligned) ===== */
5943  .cc-mobile-popup{
5944    position:fixed; left:12px; bottom:16px;
5945    width:50vw !important;
5946    min-width:260px; max-width:420px;
5947    box-sizing:border-box;
5948    pointer-events:auto;
5949  }
5950
5951  /* Desktop card wrapper */
5952  .cc-desktop-wrap{ position:fixed; left:16px; bottom:16px; pointer-events:auto; }
5953
5954  /* Settings modal */
5955  .cc-modal{
5956    position:fixed; inset:0; z-index:10000;
5957    display:flex; align-items:center; justify-content:center;
5958    pointer-events:auto;
5959  }
5960  .cc-modal-panel{
5961    width:90vw; max-width:520px;
5962    border-radius:0.75rem;
5963    background:#fff;
5964    box-shadow:0 20px 40px rgba(0,0,0,.18);
5965    border:1px solid rgba(0,0,0,.06);
5966    padding:1.25rem;
5967    position:relative;
5968  }
5969
5970  /* Three equal buttons */
5971  .cc-btn-row{ display:grid; grid-template-columns:repeat(3,1fr); gap:.5rem; }
5972
5973  /* Dimmer */
5974  .cc-dim{ position:absolute; inset:0; background:rgba(0,0,0,.4); }
5975</style>
5976
5977<div
5978  x-data="{
5979    storageKey: 'ab1_cc',
5980    open: false,
5981    showSettings: false,
5982    categories: { analytics:false, marketing:false, functional:false },
5983
5984    init(){
5985      const saved = this.getConsent();
5986      if (!saved) { this.open = true; return; }
5987      this.dispatch(saved);
5988    },
5989
5990    acceptAll(){
5991      this.categories = { analytics:true, marketing:true, functional:true };
5992      this.save(true);
5993    },
5994
5995    rejectAll(){
5996      this.categories = { analytics:false, marketing:false, functional:false };
5997      this.save(false);
5998    },
5999
6000    save(explicitAccepted = null){
6001      const consent = {
6002        accepted: explicitAccepted ?? (this.categories.analytics || this.categories.marketing || this.categories.functional),
6003        categories: { ...this.categories },
6004        updatedAt: new Date().toISOString()
6005      };
6006
6007      //  Close UI immediately (x-show must hide it)
6008      this.showSettings = false;
6009      this.open = false;
6010
6011      // Persist + dispatch safely (never block closing)
6012      this.setConsent(consent);
6013      this.dispatch(consent);
6014    },
6015
6016    dispatch(consent){
6017      try { window.dispatchEvent(new CustomEvent('cookie-consent', { detail: consent })); } catch (_) {}
6018      try {
6019        window.dataLayer = window.dataLayer || [];
6020        window.dataLayer.push({ event: 'cookie_consent_update', consent });
6021      } catch (_) {}
6022    },
6023
6024    getConsent(){
6025      try {
6026        const raw = localStorage.getItem(this.storageKey);
6027        if (raw) return JSON.parse(raw);
6028      } catch (_) {}
6029      try {
6030        const raw = sessionStorage.getItem(this.storageKey);
6031        if (raw) return JSON.parse(raw);
6032      } catch (_) {}
6033      return null;
6034    },
6035
6036    setConsent(obj){
6037      const val = JSON.stringify(obj);
6038      try { localStorage.setItem(this.storageKey, val); return; } catch (_) {}
6039      try { sessionStorage.setItem(this.storageKey, val); return; } catch (_) {}
6040    },
6041  }"
6042  x-init="init()"
6043  x-cloak
6044  class="cc-root"
6045  aria-live="polite"
6046>
6047
6048  
6049  <div
6050    x-show="open"
6051    x-transition
6052    class="cc-mobile cc-mobile-popup"
6053    role="dialog"
6054    aria-modal="true"
6055    aria-labelledby="cc-mobile-title"
6056  >
6057    <div class="cc-card">
6058      <div class="p-4">
6059        <p id="cc-mobile-title" class="text-xs font-semibold tracking-widest text-[#0047BB]">
6060          PRIVACY NOTICE
6061        </p>
6062        <p class="mt-1 text-sm leading-5 text-gray-700">
6063          We use cookies to improve your experience. See our
6064          <a href="https://astoriaboracay.com/privacy-policy" class="underline font-medium hover:text-[#0047BB]">Privacy Policy</a>.
6065        </p>
6066
6067        <div class="mt-3 cc-btn-row">
6068          <button type="button"
6069                  @click.prevent.stop="showSettings = true"
6070                  class="rounded-lg px-0 py-2 text-sm font-semibold ring-1 ring-gray-300 hover:bg-gray-50">
6071            Settings
6072          </button>
6073          <button type="button"
6074                  @click.prevent.stop="rejectAll()"
6075                  class="rounded-lg px-0 py-2 text-sm font-semibold bg-gray-100 hover:bg-gray-200">
6076            Reject
6077          </button>
6078          <button type="button"
6079                  @click.prevent.stop="acceptAll()"
6080                  class="rounded-lg px-0 py-2 text-sm font-semibold text-white bg-[#0047BB] hover:brightness-110">
6081            Accept
6082          </button>
6083        </div>
6084      </div>
6085    </div>
6086  </div>
6087
6088  
6089  <div
6090    x-show="open"
6091    x-transition
6092    class="cc-desktop cc-desktop-wrap"
6093    role="dialog"
6094    aria-modal="true"
6095    aria-labelledby="cc-desktop-title"
6096  >
6097    <div class="cc-card w-auto">
6098      <div class="p-4" style="width: 28rem; max-width: 92vw;">
6099        <p id="cc-desktop-title" class="text-[11px] lg:text-xs font-semibold tracking-widest text-[#0047BB]">
6100          PRIVACY NOTICE
6101        </p>
6102        <p class="mt-1 text-[13px] lg:text-sm leading-5 text-gray-700">
6103          We use cookies to improve your experience. See our
6104          <a href="https://astoriaboracay.com/privacy-policy" class="underline font-medium hover:text-[#0047BB]">Privacy Policy</a>.
6105        </p>
6106
6107        <div class="mt-3 cc-btn-row">
6108          <button type="button"
6109                  @click.prevent.stop="showSettings = true"
6110                  class="rounded-lg px-0 py-2 text-[13px] lg:text-sm font-semibold ring-1 ring-gray-300 hover:bg-gray-50">
6111            Settings
6112          </button>
6113          <button type="button"
6114                  @click.prevent.stop="rejectAll()"
6115                  class="rounded-lg px-0 py-2 text-[13px] lg:text-sm font-semibold bg-gray-100 hover:bg-gray-200">
6116            Reject
6117          </button>
6118          <button type="button"
6119                  @click.prevent.stop="acceptAll()"
6120                  class="rounded-lg px-0 py-2 text-[13px] lg:text-sm font-semibold text-white bg-[#0047BB] hover:brightness-110">
6121            Accept
6122          </button>
6123        </div>
6124      </div>
6125    </div>
6126  </div>
6127
6128  
6129  <div
6130    x-show="showSettings"
6131    x-transition.opacity
6132    x-cloak
6133    class="cc-modal"
6134    @keydown.escape.window="showSettings = false"
6135  >
6136    <div class="cc-dim" @click="showSettings = false"></div>
6137
6138    <div x-show="showSettings" x-transition
6139         role="dialog" aria-modal="true" aria-labelledby="cookie-settings-title"
6140         class="cc-modal-panel">
6141      <button type="button"
6142              @click="showSettings = false"
6143              class="absolute top-2.5 right-2.5 inline-flex items-center justify-center w-8 h-8 rounded-full bg-gray-100 text-gray-600 hover:bg-gray-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[#0047BB]"
6144              aria-label="Close cookie settings">
6145        <svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 20 20" fill="currentColor">
6146          <path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 011.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/>
6147        </svg>
6148      </button>
6149
6150      <h2 id="cookie-settings-title" class="text-sm font-semibold text-gray-900">Cookie Settings</h2>
6151      <p class="mt-1 text-[13px] text-gray-600">Essential cookies are required and can’t be turned off.</p>
6152
6153      <div class="mt-4 space-y-3">
6154        <div class="flex items-start justify-between gap-3 rounded-lg border p-3">
6155          <div>
6156            <div class="text-[13px] font-medium text-gray-900">Essential</div>
6157            <div class="text-[12px] text-gray-600">Required for basic site functionality.</div>
6158          </div>
6159          <div class="text-[11px] font-semibold px-2 py-0.5 rounded bg-gray-100 text-gray-700">ON</div>
6160        </div>
6161
6162        <div class="flex items-start justify-between gap-3 rounded-lg border p-3">
6163          <div>
6164            <div class="text-[13px] font-medium text-gray-900">Functional</div>
6165            <div class="text-[12px] text-gray-600">Remembers preferences and enhances features.</div>
6166          </div>
6167          <label class="inline-flex items-center cursor-pointer">
6168            <input type="checkbox" class="sr-only peer" x-model="categories.functional">
6169            <span class="relative w-10 h-5 rounded-full bg-gray-200 transition peer-checked:bg-[#0047BB]
6170                          after:content-[''] after:absolute after:top-0.5 after:left-0.5
6171                          after:w-4 after:h-4 after:bg-white after:rounded-full after:shadow after:transition
6172                          peer-checked:after:translate-x-5"></span>
6173          </label>
6174        </div>
6175
6176        <div class="flex items-start justify-between gap-3 rounded-lg border p-3">
6177          <div>
6178            <div class="text-[13px] font-medium text-gray-900">Analytics</div>
6179            <div class="text-[12px] text-gray-600">Helps us understand site usage.</div>
6180          </div>
6181          <label class="inline-flex items-center cursor-pointer">
6182            <input type="checkbox" class="sr-only peer" x-model="categories.analytics">
6183            <span class="relative w-10 h-5 rounded-full bg-gray-200 transition peer-checked:bg-[#0047BB]
6184                          after:content-[''] after:absolute after:top-0.5 after:left-0.5
6185                          after:w-4 after:h-4 after:bg-white after:rounded-full after:shadow after:transition
6186                          peer-checked:after:translate-x-5"></span>
6187          </label>
6188        </div>
6189
6190        <div class="flex items-start justify-between gap-3 rounded-lg border p-3">
6191          <div>
6192            <div class="text-[13px] font-medium text-gray-900">Marketing</div>
6193            <div class="text-[12px] text-gray-600">Personalized content and ads.</div>
6194          </div>
6195          <label class="inline-flex items-center cursor-pointer">
6196            <input type="checkbox" class="sr-only peer" x-model="categories.marketing">
6197            <span class="relative w-10 h-5 rounded-full bg-gray-200 transition peer-checked:bg-[#0047BB]
6198                          after:content-[''] after:absolute after:top-0.5 after:left-0.5
6199                          after:w-4 after:h-4 after:bg-white after:rounded-full after:shadow after:transition
6200                          peer-checked:after:translate-x-5"></span>
6201          </label>
6202        </div>
6203      </div>
6204
6205      <div class="mt-5 flex flex-wrap justify-end gap-2">
6206        <button type="button"
6207                @click.prevent.stop="rejectAll()"
6208                class="rounded-lg px-3 py-1.5 text-[13px] font-semibold bg-gray-100 hover:bg-gray-200">
6209          Reject All
6210        </button>
6211        <button type="button"
6212                @click.prevent.stop="acceptAll()"
6213                class="rounded-lg px-4 py-2 text-[13px] font-semibold text-white bg-[#0047BB] hover:brightness-110">
6214          Accept All
6215        </button>
6216        <button type="button"
6217                @click.prevent.stop="save()"
6218                class="rounded-lg px-3 py-1.5 text-[13px] font-semibold ring-1 ring-gray-300 hover:bg-gray-50">
6219          Save Preferences
6220        </button>
6221      </div>
6222    </div>
6223  </div>
6224
6225</div>
6226</body>
6227</html>

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