Skip to content

Commit 6f52538

Browse files
authored
new conf design — cta section (#1998)
* Unify paddings * Add CtaCardSection * Support thin stripes
1 parent b7ab00d commit 6f52538

File tree

6 files changed

+93
-6
lines changed

6 files changed

+93
-6
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+
}
Binary file not shown.

src/app/conf/2025/components/footer/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export function Footer({
2323
return (
2424
<footer className="gql-all-anchors-focusable relative !bg-neu-100 text-neu-900 typography-menu dark:!bg-neu-0 max-md:px-0 max-md:pt-0">
2525
<Stripes />
26-
<div className="flex flex-wrap justify-between gap-4 px-6 py-4 max-md:w-full lg:py-10">
26+
<div className="flex flex-wrap justify-between gap-4 p-4 max-md:w-full md:px-6 lg:py-10 2xl:px-10">
2727
{logo}
2828
<div className="flex gap-x-4 gap-y-2 typography-body-lg">
2929
<p className="flex items-center gap-2">
@@ -41,7 +41,7 @@ export function Footer({
4141
</li>
4242
))}
4343
</ul>
44-
<div className="relative flex justify-between gap-10 px-6 py-4 text-sm max-lg:flex-col">
44+
<div className="relative flex justify-between gap-10 p-4 text-sm max-lg:flex-col md:px-6 2xl:px-10">
4545
<div className="flex flex-col font-light max-md:gap-5">
4646
<p>
4747
Copyright © {new Date().getFullYear()} The GraphQL Foundation. All
@@ -139,7 +139,7 @@ function FooterBox({ box }: { box: FooterLink | FooterLink[] }) {
139139
href={href}
140140
title={disabled ? "Coming soon" : undefined}
141141
className={clsx(
142-
"gql-focus-visible relative block h-full p-6",
142+
"gql-focus-visible relative block h-full p-4 pb-8 md:p-6 2xl:px-10",
143143
disabled ? "pointer-events-none" : "underline-offset-4 hover:underline",
144144
)}
145145
tabIndex={disabled ? -1 : undefined}

src/app/conf/2025/components/navbar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function Navbar({ links, year }: NavbarProps): ReactElement {
4848
)}
4949
>
5050
<BackdropBlur />
51-
<div className="flex h-[var(--navbar-h)] items-center justify-between gap-5 px-4 lg:px-10">
51+
<div className="flex h-[var(--navbar-h)] items-center justify-between gap-5 px-4 md:px-6 2xl:px-10">
5252
<GraphQLConfLogoLink year={year} />
5353

5454
<div className="mr-auto flex h-full flex-col justify-center whitespace-pre border-x border-blk/60 px-4 typography-menu dark:border-white/80 max-xl:hidden">

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}

src/app/conf/_design-system/stripes-decoration.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
import clsx from "clsx"
22

3-
const maskEven =
3+
const maskEvenWide =
44
"repeating-linear-gradient(to right, transparent, transparent 12px, black 12px, black 24px)"
55

6-
const maskOdd =
6+
const maskOddWide =
77
"repeating-linear-gradient(to right, black, black 12px, transparent 12px, transparent 24px)"
88

9+
const maskEvenThin =
10+
"repeating-linear-gradient(to right, transparent, transparent 5.2px, black 5.2px, black 10.4px)"
11+
12+
const maskOddThin =
13+
"repeating-linear-gradient(to right, black, black 5.2px, transparent 5.2px, transparent 10.4px)"
14+
915
export interface StripesDecorationProps {
1016
evenClassName?: string
1117
oddClassName?: string
18+
thin?: boolean
1219
}
1320

1421
export function StripesDecoration(props: StripesDecorationProps) {
22+
const [maskEven, maskOdd] = props.thin
23+
? [maskEvenThin, maskOddThin]
24+
: [maskEvenWide, maskOddWide]
25+
1526
return (
1627
<>
1728
{props.evenClassName && (

0 commit comments

Comments
 (0)