presseportale/resources/css/web/theme-pressekonto.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

484 lines
12 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.

/**
* Theme für den Publisher-Hub pressekonto.de (pressekonto.test)
*
* Charakter:
* - Surface: warmes Buchpapier (gleiche Familie wie BP24/Presseecho)
* - Primary: Hub-Blau (#1A2540) seriös, plattform-neutral
* - Accent: gedecktes Bernstein (#B07A3A) bewusst NICHT Orange (BP24) und NICHT Grün (Presseecho)
* - Schrift: Inter Tight + JetBrains Mono
*
* Tokens (Farben, Fonts, Radii, Schatten) leben seit Phase 0 in
* resources/css/shared/design-tokens.css als Single Source of Truth
* — sie werden via shared-styles.css → design-tokens.css importiert.
*
* Hier nur noch:
* - HSL-Variablen für Legacy-Komponenten (shared-styles)
* - @layer components { … } mit Hub-spezifischen Klassen
* (Eyebrows, Hero-Grid, Auth-Felder, FAQ-Accordion, …)
*
* Dokumentation: dev/frontend/hub-flux/01-PHASE-0-TOKENS.md
*/
@import "./shared-styles.css";
/* HSL-Variablen für Legacy-Komponenten (shared-styles) */
:root {
--font-primary: var(--font-sans);
--font-secondary: var(--font-sans);
--background: 40 30% 95%; /* #f6f4ef */
--foreground: 144 8% 11%;
--card: 0 0% 100%;
--card-foreground: 144 8% 11%;
--popover: 0 0% 100%;
--popover-foreground: 144 8% 11%;
/* Primary: #1A2540 -> hsl(222, 43%, 18%) */
--primary: 222 43% 18%;
--primary-foreground: 0 0% 100%;
--primary-50: 222 43% 96%;
--primary-100: 222 43% 92%;
--primary-200: 222 43% 85%;
--primary-300: 222 43% 75%;
--primary-400: 222 43% 60%;
--primary-500: 222 43% 45%;
--primary-600: 222 43% 36%;
--primary-700: 222 43% 28%;
--primary-800: 222 43% 22%;
--primary-900: 222 43% 18%;
--primary-950: 222 43% 12%;
--secondary: 224 30% 30%;
--secondary-foreground: 0 0% 100%;
--muted: 40 18% 90%;
--muted-foreground: 144 6% 38%;
--accent: 31 51% 46%;
--accent-foreground: 0 0% 100%;
--destructive: 0 84% 60%;
--destructive-foreground: 0 0% 100%;
--border: 38 23% 85%;
--input: 38 23% 85%;
--ring: 222 43% 18%;
--radius: 4px;
--shadow-card: 0 1px 2px 0 rgb(26 37 64 / 0.06);
--shadow-card-hover: 0 4px 12px -2px rgb(26 37 64 / 0.12);
}
@layer base {
html,
body {
margin: 0;
padding: 0;
}
body {
background-color: #e8e4da;
color: var(--color-ink);
font-family: var(--font-sans);
-webkit-font-smoothing: antialiased;
font-feature-settings: "ss01", "cv11";
}
h1,
h2,
h3,
h4 {
font-family: var(--font-sans);
color: inherit;
letter-spacing: -0.01em;
}
.font-mono {
font-family: var(--font-mono);
font-feature-settings: "tnum";
}
}
@layer components {
/* Hub-Eyebrow — sperrgesetzt, in Hub-Blau */
.eyebrow {
font-size: 11px;
font-weight: 700;
letter-spacing: 0.2em;
text-transform: uppercase;
color: var(--color-hub);
}
.eyebrow.muted {
color: var(--color-ink-3);
letter-spacing: 0.16em;
font-weight: 600;
font-size: 10.5px;
}
.eyebrow.accent {
color: var(--color-accent-deep);
}
.eyebrow.on-dark {
color: var(--color-hub-line);
}
/* Section-Eyebrow mit kurzem Linien-Schwanz */
.section-eyebrow {
display: inline-flex;
align-items: center;
gap: 12px;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--color-hub);
}
.section-eyebrow::after {
content: "";
display: block;
width: 42px;
height: 1px;
background: var(--color-hub);
opacity: 0.45;
}
.section-eyebrow.on-dark {
color: var(--color-hub-line);
}
.section-eyebrow.on-dark::after {
background: var(--color-hub-line);
opacity: 0.55;
}
.rule {
height: 1px;
background: var(--color-bg-rule);
border: 0;
margin: 0;
}
.rule-strong {
height: 1px;
background: var(--color-bg-rule-strong);
border: 0;
margin: 0;
}
.rule-hub {
height: 2px;
background: var(--color-hub);
border: 0;
margin: 0;
}
/* Subtile geometrische Hintergrundlinien fürs Hero */
.hero-grid {
background-image:
linear-gradient(
to right,
rgba(26, 37, 64, 0.04) 1px,
transparent 1px
),
linear-gradient(
to bottom,
rgba(26, 37, 64, 0.04) 1px,
transparent 1px
);
background-size: 48px 48px;
background-position: -1px -1px;
}
/* Hub-Gradient-Klassen */
.bg-hub-grad {
background-image: linear-gradient(
135deg,
var(--color-hub) 0%,
var(--color-hub-2) 100%
);
}
.bg-hub-grad-2 {
background-image: linear-gradient(
180deg,
var(--color-hub) 0%,
var(--color-topbar-deep) 100%
);
}
.bg-accent-grad {
background-image: linear-gradient(
135deg,
var(--color-accent) 0%,
var(--color-accent-deep) 100%
);
}
.bg-topbar-grad {
background-image: linear-gradient(
135deg,
var(--color-topbar) 0%,
var(--color-topbar2) 100%
);
}
/* Empfohlen-Ribbon auf Tarif-Karten */
.ribbon-recommend {
position: absolute;
top: -1px;
left: -1px;
right: -1px;
background: var(--color-hub);
color: #fff;
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
text-align: center;
padding: 8px 0;
}
/* Accordion-Pfeil (FAQ) */
details > summary {
list-style: none;
cursor: pointer;
}
details > summary::-webkit-details-marker {
display: none;
}
details[open] .faq-chev {
transform: rotate(180deg);
}
.faq-chev {
transition: transform 0.2s ease;
}
/*
* Auth-Seiten (Anmelden, Registrieren, Passwort zurücksetzen, …)
* — Konsistente Felder, Buttons und Atmosphäre für den Publisher-Hub
*/
/* Hintergrund-Raster (Atmosphäre) */
.auth-grid {
position: absolute;
inset: 0;
background-image:
linear-gradient(
to right,
rgba(26, 37, 64, 0.045) 1px,
transparent 1px
),
linear-gradient(
to bottom,
rgba(26, 37, 64, 0.045) 1px,
transparent 1px
);
background-size: 56px 56px;
pointer-events: none;
}
/* From=portal Banner über der Auth-Card */
.from-banner {
background: #ffffff;
border: 1px solid var(--color-bg-rule);
border-left: 2px solid var(--color-hub);
border-radius: 4px;
padding: 8px 14px;
font-size: 12px;
color: var(--color-ink-2);
}
/* Auth-Card mit weicher, fokussierender Schatten-Glocke */
.auth-card {
background: var(--color-bg-card);
border: 1px solid var(--color-bg-rule);
border-radius: 8px;
padding: 34px 36px 32px;
box-shadow:
0 1px 0 rgba(26, 31, 28, 0.03),
0 20px 50px -32px rgba(26, 37, 64, 0.28);
}
/* Eyebrow & Link in Hub-Blau für Auth-Kontext */
.eyebrow-hub {
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--color-hub);
}
.link-hub {
color: var(--color-hub);
font-weight: 600;
text-decoration: none;
text-underline-offset: 3px;
}
.link-hub:hover {
text-decoration: underline;
}
/* Input-Felder */
.field-label {
display: block;
font-size: 12.5px;
font-weight: 600;
color: var(--color-ink);
margin-bottom: 6px;
}
.field-input {
width: 100%;
background: #ffffff;
border: 1px solid var(--color-bg-rule);
border-radius: 6px;
padding: 11px 13px;
font-size: 14px;
color: var(--color-ink);
outline: none;
transition:
border-color 0.15s,
box-shadow 0.15s,
background 0.15s;
font-family: inherit;
}
.field-input::placeholder {
color: var(--color-ink-4);
}
.field-input:hover {
border-color: #cfc8b5;
}
.field-input:focus {
border-color: var(--color-hub);
box-shadow: 0 0 0 3px rgba(26, 37, 64, 0.1);
}
.field-input[aria-invalid="true"],
.field-input.is-invalid {
border-color: var(--color-loss);
}
/* Passwort-Feld mit „Anzeigen“-Button */
.field-pw-wrap {
position: relative;
}
.field-affix {
position: absolute;
top: 50%;
right: 10px;
transform: translateY(-50%);
color: var(--color-ink-3);
font-size: 11.5px;
font-weight: 600;
background: transparent;
border: 0;
cursor: pointer;
padding: 4px 6px;
border-radius: 3px;
font-family: inherit;
}
.field-affix:hover {
color: var(--color-hub);
background: var(--color-bg);
}
/* Checkbox */
.auth-check {
appearance: none;
-webkit-appearance: none;
width: 16px;
height: 16px;
border: 1.5px solid #cfc8b5;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
position: relative;
flex-shrink: 0;
transition:
border-color 0.12s,
background 0.12s;
margin: 0;
}
.auth-check:hover {
border-color: var(--color-hub);
}
.auth-check:checked {
background: var(--color-hub);
border-color: var(--color-hub);
}
.auth-check:checked::before {
content: "";
position: absolute;
left: 4px;
top: 1px;
width: 5px;
height: 9px;
border: solid #fff;
border-width: 0 1.8px 1.8px 0;
transform: rotate(42deg);
}
/* Buttons (auth-spezifisch, um den allgemeinen .btn-primary nicht zu überschreiben) */
.auth-btn-primary {
width: 100%;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 11px 16px;
background: var(--color-hub);
color: #ffffff;
border-radius: 6px;
font-size: 14px;
font-weight: 600;
border: 0;
cursor: pointer;
transition: background-color 0.15s;
font-family: inherit;
}
.auth-btn-primary:hover {
background: var(--color-hub-2);
}
.auth-btn-primary:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.auth-btn-outline {
width: 100%;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 10px 16px;
background: #ffffff;
color: var(--color-ink);
border: 1px solid var(--color-bg-rule);
border-radius: 6px;
font-size: 13px;
font-weight: 600;
cursor: pointer;
transition:
background-color 0.15s,
border-color 0.15s;
font-family: inherit;
}
.auth-btn-outline:hover {
background: var(--color-bg-elev);
border-color: #cfc8b5;
}
/* Validierungs-Fehler-Text */
.field-error {
margin-top: 6px;
color: var(--color-loss);
font-size: 12px;
line-height: 1.4;
}
/* Erfolgs-/Status-Mitteilung */
.field-status {
background: #f1f6ef;
border: 1px solid #c8dec0;
color: #2e5b32;
padding: 10px 14px;
border-radius: 4px;
font-size: 12.5px;
line-height: 1.5;
}
}
@layer utilities {
.tabular-nums {
font-variant-numeric: tabular-nums;
}
}
[x-cloak] {
display: none !important;
}