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 & 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&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 & 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&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&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 & 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&B</a> 1876 <a href="https://astoriaboracay.com/meetings-events" class="block py-2 font-semibold">Meetings & 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 & 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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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'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'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'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 & 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's Ridge" 5074 title="Stellar Potter'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'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 & Hospitality Institute" 5116 title="Astoria Culinary & 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 & 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 & Convention Center" 5221 title="Mangrove Conference & 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 & 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 & 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 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 | 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.