diff --git a/apps/mana/apps/web/src/lib/modules/wardrobe/ListView.svelte b/apps/mana/apps/web/src/lib/modules/wardrobe/ListView.svelte index 50bd6aa45..7bb982dba 100644 --- a/apps/mana/apps/web/src/lib/modules/wardrobe/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/wardrobe/ListView.svelte @@ -12,7 +12,8 @@ the same way picture/ListView does. -->
@@ -67,32 +104,82 @@ {/each} - {#if !face$.loading && !face} -
-
- -
-

Lade ein Gesichtsbild hoch

-

- Wir brauchen dich auf Bild, damit Try-On Kleidung an dir visualisieren kann. Das Bild - bleibt lokal und wird nur für deine eigenen Generierungen genutzt. -

+ {#if showBanner} +
+ {#if uploadPhase === 'success'} +
+ {#if uploadedPreviewUrl} + + {:else} + + + + {/if} +
+

+ + Gesichtsbild gespeichert +

+

+ Perfekt — als nächstes lädst du unten dein erstes Kleidungsstück hoch. +

+
+
-
- - {#if faceUploadError} - {/if} @@ -148,6 +235,32 @@ flex: 1; min-height: 0; } + .face-banner { + border-color: hsl(var(--color-border)); + background: hsl(var(--color-background) / 0.5); + transition: + background-color 0.25s, + border-color 0.25s; + } + .face-banner-success { + border-style: solid; + border-color: hsl(var(--color-primary) / 0.4); + background: hsl(var(--color-primary) / 0.06); + } + /* The spinner class travels through Phosphor's , + which is a child component, so scoped CSS needs :global() to reach + the rendered . Nested under .face-banner keeps it local. */ + .face-banner :global(.spinner) { + animation: wardrobe-spin 0.9s linear infinite; + } + @keyframes wardrobe-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } + } @container (min-width: 640px) { .wardrobe-root { padding: 0.75rem 1rem 1rem;