Afternoon Teas

Table set for lunch in the garden.
Afternoon Teas
View As:
View mode selection
Ayr
Ayr
Four pictures of produce from the cafe Vegan Earth. The first picture shows an afternoon tea with a selection off sandwiches and sweet treats, the second image shows a chocolate cake, the third shows three cupcakes with icing and a raspberry, the fourth image shows vegan kebabs.

Vegan Earth

Welcome to Vegan Earth, Ayrshire’s pioneering plant-based café where everything on the menu is completely vegan – no need to...
Vegan Earth
Ayr
Ayr
Image of Belleisle Clubhouse with trees surrounding.

Belleisle Golf Course Café/Bar

Belleisle Golf Course Café/BarIf you’re for a breakfast roll before your round of golf or a meal and a drink...
Belleisle Golf Course Café/Bar
Turnberry
Turnberry
Afternoon tea

Trump Turnberry

Home to a selection of lively restaurants in Ayrshire, Trump Turnberry offers you incredible menus complemented by impeccable views of...
Trump Turnberry
Ballantrae
Ballantrae
a fish dish served with edible flowers

Glenapp Castle

The dining at Glenapp Castle is an exceptional experience, whether it be fine dining in our award-winning restaurant or in...
Glenapp Castle
Ayr
Ayr
battered fish and chips

Savoy Park

At Savoy Park, you’ll immediately feel welcome and at home. The hotel has been under the stewardship of the Henderson...
Savoy Park
Troon
Troon
A dram of whisky with some dinner and wine

The 1897 Restaurant at Marine Troon

The 1897 Restaurant at Marine Troon is open to both hotel guests and non-residents daily, guests can enjoy meals throughout...
The 1897 Restaurant at Marine Troon
Troon
Troon
An image of a seated outdoor area. There is food on the table.

Loans Inn

The Loans Inn is a popular country pub, restaurant and hotel with an excellent menu choice to suit all tastes...
Loans Inn

Join our newsletter

Get the latest Destination South Ayrshire news and events delivered straight to your inbox…

Sign up for our newsletter

Get the latest Destination South Ayrshire news and events delivered straight to your inbox.

Copyright © 2025 Destination South Ayrshire. Provided by South Ayrshire Council.

Sign up for our newsletter

Get the latest Destination South Ayrshire news and events delivered straight to your inbox…

document.addEventListener('DOMContentLoaded', () => { // Robust selectors for 2025 Elementor (covers Pro, Hello, Astra) const toggle = document.querySelector('.elementor-menu-toggle, .elementor-nav-menu--toggle button, [aria-expanded][role="button"]'); const menu = document.querySelector('.elementor-nav-menu--dropdown, .elementor-nav-menu__container, nav[role="navigation"]'); if (!toggle || !menu) { console.error('ZoomFix: Elements not found. Inspect hamburger/menu HTML.'); return; } console.log('ZoomFix: Found toggle and menu. Testing at 400% zoom...'); let focusables = []; let firstItem, lastItem; let isOpen = false; let tabCountAtEnd = 0; // Detects repeated Tabs to auto-close const MAX_TABS_BEFORE_CLOSE = 2; // Closes after 2 Tabs on last item const updateFocusables = () => { focusables = Array.from(menu.querySelectorAll('a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])')); firstItem = focusables[0]; lastItem = focusables[focusables.length - 1]; console.log('ZoomFix: Updated focusables:', focusables.length); }; // Monitor for menu open/close (handles Elementor's mutations at zoom) const observer = new MutationObserver((mutations) => { const expanded = toggle.getAttribute('aria-expanded') === 'true' || toggle.classList.contains('elementor-active'); if (expanded !== isOpen) { isOpen = expanded; console.log('ZoomFix: Menu state:', isOpen ? 'OPEN' : 'CLOSED'); if (isOpen) { updateFocusables(); setTimeout(() => firstItem?.focus(), 100); // Delay for zoom reflow startFocusPolling(); // Start zoom-safe polling } else { stopFocusPolling(); toggle.focus(); } } }); observer.observe(toggle, { attributes: true, subtree: true }); // Zoom-proof focus trap: Global Tab listener const handleTab = (e) => { if (!isOpen || !focusables.length) return; updateFocusables(); // Re-scan for zoom/DOM changes if (document.activeElement === lastItem && e.key === 'Tab' && !e.shiftKey) { e.preventDefault(); tabCountAtEnd++; console.log('ZoomFix: Tab at end (#', tabCountAtEnd, ')'); if (tabCountAtEnd >= MAX_TABS_BEFORE_CLOSE) { console.log('ZoomFix: Auto-closing after repeated Tabs'); closeMenu(); tabCountAtEnd = 0; } else { firstItem.focus(); // Trap: Loop to start } } else if (document.activeElement === firstItem && e.key === 'Tab' && e.shiftKey) { e.preventDefault(); lastItem.focus(); // Trap: Loop to end } }; // Polling for zoom event loss (runs only when open) let pollInterval; const startFocusPolling = () => { pollInterval = setInterval(() => { if (isOpen && document.activeElement && !menu.contains(document.activeElement)) { console.log('ZoomFix: Focus escaped during zoom—trapping back'); firstItem?.focus(); } }, 50); // 50ms check survives zoom reflow }; const stopFocusPolling = () => clearInterval(pollInterval); const closeMenu = () => { console.log('ZoomFix: Forcing close'); toggle.click(); // Elementor's native close tabCountAtEnd = 0; }; // Attach listeners document.addEventListener('keydown', handleTab); document.addEventListener('keyup', (e) => { if (e.key === 'Escape' && isOpen) closeMenu(); }); // Fallback: Click outside document.addEventListener('click', (e) => { if (isOpen && !menu.contains(e.target) && !toggle.contains(e.target)) closeMenu(); }); // Initial scan updateFocusables(); });