Compare commits

10 Commits

Author SHA1 Message Date
root
65a19d7678 Design-Sync: Kapsel-Shape (8) fuer Dither-Chips, Liquid-Metal u_shape 0
Aus prototyp-app.html im Design-Projekt uebernommen: neue GLSL-Shape 8
(aspect-korrigierte Kapsel statt zentrierter Kugel - passt sich der
Pill-Breite an), Chips auf shape:8, Liquid-Metal-Uniform u_shape 1->0.
Bildpfade bleiben .jpg (Design-Kopie basierte auf aelterem .png-Stand).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 19:14:15 +00:00
root
2f2ec31466 Testeffekt: Dithering-Shader (Sphere/Random) auf den Modell-Chips im Create-Screen
WebGL2-Port von designali-in/dithering-shader als Vanilla-Modul (mountDither):
Shader laeuft als Canvas-Layer in den drei Chips, ausgewaehlt = weiss/silber
(#f2f2f2), nicht ausgewaehlt = dunkelgrau (#555); Auswahlwechsel aendert nur
die Front-Farbe (keine neuen GL-Kontexte). Mount lazy beim ersten Oeffnen des
Create-Screens; ohne WebGL2 bleibt der normale Chip-Look.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:28 +00:00
root
c1d278b6e5 Design-Update 4: Liquid-Metal-Buttons, Glas-Refraktion, neuer Create-Screen mit Fake-Tastatur
- Like/Plus/Nachmachen/Generieren als Liquid-Metal: WebGL-Shader (esm.sh
  @paper-design/shaders, liquidMetalFragmentShader) ueber Metall-Gradient-
  Fallback, schwarzer Kern, graues Icon mit Schattenwurf
- Nav-Glas: bl-glass-refract (feImage-Displacement-Map mit RGB-Split, aus
  Nav-Groesse dynamisch generiert) + blur(3px) saturate(1.15), Weiss .12,
  Ring .4/.3; Layer als echte divs statt Pseudo-Elemente
- Create komplett neu (aus BrandLoop.dc.html): Vorschau-Stack mit Ketten-
  Faecher + Dots + Video-Badge, Optionen-Accordion (Typ/Format/Kette),
  Prompt-Box mit Border-Beam (border-beam.css), Liquid-Metal-Generate,
  Fake-iOS-Tastatur mit @Modell-Tokens (inputmode=none gegen echte Tastatur),
  interner Scroll + body.noscroll auch fuer Create

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 14:38:29 +00:00
5786bcdcf6 Update preview config from ticket system 2026-07-22 19:53:57 +00:00
root
0291bd26b9 Fix: Explore-Screen scrollt nicht mehr (body.noscroll + overscroll-behavior)
Der globale .app-padding-bottom machte die Seite hoeher als den Viewport ->
auf dem Feed war vertikales Wippen moeglich. Explore sperrt jetzt body-Scroll
(overflow:hidden, height:100dvh, padding-bottom:0), scrollbare Screens
(Detail/Create/Profil) bleiben unveraendert.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 19:52:42 +00:00
root
64b1c8d703 Design-Update 3: neue Liquid-Glass-Nav (bl-glass-distortion), Nav auf Design-Hoehe, Feed-Animationen
- Nav: Specular-Lighting-Glasfilter + Weiss-Layer rgba(255,255,255,.25) +
  Kanten-Ring + Aussenschatten; bottom:14px ohne Safe-Area-Aufschlag
  (= exakt die Hoehe aus BrandLoop.dc.html), Bounce-Transition
- Fling: Top-Karte fadet aus (.3s), Stack rueckt mit Settle-Animation nach
  (.45s cubic-bezier(.22,1,.36,1)), 4 Karten im Stack, Snap-back weicher
- Tab-Wechsel: Deck+Blur Crossfade (180ms), Hood animiert sofort
- Blur-Layer: background .7s ease + opacity .25s ease
- x-actions Abstand auf Design-Wert 84px

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 19:30:06 +00:00
root
8ebe0632bc 5 Demo-Bilder (Pinterest-Auswahl des Nutzers) in Feed/Detail verdrahtet
okolo->Mara2, celimax-Poster->Lena, Balenciaga-Subway->Jonas+Avatar,
MODAILY->Mara3, THE-ROW->Tom1; Bildpfade auf .jpg umgestellt.
Offen: Mara1 (Bogenfenster-Toner), Tom4/Feld1/Kai, Feld2/Nina - naechste Lieferung.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 18:27:12 +00:00
root
342504f481 QR-Code für Expo Go (exps://expo-brandloop.project.webklar.com)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 17:32:19 +00:00
root
e55bc810e6 Design-Update 2 aus BrandLoop.dc.html: roter Glow, Liquid-Glass-Nav, Mara-Avatar, Karten-Stack
- Radial-Glow rgba(241,99,99,.21) am unteren Rand auf Explore, Detail und Create
- Bottom-Nav als Liquid-Glass: feTurbulence+feDisplacementMap-Filter als
  backdrop-filter (blur(20px) als Fallback) + Glas-Kanten-Ring via inset-Shadows
- Mara S. mit Avatar-Foto (50% 16% / 300%-Ausschnitt) im Feed und Detail-Header,
  Fallback bleibt Gradient+Initial solange das Bild fehlt
- Hintere Deck-Karten zeigen ihr eigenes erstes Bild (brightness .85) statt des
  geblurrten Top-Bilds

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 17:26:17 +00:00
root
8c7fbfe581 Explore-Update aus BrandLoop.dc.html: adaptive Hood-Tab-Leiste + echte Beispielbilder
- Hood-Kurve 1:1 aus dem Design: pro Tab eigene Plateau-Breite (hoodPath(cx,nh)),
  Tab-Positionen werden aus dem DOM gemessen, am Rand verschmilzt die Hood mit
  der Bildschirmkante; Center+Breite werden gemeinsam animiert (460ms, Overshoot)
- Tabs als zentrierte Flex-Row (gap 96px) mit vergroesserter Hit-Area
- Neue Geometrie: viewBox 430x120, floor 76, Statushoehe 64px (Design-Basis)
- POSTS mit pics-Arrays (uploads/pasted-*.png): Karten, Hintergrund-Blur und
  Detail-Strip nutzen echte Bilder; Fallback auf Dummy-Verlaeufe solange eine
  Datei fehlt (Preload-Probe), Labels nur ohne Bild
- Detail: neuer Prompt (Roter Toner im rosa Bogenfenster), Maras Ketten-Labels
  (Toner im Bogenfenster / Age Decoder Essence / Poster-Ad), Strip JS-gerendert

Hinweis: uploads/*.png folgen separat (Design-API kappt Dateien >256KiB)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-22 17:26:17 +00:00
8 changed files with 888 additions and 127 deletions

178
border-beam.css Normal file
View File

@@ -0,0 +1,178 @@
@property --beam-angle-bb {
syntax: "<angle>";
initial-value: 0deg;
inherits: true;
}
@property --beam-opacity-bb {
syntax: "<number>";
initial-value: 0;
inherits: true;
}
[data-beam="bb"] {
position: relative;
border-radius: 24px;
overflow: hidden;
}
[data-beam="bb"][data-active] {
animation:
beam-spin-bb 1.96s linear infinite,
beam-fade-in-bb 0.6s ease forwards;
}
[data-beam="bb"][data-active]::after {
content: "";
position: absolute;
inset: 0;
border-radius: 23px;
padding: 1px;
clip-path: inset(0 round 24px);
background: conic-gradient(
from var(--beam-angle-bb),
transparent 0%, transparent 54%,
rgba(255, 255, 255, 0.1) 57%,
rgba(255, 255, 255, 0.3) 60%,
rgba(255, 255, 255, 0.6) 63%,
rgba(255, 255, 255, 0.75) 66%,
rgba(255, 255, 255, 0.6) 69%,
rgba(255, 255, 255, 0.3) 72%,
rgba(255, 255, 255, 0.1) 75%,
transparent 78%, transparent 100%
),radial-gradient(ellipse 70px 40px at 33% -7.4%, rgb(255, 50, 100), transparent),
radial-gradient(ellipse 60px 35px at 12% -5%, rgb(40, 140, 255), transparent),
radial-gradient(ellipse 40px 70px at 2.1% 68.3%, rgb(50, 200, 80), transparent),
radial-gradient(ellipse 20px 35px at 2.1% 68.3%, rgb(30, 185, 170), transparent),
radial-gradient(ellipse 180px 32px at 74.4% 100%, rgb(100, 70, 255), transparent),
radial-gradient(ellipse 85px 26px at 55% 100%, rgb(40, 140, 255), transparent),
radial-gradient(ellipse 74px 32px at 93.9% 0%, rgb(255, 120, 40), transparent),
radial-gradient(ellipse 26px 42px at 100% 27.1%, rgb(240, 50, 180), transparent),
radial-gradient(ellipse 52px 48px at 100% 27.1%, rgb(180, 40, 240), transparent);
-webkit-mask:
conic-gradient(
from var(--beam-angle-bb),
transparent 0%, transparent 30%,
rgba(255, 255, 255, 0.1) 36%, rgba(255, 255, 255, 0.35) 44%,
white 52%, white 80%,
rgba(255, 255, 255, 0.35) 86%, rgba(255, 255, 255, 0.1) 92%,
transparent 95%, transparent 100%
),
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
-webkit-mask-composite: source-in, xor;
mask:
conic-gradient(
from var(--beam-angle-bb),
transparent 0%, transparent 30%,
rgba(255, 255, 255, 0.1) 36%, rgba(255, 255, 255, 0.35) 44%,
white 52%, white 80%,
rgba(255, 255, 255, 0.35) 86%, rgba(255, 255, 255, 0.1) 92%,
transparent 95%, transparent 100%
),
linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0);
mask-composite: intersect, exclude;
pointer-events: none;
z-index: 2;
opacity: calc(var(--beam-opacity-bb) * 0.26 * var(--beam-stroke-opacity, 1) * var(--beam-strength, 1));
animation: beam-hue-shift-bb 12s ease-in-out infinite;
}
[data-beam="bb"][data-active]::before {
content: "";
position: absolute;
inset: 0;
border-radius: 24px;
background: radial-gradient(ellipse 63px 36px at 33% -7.4%, rgba(255, 50, 100, 0.45), transparent),
radial-gradient(ellipse 54px 32px at 12% -5%, rgba(40, 140, 255, 0.45), transparent),
radial-gradient(ellipse 36px 63px at 2.1% 68.3%, rgba(50, 200, 80, 0.45), transparent),
radial-gradient(ellipse 18px 32px at 2.1% 68.3%, rgba(30, 185, 170, 0.45), transparent),
radial-gradient(ellipse 162px 29px at 74.4% 100%, rgba(100, 70, 255, 0.45), transparent),
radial-gradient(ellipse 77px 23px at 55% 100%, rgba(40, 140, 255, 0.45), transparent),
radial-gradient(ellipse 67px 29px at 93.9% 0%, rgba(255, 120, 40, 0.45), transparent),
radial-gradient(ellipse 23px 38px at 100% 27.1%, rgba(240, 50, 180, 0.45), transparent),
radial-gradient(ellipse 47px 43px at 100% 27.1%, rgba(180, 40, 240, 0.45), transparent);
box-shadow: inset 0 0 9px 1px rgba(255, 255, 255, 0.27);
-webkit-mask-image:
conic-gradient(
from var(--beam-angle-bb),
transparent 0%, transparent 30%,
rgba(255, 255, 255, 0.1) 36%, rgba(255, 255, 255, 0.35) 44%,
white 52%, white 80%,
rgba(255, 255, 255, 0.35) 86%, rgba(255, 255, 255, 0.1) 92%,
transparent 95%, transparent 100%
),
linear-gradient(white, transparent 28px, transparent calc(100% - 28px), white),
linear-gradient(to right, white, transparent 28px, transparent calc(100% - 28px), white);
-webkit-mask-composite: source-in, source-over;
mask-image:
conic-gradient(
from var(--beam-angle-bb),
transparent 0%, transparent 30%,
rgba(255, 255, 255, 0.1) 36%, rgba(255, 255, 255, 0.35) 44%,
white 52%, white 80%,
rgba(255, 255, 255, 0.35) 86%, rgba(255, 255, 255, 0.1) 92%,
transparent 95%, transparent 100%
),
linear-gradient(white, transparent 28px, transparent calc(100% - 28px), white),
linear-gradient(to right, white, transparent 28px, transparent calc(100% - 28px), white);
mask-composite: intersect, add;
pointer-events: none;
z-index: 1;
opacity: calc(var(--beam-opacity-bb) * 0.42 * var(--beam-inner-opacity, 1) * var(--beam-strength, 1));
clip-path: inset(0 round 24px);
animation: beam-hue-shift-bb 12s ease-in-out infinite;
}
[data-beam="bb"] [data-beam-bloom] {
display: none;
position: absolute;
inset: 0;
border-radius: 23px;
clip-path: inset(0 round 24px);
background: conic-gradient(
from var(--beam-angle-bb),
transparent 0%, transparent 58%,
rgba(255, 255, 255, 0.03) 62%,
rgba(255, 255, 255, 0.08) 65%,
rgba(255, 255, 255, 0.2) 67%,
rgba(255, 255, 255, 0.45) 69%,
rgba(255, 255, 255, 0.85) 70%,
rgba(255, 255, 255, 0.85) 70.5%,
rgba(255, 255, 255, 0.45) 71.5%,
rgba(255, 255, 255, 0.2) 73%,
rgba(255, 255, 255, 0.08) 75%,
rgba(255, 255, 255, 0.03) 78%,
transparent 82%
);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask-composite: xor;
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: exclude;
padding: 1px;
filter: blur(8px) brightness(1.30) saturate(1.20);
pointer-events: none;
z-index: 3;
opacity: 0;
}
[data-beam="bb"][data-active] [data-beam-bloom] {
display: block;
opacity: calc(var(--beam-opacity-bb) * 0.24 * var(--beam-bloom-opacity, 1) * var(--beam-strength, 1));
}
@keyframes beam-spin-bb {
to { --beam-angle-bb: 360deg; }
}
@keyframes beam-fade-in-bb {
to { --beam-opacity-bb: 1; }
}
@keyframes beam-hue-shift-bb {
0% { filter: hue-rotate(calc(var(--beam-hue-base, 0deg) - 30deg)) brightness(1.30) saturate(1.20); }
50% { filter: hue-rotate(calc(var(--beam-hue-base, 0deg) + 30deg)) brightness(1.30) saturate(1.20); }
100% { filter: hue-rotate(calc(var(--beam-hue-base, 0deg) - 30deg)) brightness(1.30) saturate(1.20); }
}

BIN
expo-qr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB