exists. document.addEventListener('htmx:afterRequest', function(evt) { if (!evt.detail || !evt.detail.successful) return; var refresh = document.getElementById('maincontent-refresh'); if (!refresh) return; refresh.classList.remove('gio-fade-in'); // force reflow so removing then adding re-starts the animation each time void refresh.offsetWidth; refresh.classList.add('gio-fade-in'); }); // Top-of-viewport progress bar shown while an HTMX request is in flight. // Provides immediate visual feedback for taps even before content arrives. document.addEventListener('htmx:beforeRequest', function() { var bar = document.getElementById('gio-progress-bar'); if (bar) bar.classList.add('active'); }); document.addEventListener('htmx:afterRequest', function() { var bar = document.getElementById('gio-progress-bar'); if (bar) bar.classList.remove('active'); }); // Haptic feedback on mobile-native chrome taps: bottom-nav tabs, back // chevron, and the navbar overflow action slot. Uses the shared helpers // from qtutils/appfunctions.qtpl — they no-op on non-Capacitor runtimes, // so this is safe on the plain web too. document.addEventListener('click', function(ev) { if (typeof hapticsSelectionChanged !== 'function') return; var target = ev.target; if (!target || !target.closest) return; if (target.closest('.mobilesidebar-item') || target.closest('#logo a') || target.closest('#header-action-slot a')) { hapticsSelectionChanged(); } }, true);

Join Groups.io

Create and run email groups. Subscribe to others' groups.

Create Your Account

Passwords must be at least 6 characters long.


By clicking on "Create an account" below, you are agreeing to the Terms of Service and the Privacy Policy. Your personal information will be processed by Groups.io in accordance our Privacy Policy for the purpose of offering or providing you our services, and to keep you informed on our news in connection with our services. You may request to access, correct, or delete your personal information, and you have a right to data portability, in the conditions set out in our Privacy Policy. Our site uses cookies so that we can remember you and understand how you and other visitors use our site, to improve your browsing experience and help us improve our site. By continuing to use our website, you agree to our use of such cookies.


Or You Can