diff --git a/infra/docker/keycloak/themes/tjwater/login/info.ftl b/infra/docker/keycloak/themes/tjwater/login/info.ftl
new file mode 100644
index 0000000..c9643f3
--- /dev/null
+++ b/infra/docker/keycloak/themes/tjwater/login/info.ftl
@@ -0,0 +1,44 @@
+<#import "template.ftl" as layout>
+<#assign isLogout = message.summary == msg("successLogout")>
+<@layout.registrationLayout displayMessage=false; section>
+ <#if section = "header">
+ <#if isLogout>
+ ${kcSanitize(msg("tjwaterLogoutTitle"))?no_esc}
+ <#elseif messageHeader??>
+ ${kcSanitize(msg("${messageHeader}"))?no_esc}
+ <#else>
+ ${message.summary}
+ #if>
+ <#elseif section = "form">
+ <#if isLogout>
+
+ <#else>
+
+ #if>
+ #if>
+@layout.registrationLayout>
diff --git a/infra/docker/keycloak/themes/tjwater/login/messages/messages_en.properties b/infra/docker/keycloak/themes/tjwater/login/messages/messages_en.properties
index b7790c0..e0dce29 100644
--- a/infra/docker/keycloak/themes/tjwater/login/messages/messages_en.properties
+++ b/infra/docker/keycloak/themes/tjwater/login/messages/messages_en.properties
@@ -1,3 +1,7 @@
loginAccountTitle=Account sign in
doLogIn=Sign in
doForgotPassword=Forgot password
+tjwaterLogoutTitle=Signed out securely
+tjwaterLogoutEyebrow=Your session has ended
+tjwaterLogoutDescription=Your platform and identity-provider sessions have been ended securely.
+tjwaterReturnToApplication=Return to sign in
diff --git a/infra/docker/keycloak/themes/tjwater/login/messages/messages_zh_CN.properties b/infra/docker/keycloak/themes/tjwater/login/messages/messages_zh_CN.properties
index 30bd332..3fba4a9 100644
--- a/infra/docker/keycloak/themes/tjwater/login/messages/messages_zh_CN.properties
+++ b/infra/docker/keycloak/themes/tjwater/login/messages/messages_zh_CN.properties
@@ -7,3 +7,7 @@ invalidUserMessage=用户名或密码错误
invalidUsernameOrPasswordMessage=用户名或密码错误
expiredCodeMessage=登录已超时,请重新登录
loginTimeout=登录已超时,请重新开始登录
+tjwaterLogoutTitle=已安全退出
+tjwaterLogoutEyebrow=会话已结束
+tjwaterLogoutDescription=您的平台与身份认证会话均已安全结束。
+tjwaterReturnToApplication=返回登录页
diff --git a/infra/docker/keycloak/themes/tjwater/login/resources/css/tjwater-login.css b/infra/docker/keycloak/themes/tjwater/login/resources/css/tjwater-login.css
index 9d84925..19a185d 100644
--- a/infra/docker/keycloak/themes/tjwater/login/resources/css/tjwater-login.css
+++ b/infra/docker/keycloak/themes/tjwater/login/resources/css/tjwater-login.css
@@ -367,6 +367,60 @@ a:focus-visible {
background: transparent;
}
+.tjwater-logout-message {
+ display: grid;
+ gap: 20px;
+ padding-top: 4px;
+}
+
+.tjwater-logout-mark {
+ display: grid;
+ width: 52px;
+ height: 52px;
+ border: 1px solid oklch(0.76 0.09 184 / 52%);
+ border-radius: 50%;
+ background: oklch(0.92 0.04 184 / 58%);
+ place-items: center;
+}
+
+.tjwater-logout-mark span {
+ width: 18px;
+ height: 10px;
+ border-bottom: 3px solid var(--tjwater-teal);
+ border-left: 3px solid var(--tjwater-teal);
+ transform: translateY(-2px) rotate(-45deg);
+}
+
+.tjwater-logout-copy {
+ display: grid;
+ gap: 7px;
+}
+
+.tjwater-logout-eyebrow {
+ margin: 0;
+ color: var(--tjwater-ink);
+ font-size: 17px;
+ font-weight: 700;
+ line-height: 1.45;
+}
+
+.tjwater-logout-description {
+ margin: 0;
+ color: var(--tjwater-muted);
+ font-size: 14px;
+ line-height: 1.75;
+}
+
+.tjwater-logout-action {
+ display: inline-flex;
+ width: 100%;
+ min-height: 48px;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ text-decoration: none;
+}
+
@keyframes tjwater-enter {
from {
opacity: 0;