presseportale/resources/css/web/shared-styles.css
Kevin Adametz 0a3e52d603 19-05-2026 Rebrand Pressekonto, Hub-Flux UI und Legacy-Media-Migration
Umbenennung presseportale → pressekonto in Domains, Themes und Dokumentation.
Design-Tokens, Portal-Shell, Customer-Dashboard, Auth- und Admin-PM-Views.
Artisan-Befehl migrate:legacy-media mit Tests und Hub-Flux-Entwicklungsdocs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 16:36:13 +00:00

819 lines
20 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Gemeinsame Styles für alle Frontend-Themes
* Diese Datei wird von allen Web-Themes importiert
*
* Hub × FluxUI: Seit Phase 0 leben die Design-Tokens (Farben, Fonts,
* Radii, Schatten) zentral in resources/css/shared/design-tokens.css.
* Wir importieren sie hier — damit kommen sie automatisch in jedes
* Web-Theme (theme-pressekonto.css, theme-presseecho.css,
* theme-businessportal24.css).
*/
@import "tailwindcss";
@import "../shared/design-tokens.css";
@import "../shared/hub-components.css";
/* Definiere wo Tailwind nach Klassen suchen soll */
@source "../../views/web";
@source "../../views/layouts/web";
@source "../../views/livewire/web";
@source "../../views/components/web";
@source "../../views/livewire/auth";
@source "../../views/components/layouts/auth";
/* Tailwind Base Layer für gemeinsame Elemente */
@layer base {
*,
::after,
::before,
::backdrop,
::file-selector-button {
border-color: var(--color-zinc-200, currentColor);
}
body {
@apply font-sans antialiased;
}
/* Typography Defaults */
h1,
h2,
h3,
h4,
h5,
h6 {
@apply font-bold leading-tight;
}
h1 {
@apply text-4xl md:text-5xl;
}
h2 {
@apply text-3xl md:text-4xl;
}
h3 {
@apply text-2xl md:text-3xl;
}
h4 {
@apply text-xl md:text-2xl;
}
h5 {
@apply text-lg md:text-xl;
}
h6 {
@apply text-base md:text-lg;
}
/* Link Styles */
a {
@apply transition-colors duration-200;
}
/* Focus Styles */
:focus-visible {
@apply outline-none ring-2 ring-offset-2;
}
}
/* Gemeinsame Component Styles */
@layer components {
/* Button Base Styles */
.btn {
@apply inline-flex items-center justify-center px-4 py-2 rounded-lg font-medium transition-all duration-200;
@apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2;
}
.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-zinc-300 dark:border-zinc-700 bg-white dark:bg-zinc-800 px-4 py-2 text-sm font-medium text-zinc-700 dark:text-zinc-300 transition-all duration-200 hover:bg-zinc-50 dark:hover:bg-zinc-700;
}
/* Card Styles - Base */
.card {
@apply rounded-xl border transition-all duration-300 bg-white dark:bg-zinc-900;
border-color: hsl(var(--border));
box-shadow: var(--shadow-card);
}
.dark .card {
border-color: hsl(var(--border) / 0.1);
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.3);
}
/* Shadow utilities */
.shadow-card {
box-shadow: var(--shadow-card);
}
.shadow-card-hover {
box-shadow: var(--shadow-card-hover);
}
/* Badge Styles - Base */
.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-zinc-700 dark:text-zinc-300;
background-color: hsl(var(--secondary) / 0.1);
border-color: hsl(var(--secondary) / 0.2);
}
/* Input Styles */
.input-primary {
@apply w-full rounded-lg border px-4 py-2 text-sm transition-all duration-200 bg-white dark:bg-zinc-900 text-zinc-900 dark:text-zinc-100;
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;
}
/* Container */
.container-custom {
@apply container mx-auto px-4 sm:px-6 lg:px-8;
}
/* Section Spacing */
.section {
@apply py-12 md:py-16 lg:py-20;
}
/* Section Header Styles */
.section-header {
@apply mb-8;
}
.section-title {
@apply text-2xl md:text-3xl font-bold text-zinc-900 dark:text-zinc-100 mb-2;
}
.section-subtitle {
@apply text-zinc-600 dark:text-zinc-400;
}
}
/* Utility Classes & Animations */
@layer utilities {
.text-balance {
text-wrap: balance;
}
/* Animations */
@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;
}
/* ============================================
HIGHLIGHTS SLIDER - Gemeinsame Styles
============================================ */
/* Gradient Indicator */
.gradient-indicator {
width: 0.5rem;
height: 2.5rem;
background: linear-gradient(to bottom,
hsl(var(--primary)),
hsl(var(--secondary)));
border-radius: 9999px;
display: inline-block;
}
/* Slider Wrapper */
.slider-wrapper {
position: relative;
margin-left: -1.5rem;
margin-right: -1.5rem;
padding: 0.5rem 1rem;
margin-top: -3rem;
}
/* Slider Container */
.highlights-slider {
overflow-x: auto;
overflow-y: visible;
scroll-snap-type: x mandatory;
scroll-behavior: smooth;
display: flex;
gap: 1.5rem;
padding: 1.5rem 1.25rem 2rem;
scrollbar-width: none;
-ms-overflow-style: none;
}
.highlights-slider::-webkit-scrollbar {
display: none;
}
/* Slider Navigation Buttons */
.slider-nav-btn {
width: 2.5rem;
height: 2.5rem;
border-radius: 9999px;
border: 1px solid;
border-color: rgb(228 228 231 / 1);
background: transparent;
display: flex;
align-items: center;
justify-content: center;
transition: all 0.2s;
cursor: pointer;
}
.dark .slider-nav-btn {
border-color: rgb(63 63 70 / 1);
}
.slider-nav-btn:hover:not(:disabled) {
border-color: hsl(var(--primary));
background: hsl(var(--primary) / 0.1);
}
.slider-nav-btn:disabled {
opacity: 0.3;
cursor: not-allowed;
}
/* Slider Dots */
.slider-dots {
display: flex;
justify-content: center;
gap: 0.5rem;
margin-top: 0;
}
.slider-dot {
width: 0.5rem;
height: 0.5rem;
border-radius: 9999px;
background: rgb(212 212 216 / 1);
transition: all 0.3s;
cursor: pointer;
border: none;
padding: 0;
}
.dark .slider-dot {
background: rgb(82 82 91 / 1);
}
.slider-dot.active {
width: 2rem;
background: hsl(var(--primary));
}
/* Highlight Card Link */
.highlight-card-link {
display: block;
flex-shrink: 0;
width: 100%;
scroll-snap-align: center;
text-decoration: none;
}
.highlight-card-link:focus {
outline: 2px solid hsl(var(--primary));
outline-offset: 2px;
}
.card-premium {
background: var(--color-white);
box-shadow: var(--shadow-card);
border: 1px solid;
border-color: hsl(var(--primary) / 0.2);
}
.card-premium-hover {
box-shadow: var(--shadow-card-hover);
border-color: hsl(var(--primary) / 0.4);
transform: translateY(-0.125rem);
}
/* Highlight Card */
.highlight-card {
background: linear-gradient(to bottom right,
rgb(244 244 245 / 0.5),
rgb(244 244 245 / 0.25));
border-radius: 0.75rem;
border: 1px solid;
border-color: hsl(var(--primary) / 0.2);
overflow: hidden;
transition: all 0.3s;
box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
height: 100%;
display: flex;
flex-direction: column;
}
.dark .highlight-card {
background: linear-gradient(to bottom right,
rgb(39 39 42 / 1),
rgb(39 39 42 / 0.5));
border-color: rgb(63 63 70 / 1);
}
.highlight-card-link:hover .highlight-card {
box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1),
0 8px 10px -6px rgb(0 0 0 / 0.1);
border-color: hsl(var(--primary) / 0.3);
transform: translateY(-0.125rem);
}
/* Highlight Card Image */
.highlight-card-image {
position: relative;
height: 16rem;
overflow: hidden;
background: linear-gradient(to bottom right,
rgb(244 244 245 / 1),
rgb(250 250 250 / 1));
}
.dark .highlight-card-image {
background: linear-gradient(to bottom right,
rgb(39 39 42 / 1),
rgb(24 24 27 / 1));
}
@media (min-width: 768px) {
.highlight-card-image {
height: 100%;
}
}
/* Highlight Badge */
.highlight-badge {
display: inline-block;
font-size: 0.625rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
padding: 0.375rem 0.75rem;
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
backdrop-filter: blur(12px);
border-radius: 0.25rem;
color: white;
}
/* Highlight Card Content */
.highlight-card-content {
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 1.5rem 2rem;
}
/* Highlight Meta */
.highlight-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.5rem;
margin-bottom: 1rem;
font-size: 0.75rem;
line-height: 1rem;
color: rgb(113 113 122 / 1);
}
.dark .highlight-meta {
color: rgb(161 161 170 / 1);
}
/* Highlight Title */
.highlight-title {
font-size: 1.5rem;
line-height: 2rem;
font-weight: 700;
color: rgb(24 24 27 / 1);
margin-bottom: 1rem;
line-height: 1.25;
transition: color 0.2s;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
@media (min-width: 768px) {
.highlight-title {
font-size: 1.875rem;
line-height: 2.25rem;
}
}
.dark .highlight-title {
color: rgb(250 250 250 / 1);
}
.highlight-card-link:hover .highlight-title {
color: hsl(var(--primary));
}
/* Highlight Text */
.highlight-text {
font-size: 1rem;
line-height: 1.625;
color: rgb(82 82 91 / 1);
margin-bottom: 1.5rem;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.dark .highlight-text {
color: rgb(161 161 170 / 1);
}
/* Highlight Footer */
.highlight-footer {
display: flex;
align-items: center;
justify-content: space-between;
padding-top: 1.25rem;
border-top: 1px solid;
border-color: hsl(var(--primary) / 0.1);
}
/* ============================================
SECTION CONTAINERS - Gemeinsame Styles
============================================ */
.section-light-bg {
background: linear-gradient(135deg,
rgb(250 250 250 / 0.5) 0%,
rgb(244 244 245 / 0.5) 100%);
}
.dark .section-light-bg {
background: linear-gradient(135deg,
rgb(24 24 27 / 0.5) 0%,
rgb(39 39 42 / 0.5) 100%);
}
.section-gradient-bg {
background: linear-gradient(to bottom right,
hsl(var(--primary) / 0.05),
hsl(var(--secondary) / 0.05));
border-top: 1px solid;
border-bottom: 1px solid;
border-color: hsl(var(--primary) / 0.1);
}
.dark .section-gradient-bg {
background: linear-gradient(to bottom right,
hsl(var(--primary) / 0.1),
hsl(var(--secondary) / 0.1));
}
/* ============================================
HERO BANNER - Gemeinsame Styles
============================================ */
.hero-gradient {
background: linear-gradient(135deg,
hsl(var(--primary)) 0%,
hsl(var(--secondary)) 100%);
box-shadow: inset 0 -6px 16px rgba(0, 0, 0, 0.16);
position: relative;
}
.dark .hero-gradient {
box-shadow: inset 0 -6px 16px rgba(0, 0, 0, 0.2);
}
.hero-title {
text-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
}
.hero-subtitle {
text-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
}
/* ============================================
INDUSTRY ICONS - Gemeinsame Styles
============================================ */
.industry-icon-badge img {
opacity: 0.6;
}
.dark .industry-icon-badge img {
opacity: 0.6;
filter: brightness(0) saturate(100%) invert(100%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%);
}
/* ============================================
PAGE HEADER - Unterseiten
============================================ */
.page-header {
padding: 3rem 0;
background: linear-gradient(135deg,
rgb(250 250 250 / 0.5) 0%,
rgb(244 244 245 / 0.5) 100%);
border-bottom: 1px solid rgb(228 228 231 / 1);
}
.dark .page-header {
background: linear-gradient(135deg,
rgb(24 24 27 / 0.5) 0%,
rgb(39 39 42 / 0.5) 100%);
border-bottom: 1px solid rgb(63 63 70 / 1);
}
.page-header-compact {
padding: 2rem 0;
}
.page-header-title {
font-size: 2.25rem;
line-height: 2.5rem;
font-weight: 700;
color: rgb(24 24 27 / 1);
margin-bottom: 1rem;
}
@media (min-width: 768px) {
.page-header-title {
font-size: 3rem;
line-height: 1.2;
}
}
.dark .page-header-title {
color: rgb(250 250 250 / 1);
}
.page-header-subtitle {
font-size: 1.125rem;
line-height: 1.75rem;
color: rgb(82 82 91 / 1);
}
.dark .page-header-subtitle {
color: rgb(161 161 170 / 1);
}
/* ============================================
SIDEBAR WIDGETS
============================================ */
.sidebar-widget {
background: rgb(255 255 255 / 1);
border: 1px solid rgb(228 228 231 / 1);
border-radius: 0.75rem;
padding: 1.5rem;
margin-bottom: 1.5rem;
transition: all 0.2s;
}
.dark .sidebar-widget {
background: rgb(39 39 42 / 1);
border-color: rgb(63 63 70 / 1);
}
.sidebar-widget:hover {
box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1),
0 2px 4px -2px rgb(0 0 0 / 0.1);
}
.sidebar-widget-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1rem;
padding-bottom: 1rem;
border-bottom: 1px solid rgb(228 228 231 / 1);
}
.dark .sidebar-widget-header {
border-bottom-color: rgb(63 63 70 / 1);
}
.sidebar-widget-title {
font-size: 1.125rem;
font-weight: 600;
color: rgb(24 24 27 / 1);
}
.dark .sidebar-widget-title {
color: rgb(250 250 250 / 1);
}
.sidebar-widget-content {
color: rgb(82 82 91 / 1);
}
.dark .sidebar-widget-content {
color: rgb(161 161 170 / 1);
}
/* ============================================
NAVIGATION - Aktive States
============================================ */
.main-nav-link.active {
color: hsl(var(--primary));
}
.main-nav-link.active::after {
width: 100%;
}
/* ============================================
PAGINATION - Gradient für aktive Seite
============================================ */
.pagination-btn {
padding: 0.5rem 1rem;
font-size: 0.875rem;
font-weight: 500;
border-radius: 0.5rem;
transition: all 0.2s ease;
background: rgba(255, 255, 255, 0.7);
color: var(--zinc-900);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
box-shadow: var(--shadow-sm);
cursor: pointer;
}
.dark .pagination-btn {
background: rgba(255, 255, 255, 0.2);
color: var(--zinc-100);
}
.pagination-btn:hover:not(.pagination-active):not(:disabled) {
background: var(--zinc-100);
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.dark .pagination-btn:hover:not(.pagination-active):not(:disabled) {
background: rgba(255, 255, 255, 0.1);
}
.pagination-active, .dark .pagination-active {
background: linear-gradient(90deg,
hsl(var(--primary)) 0%,
hsl(var(--secondary)) 100%);
box-shadow: var(--shadow-md);
color: white;
}
.pagination-active:hover {
background: linear-gradient(90deg,
hsl(var(--primary) / 0.9) 0%,
hsl(var(--secondary) / 0.9) 100%);
box-shadow: var(--shadow-lg);
transform: translateY(-2px);
}
.pagination-nav {
background: transparent;
box-shadow: none;
color: #6b7280;
}
.dark .pagination-nav {
color: #9ca3af;
}
.pagination-nav:hover:not(:disabled) {
color: #111827;
background: transparent;
box-shadow: none;
transform: none;
}
.dark .pagination-nav:hover:not(:disabled) {
color: #f3f4f6;
}
}