.login-container{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#050507 0%,#003d66 50%,var(--violet-600) 100%);padding:2rem}.login-card{background:#fff;border-radius:1rem;box-shadow:0 20px 60px rgba(0,0,0,.3);width:100%;max-width:420px;padding:2.5rem}.login-header{text-align:center;margin-bottom:2rem}.login-logo{font-size:2rem;font-weight:500;color:var(--primary-color);margin-bottom:.5rem}.login-title{font-size:1.5rem;font-weight:600;color:var(--text-primary);margin-bottom:.25rem}.login-subtitle{color:var(--text-secondary);font-size:.9rem}.form-group{margin-bottom:1.5rem}.form-label{display:block;margin-bottom:.5rem;color:var(--text-primary);font-weight:500;font-size:.95rem}.form-input{width:100%;padding:.75rem 1rem;border:1px solid var(--border-color);border-radius:.5rem;font-size:1rem;transition:border-color .2s,box-shadow .2s}.form-input:focus{outline:0;border-color:var(--primary-color);box-shadow:0 0 0 3px rgba(79,70,229,.1)}.form-input.error{border-color:#ef4444}.error-message{color:#ef4444;font-size:.875rem;margin-top:.25rem}.remember-me{display:flex;align-items:center;margin-bottom:1.5rem}.remember-me input{margin-right:.5rem;width:18px;height:18px;cursor:pointer}.remember-me label{color:var(--text-secondary);font-size:.9rem;cursor:pointer}.login-button{width:100%;padding:.875rem;background-color:var(--primary-color);color:#fff;border:none;border-radius:.5rem;font-size:1rem;font-weight:600;cursor:pointer;transition:background-color .2s}.login-button:hover{background-color:var(--hover-color)}.login-button:active{transform:translateY(1px)}.login-footer{text-align:center;margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--border-color)}.login-footer p{color:var(--text-secondary);font-size:.9rem}.error-alert{background-color:#fef2f2;border:1px solid #fecaca;color:#991b1b;padding:.75rem;border-radius:.5rem;margin-bottom:1.5rem}.error-alert ul{margin:0;padding-left:1.25rem}.success-alert{background-color:#f0fdf4;border:1px solid #bbf7d0;color:#166534;padding:.75rem;border-radius:.5rem;margin-bottom:1.5rem}html.dark .login-card{background:#1e293b;box-shadow:0 20px 60px rgba(0,0,0,.5)}html.dark .login-title{color:#f1f5f9}html.dark .login-subtitle{color:#cbd5e1}html.dark .form-label{color:#f1f5f9}html.dark .form-input{background:#0f172a;border-color:#334155;color:#f1f5f9}html.dark .form-input:focus{border-color:var(--violet-600);box-shadow:0 0 0 3px rgba(var(--violet-rgb),.1)}html.dark .remember-me label{color:#cbd5e1}/* MR-46: dark-mode login button used color:#050507 (near-black text) on a
   var(--violet-600) violet bg. Hover lightened the bg to var(--violet-300), dropping the
   already-marginal text/bg contrast far enough that the button label
   visually "disappeared" — the bug logged in MR-46. Drop the dark text
   override and pin both states to white so contrast stays high. */
html.dark .login-button{background:var(--violet-600);color:#fff}html.dark .login-button:hover{background:var(--violet-300);color:#fff}html.dark .login-footer{border-top-color:#334155}html.dark .login-footer p{color:#cbd5e1}
/* MR-28: the remember-me checkbox/label gap was driven by `margin-right:.5rem`
   on the input, which is physical (right-side) spacing. In RTL the flex row
   visually reverses, putting the label to the left of the input, and the
   right-margin lands on the wrong side -- checkbox sits flush against the
   label. Switch the spacing onto the flex parent with a logical `gap` so it
   works in both LTR and RTL, and zero the legacy physical margin so it can't
   stack or fight back. */
.remember-me{gap:.5rem}
.remember-me input{margin-right:0;margin-left:0}