:root { --tjwater-canvas: oklch(0.965 0.014 205); --tjwater-surface: oklch(0.995 0.004 205); --tjwater-surface-soft: oklch(0.982 0.008 205); --tjwater-ink: oklch(0.3 0.055 215); --tjwater-muted: oklch(0.52 0.035 215); --tjwater-line: oklch(0.86 0.025 210); --tjwater-blue: oklch(0.57 0.16 242); --tjwater-blue-dark: oklch(0.49 0.15 242); --tjwater-teal: oklch(0.58 0.12 180); --tjwater-danger: oklch(0.55 0.19 27); --tjwater-radius-sm: 6px; --tjwater-radius-md: 12px; --tjwater-radius-lg: 18px; } html.login-pf { height: 100%; min-height: 100%; overflow-x: hidden; background: var(--tjwater-canvas); } body#keycloak-bg, .login-pf body { min-height: 100%; margin: 0; padding: 0; color: var(--tjwater-ink); background: var(--tjwater-canvas); font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .pf-v5-c-login, .pf-v5-c-login * { box-sizing: border-box; } .pf-v5-c-login { min-height: 100svh; padding: 0; background-color: var(--tjwater-canvas); background-image: linear-gradient( 90deg, transparent 0%, transparent 50%, oklch(0.975 0.01 205 / 62%) 68%, oklch(0.975 0.01 205 / 82%) 100% ), url("../img/network-blueprint.svg"); background-position: center; background-repeat: no-repeat; background-size: cover; } .pf-v5-c-login__container { display: grid; width: 100%; max-width: 1720px; min-height: 100svh; margin: 0 auto; padding: clamp(32px, 4.5vw, 76px) clamp(40px, 5vw, 88px); grid-template-columns: minmax(360px, 1fr) minmax(400px, 460px); grid-template-areas: "header main"; align-items: center; gap: clamp(64px, 8vw, 152px); } #kc-header { position: relative; z-index: 0; grid-area: header; width: fit-content; max-width: 100%; align-self: center; justify-self: start; margin: 0; padding: 0; isolation: isolate; animation: tjwater-enter 480ms cubic-bezier(0.16, 1, 0.3, 1) both; } #kc-header::before { position: absolute; z-index: -1; inset: -54px -72px; background: radial-gradient( ellipse at center, oklch(0.925 0.018 205 / 98%) 0%, oklch(0.925 0.018 205 / 94%) 48%, oklch(0.925 0.018 205 / 62%) 65%, transparent 82% ); pointer-events: none; content: ""; } #kc-header-wrapper { display: flex; max-width: 680px; margin: 0; padding: 0; flex-direction: column; align-items: flex-start; color: var(--tjwater-ink) !important; font-size: clamp(34px, 3vw, 46px); font-weight: 720; line-height: 1.28; letter-spacing: 0; text-align: left; text-transform: none; text-wrap: balance; } #kc-header-wrapper::before { width: 56px; height: 56px; margin-bottom: 24px; background: url("../img/logo-mark.svg") center / contain no-repeat; content: ""; } #kc-header-wrapper::after { width: 64px; height: 3px; margin-top: 26px; border-radius: 999px; background: var(--tjwater-teal); content: ""; } .pf-v5-c-login__main { grid-area: main; width: 100%; max-width: 460px; margin: 0; align-self: center; justify-self: stretch; overflow: hidden; border: 0; border-radius: var(--tjwater-radius-lg); background: oklch(0.995 0.004 205 / 97%); box-shadow: 0 32px 80px rgb(22 65 75 / 16%), 0 5px 18px rgb(22 65 75 / 9%); animation: tjwater-enter 520ms 70ms cubic-bezier(0.16, 1, 0.3, 1) both; } .pf-v5-c-login__main-header { display: grid; margin: 0; padding: 36px 36px 18px; grid-template-columns: minmax(0, 1fr) auto; gap: 20px; align-items: center; border-top: 0; } #kc-page-title { margin: 0; color: var(--tjwater-ink); font-size: 26px; font-weight: 720; line-height: 1.4; letter-spacing: 0; text-wrap: balance; } .pf-v5-c-login__main-header-utilities { margin: 0; } .pf-v5-c-login__main-body { margin: 0; padding: 0 36px 38px; } .pf-v5-c-form { gap: 20px; } .pf-v5-c-form__group { margin: 0; } .pf-v5-c-form__group-label { padding-bottom: 8px; } .pf-v5-c-form__label-text { color: var(--tjwater-ink); font-size: 14px; font-weight: 650; line-height: 1.6; } .pf-v5-c-form-control { min-height: 48px; overflow: hidden; border: 1px solid var(--tjwater-line); border-radius: var(--tjwater-radius-sm); background: var(--tjwater-surface-soft); box-shadow: none; transition-property: border-color, box-shadow, background-color; transition-duration: 160ms; transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); } .pf-v5-c-form-control::before, .pf-v5-c-form-control::after { border: 0; } .pf-v5-c-form-control:focus-within { border-color: var(--tjwater-blue); background: var(--tjwater-surface); box-shadow: 0 0 0 3px oklch(0.78 0.1 235 / 28%); } .pf-v5-c-form-control > input, .pf-v5-c-form-control > select { min-height: 46px; padding-inline: 14px; color: var(--tjwater-ink); font-size: 16px; outline: 0; } .pf-v5-c-login__main-header-utilities .pf-v5-c-form-control { width: 116px; min-height: 40px; background: var(--tjwater-surface); } #login-select-toggle { width: 100%; min-width: 0; min-height: 38px; padding-inline: 12px 32px; color: var(--tjwater-muted); font-size: 14px; cursor: pointer; } .pf-v5-c-form-control.pf-m-error { border-color: var(--tjwater-danger); } .pf-v5-c-input-group { gap: 8px; } .pf-v5-c-input-group__item.pf-m-fill { min-width: 0; } .pf-v5-c-button.pf-m-control { min-width: 48px; min-height: 48px; border: 1px solid var(--tjwater-line); border-radius: var(--tjwater-radius-sm); color: var(--tjwater-muted); background: var(--tjwater-surface-soft); touch-action: manipulation; transition-property: color, border-color, background-color, transform; transition-duration: 160ms; transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); } .pf-v5-c-button.pf-m-control:active { transform: scale(0.96); } .pf-v5-c-button.pf-m-control:focus-visible, .pf-v5-c-button.pf-m-primary:focus-visible, .pf-v5-c-button.pf-m-secondary:focus-visible, a:focus-visible { outline: 3px solid oklch(0.74 0.12 235 / 60%); outline-offset: 2px; } .pf-v5-c-form__helper-text { margin-top: 8px; } .pf-v5-c-helper-text { min-height: 22px; } .pf-v5-c-helper-text__item-text { color: var(--tjwater-muted); line-height: 1.7; } .pf-v5-c-helper-text__item-text a, #kc-registration a, .pf-v5-c-login__main-footer a { color: var(--tjwater-blue-dark); font-weight: 600; text-decoration: none; text-underline-offset: 3px; } .kc-feedback-text.pf-m-error, .pf-v5-c-helper-text__item.pf-m-error .kc-feedback-text { color: var(--tjwater-danger); } .pf-v5-c-check__input { accent-color: var(--tjwater-blue); } .pf-v5-c-check__label { color: var(--tjwater-muted); line-height: 1.7; } .pf-v5-c-form__actions { padding-top: 6px; } .pf-v5-c-button.pf-m-primary { min-height: 48px; border: 0; border-radius: var(--tjwater-radius-md); color: oklch(0.99 0.004 230); background: var(--tjwater-blue); font-size: 16px; font-weight: 700; box-shadow: 0 8px 18px oklch(0.48 0.15 242 / 20%); touch-action: manipulation; transition-property: transform, background-color, box-shadow; transition-duration: 160ms; transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1); } .pf-v5-c-button.pf-m-primary:active { transform: scale(0.96); background: var(--tjwater-blue-dark); box-shadow: 0 4px 10px oklch(0.48 0.15 242 / 18%); } .pf-v5-c-button.pf-m-secondary { min-height: 44px; border-radius: var(--tjwater-radius-md); color: var(--tjwater-blue-dark); border-color: var(--tjwater-line); } .pf-v5-c-alert { border-radius: var(--tjwater-radius-md); } .pf-v5-c-login__main-footer { color: var(--tjwater-muted); line-height: 1.7; } .pf-v5-c-login__main-footer-band { margin-top: 26px; padding: 18px 0 0; border-top: 1px solid var(--tjwater-line); background: transparent; } @keyframes tjwater-enter { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } } @media (hover: hover) { .pf-v5-c-button.pf-m-primary:hover { background: var(--tjwater-blue-dark); box-shadow: 0 10px 22px oklch(0.48 0.15 242 / 25%); transform: translateY(-1px); } .pf-v5-c-button.pf-m-control:hover { color: var(--tjwater-blue-dark); border-color: oklch(0.69 0.08 230); background: var(--tjwater-surface); } .pf-v5-c-helper-text__item-text a:hover, #kc-registration a:hover, .pf-v5-c-login__main-footer a:hover { text-decoration: underline; } } @media (max-width: 900px) { .pf-v5-c-login { background-image: linear-gradient(oklch(0.965 0.014 205 / 34%), oklch(0.965 0.014 205 / 34%)), url("../img/network-blueprint.svg"); background-position: 34% center; } .pf-v5-c-login__container { max-width: 560px; padding: max(28px, env(safe-area-inset-top)) max(24px, env(safe-area-inset-right)) max(32px, env(safe-area-inset-bottom)) max(24px, env(safe-area-inset-left)); grid-template-columns: minmax(0, 1fr); grid-template-areas: "header" "main"; align-content: center; gap: 24px; } #kc-header-wrapper { max-width: none; flex-direction: row; align-items: center; gap: 14px; font-size: clamp(22px, 5vw, 28px); line-height: 1.4; } #kc-header::before { inset: -24px -20px; background: radial-gradient( ellipse at center, oklch(0.965 0.014 205 / 98%) 0%, oklch(0.965 0.014 205 / 88%) 58%, transparent 84% ); } #kc-header-wrapper::before { width: 46px; height: 46px; margin: 0; flex: 0 0 46px; } #kc-header-wrapper::after { display: none; } .pf-v5-c-login__main { max-width: none; } } @media (max-width: 520px) { .pf-v5-c-login__container { gap: 18px; padding-inline: max(14px, env(safe-area-inset-left)) max(14px, env(safe-area-inset-right)); } #kc-header-wrapper { gap: 12px; font-size: 21px; } #kc-header-wrapper::before { width: 42px; height: 42px; flex-basis: 42px; } .pf-v5-c-login__main { border-radius: 16px; } .pf-v5-c-login__main-header { gap: 12px; padding: 26px 22px 15px; } #kc-page-title { font-size: 23px; } .pf-v5-c-login__main-header-utilities .pf-v5-c-form-control { width: 108px; } .pf-v5-c-login__main-body { padding: 0 22px 28px; } } @media (max-height: 680px) and (min-width: 901px) { .pf-v5-c-login__container { padding-block: 24px; } #kc-header-wrapper::before { width: 48px; height: 48px; margin-bottom: 18px; } #kc-header-wrapper::after { margin-top: 20px; } .pf-v5-c-login__main-header { padding-top: 28px; } .pf-v5-c-login__main-body { padding-bottom: 30px; } } @media (prefers-reduced-motion: reduce) { #kc-header, .pf-v5-c-login__main { animation: none; } .pf-v5-c-button, .pf-v5-c-form-control { transition-duration: 0.01ms; } }