diff --git a/public/app.js b/public/app.js index 36a15fc..3a865bc 100644 --- a/public/app.js +++ b/public/app.js @@ -25,6 +25,7 @@ function openSignup() { document.getElementById('signupEmail').value = ''; document.getElementById('verifyCode').value = ''; signupEmail = ''; + setTimeout(function() { document.getElementById('signupEmail').focus(); }, 100); } function closeSignup() { @@ -42,6 +43,7 @@ function openRecover() { document.getElementById('recoverEmailInput').value = ''; document.getElementById('recoverCode').value = ''; recoverEmail = ''; + setTimeout(function() { document.getElementById('recoverEmailInput').focus(); }, 100); } function closeRecover() { @@ -125,6 +127,8 @@ async function submitVerify() { document.getElementById('apiKeyText').textContent = data.apiKey; showState('signupResult'); + var resultH2 = document.querySelector('#signupResult h2'); + if (resultH2) { resultH2.setAttribute('tabindex', '-1'); resultH2.focus(); } } catch (err) { errEl.textContent = 'Network error. Please try again.'; errEl.style.display = 'block'; @@ -210,6 +214,8 @@ async function submitRecoverVerify() { if (data.apiKey) { document.getElementById('recoveredKeyText').textContent = data.apiKey; showRecoverState('recoverResult'); + var rH2 = document.querySelector('#recoverResult h2'); + if (rH2) { rH2.setAttribute('tabindex', '-1'); rH2.focus(); } } else { errEl.textContent = data.message || 'No key found for this email.'; errEl.style.display = 'block'; @@ -457,6 +463,8 @@ async function submitEmailChangeVerify() { document.getElementById('emailChangeNewDisplay').textContent = data.newEmail || emailChangeNewEmail; showEmailChangeState('emailChangeResult'); + var ecH2 = document.querySelector('#emailChangeResult h2'); + if (ecH2) { ecH2.setAttribute('tabindex', '-1'); ecH2.focus(); } } catch (err) { errEl.textContent = 'Network error. Please try again.'; errEl.style.display = 'block'; diff --git a/public/partials/_modals.html b/public/partials/_modals.html index 92fd84b..c10ac4e 100644 --- a/public/partials/_modals.html +++ b/public/partials/_modals.html @@ -1,5 +1,5 @@ -
100 free PDFs/month • Read the docs →
diff --git a/public/partials/_styles_index_extra.html b/public/partials/_styles_index_extra.html index 25e03d5..3001bc9 100644 --- a/public/partials/_styles_index_extra.html +++ b/public/partials/_styles_index_extra.html @@ -219,5 +219,5 @@ html, body { } /* Focus-visible for accessibility */ -.btn:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } +.btn:focus-visible, a:focus-visible, input:focus-visible, button:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } diff --git a/public/src/index.html b/public/src/index.html index d74bea7..291341e 100644 --- a/public/src/index.html +++ b/public/src/index.html @@ -14,10 +14,13 @@ - + + {{> styles_base}} {{> styles_index_extra}} @@ -36,7 +39,7 @@Convert HTML, Markdown, or URLs to pixel-perfect PDFs. Built-in templates for invoices & receipts. No headless browser headaches.
Already have an account? Lost your API key? Recover it →
@@ -147,7 +150,7 @@Your key will be shown here after verification — never sent via email
@@ -198,7 +201,7 @@ - +Code expires in 15 minutes
@@ -210,7 +213,7 @@