Fix wheel-photo squareness bug, native select popups, image-cycle crash

.bildbox.radbild lost to a same-specificity, later-declared .bildbox rule,
so the wheel photo stayed a full-width 4:3 box despite the earlier crop
fix - only which slice showed ever changed. Fixed with a compound selector
and moved "Montiert" to top-left to match the now-correctly-sized photo.

Native <select> popups had no color-scheme hint and rendered in the
browser's default light palette regardless of the app's dark theme -
this is what made "Modell" and other dropdowns flash bright white.

bildWeiter() (Mein Audi image-cycle tap) referenced a CSS class that was
never emitted (.platzhalter-datei vs. the real .platzhalter-aktion),
throwing and aborting before the page-dot indicator update - the photo
advanced but the dots never moved.

Merged the separate "Fahrzeugbilder" upload grid into "Bild der
Übersicht": pick a view from the existing dropdown, tap its preview to
upload/replace/delete - same generic popup plumbing, no new mechanism.
Removed the now-dead BILDER_UPLOAD_SLOTS/.bildgrid/.bildslot/.carfix.mini.

Back arrow changed from red to the neutral headline color, matching every
other navigation-color decision in this project.

Investigated but could not reproduce: user-reported "whole tab bar
disappears" when hiding labels. Traced the exact commit that added the
icon+label highlight and confirmed it's correctly scoped to :not(.ohne);
live DOM/computed-style testing across toggle, navigation, and both
mobile/desktop widths showed the tab bar staying visible throughout.
Left unchanged pending a repro from the user.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-16 20:40:14 +02:00
parent 367985ba44
commit 17b25d492a
7 changed files with 156 additions and 83 deletions
+15 -11
View File
@@ -442,11 +442,15 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; }
.carbox { position: relative; }
.carfix { width: 100%; aspect-ratio: 16 / 9; }
.carfix.klein { aspect-ratio: 16 / 8; }
.carfix.mini { width: 78px; height: 78px; aspect-ratio: auto; }
/* Reifenfoto ist oft eine breite Aufnahme; statt beide Ränder symmetrisch
wegzuschneiden (object-fit:cover-Standard), bleibt bewusst der rechte Rand
des Originalfotos erhalten - dort sitzt das Rad meist im Bild. */
.radbild { width: 96px; height: 96px; aspect-ratio: auto; border-radius: 50%; object-position: right center; }
.radbild { object-position: right center; }
/* .bildbox.radbild statt .radbild allein: .bildbox unten setzt width/aspect-
ratio auf derselben Spezifitaet (eine Klasse) und gewinnt als spaeter
notierte Regel sonst automatisch - die Box blieb dadurch bislang die volle
Kachelbreite im 4:3-Format statt eines echten 96x96-Quadrats. */
.bildbox.radbild { width: 96px; height: 96px; aspect-ratio: 1 / 1; }
.bildbox { position: relative; width: 100%; aspect-ratio: 4 / 3; border-radius: 12px; overflow: hidden; }
.bildbox img { display: block; width: 100%; height: 100%; object-fit: cover; }
@@ -458,7 +462,6 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; }
App. Mit Foto gilt wieder das volle Seitenverhältnis. */
.bildbox.bild-fehlt.carfix { aspect-ratio: auto; height: 132px; }
.bildbox.bild-fehlt.carfix.klein { height: 120px; }
.bildbox.bild-fehlt.carfix.mini { height: 78px; }
.szene.bleed:has(.bild-fehlt)::before { display: none; }
.szene.bleed:has(.bild-fehlt) { margin-left: 0; margin-right: 0; }
.szene.bleed:has(.bild-fehlt) .carbox { padding: 0; }
@@ -840,9 +843,6 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; }
.standort-pille[disabled] { opacity: .4; pointer-events: none; }
/* ------------------------------------------------------- Bilderverwaltung */
.bildgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--sp-4); margin-top: var(--sp-4); }
.bildslot { position: relative; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.bildslot-label { font-size: 11.5px; letter-spacing: normal; color: var(--fg2); text-align: center; }
.bildmenu-catcher { position: fixed; inset: 0; z-index: 1000; }
.bildmenu {
position: absolute; z-index: 1001;
@@ -852,8 +852,12 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; }
display: flex; flex-direction: column;
min-width: 160px;
}
.bildmenu.slot { top: 60px; left: 50%; transform: translateX(-50%); }
.bildmenu.rad { top: 90px; left: 22px; }
/* "Bild der Übersicht": das Vorschaubild füllt die ganze Kachelbreite, seine
Unterkante liegt daher immer nah an der Kachel-Unterkante - das Menü von
dort aus verankern statt mit einem festen top-Wert, der bei jedem
Bildseitenverhältnis neu nachgemessen werden müsste. */
.bildmenu.ansicht { bottom: var(--sp-5); left: 50%; transform: translateX(-50%); }
.bildmenu button {
display: block; width: 100%; text-align: left;
background: none; border: none;
@@ -874,12 +878,12 @@ button.tile, .tilebtn { transition: background .15s, transform .1s; }
.radkopf { display: flex; flex-direction: column; margin-top: var(--sp-4); }
/* Kompakte Pille statt voller Breite (Apple-HIG-Pull-down-Maß): oben rechts
in der Kachel, obere Kante auf Höhe des Radfotos, rechter Abstand
identisch zum linken Texteinzug (beides var(--sp-5), die Kachel-Innen-
/* Kompakte Pille statt voller Breite (Apple-HIG-Pull-down-Maß): oben links
in der Kachel, obere Kante auf Höhe des Radfotos, linker Abstand
identisch zum Texteinzug (beides var(--sp-5), die Kachel-Innen-
polsterung). */
.montiert {
position: absolute; top: var(--sp-5); right: var(--sp-5);
position: absolute; top: var(--sp-5); left: var(--sp-5);
display: inline-flex; align-items: center; justify-content: center;
font-family: inherit; font-size: 12px; letter-spacing: normal;
color: var(--fg2);