/* ============================================================ CONFIRM EMAIL PAGE — Step 9 + Step 10 (a11y & responsive) Standalone token verification page with animated background ============================================================ */ .ce-page { min-height: 100vh; display: flex; flex-direction: column; background-color: var(--background-color); color: var(--text-primary); font-family: var(--font-sans); overflow: hidden; position: relative; } /* ── Animated background (mirrors signup) ── */ .ce-bg { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; } .ce-orb { position: absolute; border-radius: 50%; filter: blur(90px); opacity: 0.5; } .ce-orb-1 { width: 520px; height: 520px; background: radial-gradient(circle, rgba(99, 102, 241, 0.4) 0%, transparent 70%); top: -12%; left: -6%; animation: ceOrb1 18s ease-in-out infinite; } .ce-orb-2 { width: 400px; height: 400px; background: radial-gradient(circle, rgba(168, 85, 247, 0.3) 0%, transparent 70%); bottom: -8%; right: -5%; animation: ceOrb2 22s ease-in-out infinite; } .ce-orb-3 { width: 280px; height: 280px; background: radial-gradient(circle, rgba(6, 182, 212, 0.2) 0%, transparent 70%); top: 50%; left: 55%; animation: ceOrb3 26s ease-in-out infinite; } @keyframes ceOrb1 { 0%, 100% { transform: translate(0, 0) scale(1); } 40% { transform: translate(30px, 40px) scale(1.08); } 70% { transform: translate(-20px, -25px) scale(0.96); } } @keyframes ceOrb2 { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(-40px, -30px) scale(1.06); } } @keyframes ceOrb3 { 0%, 100% { transform: translate(0, 0); } 50% { transform: translate(25px, -35px); } } .ce-grid-overlay { position: absolute; inset: 0; background-image: radial-gradient(circle, rgba(255, 255, 255, 0.055) 1px, transparent 1px); background-size: 32px 32px; mask-image: radial-gradient(ellipse 85% 85% at 50% 50%, black 40%, transparent 100%); -webkit-mask-image: radial-gradient(ellipse 85% 85% at 50% 50%, black 40%, transparent 100%); } /* ── Centering wrapper ── */ .ce-center { position: relative; z-index: 1; min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 2rem; } /* ── Card ── */ .ce-card { background: var(--surface-color); border: 1px solid var(--border-color); border-radius: 24px; padding: 3rem 2.5rem; max-width: 440px; width: 100%; display: flex; flex-direction: column; align-items: center; gap: 1.25rem; text-align: center; box-shadow: var(--shadow-lg); animation: ceCardIn 0.5s cubic-bezier(0.23, 1, 0.32, 1) forwards; } @keyframes ceCardIn { from { opacity: 0; transform: translateY(28px) scale(0.97); } to { opacity: 1; transform: translateY(0) scale(1); } } /* ── Icon wrapper ── */ .ce-icon-wrap { width: 80px; height: 80px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .ce-icon-loading { background: rgba(99, 102, 241, 0.1); border: 1px solid rgba(99, 102, 241, 0.25); color: #818cf8; animation: ceRing 2.4s ease-in-out infinite; } .ce-icon-success { background: rgba(16, 185, 129, 0.1); border: 1px solid rgba(16, 185, 129, 0.25); color: #10b981; animation: cePopIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } .ce-icon-already { background: rgba(99, 102, 241, 0.1); border: 1px solid rgba(99, 102, 241, 0.25); color: #818cf8; animation: cePopIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } .ce-icon-error { background: rgba(248, 113, 113, 0.1); border: 1px solid rgba(248, 113, 113, 0.25); color: #f87171; animation: cePopIn 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } @keyframes ceRing { 0%, 100% { box-shadow: 0 0 0 0px rgba(99, 102, 241, 0.3); } 50% { box-shadow: 0 0 0 12px rgba(99, 102, 241, 0); } } @keyframes cePopIn { from { transform: scale(0); opacity: 0; } to { transform: scale(1); opacity: 1; } } /* Spinning loader */ .ce-spin { animation: ceSpin 1s linear infinite; } @keyframes ceSpin { to { transform: rotate(360deg); } } /* ── Typography ── */ .ce-title { font-size: 1.65rem; font-weight: 900; letter-spacing: -0.8px; color: var(--text-primary); } .ce-title:focus { outline: none; } .ce-body { font-size: 0.9rem; line-height: 1.7; color: var(--text-secondary); max-width: 340px; } /* ── Action buttons ── */ .ce-actions { display: flex; flex-direction: column; gap: 0.65rem; width: 100%; margin-top: 0.25rem; } .ce-action-btn { width: 100%; padding: 0.9rem; border-radius: var(--radius-md, 10px); font-size: 1rem; font-weight: 700; color: #fff; background: linear-gradient(135deg, var(--accent-1, #6366f1), var(--accent-2, #a855f7)); border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 0.6rem; text-decoration: none; transition: transform 0.2s, box-shadow 0.2s, opacity 0.2s; box-shadow: var(--glow-sm, 0 0 12px rgba(99, 102, 241, 0.45)); } .ce-action-btn:hover { transform: translateY(-2px); box-shadow: var(--glow-md, 0 0 30px rgba(99, 102, 241, 0.35)); } .ce-action-btn:focus-visible { outline: 2px solid #fff; outline-offset: 2px; } .ce-btn-secondary { background: rgba(255, 255, 255, 0.06); border: 1px solid var(--border-color); box-shadow: none; color: var(--text-secondary); } .ce-btn-secondary:hover { background: rgba(255, 255, 255, 0.1); color: var(--text-primary); box-shadow: none; transform: translateY(-1px); } .ce-btn-secondary:focus-visible { outline: 2px solid var(--accent-1, #6366f1); outline-offset: 2px; } /* ── Responsive ── */ @media (max-width: 480px) { .ce-center { padding: 1.5rem 1rem; } .ce-card { padding: 2.25rem 1.5rem; border-radius: 20px; } .ce-title { font-size: 1.4rem; } .ce-icon-wrap { width: 68px; height: 68px; } .ce-icon-wrap svg { width: 30px; height: 30px; } .ce-action-btn { padding: 0.8rem; font-size: 0.925rem; } } @media (max-width: 360px) { .ce-center { padding: 1rem 0.75rem; } .ce-card { padding: 2rem 1.25rem; border-radius: 18px; } .ce-title { font-size: 1.25rem; } .ce-body { font-size: 0.85rem; } }