:root{--login-bg:var(--gl-gray-900);--login-text:#363636;--login-text-light:var(--gl-gray-50);--login-text-muted:var(--gl-gray-500);--login-text-subtle:var(--gl-gray-700);--login-card-bg:var(--gl-gray-0);--login-primary:var(--gl-blue-500);--login-primary-hover:var(--gl-blue-600);--login-primary-alpha-8:rgba(31,117,203,0.08);--login-primary-alpha-25:rgba(31,117,203,0.25);--login-input-text:var(--gl-gray-950);--login-input-border:var(--gl-gray-100);--login-input-bg-muted:var(--gl-gray-50);--login-gitlab-orange:#fc6d26;--login-gitlab-orange-hover:#e24329;--login-footer-border:var(--gl-gray-100);--login-footer-link:var(--gl-blue-400,#0088ce);--login-shadow:rgba(3,3,3,0.16) 0px 8px 16px 0px,rgba(3,3,3,0.08) 0px 0px 6px 0px}body{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--login-bg) url('/static/img/keycloak-bg.png') no-repeat center center fixed;background-size:cover;padding:var(--gl-spacing-7) var(--gl-spacing-5);color:var(--login-text);font-family:var(--font-family);overflow:auto!important}.login-brand-title{color:var(--login-text-light);font-size:var(--font-size-3xl);font-weight:var(--font-weight-normal);letter-spacing:3px;text-transform:uppercase;text-align:center;padding:0 var(--gl-spacing-4) var(--gl-spacing-6);margin:0}.login-container{width:100%;max-width:500px}.login-card{background:var(--login-card-bg);border-top:var(--radius) solid var(--login-primary);border-radius:0;box-shadow:var(--login-shadow);padding:var(--gl-spacing-6) var(--gl-spacing-8) var(--gl-spacing-7)}.login-heading{font-size:var(--font-size-2xl);font-weight:var(--font-weight-light);color:var(--login-text);text-align:center;margin:0 0 var(--gl-spacing-6)}.dev-indicator{display:inline-flex;align-items:center;gap:var(--gl-spacing-2);padding:var(--gl-spacing-2) var(--gl-spacing-3);background:var(--warning-bg);color:var(--gl-orange-300);font-size:var(--font-size-2xs);font-weight:var(--font-weight-semibold);text-transform:uppercase;letter-spacing:0.025em;border-radius:var(--radius-full);margin-bottom:var(--gl-spacing-5)}.dev-indicator::before{content:'';width:6px;height:6px;background:currentColor;border-radius:50%}.login-form .form-group{margin-bottom:var(--gl-spacing-5)}.login-form .form-label{display:block;font-size:var(--font-size-xs);font-weight:var(--font-weight-normal);color:var(--login-text);margin-bottom:var(--gl-spacing-2);transition:color var(--transition-fast)}.login-form .form-group:focus-within .form-label{color:var(--login-primary)}.login-form .form-input{display:block;width:100%;height:36px;padding:var(--gl-spacing-2) var(--gl-spacing-3);font-size:var(--font-size-md);color:var(--login-input-text);background:var(--login-card-bg);border:1px solid var(--login-input-border);border-bottom:2px solid var(--login-primary);border-radius:0;outline:none;transition:border-color var(--transition-normal),box-shadow var(--transition-normal),background var(--transition-normal)}.login-form .form-input:hover{border-color:var(--gl-gray-300)}.login-form .form-input:focus{border-color:var(--login-primary);box-shadow:0 0 0 2px var(--login-card-bg),0 0 0 4px var(--login-primary)}.role-select{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--gl-spacing-3)}.role-option{position:relative}.role-option input{position:absolute;opacity:0;width:0;height:0}.role-option label{display:flex;flex-direction:column;align-items:center;gap:var(--gl-spacing-2);padding:var(--gl-spacing-4) var(--gl-spacing-3);background:var(--login-input-bg-muted);border:1.5px solid var(--login-input-border);border-radius:var(--radius);cursor:pointer;transition:background-color var(--transition-normal),border-color var(--transition-normal),transform var(--transition-normal),box-shadow var(--transition-normal);text-align:center}.role-option label:hover{border-color:var(--gl-gray-300);background:var(--login-card-bg);box-shadow:0 4px 8px rgba(0,0,0,0.08)}.role-option input:checked + label{border-color:var(--login-primary);background:var(--login-primary-alpha-8);box-shadow:0 4px 8px rgba(31,117,203,0.12)}.role-option .role-icon{width:24px;height:24px;color:var(--login-text-muted)}.role-option input:checked + label .role-icon{color:var(--login-primary)}.role-option .role-name{font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);color:var(--login-text-subtle)}.role-option input:checked + label .role-name{color:var(--login-primary)}.login-form .btn-signin{display:block;width:100%;margin-top:var(--gl-spacing-4);background:var(--login-primary);color:var(--login-card-bg);border:0;border-radius:1px;padding:var(--gl-spacing-2) var(--gl-spacing-4);font-size:var(--font-size-base);font-weight:var(--font-weight-normal);cursor:pointer;transition:background var(--transition-normal),color var(--transition-normal),box-shadow var(--transition-normal);height:36px}.login-form .btn-signin:hover{background:var(--login-primary-hover)}.login-form .btn-signin:focus{box-shadow:var(--focus-ring)}.login-form .btn-signin:active{box-shadow:none}.login-form .btn-signin.is-loading{cursor:progress;opacity:0.75}.login-form .btn-signin[disabled]{cursor:not-allowed}.btn-gitlab{display:flex;align-items:center;justify-content:center;gap:var(--gl-spacing-3);width:100%;padding:var(--gl-spacing-3) var(--gl-spacing-5);background:var(--login-gitlab-orange);color:#fff;font-size:var(--font-size-base);font-weight:var(--font-weight-semibold);text-decoration:none;border:none;border-radius:var(--radius);cursor:pointer;transition:background var(--transition-normal),color var(--transition-normal),box-shadow var(--transition-normal);margin-bottom:var(--gl-spacing-3)}.btn-gitlab:hover{background:var(--login-gitlab-orange-hover);color:var(--login-card-bg);text-decoration:none}.btn-gitlab svg{width:18px;height:18px}.login-gitlab-url{margin-top:var(--gl-spacing-3);font-size:var(--font-size-xs);color:var(--login-text-muted);text-align:center}.login-separator{text-align:center;color:var(--login-text-muted);font-size:var(--font-size-sm);margin:var(--gl-spacing-5) 0}.login-rbac-note{margin-bottom:var(--gl-spacing-5);font-size:var(--font-size-sm);padding:var(--gl-spacing-4)}.login-unconfigured{text-align:center;color:var(--login-text-muted)}.login-footer{margin-top:var(--gl-spacing-5);padding-top:var(--gl-spacing-5);border-top:1px solid var(--login-footer-border);display:flex;flex-direction:column;align-items:center;gap:var(--gl-spacing-2)}.login-tuke-logo{width:180px;height:auto;margin-bottom:var(--gl-spacing-2);opacity:0.85;filter:brightness(0) invert(1);transition:opacity var(--transition-fast)}.login-tuke-logo:hover{opacity:1}.login-footer p{font-size:var(--font-size-xs);color:var(--login-text-muted);margin:0;text-align:center}.login-thesis-note{font-size:var(--font-size-xs);opacity:1;color:var(--gl-gray-300)}.login-footer a{color:var(--login-footer-link);text-decoration:none;transition:color var(--transition-fast)}.login-footer a:hover{color:var(--login-primary);text-decoration:underline}.login-lang-switch{position:fixed;top:var(--gl-spacing-5);right:var(--gl-spacing-5);z-index:var(--z-dropdown);transition:top 300ms cubic-bezier(0.22,0.61,0.36,1)}.login-lang-switch .gl-dropdown-toggle{min-width:136px;justify-content:flex-start}.login-lang-switch .gl-dropdown-toggle span{flex:1;text-align:left}.login-lang-switch .gl-dropdown-menu{right:0;left:auto;min-width:136px}@keyframes loginAlertIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes loginAlertOut{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-8px)}}@keyframes loginAlertShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-5px)}40%{transform:translateX(4px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}}.login-alert-region{margin-bottom:var(--gl-spacing-5)}.login-auth-alert{will-change:transform,opacity;animation:loginAlertIn 220ms cubic-bezier(0.22,0.61,0.36,1) both}.login-auth-alert.is-dismissing{animation:loginAlertOut 180ms cubic-bezier(0.55,0,1,0.45) both;pointer-events:none}.login-auth-alert.is-shaking{animation:loginAlertShake 380ms cubic-bezier(0.36,0.07,0.19,0.97) both}@media (max-width:520px){body{padding:0!important;overflow:auto!important;background:var(--login-card-bg)!important;justify-content:flex-start!important}.login-brand-title{color:var(--login-text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);letter-spacing:1px;text-align:center;padding:var(--gl-spacing-6) var(--gl-spacing-6) 0;margin:0}.login-container{max-width:100%;width:100%}.login-card{padding:var(--gl-spacing-5) var(--gl-spacing-6);box-shadow:none;border-top:none}.login-heading{text-align:center;font-size:var(--font-size-xl)}.login-lang-switch{position:relative;top:auto;right:auto;display:flex;justify-content:center;padding:var(--gl-spacing-4) var(--gl-spacing-6) 0}.login-lang-switch .gl-dropdown-toggle{background:var(--login-card-bg);border:1px solid var(--gl-border-color-default);color:var(--login-text)}.login-lang-switch .gl-dropdown-toggle:hover{background:var(--gl-bg-subtle)}.login-footer{align-items:center}.login-footer p{text-align:center}.role-select{grid-template-columns:1fr;gap:var(--gl-spacing-2)}.role-option label{flex-direction:row;padding:var(--gl-spacing-3) var(--gl-spacing-4)}}.login-health-banner{width:100%;max-width:500px;background:var(--gl-orange-500);color:var(--login-card-bg);display:flex;align-items:center;gap:var(--gl-spacing-3);padding:var(--gl-spacing-3) var(--gl-spacing-5);border-radius:var(--radius) var(--radius) 0 0;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);animation:loginBannerIn var(--gl-anim-enter) cubic-bezier(0.22,0.61,0.36,1)}.login-health-banner .login-health-text{animation:pulse 2s ease-in-out infinite}.login-health-banner[hidden]{display:none}.login-health-icon{flex-shrink:0}@keyframes loginBannerIn{from{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.login-server-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:var(--gl-spacing-2);vertical-align:middle;background:var(--login-text-muted);transition:background var(--transition-slow)}.login-server-dot.status-online{background:var(--gl-green-500);box-shadow:0 0 4px var(--gl-green-500)}.login-server-dot.status-offline{background:var(--gl-red-500);box-shadow:0 0 4px var(--gl-red-500);animation:pulse 1.5s ease-in-out infinite}.login-card-restored{box-shadow:rgba(16,133,72,0.35) 0px 0px 0px 3px,var(--login-shadow);transition:box-shadow var(--transition-normal)}.btn-disabled-offline{opacity:0.5;cursor:not-allowed;pointer-events:none}@keyframes loginReveal{from{opacity:0;transform:translateY(24px) scale(0.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes loginFadeIn{from{opacity:0}to{opacity:1}}@keyframes loginBrandReveal{from{opacity:0;transform:translateY(-14px) scale(0.96)}to{opacity:1;transform:translateY(0) scale(1)}}.login-lang-switch{animation:loginFadeIn 650ms cubic-bezier(0.16,1,0.3,1) 0ms both}.login-brand-title{animation:loginBrandReveal 750ms cubic-bezier(0.16,1,0.3,1) 100ms both}.login-container{animation:loginReveal 650ms cubic-bezier(0.16,1,0.3,1) 200ms both}.login-card .login-heading{animation:loginReveal 550ms cubic-bezier(0.16,1,0.3,1) 300ms both}.btn-gitlab{animation:loginReveal 550ms cubic-bezier(0.16,1,0.3,1) 380ms both}.login-gitlab-url{animation:loginFadeIn 450ms cubic-bezier(0.16,1,0.3,1) 440ms both}.login-separator{animation:loginFadeIn 450ms cubic-bezier(0.16,1,0.3,1) 380ms both}.login-form .form-group,.login-form .btn-signin{animation:loginReveal 550ms cubic-bezier(0.16,1,0.3,1) both}.login-form .form-group:nth-child(1){animation-delay:420ms}.login-form .form-group:nth-child(2){animation-delay:480ms}.login-form .form-group:nth-child(3){animation-delay:540ms}.login-form .btn-signin{animation-delay:600ms}.login-rbac-note{animation:loginReveal 550ms cubic-bezier(0.16,1,0.3,1) 460ms both}.login-footer{animation:loginReveal 550ms cubic-bezier(0.16,1,0.3,1) 560ms both}.role-option .role-icon{transition:color var(--transition-normal),transform var(--transition-normal)}.role-option input:checked + label .role-icon{animation:scale-in var(--gl-anim-fast) cubic-bezier(0.22,0.61,0.36,1)}.btn-gitlab:focus{box-shadow:var(--focus-ring)}.btn-gitlab:active{box-shadow:none}@media (prefers-reduced-motion:reduce){.login-brand-title,.login-container,.login-card .login-heading,.login-form .form-group,.login-form .btn-signin,.btn-gitlab,.login-gitlab-url,.login-separator,.login-rbac-note,.login-footer,.login-lang-switch,.gitlab-alert,.login-auth-alert,.login-health-banner,.role-option input:checked + label .role-icon{animation:none!important}.login-health-banner .login-health-text{animation:none}}