/** * Theme für Presseecho (presseecho.test) * Primary: #345636 (Grün) * Secondary: #6b8f71 (Hellgrün) * Font: Montserrat */ @import "./shared-styles.css"; /* Theme-spezifische CSS-Variablen */ :root { /* Font-Familie */ --font-primary: "Montserrat", ui-sans-serif, system-ui, sans-serif; --font-secondary: "Montserrat", ui-sans-serif, system-ui, sans-serif; /* HSL-Variablen basierend auf Primary Color #345636 */ --background: 0 0% 100%; --foreground: 126 24% 20%; --card: 0 0% 100%; --card-foreground: 126 24% 20%; --popover: 0 0% 100%; --popover-foreground: 126 24% 20%; /* Primary: #345636 -> hsl(126, 24%, 27%) */ --primary: 126 24% 27%; --primary-foreground: 0 0% 100%; --primary-50: 126 24% 96%; --primary-100: 126 24% 92%; --primary-200: 126 24% 85%; --primary-300: 126 24% 75%; --primary-400: 126 24% 65%; --primary-500: 126 24% 55%; --primary-600: 126 24% 48%; --primary-700: 126 24% 40%; --primary-800: 126 24% 32%; --primary-900: 126 24% 25%; --primary-950: 126 24% 20%; /* Secondary: #6b8f71 -> hsl(130, 15%, 49%) */ --secondary: 130 15% 49%; --secondary-foreground: 126 24% 20%; --muted: 126 10% 95%; --muted-foreground: 126 10% 45%; --accent: 126 24% 27%; --accent-foreground: 0 0% 100%; --destructive: 0 84% 60%; --destructive-foreground: 0 0% 100%; --border: 126 10% 90%; --input: 126 10% 90%; --ring: 126 24% 27%; --radius: 0.5rem; /* Gradient für Hero */ --gradient-hero: linear-gradient(135deg, hsl(var(--primary)) 0%, hsl(var(--secondary)) 100%); /* Shadow-Token */ --shadow-card: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --shadow-card-hover: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); /* Warning Colors für Anzeige-Badge */ --warning: 45 93% 47%; --warning-foreground: 26 83% 14%; } /* Dark Mode Variablen (falls gewünscht) */ @custom-variant dark (&:where(.dark, .dark *)); @layer theme { .dark { --background: 126 20% 10%; --foreground: 0 0% 95%; --card: 126 20% 12%; --card-foreground: 0 0% 95%; --popover: 126 20% 12%; --popover-foreground: 0 0% 95%; --primary: 130 15% 49%; --secondary: 126 24% 27%; --muted: 126 20% 20%; --muted-foreground: 126 10% 70%; --accent: 130 15% 49%; --accent-foreground: 0 0% 10%; --border: 126 20% 20%; --input: 126 20% 20%; --ring: 130 15% 49%; } } /* Theme-spezifische Overrides */ @layer base { body { background-color: hsl(var(--background)); color: hsl(var(--foreground)); } h1, h2, h3, h4, h5, h6 { color: hsl(var(--primary)); } a:hover { color: hsl(var(--secondary)); } } @layer components { /* Button Styles */ .btn-primary { @apply inline-flex items-center justify-center rounded-lg px-4 py-2 text-sm font-medium text-white shadow-md transition-all duration-300 hover:shadow-lg; background-image: linear-gradient(to right, hsl(var(--primary)), hsl(var(--secondary))); } .btn-primary:hover { background-image: linear-gradient( to right, hsl(var(--primary) / 0.9), hsl(var(--secondary) / 0.9) ); } .btn-secondary { @apply inline-flex items-center justify-center rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-all duration-200 hover:bg-gray-50; } /* Card Styles */ .card { @apply rounded-xl border transition-all duration-300; background-color: hsl(var(--card)); border-color: hsl(var(--border)); box-shadow: var(--shadow-card); } .card:hover { box-shadow: var(--shadow-card-hover); } .card-hover { @apply hover:scale-[1.02]; } .card-hover:hover { border-color: hsl(var(--primary) / 0.2); } /* Shadow utilities */ .shadow-card { box-shadow: var(--shadow-card); } .shadow-card-hover { box-shadow: var(--shadow-card-hover); } /* Input Styles */ .input-primary { @apply w-full rounded-lg border px-4 py-2 text-sm transition-all duration-200; border-color: hsl(var(--input)); } .input-primary:focus { @apply outline-none; --tw-ring-color: hsl(var(--primary)); box-shadow: 0 0 0 2px var(--tw-ring-color); border-color: transparent; } /* Badge Styles */ .badge { @apply inline-flex items-center gap-1 rounded-full px-3 py-1 text-xs font-medium transition-all duration-200; } .badge-primary { @apply border; background-color: hsl(var(--primary) / 0.1); color: hsl(var(--primary)); border-color: hsl(var(--primary) / 0.2); } .badge-secondary { @apply border text-gray-700; background-color: hsl(var(--secondary) / 0.1); border-color: hsl(var(--secondary) / 0.2); } } /* Animations */ @layer utilities { @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes fade-in-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fade-in-down { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slide-in-right { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } } @keyframes scale-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } .animate-fade-in { animation: fade-in 0.6s ease-out forwards; } .animate-fade-in-up { animation: fade-in-up 0.6s ease-out forwards; } .animate-fade-in-down { animation: fade-in-down 0.6s ease-out forwards; } .animate-slide-in-right { animation: slide-in-right 0.6s ease-out forwards; } .animate-scale-in { animation: scale-in 0.4s ease-out forwards; } .animation-delay-100 { animation-delay: 0.1s; opacity: 0; } .animation-delay-200 { animation-delay: 0.2s; opacity: 0; } .animation-delay-300 { animation-delay: 0.3s; opacity: 0; } .animation-delay-400 { animation-delay: 0.4s; opacity: 0; } }