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>
This commit is contained in:
Kevin Adametz 2026-05-19 16:36:13 +00:00
parent 092ee0e918
commit 0a3e52d603
112 changed files with 8464 additions and 1649 deletions

View file

@ -0,0 +1,248 @@
/**
* Hub × FluxUI Gemeinsame Design-Tokens (Single Source of Truth)
*
* Diese Datei ist die EINZIGE Quelle für Hub-Farben, Fonts, Radii und
* Schatten. Sowohl der Web-Build (Hub-Landing, Hub-Auth) als auch der
* Portal-Build (User-Panel, Admin-Bereich) importieren diese Datei.
*
* Konventionen:
* - Token-Names sind STABIL. Werte können sich ändern (z.B. Dark Mode),
* Namen nicht.
* - Light Mode ist Default. Dark Mode kommt in Phase 5.
* - FluxUI-Akzent-Variablen (--color-accent, --color-accent-*) werden
* in portal.css mit unseren Hub-Werten gebridged, nicht hier.
*
* Dokumentation: dev/frontend/hub-flux/README.md
* dev/frontend/hub-flux/01-PHASE-0-TOKENS.md
*/
@theme {
/* =========================================================
* SURFACES warmes Buchpapier, gemeinsame Familie
* ========================================================= */
--color-bg: #f6f4ef;
--color-bg-elev: #fbfaf6;
--color-bg-rule: #e2ddd0;
--color-bg-rule-2: #ede7d7; /* leicht hellere Variante für Progress-Tracks */
--color-bg-rule-strong: #1a1f1c;
--color-bg-dark: #15201a;
--color-bg-card: #ffffff;
--color-bg-card-warm: #efeadc;
--color-bg-card-warm-border: #d6cfbb;
--color-bg-card-warm-hover: #e6deca;
--color-bg-card-warm-rule: #c8bda3;
/* =========================================================
* HUB-BLAU primärer Akzent, plattform-neutral
* Klarer Kontrast zum hellen Buchpapier-Hintergrund.
* ========================================================= */
--color-hub: #1a2540;
--color-hub-2: #243152;
--color-hub-3: #2e3d66;
--color-hub-soft: #e5e9f1;
--color-hub-soft-2: #cfd6e4;
--color-hub-line: #7b8fbf;
/* Topbar-Aliase für Hub-Gradient */
--color-topbar: #1a2540;
--color-topbar2: #243152;
--color-topbar-deep: #0f1729;
/* =========================================================
* AKZENT gedecktes Bernstein (sekundärer Akzent)
* Bewusst NICHT Orange (BP24) und NICHT Grün (Presseecho).
* Im Portal für: Notifications, Datenqualität, Empfehlungs-Ribbons.
*
* Wichtige Trennung (Phase 5 / Dark Mode):
* --color-accent heller Akzent (Light: Bernstein, Dark: heller Bernstein).
* In portal.css wird das auf var(--color-hub) umgebogen,
* weil FluxUI-Primary-Buttons das nutzen.
* --color-accent-warm KONSTANTER Bernstein (gleicher Wert in beiden Modi).
* Für Hint-Card-Border, Schritt-Karten-Eyebrows
* und alle Stellen, die explizit Bernstein sein müssen.
* --color-accent-deep gedämpfter Bernstein für Action-Links.
* ========================================================= */
--color-accent: #b07a3a;
--color-accent-deep: #8a5e27;
--color-accent-soft: #f1e6d3;
--color-accent-warm: #b07a3a;
/* =========================================================
* PANEL-DARK KONSTANTES dunkles Hub-Blau (in beiden Modi).
* Wird von `.panel-dark` und der Brand-Bridge genutzt; soll im
* Dark Mode NICHT hell werden, sondern immer dunkel bleiben.
* Im Hub-Frontend (Light-Only) zeigt's die gleiche Atmosphäre.
* ========================================================= */
--color-panel-dark: #0f1729;
--color-panel-dark-2: #1a2540;
/* =========================================================
* INK Anthrazit-Reihe für Text & Linien
* ========================================================= */
--color-ink: #1a1f1c;
--color-ink-2: #3a413d;
--color-ink-3: #5a6360;
--color-ink-4: #8a918d;
--color-ink-on-dark: #f6f4ef;
--color-ink-on-dark-2: #b2b9c7;
--color-ink-on-dark-3: #7b8fbf;
--color-ink-on-dark-muted: #7b8fbf;
--color-ink-on-dark-rule: #2a3550;
/* =========================================================
* BRAND-ALIASE für Komponenten, die brand-Tokens nutzen
* ========================================================= */
--color-brand: #1a2540;
--color-brand-deep: #0f1729;
--color-brand-soft: #e5e9f1;
/* =========================================================
* STATUS Erfolg, Warnung, Fehler, Live
* Identische Namen wie das User-Dashboard-Mockup verwendet.
* ========================================================= */
--color-ok: #2e8540;
--color-ok-soft: #e2f1e5;
--color-warn: #a87a1f;
--color-warn-soft: #f6eac8;
--color-err: #a8331f;
--color-err-soft: #f4dad2;
--color-live: #c84a1e;
--color-gain: #2e8540;
--color-gain-deep: #1f5e2e;
--color-loss: #c8341e;
/* =========================================================
* EDITORIAL für Card-Warm-Sektionen
* ========================================================= */
--color-card-warm-cat: #5a6360;
--color-card-warm-title: #2a302d;
--color-feature-line: #c0c8db;
--color-feature-dot: #d8dde9;
/* =========================================================
* BRIDGE-DOTS kleine farbige Punkte für presseecho /
* businessportal24 in Brücken-Anzeigen (Sidebar, Topbar,
* Bridge-Cards). Werte aus dem User-Dashboard-Mockup.
* ========================================================= */
--color-bridge-presseecho: #1f4d3a;
--color-bridge-businessportal: #c84a1e;
/* =========================================================
* FONTS Hub: Inter Tight + JetBrains Mono.
* Source Serif 4 wird im Hub für die Markennennungen der
* Tochter-Portale (presseecho, businessportal24) verwendet;
* im Portal nur für Brand-Mark, falls überhaupt.
* ========================================================= */
--font-sans:
"Inter Tight", Inter, system-ui, -apple-system, BlinkMacSystemFont,
"Segoe UI", sans-serif;
--font-serif:
"Source Serif 4", "Source Serif Pro", Charter, "Iowan Old Style",
Georgia, serif;
--font-mono:
"JetBrains Mono", "SF Mono", ui-monospace, SFMono-Regular, Menlo,
Consolas, monospace;
/* =========================================================
* LAYOUT
* ========================================================= */
--container-layout: 1280px;
/* =========================================================
* RADII kleines Set, am Mockup orientiert
* ========================================================= */
--radius-xs: 3px;
--radius-sm: 4px;
--radius-md: 6px;
--radius-lg: 8px;
/* =========================================================
* SCHATTEN weich, warm-getönt
* ========================================================= */
--shadow-soft: 0 1px 0 rgba(26, 31, 28, 0.03);
--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);
--shadow-auth:
0 1px 0 rgba(26, 31, 28, 0.03),
0 20px 50px -32px rgba(26, 37, 64, 0.28);
}
/* =========================================================
* DARK MODE Phase 5 AKTIV.
* Werte aus dev/frontend/tailwind_v3/User Dashboard presseportale Dark.html.
* Aktivierung über `.dark` (FluxUI Appearance-Switcher setzt das auf <html>).
*
* Konventionen:
* - Gleiche Token-Namen wie Light Mode (Single Source of Truth).
* - `--color-accent-warm`, `--color-panel-dark*` bleiben KONSTANT
* (siehe Begründungen oben im Light-Block).
* - Hub-Frontend (Landing + Auth) lädt KEIN `@fluxAppearance` und
* bleibt damit immer Light. Nur Portal-Seiten schalten um.
* ========================================================= */
.dark {
/* Surfaces */
--color-bg: #0e1218;
--color-bg-elev: #14181f;
--color-bg-rule: #2a3142;
--color-bg-rule-2: #232838;
--color-bg-rule-strong: #ece9e0;
--color-bg-card: #181d27;
--color-bg-card-warm: #1f1a12;
/* Hub-Blau (im Dark Mode HELLER für Lesbarkeit auf dunklem Bg) */
--color-hub: #5a78c2;
--color-hub-2: #6d8ad3;
--color-hub-3: #4a65a8;
--color-hub-soft: #1f2a47;
--color-hub-soft-2: #2c3a5d;
--color-hub-line: #7b8fbf;
/* Bernstein — heller Akzent (warm-Token bleibt konstant) */
--color-accent: #d9a560;
--color-accent-deep: #b07a3a;
--color-accent-soft: #2a2418;
/* --color-accent-warm: konstant #b07a3a (aus Light geerbt) */
/* Ink */
--color-ink: #ece9e0;
--color-ink-2: #c9c5b8;
--color-ink-3: #8e8b82;
--color-ink-4: #5d5c57;
/* Brand-Aliase */
--color-brand: #5a78c2;
--color-brand-deep: #4a65a8;
--color-brand-soft: #1f2a47;
/* Status */
--color-ok: #4dc076;
--color-ok-soft: #1a2d22;
--color-warn: #d9a560;
--color-warn-soft: #2d2418;
--color-err: #e07664;
--color-err-soft: #2e1715;
--color-gain: #4dc076;
--color-gain-deep: #3aa060;
--color-loss: #e07664;
/* Bridge-Dots heller für Dark-Bg */
--color-bridge-presseecho: #4da37a;
--color-bridge-businessportal: #e36340;
/* Editorial */
--color-card-warm-cat: #8e8b82;
--color-card-warm-title: #ece9e0;
--color-feature-line: #2c3a5d;
--color-feature-dot: #2a3142;
/* Schatten — im Dark Mode neutral schwarz statt hub-blau-warm */
--shadow-soft: 0 1px 0 rgba(0, 0, 0, 0.4);
--shadow-card: 0 1px 2px 0 rgba(0, 0, 0, 0.4);
--shadow-card-hover: 0 4px 12px -2px rgba(0, 0, 0, 0.55);
--shadow-auth:
0 1px 0 rgba(0, 0, 0, 0.5),
0 20px 50px -32px rgba(0, 0, 0, 0.7);
/* color-scheme-Hint für native Form-Controls (Scrollbars, Inputs) */
color-scheme: dark;
}

View file

@ -0,0 +1,340 @@
/**
* Hub-Components Single Source of Truth für Hub-typische Layout-Bausteine
*
* Wird von BEIDEN Builds importiert:
* - resources/css/portal.css (FluxUI-Portal)
* - resources/css/web/shared-styles.css (Web/Hub-Frontend)
*
* Dadurch DRY für Customer-Dashboard (Phase 2), Admin-Dashboard (Phase 3),
* Listen/Detail-Pages (Phase 4) und perspektivisch auch die Hub-Landing.
*
* Tokens kommen aus shared/design-tokens.css diese Datei darf KEINE
* Hex-Literale enthalten (außer wo bewusst alpha-overlays via `rgba`
* gegen White/Black gerechnet werden).
*
* Vorlage: dev/frontend/tailwind_v3/User Dashboard presseportale.html
* Dokumentation: dev/frontend/hub-flux/04-PHASE-2-CUSTOMER-DASHBOARD.md
*/
@layer components {
/* ============================================================
* Panels (Karten-Container mit Hub-Charakter)
* ============================================================ */
.panel {
background: var(--color-bg-card);
border: 1px solid var(--color-bg-rule);
border-radius: 6px;
}
.panel-warm {
background: var(--color-bg-elev);
border: 1px solid var(--color-bg-rule);
border-radius: 6px;
}
.panel-dark {
/* KONSTANTES Dark-Hub-Blau bleibt auch im Dark Mode dunkel
(sonst würde `var(--color-hub)` zum hellen #5a78c2 werden).
Tokens `--color-panel-dark` und `--color-panel-dark-2` sind
in beiden Modi identisch. */
background: var(--color-panel-dark-2);
border: 1px solid var(--color-panel-dark);
border-radius: 6px;
color: var(--color-ink-on-dark);
}
.panel-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px 20px;
border-bottom: 1px solid var(--color-bg-rule);
}
.panel-dark .panel-head {
border-bottom-color: rgba(255, 255, 255, 0.1);
}
/* ============================================================
* Stat-Cards (KPI-Karten mit farbigem Strip links)
* ============================================================ */
.stat-card {
position: relative;
background: var(--color-bg-card);
border: 1px solid var(--color-bg-rule);
border-radius: 6px;
padding: 18px 20px;
transition:
border-color 0.12s,
box-shadow 0.12s;
}
.stat-card .stat-strip {
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 3px;
background: var(--color-hub-soft-2);
border-radius: 6px 0 0 6px;
}
.stat-card.is-primary .stat-strip {
background: var(--color-hub);
}
.stat-card.is-ok .stat-strip {
background: var(--color-ok);
}
.stat-card.is-warn .stat-strip {
background: var(--color-warn);
}
.stat-card.is-muted .stat-strip {
background: var(--color-ink-4);
}
.stat-label {
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--color-ink-3);
}
.stat-card.is-primary .stat-label {
color: var(--color-hub);
}
.stat-card.is-ok .stat-label {
color: var(--color-ok);
}
.stat-card.is-warn .stat-label {
color: var(--color-warn);
}
.stat-card.is-muted .stat-label {
color: var(--color-ink-4);
}
.stat-num {
font-family: var(--font-mono);
font-variant-numeric: tabular-nums;
font-size: 36px;
font-weight: 600;
color: var(--color-ink);
letter-spacing: -0.5px;
line-height: 1;
margin-top: 14px;
}
.stat-card.is-ok .stat-num {
color: var(--color-ok);
}
.stat-card.is-warn .stat-num {
color: var(--color-warn);
}
.stat-card.is-muted .stat-num {
color: var(--color-ink-3);
}
.stat-meta {
font-family: var(--font-mono);
font-size: 10.5px;
font-weight: 600;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--color-ink-3);
}
.stat-trend {
margin-top: 12px;
display: flex;
align-items: center;
gap: 8px;
font-size: 11.5px;
color: var(--color-ink-3);
}
/* ============================================================
* Hint-Cards (Datenqualitäts-Hinweise mit Progress-Bar)
* ============================================================ */
.hint-card {
display: grid;
gap: 14px;
grid-template-columns: auto 1fr;
align-items: start;
/* Im Light Mode warmes Buchpapier-elev; im Dark Mode der wärmere
Card-Ton (`--color-bg-card-warm` schaltet automatisch um). */
background: var(--color-bg-card-warm);
border: 1px solid var(--color-bg-rule);
/* `--color-accent-warm` bleibt KONSTANT Bernstein (Phase 5):
Im Portal mappt --color-accent auf Hub-Blau, hier wollen wir
aber den klassischen Bernstein-Border behalten. */
border-left: 3px solid var(--color-accent-warm);
border-radius: 5px;
padding: 16px 18px;
}
.hint-card .hint-ico {
width: 36px;
height: 36px;
border-radius: 4px;
background: var(--color-accent-soft);
color: var(--color-accent-deep);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.hint-card .hint-bar {
margin-top: 8px;
height: 4px;
width: 100%;
border-radius: 999px;
background: var(--color-bg-rule-2);
overflow: hidden;
}
.hint-card .hint-bar > span {
display: block;
height: 100%;
border-radius: 999px;
background: var(--color-accent-warm);
}
.hint-card .hint-action {
display: inline-flex;
align-items: center;
gap: 4px;
margin-top: 8px;
font-size: 11.5px;
font-weight: 600;
color: var(--color-accent-deep);
text-decoration: none;
text-underline-offset: 3px;
}
.hint-card .hint-action:hover {
text-decoration: underline;
text-decoration-color: color-mix(
in oklab,
var(--color-accent-deep),
transparent 60%
);
}
/* ============================================================
* Badges (Status-Pillen)
* ============================================================ */
.badge {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 3px 9px;
border-radius: 999px;
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
}
.badge.warn {
background: var(--color-warn-soft);
color: var(--color-accent-deep);
}
.badge.ok {
background: var(--color-ok-soft);
color: var(--color-gain-deep);
}
.badge.hub {
background: var(--color-hub-soft);
color: var(--color-hub);
}
.badge.err {
background: var(--color-err-soft);
color: var(--color-loss);
}
.badge.dot::before {
content: "";
width: 6px;
height: 6px;
border-radius: 999px;
background: currentColor;
}
/* ============================================================
* Brand-Bridge (presseecho + businessportal24 Indikatoren)
* ============================================================ */
.bridge-row {
display: inline-flex;
align-items: center;
gap: 6px;
font-family: var(--font-mono);
font-size: 10.5px;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--color-ink-3);
}
.dot-pe {
width: 6px;
height: 6px;
border-radius: 999px;
background: var(--color-bridge-presseecho);
}
.dot-bp {
width: 6px;
height: 6px;
border-radius: 999px;
background: var(--color-bridge-businessportal);
}
/* ============================================================
* Section-Eyebrow VARIANTE (für panel-head)
* ============================================================
* Die Basis-`.section-eyebrow` liegt in theme-pressekonto.css.
* Im Portal-Bundle haben wir die Klasse heute NOCH NICHT hier
* eine portable Definition, die im Web-Build vom Original-Layer
* überschrieben wird (gleiche Werte idempotent).
*/
.section-eyebrow {
display: inline-flex;
align-items: center;
gap: 10px;
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.22em;
text-transform: uppercase;
color: var(--color-hub);
}
.section-eyebrow::after {
content: "";
display: block;
width: 30px;
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;
}
/* ============================================================
* Eyebrow VARIANTE (für Portal)
* ============================================================
* Basis liegt in theme-pressekonto.css. Hier portabel für Portal-Build.
*/
.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);
}
}