@@ -39,19 +39,20 @@ def numbers_pattern(
3939 class_name: Additional CSS classes
4040 """
4141 position_class = "left-0" if side == "left" else "right-0"
42- light_dark_path = rx .color_mode_cond ("light" , "dark" )
43-
44- src = f"/landing/patterns/{ light_dark_path } /numbers-pattern.avif"
42+ light_src = "/landing/patterns/light/numbers-pattern.avif"
43+ dark_src = "/landing/patterns/dark/numbers-pattern.avif"
4544
4645 # Determine if we need to flip: right side XOR reverse
4746 # - right side normally flips
4847 # - reverse inverts the flip behavior
4948 is_flipped = (side == "right" ) != reverse
5049
5150 # Background image style
52- image_style = {"opacity" : rx .color_mode_cond ("1" , "0.3" )}
51+ light_image_style = {"opacity" : "1" }
52+ dark_image_style = {"opacity" : "0.3" }
5353 if is_flipped :
54- image_style |= {"transform" : "scaleX(-1)" }
54+ light_image_style |= {"transform" : "scaleX(-1)" }
55+ dark_image_style |= {"transform" : "scaleX(-1)" }
5556
5657 # Gradient masks
5758 vertical_gradient = "linear-gradient(360deg, rgba(0, 0, 0, 0) 0%, #000000 12%, #000000 88%, rgba(0, 0, 0, 0) 100%)"
@@ -70,34 +71,58 @@ def numbers_pattern(
7071 container_mask_style ["transform" ] = "scaleX(-1)"
7172
7273 # Image mask style for the ellipses layer
73- ellipses_mask_style = {
74- "mask_image" : f"url({ src } )" ,
74+ ellipses_mask_light_style = {
75+ "mask_image" : f"url({ light_src } )" ,
76+ "mask_size" : "cover" ,
77+ "mask_repeat" : "no-repeat" ,
78+ "mask_position" : "center" ,
79+ "webkit_mask_image" : f"url({ light_src } )" ,
80+ "webkit_mask_size" : "cover" ,
81+ "webkit_mask_repeat" : "no-repeat" ,
82+ "webkit_mask_position" : "center" ,
83+ }
84+ ellipses_mask_dark_style = {
85+ "mask_image" : f"url({ dark_src } )" ,
7586 "mask_size" : "cover" ,
7687 "mask_repeat" : "no-repeat" ,
7788 "mask_position" : "center" ,
78- "webkit_mask_image" : f"url({ src } )" ,
89+ "webkit_mask_image" : f"url({ dark_src } )" ,
7990 "webkit_mask_size" : "cover" ,
8091 "webkit_mask_repeat" : "no-repeat" ,
8192 "webkit_mask_position" : "center" ,
8293 }
8394 if is_flipped :
84- ellipses_mask_style ["transform" ] = "scaleX(-1)"
95+ ellipses_mask_light_style ["transform" ] = "scaleX(-1)"
96+ ellipses_mask_dark_style ["transform" ] = "scaleX(-1)"
8597
8698 return rx .el .div (
8799 # Layer 1: Background pattern image
88100 rx .image (
89- src = src ,
90- class_name = "pointer-events-none w-full h-full absolute inset-0 object-cover" ,
91- style = image_style ,
101+ src = light_src ,
102+ class_name = "pointer-events-none w-full h-full absolute inset-0 object-cover dark:hidden" ,
103+ style = light_image_style ,
104+ alt = "Numbers pattern" ,
105+ loading = "eager" ,
106+ custom_attrs = {"fetchPriority" : "high" },
107+ ),
108+ rx .image (
109+ src = dark_src ,
110+ class_name = "pointer-events-none w-full h-full absolute inset-0 object-cover hidden dark:block" ,
111+ style = dark_image_style ,
92112 alt = "Numbers pattern" ,
93113 loading = "eager" ,
94114 custom_attrs = {"fetchPriority" : "high" },
95115 ),
96116 # Layer 2: Masked animated ellipses
97117 rx .el .div (
98118 _ellipses (side = side , reverse_animation = reverse ),
99- class_name = "absolute inset-0 w-full h-full max-lg:hidden" ,
100- style = ellipses_mask_style ,
119+ class_name = "absolute inset-0 w-full h-full max-lg:hidden dark:hidden" ,
120+ style = ellipses_mask_light_style ,
121+ ),
122+ rx .el .div (
123+ _ellipses (side = side , reverse_animation = reverse ),
124+ class_name = "absolute inset-0 w-full h-full max-lg:hidden hidden dark:block" ,
125+ style = ellipses_mask_dark_style ,
101126 ),
102127 class_name = ui .cn (
103128 f"absolute { position_class } pointer-events-none z-[-1] lg:w-[234px] w-[180px] h-full bottom-0" ,
0 commit comments