Skip to content

Commit a83a36e

Browse files
committed
Add CtaCardSection
1 parent fed3feb commit a83a36e

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration"
2+
3+
import logoMask from "./logo-mask.webp"
4+
5+
export interface CtaCardSectionProps extends React.HTMLAttributes<HTMLElement> {
6+
title: string
7+
description: string
8+
children: React.ReactNode
9+
}
10+
11+
export function CtaCardSection({
12+
className,
13+
title: heading,
14+
description,
15+
children,
16+
...rest
17+
}: CtaCardSectionProps) {
18+
return (
19+
<div className="gql-conf-section">
20+
<section
21+
className="relative overflow-hidden bg-gradient-to-r from-pri-dark to-pri-base p-6 dark:from-pri-darker dark:to-pri-dark sm:p-16"
22+
{...rest}
23+
>
24+
<div className="relative z-10 flex flex-col gap-10 sm:items-start [@media(max-width:420px)]:text-center">
25+
<div className="flex flex-col gap-6">
26+
<h2 className="text-neu-0 typography-d1 dark:text-neu-900">
27+
{heading}
28+
</h2>
29+
<p className="max-w-[555px] text-pretty text-neu-50 typography-body-lg dark:text-neu-800">
30+
{description}
31+
</p>
32+
</div>
33+
34+
{children}
35+
</div>
36+
37+
<div
38+
role="presentation"
39+
// prettier-ignore
40+
className="
41+
pointer-events-none absolute
42+
sm:bottom-[-277px] inset-0 sm:left-1/3 xl:left-1/2 sm:top-[-107px] xl:right-[-391px]
43+
[--start:hsl(var(--color-sec-base))]
44+
[--end:hsl(var(--color-sec-lighter))]
45+
dark:[--start:hsl(var(--color-sec-dark))]
46+
dark:[--end:hsl(var(--color-sec-base))]
47+
48+
[mask-size:cover]
49+
max-sm:[mask-position:center] max-sm:opacity-50
50+
sm:[mask-size:1117px]
51+
"
52+
style={{
53+
maskImage: `url(${logoMask.src})`,
54+
maskRepeat: "no-repeat",
55+
}}
56+
>
57+
<StripesDecoration
58+
thin
59+
oddClassName="bg-[linear-gradient(180deg,var(--start)_0%,var(--end)_100%)]"
60+
/>
61+
</div>
62+
</section>
63+
</div>
64+
)
65+
}
289 KB
Loading

src/app/conf/2025/page.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import { RegisterSection } from "./components/register-section"
1212
import { Sponsors } from "./components/sponsors"
1313
import { GraphQLFoundationCard } from "./components/graphql-foundation-card"
1414
import { MarqueeRows } from "./components/marquee-rows"
15+
import { CtaCardSection } from "./components/cta-card-section"
16+
import { Button } from "../_design-system/button"
17+
import { GET_TICKETS_LINK } from "./links"
1518

1619
export const metadata: Metadata = {
1720
title: "GraphQLConf 2025 — Sept 08-10",
@@ -75,6 +78,14 @@ export default function Page() {
7578
<Venue />
7679
<GraphQLFoundationCard />
7780
<FAQ />
81+
<CtaCardSection
82+
title="Get your ticket"
83+
description="Join three transformative days of expert insights and innovation to shape the next decade of APIs!"
84+
>
85+
<Button variant="primary" href={GET_TICKETS_LINK}>
86+
Get tickets
87+
</Button>
88+
</CtaCardSection>
7889
<MarqueeRows
7990
variant="secondary"
8091
items={HERO_MARQUEE_ITEMS}

0 commit comments

Comments
 (0)