diff --git a/src/app/globals.css b/src/app/globals.css index 263b147..389ff88 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -2,61 +2,11 @@ /* ============================================ MANOONOILS DESIGN SYSTEM - Inspired by premium skincare brands + Tailwind 4 compatible - uses CSS layers ============================================ */ -:root { - /* Primary Colors */ - --color-white: #ffffff; - --color-background: #fafafa; - --color-background-alt: #f5f5f5; - --color-foreground: #1a1a1a; - --color-foreground-muted: #666666; - --color-foreground-subtle: #999999; - - /* Accent Colors */ - --color-accent: #e8f0f5; - --color-accent-dark: #a8c5d8; - --color-accent-blue: #e8f0f5; - --color-gold: #c9a962; - --color-gold-light: #d4b978; - - /* UI Colors */ - --color-border: #e5e5e5; - --color-border-dark: #d1d1d1; - --color-cta: #000000; - --color-cta-hover: #333333; - --color-overlay: rgba(0, 0, 0, 0.4); - - /* Spacing */ - --space-xs: 4px; - --space-sm: 8px; - --space-md: 16px; - --space-lg: 24px; - --space-xl: 32px; - --space-2xl: 48px; - --space-3xl: 64px; - --space-4xl: 96px; - --space-5xl: 128px; - - /* Typography */ - --font-display: 'DM Sans', sans-serif; - --font-body: 'Inter', sans-serif; - - /* Transitions */ - --transition-fast: 150ms ease; - --transition-base: 250ms ease; - --transition-slow: 350ms ease; - - /* Shadows */ - --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); - --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); - --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); - --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1); -} - @theme inline { - /* Colors - reference :root variables */ + /* Colors - reference CSS variables */ --color-white: var(--color-white); --color-background: var(--color-background); --color-background-alt: var(--color-background-alt); @@ -79,6 +29,43 @@ --font-body: var(--font-body); } +/* ============================================ + CSS VARIABLES + ============================================ */ + +:root { + --color-white: #ffffff; + --color-background: #fafafa; + --color-background-alt: #f5f5f5; + --color-foreground: #1a1a1a; + --color-foreground-muted: #666666; + --color-foreground-subtle: #999999; + + --color-accent: #e8f0f5; + --color-accent-dark: #a8c5d8; + --color-accent-blue: #e8f0f5; + --color-gold: #c9a962; + --color-gold-light: #d4b978; + + --color-border: #e5e5e5; + --color-border-dark: #d1d1d1; + --color-cta: #000000; + --color-cta-hover: #333333; + --color-overlay: rgba(0, 0, 0, 0.4); + + --font-display: 'DM Sans', sans-serif; + --font-body: 'Inter', sans-serif; + + --transition-fast: 150ms ease; + --transition-base: 250ms ease; + --transition-slow: 350ms ease; + + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); + --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1); +} + /* ============================================ FONT IMPORTS ============================================ */ @@ -98,307 +85,276 @@ } /* ============================================ - BASE STYLES + BASE STYLES (in Tailwind base layer) ============================================ */ -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -html { - scroll-behavior: smooth; -} - -body { - background: var(--color-background); - color: var(--color-foreground); - font-family: var(--font-body); - font-size: 16px; - line-height: 1.6; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +@layer base { + html { + scroll-behavior: smooth; + } + + body { + background: var(--color-background); + color: var(--color-foreground); + font-family: var(--font-body); + font-size: 16px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + h1, h2, h3, h4, h5, h6 { + font-family: var(--font-display); + font-weight: 500; + line-height: 1.2; + letter-spacing: -0.02em; + } + + h1 { + font-size: clamp(2rem, 5vw, 3.5rem); + } + + h2 { + font-size: clamp(1.5rem, 4vw, 2.5rem); + } + + h3 { + font-size: clamp(1.25rem, 3vw, 1.75rem); + } + + input, textarea, select { + font-family: var(--font-body); + font-size: 16px; + } + + input:focus, textarea:focus, select:focus { + outline: none; + border-color: var(--color-foreground); + } + + :focus-visible { + outline: 2px solid var(--color-foreground); + outline-offset: 2px; + } } /* ============================================ - TYPOGRAPHY + COMPONENTS ============================================ */ -h1, h2, h3, h4, h5, h6 { - font-family: var(--font-display); - font-weight: 500; - line-height: 1.2; - letter-spacing: -0.02em; -} - -h1 { - font-size: clamp(2rem, 5vw, 3.5rem); -} - -h2 { - font-size: clamp(1.5rem, 4vw, 2.5rem); -} - -h3 { - font-size: clamp(1.25rem, 3vw, 1.75rem); -} - -.text-display { - font-family: var(--font-display); - font-weight: 500; - letter-spacing: -0.02em; -} - -.text-body { - font-family: var(--font-body); -} - -.text-uppercase { - text-transform: uppercase; - letter-spacing: 0.05em; -} - -.text-caption { - font-size: 12px; - text-transform: uppercase; - letter-spacing: 0.1em; - font-weight: 500; -} - -.text-muted { - color: var(--color-foreground-muted); -} - -.text-subtle { - color: var(--color-foreground-subtle); -} - -/* ============================================ - UTILITY CLASSES - ============================================ */ - -.container { - width: 100%; - max-width: 1400px; - margin-left: auto; - margin-right: auto; - padding-left: 24px; - padding-right: 24px; -} - -@media (min-width: 640px) { +@layer components { .container { - padding-left: 32px; - padding-right: 32px; + width: 100%; + max-width: 1400px; + margin-left: auto; + margin-right: auto; + padding-left: 24px; + padding-right: 24px; } -} - -@media (min-width: 1024px) { - .container { - padding-left: 48px; - padding-right: 48px; + + @media (min-width: 640px) { + .container { + padding-left: 32px; + padding-right: 32px; + } + } + + @media (min-width: 1024px) { + .container { + padding-left: 48px; + padding-right: 48px; + } + } + + .container-narrow { + max-width: 1200px; + } + + .container-wide { + max-width: 1600px; + } + + .btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 14px 32px; + font-size: 13px; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.05em; + border: none; + cursor: pointer; + transition: all var(--transition-base); + } + + .btn-primary { + background: var(--color-cta); + color: var(--color-white); + } + + .btn-primary:hover { + background: var(--color-cta-hover); + } + + .btn-secondary { + background: transparent; + color: var(--color-foreground); + border: 1px solid var(--color-border-dark); + } + + .btn-secondary:hover { + background: var(--color-foreground); + color: var(--color-white); + border-color: var(--color-foreground); + } + + .link-underline { + position: relative; + text-decoration: none; + } + + .link-underline::after { + content: ''; + position: absolute; + bottom: -2px; + left: 0; + width: 0; + height: 1px; + background: currentColor; + transition: width var(--transition-base); + } + + .link-underline:hover::after { + width: 100%; + } + + .text-display { + font-family: var(--font-display); + font-weight: 500; + letter-spacing: -0.02em; + } + + .text-body { + font-family: var(--font-body); + } + + .text-uppercase { + text-transform: uppercase; + letter-spacing: 0.05em; + } + + .text-caption { + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.1em; + font-weight: 500; + } + + .text-muted { + color: var(--color-foreground-muted); + } + + .text-subtle { + color: var(--color-foreground-subtle); + } + + .flex-center { + display: flex; + align-items: center; + justify-content: center; } -} - -.container-narrow { - max-width: 1200px; -} - -.container-wide { - max-width: 1600px; -} - -/* Section spacing */ -.section { - padding-top: var(--space-4xl); - padding-bottom: var(--space-4xl); -} - -.section-sm { - padding-top: var(--space-2xl); - padding-bottom: var(--space-2xl); -} - -/* Flex utilities */ -.flex-center { - display: flex; - align-items: center; - justify-content: center; } /* ============================================ - INTERACTIVE ELEMENTS + UTILITIES ============================================ */ -/* Button Base */ -.btn { - display: inline-flex; - align-items: center; - justify-content: center; - padding: 14px 32px; - font-size: 13px; - font-weight: 500; - text-transform: uppercase; - letter-spacing: 0.05em; - border: none; - cursor: pointer; - transition: all var(--transition-base); -} - -.btn-primary { - background: var(--color-cta); - color: var(--color-white); -} - -.btn-primary:hover { - background: var(--color-cta-hover); -} - -.btn-secondary { - background: transparent; - color: var(--color-foreground); - border: 1px solid var(--color-border-dark); -} - -.btn-secondary:hover { - background: var(--color-foreground); - color: var(--color-white); - border-color: var(--color-foreground); -} - -/* Link underline animation */ -.link-underline { - position: relative; - text-decoration: none; -} - -.link-underline::after { - content: ''; - position: absolute; - bottom: -2px; - left: 0; - width: 0; - height: 1px; - background: currentColor; - transition: width var(--transition-base); -} - -.link-underline:hover::after { - width: 100%; +@layer utilities { + .section { + padding-top: 96px; + padding-bottom: 96px; + } + + .section-sm { + padding-top: 48px; + padding-bottom: 48px; + } + + ::-webkit-scrollbar { + width: 8px; + } + + ::-webkit-scrollbar-track { + background: var(--color-background-alt); + } + + ::-webkit-scrollbar-thumb { + background: var(--color-border-dark); + border-radius: 4px; + } + + ::-webkit-scrollbar-thumb:hover { + background: var(--color-foreground-muted); + } + + .animate-fade-in { + animation: fadeIn var(--transition-slow) forwards; + } + + .animate-slide-up { + animation: slideUp var(--transition-slow) forwards; + } + + .animate-slide-in-right { + animation: slideInRight var(--transition-slow) forwards; + } + + @keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } + } + + @keyframes slideUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } + } + + @keyframes slideInRight { + from { opacity: 0; transform: translateX(100%); } + to { opacity: 1; transform: translateX(0); } + } + + @keyframes marquee { + 0% { transform: translateX(0); } + 100% { transform: translateX(-50%); } + } + + .animate-marquee { + animation: marquee 25s linear infinite; + } + + .animate-marquee-slow { + animation: marquee 35s linear infinite; + } + + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; + } } /* ============================================ - FORM ELEMENTS + REDUCED MOTION ============================================ */ -input, textarea, select { - font-family: var(--font-body); - font-size: 16px; -} - -input:focus, textarea:focus, select:focus { - outline: none; - border-color: var(--color-foreground); -} - -/* ============================================ - SCROLLBAR - ============================================ */ - -::-webkit-scrollbar { - width: 8px; -} - -::-webkit-scrollbar-track { - background: var(--color-background-alt); -} - -::-webkit-scrollbar-thumb { - background: var(--color-border-dark); - border-radius: 4px; -} - -::-webkit-scrollbar-thumb:hover { - background: var(--color-foreground-muted); -} - -/* ============================================ - ANIMATIONS - ============================================ */ - -@keyframes fadeIn { - from { - opacity: 0; - } - to { - opacity: 1; - } -} - -@keyframes slideUp { - from { - opacity: 0; - transform: translateY(20px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes slideInRight { - from { - opacity: 0; - transform: translateX(100%); - } - to { - opacity: 1; - transform: translateX(0); - } -} - -.animate-fade-in { - animation: fadeIn var(--transition-slow) forwards; -} - -.animate-slide-up { - animation: slideUp var(--transition-slow) forwards; -} - -.animate-slide-in-right { - animation: slideInRight var(--transition-slow) forwards; -} - -/* Marquee Animations */ -@keyframes marquee { - 0% { - transform: translateX(0); - } - 100% { - transform: translateX(-50%); - } -} - -.animate-marquee { - animation: marquee 25s linear infinite; -} - -.animate-marquee-slow { - animation: marquee 35s linear infinite; -} - -/* ============================================ - ACCESSIBILITY - ============================================ */ - -/* Focus visible styles */ -:focus-visible { - outline: 2px solid var(--color-foreground); - outline-offset: 2px; -} - -/* Reduced motion */ @media (prefers-reduced-motion: reduce) { *, *::before, @@ -412,16 +368,3 @@ input:focus, textarea:focus, select:focus { scroll-behavior: auto; } } - -/* Screen reader only */ -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} diff --git a/src/app/page.tsx b/src/app/page.tsx index d282e65..bd877d5 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -162,15 +162,15 @@ export default async function Homepage() { Subscribe to receive exclusive offers, beauty tips, and be the first to know about new products.
{/* Newsletter Form - Centered */} -