536 lines
11 KiB
CSS
536 lines
11 KiB
CSS
: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;
|
|
}
|
|
}
|