51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
/** @jsx jsx */
|
|
import { jsx } from "theme-ui"
|
|
|
|
type ProjectCardProps = {
|
|
link: string
|
|
title: string
|
|
children: React.ReactNode
|
|
bg: string
|
|
}
|
|
|
|
const ProjectCard = ({ link, title, children, bg }: ProjectCardProps) => (
|
|
<a
|
|
href={link}
|
|
target="_blank"
|
|
rel="noreferrer noopener"
|
|
sx={{
|
|
width: `100%`,
|
|
boxShadow: `lg`,
|
|
position: `relative`,
|
|
textDecoration: `none`,
|
|
borderRadius: `lg`,
|
|
px: 4,
|
|
py: [4, 5],
|
|
color: `white`,
|
|
background: bg || `none`,
|
|
transition: `all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) !important`,
|
|
"&:hover": {
|
|
color: `white !important`,
|
|
transform: `translateY(-5px)`,
|
|
boxShadow: `xl`,
|
|
},
|
|
}}
|
|
>
|
|
<div sx={{ opacity: 0.85, textShadow: `0 2px 10px rgba(0, 0, 0, 0.3)` }}>{children}</div>
|
|
<div
|
|
sx={{
|
|
textTransform: `uppercase`,
|
|
letterSpacing: `wide`,
|
|
pt: 4,
|
|
fontSize: [4, 5],
|
|
fontWeight: `medium`,
|
|
lineHeight: 1,
|
|
}}
|
|
>
|
|
{title}
|
|
</div>
|
|
</a>
|
|
)
|
|
|
|
export default ProjectCard
|