diff --git a/locales/cs/LC_MESSAGES/campusmultiauth.po b/locales/cs/LC_MESSAGES/campusmultiauth.po
index 437497c3064e22aa6cc6c78375d2d73a94243ebe..80ad7a3fc81f6d385f9779d9eeecce248453876c 100644
--- a/locales/cs/LC_MESSAGES/campusmultiauth.po
+++ b/locales/cs/LC_MESSAGES/campusmultiauth.po
@@ -62,4 +62,7 @@ msgid "{campusmultiauth:undefined}"
 msgstr "neznámé"
 
 msgid "{campusmultiauth:localLogin_title}"
-msgstr "Login with username and password"
+msgstr "Přihlášení uživatelským jménem a heslem"
+
+msgid "{campusmultiauth:localLogin_capslock}"
+msgstr "Pozor, máte zapnutý Caps lock."
diff --git a/locales/en/LC_MESSAGES/campusmultiauth.po b/locales/en/LC_MESSAGES/campusmultiauth.po
index 9bf444c59b6355b35a64177b742a7564fc3d4d91..bec0f7216ce273fe7f3ef27dd1f6b111f3a3d2f9 100644
--- a/locales/en/LC_MESSAGES/campusmultiauth.po
+++ b/locales/en/LC_MESSAGES/campusmultiauth.po
@@ -62,4 +62,7 @@ msgid "{campusmultiauth:undefined}"
 msgstr "undefined"
 
 msgid "{campusmultiauth:localLogin_title}"
-msgstr "Přihlásit se uživatelským jménem a heslem"
+msgstr "Login with username and password"
+
+msgid "{campusmultiauth:localLogin_capslock}"
+msgstr "Warning! Caps lock is ON."
diff --git a/templates/includes/local-login.twig b/templates/includes/local-login.twig
index 3447ac379d3eb0446d35d75fe782308f2bedfe82..9d43e8d7cca4d7428062bc5806ff9082221fde39 100644
--- a/templates/includes/local-login.twig
+++ b/templates/includes/local-login.twig
@@ -55,7 +55,7 @@
         </label>
         <br>
         {% if muni_jvs %}
-            <span class="inp-fix inp-icon inp-icon--after">
+            <span class="inp-fix inp-icon inp-icon--after" id="capslock-warning-wrapper">
         {% else %}
             <div class="input-group">
         {% endif %}
@@ -75,6 +75,7 @@
                 {% else %}{{ '{campusmultiauth:password_placeholder}'|trans }}
                 {% endif %}">
             <button id="toggle-password" class="{% if muni_jvs %}btn-icon icon icon-eye color-{{ configuration.priority }}{% else %}btn border border-2 border-{% if configuration.priority == 'primary' %}dark{% else %}muted{% endif %} rounded-end{% endif %}" type="button">{% if not muni_jvs %}<i class="fas fa-eye"></i>{% endif %}</button>
+            {% if muni_jvs %}<span class="inp-info vhide" id="capslock-warning">{{ '{campusmultiauth:localLogin_capslock}'|trans }}</span>{% else %}<div class="invalid-feedback text-warning d-block d-none" id="capslock-warning">{{ '{campusmultiauth:localLogin_capslock}'|trans }}</div>{% endif %}
         {% if muni_jvs %}
             </span>
         {% else %}
diff --git a/www/resources/campus-idp.js b/www/resources/campus-idp.js
index 236cbbfc3c44cfacfb24efa4cdc40c0ab7b046ef..850d839c6db837ca3d98ac109d2c79027f0461d7 100644
--- a/www/resources/campus-idp.js
+++ b/www/resources/campus-idp.js
@@ -90,9 +90,23 @@ document.addEventListener("DOMContentLoaded", function () {
         });
     }
 
-    var togglePassword = document.getElementById("toggle-password");
     var password = document.getElementById("password");
-    if (togglePassword) {
+    var togglePassword = document.getElementById("toggle-password");
+    if (password && togglePassword) {
+        password.addEventListener("keyup", function(event) {
+          var message = document.getElementById('capslock-warning');
+          var wrapper = document.getElementById('capslock-warning-wrapper');
+          var isCapsLock = event.getModifierState("CapsLock");
+          if (isCapsLock) {
+            showElement(message);
+          } else {
+            hideElement(message);
+          }
+          if (wrapper) {
+            wrapper.classList.toggle('warning', isCapsLock);
+          }
+        });
+
         togglePassword.addEventListener("click", function () {
             var type = password.getAttribute("type") === "password" ? "text" : "password";
             password.setAttribute("type", type);