Interactive Guide: Arriving in Vietnam
https://cdn.tailwindcss.com
Goal: Inform/Compare -> Viz/Method: Interactive HTML/CSS flowcharts -> Interaction: Click buttons to toggle visibility of the relevant flowchart. “Queue” step is a clickable hotspot that scrolls to the service section. -> Justification: Visual flowcharts are more intuitive than text for process explanation. Toggling visibility personalizes the experience. -> Library/Method: Vanilla JS.
– Report Info: Pre-arrival checklist -> Goal: Inform/Engage -> Viz/Method: Interactive HTML list with custom checkboxes. -> Interaction: Users can click to check items off. -> Justification: Interaction increases engagement and makes the checklist a practical tool. -> Library/Method: Vanilla JS.
– Report Info: Service benefits & trust signals -> Goal: Persuade/Build Confidence -> Viz/Method: Styled cards for benefits, large “dynamic stat” callouts for trust points (e.g., “15+ Years”). -> Interaction: Subtle hover effects on cards, clear “Book Now” CTA. -> Justification: Card layouts and key stat highlights are proven UI patterns for breaking down information and building credibility. -> Library/Method: HTML/CSS.
– Report Info: List of Intl. Airports -> Goal: Inform -> Viz/Method: Clean, simple list format. -> Justification: A simple list is the clearest way to present this non-hierarchical data. -> Library/Method: HTML/CSS.
– NO CHARTS USED: The source material is qualitative and procedural. There is no quantitative data that would be served by a chart, so none were created.
–>
body {
font-family: ‘Inter’, sans-serif;
background-color: #FDFBF8;
color: #333;
}
.nav-button {
transition: all 0.3s ease;
}
.nav-button-active {
background-color: #D6A37C;
color: white;
}
.flow-step {
transition: all 0.3s ease;
border-left-width: 4px;
}
.flow-step-connector::after {
content: ”;
position: absolute;
top: 50%;
left: -2px;
width: 1rem;
height: 2px;
background-color: #D1D5DB;
}
.flow-step-connector-long::after {
content: ”;
position: absolute;
top: 50%;
left: -2px;
width: 2rem;
height: 2px;
background-color: #D1D5DB;
}
.checklist-item input:checked + label .checklist-icon {
background-color: #D6A37C;
border-color: #D6A37C;
}
.checklist-item input:checked + label .checklist-icon svg {
display: block;
}
.checklist-item input:checked + label span {
text-decoration: line-through;
color: #9CA3AF;
}
.hidden-section {
display: none;
opacity: 0;
transition: opacity 0.5s ease-in-out;
}
.visible-section {
display: block;
opacity: 1;
}
.pain-point {
cursor: pointer;
border-color: #FECACA;
background-color: #FEF2F2;
}
.pain-point:hover {
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}
A Smooth & Simple Arrival in Vietnam
This interactive guide simplifies your airport journey. Select your visa type below to see your personalized step-by-step navigation plan.
document.addEventListener(‘DOMContentLoaded’, function() {
const showEvisaBtn = document.getElementById(‘show-evisa-btn’);
const showVoaBtn = document.getElementById(‘show-voa-btn’);
const evisaProcess = document.getElementById(‘evisa-process’);
const voaProcess = document.getElementById(‘voa-process’);
const placeholderText = document.getElementById(‘placeholder-text’);
function showSection(sectionToShow, buttonToActivate) {
// Hide all sections and remove active state from buttons
evisaProcess.classList.remove(‘visible-section’);
voaProcess.classList.remove(‘visible-section’);
evisaProcess.classList.add(‘hidden-section’);
voaProcess.classList.add(‘hidden-section’);
showEvisaBtn.classList.remove(‘nav-button-active’);
showVoaBtn.classList.remove(‘nav-button-active’);
// Hide placeholder
placeholderText.style.display = ‘none’;
// Show the target section and activate the button
sectionToShow.classList.remove(‘hidden-section’);
setTimeout(() => sectionToShow.classList.add(‘visible-section’), 10);
buttonToActivate.classList.add(‘nav-button-active’);
}
showEvisaBtn.addEventListener(‘click’, function() {
showSection(evisaProcess, showEvisaBtn);
});
showVoaBtn.addEventListener(‘click’, function() {
showSection(voaProcess, showVoaBtn);
});
// Handle scrolling for pain points
const painPoints = document.querySelectorAll(‘.pain-point’);
painPoints.forEach(point => {
point.addEventListener(‘click’, function() {
const targetId = this.getAttribute(‘data-scroll-to’);
const targetElement = document.getElementById(targetId);
if (targetElement) {
targetElement.scrollIntoView({ behavior: ‘smooth’, block: ‘start’ });
// Add a subtle highlight to the target section
targetElement.style.transition = ‘all 0.3s’;
targetElement.style.boxShadow = ‘0 0 0 4px rgba(214, 163, 124, 0.5)’;
setTimeout(() => {
targetElement.style.boxShadow = ”;
}, 2000);
}
});
});
});