landing-page/app/globals.css

455 lines
9.7 KiB
CSS

@import "tailwindcss";
:root {
/* Brand colors - TCM Red (hsl(0, 100%, 40%) as base) */
--brand-50: hsl(0, 100%, 97%);
--brand-100: hsl(0, 100%, 94%);
--brand-200: hsl(0, 100%, 87%);
--brand-300: hsl(0, 100%, 75%);
--brand-400: hsl(0, 100%, 60%);
--brand-500: hsl(0, 100%, 50%);
--brand-600: hsl(0, 100%, 40%);
--brand-700: hsl(0, 100%, 33%);
--brand-800: hsl(0, 100%, 27%);
--brand-900: hsl(0, 100%, 22%);
--brand-950: hsl(0, 100%, 12%);
/* Accent colors - Vibrant emerald for sustainability */
--accent-50: #ecfdf5;
--accent-100: #d1fae5;
--accent-200: #a7f3d0;
--accent-300: #6ee7b7;
--accent-400: #34d399;
--accent-500: #10b981;
--accent-600: #059669;
--accent-700: #047857;
--accent-800: #065f46;
--accent-900: #064e3b;
/* Neutral colors */
--neutral-50: #fafafa;
--neutral-100: #f5f5f5;
--neutral-200: #e5e5e5;
--neutral-300: #d4d4d4;
--neutral-400: #a3a3a3;
--neutral-500: #737373;
--neutral-600: #525252;
--neutral-700: #404040;
--neutral-800: #262626;
--neutral-900: #171717;
--neutral-950: #0a0a0a;
/* Semantic colors */
--background: #ffffff;
--foreground: #171717;
--muted: #f5f5f5;
--muted-foreground: #737373;
--border: #e5e5e5;
--ring: hsl(0, 100%, 40%);
/* Gradients */
--gradient-brand: linear-gradient(135deg, hsl(0, 100%, 33%) 0%, hsl(0, 100%, 40%) 50%, hsl(0, 100%, 50%) 100%);
--gradient-brand-reverse: linear-gradient(135deg, hsl(0, 100%, 50%) 0%, hsl(0, 100%, 40%) 100%);
--gradient-accent: linear-gradient(135deg, #047857 0%, #10b981 50%, #34d399 100%);
--gradient-dark: linear-gradient(135deg, #0a0a0a 0%, #262626 100%);
--gradient-hero: linear-gradient(180deg, hsl(0, 50%, 98%) 0%, #ffffff 50%, hsl(0, 20%, 97%) 100%);
--gradient-warm: linear-gradient(135deg, hsl(0, 100%, 40%) 0%, hsl(20, 100%, 50%) 100%);
/* Shadows */
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
--shadow-glow: 0 0 40px -10px hsl(0, 100%, 40%);
--shadow-glow-accent: 0 0 40px -10px rgb(16 185 129 / 0.5);
--shadow-brand: 0 4px 14px 0 hsl(0 100% 40% / 0.35);
/* Animation timing */
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
--ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
--ease-in-out-circ: cubic-bezier(0.85, 0, 0.15, 1);
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #fafafa;
--muted: #262626;
--muted-foreground: #a3a3a3;
--border: #404040;
}
}
* {
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
background: var(--background);
color: var(--foreground);
font-family: var(--font-sans), system-ui, -apple-system, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
overflow-x: hidden;
}
/* Selection styling */
::selection {
background-color: hsl(0, 100%, 40%);
color: white;
}
/* Focus styling */
:focus-visible {
outline: 2px solid var(--ring);
outline-offset: 2px;
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--muted);
}
::-webkit-scrollbar-thumb {
background: linear-gradient(180deg, hsl(0, 100%, 50%) 0%, hsl(0, 100%, 40%) 100%);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: linear-gradient(180deg, hsl(0, 100%, 55%) 0%, hsl(0, 100%, 45%) 100%);
}
/* Utility classes for animations */
.animate-fade-in {
animation: fadeIn 0.6s var(--ease-out-expo) forwards;
}
.animate-slide-up {
animation: slideUp 0.6s var(--ease-out-expo) forwards;
}
.animate-scale-in {
animation: scaleIn 0.5s var(--ease-out-expo) forwards;
}
.animate-float {
animation: float 6s ease-in-out infinite;
}
.animate-pulse-glow {
animation: pulseGlow 2s ease-in-out infinite;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes scaleIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
@keyframes float {
0%, 100% {
transform: translateY(0px);
}
50% {
transform: translateY(-20px);
}
}
@keyframes pulseGlow {
0%, 100% {
box-shadow: 0 0 20px hsl(0 100% 40% / 0.3);
}
50% {
box-shadow: 0 0 40px hsl(0 100% 40% / 0.6);
}
}
@keyframes shimmer {
0% {
background-position: -200% 0;
}
100% {
background-position: 200% 0;
}
}
/* Gradient text utility */
.gradient-text {
background: var(--gradient-brand);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.gradient-text-accent {
background: var(--gradient-accent);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
/* Glass morphism effect */
.glass {
background: rgba(255, 255, 255, 0.8);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255, 255, 255, 0.3);
}
@media (prefers-color-scheme: dark) {
.glass {
background: rgba(10, 10, 10, 0.8);
border: 1px solid rgba(255, 255, 255, 0.1);
}
}
/* Noise texture overlay */
.noise-overlay::before {
content: "";
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
opacity: 0.02;
pointer-events: none;
z-index: 1;
}
/* Animated underline for links */
.animated-underline {
position: relative;
display: inline-block;
}
.animated-underline::after {
content: "";
position: absolute;
bottom: -2px;
left: 0;
width: 0;
height: 2px;
background: var(--gradient-brand);
transition: width 0.3s var(--ease-out-expo);
}
.animated-underline:hover::after {
width: 100%;
}
/* Shimmer effect for loading states */
.shimmer {
background: linear-gradient(
90deg,
transparent 0%,
rgba(255, 255, 255, 0.4) 50%,
transparent 100%
);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
}
/* Card hover effect */
.card-hover {
transition: all 0.4s var(--ease-out-expo);
}
.card-hover:hover {
transform: translateY(-8px);
box-shadow: var(--shadow-2xl);
}
/* Interactive card with border glow */
.card-glow {
position: relative;
transition: all 0.4s var(--ease-out-expo);
}
.card-glow::before {
content: "";
position: absolute;
inset: -2px;
background: var(--gradient-brand);
border-radius: inherit;
opacity: 0;
z-index: -1;
transition: opacity 0.4s var(--ease-out-expo);
}
.card-glow:hover::before {
opacity: 1;
}
.card-glow:hover {
transform: translateY(-4px);
}
/* Magnetic button effect helper */
.magnetic {
transition: transform 0.3s var(--ease-out-expo);
}
/* Icon hover rotation */
.icon-spin {
transition: transform 0.5s var(--ease-spring);
}
.icon-spin:hover {
transform: rotate(360deg);
}
/* Section padding utility */
.section-padding {
padding: 5rem 1.5rem;
}
@media (min-width: 768px) {
.section-padding {
padding: 7rem 2rem;
}
}
@media (min-width: 1024px) {
.section-padding {
padding: 8rem 4rem;
}
}
/* Container max width */
.container-max {
max-width: 1400px;
margin: 0 auto;
}
/* Decorative blob shapes */
.blob {
position: absolute;
border-radius: 50%;
filter: blur(60px);
opacity: 0.4;
pointer-events: none;
}
.blob-brand {
background: hsl(0, 100%, 70%);
}
.blob-accent {
background: hsl(150, 80%, 60%);
}
/* Line decoration */
.line-decoration {
width: 60px;
height: 4px;
background: var(--gradient-brand);
border-radius: 2px;
}
/* Stagger animation helper */
.stagger > * {
opacity: 0;
animation: slideUp 0.6s var(--ease-out-expo) forwards;
}
.stagger > *:nth-child(1) { animation-delay: 0.1s; }
.stagger > *:nth-child(2) { animation-delay: 0.2s; }
.stagger > *:nth-child(3) { animation-delay: 0.3s; }
.stagger > *:nth-child(4) { animation-delay: 0.4s; }
.stagger > *:nth-child(5) { animation-delay: 0.5s; }
.stagger > *:nth-child(6) { animation-delay: 0.6s; }
/* Text shadow for headings */
.text-shadow {
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
/* Hover lift effect */
.hover-lift {
transition: transform 0.3s var(--ease-out-expo), box-shadow 0.3s var(--ease-out-expo);
}
.hover-lift:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-lg);
}
/* Scale on hover */
.hover-scale {
transition: transform 0.3s var(--ease-spring);
}
.hover-scale:hover {
transform: scale(1.05);
}
/* Rotate on hover */
.hover-rotate {
transition: transform 0.4s var(--ease-spring);
}
.hover-rotate:hover {
transform: rotate(3deg);
}
/* Border gradient effect */
.border-gradient {
position: relative;
background: var(--background);
}
.border-gradient::before {
content: "";
position: absolute;
inset: 0;
padding: 2px;
background: var(--gradient-brand);
border-radius: inherit;
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: exclude;
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
pointer-events: none;
}