This commit is contained in:
parent
4ca1a4d497
commit
6bdb2204b3
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -24,8 +24,6 @@
|
|||
|
||||
# misc
|
||||
.DS_Store
|
||||
.deploy-log.txt
|
||||
.cursor-git-deploy.sh
|
||||
*.pem
|
||||
.env*.local
|
||||
.env
|
||||
|
|
|
|||
|
|
@ -206,43 +206,6 @@
|
|||
.marquee-winners {
|
||||
animation: marquee 55s linear infinite;
|
||||
}
|
||||
.marquee-winners:hover {
|
||||
animation-play-state: paused;
|
||||
}
|
||||
.marquee-winners-paused {
|
||||
animation-play-state: paused !important;
|
||||
}
|
||||
|
||||
@keyframes winner-impact-pulse {
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.06);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes winner-impact-glow {
|
||||
0%,
|
||||
100% {
|
||||
color: #0d3d26;
|
||||
text-shadow: 0 0 0 transparent;
|
||||
}
|
||||
50% {
|
||||
color: #1a5c38;
|
||||
text-shadow: 0 0 14px rgba(74, 173, 110, 0.45);
|
||||
}
|
||||
}
|
||||
|
||||
.winner-impact-value {
|
||||
display: block;
|
||||
max-width: 50%;
|
||||
margin-inline: auto;
|
||||
animation:
|
||||
winner-impact-pulse 2.4s ease-in-out infinite,
|
||||
winner-impact-glow 2.4s ease-in-out infinite;
|
||||
}
|
||||
@keyframes marquee {
|
||||
from {
|
||||
transform: translateX(0);
|
||||
|
|
@ -256,9 +219,6 @@
|
|||
.marquee-winners {
|
||||
animation: none;
|
||||
}
|
||||
.winner-impact-value {
|
||||
animation: none;
|
||||
}
|
||||
.backdrop-bloom-a,
|
||||
.backdrop-bloom-b,
|
||||
.valley-pan-slow,
|
||||
|
|
@ -482,23 +442,23 @@
|
|||
/* ─── mainwhite.svg: hero (green tint) · footer (white on green) ─── */
|
||||
.topo-tone-light .topo-pattern-asset {
|
||||
mix-blend-mode: multiply;
|
||||
filter: sepia(0.35) saturate(2.6) hue-rotate(92deg) brightness(0.92) contrast(1.2);
|
||||
filter: sepia(0.35) saturate(2.2) hue-rotate(92deg) brightness(0.96) contrast(0.92);
|
||||
}
|
||||
|
||||
/* Hero — gentle fill in/out on contour lines (no pan, shake, or slide) */
|
||||
/* Hero — soft topography lines, gentle opacity breathe only */
|
||||
.rift-hero-topo .topo-hero-pattern-img {
|
||||
opacity: 0.42;
|
||||
opacity: 0.26;
|
||||
mix-blend-mode: multiply;
|
||||
filter: sepia(0.35) saturate(2.6) hue-rotate(92deg) brightness(0.92) contrast(1.2);
|
||||
filter: sepia(0.3) saturate(1.9) hue-rotate(92deg) brightness(0.98) contrast(0.88);
|
||||
transform: scale(1.06);
|
||||
object-position: 50% 50%;
|
||||
animation: topo-hero-fill-breathe 9s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.rift-hero-topo .topo-hero-water-flow-img {
|
||||
opacity: 0.2;
|
||||
opacity: 0.12;
|
||||
mix-blend-mode: multiply;
|
||||
filter: sepia(0.35) saturate(2.8) hue-rotate(92deg) brightness(1.05) contrast(1.15);
|
||||
filter: sepia(0.3) saturate(1.8) hue-rotate(92deg) brightness(1.02) contrast(0.85);
|
||||
transform: scale(1.06);
|
||||
object-position: 50% 50%;
|
||||
animation: topo-hero-fill-pulse 9s ease-in-out infinite;
|
||||
|
|
@ -520,12 +480,12 @@
|
|||
.topo-hero-channel-glow {
|
||||
background: radial-gradient(
|
||||
ellipse 70% 50% at 50% 58%,
|
||||
rgba(120, 200, 160, 0.2) 0%,
|
||||
rgba(45, 122, 82, 0.08) 50%,
|
||||
rgba(120, 200, 160, 0.1) 0%,
|
||||
rgba(45, 122, 82, 0.04) 50%,
|
||||
transparent 75%
|
||||
);
|
||||
mix-blend-mode: soft-light;
|
||||
opacity: 0.55;
|
||||
opacity: 0.34;
|
||||
animation: topo-hero-glow-breathe 13s ease-in-out infinite;
|
||||
}
|
||||
|
||||
|
|
@ -542,62 +502,66 @@
|
|||
}
|
||||
|
||||
.rift-hero-topo--hover .topo-hero-water-flow-img {
|
||||
opacity: 0.3;
|
||||
opacity: 0.18;
|
||||
}
|
||||
|
||||
.rift-hero-topo--hover .topo-hero-water-shimmer {
|
||||
opacity: 0.62;
|
||||
opacity: 0.42;
|
||||
}
|
||||
|
||||
.rift-hero-topo--hover .topo-hero-channel-glow {
|
||||
opacity: 0.68;
|
||||
opacity: 0.44;
|
||||
}
|
||||
|
||||
.rift-hero-topo--hover .topo-hero-water-spotlight {
|
||||
opacity: 0.85;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.rift-hero-topo--hover .topo-hero-pattern-img {
|
||||
opacity: 0.5;
|
||||
opacity: 0.32;
|
||||
}
|
||||
|
||||
[data-section-hero] .topo-curvy-extend path {
|
||||
stroke-opacity: 0.18 !important;
|
||||
}
|
||||
|
||||
@keyframes topo-hero-fill-breathe {
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.36;
|
||||
opacity: 0.22;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.5;
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes topo-hero-fill-pulse {
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.14;
|
||||
opacity: 0.08;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.28;
|
||||
opacity: 0.16;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes topo-hero-shimmer-breathe {
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.38;
|
||||
opacity: 0.26;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.58;
|
||||
opacity: 0.38;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes topo-hero-glow-breathe {
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.42;
|
||||
opacity: 0.28;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.62;
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1163,7 +1127,7 @@
|
|||
.rift-pulse-animate,
|
||||
.rift-hero-topo .topo-hero-pattern-img {
|
||||
animation: none !important;
|
||||
opacity: 0.44 !important;
|
||||
opacity: 0.28 !important;
|
||||
}
|
||||
|
||||
.rift-hero-topo .topo-hero-water-flow-img,
|
||||
|
|
|
|||
|
|
@ -31,13 +31,13 @@ export function FooterTopoPattern({ className }: Props) {
|
|||
key={i}
|
||||
d={cell.d}
|
||||
fill={cell.fill}
|
||||
stroke="rgba(255,255,255,0.09)"
|
||||
strokeWidth={0.14}
|
||||
stroke="rgba(255,255,255,0.05)"
|
||||
strokeWidth={0.12}
|
||||
/>
|
||||
))}
|
||||
</svg>
|
||||
<div
|
||||
className="absolute inset-0 bg-gradient-to-t from-[#0d3d26]/35 via-transparent to-transparent"
|
||||
className="absolute inset-0 bg-gradient-to-t from-[#0d3d26]/18 via-transparent to-transparent"
|
||||
aria-hidden
|
||||
/>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ import { cn } from "@/lib/utils";
|
|||
const MESH_W = 140;
|
||||
const MESH_H = 100;
|
||||
|
||||
const ROCK_TONES = ["#0d3d26", "#1a5c38", "#246b45", "#2f7a52", "#3d9a66", "#52b87a"] as const;
|
||||
const GROUT = "rgba(8, 38, 22, 0.42)";
|
||||
/** Narrow green range — low contrast between “stones” on section backgrounds */
|
||||
const ROCK_TONES = ["#1a5c38", "#1d5f3c", "#216342", "#246845", "#286a48", "#2b6e4b"] as const;
|
||||
const GROUT = "rgba(8, 38, 22, 0.2)";
|
||||
|
||||
const ROCK_MESH = buildVoronoiMesh(42, MESH_W, MESH_H, 0x475256, {
|
||||
siteGenerator: "poisson",
|
||||
|
|
@ -29,9 +30,9 @@ function rockFill(cell: VoronoiCell, index: number) {
|
|||
const cx = cell.points.reduce((s, p) => s + p[0], 0) / cell.points.length;
|
||||
const cy = cell.points.reduce((s, p) => s + p[1], 0) / cell.points.length;
|
||||
const yNorm = cy / MESH_H;
|
||||
const gradient = mixHex("#4aad6e", "#0d3d26", Math.min(1, yNorm * 0.85 + 0.08));
|
||||
const gradient = mixHex("#2a6f4a", "#1a5c38", Math.min(1, yNorm * 0.45 + 0.25));
|
||||
const tone = ROCK_TONES[(index * 11 + Math.floor(cx * 0.55)) % ROCK_TONES.length];
|
||||
return mixHex(gradient, tone, 0.54);
|
||||
return mixHex(gradient, tone, 0.38);
|
||||
}
|
||||
|
||||
type Props = {
|
||||
|
|
@ -82,12 +83,12 @@ export function RoundedRockVoronoiBackground({
|
|||
<div className="absolute inset-0 opacity-[0.18] grain" aria-hidden />
|
||||
{gradient && (
|
||||
<div
|
||||
className="absolute inset-0 bg-gradient-to-b from-[#4aad6e]/14 via-transparent to-[#0d3d26]/18"
|
||||
className="absolute inset-0 bg-gradient-to-b from-[#2a6f4a]/8 via-transparent to-[#0d3d26]/10"
|
||||
aria-hidden
|
||||
/>
|
||||
)}
|
||||
<div
|
||||
className="absolute inset-0 bg-[radial-gradient(ellipse_85%_60%_at_20%_15%,rgba(13,61,38,0.2),transparent_65%)]"
|
||||
className="absolute inset-0 bg-[radial-gradient(ellipse_85%_60%_at_20%_15%,rgba(13,61,38,0.1),transparent_65%)]"
|
||||
aria-hidden
|
||||
/>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
/** GRV greens for wavy interlocking footer tessellation. */
|
||||
export const WAVY_TESS_PALETTE = [
|
||||
"#0d3d26",
|
||||
"#1a5c38",
|
||||
"#256b45",
|
||||
"#2d7a52",
|
||||
"#3d9a66",
|
||||
"#5cb87a",
|
||||
"#1d5f3c",
|
||||
"#216342",
|
||||
"#246845",
|
||||
"#286a48",
|
||||
"#2b6e4b",
|
||||
] as const;
|
||||
|
||||
export type WavyTessCell = { d: string; fill: string };
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user