|
1 |
| -import Link from "next/link" |
2 |
| -import { GraphQLLogo } from "@/icons" |
3 | 1 | import { StripesDecoration } from "@/app/conf/_design-system/stripes-decoration"
|
4 | 2 | import CheckIcon from "@/app/conf/_design-system/pixelarticons/check.svg?svgr"
|
5 | 3 | import { Button } from "@/app/conf/_design-system/button"
|
| 4 | +import { ImageLoaded } from "@/app/conf/2025/components/image-loaded" |
| 5 | + |
| 6 | +import logoBlurred from "./hero/logo-blurred.png" |
6 | 7 |
|
7 | 8 | export function Hero() {
|
8 | 9 | return (
|
9 |
| - <div className="relative min-h-screen bg-neu-0"> |
10 |
| - <HeroStripes /> |
11 |
| - |
12 |
| - <div className="flex max-w-4xl flex-col gap-10 py-24 pl-24 pr-10"> |
13 |
| - <h1 className="typography-h1 max-w-3xl text-neu-900"> |
14 |
| - The query language for modern APIs |
15 |
| - </h1> |
| 10 | + <div className="relative bg-neu-0"> |
| 11 | + <div className="gql-conf-container flex flex-col-reverse lg:grid lg:grid-cols-2"> |
| 12 | + <div className="flex max-w-4xl flex-col justify-center gap-4 p-4 lg:min-h-[800px] xl:gap-8 xl:py-24 xl:pl-24 xl:pr-10"> |
| 13 | + <h1 className="typography-h1 max-w-3xl text-neu-900"> |
| 14 | + The query language for modern APIs |
| 15 | + </h1> |
16 | 16 |
|
17 |
| - <ul className="flex flex-col gap-2"> |
18 |
| - {[ |
19 |
| - "Deliver high-performance user experience at scale", |
20 |
| - "Secure and stabilize your API with a strongly typed schema and validated queries", |
21 |
| - "Reduce dependencies through efficient, distributed development", |
22 |
| - ].map((item, index) => ( |
23 |
| - <li key={index} className="flex items-center gap-1"> |
24 |
| - <CheckIcon className="size-6 shrink-0 text-pri-base" /> |
25 |
| - <p className="typography-body-sm text-neu-800">{item}</p> |
26 |
| - </li> |
27 |
| - ))} |
28 |
| - </ul> |
| 17 | + <ul className="flex flex-col gap-2"> |
| 18 | + {[ |
| 19 | + "Deliver high-performance user experience at scale", |
| 20 | + "Secure and stabilize your API with a strongly typed schema and validated queries", |
| 21 | + "Reduce dependencies through efficient, distributed development", |
| 22 | + ].map((item, index) => ( |
| 23 | + <li key={index} className="flex items-start gap-1"> |
| 24 | + <CheckIcon className="size-6 shrink-0 text-pri-base max-lg:mt-px" /> |
| 25 | + <p className="text-pretty text-neu-800">{item}</p> |
| 26 | + </li> |
| 27 | + ))} |
| 28 | + </ul> |
29 | 29 |
|
30 |
| - <div className="flex items-center gap-4"> |
31 |
| - <Button href="/learn">Get Started</Button> |
| 30 | + <div className="flex items-center gap-4"> |
| 31 | + <Button href="/learn" className="max-sm:w-full"> |
| 32 | + Learn more |
| 33 | + </Button> |
| 34 | + </div> |
32 | 35 | </div>
|
| 36 | + <HeroStripes /> |
33 | 37 | </div>
|
34 | 38 | </div>
|
35 | 39 | )
|
36 | 40 | }
|
37 | 41 |
|
38 | 42 | function HeroStripes() {
|
39 | 43 | return (
|
40 |
| - <div className="pointer-events-none absolute right-0 top-0 h-full overflow-hidden"> |
| 44 | + <div className="pointer-events-none relative overflow-hidden max-lg:h-[210px]"> |
| 45 | + <ImageLoaded |
| 46 | + image={logoBlurred} |
| 47 | + className="relative h-full bg-gradient-to-b from-pri-base to-pri-lighter opacity-0 transition-opacity duration-[1.5s] [mask-position:center_12%] [mask-size:110%] data-[loaded=true]:opacity-100 dark:to-pri-base lg:[mask-position:7%_7%] lg:[mask-size:200%]" |
| 48 | + style={{ |
| 49 | + maskImage: `url(${logoBlurred.src})`, |
| 50 | + maskRepeat: "no-repeat", |
| 51 | + }} |
| 52 | + /> |
41 | 53 | <StripesDecoration
|
42 | 54 | stripeWidth="5px"
|
43 |
| - oddClassName="bg-gradient-to-b from-sec-base to-pri-lighter" |
| 55 | + oddClassName="bg-gradient-to-b from-sec-base to-pri-lighter dark:from-sec-darker dark:to-pri-darker" |
44 | 56 | />
|
45 | 57 | </div>
|
46 | 58 | )
|
|
0 commit comments