Showing source for: https://luxurytravelfocus.com/
Duration: 0.882663s
Server: cloudflare
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
<meta content="LuxuryTravelFocus is a dedicated luxury travel blog platform, offering the latest guides, destination reviews, exclusive hotel recommendations, curated itineraries, and insider tips for high-end travelers. Discover the worldâs most opulent resorts, unique experiences, and travel trendsâall in one place for discerning globetrotters!" name="description"/>
<meta content="luxury travel, travel blog, exclusive hotels, luxury resorts, high-end destinations, travel guides, curated itineraries, travel tips, opulent experiences, luxury vacations, travel trends" name="keywords"/>
<title>LuxuryTravelFocus | Luxury Travel Blog & Guide</title>
<link href="https://luxurytravelfocus.com/" rel="canonical"/>
<style>
/* Global Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Playfair Display', 'Cormorant Garamond', serif;
}
:root {
--primary-color: #c8a97e;
--secondary-color: #1a1a1a;
--light-color: #f9f6f0;
--accent-color: #d4af37;
--text-color: #333;
}
body {
background-color: var(--light-color);
color: var(--text-color);
line-height: 1.6;
}
.container {
width: 90%;
max-width: 1400px;
margin: 0 auto;
}
/* Typography */
h1, h2, h3, h4 {
font-weight: 700;
letter-spacing: 1px;
margin-bottom: 20px;
}
h1 {
font-size: 3rem;
margin-bottom: 10px;
}
h2 {
font-size: 2.5rem;
color: var(--secondary-color);
position: relative;
}
h2:after {
content: '';
display: block;
width: 60px;
height: 3px;
background-color: var(--primary-color);
margin-top: 10px;
}
h3 {
font-size: 1.8rem;
}
p {
margin-bottom: 15px;
font-size: 1.1rem;
}
a {
text-decoration: none;
color: inherit;
transition: all 0.3s ease;
}
.btn {
display: inline-block;
padding: 12px 30px;
background-color: var(--primary-color);
color: #fff;
border: none;
text-transform: uppercase;
letter-spacing: 2px;
font-size: 0.9rem;
transition: all 0.3s ease;
cursor: pointer;
}
.btn:hover {
background-color: var(--secondary-color);
transform: translateY(-3px);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
}
.btn-outline {
background-color: transparent;
border: 2px solid var(--primary-color);
color: var(--primary-color);
}
.btn-outline:hover {
background-color: var(--primary-color);
color: #fff;
}
/* Header */
header {
background-color: rgba(255, 255, 255, 0.95);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);
position: fixed;
width: 100%;
z-index: 1000;
padding: 15px 0;
transition: all 0.3s ease;
}
header.scrolled {
padding: 5px 0;
}
.nav-container {
display: flex;
justify-content: space-between;
align-items: center;
}
.logo {
font-size: 1.8rem;
font-weight: 700;
color: var(--primary-color);
letter-spacing: 1px;
display: flex;
align-items: center;
}
.logo img {
max-height: 40px;
margin-right: 10px;
}
.logo span {
color: var(--secondary-color);
}
.nav-links {
display: flex;
list-style: none;
}
.nav-links li {
margin-left: 30px;
}
.nav-links a {
color: var(--secondary-color);
font-size: 1rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 1px;
position: relative;
}
.nav-links a:after {
content: '';
display: block;
width: 0;
height: 2px;
background-color: var(--primary-color);
transition: width 0.3s ease;
position: absolute;
bottom: -5px;
left: 0;
}
.nav-links a:hover:after,
.nav-links a.active:after {
width: 100%;
}
.mobile-menu {
display: none;
cursor: pointer;
}
.bar {
display: block;
width: 25px;
height: 3px;
margin: 5px auto;
background-color: var(--secondary-color);
transition: all 0.3s ease;
}
/* Hero Section */
.hero {
height: 100vh;
background-image: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url('https://images.unsplash.com/photo-1578683010236-d716f9a3f461?ixlib=rb-4.0.3&auto=format&fit=crop&w=2000&q=80');
background-size: cover;
background-position: center;
color: white;
display: flex;
align-items: center;
text-align: center;
}
.hero-content {
max-width: 800px;
margin: 0 auto;
padding: 0 20px;
animation: fadeIn 1.5s ease;
}
.hero h1 {
font-size: 3.5rem;
margin-bottom: 20px;
text-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
}
.hero p {
font-size: 1.3rem;
margin-bottom: 30px;
text-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5);
max-width: 700px;
margin-left: auto;
margin-right: auto;
}
/* About Section (Featured Posts) */
.about {
padding: 100px 0;
background-color: #fff;
}
.about-content {
display: flex;
align-items: flex-start;
gap: 50px;
}
.about-img {
flex: 1;
position: relative;
}
.about-img:before {
content: '';
position: absolute;
top: -20px;
left: -20px;
width: 100%;
height: 100%;
border: 5px solid var(--primary-color);
z-index: -1;
}
.about-img img {
width: 100%;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.1);
display: block;
cursor: pointer;
}
.about-text {
flex: 1;
}
/* Tags Widget Styles */
.tags-widget {
margin-top: 40px;
padding-top: 30px;
border-top: 1px solid #eee;
}
.tags-widget h4 {
margin-bottom: 15px;
font-size: 1.2rem;
color: var(--secondary-color);
}
.tag-cloud {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.tag-item {
background-color: var(--light-color);
color: var(--secondary-color);
padding: 5px 15px;
border-radius: 20px;
font-size: 0.85rem;
transition: all 0.3s ease;
border: 1px solid transparent;
}
.tag-item:hover {
background-color: var(--primary-color);
color: white;
transform: translateY(-2px);
}
.subtitle {
color: var(--primary-color);
font-size: 1.2rem;
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 10px;
font-weight: 600;
}
/* Featured Destinations (Fine Dining) */
.featured-destinations {
padding: 100px 0;
background-color: var(--light-color);
}
.section-header {
text-align: center;
margin-bottom: 50px;
}
.section-header h2:after {
margin-left: auto;
margin-right: auto;
}
.destinations-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 30px;
}
.destination-card {
background-color: white;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
border-radius: 5px;
overflow: hidden;
transition: all 0.3s ease;
}
.destination-card:hover {
transform: translateY(-10px);
box-shadow: 0 20px 30px rgba(0, 0, 0, 0.15);
}
.card-img {
height: 250px;
overflow: hidden;
position: relative;
cursor: pointer;
}
.card-img img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.destination-card:hover .card-img img {
transform: scale(1.1);
}
.location-tag {
position: absolute;
bottom: 15px;
left: 15px;
background-color: var(--primary-color);
color: white;
padding: 5px 15px;
border-radius: 20px;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 1px;
}
.card-content {
padding: 25px;
}
.card-content h3 {
font-size: 1.5rem;
margin-bottom: 10px;
}
.card-content p {
color: #666;
font-size: 1rem;
margin-bottom: 15px;
}
.price {
color: var(--primary-color);
font-size: 1.2rem;
font-weight: bold;
margin-bottom: 15px;
}
.rating {
color: var(--accent-color);
margin-bottom: 20px;
}
.view-more-container {
text-align: center;
margin-top: 40px;
}
/* Luxury Experiences (First Class) */
.luxury-experiences {
padding: 100px 0;
background-image: linear-gradient(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.8)), url('https://images.unsplash.com/photo-1551882547-ff40c63fe5fa?ixlib=rb-4.0.3&auto=format&fit=crop&w=2000&q=80');
background-size: cover;
background-position: center;
background-attachment: fixed;
color: white;
text-align: center;
}
.luxury-experiences h2 {
color: white;
}
.luxury-experiences h2:after {
background-color: var(--accent-color);
margin-left: auto;
margin-right: auto;
}
.experience-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 30px;
margin-top: 50px;
}
.experience-item {
text-align: center;
padding: 30px 20px;
border: 1px solid rgba(255, 255, 255, 0.2);
transition: all 0.3s ease;
display: flex;
flex-direction: column;
align-items: center;
}
.experience-item:hover {
background-color: rgba(255, 255, 255, 0.1);
transform: translateY(-5px);
}
.experience-icon {
font-size: 2.5rem;
color: var(--primary-color);
margin-bottom: 20px;
}
.experience-img-custom {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
margin-bottom: 20px;
border: 2px solid var(--primary-color);
cursor: pointer;
}
.experience-item h3 {
font-size: 1.3rem;
margin-bottom: 15px;
}
.experience-item p {
font-size: 0.9rem;
}
/* Testimonials (Luxury Hotels) */
.testimonials {
padding: 100px 0;
background-color: white;
}
.testimonial-container {
max-width: 900px;
margin: 0 auto;
position: relative;
}
.testimonial-slider {
overflow: hidden;
}
.testimonial-slide {
text-align: center;
padding: 0 50px;
display: none;
}
.testimonial-slide.active {
display: block;
animation: fadeIn 1s ease;
}
.testimonial-img {
width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
margin: 0 auto 20px;
border: 5px solid var(--primary-color);
cursor: pointer;
}
.testimonial-text {
font-size: 1.2rem;
font-style: italic;
margin-bottom: 20px;
color: #555;
}
.testimonial-author {
font-weight: bold;
color: var(--secondary-color);
font-size: 1.1rem;
}
.testimonial-position {
font-size: 0.9rem;
color: var(--primary-color);
}
.slider-dots {
display: flex;
justify-content: center;
margin-top: 30px;
}
.dot {
width: 12px;
height: 12px;
background-color: #ddd;
border-radius: 50%;
margin: 0 5px;
cursor: pointer;
transition: all 0.3s ease;
}
.dot.active {
background-color: var(--primary-color);
}
/* Blog Section */
.blog-section {
padding: 100px 0;
background-color: var(--light-color);
}
.blog-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 30px;
}
.blog-card {
background-color: white;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
border-radius: 5px;
overflow: hidden;
transition: all 0.3s ease;
}
.blog-card:hover {
transform: translateY(-10px);
box-shadow: 0 20px 30px rgba(0, 0, 0, 0.15);
}
.blog-img {
height: 200px;
overflow: hidden;
}
.blog-img img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.blog-card:hover .blog-img img {
transform: scale(1.1);
}
.blog-content {
padding: 25px;
}
.blog-date {
color: var(--primary-color);
font-size: 0.9rem;
margin-bottom: 10px;
}
.blog-content h3 {
font-size: 1.3rem;
margin-bottom: 10px;
line-height: 1.4;
}
.blog-content p {
color: #666;
font-size: 0.95rem;
margin-bottom: 15px;
}
.read-more {
color: var(--primary-color);
font-weight: 600;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 1px;
position: relative;
}
.read-more:after {
content: 'â';
margin-left: 5px;
transition: all 0.3s ease;
}
.read-more:hover:after {
margin-left: 10px;
}
/* Newsletter */
.newsletter {
padding: 80px 0;
background-color: var(--secondary-color);
color: white;
text-align: center;
}
.newsletter h2 {
color: white;
}
.newsletter h2:after {
margin-left: auto;
margin-right: auto;
}
.newsletter-form {
display: flex;
max-width: 600px;
margin: 40px auto 0;
}
.newsletter-input {
flex: 1;
padding: 15px 20px;
border: none;
border-radius: 0;
font-size: 1rem;
}
.newsletter-btn {
padding: 0 30px;
background-color: var(--primary-color);
color: white;
border: none;
cursor: pointer;
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 1px;
transition: all 0.3s ease;
}
.newsletter-btn:hover {
background-color: var(--accent-color);
}
/* Footer */
footer {
background-color: #111;
color: #fff;
padding: 80px 0 20px;
}
.footer-container {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 30px;
margin-bottom: 50px;
}
.footer-logo {
font-size: 2rem;
font-weight: 700;
color: var(--primary-color);
margin-bottom: 20px;
display: block;
}
.footer-about p {
color: #aaa;
margin-bottom: 25px;
}
.social-links {
display: flex;
}
.social-links a {
display: flex;
justify-content: center;
align-items: center;
width: 40px;
height: 40px;
background-color: rgba(255, 255, 255, 0.1);
border-radius: 50%;
margin-right: 10px;
color: #fff;
transition: all 0.3s ease;
}
.social-links a:hover {
background-color: var(--primary-color);
transform: translateY(-5px);
}
.footer-heading {
font-size: 1.2rem;
margin-bottom: 25px;
position: relative;
padding-bottom: 10px;
}
.footer-heading:after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 40px;
height: 3px;
background-color: var(--primary-color);
}
.footer-links li {
margin-bottom: 15px;
list-style: none;
}
.footer-links a {
color: #aaa;
transition: all 0.3s ease;
position: relative;
padding-left: 15px;
}
.footer-links a:before {
content: 'â';
position: absolute;
left: 0;
color: var(--primary-color);
transition: all 0.3s ease;
}
.footer-links a:hover {
color: #fff;
padding-left: 20px;
}
.contact-info li {
margin-bottom: 20px;
list-style: none;
color: #aaa;
display: flex;
align-items: flex-start;
}
.contact-info i {
color: var(--primary-color);
margin-right: 10px;
font-size: 1.2rem;
}
.gallery-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.gallery-img {
height: 80px;
overflow: hidden;
}
.gallery-img img {
width: 100%;
height: 100%;
object-fit: cover;
transition: all 0.3s ease;
}
.gallery-img:hover img {
transform: scale(1.1);
}
.footer-bottom {
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding-top: 20px;
text-align: center;
color: #aaa;
font-size: 0.9rem;
}
.scroll-to-top {
position: fixed;
bottom: 20px;
right: 20px;
width: 40px;
height: 40px;
background-color: var(--primary-color);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
cursor: pointer;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
z-index: 999;
}
.scroll-to-top.active {
opacity: 1;
visibility: visible;
}
/* Animations */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Responsive Styles */
@media (max-width: 1200px) {
.destinations-grid,
.experience-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 992px) {
h1 {
font-size: 2.5rem;
}
h2 {
font-size: 2rem;
}
.about-content {
flex-direction: column;
}
.about-img {
margin-bottom: 30px;
}
.footer-container {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
.logo {
font-size: 1.3rem;
z-index: 5001;
position: relative;
}
.nav-links {
position: fixed;
left: -100%;
top: 80px;
flex-direction: column;
background-color: white;
width: 100%;
text-align: center;
transition: 0.3s;
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
padding: 20px 0;
}
.nav-links.active {
left: 0;
}
.nav-links li {
margin: 15px 0;
}
.mobile-menu {
display: block;
flex-shrink: 0;
margin-left: auto;
}
.mobile-menu.active .bar:nth-child(2) {
opacity: 0;
}
.mobile-menu.active .bar:nth-child(1) {
transform: translateY(8px) rotate(45deg);
}
.mobile-menu.active .bar:nth-child(3) {
transform: translateY(-8px) rotate(-45deg);
}
.hero h1 {
font-size: 2.5rem;
}
.hero p {
font-size: 1.1rem;
}
.destinations-grid,
.blog-grid,
.experience-grid {
grid-template-columns: 1fr;
}
.newsletter-form {
flex-direction: column;
}
.newsletter-input,
.newsletter-btn {
width: 100%;
margin-bottom: 10px;
}
}
@media (max-width: 576px) {
.container {
width: 95%;
}
.footer-container {
grid-template-columns: 1fr;
}
.testimonial-slide {
padding: 0;
}
.hero h1 {
font-size: 2rem;
}
}
</style>
<link href="https://luxurytravelfocus.com/feed/" rel="alternate" type="application/rss+xml"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "LuxuryTravelFocus",
"url": "https://luxurytravelfocus.com",
"publisher": {
"@type": "Organization",
"@id": "https://luxurytravelfocus.com/#website",
"name": "LuxuryTravelFocus",
"url": "https://luxurytravelfocus.com",
"description": "LuxuryTravelFocus is a dedicated luxury travel blog platform, offering the latest guides, destination reviews, exclusive hotel recommendations, curated itineraries, and insider tips for high-end travelers. Discover the worldâs most opulent resorts, unique experiences, and travel trendsâall in one place for discerning globetrotters!",
"foundingDate": "2023",
"logo": {
"@type": "ImageObject",
"url": "https://luxurytravelfocus.com/web_logo.png",
"caption": "LuxuryTravelFocus Logo"
}
}
}</script></head>
<body>
<!-- Header -->
<header>
<div class="container nav-container">
<a class="logo" href="/">LuxuryTravelFocus</a>
<div class="mobile-menu">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
</div>
<ul class="nav-links" id="nav-links">
<!-- Nav items will be populated by JS -->
</ul>
</div>
</header>
<!-- Hero Section -->
<section class="hero">
<div class="hero-content">
<h1>Extraordinary Luxury Journeys</h1>
<p>Discover the world's most exclusive destinations and experiences curated for the discerning traveler. Where luxury meets authentic cultural immersion.</p>
<a class="btn" href="#featured-posts">Explore Destinations</a>
</div>
</section>
<!-- About Section -> Featured Posts -->
<section class="about" id="featured-posts">
<div class="container">
<div class="about-content">
<div class="about-img" id="featured-img-container">
<!-- Content loaded via JS -->
</div>
<div class="about-text">
<p class="subtitle">Travel Inspiration</p>
<h2>Featured Posts</h2>
<div id="featured-text-content">
<!-- Content loaded via JS -->
</div>
<!-- Tags Widget placed on the right side (conceptually) within the flex container -->
<div class="tags-widget">
<h4>Tags</h4>
<div class="tag-cloud" id="tag-cloud">
<!-- Tags loaded via JS -->
</div>
</div>
</div>
</div>
</div>
</section>
<!-- Featured Destinations -> Fine Dining & Gourmet -->
<section class="featured-destinations">
<div class="container">
<div class="section-header">
<p class="subtitle">Handpicked Selection</p>
<h2>Fine Dining & Gourmet</h2>
<p>Discover our curated collection of the world's most exclusive destinations, each offering unparalleled luxury and authentic experiences.</p>
</div>
<div class="destinations-grid" id="fine-dining-grid">
<!-- Content loaded via JS -->
</div>
<div class="view-more-container">
<a class="btn" href="/fine-dining-gourmet.html">view all</a>
</div>
</div>
</section>
<!-- Luxury Experiences -> First Class Experiences -->
<section class="luxury-experiences">
<div class="container">
<p class="subtitle">Beyond Ordinary</p>
<h2>First Class Experiences</h2>
<p>We curate extraordinary experiences that transcend the conventional, creating moments of wonder and lasting memories.</p>
<div class="experience-grid" id="first-class-grid">
<!-- Content loaded via JS -->
</div>
<div class="view-more-container">
<a class="btn" href="/first-class-experiences.html">view all</a>
</div>
</div>
</section>
<!-- Testimonials -> Luxury Hotels -->
<section class="testimonials">
<div class="container">
<div class="section-header">
<p class="subtitle">Exclusive Stays</p>
<h2>Luxury Hotels</h2>
</div>
<div class="testimonial-container">
<div class="testimonial-slider" id="luxury-hotels-slider">
<!-- Content loaded via JS -->
</div>
<div class="slider-dots" id="slider-dots">
<!-- Dots loaded via JS -->
</div>
</div>
<div class="view-more-container">
<a class="btn" href="/luxury-hotels.html">view all</a>
</div>
</div>
</section>
<!-- Newsletter -->
<section class="newsletter">
<div class="container">
<h2>Stay Inspired</h2>
<p>Subscribe to our newsletter for exclusive travel inspiration, insider tips, and special offers.</p>
<form class="newsletter-form" onsubmit="event.preventDefault(); alert('subscribe successful');">
<input class="newsletter-input" placeholder="Your Email Address" required="" type="email"/>
<button class="newsletter-btn" type="submit">Subscribe</button>
</form>
</div>
</section>
<!-- Footer -->
<footer>
<div class="container">
<div class="footer-container" id="footer-container">
<!-- Footer content loaded via JS -->
</div>
<div class="footer-bottom">
<p id="copyright-text">© 2023 LuxuryTravelFocus. All rights reserved. | Designed with passion for luxury travelers</p>
</div>
</div>
</footer>
<div class="scroll-to-top">â</div>
<!-- JavaScript -->
<script>
document.addEventListener('DOMContentLoaded', function() {
fetch('/data/index.json')
.then(response => response.json())
.then(data => {
// --- Navigation ---
const navContainer = document.getElementById('nav-links');
navContainer.innerHTML = '';
const currentPath = window.location.pathname;
data.navigation.forEach(item => {
const li = document.createElement('li');
const a = document.createElement('a');
a.href = item.link;
a.textContent = item.label;
if (item.link === '/' && (currentPath === '/' || currentPath === '/index.html')) {
a.classList.add('active');
} else if (item.link === currentPath) {
a.classList.add('active');
}
li.appendChild(a);
navContainer.appendChild(li);
});
// --- Tags ---
const tagCloud = document.getElementById('tag-cloud');
if (data.tag && data.tag.length > 0) {
data.tag.forEach(tag => {
const a = document.createElement('a');
a.href = tag.link;
a.textContent = tag.name;
a.className = 'tag-item';
tagCloud.appendChild(a);
});
}
// --- Featured Posts (from latest_articles_all) ---
if (data.latest_articles_all && data.latest_articles_all.length > 0) {
const article = data.latest_articles_all[0];
const imgContainer = document.getElementById('featured-img-container');
const textContainer = document.getElementById('featured-text-content');
imgContainer.innerHTML = `<a href="${article.link}"><img src="${article.image}" alt="${article.title}"></a>`;
textContainer.innerHTML = `
<h3>${article.title}</h3>
<p>${article.excerpt}</p>
<p><strong>Author:</strong> ${article.author} | <strong>Date:</strong> ${article.date}</p>
<a href="${article.link}" class="btn">Read More</a>
`;
}
// --- Fine Dining & Gourmet (from latest_articles_271) ---
if (data.latest_articles_271) {
const grid = document.getElementById('fine-dining-grid');
grid.innerHTML = '';
data.latest_articles_271.slice(0, 3).forEach(article => {
const card = document.createElement('div');
card.className = 'destination-card';
card.innerHTML = `
<div class="card-img">
<a href="${article.link}"><img src="${article.image}" alt="${article.title}"></a>
<span class="location-tag">${article.game || 'Gourmet'}</span>
</div>
<div class="card-content">
<h3>${article.title}</h3>
<p>${article.excerpt}</p>
<div class="price">${article.date}</div>
<a href="${article.link}" class="btn btn-outline">View Details</a>
</div>
`;
grid.appendChild(card);
});
}
// --- First Class Experiences (from latest_articles_270) ---
if (data.latest_articles_270) {
const grid = document.getElementById('first-class-grid');
grid.innerHTML = '';
data.latest_articles_270.slice(0, 4).forEach(article => {
const item = document.createElement('div');
item.className = 'experience-item';
item.innerHTML = `
<a href="${article.link}"><img src="${article.image}" alt="${article.title}" class="experience-img-custom"></a>
<h3>${article.title}</h3>
<p>${article.excerpt}</p>
`;
grid.appendChild(item);
});
}
// --- Luxury Hotels (from latest_articles_269) ---
if (data.latest_articles_269) {
const slider = document.getElementById('luxury-hotels-slider');
const dotsContainer = document.getElementById('slider-dots');
slider.innerHTML = '';
dotsContainer.innerHTML = '';
data.latest_articles_269.slice(0, 3).forEach((article, index) => {
const slide = document.createElement('div');
slide.className = `testimonial-slide ${index === 0 ? 'active' : ''}`;
slide.innerHTML = `
<a href="${article.link}"><img src="${article.image}" alt="${article.title}" class="testimonial-img"></a>
<p class="testimonial-text">"${article.excerpt}"</p>
<h4 class="testimonial-author">${article.title}</h4>
<p class="testimonial-position">${article.author}</p>
`;
slider.appendChild(slide);
const dot = document.createElement('span');
dot.className = `dot ${index === 0 ? 'active' : ''}`;
dot.setAttribute('data-slide', index);
dot.addEventListener('click', () => showSlide(index));
dotsContainer.appendChild(dot);
});
// Re-initialize slider logic since DOM changed
initializeSlider();
}
// --- Footer ---
const footerContainer = document.getElementById('footer-container');
footerContainer.innerHTML = '';
if (data.footer) {
// 1. About / Logo Section (First item in JSON or custom)
// Since JSON structure is generic titles, we map strictly or adapt.
// Adapting to layout: 1st col is Logo/Desc, others are links.
// Col 1: Logo and Description (Static + JSON desc if available, or hardcoded as per prompt "preserve layout")
// Prompt says: "Footer content... fetch from /data/index.json... populate... follow original format intelligently"
// Original: Logo, Desc, Socials.
// Let's create the first column manually or using the first footer item if it fits.
// We will map index 0 of footer json to Col 2, index 1 to Col 3, index 2 to Col 4.
// And keep Col 1 as the Brand column with Socials.
const col1 = document.createElement('div');
col1.className = 'footer-about';
col1.innerHTML = `
<a href="/" class="footer-logo">LuxuryTravelFocus</a>
<p>Crafting extraordinary travel experiences for discerning travelers.</p>
<div class="social-links">
<a href="https://www.facebook.com/"><i>f</i></a>
<a href="https://x.com/LuxuryTravelFocus"><i>t</i></a>
<a href="https://www.youtube.com/"><i>yt</i></a>
<a href="https://www.instagram.com/LuxuryTravelFocus/"><i>ig</i></a>
<a href="https://discord.com/app/"><i>dc</i></a>
</div>
`;
footerContainer.appendChild(col1);
// Dynamic Columns from JSON
data.footer.forEach(section => {
const col = document.createElement('div');
col.className = 'footer-links';
// Check if contents have HTML (links) or just text
let listHtml = '';
section.contents.forEach(content => {
if (content.includes('<a')) {
listHtml += `<li>${content}</li>`;
} else {
listHtml += `<li><span>${content}</span></li>`;
}
});
col.innerHTML = `
<h4 class="footer-heading">${section.title}</h4>
<ul>${listHtml}</ul>
`;
footerContainer.appendChild(col);
});
}
// Copyright
if (data.copyright) {
document.getElementById('copyright-text').textContent = data.copyright;
}
})
.catch(error => console.error('Error loading data:', error));
// Header scroll effect
const header = document.querySelector('header');
const scrollToTopBtn = document.querySelector('.scroll-to-top');
window.addEventListener('scroll', () => {
if (window.scrollY > 50) {
header.classList.add('scrolled');
scrollToTopBtn.classList.add('active');
} else {
header.classList.remove('scrolled');
scrollToTopBtn.classList.remove('active');
}
});
// Scroll to top button
scrollToTopBtn.addEventListener('click', () => {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
// Mobile Menu Toggle
const mobileMenu = document.querySelector('.mobile-menu');
const navLinks = document.querySelector('.nav-links');
mobileMenu.addEventListener('click', () => {
mobileMenu.classList.toggle('active');
navLinks.classList.toggle('active');
});
// Smooth scrolling for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
const href = this.getAttribute('href');
if (href === '#') return;
const target = document.querySelector(href);
if (target) {
e.preventDefault();
target.scrollIntoView({
behavior: 'smooth'
});
if (navLinks.classList.contains('active')) {
mobileMenu.classList.remove('active');
navLinks.classList.remove('active');
}
}
});
});
});
// Slider Logic (Global scope to be accessible after dynamic load)
let currentSlide = 0;
function showSlide(index) {
const slides = document.querySelectorAll('.testimonial-slide');
const dots = document.querySelectorAll('.dot');
if (slides.length === 0) return;
slides.forEach(slide => slide.classList.remove('active'));
dots.forEach(dot => dot.classList.remove('active'));
// Wrap around
if (index >= slides.length) index = 0;
if (index < 0) index = slides.length - 1;
slides[index].classList.add('active');
if(dots[index]) dots[index].classList.add('active');
currentSlide = index;
}
function initializeSlider() {
const slides = document.querySelectorAll('.testimonial-slide');
if (slides.length > 0) {
// Auto-advance
setInterval(() => {
showSlide(currentSlide + 1);
}, 5000);
}
}
</script>
</body>
</html>
| # |
Url |
Url |
Source |
Date |
| 1 |
https://luxurytravelfocus.com/ |
|
2026-10-20 10:53:57 |
| 2 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-20 10:53:56 |
| 3 |
https://auth.mediacorp.sg/u/login?… |
|
2026-10-20 10:53:56 |
| 4 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-20 10:53:55 |
| 5 |
https://bernhaldeproductions.nl/ |
|
2026-10-20 10:53:53 |
| 6 |
https://www.texarkanatwins.com/%25… |
|
2026-10-20 10:53:53 |
| 7 |
https://www.itengine.se/sr |
|
2026-10-20 10:53:53 |
| 8 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-20 10:53:52 |
| 9 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-20 10:53:51 |
| 10 |
https://amused.at/ |
|
2026-10-20 10:53:51 |
| 11 |
https://www.streetpastors.org/ |
|
2026-10-20 10:53:50 |
| 12 |
https://biolinku.co/vqmmco |
|
2026-10-20 10:53:50 |
| 13 |
https://www.samas.ir/ |
|
2026-10-20 10:53:50 |
| 14 |
https://www.texarkanatwins.com/%25… |
|
2026-10-20 10:53:49 |
| 15 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-20 10:53:49 |
| 16 |
https://www.texarkanatwins.com/%25… |
|
2026-10-20 10:53:49 |
| 17 |
https://auth.mediacorp.sg/u/login?… |
|
2026-10-20 10:53:48 |
| 18 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-20 10:53:48 |
| 19 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-20 10:53:47 |
| 20 |
https://www.texarkanatwins.com/%25… |
|
2026-10-20 10:53:46 |