document.addEventListener("DOMContentLoaded", () => { // Check WebP support const canvas = document.createElement('canvas'); const supportsWebP = !!(canvas.getContext && canvas.getContext('2d')) && canvas.toDataURL('image/webp').indexOf('data:image/webp') === 0; const frameFormat = supportsWebP ? 'webp' : 'jpg'; const frameDir = frameFormat === 'webp' ? '/frames-webp' : '/frames'; // Frame Loading with Lazy Loading const frames = []; const totalFrames = 85; const priorityFrames = 10; const preloadAhead = 5; let loadedFrames = 0; function loadFramesProgressively() { for (let i = 0; i < Math.min(priorityFrames, totalFrames); i++) { const img = new Image(); const frameNumber = String(i + 1).padStart(4, '0'); img.src = `${frameDir}/frame_${frameNumber}.${frameFormat}`; img.onload = () => { loadedFrames++; if (i === lastFrameIndex) forceDrawFrame(i); }; img.onerror = () => { if (frameFormat === 'webp') { const jpgImg = new Image(); jpgImg.src = `/frames/frame_${frameNumber}.jpg`; jpgImg.onload = () => { frames[i] = jpgImg; loadedFrames++; }; frames[i] = jpgImg; } }; frames[i] = img; } const loadNext = (currentIndex) => { const startIndex = Math.max(0, currentIndex - 2); const endIndex = Math.min(startIndex + preloadAhead + 4, totalFrames); for (let i = startIndex; i < endIndex; i++) { if (!frames[i]) { // mark as loading immediately frames[i] = { complete: false, src: '' }; const img = new Image(); const frameNumber = String(i + 1).padStart(4, '0'); img.src = `${frameDir}/frame_${frameNumber}.${frameFormat}`; img.onload = () => { loadedFrames++; frames[i] = img; if (i === lastFrameIndex) forceDrawFrame(i); }; img.onerror = () => { if (frameFormat === 'webp') { const jpgImg = new Image(); jpgImg.src = `/frames/frame_${frameNumber}.jpg`; jpgImg.onload = () => { frames[i] = jpgImg; if (i === lastFrameIndex) forceDrawFrame(i); }; } }; } } }; return loadNext; } const loadFramesAround = loadFramesProgressively(); const scrollAnimationBlock = document.getElementById('scroll-animation'); // Video Canvas const videoCanvas = document.getElementById('video-canvas'); if (!videoCanvas) return; const vCtx = videoCanvas.getContext('2d'); let lastFrameIndex = -1; function resizeVideoCanvas() { const dpr = window.devicePixelRatio || 1; const maxWidth = Math.min(window.innerWidth, 1920); const maxHeight = window.innerHeight * 0.85; const scale = Math.min(maxWidth / 1920, maxHeight / 1080); videoCanvas.width = 1920 * dpr * scale; videoCanvas.height = 1080 * dpr * scale; videoCanvas.style.width = (1920 * scale) + 'px'; videoCanvas.style.height = (1080 * scale) + 'px'; vCtx.scale(dpr, dpr); lastFrameIndex = -1; } function forceDrawFrame(frameIndex) { const img = frames[frameIndex]; if (img && img.complete) { vCtx.clearRect(0, 0, videoCanvas.width, videoCanvas.height); vCtx.drawImage(img, 0, 0, videoCanvas.width / window.devicePixelRatio, videoCanvas.height / window.devicePixelRatio); } } function drawFrame(frameIndex) { if (frameIndex === lastFrameIndex) return; lastFrameIndex = frameIndex; forceDrawFrame(frameIndex); } resizeVideoCanvas(); window.addEventListener('resize', resizeVideoCanvas); // Scroll Animation Logic const annotationCards = document.querySelectorAll('.annotation-card'); function updateAnnotationCards(scrollFraction) { annotationCards.forEach(card => { const show = parseFloat(card.dataset.show); const hide = parseFloat(card.dataset.hide); if (scrollFraction >= show && scrollFraction < hide) { card.classList.add('visible'); } else { card.classList.remove('visible'); } }); } function updateScroll() { if (!scrollAnimationBlock) return; const rect = scrollAnimationBlock.getBoundingClientRect(); const containerTop = rect.top; const containerHeight = scrollAnimationBlock.offsetHeight; const windowHeight = window.innerHeight; let scrollFraction = 0; if (containerHeight > windowHeight) { const scrollableHeight = containerHeight - windowHeight; const scrolled = Math.max(0, -containerTop); scrollFraction = Math.max(0, Math.min(1, scrolled / scrollableHeight)); } const frameIndex = Math.min(totalFrames - 1, Math.floor(scrollFraction * totalFrames)); drawFrame(frameIndex); updateAnnotationCards(scrollFraction); // Fade out canvas and hide annotations when animation ends const canvasWrapper = document.querySelector('.canvas-sticky-wrapper'); if (canvasWrapper) { if (scrollFraction >= 0.92) { // Hide completely when animation ends canvasWrapper.style.display = 'none'; } else { canvasWrapper.style.display = 'flex'; } } // Trigger lazy loads around current index const currentIndex = Math.floor(scrollFraction * totalFrames); loadFramesAround(currentIndex); } let isScrolling = false; window.addEventListener('scroll', () => { if (!isScrolling) { isScrolling = true; requestAnimationFrame(() => { updateScroll(); isScrolling = false; }); } }, { passive: true }); // Initial draw setTimeout(() => { updateScroll(); forceDrawFrame(0); }, 100); });
Quick Quote & Book
Historic Possidi lighthouse standing at the tip of Kassandra peninsula where Aegean and Toroneos Gulf meet

Possidi: Where Two Seas Meet at Kassandra's Western Tip

Possidi occupies a spectacular position at Kassandra's southwestern tip, where the Aegean Sea meets the Toroneos Gulf. This resort offers something rare — beaches on both coasts within walking distance, a historic lighthouse, and some of the most dramatic sunset views in all of Halkidiki. The 80-kilometer journey from Thessaloniki Airport takes approximately 50 minutes.

Transfer Prices to Possidi

ServicePassengersPriceTravel Time
Standard Sedan1-3 passengers€7050 minutes
Executive Van4-8 passengers€9050 minutes
Minibus9-14 passengers€13050 minutes

Why Choose Our Possidi Transfer Service

Flight monitoring eliminates arrival day stress. When your flight experiences delays — which occurs frequently during busy summer travel — we track automatically and adjust your pickup accordingly. No phone calls required, no anxiety about missed connections, absolutely no additional charges for delayed arrivals. Meet your driver in the arrivals hall holding your personalized name sign, ready to assist with luggage.

Possidi's unique geography requires local knowledge. The resort sits on a narrow peninsula with different access points for various hotels and accommodations. Based on thousands of successful transfers, we know exactly which route serves your specific property best. From luxury hotels like Possidi Holidays to private villas along the coastline, we navigate the terrain expertly for convenient drop-off.

About Possidi Resort

Possidi (often called Possidi Cape) offers one of Halkidiki's most distinctive settings. The resort extends along a sandy peninsula that creates a natural harbor on one side while opening to the Aegean Sea on the other. This geography means guests can easily swim on either coast depending on wind conditions — a unique advantage when the Aegean gets choppy.

The focal point is undoubtedly the historic lighthouse standing sentinel at the peninsula's tip where two seas meet. Sunset views from the lighthouse area rank among the most spectacular in Greece, with the sun dipping into the Aegean behind the silhouette of Mount Olympus in the distance. The beaches feature fine golden sand and shallow waters ideal for children, while beach bars and tavernas provide refreshment throughout the day.

Our Booking and Transfer Process

Step 1 — Online Reservation: Complete our booking form with flight details, Possidi destination address, passenger count, and luggage requirements. Receive instant confirmation via email with all transfer details and your driver's contact information.

Step 2 — Meet & Greet: Your professional driver monitors your flight progress and awaits your arrival in Thessaloniki Airport arrivals hall. We track delays automatically, adjusting pickup time without extra fees — this service comes standard.

Step 3 — Scenic Journey: Relax in our modern Mercedes vehicle as we navigate the 80-kilometer route. Watch the landscape transition from urban to rural to coastal as we approach Kassandra's dramatic western tip.

Additional Services for Possidi Transfers

Our Verdict

Our fixed-rate Possidi airport transfer removes uncertainty from your arrival while delivering professional service at competitive prices. At €70 for up to three passengers, our pricing equals local taxi alternatives while including flight monitoring, meet-and-greet service, and guaranteed Mercedes vehicles. The 50-minute journey showcases Halkidiki's diverse landscapes from airport to peninsula tip. Book your Possidi transfer online or contact us at +306942794956 to secure your ride today.

Frequently Asked Questions

What's the travel time from Thessaloniki Airport to Possidi?

The standard journey time from Thessaloniki Airport to Possidi is 50 minutes covering 80 kilometers. During peak summer season (July-August), particularly on Saturdays when many travelers arrive, allow an additional 10-15 minutes for traffic along the Kassandra route.

Can I really swim on both sides of the Possidi peninsula?

Yes, this is Possidi's unique advantage. The resort extends along a narrow peninsula with beaches on both the Toroneos Gulf (typically calmer waters) and the Aegean Sea (often more exciting for swimming). When one side is windy or choppy, the other usually offers calm conditions — perfect beach options regardless of weather.

Is the Possidi lighthouse accessible to visitors?

The historic Possidi lighthouse stands at the peninsula's tip and is accessible to visitors. While the lighthouse itself is an operational structure and not open for interior tours, the surrounding area offers spectacular views, especially at sunset. The walk from most Possidi hotels takes 10-15 minutes and is highly recommended.

Can your transfer accommodate large groups traveling to Possidi?

Absolutely. Our executive vans seat up to 8 passengers comfortably with substantial luggage space. For larger groups up to 14, our Mercedes minibuses keep everyone together. We regularly transport large families and groups to Possidi's many hotels and private villas.

What payment methods do you accept for Possidi transfers?

We accept secure online credit card payments requiring a 20% deposit with balance due before pickup. Cash settlement in Euros directly with your driver is also available. Corporate clients may arrange invoicing. All quoted prices include taxes, tolls, and gratuities.

Telegram Telegram
WhatsApp WhatsApp
Viber Viber
SMS SMS
Phone Phone