:root{ --sc-primary:#00809f; } /* Hero unica Sunset Caribbean */ .scx-hero{ position: relative; width: 100%; min-height: clamp(440px, 58vh, 720px); display: grid; align-items: center; overflow: hidden; } .scx-hero__bg{ position:absolute; inset:0; background-image: url("BACKGROUND_IMAGE_URL"); background-position: center; background-size: cover; background-repeat: no-repeat; transform: scale(1.02); } .scx-hero__inner{ position: relative; width: min(1180px, calc(100% - 28px)); margin: 0 auto; padding: 44px 0 78px; } /* Backing card premium, sin tocar el area del search */ .scx-hero__copy{ display: inline-block; max-width: 760px; padding: 14px 16px 16px; border-radius: 16px; background: rgba(10, 22, 28, .46); backdrop-filter: blur(8px); border: 1px solid rgba(255,255,255,.10); box-shadow: 0 18px 50px rgba(0,0,0,.22); } .scx-hero__title{ margin: 0 0 10px; font-size: clamp(30px, 7vw, 62px); line-height: 1.05; color: #fff; font-weight: 800; text-shadow: 0 14px 40px rgba(0,0,0,.45); } /* Underline visible, fiel al color de marca */ .scx-hero__title span{ color: #dffbff; background: linear-gradient( to top, rgba(0,128,159,.85) 0 38%, transparent 38% 100% ); padding: 0 .08em; border-radius: 6px; } .scx-hero__sub{ max-width: 640px; margin: 0 0 14px; font-size: clamp(15px, 3.6vw, 20px); line-height: 1.5; color: #ffffff; text-shadow: 0 2px 10px rgba(0,0,0,.35); } .scx-hero__btn{ display:inline-flex; align-items:center; justify-content:center; padding: 12px 18px; border-radius: 999px; font-weight: 700; font-size: 15px; background: var(--sc-primary); color:#fff; text-decoration:none !important; box-shadow: 0 12px 26px rgba(0,128,159,.32); transition: transform .15s ease, box-shadow .15s ease; } .scx-hero__btn:hover{ transform: translateY(-1px); box-shadow: 0 16px 34px rgba(0,128,159,.40); } .scx-hero__space{ height: 76px; } /* NO tocar: zona reservada para el shortcode */ .scx-hero__search-wrap{ width: min(1180px, calc(100% - 28px)); margin: -58px auto 0; position: relative; z-index: 5; } @media (min-width: 769px){ .scx-hero__inner{ width: min(1180px, calc(100% - 40px)); padding: clamp(50px, 7vh, 84px) 0 84px; } .scx-hero__copy{ padding: 16px 18px 18px; border-radius: 18px; } .scx-hero__space{ height: 72px; } .scx-hero__search-wrap{ width: min(1180px, calc(100% - 40px)); margin: -58px auto 0; } }

Explore the Dominican Republic with Sunset Caribbean

Handpicked tours, clear pricing, and reliable support so you can focus on the experience.

Browse Tours
Popular Tours
No tours found
Adults Ages 13+
2
Children Ages 2-12
0
:root{ --sc-primary:#00809f; --sc-ink:#0b1a1f; --sc-muted:#5b6b74; } .sc-section{ width: 100%; padding: 22px 0 0; /* sin padding abajo */ margin: 0; /* sin margin */ } .sc-section__inner{ width: min(1180px, calc(100% - 28px)); margin: 0 auto; padding: 0; /* por si el builder agrega algo */ } .sc-section__h2{ margin: 0 0 6px; /* menos aire entre titulo y subtitulo */ font-size: clamp(22px, 5.6vw, 34px); line-height: 1.12; font-weight: 800; color: var(--sc-ink); letter-spacing: -0.2px; } .sc-underline{ position: relative; display: inline-block; padding-bottom: 6px; } .sc-underline::after{ content: ""; position: absolute; left: 0; bottom: 0; width: 72%; height: 6px; background: #00809f; border-radius: 999px; } .sc-section__sub{ margin: 0; /* sin margen */ max-width: 62ch; color: var(--sc-muted); font-size: clamp(14px, 3.8vw, 16px); line-height: 1.45; } /* eliminamos el spacer completo */ .sc-section__spacer{ display: none; } @media (min-width: 769px){ .sc-section{ padding: 26px 0 0; /* un poco mas arriba en desktop, sin aire abajo */ } .sc-section__inner{ width: min(1180px, calc(100% - 40px)); } .sc-section__h2{ margin-bottom: 6px; } }

Featured Tours

Start with our most requested experience. More tours are coming soon.

:root{ --sc-primary:#00809f; --sc-ink:#0b1a1f; --sc-muted:#5b6b74; --sc-card:#ffffff; --sc-line: rgba(11,26,31,.10); } .sc-why{ width: min(1180px, calc(100% - 28px)); margin: 0 auto; padding: 24px 0 10px; } .sc-why__title{ margin: 0 0 6px; font-size: clamp(22px, 5.6vw, 34px); line-height: 1.12; font-weight: 800; color: var(--sc-ink); letter-spacing: -0.2px; } .sc-why__title span{ position: relative; display: inline-block; padding-bottom: 6px; } .sc-why__title span::after{ content:""; position:absolute; left:0; bottom:0; width:72%; height:6px; background:#00809f; border-radius:999px; } .sc-why__sub{ margin: 0 0 14px; max-width: 62ch; color: var(--sc-muted); font-size: clamp(14px, 3.8vw, 16px); line-height: 1.45; } .sc-why__grid{ display: grid; grid-template-columns: 1fr; gap: 12px; } .sc-why__card{ background: var(--sc-card); border: 1px solid var(--sc-line); border-radius: 16px; padding: 14px 14px; } .sc-why__row{ display:flex; gap: 12px; align-items:flex-start; } .sc-why__icon{ width: 42px; height: 42px; border-radius: 12px; display:flex; align-items:center; justify-content:center; background: rgba(0,128,159,.10); color: #00809f; flex: 0 0 auto; } .sc-why__icon svg{ width: 22px; height: 22px; } .sc-why__h3{ margin: 0 0 4px; font-size: 16px; line-height: 1.25; font-weight: 800; color: var(--sc-ink); } .sc-why__p{ margin: 0; color: var(--sc-muted); font-size: 14px; line-height: 1.45; } @media (min-width: 769px){ .sc-why{ width: min(1180px, calc(100% - 40px)); padding: 28px 0 10px; } .sc-why__grid{ grid-template-columns: repeat(4, 1fr); gap: 14px; } .sc-why__card{ padding: 16px 16px; } .sc-why__h3{ font-size: 17px; } .sc-why__p{ font-size: 14px; } }

The Sunset Difference

Less uncertainty, more real experiences. Built for travelers who want it easy.

Clear & Honest Pricing

What you see is what you pay. No hidden fees, no last minute surprises.

Local Experts, Not Scripts

Led by locals who know the place, not by generic tour scripts.

Real Support, When It Matters

Real people ready to help before, during, and after your tour.

Carefully Selected Experiences

Fewer tours, better quality. We pick what we would recommend to friends.

:root{ --scx-brand:#00809f; --scx-white:#ffffff; } .scx-dest-head{ width: 100%; position: relative; overflow: hidden; background: #00809f; /* color sólido real */ padding: 34px 0 10px; margin: 0; } /* Isotipo de fondo (watermark) */ .scx-dest-head::before{ content:""; position:absolute; inset:0; background-image: url("https://sunsetcaribbean.com.do/wp-content/uploads/2025/12/Sunset-Caribbean-Isotipo.webp"); background-repeat: no-repeat; background-position: right 6% center; background-size: clamp(220px, 34vw, 520px); opacity: .12; /* mas sutil */ filter: brightness(.82) contrast(1.03); pointer-events: none; } .scx-dest-head__inner{ width: min(1180px, calc(100% - 28px)); margin: 0 auto; position: relative; z-index: 1; } .scx-dest-head__h2{ margin: 0 0 6px; font-size: clamp(22px, 5.6vw, 34px); line-height: 1.12; font-weight: 800; color: var(--scx-white); letter-spacing: -0.2px; } .scx-dest-head__h2 span{ position: relative; display: inline-block; padding-bottom: 6px; } .scx-dest-head__h2 span::after{ content:""; position:absolute; left:0; bottom:0; width: 72%; height: 6px; background: #ffffff; border-radius: 999px; } .scx-dest-head__sub{ margin: 0; max-width: 64ch; color: rgba(255,255,255,.92); font-size: clamp(14px, 3.8vw, 16px); line-height: 1.45; } @media (min-width: 769px){ .scx-dest-head{ padding: 42px 0 12px; } .scx-dest-head__inner{ width: min(1180px, calc(100% - 40px)); } }

Top Destinations

Explore Punta Cana, Santo Domingo, and Puerto Plata with tours designed for a smooth experience.

Real Experiences

What Our Guests Say

Real experiences from travelers who explored the Dominican Republic with Sunset Caribbean.

/* ============================================= SUNSET CARIBBEAN TRUST SIGNALS - FINAL Mobile First ============================================= */ .sct_section { width: calc(100% - 24px); max-width: 1180px; margin: 0 auto; background: #00809f; border-radius: 18px; padding: 14px; box-sizing: border-box; min-height: 100px; position: relative; overflow: hidden; } /* Grid base */ .sct_grid { display: flex; flex-direction: column; gap: 10px; height: 100%; position: relative; z-index: 1; } .sct_col { background: rgba(255,255,255,.10); border: 1px solid rgba(255,255,255,.18); border-radius: 12px; padding: 12px 14px 14px; box-sizing: border-box; display: flex; flex-direction: column; justify-content: center; transition: opacity 1.2s ease; } /* Textos */ .sct_label { font-size: 11px; font-weight: 700; color: rgba(255,255,255,.85); margin: 0 0 6px; } .sct_row { display: flex; align-items: baseline; gap: 8px; } .sct_num { font-size: 28px; font-weight: 900; color: #fff; line-height: 1; } .sct_meta { font-size: 12px; color: rgba(255,255,255,.9); font-weight: 600; } .sct_hint { margin: 6px 0 5px; font-size: 10px; color: rgba(255,255,255,.65); line-height: 1.4; } /* Círculos en estado inicial */ .sct_badges { display: flex; align-items: center; justify-content: center; margin-top: 4px; } .sct_badge { width: 36px; height: 36px; min-width: 36px; border-radius: 50%; background: #fff; border: 2px solid rgba(255,255,255,.3); overflow: hidden; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 12px rgba(0,0,0,.15); cursor: pointer; margin-left: -8px; position: relative; z-index: 1; transition: transform 1.2s ease, box-shadow 1.2s ease; } .sct_badge:first-child { margin-left: 0; } .sct_badge img { width: 100%; height: 100%; object-fit: cover; } /* ============================================ PANEL EXPANDIDO - Overlay absoluto ============================================ */ .sct_panel { position: absolute; top: 14px; left: 14px; right: 14px; bottom: 14px; background: rgba(255,255,255,.10); border: 1px solid rgba(255,255,255,.18); border-radius: 12px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 14px 16px; box-sizing: border-box; opacity: 0; visibility: hidden; transform: scale(0.98); z-index: 10; transition: opacity 0.8s ease, visibility 0.8s ease, transform 0.8s ease; } .sct_section.is_open .sct_panel { opacity: 1; visibility: visible; transform: scale(1); } .sct_section.is_open .sct_grid { opacity: 0; pointer-events: none; } /* Panel header */ .sct_panel_label { font-size: 11px; font-weight: 700; color: rgba(255,255,255,.85); margin: 0 0 10px; text-align: center; width: 100%; } /* Círculos en panel expandido */ .sct_panel_badges { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 6px; width: 100%; } .sct_item { display: flex; align-items: center; transition: margin 1.2s ease; } .sct_item_badge { width: 38px; height: 38px; min-width: 38px; border-radius: 50%; background: #fff; border: 2px solid rgba(255,255,255,.3); overflow: hidden; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 14px rgba(0,0,0,.18); cursor: pointer; flex-shrink: 0; transition: transform 1.2s ease, box-shadow 1.2s ease; } .sct_item_badge img { width: 100%; height: 100%; object-fit: cover; } /* Info del círculo */ .sct_item_info { max-width: 0; opacity: 0; overflow: hidden; padding-left: 0; display: flex; flex-direction: column; justify-content: center; gap: 3px; transition: max-width 1.2s ease, opacity 1s ease 0.2s, padding-left 1.2s ease; } .sct_item_info h4 { margin: 0; font-size: 12px; font-weight: 700; color: #fff; white-space: nowrap; } .sct_item_info p { margin: 0; font-size: 10px; color: rgba(255,255,255,.85); line-height: 1.35; max-width: 160px; } /* Item activo */ .sct_item.is_active { z-index: 10; } .sct_item.is_active .sct_item_badge { transform: scale(1.1); box-shadow: 0 6px 20px rgba(0,0,0,.22); } .sct_item.is_active .sct_item_info { max-width: 180px; opacity: 1; padding-left: 10px; } /* ============================================ DESKTOP (min-width: 768px) ============================================ */ @media (min-width: 768px) { .sct_section { padding: 18px; height: 130px; border-radius: 22px; } .sct_grid { flex-direction: row; gap: 14px; } .sct_col { border-radius: 16px; padding: 14px 18px 16px; } .sct_col:nth-child(1) { flex: 1; } .sct_col:nth-child(2) { flex: 1; } .sct_col:nth-child(3) { flex: 1.4; } .sct_label { font-size: 13px; margin: 0 0 8px; } .sct_row { gap: 10px; } .sct_num { font-size: 36px; } .sct_meta { font-size: 14px; } .sct_hint { margin: 8px 0 5px; font-size: 12px; } .sct_badges { margin-top: 6px; justify-content: center; } .sct_badge { width: 42px; height: 42px; min-width: 42px; margin-left: -10px; } /* Panel expandido desktop */ .sct_panel { top: 18px; left: 18px; right: 18px; bottom: 18px; border-radius: 16px; flex-direction: column; align-items: center; justify-content: center; padding: 16px 24px; } .sct_panel_label { font-size: 13px; margin: 0 0 14px; text-align: center; } .sct_panel_badges { justify-content: center; gap: 0; } .sct_item { margin-left: -10px; } .sct_item:first-child { margin-left: 0; } .sct_item_badge { width: 46px; height: 46px; min-width: 46px; } .sct_item_info h4 { font-size: 14px; } .sct_item_info p { font-size: 12px; max-width: 220px; } .sct_item.is_active { margin-left: 6px; margin-right: 6px; } .sct_item.is_active:first-child { margin-left: 0; } .sct_item.is_active .sct_item_info { max-width: 240px; padding-left: 12px; } .sct_item.is_active ~ .sct_item { margin-left: 6px; } }

Years in business

20 years

Built on consistent service and local expertise.

Travelers served

2,415+ in 2025

Real trips, real people, every season.

Certifications & networks

MITUR ASONAHORES ADOTUR CMS CPS INIBEP Central

Certifications & networks

MITUR

Ministry of Tourism

Planning, regulating, and promoting tourism in the DR.

ASONAHORES

ASONAHORES

Hotels, restaurants, and tourism stakeholders.

ADOTUR

ADOTUR

Tourism operators association.

CMS

Certified Meeting Specialist

Meetings and events certification.

CPS

Certified Production Specialist

Event production training.

INIBEP

INIBEP Wedding Planner

International event planning.

Central

Central de Receptivos

Network of receptive operators.

(function() { var root = document.getElementById('sct_main'); if (!root) return; var startYear = parseInt(root.getAttribute('data-startyear') || '2005', 10); var travelers = parseInt(root.getAttribute('data-travelers') || '2415', 10); var currentYear = new Date().getFullYear(); var yearsEl = document.getElementById('sct_years'); var travEl = document.getElementById('sct_travelers'); var labelEl = document.getElementById('sct_yearlabel'); if (yearsEl) yearsEl.textContent = currentYear - startYear; if (travEl) travEl.textContent = travelers.toLocaleString('en-US') + '+'; if (labelEl) labelEl.textContent = 'in ' + currentYear; var trigger = document.getElementById('sct_badges_trigger'); var triggerBadges = trigger.querySelectorAll('.sct_badge'); var panel = document.getElementById('sct_panel'); var items = panel.querySelectorAll('.sct_item'); var badges = panel.querySelectorAll('.sct_item_badge'); var isOpen = false; var activeIndex = null; var isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0; function openPanel(initialIndex) { if (isOpen) return; isOpen = true; root.classList.add('is_open'); if (typeof initialIndex === 'number') { setTimeout(function() { setActive(initialIndex); }, 100); } } function closePanel() { if (!isOpen) return; isOpen = false; root.classList.remove('is_open'); items.forEach(function(el) { el.classList.remove('is_active'); }); activeIndex = null; } function setActive(index) { if (activeIndex === index) return; items.forEach(function(el, i) { el.classList.toggle('is_active', i === index); }); activeIndex = index; } // ============================================ // DESKTOP: Mouse events - solo en círculos // ============================================ if (!isTouchDevice) { // Hover en cada badge del trigger - abre panel y activa ese badge triggerBadges.forEach(function(badge, index) { badge.addEventListener('mouseenter', function() { openPanel(index); }); }); // Hover en badges del panel - cambia el activo badges.forEach(function(badge, index) { badge.addEventListener('mouseenter', function() { setActive(index); }); }); panel.addEventListener('mouseleave', function() { closePanel(); }); root.addEventListener('mouseleave', function() { closePanel(); }); } // ============================================ // MOBILE: Touch events // ============================================ if (isTouchDevice) { // Tap en badges del trigger - abre panel y activa ese badge triggerBadges.forEach(function(badge, index) { badge.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); openPanel(index); }); }); // Tap en badges del panel - cambia el activo badges.forEach(function(badge, index) { badge.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); if (activeIndex === index) { // Tap en el mismo badge activo - cierra closePanel(); } else { setActive(index); } }); }); // Swipe horizontal en panel para navegar entre badges var touchStartX = 0; var touchEndX = 0; var minSwipeDistance = 50; panel.addEventListener('touchstart', function(e) { touchStartX = e.changedTouches[0].screenX; }, { passive: true }); panel.addEventListener('touchend', function(e) { touchEndX = e.changedTouches[0].screenX; handleSwipe(); }, { passive: true }); function handleSwipe() { var diff = touchStartX - touchEndX; if (Math.abs(diff) 0) { // Swipe left - siguiente var nextIndex = (activeIndex === null) ? 0 : Math.min(activeIndex + 1, items.length - 1); setActive(nextIndex); } else { // Swipe right - anterior var prevIndex = (activeIndex === null) ? 0 : Math.max(activeIndex - 1, 0); setActive(prevIndex); } } } // ============================================ // AMBOS: Click fuera cierra // ============================================ document.addEventListener('click', function(e) { if (!root.contains(e.target)) { closePanel(); } }); })();
:root{ --sc-primary:#00809f; --sc-ink:#0b1a1f; --sc-muted:#5b6b74; --sc-card:#ffffff; --sc-line: rgba(11,26,31,.10); } .sc-ctaform{ width: min(1180px, calc(100% - 28px)); margin: 0 auto; padding: 26px 0 10px; position: relative; } .sc-ctaform__wrap{ position: relative; border-radius: 18px; overflow: hidden; border: 1px solid var(--sc-line); background: var(--sc-card); } /* Watermark animado */ .sc-ctaform__wm{ position: absolute; inset: -40%; background-image: url("https://sunsetcaribbean.com.do/wp-content/uploads/2025/12/Sunset-Caribbean-Isotipo.webp"); background-repeat: repeat; background-size: 190px 190px; opacity: .06; transform: rotate(-10deg); animation: scWmMove 26s linear infinite; pointer-events: none; } @keyframes scWmMove{ 0%{ background-position: 0 0; } 100%{ background-position: 520px 420px; } } .sc-ctaform__inner{ position: relative; z-index: 1; padding: 16px; display: grid; grid-template-columns: 1.05fr .95fr; gap: 12px; } .sc-ctaform__title{ margin: 0 0 6px; font-size: clamp(22px, 5.6vw, 34px); line-height: 1.12; font-weight: 800; color: var(--sc-ink); letter-spacing: -0.2px; } .sc-ctaform__title span{ position: relative; display: inline-block; padding-bottom: 6px; } .sc-ctaform__title span::after{ content:""; position:absolute; left:0; bottom:0; width:72%; height:6px; background: var(--sc-primary); border-radius:999px; } .sc-ctaform__sub{ margin: 0 0 12px; max-width: 62ch; color: var(--sc-muted); font-size: clamp(14px, 3.8vw, 16px); line-height: 1.45; } .sc-ctaform__bullets{ margin: 0 0 12px; padding-left: 18px; color: var(--sc-muted); display: grid; gap: 8px; font-size: 14px; line-height: 1.45; } .sc-ctaform__actions{ display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 10px; } .sc-btn{ appearance: none; border: 1px solid transparent; border-radius: 999px; padding: 11px 16px; font-weight: 800; font-size: 14px; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; justify-content: center; gap: 8px; transition: transform .12s ease, filter .12s ease, background .12s ease, border-color .12s ease; user-select: none; } .sc-btn:active{ transform: translateY(1px); } .sc-btn--primary{ background: var(--sc-primary); color: #ffffff; } .sc-btn--primary:hover{ filter: brightness(1.03); } .sc-btn--ghost{ background: rgba(0,128,159,.08); color: var(--sc-ink); border-color: rgba(0,128,159,.22); } .sc-btn--ghost:hover{ background: rgba(0,128,159,.12); border-color: rgba(0,128,159,.30); } .sc-ctaform__micro{ display: inline-flex; align-items: center; gap: 10px; color: var(--sc-muted); font-size: 13px; line-height: 1.35; } .sc-dot{ width: 8px; height: 8px; border-radius: 50%; background: var(--sc-primary); box-shadow: 0 0 0 4px rgba(0,128,159,.14); flex: 0 0 auto; } /* Cards internas */ .sc-card{ background: var(--sc-card); border: 1px solid var(--sc-line); border-radius: 16px; padding: 14px; } .sc-form__head h3{ margin: 0 0 4px; font-size: 16px; line-height: 1.25; font-weight: 800; color: var(--sc-ink); } .sc-form__head p{ margin: 0 0 10px; color: var(--sc-muted); font-size: 13.5px; line-height: 1.45; } .sc-form{ display: grid; gap: 10px; } .sc-grid{ display: grid; gap: 10px; grid-template-columns: 1fr 1fr; } .sc-field{ display: grid; gap: 6px; } .sc-label{ font-size: 12.5px; color: var(--sc-muted); } .sc-input{ width: 100%; border-radius: 14px; border: 1px solid var(--sc-line); background: #ffffff; color: var(--sc-ink); padding: 12px 12px; outline: none; transition: box-shadow .15s ease, border-color .15s ease; } .sc-input:focus{ border-color: rgba(0,128,159,.45); box-shadow: 0 0 0 4px rgba(0,128,159,.14); } .sc-textarea{ resize: vertical; min-height: 96px; } .sc-check{ display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border-radius: 14px; border: 1px solid var(--sc-line); background: rgba(0,128,159,.05); } .sc-check input{ margin-top: 2px; accent-color: var(--sc-primary); } .sc-check span{ color: var(--sc-muted); font-size: 13.5px; line-height: 1.45; } .sc-btn--full{ width: 100%; padding: 12px 16px; } .sc-msg{ margin: 2px 0 0; font-size: 13px; color: var(--sc-muted); min-height: 18px; } /* Responsive */ @media (min-width: 769px){ .sc-ctaform{ width: min(1180px, calc(100% - 40px)); padding: 28px 0 10px; } .sc-ctaform__inner{ padding: 16px; gap: 14px; } .sc-card{ padding: 16px; } } @media (max-width: 980px){ .sc-ctaform__inner{ grid-template-columns: 1fr; } } @media (max-width: 640px){ .sc-grid{ grid-template-columns: 1fr; } } @media (prefers-reduced-motion: reduce){ .sc-ctaform__wm{ animation: none; } .sc-btn{ transition: none; } }

Plan your next adventure

Browse all tours, or tell us what you need and we will recommend the best options for your dates and group size.

  • Clear communication and reliable support
  • Carefully selected experiences
  • Options for couples, families, and groups
View all tours
Avg reply time: under 30 minutes (business hours)

Quick request

Tell us what you need and our team will follow up with the best options.

(function(){ const jumpBtn = document.querySelector('[data-cta="jump-to-form"]'); const formCard = document.getElementById('scQuickRequest'); const form = document.getElementById('scPlaceholderForm'); const msg = document.getElementById('scFormMsg'); const startedAt = String(Math.floor(Date.now() / 1000)); if (jumpBtn && formCard){ jumpBtn.addEventListener('click', function(){ formCard.scrollIntoView({ behavior: 'smooth', block: 'start' }); const firstInput = formCard.querySelector('input, select, textarea'); if (firstInput) setTimeout(() => firstInput.focus(), 450); }); } if (form){ form.addEventListener('submit', function(e){ e.preventDefault(); msg.textContent = ''; const required = form.querySelectorAll('[required]'); let ok = true; required.forEach(el => { const valid = (el.type === 'checkbox') ? el.checked : (el.value || '').trim() !== ''; if (!valid) ok = false; el.style.borderColor = valid ? '' : 'rgba(0,128,159,.45)'; }); if (!ok){ msg.textContent = 'Please complete the required fields.'; return; } if (!window.sunsetHomeQuickRequest || !window.sunsetHomeQuickRequest.ajaxUrl){ msg.textContent = 'There was an error trying to send your message. Please try again later.'; return; } const button = form.querySelector('[type="submit"]'); const originalText = button ? button.textContent : ''; if (button){ button.disabled = true; button.textContent = 'Sending...'; } msg.textContent = 'Sending your request...'; const data = new FormData(form); data.append('action', 'sunset_home_quick_request'); data.append('_nonce', window.sunsetHomeQuickRequest.nonce || ''); data.append('startedAt', startedAt); if (!data.has('website')) { data.append('website', ''); } fetch(window.sunsetHomeQuickRequest.ajaxUrl, { method: 'POST', credentials: 'same-origin', body: data }) .then(response => response.json().catch(() => null)) .then(result => { if (result && result.success){ msg.textContent = 'Thanks. We received your request and will contact you shortly.'; form.reset(); return; } msg.textContent = 'There was an error trying to send your message. Please try again later.'; }) .catch(() => { msg.textContent = 'There was an error trying to send your message. Please try again later.'; }) .finally(() => { if (button){ button.disabled = false; button.textContent = originalText; } }); }); } })();