diff --git a/app/assets/stylesheets/forms.scss b/app/assets/stylesheets/forms.scss
index 2e3a4f147f86b24236ab2abcbfd4342ffd737eb4..e5e8697a037d15f4a677d14492f8896fe2a4b0dd 100644
--- a/app/assets/stylesheets/forms.scss
+++ b/app/assets/stylesheets/forms.scss
@@ -88,7 +88,7 @@ code {
     }
   }
 
-  input[type=text], input[type=email], input[type=password], textarea {
+  input[type=text], input[type=number], input[type=email], input[type=password], textarea {
     background: transparent;
     box-sizing: border-box;
     border: 0;
diff --git a/app/views/auth/sessions/two_factor.html.haml b/app/views/auth/sessions/two_factor.html.haml
index 8bf9985545de53a05c9f25374ac89e1368720b05..1deff82b2e3d7c5e22369245605ac70233994ad6 100644
--- a/app/views/auth/sessions/two_factor.html.haml
+++ b/app/views/auth/sessions/two_factor.html.haml
@@ -2,7 +2,7 @@
   = t('auth.login')
 
 = simple_form_for(resource, as: resource_name, url: session_path(resource_name), method: :post) do |f|
-  = f.input :otp_attempt, placeholder: t('simple_form.labels.defaults.otp_attempt'), input_html: { 'aria-label' => t('simple_form.labels.defaults.otp_attempt') }, required: true, autofocus: true, autocomplete: 'off'
+  = f.input :otp_attempt, type: :number, placeholder: t('simple_form.labels.defaults.otp_attempt'), input_html: { 'aria-label' => t('simple_form.labels.defaults.otp_attempt') }, required: true, autofocus: true, autocomplete: 'off'
 
   .actions
     = f.button :button, t('auth.login'), type: :submit