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:
parent
092ee0e918
commit
0a3e52d603
112 changed files with 8464 additions and 1649 deletions
484
resources/css/web/theme-pressekonto.css
Normal file
484
resources/css/web/theme-pressekonto.css
Normal file
|
|
@ -0,0 +1,484 @@
|
|||
/**
|
||||
* 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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue