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 = () => {