|
142 | 142 | color: var(--color-surface-100); |
143 | 143 | } |
144 | 144 | } |
| 145 | + |
| 146 | +/* ── Premium fade-in animations (Linear-style) ─────────── */ |
| 147 | + |
| 148 | +/* Hero stagger: plays immediately on load with delay offsets */ |
| 149 | +@keyframes fade-in-up { |
| 150 | + from { |
| 151 | + opacity: 0; |
| 152 | + filter: blur(6px); |
| 153 | + transform: translateY(24px); |
| 154 | + } |
| 155 | + to { |
| 156 | + opacity: 1; |
| 157 | + filter: blur(0px); |
| 158 | + transform: translateY(0); |
| 159 | + } |
| 160 | +} |
| 161 | + |
| 162 | +@keyframes fade-in-scale { |
| 163 | + from { |
| 164 | + opacity: 0; |
| 165 | + filter: blur(4px); |
| 166 | + transform: translateY(32px) scale(0.97); |
| 167 | + } |
| 168 | + to { |
| 169 | + opacity: 1; |
| 170 | + filter: blur(0px); |
| 171 | + transform: translateY(0) scale(1); |
| 172 | + } |
| 173 | +} |
| 174 | + |
| 175 | +/* Base class — elements start invisible */ |
| 176 | +.hero-animate { |
| 177 | + opacity: 0; |
| 178 | + animation: fade-in-up 0.9s cubic-bezier(0.16, 1, 0.3, 1) forwards; |
| 179 | +} |
| 180 | + |
| 181 | +.hero-animate-scale { |
| 182 | + opacity: 0; |
| 183 | + animation: fade-in-scale 1.1s cubic-bezier(0.16, 1, 0.3, 1) forwards; |
| 184 | +} |
| 185 | + |
| 186 | +/* Stagger delays */ |
| 187 | +.hero-delay-1 { animation-delay: 0ms; } |
| 188 | +.hero-delay-2 { animation-delay: 100ms; } |
| 189 | +.hero-delay-3 { animation-delay: 200ms; } |
| 190 | +.hero-delay-4 { animation-delay: 340ms; } |
| 191 | +.hero-delay-5 { animation-delay: 500ms; } |
| 192 | + |
| 193 | +/* Scroll-triggered: starts hidden, revealed by IntersectionObserver */ |
| 194 | +.scroll-fade { |
| 195 | + opacity: 0; |
| 196 | + transform: translateY(28px); |
| 197 | + filter: blur(4px); |
| 198 | + transition: |
| 199 | + opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), |
| 200 | + transform 0.8s cubic-bezier(0.16, 1, 0.3, 1), |
| 201 | + filter 0.8s cubic-bezier(0.16, 1, 0.3, 1); |
| 202 | +} |
| 203 | + |
| 204 | +.scroll-fade.is-visible { |
| 205 | + opacity: 1; |
| 206 | + transform: translateY(0); |
| 207 | + filter: blur(0px); |
| 208 | +} |
| 209 | + |
| 210 | +/* Staggered children inside a scroll-fade container */ |
| 211 | +.scroll-fade .stagger-child { |
| 212 | + opacity: 0; |
| 213 | + transform: translateY(20px); |
| 214 | + filter: blur(3px); |
| 215 | + transition: |
| 216 | + opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), |
| 217 | + transform 0.7s cubic-bezier(0.16, 1, 0.3, 1), |
| 218 | + filter 0.7s cubic-bezier(0.16, 1, 0.3, 1); |
| 219 | +} |
| 220 | + |
| 221 | +.scroll-fade.is-visible .stagger-child:nth-child(1) { opacity: 1; transform: translateY(0); filter: blur(0px); transition-delay: 0ms; } |
| 222 | +.scroll-fade.is-visible .stagger-child:nth-child(2) { opacity: 1; transform: translateY(0); filter: blur(0px); transition-delay: 80ms; } |
| 223 | +.scroll-fade.is-visible .stagger-child:nth-child(3) { opacity: 1; transform: translateY(0); filter: blur(0px); transition-delay: 160ms; } |
| 224 | +.scroll-fade.is-visible .stagger-child:nth-child(4) { opacity: 1; transform: translateY(0); filter: blur(0px); transition-delay: 240ms; } |
| 225 | +.scroll-fade.is-visible .stagger-child:nth-child(5) { opacity: 1; transform: translateY(0); filter: blur(0px); transition-delay: 320ms; } |
| 226 | +.scroll-fade.is-visible .stagger-child:nth-child(6) { opacity: 1; transform: translateY(0); filter: blur(0px); transition-delay: 400ms; } |
| 227 | + |
| 228 | +/* ── Bento card subtle border-glow (Supabase-style) ───── */ |
| 229 | +.bento-card { |
| 230 | + background: |
| 231 | + linear-gradient(180deg, rgba(255,255,255,0.02) 0%, rgba(255,255,255,0) 100%), |
| 232 | + #0c0c0f; |
| 233 | +} |
| 234 | + |
| 235 | +.bento-card::before { |
| 236 | + content: ''; |
| 237 | + position: absolute; |
| 238 | + inset: 0; |
| 239 | + border-radius: inherit; |
| 240 | + padding: 1px; |
| 241 | + background: linear-gradient( |
| 242 | + 180deg, |
| 243 | + rgba(255, 255, 255, 0.06) 0%, |
| 244 | + rgba(255, 255, 255, 0.02) 50%, |
| 245 | + rgba(255, 255, 255, 0) 100% |
| 246 | + ); |
| 247 | + -webkit-mask: |
| 248 | + linear-gradient(#fff 0 0) content-box, |
| 249 | + linear-gradient(#fff 0 0); |
| 250 | + -webkit-mask-composite: xor; |
| 251 | + mask-composite: exclude; |
| 252 | + pointer-events: none; |
| 253 | +} |
| 254 | + |
| 255 | +.bento-card:hover { |
| 256 | + background: |
| 257 | + linear-gradient(180deg, rgba(255,255,255,0.035) 0%, rgba(255,255,255,0.005) 100%), |
| 258 | + #0c0c0f; |
| 259 | +} |
| 260 | + |
| 261 | +/* ── How-it-works step number gradients ─────────────── */ |
| 262 | +.how-step-number { |
| 263 | + background: linear-gradient(135deg, var(--color-brand-300), var(--color-brand-500)); |
| 264 | + -webkit-background-clip: text; |
| 265 | + -webkit-text-fill-color: transparent; |
| 266 | + background-clip: text; |
| 267 | +} |
| 268 | + |
| 269 | +.how-step-number-accent { |
| 270 | + background: linear-gradient(135deg, var(--color-accent-300), var(--color-accent-500)); |
| 271 | + -webkit-background-clip: text; |
| 272 | + -webkit-text-fill-color: transparent; |
| 273 | + background-clip: text; |
| 274 | +} |
| 275 | + |
| 276 | +.how-step-number-success { |
| 277 | + background: linear-gradient(135deg, var(--color-success-300), var(--color-success-500)); |
| 278 | + -webkit-background-clip: text; |
| 279 | + -webkit-text-fill-color: transparent; |
| 280 | + background-clip: text; |
| 281 | +} |
0 commit comments