diff --git a/package.json b/package.json index 4b92b8bf88..666c05e949 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@graphql-tools/schema": "10.0.15", "@headlessui/react": "^1.7.17", "@radix-ui/react-radio-group": "^1.1.3", + "@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", "@tailwindcss/typography": "^0.5.10", "autoprefixer": "^10.4.17", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c830a6cbd2..b0477dc0f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,6 +22,9 @@ importers: '@radix-ui/react-radio-group': specifier: ^1.1.3 version: 1.2.2(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tailwindcss/container-queries': + specifier: ^0.1.1 + version: 0.1.1(tailwindcss@3.4.17) '@tailwindcss/nesting': specifier: 0.0.0-insiders.565cd3e version: 0.0.0-insiders.565cd3e(postcss@8.4.49) @@ -1703,6 +1706,11 @@ packages: '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@tailwindcss/container-queries@0.1.1': + resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} + peerDependencies: + tailwindcss: '>=3.2.0' + '@tailwindcss/nesting@0.0.0-insiders.565cd3e': resolution: {integrity: sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==} peerDependencies: @@ -6456,6 +6464,10 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.8.1 + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.17)': + dependencies: + tailwindcss: 3.4.17 + '@tailwindcss/nesting@0.0.0-insiders.565cd3e(postcss@8.4.49)': dependencies: postcss: 8.4.49 diff --git a/src/app/colors.css b/src/app/colors.css index a3ca69e689..39c02c2b22 100644 --- a/src/app/colors.css +++ b/src/app/colors.css @@ -1,4 +1,5 @@ -:root { +:root, +.light { --color-pri-lighter: 319 100% 90%; --color-pri-light: 319 100% 90%; --color-pri-base: 319 100% 44%; @@ -24,7 +25,7 @@ --color-neu-900: 75 15% 5%; } -html.dark { +.dark { --color-neu-900: 0 0% 100%; --color-neu-800: 75 57% 97%; --color-neu-700: 75 15% 95%; diff --git a/src/app/conf/2025/components/get-your-ticket/blur-bean.webp b/src/app/conf/2025/components/get-your-ticket/blur-bean.webp new file mode 100644 index 0000000000..cdfd6621dc Binary files /dev/null and b/src/app/conf/2025/components/get-your-ticket/blur-bean.webp differ diff --git a/src/app/conf/2025/components/get-your-ticket/index.tsx b/src/app/conf/2025/components/get-your-ticket/index.tsx new file mode 100644 index 0000000000..1267b2ed6b --- /dev/null +++ b/src/app/conf/2025/components/get-your-ticket/index.tsx @@ -0,0 +1,74 @@ +import { clsx } from "clsx" + +import { ImageLoaded } from "../image-loaded" + +import { TicketPeriods } from "./ticket-periods" + +import blurBean from "./blur-bean.webp" + +export function GetYourTicket({ className }: { className?: string }) { + return ( +
+ +
+
+

+ Get your ticket +

+

+ The registration deadline is 23:59 CET on the respective date. +

+
+ +
+ +
+
+
+ ) +} + +const maskEven = + "repeating-linear-gradient(to right, transparent, transparent 12px, black 12px, black 24px)" +const maskOdd = + "repeating-linear-gradient(to right, black, black 12px, transparent 12px, transparent 24px)" + +function Stripes() { + return ( + +
+
+ + ) +} diff --git a/src/app/conf/2025/components/get-your-ticket/ticket-period.tsx b/src/app/conf/2025/components/get-your-ticket/ticket-period.tsx new file mode 100644 index 0000000000..1ccdda9a96 --- /dev/null +++ b/src/app/conf/2025/components/get-your-ticket/ticket-period.tsx @@ -0,0 +1,91 @@ +import { Button } from "@/app/conf/_design-system/button" +import { clsx } from "clsx" +import { GET_TICKETS_LINK } from "../../links" + +export interface TicketPeriodProps { + price: string + date: Date | [Date, Date] + isLoading?: boolean + soldOut?: boolean + comingSoon?: boolean + name: string +} + +export function TicketPeriod({ + price, + date, + isLoading, + soldOut, + comingSoon, + name, +}: TicketPeriodProps) { + const disabled = soldOut || comingSoon || isLoading + + return ( +
+
+

{name}

+
+
+
+ + {price} + + {/* eslint-disable-next-line tailwindcss/no-custom-classname */} + + {Array.isArray(date) ? ( + <> + +
+ +
+
+ ) +} + +function Time({ date }: { date: Date }) { + return ( +