The Starlight Exhibition

The Starlight Exhibition

Discover the enchanting beauty of the cosmos at The Starlight Exhibition, showcasing amazing photography of the night sky above Ayrshire and Scotland!

Entry is free.

Opening Hours
Tuesday, Friday, Sunday:
12.30pm – 4pm
Saturday: 10.00am – 4.30pm

Photo credit: Sylvan Bukley

Additional Information

Accessible rooms
Cyclist welcome
Disabled access
Exclusive use
Free Wi-Fi
Walkers welcome
Tuesday 28 October - Sunday 9 November 2025
See description for opening hours
Suitable for everyone
Free
The Grain Exchange, 77 - 81 High Street, Ayr KA7 1LU

Map

You might also like...

An image of crochet needles and yarn/wool in the background.
Monday 6 October - Monday 24 November 2025
5pm - 6.30pm
Free

Crochet with Isabelle at Prestwick Library

Crochet with Isabelle at Prestwick Library
Promotional poster for “Burns Squared,” an exhibition presented by the Friends of Robert Burns Birthplace Museum. The central text reads: “The Friends of Robert Burns Birthplace Museum present Burns Squared, 1st–30th November, Robert Burns Birthplace Museum.” The background features a vibrant swirl of red, orange, yellow, blue, and purple paint textures. On the left, there is an image of a red rose with the caption “an exhibition inspired by the work of Robert Burns.” On the right, there is a white bust of Robert Burns with text above it reading “Over 50 artists exhibiting their work, and the opportunity to purchase original art.
Saturday 1 November - Sunday 30 November 2025
12pm - 4pm
Free

Burns Squared

Burns Squared
The image is a promotional poster for "The Gaiety" featuring "Memory Lane Café." It highlights that the café offers "Dementia Friendly Drop-in Sessions." The background is a gradient of light blue and purple, with an illustration of a coffee cup and saucer in the center.
Thursday 27 November 2025
2pm
Free

Memory Lane Cafe – November 2025

Memory Lane Cafe – November 2025
Promotional banner for the Robert Burns Birthplace Museum Christmas Shopping Evening in partnership with Handmade in Ayr Market. The background is bright red, decorated with wrapped gifts, candy canes, fir branches, and festive ornaments. The text is centered, with “Christmas Shopping Evening” in large white script and the “Handmade in Ayr Market” logo in black and white below.
Thursday 27 November - Friday 28 November 2025
6pm - 9pm
Free

Christmas Shopping Evening in partnership with Handmade in Ayr Markets

Christmas Shopping Evening in partnership with Handmade in Ayr Markets
Illustration of Santa Claus carrying a sack of presents, a smiling snowman in a red scarf and top hat, and a decorated Christmas tree with red baubles and lights. The text reads: “Saturday 29 November – Cunninghame, Kyle and Carrick Rotary Club Victorian Christmas Fair.” The Rotary Club logo appears at the bottom.
Saturday 29 November 2025
10am - 4pm
Free

Victorian Christmas Fair

Victorian Christmas Fair
An image or artwork by Chris Hugh MacKenzie.
Saturday 6 December 2025 - Sunday 1 March 2026
See listing for times
Free

Hold Utopia: Paintings by Chris Hugh MacKenzie

Hold Utopia: Paintings by Chris Hugh MacKenzie

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