diff --git a/TESTING.md b/TESTING.md index 6433512..1b1d8f8 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1356,6 +1356,26 @@ Geprüft auf 1280×900 und 412×915: - [ ] Windows-Weg auf einem echten Windows durchspielen – die 50-MB-Grenze und der Registry-Pfad stammen aus der Dokumentation, nicht aus einem Versuch +## Kachelraster auf schmalen Geräten (24.08.2026) + +Ein Galaxy Z Flip 7 (360px aufgeklappt) zeigte **eine** Spalte statt zwei: +Bei 160px Mindestbreite und 20px Innenrand brauchen zwei Spalten 332px, da +waren aber nur 320px. Schmal jetzt 132px Mindestbreite, 10px Abstand und +12px Innenrand. + +| Breite | Spalten | Kachel | Innenrand | Querlauf | +|---|---|---|---|---| +| 316 (Deckelschirm) | 2 | 141px | 12px | nein | +| 360 (Flip 7) | 2 | 163px | 12px | nein | +| 412 (übliches Handy) | 2 | 189px | 12px | nein | +| 768 | 3 | 161px | 20px | nein | +| 1280 | 6 | 160px | 20px | nein | + +Raster und Innenrand stehen jetzt als Klassen in `index.css`; inline gesetzt +hätte keine Media-Query sie erreicht. + +- [ ] Auf dem Flip 7 selbst gegenprüfen, auf beiden Schirmen + ## Automatisiert geprüft (22.08.2026) Diese Punkte hat Claude per API/`curl` gegen Wegwerf-Konten durchgespielt; sie diff --git a/frontend/src/components/FileViews.tsx b/frontend/src/components/FileViews.tsx index aa73765..312ddd8 100644 --- a/frontend/src/components/FileViews.tsx +++ b/frontend/src/components/FileViews.tsx @@ -115,11 +115,10 @@ export default function GridView({ folders, files, onFolderOpen, onFolderMenu, o const highlightRef = useScrollToHighlight(highlightId) const coarse = useCoarsePointer() return ( -
+ // Raster und Abstände stehen in index.css (.aether-grid). Hier inline + // gesetzt wären sie auf dem Handy nicht zu ändern: Ein Inline-Stil schlägt + // jede Media-Query – daran ist die Kopfleiste schon zweimal gescheitert. +
{folders.map(folder => { const isOver = dragOverFolder === folder.id // Ein Gruppenordner lässt sich nicht verschieben – ihn ziehbar zu diff --git a/frontend/src/index.css b/frontend/src/index.css index 134d636..3dd449b 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -80,3 +80,37 @@ body { ::-webkit-scrollbar-thumb:hover { background: var(--color-text-muted); } ::selection { background: var(--color-primary); color: #fff; } + +/* ── Kachelansicht ──────────────────────────────────────────────────────────── + Als Klasse und nicht als Inline-Stil, damit die Media-Query überhaupt greift: + Ein Inline-Stil schlägt jede Klassenregel, und genau daran ist die + Kopfleiste schon zweimal gescheitert. + + Die Zahlen sind gerechnet, nicht geschätzt. Zwei Spalten brauchen + 2 × Mindestbreite + Abstand, und der Platz ist die Fensterbreite minus dem + Innenrand des Inhaltsbereichs: + + Gerät Breite nutzbar 2 Spalten brauchen + Flip 7 aufgeklappt 360px 336px 274px ✔ (vorher 332 > 320 ✘) + Flip 7 Deckelschirm 316px 292px 274px ✔ + übliches Handy 412px 388px 274px ✔ (drei bräuchten 416) + + Bei 160px Mindestbreite und 20px Innenrand fielen 360px-Geräte auf **eine** + Spalte zurück – zwei hätten 332px gebraucht, da waren nur 320px. */ +.aether-grid { + display: grid; + gap: 12px; + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); +} + +.aether-content { padding: 20px; } + +@media not all and (min-width: 720px) { + .aether-grid { + gap: 10px; + grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); + } + /* Schmal ist Rand verschenkte Fläche – 12px genügen, um die Kacheln nicht + an der Kante kleben zu lassen. */ + .aether-content { padding: 12px; } +} diff --git a/frontend/src/pages/AdminPage.tsx b/frontend/src/pages/AdminPage.tsx index f5017d9..d8d49fe 100644 --- a/frontend/src/pages/AdminPage.tsx +++ b/frontend/src/pages/AdminPage.tsx @@ -41,7 +41,7 @@ export default function AdminPage() { meta="Users, groups, appearance and activity" /> -
+
{tab === 'users' && } diff --git a/frontend/src/pages/FileBrowser.tsx b/frontend/src/pages/FileBrowser.tsx index e5add0c..6a0138c 100644 --- a/frontend/src/pages/FileBrowser.tsx +++ b/frontend/src/pages/FileBrowser.tsx @@ -850,7 +850,7 @@ export default function FileBrowser({ {/* Content */} -
+
{loading && (
-
+
diff --git a/frontend/src/pages/SharedPage.tsx b/frontend/src/pages/SharedPage.tsx index e5a7c52..6c614a6 100644 --- a/frontend/src/pages/SharedPage.tsx +++ b/frontend/src/pages/SharedPage.tsx @@ -56,7 +56,7 @@ export default function SharedPage() { meta={links.length > 0 ? `${links.length} link${links.length !== 1 ? 's' : ''}` : undefined} /> -
+
{loading && (
diff --git a/frontend/src/pages/SharedWithMePage.tsx b/frontend/src/pages/SharedWithMePage.tsx index 1b9f89b..7fd8199 100644 --- a/frontend/src/pages/SharedWithMePage.tsx +++ b/frontend/src/pages/SharedWithMePage.tsx @@ -37,7 +37,7 @@ export default function SharedWithMePage({ onOpenFolder }: Props) { meta="Files and folders other people gave you access to" /> -
+
{loading ? (

Loading…

diff --git a/frontend/src/pages/TagsPage.tsx b/frontend/src/pages/TagsPage.tsx index 44b1a75..a4ebb25 100644 --- a/frontend/src/pages/TagsPage.tsx +++ b/frontend/src/pages/TagsPage.tsx @@ -109,7 +109,7 @@ export default function TagsPage({ tagId, correspondentId, onOpenFolder }: Props )} -
+
{loading && (

Loading…

)} diff --git a/frontend/src/pages/TrashPage.tsx b/frontend/src/pages/TrashPage.tsx index 62cd98f..a7661e9 100644 --- a/frontend/src/pages/TrashPage.tsx +++ b/frontend/src/pages/TrashPage.tsx @@ -73,7 +73,7 @@ export default function TrashPage({ onUserChanged }: Props) { )} -
+
{loading && (