preview
This commit is contained in:
705
prototyp-app.html
Normal file
705
prototyp-app.html
Normal file
@@ -0,0 +1,705 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||||
<meta name="theme-color" content="#09090b">
|
||||
<title>BrandLoop – Prototyp</title>
|
||||
<style>
|
||||
:root{
|
||||
--bg:#09090b;
|
||||
--surface:rgba(255,255,255,.035);
|
||||
--surface2:rgba(255,255,255,.07);
|
||||
--sheet:#131316;
|
||||
--border:rgba(255,255,255,.09);
|
||||
--border-strong:rgba(255,255,255,.18);
|
||||
--txt:#fafafa;
|
||||
--mut:#a1a1aa;
|
||||
--faint:#71717a;
|
||||
--rose:#f43f5e;
|
||||
--rose-soft:#fb7185;
|
||||
--orange:#f97316;
|
||||
--grad:linear-gradient(135deg,#f43f5e,#f97316);
|
||||
--ok:#34d399;
|
||||
--gold:#fbbf24;
|
||||
}
|
||||
*{box-sizing:border-box; margin:0; padding:0;}
|
||||
html{-webkit-text-size-adjust:100%;}
|
||||
body{
|
||||
background:var(--bg); color:var(--txt);
|
||||
font-family:"Geist","Inter",-apple-system,"Segoe UI",Roboto,system-ui,sans-serif;
|
||||
font-size:15px; line-height:1.5;
|
||||
-webkit-font-smoothing:antialiased;
|
||||
-webkit-tap-highlight-color:transparent;
|
||||
}
|
||||
svg.ic{fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round;}
|
||||
|
||||
.app{position:relative; max-width:430px; margin:0 auto; min-height:100dvh; padding:0 20px calc(96px + env(safe-area-inset-bottom)); overflow-x:hidden;}
|
||||
@media(min-width:480px){.app{border-inline:1px solid var(--border);}}
|
||||
.glow{position:fixed; top:-160px; left:50%; transform:translateX(-50%); width:560px; height:420px; background:radial-gradient(closest-side, rgba(244,63,94,.15), rgba(249,115,22,.05) 60%, transparent); pointer-events:none; z-index:0;}
|
||||
|
||||
.screen{display:none; animation:fade .28s ease; position:relative; z-index:1;}
|
||||
.screen.active{display:block;}
|
||||
@keyframes fade{from{opacity:0; transform:translateY(8px);} to{opacity:1; transform:none;}}
|
||||
|
||||
/* ---- Topbar ---- */
|
||||
.topbar{position:sticky; top:0; z-index:20; display:flex; align-items:center; gap:12px;
|
||||
margin:0 -20px 16px; padding:calc(12px + env(safe-area-inset-top)) 20px 12px;
|
||||
background:rgba(9,9,11,.82); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px);
|
||||
border-bottom:1px solid var(--border);}
|
||||
.topbar h1{font-size:17px; font-weight:600; letter-spacing:-.01em;}
|
||||
.iconbtn{display:grid; place-items:center; width:36px; height:36px; border-radius:12px;
|
||||
background:var(--surface); border:1px solid var(--border); color:var(--mut); cursor:pointer; flex-shrink:0; transition:transform .12s, color .15s;}
|
||||
.iconbtn:active{transform:scale(.92);}
|
||||
.iconbtn:hover{color:var(--txt);}
|
||||
.iconbtn svg{width:18px; height:18px;}
|
||||
|
||||
/* ---- Typo ---- */
|
||||
h3{font-size:12px; font-weight:600; color:var(--mut); text-transform:uppercase; letter-spacing:.07em; margin:22px 0 10px;}
|
||||
.sub{color:var(--mut); font-size:13.5px; line-height:1.55; margin-top:4px;}
|
||||
.note{font-size:12px; color:var(--faint); line-height:1.55; margin-top:10px;}
|
||||
.hl{color:var(--txt); font-weight:600;}
|
||||
|
||||
/* ---- Cards ---- */
|
||||
.card{background:var(--surface); border:1px solid var(--border); border-radius:18px; padding:16px; margin-bottom:12px; position:relative;}
|
||||
.card h4{font-size:15px; font-weight:600; margin-bottom:3px;}
|
||||
.card h4.t-sm{font-size:13.5px;}
|
||||
.card p{font-size:13px; color:var(--mut); line-height:1.55;}
|
||||
.card.click{cursor:pointer; transition:border-color .15s, transform .1s, background .15s;}
|
||||
.card.click:hover{border-color:var(--border-strong); background:var(--surface2);}
|
||||
.card.click:active{transform:scale(.98);}
|
||||
.cardrow{display:flex; align-items:center; gap:13px;}
|
||||
.cardrow .body{flex:1; min-width:0;}
|
||||
.ico{width:42px; height:42px; border-radius:14px; display:grid; place-items:center; flex-shrink:0;}
|
||||
.ico svg{width:20px; height:20px;}
|
||||
.ico.rose{background:rgba(244,63,94,.12); color:var(--rose-soft);}
|
||||
.ico.orange{background:rgba(249,115,22,.12); color:#fb923c;}
|
||||
.ico.amber{background:rgba(251,191,36,.12); color:var(--gold);}
|
||||
.ico.emerald{background:rgba(52,211,153,.12); color:var(--ok);}
|
||||
.ico.zinc{background:var(--surface2); color:var(--mut);}
|
||||
.chev{width:16px; height:16px; color:var(--faint); flex-shrink:0;}
|
||||
|
||||
/* ---- Media-Platzhalter ---- */
|
||||
.ph{display:flex; gap:10px; align-items:flex-start; border:1.5px dashed rgba(255,255,255,.16); border-radius:14px;
|
||||
padding:13px 14px; font-size:12.5px; color:var(--mut); font-style:italic; line-height:1.55;
|
||||
background:rgba(255,255,255,.02); margin:10px 0;}
|
||||
.ph svg{width:16px; height:16px; flex-shrink:0; margin-top:2px; color:var(--faint);}
|
||||
|
||||
/* ---- Buttons ---- */
|
||||
.btn{display:flex; align-items:center; justify-content:center; gap:8px; width:100%;
|
||||
border:none; border-radius:16px; padding:15px; font-size:15px; font-weight:600; font-family:inherit; cursor:pointer; margin-top:14px;
|
||||
background:var(--grad); color:#fff;
|
||||
box-shadow:0 8px 24px rgba(244,63,94,.25), inset 0 1px 0 rgba(255,255,255,.18);
|
||||
transition:transform .12s, filter .15s;}
|
||||
.btn:hover{filter:brightness(1.08);}
|
||||
.btn:active{transform:scale(.98);}
|
||||
.btn.sec{background:var(--surface); color:var(--txt); border:1px solid var(--border); box-shadow:none; font-weight:500;}
|
||||
.btn svg{width:17px; height:17px;}
|
||||
|
||||
/* ---- Formulare ---- */
|
||||
input[type=text], textarea{width:100%; background:var(--surface); border:1px solid var(--border); border-radius:14px;
|
||||
color:var(--txt); padding:13px 14px; font-size:15px; font-family:inherit; margin:6px 0 14px;
|
||||
transition:border-color .15s, box-shadow .15s; -webkit-appearance:none;}
|
||||
::placeholder{color:var(--faint);}
|
||||
input:focus, textarea:focus{outline:none; border-color:rgba(244,63,94,.55); box-shadow:0 0 0 3px rgba(244,63,94,.14);}
|
||||
textarea{min-height:84px; resize:vertical; line-height:1.55;}
|
||||
label{font-size:13px; font-weight:500; color:var(--mut); display:block;}
|
||||
.req{color:var(--rose-soft);}
|
||||
|
||||
/* ---- Tags, Scores, Badges ---- */
|
||||
.tag{display:inline-flex; align-items:center; gap:5px; background:var(--surface2); border:1px solid var(--border);
|
||||
color:var(--mut); border-radius:999px; padding:4px 11px; font-size:11.5px; margin:3px 4px 0 0;}
|
||||
.score{color:var(--gold); font-weight:600; font-size:.95em;}
|
||||
.badge{display:inline-block; font-size:10px; border-radius:999px; padding:3px 9px; font-weight:700; letter-spacing:.03em; vertical-align:2px;}
|
||||
.b-ok{background:rgba(52,211,153,.14); color:var(--ok);}
|
||||
.b-arch{background:rgba(161,161,170,.14); color:var(--mut);}
|
||||
.b-new{background:rgba(249,115,22,.15); color:#fb923c;}
|
||||
|
||||
/* ---- Favorit ---- */
|
||||
.fav{border-color:rgba(251,191,36,.45); box-shadow:0 0 0 1px rgba(251,191,36,.25), 0 8px 28px rgba(251,191,36,.07);}
|
||||
.favlabel{position:absolute; top:-10px; right:14px; background:linear-gradient(135deg,#fbbf24,#f59e0b);
|
||||
color:#1c1400; font-size:10px; font-weight:700; letter-spacing:.04em; border-radius:999px; padding:3px 10px;}
|
||||
|
||||
/* ---- Pills ---- */
|
||||
.pill-row{display:flex; gap:8px; margin:10px 0 4px;}
|
||||
.pill{flex:1; text-align:center; background:var(--surface); border:1px solid var(--border); border-radius:13px;
|
||||
padding:11px 6px; font-size:13.5px; color:var(--mut); font-weight:500; cursor:pointer; transition:border-color .15s, color .15s, background .15s, transform .1s;}
|
||||
.pill:active{transform:scale(.96);}
|
||||
.pill.on{border-color:rgba(244,63,94,.55); color:var(--rose-soft); background:rgba(244,63,94,.1); font-weight:600;}
|
||||
|
||||
/* ---- Steps ---- */
|
||||
.steps{display:flex; gap:6px; margin-bottom:18px;}
|
||||
.steps div{flex:1; height:4px; border-radius:4px; background:var(--surface2);}
|
||||
.steps div.on{background:var(--grad);}
|
||||
|
||||
/* ---- Metriken ---- */
|
||||
.row{display:flex; gap:10px;}
|
||||
.row .card{flex:1;}
|
||||
.metric{text-align:center; padding:14px 8px;}
|
||||
.metric p{font-size:10.5px; color:var(--faint); margin-bottom:4px; text-transform:uppercase; letter-spacing:.06em; font-weight:600;}
|
||||
.metric h4{font-size:19px; font-weight:700; margin:0;}
|
||||
.metric h4.g{color:var(--ok);}
|
||||
|
||||
/* ---- Listen in Cards ---- */
|
||||
.rule{display:flex; gap:10px; align-items:center; padding:9px 0; border-bottom:1px solid var(--border); font-size:13.5px; color:var(--txt);}
|
||||
.rule:last-child{border-bottom:none; padding-bottom:2px;}
|
||||
.rule:first-child{padding-top:2px;}
|
||||
.rule svg{width:16px; height:16px; color:var(--ok); flex-shrink:0;}
|
||||
.asset{display:flex; align-items:center; gap:10px; padding:8px 0; border-bottom:1px solid var(--border); font-size:13.5px;}
|
||||
.asset:last-child{border-bottom:none; padding-bottom:2px;}
|
||||
.asset:first-child{padding-top:2px;}
|
||||
.asset svg{width:16px; height:16px; color:var(--mut); flex-shrink:0;}
|
||||
.asset .score{margin-left:auto;}
|
||||
|
||||
/* ---- Log & Code ---- */
|
||||
.log{font-size:12.5px; color:var(--mut); border-left:2px solid var(--border-strong); padding:5px 0 5px 12px; margin:8px 0; line-height:1.5;}
|
||||
.code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace; font-size:11px; line-height:1.7; color:var(--mut);
|
||||
background:#0c0c0f; border:1px solid var(--border); border-radius:14px; padding:14px; overflow-x:auto; margin:10px 0;}
|
||||
.code b{color:var(--rose-soft); font-weight:600;}
|
||||
|
||||
/* ---- Home Hero ---- */
|
||||
.hero{text-align:center; padding:calc(52px + env(safe-area-inset-top)) 0 32px; position:relative;}
|
||||
.hero .logo{font-size:34px; font-weight:800; letter-spacing:-.03em;}
|
||||
.hero .logo span{background:var(--grad); -webkit-background-clip:text; background-clip:text; color:transparent;}
|
||||
.hero p{color:var(--mut); font-size:14px; margin-top:6px;}
|
||||
.hero .iconbtn{position:absolute; top:calc(14px + env(safe-area-inset-top)); right:0;}
|
||||
|
||||
/* ---- Tutorial ---- */
|
||||
.tut{display:flex; flex-direction:column; justify-content:center; min-height:calc(100dvh - 160px); text-align:center; padding:20px 6px;}
|
||||
.tut .emoji{font-size:52px; margin-bottom:18px;}
|
||||
.tut h1{font-size:26px; font-weight:700; letter-spacing:-.02em; margin-bottom:12px;}
|
||||
.tut .sub{font-size:14.5px;}
|
||||
|
||||
/* ---- Bottom-Navigation ---- */
|
||||
.nav{position:fixed; bottom:0; left:0; right:0; margin:0 auto; max-width:430px; display:flex; z-index:30;
|
||||
background:rgba(9,9,11,.85); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px);
|
||||
border-top:1px solid var(--border); padding:8px 8px calc(8px + env(safe-area-inset-bottom));}
|
||||
.nav button{flex:1; display:flex; flex-direction:column; align-items:center; gap:4px; background:none; border:none;
|
||||
color:var(--faint); font-size:10.5px; font-weight:500; font-family:inherit; padding:8px 2px; cursor:pointer; transition:color .15s;}
|
||||
.nav button svg{width:22px; height:22px;}
|
||||
.nav button.on{color:var(--rose-soft);}
|
||||
|
||||
/* ---- Info-Sheet ---- */
|
||||
.backdrop{position:fixed; inset:0; background:rgba(0,0,0,.6); opacity:0; pointer-events:none; transition:opacity .25s; z-index:40;}
|
||||
.backdrop.open{opacity:1; pointer-events:auto;}
|
||||
.sheet{position:fixed; bottom:0; left:0; right:0; margin:0 auto; max-width:430px; background:var(--sheet);
|
||||
border:1px solid var(--border); border-bottom:none; border-radius:24px 24px 0 0;
|
||||
padding:14px 20px calc(28px + env(safe-area-inset-bottom));
|
||||
transform:translateY(105%); transition:transform .32s cubic-bezier(.32,.72,0,1); z-index:50; max-height:80dvh; overflow-y:auto;}
|
||||
.sheet.open{transform:none;}
|
||||
.sheet .grab{width:36px; height:4px; border-radius:4px; background:var(--surface2); margin:0 auto 18px;}
|
||||
.sheet h2{font-size:17px; font-weight:700; margin-bottom:10px;}
|
||||
.sheet p{color:var(--mut); font-size:13.5px; line-height:1.6; margin-bottom:12px;}
|
||||
.sheet ul{list-style:none; margin-bottom:12px;}
|
||||
.sheet li{color:var(--mut); font-size:13.5px; line-height:1.6; padding-left:14px; position:relative; margin-bottom:4px;}
|
||||
.sheet li::before{content:"·"; position:absolute; left:2px; color:var(--rose-soft); font-weight:700;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- Lucide-Icon-Sprite (KokonutUI nutzt lucide-icons) -->
|
||||
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
|
||||
<defs>
|
||||
<symbol id="i-back" viewBox="0 0 24 24"><path d="m15 18-6-6 6-6"/></symbol>
|
||||
<symbol id="i-chev" viewBox="0 0 24 24"><path d="m9 18 6-6-6-6"/></symbol>
|
||||
<symbol id="i-home" viewBox="0 0 24 24"><path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></symbol>
|
||||
<symbol id="i-plus" viewBox="0 0 24 24"><path d="M5 12h14"/><path d="M12 5v14"/></symbol>
|
||||
<symbol id="i-spark" viewBox="0 0 24 24"><path d="m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"/><path d="M5 3v4"/><path d="M19 17v4"/><path d="M3 5h4"/><path d="M17 19h4"/></symbol>
|
||||
<symbol id="i-db" viewBox="0 0 24 24"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M3 5V19A9 3 0 0 0 21 19V5"/><path d="M3 12A9 3 0 0 0 21 12"/></symbol>
|
||||
<symbol id="i-gear" viewBox="0 0 24 24"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></symbol>
|
||||
<symbol id="i-film" viewBox="0 0 24 24"><path d="M20.2 6 3 11l-.9-2.4c-.3-1.1.3-2.2 1.3-2.5l13.5-4c1.1-.3 2.2.3 2.5 1.3Z"/><path d="m6.2 5.3 3.1 3.9"/><path d="m12.4 3.4 3.1 4"/><path d="M3 11h18v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z"/></symbol>
|
||||
<symbol id="i-user" viewBox="0 0 24 24"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></symbol>
|
||||
<symbol id="i-box" viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.29 7 12 12 20.71 7"/><line x1="12" x2="12" y1="22" y2="12"/></symbol>
|
||||
<symbol id="i-pin" viewBox="0 0 24 24"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"/><circle cx="12" cy="10" r="3"/></symbol>
|
||||
<symbol id="i-bulb" viewBox="0 0 24 24"><path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/></symbol>
|
||||
<symbol id="i-mic" viewBox="0 0 24 24"><path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" x2="12" y1="19" y2="22"/></symbol>
|
||||
<symbol id="i-up" viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" x2="12" y1="3" y2="15"/></symbol>
|
||||
<symbol id="i-play" viewBox="0 0 24 24"><polygon points="6 3 20 12 6 21 6 3"/></symbol>
|
||||
<symbol id="i-img" viewBox="0 0 24 24"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></symbol>
|
||||
<symbol id="i-info" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 16v-4"/><path d="M12 8h.01"/></symbol>
|
||||
<symbol id="i-check" viewBox="0 0 24 24"><path d="M20 6 9 17l-5-5"/></symbol>
|
||||
<symbol id="i-refresh" viewBox="0 0 24 24"><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></symbol>
|
||||
<symbol id="i-lock" viewBox="0 0 24 24"><rect width="18" height="11" x="3" y="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></symbol>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
<div class="glow"></div>
|
||||
|
||||
<div class="app">
|
||||
|
||||
<!-- ============ HOME ============ -->
|
||||
<div class="screen active" id="home">
|
||||
<div class="hero">
|
||||
<button class="iconbtn" onclick="toggleInfo(true)" aria-label="Info zum Prototyp"><svg class="ic"><use href="#i-info"/></svg></button>
|
||||
<div class="logo">Brand<span>Loop</span></div>
|
||||
<p>Deine Ads lernen aus jedem Euro.</p>
|
||||
</div>
|
||||
<div class="card click" onclick="go('create-choice')">
|
||||
<div class="cardrow">
|
||||
<div class="ico rose"><svg class="ic"><use href="#i-plus"/></svg></div>
|
||||
<div class="body"><h4>Erstellen</h4><p>Neue Szene (Video) oder neues Modell (Person / Produkt)</p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card click" onclick="go('improve-select')">
|
||||
<div class="cardrow">
|
||||
<div class="ico amber"><svg class="ic"><use href="#i-spark"/></svg></div>
|
||||
<div class="body"><h4>Verbessern</h4><p>Ein Asset deiner Brand weiterentwickeln – jederzeit</p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<h3>Zuletzt</h3>
|
||||
<div class="card click" onclick="go('scene-results')">
|
||||
<div class="cardrow">
|
||||
<div class="ico zinc"><svg class="ic"><use href="#i-film"/></svg></div>
|
||||
<div class="body"><h4 class="t-sm">Szene: „Roter Lippenstift – Close-up"</h4><p>3 Videos generiert · Vote offen</p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="note">Bewusst leer gehalten: Beim App-Start keine Fragen, kein Formular. Das Unternehmensprofil kommt erst beim ersten Klick auf „Erstellen".</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ ERSTELLEN: AUSWAHL ============ -->
|
||||
<div class="screen" id="create-choice">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('home')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Erstellen</h1></div>
|
||||
<div class="card click" onclick="go('tut1')">
|
||||
<div class="cardrow">
|
||||
<div class="ico rose"><svg class="ic"><use href="#i-film"/></svg></div>
|
||||
<div class="body"><h4>Szene</h4><p>Video aus einem Prompt – mit deiner Brand Knowledge angereichert. Mehrere KI-Modelle parallel.</p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card click" onclick="go('model-create')">
|
||||
<div class="cardrow">
|
||||
<div class="ico orange"><svg class="ic"><use href="#i-user"/></svg></div>
|
||||
<div class="body"><h4>Modell</h4><p>Person oder Produkt als festes Brand-Asset erstellen – bleibt in jedem Video 1:1 gleich.</p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="note">Beim allerersten Erstellen erscheint einmalig das Unternehmensprofil (nächster Screen). Danach geht's immer direkt zur Szene.</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ TUTORIAL 1 (Fullscreen) ============ -->
|
||||
<div class="screen" id="tut1">
|
||||
<div class="tut">
|
||||
<div class="emoji">👋</div>
|
||||
<h1>Bevor's losgeht</h1>
|
||||
<p class="sub">Damit deine Videos nach <span class="hl">deiner Brand</span> aussehen, stellen wir dir einmalig 5 kurze Fragen.<br><br>Danach nie wieder – ab dann lernt die App von selbst, mit jedem Video.</p>
|
||||
<button class="btn" onclick="go('onboarding1')">Los geht's</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ ONBOARDING 1 ============ -->
|
||||
<div class="screen" id="onboarding1">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('tut1')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Dein Unternehmen</h1></div>
|
||||
<div class="steps"><div class="on"></div><div></div></div>
|
||||
<label>Labelname <span class="req">*</span></label>
|
||||
<input type="text" placeholder="z. B. VELVET ROUGE Cosmetics">
|
||||
<label>Was verkaufst du? <span class="req">*</span></label>
|
||||
<input type="text" placeholder="z. B. vegane Lippenstifte & Lipgloss">
|
||||
<label>Wen willst du erreichen? <span class="req">*</span></label>
|
||||
<input type="text" placeholder="z. B. Frauen 18–35, TikTok & Instagram">
|
||||
<label>3 Worte, die deine Brand beschreiben <span class="req">*</span></label>
|
||||
<input type="text" placeholder="z. B. mutig, clean, luxuriös">
|
||||
<label>Wie lange seid ihr schon auf dem Markt? <span class="req">*</span></label>
|
||||
<input type="text" placeholder="z. B. seit 2021">
|
||||
<button class="btn" onclick="go('tut2')">Weiter</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ TUTORIAL 2 (Fullscreen) ============ -->
|
||||
<div class="screen" id="tut2">
|
||||
<div class="tut">
|
||||
<div class="emoji">📸</div>
|
||||
<h1>Zeig uns deine Brand</h1>
|
||||
<p class="sub">Logo, Produktbilder, deine besten bisherigen Ads – alles optional.<br><br>Aber: Je mehr du hochlädst, desto besser sieht schon dein <span class="hl">allererstes Video</span> aus.</p>
|
||||
<button class="btn" onclick="go('onboarding2')">Weiter</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ ONBOARDING 2 ============ -->
|
||||
<div class="screen" id="onboarding2">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('tut2')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Uploads</h1></div>
|
||||
<div class="steps"><div class="on"></div><div class="on"></div></div>
|
||||
<p class="sub" style="margin-bottom:12px;">Optional, aber empfohlen – füttert deine Knowledge Base von Tag 1.</p>
|
||||
<div class="ph"><svg class="ic"><use href="#i-up"/></svg><span>[Upload: Logo]</span></div>
|
||||
<div class="ph"><svg class="ic"><use href="#i-up"/></svg><span>[Upload: Produktbilder – z. B. Lippenstift „Rouge No. 5" aus 3 Winkeln]</span></div>
|
||||
<div class="ph"><svg class="ic"><use href="#i-up"/></svg><span>[Upload: Deine bisher besten Ads (Video/Bild) – das System lernt daraus deine Startattribute]</span></div>
|
||||
<button class="btn" onclick="go('scene-create')">Profil speichern → Erste Szene</button>
|
||||
<button class="btn sec" onclick="go('scene-create')">Überspringen</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ SZENE ERSTELLEN ============ -->
|
||||
<div class="screen" id="scene-create">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('create-choice')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Szene erstellen</h1></div>
|
||||
<label>Dein Prompt</label>
|
||||
<textarea>Eine Frau hält einen roten Lippenstift in die Kamera.</textarea>
|
||||
<h3>Anzahl Videos</h3>
|
||||
<div class="pill-row">
|
||||
<div class="pill" onclick="pick(this)">3</div>
|
||||
<div class="pill on" onclick="pick(this)">4</div>
|
||||
<div class="pill" onclick="pick(this)">5</div>
|
||||
<div class="pill" onclick="pick(this)">6</div>
|
||||
</div>
|
||||
<div class="note">Jedes Video von einem anderen Top-KI-Modell. Mehr Videos = mehr Vergleichssignal, Preis pro Video.</div>
|
||||
<h3>Automatisch eingebaut (Brand Knowledge)</h3>
|
||||
<div class="card">
|
||||
<span class="tag">Regel: cleaner Hintergrund</span>
|
||||
<span class="tag">Gesicht: „Mara" v3 <span class="score">6120</span></span>
|
||||
<span class="tag">Produkt: Rouge No. 5 v2 <span class="score">6480</span></span>
|
||||
<span class="tag">Location: Kaiserslautern <span class="score">5240</span></span>
|
||||
<span class="tag">Voice: warm-weiblich <span class="score">5890</span></span>
|
||||
<p style="margin-top:10px;">Dein Prompt wird automatisch überarbeitet und mit den Top-Attributen & freigegebenen Assets angereichert.</p>
|
||||
</div>
|
||||
<button class="btn" onclick="go('script-confirm')">Weiter → Script</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ SCRIPT BESTÄTIGEN ============ -->
|
||||
<div class="screen" id="script-confirm">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('scene-create')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Dein Script</h1></div>
|
||||
<p class="sub" style="margin-bottom:10px;">Aus deinem Prompt + Brand Knowledge erstellt. Lies es, ändere was du willst – generiert wird erst nach deiner Bestätigung.</p>
|
||||
<textarea style="min-height:250px; font-size:13px; line-height:1.6;">SZENE: „Roter Lippenstift – Close-up"
|
||||
|
||||
SETTING: Kaiserslautern, Abendlicht (golden hour), cleaner unscharfer Hintergrund
|
||||
|
||||
PERSON: Mara (v3, freigegeben) – dunkle schulterlange Haare, nahbar-edel
|
||||
|
||||
ABLAUF:
|
||||
1. Close-up: Maras Hand hebt Rouge No. 5 (v2) frontal in die Kamera
|
||||
2. Schnitt auf Gesicht: natürliches Lächeln, Blick in die Linse
|
||||
3. Produkt dreht sich langsam, Logo sichtbar (nie verzerrt)
|
||||
|
||||
VOICE (warm-weiblich): „Dein Rot. Dein Statement."
|
||||
|
||||
TEXT-OVERLAY: keins (Brand-Stil: clean)</textarea>
|
||||
<div class="note">Erst nach Bestätigung werden die Videos generiert – Kosten entstehen erst dann. Änderungen am Script fließen als Signal in die Knowledge Base.</div>
|
||||
<button class="btn" onclick="go('scene-results')"><svg class="ic"><use href="#i-check"/></svg>Bestätigen & 4 Videos generieren</button>
|
||||
<button class="btn sec" onclick="go('script-confirm')"><svg class="ic"><use href="#i-refresh"/></svg>Script neu schreiben lassen</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ SZENE ERGEBNISSE ============ -->
|
||||
<div class="screen" id="scene-results">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('scene-create')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Wähle das Beste</h1></div>
|
||||
<p class="sub" style="margin-bottom:16px;">Tippe auf dein Favoriten-Video. Die goldene Umrandung ist die System-Vorhersage.</p>
|
||||
|
||||
<div class="card click fav" onclick="go('scene-vote')">
|
||||
<span class="favlabel">SYSTEM-FAVORIT</span>
|
||||
<h4 class="t-sm">Video 1 · Modell A</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-play"/></svg><span>[VIDEO: Mara (Gesicht v3) hält Rouge No. 5 frontal in die Kamera, Close-up, warmes Abendlicht, Kaiserslautern-Kulisse unscharf im Hintergrund, warme weibliche Stimme: „Dein Rot. Dein Statement."]</span></div>
|
||||
<span class="tag">warm-rot</span><span class="tag">Close-up</span><span class="tag">Kaiserslautern</span>
|
||||
</div>
|
||||
|
||||
<div class="card click" onclick="go('scene-vote')">
|
||||
<h4 class="t-sm">Video 2 · Modell B</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-play"/></svg><span>[VIDEO: Gleiche Szene, aber kühles Studiolicht, langsamer Schwenk von der Hand zum Gesicht, Text-Overlay statt Stimme]</span></div>
|
||||
<span class="tag">Studio</span><span class="tag">Schwenk</span><span class="tag">Text-Overlay</span>
|
||||
</div>
|
||||
|
||||
<div class="card click" onclick="go('scene-vote')">
|
||||
<h4 class="t-sm">Video 3 · Modell C</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-play"/></svg><span>[VIDEO: Outdoor Köln, Mara läuft auf Kamera zu, hält Lippenstift hoch, Upbeat-Musik, schnelle Schnitte]</span></div>
|
||||
<span class="tag">Köln</span><span class="tag">Bewegung</span><span class="tag">Upbeat</span>
|
||||
</div>
|
||||
|
||||
<div class="card click" onclick="go('scene-vote')">
|
||||
<h4 class="t-sm">Video 4 · Modell D</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-play"/></svg><span>[VIDEO: Extreme Makro-Aufnahme nur vom Lippenstift, der sich dreht, ASMR-Sound beim Öffnen]</span></div>
|
||||
<span class="tag">Makro</span><span class="tag">ASMR</span><span class="tag">ohne Gesicht</span>
|
||||
</div>
|
||||
|
||||
<div class="note">Bestätigst du den markierten Favoriten → wenig Elo-Punkte. Weichst du ab → volle Punkte (stärkeres Signal).</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ VOTE + GEZIELTE FRAGE ============ -->
|
||||
<div class="screen" id="scene-vote">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('scene-results')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Danke!</h1></div>
|
||||
<div class="card" style="border-color:rgba(52,211,153,.4);">
|
||||
<h4><span class="badge b-ok">GESPEICHERT</span></h4>
|
||||
<p style="margin-top:8px;">Dein Vote fließt in die Knowledge Base. Übereinstimmung mit System-Vorhersage: <span class="hl">78 %</span> (letzte 30 Votes).</p>
|
||||
</div>
|
||||
<h3>Kurze Frage (optional)</h3>
|
||||
<div class="card">
|
||||
<p style="color:var(--txt); font-size:14px; margin-bottom:8px;">Welche Location war besser?</p>
|
||||
<div class="pill-row">
|
||||
<div class="pill" onclick="pick(this)">Kaiserslautern</div>
|
||||
<div class="pill" onclick="pick(this)">Köln</div>
|
||||
<div class="pill" onclick="pick(this)">Egal</div>
|
||||
</div>
|
||||
<div class="note">Gezielte Fragen wirken nur auf dieses eine Attribut – das schnellste Signal gegen das Zuordnungsproblem.</div>
|
||||
</div>
|
||||
<h3>Video verwenden</h3>
|
||||
<button class="btn" onclick="go('publish')"><svg class="ic"><use href="#i-up"/></svg>Hochladen / Ad schalten</button>
|
||||
<button class="btn sec" onclick="go('improve-select')"><svg class="ic"><use href="#i-spark"/></svg>Erst noch verbessern</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ PUBLISH / PERFORMANCE ============ -->
|
||||
<div class="screen" id="publish">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('scene-vote')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Ad läuft</h1></div>
|
||||
<div class="card">
|
||||
<h4 class="t-sm">„Roter Lippenstift – Close-up" · Video 1</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-play"/></svg><span>[Gewähltes Video – veröffentlicht auf TikTok & Instagram via Ads-API]</span></div>
|
||||
</div>
|
||||
<h3>Live-Performance (Meta / TikTok API)</h3>
|
||||
<div class="row">
|
||||
<div class="card metric"><p>CTR</p><h4 class="g">2,4 %</h4></div>
|
||||
<div class="card metric"><p>Thumbstop</p><h4 class="g">41 %</h4></div>
|
||||
<div class="card metric"><p>ROAS</p><h4 class="g">3,1×</h4></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<p><span class="hl">+218</span> neue Follower seit Schaltung</p>
|
||||
</div>
|
||||
<div class="note">Performance-Daten fließen automatisch und höher gewichtet als Votes in die Scores – der Markt entscheidet, keine Bestätigung nötig. Jedes Video loggt, welche Asset-Versionen es nutzte.</div>
|
||||
<button class="btn sec" onclick="go('knowledge')">→ Was hat das System gelernt?</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ MODELL ERSTELLEN ============ -->
|
||||
<div class="screen" id="model-create">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('create-choice')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Modell erstellen</h1></div>
|
||||
<div class="pill-row">
|
||||
<div class="pill on" onclick="pick(this)">Person</div>
|
||||
<div class="pill" onclick="pick(this)">Produkt</div>
|
||||
</div>
|
||||
<label style="margin-top:10px;">Beschreibe deine Person</label>
|
||||
<textarea>Frau, Ende 20, dunkle schulterlange Haare, natürliches Lächeln, nahbar aber edel – passt zu „mutig, clean, luxuriös".</textarea>
|
||||
<label>Referenzbilder</label>
|
||||
<div class="ph"><svg class="ic"><use href="#i-up"/></svg><span>[Upload: 3–10 Referenzbilder der gewünschten Person / des Looks]</span></div>
|
||||
<div class="note">Rechte-Regel: Gesichter echter Personen nur mit dokumentierter Einwilligung. Rein KI-generierte Gesichter sind der sichere Standard.</div>
|
||||
<button class="btn" onclick="go('model-result')">Modell generieren</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ MODELL ERGEBNIS ============ -->
|
||||
<div class="screen" id="model-result">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('model-create')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Dein Modell</h1></div>
|
||||
<div class="card">
|
||||
<h4>„Mara" <span class="badge b-new">v1 · ENTWURF</span></h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-img"/></svg><span>[BILD: Generierte Frau, Ende 20, dunkle schulterlange Haare, natürliches Lächeln, cleaner Studiohintergrund – aus 4 Blickwinkeln]</span></div>
|
||||
<span class="tag">Ende 20</span><span class="tag">dunkle Haare</span><span class="tag">nahbar-edel</span>
|
||||
</div>
|
||||
<button class="btn" onclick="go('knowledge')"><svg class="ic"><use href="#i-check"/></svg>Freigeben (Release v1)</button>
|
||||
<button class="btn sec" onclick="go('improve-input')"><svg class="ic"><use href="#i-spark"/></svg>Verbessern – sieht noch nicht gut aus</button>
|
||||
<div class="note">Nur <span class="hl">freigegebene</span> Versionen werden in Videos verwendet. Verbessern erzeugt neue Versionen (v2, v3 …) – ein neues Gesicht ist ein bewusster Release, kein schleichender Drift.</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ VERBESSERN: ASSET WÄHLEN ============ -->
|
||||
<div class="screen" id="improve-select">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('home')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Verbessern</h1></div>
|
||||
<p class="sub" style="margin-bottom:16px;">Wähle das Asset, das du weiterentwickeln willst.</p>
|
||||
<div class="card click" onclick="go('improve-input')">
|
||||
<div class="cardrow">
|
||||
<div class="ico rose"><svg class="ic"><use href="#i-user"/></svg></div>
|
||||
<div class="body"><h4 class="t-sm">Gesicht „Mara" <span class="badge b-ok">v3 · FREIGEGEBEN</span></h4><p>Verwendet in 12 Videos · Score <span class="score">6120</span></p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card click" onclick="go('improve-input')">
|
||||
<div class="cardrow">
|
||||
<div class="ico orange"><svg class="ic"><use href="#i-box"/></svg></div>
|
||||
<div class="body"><h4 class="t-sm">Produkt „Rouge No. 5" <span class="badge b-ok">v2 · FREIGEGEBEN</span></h4><p>Verwendet in 18 Videos · Score <span class="score">6480</span></p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card click" onclick="go('improve-input')">
|
||||
<div class="cardrow">
|
||||
<div class="ico zinc"><svg class="ic"><use href="#i-film"/></svg></div>
|
||||
<div class="body"><h4 class="t-sm">Szene „Lippenstift Close-up"</h4><p>Video-Iteration: Licht, Schnitt, Tempo anpassen</p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ VERBESSERN: EINGABE ============ -->
|
||||
<div class="screen" id="improve-input">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('improve-select')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>„Mara" verbessern</h1></div>
|
||||
<div class="pill-row">
|
||||
<div class="pill on" onclick="pick(this)">Text-Feedback</div>
|
||||
<div class="pill" onclick="pick(this)">Referenz hochladen</div>
|
||||
</div>
|
||||
<label style="margin-top:10px;">Was soll besser werden?</label>
|
||||
<textarea>Haare etwas dunkler, Ausstrahlung natürlicher, weniger Studio-Look.</textarea>
|
||||
<div class="card" style="border-style:dashed;">
|
||||
<p style="margin-bottom:8px;"><span class="hl">Bei Referenz-Upload:</span></p>
|
||||
<div class="ph"><svg class="ic"><use href="#i-up"/></svg><span>[Upload: Referenzbild]</span></div>
|
||||
<label>Was soll aus der Referenz übernommen werden? <span class="req">* Pflichtfeld</span></label>
|
||||
<input type="text" placeholder="z. B. nur die Frisur und der Hautton – nicht das Gesicht" style="margin-bottom:0;">
|
||||
<div class="note">Ohne Beschreibung rät das System, was gemeint ist, und kopiert das Falsche. Aus fremden Referenzen wird gelernt, nie 1:1 kopiert.</div>
|
||||
</div>
|
||||
<button class="btn" onclick="go('improve-results')">Neue Versionen generieren</button>
|
||||
</div>
|
||||
|
||||
<!-- ============ VERBESSERN: VORHER/NACHHER ============ -->
|
||||
<div class="screen" id="improve-results">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('improve-input')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Vorher / Nachher</h1></div>
|
||||
<h3>Vorher (v3 – aktuell freigegeben)</h3>
|
||||
<div class="ph"><svg class="ic"><use href="#i-img"/></svg><span>[BILD: Mara v3 – schulterlange dunkle Haare, Studio-Look]</span></div>
|
||||
<h3>Wähle die neue Version</h3>
|
||||
<p class="sub" style="margin-bottom:12px;">Jede Version zieht andere Vorlieben aus deiner Knowledge Base.</p>
|
||||
|
||||
<div class="card click" onclick="go('improve-vote')">
|
||||
<h4 class="t-sm">Version A</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-img"/></svg><span>[BILD: Haare fast schwarz, Tageslicht statt Studio, dezentes Lächeln]</span></div>
|
||||
<span class="tag">Tageslicht <span class="score">5210</span></span><span class="tag">dezent</span>
|
||||
</div>
|
||||
<div class="card click" onclick="go('improve-vote')">
|
||||
<h4 class="t-sm">Version B</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-img"/></svg><span>[BILD: Dunkelbraune Haare, warmes Abendlicht (Top-Attribut!), offenes Lachen]</span></div>
|
||||
<span class="tag">warmes Abendlicht <span class="score">6350</span></span><span class="tag">offen</span>
|
||||
</div>
|
||||
<div class="card click" onclick="go('improve-vote')">
|
||||
<h4 class="t-sm">Version C</h4>
|
||||
<div class="ph"><svg class="ic"><use href="#i-img"/></svg><span>[BILD: Wie v3, aber Outdoor-Hintergrund unscharf, natürlichere Haut-Textur]</span></div>
|
||||
<span class="tag">Outdoor <span class="score">5580</span></span><span class="tag">natürliche Haut <span class="badge b-new">NEU · Start 5720 (Ø Kategorie)</span></span>
|
||||
</div>
|
||||
<div class="note">Gewinner-Merkmale steigen in der Elo gegenüber der ersetzten Version – aber nur Merkmale, in denen sich die Versionen <span class="hl">unterscheiden</span>. Neue Merkmale starten beim Kategorie-Durchschnitt (nicht bei 5000) mit hohem K-Faktor.</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ VERBESSERN: VOTE ============ -->
|
||||
<div class="screen" id="improve-vote">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('improve-results')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Version gewählt</h1></div>
|
||||
<div class="card" style="border-color:rgba(52,211,153,.4);">
|
||||
<h4><span class="badge b-ok">MARA v4 ERSTELLT</span></h4>
|
||||
<p style="margin-top:8px;">Versionskette geloggt: v3 → v4 · Grund: „Haare dunkler, natürlicher" · Gewinner: Version B</p>
|
||||
<p style="margin-top:6px;">Elo-Update: <b style="color:var(--gold);">warmes Abendlicht +14</b> · Studio-Look −14</p>
|
||||
</div>
|
||||
<button class="btn" onclick="go('knowledge')"><svg class="ic"><use href="#i-check"/></svg>v4 freigeben (ab jetzt in Videos)</button>
|
||||
<button class="btn sec" onclick="go('improve-input')"><svg class="ic"><use href="#i-spark"/></svg>Weiter verbessern (v5)</button>
|
||||
<div class="note">Bis zur Freigabe nutzen alle Videos weiterhin v3 – Wiedererkennung bleibt erhalten, und es bleibt messbar, welche Version performt.</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ KNOWLEDGE BASE ============ -->
|
||||
<div class="screen" id="knowledge">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('home')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Knowledge Base</h1></div>
|
||||
|
||||
<h3>Feste Regeln <span style="text-transform:none; letter-spacing:0; color:var(--faint); font-weight:500;">(kein Score, gelten immer)</span></h3>
|
||||
<div class="card">
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Cleaner Hintergrund</p></div>
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Nur zeigen, was verlangt ist</p></div>
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Logo nie verzerren</p></div>
|
||||
</div>
|
||||
|
||||
<h3>Assets (freigegebene Versionen)</h3>
|
||||
<div class="card">
|
||||
<div class="asset"><svg class="ic"><use href="#i-user"/></svg><span>Mara <span class="badge b-ok">v4</span></span><span class="score">6120</span></div>
|
||||
<div class="asset"><svg class="ic"><use href="#i-box"/></svg><span>Rouge No. 5 <span class="badge b-ok">v2</span></span><span class="score">6480</span></div>
|
||||
</div>
|
||||
|
||||
<h3>Attribute (Elo 0–10.000)</h3>
|
||||
<div class="card click" onclick="go('kb-detail')">
|
||||
<div class="cardrow">
|
||||
<div class="ico rose"><svg class="ic"><use href="#i-pin"/></svg></div>
|
||||
<div class="body"><h4 class="t-sm">Location: Kaiserslautern <span class="score">5240 ▲</span></h4><p>12 Videos · 8 Siege · Unter-Attribut: Stadion <span class="score">5560</span></p></div>
|
||||
<svg class="ic chev"><use href="#i-chev"/></svg>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="cardrow">
|
||||
<div class="ico zinc"><svg class="ic"><use href="#i-pin"/></svg></div>
|
||||
<div class="body"><h4 class="t-sm">Location: Köln <span class="score" style="color:var(--faint);">4980 ▼</span> <span class="badge b-arch">ARCHIVIERT</span></h4><p>Historie bleibt erhalten – ein schlechter Score ist auch Wissen.</p></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="asset"><svg class="ic"><use href="#i-bulb"/></svg><span>Licht: warmes Abendlicht</span><span class="score">6350 ▲</span></div>
|
||||
<div class="asset"><svg class="ic"><use href="#i-mic"/></svg><span>Voice: warm-weiblich</span><span class="score">5890</span></div>
|
||||
</div>
|
||||
|
||||
<h3>Log (letzte Einträge)</h3>
|
||||
<div class="log">19.07. · Vote „Verbessern Mara v4": warmes Abendlicht +14 (K hoch), Studio-Look −14</div>
|
||||
<div class="log">18.07. · Ad-Performance Video #31: Kaiserslautern +22, Close-up +22 <b style="color:#fb923c;">(Performance zählt 2×)</b></div>
|
||||
<div class="log">17.07. · Gezielte Frage: „Kaiserslautern besser als Köln" → K'lautern +10, Köln −10</div>
|
||||
<div class="log">17.07. · LLM-Vergleich K'lautern vs. Köln: „Stadion war der Unterschied" → neues Unter-Attribut Stadion (Start: Ø 5480)</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ KB DETAIL ============ -->
|
||||
<div class="screen" id="kb-detail">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('knowledge')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Kaiserslautern</h1></div>
|
||||
<div class="card">
|
||||
<h4>Score: <span class="score">5240</span> · 12 Videos · 8 Siege</h4>
|
||||
<p style="margin-top:10px;"><span class="hl">Was diese Location ausmacht:</span><br>Urban, aber nahbar; Stadion als Wiedererkennungspunkt. Warmes Abendlicht funktioniert besser als Tageslicht.</p>
|
||||
<p style="margin-top:10px;"><span class="hl">Gelernt aus Vergleichen:</span><br>vs. Köln (12.07.): Stadion-Hintergrund war der Unterschied → Stadion als eigenes Unter-Attribut angelegt.</p>
|
||||
</div>
|
||||
<h3>Score-Verlauf</h3>
|
||||
<div class="log">Start 5000 → 5090 (Votes) → 5180 (Ad-Performance) → 5240 (heute)</div>
|
||||
<div class="note">Vollständige Historie pro Attribut: jeder Vote mit Datum, Vergleichspartner, Punktänderung und Grund. Ablesbar, was besser und was schlechter geworden ist.</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ DEVELOPER-MODUS ============ -->
|
||||
<div class="screen" id="devmode">
|
||||
<div class="topbar"><button class="iconbtn" onclick="go('home')" aria-label="Zurück"><svg class="ic"><use href="#i-back"/></svg></button><h1>Developer-Modus</h1></div>
|
||||
<div class="card" style="border-color:rgba(249,115,22,.4);">
|
||||
<div class="cardrow">
|
||||
<div class="ico orange"><svg class="ic"><use href="#i-lock"/></svg></div>
|
||||
<div class="body"><p><b style="color:#fb923c;">Nur intern.</b> Dieser Bereich ist für Nutzer unsichtbar – hier liegt das Feintuning, das die App ausmacht. Im Prototyp zur Präsentation sichtbar geschaltet.</p></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Feste Regeln (Prompt-Injection, jede Generierung)</h3>
|
||||
<div class="card">
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Cleaner, neutraler Hintergrund</p></div>
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Nur zeigen, was verlangt ist – nicht mehr, nicht weniger</p></div>
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Logo nie verzerren oder umfärben</p></div>
|
||||
<div class="rule"><svg class="ic"><use href="#i-check"/></svg><p style="color:var(--txt);">Aus fremden Referenzen lernen, nie 1:1 kopieren</p></div>
|
||||
</div>
|
||||
<input type="text" placeholder="+ Regel hinzufügen …">
|
||||
<div class="note" style="margin-top:0;">Regeln nehmen nicht am Scoring teil und können nicht absteigen. Der Nutzer sieht und verwaltet sie nicht – sie sind Teil des Produkts.</div>
|
||||
|
||||
<h3>Prompt-Einblick (letzte Generierung)</h3>
|
||||
<div class="code">[SYSTEM] Regeln: cleaner Hintergrund; nur Verlangtes zeigen; Logo unverändert …<br>[ASSETS] Gesicht: Mara v3 (ref_0231) · Produkt: Rouge No. 5 v2 (ref_0198)<br>[ATTRIBUTE] Location: Kaiserslautern (5240) · Licht: warmes Abendlicht (6350) · Voice: warm-weiblich (5890)<br>[SCRIPT] Close-up: Hand hebt Lippenstift frontal … Voice: „Dein Rot. Dein Statement."<br><b>[USER-PROMPT]</b> Eine Frau hält einen roten Lippenstift in die Kamera.</div>
|
||||
|
||||
<h3>Elo-Parameter</h3>
|
||||
<div class="row">
|
||||
<div class="card metric"><p>K-Faktor neu</p><h4>32</h4></div>
|
||||
<div class="card metric"><p>K-Faktor etabliert</p><h4>8</h4></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="card metric"><p>Performance : Vote</p><h4>2 : 1</h4></div>
|
||||
<div class="card metric"><p>Favorit bestätigt</p><h4>× 0,3</h4></div>
|
||||
</div>
|
||||
<div class="card"><p>Startwert neuer Einträge: <span class="hl">Kategorie-Durchschnitt</span> (Fallback 5000, wenn Kategorie leer)</p></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ============ NAVIGATION ============ -->
|
||||
<nav class="nav">
|
||||
<button id="n-home" class="on" onclick="go('home')"><svg class="ic"><use href="#i-home"/></svg><span>Home</span></button>
|
||||
<button id="n-create" onclick="go('create-choice')"><svg class="ic"><use href="#i-plus"/></svg><span>Erstellen</span></button>
|
||||
<button id="n-improve" onclick="go('improve-select')"><svg class="ic"><use href="#i-spark"/></svg><span>Verbessern</span></button>
|
||||
<button id="n-kb" onclick="go('knowledge')"><svg class="ic"><use href="#i-db"/></svg><span>Knowledge</span></button>
|
||||
<button id="n-dev" onclick="go('devmode')" style="opacity:.4;" title="Nur intern sichtbar"><svg class="ic"><use href="#i-gear"/></svg><span>Dev</span></button>
|
||||
</nav>
|
||||
|
||||
<!-- ============ INFO-SHEET (Präsentationsnotizen) ============ -->
|
||||
<div class="backdrop" id="backdrop" onclick="toggleInfo(false)"></div>
|
||||
<div class="sheet" id="infoSheet">
|
||||
<div class="grab"></div>
|
||||
<h2>BrandLoop – Prototyp</h2>
|
||||
<p><b>Textversion:</b> Alle Bilder & Videos sind durch Beschreibungen (gestrichelte Boxen) ersetzt. Alles ist klickbar.</p>
|
||||
<p style="margin-bottom:6px;"><b>Prinzipien:</b></p>
|
||||
<ul>
|
||||
<li>Start ohne Fragen – Profil erst beim ersten „Erstellen", tutorial-artig</li>
|
||||
<li>Script mit Bestätigung vor jeder Generierung</li>
|
||||
<li>Favorit dezent umrandet (gold)</li>
|
||||
<li>Verbessern jederzeit auf jedes Asset</li>
|
||||
<li>Feste Regeln + Prompt-Einblick + Elo-Parameter im versteckten Developer-Modus (das App-Geheimnis)</li>
|
||||
</ul>
|
||||
<p style="margin-bottom:0;"><b>Klickpfad zum Präsentieren:</b><br>Home → Erstellen → Tutorial/Profil → Szene → Script → Auswahl → Frage → Knowledge Base → Verbessern → Dev-Modus</p>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function go(id){
|
||||
document.querySelectorAll('.screen').forEach(s=>s.classList.remove('active'));
|
||||
document.getElementById(id).classList.add('active');
|
||||
const map={home:'n-home','create-choice':'n-create','improve-select':'n-improve',knowledge:'n-kb',devmode:'n-dev'};
|
||||
document.querySelectorAll('.nav button').forEach(b=>b.classList.remove('on'));
|
||||
if(map[id]) document.getElementById(map[id]).classList.add('on');
|
||||
window.scrollTo(0,0);
|
||||
}
|
||||
function pick(el){
|
||||
el.parentElement.querySelectorAll('.pill').forEach(p=>p.classList.remove('on'));
|
||||
el.classList.add('on');
|
||||
}
|
||||
function toggleInfo(open){
|
||||
document.getElementById('backdrop').classList.toggle('open',open);
|
||||
document.getElementById('infoSheet').classList.toggle('open',open);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user