@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Noto+Sans+SC:wght@400;500;600;700&family=ZCOOL+QingKe+HuangYou&display=swap");

/* 智算词元 · Keycloak 登录主题
 * 对齐门户 Atelier Soft Light（9xframe atelier-light）：
 * 暖亮纸面、青绿主色、琥珀点缀、bloom 光晕。禁止格子底。
 */

:root {
  --rl-paper: #f6f1e9;
  --rl-surface: #fffdf9;
  --rl-surface-2: #f1ebe1;
  --rl-ink: #241f1a;
  --rl-ink-2: #5d564d;
  --rl-muted: #8b8377;
  --rl-line: rgba(36, 31, 26, 0.12);
  --rl-line-strong: rgba(36, 31, 26, 0.18);
  --rl-signal: #1d9c8d;
  --rl-signal-hover: #148376;
  --rl-signal-soft: rgba(29, 156, 141, 0.14);
  --rl-on-accent: #fffdf9;
  --rl-alert: #e8852b;
  --rl-alert-soft: rgba(232, 133, 43, 0.14);
  --rl-danger: #c23b2e;
  --rl-danger-soft: #fde8e6;
  --rl-live: #1a8f5c;
  --rl-live-soft: #d8f3e6;
  --rl-radius: 14px;
  --rl-radius-card: 22px;
  --rl-radius-sm: 999px;
  --rl-font-sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
  --rl-font-display: "ZCOOL QingKe HuangYou", "Noto Sans SC", sans-serif;
  --rl-font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
  --rl-shadow: 0 24px 50px -28px rgba(36, 31, 26, 0.35);
  --rl-glow: 0 0 0 1px rgba(29, 156, 141, 0.22), 0 12px 30px -12px rgba(29, 156, 141, 0.35);
  /* 面板加宽，表单控件列保持原视觉宽度并居中 */
  --rl-login-panel-max: 34rem;
  --rl-login-control-max: 20rem;

  /* PatternFly 全局圆角不要继承 999px，否则会把未覆盖的控件打成奇怪的半胶囊 */
  --pf-v5-global--BorderRadius--sm: 8px;
  --pf-v5-global--BorderRadius--lg: var(--rl-radius);

  --pf-v5-global--FontFamily--sans-serif: var(--rl-font-sans);
  --pf-v5-global--Color--100: var(--rl-ink);
  --pf-v5-global--Color--200: var(--rl-ink-2);
  --pf-v5-global--Color--300: var(--rl-muted);
  --pf-v5-global--BackgroundColor--100: var(--rl-surface);
  --pf-v5-global--BackgroundColor--200: var(--rl-paper);
  --pf-v5-global--primary-color--100: var(--rl-signal);
  --pf-v5-global--primary-color--200: var(--rl-signal-hover);
  --pf-v5-global--primary-color--300: var(--rl-signal);
  --pf-v5-global--primary-color--dark-100: var(--rl-signal-hover);
  --pf-v5-global--primary-color--light-100: var(--rl-signal);
  --pf-v5-global--link--Color: var(--rl-signal);
  --pf-v5-global--link--Color--hover: var(--rl-signal-hover);
  --pf-v5-global--link--Color--dark: var(--rl-signal);
  --pf-v5-global--link--Color--dark--hover: var(--rl-signal-hover);
  --pf-v5-global--BorderColor--100: var(--rl-line);
  --pf-v5-global--BorderColor--200: var(--rl-line);
  --pf-v5-global--BorderColor--300: var(--rl-line-strong);
  --pf-v5-global--BorderColor--dark-100: var(--rl-line-strong);
  --pf-v5-global--BorderRadius--small: 8px;
  --pf-v5-global--BorderRadius--large: var(--rl-radius);
  --pf-v5-global--active-color--100: var(--rl-signal);
  --pf-v5-global--focus-color--100: var(--rl-signal);
  --pf-v5-global--BoxShadow--sm: none;
  --pf-v5-global--BoxShadow--md: var(--rl-shadow);
  --pf-v5-global--BoxShadow--lg: var(--rl-shadow);
  --pf-v5-global--success-color--100: var(--rl-live);
  --pf-v5-global--success-color--200: var(--rl-live);
  --pf-v5-global--warning-color--100: var(--rl-alert);
  --pf-v5-global--warning-color--200: var(--rl-alert);
  --pf-v5-global--danger-color--100: var(--rl-danger);
  --pf-v5-global--danger-color--200: var(--rl-danger);
}

/* ---------- 背景：bloom，无网格 ---------- */

#keycloak-bg,
.login-pf body {
  background:
    radial-gradient(58% 48% at 14% 0%, rgba(29, 156, 141, 0.12), transparent 70%),
    radial-gradient(52% 42% at 92% 100%, rgba(232, 133, 43, 0.09), transparent 72%),
    var(--rl-paper) !important;
}

.login-pf body::before {
  position: fixed;
  inset: 0;
  z-index: 0;
  opacity: 0.03;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 180px 180px;
  pointer-events: none;
  content: "";
}

.login-pf-page {
  position: relative;
  z-index: 1;
  padding-top: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* ---------- 品牌头 ---------- */

#kc-header-wrapper,
#kc-header-wrapper.pf-v5-c-brand {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
  margin: 0 0 18px;
  padding: 0;
  color: var(--rl-ink) !important;
  font-family: var(--rl-font-display);
  font-size: 1.75rem;
  font-weight: 400;
  letter-spacing: 0.02em;
  text-align: center;
  text-transform: none;
}

#kc-header-wrapper::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 1.5rem;
  border-radius: 999px;
  background: linear-gradient(180deg, var(--rl-signal), var(--rl-alert));
}

/* ---------- 布局：品牌在上、登录卡在下 ---------- */
/* 不用跟 PF grid areas 硬刚：改成居中纵排 flex，避免宽屏 logo 跑到右侧 */

.pf-v5-c-login {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
}

.pf-v5-c-login__container {
  --pf-v5-c-login__container--MaxWidth: var(--rl-login-panel-max);
  --pf-v5-c-login__container--xl--MaxWidth: var(--rl-login-panel-max);
  --pf-v5-c-login__container--xl--GridTemplateColumns: minmax(0, var(--rl-login-panel-max));
  --pf-v5-c-login__container--PaddingLeft: 0;
  --pf-v5-c-login__container--PaddingRight: 0;
  --pf-v5-c-login__container--xl--GridColumnGap: 0;
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  max-width: var(--rl-login-panel-max) !important;
  width: min(var(--rl-login-panel-max), 100%) !important;
  margin-inline: auto !important;
  column-gap: 0 !important;
  row-gap: 0.75rem !important;
  padding-inline: 1rem !important;
  grid-template-areas: none !important;
  grid-template-columns: none !important;
}

@media (min-width: 1200px) {
  .pf-v5-c-login__container {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    max-width: var(--rl-login-panel-max) !important;
    width: min(var(--rl-login-panel-max), 100%) !important;
    grid-template-areas: none !important;
    grid-template-columns: none !important;
    padding-inline: 1rem !important;
  }
}

.pf-v5-c-login__header,
#kc-header {
  order: 0;
  display: flex !important;
  justify-content: center !important;
  align-items: center !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 0 0.15rem !important;
  padding: 0 !important;
  text-align: center !important;
  grid-area: auto !important;
  justify-self: stretch !important;
}

#kc-header-wrapper,
#kc-header-wrapper.pf-v5-c-brand {
  width: auto !important;
  margin: 0 auto !important;
}

.pf-v5-c-login__main {
  order: 1;
  grid-area: auto !important;
  width: 100% !important;
  max-width: 100% !important;
  border: 1px solid var(--rl-line);
  border-radius: var(--rl-radius-card);
  background: color-mix(in srgb, var(--rl-surface) 92%, transparent);
  box-shadow: var(--rl-shadow);
  backdrop-filter: blur(12px);
  overflow: hidden;
}

.pf-v5-c-login__footer {
  order: 2;
  grid-area: auto !important;
  width: 100% !important;
}

.pf-v5-c-login__main-header,
.pf-v5-c-login__main-body {
  padding-left: 2rem;
  padding-right: 2rem;
}

/* 表单区底部少留一点，分隔线由 footer-band 的 margin/padding 统一控制 */
.pf-v5-c-login__main-body {
  padding-bottom: 0.5rem;
}

/* 卡片拉宽后，输入区与按钮维持原列宽并居中（页脚注册区保持全宽，避免双分隔线错位） */
.pf-v5-c-login__main-body > form,
.pf-v5-c-login__main-body > .pf-v5-c-form,
.pf-v5-c-login__main-body > .pf-v5-c-alert,
.pf-v5-c-login__main-body #kc-form,
.pf-v5-c-login__main-body #kc-form-login,
.pf-v5-c-login__main-body #kc-register-form,
.pf-v5-c-login__main-body #kc-reset-password-form,
.pf-v5-c-login__main-body #kc-passwd-update-form,
.pf-v5-c-login__main-body #kc-select-try-another-way-form {
  max-width: var(--rl-login-control-max);
  width: 100%;
  margin-inline: auto;
}

.pf-v5-c-login__main-header {
  text-align: center;
}

.pf-v5-c-login__main-header .pf-v5-c-title,
#kc-page-title {
  color: var(--rl-ink);
  font-family: var(--rl-font-display);
  font-size: 1.45rem;
  font-weight: 400;
  letter-spacing: 0.01em;
  text-align: center !important;
}

/* OAuth 授权确认页：标题居中，权限列表作为整体居中，按钮并排拉满 */
#kc-page-title p {
  margin: 0;
  text-align: center !important;
}

#kc-oauth {
  margin: 0;
  padding: 0;
  text-align: center;
}

#kc-oauth h3 {
  margin: 0;
  color: var(--rl-ink);
  font-size: 1.05rem;
  font-weight: 600;
  text-align: center;
}

#kc-oauth ul {
  display: inline-block;
  margin: 1rem auto 0;
  padding-left: 1.25rem;
  text-align: left;
}

#kc-oauth-grant-type {
  text-align: center;
}

/*
 * Keycloak.v2 在「忘记密码」等页把 id="kc-form-buttons" 直接写在
 * <button type="submit"> 上（登录页则是 id="kc-login"）。
 * 容器样式只能打在真正的容器上，否则会把主按钮背景刷成透明、
 * 浅色字消失，看起来像「没有发送按钮」。
 */
.pf-v5-c-form__actions,
#kc-form-buttons:not(button):not(input):not(a) {
  display: flex !important;
  flex-direction: column;
  flex-wrap: nowrap;
  gap: 0.75rem;
  justify-content: flex-start;
  align-items: stretch;
  margin-top: 1.25rem;
  width: 100%;
  border: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
}

.pf-v5-c-form__actions > .pf-v5-c-button,
.pf-v5-c-form__actions > button,
.pf-v5-c-form__actions > a.pf-v5-c-button,
#kc-form-buttons:not(button):not(input):not(a) > .pf-v5-c-button,
#kc-form-buttons:not(button):not(input):not(a) > button,
#kc-form-buttons:not(button):not(input):not(a) > input {
  flex: 0 0 auto;
  width: 100% !important;
  min-width: 0;
}

.pf-v5-c-login__main-header-desc,
.pf-v5-c-login__main-footer {
  color: var(--rl-muted);
}

/* ---------- 表单：去掉 PF 默认矩形描边，统一胶囊输入 ---------- */

.pf-v5-c-form__label-text,
.pf-v5-c-form__label {
  color: var(--rl-ink-2);
  font-weight: 600;
}

/*
 * PatternFly form-control 是 <span>，用 :before/:after 画矩形框；
 * 内层 input:focus 还会再画一层 outline（看起来像输入框里的黄/金矩形）。
 * 外层胶囊已用 teal blur 表示焦点，这两层全部关掉。
 */
.pf-v5-c-form-control {
  --pf-v5-c-form-control--BorderRadius: 999px;
  --pf-v5-c-form-control--before--BorderTopWidth: 0;
  --pf-v5-c-form-control--before--BorderRightWidth: 0;
  --pf-v5-c-form-control--before--BorderBottomWidth: 0;
  --pf-v5-c-form-control--before--BorderLeftWidth: 0;
  --pf-v5-c-form-control--before--BorderTopColor: transparent;
  --pf-v5-c-form-control--before--BorderRightColor: transparent;
  --pf-v5-c-form-control--before--BorderBottomColor: transparent;
  --pf-v5-c-form-control--before--BorderLeftColor: transparent;
  --pf-v5-c-form-control--after--BorderBottomWidth: 0 !important;
  --pf-v5-c-form-control--after--BorderBottomColor: transparent !important;
  --pf-v5-c-form-control--hover--after--BorderBottomColor: transparent !important;
  --pf-v5-c-form-control--focus--after--BorderBottomWidth: 0 !important;
  --pf-v5-c-form-control--focus--after--BorderBottomColor: transparent !important;
  --pf-v5-c-form-control--OutlineOffset: 0;
  --pf-v5-c-form-control--BackgroundColor: var(--rl-surface-2);
  position: relative;
  display: block;
  width: 100%;
  border: 1px solid var(--rl-line) !important;
  border-radius: 999px !important;
  background-color: var(--rl-surface-2) !important;
  background-image: none !important;
  box-shadow: none !important;
  font-family: var(--rl-font-sans);
  overflow: hidden;
}

.pf-v5-c-form-control::before,
.pf-v5-c-form-control::after,
.pf-v5-c-form-control:before,
.pf-v5-c-form-control:after {
  content: none !important;
  display: none !important;
  border: 0 !important;
  box-shadow: none !important;
  background: none !important;
  inset: auto !important;
}

.pf-v5-c-form-control > :is(input, textarea, select),
.pf-v5-c-form-control > input,
.pf-v5-c-form-control > textarea,
.pf-v5-c-form-control > select {
  border: 0 !important;
  border-radius: 999px !important;
  background: transparent !important;
  box-shadow: none !important;
  outline: none !important;
  outline-offset: 0 !important;
  padding-inline: 1.15rem !important;
  min-height: 2.75rem;
  color: var(--rl-ink);
}

/* PF 默认：.pf-v5-c-form-control>:is(input,...):focus { outline-offset: ... } */
.pf-v5-c-form-control > :is(input, select, textarea):focus,
.pf-v5-c-form-control > :is(input, select, textarea):focus-visible,
.pf-v5-c-form-control > :is(input, select, textarea):active,
#kc-form input:focus,
#kc-form input:focus-visible,
#kc-form input:active,
#username:focus,
#password:focus {
  outline: none !important;
  outline-offset: 0 !important;
  border: 0 !important;
  box-shadow: none !important;
  -webkit-box-shadow: none !important;
}

.pf-v5-c-form-control:hover {
  border-color: var(--rl-line-strong) !important;
}

.pf-v5-c-form-control:focus-within {
  border-color: var(--rl-signal) !important;
  box-shadow: 0 0 0 3px var(--rl-signal-soft) !important;
}

/*
 * PatternFly 的 form-control 是两列网格：输入 | 右侧错误图标。
 * 上面把它改成 display:block 后，图标掉到胶囊第二行，再被 overflow + 圆角裁切，
 * 只剩框底一条红边；紧挨着的 helper 文字就像嵌进了邮箱框。
 * 恢复网格，不在胶囊里画状态图标，错误文案单独排在框下面。
 */
.pf-v5-c-form-control {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
}

.pf-v5-c-form-control__utilities {
  display: none;
}

.pf-v5-c-form-control.pf-m-error {
  border-color: var(--rl-danger) !important;
}

.pf-v5-c-form-control.pf-m-error:focus-within {
  border-color: var(--rl-danger) !important;
  box-shadow: 0 0 0 3px var(--rl-danger-soft) !important;
}

[id^="input-error-container-"],
.pf-v5-c-form__group > .pf-v5-c-form__helper-text {
  display: block;
  position: static;
  margin-top: 0.45rem;
  padding-left: 1.15rem;
}

.pf-v5-c-helper-text__item.pf-m-error,
.pf-v5-c-helper-text__item-text.pf-m-error {
  color: var(--rl-danger);
  font-size: 13px;
  line-height: 1.45;
}

/*
 * 重新认证时，邮箱是只读胶囊，右侧是「重新开始登录」按钮。
 * 说明文字原来写在按钮里的 tooltip 上；父主题的 tooltip 样式被本主题替换掉之后，
 * 这段文字就落进胶囊，把邮箱框撑得和密码框不一样大。
 * 文字由脚本挪到框下，这里先藏住，避免脚本执行前闪一下。
 */
#reset-login {
  width: 2.85rem;
  min-width: 2.85rem;
  max-width: 2.85rem;
  overflow: hidden;
}

#reset-login .kc-tooltip-text {
  display: none !important;
}

.str-restart-login {
  margin-top: 0.45rem;
  padding-left: 1.15rem;
}

.str-restart-login__link {
  border: 0;
  background: none;
  padding: 0;
  color: var(--rl-signal);
  font: inherit;
  font-size: 13px;
  line-height: 1.45;
  cursor: pointer;
}

.str-restart-login__link:hover,
.str-restart-login__link:focus {
  color: var(--rl-signal-hover);
}

.pf-v5-c-input-group,
.pf-v5-c-form-control {
  min-height: 2.75rem;
  box-sizing: border-box;
}

/* Chrome 自动填充黄底 */
#kc-form input:-webkit-autofill,
#kc-form input:-webkit-autofill:hover,
#kc-form input:-webkit-autofill:focus,
#kc-form input:-webkit-autofill:active,
.pf-v5-c-form-control > input:-webkit-autofill,
.pf-v5-c-form-control > input:-webkit-autofill:focus {
  -webkit-text-fill-color: var(--rl-ink) !important;
  caret-color: var(--rl-ink);
  border: 0 !important;
  outline: none !important;
  transition: background-color 99999s ease-out;
  box-shadow: 0 0 0 1000px var(--rl-surface-2) inset !important;
  -webkit-box-shadow: 0 0 0 1000px var(--rl-surface-2) inset !important;
}

/* 密码组：Keycloak.v2 结构为 input-group > item > form-control + item > button.pf-m-control */
.pf-v5-c-input-group {
  display: flex;
  align-items: stretch;
  width: 100%;
  overflow: hidden;
  border: 1px solid var(--rl-line) !important;
  border-radius: 999px !important;
  background: var(--rl-surface-2) !important;
  box-shadow: none !important;
}

.pf-v5-c-input-group:hover {
  border-color: var(--rl-line-strong) !important;
}

.pf-v5-c-input-group:focus-within {
  border-color: var(--rl-signal) !important;
  box-shadow: 0 0 0 3px var(--rl-signal-soft) !important;
}

.pf-v5-c-input-group:has(.pf-m-error),
.pf-v5-c-input-group:has(.pf-m-error):focus-within {
  border-color: var(--rl-danger) !important;
  box-shadow: 0 0 0 3px var(--rl-danger-soft) !important;
}

.pf-v5-c-input-group__item {
  display: flex;
  align-items: stretch;
  border: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

.pf-v5-c-input-group__item.pf-m-fill {
  flex: 1 1 auto;
  min-width: 0;
}

.pf-v5-c-input-group .pf-v5-c-form-control {
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

.pf-v5-c-input-group .pf-v5-c-form-control:focus-within {
  box-shadow: none !important;
}

.pf-v5-c-input-group .pf-v5-c-form-control > input {
  border-radius: 0 !important;
  padding-right: 0.25rem !important;
}

.pf-v5-c-input-group .pf-v5-c-button.pf-m-control,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-plain,
.pf-v5-c-input-group__item .pf-v5-c-button {
  --pf-v5-c-button--after--BorderWidth: 0 !important;
  --pf-v5-c-button--before--BorderWidth: 0 !important;
  --pf-v5-c-button--m-control--after--BorderWidth: 0 !important;
  --pf-v5-c-button--m-control--after--BorderTopColor: transparent !important;
  --pf-v5-c-button--m-control--after--BorderRightColor: transparent !important;
  --pf-v5-c-button--m-control--after--BorderBottomColor: transparent !important;
  --pf-v5-c-button--m-control--after--BorderLeftColor: transparent !important;
  --pf-v5-c-button--focus--after--BorderWidth: 0 !important;
  --pf-v5-c-button--active--after--BorderWidth: 0 !important;
  --pf-v5-c-button--BorderRadius: 999px !important;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.85rem;
  min-width: 2.85rem;
  height: auto;
  margin: 0;
  padding: 0;
  border: 0 !important;
  border-radius: 999px !important;
  background: transparent !important;
  box-shadow: none !important;
  outline: none !important;
  outline-offset: 0 !important;
  color: var(--rl-ink-2);
}

/* PF control 按钮 :after 默认 border-radius:initial，焦点时画出矩形黄/金框 */
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control::before,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control::after,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:before,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:after,
.pf-v5-c-input-group__item .pf-v5-c-button::before,
.pf-v5-c-input-group__item .pf-v5-c-button::after,
.pf-v5-c-input-group__item .pf-v5-c-button:before,
.pf-v5-c-input-group__item .pf-v5-c-button:after {
  content: none !important;
  display: none !important;
  border: 0 !important;
  border-width: 0 !important;
  box-shadow: none !important;
  background: none !important;
  inset: auto !important;
  width: 0 !important;
  height: 0 !important;
  opacity: 0 !important;
}

.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:hover,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:focus,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:focus-visible,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:active,
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control.pf-m-active,
.pf-v5-c-input-group__item .pf-v5-c-button:hover,
.pf-v5-c-input-group__item .pf-v5-c-button:focus,
.pf-v5-c-input-group__item .pf-v5-c-button:focus-visible,
.pf-v5-c-input-group__item .pf-v5-c-button:active {
  background: color-mix(in srgb, var(--rl-signal) 10%, transparent) !important;
  color: var(--rl-signal);
  outline: none !important;
  outline-offset: 0 !important;
  box-shadow: none !important;
  border: 0 !important;
  --pf-v5-c-button--after--BorderWidth: 0 !important;
  --pf-v5-c-button--focus--after--BorderWidth: 0 !important;
  --pf-v5-c-button--active--after--BorderWidth: 0 !important;
}

/* 点过眼睛后焦点留在按钮上：去掉系统默认黄框 */
.pf-v5-c-input-group .pf-v5-c-button.pf-m-control:focus-visible {
  outline: none !important;
}

input[inputmode="numeric"],
input[name="code"],
input[id*="code"],
input[id*="otp"] {
  font-family: var(--rl-font-mono);
  letter-spacing: 0.15em;
}

/* ---------- 按钮 ---------- */

.pf-v5-c-button.pf-m-primary,
.pf-v5-c-button.pf-m-primary:visited,
#kc-login,
button#kc-form-buttons,
#kc-form-buttons.pf-v5-c-button.pf-m-primary {
  --pf-v5-c-button--after--BorderWidth: 0;
  --pf-v5-c-button--after--BorderColor: transparent;
  --pf-v5-c-button--before--BorderWidth: 0;
  --pf-v5-c-button--m-primary--after--BorderWidth: 0;
  --pf-v5-c-button--m-primary--before--BorderWidth: 0;
  --pf-v5-c-button--PaddingTop: 0;
  --pf-v5-c-button--PaddingBottom: 0;
  position: relative;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  overflow: hidden;
  box-sizing: border-box !important;
  background-color: var(--rl-signal) !important;
  border: 0 !important;
  border-radius: 999px !important;
  color: var(--rl-on-accent) !important;
  font-weight: 600;
  font-size: 0.95rem;
  line-height: 1 !important;
  box-shadow: 0 10px 24px -14px rgba(29, 156, 141, 0.55) !important;
  outline: none !important;
  min-height: 2.85rem !important;
  height: 2.85rem !important;
  padding: 0 1.25rem !important;
  text-align: center;
  text-decoration: none !important;
}

.pf-v5-c-button.pf-m-primary::before,
.pf-v5-c-button.pf-m-primary::after,
.pf-v5-c-button.pf-m-primary:before,
.pf-v5-c-button.pf-m-primary:after,
#kc-login::before,
#kc-login::after,
#kc-login:before,
#kc-login:after,
button#kc-form-buttons::before,
button#kc-form-buttons::after,
button#kc-form-buttons:before,
button#kc-form-buttons:after {
  content: none !important;
  display: none !important;
  border: 0 !important;
  box-shadow: none !important;
  inset: auto !important;
}

.pf-v5-c-button.pf-m-primary:hover,
.pf-v5-c-button.pf-m-primary:focus,
.pf-v5-c-button.pf-m-primary:active,
#kc-login:hover,
#kc-login:focus,
#kc-login:active,
button#kc-form-buttons:hover,
button#kc-form-buttons:focus,
button#kc-form-buttons:active {
  background-color: var(--rl-signal-hover) !important;
  outline: none !important;
}

.pf-v5-c-button.pf-m-primary:focus-visible,
#kc-login:focus-visible,
button#kc-form-buttons:focus-visible {
  outline: none !important;
  box-shadow: 0 0 0 3px var(--rl-signal-soft), 0 10px 24px -14px rgba(29, 156, 141, 0.55) !important;
}

.pf-v5-c-button.pf-m-secondary,
a.pf-v5-c-button.pf-m-secondary {
  --pf-v5-c-button--after--BorderWidth: 0;
  --pf-v5-c-button--PaddingTop: 0;
  --pf-v5-c-button--PaddingBottom: 0;
  --pf-v5-c-button--PaddingLeft: 1.25rem;
  --pf-v5-c-button--PaddingRight: 1.25rem;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  box-sizing: border-box !important;
  width: 100%;
  min-height: 2.85rem !important;
  height: 2.85rem !important;
  padding: 0 1.25rem !important;
  border: 1px solid var(--rl-line-strong) !important;
  border-radius: 999px !important;
  background: var(--rl-surface) !important;
  color: var(--rl-ink) !important;
  font-weight: 600;
  font-size: 0.95rem;
  line-height: 1 !important;
  box-shadow: none !important;
  text-align: center !important;
  text-decoration: none !important;
}

.pf-v5-c-button.pf-m-secondary::before,
.pf-v5-c-button.pf-m-secondary::after,
a.pf-v5-c-button.pf-m-secondary::before,
a.pf-v5-c-button.pf-m-secondary::after {
  content: none !important;
  display: none !important;
}

.pf-v5-c-button.pf-m-block,
a.pf-v5-c-button.pf-m-block {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100%;
  margin-top: 0;
}

#kc-form-buttons:not(button):not(input):not(a),
.pf-v5-c-form__actions {
  border: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
}

a,
a:link,
a:visited {
  color: var(--rl-signal);
}

a:hover,
a:focus {
  color: var(--rl-signal-hover);
}

/* ---------- 提示：与字段错误同一行字，不再用色块气泡 ---------- */

.pf-v5-c-login .pf-v5-c-alert {
  display: block !important;
  grid-template-columns: none !important;
  margin: 0 0 0.75rem;
  padding: 0 0 0 1.15rem !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
}

.pf-v5-c-login .pf-v5-c-alert__icon {
  display: none !important;
}

.pf-v5-c-login .pf-v5-c-alert__title,
.pf-v5-c-login .kc-feedback-text {
  font-size: 13px;
  font-weight: 400;
  line-height: 1.45;
}

.pf-v5-c-login .pf-v5-c-alert.pf-m-danger .pf-v5-c-alert__title {
  color: var(--rl-danger);
}

.pf-v5-c-login .pf-v5-c-alert.pf-m-warning .pf-v5-c-alert__title {
  color: var(--rl-alert);
}

.pf-v5-c-login .pf-v5-c-alert.pf-m-success .pf-v5-c-alert__title {
  color: var(--rl-live);
}

.pf-v5-c-login .pf-v5-c-alert.pf-m-info .pf-v5-c-alert__title {
  color: var(--rl-ink-2);
}

/* ---------- 社交登录 ---------- */

#kc-social-providers ul {
  gap: 8px;
}

#kc-social-providers a {
  border: 1px solid var(--rl-line);
  border-radius: var(--rl-radius-sm);
  padding: 8px 14px;
  color: var(--rl-ink-2);
  background: var(--rl-surface);
}

#kc-social-providers a:hover {
  border-color: var(--rl-signal);
  background: var(--rl-signal-soft);
  color: var(--rl-ink);
}

/* ---------- 注册：邮箱已存在引导 ---------- */

.str-email-status-panel {
  margin-top: 0.45rem;
  padding: 0 0 0 1.15rem;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: var(--rl-ink);
}

.str-email-status-msg {
  margin: 0;
  font-size: 0.925rem;
  line-height: 1.45;
  color: var(--rl-ink-2);
}

.str-email-status-actions {
  margin-top: 10px;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.str-email-status-actions .pf-v5-c-button,
.str-email-status-actions .str-resend-btn {
  border-radius: var(--rl-radius-sm) !important;
}

.str-email-status-note {
  margin: 8px 0 0;
  font-size: 0.85rem;
  color: var(--rl-live);
}

.str-email-status-note--error {
  color: var(--rl-danger);
}

/* ---------- 页脚 ---------- */
/*
 * Keycloak.v2 结构：
 *   main-body（表单+登录按钮）
 *   #kc-info > .pf-v5-c-login__main-footer-band（「新用户？注册」）← PatternFly 自带顶边线
 *   .pf-v5-c-login__main-footer（常为空）
 * 不要再给空的 main-footer 画 border-top，否则会变成「按钮下一根 + 注册下一根」。
 */
#kc-info,
#kc-info-wrapper {
  margin: 0;
  padding: 0;
}

.pf-v5-c-login__main-footer-band {
  --pf-v5-c-login__main-footer-band--BorderTopWidth: 1px;
  --pf-v5-c-login__main-footer-band--BorderTopColor: var(--rl-line);
  --pf-v5-c-login__main-footer-band--PaddingTop: 1.25rem;
  --pf-v5-c-login__main-footer-band--PaddingBottom: 1.5rem;
  --pf-v5-c-login__main-footer-band--PaddingLeft: 2rem;
  --pf-v5-c-login__main-footer-band--PaddingRight: 2rem;
  margin-top: 0.75rem;
  border-block-start: 1px solid var(--rl-line);
  text-align: center;
}

.pf-v5-c-login__main-footer-band-item {
  color: var(--rl-ink-2);
}

.pf-v5-c-login__main-footer {
  border-top: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  min-height: 0 !important;
}

.pf-v5-c-login__main-footer:empty {
  display: none !important;
}

/* 临时会话超时：与其他提示同一行字 */
.pf-v5-c-login .pf-v5-c-alert.str-login-timeout-soft .pf-v5-c-alert__title {
  color: var(--rl-ink-2);
}
