/* 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; } }