From b00c10d30c5dc6a3db3b537b6e8cc5b4e06cdbbb Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Wed, 1 Jul 2026 00:30:01 -0700 Subject: re-style landing page CSS, add hero image - group game modes by color - add HAEWON hero image - add link to source code --- src/pages/LandingPage.tsx | 112 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 95 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/pages/LandingPage.tsx b/src/pages/LandingPage.tsx index 40e818a..85c0369 100644 --- a/src/pages/LandingPage.tsx +++ b/src/pages/LandingPage.tsx @@ -3,14 +3,14 @@ import styled from "styled-components"; import { appName } from "../constants"; -const getColor = (variant?: "green" | "purple" | "cyan") => { +const getColor = (variant?: "pink" | "purple" | "cyan") => { switch (variant) { case "purple": - return "var(--cl-purple, #a855f7)"; + return "var(--cl-magenta-7)"; case "cyan": return "var(--cl-cyan-6)"; default: - return "var(--cl-green-6)"; + return "var(--cl-magenta-8)"; } }; @@ -21,26 +21,55 @@ const Container = styled.div` justify-content: center; min-height: 70vh; padding: 24px; - gap: 14px; + gap: 18px; +`; + +const Hero = styled.div` + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; + text-align: center; +`; + +const HeroImage = styled.div` + width: clamp(180px, 28vw, 260px); + height: clamp(180px, 28vw, 260px); + border: 2px solid var(--cl-gray-3); + background-color: var(--cl-gray-2); + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + border-radius: 6px; + box-shadow: 0 6px 18px rgba(0, 0, 0, 0.06); + + img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + } `; const Title = styled.h1` font-family: "Roboto Mono", monospace; - font-size: clamp(1.5rem, 3vw, 2rem); + font-size: clamp(1.75rem, 4vw, 2.5rem); font-weight: 700; - letter-spacing: 0.1em; + letter-spacing: 0.12em; text-transform: uppercase; - color: var(--cl-white); - text-align: center; margin: 0; + text-align: center; + color: var(--cl-gray-9); `; const Subtitle = styled.p` font-family: "Roboto Mono", monospace; font-size: 0.9rem; - color: var(--cl-gray-6); - margin: 4px 0 0; + color: var(--cl-gray-7); + margin: 0; text-align: center; + letter-spacing: 0.05em; `; const ModeGroups = styled.div` @@ -75,7 +104,7 @@ const GroupLabel = styled.span` margin-bottom: 10px; `; -const ModeButton = styled.button<{ variant?: "green" | "purple" | "cyan" }>` +const ModeButton = styled.button<{ variant?: "pink" | "purple" | "cyan" }>` font-family: "Roboto Mono", monospace; font-size: 1rem; font-weight: 600; @@ -87,7 +116,7 @@ const ModeButton = styled.button<{ variant?: "green" | "purple" | "cyan" }>` color: ${({ variant }) => getColor(variant)}; cursor: pointer; - transition: all 0.15s ease; + transition: background-color 0.12s ease, color 0.12s ease; display: flex; flex-direction: column; @@ -97,12 +126,12 @@ const ModeButton = styled.button<{ variant?: "green" | "purple" | "cyan" }>` &:hover { background: ${({ variant }) => getColor(variant)}; - color: var(--cl-black, #000); + color: var(--cl-white, #fff); } &:focus-visible { - outline: 3px solid ${({ variant }) => getColor(variant)}; - outline-offset: 3px; + outline: 2px solid ${({ variant }) => getColor(variant)}; + outline-offset: 2px; } @media (max-width: 480px) { @@ -118,14 +147,50 @@ const ModeDescription = styled.span` margin-top: 6px; `; +const Footer = styled.div` + margin-top: 8px; + display: flex; + align-items: center; + gap: 8px; + font-family: "Roboto Mono", monospace; + font-size: 0.8rem; +`; + +const GitHubLink = styled.a` + display: inline-flex; + align-items: center; + gap: 6px; + color: var(--cl-gray-7); + text-decoration: none; + padding: 6px 12px; + border: 1px solid var(--cl-gray-3); + transition: color 0.12s ease, border-color 0.12s ease; + + &:hover { + color: var(--cl-magenta-7); + border-color: var(--cl-magenta-7); + } +`; + +const GitHubIcon = styled.svg` + width: 16px; + height: 16px; + fill: currentColor; +`; export function LandingPage() { const navigate = useNavigate(); return ( - {appName} - a kpop music guessing game + + {appName} + + NMIXX Haewon Stress PNG + + a kpop music guessing game + +
Song Guessing @@ -150,6 +215,19 @@ export function LandingPage() {
+ +
); } -- cgit v1.2.3