feat(#26): Add custom login form
This commit is contained in:
@@ -0,0 +1,577 @@
|
||||
/* LegalConsentHub Keycloak Theme - Matching Nuxt UI 4 Styling */
|
||||
/* Compatible with Keycloak 26+ PatternFly-based themes */
|
||||
|
||||
/* CSS Variables matching Nuxt UI green/zinc theme */
|
||||
:root {
|
||||
/* Green palette (primary) */
|
||||
--lch-green-50: #effdf5;
|
||||
--lch-green-100: #d9fbe8;
|
||||
--lch-green-200: #b3f5d1;
|
||||
--lch-green-300: #75edae;
|
||||
--lch-green-400: #00dc82;
|
||||
--lch-green-500: #00c16a;
|
||||
--lch-green-600: #00a155;
|
||||
--lch-green-700: #007f45;
|
||||
--lch-green-800: #016538;
|
||||
--lch-green-900: #0a5331;
|
||||
--lch-green-950: #052e16;
|
||||
|
||||
/* Zinc palette (neutral) */
|
||||
--lch-zinc-50: #fafafa;
|
||||
--lch-zinc-100: #f4f4f5;
|
||||
--lch-zinc-200: #e4e4e7;
|
||||
--lch-zinc-300: #d4d4d8;
|
||||
--lch-zinc-400: #a1a1aa;
|
||||
--lch-zinc-500: #71717a;
|
||||
--lch-zinc-600: #52525b;
|
||||
--lch-zinc-700: #3f3f46;
|
||||
--lch-zinc-800: #27272a;
|
||||
--lch-zinc-900: #18181b;
|
||||
--lch-zinc-950: #09090b;
|
||||
}
|
||||
|
||||
/* ========================================
|
||||
LIGHT THEME (Default)
|
||||
======================================== */
|
||||
|
||||
/* Full page layout - center the card */
|
||||
html.login-pf,
|
||||
html.login-pf body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: linear-gradient(135deg, var(--lch-zinc-100) 0%, var(--lch-zinc-200) 100%) !important;
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !important;
|
||||
}
|
||||
|
||||
.login-pf-page {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
justify-content: center !important;
|
||||
align-items: center !important;
|
||||
min-height: 100vh !important;
|
||||
padding: 1rem !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* Hide the default header with realm name */
|
||||
#kc-header,
|
||||
.login-pf-page-header {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* Card container */
|
||||
.card-pf {
|
||||
background: white !important;
|
||||
border-radius: 0.75rem !important;
|
||||
box-shadow: 0 10px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1) !important;
|
||||
border: 1px solid var(--lch-zinc-200) !important;
|
||||
padding: 2.5rem !important;
|
||||
width: 100% !important;
|
||||
max-width: 24rem !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* Logo - Add before the header */
|
||||
.login-pf-header::before {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 3rem;
|
||||
margin-bottom: 1.5rem;
|
||||
background-image: url("../img/logo.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
/* Page title */
|
||||
.login-pf-header {
|
||||
text-align: center !important;
|
||||
margin-bottom: 1.5rem !important;
|
||||
}
|
||||
|
||||
#kc-page-title {
|
||||
font-size: 1.5rem !important;
|
||||
font-weight: 700 !important;
|
||||
color: var(--lch-zinc-900) !important;
|
||||
margin: 0 !important;
|
||||
line-height: 1.3 !important;
|
||||
}
|
||||
|
||||
/* Form groups */
|
||||
.form-group {
|
||||
margin-bottom: 1.25rem !important;
|
||||
}
|
||||
|
||||
/* Labels */
|
||||
.pf-c-form__label,
|
||||
.pf-c-form__label-text,
|
||||
.control-label,
|
||||
label {
|
||||
display: block !important;
|
||||
font-size: 0.875rem !important;
|
||||
font-weight: 500 !important;
|
||||
color: var(--lch-zinc-700) !important;
|
||||
margin-bottom: 0.5rem !important;
|
||||
}
|
||||
|
||||
/* Form inputs - PatternFly override */
|
||||
.pf-c-form-control,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="email"] {
|
||||
width: 100% !important;
|
||||
padding: 0.75rem 1rem !important;
|
||||
font-size: 0.9375rem !important;
|
||||
line-height: 1.5 !important;
|
||||
color: var(--lch-zinc-900) !important;
|
||||
background-color: white !important;
|
||||
border: 1px solid var(--lch-zinc-300) !important;
|
||||
border-radius: 0.5rem !important;
|
||||
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05) !important;
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out !important;
|
||||
box-sizing: border-box !important;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.pf-c-form-control:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="email"]:focus {
|
||||
border-color: var(--lch-green-400) !important;
|
||||
box-shadow: 0 0 0 3px rgba(0, 220, 130, 0.2) !important;
|
||||
}
|
||||
|
||||
.pf-c-form-control:hover,
|
||||
input[type="text"]:hover,
|
||||
input[type="password"]:hover,
|
||||
input[type="email"]:hover {
|
||||
border-color: var(--lch-zinc-400) !important;
|
||||
}
|
||||
|
||||
/* Primary button - Sign In (using ID for consistency across all login pages) */
|
||||
#kc-login {
|
||||
display: block !important;
|
||||
width: 100% !important;
|
||||
padding: 0.5rem 0.75rem !important;
|
||||
font-size: 1rem !important;
|
||||
font-weight: 500 !important;
|
||||
line-height: 1.5 !important;
|
||||
color: white !important;
|
||||
background-color: var(--lch-green-500) !important;
|
||||
border: none !important;
|
||||
border-radius: 0.5rem !important;
|
||||
cursor: pointer !important;
|
||||
transition: background-color 0.15s ease-in-out, transform 0.1s ease-in-out, box-shadow 0.15s ease-in-out !important;
|
||||
text-align: center !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
#kc-login:hover {
|
||||
background-color: var(--lch-green-400) !important;
|
||||
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
|
||||
}
|
||||
|
||||
#kc-login:active {
|
||||
background-color: var(--lch-green-700) !important;
|
||||
transform: scale(0.98) !important;
|
||||
}
|
||||
|
||||
#kc-login:focus {
|
||||
outline: none !important;
|
||||
box-shadow: 0 0 0 3px rgba(0, 220, 130, 0.3) !important;
|
||||
}
|
||||
|
||||
/* Secondary/link buttons */
|
||||
.pf-c-button.pf-m-link {
|
||||
display: inline-flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
padding: 0.5rem 1rem !important;
|
||||
font-size: 0.875rem !important;
|
||||
font-weight: 500 !important;
|
||||
color: var(--lch-green-600) !important;
|
||||
background-color: transparent !important;
|
||||
border: none !important;
|
||||
cursor: pointer !important;
|
||||
transition: color 0.15s ease-in-out !important;
|
||||
}
|
||||
|
||||
.pf-c-button.pf-m-link:hover {
|
||||
color: var(--lch-green-700) !important;
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: var(--lch-green-600) !important;
|
||||
text-decoration: none !important;
|
||||
transition: color 0.15s ease-in-out !important;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--lch-green-700) !important;
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
/* Alert/Error messages */
|
||||
.alert,
|
||||
.pf-c-alert {
|
||||
padding: 1rem !important;
|
||||
border-radius: 0.5rem !important;
|
||||
margin-bottom: 1rem !important;
|
||||
font-size: 0.875rem !important;
|
||||
}
|
||||
|
||||
.alert-error,
|
||||
.alert-danger,
|
||||
.pf-m-danger {
|
||||
background-color: #fef2f2 !important;
|
||||
border: 1px solid #fecaca !important;
|
||||
color: #dc2626 !important;
|
||||
}
|
||||
|
||||
.alert-warning,
|
||||
.pf-m-warning {
|
||||
background-color: #fffbeb !important;
|
||||
border: 1px solid #fde68a !important;
|
||||
color: #d97706 !important;
|
||||
}
|
||||
|
||||
.alert-success,
|
||||
.pf-m-success {
|
||||
background-color: var(--lch-green-50) !important;
|
||||
border: 1px solid var(--lch-green-200) !important;
|
||||
color: var(--lch-green-700) !important;
|
||||
}
|
||||
|
||||
.alert-info,
|
||||
.pf-m-info {
|
||||
background-color: #eff6ff !important;
|
||||
border: 1px solid #bfdbfe !important;
|
||||
color: #2563eb !important;
|
||||
}
|
||||
|
||||
/* Checkbox styling */
|
||||
input[type="checkbox"] {
|
||||
width: 1rem !important;
|
||||
height: 1rem !important;
|
||||
accent-color: var(--lch-green-500) !important;
|
||||
border-radius: 0.25rem !important;
|
||||
margin-right: 0.5rem !important;
|
||||
}
|
||||
|
||||
/* Remember me / form options */
|
||||
#kc-form-options {
|
||||
margin-top: 0.5rem !important;
|
||||
}
|
||||
|
||||
#kc-form-options label {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
font-size: 0.875rem !important;
|
||||
color: var(--lch-zinc-600) !important;
|
||||
font-weight: 400 !important;
|
||||
}
|
||||
|
||||
/* Forgot password link */
|
||||
.login-pf-settings {
|
||||
display: flex !important;
|
||||
justify-content: space-between !important;
|
||||
align-items: center !important;
|
||||
}
|
||||
|
||||
/* Social login section */
|
||||
#kc-social-providers {
|
||||
margin-top: 1.5rem !important;
|
||||
padding-top: 1.5rem !important;
|
||||
border-top: 1px solid var(--lch-zinc-200) !important;
|
||||
}
|
||||
|
||||
#kc-social-providers ul {
|
||||
list-style: none !important;
|
||||
padding: 0 !important;
|
||||
margin: 0 !important;
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
gap: 0.75rem !important;
|
||||
}
|
||||
|
||||
#kc-social-providers a {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
padding: 0.75rem 1rem !important;
|
||||
border: 1px solid var(--lch-zinc-300) !important;
|
||||
border-radius: 0.5rem !important;
|
||||
background: white !important;
|
||||
color: var(--lch-zinc-700) !important;
|
||||
font-weight: 500 !important;
|
||||
transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out !important;
|
||||
}
|
||||
|
||||
#kc-social-providers a:hover {
|
||||
background-color: var(--lch-zinc-100) !important;
|
||||
border-color: var(--lch-zinc-400) !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
/* Registration link */
|
||||
#kc-registration {
|
||||
margin-top: 1.5rem !important;
|
||||
text-align: center !important;
|
||||
font-size: 0.875rem !important;
|
||||
color: var(--lch-zinc-600) !important;
|
||||
}
|
||||
|
||||
/* Info section */
|
||||
#kc-info {
|
||||
margin-top: 1rem !important;
|
||||
text-align: center !important;
|
||||
font-size: 0.875rem !important;
|
||||
color: var(--lch-zinc-500) !important;
|
||||
}
|
||||
|
||||
/* Password visibility toggle button */
|
||||
.pf-c-button.pf-m-control {
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
color: var(--lch-zinc-500) !important;
|
||||
cursor: pointer !important;
|
||||
padding: 0.5rem !important;
|
||||
}
|
||||
|
||||
.pf-c-button.pf-m-control:hover {
|
||||
color: var(--lch-zinc-700) !important;
|
||||
}
|
||||
|
||||
/* Username display with change link (password step) */
|
||||
.label-with-action {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: space-between !important;
|
||||
margin-bottom: 0.5rem !important;
|
||||
}
|
||||
|
||||
.label-with-action label {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.change-username-link {
|
||||
display: inline-flex !important;
|
||||
align-items: center !important;
|
||||
gap: 0.25rem !important;
|
||||
font-size: 0.75rem !important;
|
||||
font-weight: 500 !important;
|
||||
color: var(--lch-zinc-500) !important;
|
||||
background: none !important;
|
||||
border: none !important;
|
||||
padding: 0 !important;
|
||||
transition: color 0.15s ease-in-out !important;
|
||||
}
|
||||
|
||||
.change-username-link:hover {
|
||||
color: var(--lch-green-600) !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.change-username-link svg {
|
||||
width: 0.875rem !important;
|
||||
height: 0.875rem !important;
|
||||
}
|
||||
|
||||
.change-username-link span {
|
||||
line-height: 1 !important;
|
||||
}
|
||||
|
||||
/* Disabled username input styling */
|
||||
input[disabled],
|
||||
input[readonly] {
|
||||
background-color: var(--lch-zinc-100) !important;
|
||||
color: var(--lch-zinc-600) !important;
|
||||
cursor: not-allowed !important;
|
||||
border-color: var(--lch-zinc-200) !important;
|
||||
}
|
||||
|
||||
input[disabled]:hover,
|
||||
input[readonly]:hover {
|
||||
border-color: var(--lch-zinc-200) !important;
|
||||
}
|
||||
|
||||
/* Hide the default username display in header */
|
||||
#kc-username {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* Input error styling */
|
||||
.input-error {
|
||||
display: block !important;
|
||||
margin-top: 0.5rem !important;
|
||||
font-size: 0.8125rem !important;
|
||||
color: #dc2626 !important;
|
||||
}
|
||||
|
||||
/* ========================================
|
||||
DARK THEME (System preference)
|
||||
======================================== */
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
html.login-pf,
|
||||
html.login-pf body {
|
||||
background: linear-gradient(135deg, var(--lch-zinc-900) 0%, var(--lch-zinc-950) 100%) !important;
|
||||
}
|
||||
|
||||
.card-pf {
|
||||
background: var(--lch-zinc-800) !important;
|
||||
border-color: var(--lch-zinc-700) !important;
|
||||
}
|
||||
|
||||
#kc-page-title {
|
||||
color: var(--lch-zinc-50) !important;
|
||||
}
|
||||
|
||||
.pf-c-form__label,
|
||||
.pf-c-form__label-text,
|
||||
.control-label,
|
||||
label {
|
||||
color: var(--lch-zinc-300) !important;
|
||||
}
|
||||
|
||||
.pf-c-form-control,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="email"] {
|
||||
background-color: var(--lch-zinc-900) !important;
|
||||
border-color: var(--lch-zinc-600) !important;
|
||||
color: var(--lch-zinc-100) !important;
|
||||
}
|
||||
|
||||
.pf-c-form-control:hover,
|
||||
input[type="text"]:hover,
|
||||
input[type="password"]:hover,
|
||||
input[type="email"]:hover {
|
||||
border-color: var(--lch-zinc-500) !important;
|
||||
}
|
||||
|
||||
.pf-c-form-control:focus,
|
||||
input[type="text"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="email"]:focus {
|
||||
border-color: var(--lch-green-400) !important;
|
||||
box-shadow: 0 0 0 3px rgba(0, 220, 130, 0.25) !important;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--lch-green-400) !important;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--lch-green-300) !important;
|
||||
}
|
||||
|
||||
#kc-form-options label,
|
||||
#kc-registration {
|
||||
color: var(--lch-zinc-400) !important;
|
||||
}
|
||||
|
||||
#kc-info {
|
||||
color: var(--lch-zinc-500) !important;
|
||||
}
|
||||
|
||||
.alert-error,
|
||||
.alert-danger,
|
||||
.pf-m-danger {
|
||||
background-color: #450a0a !important;
|
||||
border-color: #7f1d1d !important;
|
||||
color: #fca5a5 !important;
|
||||
}
|
||||
|
||||
.alert-warning,
|
||||
.pf-m-warning {
|
||||
background-color: #451a03 !important;
|
||||
border-color: #78350f !important;
|
||||
color: #fcd34d !important;
|
||||
}
|
||||
|
||||
.alert-success,
|
||||
.pf-m-success {
|
||||
background-color: var(--lch-green-950) !important;
|
||||
border-color: var(--lch-green-800) !important;
|
||||
color: var(--lch-green-300) !important;
|
||||
}
|
||||
|
||||
.alert-info,
|
||||
.pf-m-info {
|
||||
background-color: #1e3a5f !important;
|
||||
border-color: #1e40af !important;
|
||||
color: #93c5fd !important;
|
||||
}
|
||||
|
||||
#kc-social-providers {
|
||||
border-top-color: var(--lch-zinc-700) !important;
|
||||
}
|
||||
|
||||
#kc-social-providers a {
|
||||
background: var(--lch-zinc-800) !important;
|
||||
border-color: var(--lch-zinc-600) !important;
|
||||
color: var(--lch-zinc-200) !important;
|
||||
}
|
||||
|
||||
#kc-social-providers a:hover {
|
||||
background-color: var(--lch-zinc-700) !important;
|
||||
border-color: var(--lch-zinc-500) !important;
|
||||
}
|
||||
|
||||
.pf-c-button.pf-m-control {
|
||||
color: var(--lch-zinc-400) !important;
|
||||
}
|
||||
|
||||
.pf-c-button.pf-m-control:hover {
|
||||
color: var(--lch-zinc-200) !important;
|
||||
}
|
||||
|
||||
/* Username display - dark mode */
|
||||
input[disabled],
|
||||
input[readonly] {
|
||||
background-color: var(--lch-zinc-900) !important;
|
||||
color: var(--lch-zinc-400) !important;
|
||||
border-color: var(--lch-zinc-700) !important;
|
||||
}
|
||||
|
||||
input[disabled]:hover,
|
||||
input[readonly]:hover {
|
||||
border-color: var(--lch-zinc-700) !important;
|
||||
}
|
||||
|
||||
.change-username-link {
|
||||
color: var(--lch-zinc-400) !important;
|
||||
}
|
||||
|
||||
.change-username-link:hover {
|
||||
color: var(--lch-green-400) !important;
|
||||
}
|
||||
|
||||
.input-error {
|
||||
color: #fca5a5 !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* ========================================
|
||||
RESPONSIVE ADJUSTMENTS
|
||||
======================================== */
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.card-pf {
|
||||
margin: 0.5rem !important;
|
||||
padding: 1.5rem !important;
|
||||
}
|
||||
|
||||
#kc-page-title {
|
||||
font-size: 1.25rem !important;
|
||||
}
|
||||
|
||||
.login-pf-header::before {
|
||||
height: 2.5rem !important;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user