diff --git a/2026/css/registro.css b/2026/css/registro.css index 48fd7f1..174131e 100644 --- a/2026/css/registro.css +++ b/2026/css/registro.css @@ -129,6 +129,15 @@ color: #28a745; } + /* display: grid de .registro-form anula el atributo hidden. */ + .registro-form[hidden] { + display: none; + } + + .registro-cerrado h2 { + margin-top: 0; + } + @media (max-width: 768px) { .registro-layout, .field-grid { diff --git a/2026/js/registro.js b/2026/js/registro.js index 3f9aa06..6dfaafa 100644 --- a/2026/js/registro.js +++ b/2026/js/registro.js @@ -17,11 +17,25 @@ }); } + // 21 oct 2026, 7:00 p. m. en Panamá (UTC-5). Supabase rechaza los envíos desde esa hora. + const CIERRE_REGISTRO = Date.parse('2026-10-22T00:00:00Z'); + const registroCerrado = document.getElementById('registroCerrado'); + + function registroEstaCerrado() { + if (Date.now() < CIERRE_REGISTRO) return false; + form.hidden = true; + registroCerrado.hidden = false; + return true; + } + dayInputs.forEach(option => option.addEventListener('change', syncAttendanceFields)); syncAttendanceFields(); + registroEstaCerrado(); form.addEventListener('submit', async function (event) { event.preventDefault(); + // La página pudo abrirse antes del cierre. + if (registroEstaCerrado()) return; syncAttendanceFields(); if (!form.checkValidity()) { diff --git a/2026/registro.html b/2026/registro.html index 5e5d746..b721ccf 100644 --- a/2026/registro.html +++ b/2026/registro.html @@ -98,6 +98,11 @@

PyCon Panamá 2026

+
diff --git a/tests/registro-page.cjs b/tests/registro-page.cjs index d9d38db..075b74f 100644 --- a/tests/registro-page.cjs +++ b/tests/registro-page.cjs @@ -15,6 +15,12 @@ test('el registro exige al menos un día y modalidad cuando corresponde', () => assert.match(pageScript, /option\.required = diaJueves\.checked/); }); +test('el registro se cierra el 21 de octubre a las 7:00 p. m. de Panamá', () => { + assert.match(page, /id="registroCerrado"[^>]+hidden/); + assert.match(pageScript, /Date\.parse\('2026-10-22T00:00:00Z'\)/); + assert.match(pageScript, /if \(registroEstaCerrado\(\)\) return;/); +}); + test('el registro recoge accesibilidad y consentimiento de privacidad explícito', () => { assert.match(page, /id="accesibilidad"[^>]+maxlength="500"/); assert.match(page, /No incluyas diagnósticos ni información médica/);