@@ -100,36 +100,67 @@ pub fn ProjectCard(props: &ProjectCardProps) -> Html {
100100 _ => panic ! ( "Invalid slug: {}" , slug) ,
101101 } ;
102102
103+ let card_css = css ! (
104+ r#"
105+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
106+ border: 1px solid rgba(203, 213, 225, 0.1);
107+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
108+
109+ &:hover {
110+ transform: translateY(-8px);
111+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
112+ border-color: rgba(203, 213, 225, 0.2);
113+ }
114+ "#
115+ ) ;
116+
103117 html ! {
104- <div class={ String :: from ( "py-3 overflow-auto mx-2 " ) + size_css. get_class_name ( ) } >
118+ <div class={ classes! ( "py-3" , " overflow-auto" , " mx-2" , size_css) } >
105119 <Link <Route > to={ to_route} >
106- <div class={ String :: from ( "group h-auto relative mb-3 inline-block rounded-xl overflow-hidden " ) + hide_css. get_class_name ( ) } >
107- <div class="opacity-100 group-hover:opacity-30 transition-opacity duration-500" >
120+ <div class={ classes! ( "group" , " h-auto" , " relative" , " mb-4" , " inline-block" , " rounded-xl" , " overflow-hidden" , hide_css, card_css ) } >
121+ <div class="opacity-100 group-hover:opacity-20 transition-all duration-500" >
108122 <SafeHtml html={ image. clone( ) } />
109123 </div>
110- <div class={ String :: from( "font-semibold absolute inset-0 p-4 flex items-center text-center justify-center backdrop-blur-sm backdrop-contrast-40 backdrop-brightness-40 opacity-0 group-hover:opacity-70 transition-opacity duration-500 " ) + & color} >
111- { tagline. clone( ) }
124+ <div class={ String :: from( "font-semibold text-lg absolute inset-0 p-6 flex items-center text-center justify-center backdrop-blur-md backdrop-contrast-50 backdrop-brightness-50 opacity-0 group-hover:opacity-100 transition-all duration-500 " ) + & color} >
125+ <div class={ css!( r#"
126+ transform: translateY(10px);
127+ transition: transform 0.3s ease;
128+ .group:hover & {
129+ transform: translateY(0);
130+ }
131+ "# ) } >
132+ { tagline. clone( ) }
133+ </div>
112134 </div>
113135 <div class="absolute bottom-0 right-0 p-2 z-10 flex items-end justify-end" >
114- <div class="transform scale-50 translate-x-1/4 translate-y-1/3 p-1 rounded backdrop-blur bg-black/20 shadow-lg shadow-black/20" >
136+ <div class={ css!( r#"
137+ transform: scale(0.5) translateX(25%) translateY(33%);
138+ padding: 0.25rem;
139+ border-radius: 0.5rem;
140+ backdrop-filter: blur(8px);
141+ background-color: rgba(0, 0, 0, 0.3);
142+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.3);
143+ "# ) } >
115144 <BadgesStrip tags={ tags. clone( ) } scale={ 80 } />
116145 </div>
117146 </div>
118147 </div>
119- <br />
120- <span class="text-foreground-primary font-semibold" >
148+ <span class={ css!( r#"
149+ font-size: 1.125rem;
150+ font-weight: 600;
151+ color: #F1F5F9;
152+ transition: color 0.2s ease;
153+ &:hover {
154+ color: #60A5FA;
155+ }
156+ "# ) } >
121157 { title. clone( ) }
122158 </span>
123159 </Link <Route >>
124160 </div>
125161 }
126162}
127163
128- #[ derive( Debug , PartialEq , Properties ) ]
129- pub struct ProjectPostProps {
130- pub markdown : String ,
131- }
132-
133164#[ styled_component]
134165pub fn ProjectPost ( props : & ProjectCardProps ) -> Html {
135166 let theme = use_theme ( ) ;
0 commit comments