diff --git a/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte b/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte index d9c0828be..ed149b6f1 100644 --- a/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/comic/ListView.svelte @@ -4,8 +4,20 @@ wiederverwendbaren Identity-Anchors. Tab-State ist lokal und bleibt erhalten solange ListView gemountet ist (SvelteKit hält uns gemountet bei Navigation innerhalb /comic). + + Face-Ref-Banner (oben, oberhalb der Tabs) übernimmt das Wardrobe- + Pattern 1:1 — wenn der aktive Space kein face-ref hat, kann der + User das Bild direkt hier inline droppen statt in Profil → Bilder + navigieren zu müssen. Banner zeigt sich für beide Tabs (Stories + UND Characters brauchen ein Face-Ref) und blendet sich nach + erfolgreichem Upload mit einem 2.5s Success-Card aus. -->
@@ -41,6 +107,88 @@ {/each} + {#if showBanner} +
+ {#if uploadPhase === 'success'} +
+ {#if uploadedPreviewUrl} + + {:else} + + + + {/if} +
+

+ + Gesichtsbild gespeichert +

+

+ Perfekt — als nächstes baust du deinen ersten Comic-Character oder legst direkt eine + Story an. +

+
+ +
+ {:else} +
+ +
+

Lade ein Gesichtsbild hoch

+

+ Wir brauchen dich auf Bild, damit Comic-Panels und Charakter-Varianten von dir + gerendert werden können. Das Bild bleibt lokal und wird nur für deine eigenen + Generierungen genutzt. +

+
+
+
+ + {#if uploadPhase === 'uploading'} + + + Lade… + + {/if} +
+ {#if faceUploadError} + + {/if} + {/if} +
+ {/if} +
{#if activeTab === 'stories'} @@ -109,6 +257,30 @@ min-height: 0; overflow-y: auto; } + .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); + } + /* Spinner reaches into Phosphor's child SVG via :global(). */ + .face-banner :global(.spinner) { + animation: comic-spin 0.9s linear infinite; + } + @keyframes comic-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } + } @container (min-width: 640px) { .comic-root { padding: 0.75rem 1rem 1rem; diff --git a/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte b/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte index b0564314d..480eeccd5 100644 --- a/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte +++ b/apps/mana/apps/web/src/lib/modules/comic/views/CharactersView.svelte @@ -1,12 +1,12 @@
@@ -37,21 +35,6 @@ - {#if !hasFace && !face$.loading} -
-
- -
-

Lade erst dein Gesichtsbild hoch

-

- Charakter-Generierung braucht ein Face-Bild als Source. Hochladen in - Profil → Bilder. -

-
-
-
- {/if} - {#if characters.length > 0}
{#each characters as character (character.id)} diff --git a/apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte b/apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte index 64f445e53..d09759474 100644 --- a/apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/comic/views/ListView.svelte @@ -1,13 +1,11 @@
@@ -38,21 +34,6 @@ - {#if !hasFace && !face$.loading} -
-
- -
-

Lade erst dein Gesichtsbild hoch

-

- Ohne Face-Ref im aktiven Space kann kein Comic-Panel generiert werden. Hochladen in - Profil → Bilder. -

-
-
-
- {/if} - {#if stories.length > 0}
{#each stories as story (story.id)}