Files
gremiumhub/deployment/keycloak-theme/legalconsenthub/login/resources/css/styles.css

665 lines
16 KiB
CSS

/* LegalConsentHub Keycloak Theme - Matching Nuxt UI 4 Styling */
/* Compatible with Keycloak 26+ PatternFly-based themes */
/* CSS Variables matching Nuxt UI teal/cyan/violet theme */
:root {
/* Teal palette (primary) */
--lch-teal-50: #f0fdfa;
--lch-teal-100: #ccfbf1;
--lch-teal-200: #99f6e4;
--lch-teal-300: #5eead4;
--lch-teal-400: #2dd4bf;
--lch-teal-500: #14b8a6;
--lch-teal-600: #0d9488;
--lch-teal-700: #0f766e;
--lch-teal-800: #115e59;
--lch-teal-900: #134e4a;
--lch-teal-950: #042f2e;
/* Cyan palette (accent) */
--lch-cyan-50: #ecfeff;
--lch-cyan-100: #cffafe;
--lch-cyan-200: #a5f3fc;
--lch-cyan-300: #67e8f9;
--lch-cyan-400: #22d3ee;
--lch-cyan-500: #06b6d4;
--lch-cyan-600: #0891b2;
--lch-cyan-700: #0e7490;
--lch-cyan-800: #155e75;
--lch-cyan-900: #164e63;
--lch-cyan-950: #083344;
/* Violet palette (highlight accent) */
--lch-violet-50: #f5f3ff;
--lch-violet-100: #ede9fe;
--lch-violet-200: #ddd6fe;
--lch-violet-300: #c4b5fd;
--lch-violet-400: #a78bfa;
--lch-violet-500: #8b5cf6;
--lch-violet-600: #7c3aed;
--lch-violet-700: #6d28d9;
--lch-violet-800: #5b21b6;
--lch-violet-900: #4c1d95;
--lch-violet-950: #2e1065;
/* 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(180deg, #ffffff 0%, var(--lch-teal-50) 50%, var(--lch-cyan-50) 100%) !important;
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif !important;
position: relative !important;
overflow: hidden !important;
}
/* Decorative gradient orbs - matching auth layout */
html.login-pf::before,
html.login-pf::after {
content: "" !important;
position: fixed !important;
border-radius: 50% !important;
filter: blur(80px) !important;
opacity: 0.4 !important;
pointer-events: none !important;
z-index: 0 !important;
}
/* Teal/cyan orb - top right */
html.login-pf::before {
width: 400px !important;
height: 400px !important;
top: -100px !important;
right: -100px !important;
background: linear-gradient(135deg, var(--lch-teal-500), var(--lch-cyan-400)) !important;
}
/* Cyan/teal orb - bottom left */
html.login-pf::after {
width: 300px !important;
height: 300px !important;
bottom: -50px !important;
left: -50px !important;
background: linear-gradient(135deg, var(--lch-cyan-400), var(--lch-teal-500)) !important;
}
/* Violet orb via body pseudo-element - bottom right */
html.login-pf body::before {
content: "" !important;
position: fixed !important;
width: 200px !important;
height: 200px !important;
bottom: -50px !important;
right: 20% !important;
border-radius: 50% !important;
filter: blur(80px) !important;
opacity: 0.3 !important;
background: linear-gradient(135deg, var(--lch-violet-400), var(--lch-violet-600)) !important;
pointer-events: none !important;
z-index: 0 !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;
position: relative !important;
z-index: 1 !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-teal-400) !important;
box-shadow: 0 0 0 3px rgba(20, 184, 166, 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: linear-gradient(135deg, var(--lch-teal-500) 0%, var(--lch-cyan-500) 100%) !important;
border: none !important;
border-radius: 0.75rem !important;
cursor: pointer !important;
transition: all 0.2s ease-in-out !important;
text-align: center !important;
box-sizing: border-box !important;
box-shadow: 0 4px 14px -2px rgba(20, 184, 166, 0.4) !important;
}
#kc-login:hover {
background: linear-gradient(135deg, var(--lch-cyan-500) 0%, var(--lch-violet-500) 100%) !important;
box-shadow: 0 6px 20px -2px rgba(139, 92, 246, 0.4) !important;
}
#kc-login:active {
background: linear-gradient(135deg, var(--lch-teal-600) 0%, var(--lch-cyan-600) 100%) !important;
transform: scale(0.98) !important;
}
#kc-login:focus {
outline: none !important;
box-shadow: 0 0 0 3px rgba(20, 184, 166, 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-teal-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-teal-700) !important;
text-decoration: underline !important;
}
/* Links */
a {
color: var(--lch-teal-600) !important;
text-decoration: none !important;
transition: color 0.15s ease-in-out !important;
}
a:hover {
color: var(--lch-teal-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-teal-50) !important;
border: 1px solid var(--lch-teal-200) !important;
color: var(--lch-teal-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-teal-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-teal-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(180deg, #0a0a0a 0%, var(--lch-teal-950) 50%, var(--lch-cyan-950) 100%) !important;
}
/* Dark mode orbs - reduced opacity */
html.login-pf::before,
html.login-pf::after {
opacity: 0.2 !important;
}
html.login-pf body::before {
opacity: 0.15 !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-teal-400) !important;
box-shadow: 0 0 0 3px rgba(20, 184, 166, 0.25) !important;
}
a {
color: var(--lch-teal-400) !important;
}
a:hover {
color: var(--lch-teal-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-teal-950) !important;
border-color: var(--lch-teal-800) !important;
color: var(--lch-teal-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-teal-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;
}
}