), so it runs on every page. * * Any link to https://admin.southlondonacro.co.uk/book/… opens in a pop-up * instead of a new page. Without this script (or with JavaScript off) the * same links just open the booking page — nothing breaks. * * Book the next jam: https://admin.southlondonacro.co.uk/book/jam/lsbu-jam * Book a specific date: https://admin.southlondonacro.co.uk/book/jam/lsbu-jam?on=2026-10-17 * * The booking page talks back with three messages (admin/lib/book/embed.ts): * slac:height resize the pop-up to fit * slac:navigate card payment: send the whole window to Stripe * slac:close the "Done" button after a booking */ (function () { var ORIGIN = window.SLAC_BOOKING_ORIGIN || 'https://admin.southlondonacro.co.uk' if (window.__slacBookingPopup) return window.__slacBookingPopup = true function build() { var css = '#slac-book{border:0;padding:0;width:min(1120px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 32px);' + 'border-radius:20px;overflow:hidden;background:#fff;box-shadow:0 30px 80px rgba(20,8,12,.35)}' + '#slac-book::backdrop{background:rgba(20,8,12,.55);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}' + '#slac-book-bar{display:flex;justify-content:flex-end;padding:10px 10px 0}' + '#slac-book-close{all:unset;cursor:pointer;width:36px;height:36px;border-radius:999px;display:grid;place-items:center;' + 'font:600 22px/1 system-ui,sans-serif;color:#1d1b25;background:rgba(0,0,0,.06)}' + '#slac-book-close:hover{background:rgba(0,0,0,.12)}#slac-book-close:focus-visible{outline:2px solid #e11f26;outline-offset:2px}' + '#slac-book-frame{display:block;width:100%;border:0;height:70dvh;max-height:calc(100dvh - 90px);background:#fff}' + '@media (max-width:640px){#slac-book{width:100vw;height:100dvh;max-height:100dvh;margin:0;border-radius:0}' + '#slac-book-frame{height:calc(100dvh - 46px)!important;max-height:none}}' var style = document.createElement('style') style.textContent = css document.head.appendChild(style) var dialog = document.createElement('dialog') dialog.id = 'slac-book' dialog.setAttribute('aria-label', 'Book with South London Acro') dialog.innerHTML = '
' + '' document.body.appendChild(dialog) return dialog } var dialog = null function frame() { return document.getElementById('slac-book-frame') } function open(url) { if (!dialog) { dialog = build() document.getElementById('slac-book-close').addEventListener('click', function () { dialog.close() }) dialog.addEventListener('click', function (e) { if (e.target === dialog) dialog.close() }) dialog.addEventListener('close', function () { frame().src = 'about:blank' document.documentElement.style.overflow = '' }) } if (typeof dialog.showModal !== 'function') { window.location.href = url; return } frame().src = url document.documentElement.style.overflow = 'hidden' dialog.showModal() } document.addEventListener('click', function (e) { if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return var a = e.target && e.target.closest ? e.target.closest('a[href]') : null if (!a || a.href.indexOf(ORIGIN + '/book/') !== 0) return e.preventDefault() open(a.href) }) window.addEventListener('message', function (e) { if (e.origin !== ORIGIN || !e.data || typeof e.data !== 'object') return if (e.data.type === 'slac:height' && typeof e.data.height === 'number' && window.innerWidth > 640) { frame().style.height = Math.max(360, Math.min(e.data.height, window.innerHeight - 90)) + 'px' } else if (e.data.type === 'slac:navigate' && /^https:\/\/checkout\.stripe\.com\//.test(e.data.url)) { window.location.href = e.data.url } else if (e.data.type === 'slac:close' && dialog) { dialog.close() } }) })()

Acro Jam FAQ

Curious about joining an acro jam but don't know where to start or how?
This FAQ will cover all the essentials and you can reach out directly if you have a question we haven't covered.

Frequently Asked Questions

You've got questions and we've got answers for them!