personal-rag-backend / frontend /src /pages /Auth /ConfirmEmail.css
github-actions[bot]
Deploying latest backend to Hugging Face
20256e7
Raw
History Blame Contribute Delete
6.45 kB
/* ============================================================
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;
}
}