@@ -8,6 +8,7 @@ type TubesBackgroundProps = {
88 children ?: ReactNode ;
99 className ?: string ;
1010 enableClickInteraction ?: boolean ;
11+ tone ?: "light" | "dark" ;
1112} ;
1213
1314type TubesApp = {
@@ -32,6 +33,7 @@ export function TubesBackground({
3233 children,
3334 className,
3435 enableClickInteraction = true ,
36+ tone = "light" ,
3537} : TubesBackgroundProps ) {
3638 const canvasRef = useRef < HTMLCanvasElement > ( null ) ;
3739 const appRef = useRef < TubesApp | null > ( null ) ;
@@ -93,25 +95,49 @@ export function TubesBackground({
9395 return (
9496 < div
9597 className = { cn (
96- "relative min-h-[620px] overflow-hidden bg-[#050608] text-white" ,
98+ tone === "dark"
99+ ? "relative min-h-[620px] overflow-hidden bg-[#050608] text-white"
100+ : "relative min-h-[620px] overflow-hidden bg-transparent text-foreground" ,
97101 className ,
98102 ) }
99103 onClick = { handleClick }
100104 >
101- < div className = "absolute inset-0 bg-[radial-gradient(circle_at_25%_20%,rgba(6,182,212,0.28),transparent_32%),radial-gradient(circle_at_76%_12%,rgba(249,115,22,0.2),transparent_28%),linear-gradient(135deg,#050608_0%,#0b1517_54%,#11100a_100%)]" />
102- < div className = "absolute inset-0 opacity-45 [background-image:linear-gradient(rgba(255,255,255,0.08)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.08)_1px,transparent_1px)] [background-size:72px_72px]" />
105+ < div
106+ className = { cn (
107+ "absolute inset-0" ,
108+ tone === "dark"
109+ ? "bg-[radial-gradient(circle_at_25%_20%,rgba(6,182,212,0.28),transparent_32%),radial-gradient(circle_at_76%_12%,rgba(249,115,22,0.2),transparent_28%),linear-gradient(135deg,#050608_0%,#0b1517_54%,#11100a_100%)]"
110+ : "bg-[radial-gradient(circle_at_28%_24%,rgba(6,182,212,0.22),transparent_34%),radial-gradient(circle_at_76%_18%,rgba(249,115,22,0.16),transparent_30%),linear-gradient(135deg,rgba(255,255,255,0.86),rgba(236,254,255,0.48),rgba(255,247,237,0.36))]" ,
111+ ) }
112+ />
113+ < div
114+ className = { cn (
115+ "absolute inset-0 [background-size:72px_72px]" ,
116+ tone === "dark"
117+ ? "opacity-45 [background-image:linear-gradient(rgba(255,255,255,0.08)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.08)_1px,transparent_1px)]"
118+ : "opacity-55 [background-image:linear-gradient(rgba(15,23,42,0.06)_1px,transparent_1px),linear-gradient(90deg,rgba(15,23,42,0.06)_1px,transparent_1px)]" ,
119+ ) }
120+ />
103121 { ! prefersReducedMotion ? (
104122 < canvas
105123 ref = { canvasRef }
106124 aria-hidden = "true"
107125 className = { cn (
108126 "absolute inset-0 block h-full w-full transition-opacity duration-700" ,
109- isLoaded ? "opacity-90" : "opacity-0" ,
127+ tone === "light" ? "mix-blend-multiply saturate-125" : "" ,
128+ isLoaded ? ( tone === "dark" ? "opacity-90" : "opacity-45" ) : "opacity-0" ,
110129 ) }
111130 style = { { touchAction : "none" } }
112131 />
113132 ) : null }
114- < div className = "absolute inset-0 bg-[radial-gradient(circle_at_center,transparent_0%,rgba(5,6,8,0.18)_42%,rgba(5,6,8,0.74)_100%)]" />
133+ < div
134+ className = { cn (
135+ "absolute inset-0" ,
136+ tone === "dark"
137+ ? "bg-[radial-gradient(circle_at_center,transparent_0%,rgba(5,6,8,0.18)_42%,rgba(5,6,8,0.74)_100%)]"
138+ : "bg-[radial-gradient(circle_at_center,transparent_0%,rgba(250,250,246,0.12)_44%,rgba(250,250,246,0.82)_100%)]" ,
139+ ) }
140+ />
115141 < div className = "relative z-10 h-full pointer-events-none" > { children } </ div >
116142 </ div >
117143 ) ;
0 commit comments