SaarthiAI / static /css /splash.css
Urmila Saini
proto v5
af2a847
Raw
History Blame Contribute Delete
8.38 kB
/* ============================================================
SAARTHI AI — premium splash animation
White canvas, crimson gradients, glassmorphism, route trails.
Timeline is orchestrated by splash.js via .phase-* classes.
============================================================ */
#splash {
position: fixed; inset: 0; z-index: 6000;
background:
radial-gradient(900px 600px at 85% 10%, rgba(220, 20, 60, 0.06), transparent 60%),
radial-gradient(800px 600px at 10% 90%, rgba(220, 20, 60, 0.05), transparent 60%),
#FFFFFF;
overflow: hidden;
cursor: pointer;
opacity: 1;
transition: opacity 0.55s ease;
}
#splash.phase-out { opacity: 0; pointer-events: none; }
/* soft gradient blobs the glass card sits over */
.splash-blob {
position: absolute; border-radius: 50%; filter: blur(70px);
opacity: 0; transition: opacity 1.2s ease;
}
.splash-blob.b1 {
width: 420px; height: 420px; left: 50%; top: 38%;
transform: translate(-78%, -50%);
background: radial-gradient(circle, rgba(255, 77, 109, 0.35), transparent 65%);
}
.splash-blob.b2 {
width: 360px; height: 360px; left: 50%; top: 52%;
transform: translate(-12%, -50%);
background: radial-gradient(circle, rgba(142, 11, 38, 0.25), transparent 65%);
}
#splash.phase-text .splash-blob { opacity: 1; }
/* ---------- flight SVG layer ---------- */
#splash-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
#trail {
stroke: url(#trail-grad);
stroke-width: 5;
fill: none;
stroke-linecap: round;
filter: drop-shadow(0 2px 10px rgba(220, 20, 60, 0.35));
transition: opacity 0.6s ease;
}
#splash.phase-logo #trail {
opacity: 0.22; /* trail settles into a faint route line */
stroke-dasharray: 7 12 !important; /* morph from solid flight to dotted route */
transition: opacity 0.6s ease, stroke-dasharray 0.6s ease;
}
#plane {
filter: drop-shadow(0 0 14px rgba(255, 61, 96, 0.75))
drop-shadow(0 4px 8px rgba(122, 9, 32, 0.3));
transition: opacity 0.3s ease;
}
#splash.phase-logo #plane { opacity: 0; }
/* AI network: nodes + connection lines drawn behind the route */
.net { opacity: 0; transition: opacity 0.9s ease; }
#splash.phase-net .net { opacity: 1; }
.net-line {
stroke: rgba(220, 20, 60, 0.18); stroke-width: 1.6; fill: none;
stroke-dasharray: 240; stroke-dashoffset: 240;
}
#splash.phase-net .net-line { animation: net-draw 1.6s ease forwards; }
@keyframes net-draw { to { stroke-dashoffset: 0; } }
.net-node {
fill: #fff; stroke: #DC143C; stroke-width: 2.5;
transform-box: fill-box; transform-origin: center;
opacity: 0; scale: 0;
}
#splash.phase-net .net-node { animation: node-pop 0.5s cubic-bezier(0.2, 0.9, 0.3, 1.4) forwards; }
.net-node:nth-of-type(odd) { animation-delay: 0.25s !important; }
@keyframes node-pop { to { opacity: 1; scale: 1; } }
.net-ring {
fill: none; stroke: rgba(220, 20, 60, 0.3); stroke-width: 1.5;
transform-box: fill-box; transform-origin: center; opacity: 0;
}
#splash.phase-net .net-ring { animation: ring-pulse 2.2s ease-out infinite; }
@keyframes ring-pulse {
0% { opacity: 0.7; scale: 0.4; }
100% { opacity: 0; scale: 2.1; }
}
/* floating AI particles */
.splash-particle {
position: absolute; width: 6px; height: 6px; border-radius: 50%;
background: radial-gradient(circle at 35% 30%, #FF5C7C, #A60D2E);
opacity: 0;
}
#splash.phase-net .splash-particle {
animation: particle-float 3.2s ease-in-out var(--pd, 0s) infinite;
}
@keyframes particle-float {
0%, 100% { opacity: 0; transform: translateY(8px) scale(0.6); }
35% { opacity: 0.75; transform: translateY(-6px) scale(1); }
70% { opacity: 0.35; transform: translateY(-14px) scale(0.85); }
}
/* ---------- center title on glass ---------- */
.splash-center {
position: absolute; inset: 0;
display: flex; align-items: center; justify-content: center;
pointer-events: none;
}
.splash-glass {
padding: 34px 52px; border-radius: 28px; text-align: center;
background: rgba(255, 255, 255, 0.45);
border: 1px solid rgba(255, 255, 255, 0.7);
backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px);
box-shadow: 0 24px 70px rgba(122, 9, 32, 0.12), inset 0 1px 0 rgba(255, 255, 255, 0.9);
opacity: 0; transform: translateY(22px) scale(0.96);
transition: opacity 0.7s cubic-bezier(0.2, 0.8, 0.3, 1),
transform 0.7s cubic-bezier(0.2, 0.8, 0.3, 1);
}
#splash.phase-text .splash-glass { opacity: 1; transform: none; }
.splash-title {
font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
font-size: clamp(2.4rem, 7vw, 4rem); font-weight: 800;
letter-spacing: -0.02em; line-height: 1.05;
display: flex; gap: 0.28em; justify-content: center;
}
.splash-title .st-word {
display: inline-block;
background: linear-gradient(120deg, #16181D 20%, #DC143C 75%, #7A0920 100%);
-webkit-background-clip: text; background-clip: text; color: transparent;
opacity: 0; transform: translateY(105%);
filter: blur(6px);
}
.splash-title .st-ai {
background: linear-gradient(120deg, #FF4D6D 0%, #DC143C 50%, #7A0920 100%);
-webkit-background-clip: text; background-clip: text;
}
#splash.phase-text .st-word {
animation: word-rise 0.75s cubic-bezier(0.2, 0.8, 0.25, 1) forwards;
}
#splash.phase-text .st-word:nth-child(2) { animation-delay: 0.12s; }
@keyframes word-rise {
to { opacity: 1; transform: none; filter: blur(0); }
}
.splash-title-clip { overflow: hidden; display: inline-flex; gap: 0.28em; }
.splash-tag {
margin-top: 12px; font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
font-size: 0.95rem; font-weight: 600; letter-spacing: 0.28em;
text-transform: uppercase; color: #6B7280;
opacity: 0; transform: translateY(8px);
transition: opacity 0.7s ease 0.45s, transform 0.7s ease 0.45s,
letter-spacing 0.9s ease 0.45s;
}
#splash.phase-text .splash-tag { opacity: 1; transform: none; letter-spacing: 0.34em; }
/* ---------- logo morph (plane lands in the navbar) ---------- */
.splash-logochip {
position: absolute; top: 14px; left: 22px;
display: flex; align-items: center; gap: 10px;
background: #fff; padding: 8px 16px 8px 9px; border-radius: 14px;
box-shadow: 0 8px 30px rgba(22, 24, 29, 0.10);
font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
font-weight: 800; font-size: 1.05rem;
opacity: 0; transform: scale(0.4) translate(-12px, -12px);
transform-origin: top left;
}
.splash-logochip .lm {
width: 32px; height: 32px; border-radius: 10px;
display: flex; align-items: center; justify-content: center;
background: linear-gradient(135deg, #FF4D6D 0%, #DC143C 45%, #8E0B26 100%);
box-shadow: 0 4px 12px rgba(220, 20, 60, 0.4);
}
.splash-logochip .lm svg { width: 16px; height: 16px; }
.splash-logochip .lt {
background: linear-gradient(120deg, #16181D 30%, #DC143C 100%);
-webkit-background-clip: text; background-clip: text; color: transparent;
}
#splash.phase-logo .splash-logochip {
animation: chip-land 0.55s cubic-bezier(0.2, 0.9, 0.3, 1.35) forwards;
}
@keyframes chip-land {
0% { opacity: 0; transform: scale(0.4) translate(-12px, -12px); }
100% { opacity: 1; transform: none; }
}
/* ---------- AI activation pulse ---------- */
.splash-pulse {
position: absolute; top: 30px; left: 60px;
width: 18px; height: 18px; border-radius: 50%;
border: 2.5px solid rgba(220, 20, 60, 0.55);
opacity: 0; pointer-events: none;
}
#splash.phase-pulse .splash-pulse { animation: activation 0.9s cubic-bezier(0.1, 0.6, 0.3, 1) forwards; }
.splash-pulse.p2 { border-width: 1.5px; }
#splash.phase-pulse .splash-pulse.p2 { animation-delay: 0.18s; }
@keyframes activation {
0% { opacity: 0.9; transform: scale(1); }
100% { opacity: 0; transform: scale(70); }
}
/* ---------- skip ---------- */
.splash-skip {
position: absolute; bottom: 26px; right: 26px;
border: 1.5px solid #E9EAEE; background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(8px);
border-radius: 999px; padding: 9px 18px; cursor: pointer;
font-family: 'Plus Jakarta Sans', system-ui, sans-serif;
font-size: 0.76rem; font-weight: 700; color: #6B7280;
opacity: 0; animation: skip-in 0.6s ease 1.2s forwards;
}
.splash-skip:hover { color: #DC143C; border-color: #DC143C; }
@keyframes skip-in { to { opacity: 1; } }
@media (max-width: 820px) {
.splash-glass { padding: 26px 30px; margin: 0 18px; }
}
@media (prefers-reduced-motion: reduce) {
#splash { display: none; }
}