.recovery-modal { width: 32.5rem; max-width: 95%; background: var(--surface-2); border-radius: 1.75rem; padding: 3.75rem 3.5rem; color: var(--color-text); font-family: var(--font-body); position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1000; box-shadow: 0 0.25rem 1.25rem rgba(0, 0, 0, 0.12); } .recovery-modal__header { margin-bottom: 1.5rem; } .recovery-modal__badge { display: inline-flex; align-items: center; gap: 0.5rem; background: rgba(46, 232, 138, 0.1); border: 1px solid var(--green-40); color: var(--green); border-radius: 999px; padding: 0.45rem 0.8rem; font-size: 0.625rem; font-weight: 600; letter-spacing: 0.0625rem; text-transform: uppercase; } .recovery-modal__badge.success-badge { background: rgba(46, 232, 138, 0.1); color: var(--green); } .recovery-modal h2 { margin: 1rem 0 0; font-size: 1.75rem; font-weight: 700; font-family: var(--font-display); } .recovery-modal__description { margin: 0 0 1.5rem; color: var(--color-muted); line-height: 1.6; font-size: 0.95rem; } .recovery-input-group { margin-bottom: 1.125rem; } .recovery-input-group label { display: block; font-size: 0.625rem; color: var(--color-muted); margin-bottom: 0.375rem; letter-spacing: 0.0625rem; text-transform: uppercase; font-weight: 600; } .recovery-input-group input { width: 100%; background: var(--surface); border: 1px solid rgba(180, 180, 180, 0.2); color: var(--color-text); padding: 0.875rem 1rem; border-radius: 0.625rem; font-size: 0.95rem; font-family: var(--font-body); transition: all 150ms ease; box-sizing: border-box; } .recovery-input-group input:focus { outline: none; border-color: var(--green); background: var(--surface-2); box-shadow: 0 0 8px rgba(46, 232, 138, 0.2); } .recovery-input-group input::placeholder { color: var(--color-muted); opacity: 0.6; } .input-icon { position: relative; display: flex; align-items: center; } .input-icon input { padding-right: 2.5rem; } .input-icon .icon { position: absolute; right: 1rem; color: var(--color-muted); cursor: pointer; transition: color 150ms ease; } .input-icon:focus-within .icon { color: var(--green); } .recovery-code-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 0.75rem; margin-bottom: 1.5rem; } .recovery-code-input { width: 100%; aspect-ratio: 1; background: var(--surface); border: 2px solid rgba(180, 180, 180, 0.2); border-radius: 0.625rem; color: var(--color-text); font-size: 1.25rem; font-weight: 700; font-family: 'Courier New', monospace; text-align: center; transition: all 150ms ease; box-sizing: border-box; } .recovery-code-input:focus { outline: none; border-color: var(--green); background: var(--surface-2); box-shadow: 0 0 8px rgba(46, 232, 138, 0.2); } .recovery-code-input::placeholder { color: var(--color-muted); opacity: 0.5; } .password-checklist { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 1.5rem; padding: 0.75rem 1rem; background: rgba(46, 232, 138, 0.05); border: 1px solid var(--green-40); border-radius: 0.625rem; font-size: 0.85rem; } .password-checklist__ok { color: var(--green); font-weight: 500; } .password-checklist__warn { color: var(--color-muted); font-weight: 500; } .recovery-actions { display: flex; flex-direction: column; gap: 0.75rem; margin-top: 1.5rem; } .recovery-btn { width: 100%; padding: 0.875rem 1rem; font-size: 0.95rem; border-radius: 0.625rem; font-weight: 500; } .error-text { color: var(--color-danger); font-size: 0.875rem; margin-bottom: 1rem; } .error-text--animated { animation: fadeInUp 0.4s ease-out forwards; } @keyframes fadeInUp { from { opacity: 0; transform: translateY(0.5rem); } to { opacity: 1; transform: translateY(0); } } .loader-icon-animation { animation: spin 3s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* Light theme overrides */ html[data-theme='light'] .recovery-modal__description { color: var(--color-muted); } html[data-theme='light'] .recovery-input-group label { color: var(--color-muted); } html[data-theme='light'] .recovery-input-group input::placeholder { color: var(--color-muted); } html[data-theme='light'] .input-icon .icon { color: var(--color-muted); }