/* =============================================
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
Certifications & networks

Ministry of Tourism
Planning, regulating, and promoting tourism in the DR.

ASONAHORES
Hotels, restaurants, and tourism stakeholders.

ADOTUR
Tourism operators association.

Certified Meeting Specialist
Meetings and events certification.

Certified Production Specialist
Event production training.

INIBEP Wedding Planner
International event planning.

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();
}
});
})();