Restaurants

Restaurant table set with wine glass.
View As:
View mode selection
Monkton
Monkton
Group of adults sitting around a table having drinks and a meal.

Brewers Fayre Monkton Lodge

Whether you’re fuelling up before days out in Ayr or joining us for some tasty pub grub in the evening,...
Brewers Fayre Monkton Lodge
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
Dunure
Dunure
Mussels and fries

Anchorage

The Anchorage has a charming cosy interior with real fires for that homely feel and a sunny enclosed beer garden...
Anchorage
Troon
Troon
The Marine Hotel in Troon. A large historic red-brick building with multiple chimneys and dormer windows, set against a partly cloudy sky. The structure, resembling a traditional British manor or hotel, is surrounded by a manicured golf course with sand bunkers and green fairways. A small Scottish flag is visible atop one of the towers.

Marine Troon

The Gem of the Ayrshire Coast. Revel in the hotel’s Victorian grandeur and stunning linksland location, overlooking the Isle of...
Marine Troon
Ayr
Ayr
A fresh salad with cheese and fruit

The Jockey Club Restaurant at Western House Hotel

The Jockey Club Restaurant at Western House Hotel offers superb food prepared by our team of top chefs. Ingredients are...
The Jockey Club Restaurant at Western House Hotel
Troon
Troon
fish and chips and a burger

Red Bowl Restaurant at Piersland House

Red Bowl Restaurant at Piersland House is cool, contemporary and is open from Friday to Sunday every week. You can expect great...
Red Bowl Restaurant at Piersland House
Ayr
Ayr
A Logo that says "Aldente Ayr, Ristorante Trattoria".

Aldente Ayr

Aldente Ayr is an authentic Italian trattoria packed with local produce. We serve authentic pizza, pasta, seafood and local meat...
Aldente Ayr
Ayr
Ayr
A selection of pakora

3Idiots

3idiots Indian restaurant and takeaway is authentic, Indian Tapas-style food. This allows our customers to enjoy a little bit of...
3Idiots
Troon
Troon
A traditionally decorated lounge bar seating area

South Beach Hotel

Dining at South Beach Hotel is one of the most important parts of our guests’ experience. All of our menus...
South Beach Hotel
Ayr
Ayr
juicy steak

Fairfield House Hotel

The Fairfield House Hotel restaurant offers a relaxing and comfortable dining experience combined with culinary excellence marked by its prestigious...
Fairfield House Hotel

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(); });