From 0ee3b145f082183be9a3b18c3d127bf342d87804 Mon Sep 17 00:00:00 2001 From: Till JS Date: Fri, 24 Apr 2026 16:31:11 +0200 Subject: [PATCH] polish(wardrobe): unify hover vocabulary + lift the Try-On CTA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The garment detail page used three different hover dialects — the model picker reacted with a primary-tinted bg + border (feels like a button), the secondary action buttons had a plain muted-grey hover, the edit pencil was invisible until hover, and the hero photo was entirely static. Result: the model picker was the only place that telegraphed "click me". Everything else felt flat. Align on one vocabulary across the page: primary-tinted border + primary/5 bg on hover for anything interactive. - Hero photo is now a ` diff --git a/apps/mana/apps/web/src/lib/modules/wardrobe/components/TryOnButton.svelte b/apps/mana/apps/web/src/lib/modules/wardrobe/components/TryOnButton.svelte index 1f210734f..bcb624770 100644 --- a/apps/mana/apps/web/src/lib/modules/wardrobe/components/TryOnButton.svelte +++ b/apps/mana/apps/web/src/lib/modules/wardrobe/components/TryOnButton.svelte @@ -160,25 +160,28 @@ disabled={running} /> + diff --git a/apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailGarmentView.svelte b/apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailGarmentView.svelte index eb8ba39f2..e251d7ea6 100644 --- a/apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailGarmentView.svelte +++ b/apps/mana/apps/web/src/lib/modules/wardrobe/views/DetailGarmentView.svelte @@ -42,9 +42,32 @@ let saving = $state(false); let markingWorn = $state(false); - // Lightbox state for the Anproben-Strip. Null = closed, Image = open. + // Lightbox state — shared between the Anproben-Strip (try-on thumbs) + // and the hero-photo. Null = closed, Image = open. let lightboxImage = $state(null); + // The hero-photo is a garment row, not a picture.Image — synthesise + // the shape the lightbox expects so clicking the photo opens the + // full-resolution mana-media URL with the garment's name as + // prompt-caption. No model / dims / date are rendered (all optional + // in the lightbox), keeping the modal clean for a plain clothing + // photo. + function openPhotoLightbox() { + if (!garment || !garment.mediaIds[0]) return; + lightboxImage = { + id: garment.id, + prompt: garment.name, + storagePath: garment.mediaIds[0], + filename: garment.name, + publicUrl: garmentPhotoUrl(garment.mediaIds[0], 'large'), + visibility: 'private', + isFavorite: false, + downloadCount: 0, + createdAt: garment.createdAt, + updatedAt: garment.updatedAt, + }; + } + async function handleMarkWorn() { if (!garment) return; markingWorn = true; @@ -98,16 +121,27 @@ {/if} {:else}
- -
- {#if garment.mediaIds[0]} + + {#if garment.mediaIds[0]} +
+ + {:else} +
+ {/if}
@@ -120,14 +154,19 @@

{garment.name}

{CATEGORY_LABELS[garment.category]}

+ @@ -195,23 +234,26 @@ - + - +