.login-page { display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 24px; } .login-card { background: var(--card-bg); border: 1px solid var(--border); border-radius: 12px; padding: 40px 32px; width: 100%; max-width: 400px; display: flex; flex-direction: column; gap: 20px; position: relative; } .bsky-app-link { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px; border: 1px solid var(--border); border-radius: 10px; background: none; color: var(--text); font-size: 13px; text-decoration: none; cursor: pointer; transition: border-color 0.15s, color 0.15s; } .bsky-app-link:hover { border-color: #1185fe; color: #1185fe; } .login-card h1 { font-size: 28px; margin: 0; text-align: center; color: var(--text-h); display: flex; align-items: center; justify-content: center; gap: 8px; } .login-card h1 svg, .login-card h1 .login-brand-icon { width: 28px; height: 28px; font-size: 28px; } .login-brand-icon { flex-shrink: 0; } .login-card p.subtitle { text-align: center; color: var(--text); margin: 0; font-size: 14px; } .login-card label { display: flex; flex-direction: column; gap: 6px; font-size: 14px; font-weight: 500; color: var(--text-h); } .login-card input { padding: 10px 12px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg); color: var(--text-h); font-size: 15px; outline: none; transition: border-color 0.2s; } .login-card input:focus { border-color: var(--accent); } .login-card input::placeholder { color: var(--text); opacity: 0.6; } .login-card .error-message { color: #e53e3e; font-size: 13px; text-align: center; margin: 0; } .login-card button[type='submit'] { padding: 12px; border-radius: 8px; border: none; background: var(--accent); color: #fff; font-size: 15px; font-weight: 600; cursor: pointer; transition: opacity 0.2s; } .login-card button[type='submit']:hover { opacity: 0.9; } .login-card button[type='submit']:disabled { opacity: 0.5; cursor: not-allowed; } .login-card .pds-hint { font-size: 12px; color: var(--text); opacity: 0.7; text-align: center; margin: 0; } .login-card .oauth-info { font-size: 13px; color: var(--text); opacity: 0.8; line-height: 1.5; text-align: center; margin: 0; padding: 8px 0; } .session-error-banner { background: #fef3c7; border: 1px solid #f59e0b; border-radius: 8px; padding: 12px 16px; display: flex; flex-direction: column; gap: 8px; } .session-error-banner p { margin: 0; font-size: 13px; color: #92400e; line-height: 1.4; } .session-error-banner .dismiss-btn { align-self: flex-end; background: none; border: 1px solid #d97706; border-radius: 4px; color: #92400e; font-size: 12px; padding: 4px 10px; cursor: pointer; } .session-error-banner .dismiss-btn:hover { background: #fde68a; } .account-list { display: flex; flex-direction: column; gap: 8px; } .account-tile { display: flex; align-items: center; border: 1px solid var(--border); border-radius: 10px; overflow: hidden; transition: border-color 0.15s; } .account-tile:hover { border-color: var(--accent); } .account-tile-main { flex: 1; display: flex; align-items: center; gap: 12px; padding: 10px 12px; background: none; border: none; cursor: pointer; color: inherit; text-align: left; min-width: 0; } .account-tile-main:disabled { opacity: 0.6; cursor: wait; } .account-tile-avatar { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex-shrink: 0; } .account-tile-avatar-placeholder { width: 40px; height: 40px; border-radius: 50%; background: var(--accent); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 18px; font-weight: 700; flex-shrink: 0; } .account-tile-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; } .account-tile-name { font-weight: 600; font-size: 14px; color: var(--text-h); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .account-tile-handle { font-size: 13px; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .account-tile-arrow { color: var(--text); opacity: 0.4; font-size: 14px; flex-shrink: 0; margin-left: auto; transition: opacity 0.15s; } .account-tile:hover .account-tile-arrow { opacity: 1; color: var(--accent); } .account-tile-remove { padding: 10px 12px; background: none; border: none; cursor: pointer; color: var(--text); opacity: 0; font-size: 14px; transition: opacity 0.15s, color 0.15s; flex-shrink: 0; } .account-tile:hover .account-tile-remove { opacity: 0.5; } .account-tile-remove:hover { opacity: 1 !important; color: #e53e3e; } .add-account-btn { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px; border: 1px dashed var(--border); border-radius: 10px; background: none; color: var(--text); font-size: 14px; cursor: pointer; transition: border-color 0.15s, color 0.15s; } .add-account-btn:hover { border-color: var(--accent); color: var(--accent); } .account-divider { display: flex; align-items: center; gap: 12px; color: var(--text); opacity: 0.5; font-size: 12px; } .account-divider::before, .account-divider::after { content: ''; flex: 1; height: 1px; background: var(--border); } [data-theme="dark"] .session-error-banner { background: #451a03; border-color: #92400e; } [data-theme="dark"] .session-error-banner p { color: #fbbf24; } [data-theme="dark"] .session-error-banner .dismiss-btn { color: #fbbf24; border-color: #92400e; } [data-theme="dark"] .session-error-banner .dismiss-btn:hover { background: #78350f; } /* ─── App password (test account) ─── */ .app-password-toggle-btn { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px; border: 1px solid var(--border); border-radius: 10px; background: none; color: var(--text); font-size: 13px; cursor: pointer; transition: border-color 0.15s, color 0.15s; } .app-password-toggle-btn:hover { border-color: var(--accent); color: var(--accent); } .app-password-form { display: flex; flex-direction: column; gap: 16px; } .app-password-info { font-size: 12px; color: var(--text); opacity: 0.7; line-height: 1.5; margin: 0; } .app-password-cancel-btn { padding: 8px; border-radius: 8px; border: 1px solid var(--border); background: none; color: var(--text); font-size: 13px; cursor: pointer; transition: border-color 0.15s; } .app-password-cancel-btn:hover { border-color: var(--text); }