Branding: Farben systemweit einstellbar + Bild-Upload statt nur URLs
Design-Tab (Administration → Einstellungen → Design): - Akzentfarbe für Hell- und Dark-Mode, Markenverlauf und Eckenradius - abgeleitete Töne (Hover, weiche Flächen, Fokusring) werden per color-mix aus der Grundfarbe berechnet – eine Farbe genügt - Live-Vorschau mit Button, Badge, Chip, Logo-Kachel und Link - Ausgabe als schlanker :root-Override über Ui::brandingStyle(), greift auf allen Seiten inklusive Login und Installer Uploads (includes/Upload.php): - Logo, Favicon, Login-Logo und Login-Hintergrund lassen sich jetzt hochladen; das URL-Feld bleibt als Alternative bestehen - Whitelist nach Endung, 3-MB-Grenze, getimagesize-Prüfung für Raster, SVGs werden von Skripten, Event-Handlern und externen Verweisen befreit - Zufällige Dateinamen in uploads/, dort sperrt eine .htaccess die Ausführung von PHP; beim Ersetzen wird die alte Datei gelöscht Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
6da46f040a
commit
30d0ce3a23
13 changed files with 437 additions and 32 deletions
|
|
@ -562,7 +562,28 @@ input:focus, select:focus, textarea:focus, .input:focus {
|
|||
}
|
||||
input:disabled, select:disabled, textarea:disabled { background: var(--bg-hover); color: var(--text-muted); cursor: not-allowed; }
|
||||
input[type="checkbox"], input[type="radio"] { accent-color: var(--accent); width: 16px; height: 16px; cursor: pointer; }
|
||||
input[type="file"] { font-size: 13px; color: var(--text-secondary); }
|
||||
input[type="file"] {
|
||||
width: 100%;
|
||||
font-size: 13px;
|
||||
color: var(--text-secondary);
|
||||
}
|
||||
input[type="file"]::file-selector-button {
|
||||
margin-right: 10px;
|
||||
padding: 7px 13px;
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: var(--r-sm);
|
||||
background: var(--bg-card);
|
||||
color: var(--text-primary);
|
||||
font: inherit;
|
||||
font-size: 12.5px;
|
||||
font-weight: 550;
|
||||
cursor: pointer;
|
||||
transition: background-color .15s, border-color .15s;
|
||||
}
|
||||
input[type="file"]::file-selector-button:hover {
|
||||
background: var(--bg-hover);
|
||||
border-color: var(--border-hover);
|
||||
}
|
||||
|
||||
.chk, label.chk {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
|
|
@ -1060,6 +1081,22 @@ input[type="file"] { font-size: 13px; color: var(--text-secondary); }
|
|||
border-radius: var(--r-xl);
|
||||
box-shadow: var(--shadow-xl);
|
||||
}
|
||||
/* Bildfeld: Vorschau, Upload und URL nebeneinander */
|
||||
.image-field { display: flex; gap: 14px; align-items: flex-start; }
|
||||
.image-preview {
|
||||
width: 84px; height: 64px; flex-shrink: 0;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
padding: 6px;
|
||||
background: var(--bg-subtle);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: var(--r-md);
|
||||
color: var(--text-muted);
|
||||
overflow: hidden;
|
||||
}
|
||||
.image-preview img { max-width: 100%; max-height: 100%; object-fit: contain; }
|
||||
.image-field-controls { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 8px; }
|
||||
.image-field-controls .chk { margin: 0; font-size: 12.5px; color: var(--text-secondary); }
|
||||
|
||||
/* Farbwähler mit Hex-Eingabe */
|
||||
.color-field { display: flex; align-items: center; gap: 8px; }
|
||||
.color-field input[type="color"] {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue