diff --git a/themes/src/main/resources/theme/keycloak.v2/login/field.ftl b/themes/src/main/resources/theme/keycloak.v2/login/field.ftl
index 03b892530c3..3e3c9e2e5cb 100644
--- a/themes/src/main/resources/theme/keycloak.v2/login/field.ftl
+++ b/themes/src/main/resources/theme/keycloak.v2/login/field.ftl
@@ -2,8 +2,8 @@
- <#if forgotPassword>
-
-
+
+
+ <#-- Additional helper items -->
+ <#nested>
+ <#if forgotPassword>
-
+ #if>
- #if>
+
+
@group>
#macro>
diff --git a/themes/src/main/resources/theme/keycloak.v2/login/footer.ftl b/themes/src/main/resources/theme/keycloak.v2/login/footer.ftl
new file mode 100644
index 00000000000..0a440a30df1
--- /dev/null
+++ b/themes/src/main/resources/theme/keycloak.v2/login/footer.ftl
@@ -0,0 +1,3 @@
+<#macro content>
+<#-- The footer at the bottom of the "login-box". You can override this file in your custom theme to declare a custom login footer element -->
+#macro>
diff --git a/themes/src/main/resources/theme/keycloak.v2/login/login-reset-password.ftl b/themes/src/main/resources/theme/keycloak.v2/login/login-reset-password.ftl
index f67d9351718..c23c2b7c55c 100644
--- a/themes/src/main/resources/theme/keycloak.v2/login/login-reset-password.ftl
+++ b/themes/src/main/resources/theme/keycloak.v2/login/login-reset-password.ftl
@@ -18,10 +18,12 @@
<#elseif section = "info" >
- <#if realm.duplicateEmailsAllowed>
- ${msg("emailInstructionUsername")}
- <#else>
- ${msg("emailInstruction")}
- #if>
+
+ <#if realm.duplicateEmailsAllowed>
+ ${msg("emailInstructionUsername")}
+ <#else>
+ ${msg("emailInstruction")}
+ #if>
+
#if>
@layout.registrationLayout>
\ No newline at end of file
diff --git a/themes/src/main/resources/theme/keycloak.v2/login/login.ftl b/themes/src/main/resources/theme/keycloak.v2/login/login.ftl
index c53bc3c48ee..e00b4813a0b 100755
--- a/themes/src/main/resources/theme/keycloak.v2/login/login.ftl
+++ b/themes/src/main/resources/theme/keycloak.v2/login/login.ftl
@@ -17,35 +17,37 @@
<#if !realm.loginWithEmailAllowed>${msg("username")}<#elseif !realm.registrationEmailAsUsername>${msg("usernameOrEmail")}<#else>${msg("email")}#if>
#assign>
<@field.input name="username" label=label error=kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc autofocus=true autocomplete="username" value=login.username!'' />
- <@field.password name="password" label=msg("password") error="" forgotPassword=realm.resetPasswordAllowed autofocus=usernameHidden?? autocomplete="current-password" />
+ <@field.password name="password" label=msg("password") error="" forgotPassword=realm.resetPasswordAllowed autofocus=usernameHidden?? autocomplete="current-password">
+ <#if realm.rememberMe && !usernameHidden??>
+ <@field.checkbox name="rememberMe" label=msg("rememberMe") value=login.rememberMe?? />
+ #if>
+ @field.password>
<#else>
- <@field.password name="password" label=msg("password") forgotPassword=realm.resetPasswordAllowed autofocus=usernameHidden?? autocomplete="current-password" />
+ <@field.password name="password" label=msg("password") forgotPassword=realm.resetPasswordAllowed autofocus=usernameHidden?? autocomplete="current-password">
+ <#if realm.rememberMe && !usernameHidden??>
+ <@field.checkbox name="rememberMe" label=msg("rememberMe") value=login.rememberMe?? />
+ #if>
+ @field.password>
#if>
-
- <#if realm.rememberMe && !usernameHidden??>
- <@field.checkbox name="rememberMe" label=msg("rememberMe") value=login.rememberMe?? />
- #if>
-
-
value="${auth.selectedCredential}"#if>/>
<@buttons.loginButton />
#if>
- <#elseif section = "info" >
- <#if realm.password && realm.registrationAllowed && !registrationDisabled??>
-
- #if>
<#elseif section = "socialProviders" >
<#if realm.password && social.providers?? && social.providers?has_content>
<@identityProviders.show social=social/>
#if>
+ <#elseif section = "info" >
+ <#if realm.password && realm.registrationAllowed && !registrationDisabled??>
+
+ #if>
#if>
@layout.registrationLayout>
diff --git a/themes/src/main/resources/theme/keycloak.v2/login/resources/css/styles.css b/themes/src/main/resources/theme/keycloak.v2/login/resources/css/styles.css
index 4a3e28c4a26..dbdcf7f8fa0 100644
--- a/themes/src/main/resources/theme/keycloak.v2/login/resources/css/styles.css
+++ b/themes/src/main/resources/theme/keycloak.v2/login/resources/css/styles.css
@@ -3,6 +3,7 @@
--keycloak-bg-logo-url: url("../img/keycloak-bg-darken.svg");
--keycloak-logo-height: 63px;
--keycloak-logo-width: 300px;
+ --keycloak-card-top-color: var(--pf-v5-global--palette--blue-400);
}
.pf-v5-c-login__container {
@@ -11,6 +12,20 @@
"main"
}
+.pf-v5-c-login__main-header {
+ border-top: 4px solid var(--keycloak-card-top-color);
+}
+
+/* Info section - top margin + bottom padding */
+.pf-v5-c-login__main-footer-band:first-child {
+ margin-block-start: var(--pf-v5-global--spacer--lg);
+}
+
+.pf-v5-c-login__main-footer-band:last-child {
+ padding-bottom: 0;
+}
+/* Info section */
+
.login-pf body {
background: var(--keycloak-bg-logo-url) no-repeat center center fixed;
background-size: cover;
@@ -104,11 +119,7 @@ hr {
}
#kc-social-providers svg {
- height: var(--pf-v5-global--FontSize--sm);
-}
-
-#kc-social-providers li {
- padding-bottom: var(--pf-v5-global--spacer--sm);
+ height: var(--pf-v5-global--FontSize--xl);
}
@media (prefers-color-scheme: dark) {
diff --git a/themes/src/main/resources/theme/keycloak.v2/login/social-providers.ftl b/themes/src/main/resources/theme/keycloak.v2/login/social-providers.ftl
index 13fe0013be4..52db329c9f9 100644
--- a/themes/src/main/resources/theme/keycloak.v2/login/social-providers.ftl
+++ b/themes/src/main/resources/theme/keycloak.v2/login/social-providers.ftl
@@ -1,13 +1,13 @@
<#macro show social>
-
-
+
+
${msg("identity-provider-login-label")}
-
+
-
- <#nested "socialProviders">
-
-
+
+ <#nested "socialProviders">
- <@loginFooter.content/>
+ <#if displayInfo>
+
+ #if>
+
+
+
+
+ <@loginFooter.content/>
+
+