diff --git a/app/admin/talks/page.tsx b/app/admin/talks/page.tsx index 4307095..4559ea4 100644 --- a/app/admin/talks/page.tsx +++ b/app/admin/talks/page.tsx @@ -403,7 +403,7 @@ export default function AdminTalks() { // Styled Components // const BackgroundContainer = styled.section` - background-color: #0a0a0a; + background-color: var(--background); position: fixed; height: 100vh; width: 100vw; @@ -434,12 +434,12 @@ const PageHeader = styled.div` const Title = styled.h1` font-size: 2rem; font-weight: 700; - color: white; + color: var(--foreground); margin: 0; ` const Subtitle = styled.p` - color: rgba(255, 255, 255, 0.6); + color: rgba(var(--foreground-rgb), 0.6); margin: 0.5rem 0 0 0; ` @@ -450,7 +450,7 @@ const FilterBar = styled.div` ` const FilterLabel = styled.span` - color: rgba(255, 255, 255, 0.7); + color: rgba(var(--foreground-rgb), 0.7); font-size: 0.875rem; font-weight: 600; ` @@ -470,10 +470,11 @@ const FilterButton = styled.button<{ $active: boolean; $color?: string }>` transition: all 0.2s ease; text-transform: capitalize; border: 1px solid - ${(props) => (props.$active ? props.$color || "white" : "rgba(255, 255, 255, 0.2)")}; + ${(props) => (props.$active ? props.$color || "white" : "rgba(var(--foreground-rgb), 0.2)")}; background-color: ${(props) => props.$active ? (props.$color || "white") + "22" : "transparent"}; - color: ${(props) => (props.$active ? props.$color || "white" : "rgba(255, 255, 255, 0.6)")}; + color: ${(props) => + props.$active ? props.$color || "white" : "rgba(var(--foreground-rgb), 0.6)"}; &:hover { border-color: ${(props) => props.$color || "white"}; @@ -488,10 +489,10 @@ const TalkList = styled.div` ` const TalkCard = styled.div` - background-color: rgba(21, 21, 28, 0.75); + background-color: var(--surface); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px); - border: 1px solid rgba(255, 255, 255, 0.1); + border: 1px solid var(--border); border-radius: 0.75rem; padding: 1.5rem; display: flex; @@ -509,7 +510,7 @@ const CardHeader = styled.div` const TalkTitle = styled.h2` font-size: 1.125rem; font-weight: 600; - color: white; + color: var(--foreground); margin: 0; flex: 1; ` @@ -612,7 +613,7 @@ const StatusPillSelect = styled.select<{ $color: string; $widthCh: number }>` option { background-color: #1a1a2e; - color: white; + color: var(--foreground); } ` @@ -632,7 +633,7 @@ const MetaRow = styled.div` display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: 0.75rem; - background-color: rgba(255, 255, 255, 0.03); + background-color: rgba(var(--foreground-rgb), 0.03); border-radius: 0.75rem; padding: 0.75rem; @@ -654,14 +655,14 @@ const MetaItem = styled.div` const MetaLabel = styled.span` font-size: 0.6875rem; font-weight: 600; - color: rgba(255, 255, 255, 0.5); + color: rgba(var(--foreground-rgb), 0.5); text-transform: uppercase; letter-spacing: 0.05em; ` const MetaValue = styled.span` font-size: 0.875rem; - color: rgba(255, 255, 255, 0.9); + color: rgba(var(--foreground-rgb), 0.9); display: flex; align-items: center; gap: 0.5rem; @@ -678,7 +679,7 @@ const HandleLink = styled.a` ` const Synopsis = styled.p` - color: rgba(255, 255, 255, 0.7); + color: rgba(var(--foreground-rgb), 0.7); font-size: 0.875rem; line-height: 1.6; margin: 0; @@ -687,7 +688,7 @@ const Synopsis = styled.p` const SlidesInfo = styled.div` font-size: 0.8125rem; - color: rgba(255, 255, 255, 0.5); + color: rgba(var(--foreground-rgb), 0.5); ` const SlidesLink = styled.a` @@ -732,13 +733,13 @@ const ErrorMessage = styled.div` const EmptyState = styled.div` text-align: center; - color: rgba(255, 255, 255, 0.5); + color: rgba(var(--foreground-rgb), 0.5); padding: 3rem; font-size: 1rem; ` const LoadingText = styled.div` - color: white; + color: var(--foreground); font-size: 1.25rem; text-align: center; margin-top: 4rem; diff --git a/app/admin/thumbnails/page.tsx b/app/admin/thumbnails/page.tsx index 2e05d9d..00e9aa2 100644 --- a/app/admin/thumbnails/page.tsx +++ b/app/admin/thumbnails/page.tsx @@ -358,7 +358,7 @@ function AdminTalkThumbnailGen() { // const BackgroundContainer = styled.section` - background-color: #0a0a0a; + background-color: var(--background); position: fixed; height: 100vh; width: 100vw; @@ -382,13 +382,13 @@ const Container = styled.main` const Title = styled.h1` font-size: 2rem; font-weight: 700; - color: white; + color: var(--foreground); margin: 0; text-align: center; ` const Subtitle = styled.p` - color: rgba(255, 255, 255, 0.7); + color: rgba(var(--foreground-rgb), 0.7); margin: -1rem 0 0 0; text-align: center; ` @@ -441,15 +441,15 @@ const Field = styled.div` const Label = styled.label` font-size: 0.875rem; font-weight: 700; - color: rgba(255, 255, 255, 0.9); + color: rgba(var(--foreground-rgb), 0.9); ` const FileInput = styled.input` padding: 0.5rem; - background-color: rgba(255, 255, 255, 0.1); - border: 1px solid rgba(255, 255, 255, 0.2); + background-color: rgba(var(--foreground-rgb), 0.1); + border: 1px solid rgba(var(--foreground-rgb), 0.2); border-radius: 0.5rem; - color: white; + color: var(--foreground); font-size: 0.875rem; cursor: pointer; @@ -459,7 +459,7 @@ const FileInput = styled.input` background-color: rgba(156, 163, 255, 0.2); border: 1px solid rgba(156, 163, 255, 0.4); border-radius: 0.375rem; - color: white; + color: var(--foreground); cursor: pointer; font-size: 0.8125rem; transition: all 0.2s ease; @@ -481,7 +481,7 @@ const HandleRow = styled.div` ` const HandlePrefix = styled.span` - color: rgba(255, 255, 255, 0.5); + color: rgba(var(--foreground-rgb), 0.5); font-size: 1rem; font-weight: 600; flex-shrink: 0; @@ -501,7 +501,7 @@ const PhotoStatus = styled.p` const OrDivider = styled.div` text-align: center; - color: rgba(255, 255, 255, 0.4); + color: rgba(var(--foreground-rgb), 0.4); font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.1em; @@ -522,12 +522,12 @@ const DownloadRow = styled.div` const SpecNote = styled.p` margin: -1rem 0 0 0; text-align: center; - color: rgba(255, 255, 255, 0.4); + color: rgba(var(--foreground-rgb), 0.4); font-size: 0.75rem; ` const LoadingText = styled.div` - color: white; + color: var(--foreground); font-size: 1.25rem; text-align: center; margin-top: 4rem; diff --git a/app/components/Button.tsx b/app/components/Button.tsx index 970b355..2ec0f82 100644 --- a/app/components/Button.tsx +++ b/app/components/Button.tsx @@ -74,27 +74,30 @@ const StyledButton = styled.button<{ $variant: "primary" | "secondary" | "tertiary" $size: "small" | "default" }>` - padding: ${(props) => (props.$size === "small" ? "0.5rem 1rem" : "0.75rem 1.5rem")}; - border-radius: ${(props) => (props.$variant === "tertiary" ? "0.375rem" : "0.25rem")}; - font-weight: ${(props) => (props.$size === "small" ? "500" : "600")}; - font-size: ${(props) => (props.$size === "small" ? "inherit" : "1.1rem")}; + padding: ${(props) => (props.$size === "small" ? "0.5rem 1.1rem" : "0.85rem 1.75rem")}; + border-radius: 999px; + font-weight: ${(props) => (props.$size === "small" ? "600" : "700")}; + font-size: ${(props) => (props.$size === "small" ? "0.9rem" : "1.05rem")}; cursor: pointer; - transition: all 0.3s ease; + transition: all 0.2s ease; text-decoration: none; display: inline-flex; align-items: center; + justify-content: center; gap: 0.5rem; border: none; font-family: inherit; line-height: 1.5; + white-space: nowrap; background-color: ${(props) => props.$variant === "primary" - ? "white" + ? "var(--foreground)" : props.$variant === "tertiary" ? "transparent" : "transparent"}; - color: ${(props) => (props.$variant === "primary" ? "black" : "white")}; - border: ${(props) => (props.$variant === "secondary" ? "1px solid white" : "none")}; + color: ${(props) => (props.$variant === "primary" ? "var(--background)" : "var(--foreground)")}; + border: ${(props) => + props.$variant === "secondary" ? "1.5px solid var(--foreground)" : "1.5px solid transparent"}; position: ${(props) => (props.$variant === "tertiary" ? "relative" : "static")}; overflow: ${(props) => (props.$variant === "tertiary" ? "hidden" : "visible")}; @@ -111,7 +114,7 @@ const StyledButton = styled.button<{ background: linear-gradient( 90deg, transparent, - rgba(255, 255, 255, 0.1), + rgba(var(--foreground-rgb), 0.1), transparent ); transition: left 0.5s ease; @@ -120,11 +123,11 @@ const StyledButton = styled.button<{ &:hover:not(:disabled) { background-color: ${(props) => { - if (props.$variant === "primary") return "#ddd" - if (props.$variant === "tertiary") return "rgba(255, 255, 255, 0.05)" - return "rgba(255, 255, 255, 0.1)" + if (props.$variant === "primary") return "rgba(var(--foreground-rgb), 0.82)" + if (props.$variant === "tertiary") return "rgba(var(--foreground-rgb), 0.05)" + return "rgba(var(--foreground-rgb), 0.1)" }}; - border-radius: ${(props) => (props.$variant === "tertiary" ? "0.375rem" : "0.25rem")}; + border-radius: 999px; ${(props) => props.$variant === "tertiary" && @@ -145,27 +148,30 @@ const StyledLink = styled(Link)<{ $variant: "primary" | "secondary" | "tertiary" $size: "small" | "default" }>` - padding: ${(props) => (props.$size === "small" ? "0.5rem 1rem" : "0.75rem 1.5rem")}; - border-radius: ${(props) => (props.$variant === "tertiary" ? "0.375rem" : "0.25rem")}; - font-weight: ${(props) => (props.$size === "small" ? "500" : "600")}; - font-size: ${(props) => (props.$size === "small" ? "inherit" : "1.1rem")}; + padding: ${(props) => (props.$size === "small" ? "0.5rem 1.1rem" : "0.85rem 1.75rem")}; + border-radius: 999px; + font-weight: ${(props) => (props.$size === "small" ? "600" : "700")}; + font-size: ${(props) => (props.$size === "small" ? "0.9rem" : "1.05rem")}; cursor: pointer; - transition: all 0.3s ease; + transition: all 0.2s ease; text-decoration: none; display: inline-flex; align-items: center; + justify-content: center; gap: 0.5rem; border: none; font-family: inherit; line-height: 1.5; + white-space: nowrap; background-color: ${(props) => props.$variant === "primary" - ? "white" + ? "var(--foreground)" : props.$variant === "tertiary" ? "transparent" : "transparent"}; - color: ${(props) => (props.$variant === "primary" ? "black" : "white")}; - border: ${(props) => (props.$variant === "secondary" ? "1px solid white" : "none")}; + color: ${(props) => (props.$variant === "primary" ? "var(--background)" : "var(--foreground)")}; + border: ${(props) => + props.$variant === "secondary" ? "1.5px solid var(--foreground)" : "1.5px solid transparent"}; position: ${(props) => (props.$variant === "tertiary" ? "relative" : "static")}; overflow: ${(props) => (props.$variant === "tertiary" ? "hidden" : "visible")}; @@ -182,7 +188,7 @@ const StyledLink = styled(Link)<{ background: linear-gradient( 90deg, transparent, - rgba(255, 255, 255, 0.1), + rgba(var(--foreground-rgb), 0.1), transparent ); transition: left 0.5s ease; @@ -191,11 +197,11 @@ const StyledLink = styled(Link)<{ &:hover { background-color: ${(props) => { - if (props.$variant === "primary") return "#ddd" - if (props.$variant === "tertiary") return "rgba(255, 255, 255, 0.05)" - return "rgba(255, 255, 255, 0.1)" + if (props.$variant === "primary") return "rgba(var(--foreground-rgb), 0.82)" + if (props.$variant === "tertiary") return "rgba(var(--foreground-rgb), 0.05)" + return "rgba(var(--foreground-rgb), 0.1)" }}; - border-radius: ${(props) => (props.$variant === "tertiary" ? "0.375rem" : "0.25rem")}; + border-radius: 999px; ${(props) => props.$variant === "tertiary" && @@ -211,27 +217,30 @@ const StyledExternalLink = styled.a<{ $variant: "primary" | "secondary" | "tertiary" $size: "small" | "default" }>` - padding: ${(props) => (props.$size === "small" ? "0.5rem 1rem" : "0.75rem 1.5rem")}; - border-radius: ${(props) => (props.$variant === "tertiary" ? "0.375rem" : "0.25rem")}; - font-weight: ${(props) => (props.$size === "small" ? "500" : "600")}; - font-size: ${(props) => (props.$size === "small" ? "inherit" : "1.1rem")}; + padding: ${(props) => (props.$size === "small" ? "0.5rem 1.1rem" : "0.85rem 1.75rem")}; + border-radius: 999px; + font-weight: ${(props) => (props.$size === "small" ? "600" : "700")}; + font-size: ${(props) => (props.$size === "small" ? "0.9rem" : "1.05rem")}; cursor: pointer; - transition: all 0.3s ease; + transition: all 0.2s ease; text-decoration: none; display: inline-flex; align-items: center; + justify-content: center; gap: 0.5rem; border: none; font-family: inherit; line-height: 1.5; + white-space: nowrap; background-color: ${(props) => props.$variant === "primary" - ? "white" + ? "var(--foreground)" : props.$variant === "tertiary" ? "transparent" : "transparent"}; - color: ${(props) => (props.$variant === "primary" ? "black" : "white")}; - border: ${(props) => (props.$variant === "secondary" ? "1px solid white" : "none")}; + color: ${(props) => (props.$variant === "primary" ? "var(--background)" : "var(--foreground)")}; + border: ${(props) => + props.$variant === "secondary" ? "1.5px solid var(--foreground)" : "1.5px solid transparent"}; position: ${(props) => (props.$variant === "tertiary" ? "relative" : "static")}; overflow: ${(props) => (props.$variant === "tertiary" ? "hidden" : "visible")}; @@ -248,7 +257,7 @@ const StyledExternalLink = styled.a<{ background: linear-gradient( 90deg, transparent, - rgba(255, 255, 255, 0.1), + rgba(var(--foreground-rgb), 0.1), transparent ); transition: left 0.5s ease; @@ -257,11 +266,11 @@ const StyledExternalLink = styled.a<{ &:hover { background-color: ${(props) => { - if (props.$variant === "primary") return "#ddd" - if (props.$variant === "tertiary") return "rgba(255, 255, 255, 0.05)" - return "rgba(255, 255, 255, 0.1)" + if (props.$variant === "primary") return "rgba(var(--foreground-rgb), 0.82)" + if (props.$variant === "tertiary") return "rgba(var(--foreground-rgb), 0.05)" + return "rgba(var(--foreground-rgb), 0.1)" }}; - border-radius: ${(props) => (props.$variant === "tertiary" ? "0.375rem" : "0.25rem")}; + border-radius: 999px; ${(props) => props.$variant === "tertiary" && diff --git a/app/components/Card.tsx b/app/components/Card.tsx index 7b09795..2968a46 100644 --- a/app/components/Card.tsx +++ b/app/components/Card.tsx @@ -78,13 +78,13 @@ export const CardContent = styled.div<{ $padding?: string }>` export const CardTitle = styled.h3<{ $size?: string }>` font-size: ${(props) => props.$size || "1.25rem"}; font-weight: bold; - color: white; + color: var(--foreground); margin-bottom: 0.5rem; ` export const CardText = styled.p<{ $color?: string; $size?: string; $weight?: string }>` font-size: ${(props) => props.$size || "0.875rem"}; - color: ${(props) => props.$color || "#9ca3af"}; + color: ${(props) => props.$color || "var(--subtle-foreground)"}; margin-bottom: 0.5rem; font-weight: ${(props) => props.$weight || "normal"}; ` @@ -94,9 +94,9 @@ export const CardText = styled.p<{ $color?: string; $size?: string; $weight?: st const StyledLink = styled(Link)` display: flex; flex-direction: column; - background-color: rgba(21, 21, 28, 0.75); - backdrop-filter: blur(10px); - border-radius: 0.5rem; + background-color: var(--surface-solid); + border: 1px solid var(--border); + border-radius: 0.75rem; overflow: hidden; transition: transform 0.2s ease; text-decoration: none; @@ -111,9 +111,9 @@ const StyledLink = styled(Link)` const StyledExternalLink = styled.a` display: flex; flex-direction: column; - background-color: rgba(21, 21, 28, 0.75); - backdrop-filter: blur(10px); - border-radius: 0.5rem; + background-color: var(--surface-solid); + border: 1px solid var(--border); + border-radius: 0.75rem; overflow: hidden; transition: transform 0.2s ease; text-decoration: none; @@ -128,9 +128,9 @@ const StyledExternalLink = styled.a` const StyledDiv = styled.div` display: flex; flex-direction: column; - background-color: rgba(21, 21, 28, 0.75); - backdrop-filter: blur(10px); - border-radius: 0.5rem; + background-color: var(--surface-solid); + border: 1px solid var(--border); + border-radius: 0.75rem; overflow: hidden; transition: transform 0.2s ease; @@ -146,9 +146,8 @@ const ImageContainer = styled.div<{ $aspectRatio?: "16/9" | "1/1" | "auto" }>` overflow: hidden; ${(props) => props.$aspectRatio === "16/9" && "aspect-ratio: 16/9;"} ${(props) => props.$aspectRatio === "1/1" && "aspect-ratio: 1/1;"} - background-color: ${(props) => - props.$aspectRatio !== "auto" ? "rgba(0, 0, 0, 0.8)" : "transparent"}; - border-radius: ${(props) => (props.$aspectRatio !== "auto" ? "0.5rem" : "0")}; + background-color: ${(props) => (props.$aspectRatio !== "auto" ? "var(--border)" : "transparent")}; + border-radius: 0; ` const CardImage = styled.img<{ $aspectRatio?: "16/9" | "1/1" | "auto" }>` @@ -169,8 +168,8 @@ const PlayButton = styled.div` top: 50%; left: 50%; transform: translate(-50%, -50%); - background-color: rgba(255, 255, 255, 0.5); - color: black; + background-color: rgba(var(--foreground-rgb), 0.5); + color: var(--background); border-radius: 50%; width: 60px; height: 60px; @@ -185,7 +184,7 @@ const PlayButton = styled.div` ${StyledLink}:hover &, ${StyledDiv}:hover &, ${StyledExternalLink}:hover & { - background-color: rgba(255, 255, 255, 0.8); + background-color: rgba(var(--foreground-rgb), 0.8); transform: translate(-50%, -50%) scale(1.1); } ` diff --git a/app/components/CheckboxInput.tsx b/app/components/CheckboxInput.tsx index e374157..2e520b3 100644 --- a/app/components/CheckboxInput.tsx +++ b/app/components/CheckboxInput.tsx @@ -34,7 +34,7 @@ const StyledCheckbox = styled.input.attrs({ type: "checkbox" })<{ height: ${(props) => (props.$size === "small" ? "1rem" : "1.25rem")}; border: 2px solid ${(props) => - props.$variant === "secondary" ? "rgba(255, 255, 255, 0.3)" : "rgba(0, 0, 0, 0.3)"}; + props.$variant === "secondary" ? "rgba(var(--foreground-rgb), 0.3)" : "rgba(0, 0, 0, 0.3)"}; border-radius: 0.25rem; background-color: transparent; cursor: pointer; @@ -45,7 +45,7 @@ const StyledCheckbox = styled.input.attrs({ type: "checkbox" })<{ &:hover { border-color: ${(props) => - props.$variant === "secondary" ? "rgba(255, 255, 255, 0.5)" : "rgba(0, 0, 0, 0.5)"}; + props.$variant === "secondary" ? "rgba(var(--foreground-rgb), 0.5)" : "rgba(0, 0, 0, 0.5)"}; } &:checked { diff --git a/app/components/ErrorBoundary.tsx b/app/components/ErrorBoundary.tsx index 39f50d9..89e1102 100644 --- a/app/components/ErrorBoundary.tsx +++ b/app/components/ErrorBoundary.tsx @@ -33,7 +33,7 @@ export class ErrorBoundary extends Component +
) ) } diff --git a/app/components/Footer.tsx b/app/components/Footer.tsx index d4da903..d2f31ac 100644 --- a/app/components/Footer.tsx +++ b/app/components/Footer.tsx @@ -90,7 +90,7 @@ const FooterContainer = styled.footer` align-items: center; justify-content: center; width: 100%; - background-color: rgba(0, 0, 0, 0.1); + background-color: var(--footer-background); backdrop-filter: blur(64px); margin-top: auto; ` @@ -101,7 +101,7 @@ const FooterContent = styled.div` align-items: center; justify-content: space-between; padding: 1.5rem 1rem; - color: #a3a3a3; + color: var(--subtle-foreground); max-width: 1200px; width: 100%; gap: 1rem; diff --git a/app/components/GiveATalkCTA.tsx b/app/components/GiveATalkCTA.tsx index 012fa15..287b7dc 100644 --- a/app/components/GiveATalkCTA.tsx +++ b/app/components/GiveATalkCTA.tsx @@ -1,13 +1,14 @@ "use client" -import styled from "styled-components" -import Link from "next/link" import { useRouter } from "next/navigation" -import { useState, useEffect } from "react" +import { useEffect, useState } from "react" import { supabaseClient } from "../../lib/supabaseClient" +import { Button } from "./Button" -// Components // +// +// Components +// -export const GiveATalkCTA: React.FC = () => { +export const GiveATalkCTA = () => { const router = useRouter() const [isAuthenticated, setIsAuthenticated] = useState(null) @@ -18,217 +19,21 @@ export const GiveATalkCTA: React.FC = () => { } = await supabaseClient.auth.getUser() setIsAuthenticated(!!user) } + checkAuth() }, []) - const handleClick = (e: React.MouseEvent) => { + const handleClick = (event?: React.MouseEvent) => { if (isAuthenticated === false) { - e.preventDefault() + event?.preventDefault() const redirectUrl = encodeURIComponent("/submit-talk") router.push(`/login?redirect=${redirectUrl}`) } } return ( - - - - - - - Give a Talk! - + ) } - -const StyledLink = styled(Link)` - display: inline-flex; - align-items: center; - padding: 0.5rem 1rem; - gap: 0.5rem; - font-weight: 500; - font-size: 0.875rem; - color: rgba(255, 255, 255, 0.95); - text-decoration: none; - transition: all 0.3s ease-in-out; - border-radius: 15px 0 20px 0px; - box-shadow: - 0 0 20px rgba(156, 163, 255, 0.15), - 0 0 40px rgba(92, 107, 246, 0.1), - 0 0 60px rgba(28, 28, 40, 0.4), - 0 1px 3px rgba(0, 0, 0, 0.9), - 0 10px 20px -5px rgba(28, 28, 40, 0.5), - inset 0 1px 0 rgba(156, 163, 255, 0.1); - background: linear-gradient( - 135deg, - rgba(28, 28, 40, 0.9) 0%, - rgba(15, 15, 22, 0.95) 25%, - rgba(0, 0, 1, 1) 50%, - rgba(15, 15, 22, 0.95) 75%, - rgba(28, 28, 40, 0.9) 100% - ); - border: 1px solid rgba(156, 163, 255, 0.5); - position: relative; - overflow: hidden; - white-space: nowrap; - transform: perspective(1000px) rotateX(5deg) skew(-10deg) scaleY(.9); - animation: pulseGlow 3s ease-in-out infinite; - - &::before { - content: ""; - position: absolute; - top: -200%; - left: -100%; - width: 300%; - height: 400%; - background: linear-gradient( - 115deg, - transparent 40%, - rgba(156, 163, 255, 0.15) 48%, - rgba(255, 255, 255, 0.25) 50%, - rgba(156, 163, 255, 0.15) 52%, - transparent 60% - ); - animation: shimmer 2.5s linear infinite; - } - - &::after { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 1px; - background: linear-gradient( - 90deg, - transparent 0%, - rgba(255, 255, 255, 0.4) 50%, - transparent 100% - ); - pointer-events: none; - } - - &:hover { - transform: perspective(1000px) rotateX(5deg) translateY(-1px) skew(-10deg) scaleY(.9); - box-shadow: - 0 0 30px rgba(156, 163, 255, 0.25), - 0 0 50px rgba(92, 107, 246, 0.15), - 0 0 80px rgba(28, 28, 40, 0.5), - 0 2px 4px rgba(0, 0, 0, 1), - 0 15px 30px -5px rgba(28, 28, 40, 0.7), - inset 0 1px 0 rgba(156, 163, 255, 0.15); - text-decoration: none; - } - - @keyframes shimmer { - 0% { - transform: translateX(-100%) translateY(-100%) rotate(45deg); - } - 100% { - transform: translateX(100%) translateY(100%) rotate(45deg); - } - } - - @keyframes pulseGlow { - 0%, 100% { - box-shadow: - 0 0 20px rgba(156, 163, 255, 0.15), - 0 0 40px rgba(92, 107, 246, 0.1), - 0 0 60px rgba(28, 28, 40, 0.4), - 0 1px 3px rgba(0, 0, 0, 0.9), - 0 10px 20px -5px rgba(28, 28, 40, 0.5), - inset 0 1px 0 rgba(156, 163, 255, 0.1); - } - 50% { - box-shadow: - 0 0 35px rgba(156, 163, 255, 0.25), - 0 0 70px rgba(92, 107, 246, 0.18), - 0 0 100px rgba(28, 28, 40, 0.5), - 0 1px 3px rgba(0, 0, 0, 0.9), - 0 10px 20px -5px rgba(28, 28, 40, 0.5), - inset 0 1px 0 rgba(156, 163, 255, 0.15); - } - } - - &:hover { - transform: scale(1.02) skew(-10deg) scaleY(.9); - box-shadow: - 0 4px 12px rgba(0, 0, 0, 1), - 0 0 20px rgba(92, 107, 246, 0.1), - inset 0 1px 0 rgba(255, 255, 255, 0.2); - text-decoration: none; - } - - @keyframes shimmer { - 0% { - transform: translateX(-100%) translateY(-100%) rotate(45deg); - } - 100% { - transform: translateX(100%) translateY(100%) rotate(45deg); - } - } - - &::after { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 50%; - background: linear-gradient(180deg, rgba(255, 255, 255, 0.1) 0%, transparent 100%); - pointer-events: none; - } - - &:hover { - transform: scale(1.03) skew(-10deg) scaleY(.9); - box-shadow: - 0 6px 16px rgba(0, 0, 0, 0.8), - 0 0 20px rgba(92, 107, 246, 0.15), - inset 0 1px 0 rgba(255, 255, 255, 0.25), - inset 0 -1px 0 rgba(0, 0, 0, 0.9); - text-decoration: none; - } - - @keyframes shimmer { - 0% { - transform: translateX(-100%) translateY(-100%) rotate(45deg); - } - 100% { - transform: translateX(100%) translateY(100%) rotate(45deg); - } - } - } - - @keyframes pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.8; - } - } -` - -const IconWrapper = styled.div` - width: 1.25rem; - height: 1.25rem; - display: flex; - align-items: center; - justify-content: center; - - svg { - width: 100%; - height: 100%; - } -` diff --git a/app/components/Header.tsx b/app/components/Header.tsx index 067a76b..4c49e3d 100644 --- a/app/components/Header.tsx +++ b/app/components/Header.tsx @@ -1,6 +1,7 @@ "use client" import { useState, useEffect } from "react" import { useRouter } from "next/navigation" +import Link from "next/link" import styled from "styled-components" import { links } from "../siteConfig" import { GiveATalkCTA } from "./GiveATalkCTA" @@ -129,7 +130,7 @@ export const Header = () => {