Restaurants

Restaurant table set with wine glass.
View As:
View mode selection
Troon
Troon
A waiter with well presented dishes

Scotts

Scotts has superb food, friendly, attentive service, and iconic views towards the Isle of Arran and Ailsa Craig, Scotts bar...
Scotts
Ayr
Ayr
A curry dish

Priya Authentic Indian Kitchen

Priya Authentic Indian Kitchen is an Indian cuisine restaurant that caters also for takeaway and deliveries. Priya is a celebration...
Priya Authentic Indian Kitchen
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
Curved window seating round tables

Lido Troon

Styled with luxurious materials, a high-octane open kitchen and a beautiful private dining space, Lido Troon is the perfect, all-day...
Lido Troon
Prestwick
Prestwick
Curved seating at window

Lido Prestwick

With authentic pizzas from the wood-burning stove, spicy marinated chicken from the Churrasco Grill and heavenly patisseries from the Buzzworks...
Lido Prestwick
Prestwick
Prestwick
window booths and round tables

The Vine

Here at The Vine, we are all about delicious world flavours, perfectly poured drinks and a friendly welcome. Whether you’re...
The Vine
Ayr
Ayr
Burger and Fries

Kylestrome Hotel Bar and Grill

The Kylestrome Hotel Bar and Grill has the perfect atmosphere in which to enjoy the delicious fresh local produce served...
Kylestrome Hotel Bar and Grill
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(); });