From 90136e5289851e1a3fa7b958cd82dc5ad479f85d Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 3 Jun 2026 17:51:08 +0700 Subject: [PATCH] x --- apps/spa/src/index.css | 58 ++++++++++----------- apps/spa/src/pages/HomePage.tsx | 88 +++++++++++++++----------------- apps/spa/tailwind.config.js | 30 +++++------ apps/website/src/app/globals.css | 58 ++++++++++----------- apps/website/src/app/page.tsx | 82 ++++++++++++++--------------- 5 files changed, 150 insertions(+), 166 deletions(-) diff --git a/apps/spa/src/index.css b/apps/spa/src/index.css index 741850b..8f629b2 100644 --- a/apps/spa/src/index.css +++ b/apps/spa/src/index.css @@ -1,78 +1,74 @@ @import "tailwindcss"; @theme { - /* Memphis Pop-Art color palette */ - --color-pop-pink: #FF69B4; + --color-pop-pink: #FF6B6B; --color-pop-yellow: #FFF200; - --color-pop-orange: #FF8800; - --color-pop-red: #FF3333; - --color-pop-cyan: #00FFFF; - --color-pop-green: #39FF14; - --color-pop-purple: #BA55D3; - --color-pop-bg: #FFF9E6; - --color-pop-black: #111111; + --color-pop-orange: #FFA07A; + --color-pop-red: #FF4500; + --color-pop-cyan: #E0FFFF; + --color-pop-green: #98FB98; + --color-pop-purple: #D8BFD8; + --color-pop-bg: #FFF0F5; + --color-pop-black: #333333; - /* Brutalist Shadows */ - --shadow-brutal: 6px 6px 0px 0px #111; - --shadow-brutal-hover: 2px 2px 0px 0px #111; + --shadow-brutal: 0 10px 25px rgba(0,0,0,0.05); + --shadow-brutal-hover: 0 20px 40px rgba(0,0,0,0.1); - /* Custom animations */ - --animate-pop-in: pop-in 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; - --animate-spin-slow: spin 8s linear infinite; + --animate-pop-in: fade-in-up 0.6s ease-out forwards; + --animate-spin-slow: spin 15s linear infinite; - @keyframes pop-in { - 0% { opacity: 0; transform: scale(0.8); } - 100% { opacity: 1; transform: scale(1); } + @keyframes fade-in-up { + 0% { opacity: 0; transform: translateY(20px); } + 100% { opacity: 1; transform: translateY(0); } } } @layer base { body { @apply bg-pop-bg text-pop-black font-sans antialiased; - background-image: radial-gradient(#111 2px, transparent 2px); - background-size: 32px 32px; - background-position: 0 0, 16px 16px; + background-image: radial-gradient(circle at top right, rgba(255,107,107,0.15), transparent 40%), + radial-gradient(circle at bottom left, rgba(255,160,122,0.15), transparent 40%); min-height: 100vh; } h1, h2, h3, h4 { - @apply text-pop-black font-black uppercase tracking-tight; + @apply text-pop-black font-semibold tracking-tight; } } @layer components { .brutal-box { - @apply bg-white border-4 border-pop-black shadow-brutal transition-all duration-300; + @apply bg-white border border-gray-100 rounded-2xl shadow-brutal transition-all duration-300; } .brutal-box-hover { - @apply hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-brutal-hover; + @apply hover:-translate-y-2 hover:shadow-brutal-hover; } .brutal-button { - @apply px-8 py-4 bg-pop-yellow text-pop-black font-black uppercase border-4 border-pop-black shadow-brutal transition-all duration-200 hover:bg-pop-pink hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-brutal-hover; + @apply px-8 py-4 bg-pop-pink text-white font-medium rounded-full shadow-brutal transition-all duration-300 hover:bg-pop-red hover:-translate-y-1 hover:shadow-brutal-hover; } .brutal-button-alt { - @apply px-8 py-4 bg-pop-cyan text-pop-black font-black uppercase border-4 border-pop-black shadow-brutal transition-all duration-200 hover:bg-pop-orange hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-brutal-hover; + @apply px-8 py-4 bg-white text-pop-pink font-medium rounded-full border border-pop-pink shadow-brutal transition-all duration-300 hover:bg-pop-bg hover:-translate-y-1 hover:shadow-brutal-hover; } } /* Custom Scrollbar */ ::-webkit-scrollbar { - width: 12px; + width: 8px; } ::-webkit-scrollbar-track { - @apply bg-pop-bg border-l-4 border-pop-black; + @apply bg-pop-bg; } ::-webkit-scrollbar-thumb { - @apply bg-pop-pink border-4 border-pop-black; + @apply bg-gray-300 rounded-full; } ::-webkit-scrollbar-thumb:hover { - @apply bg-pop-red; + @apply bg-gray-400; } /* Smooth Scrolling */ @@ -86,6 +82,6 @@ html { max-width: 480px; margin: 2rem auto; display: block; - border: 4px solid var(--color-pop-black); + border-radius: 16px; box-shadow: var(--shadow-brutal); } diff --git a/apps/spa/src/pages/HomePage.tsx b/apps/spa/src/pages/HomePage.tsx index aad1adc..ac45955 100644 --- a/apps/spa/src/pages/HomePage.tsx +++ b/apps/spa/src/pages/HomePage.tsx @@ -42,33 +42,31 @@ export default function HomePage() { {/* Hero Section */} -
-
+
+
Hero Background { (e.target as HTMLImageElement).style.display = 'none' }} /> +
-
-
- -
-

- {hero?.tagline || "Vibrant Memphis Pop-Art"} +

+

+ {hero?.tagline || "Vibrant Elegance Collection"}

-

+

{hero ? ( hero.title.split('[').map((part, i) => { if (part.includes(']')) { const [accent, rest] = part.split(']') return ( - + {accent} {rest} @@ -79,26 +77,23 @@ export default function HomePage() { }) ) : ( <> - Inhale{' '} - - Serenity - + Inhale Serenity )}

-

+

{hero?.description || "Crafting premium sensory experiences that transform your space into a sanctuary of peace."}

-
+
{hero?.buttonText || "Explore Collection"} Learn More @@ -107,44 +102,43 @@ export default function HomePage() {
{/* Categories Showcase */} -
-
-
+
+
-

- The Categories +

+ Our Collections

+

Discover the perfect scent for every moment

{loading ? (
{Array.from({ length: 5 }).map((_, i) => ( -
+
))}
) : (
- {categories.map((cat, idx) => ( + {categories.map((cat) => ( -
+
{cat.name} { (e.target as HTMLImageElement).style.display = 'none' }} /> -
-
- +
+ {cat.name} {cat._count && ( - - {cat._count.products} products + + {cat._count.products} Products )}
@@ -156,30 +150,32 @@ export default function HomePage() {
{/* Featured Products */} -
+
-
-

- Featured Picks -

+
+
+

+ Featured Picks +

+
- View All + View All Collection →
{loading ? ( -
+
{Array.from({ length: 3 }).map((_, i) => ( -
+
))}
) : ( -
- {featuredProducts.map((p, idx) => ( -
+
+ {featuredProducts.map((p) => ( +
))} diff --git a/apps/spa/tailwind.config.js b/apps/spa/tailwind.config.js index f9e264e..f6a0d19 100644 --- a/apps/spa/tailwind.config.js +++ b/apps/spa/tailwind.config.js @@ -8,29 +8,29 @@ export default { extend: { colors: { pop: { - pink: "#FF69B4", + pink: "#FF6B6B", yellow: "#FFF200", - orange: "#FF8800", - red: "#FF3333", - cyan: "#00FFFF", - green: "#39FF14", - purple: "#BA55D3", - bg: "#FFF9E6", - black: "#111111", + orange: "#FFA07A", + red: "#FF4500", + cyan: "#E0FFFF", + green: "#98FB98", + purple: "#D8BFD8", + bg: "#FFF0F5", + black: "#333333", }, }, boxShadow: { - 'brutal': '6px 6px 0px 0px #111', - 'brutal-hover': '2px 2px 0px 0px #111', + 'brutal': '0 10px 25px rgba(0,0,0,0.05)', + 'brutal-hover': '0 20px 40px rgba(0,0,0,0.1)', }, animation: { - 'pop-in': 'pop-in 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards', - 'spin-slow': 'spin 8s linear infinite', + 'pop-in': 'fade-in-up 0.6s ease-out forwards', + 'spin-slow': 'spin 15s linear infinite', }, keyframes: { - 'pop-in': { - '0%': { opacity: '0', transform: 'scale(0.8)' }, - '100%': { opacity: '1', transform: 'scale(1)' }, + 'fade-in-up': { + '0%': { opacity: '0', transform: 'translateY(20px)' }, + '100%': { opacity: '1', transform: 'translateY(0)' }, }, } }, diff --git a/apps/website/src/app/globals.css b/apps/website/src/app/globals.css index 741850b..8f629b2 100644 --- a/apps/website/src/app/globals.css +++ b/apps/website/src/app/globals.css @@ -1,78 +1,74 @@ @import "tailwindcss"; @theme { - /* Memphis Pop-Art color palette */ - --color-pop-pink: #FF69B4; + --color-pop-pink: #FF6B6B; --color-pop-yellow: #FFF200; - --color-pop-orange: #FF8800; - --color-pop-red: #FF3333; - --color-pop-cyan: #00FFFF; - --color-pop-green: #39FF14; - --color-pop-purple: #BA55D3; - --color-pop-bg: #FFF9E6; - --color-pop-black: #111111; + --color-pop-orange: #FFA07A; + --color-pop-red: #FF4500; + --color-pop-cyan: #E0FFFF; + --color-pop-green: #98FB98; + --color-pop-purple: #D8BFD8; + --color-pop-bg: #FFF0F5; + --color-pop-black: #333333; - /* Brutalist Shadows */ - --shadow-brutal: 6px 6px 0px 0px #111; - --shadow-brutal-hover: 2px 2px 0px 0px #111; + --shadow-brutal: 0 10px 25px rgba(0,0,0,0.05); + --shadow-brutal-hover: 0 20px 40px rgba(0,0,0,0.1); - /* Custom animations */ - --animate-pop-in: pop-in 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; - --animate-spin-slow: spin 8s linear infinite; + --animate-pop-in: fade-in-up 0.6s ease-out forwards; + --animate-spin-slow: spin 15s linear infinite; - @keyframes pop-in { - 0% { opacity: 0; transform: scale(0.8); } - 100% { opacity: 1; transform: scale(1); } + @keyframes fade-in-up { + 0% { opacity: 0; transform: translateY(20px); } + 100% { opacity: 1; transform: translateY(0); } } } @layer base { body { @apply bg-pop-bg text-pop-black font-sans antialiased; - background-image: radial-gradient(#111 2px, transparent 2px); - background-size: 32px 32px; - background-position: 0 0, 16px 16px; + background-image: radial-gradient(circle at top right, rgba(255,107,107,0.15), transparent 40%), + radial-gradient(circle at bottom left, rgba(255,160,122,0.15), transparent 40%); min-height: 100vh; } h1, h2, h3, h4 { - @apply text-pop-black font-black uppercase tracking-tight; + @apply text-pop-black font-semibold tracking-tight; } } @layer components { .brutal-box { - @apply bg-white border-4 border-pop-black shadow-brutal transition-all duration-300; + @apply bg-white border border-gray-100 rounded-2xl shadow-brutal transition-all duration-300; } .brutal-box-hover { - @apply hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-brutal-hover; + @apply hover:-translate-y-2 hover:shadow-brutal-hover; } .brutal-button { - @apply px-8 py-4 bg-pop-yellow text-pop-black font-black uppercase border-4 border-pop-black shadow-brutal transition-all duration-200 hover:bg-pop-pink hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-brutal-hover; + @apply px-8 py-4 bg-pop-pink text-white font-medium rounded-full shadow-brutal transition-all duration-300 hover:bg-pop-red hover:-translate-y-1 hover:shadow-brutal-hover; } .brutal-button-alt { - @apply px-8 py-4 bg-pop-cyan text-pop-black font-black uppercase border-4 border-pop-black shadow-brutal transition-all duration-200 hover:bg-pop-orange hover:translate-x-[4px] hover:translate-y-[4px] hover:shadow-brutal-hover; + @apply px-8 py-4 bg-white text-pop-pink font-medium rounded-full border border-pop-pink shadow-brutal transition-all duration-300 hover:bg-pop-bg hover:-translate-y-1 hover:shadow-brutal-hover; } } /* Custom Scrollbar */ ::-webkit-scrollbar { - width: 12px; + width: 8px; } ::-webkit-scrollbar-track { - @apply bg-pop-bg border-l-4 border-pop-black; + @apply bg-pop-bg; } ::-webkit-scrollbar-thumb { - @apply bg-pop-pink border-4 border-pop-black; + @apply bg-gray-300 rounded-full; } ::-webkit-scrollbar-thumb:hover { - @apply bg-pop-red; + @apply bg-gray-400; } /* Smooth Scrolling */ @@ -86,6 +82,6 @@ html { max-width: 480px; margin: 2rem auto; display: block; - border: 4px solid var(--color-pop-black); + border-radius: 16px; box-shadow: var(--shadow-brutal); } diff --git a/apps/website/src/app/page.tsx b/apps/website/src/app/page.tsx index 272fc06..8dd9a9f 100644 --- a/apps/website/src/app/page.tsx +++ b/apps/website/src/app/page.tsx @@ -44,30 +44,28 @@ export default async function HomePage() { return (
{/* Hero Section */} -
-
+
+
Hero Background +
-
-
- -
-

- {hero?.tagline || "Vibrant Memphis Pop-Art"} +

+

+ {hero?.tagline || "Vibrant Elegance Collection"}

-

+

{hero ? ( hero.title.split('[').map((part, i) => { if (part.includes(']')) { const [accent, rest] = part.split(']') return ( - + {accent} {rest} @@ -78,26 +76,23 @@ export default async function HomePage() { }) ) : ( <> - Inhale{' '} - - Serenity - + Inhale Serenity )}

-

+

{hero?.description || "Crafting premium sensory experiences that transform your space into a sanctuary of peace."}

-
+
{hero?.buttonText || "Explore Collection"} Learn More @@ -106,36 +101,35 @@ export default async function HomePage() {
{/* Categories Showcase */} -
-
-
+
+
-

- The Categories +

+ Our Collections

+

Discover the perfect scent for every moment

- {categories.map((cat, idx) => ( + {categories.map((cat) => ( -
+
{cat.name} -
-
- +
+ {cat.name} {cat._count && ( - - {cat._count.products} products + + {cat._count.products} Products )}
@@ -146,23 +140,25 @@ export default async function HomePage() {
{/* Featured Products */} -
+
-
-

- Featured Picks -

+
+
+

+ Featured Picks +

+
- View All + View All Collection →
-
- {featuredProducts.map((p, idx) => ( -
+
+ {featuredProducts.map((p) => ( +
))}