Interactive Arrival Guide for Phu Quoc Airport (PQC)
https://cdn.tailwindcss.com
https://cdn.jsdelivr.net/npm/chart.js
body {
font-family: ‘Inter’, sans-serif;
background-color: #f8fafc; /* slate-50 */
}
.section-card {
background-color: white;
border-radius: 0.75rem;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
transition: all 0.3s ease-in-out;
}
.tab-btn {
transition: all 0.3s ease;
border-bottom: 4px solid transparent;
}
.tab-btn.active {
border-color: #0d9488; /* teal-600 */
color: #0f766e; /* teal-700 */
}
.process-step {
display: flex;
align-items: center;
text-align: center;
position: relative;
}
.process-step:not(:last-child)::after {
content: ”;
position: absolute;
right: -2rem;
top: 50%;
transform: translateY(-50%);
width: 1.5rem;
height: 2px;
background-color: #cbd5e1; /* slate-300 */
}
.process-step .icon {
width: 3rem;
height: 3rem;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 0.5rem;
color: white;
}
.queue-step .icon {
background-color: #ef4444; /* red-500 */
}
.queue-step .text-sm {
font-weight: 600;
color: #dc2626; /* red-600 */
}
.accordion-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.5s ease-in-out;
}
.chart-container {
position: relative;
width: 100%;
max-width: 600px;
margin-left: auto;
margin-right: auto;
height: 300px;
max-height: 400px;
}
@media (min-width: 768px) {
.chart-container {
height: 350px;
}
}
Arrive in Paradise Faster
Your Interactive Guide to Phu Quoc Airport (PQC)
Start Here: What’s Your Visa Situation?
Select an option to see your personalized arrival guide.
E-Visa / Visa-Free
Visa on Arrival (VOA)
I Need a Visa
Your Arrival Process: E-Visa / Visa-Free
As an e-visa holder or visa-exempt traveler, your path is straightforward. The main step where delays occur is the immigration queue. Our Fast Track service lets you bypass this wait completely.
✈️
Arrive
Deplane & Follow Signs
🛂
Immigration
Main Bottleneck
Customs
Customs
Green/Red Channel
Your Arrival Process: Visa on Arrival
With a Visa on Arrival, you face two potential queues: first at the ‘Landing Visa’ counter and then at the main immigration checkpoint. The Fast Track service helps you skip both for the fastest possible entry.
✈️
Arrive
Deplane & Follow Signs
Need a Visa? Here are Your Options
Getting the right visa is essential. For most travelers, the 90-day, multiple-entry E-Visa is the simplest and most recommended choice. You apply online before you travel, ensuring a smooth process.
E-Visa (Recommended)
Apply online before you fly. Valid for 90 days with multiple entries for all nationalities.
Learn More →
Visa On Arrival (VOA)
Requires a pre-approved letter. You get the visa stamp at the airport, which can involve long waits.
Learn More →
Ready to Apply?
Let experts handle your application for a fast, simple, and 100% guaranteed process.
Apply Online Now
Estimated Arrival Time Comparison
See how much time you can save. The Fast Track service significantly reduces your time spent in airport queues.
Essential Pre-Flight & Arrival Information
✅ Pre-Flight Checklist
▼
Passport: Must be valid for at least 6 months with 2 blank pages.
Accommodation & Flight: Keep booking confirmations and your return/onward ticket details handy.
Customs: Declare cash over $5,000. Duty-free limits are ~200 cigarettes and 1.5L of spirits. Do not bring narcotics, weapons, or e-cigarettes.
✈️ About Phu Quoc Airport (PQC)
▼
Location: Duong To Commune, a 15-20 min drive from Duong Dong town.
Transport: Taxis (Mai Linh, Vinasun), ride-hailing (Grab), hotel shuttles, and pre-booked private cars are all available outside the arrivals hall.
Connections: Direct flights from hubs like Singapore, Kuala Lumpur, Bangkok, Seoul, and Hong Kong.
Why Book Your Fast Track with VietnamImmigration.org?
🗓️
15+ Years of Experience
Established in 2008, providing trusted travel services for over a decade.
🛡️
100% Money-Back Guarantee
Your satisfaction is guaranteed, with a clear and fair refund policy.
💳
PayPal Buyer Protection
Secure payments with an extra layer of protection for your peace of mind.
let waitTimeChart;
const chartData = {
evisa: {
labels: [‘Standard Arrival’, ‘Fast Track Arrival’],
data: [45, 5]
},
voa: {
labels: [‘Standard Arrival’, ‘Fast Track Arrival’],
data: [75, 10]
}
};
const chartConfig = {
type: ‘bar’,
data: {
labels: [],
datasets: [{
label: ‘Estimated Time (minutes)’,
data: [],
backgroundColor: [
‘rgba(251, 146, 60, 0.6)’, // amber-400
‘rgba(20, 184, 166, 0.6)’ // teal-500
],
borderColor: [
‘rgba(251, 146, 60, 1)’,
‘rgba(20, 184, 166, 1)’
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: ‘Minutes’
}
}
},
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
label: function(context) {
let label = context.dataset.label || ”;
if (label) {
label += ‘: ‘;
}
if (context.parsed.y !== null) {
label += context.parsed.y + ‘ min’;
}
return label;
}
}
}
}
}
};
function initializeChart() {
const ctx = document.getElementById(‘waitTimeChart’).getContext(‘2d’);
waitTimeChart = new Chart(ctx, chartConfig);
}
function updateChart(status) {
if (!chartData[status]) return;
waitTimeChart.data.labels = chartData[status].labels;
waitTimeChart.data.datasets[0].data = chartData[status].data;
waitTimeChart.update();
}
function handleVisaSelection(status) {
document.querySelectorAll(‘.dynamic-section’).forEach(section => {
section.classList.add(‘hidden’);
});
const selectedContent = document.getElementById(`${status}-content`);
if (selectedContent) {
selectedContent.classList.remove(‘hidden’);
}
const chartSection = document.getElementById(‘chart-section’);
if (status === ‘evisa’ || status === ‘voa’) {
chartSection.classList.remove(‘hidden’);
if(!waitTimeChart) {
initializeChart();
}
updateChart(status);
} else {
chartSection.classList.add(‘hidden’);
}
}
document.addEventListener(‘DOMContentLoaded’, () => {
const visaButtons = document.querySelectorAll(‘.visa-btn’);
visaButtons.forEach(button => {
button.addEventListener(‘click’, (e) => {
handleVisaSelection(e.target.dataset.status);
});
});
const accordions = document.querySelectorAll(‘.accordion-toggle’);
accordions.forEach(accordion => {
accordion.addEventListener(‘click’, () => {
accordion.querySelector(‘span:last-child’).classList.toggle(‘rotate-180’);
const content = accordion.nextElementSibling;
if (content.style.maxHeight) {
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + “px”;
}
});
});
});