455 lines
9.7 KiB
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;
|
|
}
|